diff --git a/.gitmodules b/.gitmodules index fe68f3d7..31a788ee 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,9 +25,6 @@ [submodule "vendor/grammars/Sublime-REBOL"] path = vendor/grammars/Sublime-REBOL url = https://github.com/Oldes/Sublime-REBOL -[submodule "vendor/grammars/Sublime-Inform"] - path = vendor/grammars/Sublime-Inform - url = https://github.com/PogiNate/Sublime-Inform [submodule "vendor/grammars/autoitv3-tmbundle"] path = vendor/grammars/autoitv3-tmbundle url = https://github.com/Red-Nova-Technologies/autoitv3-tmbundle @@ -85,6 +82,9 @@ [submodule "vendor/grammars/language-shellscript"] path = vendor/grammars/language-shellscript url = https://github.com/atom/language-shellscript +[submodule "vendor/grammars/language-supercollider"] + path = vendor/grammars/language-supercollider + url = https://github.com/supercollider/language-supercollider [submodule "vendor/grammars/language-yaml"] path = vendor/grammars/language-yaml url = https://github.com/atom/language-yaml @@ -96,7 +96,7 @@ url = https://github.com/bfad/Sublime-Lasso [submodule "vendor/grammars/chapel-tmbundle"] path = vendor/grammars/chapel-tmbundle - url = https://github.com/bholt/chapel-tmbundle + url = https://github.com/chapel-lang/chapel-tmbundle [submodule "vendor/grammars/sublime-nginx"] path = vendor/grammars/sublime-nginx url = https://github.com/brandonwamboldt/sublime-nginx @@ -112,21 +112,15 @@ [submodule "vendor/grammars/nesC.tmbundle"] path = vendor/grammars/nesC.tmbundle url = https://github.com/cdwilson/nesC.tmbundle -[submodule "vendor/grammars/racket-tmbundle"] - path = vendor/grammars/racket-tmbundle - url = https://github.com/christophevg/racket-tmbundle [submodule "vendor/grammars/haxe-sublime-bundle"] path = vendor/grammars/haxe-sublime-bundle url = https://github.com/clemos/haxe-sublime-bundle [submodule "vendor/grammars/cucumber-tmbundle"] path = vendor/grammars/cucumber-tmbundle url = https://github.com/cucumber/cucumber-tmbundle -[submodule "vendor/grammars/Handlebars"] - path = vendor/grammars/Handlebars - url = https://github.com/daaain/Handlebars -[submodule "vendor/grammars/powershell.tmbundle"] - path = vendor/grammars/powershell.tmbundle - url = https://github.com/davidpeckham/powershell.tmbundle +[submodule "vendor/grammars/powershell"] + path = vendor/grammars/powershell + url = https://github.com/SublimeText/PowerShell [submodule "vendor/grammars/jade-tmbundle"] path = vendor/grammars/jade-tmbundle url = https://github.com/davidrios/jade-tmbundle @@ -139,9 +133,6 @@ [submodule "vendor/grammars/fancy-tmbundle"] path = vendor/grammars/fancy-tmbundle url = https://github.com/fancy-lang/fancy-tmbundle -[submodule "vendor/grammars/fsharpbinding"] - path = vendor/grammars/fsharpbinding - url = https://github.com/fsharp/fsharpbinding [submodule "vendor/grammars/monkey.tmbundle"] path = vendor/grammars/monkey.tmbundle url = https://github.com/gingerbeardman/monkey.tmbundle @@ -172,18 +163,12 @@ [submodule "vendor/grammars/Textmate-Gosu-Bundle"] path = vendor/grammars/Textmate-Gosu-Bundle url = https://github.com/jpcamara/Textmate-Gosu-Bundle -[submodule "vendor/grammars/jquery-tmbundle"] - path = vendor/grammars/jquery-tmbundle - url = https://github.com/kswedberg/jquery-tmbundle [submodule "vendor/grammars/fish-tmbundle"] path = vendor/grammars/fish-tmbundle url = https://github.com/l15n/fish-tmbundle [submodule "vendor/grammars/sublime-idris"] path = vendor/grammars/sublime-idris url = https://github.com/laughedelic/sublime-idris -[submodule "vendor/grammars/sublime-better-typescript"] - path = vendor/grammars/sublime-better-typescript - url = https://github.com/lavrton/sublime-better-typescript [submodule "vendor/grammars/moonscript-tmbundle"] path = vendor/grammars/moonscript-tmbundle url = https://github.com/leafo/moonscript-tmbundle @@ -252,7 +237,7 @@ url = https://github.com/shellderp/sublime-robot-plugin [submodule "vendor/grammars/actionscript3-tmbundle"] path = vendor/grammars/actionscript3-tmbundle - url = https://github.com/simongregory/actionscript3-tmbundle + url = https://github.com/honzabrecka/actionscript3-tmbundle [submodule "vendor/grammars/Sublime-QML"] path = vendor/grammars/Sublime-QML url = https://github.com/skozlovf/Sublime-QML @@ -268,9 +253,6 @@ [submodule "vendor/grammars/SublimeXtend"] path = vendor/grammars/SublimeXtend url = https://github.com/staltz/SublimeXtend -[submodule "vendor/grammars/Stata.tmbundle"] - path = vendor/grammars/Stata.tmbundle - url = https://github.com/statatmbundle/Stata.tmbundle [submodule "vendor/grammars/Vala-TMBundle"] path = vendor/grammars/Vala-TMBundle url = https://github.com/technosophos/Vala-TMBundle @@ -340,15 +322,15 @@ [submodule "vendor/grammars/ini.tmbundle"] path = vendor/grammars/ini.tmbundle url = https://github.com/textmate/ini.tmbundle +[submodule "vendor/grammars/desktop.tmbundle"] + path = vendor/grammars/desktop.tmbundle + url = https://github.com/Mailaender/desktop.tmbundle.git [submodule "vendor/grammars/io.tmbundle"] path = vendor/grammars/io.tmbundle url = https://github.com/textmate/io.tmbundle [submodule "vendor/grammars/java.tmbundle"] path = vendor/grammars/java.tmbundle url = https://github.com/textmate/java.tmbundle -[submodule "vendor/grammars/javadoc.tmbundle"] - path = vendor/grammars/javadoc.tmbundle - url = https://github.com/textmate/javadoc.tmbundle [submodule "vendor/grammars/javascript-objective-j.tmbundle"] path = vendor/grammars/javascript-objective-j.tmbundle url = https://github.com/textmate/javascript-objective-j.tmbundle @@ -358,9 +340,6 @@ [submodule "vendor/grammars/latex.tmbundle"] path = vendor/grammars/latex.tmbundle url = https://github.com/textmate/latex.tmbundle -[submodule "vendor/grammars/less.tmbundle"] - path = vendor/grammars/less.tmbundle - url = https://github.com/textmate/less.tmbundle [submodule "vendor/grammars/lilypond.tmbundle"] path = vendor/grammars/lilypond.tmbundle url = https://github.com/textmate/lilypond.tmbundle @@ -397,9 +376,6 @@ [submodule "vendor/grammars/pascal.tmbundle"] path = vendor/grammars/pascal.tmbundle url = https://github.com/textmate/pascal.tmbundle -[submodule "vendor/grammars/perl.tmbundle"] - path = vendor/grammars/perl.tmbundle - url = https://github.com/textmate/perl.tmbundle [submodule "vendor/grammars/php-smarty.tmbundle"] path = vendor/grammars/php-smarty.tmbundle url = https://github.com/textmate/php-smarty.tmbundle @@ -412,9 +388,6 @@ [submodule "vendor/grammars/processing.tmbundle"] path = vendor/grammars/processing.tmbundle url = https://github.com/textmate/processing.tmbundle -[submodule "vendor/grammars/prolog.tmbundle"] - path = vendor/grammars/prolog.tmbundle - url = https://github.com/textmate/prolog.tmbundle [submodule "vendor/grammars/python-django.tmbundle"] path = vendor/grammars/python-django.tmbundle url = https://github.com/textmate/python-django.tmbundle @@ -427,9 +400,6 @@ [submodule "vendor/grammars/ruby-haml.tmbundle"] path = vendor/grammars/ruby-haml.tmbundle url = https://github.com/textmate/ruby-haml.tmbundle -[submodule "vendor/grammars/ruby-on-rails-tmbundle"] - path = vendor/grammars/ruby-on-rails-tmbundle - url = https://github.com/textmate/ruby-on-rails-tmbundle [submodule "vendor/grammars/scheme.tmbundle"] path = vendor/grammars/scheme.tmbundle url = https://github.com/textmate/scheme.tmbundle @@ -448,15 +418,6 @@ [submodule "vendor/grammars/tcl.tmbundle"] path = vendor/grammars/tcl.tmbundle url = https://github.com/textmate/tcl.tmbundle -[submodule "vendor/grammars/text.tmbundle"] - path = vendor/grammars/text.tmbundle - url = https://github.com/textmate/text.tmbundle -[submodule "vendor/grammars/textile.tmbundle"] - path = vendor/grammars/textile.tmbundle - url = https://github.com/textmate/textile.tmbundle -[submodule "vendor/grammars/textmate.tmbundle"] - path = vendor/grammars/textmate.tmbundle - url = https://github.com/textmate/textmate.tmbundle [submodule "vendor/grammars/thrift.tmbundle"] path = vendor/grammars/thrift.tmbundle url = https://github.com/textmate/thrift.tmbundle @@ -490,10 +451,6 @@ [submodule "vendor/grammars/sublime-nix"] path = vendor/grammars/sublime-nix url = https://github.com/wmertens/sublime-nix -[submodule "vendor/grammars/ada.tmbundle"] - path = vendor/grammars/ada.tmbundle - url = https://github.com/aroben/ada.tmbundle - branch = better-with-highlighting [submodule "vendor/grammars/oz-tmbundle"] path = vendor/grammars/oz-tmbundle url = https://github.com/eregon/oz-tmbundle @@ -528,9 +485,234 @@ [submodule "vendor/grammars/sublime-bsv"] path = vendor/grammars/sublime-bsv url = https://github.com/thotypous/sublime-bsv +[submodule "vendor/grammars/Sublime-HTTP"] + path = vendor/grammars/Sublime-HTTP + url = https://github.com/httpspec/sublime-highlighting [submodule "vendor/grammars/sass-textmate-bundle"] path = vendor/grammars/sass-textmate-bundle url = https://github.com/nathos/sass-textmate-bundle [submodule "vendor/grammars/carto-atom"] path = vendor/grammars/carto-atom url = https://github.com/yohanboniface/carto-atom +[submodule "vendor/grammars/Sublime-Nit"] + path = vendor/grammars/Sublime-Nit + url = https://github.com/R4PaSs/Sublime-Nit +[submodule "vendor/grammars/language-hy"] + path = vendor/grammars/language-hy + url = https://github.com/rwtolbert/language-hy +[submodule "vendor/grammars/Racket"] + path = vendor/grammars/Racket + url = https://github.com/soegaard/racket-highlight-for-github +[submodule "vendor/grammars/turtle.tmbundle"] + path = vendor/grammars/turtle.tmbundle + url = https://github.com/peta/turtle.tmbundle +[submodule "vendor/grammars/liquid.tmbundle"] + path = vendor/grammars/liquid.tmbundle + url = https://github.com/bastilian/validcode-textmate-bundles +[submodule "vendor/grammars/ats.sublime"] + path = vendor/grammars/ats.sublime + url = https://github.com/steinwaywhw/ats-mode-sublimetext +[submodule "vendor/grammars/Modelica"] + path = vendor/grammars/Modelica + url = https://github.com/BorisChumichev/modelicaSublimeTextPackage +[submodule "vendor/grammars/sublime-apl"] + path = vendor/grammars/sublime-apl + url = https://github.com/StoneCypher/sublime-apl +[submodule "vendor/grammars/CLIPS-sublime"] + path = vendor/grammars/CLIPS-sublime + url = https://github.com/psicomante/CLIPS-sublime +[submodule "vendor/grammars/Creole"] + path = vendor/grammars/Creole + url = https://github.com/Siddley/Creole +[submodule "vendor/grammars/GDScript-sublime"] + path = vendor/grammars/GDScript-sublime + url = https://github.com/beefsack/GDScript-sublime +[submodule "vendor/grammars/sublime-golo"] + path = vendor/grammars/sublime-golo + url = https://github.com/TypeUnsafe/sublime-golo +[submodule "vendor/grammars/JSyntax"] + path = vendor/grammars/JSyntax + url = https://github.com/bcj/JSyntax +[submodule "vendor/grammars/TXL"] + path = vendor/grammars/TXL + url = https://github.com/MikeHoffert/Sublime-Text-TXL-syntax +[submodule "vendor/grammars/G-Code"] + path = vendor/grammars/G-Code + url = https://github.com/robotmaster/sublime-text-syntax-highlighting +[submodule "vendor/grammars/grace-tmbundle"] + path = vendor/grammars/grace-tmbundle + url = https://github.com/zmthy/grace-tmbundle +[submodule "vendor/grammars/sublime-text-ox"] + path = vendor/grammars/sublime-text-ox + url = https://github.com/andreashetland/sublime-text-ox +[submodule "vendor/grammars/AutoHotkey"] + path = vendor/grammars/AutoHotkey + url = https://github.com/ahkscript/SublimeAutoHotkey +[submodule "vendor/grammars/ec.tmbundle"] + path = vendor/grammars/ec.tmbundle + url = https://github.com/ecere/ec.tmbundle +[submodule "vendor/grammars/InnoSetup"] + path = vendor/grammars/InnoSetup + url = https://github.com/idleberg/InnoSetup-Sublime-Text +[submodule "vendor/grammars/gap-tmbundle"] + path = vendor/grammars/gap-tmbundle + url = https://github.com/dhowden/gap-tmbundle +[submodule "vendor/grammars/SublimePapyrus"] + path = vendor/grammars/SublimePapyrus + url = https://github.com/Kapiainen/SublimePapyrus +[submodule "vendor/grammars/sublime-spintools"] + path = vendor/grammars/sublime-spintools + url = https://github.com/bitbased/sublime-spintools +[submodule "vendor/grammars/PogoScript.tmbundle"] + path = vendor/grammars/PogoScript.tmbundle + url = https://github.com/featurist/PogoScript.tmbundle +[submodule "vendor/grammars/sublime-opal"] + path = vendor/grammars/sublime-opal + url = https://github.com/artifactz/sublime-opal +[submodule "vendor/grammars/mediawiki.tmbundle"] + path = vendor/grammars/mediawiki.tmbundle + url = https://github.com/textmate/mediawiki.tmbundle +[submodule "vendor/grammars/SublimeClarion"] + path = vendor/grammars/SublimeClarion + url = https://github.com/fushnisoft/SublimeClarion +[submodule "vendor/grammars/oracle.tmbundle"] + path = vendor/grammars/oracle.tmbundle + url = https://github.com/mulander/oracle.tmbundle.git +[submodule "vendor/grammars/BrightScript.tmbundle"] + path = vendor/grammars/BrightScript.tmbundle + url = https://github.com/cmink/BrightScript.tmbundle +[submodule "vendor/grammars/Stylus"] + path = vendor/grammars/Stylus + url = https://github.com/billymoon/Stylus +[submodule "vendor/grammars/asciidoc.tmbundle"] + path = vendor/grammars/asciidoc.tmbundle + url = https://github.com/zuckschwerdt/asciidoc.tmbundle +[submodule "vendor/grammars/sublime-text-pig-latin"] + path = vendor/grammars/sublime-text-pig-latin + url = https://github.com/goblindegook/sublime-text-pig-latin +[submodule "vendor/grammars/Lean.tmbundle"] + path = vendor/grammars/Lean.tmbundle + url = https://github.com/leanprover/Lean.tmbundle +[submodule "vendor/grammars/ampl"] + path = vendor/grammars/ampl + url = https://github.com/ampl/sublime-ampl +[submodule "vendor/grammars/openscad.tmbundle"] + path = vendor/grammars/openscad.tmbundle + url = https://github.com/tbuser/openscad.tmbundle +[submodule "vendor/grammars/sublime-varnish"] + path = vendor/grammars/sublime-varnish + url = https://github.com/brandonwamboldt/sublime-varnish +[submodule "vendor/grammars/xc.tmbundle"] + path = vendor/grammars/xc.tmbundle + url = https://github.com/graymalkin/xc.tmbundle +[submodule "vendor/grammars/perl.tmbundle"] + path = vendor/grammars/perl.tmbundle + url = https://github.com/textmate/perl.tmbundle +[submodule "vendor/grammars/sublime-netlinx"] + path = vendor/grammars/sublime-netlinx + url = https://github.com/amclain/sublime-netlinx +[submodule "vendor/grammars/Sublime-Red"] + path = vendor/grammars/Sublime-Red + url = https://github.com/Oldes/Sublime-Red +[submodule "vendor/grammars/jflex.tmbundle"] + path = vendor/grammars/jflex.tmbundle + url = https://github.com/jflex-de/jflex.tmbundle.git +[submodule "vendor/grammars/Sublime-Modula-2"] + path = vendor/grammars/Sublime-Modula-2 + url = https://github.com/harogaston/Sublime-Modula-2 +[submodule "vendor/grammars/ada.tmbundle"] + path = vendor/grammars/ada.tmbundle + url = https://github.com/textmate/ada.tmbundle +[submodule "vendor/grammars/api-blueprint-sublime-plugin"] + path = vendor/grammars/api-blueprint-sublime-plugin + url = https://github.com/apiaryio/api-blueprint-sublime-plugin +[submodule "vendor/grammars/Handlebars"] + path = vendor/grammars/Handlebars + url = https://github.com/daaain/Handlebars +[submodule "vendor/grammars/smali-sublime"] + path = vendor/grammars/smali-sublime + url = https://github.com/ShaneWilton/sublime-smali +[submodule "vendor/grammars/language-jsoniq"] + path = vendor/grammars/language-jsoniq + url = http://github.com/wcandillon/language-jsoniq +[submodule "vendor/grammars/atom-fsharp"] + path = vendor/grammars/atom-fsharp + url = https://github.com/fsprojects/atom-fsharp +[submodule "vendor/grammars/SMT.tmbundle"] + path = vendor/grammars/SMT.tmbundle + url = https://github.com/SRI-CSL/SMT.tmbundle.git +[submodule "vendor/grammars/language-crystal"] + path = vendor/grammars/language-crystal + url = https://github.com/atom-crystal/language-crystal +[submodule "vendor/grammars/language-xbase"] + path = vendor/grammars/language-xbase + url = https://github.com/hernad/atom-language-harbour +[submodule "vendor/grammars/language-ncl"] + path = vendor/grammars/language-ncl + url = https://github.com/rpavlick/language-ncl.git +[submodule "vendor/grammars/atom-language-purescript"] + path = vendor/grammars/atom-language-purescript + url = https://github.com/purescript-contrib/atom-language-purescript +[submodule "vendor/grammars/vue-syntax-highlight"] + path = vendor/grammars/vue-syntax-highlight + url = https://github.com/vuejs/vue-syntax-highlight +[submodule "vendor/grammars/st2-zonefile"] + path = vendor/grammars/st2-zonefile + url = https://github.com/sixty4k/st2-zonefile +[submodule "vendor/grammars/sublimeprolog"] + path = vendor/grammars/sublimeprolog + url = https://github.com/alnkpa/sublimeprolog +[submodule "vendor/grammars/sublime-aspectj"] + path = vendor/grammars/sublime-aspectj + url = https://github.com/pchaigno/sublime-aspectj +[submodule "vendor/grammars/sublime-typescript"] + path = vendor/grammars/sublime-typescript + url = https://github.com/Microsoft/TypeScript-Sublime-Plugin +[submodule "vendor/grammars/sublime-pony"] + path = vendor/grammars/sublime-pony + url = https://github.com/CausalityLtd/sublime-pony +[submodule "vendor/grammars/X10"] + path = vendor/grammars/X10 + url = https://github.com/x10-lang/x10-highlighting +[submodule "vendor/grammars/language-babel"] + path = vendor/grammars/language-babel + url = https://github.com/gandm/language-babel +[submodule "vendor/grammars/UrWeb-Language-Definition"] + path = vendor/grammars/UrWeb-Language-Definition + url = https://github.com/gwalborn/UrWeb-Language-Definition.git +[submodule "vendor/grammars/Stata.tmbundle"] + path = vendor/grammars/Stata.tmbundle + url = https://github.com/pschumm/Stata.tmbundle +[submodule "vendor/grammars/FreeMarker.tmbundle"] + path = vendor/grammars/FreeMarker.tmbundle + url = https://github.com/freemarker/FreeMarker.tmbundle +[submodule "vendor/grammars/MagicPython"] + path = vendor/grammars/MagicPython + url = https://github.com/MagicStack/MagicPython +[submodule "vendor/grammars/language-click"] + path = vendor/grammars/language-click + url = https://github.com/stenverbois/language-click.git +[submodule "vendor/grammars/language-maxscript"] + path = vendor/grammars/language-maxscript + url = https://github.com/Alhadis/language-maxscript +[submodule "vendor/grammars/language-renpy"] + path = vendor/grammars/language-renpy + url = https://github.com/williamd1k0/language-renpy.git +[submodule "vendor/grammars/language-inform7"] + path = vendor/grammars/language-inform7 + url = https://github.com/erkyrath/language-inform7 +[submodule "vendor/grammars/atom-language-stan"] + path = vendor/grammars/atom-language-stan + url = https://github.com/jrnold/atom-language-stan +[submodule "vendor/grammars/language-yang"] + path = vendor/grammars/language-yang + url = https://github.com/DzonyKalafut/language-yang.git +[submodule "vendor/grammars/perl6fe"] + path = vendor/grammars/perl6fe + url = https://github.com/MadcapJake/language-perl6fe.git +[submodule "vendor/grammars/language-less"] + path = vendor/grammars/language-less + url = https://github.com/atom/language-less.git +[submodule "vendor/grammars/language-povray"] + path = vendor/grammars/language-povray + url = https://github.com/c-lipka/language-povray diff --git a/.travis.yml b/.travis.yml index 4d0c2351..80d68e84 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,12 @@ +language: ruby sudo: false +addons: + apt: + packages: + - libicu-dev + - libicu48 before_install: script/travis/before_install rvm: - - 1.9.3 - 2.0.0 - 2.1 - 2.2 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b6b682f6..56ef275f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,41 +1,105 @@ -## Contributing +# Contributing -The majority of contributions won't need to touch any Ruby code at all. The [master language list][languages] is just a YAML configuration file. +[code-of-conduct]: http://todogroup.org/opencodeofconduct/#Linguist/opensource@github.com -Almost all bug fixes or new language additions should come with some additional code samples. Just drop them under [`samples/`][samples] in the correct subdirectory and our test suite will automatically test them. In most cases you shouldn't need to add any new assertions. +Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to uphold this code. -### My code is detected as the wrong language +The majority of contributions won't need to touch any Ruby code at all. -This can usually be solved either by adding a new filename or file name extension to the language's entry in [`languages.yml`][languages] or adding more [samples][samples] for your language to the repository to make Linguist's classifier smarter. +## Adding an extension to a language -### Syntax highlighting looks wrong +We try only to add new extensions once they have some usage on GitHub. In most cases we prefer that extensions be in use in hundreds of repositories before supporting them in Linguist. -Assuming your code is being detected as the right language (see above), in most cases this is due to a bug in the language grammar rather than a bug in Linguist. [`grammars.yml`][grammars] lists all the grammars we use for syntax highlighting on github.com. Find the one corresponding to your code's programming language and submit a bug report upstream. If you can, try to reproduce the highlighting problem in the text editor that the grammar is designed for (TextMate, Sublime Text, or Atom) and include that information in your bug report. +To add support for a new extension: -You can also try to fix the bug yourself and submit a Pull Request. [This piece from TextMate's documentation](http://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://lightshow.githubapp.com). +0. Add your extension to the language entry in [`languages.yml`][languages], keeping the extensions in alphabetical order. +0. Add at least one sample for your extension to the [samples directory][samples] in the correct subdirectory. +0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage. -Once the bug has been fixed upstream, please let us know and we'll pick it up for GitHub. +In addition, if this extension is already listed in [`languages.yml`][languages] then sometimes a few more steps will need to be taken: -### I want to add support for the `X` programming language +0. Make sure that example `.yourextension` files are present in the [samples directory][samples] for each language that uses `.yourextension`. +0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files. +0. If the Bayesian classifier does a bad job with the sample `.yourextension` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help. -Great! You'll need to: + +## Adding a language + +We try only to add languages once they have some usage on GitHub. In most cases we prefer that each new file extension be in use in hundreds of repositories before supporting them in Linguist. + +To add support for a new language: 0. Add an entry for your language to [`languages.yml`][languages]. 0. Add a grammar for your language. Please only add grammars that have a license that permits redistribution. - 0. Add your grammar as a submodule: `git submodule add https://github.com/JaneSmith/MyGrammar vendor/grammars/MyGrammar`. - 0. Add your grammar to [`grammars.yml`][grammars] by running `script/convert-grammars --add vendor/grammars/MyGrammar`. -0. Add samples for your language to the [samples directory][samples]. + 0. Add your grammar as a submodule: `git submodule add https://github.com/JaneSmith/MyGrammar vendor/grammars/MyGrammar`. + 0. Add your grammar to [`grammars.yml`][grammars] by running `script/convert-grammars --add vendor/grammars/MyGrammar`. +0. Add samples for your language to the [samples directory][samples] in the correct subdirectory. +0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage. In addition, if your new language defines an extension that's already listed in [`languages.yml`][languages] (such as `.foo`) then sometimes a few more steps will need to be taken: -0. Make sure that example `.foo` files are present in the [samples directory][samples] for each language that uses `.foo`. +0. Make sure that example `.foo` files are present in the [samples directory][samples] for each language that uses `.foo`. 0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.foo` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files. 0. If the Bayesian classifier does a bad job with the sample `.foo` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help. Remember, the goal here is to try and avoid false positives! -We try only to add languages once they have some usage on GitHub, so please note in-the-wild usage examples in your pull request. In most cases we prefer that languages already be in use in hundreds of repositories before supporting them in Linguist. + +## Fixing a misclassified language + +Most languages are detected by their file extension defined in [languages.yml][languages]. For disambiguating between files with common extensions, linguist applies some [heuristics](/lib/linguist/heuristics.rb) and a [statistical classifier](lib/linguist/classifier.rb). This process can help differentiate between, for example, `.h` files which could be either C, C++, or Obj-C. + +Misclassifications can often be solved by either adding a new filename or extension for the language or adding more [samples][samples] to make the classifier smarter. + + +## Fixing syntax highlighting + +Syntax highlighting in GitHub is performed using TextMate-compatible grammars. These are the same grammars that TextMate, Sublime Text and Atom use. Every language in [languages.yml][languages] is mapped to its corresponding TM `scope`. This scope will be used when picking up a grammar for highlighting. + +Assuming your code is being detected as the right language, in most cases this is due to a bug in the language grammar rather than a bug in Linguist. [`grammars.yml`][grammars] lists all the grammars we use for syntax highlighting on github.com. Find the one corresponding to your code's programming language and submit a bug report upstream. If you can, try to reproduce the highlighting problem in the text editor that the grammar is designed for (TextMate, Sublime Text, or Atom) and include that information in your bug report. + +You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](https://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com). + +Once the bug has been fixed upstream, we'll pick it up for GitHub in the next release of Linguist. + +## Testing + +For development you are going to want to checkout out the source. To get it, clone the repo and run [Bundler](http://gembundler.com/) to install its dependencies. + + git clone https://github.com/github/linguist.git + cd linguist/ + script/bootstrap + +To run the tests: + + bundle exec rake test + +Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](https://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away. + +Here's our current build status: [![Build Status](https://api.travis-ci.org/github/linguist.svg?branch=master)](https://travis-ci.org/github/linguist) + + +## Releasing + +If you are the current maintainer of this gem: + +0. Create a branch for the release: `git checkout -b cut-release-vxx.xx.xx` +0. Make sure your local dependencies are up to date: `script/bootstrap` +0. If grammar submodules have not been updated recently, update them: `git submodule update --remote && git commit -a` +0. Ensure that samples are updated: `bundle exec rake samples` +0. Ensure that tests are green: `bundle exec rake test` +0. Bump gem version in `lib/linguist/version.rb`, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985). +0. Make a PR to github/linguist, [like this](https://github.com/github/linguist/pull/1238). +0. Build a local gem: `bundle exec rake build_gem` +0. Test the gem: + 0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem + 0. Install the new gem locally + 0. Test behavior locally, branch deploy, whatever needs to happen +0. Merge github/linguist PR +0. Tag and push: `git tag vx.xx.xx; git push --tags` +0. Push to rubygems.org -- `gem push github-linguist-3.0.0.gem` [grammars]: /grammars.yml [languages]: /lib/linguist/languages.yml [samples]: /samples +[new-issue]: https://github.com/github/linguist/issues/new diff --git a/LICENSE b/LICENSE index f09a7d0a..ca0844d1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2014 GitHub, Inc. +Copyright (c) 2011-2016 GitHub, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/README.md b/README.md index 2a5e7520..5d4c2177 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,85 @@ # Linguist -We use this library at GitHub to detect blob languages, ignore binary files, suppress generated files in diffs, and generate language breakdown graphs. +[issues]: https://github.com/github/linguist/issues +[new-issue]: https://github.com/github/linguist/issues/new -Tips for filing issues and creating pull requests can be found in [`CONTRIBUTING.md`](/CONTRIBUTING.md). +This library is used on GitHub.com to detect blob languages, ignore binary or vendored files, suppress generated files in diffs, and generate language breakdown graphs. -## Features +See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md) before filing an issue or creating a pull request. -### Language detection +## Troubleshooting -Linguist defines a list of all languages known to GitHub in a [yaml file](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml). +### My repository is detected as the wrong language -Most languages are detected by their file extension. For disambiguating between files with common extensions, we first apply some common-sense heuristics to pick out obvious languages. After that, we use a -[statistical -classifier](https://github.com/github/linguist/blob/master/lib/linguist/classifier.rb). -This process can help us tell the difference between, for example, `.h` files which could be either C, C++, or Obj-C. +![language stats bar](https://cloud.githubusercontent.com/assets/173/5562290/48e24654-8ddf-11e4-8fe7-735b0ce3a0d3.png) -```ruby +The Language stats bar displays languages percentages for the files in the repository. The percentages are calculated based on the bytes of code for each language as reported by the [List Languages](https://developer.github.com/v3/repos/#list-languages) API. If the bar is reporting a language that you don't expect: -Linguist::FileBlob.new("lib/linguist.rb").language.name #=> "Ruby" +0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language. +0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them. +0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you can add, especially links to public repositories, is helpful. +0. If there are no reported issues of this misclassification, [open an issue][new-issue] and include a link to the repository or a sample of the code that is being misclassified. -Linguist::FileBlob.new("bin/linguist").language.name #=> "Ruby" +## Overrides + +Linguist supports a number of different custom overrides strategies for language definitions and vendored paths. + +### Using gitattributes + +Add a `.gitattributes` file to your project and use standard git-style path matchers for the files you want to override to set `linguist-documentation`, `linguist-language`, and `linguist-vendored`. `.gitattributes` will be used to determine language statistics, but will not be used to syntax highlight files. To manually set syntax highlighting, use [Vim or Emacs modelines](#using-emacs-or-vim-modelines). + +``` +$ cat .gitattributes +*.rb linguist-language=Java ``` -See [lib/linguist/language.rb](https://github.com/github/linguist/blob/master/lib/linguist/language.rb) and [lib/linguist/languages.yml](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml). +Checking code you didn't write, such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language. By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. -### Syntax Highlighting +Use the `linguist-vendored` attribute to vendor or un-vendor paths. -Syntax highlighting in GitHub is performed using TextMate-compatible grammars. These are the same grammars that TextMate, Sublime Text and Atom use. +``` +$ cat .gitattributes +special-vendored-path/* linguist-vendored +jquery.js linguist-vendored=false +``` -Every language in `languages.yml` is mapped to its corresponding TM `scope`. This scope will be used when picking up a grammar for highlighting. **When adding a new language to Linguist, please add its corresponding scope too (assuming there's an existing TextMate bundle, Sublime Text package, or Atom package) so syntax highlighting works for it**. +Similar to vendored files, Linguist excludes documentation files from your project's language stats. (Unlike vendored files, documentation files are displayed in diffs on github.com.) [lib/linguist/documentation.yml](lib/linguist/documentation.yml) lists common documentation paths and excludes them from the language statistics for your repository. -### Stats +Use the `linguist-documentation` attribute to mark or unmark paths as documentation. -The Language stats bar that you see on every repository is built by aggregating the languages of each file in that repository. The top language in the graph determines the project's primary language. +``` +$ cat .gitattributes +project-docs/* linguist-documentation +docs/formatter.rb linguist-documentation=false +``` -The repository stats API, accessed through `#languages`, can be used on a directory: +### Using Emacs or Vim modelines -***API UPDATE*** +Alternatively, you can use Vim or Emacs style modelines to set the language for a single file. Modelines can be placed anywhere within a file and are respected when determining how to syntax-highlight a file on GitHub.com -Since [Version 3.0.0](https://github.com/github/linguist/releases/tag/v3.0.0) Linguist expects a git repository (in the form of a [Rugged::Repository](https://github.com/libgit2/rugged#repositories)) to be passed when initializing `Linguist::Repository`. +##### Vim +``` +# Some examples of various styles: +vim: syntax=java +vim: set syntax=ruby: +vim: set filetype=prolog: +vim: set ft=cpp: +``` +##### Emacs +``` +-*- mode: php;-*- +``` + +## Usage + +Install the gem: + +``` +$ gem install github-linguist +``` + +Then use it in your application: ```ruby require 'rugged' @@ -51,149 +91,28 @@ project.language #=> "Ruby" project.languages #=> { "Ruby" => 119387 } ``` -These stats are also printed out by the `linguist` binary. You can use the +These stats are also printed out by the `linguist` executable. You can use the `--breakdown` flag, and the binary will also output the breakdown of files by language. You can try running `linguist` on the root directory in this repository itself: - $ bundle exec linguist --breakdown +``` +$ bundle exec linguist --breakdown - 100.00% Ruby +100.00% Ruby - Ruby: - Gemfile - Rakefile - bin/linguist - github-linguist.gemspec - lib/linguist.rb - lib/linguist/blob_helper.rb - lib/linguist/classifier.rb - lib/linguist/file_blob.rb - lib/linguist/generated.rb - lib/linguist/heuristics.rb - lib/linguist/language.rb - lib/linguist/lazy_blob.rb - lib/linguist/md5.rb - lib/linguist/repository.rb - lib/linguist/samples.rb - lib/linguist/tokenizer.rb - lib/linguist/version.rb - test/test_blob.rb - test/test_classifier.rb - test/test_heuristics.rb - test/test_language.rb - test/test_md5.rb - test/test_pedantic.rb - test/test_repository.rb - test/test_samples.rb - test/test_tokenizer.rb - -#### Ignore vendored files - -Checking other code into your git repo is a common practice. But this often inflates your project's language stats and may even cause your project to be labeled as another language. We are able to identify some of these files and directories and exclude them. - -```ruby -Linguist::FileBlob.new("vendor/plugins/foo.rb").vendored? # => true +Ruby: +Gemfile +Rakefile +bin/linguist +github-linguist.gemspec +lib/linguist.rb +… ``` -See [Linguist::BlobHelper#vendored?](https://github.com/github/linguist/blob/master/lib/linguist/blob_helper.rb) and [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml). +## Contributing -#### Generated file detection - -Not all plain text files are true source files. Generated files like minified js and compiled CoffeeScript can be detected and excluded from language stats. As an extra bonus, these files are suppressed in diffs. - -```ruby -Linguist::FileBlob.new("underscore.min.js").generated? # => true -``` - -See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/master/lib/linguist/generated.rb). - -## Overrides - -Linguist supports custom overrides for language definitions and vendored paths. Add a `.gitattributes` file to your project using the keys `linguist-language` and `linguist-vendored` with the standard git-style path matchers for the files you want to override. - -Please note that the overrides currently only affect the language statistics for a repository and not the syntax-highlighting of files. - -``` -$ cat .gitattributes -*.rb linguist-language=Java - -$ linguist --breakdown -100.00% Java - -Java: -ruby_file.rb -``` - -By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. Use the `linguist-vendored` attribute to vendor or un-vendor paths. - -``` -$ cat .gitattributes -special-vendored-path/* linguist-vendored -jquery.js linguist-vendored=false -``` - -## Installation - -Github.com is usually running the latest version of the `github-linguist` gem that is released on [RubyGems.org](http://rubygems.org/gems/github-linguist). - -But for development you are going to want to checkout out the source. To get it, clone the repo and run [Bundler](http://gembundler.com/) to install its dependencies. - - git clone https://github.com/github/linguist.git - cd linguist/ - script/bootstrap - -To run the tests: - - bundle exec rake test - -### A note on language extensions - -Linguist has a number of methods available to it for identifying the language of a particular file. The initial lookup is based upon the extension of the file, possible file extensions are defined in an array called `extensions`. Take a look at this example for example for `Perl`: - -``` -Perl: - type: programming - ace_mode: perl - color: "#0298c3" - extensions: - - .pl - - .PL - - .perl - - .ph - - .plx - - .pm - - .pod - - .psgi - interpreters: - - perl -``` -Any of the extensions defined are valid but the first in this array should be the most popular. - -### Testing - -Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away. - -Here's our current build status, which is hopefully green: [![Build Status](https://secure.travis-ci.org/github/linguist.png?branch=master)](http://travis-ci.org/github/linguist) - -### Releasing - -If you are the current maintainer of this gem: - - 0. Create a branch for the release: `git checkout -b cut-release-vxx.xx.xx` - 0. Make sure your local dependencies are up to date: `script/bootstrap` - 0. Ensure that samples are updated: `bundle exec rake samples` - 0. Ensure that tests are green: `bundle exec rake test` - 0. Bump gem version in `lib/linguist/version.rb`. For example, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985). - 0. Make a PR to github/linguist. For example, [#1238](https://github.com/github/linguist/pull/1238). - 0. Build a local gem: `bundle exec rake build_gem` - 0. Testing: - 0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem - 0. Install the new gem locally - 0. Test behavior locally, branch deploy, whatever needs to happen - 0. Merge github/linguist PR - 0. Tag and push: `git tag vx.xx.xx; git push --tags` - 0. Push to rubygems.org -- `gem push github-linguist-3.0.0.gem` +Please check out our [contributing guidelines](CONTRIBUTING.md). ## License @@ -201,4 +120,3 @@ The language grammars included in this gem are covered by their repositories' respective licenses. `grammars.yml` specifies the repository for each grammar. All other files are covered by the MIT license, see `LICENSE`. - diff --git a/Rakefile b/Rakefile index 186bc9c2..c3858115 100644 --- a/Rakefile +++ b/Rakefile @@ -58,7 +58,7 @@ namespace :benchmark do corpus = File.expand_path(ENV["CORPUS"] || "samples") - require 'linguist/language' + require 'linguist' results = Hash.new Dir.glob("#{corpus}/**/*").each do |file| diff --git a/bin/git-linguist b/bin/git-linguist new file mode 100755 index 00000000..37d46b64 --- /dev/null +++ b/bin/git-linguist @@ -0,0 +1,138 @@ +#!/usr/bin/env ruby + +require 'linguist' +require 'rugged' +require 'optparse' +require 'json' +require 'tmpdir' +require 'zlib' + +class GitLinguist + def initialize(path, commit_oid, incremental = true) + @repo_path = path + @commit_oid = commit_oid + @incremental = incremental + end + + def linguist + if @commit_oid.nil? + raise "git-linguist must be called with a specific commit OID to perform language computation" + end + repo = Linguist::Repository.new(rugged, @commit_oid) + + if @incremental && stats = load_language_stats + old_commit_oid, old_stats = stats + + # A cache with NULL oid means that we want to froze + # these language stats in place and stop computing + # them (for performance reasons) + return old_stats if old_commit_oid == NULL_OID + repo.load_existing_stats(old_commit_oid, old_stats) + end + + result = yield repo + + save_language_stats(@commit_oid, repo.cache) + result + end + + def load_language_stats + version, oid, stats = load_cache + if version == LANGUAGE_STATS_CACHE_VERSION && oid && stats + [oid, stats] + end + end + + def save_language_stats(oid, stats) + cache = [LANGUAGE_STATS_CACHE_VERSION, oid, stats] + write_cache(cache) + end + + def clear_language_stats + File.unlink(cache_file) + rescue Errno::ENOENT + end + + def disable_language_stats + save_language_stats(NULL_OID, {}) + end + + protected + NULL_OID = ("0" * 40).freeze + + LANGUAGE_STATS_CACHE = 'language-stats.cache' + LANGUAGE_STATS_CACHE_VERSION = "v3:#{Linguist::VERSION}" + + def rugged + @rugged ||= Rugged::Repository.bare(@repo_path) + end + + def cache_file + File.join(@repo_path, LANGUAGE_STATS_CACHE) + end + + def write_cache(object) + return unless File.directory? @repo_path + + begin + tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil) + File.open(tmp_path, "wb") do |f| + marshal = Marshal.dump(object) + f.write(Zlib::Deflate.deflate(marshal)) + end + + File.rename(tmp_path, cache_file) + rescue => e + (File.unlink(tmp_path) rescue nil) + raise e + end + end + + def load_cache + marshal = File.open(cache_file, "rb") { |f| Zlib::Inflate.inflate(f.read) } + Marshal.load(marshal) + rescue SystemCallError, ::Zlib::DataError, ::Zlib::BufError, TypeError + nil + end +end + + +def git_linguist(args) + incremental = true + commit = nil + + parser = OptionParser.new do |opts| + opts.banner = "Usage: git-linguist [OPTIONS] stats|breakdown|dump-cache|clear|disable" + + opts.on("-f", "--force", "Force a full rescan") { incremental = false } + opts.on("--commit=COMMIT", "Commit to index") { |v| commit = v} + end + + parser.parse!(args) + + git_dir = `git rev-parse --git-dir`.strip + raise "git-linguist must be ran in a Git repository" unless $?.success? + wrapper = GitLinguist.new(git_dir, commit, incremental) + + case args.pop + when "stats" + wrapper.linguist do |linguist| + puts JSON.dump(linguist.languages) + end + when "breakdown" + wrapper.linguist do |linguist| + puts JSON.dump(linguist.breakdown_by_file) + end + when "dump-cache" + puts JSON.dump(wrapper.load_language_stats) + when "clear" + wrapper.clear_language_stats + when "disable" + wrapper.disable_language_stats + else + $stderr.print(parser.help) + exit 1 + end +end + +git_linguist(ARGV) diff --git a/bin/linguist b/bin/linguist index 6ac8f0a7..d1d9c306 100755 --- a/bin/linguist +++ b/bin/linguist @@ -2,10 +2,8 @@ # linguist — detect language type for a file, or, given a directory, determine language breakdown # usage: linguist [<--breakdown>] - -require 'linguist/file_blob' -require 'linguist/language' -require 'linguist/repository' +# +require 'linguist' require 'rugged' path = ARGV[0] || Dir.pwd diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 974d1bc0..84b12060 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -10,13 +10,13 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/github/linguist" s.license = "MIT" - s.files = Dir['lib/**/*'] + Dir['grammars/*'] - s.executables << 'linguist' + s.files = Dir['lib/**/*'] + Dir['grammars/*'] + ['LICENSE'] + s.executables = ['linguist', 'git-linguist'] s.add_dependency 'charlock_holmes', '~> 0.7.3' - s.add_dependency 'escape_utils', '~> 1.0.1' + s.add_dependency 'escape_utils', '~> 1.1.0' s.add_dependency 'mime-types', '>= 1.19' - s.add_dependency 'rugged', '~> 0.22.0b4' + s.add_dependency 'rugged', '>= 0.23.0b' s.add_development_dependency 'minitest', '>= 5.0' s.add_development_dependency 'mocha' @@ -24,4 +24,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'pry' s.add_development_dependency 'rake' s.add_development_dependency 'yajl-ruby' + s.add_development_dependency 'color-proximity', '~> 0.2.1' + s.add_development_dependency 'licensee', '6.0.0b1' + end diff --git a/grammars.yml b/grammars.yml old mode 100644 new mode 100755 index 222859f1..706cdaa0 --- a/grammars.yml +++ b/grammars.yml @@ -24,26 +24,56 @@ vendor/grammars/Agda.tmbundle: - source.agda vendor/grammars/Alloy.tmbundle: - source.alloy +vendor/grammars/AutoHotkey/: +- source.ahk +vendor/grammars/BrightScript.tmbundle/: +- source.brightauthorproject +- source.brightscript +vendor/grammars/CLIPS-sublime: +- source.clips vendor/grammars/ColdFusion: - source.cfscript - source.cfscript.cfc - text.cfml.basic - text.html.cfm +vendor/grammars/Creole: +- text.html.creole vendor/grammars/Docker.tmbundle: - source.dockerfile vendor/grammars/Elm.tmLanguage: - source.elm +vendor/grammars/FreeMarker.tmbundle: +- text.html.ftl +vendor/grammars/G-Code/: +- source.LS +- source.MCPOST +- source.MOD +- source.apt +- source.gcode +vendor/grammars/GDScript-sublime/: +- source.gdscript vendor/grammars/Handlebars: - text.html.handlebars vendor/grammars/IDL-Syntax: - source.webidl +vendor/grammars/InnoSetup/: +- source.inno vendor/grammars/Isabelle.tmbundle: - source.isabelle.root - source.isabelle.theory +vendor/grammars/JSyntax/: +- source.j vendor/grammars/Julia.tmbundle: - source.julia +vendor/grammars/Lean.tmbundle: +- source.lean vendor/grammars/LiveScript.tmbundle: - source.livescript +vendor/grammars/MagicPython: +- source.python +- source.regexp.python +vendor/grammars/Modelica/: +- source.modelica vendor/grammars/NSIS: - source.nsis vendor/grammars/NimLime: @@ -52,48 +82,75 @@ vendor/grammars/NimLime: - source.nimcfg vendor/grammars/PHP-Twig.tmbundle: - text.html.twig +vendor/grammars/PogoScript.tmbundle/: +- source.pogoscript vendor/grammars/RDoc.tmbundle: - text.rdoc +vendor/grammars/Racket: +- source.racket vendor/grammars/SCSS.tmbundle: - source.scss +vendor/grammars/SMT.tmbundle: +- source.smt vendor/grammars/Scalate.tmbundle: - source.scaml - text.html.ssp vendor/grammars/Slash.tmbundle: - text.html.slash -vendor/grammars/Stata.tmbundle: +vendor/grammars/Stata.tmbundle/: - source.mata - source.stata +vendor/grammars/Stylus/: +- source.stylus vendor/grammars/Sublime-Coq: - source.coq -vendor/grammars/Sublime-Inform: -- source.Inform7 +vendor/grammars/Sublime-HTTP: +- source.httpspec vendor/grammars/Sublime-Lasso: - file.lasso vendor/grammars/Sublime-Logos: - source.logos vendor/grammars/Sublime-Loom: - source.loomscript +vendor/grammars/Sublime-Modula-2/: +- source.modula2 +vendor/grammars/Sublime-Nit: +- source.nit vendor/grammars/Sublime-QML: - source.qml vendor/grammars/Sublime-REBOL: - source.rebol +vendor/grammars/Sublime-Red: +- source.red vendor/grammars/Sublime-SQF-Language: - source.sqf vendor/grammars/Sublime-Text-2-OpenEdge-ABL: - source.abl +- text.html.abl vendor/grammars/Sublime-VimL: - source.viml vendor/grammars/SublimeBrainfuck: - source.bf +vendor/grammars/SublimeClarion/: +- source.clarion +vendor/grammars/SublimePapyrus/: +- source.compiled-papyrus +- source.papyrus +- source.papyrus-assembly vendor/grammars/SublimeXtend: - source.xtend +vendor/grammars/TXL/: +- source.txl vendor/grammars/Textmate-Gosu-Bundle: - source.gosu.2 +vendor/grammars/UrWeb-Language-Definition: +- source.ur vendor/grammars/VBDotNetSyntax: - source.vbnet vendor/grammars/Vala-TMBundle: - source.vala +vendor/grammars/X10: +- source.x10 vendor/grammars/abap.tmbundle: - source.abap vendor/grammars/actionscript3-tmbundle: @@ -102,6 +159,8 @@ vendor/grammars/actionscript3-tmbundle: - text.xml.flex-config vendor/grammars/ada.tmbundle: - source.ada +vendor/grammars/ampl: +- source.ampl vendor/grammars/ant.tmbundle: - text.xml.ant vendor/grammars/antlr.tmbundle: @@ -109,17 +168,33 @@ vendor/grammars/antlr.tmbundle: vendor/grammars/apache.tmbundle: - source.apache-config - source.apache-config.mod_perl +vendor/grammars/api-blueprint-sublime-plugin/: +- text.html.markdown.source.gfm.apib +- text.html.markdown.source.gfm.mson vendor/grammars/applescript.tmbundle: - source.applescript +vendor/grammars/asciidoc.tmbundle/: +- text.html.asciidoc vendor/grammars/asp.tmbundle: - source.asp - text.html.asp vendor/grammars/assembly.tmbundle: - objdump.x86asm - source.x86asm +vendor/grammars/atom-fsharp/: +- source.fsharp +- source.fsharp.fsi +- source.fsharp.fsl +- source.fsharp.fsx +vendor/grammars/atom-language-purescript/: +- source.purescript +vendor/grammars/atom-language-stan/: +- source.stan vendor/grammars/atom-salt: - source.python.salt - source.yaml.salt +vendor/grammars/ats.sublime: +- source.ats vendor/grammars/autoitv3-tmbundle: - source.autoit.3 vendor/grammars/awk-sublime: @@ -161,7 +236,10 @@ vendor/grammars/d.tmbundle: vendor/grammars/dart-sublime-bundle: - source.dart - source.pubspec +- text.dart-analysis-output - text.dart-doccomments +vendor/grammars/desktop.tmbundle: +- source.desktop vendor/grammars/diff.tmbundle: - source.diff vendor/grammars/dylan.tmbundle: @@ -170,6 +248,8 @@ vendor/grammars/dylan.tmbundle: - source.makegen vendor/grammars/ebundles/Bundles/MSDOS batch file.tmbundle: - source.dosbatch +vendor/grammars/ec.tmbundle/: +- source.c.ec vendor/grammars/eiffel.tmbundle: - source.eiffel vendor/grammars/elixir-tmbundle: @@ -189,14 +269,16 @@ vendor/grammars/fish-tmbundle: vendor/grammars/fortran.tmbundle: - source.fortran - source.fortran.modern -vendor/grammars/fsharpbinding: -- source.fsharp +vendor/grammars/gap-tmbundle/: +- source.gap vendor/grammars/gettext.tmbundle: - source.po vendor/grammars/gnuplot-tmbundle: - source.gnuplot vendor/grammars/go-tmbundle: - source.go +vendor/grammars/grace-tmbundle/: +- source.grace vendor/grammars/gradle.tmbundle: - source.groovy.gradle vendor/grammars/graphviz.tmbundle: @@ -225,8 +307,8 @@ vendor/grammars/io.tmbundle: vendor/grammars/ioke-outdated: - source.ioke vendor/grammars/jade-tmbundle: -- source.jade - source.pyjade +- text.jade vendor/grammars/jasmin-sublime: - source.jasmin vendor/grammars/java.tmbundle: @@ -234,40 +316,68 @@ vendor/grammars/java.tmbundle: - source.java-properties - text.html.jsp - text.junit-test-report -vendor/grammars/javadoc.tmbundle: -- text.html.javadoc vendor/grammars/javascript-objective-j.tmbundle: - source.js.objj -vendor/grammars/jquery-tmbundle: -- source.js.jquery +vendor/grammars/jflex.tmbundle: +- source.jflex vendor/grammars/json.tmbundle: - source.json vendor/grammars/kotlin-sublime-package: - source.Kotlin +vendor/grammars/language-babel/: +- source.js.jsx +- source.regexp.babel +vendor/grammars/language-click/: +- source.click vendor/grammars/language-clojure: - source.clojure vendor/grammars/language-coffee-script: - source.coffee - source.litcoffee +vendor/grammars/language-crystal: +- source.crystal vendor/grammars/language-csharp: +- source.cake - source.cs - source.csx - source.nant-build vendor/grammars/language-gfm: - source.gfm +vendor/grammars/language-hy: +- source.hy +vendor/grammars/language-inform7: +- source.inform7 vendor/grammars/language-javascript: - source.js - source.js.regexp +- source.js.regexp.replacement +vendor/grammars/language-jsoniq/: +- source.jq +- source.xq +vendor/grammars/language-less/: +- source.css.less +vendor/grammars/language-maxscript: +- source.maxscript +vendor/grammars/language-ncl: +- source.ncl +vendor/grammars/language-povray: +- source.pov-ray sdl vendor/grammars/language-python: -- source.python -- source.regexp.python - text.python.console - text.python.traceback +vendor/grammars/language-renpy: +- source.renpy vendor/grammars/language-shellscript: - source.shell - text.shell-session +vendor/grammars/language-supercollider: +- source.supercollider +vendor/grammars/language-xbase: +- source.harbour vendor/grammars/language-yaml: - source.yaml +vendor/grammars/language-yang/: +- source.yang vendor/grammars/latex.tmbundle: - text.bibtex - text.log.latex @@ -275,10 +385,10 @@ vendor/grammars/latex.tmbundle: - text.tex.latex - text.tex.latex.beamer - text.tex.latex.memoir -vendor/grammars/less.tmbundle: -- source.css.less vendor/grammars/lilypond.tmbundle: - source.lilypond +vendor/grammars/liquid.tmbundle: +- text.html.liquid vendor/grammars/lisp.tmbundle: - source.lisp vendor/grammars/llvm.tmbundle: @@ -298,6 +408,8 @@ vendor/grammars/matlab.tmbundle: - source.octave vendor/grammars/maven.tmbundle: - text.xml.pom +vendor/grammars/mediawiki.tmbundle/: +- text.html.mediawiki vendor/grammars/mercury-tmlanguage: - source.mercury vendor/grammars/monkey.tmbundle: @@ -324,26 +436,33 @@ vendor/grammars/ooc.tmbundle: - source.ooc vendor/grammars/opa.tmbundle: - source.opa +vendor/grammars/openscad.tmbundle/: +- source.scad +vendor/grammars/oracle.tmbundle: +- source.plsql.oracle vendor/grammars/oz-tmbundle/Syntaxes/Oz.tmLanguage: - source.oz vendor/grammars/pascal.tmbundle: - source.pascal -vendor/grammars/perl.tmbundle: +vendor/grammars/perl.tmbundle/: - source.perl +- source.perl.6 +vendor/grammars/perl6fe: +- source.meta-info +- source.perl6fe +- source.regexp.perl6fe vendor/grammars/php-smarty.tmbundle: -- source.smarty +- text.html.smarty vendor/grammars/php.tmbundle: - text.html.php vendor/grammars/pike-textmate: - source.pike vendor/grammars/postscript.tmbundle: - source.postscript -vendor/grammars/powershell.tmbundle: +vendor/grammars/powershell: - source.powershell vendor/grammars/processing.tmbundle: - source.processing -vendor/grammars/prolog.tmbundle: -- source.prolog vendor/grammars/protobuf-tmbundle: - source.protobuf vendor/grammars/puppet-textmate-bundle: @@ -354,26 +473,18 @@ vendor/grammars/python-django.tmbundle: vendor/grammars/r.tmbundle: - source.r - text.tex.latex.rd -vendor/grammars/racket-tmbundle: -- source.racket vendor/grammars/restructuredtext.tmbundle: - text.restructuredtext vendor/grammars/ruby-haml.tmbundle: - text.haml -vendor/grammars/ruby-on-rails-tmbundle: -- source.js.erb.rails -- source.ruby.rails -- source.ruby.rails.rjs -- source.sql.ruby -- text.html.erb.rails vendor/grammars/ruby-slim.tmbundle: - text.slim vendor/grammars/ruby.tmbundle: - source.ruby - text.html.erb vendor/grammars/sas.tmbundle: -- source.SASLog - source.sas +- source.sas_log vendor/grammars/sass-textmate-bundle: - source.sass vendor/grammars/scala.tmbundle: @@ -383,19 +494,25 @@ vendor/grammars/scheme.tmbundle: - source.scheme vendor/grammars/scilab.tmbundle: - source.scilab +vendor/grammars/smali-sublime/smali.tmLanguage: +- source.smali vendor/grammars/smalltalk-tmbundle: - source.smalltalk vendor/grammars/sql.tmbundle: - source.sql +vendor/grammars/st2-zonefile: +- text.zone_file vendor/grammars/standard-ml.tmbundle: - source.cm - source.ml vendor/grammars/sublime-MuPAD: - source.mupad +vendor/grammars/sublime-apl/: +- source.apl +vendor/grammars/sublime-aspectj/: +- source.aspectj vendor/grammars/sublime-befunge: - source.befunge -vendor/grammars/sublime-better-typescript: -- source.ts vendor/grammars/sublime-bsv: - source.bsv vendor/grammars/sublime-cirru: @@ -403,29 +520,55 @@ vendor/grammars/sublime-cirru: vendor/grammars/sublime-glsl: - source.essl - source.glsl +vendor/grammars/sublime-golo/: +- source.golo vendor/grammars/sublime-idris: - source.idris vendor/grammars/sublime-mask: - source.mask +vendor/grammars/sublime-netlinx: +- source.netlinx +- source.netlinx.erb vendor/grammars/sublime-nginx: - source.nginx vendor/grammars/sublime-nix: - source.nix +vendor/grammars/sublime-opal/: +- source.opal +- source.opalsysdefs +vendor/grammars/sublime-pony: +- source.pony vendor/grammars/sublime-robot-plugin: - text.robot vendor/grammars/sublime-rust: - source.rust vendor/grammars/sublime-sourcepawn: - source.sp +vendor/grammars/sublime-spintools/: +- source.regexp.spin +- source.spin vendor/grammars/sublime-tea: - source.tea +vendor/grammars/sublime-text-ox/: +- source.ox +vendor/grammars/sublime-text-pig-latin/: +- source.pig_latin +vendor/grammars/sublime-typescript/: +- source.ts +- source.tsx +vendor/grammars/sublime-varnish: +- source.varnish.vcl vendor/grammars/sublime_cobol: - source.acucobol - source.cobol +- source.jcl - source.opencobol vendor/grammars/sublime_man_page_support: - source.man - text.groff +vendor/grammars/sublimeprolog/: +- source.prolog +- source.prolog.eclipse vendor/grammars/sublimetext-cuda-cpp: - source.cuda-c++ vendor/grammars/swift.tmbundle: @@ -433,21 +576,21 @@ vendor/grammars/swift.tmbundle: vendor/grammars/tcl.tmbundle: - source.tcl - text.html.tcl -vendor/grammars/text.tmbundle: -- text.plain -vendor/grammars/textile.tmbundle: -- text.html.textile -vendor/grammars/textmate.tmbundle: -- source.regexp.oniguruma -- source.tm-properties vendor/grammars/thrift.tmbundle: - source.thrift vendor/grammars/toml.tmbundle: - source.toml +vendor/grammars/turtle.tmbundle: +- source.sparql +- source.turtle vendor/grammars/verilog.tmbundle: - source.verilog +vendor/grammars/vue-syntax-highlight: +- text.html.vue vendor/grammars/x86-assembly-textmate-bundle: - source.asm.x86 +vendor/grammars/xc.tmbundle/: +- source.xc vendor/grammars/xml.tmbundle: - text.xml - text.xml.xsl diff --git a/lib/linguist.rb b/lib/linguist.rb index edbd4483..23553af9 100644 --- a/lib/linguist.rb +++ b/lib/linguist.rb @@ -7,3 +7,15 @@ require 'linguist/repository' require 'linguist/samples' require 'linguist/shebang' require 'linguist/version' + +class << Linguist + attr_accessor :instrumenter + + def instrument(*args, &bk) + if instrumenter + instrumenter.instrument(*args, &bk) + elsif block_given? + yield + end + end +end diff --git a/lib/linguist/blob.rb b/lib/linguist/blob.rb new file mode 100644 index 00000000..a11e6074 --- /dev/null +++ b/lib/linguist/blob.rb @@ -0,0 +1,73 @@ +require 'linguist/blob_helper' + +module Linguist + # A Blob is a wrapper around the content of a file to make it quack + # like a Grit::Blob. It provides the basic interface: `name`, + # `data`, `path` and `size`. + class Blob + include BlobHelper + + # Public: Initialize a new Blob. + # + # path - A path String (does not necessarily exists on the file system). + # content - Content of the file. + # + # Returns a Blob. + def initialize(path, content) + @path = path + @content = content + end + + # Public: Filename + # + # Examples + # + # Blob.new("/path/to/linguist/lib/linguist.rb", "").path + # # => "/path/to/linguist/lib/linguist.rb" + # + # Returns a String + attr_reader :path + + # Public: File name + # + # Returns a String + def name + File.basename(@path) + end + + # Public: File contents. + # + # Returns a String. + def data + @content + end + + # Public: Get byte size + # + # Returns an Integer. + def size + @content.bytesize + end + + # Public: Get file extension. + # + # Returns a String. + def extension + extensions.last || "" + end + + # Public: Return an array of the file extensions + # + # >> Linguist::Blob.new("app/views/things/index.html.erb").extensions + # => [".html.erb", ".erb"] + # + # Returns an Array + def extensions + basename, *segments = name.downcase.split(".") + + segments.map.with_index do |segment, index| + "." + segments[index..-1].join(".") + end + end + end +end diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index c368b4d0..01a567e0 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -99,7 +99,7 @@ module Linguist elsif name.nil? "attachment" else - "attachment; filename=#{EscapeUtils.escape_url(File.basename(name))}" + "attachment; filename=#{EscapeUtils.escape_url(name)}" end end @@ -233,7 +233,22 @@ module Linguist # # Return true or false def vendored? - name =~ VendoredRegexp ? true : false + path =~ VendoredRegexp ? true : false + end + + documentation_paths = YAML.load_file(File.expand_path("../documentation.yml", __FILE__)) + DocumentationRegexp = Regexp.new(documentation_paths.join('|')) + + # Public: Is the blob in a documentation directory? + # + # Documentation files are ignored by language statistics. + # + # See "documentation.yml" for a list of documentation conventions that match + # this pattern. + # + # Return true or false + def documentation? + path =~ DocumentationRegexp ? true : false end # Public: Get each line of data @@ -301,7 +316,7 @@ module Linguist # # Return true or false def generated? - @_generated ||= Generated.generated?(name, lambda { data }) + @_generated ||= Generated.generated?(path, lambda { data }) end # Public: Detects the Language of the blob. @@ -317,5 +332,15 @@ module Linguist def tm_scope language && language.tm_scope end + + DETECTABLE_TYPES = [:programming, :markup].freeze + + # Internal: Should this blob be included in repository language statistics? + def include_in_language_stats? + !vendored? && + !documentation? && + !generated? && + language && DETECTABLE_TYPES.include?(language.type) + end end end diff --git a/lib/linguist/documentation.yml b/lib/linguist/documentation.yml new file mode 100644 index 00000000..230cd423 --- /dev/null +++ b/lib/linguist/documentation.yml @@ -0,0 +1,30 @@ +# Documentation files and directories are excluded from language +# statistics. +# +# Lines in this file are Regexps that are matched against the file +# pathname. +# +# Please add additional test coverage to +# `test/test_blob.rb#test_documentation` if you make any changes. + +## Documentation directories ## + +- ^docs?/ +- (^|/)[Dd]ocumentation/ +- (^|/)javadoc/ +- ^man/ +- ^[Ee]xamples/ + +## Documentation files ## + +- (^|/)CHANGE(S|LOG)?(\.|$) +- (^|/)CONTRIBUTING(\.|$) +- (^|/)COPYING(\.|$) +- (^|/)INSTALL(\.|$) +- (^|/)LICEN[CS]E(\.|$) +- (^|/)[Ll]icen[cs]e(\.|$) +- (^|/)README(\.|$) +- (^|/)[Rr]eadme(\.|$) + +# Samples folders +- ^[Ss]amples/ diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb index 04441935..5f8bc373 100644 --- a/lib/linguist/file_blob.rb +++ b/lib/linguist/file_blob.rb @@ -1,10 +1,11 @@ require 'linguist/blob_helper' +require 'linguist/blob' module Linguist # A FileBlob is a wrapper around a File object to make it quack # like a Grit::Blob. It provides the basic interface: `name`, - # `data`, and `size`. - class FileBlob + # `data`, `path` and `size`. + class FileBlob < Blob include BlobHelper # Public: Initialize a new FileBlob from a path @@ -14,64 +15,29 @@ module Linguist # # Returns a FileBlob. def initialize(path, base_path = nil) - @path = path - @name = base_path ? path.sub("#{base_path}/", '') : path + @fullpath = path + @path = base_path ? path.sub("#{base_path}/", '') : path end - # Public: Filename - # - # Examples - # - # FileBlob.new("/path/to/linguist/lib/linguist.rb").name - # # => "/path/to/linguist/lib/linguist.rb" - # - # FileBlob.new("/path/to/linguist/lib/linguist.rb", - # "/path/to/linguist").name - # # => "lib/linguist.rb" - # - # Returns a String - attr_reader :name - # Public: Read file permissions # # Returns a String like '100644' def mode - File.stat(@path).mode.to_s(8) + File.stat(@fullpath).mode.to_s(8) end # Public: Read file contents. # # Returns a String. def data - File.read(@path) + File.read(@fullpath) end # Public: Get byte size # # Returns an Integer. def size - File.size(@path) - end - - # Public: Get file extension. - # - # Returns a String. - def extension - extensions.last || "" - end - - # Public: Return an array of the file extensions - # - # >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions - # => [".html.erb", ".erb"] - # - # Returns an Array - def extensions - basename, *segments = File.basename(name).split(".") - - segments.map.with_index do |segment, index| - "." + segments[index..-1].join(".") - end + File.size(@fullpath) end end end diff --git a/lib/linguist/generated.rb b/lib/linguist/generated.rb index 50dbc58d..7747406f 100644 --- a/lib/linguist/generated.rb +++ b/lib/linguist/generated.rb @@ -53,18 +53,28 @@ module Linguist def generated? xcode_file? || generated_net_designer_file? || + generated_net_specflow_feature_file? || composer_lock? || node_modules? || godeps? || generated_by_zephir? || minified_files? || + source_map? || compiled_coffeescript? || generated_parser? || generated_net_docfile? || generated_postscript? || + compiled_cython_file? || + generated_go? || generated_protocol_buffer? || + generated_apache_thrift? || generated_jni_header? || - vcr_cassette? + vcr_cassette? || + generated_module? || + generated_unity3d_meta? || + generated_racc? || + generated_jflex? || + generated_grammarkit? end # Internal: Is the blob an Xcode file? @@ -94,6 +104,20 @@ module Linguist end end + # Internal: Is the blob a generated source map? + # + # Source Maps usually have .css.map or .js.map extensions. In case they + # are not following the name convention, detect them based on the content. + # + # Returns true or false. + def source_map? + return false unless extname.downcase == '.map' + + name =~ /(\.css|\.js)\.map$/i || # Name convention + lines[0] =~ /^{"version":\d+,/ || # Revision 2 and later begin with the version number + lines[0] =~ /^\/\*\* Begin line maps\. \*\*\/{/ # Revision 1 begins with a magic comment + end + # Internal: Is the blob of JS generated by CoffeeScript? # # CoffeeScript is meant to output JS that would be difficult to @@ -162,6 +186,17 @@ module Linguist name.downcase =~ /\.designer\.cs$/ end + # Internal: Is this a codegen file for Specflow feature file? + # + # Visual Studio's SpecFlow extension generates *.feature.cs files + # from *.feature files, they are not meant to be consumed by humans. + # Let's hide them. + # + # Returns true or false + def generated_net_specflow_feature_file? + name.downcase =~ /\.feature\.cs$/ + end + # Internal: Is the blob of JS a parser generated by PEG.js? # # PEG.js-generated parsers are not meant to be consumed by humans. @@ -202,17 +237,38 @@ module Linguist creator.include?("ImageMagick") end + def generated_go? + return false unless extname == '.go' + return false unless lines.count > 1 + + return lines[0].include?("Code generated by") + end + + PROTOBUF_EXTENSIONS = ['.py', '.java', '.h', '.cc', '.cpp'] + # Internal: Is the blob a C++, Java or Python source file generated by the # Protocol Buffer compiler? # # Returns true of false. def generated_protocol_buffer? - return false unless ['.py', '.java', '.h', '.cc', '.cpp'].include?(extname) + return false unless PROTOBUF_EXTENSIONS.include?(extname) return false unless lines.count > 1 return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!") end + APACHE_THRIFT_EXTENSIONS = ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'] + + # Internal: Is the blob generated by Apache Thrift compiler? + # + # Returns true or false + def generated_apache_thrift? + return false unless APACHE_THRIFT_EXTENSIONS.include?(extname) + return false unless lines.count > 1 + + return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler") + end + # Internal: Is the blob a C/C++ header generated by the Java JNI tool javah? # # Returns true of false. @@ -262,5 +318,89 @@ module Linguist # VCR Cassettes have "recorded_with: VCR" in the second last line. return lines[-2].include?("recorded_with: VCR") end + + # Internal: Is this a compiled C/C++ file from Cython? + # + # Cython-compiled C/C++ files typically contain: + # /* Generated by Cython x.x.x on ... */ + # on the first line. + # + # Return true or false + def compiled_cython_file? + return false unless ['.c', '.cpp'].include? extname + return false unless lines.count > 1 + return lines[0].include?("Generated by Cython") + end + + # Internal: Is it a KiCAD or GFortran module file? + # + # KiCAD module files contain: + # PCBNEW-LibModule-V1 yyyy-mm-dd h:mm:ss XM + # on the first line. + # + # GFortran module files contain: + # GFORTRAN module version 'x' created from + # on the first line. + # + # Return true of false + def generated_module? + return false unless extname == '.mod' + return false unless lines.count > 1 + return lines[0].include?("PCBNEW-LibModule-V") || + lines[0].include?("GFORTRAN module version '") + end + + # Internal: Is this a metadata file from Unity3D? + # + # Unity3D Meta files start with: + # fileFormatVersion: X + # guid: XXXXXXXXXXXXXXX + # + # Return true or false + def generated_unity3d_meta? + return false unless extname == '.meta' + return false unless lines.count > 1 + return lines[0].include?("fileFormatVersion: ") + end + + # Internal: Is this a Racc-generated file? + # + # A Racc-generated file contains: + # # This file is automatically generated by Racc x.y.z + # on the third line. + # + # Return true or false + def generated_racc? + return false unless extname == '.rb' + return false unless lines.count > 2 + return lines[2].start_with?("# This file is automatically generated by Racc") + end + + # Internal: Is this a JFlex-generated file? + # + # A JFlex-generated file contains: + # /* The following code was generated by JFlex x.y.z on d/at/e ti:me */ + # on the first line. + # + # Return true or false + def generated_jflex? + return false unless extname == '.java' + return false unless lines.count > 1 + return lines[0].start_with?("/* The following code was generated by JFlex ") + end + + # Internal: Is this a GrammarKit-generated file? + # + # A GrammarKit-generated file typically contain: + # // This is a generated file. Not intended for manual editing. + # on the first line. This is not always the case, as it's possible to + # customize the class header. + # + # Return true or false + def generated_grammarkit? + return false unless extname == '.java' + return false unless lines.count > 1 + return lines[0].start_with?("// This is a generated file. Not intended for manual editing.") + end end end diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 97c1015a..5c27ca03 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -13,11 +13,14 @@ module Linguist # ]) # # Returns an Array of languages, or empty if none matched or were inconclusive. - def self.call(blob, languages) + def self.call(blob, candidates) data = blob.data @heuristics.each do |heuristic| - return Array(heuristic.call(data)) if heuristic.matches?(languages) + if heuristic.matches?(blob.name) + languages = Array(heuristic.call(data)) + return languages if languages.any? || languages.all? { |l| candidates.include?(l) } + end end [] # No heuristics matched @@ -30,30 +33,31 @@ module Linguist # # Examples # - # disambiguate "Perl", "Prolog" do |data| + # disambiguate ".pm" do |data| # if data.include?("use strict") # Language["Perl"] - # elsif data.include?(":-") + # elsif /^[^#]+:-/.match(data) # Language["Prolog"] # end # end # - def self.disambiguate(*languages, &heuristic) - @heuristics << new(languages, &heuristic) + def self.disambiguate(*extensions, &heuristic) + @heuristics << new(extensions, &heuristic) end # Internal: Array of defined heuristics @heuristics = [] # Internal - def initialize(languages, &heuristic) - @languages = languages + def initialize(extensions, &heuristic) + @extensions = extensions @heuristic = heuristic end # Internal: Check if this heuristic matches the candidate languages. - def matches?(candidates) - candidates.any? && candidates.all? { |l| @languages.include?(l.name) } + def matches?(filename) + filename = filename.downcase + @extensions.any? { |ext| filename.end_with?(ext) } end # Internal: Perform the heuristic @@ -61,7 +65,20 @@ module Linguist @heuristic.call(data) end - disambiguate "BitBake", "BlitzBasic" do |data| + # Common heuristics + ObjectiveCRegex = /^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])/ + + disambiguate ".asc" do |data| + if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data) + Language["Public Key"] + elsif /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data) + Language["AsciiDoc"] + elsif /^(\/\/.+|((import|export)\s+)?(function|int|float|char)\s+((room|repeatedly|on|game)_)?([A-Za-z]+[A-Za-z_0-9]+)\s*[;\(])/.match(data) + Language["AGS Script"] + end + end + + disambiguate ".bb" do |data| if /^\s*; /.match(data) || data.include?("End Function") Language["BlitzBasic"] elsif /^\s*(# |include|require)\b/.match(data) @@ -69,43 +86,14 @@ module Linguist end end - disambiguate "Objective-C", "C++", "C" do |data| - if (/^[ \t]*@(interface|class|protocol|property|end|synchronised|selector|implementation)\b/.match(data)) - Language["Objective-C"] - elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) || - /^\s*template\s*/.match(data) || + /^\s*template\s*)/.match(data) + Language["Lex"] + elsif /^\.[a-z][a-z](\s|$)/i.match(data) + Language["Groff"] + elsif /^\((de|class|rel|code|data|must)\s/.match(data) + Language["PicoLisp"] + end + end + + disambiguate ".ls" do |data| if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data) Language["LoomScript"] else @@ -164,7 +191,177 @@ module Linguist end end - disambiguate "TypeScript", "XML" do |data| + disambiguate ".lsp", ".lisp" do |data| + if /^\s*\((defun|in-package|defpackage) /i.match(data) + Language["Common Lisp"] + elsif /^\s*\(define /.match(data) + Language["NewLisp"] + end + end + + disambiguate ".m" do |data| + if ObjectiveCRegex.match(data) + Language["Objective-C"] + elsif data.include?(":- module") + Language["Mercury"] + elsif /^: /.match(data) + Language["MUF"] + elsif /^\s*;/.match(data) + Language["M"] + elsif /^\s*\(\*/.match(data) + Language["Mathematica"] + elsif /^\s*%/.match(data) + Language["Matlab"] + elsif /^\w+\s*:\s*module\s*{/.match(data) + Language["Limbo"] + end + end + + disambiguate ".ml" do |data| + if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data) + Language["OCaml"] + elsif /=> |case\s+(\S+\s)+of/.match(data) + Language["Standard ML"] + end + end + + disambiguate ".mod" do |data| + if data.include?(' ")) + Language["GAP"] + # Heads up - we don't usually write heuristics like this (with no regex match) else - Language["Text"] + Language["Scilab"] end end end diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 5f1808ce..07585bb0 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -11,6 +11,7 @@ require 'linguist/samples' require 'linguist/file_blob' require 'linguist/blob_helper' require 'linguist/strategy/filename' +require 'linguist/strategy/modeline' require 'linguist/shebang' module Linguist @@ -31,13 +32,6 @@ module Linguist # Valid Languages types TYPES = [:data, :markup, :programming, :prose] - # Names of non-programming languages that we will still detect - # - # Returns an array - def self.detectable_markup - ["CSS", "Less", "Sass", "SCSS", "Stylus", "TeX"] - end - # Detect languages by a specific type # # type - A symbol that exists within TYPES @@ -79,7 +73,7 @@ module Linguist raise ArgumentError, "Extension is missing a '.': #{extension.inspect}" end - @extension_index[extension] << language + @extension_index[extension.downcase] << language end language.interpreters.each do |interpreter| @@ -94,8 +88,9 @@ module Linguist end STRATEGIES = [ - Linguist::Strategy::Filename, + Linguist::Strategy::Modeline, Linguist::Shebang, + Linguist::Strategy::Filename, Linguist::Heuristics, Linguist::Classifier ] @@ -110,19 +105,31 @@ module Linguist # Bail early if the blob is binary or empty. return nil if blob.likely_binary? || blob.binary? || blob.empty? - # Call each strategy until one candidate is returned. - STRATEGIES.reduce([]) do |languages, strategy| - candidates = strategy.call(blob, languages) - if candidates.size == 1 - return candidates.first - elsif candidates.size > 1 - # More than one candidate was found, pass them to the next strategy. - candidates - else - # No candiates were found, pass on languages from the previous strategy. - languages + Linguist.instrument("linguist.detection", :blob => blob) do + # Call each strategy until one candidate is returned. + languages = [] + returning_strategy = nil + + STRATEGIES.each do |strategy| + returning_strategy = strategy + candidates = Linguist.instrument("linguist.strategy", :blob => blob, :strategy => strategy, :candidates => languages) do + strategy.call(blob, languages) + end + if candidates.size == 1 + languages = candidates + break + elsif candidates.size > 1 + # More than one candidate was found, pass them to the next strategy. + languages = candidates + else + # No candidates, try the next strategy + end end - end.first + + Linguist.instrument("linguist.detected", :blob => blob, :strategy => returning_strategy, :language => languages.first) + + languages.first + end end # Public: Get all Languages @@ -143,7 +150,8 @@ module Linguist # # Returns the Language or nil if none was found. def self.find_by_name(name) - name && @name_index[name.downcase] + return nil if name.to_s.empty? + name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase]) end # Public: Look up Language by one of its aliases. @@ -155,9 +163,10 @@ module Linguist # Language.find_by_alias('cpp') # # => # # - # Returns the Lexer or nil if none was found. + # Returns the Language or nil if none was found. def self.find_by_alias(name) - name && @alias_index[name.downcase] + return nil if name.to_s.empty? + name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase]) end # Public: Look up Languages by filename. @@ -196,7 +205,7 @@ module Linguist # Returns all matching Languages or [] if none were found. def self.find_by_extension(extname) extname = ".#{extname}" unless extname.start_with?(".") - @extension_index[extname] + @extension_index[extname.downcase] end # DEPRECATED @@ -219,7 +228,7 @@ module Linguist end - # Public: Look up Language by its name or lexer. + # Public: Look up Language by its name. # # name - The String name of the Language # @@ -233,7 +242,8 @@ module Linguist # # Returns the Language or nil if none was found. def self.[](name) - name && @index[name.downcase] + return nil if name.to_s.empty? + name && (@index[name.downcase] || @index[name.split(',').first.downcase]) end # Public: A List of popular languages @@ -243,7 +253,7 @@ module Linguist # # This list is configured in "popular.yml". # - # Returns an Array of Lexers. + # Returns an Array of Languages. def self.popular @popular ||= all.select(&:popular?).sort_by { |lang| lang.name.downcase } end @@ -255,7 +265,7 @@ module Linguist # # This list is created from all the languages not listed in "popular.yml". # - # Returns an Array of Lexers. + # Returns an Array of Languages. def self.unpopular @unpopular ||= all.select(&:unpopular?).sort_by { |lang| lang.name.downcase } end @@ -375,11 +385,6 @@ module Linguist # Returns the name String attr_reader :search_term - # Public: Get Lexer - # - # Returns the Lexer - attr_reader :lexer - # Public: Get the name of a TextMate-compatible scope # # Returns the scope @@ -495,16 +500,6 @@ module Linguist @searchable end - # Public: Highlight syntax of text - # - # text - String of code to be highlighted - # options - A Hash of options (defaults to {}) - # - # Returns html String - def colorize(text, options = {}) - lexer.highlight(text, options) - end - # Public: Return name as String representation def to_s name @@ -548,8 +543,8 @@ module Linguist if extnames = extensions[name] extnames.each do |extname| - if !options['extensions'].index { |x| x.end_with? extname } - warn "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml" unless extname == '.script!' + if !options['extensions'].index { |x| x.downcase.end_with? extname.downcase } + warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" options['extensions'] << extname end end @@ -580,7 +575,6 @@ module Linguist :color => options['color'], :type => options['type'], :aliases => options['aliases'], - :lexer => options['lexer'], :tm_scope => options['tm_scope'], :ace_mode => options['ace_mode'], :wrap => options['wrap'], diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml old mode 100644 new mode 100755 index d8cd6824..38a617dc --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -8,7 +8,8 @@ # Use "text" if a mode does not exist. # wrap - Boolean wrap to enable line wrapping (default: false) # extensions - An Array of associated extensions (the first one is -# considered the primary extension) +# considered the primary extension, the others should be +# listed alphabetically) # interpreters - An Array of associated interpreters # searchable - Boolean flag to enable searching (defaults to true) # search_term - Deprecated: Some languages maybe indexed under a @@ -18,6 +19,8 @@ # language. This should match one of the scopes listed in # the grammars.yml file. Use "none" if there is no grammar # for this language. +# group - Name of the parent language. Languages in a group are counted +# in the statistics as the parent language. # # Any additions or modifications (even trivial) should have corresponding # test change in `test/test_blob.rb`. @@ -26,6 +29,7 @@ ABAP: type: programming + color: "#E8274B" extensions: - .abap ace_mode: abap @@ -41,6 +45,15 @@ AGS Script: tm_scope: source.c++ ace_mode: c_cpp +AMPL: + type: programming + color: "#E6EFBB" + extensions: + - .ampl + - .mod + tm_scope: source.ampl + ace_mode: text + ANTLR: type: programming color: "#9DC3FF" @@ -48,19 +61,28 @@ ANTLR: - .g4 ace_mode: text +API Blueprint: + type: markup + color: "#2ACCA8" + ace_mode: markdown + extensions: + - .apib + tm_scope: text.html.markdown.source.gfm.apib + APL: type: programming - color: "#8a0707" + color: "#5A8164" extensions: - .apl - .dyalog - tm_scope: none + tm_scope: source.apl ace_mode: text ASP: type: programming color: "#6a40fd" search_term: aspx-vb + tm_scope: text.html.asp aliases: - aspx - aspx-vb @@ -81,16 +103,15 @@ ATS: - ats2 extensions: - .dats - - .atxt - .hats - .sats - tm_scope: source.ocaml + tm_scope: source.ats ace_mode: ocaml ActionScript: type: programming tm_scope: source.actionscript.3 - color: "#e3491a" + color: "#882B0F" search_term: as3 aliases: - actionscript 3 @@ -108,19 +129,20 @@ Ada: - .ada - .ads aliases: - - ada95ada2005 + - ada95 + - ada2005 ace_mode: ada Agda: type: programming - color: "#467C91" + color: "#315665" extensions: - .agda ace_mode: text Alloy: type: programming # 'modeling' would be more appropiate - color: "#cc5c24" + color: "#64C800" extensions: - .als ace_mode: text @@ -140,7 +162,7 @@ ApacheConf: - apache extensions: - .apacheconf - - .conf + - .vhost tm_scope: source.apache-config ace_mode: apache_conf @@ -161,10 +183,11 @@ AppleScript: interpreters: - osascript ace_mode: applescript + color: "#101F1F" Arc: type: programming - color: "#ca2afe" + color: "#aa2afe" extensions: - .arc tm_scope: none @@ -186,26 +209,27 @@ AsciiDoc: - .asciidoc - .adoc - .asc - tm_scope: none + tm_scope: text.html.asciidoc AspectJ: type: programming - color: "#1957b0" + color: "#a957b0" extensions: - .aj - tm_scope: none + tm_scope: source.aspectj ace_mode: text Assembly: type: programming - color: "#a67219" + color: "#6E4C13" search_term: nasm aliases: - nasm extensions: - .asm - - .ASM - .a51 + - .inc + - .nasm tm_scope: source.asm.x86 ace_mode: assembly_x86 @@ -224,12 +248,12 @@ AutoHotkey: extensions: - .ahk - .ahkl - tm_scope: none + tm_scope: source.ahk ace_mode: autohotkey AutoIt: type: programming - color: "#36699B" + color: "#1C3552" aliases: - au3 - AutoIt3 @@ -256,7 +280,6 @@ Awk: Batchfile: type: programming - group: Shell search_term: bat aliases: - bat @@ -268,18 +291,22 @@ Batchfile: - .cmd tm_scope: source.dosbatch ace_mode: batchfile + color: "#C1F12E" Befunge: + type: programming extensions: - .befunge ace_mode: text Bison: type: programming + group: Yacc tm_scope: source.bison extensions: - - .y + - .bison ace_mode: text + color: "#6A463F" BitBake: type: programming @@ -325,6 +352,8 @@ Boo: ace_mode: text Brainfuck: + type: programming + color: "#2F2530" extensions: - .b - .bf @@ -335,7 +364,7 @@ Brightscript: type: programming extensions: - .brs - tm_scope: none + tm_scope: source.brightscript ace_mode: text Bro: @@ -346,15 +375,15 @@ Bro: C: type: programming - color: "#555" + color: "#555555" extensions: - .c - - .C - - .H - .cats - .h - .idc - .w + interpreters: + - tcc ace_mode: c_cpp C#: @@ -367,6 +396,7 @@ C#: - csharp extensions: - .cs + - .cake - .cshtml - .csx @@ -381,12 +411,14 @@ C++: - .cpp - .c++ - .cc + - .cp - .cxx - .h - .h++ - .hh - .hpp - .hxx + - .inc - .inl - .ipp - .tcc @@ -413,13 +445,14 @@ CLIPS: type: programming extensions: - .clp - tm_scope: none + tm_scope: source.clips ace_mode: text CMake: + type: programming extensions: - .cmake - - .in + - .cmake.in filenames: - CMakeLists.txt ace_mode: text @@ -428,8 +461,6 @@ COBOL: type: programming extensions: - .cob - - .COB - - .CPY - .cbl - .ccp - .cobol @@ -437,11 +468,20 @@ COBOL: ace_mode: cobol CSS: + type: markup + tm_scope: source.css ace_mode: css color: "#563d7c" extensions: - .css +CSV: + type: data + ace_mode: text + tm_scope: none + extensions: + - .csv + Cap'n Proto: type: programming tm_scope: source.capnp @@ -473,7 +513,15 @@ Chapel: - .chpl ace_mode: text +Charity: + type: programming + extensions: + - .ch + tm_scope: none + ace_mode: text + ChucK: + type: programming extensions: - .ck tm_scope: source.java @@ -481,33 +529,50 @@ ChucK: Cirru: type: programming - color: "#aaaaff" + color: "#ccccff" ace_mode: cirru extensions: - .cirru +Clarion: + type: programming + color: "#db901e" + ace_mode: text + extensions: + - .clw + tm_scope: source.clarion + Clean: type: programming - color: "#3a81ad" + color: "#3F85AF" extensions: - .icl - .dcl tm_scope: none ace_mode: text +Click: + type: programming + color: "#E4E6F3" + extensions: + - .click + tm_scope: source.click + ace_mode: text + Clojure: type: programming ace_mode: clojure color: "#db5855" extensions: - .clj + - .boot - .cl2 - .cljc - .cljs + - .cljs.hl - .cljscm - .cljx - .hic - - .hl filenames: - riemann.config @@ -522,6 +587,7 @@ CoffeeScript: extensions: - .coffee - ._coffee + - .cake - .cjsx - .cson - .iced @@ -567,9 +633,11 @@ Common Lisp: - .lisp - .asd - .cl + - .l - .lsp - .ny - .podsl + - .sexp interpreters: - lisp - sbcl @@ -580,7 +648,7 @@ Common Lisp: Component Pascal: type: programming - color: "#b0ce4e" + color: "#B0CE4E" extensions: - .cp - .cps @@ -622,25 +690,28 @@ Creole: wrap: true extensions: - .creole - tm_scope: none + tm_scope: text.html.creole ace_mode: text Crystal: type: programming + color: "#776791" extensions: - .cr ace_mode: ruby - tm_scope: source.ruby + tm_scope: source.crystal interpreters: - crystal Cucumber: + type: programming extensions: - .feature tm_scope: text.gherkin.feature aliases: - gherkin ace_mode: text + color: "#5B2063" Cuda: type: programming @@ -649,6 +720,7 @@ Cuda: - .cuh tm_scope: source.cuda-c++ ace_mode: c_cpp + color: "#3A4E3A" Cycript: type: programming @@ -670,7 +742,7 @@ Cython: D: type: programming - color: "#fcd46d" + color: "#ba595e" extensions: - .d - .di @@ -683,9 +755,18 @@ D-ObjDump: tm_scope: objdump.x86asm ace_mode: assembly_x86 +DIGITAL Command Language: + type: programming + aliases: + - dcl + extensions: + - .com + tm_scope: none + ace_mode: text + DM: type: programming - color: "#075ff1" + color: "#447265" extensions: - .dm aliases: @@ -693,7 +774,27 @@ DM: tm_scope: source.c++ ace_mode: c_cpp +DNS Zone: + type: data + extensions: + - .zone + - .arpa + tm_scope: text.zone_file + ace_mode: text + +DTrace: + type: programming + aliases: + - dtrace-script + extensions: + - .d + interpreters: + - dtrace + tm_scope: source.c + ace_mode: c_cpp + Darcs Patch: + type: data search_term: dpatch aliases: - dpatch @@ -705,17 +806,19 @@ Darcs Patch: Dart: type: programming - color: "#98BAD6" + color: "#00B4AB" extensions: - .dart ace_mode: dart Diff: + type: data extensions: - .diff - .patch aliases: - udiff + tm_scope: source.diff ace_mode: diff Dockerfile: @@ -737,7 +840,7 @@ Dogescript: Dylan: type: programming - color: "#3ebc27" + color: "#6c616e" extensions: - .dylan - .dyl @@ -762,9 +865,17 @@ ECL: tm_scope: none ace_mode: text +ECLiPSe: + type: programming + group: prolog + extensions: + - .ecl + tm_scope: source.prolog.eclipse + ace_mode: prolog + Eagle: type: markup - color: "#3994bc" + color: "#814C05" extensions: - .sch - .brd @@ -793,6 +904,10 @@ Elixir: - .ex - .exs ace_mode: elixir + filenames: + - mix.lock + interpreters: + - elixir Elm: type: programming @@ -811,14 +926,16 @@ Emacs Lisp: - emacs filenames: - .emacs + - .emacs.desktop extensions: - .el - .emacs + - .emacs.desktop ace_mode: lisp EmberScript: type: programming - color: "#f64e3e" + color: "#FFF4F3" extensions: - .em - .emberscript @@ -827,12 +944,18 @@ EmberScript: Erlang: type: programming - color: "#0faf8d" + color: "#B83998" extensions: - .erl - .es - .escript - .hrl + - .xrl + - .yrl + filenames: + - rebar.config + - rebar.config.lock + - rebar.lock ace_mode: erlang interpreters: - escript @@ -852,7 +975,7 @@ F#: FLUX: type: programming - color: "#33CCFF" + color: "#88ccff" extensions: - .fx - .flux @@ -864,14 +987,6 @@ FORTRAN: color: "#4d41b1" extensions: - .f90 - - .F - - .F03 - - .F08 - - .F77 - - .F90 - - .F95 - - .FOR - - .FPP - .f - .f03 - .f08 @@ -910,13 +1025,28 @@ Fantom: tm_scope: source.fan ace_mode: text +Filterscript: + type: programming + group: RenderScript + extensions: + - .fs + tm_scope: none + ace_mode: text + +Formatted: + type: data + extensions: + - .for + - .eam.fs + tm_scope: none + ace_mode: text + Forth: type: programming color: "#341708" extensions: - .fth - .4th - - .F - .f - .for - .forth @@ -925,6 +1055,16 @@ Forth: - .fs ace_mode: forth +FreeMarker: + type: programming + color: "#0050b2" + aliases: + - ftl + extensions: + - .ftl + tm_scope: text.html.ftl + ace_mode: ftl + Frege: type: programming color: "#00cafe" @@ -939,7 +1079,7 @@ G-code: - .g - .gco - .gcode - tm_scope: none + tm_scope: source.gcode ace_mode: gcode GAMS: @@ -956,7 +1096,8 @@ GAP: - .gap - .gd - .gi - tm_scope: none + - .tst + tm_scope: source.gap ace_mode: text GAS: @@ -964,7 +1105,7 @@ GAS: group: Assembly extensions: - .s - - .S + - .ms tm_scope: source.asm.x86 ace_mode: assembly_x86 @@ -972,11 +1113,10 @@ GDScript: type: programming extensions: - .gd - tm_scope: none + tm_scope: source.gdscript ace_mode: text GLSL: - group: C type: programming extensions: - .glsl @@ -997,13 +1137,14 @@ GLSL: Game Maker Language: type: programming - color: "#8ad353" + color: "#8fb200" extensions: - .gml tm_scope: source.c++ ace_mode: c_cpp Genshi: + type: programming extensions: - .kid tm_scope: text.xml.genshi @@ -1013,6 +1154,7 @@ Genshi: ace_mode: xml Gentoo Ebuild: + type: programming group: Shell extensions: - .ebuild @@ -1020,6 +1162,7 @@ Gentoo Ebuild: ace_mode: sh Gentoo Eclass: + type: programming group: Shell extensions: - .eclass @@ -1027,6 +1170,7 @@ Gentoo Eclass: ace_mode: sh Gettext Catalog: + type: prose search_term: pot searchable: false aliases: @@ -1067,10 +1211,10 @@ Go: Golo: type: programming - color: "#f6a51f" + color: "#88562A" extensions: - .golo - tm_scope: none + tm_scope: source.golo ace_mode: text Gosu: @@ -1088,7 +1232,7 @@ Grace: type: programming extensions: - .grace - tm_scope: none + tm_scope: source.grace ace_mode: text Gradle: @@ -1106,7 +1250,7 @@ Grammatical Framework: extensions: - .gf searchable: true - color: "#ff0000" + color: "#79aa7a" tm_scope: source.haskell ace_mode: haskell @@ -1122,20 +1266,34 @@ Graphviz (DOT): tm_scope: source.dot extensions: - .dot - - .DOT - .gv ace_mode: text Groff: + type: markup extensions: - .man - '.1' + - .1in + - .1m + - .1x - '.2' - '.3' + - .3in + - .3m + - .3qt + - .3x - '.4' - '.5' - '.6' - '.7' + - '.8' + - '.9' + - .l + - .ms + - .n + - .rno + - .roff tm_scope: text.groff aliases: - nroff @@ -1152,8 +1310,11 @@ Groovy: - .gvy interpreters: - groovy + filenames: + - Jenkinsfile Groovy Server Pages: + type: programming group: Groovy aliases: - gsp @@ -1163,15 +1324,36 @@ Groovy Server Pages: tm_scope: text.html.jsp ace_mode: jsp +HCL: + type: programming + extensions: + - .hcl + - .tf + ace_mode: ruby + tm_scope: source.ruby + +HLSL: + type: programming + extensions: + - .fx + - .fxh + - .hlsl + - .hlsli + ace_mode: text + tm_scope: none + HTML: type: markup tm_scope: text.html.basic ace_mode: html + color: "#e44b23" aliases: - xhtml extensions: - .html - .htm + - .html.hl + - .inc - .st - .xht - .xhtml @@ -1184,11 +1366,22 @@ HTML+Django: - .mustache - .jinja aliases: + - django - html+django/jinja - html+jinja - htmldjango ace_mode: django +HTML+EEX: + type: markup + tm_scope: text.html.elixir + group: HTML + aliases: + - eex + extensions: + - .eex + ace_mode: text + HTML+ERB: type: markup tm_scope: text.html.erb @@ -1197,8 +1390,8 @@ HTML+ERB: - erb extensions: - .erb - - .deface - ace_mode: html_ruby + - .erb.deface + ace_mode: text HTML+PHP: type: markup @@ -1212,7 +1405,7 @@ HTTP: type: data extensions: - .http - tm_scope: none + tm_scope: source.httpspec ace_mode: text Hack: @@ -1222,19 +1415,24 @@ Hack: - .hh - .php tm_scope: text.html.php + color: "#878787" Haml: group: HTML type: markup extensions: - .haml - - .deface + - .haml.deface ace_mode: haml + color: "#ECE2A9" Handlebars: type: markup + color: "#01a9d6" + group: HTML aliases: - hbs + - htmlbars extensions: - .handlebars - .hbs @@ -1246,7 +1444,7 @@ Harbour: color: "#0e60e3" extensions: - .hb - tm_scope: none + tm_scope: source.harbour ace_mode: text Haskell: @@ -1260,7 +1458,7 @@ Haskell: Haxe: type: programming ace_mode: haxe - color: "#f7941e" + color: "#df7900" extensions: - .hx - .hxsl @@ -1268,17 +1466,24 @@ Haxe: Hy: type: programming - ace_mode: clojure - color: "#7891b1" + ace_mode: text + color: "#7790B2" extensions: - .hy aliases: - hylang + tm_scope: source.hy + +HyPhy: + type: programming + ace_mode: text + extensions: + - .bf tm_scope: none IDL: type: programming - color: "#e3592c" + color: "#a3522f" extensions: - .pro - .dlm @@ -1300,6 +1505,7 @@ INI: - .ini - .cfg - .prefs + - .pro - .properties tm_scope: source.ini aliases: @@ -1307,6 +1513,7 @@ INI: ace_mode: ini IRC log: + type: data search_term: irc aliases: - irc @@ -1330,16 +1537,17 @@ Inform 7: extensions: - .ni - .i7x - tm_scope: source.Inform7 + tm_scope: source.inform7 aliases: - i7 - inform7 ace_mode: text Inno Setup: + type: programming extensions: - .iss - tm_scope: none + tm_scope: source.inno ace_mode: text Io: @@ -1360,17 +1568,36 @@ Ioke: Isabelle: type: programming - color: "#fdcd00" + color: "#FEFE00" extensions: - .thy tm_scope: source.isabelle.theory ace_mode: text +Isabelle ROOT: + type: programming + group: Isabelle + filenames: + - ROOT + tm_scope: source.isabelle.root + ace_mode: text + J: type: programming + color: "#9EEDFF" extensions: - .ijs - tm_scope: none + tm_scope: source.j + ace_mode: text + +JFlex: + type: programming + color: "#DBCA00" + group: Lex + extensions: + - .flex + - .jflex + tm_scope: source.jflex ace_mode: text JSON: @@ -1381,14 +1608,9 @@ JSON: searchable: false extensions: - .json + - .geojson - .lock - - .sublime-keymap - - .sublime-mousemap - - .sublime-project - - .sublime-settings - - .sublime-workspace - - .sublime_metrics - - .sublime_session + - .topojson filenames: - .jshintrc - composer.lock @@ -1409,18 +1631,27 @@ JSONLD: tm_scope: source.js JSONiq: + color: "#40d47e" type: programming ace_mode: jsoniq extensions: - .jq - tm_scope: source.xquery + tm_scope: source.jq + +JSX: + type: programming + group: JavaScript + extensions: + - .jsx + tm_scope: source.js.jsx + ace_mode: javascript Jade: group: HTML type: markup extensions: - .jade - tm_scope: source.jade + tm_scope: text.jade ace_mode: jade Jasmin: @@ -1438,6 +1669,7 @@ Java: - .java Java Server Pages: + type: programming group: Java search_term: jsp aliases: @@ -1464,14 +1696,27 @@ JavaScript: - .gs - .jake - .jsb + - .jscad - .jsfl - .jsm - .jss - - .jsx - .njs - .pac - .sjs - .ssjs + - .sublime-build + - .sublime-commands + - .sublime-completions + - .sublime-keymap + - .sublime-macro + - .sublime-menu + - .sublime-mousemap + - .sublime-project + - .sublime-settings + - .sublime-theme + - .sublime-workspace + - .sublime_metrics + - .sublime_session - .xsjs - .xsjslib filenames: @@ -1486,14 +1731,35 @@ Julia: color: "#a270ba" ace_mode: julia +Jupyter Notebook: + type: markup + ace_mode: json + tm_scope: source.json + color: "#DA5B0B" + extensions: + - .ipynb + filenames: + - Notebook + aliases: + - IPython Notebook + KRL: type: programming - color: "#f5c800" + color: "#28431f" extensions: - .krl tm_scope: none ace_mode: text +KiCad: + type: programming + extensions: + - .sch + - .brd + - .kicad_pcb + tm_scope: none + ace_mode: text + Kit: type: markup ace_mode: html @@ -1503,6 +1769,7 @@ Kit: Kotlin: type: programming + color: "#F18E33" extensions: - .kt - .ktm @@ -1520,9 +1787,11 @@ LFE: ace_mode: lisp LLVM: + type: programming extensions: - .ll ace_mode: text + color: "#185619" LOLCODE: type: programming @@ -1537,6 +1806,7 @@ LSL: ace_mode: lsl extensions: - .lsl + - .lslp interpreters: - lsl color: '#3d9970' @@ -1545,12 +1815,12 @@ LabVIEW: type: programming extensions: - .lvproj - tm_scope: none - ace_mode: text + tm_scope: text.xml + ace_mode: xml Lasso: type: programming - color: "#2584c3" + color: "#999999" extensions: - .lasso - .las @@ -1568,9 +1838,16 @@ Latte: group: HTML extensions: - .latte - tm_scope: source.smarty + tm_scope: text.html.smarty ace_mode: smarty +Lean: + type: programming + extensions: + - .lean + - .hlean + ace_mode: lean + Less: type: markup group: CSS @@ -1578,18 +1855,56 @@ Less: - .less tm_scope: source.css.less ace_mode: less + color: "#A1D9A1" + +Lex: + type: programming + color: "#DBCA00" + aliases: + - flex + extensions: + - .l + - .lex + tm_scope: none + ace_mode: text LilyPond: + type: programming extensions: - .ly - .ily ace_mode: text +Limbo: + type: programming + extensions: + - .b + - .m + tm_scope: none + ace_mode: text + +Linker Script: + type: data + extensions: + - .ld + - .lds + filenames: + - ld.script + tm_scope: none + ace_mode: text + +Linux Kernel Module: + type: data + extensions: + - .mod + tm_scope: none + ace_mode: text + Liquid: type: markup extensions: - .liquid - tm_scope: none + tm_scope: text.html.liquid ace_mode: liquid Literate Agda: @@ -1671,7 +1986,7 @@ LoomScript: Lua: type: programming ace_mode: lua - color: "#fa1fa1" + color: "#000080" extensions: - .lua - .fcgi @@ -1692,32 +2007,76 @@ M: tm_scope: source.lisp ace_mode: lisp +M4: + type: programming + extensions: + - .m4 + tm_scope: none + ace_mode: text + +M4Sugar: + type: programming + group: M4 + aliases: + - autoconf + extensions: + - .m4 + filenames: + - configure.ac + tm_scope: none + ace_mode: text + +MAXScript: + type: programming + color: "#00a6a6" + extensions: + - .ms + - .mcr + tm_scope: source.maxscript + ace_mode: text + MTML: type: markup - color: "#0095d9" + color: "#b7e1f4" extensions: - .mtml tm_scope: text.html.basic ace_mode: html +MUF: + type: programming + group: Forth + extensions: + - .muf + - .m + tm_scope: none + ace_mode: forth + Makefile: type: programming + color: "#427819" aliases: - bsdmake - make - mf extensions: - .mak + - .d - .mk filenames: - GNUmakefile + - Kbuild - Makefile + - Makefile.am + - Makefile.in + - Makefile.inc - makefile interpreters: - make ace_mode: makefile Mako: + type: programming extensions: - .mako - .mao @@ -1736,6 +2095,7 @@ Markdown: - .mkdown - .ron tm_scope: source.gfm + color: "#083FA1" Mask: type: markup @@ -1752,8 +2112,11 @@ Mathematica: - .cdf - .m - .ma + - .mt - .nb - .nbp + - .wl + - .wlt aliases: - mma ace_mode: text @@ -1761,6 +2124,8 @@ Mathematica: Matlab: type: programming color: "#bb92ac" + aliases: + - octave extensions: - .matlab - .m @@ -1775,7 +2140,7 @@ Maven POM: Max: type: programming - color: "#ce279c" + color: "#c4a79c" aliases: - max/msp - maxmsp @@ -1794,12 +2159,13 @@ MediaWiki: wrap: true extensions: - .mediawiki - tm_scope: none + - .wiki + tm_scope: text.html.mediawiki ace_mode: text Mercury: type: programming - color: "#abcdef" + color: "#ff2b2b" ace_mode: prolog interpreters: - mmi @@ -1809,7 +2175,16 @@ Mercury: tm_scope: source.mercury ace_mode: prolog +Metal: + type: programming + color: "#8f14e9" + extensions: + - .metal + tm_scope: source.c++ + ace_mode: c_cpp + MiniD: # Legacy + type: programming searchable: false extensions: - .minid # Dummy extension @@ -1828,6 +2203,31 @@ Mirah: tm_scope: source.ruby ace_mode: ruby +Modelica: + type: programming + extensions: + - .mo + tm_scope: source.modelica + ace_mode: text + +Modula-2: + type: programming + extensions: + - .mod + tm_scope: source.modula2 + ace_mode: text + +Module Management System: + type: programming + extensions: + - .mms + - .mmk + filenames: + - descrip.mmk + - descrip.mms + tm_scope: none + ace_mode: text + Monkey: type: programming extensions: @@ -1850,12 +2250,29 @@ MoonScript: ace_mode: text Myghty: + type: programming extensions: - .myt tm_scope: none ace_mode: text +NCL: + type: programming + color: "#28431f" + extensions: + - .ncl + tm_scope: source.ncl + ace_mode: text + +NL: + type: data + extensions: + - .nl + tm_scope: none + ace_mode: text + NSIS: + type: programming extensions: - .nsi - .nsh @@ -1863,27 +2280,62 @@ NSIS: Nemerle: type: programming - color: "#0d3c6e" + color: "#3d3c6e" extensions: - .n ace_mode: text +NetLinx: + type: programming + color: "#0aa0ff" + extensions: + - .axs + - .axi + tm_scope: source.netlinx + ace_mode: text + +NetLinx+ERB: + type: programming + color: "#747faa" + extensions: + - .axs.erb + - .axi.erb + tm_scope: source.netlinx.erb + ace_mode: text + NetLogo: type: programming - color: "#ff2b2b" + color: "#ff6375" extensions: - .nlogo tm_scope: source.lisp ace_mode: lisp +NewLisp: + type: programming + lexer: NewLisp + color: "#87AED7" + extensions: + - .nl + - .lisp + - .lsp + interpreters: + - newlisp + tm_scope: source.lisp + ace_mode: lisp + Nginx: type: markup extensions: - .nginxconf + - .vhost + filenames: + - nginx.conf tm_scope: source.nginx aliases: - nginx configuration file ace_mode: text + color: "#9469E9" Nimrod: type: programming @@ -1903,15 +2355,15 @@ Ninja: Nit: type: programming - color: "#0d8921" + color: "#009917" extensions: - .nit - tm_scope: none + tm_scope: source.nit ace_mode: text Nix: type: programming - color: "#7070ff" + color: "#7e7eff" extensions: - .nix aliases: @@ -1934,6 +2386,7 @@ Nu: - nush NumPy: + type: programming group: Python extensions: - .numpy @@ -1941,6 +2394,7 @@ NumPy: - .numsc tm_scope: none ace_mode: text + color: "#9C8AF9" OCaml: type: programming @@ -1954,6 +2408,10 @@ OCaml: - .mli - .mll - .mly + interpreters: + - ocaml + - ocamlrun + tm_scope: source.ocaml ObjDump: type: data @@ -1978,7 +2436,7 @@ Objective-C: Objective-C++: type: programming tm_scope: source.objc++ - color: "#4886FC" + color: "#6866fb" aliases: - obj-c++ - objc++ @@ -2019,7 +2477,7 @@ Opal: color: "#f7ede0" extensions: - .opal - tm_scope: none + tm_scope: source.opal ace_mode: text OpenCL: @@ -2047,8 +2505,8 @@ OpenSCAD: type: programming extensions: - .scad - tm_scope: none - ace_mode: text + tm_scope: source.scad + ace_mode: scad Org: type: prose @@ -2064,12 +2522,12 @@ Ox: - .ox - .oxh - .oxo - tm_scope: none + tm_scope: source.ox ace_mode: text Oxygene: type: programming - color: "#5a63a3" + color: "#cdd0e3" extensions: - .oxygene tm_scope: none @@ -2077,7 +2535,7 @@ Oxygene: Oz: type: programming - color: "#fcaf3e" + color: "#fab738" extensions: - .oz tm_scope: source.oz @@ -2101,9 +2559,11 @@ PHP: - .aw - .ctp - .fcgi + - .inc - .php3 - .php4 - .php5 + - .phps - .phpt filenames: - Phakefile @@ -2112,6 +2572,39 @@ PHP: aliases: - inc +#Oracle +PLSQL: + type: programming + ace_mode: sql + tm_scope: source.plsql.oracle + color: "#dad8d8" + extensions: + - .pls + - .pck + - .pkb + - .pks + - .plb + - .plsql + - .sql + +#Postgres +PLpgSQL: + type: programming + ace_mode: pgsql + tm_scope: source.sql + extensions: + - .sql + +POV-Ray SDL: + type: programming + aliases: + - pov-ray + - povray + extensions: + - .pov + - .inc + ace_mode: text + Pan: type: programming color: '#cc0000' @@ -2125,7 +2618,7 @@ Papyrus: color: "#6600cc" extensions: - .psc - tm_scope: none + tm_scope: source.papyrus ace_mode: text Parrot: @@ -2162,22 +2655,24 @@ Parrot Internal Representation: Pascal: type: programming - color: "#b0ce4e" + color: "#E3F171" extensions: - .pas - .dfm - .dpr + - .inc - .lpr - .pp ace_mode: pascal Perl: type: programming + tm_scope: source.perl ace_mode: perl color: "#0298c3" extensions: - .pl - - .PL + - .al - .cgi - .fcgi - .perl @@ -2192,7 +2687,7 @@ Perl: Perl6: type: programming - color: "#0298c3" + color: "#0000fb" extensions: - .6pl - .6pm @@ -2205,25 +2700,46 @@ Perl6: - .pm - .pm6 - .t + filenames: + - Rexfile interpreters: - perl6 - tm_scope: none + tm_scope: source.perl6fe ace_mode: perl +Pickle: + type: data + extensions: + - .pkl + tm_scope: none + ace_mode: text + +PicoLisp: + type: programming + extensions: + - .l + interpreters: + - picolisp + - pil + tm_scope: source.lisp + ace_mode: lisp + PigLatin: type: programming color: "#fcd7de" extensions: - .pig - tm_scope: none + tm_scope: source.pig_latin ace_mode: text Pike: type: programming - color: "#066ab2" + color: "#005390" extensions: - .pike - .pmod + interpreters: + - pike ace_mode: text Pod: @@ -2239,7 +2755,14 @@ PogoScript: color: "#d80074" extensions: - .pogo - tm_scope: none + tm_scope: source.pogoscript + ace_mode: text + +Pony: + type: programming + extensions: + - .pony + tm_scope: source.pony ace_mode: text PostScript: @@ -2264,7 +2787,7 @@ PowerShell: Processing: type: programming - color: "#2779ab" + color: "#0096D8" extensions: - .pde ace_mode: text @@ -2274,19 +2797,21 @@ Prolog: color: "#74283c" extensions: - .pl - - .ecl - .pro - .prolog + - .yap interpreters: - swipl + - yap + tm_scope: source.prolog ace_mode: prolog Propeller Spin: type: programming - color: "#2b446d" + color: "#7fa2a7" extensions: - .spin - tm_scope: none + tm_scope: source.spin ace_mode: text Protocol Buffer: @@ -2309,7 +2834,7 @@ Public Key: Puppet: type: programming - color: "#cc5555" + color: "#302B6D" extensions: - .pp filenames: @@ -2335,18 +2860,19 @@ PureBasic: PureScript: type: programming - color: "#bcdc53" + color: "#1D222D" extensions: - .purs - tm_scope: source.haskell + tm_scope: source.purescript ace_mode: haskell Python: type: programming ace_mode: python - color: "#3581ba" + color: "#3572A5" extensions: - .py + - .bzl - .cgi - .fcgi - .gyp @@ -2355,10 +2881,12 @@ Python: - .pyp - .pyt - .pyw + - .rpy - .tac - .wsgi - .xpy filenames: + - BUCK - BUILD - SConscript - SConstruct @@ -2368,6 +2896,8 @@ Python: - python - python2 - python3 + aliases: + - rusthon Python traceback: type: data @@ -2379,14 +2909,16 @@ Python traceback: ace_mode: text QML: - type: markup + type: programming color: "#44a51c" extensions: - .qml + - .qbs tm_scope: source.qml ace_mode: text QMake: + type: programming extensions: - .pro - .pri @@ -2396,15 +2928,13 @@ QMake: R: type: programming - color: "#198ce7" + color: "#198CE7" aliases: - R - Rscript - splus extensions: - .r - - .R - - .Rd - .rd - .rsx filenames: @@ -2414,8 +2944,7 @@ R: ace_mode: r RAML: - type: data - lexer: YAML + type: markup ace_mode: yaml tm_scope: source.yaml color: "#77d9fb" @@ -2429,6 +2958,7 @@ RDoc: extensions: - .rdoc tm_scope: text.rdoc + color: "#8E84BF" REALbasic: type: programming @@ -2458,23 +2988,24 @@ RMarkdown: ace_mode: markdown extensions: - .rmd - - .Rmd - tm_scope: none + tm_scope: source.gfm Racket: type: programming - color: "#ae17ff" + color: "#22228f" extensions: - .rkt - .rktd - .rktl - .scrbl + interpreters: + - racket tm_scope: source.racket ace_mode: lisp Ragel in Ruby Host: type: programming - color: "#ff9c2e" + color: "#9d5200" extensions: - .rl aliases: @@ -2484,6 +3015,7 @@ Ragel in Ruby Host: ace_mode: text Raw token data: + type: data search_term: raw aliases: - raw @@ -2502,6 +3034,7 @@ Rebol: - .r3 - .rebol ace_mode: text + tm_scope: source.rebol Red: type: programming @@ -2511,15 +3044,34 @@ Red: - .reds aliases: - red/system - tm_scope: none + tm_scope: source.red ace_mode: text Redcode: + type: programming extensions: - .cw tm_scope: none ace_mode: text +Ren'Py: + type: programming + aliases: + - renpy + color: "#ff7f7f" + extensions: + - .rpy + tm_scope: source.renpy + ace_mode: python + +RenderScript: + type: programming + extensions: + - .rs + - .rsh + tm_scope: none + ace_mode: text + RobotFramework: type: programming extensions: @@ -2553,6 +3105,7 @@ Ruby: - .gemspec - .god - .irbrc + - .jbuilder - .mspec - .pluginspec - .podspec @@ -2562,17 +3115,23 @@ Ruby: - .rbw - .rbx - .ru + - .ruby - .thor - .watchr interpreters: - ruby - macruby - rake + - jruby + - rbx filenames: - .pryrc - Appraisals - Berksfile + - Brewfile - Buildfile + - Deliverfile + - Fastfile - Gemfile - Gemfile.lock - Guardfile @@ -2580,6 +3139,7 @@ Ruby: - Mavenfile - Podfile - Puppetfile + - Snapfile - Thorfile - Vagrantfile - buildfile @@ -2589,11 +3149,12 @@ Rust: color: "#dea584" extensions: - .rs + - .rs.in ace_mode: rust SAS: type: programming - color: "#1E90FF" + color: "#B34936" extensions: - .sas tm_scope: source.sas @@ -2606,10 +3167,38 @@ SCSS: ace_mode: scss extensions: - .scss + color: "#CF649A" + +SMT: + type: programming + extensions: + - .smt2 + - .smt + interpreters: + - boolector + - cvc4 + - mathsat5 + - opensmt + - smtinterpol + - smt-rat + - stp + - verit + - yices2 + - z3 + tm_scope: source.smt + ace_mode: text + +SPARQL: + type: data + tm_scope: source.sparql + ace_mode: text + extensions: + - .sparql + - .rq SQF: type: programming - color: "#FFCB1F" + color: "#3F3F3F" extensions: - .sqf - .hqf @@ -2622,30 +3211,50 @@ SQL: ace_mode: sql extensions: - .sql + - .cql + - .ddl + - .inc - .prc - .tab - .udf - .viw +#IBM DB2 +SQLPL: + type: programming + ace_mode: sql + tm_scope: source.sql + extensions: + - .sql + - .db2 + STON: type: data group: Smalltalk extensions: - .ston - tm_scope: source.json - ace_mode: lisp + tm_scope: source.smalltalk + ace_mode: text + +SVG: + type: data + extensions: + - .svg + tm_scope: text.xml + ace_mode: xml Sage: type: programming group: Python extensions: - .sage + - .sagews tm_scope: source.python ace_mode: python SaltStack: - type: data - group: YAML + type: programming + color: "#646464" aliases: - saltstate - salt @@ -2661,11 +3270,12 @@ Sass: extensions: - .sass ace_mode: sass + color: "#CF649A" Scala: type: programming ace_mode: scala - color: "#7dd3b0" + color: "#DC322F" extensions: - .scala - .sbt @@ -2692,7 +3302,6 @@ Scheme: - .ss interpreters: - guile - - racket - bigloo - chicken ace_mode: scheme @@ -2719,6 +3328,7 @@ Shell: color: "#89e051" aliases: - sh + - shell-script - bash - zsh extensions: @@ -2729,7 +3339,9 @@ Shell: - .command - .fcgi - .ksh + - .sh.in - .tmux + - .tool - .zsh interpreters: - bash @@ -2767,11 +3379,19 @@ Slash: Slim: group: HTML type: markup - color: "#ff8877" + color: "#ff8f77" extensions: - .slim + tm_scope: text.slim ace_mode: text +Smali: + type: programming + extensions: + - .smali + ace_mode: text + tm_scope: source.smali + Smalltalk: type: programming color: "#596706" @@ -2783,27 +3403,40 @@ Smalltalk: ace_mode: text Smarty: + type: programming extensions: - .tpl ace_mode: smarty + tm_scope: text.html.smarty SourcePawn: type: programming - color: "#f69e1d" + color: "#5c7611" aliases: - sourcemod extensions: - .sp + - .inc + - .sma tm_scope: source.sp ace_mode: text Squirrel: type: programming + color: "#800000" extensions: - .nut tm_scope: source.c++ ace_mode: c_cpp +Stan: + type: programming + color: "#b2011d" + extensions: + - .stan + ace_mode: text + tm_scope: source.stan + Standard ML: type: programming color: "#dc566d" @@ -2834,16 +3467,19 @@ Stylus: group: CSS extensions: - .styl - tm_scope: none + tm_scope: source.stylus ace_mode: stylus SuperCollider: type: programming color: "#46390b" extensions: - - .scd - .sc - tm_scope: none + - .scd + interpreters: + - sclang + - scsynth + tm_scope: source.supercollider ace_mode: text Swift: @@ -2855,7 +3491,7 @@ Swift: SystemVerilog: type: programming - color: "#343761" + color: "#DAE1C2" extensions: - .sv - .svh @@ -2873,7 +3509,7 @@ TXL: type: programming extensions: - .txl - tm_scope: none + tm_scope: source.txl ace_mode: text Tcl: @@ -2931,9 +3567,14 @@ Tea: Text: type: prose wrap: true + aliases: + - fundamental extensions: - .txt - .fr + - .nb + - .ncl + - .no tm_scope: none ace_mode: text @@ -2961,9 +3602,16 @@ Turing: tm_scope: none ace_mode: text +Turtle: + type: data + extensions: + - .ttl + tm_scope: source.turtle + ace_mode: text + Twig: type: markup - group: PHP + group: HTML extensions: - .twig tm_scope: text.html.twig @@ -2971,11 +3619,12 @@ Twig: TypeScript: type: programming - color: "#31859c" + color: "#2b7489" aliases: - ts extensions: - .ts + - .tsx tm_scope: source.ts ace_mode: typescript @@ -2983,11 +3632,30 @@ Unified Parallel C: type: programming group: C ace_mode: c_cpp - color: "#755223" + color: "#4e3617" extensions: - .upc tm_scope: source.c +Unity3D Asset: + type: data + ace_mode: yaml + extensions: + - .anim + - .asset + - .mat + - .meta + - .prefab + - .unity + tm_scope: source.yaml + +Uno: + type: programming + extensions: + - .uno + ace_mode: csharp + tm_scope: source.cs + UnrealScript: type: programming color: "#a54c4d" @@ -2996,17 +3664,28 @@ UnrealScript: tm_scope: source.java ace_mode: java -VCL: +UrWeb: + type: programming + aliases: + - Ur/Web + - Ur + extensions: + - .ur + - .urs + tm_scope: source.ur + ace_mode: text + +VCL: + group: Perl type: programming - ace_mode: perl - color: "#0298c3" extensions: - .vcl - tm_scope: source.perl + tm_scope: source.varnish.vcl + ace_mode: text VHDL: type: programming - color: "#543978" + color: "#adb2cb" extensions: - .vhdl - .vhd @@ -3020,7 +3699,7 @@ VHDL: Vala: type: programming - color: "#ee7d06" + color: "#fbe5cd" extensions: - .vala - .vapi @@ -3028,7 +3707,7 @@ Vala: Verilog: type: programming - color: "#848bf3" + color: "#b2b7f8" extensions: - .v - .veo @@ -3036,16 +3715,19 @@ Verilog: VimL: type: programming - color: "#199c4b" + color: "#199f4b" search_term: vim aliases: - vim + - nvim extensions: - .vim filenames: + - .nvimrc - .vimrc - _vimrc - gvimrc + - nvimrc - vimrc ace_mode: text @@ -3069,12 +3751,28 @@ Visual Basic: Volt: type: programming - color: "#0098db" + color: "#1F1F1F" extensions: - .volt tm_scope: source.d ace_mode: d +Vue: + type: markup + color: "#2c3e50" + extensions: + - .vue + tm_scope: text.html.vue + ace_mode: html + +Web Ontology Language: + type: markup + color: "#9cc9dd" + extensions: + - .owl + tm_scope: text.xml + ace_mode: xml + WebIDL: type: programming extensions: @@ -3082,15 +3780,26 @@ WebIDL: tm_scope: source.webidl ace_mode: text +X10: + type: programming + aliases: + - xten + ace_mode: text + extensions: + - .x10 + color: "#4B6BEF" + tm_scope: source.x10 + XC: type: programming + color: "#99DA07" extensions: - .xc - tm_scope: source.c + tm_scope: source.xc ace_mode: c_cpp XML: - type: markup + type: data ace_mode: xml aliases: - rss @@ -3103,6 +3812,7 @@ XML: - .ccxml - .clixml - .cproject + - .csl - .csproj - .ct - .dita @@ -3111,16 +3821,23 @@ XML: - .dll.config - .filters - .fsproj + - .fxml - .glade + - .gml - .grxml + - .iml - .ivy - .jelly + - .jsproj - .kml - .launch + - .mdpolicy - .mm + - .mod - .mxml - .nproj - .nuspec + - .odd - .osm - .plist - .pluginspec @@ -3131,17 +3848,21 @@ XML: - .rss - .scxml - .srdf - - .svg + - .storyboard + - .stTheme + - .sublime-snippet - .targets - .tmCommand + - .tml - .tmLanguage - .tmPreferences - .tmSnippet - .tmTheme - - .tml - .ts + - .tsx - .ui - .urdf + - .ux - .vbproj - .vcxproj - .vxml @@ -3153,10 +3874,12 @@ XML: - .x3d - .xacro - .xaml + - .xib - .xlf - .xliff - .xmi - .xml.dist + - .xproj - .xsd - .xul - .zcml @@ -3169,6 +3892,14 @@ XML: - Web.config - packages.config +XPages: + type: programming + extensions: + - .xsp-config + - .xsp.metadata + tm_scope: none + ace_mode: xml + XProc: type: programming extensions: @@ -3179,7 +3910,7 @@ XProc: XQuery: type: programming - color: "#2700e2" + color: "#5232e7" extensions: - .xquery - .xq @@ -3187,8 +3918,10 @@ XQuery: - .xqm - .xqy ace_mode: xquery + tm_scope: source.xq XS: + type: programming extensions: - .xs tm_scope: source.c @@ -3203,6 +3936,7 @@ XSLT: - .xsl tm_scope: text.xml.xsl ace_mode: xml + color: "#EB8CEB" Xojo: type: programming @@ -3231,9 +3965,29 @@ YAML: - .yml - .reek - .rviz + - .sublime-syntax + - .syntax - .yaml + - .yaml-tmlanguage ace_mode: yaml +YANG: + type: data + extensions: + - .yang + tm_scope: source.yang + ace_mode: text + +Yacc: + type: programming + extensions: + - .y + - .yacc + - .yy + tm_scope: source.bison + ace_mode: text + color: "#4B6C4B" + Zephir: type: programming color: "#118f9e" @@ -3251,19 +4005,27 @@ Zimpl: tm_scope: none ace_mode: text +desktop: + type: data + extensions: + - .desktop + - .desktop.in + tm_scope: source.desktop + ace_mode: text + eC: type: programming + color: "#913960" search_term: ec extensions: - .ec - .eh - tm_scope: none + tm_scope: source.c.ec ace_mode: text edn: type: data ace_mode: clojure - color: "#db5855" extensions: - .edn tm_scope: source.clojure @@ -3277,13 +4039,14 @@ fish: ace_mode: text mupad: + type: programming extensions: - .mu ace_mode: text nesC: type: programming - color: "#ffce3b" + color: "#94B0C7" extensions: - .nc ace_mode: text @@ -3304,7 +4067,10 @@ reStructuredText: extensions: - .rst - .rest + - .rest.txt + - .rst.txt ace_mode: text + color: "#B3BCBC" wisp: type: programming @@ -3316,8 +4082,14 @@ wisp: xBase: type: programming - color: "#3a4040" + color: "#403a40" + aliases: + - advpl + - clipper + - foxpro extensions: - .prg - tm_scope: none + - .ch + - .prw + tm_scope: source.harbour ace_mode: text diff --git a/lib/linguist/lazy_blob.rb b/lib/linguist/lazy_blob.rb index 9691bca5..e828dca6 100644 --- a/lib/linguist/lazy_blob.rb +++ b/lib/linguist/lazy_blob.rb @@ -4,7 +4,11 @@ require 'rugged' module Linguist class LazyBlob - GIT_ATTR = ['linguist-language', 'linguist-vendored'] + GIT_ATTR = ['linguist-documentation', + 'linguist-language', + 'linguist-vendored', + 'linguist-generated'] + GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true } GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS) @@ -14,13 +18,15 @@ module Linguist attr_reader :repository attr_reader :oid - attr_reader :name + attr_reader :path attr_reader :mode - def initialize(repo, oid, name, mode = nil) + alias :name :path + + def initialize(repo, oid, path, mode = nil) @repository = repo @oid = oid - @name = name + @path = path @mode = mode end @@ -29,11 +35,27 @@ module Linguist name, GIT_ATTR, GIT_ATTR_FLAGS) end + def documentation? + if attr = git_attributes['linguist-documentation'] + boolean_attribute(attr) + else + super + end + end + + def generated? + if attr = git_attributes['linguist-generated'] + boolean_attribute(attr) + else + super + end + end + def vendored? if attr = git_attributes['linguist-vendored'] return boolean_attribute(attr) else - return super + super end end @@ -41,7 +63,7 @@ module Linguist return @language if defined?(@language) @language = if lang = git_attributes['linguist-language'] - Language.find_by_name(lang) + Language.find_by_alias(lang) else super end @@ -57,11 +79,15 @@ module Linguist @size end + def cleanup! + @data.clear if @data + end + protected # Returns true if the attribute is present and not the string "false". - def boolean_attribute(attr) - attr != "false" + def boolean_attribute(attribute) + attribute != "false" end def load_blob! diff --git a/lib/linguist/popular.yml b/lib/linguist/popular.yml index 1a5cb750..afb68021 100644 --- a/lib/linguist/popular.yml +++ b/lib/linguist/popular.yml @@ -9,21 +9,21 @@ - CSS - Clojure - CoffeeScript -- Common Lisp -- Diff -- Emacs Lisp -- Erlang +- Go - HTML - Haskell - Java - JavaScript - Lua +- Matlab - Objective-C - PHP - Perl - Python +- R - Ruby -- SQL - Scala -- Scheme - Shell +- Swift +- TeX +- VimL diff --git a/lib/linguist/repository.rb b/lib/linguist/repository.rb index 41e829c5..51040734 100644 --- a/lib/linguist/repository.rb +++ b/lib/linguist/repository.rb @@ -126,12 +126,13 @@ module Linguist end protected + MAX_TREE_SIZE = 100_000 def compute_stats(old_commit_oid, cache = nil) + return {} if current_tree.count_recursive(MAX_TREE_SIZE) >= MAX_TREE_SIZE + old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree - read_index - diff = Rugged::Tree.diff(repository, old_tree, current_tree) # Clear file map and fetch full diff if any .gitattributes files are changed @@ -150,19 +151,18 @@ module Linguist next if delta.binary if [:added, :modified].include? delta.status - # Skip submodules + # Skip submodules and symlinks mode = delta.new_file[:mode] - next if (mode & 040000) != 0 + mode_format = (mode & 0170000) + next if mode_format == 0120000 || mode_format == 040000 || mode_format == 0160000 blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8)) - # Skip vendored or generated blobs - next if blob.vendored? || blob.generated? || blob.language.nil? - - # Only include programming languages and acceptable markup languages - if blob.language.type == :programming || Language.detectable_markup.include?(blob.language.name) + if blob.include_in_language_stats? file_map[new] = [blob.language.group.name, blob.size] end + + blob.cleanup! end end diff --git a/lib/linguist/samples.rb b/lib/linguist/samples.rb index efcba365..a7ecd1bd 100644 --- a/lib/linguist/samples.rb +++ b/lib/linguist/samples.rb @@ -50,16 +50,13 @@ module Linguist end else path = File.join(dirname, filename) - - if File.extname(filename) == "" - raise "#{path} is missing an extension, maybe it belongs in filenames/ subdir" - end + extname = File.extname(filename) yield({ :path => path, :language => category, :interpreter => Shebang.interpreter(File.read(path)), - :extname => File.extname(filename) + :extname => extname.empty? ? nil : extname }) end end diff --git a/lib/linguist/shebang.rb b/lib/linguist/shebang.rb index 6f04e866..5b27532a 100644 --- a/lib/linguist/shebang.rb +++ b/lib/linguist/shebang.rb @@ -23,17 +23,20 @@ module Linguist # First line must start with #! return unless shebang && shebang.start_with?("#!") - # Get the parts of the shebang without the #! - tokens = shebang.sub(/^#!\s*/, '').strip.split(' ') + s = StringScanner.new(shebang) # There was nothing after the #! - return if tokens.empty? + return unless path = s.scan(/^#!\s*\S+/) - # Get the name of the interpreter - script = File.basename(tokens.first) + # Keep going + script = path.split('/').last - # Get next argument if interpreter was /usr/bin/env - script = tokens[1] if script == 'env' + # if /usr/bin/env type shebang then walk the string + if script == 'env' + s.scan(/\s+/) + s.scan(/.*=[^\s]+\s+/) # skip over variable arguments e.g. foo=bar + script = s.scan(/\S+/) + end # Interpreter was /usr/bin/env with no arguments return unless script @@ -41,6 +44,9 @@ module Linguist # "python2.6" -> "python2" script.sub! /(\.\d+)$/, '' + # #! perl -> perl + script.sub! /^#!\s*/, '' + # Check for multiline shebang hacks that call `exec` if script == 'sh' && data.lines.first(5).any? { |l| l.match(/exec (\w+).+\$0.+\$@/) } diff --git a/lib/linguist/strategy/filename.rb b/lib/linguist/strategy/filename.rb index e682863b..b8c819eb 100644 --- a/lib/linguist/strategy/filename.rb +++ b/lib/linguist/strategy/filename.rb @@ -3,17 +3,7 @@ module Linguist # Detects language based on filename and/or extension class Filename def self.call(blob, _) - name = blob.name.to_s - - # A bit of an elegant hack. If the file is executable but extensionless, - # append a "magic" extension so it can be classified with other - # languages that have shebang scripts. - extensions = FileBlob.new(name).extensions - if extensions.empty? && blob.mode && (blob.mode.to_i(8) & 05) == 05 - name += ".script!" - end - - Language.find_by_filename(name) + Language.find_by_filename(blob.name.to_s) end end end diff --git a/lib/linguist/strategy/modeline.rb b/lib/linguist/strategy/modeline.rb new file mode 100644 index 00000000..eb5a8a5f --- /dev/null +++ b/lib/linguist/strategy/modeline.rb @@ -0,0 +1,41 @@ +module Linguist + module Strategy + class Modeline + EMACS_MODELINE = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i + + # First form vim modeline + # [text]{white}{vi:|vim:|ex:}[white]{options} + # ex: 'vim: syntax=ruby' + VIM_MODELINE_1 = /(?:vim|vi|ex):\s*(?:ft|filetype|syntax)=(\w+)\s?/i + + # Second form vim modeline (compatible with some versions of Vi) + # [text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text] + # ex: 'vim set syntax=ruby:' + VIM_MODELINE_2 = /(?:vim|vi|Vim|ex):\s*se(?:t)?.*\s(?:ft|filetype|syntax)=(\w+)\s?.*:/i + + MODELINES = [EMACS_MODELINE, VIM_MODELINE_1, VIM_MODELINE_2] + + # Public: Detects language based on Vim and Emacs modelines + # + # blob - An object that quacks like a blob. + # + # Examples + # + # Modeline.call(FileBlob.new("path/to/file")) + # + # Returns an Array with one Language if the blob has a Vim or Emacs modeline + # that matches a Language name or alias. Returns an empty array if no match. + def self.call(blob, _ = nil) + Array(Language.find_by_alias(modeline(blob.data))) + end + + # Public: Get the modeline from the first n-lines of the file + # + # Returns a String or nil + def self.modeline(data) + match = MODELINES.map { |regex| data.match(regex) }.reject(&:nil?).first + match[1] if match + end + end + end +end diff --git a/lib/linguist/tokenizer.rb b/lib/linguist/tokenizer.rb index 4b2ea607..7b618049 100644 --- a/lib/linguist/tokenizer.rb +++ b/lib/linguist/tokenizer.rb @@ -22,8 +22,10 @@ module Linguist # Start state on token, ignore anything till the next newline SINGLE_LINE_COMMENTS = [ '//', # C + '--', # Ada, Haskell, AppleScript '#', # Ruby '%', # Tex + '"', # Vim ] # Start state on opening token, ignore anything until the closing @@ -33,7 +35,8 @@ module Linguist [''], # XML ['{-', '-}'], # Haskell ['(*', '*)'], # Coq - ['"""', '"""'] # Python + ['"""', '"""'], # Python + ["'''", "'''"] # Python ] START_SINGLE_LINE_COMMENT = Regexp.compile(SINGLE_LINE_COMMENTS.map { |c| @@ -83,17 +86,17 @@ module Linguist if s.peek(1) == "\"" s.getch else - s.skip_until(/[^\\]"/) + s.skip_until(/(?][^<>]*>/) @@ -129,6 +132,9 @@ module Linguist # extract_shebang("#!/usr/bin/env node") # # => "node" # + # extract_shebang("#!/usr/bin/env A=B foo=bar awk -f") + # # => "awk" + # # Returns String token or nil it couldn't be parsed. def extract_shebang(data) s = StringScanner.new(data) @@ -137,6 +143,7 @@ module Linguist script = path.split('/').last if script == 'env' s.scan(/\s+/) + s.scan(/.*=[^\s]+\s+/) script = s.scan(/\S+/) end script = script[/[^\d]+/, 0] if script diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 4b8299f4..124a3428 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -20,10 +20,20 @@ - ^deps/ - ^tools/ - (^|/)configure$ -- (^|/)configure.ac$ - (^|/)config.guess$ - (^|/)config.sub$ +# stuff autogenerated by autoconf - still C deps +- (^|/)aclocal.m4 +- (^|/)libtool.m4 +- (^|/)ltoptions.m4 +- (^|/)ltsugar.m4 +- (^|/)ltversion.m4 +- (^|/)lt~obsolete.m4 + +# Linters +- cpplint.py + # Node dependencies - node_modules/ @@ -40,30 +50,34 @@ # Minified JavaScript and CSS - (\.|-)min\.(js|css)$ +# Stylesheets imported from packages +- ([^\s]*)import\.(css|less|scss|styl)$ + # Bootstrap css and js -- (^|/)bootstrap([^.]*)\.(js|css)$ +- (^|/)bootstrap([^.]*)\.(js|css|less|scss|styl)$ +- (^|/)custom\.bootstrap([^\s]*)(js|css|less|scss|styl)$ # Font Awesome -- font-awesome.css +- (^|/)font-awesome\.(css|less|scss|styl)$ # Foundation css -- foundation.css +- (^|/)foundation\.(css|less|scss|styl)$ # Normalize.css -- normalize.css +- (^|/)normalize\.(css|less|scss|styl)$ -# Bourbon SCSS -- (^|/)[Bb]ourbon/.*\.css$ -- (^|/)[Bb]ourbon/.*\.scss$ +# Bourbon css +- (^|/)[Bb]ourbon/.*\.(css|less|scss|styl)$ # Animate.css -- animate.css +- (^|/)animate\.(css|less|scss|styl)$ # Vendored dependencies - third[-_]?party/ - 3rd[-_]?party/ - vendors?/ - extern(al)?/ +- (^|/)[Vv]+endor/ # Debian packaging - ^debian/ @@ -71,6 +85,9 @@ # Haxelib projects often contain a neko bytecode file named run.n - run.n$ +# Bootstrap Datepicker +- bootstrap-datepicker/ + ## Commonly Bundled JavaScript frameworks ## # jQuery @@ -81,6 +98,34 @@ - (^|/)jquery\-ui(\-\d\.\d+(\.\d+)?)?(\.\w+)?\.(js|css)$ - (^|/)jquery\.(ui|effects)\.([^.]*)\.(js|css)$ +# jQuery Gantt +- jquery.fn.gantt.js + +# jQuery fancyBox +- jquery.fancybox.(js|css) + +# Fuel UX +- fuelux.js + +# jQuery File Upload +- (^|/)jquery\.fileupload(-\w+)?\.js$ + +# Slick +- (^|/)slick\.\w+.js$ + +# Leaflet plugins +- (^|/)Leaflet\.Coordinates-\d+\.\d+\.\d+\.src\.js$ +- leaflet.draw-src.js +- leaflet.draw.css +- Control.FullScreen.css +- Control.FullScreen.js +- leaflet.spin.js +- wicket-leaflet.js + +# Sublime Text workspace files +- .sublime-project +- .sublime-workspace + # Prototype - (^|/)prototype(.*)\.js$ - (^|/)effects\.js$ @@ -115,7 +160,7 @@ - (^|/)Chart\.js$ # Codemirror -- (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap) +- (^|/)[Cc]ode[Mm]irror/(\d+\.\d+/)?(lib|mode|theme|addon|keymap|demo) # SyntaxHighlighter - http://alexgorbatchev.com/ - (^|/)shBrush([^.]*)\.js$ @@ -140,6 +185,9 @@ ## Python ## +# Sphinx +- (^|/)docs?/_?(build|themes?|templates?|static)/ + # django - (^|/)admin_media/ @@ -154,12 +202,31 @@ ## Obj-C ## +# Xcode + +- \.xctemplate/ +- \.imageset/ + +# Carthage +- ^Carthage/ + # Cocoapods - ^Pods/ # Sparkle - (^|/)Sparkle/ +# Crashlytics +- Crashlytics.framework/ + +# Fabric +- Fabric.framework/ + +# git config files +- gitattributes$ +- gitignore$ +- gitmodules$ + ## Groovy ## # Gradle @@ -204,21 +271,9 @@ # Html5shiv - (^|/)html5shiv\.js$ -# Samples folders -- ^[Ss]amples/ - -# LICENSE, README, git config files -- ^COPYING$ -- LICENSE$ -- License$ -- gitattributes$ -- gitignore$ -- gitmodules$ -- ^README$ -- ^readme$ - # Test fixtures -- ^[Tt]est/fixtures/ +- ^[Tt]ests?/fixtures/ +- ^[Ss]pecs?/fixtures/ # PhoneGap/Cordova - (^|/)cordova([^.]*)\.js$ @@ -230,7 +285,7 @@ # Vagrant - ^Vagrantfile$ -# .DS_Store's +# .DS_Stores - .[Dd][Ss]_[Ss]tore$ # R packages @@ -248,3 +303,12 @@ # ProGuard - proguard.pro - proguard-rules.pro + +# PuPHPet +- ^puphpet/ + +# Android Google APIs +- (^|/)\.google_apis/ + +# Jenkins Pipeline +- ^Jenkinsfile$ diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 3f330f79..7bb4af7b 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.2.6" + VERSION = "4.7.6" end diff --git a/package.json b/package.json index acd7cd9e..025b6c1e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "repository": "https://github.com/github/linguist", "dependencies": { - "season": "~>3.0" + "season": "~>5.0" } } diff --git a/samples/AMPL/CT2.mod b/samples/AMPL/CT2.mod new file mode 100644 index 00000000..eb936b77 --- /dev/null +++ b/samples/AMPL/CT2.mod @@ -0,0 +1,58 @@ +param num_beams; # number of beams + +param num_rows >= 1, integer; # number of rows +param num_cols >= 1, integer; # number of columns + +set BEAMS := 1 .. num_beams; # set of beams + +set ROWS := 1 .. num_rows; # set of rows +set COLUMNS := 1 .. num_cols; # set of columns + +# values for entries of each beam +param beam_values {BEAMS, ROWS, COLUMNS} >= 0; + +# values of tumor +param tumor_values {ROWS, COLUMNS} >= 0; + +# values of critical area +param critical_values {ROWS, COLUMNS} >= 0; + +# critical maximum dosage requirement +param critical_max; + +# tumor minimum dosage requirement +param tumor_min; + +# dosage scalar of each beam +var X {i in BEAMS} >= 0; + + +# define the tumor area which includes the locations where tumor exists +set tumor_area := {k in ROWS, h in COLUMNS: tumor_values[k,h] > 0}; + +# define critical area +set critical_area := {k in ROWS, h in COLUMNS: critical_values[k,h] > 0}; + +var S {(k,h) in tumor_area} >= 0; +var T {(k,h) in critical_area} >= 0; + +# maximize total dosage in tumor area +maximize total_tumor_dosage: sum {i in BEAMS} sum {(k,h) in tumor_area} X[i] * beam_values[i,k,h]; + +# minimize total dosage in critical area +minimize total_critical_dosage: sum {i in BEAMS} sum {(k,h) in critical_area} X[i] * beam_values[i,k,h]; + +# minimize total tumor slack +minimize total_tumor_slack: sum {(k,h) in tumor_area} S[k,h]; + +# minimize total critical area slack +minimize total_critical_slack: sum {(k,h) in critical_area} T[k,h]; + +# total dosage at each tumor location [k,h] should be >= min tumor dosage with slack variable +subject to tumor_limit {(k,h) in tumor_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == tumor_min - S[k,h]; + +# total dosage at each critical location [k,h] should be = max critical dosage with slack variable +subject to critical_limit {(k,h) in critical_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == critical_max + T[k,h]; + + + diff --git a/samples/AMPL/toy.ampl b/samples/AMPL/toy.ampl new file mode 100644 index 00000000..0ca0c7cf --- /dev/null +++ b/samples/AMPL/toy.ampl @@ -0,0 +1,25 @@ +# A toy knapsack problem from the LocalSolver docs written in AMPL. + +set I; +param Value{I}; +param Weight{I}; +param KnapsackBound; +var Take{I} binary; + +maximize TotalValue: sum{i in I} Take[i] * Value[i]; +s.t. WeightLimit: sum{i in I} Take[i] * Weight[i] <= KnapsackBound; + +data; + +param: +I: Weight Value := +0 10 1 +1 60 10 +2 30 15 +3 40 40 +4 30 60 +5 20 90 +6 20 100 +7 2 15; + +param KnapsackBound := 102; diff --git a/samples/API Blueprint/actions.apib b/samples/API Blueprint/actions.apib new file mode 100644 index 00000000..f94dc67a --- /dev/null +++ b/samples/API Blueprint/actions.apib @@ -0,0 +1,55 @@ +FORMAT: 1A + +# Advanced Action API +A resource action is – in fact – a state transition. This API example demonstrates an action - state transition - to another resource. + +## API Blueprint ++ [Previous: Resource Model](11.%20Resource%20Model.md) ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/11.%20Advanced%20Action.md) + +# Tasks [/tasks/tasks{?status,priority}] + ++ Parameters + + status (string) + + priority (number) + +## List All Tasks [GET] + ++ Response 200 (application/json) + + [ + { + "id": 123, + "name": "Exercise in gym", + "done": false, + "type": "task" + }, + { + "id": 124, + "name": "Shop for groceries", + "done": true, + "type": "task" + } + ] + +## Retrieve Task [GET /task/{id}] +This is a state transition to another resource + ++ Parameters + + id (string) + ++ Response 200 (application/json) + + { + "id": 123, + "name": "Go to gym", + "done": false, + "type": "task" + } + +## Delete Task [DELETE /task/{id}] + ++ Parameters + + id (string) + ++ Response 204 diff --git a/samples/API Blueprint/attributes.apib b/samples/API Blueprint/attributes.apib new file mode 100644 index 00000000..ce143f7b --- /dev/null +++ b/samples/API Blueprint/attributes.apib @@ -0,0 +1,39 @@ +FORMAT: 1A + +# Attributes API +This API example demonstrates how to describe body attributes of a request or response message. + +In this case, the description is complementary (and duplicate!) to the provided JSON example in the body section. The [Advanced Attributes](09.%20Advanced%20Attributes.md) API example will demonstrate how to avoid duplicates and how to reuse attributes descriptions. + +## API Blueprint ++ [Previous: Parameters](07.%20Parameters.md) ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/08.%20Attributes.md) ++ [Next: Advanced Attributes](09.%20Advanced%20Attributes.md) + +# Group Coupons + +## Coupon [/coupons/{id}] +A coupon contains information about a percent-off or amount-off discount you might want to apply to a customer. + +### Retrieve a Coupon [GET] +Retrieves the coupon with the given ID. + ++ Response 200 (application/json) + + + Attributes (object) + + id: 250FF (string) + + created: 1415203908 (number) - Time stamp + + percent_off: 25 (number) + + A positive integer between 1 and 100 that represents the discount the coupon will apply. + + + redeem_by (number) - Date after which the coupon can no longer be redeemed + + + Body + + { + "id": "250FF", + "created": 1415203908, + "percent_off": 25, + "redeem_by:" null + } diff --git a/samples/API Blueprint/simple.apib b/samples/API Blueprint/simple.apib new file mode 100644 index 00000000..ecee8481 --- /dev/null +++ b/samples/API Blueprint/simple.apib @@ -0,0 +1,18 @@ +FORMAT: 1A + +# The Simplest API +This is one of the simplest APIs written in the **API Blueprint**. +One plain resource combined with a method and that's it! We will explain what is going on in the next installment - [Resource and Actions](02.%20Resource%20and%20Actions.md). + +**Note:** As we progress through the examples, do not also forget to view the [Raw](https://raw.github.com/apiaryio/api-blueprint/master/examples/01.%20Simplest%20API.md) code to see what is really going on in the API Blueprint, as opposed to just seeing the output of the Github Markdown parser. + +Also please keep in mind that every single example in this course is a **real API Blueprint** and as such you can **parse** it with the [API Blueprint parser](https://github.com/apiaryio/drafter) or one of its [bindings](https://github.com/apiaryio/drafter#bindings). + +## API Blueprint ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/01.%20Simplest%20API.md) ++ [Next: Resource and Actions](02.%20Resource%20and%20Actions.md) + +# GET /message ++ Response 200 (text/plain) + + Hello World! diff --git a/samples/ATS/main.atxt b/samples/ATS/main.atxt deleted file mode 100644 index 3bba35f0..00000000 --- a/samples/ATS/main.atxt +++ /dev/null @@ -1,215 +0,0 @@ -%{ -#include "./../ATEXT/atextfun.hats" -%} - - - - - - -EFFECTIVATS-DiningPhil2 -#patscode_style() - - - - -

-Effective ATS: Dining Philosophers -

- -In this article, I present an implementation of a slight variant of the -famous problem of 5-Dining-Philosophers by Dijkstra that makes simple but -convincing use of linear types. - -

-The Original Problem -

- -There are five philosophers sitting around a table and there are also 5 -forks placed on the table such that each fork is located between the left -hand of a philosopher and the right hand of another philosopher. Each -philosopher does the following routine repeatedly: thinking and dining. In -order to dine, a philosopher needs to first acquire two forks: one located -on his left-hand side and the other on his right-hand side. After -finishing dining, a philosopher puts the two acquired forks onto the table: -one on his left-hand side and the other on his right-hand side. - -

-A Variant of the Original Problem -

- -The following twist is added to the original version: - -

- -After a fork is used, it becomes a "dirty" fork and needs to be put in a -tray for dirty forks. There is a cleaner who cleans dirty forks and then -puts them back on the table. - -

-Channels for Communication -

- -A channel is just a shared queue of fixed capacity. The following two -functions are for inserting an element into and taking an element out of a -given channel: - -
-#pats2xhtml_sats("\
-fun{a:vt0p} channel_insert (channel (a), a): void
-fun{a:vt0p} channel_takeout (chan: channel (a)): (a) 
-")
- -If [channel_insert] is called on a channel that is full, then the caller is -blocked until an element is taken out of the channel. If [channel_takeout] -is called on a channel that is empty, then the caller is blocked until an -element is inserted into the channel. - -

-A Channel for Each Fork -

- -Forks are resources given a linear type. Each fork is initially stored in a -channel, which can be obtained by calling the following function: - -
-#pats2xhtml_sats("\
-fun fork_changet (n: nphil): channel(fork)
-")
- -where the type [nphil] is defined to be [natLt(5)] (for natural numbers -less than 5). The channels for storing forks are chosen to be of capacity -2. The reason that channels of capacity 2 are chosen to store at most one -element (in each of them) is to guarantee that these channels can never be -full (so that there is no attempt made to send signals to awake callers -supposedly being blocked due to channels being full). - - -

-A Channel for the Fork Tray -

- -A tray for storing "dirty" forks is also a channel, which can be obtained -by calling the following function: - -
-#pats2xhtml_sats("\
-fun forktray_changet ((*void*)): channel(fork)
-")
- -The capacity chosen for the channel is 6 (instead of 5) so that it can -never become full (as there are only 5 forks in total). - -

-Philosopher Loop -

- -Each philosopher is implemented as a loop: - -
-#pats2xhtml_dats('\
-implement
-phil_loop (n) = let
-//
-val () = phil_think (n)
-//
-val nl = phil_left (n) // = n
-val nr = phil_right (n) // = (n+1) % 5
-//
-val ch_lfork = fork_changet (nl)
-val ch_rfork = fork_changet (nr)
-//
-val lf = channel_takeout (ch_lfork)
-val () = println! ("phil_loop(", n, ") picks left fork")
-//
-val () = randsleep (2) // sleep up to 2 seconds
-//
-val rf = channel_takeout (ch_rfork)
-val () = println! ("phil_loop(", n, ") picks right fork")
-//
-val () = phil_dine (n, lf, rf)
-//
-val ch_forktray = forktray_changet ()
-val () = channel_insert (ch_forktray, lf) // left fork to dirty tray
-val () = channel_insert (ch_forktray, rf) // right fork to dirty tray
-//
-in
-  phil_loop (n)
-end // end of [phil_loop]
-')
- -It should be straighforward to follow the code for [phil_loop]. - -

-Fork Cleaner Loop -

- -A cleaner is implemented as a loop: - -
-#pats2xhtml_dats('\
-implement
-cleaner_loop () = let
-//
-val ch = forktray_changet ()
-val f0 = channel_takeout (ch) // [f0] is dirty
-//
-val () = cleaner_wash (f0) // washes dirty [f0]
-val () = cleaner_return (f0) // puts back cleaned [f0]
-//
-in
-  cleaner_loop ()
-end // end of [cleaner_loop]
-')
- -The function [cleaner_return] first finds out the number of a given fork -and then uses the number to locate the channel for storing the fork. Its -actual implementation is given as follows: - -
-#pats2xhtml_dats('\
-implement
-cleaner_return (f) =
-{
-  val n = fork_get_num (f)
-  val ch = fork_changet (n)
-  val () = channel_insert (ch, f)
-}
-')
- -It should now be straighforward to follow the code for [cleaner_loop]. - -

-Testing -

- -The entire code of this implementation is stored in the following files: - -
-DiningPhil2.sats
-DiningPhil2.dats
-DiningPhil2_fork.dats
-DiningPhil2_thread.dats
-
- -There is also a Makefile available for compiling the ATS source code into -an excutable for testing. One should be able to encounter a deadlock after -running the simulation for a while. - -
- -This article is written by Hongwei Xi. - - - - -%{ -implement main () = fprint_filsub (stdout_ref, "main_atxt.txt") -%} diff --git a/samples/ApacheConf/apache.vhost b/samples/ApacheConf/apache.vhost new file mode 100644 index 00000000..eb602121 --- /dev/null +++ b/samples/ApacheConf/apache.vhost @@ -0,0 +1,17 @@ +####################### +# HOSTNAME +###################### + + + ServerAdmin patrick@heysparkbox.com + DocumentRoot "/var/www/HOSTNAME" + ServerName HOSTNAME + + + Options Indexes MultiViews FollowSymLinks + AllowOverride All + Order allow,deny + Allow from all + DirectoryIndex index.php + + diff --git a/samples/AsciiDoc/list.asc b/samples/AsciiDoc/list.asc index 066d14fc..3d93ade1 100644 --- a/samples/AsciiDoc/list.asc +++ b/samples/AsciiDoc/list.asc @@ -1,6 +1,9 @@ AsciiDoc Home Page ================== +Title +----- + Example Articles ~~~~~~~~~~~~~~~~ - Item 1 diff --git a/samples/Assembly/forth.nasm b/samples/Assembly/forth.nasm new file mode 100644 index 00000000..c411c7ff --- /dev/null +++ b/samples/Assembly/forth.nasm @@ -0,0 +1,2841 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; A Forth by Chris Hinsley +;; nasm -f macho forth.nasm +;; ld -o forth -e _main forth.o +;; ./forth +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + %define VERSION_NUM 30 + + ; various buffer area sizes + %define DATA_STACK_SIZE 1024 + %define USER_DEFS_SIZE (64*1024) + %define NUM_HASH_CHAINS 64 + %define MAX_LINE_SIZE 128 + + %define SYS_exit 1 + %define SYS_read 3 + %define SYS_write 4 + %define SYS_open 5 + %define SYS_close 6 + %define SYS_unlink 10 + %define SYS_mprotect 74 + %define SYS_fsync 95 + %define SYS_rename 128 + %define SYS_stat 188 + %define SYS_lseek 199 + %define SYS_fstat 189 + %define SYS_ftruncate 201 + + %define PROT_READ 0x01 ;pages can be read + %define PROT_WRITE 0x02 ;pages can be written + %define PROT_EXEC 0x04 ;pages can be executed + %define PROT_ALL (PROT_READ | PROT_WRITE | PROT_EXEC) + %define PAGE_SIZE 4096 + +;;;;;;;;;;;;;;;;;;;;;;;;;; +; some NASM codeing macros +;;;;;;;;;;;;;;;;;;;;;;;;;; + + %macro loopstart 0 + %push loopstart + %$loop_start: + %endmacro + + %macro break 0 + jmp %$loop_exit + %endmacro + + %macro breakif 1 + j%+1 %$loop_exit + %endmacro + + %macro loopend 0 + jmp %$loop_start + %$loop_exit: + %pop + %endmacro + + %macro repeat 0 + %push repeat + %$loop_start: + %endmacro + + %macro until 1 + j%-1 %$loop_start + %$loop_exit: + %pop + %endmacro + + %macro if 1 + %push if + j%-1 %$ifnot + %endmacro + + %macro else 0 + %ifctx if + %repl else + jmp %$ifend + %$ifnot: + %else + %error "expected `if' before `else'" + %endif + %endmacro + + %macro endif 0 + %ifctx if + %$ifnot: + %pop + %elifctx else + %$ifend: + %pop + %else + %error "expected `if' or `else' before `endif'" + %endif + %endmacro + +;;;;;;;;;;;;;;;; +; base VM macros +;;;;;;;;;;;;;;;; + + ; eip Forths IP + ; esp Forths R + ; ebp Forths S + ; ebx Forths TOS + + ; push on to return stack + %macro PUSHRSP 1 + push %1 + %endm + + ; pop top of return stack + %macro POPRSP 1 + pop %1 + %endm + + ; save into return stack + %macro PUTRSP 2 + %if (%2 = 0) + mov [esp], %1 + %elif ((%2 >= -128) && (%2 < 128)) + mov [byte esp + %2], %1 + %else + mov [long esp + %2], %1 + %endif + %endm + + ; load from return stack + %macro PICKRSP 2 + %if (%2 = 0) + mov %1, [esp] + %elif ((%2 >= -128) && (%2 < 128)) + mov %1, [byte esp + %2] + %else + mov %1, [long esp + %2] + %endif + %endm + + ; set return stack + %macro SETRSP 1 + mov esp, %1 + %endm + + ; get return stack + %macro GETRSP 1 + mov %1, esp + %endm + + ; adjust return stack + %macro ADDRSP 1 + %if ((%1 >= -128) && (%1 < 128)) + add esp, byte %1 + %else + add esp, %1 + %endif + %endm + + ; push on to data stack + %macro PUSHDSP 1 + sub ebp, byte 4 + mov [ebp], %1 + %endm + + ; pop top of data stack + %macro POPDSP 1 + mov %1, [ebp] + add ebp, byte 4 + %endm + + ; save into data stack + %macro PUTDSP 2 + %if (%2 = 0) + mov [ebp], %1 + %elif ((%2 >= -128) && (%2 < 128)) + mov [byte ebp + %2], %1 + %else + mov [long ebp + %2], %1 + %endif + %endm + + ; load from data stack + %macro PICKDSP 2 + %if (%2 = 0) + mov %1, [ebp] + %elif ((%2 >= -128) && (%2 < 128)) + mov %1, [byte ebp + %2] + %else + mov %1, [long ebp + %2] + %endif + %endm + + ; set data stack + %macro SETDSP 1 + mov ebp, %1 + %endm + + ; get data stack + %macro GETDSP 1 + mov %1, ebp + %endm + + ; adjust data stack + %macro ADDDSP 1 + %if ((%1 >= -128) && (%1 < 128)) + add ebp, byte %1 + %else + add ebp, %1 + %endif + %endm + + ; load value onto data stack + %macro LOADTOS 1 + PUSHDSP ebx + mov ebx, %1 + %endm + + ; move from data to return stack + %macro TORSP 0 + PUSHRSP ebx + POPDSP ebx + %endm + + ; move from return to data stack + %macro FROMRSP 0 + PUSHDSP ebx + POPRSP ebx + %endm + + ; copy from return to data stack + %macro FETCHRSP 0 + PUSHDSP ebx + PICKRSP ebx, 0 + %endm + + ; align reg + %define DP_ALIGN 3 + %macro ALIGNREG 1 + add %1, byte DP_ALIGN + and %1, byte ~DP_ALIGN + %endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; dictionary building macros +;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; format of dictionary entry flag byte + %define F_IMMED 0x80 + %define F_HIDDEN 0x20 + %define F_LENMASK 0x1f + + %define NULL 0 + %define H_LLINK 0 + %define H_HLINK 4 + %define H_NSIZE 8 + %define H_NAME 9 + + %define XT_BODY -12 + %define XT_LENGTH -8 + %define XT_COMPILE -4 + %define XT_SIZE 12 + + %macro defword 4 + %push newword + %strlen len %1 + align 4 + dic_%3: + dd NULL ; LATEST list link + dd NULL ; hash chain link + db len + %2 ; flags + length byte + db %1 ; the name + dd %3 ; body pointer + dd %$code_end - %3 ; code length + dd %4 ; compile action word + %3: + %endm ; assembler code follows + + %macro defword_end 0 + %$code_end: + %pop + %endm + + %macro defvar 4 + defword %1, %2, %3, WORD_INLINE_COMMA + LOADTOS var_%3 + ret + defword_end + align 4 + var_%3: + dd %4 + %endm + + %macro defvar2 5 + defword %1, %2, %3, WORD_INLINE_COMMA + LOADTOS var_%3 + ret + defword_end + align 4 + var_%3: + dd %4 + dd %5 + %endm + + %macro defconst 4 + defword %1, %2, %3, WORD_INLINE_COMMA + LOADTOS %4 + ret + defword_end + %endm + +;;;;;;;;;;;;;;;;;;;;;;;;;; +; entry point +;;;;;;;;;;;;;;;;;;;;;;;;;; + + SECTION .text + global _main +_main: + ; use mprotect to allow read/write/execute of the data section + mov edx, forth_start + and edx, -PAGE_SIZE ;start address + mov ecx, forth_end + sub ecx, edx ;length + mov ebx, PROT_ALL ;flags + push ebx + push ecx + push edx + push 0 ;padding + mov eax, SYS_mprotect + int 0x80 + add esp, 16 + jmp forth_start + + SECTION .data +forth_start: + ; init data and return stacks, saving initial positions + ; in Forth vars R0 and S0 + cld + GETRSP [var_WORD_SZ] + SETDSP [var_WORD_SZ] + ADDRSP -DATA_STACK_SIZE + GETRSP [var_WORD_RZ] + + ; link built in dictionary + mov esi, dictionary_start + xor edi, edi + repeat + lodsd + mov [eax + H_LLINK], edi + mov edi, eax + push esi + mov cl, [eax + H_NSIZE] + and ecx, F_LENMASK + lea esi, [eax + H_NAME] + call strhashi + and ebx, NUM_HASH_CHAINS-1 + mov esi, hash_buckets + mov eax, [esi + (ebx * 4)] + mov [esi + (ebx * 4)], edi + mov [edi + H_HLINK], eax + pop esi + cmp esi, dictionary_end + until z + mov [var_WORD_LATEST], edi + + ; run temp interpreter loop till we can get into the real QUIT word + call WORD_LBRAC ; interpret state + LOADTOS 666q ; octal ! + TORSP + LOADTOS 0 + TORSP + LOADTOS bootfile + TORSP + call WORD_SYS_OPEN + call WORD_SYSCALL + ADDRSP 12 + TORSP ; ( fd ) of "forth.f" + loopstart + LOADTOS tib_buffer + LOADTOS MAX_LINE_SIZE + FETCHRSP ; ( c-addr len fd ) + call WORD_READLINE ; ( num flag flag ) + call WORD_DROP2 + LOADTOS tib_buffer + call WORD_SWAP + call WORD_INHASH + call WORD_STORE2 + LOADTOS 0 + call WORD_TOIN + call WORD_STORE + call WORD_INTERPRET + loopend ; and loop till QUIT takes over + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; a few case insensative string operations +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + %macro to_lower 1 + ; lower case check + cmp %1, 'A' + if ge + cmp %1, 'Z' + if le + ; make it lower case + add %1, byte 'a' - 'A' + endif + endif + %endm + +strcpyi: + test ecx, ecx + if nz + strcpyi_l1: + lodsb + to_lower al + stosb + loop strcpyi_l1 + endif + ret + +strcmpi: + test ecx, ecx + if nz + strcmpi_l1: + lodsb + mov bl, [edi] + lea edi, [edi + 1] + to_lower al + to_lower bl + cmp bl, al + if z + loop strcmpi_l1 + endif + endif + ret + +;;;;;;;;;;;;;;; +; hash function +;;;;;;;;;;;;;;; + +strhashi: + mov ebx, 5381 + test ecx, ecx + if nz + mov edx, 33 + strhashi_l1: + lodsb + movzx eax, al + to_lower eax + imul ebx, edx + add ebx, eax + loop strhashi_l1 + endif + ret + +;;;;;;;;;;;;;;;;;;; +; syscall functions +;;;;;;;;;;;;;;;;;;; + +_syscall: + int 0x80 + if c + neg eax + endif + ret + +_lsyscall: + int 0x80 + if c + not eax + not edx + add eax, 1 + adc edx, 0 + endif + ret + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; built in variables +; STATE Is the interpreter executing code (0) or compiling a word (non-zero)? +; LATEST Points to the latest (most recently defined) word in the dictionary. +; DP Points to the next free byte of memory. When compiling, compiled words go here. +; S0 Stores the address of the top of the parameter stack. +; R0 The address of the top of the return stack. +; BASE The current base for printing and reading numbers. +; #IN The current input buffer descriptor. +; >IN The current input offset. +; SOURCEFD The current input source file descriptor. +; BLK The current block number. +; CHARBUF Single char buffer. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defvar "state", 0, WORD_STATE, 0 + defvar "dp", 0, WORD_DP, dictionary_start + defvar "latest", 0, WORD_LATEST, 0 + defvar "s0", 0, WORD_SZ, 0 + defvar "r0", 0, WORD_RZ, 0 + defvar "base", 0, WORD_BASE, 10 + defvar2 "#IN", 0, WORD_INHASH, 0, 0 + defvar ">in", 0, WORD_TOIN, 0 + defvar "sourcefd", 0, WORD_SOURCEFD, 0 + defvar "blk", 0, WORD_BLK, 0 + defvar "charbuf", 0, WORD_CHARBUF, 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; built in constants +; VERSION The current version of this FORTH. +; WORDBUF The address of the buffer WORD uses. +; LINESIZE The line buffer size. +; F_IMMED The IMMEDIATE flag's actual value. +; F_HIDDEN The HIDDEN flag's actual value. +; F_LENMASK The length mask in the flags/len byte. +; H_NSIZE The flags/len field offset. +; H_NAME The name field offset. +; XT_BODY The xt body pointer. +; XT_LENGTH The xt length field offset. +; XT_COMPILE The xt compile field offset. +; XT_SIZE The xt size offset. +; SYS_* The numeric codes of various syscalls. +; O_* Various sycall flags/modes. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defconst "version", 0, WORD_VERSION, VERSION_NUM + defconst "wordbuf", 0, WORD_WORDBUF, word_buf + defconst "linesize", 0, WORD_LINESIZE, MAX_LINE_SIZE + defconst "f_immed", 0, WORD__F_IMMED, F_IMMED + defconst "f_hidden", 0, WORD__F_HIDDEN, F_HIDDEN + defconst "f_lenmask", 0, WORD__F_LENMASK, F_LENMASK + defconst "h_nsize", 0, WORD__H_NSIZE, H_NSIZE + defconst "h_name", 0, WORD__H_NAME, H_NAME + defconst "xt_body", 0, WORD__XT_BODY, XT_BODY + defconst "xt_length", 0, WORD__XT_LENGTH, XT_LENGTH + defconst "xt_compile", 0, WORD__XT_COMPILE, XT_COMPILE + defconst "xt_size", 0, WORD__XT_SIZE, XT_SIZE + + defconst "sys_exit", 0, WORD_SYS_EXIT, SYS_exit + defconst "sys_open", 0, WORD_SYS_OPEN, SYS_open + defconst "sys_close", 0, WORD_SYS_CLOSE, SYS_close + defconst "sys_read", 0, WORD_SYS_READ, SYS_read + defconst "sys_write", 0, WORD_SYS_WRITE, SYS_write + defconst "sys_unlink", 0, WORD_SYS_UNLINK, SYS_unlink + defconst "sys_rename", 0, WORD_SYS_RENAME, SYS_rename + defconst "sys_ftruncate", 0, WORD_SYS_FTRUNCATE, SYS_ftruncate + defconst "sys_fsync", 0, WORD_SYS_FSYNC, SYS_fsync + defconst "sys_lseek", 0, WORD_SYS_LSEEK, SYS_lseek + defconst "sys_fstat", 0, WORD_SYS_FSTAT, SYS_fstat + defconst "sys_stat", 0, WORD_SYS_STAT, SYS_stat + + defconst "o_rdonly", 0, WORD_O_RDONLY, 0x0 + defconst "o_wronly", 0, WORD_O_WRONLY, 0x1 + defconst "o_rdwr", 0, WORD_O_RDWR, 0x2 + defconst "o_creat", 0, WORD_O_CREAT, 0x100 + defconst "o_excl", 0, WORD_O_EXCL, 0x200 + defconst "o_trunc", 0, WORD_O_TRUNC, 0x1000 + defconst "o_append", 0, WORD_O_APPEND, 0x2000 + defconst "o_nonblock", 0, WORD_O_NONBLOCK, 0x4000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;; +; data stack ordering words +;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "dsp@", 0, WORD_DSPFETCH, WORD_INLINE_COMMA + PUSHDSP ebx + GETDSP ebx + ret + defword_end + + defword "dsp!", 0, WORD_DSPSTORE, WORD_INLINE_COMMA + SETDSP ebx + POPDSP ebx + ret + defword_end + + defword "drop", 0, WORD_DROP, WORD_INLINE_COMMA + POPDSP ebx + ret + defword_end + + defword "swap", 0, WORD_SWAP, WORD_INLINE_COMMA + xchg ebx, [ebp] + ret + defword_end + + defword "dup", 0, WORD_DUP, WORD_INLINE_COMMA + PUSHDSP ebx + ret + defword_end + + defword "over", 0, WORD_OVER, WORD_INLINE_COMMA + PUSHDSP ebx + PICKDSP ebx, 4 + ret + defword_end + + defword "rot", 0, WORD_ROT, WORD_INLINE_COMMA + mov eax, ebx + PICKDSP ecx, 0 + PICKDSP ebx, 4 + PUTDSP eax, 0 + PUTDSP ecx, 4 + ret + defword_end + + defword "-rot", 0, WORD_NROT, WORD_INLINE_COMMA + mov eax, ebx + PICKDSP ebx, 0 + PICKDSP ecx, 4 + PUTDSP ecx, 0 + PUTDSP eax, 4 + ret + defword_end + + defword "2drop", 0, WORD_DROP2, WORD_INLINE_COMMA + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "2dup", 0, WORD_DUP2, WORD_INLINE_COMMA + PICKDSP eax, 0 + ADDDSP -8 + PUTDSP eax, 0 + PUTDSP ebx, 4 + ret + defword_end + + defword "2swap", 0, WORD_SWAP2, WORD_INLINE_COMMA + mov eax, ebx + PICKDSP ecx, 0 + PICKDSP ebx, 4 + PICKDSP edx, 8 + PUTDSP edx, 0 + PUTDSP eax, 4 + PUTDSP ecx, 8 + ret + defword_end + + defword "2rot", 0, WORD_ROT2, WORD_INLINE_COMMA + mov eax, ebx + PICKDSP ecx, 16 + PICKDSP ebx, 12 + PICKDSP edx, 8 + PICKDSP edi, 4 + PICKDSP esi, 0 + PUTDSP edx, 16 + PUTDSP edi, 12 + PUTDSP esi, 8 + PUTDSP eax, 4 + PUTDSP ecx, 0 + ret + defword_end + + defword "?dup", 0, WORD_QDUP, WORD_INLINE_COMMA + test ebx, ebx + if nz + PUSHDSP ebx + endif + ret + defword_end + + defword "!?dup", 0, WORD_NQDUP, WORD_INLINE_COMMA + test ebx, ebx + if z + PUSHDSP ebx + endif + ret + defword_end + + defword "nip", 0, WORD_NIP, WORD_INLINE_COMMA + ADDDSP 4 + ret + defword_end + + defword "tuck", 0, WORD_TUCK, WORD_INLINE_COMMA + PICKDSP eax, 0 + PUTDSP ebx, 0 + PUSHDSP eax + ret + defword_end + + defword "pick", 0, WORD_PICK, WORD_INLINE_COMMA + mov ebx, [ebp + (ebx * 4)] + ret + defword_end + + defword "2tuck", 0, WORD_TUCK2, WORD_INLINE_COMMA + PICKDSP eax, 0 + PICKDSP ecx, 4 + PICKDSP edx, 8 + ADDDSP -8 + PUTDSP eax, 0 + PUTDSP ecx, 4 + PUTDSP edx, 8 + PUTDSP ebx, 12 + PUTDSP eax, 16 + ret + defword_end + + defword "2nip", 0, WORD_NIP2, WORD_INLINE_COMMA + PICKDSP eax, 0 + ADDDSP 8 + PUTDSP eax, 0 + ret + defword_end + + defword "2over", 0, WORD_OVER2, WORD_INLINE_COMMA + ADDDSP -8 + PUTDSP ebx, 4 + PICKDSP ebx, 16 + PUTDSP ebx, 0 + PICKDSP ebx, 12 + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; return stack ordering words +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword ">r", 0, WORD_TOR, WORD_INLINE_COMMA + TORSP + ret + defword_end + + defword "r>", 0, WORD_FROMR, WORD_INLINE_COMMA + FROMRSP + ret + defword_end + + defword "2>r", 0, WORD_TOR2, WORD_INLINE_COMMA + ADDRSP -8 + PICKDSP ecx, 0 + PUTRSP ebx, 0 + PUTRSP ecx, 4 + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "2r>", 0, WORD_FROMR2, WORD_INLINE_COMMA + ADDDSP -8 + PUTDSP ebx, 4 + PICKRSP ebx, 0 + PICKRSP ecx, 4 + PUTDSP ecx, 0 + ADDRSP 8 + ret + defword_end + + defword "rsp@", 0, WORD_RSPFETCH, WORD_INLINE_COMMA + PUSHDSP ebx + GETRSP ebx + ret + defword_end + + defword "r@", 0, WORD_RFETCH, WORD_INLINE_COMMA + PUSHDSP ebx + PICKRSP ebx, 0 + ret + defword_end + + defword "r!", 0, WORD_RSTORE, WORD_INLINE_COMMA + PUTRSP ebx, 0 + POPDSP ebx + ret + defword_end + + defword "2r@", 0, WORD_RFETCH2, WORD_INLINE_COMMA + ADDDSP -8 + PUTDSP ebx, 4 + PICKRSP ebx, 4 + PICKRSP ecx, 0 + PUTDSP ecx, 0 + ret + defword_end + + defword "rsp!", 0, WORD_RSPSTORE, WORD_INLINE_COMMA + SETRSP ebx + POPDSP ebx + ret + defword_end + + defword "rdrop", 0, WORD_RDROP, WORD_INLINE_COMMA + ADDRSP 4 + ret + defword_end + + defword "2rdrop", 0, WORD_RDROP2, WORD_INLINE_COMMA + ADDRSP 8 + ret + defword_end + + defword "n>r", 0, WORD_NTOR, WORD_CALL_COMMA + PUSHDSP ebx + PICKRSP eax, 0 + mov ecx, ebx + inc ecx + neg ebx + lea esp, [esp + (ebx * 4)] + mov esi, ebp + mov edi, esp + rep movsd + mov ebp, esi + POPDSP ebx + jmp eax + defword_end + + defword "nr>", 0, WORD_NFROMR, WORD_CALL_COMMA + PUSHDSP ebx + POPRSP eax + PICKRSP ebx, 0 + inc ebx + mov ecx, ebx + neg ebx + lea ebp, [ebp + (ebx * 4)] + mov esi, esp + mov edi, ebp + rep movsd + mov esp, esi + POPDSP ebx + jmp eax + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; memory fetch and store words +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "!", 0, WORD_STORE, WORD_INLINE_COMMA + PICKDSP eax, 0 + mov [ebx], eax + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "@", 0, WORD_FETCH, WORD_INLINE_COMMA + mov ebx, [ebx] + ret + defword_end + + defword "+!", 0, WORD_ADDSTORE, WORD_INLINE_COMMA + PICKDSP eax, 0 + add [ebx], eax + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "-!", 0, WORD_SUBSTORE, WORD_INLINE_COMMA + PICKDSP eax, 0 + sub [ebx], eax + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "c!", 0, WORD_STOREBYTE, WORD_INLINE_COMMA + PICKDSP eax, 0 + mov [ebx], al + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "c+!", 0, WORD_ADDBYTE, WORD_INLINE_COMMA + PICKDSP eax, 0 + add [ebx], al + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "c@", 0, WORD_FETCHBYTE, WORD_INLINE_COMMA + mov eax, ebx + xor ebx, ebx + mov bl, [eax] + ret + defword_end + + defword "w!", 0, WORD_STORESHORT, WORD_INLINE_COMMA + PICKDSP eax, 0 + mov [ebx], ax + PICKDSP ebx, 4 + ADDDSP 8 + ret + defword_end + + defword "w@", 0, WORD_FETCHSHORT, WORD_INLINE_COMMA + mov eax, ebx + xor ebx, ebx + mov bx, [eax] + ret + defword_end + + defword "2!", 0, WORD_STORE2, WORD_INLINE_COMMA + PICKDSP ecx, 4 + PICKDSP edx, 0 + mov [ebx + 4], ecx + mov [ebx], edx + PICKDSP ebx, 8 + ADDDSP 12 + ret + defword_end + + defword "2@", 0, WORD_FETCH2, WORD_INLINE_COMMA + ADDDSP -4 + mov ecx, [ebx +4] + mov ebx, [ebx] + PUTDSP ecx, 0 + ret + defword_end + + defword "blank", 0, WORD_BLANK, WORD_CALL_COMMA + mov ecx, ebx + PICKDSP ebx, 4 + PICKDSP edi, 0 + ADDDSP 8 + mov eax, 0x20 + rep stosb + ret + defword_end + + defword "erase", 0, WORD_ERASE, WORD_CALL_COMMA + mov ecx, ebx + PICKDSP ebx, 4 + PICKDSP edi, 0 + ADDDSP 8 + xor eax, eax + rep stosb + ret + defword_end + + defword "fill", 0, WORD_FILL, WORD_CALL_COMMA + mov eax, ebx + PICKDSP ebx, 8 + PICKDSP edi, 4 + PICKDSP ecx, 0 + ADDDSP 12 + rep stosb + ret + defword_end + + defword "cmove>", 0, WORD_CMOVEB, WORD_CALL_COMMA + mov ecx, ebx + PICKDSP ebx, 8 + PICKDSP esi, 4 + PICKDSP edi, 0 + ADDDSP 12 + lea esi, [esi + ecx - 1] + lea edi, [edi + ecx - 1] + std + rep movsb + cld + ret + defword_end + + defword "cmove", 0, WORD_CMOVE, WORD_CALL_COMMA + mov ecx, ebx + PICKDSP ebx, 8 + PICKDSP esi, 4 + PICKDSP edi, 0 + ADDDSP 12 + rep movsb + ret + defword_end + + defword "move", 0, WORD_MOVE, WORD_CALL_COMMA + mov ecx, ebx + PICKDSP ebx, 8 + PICKDSP esi, 4 + PICKDSP edi, 0 + ADDDSP 12 + cmp esi, edi + if a + rep movsb + else + lea esi, [esi + ecx -1] + lea edi, [edi + ecx -1] + std + rep movsb + cld + endif + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; single precision alu words +;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "+", 0, WORD_ADD, WORD_INLINE_COMMA + add ebx, [ebp] + ADDDSP 4 + ret + defword_end + + defword "-", 0, WORD_SUB, WORD_INLINE_COMMA + mov eax, ebx + POPDSP ebx + sub ebx, eax + ret + defword_end + + defword "*", 0, WORD_MULL, WORD_INLINE_COMMA + imul ebx, [ebp] + ADDDSP 4 + ret + defword_end + + defword "/", 0, WORD_DIV, WORD_INLINE_COMMA + POPDSP eax + cdq + idiv ebx + mov ebx, eax + ret + defword_end + + defword "mod", 0, WORD_MOD, WORD_INLINE_COMMA + POPDSP eax + cdq + idiv ebx + mov ebx, edx + ret + defword_end + + defword "1+", 0, WORD_INCR, WORD_INLINE_COMMA + add ebx, byte 1 + ret + defword_end + + defword "1-", 0, WORD_DECR, WORD_INLINE_COMMA + sub ebx, byte 1 + ret + defword_end + + defword "4+", 0, WORD_INCR4, WORD_INLINE_COMMA + add ebx, byte 4 + ret + defword_end + + defword "4-", 0, WORD_DECR4, WORD_INLINE_COMMA + sub ebx, byte 4 + ret + defword_end + + defword "2+", 0, WORD_INCR2, WORD_INLINE_COMMA + add ebx, byte 2 + ret + defword_end + + defword "2-", 0, WORD_DECR2, WORD_INLINE_COMMA + sub ebx, byte 2 + ret + defword_end + + defword "2*", 0, WORD_TWOMUL, WORD_INLINE_COMMA + shl ebx, byte 1 + ret + defword_end + + defword "2/", 0, WORD_TWODIV, WORD_INLINE_COMMA + sar ebx, byte 1 + ret + defword_end + + defword "abs", 0, WORD_ABS, WORD_INLINE_COMMA + mov eax, ebx + sar eax, byte 31 + add ebx, eax + xor ebx, eax + ret + defword_end + + defword "min", 0, WORD_MIN, WORD_INLINE_COMMA + POPDSP eax + cmp ebx, eax + if g + mov ebx, eax + endif + ret + defword_end + + defword "max", 0, WORD_MAX, WORD_INLINE_COMMA + POPDSP eax + cmp ebx, eax + if l + mov ebx, eax + endif + ret + defword_end + + defword "lshift", 0, WORD_LSHIFT, WORD_INLINE_COMMA + mov ecx, ebx + POPDSP ebx + shl ebx, cl + ret + defword_end + + defword "rshift", 0, WORD_RSHIFT, WORD_INLINE_COMMA + mov ecx, ebx + POPDSP ebx + shr ebx, cl + ret + defword_end + + defword "and", 0, WORD_AND, WORD_INLINE_COMMA + and ebx, [ebp] + ADDDSP 4 + ret + defword_end + + defword "or", 0, WORD_OR, WORD_INLINE_COMMA + or ebx, [ebp] + ADDDSP 4 + ret + defword_end + + defword "xor", 0, WORD_XOR, WORD_INLINE_COMMA + xor ebx, [ebp] + ADDDSP 4 + ret + defword_end + + defword "negate", 0, WORD_NEGATE, WORD_INLINE_COMMA + neg ebx + ret + defword_end + + defword "invert", 0, WORD_INVERT, WORD_INLINE_COMMA + not ebx + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; single precision comparision words +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "=", 0, WORD_EQ, WORD_INLINE_COMMA + cmp [ebp], ebx + sete bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "<>", 0, WORD_NE, WORD_INLINE_COMMA + cmp [ebp], ebx + setne bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "<", 0, WORD_LT, WORD_INLINE_COMMA + cmp [ebp], ebx + setl bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword ">", 0, WORD_GT, WORD_INLINE_COMMA + cmp [ebp], ebx + setg bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "u<", 0, WORD_ULT, WORD_INLINE_COMMA + cmp [ebp], ebx + setb bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "u>", 0, WORD_UGT, WORD_INLINE_COMMA + cmp [ebp], ebx + seta bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "u<=", 0, WORD_ULTEQ, WORD_INLINE_COMMA + cmp [ebp], ebx + setbe bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "u>=", 0, WORD_UGTEQ, WORD_INLINE_COMMA + cmp [ebp], ebx + setae bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "<=", 0, WORD_LTEQ, WORD_INLINE_COMMA + cmp [ebp], ebx + setle bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword ">=", 0, WORD_GTEQ, WORD_INLINE_COMMA + cmp [ebp], ebx + setge bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "0=", 0, WORD_ZEQ, WORD_INLINE_COMMA + test ebx, ebx + setz bl + movzx ebx, bl + neg ebx + ret + defword_end + + defword "0<>", 0, WORD_ZNE, WORD_INLINE_COMMA + test ebx, ebx + setnz bl + movzx ebx, bl + neg ebx + ret + defword_end + + defword "0<", 0, WORD_ZLT, WORD_INLINE_COMMA + test ebx, ebx + setl bl + movzx ebx, bl + neg ebx + ret + defword_end + + defword "0>", 0, WORD_ZGT, WORD_INLINE_COMMA + test ebx, ebx + setg bl + movzx ebx, bl + neg ebx + ret + defword_end + + defword "0<=", 0, WORD_ZLTEQ, WORD_INLINE_COMMA + test ebx, ebx + setle bl + movzx ebx, bl + neg ebx + ret + defword_end + + defword "0>=", 0, WORD_ZGTEQ, WORD_INLINE_COMMA + test ebx, ebx + setge bl + movzx ebx, bl + neg ebx + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; double precision ALU words +;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "s>d", 0, WORD_STOD, WORD_INLINE_COMMA + mov eax, ebx + cdq + PUSHDSP eax + mov ebx, edx + ret + defword_end + + defword "d>s", 0, WORD_DTOS, WORD_INLINE_COMMA + POPDSP ebx + ret + defword_end + + defword "d+", 0, WORD_DPLUS, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP edx, 4 + PICKDSP eax, 0 + add eax, ecx + adc ebx, edx + PUTDSP eax, 8 + ADDDSP 8 + ret + defword_end + + defword "d-", 0, WORD_DMINUS, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP edx, 4 + PICKDSP eax, 0 + sub ecx, eax + sbb edx, ebx + PUTDSP ecx, 8 + mov ebx, edx + ADDDSP 8 + ret + defword_end + + defword "d2*", 0, WORD_D2STAR, WORD_INLINE_COMMA + PICKDSP eax, 0 + shl eax, 1 + rcl ebx, 1 + PUTDSP eax, 0 + ret + defword_end + + defword "d2/", 0, WORD_D2SLASH, WORD_INLINE_COMMA + PICKDSP eax, 0 + sar ebx, 1 + rcr eax, 1 + PUTDSP eax, 0 + ret + defword_end + + defword "*/", 0, WORD_MULDIV, WORD_INLINE_COMMA + PICKDSP edx, 4 + PICKDSP eax, 0 + imul edx + idiv ebx + mov ebx, eax + ADDDSP 8 + ret + defword_end + + defword "*/mod", 0, WORD_STARSMOD, WORD_INLINE_COMMA + PICKDSP edx, 4 + PICKDSP eax, 0 + imul edx + idiv ebx + PUTDSP edx, 4 + ADDDSP 4 + mov ebx, eax + ret + defword_end + + defword "/mod", 0, WORD_DIVMOD, WORD_INLINE_COMMA + PICKDSP eax, 0 + cdq + idiv ebx + PUTDSP edx, 0 + mov ebx, eax + ret + defword_end + + defword "dnegate", 0, WORD_DNEGATE, WORD_INLINE_COMMA + PICKDSP eax, 0 + not eax + not ebx + add eax, 1 + adc ebx, 0 + PUTDSP eax, 0 + ret + defword_end + + defword "dabs", 0, WORD_DABS, WORD_INLINE_COMMA + test ebx, ebx + if l + PICKDSP eax, 0 + not eax + not ebx + add eax, 1 + adc ebx, 0 + PUTDSP eax, 0 + endif + ret + defword_end + + defword "dmax", 0, WORD_DMAX, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP edx, 4 + PICKDSP eax, 0 + ADDDSP 8 + mov esi, ecx + mov edi, edx + sub esi, eax + sbb edi, ebx + if l + PUTDSP eax, 0 + else + mov ebx, edx + endif + ret + defword_end + + defword "dmin", 0, WORD_DMIN, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP edx, 4 + PICKDSP eax, 0 + ADDDSP 8 + mov esi, ecx + mov edi, edx + sub esi, eax + sbb edi, ebx + if ge + PUTDSP eax, 0 + else + mov ebx, edx + endif + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; double precision comparision words +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "d0=", 0, WORD_DZEQ, WORD_INLINE_COMMA + or ebx, [ebp] + setz bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "d0<>", 0, WORD_DZNEQ, WORD_INLINE_COMMA + or ebx, [ebp] + setnz bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "d0<", 0, WORD_DZLT, WORD_INLINE_COMMA + test ebx, ebx + setl bl + ADDDSP 4 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "d=", 0, WORD_DEQ, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP eax, 4 + sub ecx, [ebp] + sbb eax, ebx + setz bl + ADDDSP 12 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "d<>", 0, WORD_DNEQ, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP eax, 4 + sub ecx, [ebp] + sbb eax, ebx + setnz bl + ADDDSP 12 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "d<", 0, WORD_DLT, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP eax, 4 + sub ecx, [ebp] + sbb eax, ebx + setl bl + ADDDSP 12 + movzx ebx, bl + neg ebx + ret + defword_end + + defword "du<", 0, WORD_DULT, WORD_INLINE_COMMA + PICKDSP ecx, 8 + PICKDSP eax, 4 + sub ecx, [ebp] + sbb eax, ebx + setb bl + ADDDSP 12 + movzx ebx, bl + neg ebx + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;; +; mixed precision words +;;;;;;;;;;;;;;;;;;;;;;; + + defword "m+", 0, WORD_MPLUS, WORD_INLINE_COMMA + PICKDSP eax, 4 + PICKDSP edx, 0 + add eax, ebx + adc edx, 0 + PUTDSP eax, 4 + mov ebx, edx + ADDDSP 4 + ret + defword_end + + defword "m-", 0, WORD_MMINUS, WORD_INLINE_COMMA + PICKDSP eax, 4 + PICKDSP edx, 0 + sub eax, ebx + sbb edx, 0 + PUTDSP eax, 4 + mov ebx, edx + ADDDSP 4 + ret + defword_end + + defword "m*", 0, WORD_MULSTAR, WORD_INLINE_COMMA + PICKDSP eax, 0 + imul ebx + PUTDSP eax, 0 + mov ebx, edx + ret + defword_end + + defword "m/", 0, WORD_MSLASH, WORD_INLINE_COMMA + PICKDSP eax, 4 + PICKDSP edx, 0 + idiv ebx + mov ebx, eax + ADDDSP 8 + ret + defword_end + + defword "um*", 0, WORD_UMULSTAR, WORD_INLINE_COMMA + PICKDSP eax, 0 + mul ebx + PUTDSP eax, 0 + mov ebx, edx + ret + defword_end + + defword "um/mod", 0, WORD_UMDIVMOD, WORD_INLINE_COMMA + PICKDSP eax, 4 + PICKDSP edx, 0 + div ebx + PUTDSP edx, 4 + mov ebx, eax + ADDDSP 4 + ret + defword_end + + defword "fm/mod", 0, WORD_FMDIVMOD, WORD_INLINE_COMMA + PICKDSP edx, 0 + PICKDSP eax, 4 + mov ecx, ebx + ADDDSP 4 + xor ecx, edx + idiv ebx + test ecx, ecx + if s + test edx, edx + if nz + dec eax + add edx, ebx + endif + endif + PUTDSP edx, 0 + mov ebx, eax + ret + defword_end + + defword "sm/rem", 0, WORD_SMDIVREM, WORD_INLINE_COMMA + PICKDSP eax, 4 + PICKDSP edx, 0 + idiv ebx + PUTDSP edx, 4 + mov ebx, eax + ADDDSP 4 + ret + defword_end + + defword "u/mod", 0, WORD_UDIVMOD, WORD_INLINE_COMMA + xor edx, edx + PICKDSP eax, 0 + div ebx + PUTDSP edx, 0 + mov ebx, eax + ret + defword_end + + defword "dm*", 0, WORD_DMULSTAR, WORD_CALL_COMMA + call WORD_TUCK + call WORD_MULL + TORSP + call WORD_UMULSTAR + FROMRSP + call WORD_ADD + ret + defword_end + +;;;;;;;;;;;;;;;;;;;; +; control flow words +;;;;;;;;;;;;;;;;;;;; + + defword "branch", 0, WORD_BRANCH, WORD_INLINE_COMMA +i_jmp: + jmp strict near i_ret + ret + defword_end + + defword "0branch", 0, WORD_ZBRANCH, WORD_INLINE_COMMA + mov eax, ebx + POPDSP ebx + test eax, eax + jz strict near i_jmp + ret + defword_end + + defword "exit", 0, WORD_EXIT, WORD_EXIT_COMMA +i_ret: + ret + defword_end + + defword "exit,", 0, WORD_EXIT_COMMA, WORD_CALL_COMMA + mov edi, [var_WORD_DP] + sub edi, 5 + cmp edi, [lastcall] ; are we just after a call instruction ? + if z + mov al, [i_jmp] + mov [edi], al ; change it to a jmp + endif + mov edi, [var_WORD_DP] + mov al, [i_ret] + stosb + mov [var_WORD_DP], edi + POPDSP ebx + ret + defword_end + + defword "execute", 0, WORD_EXECUTE, WORD_CALL_COMMA + mov eax, ebx ; Get xt into eax + POPDSP ebx ; After xt runs its ret will continue executing the current word. + jmp eax ; and jump to it. + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;; +; terminal input words +;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "read-char", 0, WORD_READCHAR, WORD_CALL_COMMA + mov ecx, var_WORD_CHARBUF ; 2nd param: buffer + mov edx, 1 ; 3rd param: max length + push edx + push ecx + push ebx + mov eax, SYS_read ; syscall: read + call _syscall + add esp, 12 + xor ebx, ebx + test eax, eax + if be + mov ebx, -1 + endif + ret + defword_end + + defword "read-line", 0, WORD_READLINE, WORD_CALL_COMMA + call WORD_NROT + call WORD_OVER + call WORD_ADD + call WORD_OVER ; ( fd start end cur ) +readline_l1: + PICKDSP eax, 0 + cmp ebx, eax + jz readline_l4 + PUSHDSP ebx + PICKDSP ebx, 12 + call WORD_READCHAR + test ebx, ebx + jz readline_l2 + call WORD_DROP + call WORD_DROP2 + call WORD_DROP2 + LOADTOS 0 + LOADTOS 0 + LOADTOS -1 + jmp readline_l5 +readline_l2: + mov ebx, [var_WORD_CHARBUF] + cmp ebx, 10 ; LF + jz readline_l3 + call WORD_OVER + call WORD_STOREBYTE + call WORD_INCR + jmp readline_l1 +readline_l3: + call WORD_DROP +readline_l4: + call WORD_NIP + call WORD_SWAP + call WORD_SUB + call WORD_NIP + LOADTOS -1 + LOADTOS 0 +readline_l5: + ret + defword_end + + defword "key", 0, WORD_KEY, WORD_CALL_COMMA + PUSHDSP ebx + xor ebx, ebx ; stdin + call WORD_READCHAR + mov ebx, [var_WORD_CHARBUF] + ret + defword_end + + defword "accept", 0, WORD_ACCEPT, WORD_CALL_COMMA + call WORD_OVER + call WORD_ADD + call WORD_OVER ; ( start end cur ) +accept_l1: + call WORD_KEY + cmp ebx, 127 ; BS + jz accept_l2 + cmp ebx, 10 ; LF + jz accept_l3 + call WORD_OVER ; ( start end cur key cur ) + call WORD_STOREBYTE + call WORD_INCR ; ( start end cur' ) + PICKDSP eax, 0 + cmp ebx, eax + jz accept_l4 + jmp accept_l1 +accept_l2: + PICKDSP eax, 4 ; ( start end cur' ) + cmp ebx, eax + jz accept_l1 + call WORD_DECR + jmp accept_l1 +accept_l3: + call WORD_DROP ; ( start end cur' ) +accept_l4: + call WORD_NIP + call WORD_SWAP + call WORD_SUB + ret + defword_end + + defword "tabs>spaces", 0, WORD_TABSTOSPACES, WORD_CALL_COMMA + mov ecx, ebx + POPDSP esi + test ecx, ecx + if nz + repeat + lodsb + cmp al, 9 ;TAB + if z + mov byte [esi - 1], ' ' + endif + dec ecx + until z + endif + POPDSP ebx + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;; +; terminal output words +;;;;;;;;;;;;;;;;;;;;;;; + + defword "type-fd", 0, WORD_TYPE_FD, WORD_CALL_COMMA + PICKDSP edx, 0 ; 3rd param: length of string + PICKDSP ecx, 4 ; 2nd param: address of string + ADDDSP 8 ; 1st param: FD in ebx + mov eax, SYS_write ; write syscall + push edx + push ecx + push ebx + call _syscall + add esp, 12 + POPDSP ebx + ret + defword_end + + defword "type", 0, WORD_TYPE, WORD_CALL_COMMA + LOADTOS 1 ; stdout + call WORD_TYPE_FD + ret + defword_end + + defword "emit", 0, WORD_EMIT, WORD_CALL_COMMA + mov [emit_scratch], bl ; write needs the address of the byte to write + mov ebx, emit_scratch + LOADTOS 1 + call WORD_TYPE + ret + defword_end + +;;;;;;;;;;;;;;;;;;; +; system call words +;;;;;;;;;;;;;;;;;;; + + defword "syscall", 0, WORD_SYSCALL, WORD_CALL_COMMA + pop eax + mov [syscallret], eax ; save return address + mov eax, ebx ; System call number (see ) + call _syscall + mov ebx, eax ; Result (negative for -errno) + jmp [syscallret] ; return to caller + defword_end + + defword "lsyscall", 0, WORD_LSYSCALL, WORD_CALL_COMMA + pop eax + mov [syscallret], eax ; save return address + mov eax, ebx ; System call number (see ) + call _lsyscall + PUSHDSP eax + mov ebx, edx ; Result (negative for -errno) + jmp [syscallret] ; return to caller + defword_end + +;;;;;;;;;;;;;; +; string words +;;;;;;;;;;;;;; + + defword "count", 0, WORD_COUNT, WORD_CALL_COMMA + xor eax, eax + mov al, [ebx] + inc ebx + LOADTOS eax + ret + defword_end + + defword "-trailing", 0, WORD_TRAILING, WORD_CALL_COMMA + test ebx, ebx + if nz + PICKDSP esi, 0 + mov ecx, ebx + add esi, ebx + dec esi + std + trailing_l1: + lodsb + cmp al, ' ' + if be + loop trailing_l1 + endif + mov ebx, ecx + cld + endif + ret + defword_end + + defword "/string", 0, WORD_SSTRING, WORD_CALL_COMMA + mov eax, ebx + POPDSP ebx + PICKDSP ecx, 0 + sub ebx, eax + add ecx, eax + PUTDSP ecx, 0 + ret + defword_end + + defword "compare", 0, WORD_COMPARE, WORD_CALL_COMMA + PICKDSP esi, 8 + PICKDSP edx, 4 + PICKDSP edi, 0 + ADDDSP 12 + mov ecx, ebx + cmp edx, ebx + if be + mov ecx, edx + endif + test ecx, ecx ; ecx lowest length + jnz compare_l2 + cmp edx, ebx + jz compare_l3 ; both are 0 length + jmp compare_l4 ; otherwise the longest wins +compare_l2: + cmpsb + jnz compare_l4 ; chars not same + loop compare_l2 + cmp edx, ebx ; all chars same + jnz compare_l4 ; strings not same size +compare_l3: + xor ebx, ebx ; same + jmp compare_l7 +compare_l4: + ja compare_l6 +compare_l5: + mov ebx, -1 + jmp compare_l7 +compare_l6: + mov ebx, 1 +compare_l7: + ret + defword_end + + defword "icompare", 0, WORD_COMPAREI, WORD_CALL_COMMA + PICKDSP esi, 8 + PICKDSP edx, 4 + PICKDSP edi, 0 + ADDDSP 12 + mov ecx, ebx + cmp edx, ebx + if be + mov ecx, edx + endif + test ecx, ecx ; ecx lowest length + jnz comparei_l2 + cmp edx, ebx + jz comparei_l3 ; both are 0 length + jmp comparei_l4 ; otherwise the longest wins +comparei_l2: + mov al, [esi] + mov ah, [edi] + to_lower al + to_lower ah + cmp ah, al + jnz comparei_l4 ; chars not same + inc edi + inc esi + loop comparei_l2 + cmp edx, ebx ; all chars same + jnz comparei_l4 ; strings not same size +comparei_l3: + xor ebx, ebx ; same + jmp comparei_l7 +comparei_l4: + ja comparei_l6 +comparei_l5: + mov ebx, -1 + jmp comparei_l7 +comparei_l6: + mov ebx, 1 +comparei_l7: + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; dictionary searching words +;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "find", 0, WORD_FIND, WORD_CALL_COMMA + call WORD_DUP + call WORD_COUNT + call WORD_FIND_DICT + test ebx, ebx + if nz + mov dl, [ebx + H_NSIZE] + call WORD_TCFA + LOADTOS 1 + and edx, F_IMMED + if z + neg ebx + endif + call WORD_ROT + call WORD_DROP + endif + ret + defword_end + + defword "(find)", 0, WORD_FIND_DICT, WORD_CALL_COMMA + mov ecx, ebx ; ecx = length + POPDSP edi ; edi = address + PUSHRSP ecx + mov esi, edi + call strhashi + and ebx, NUM_HASH_CHAINS-1 + mov esi, hash_buckets + mov edx, [esi + (ebx * 4)] + POPRSP ecx ; edx can now scan back through this hash chain +findd_l1: + test edx, edx ; NULL pointer? (end of the linked list) + je findd_l4 + xor eax, eax + mov al, [edx + H_NSIZE] ; al = flags+length field + and al, (F_HIDDEN|F_LENMASK) ; al = name length + cmp al, cl ; Length is the same? + jne findd_l2 + PUSHRSP ecx ; Save the length + PUSHRSP edi ; Save the address (repe cmpsb will move this pointer) + lea esi, [edx + H_NAME] ; Dictionary string we are checking against. + call strcmpi + POPRSP edi + POPRSP ecx + jne findd_l2 ; Not the same. + mov ebx, edx + ret +findd_l2: + mov edx, [edx + H_HLINK] ; Move back through the link field to the previous word + jmp findd_l1 ; .. and loop. +findd_l4: + xor ebx, ebx ; Return zero to indicate not found. + ret + defword_end + + defword ">cfa", 0, WORD_TCFA, WORD_CALL_COMMA + add ebx, H_NSIZE + mov al, [ebx] ; Load flags+len into al. + inc ebx ; skip flags+len byte. + and eax, F_LENMASK ; Just the length, not the flags. + add ebx, eax ; skip the name + add ebx, XT_SIZE ; skip to the xt + ret + defword_end + + defword "(bucket)", 0, WORD_BUCKET, WORD_CALL_COMMA + mov ecx, ebx ; ecx = length + POPDSP ebx ; ebx = address of name + PUSHRSP esi + mov esi, ebx + call strhashi + and ebx, NUM_HASH_CHAINS-1 + mov esi, hash_buckets + lea ebx, [esi + (ebx * 4)] + POPRSP esi + ret + defword_end + + defword "unused", 0, WORD_UNUSED, WORD_CALL_COMMA + LOADTOS forth_end + LOADTOS [var_WORD_DP] + call WORD_SUB + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;;;;;;; +; dictionary building words +;;;;;;;;;;;;;;;;;;;;;;;;;;; + + defword "align", 0, WORD_ALIGNDP, WORD_CALL_COMMA + mov eax, [var_WORD_DP] + ALIGNREG eax + mov [var_WORD_DP], eax + ret + defword_end + + defword "header,", 0, WORD_HEADER_COMMA, WORD_CALL_COMMA + mov ecx, ebx ; ecx = length + POPDSP ebx ; ebx = address of name + call WORD_ALIGNDP ; align header + mov edi, [var_WORD_DP] ; edi is the address of the header + mov eax, [var_WORD_LATEST] ; Get link pointer + mov [edi + H_LLINK], eax ; and store it in the header. + mov [var_WORD_LATEST], edi + PUSHRSP ebx ; hash chain + PUSHRSP ecx + mov esi, ebx + call strhashi + and ebx, NUM_HASH_CHAINS-1 + mov esi, hash_buckets + mov eax, [esi + (ebx * 4)] + mov [esi + (ebx * 4)], edi + mov [edi + H_HLINK], eax ; and store it in the header. + POPRSP ecx + POPRSP esi + mov [edi + H_NSIZE], cl ; Store the length/flags byte. + add edi, H_NAME + call strcpyi + mov ecx, XT_SIZE + xor eax, eax + rep stosb ; clear the gap till the xt + mov [var_WORD_DP], edi + mov long [edi + XT_COMPILE], WORD_CALL_COMMA ;compile action + POPDSP ebx + ret + defword_end + + defword "lit,", 0, WORD_LIT_COMMA, WORD_CALL_COMMA + mov esi, litc_l1 + mov edi, [var_WORD_DP] + mov ecx, litc_l2 - litc_l1 - 4 + rep movsb + mov [var_WORD_DP], edi + ret + defword_end +litc_l1: + LOADTOS 0xBAADF00D +litc_l2: + + defword "slits", 0, WORD_SLITS, WORD_CALL_COMMA + PUSHDSP ebx + POPRSP esi + xor eax, eax + lodsb ; get the length of the string + PUSHDSP esi ; push the address of the start of the string + mov ebx, eax ; push length on the stack + add esi, eax ; skip past the string + jmp esi + defword_end + + defword "clits", 0, WORD_CLITS, WORD_CALL_COMMA + FROMRSP + xor eax, eax + mov al, [ebx] + lea eax, [ebx + eax + 1] + jmp eax + defword_end + + defword ",", 0, WORD_COMMA, WORD_CALL_COMMA + mov edi, [var_WORD_DP] ; DP + mov eax, ebx + stosd ; Store it. + mov [var_WORD_DP], edi ; Update DP (incremented) + POPDSP ebx + ret + defword_end + + defword "c,", 0, WORD_CHAR_COMMA, WORD_CALL_COMMA + mov eax, ebx + mov edi, [var_WORD_DP] ; DP + stosb ; Store it. + mov [var_WORD_DP], edi ; Update DP (incremented) + POPDSP ebx + ret + defword_end + + defword ":", 0, WORD_COLON, WORD_CALL_COMMA + call WORD_PARSENAME + call WORD_HEADER_COMMA ; Create the dictionary entry / header + mov eax, [var_WORD_DP] + mov [eax + XT_BODY], eax + call WORD_LATEST + call WORD_FETCH + call WORD_HIDDEN ; Make the word hidden + call WORD_RBRAC ; Go into compile mode. + ret + defword_end + + defword "create", 0, WORD_CREATE, WORD_CALL_COMMA + call WORD_PARSENAME + call WORD_HEADER_COMMA + mov esi, create_l1 + mov edi, [var_WORD_DP] + PUSHRSP edi + mov ecx, create_l4 - create_l1 + rep movsb + mov [var_WORD_DP], edi + mov edx, edi + call WORD_ALIGNDP + POPRSP eax + mov edi, [var_WORD_DP] + sub edx, eax + mov [eax + create_l2 - create_l1 - 4], edi + mov [eax + XT_BODY], edi + mov [eax + XT_LENGTH], edx + ret + defword_end +create_l1: + LOADTOS 0xBAADF00D +create_l2: + call strict near create_l3 +create_l3: + ret +create_l4: + + defword "dodoes", 0, WORD_DODOES, WORD_CALL_COMMA + call WORD_LATEST + call WORD_FETCH + call WORD_TCFA + add ebx, create_l3 - create_l1 - 4 + POPDSP eax + sub eax, ebx + sub eax, 4 + mov [ebx], eax + POPDSP ebx + ret + defword_end + + defword "does>", F_IMMED, WORD_DOES, WORD_CALL_COMMA + call WORD_LIT_COMMA + LOADTOS [var_WORD_DP] + add ebx, 10 + call WORD_COMMA + LOADTOS WORD_DODOES + call WORD_COMPILE_COMMA + LOADTOS 0 + mov bl, [does_l1] + call WORD_CHAR_COMMA +does_l1: + ret + defword_end + + defword "postpone", F_IMMED, WORD_POSTPONE, WORD_CALL_COMMA + call WORD_PARSENAME + call WORD_FIND_DICT + mov dl, [ebx + H_NSIZE] + call WORD_TCFA + and edx, F_IMMED + if z + call WORD_LIT_COMMA + call WORD_COMMA + LOADTOS WORD_COMPILE_COMMA + endif + jmp WORD_COMPILE_COMMA + ret + defword_end + + defword "call,", 0, WORD_CALL_COMMA, WORD_CALL_COMMA + mov edi, [var_WORD_DP] + mov [lastcall], edi ; record last location of last call + mov esi, i_call + movsb + mov eax, ebx + sub eax, 4 + sub eax, edi + stosd + mov [var_WORD_DP], edi + POPDSP ebx + ret + defword_end + + defword "inline,", 0, WORD_INLINE_COMMA, WORD_CALL_COMMA + mov ecx, [ebx + XT_LENGTH] + dec ecx ; actual code length minus ret + mov esi, ebx + mov edi, [var_WORD_DP] + rep movsb ; inline copy the code + mov [var_WORD_DP], edi ; update DP + POPDSP ebx + ret + defword_end + + defword "compile,", 0, WORD_COMPILE_COMMA, WORD_INLINE_COMMA + call [ebx + XT_COMPILE] + ret + defword_end + + defword ";", F_IMMED, WORD_SEMICOLON, WORD_CALL_COMMA + LOADTOS WORD_EXIT +i_call: + call strict near WORD_COMPILE_COMMA + call WORD_LATEST + call WORD_FETCH + call WORD_HIDDEN ; toggle hidden flag -- unhide the word (see below for definition). + call WORD_LBRAC ; go back to IMMEDIATE mode. + mov edx, ebx + mov ebx, [var_WORD_LATEST] + call WORD_TCFA + mov ecx, [var_WORD_DP] + sub ecx, ebx + mov [ebx + XT_LENGTH], ecx ; set code size of word + mov ebx, edx + ret + defword_end + + defword "immediate", 0, WORD_IMMEDIATE, WORD_CALL_COMMA + mov edi, [var_WORD_LATEST] ; LATEST word. + add edi, H_NSIZE ; Point to name/flags byte. + xor byte [edi], F_IMMED ; Toggle the IMMED bit. + ret + defword_end + + defword "hidden", 0, WORD_HIDDEN, WORD_CALL_COMMA + add ebx, H_NSIZE ; Point to name/flags byte. + xor byte [ebx], F_HIDDEN ; Toggle the HIDDEN bit. + POPDSP ebx + ret + defword_end + + defword "[", F_IMMED, WORD_LBRAC, WORD_CALL_COMMA + mov long [var_WORD_STATE], 0 ; Set STATE to 0. + ret + defword_end + + defword "]", 0, WORD_RBRAC, WORD_CALL_COMMA + mov long [var_WORD_STATE], 1 ; Set STATE to 1. + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;; +; source buffer words +;;;;;;;;;;;;;;;;;;;;; + + defword "source", 0, WORD_SOURCE, WORD_CALL_COMMA + call WORD_INHASH + call WORD_FETCH2 + ret + defword_end + + defword "refill", 0, WORD_REFILL, WORD_CALL_COMMA + LOADTOS tib_buffer + call WORD_LINESIZE ; ( tib len ) + call WORD_OVER + call WORD_SWAP ; ( tib tib len ) + call WORD_ACCEPT ; read line into TIB + call WORD_DUP2 + call WORD_TABSTOSPACES + call WORD_INHASH + call WORD_STORE2 ; set as current WORD_SOURCE + LOADTOS 0 + call WORD_TOIN + call WORD_STORE ; set to start of buffer + LOADTOS -1 + ret + defword_end + + defword "isspace?", 0, WORD_ISSPACE, WORD_CALL_COMMA + LOADTOS ' ' + call WORD_ULTEQ + ret + defword_end + + defword "isnotspace?", 0, WORD_ISNOTSPACE, WORD_CALL_COMMA + call WORD_ISSPACE + call WORD_ZEQ + ret + defword_end + + defword "xt-skip", 0, WORD_XTSKIP, WORD_CALL_COMMA + TORSP +xtskip_l1: + test ebx, ebx + jz xtskip_l3 + call WORD_OVER + call WORD_FETCHBYTE + FETCHRSP + call WORD_EXECUTE + test ebx, ebx + jz xtskip_l2 + mov ebx, 1 + call WORD_SSTRING + jmp xtskip_l1 +xtskip_l2: + call WORD_DROP +xtskip_l3: + ADDRSP 4 + ret + defword_end + +;;;;;;;;;;;;;;;;;;;;;; +; input parseing words +;;;;;;;;;;;;;;;;;;;;;; + + defword "parse-name", 0, WORD_PARSENAME, WORD_CALL_COMMA + call WORD_SOURCE + call WORD_TOIN + call WORD_FETCH + call WORD_SSTRING + LOADTOS WORD_ISSPACE + call WORD_XTSKIP + call WORD_OVER + TORSP + LOADTOS WORD_ISNOTSPACE + call WORD_XTSKIP + call WORD_DUP2 + LOADTOS 1 + call WORD_MIN + call WORD_ADD + call WORD_SOURCE + call WORD_DROP + call WORD_SUB + call WORD_TOIN + call WORD_STORE + call WORD_DROP + FROMRSP + call WORD_TUCK + call WORD_SUB +; code to print out "P CR" +;LOADTOS 80 +;call WORD_EMIT +;LOADTOS 32 +;call WORD_EMIT +;call WORD_DUP2 +;call WORD_TYPE +;LOADTOS 10 +;call WORD_EMIT + ret + defword_end + + defword "word-name", 0, WORD_WORDNAME, WORD_CALL_COMMA + call WORD_PARSENAME ; ( start len ) + LOADTOS word_buf ; ( string size buf ) + call WORD_DUP2 ; ( string size buf size buf ) + call WORD_STOREBYTE ; ( string size buf ) + call WORD_INCR ; ( string size buf+1 ) + call WORD_SWAP ; ( string buf+1 size ) + call WORD_CMOVE + LOADTOS word_buf ; ( cstring ) +; debug code to print out "N CR" +;LOADTOS 78 +;call WORD_EMIT +;LOADTOS 32 +;call WORD_EMIT +;call WORD_DUP2 +;call WORD_TYPE +;LOADTOS 10 +;call WORD_EMIT + ret + defword_end + + defword "interp-name", 0, WORD_INTERPNAME, WORD_CALL_COMMA + call WORD_PARSENAME ; ( start len ) + LOADTOS intep_name_buf ; ( string size buf ) + call WORD_DUP2 ; ( string size buf size buf ) + call WORD_STOREBYTE ; ( string size buf ) + call WORD_INCR ; ( string size buf+1 ) + call WORD_SWAP ; ( string buf+1 size ) + call WORD_CMOVE + LOADTOS intep_name_buf ;( cstring ) + ret + defword_end + + defword "interpret", 0, WORD_INTERPRET, WORD_CALL_COMMA + loopstart + call WORD_INTERPNAME + mov al, [ebx] + test al, al + breakif z + ; debug code to print out "I CR" + ;LOADTOS 73 + ;call WORD_EMIT + ;LOADTOS 32 + ;call WORD_EMIT + ;call WORD_DUP + ;call WORD_COUNT + ;call WORD_TYPE + ;LOADTOS 10 + ;call WORD_EMIT + call WORD_INTERP + loopend + call WORD_DROP + ret + defword_end + + defword "interp", 0, WORD_INTERP, WORD_CALL_COMMA + call WORD_FIND ; ( cstring 0 | xt 1 | xt | -1 ) + mov eax, ebx + POPDSP ebx + test eax, eax + jz tryasnumber + jle nonimediate +executeword: + mov eax, ebx + POPDSP ebx + jmp eax +nonimediate: + mov eax, [var_WORD_STATE] + test eax, eax ; are we in imedeate mode ? + jz executeword + jmp WORD_COMPILE_COMMA ; compile xt +tryasnumber: + call WORD_COUNT ; ( adr len ) + LOADTOS 0 + LOADTOS 0 + call WORD_SWAP2 ; ( 0d addr len ) + call WORD_TOSNUMBER ; ( d addr len ) + test ebx, ebx + jnz parseproblem + call WORD_DROP2 + call WORD_DROP ; ( num ) + mov eax, [var_WORD_STATE] + test eax, eax + if nz + call WORD_LIT_COMMA ; compile LIT + call WORD_COMMA ; compile value + endif + ret +parseproblem: + LOADTOS errmsg + LOADTOS errmsgend - errmsg + LOADTOS 2 + call WORD_TYPE_FD + LOADTOS errmsgnl + LOADTOS 1 + LOADTOS 2 + call WORD_TYPE_FD + LOADTOS tib_buffer + LOADTOS [var_WORD_TOIN] + LOADTOS 2 + call WORD_TYPE_FD + LOADTOS errmsgnl + LOADTOS 1 + LOADTOS 2 + call WORD_TYPE_FD + call WORD_DROP2 + call WORD_DROP2 + ret + defword_end + + defword ">number", 0, WORD_TONUMBER, WORD_CALL_COMMA + call WORD_OVER + call WORD_ADD + call WORD_SWAP ; ( ud end cur ) +tonumber_l1: + PICKDSP eax, 0 + cmp ebx, eax + jz near tonumber_l4 + call WORD_DUP + call WORD_FETCHBYTE ; ( ud end cur char ) + to_lower ebx + sub ebx, byte '0' + jb tonumber_l3 ; < '0'? + cmp ebx, byte 10 + jb tonumber_l2 ; <= '9' ? + sub ebx, byte 'a' - '0' + jb tonumber_l3 ; < 'a' ? + add ebx, byte 10 +tonumber_l2: + cmp ebx, [var_WORD_BASE] + jge tonumber_l3 ; >= WORD_BASE ? + TORSP + call WORD_SWAP2 ; ( end cur ud ) + LOADTOS [var_WORD_BASE] + call WORD_DMULSTAR + FROMRSP + call WORD_MPLUS ; ( end cur ud' ) + call WORD_SWAP2 + call WORD_INCR ; ( ud' end cur' ) + jmp tonumber_l1 +tonumber_l3: + call WORD_DROP +tonumber_l4: + call WORD_SWAP + call WORD_OVER + call WORD_SUB ; ( ud' c-addr u2 ) + ret + defword_end + + defword ">snumber", 0, WORD_TOSNUMBER, WORD_CALL_COMMA + test ebx, ebx + if nz + PICKDSP eax, 0 + mov cl, [eax] + cmp cl, '-' + jnz WORD_TONUMBER ; not '-' + inc eax + PUTDSP eax, 0 + dec ebx + call WORD_TONUMBER + call WORD_SWAP2 + call WORD_DNEGATE + call WORD_SWAP2 + endif + ret + defword_end + +;;;;;;;;;;; +; tick word +;;;;;;;;;;; + + defword "ticks", 0, WORD_TICKS, WORD_CALL_COMMA + sub ebp, byte 8 + rdtsc + mov [byte ebp -4], ebx + mov [ebp], eax + mov ebx, edx + ret + defword_end + +;;;;;;;;;;; +; test word +;;;;;;;;;;; + + defword "test", 0, WORD_TEST, WORD_CALL_COMMA + ret + defword_end + +;;;;;;;;;;;;;;;;; +; read/write data +;;;;;;;;;;;;;;;;; + + align 4 +syscallret: + ; return address saved by syscall + dd 0 +lastcall: + ; last call layed down by compiler + dd 0 + +tib_buffer: + ; keyboard input buffer + times MAX_LINE_SIZE db 0 +word_buf: + ; static buffer where WORD returns. Subsequent calls + ; overwrite this buffer. + times MAX_LINE_SIZE db 0 +intep_name_buf: + ; static buffer where INTERPNAME returns. Subsequent calls + ; overwrite this buffer. + times MAX_LINE_SIZE db 0 +emit_scratch: + ; scratch used by EMIT + db 0 +errmsg: + db "PARSE ERROR:" +errmsgend: +errmsgnl: + db 10 +bootfile: + db "forth.f" + db 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; dictionary hash table (64) +;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + align 4 +hash_buckets: + dd 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + dd 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + dd 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + dd 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; addresses of all built in dictionary words. +; this ends up as part of the user space after booting ! +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + align 4 +dictionary_start: + dd dic_WORD_ABS + dd dic_WORD_ACCEPT + dd dic_WORD_ADD + dd dic_WORD_ADDBYTE + dd dic_WORD_ADDSTORE + dd dic_WORD_ALIGNDP + dd dic_WORD_AND + dd dic_WORD_BASE + dd dic_WORD_BLANK + dd dic_WORD_BLK + dd dic_WORD_BRANCH + dd dic_WORD_BUCKET + dd dic_WORD_CALL_COMMA + dd dic_WORD_CHARBUF + dd dic_WORD_CHAR_COMMA + dd dic_WORD_CLITS + dd dic_WORD_CMOVE + dd dic_WORD_CMOVEB + dd dic_WORD_COLON + dd dic_WORD_COMMA + dd dic_WORD_COMPARE + dd dic_WORD_COMPAREI + dd dic_WORD_COMPILE_COMMA + dd dic_WORD_COUNT + dd dic_WORD_CREATE + dd dic_WORD_D2SLASH + dd dic_WORD_D2STAR + dd dic_WORD_DABS + dd dic_WORD_DECR + dd dic_WORD_DECR2 + dd dic_WORD_DECR4 + dd dic_WORD_DEQ + dd dic_WORD_DIV + dd dic_WORD_DIVMOD + dd dic_WORD_DLT + dd dic_WORD_DMAX + dd dic_WORD_DMIN + dd dic_WORD_DMINUS + dd dic_WORD_DMULSTAR + dd dic_WORD_DNEGATE + dd dic_WORD_DNEQ + dd dic_WORD_DODOES + dd dic_WORD_DOES + dd dic_WORD_DP + dd dic_WORD_DPLUS + dd dic_WORD_DROP + dd dic_WORD_DROP2 + dd dic_WORD_DSPFETCH + dd dic_WORD_DSPSTORE + dd dic_WORD_DTOS + dd dic_WORD_DULT + dd dic_WORD_DUP + dd dic_WORD_DUP2 + dd dic_WORD_DZEQ + dd dic_WORD_DZLT + dd dic_WORD_DZNEQ + dd dic_WORD_EMIT + dd dic_WORD_EQ + dd dic_WORD_ERASE + dd dic_WORD_EXECUTE + dd dic_WORD_EXIT + dd dic_WORD_FETCH + dd dic_WORD_FETCH2 + dd dic_WORD_FETCHBYTE + dd dic_WORD_FETCHSHORT + dd dic_WORD_FILL + dd dic_WORD_FIND + dd dic_WORD_FIND_DICT + dd dic_WORD_FMDIVMOD + dd dic_WORD_FROMR + dd dic_WORD_FROMR2 + dd dic_WORD_GT + dd dic_WORD_GTEQ + dd dic_WORD_HEADER_COMMA + dd dic_WORD_HIDDEN + dd dic_WORD_IMMEDIATE + dd dic_WORD_INCR + dd dic_WORD_INCR2 + dd dic_WORD_INCR4 + dd dic_WORD_INHASH + dd dic_WORD_INLINE_COMMA + dd dic_WORD_INTERP + dd dic_WORD_INTERPNAME + dd dic_WORD_INTERPRET + dd dic_WORD_INVERT + dd dic_WORD_ISNOTSPACE + dd dic_WORD_ISSPACE + dd dic_WORD_KEY + dd dic_WORD_LATEST + dd dic_WORD_LBRAC + dd dic_WORD_LINESIZE + dd dic_WORD_LIT_COMMA + dd dic_WORD_LSHIFT + dd dic_WORD_LSYSCALL + dd dic_WORD_LT + dd dic_WORD_LTEQ + dd dic_WORD_MAX + dd dic_WORD_MIN + dd dic_WORD_MMINUS + dd dic_WORD_MOD + dd dic_WORD_MOVE + dd dic_WORD_MPLUS + dd dic_WORD_MSLASH + dd dic_WORD_MULDIV + dd dic_WORD_MULL + dd dic_WORD_MULSTAR + dd dic_WORD_NE + dd dic_WORD_NEGATE + dd dic_WORD_NFROMR + dd dic_WORD_NIP + dd dic_WORD_NIP2 + dd dic_WORD_NQDUP + dd dic_WORD_NROT + dd dic_WORD_NTOR + dd dic_WORD_OR + dd dic_WORD_OVER + dd dic_WORD_OVER2 + dd dic_WORD_O_APPEND + dd dic_WORD_O_CREAT + dd dic_WORD_O_EXCL + dd dic_WORD_O_NONBLOCK + dd dic_WORD_O_RDONLY + dd dic_WORD_O_RDWR + dd dic_WORD_O_TRUNC + dd dic_WORD_O_WRONLY + dd dic_WORD_PARSENAME + dd dic_WORD_PICK + dd dic_WORD_POSTPONE + dd dic_WORD_QDUP + dd dic_WORD_RBRAC + dd dic_WORD_RDROP + dd dic_WORD_RDROP2 + dd dic_WORD_READCHAR + dd dic_WORD_READLINE + dd dic_WORD_REFILL + dd dic_WORD_RFETCH + dd dic_WORD_RFETCH2 + dd dic_WORD_ROT + dd dic_WORD_ROT2 + dd dic_WORD_RSHIFT + dd dic_WORD_RSPFETCH + dd dic_WORD_RSPSTORE + dd dic_WORD_RSTORE + dd dic_WORD_RZ + dd dic_WORD_SEMICOLON + dd dic_WORD_SLITS + dd dic_WORD_SMDIVREM + dd dic_WORD_SOURCE + dd dic_WORD_SOURCEFD + dd dic_WORD_SSTRING + dd dic_WORD_STARSMOD + dd dic_WORD_STATE + dd dic_WORD_STOD + dd dic_WORD_STORE + dd dic_WORD_STORE2 + dd dic_WORD_STOREBYTE + dd dic_WORD_STORESHORT + dd dic_WORD_SUB + dd dic_WORD_SUBSTORE + dd dic_WORD_SWAP + dd dic_WORD_SWAP2 + dd dic_WORD_SYSCALL + dd dic_WORD_SYS_CLOSE + dd dic_WORD_SYS_EXIT + dd dic_WORD_SYS_FSTAT + dd dic_WORD_SYS_FSYNC + dd dic_WORD_SYS_FTRUNCATE + dd dic_WORD_SYS_LSEEK + dd dic_WORD_SYS_OPEN + dd dic_WORD_SYS_READ + dd dic_WORD_SYS_RENAME + dd dic_WORD_SYS_STAT + dd dic_WORD_SYS_UNLINK + dd dic_WORD_SYS_WRITE + dd dic_WORD_SZ + dd dic_WORD_TABSTOSPACES + dd dic_WORD_TCFA + dd dic_WORD_TICKS + dd dic_WORD_TOIN + dd dic_WORD_TONUMBER + dd dic_WORD_TOR + dd dic_WORD_TOR2 + dd dic_WORD_TOSNUMBER + dd dic_WORD_TRAILING + dd dic_WORD_TUCK + dd dic_WORD_TUCK2 + dd dic_WORD_TWODIV + dd dic_WORD_TWOMUL + dd dic_WORD_TYPE + dd dic_WORD_TYPE_FD + dd dic_WORD_UDIVMOD + dd dic_WORD_UGT + dd dic_WORD_UGTEQ + dd dic_WORD_ULT + dd dic_WORD_ULTEQ + dd dic_WORD_UMDIVMOD + dd dic_WORD_UMULSTAR + dd dic_WORD_UNUSED + dd dic_WORD_VERSION + dd dic_WORD_WORDBUF + dd dic_WORD_WORDNAME + dd dic_WORD_XOR + dd dic_WORD_XTSKIP + dd dic_WORD_ZBRANCH + dd dic_WORD_ZEQ + dd dic_WORD_ZGT + dd dic_WORD_ZGTEQ + dd dic_WORD_ZLT + dd dic_WORD_ZLTEQ + dd dic_WORD_ZNE + dd dic_WORD__F_HIDDEN + dd dic_WORD__F_IMMED + dd dic_WORD__F_LENMASK + dd dic_WORD__H_NAME + dd dic_WORD__H_NSIZE + dd dic_WORD__XT_BODY + dd dic_WORD__XT_COMPILE + dd dic_WORD__XT_LENGTH + dd dic_WORD__XT_SIZE + dd dic_WORD_TEST +dictionary_end: + +;;;;;;;;;;;;;;;;;;;;;;;;;; +; room for user dictionary +;;;;;;;;;;;;;;;;;;;;;;;;;; + + times USER_DEFS_SIZE db 0 +forth_end: diff --git a/samples/Assembly/fp_sqr32_160_comba.inc b/samples/Assembly/fp_sqr32_160_comba.inc new file mode 100644 index 00000000..ce5a62b8 --- /dev/null +++ b/samples/Assembly/fp_sqr32_160_comba.inc @@ -0,0 +1,245 @@ + + push r2 + dint + nop + bis #MPYDLYWRTEN,&MPY32CTL0 + bic #MPYDLY32,&MPY32CTL0 + mov #SUMEXT,r13 + clr r12 + + mov @r15+,r4 + mov @r15+,r5 + + mov @r15+,r6 + mov @r15+,r7 + + mov @r15+,r8 + mov @r15+,r9 + + mov @r15+,r10 + mov @r15+,r11 + + sub #2*8,r15 + + /* SELF_STEP_FIRST */ + mov r4,&MPY32L + mov r5,&MPY32H + mov r4,&OP2L + mov r5,&OP2H + + /* COLUMN_END */ + mov &RES0,2*0(r14) + mov &RES1,2*(0+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r6,&OP2L + mov r7,&OP2H + add &SUMEXT,r12 + mov r6,&OP2L + mov r7,&OP2H + + /* COLUMN_END */ + mov &RES0,2*2(r14) + add @r13,r12 + mov &RES1,2*(2+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r8,&OP2L + mov r9,&OP2H + add &SUMEXT,r12 + mov r8,&OP2L + mov r9,&OP2H + + /* SELF_STEP */ + mov r6,&MAC32L + mov r7,&MAC32H + add @r13,r12 + mov r6,&OP2L + mov r7,&OP2H + + /* COLUMN_END */ + mov &RES0,2*4(r14) + add @r13,r12 + mov &RES1,2*(4+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r10,&OP2L + mov r11,&OP2H + add &SUMEXT,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* STEP_2MORE */ + mov r6,&MAC32L + mov r7,&MAC32H + add @r13,r12 + mov r8,&OP2L + mov r9,&OP2H + add &SUMEXT,r12 + mov r8,&OP2L + mov r9,&OP2H + + /* COLUMN_END */ + mov &RES0,2*6(r14) + add @r13,r12 + mov &RES1,2*(6+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov 2*8(r15),&OP2L + mov 2*9(r15),&OP2H + add &SUMEXT,r12 + mov 2*8(r15),&OP2L + mov 2*9(r15),&OP2H + + /* STEP_2MORE */ + mov r6,&MAC32L + mov r7,&MAC32H + add @r13,r12 + mov r10,&OP2L + mov r11,&OP2H + add &SUMEXT,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* SELF_STEP */ + mov r8,&MAC32L + mov r9,&MAC32H + add @r13,r12 + mov r8,&OP2L + mov r9,&OP2H + + /* COLUMN_END */ + mov &RES0,2*8(r14) + add @r13,r12 + mov &RES1,2*(8+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + mov 2*8(r15),r4 + mov 2*(8+1)(r15),r5 + + /* STEP_1 */ + mov r6,&MAC32L + mov r7,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + add &SUMEXT,r12 + mov r4,&OP2L + mov r5,&OP2H + + /* STEP_2MORE */ + mov r8,&MAC32L + mov r9,&MAC32H + add @r13,r12 + mov r10,&OP2L + mov r11,&OP2H + add &SUMEXT,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* COLUMN_END */ + mov &RES0,2*10(r14) + add @r13,r12 + mov &RES1,2*(10+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r8,&MAC32L + mov r9,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + add &SUMEXT,r12 + mov r4,&OP2L + mov r5,&OP2H + + /* SELF_STEP */ + mov r10,&MAC32L + mov r11,&MAC32H + add @r13,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* COLUMN_END */ + mov &RES0,2*12(r14) + add @r13,r12 + mov &RES1,2*(12+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r10,&MAC32L + mov r11,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + add &SUMEXT,r12 + mov r4,&OP2L + mov r5,&OP2H + + /* COLUMN_END */ + mov &RES0,2*14(r14) + add @r13,r12 + mov &RES1,2*(14+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* SELF_STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + + /* COLUMN_END */ + mov &RES0,2*16(r14) + add @r13,r12 + mov &RES1,2*(16+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* END */ + mov &RES0,2*18(r14) + mov &RES1,2*(18+1)(r14) + pop r2 + eint diff --git a/samples/Assembly/lib.inc b/samples/Assembly/lib.inc new file mode 100644 index 00000000..1faceead --- /dev/null +++ b/samples/Assembly/lib.inc @@ -0,0 +1,170 @@ + +; ------------------------------------------------------------------------ +; 显示 AL 中的数字 +; ------------------------------------------------------------------------ +DispAL: + push ecx + push edx + push edi + + mov edi, [dwDispPos] + + mov ah, 0Fh ; 0000b: 黑底 1111b: 白字 + mov dl, al + shr al, 4 + mov ecx, 2 +.begin: + and al, 01111b + cmp al, 9 + ja .1 + add al, '0' + jmp .2 +.1: + sub al, 0Ah + add al, 'A' +.2: + mov [gs:edi], ax + add edi, 2 + + mov al, dl + loop .begin + ;add edi, 2 + + mov [dwDispPos], edi + + pop edi + pop edx + pop ecx + + ret +; DispAL 结束------------------------------------------------------------- + + +; ------------------------------------------------------------------------ +; 显示一个整形数 +; ------------------------------------------------------------------------ +DispInt: + mov eax, [esp + 4] + shr eax, 24 + call DispAL + + mov eax, [esp + 4] + shr eax, 16 + call DispAL + + mov eax, [esp + 4] + shr eax, 8 + call DispAL + + mov eax, [esp + 4] + call DispAL + + mov ah, 07h ; 0000b: 黑底 0111b: 灰字 + mov al, 'h' + push edi + mov edi, [dwDispPos] + mov [gs:edi], ax + add edi, 4 + mov [dwDispPos], edi + pop edi + + ret +; DispInt 结束------------------------------------------------------------ + +; ------------------------------------------------------------------------ +; 显示一个字符串 +; ------------------------------------------------------------------------ +DispStr: + push ebp + mov ebp, esp + push ebx + push esi + push edi + + mov esi, [ebp + 8] ; pszInfo + mov edi, [dwDispPos] + mov ah, 0Fh +.1: + lodsb + test al, al + jz .2 + cmp al, 0Ah ; 是回车吗? + jnz .3 + push eax + mov eax, edi + mov bl, 160 + div bl + and eax, 0FFh + inc eax + mov bl, 160 + mul bl + mov edi, eax + pop eax + jmp .1 +.3: + mov [gs:edi], ax + add edi, 2 + jmp .1 + +.2: + mov [dwDispPos], edi + + pop edi + pop esi + pop ebx + pop ebp + ret +; DispStr 结束------------------------------------------------------------ + +; ------------------------------------------------------------------------ +; 换行 +; ------------------------------------------------------------------------ +DispReturn: + push szReturn + call DispStr ;printf("\n"); + add esp, 4 + + ret +; DispReturn 结束--------------------------------------------------------- + + +; ------------------------------------------------------------------------ +; 内存拷贝,仿 memcpy +; ------------------------------------------------------------------------ +; void* MemCpy(void* es:pDest, void* ds:pSrc, int iSize); +; ------------------------------------------------------------------------ +MemCpy: + push ebp + mov ebp, esp + + push esi + push edi + push ecx + + mov edi, [ebp + 8] ; Destination + mov esi, [ebp + 12] ; Source + mov ecx, [ebp + 16] ; Counter +.1: + cmp ecx, 0 ; 判断计数器 + jz .2 ; 计数器为零时跳出 + + mov al, [ds:esi] ; ┓ + inc esi ; ┃ + ; ┣ 逐字节移动 + mov byte [es:edi], al ; ┃ + inc edi ; ┛ + + dec ecx ; 计数器减一 + jmp .1 ; 循环 +.2: + mov eax, [ebp + 8] ; 返回值 + + pop ecx + pop edi + pop esi + mov esp, ebp + pop ebp + + ret ; 函数结束,返回 +; MemCpy 结束------------------------------------------------------------- + diff --git a/samples/Assembly/macros.inc b/samples/Assembly/macros.inc new file mode 100644 index 00000000..dc968ad9 --- /dev/null +++ b/samples/Assembly/macros.inc @@ -0,0 +1,321 @@ +BLARGG_MACROS_INCLUDED = 1 + +; Allows extra error checking with modified version +; of ca65. Otherwise acts like a constant of 0. +ADDR = 0 + +; Switches to Segment and places Line there. +; Line can be an .align directive, .res, .byte, etc. +; Examples: +; seg_data BSS, .align 256 +; seg_data RODATA, {message: .byte "Test",0} +.macro seg_data Segment, Line + .pushseg + .segment .string(Segment) + Line + .popseg +.endmacro + +; Reserves Size bytes in Segment for Name. +; If Size is omitted, reserves one byte. +.macro seg_res Segment, Name, Size + .ifblank Size + seg_data Segment, Name: .res 1 + .else + seg_data Segment, Name: .res Size + .endif +.endmacro + +; Shortcuts for zeropage, bss, and stack +.define zp_res seg_res ZEROPAGE, +.define nv_res seg_res NVRAM, +.define bss_res seg_res BSS, +.define sp_res seg_res STACK, +.define zp_byte zp_res + +; Copies byte from Src to Addr. If Src begins with #, +; it sets Addr to the immediate value. +; Out: A = byte copied +; Preserved: X, Y +.macro mov Addr, Src + lda Src + sta Addr +.endmacro + +; Copies word from Src to Addr. If Src begins with #, +; it sets Addr the immediate value. +; Out: A = high byte of word +; Preserved: X, Y +.macro movw Addr, Src + .if .match( .left( 1, {Src} ), # ) + lda #<(.right( .tcount( {Src} )-1, {Src} )) + sta Addr + lda #>(.right( .tcount( {Src} )-1, {Src} )) + sta 1+(Addr) + .else + lda Src + sta Addr + lda 1+(Src) + sta 1+(Addr) + .endif +.endmacro + +; Increments 16-bit value at Addr. +; Out: EQ/NE based on resulting 16-bit value +; Preserved: A, X, Y +.macro incw Addr + .local @Skip + inc Addr + bne @Skip + inc 1+(Addr) +@Skip: +.endmacro + +; Adds Src to word at Addr. +; Out: A = high byte of result, carry set appropriately +; Preserved: X, Y +.macro addw Addr, Src + .if .match( .left( 1, {Src} ), # ) + addw_ Addr,(.right( .tcount( {Src} )-1, {Src} )) + .else + lda Addr + clc + adc Src + sta Addr + + lda 1+(Addr) + adc 1+(Src) + sta 1+(Addr) + .endif +.endmacro +.macro addw_ Addr, Imm + lda Addr + clc + adc #> 8) <> 0 + lda 1+(Addr) + adc #>Imm + sta 1+(Addr) + ;.else + ; .local @Skip + ; bcc @Skip + ; inc 1+(Addr) + ;@Skip: + ;.endif +.endmacro + +; Splits list of words into tables of low and high bytes +; Example: split_words foo, {$1234, $5678} +; expands to: +; foo_l: $34, $78 +; foo_h: $12, $56 +; foo_count = 2 +.macro split_words Label, Words + .ident (.concat (.string(Label), "_l")): .lobytes Words + .ident (.concat (.string(Label), "_h")): .hibytes Words + .ident (.concat (.string(Label), "_count")) = * - .ident (.concat (.string(Label), "_h")) +.endmacro + +.macro SELECT Bool, True, False, Extra + .ifndef Bool + False Extra + .elseif Bool <> 0 + True Extra + .else + False Extra + .endif +.endmacro + +.macro DEFAULT Name, Value + .ifndef Name + Name = Value + .endif +.endmacro + +.ifp02 + ; 6502 doesn't define these alternate names + .define blt bcc + .define bge bcs +.endif +.define jlt jcc +.define jge jcs + +; Jxx Target = Bxx Target, except it can go farther than +; 128 bytes. Implemented via branch around a JMP. + +; Don't use ca65's longbranch, because they fail for @labels +;.macpack longbranch + +.macro jeq Target + bne *+5 + jmp Target +.endmacro + +.macro jne Target + beq *+5 + jmp Target +.endmacro + +.macro jmi Target + bpl *+5 + jmp Target +.endmacro + +.macro jpl Target + bmi *+5 + jmp Target +.endmacro + +.macro jcs Target + bcc *+5 + jmp Target +.endmacro + +.macro jcc Target + bcs *+5 + jmp Target +.endmacro + +.macro jvs Target + bvc *+5 + jmp Target +.endmacro + +.macro jvc Target + bvs *+5 + jmp Target +.endmacro + + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data RODATA,{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + .local @for_loop + lda #start +@for_loop: + pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne @for_loop +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + .local @for_loop_skip + .local @for_loop + ldy #>(start) + lda #<(start) +@for_loop: + tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc @for_loop_skip + iny +.else + bcs @for_loop_skip + dey +.endif +@for_loop_skip: + cmp #<((end)+(step)) + bne @for_loop + cpy #>((end)+(step)) + bne @for_loop +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +; Preserved: A, Y +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/samples/Brainfuck/factor.b b/samples/Brainfuck/factor.b new file mode 100644 index 00000000..43f06ba2 --- /dev/null +++ b/samples/Brainfuck/factor.b @@ -0,0 +1,195 @@ +* factor an arbitrarily large positive integer +* +* Copyright (C) 1999 by Brian Raiter +* under the GNU General Public License + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- + +* +* read in the number +* + +<<<<<<<<<+ +[-[>>>>>>>>>>][-]<<<<<<<<<<[[->>>>>>>>>>+<<<<<<<<<<]<<<<<<<<<<] + >>>>>>>>>>,----------] +>>>>>>>>>>[------------------------------------->>>>>>>>>->] +<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]- + +* +* display the number and initialize the loop variable to two +* + +[>++++++++++++++++++++++++++++++++++++++++++++++++. + ------------------------------------------------<<<<<<<<<<<] +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. +--------------------------.[-] +>>>>>>>>>>>>++<<<<+ + +* +* the main loop +* + +[ [-]>> + + * + * make copies of the number and the loop variable + * + + [>>>>[-]>[-]>[-]>[-] + >[-]>[-] + <<<<<<<[->>>+>+<<<<]>>>>>>>>] + <<<<<<<<<<[>>>>>>[-<<<<+>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>[->>>+>>+<<<<<]>>>>>>>>>] + <<<<<<<<<<[>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>> + + * + * divide the number by the loop variable + * + + [>>>[-]>>>[-]>[-]>>>] initialize + <<<<<<<<<<[<<<<<<<<<<] + >>>>>>>>>[-]>>>>>>>+<<<<<<<<[+]+ + [ ->> double divisor until above dividend + [>>>>>>[->++<]>>>>]<<<<<<<<<< + [>>>>>>>>[-]>[-] + <<<<[->>>++<<<]<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+< + [->--------->>>>>>>>>+<<<<<<<<<<[->+<]]]]]]]]]]]>>] + <<<<<<<<<<[>>>>>>>>>[-<+<<<+>>>>]<<<<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+> + [-<--------->>>>>>>>>>>+<<<<<<<<<<[-<+>]]]]]]]]]]]>>>] + <<<<<<<<<< + [>>>>[->>>+>>+<<<<<]<<<<<<<<<<<<<<] + >>>>>>>>>>[>>>>>>>[-<<<+>>>]>>>]<<<<<<<<<< + [>>>>>>>>[->-<]> + [<<<<<<<<<[<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<] + >>>>>>>>>>>>>>>>>>>] + <<<<<<<<<<<<<<<<<<<] + >>>>>>>>>[+[+[+[+[+[+[+[+[+[+[[-]<+>]]]]]]]]]]]< + ] + >>>>>>>> + [ subtract divisor from dividend + <<<<<< + [>>>>>>>>[-]>[-]<<<<<[->>>+>+<<<<]>>>>>>]<<<<<<<<<< + [>>>>>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>>[-<<<<+>>>>]>]<<<<<<<<<< + [>>>>>>>>[-<->]<<<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+< + [++++++++++[+>-<]>>>>>>>>>>-<<<<<<<<<<]]]]]]]]]]]>>>] + >>>>>>>+ + [ if difference is nonnegative then + [-]<<<<<<<<<<<<<<<<< replace dividend and increment quotient + [>>>>[-]>>>>[-<<<<+>>>>]<<[->>+<<]<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[->+<<<+>>]>>]<<<<<<<<<< + [>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>>[-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<--------->>>>>>>>>>>>>>>>+<<<<<<<<<< + [-<<<<<<+>>>>>>]]]]]]]]]]]>] + >>>>>>> + ] halve divisor and loop until zero + <<<<<<<<<<<<<<<<<[<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[-]<<[->+<]<[->>>+<<<]>>>>>]<<<<<<<<<< + [+>>>>>>>[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>]]]]]]]]]<<<<<<< + [->>>>>>>+<<<<<<<]-<<<<<<<<<<] + >>>>>>> + [-<<<<<<<<<<<+>>>>>>>>>>>] + >>>[>>>>>>>[-<<<<<<<<<<<+++++>>>>>>>>>>>]>>>]<<<<<<<<<< + [+>>>>>>>>[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>]]]]]]]]]<<<<<<<< + [->>>>>>>>+<<<<<<<<]-<<<<<<<<<<] + >>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>> + [>>>>>>>>[-<<<<<<<<<<<<<+++++>>>>>>>>>>>>>]>>]<<<<<<<<<< + [<<<<<<<<<<]>>>>>>>>>> + >>>>>> + ] + <<<<<< + + * + * make copies of the loop variable and the quotient + * + + [>>>[->>>>+>+<<<<<]>>>>>>>] + <<<<<<<<<< + [>>>>>>>[-<<<<+>>>>]<<<<<[->>>>>+>>+<<<<<<<]<<<<<<<<<<<<] + >>>>>>>>>>[>>>>>>>[-<<<<<+>>>>>]>>>]<<<<<<<<<< + + * + * break out of the loop if the quotient is larger than the loop variable + * + + [>>>>>>>>>[-<->]< + [<<<<<<<< + [<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<] + >>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<] + >>>>>>>>[>-<[+[+[+[+[+[+[+[+[+[[-]>+<]]]]]]]]]]]>+ + + [ [-] + + * + * partially increment the loop variable + * + + <[-]+>>>>+>>>>>>>>[>>>>>>>>>>]<<<<<<<<<< + + * + * examine the remainder for nonzero digits + * + + [<<<<<<[<<<<[<<<<<<<<<<]>>>>+<<<<<<<<<<]<<<<] + >>>>>>>>>>>>>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<[<<<<<<<<<<] + >>>>- + + [ [+] + + * + * decrement the loop variable and replace the number with the quotient + * + + >>>>>>>>-<<[>[-]>>[-<<+>>]>>>>>>>]<<<<<<<<<< + + * + * display the loop variable + * + + [+>>[>>>>>>>>+>>]<<-<<<<<<<<<<]- + [>>++++++++++++++++++++++++++++++++++++++++++++++++. + ------------------------------------------------<<<<<<<<<<<<] + ++++++++++++++++++++++++++++++++.[-]>>>> + + ] + + * + * normalize the loop variable + * + + >>>>>> + [>>[->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>--------->>>>>+<<<<<<<<<< + [->>>>>+<<<<<]]]]]]]]]]]>>>>>>>>] + <<<<<<<<<<[>>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<<] + >>>>>>>>> + + ]< + +]>> + +* +* display the number and end +* + +[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]- +[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<] +++++++++++. diff --git a/samples/Brainfuck/fib100.bf b/samples/Brainfuck/fib100.bf new file mode 100644 index 00000000..3359588a --- /dev/null +++ b/samples/Brainfuck/fib100.bf @@ -0,0 +1,13 @@ +# Calculate and output all fibonacci numbers under 100 + ++++++++++++ +>+>>>>++++++++++++++++++++++++++++++++++++++++++++ +>++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+> ++<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[- +<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<< +-]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]] +>[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++ ++++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++ +++++++++++++++++++++++++++++++++++++++++++++.[-]<< +<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< +[-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] \ No newline at end of file diff --git a/samples/Brainfuck/hello.bf b/samples/Brainfuck/hello.bf new file mode 100644 index 00000000..6a93a155 --- /dev/null +++ b/samples/Brainfuck/hello.bf @@ -0,0 +1,4 @@ +// More complex version of hello world + +>++++++++[<+++++++++>-]<.>>+>+>++>[-]+<[>[->+<<++++>]<<]>.+++++++..+++.> +>+++++++.<<<[[-]<[-]>]<+++++++++++++++.>>.+++.------.--------.>>+.>++++. \ No newline at end of file diff --git a/samples/Brainfuck/helloworld.bf b/samples/Brainfuck/helloworld.bf new file mode 100644 index 00000000..c7bde23a --- /dev/null +++ b/samples/Brainfuck/helloworld.bf @@ -0,0 +1,3 @@ +// Hello World + +++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. \ No newline at end of file diff --git a/samples/Brainfuck/rot13.bf b/samples/Brainfuck/rot13.bf new file mode 100644 index 00000000..3b9d8e7f --- /dev/null +++ b/samples/Brainfuck/rot13.bf @@ -0,0 +1,30 @@ +# ROT13 cipher + +-,+[ Read first character and start outer character reading loop + -[ Skip forward if character is 0 + >>++++[>++++++++<-] Set up divisor (32) for division loop + (MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero) + <+<-[ Set up dividend (x minus 1) and enter division loop + >+>+>-[>>>] Increase copy and remainder / reduce divisor / Normal case: skip forward + <[[>+<-]>>+>] Special case: move remainder back to divisor and increase quotient + <<<<<- Decrement dividend + ] End division loop + ]>>>[-]+ End skip loop; zero former divisor and reuse space for a flag + >--[-[<->+++[-]]]<[ Zero that flag unless quotient was 2 or 3; zero quotient; check flag + ++++++++++++<[ If flag then set up divisor (13) for second division loop + (MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero) + >-[>+>>] Reduce divisor; Normal case: increase remainder + >[+[<+>-]>+>>] Special case: increase remainder / move it back to divisor / increase quotient + <<<<<- Decrease dividend + ] End division loop + >>[<+>-] Add remainder back to divisor to get a useful 13 + >[ Skip forward if quotient was 0 + -[ Decrement quotient and skip forward if quotient was 1 + -<<[-]>> Zero quotient and divisor if quotient was 2 + ]<<[<<->>-]>> Zero divisor and subtract 13 from copy if quotient was 1 + ]<<[<<+>>-] Zero divisor and add 13 to copy if quotient was 0 + ] End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3) + <[-] Clear remainder from first division if second division was skipped + <.[-] Output ROT13ed character from copy and clear it + <-,+ Read next character +] End character reading loop \ No newline at end of file diff --git a/samples/C#/build.cake b/samples/C#/build.cake new file mode 100644 index 00000000..d8075251 --- /dev/null +++ b/samples/C#/build.cake @@ -0,0 +1,86 @@ +/////////////////////////////////////////////////////////////////////////////// +// ARGUMENTS +/////////////////////////////////////////////////////////////////////////////// + +var target = Argument("target", "Default"); +var configuration = Argument("configuration", "Release"); + +/////////////////////////////////////////////////////////////////////////////// +// GLOBAL VARIABLES +/////////////////////////////////////////////////////////////////////////////// + +var solutions = GetFiles("./**/*.sln"); +var solutionPaths = solutions.Select(solution => solution.GetDirectory()); + +/////////////////////////////////////////////////////////////////////////////// +// SETUP / TEARDOWN +/////////////////////////////////////////////////////////////////////////////// + +Setup(() => +{ + // Executed BEFORE the first task. + Information("Running tasks..."); +}); + +Teardown(() => +{ + // Executed AFTER the last task. + Information("Finished running tasks."); +}); + +/////////////////////////////////////////////////////////////////////////////// +// TASK DEFINITIONS +/////////////////////////////////////////////////////////////////////////////// + +Task("Clean") + .Does(() => +{ + // Clean solution directories. + foreach(var path in solutionPaths) + { + Information("Cleaning {0}", path); + CleanDirectories(path + "/**/bin/" + configuration); + CleanDirectories(path + "/**/obj/" + configuration); + } +}); + +Task("Restore") + .Does(() => +{ + // Restore all NuGet packages. + foreach(var solution in solutions) + { + Information("Restoring {0}...", solution); + NuGetRestore(solution); + } +}); + +Task("Build") + .IsDependentOn("Clean") + .IsDependentOn("Restore") + .Does(() => +{ + // Build all solutions. + foreach(var solution in solutions) + { + Information("Building {0}", solution); + MSBuild(solution, settings => + settings.SetPlatformTarget(PlatformTarget.MSIL) + .WithProperty("TreatWarningsAsErrors","true") + .WithTarget("Build") + .SetConfiguration(configuration)); + } +}); + +/////////////////////////////////////////////////////////////////////////////// +// TARGETS +/////////////////////////////////////////////////////////////////////////////// + +Task("Default") + .IsDependentOn("Build"); + +/////////////////////////////////////////////////////////////////////////////// +// EXECUTION +/////////////////////////////////////////////////////////////////////////////// + +RunTarget(target); \ No newline at end of file diff --git a/samples/C++/ClasspathVMSystemProperties.inc b/samples/C++/ClasspathVMSystemProperties.inc new file mode 100644 index 00000000..714f19b9 --- /dev/null +++ b/samples/C++/ClasspathVMSystemProperties.inc @@ -0,0 +1,57 @@ +//===- ClasspathVMSystem/Properties.cpp -----------------------------------===// +//===--------------------- GNU classpath gnu/classpath/VMSystemProperties -===// +// +// The VMKit project +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include + +#include "types.h" + +#include "Classpath.h" +#include "JavaArray.h" +#include "JavaClass.h" +#include "JavaObject.h" +#include "JavaThread.h" +#include "JavaUpcalls.h" +#include "Jnjvm.h" + +#include "SetProperties.inc" + +using namespace j3; + +extern "C" { + + +JNIEXPORT void JNICALL Java_gnu_classpath_VMSystemProperties_preInit( +#ifdef NATIVE_JNI +JNIEnv *env, +jclass clazz, +#endif +JavaObject* prop) { + + llvm_gcroot(prop, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + setProperties(prop); + + END_NATIVE_EXCEPTION +} + +extern "C" void Java_gnu_classpath_VMSystemProperties_postInit__Ljava_util_Properties_2(JavaObject* prop) { + + llvm_gcroot(prop, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + setCommandLineProperties(prop); + + END_NATIVE_EXCEPTION +} + +} diff --git a/samples/C++/initClasses.inc b/samples/C++/initClasses.inc new file mode 100644 index 00000000..58439af1 --- /dev/null +++ b/samples/C++/initClasses.inc @@ -0,0 +1,2764 @@ +// start +// define cpp macros: SET_SYMBOL, CREATE_CLASS, SET_CLASS, DEFINE_BASE_CLASSES, DEFINE_CLASS_NAMES, EXPOSE_TO_CANDO +// define cpp macro: ALL_STAGES to get the effect of defining all of the macros above +// define cpp macro: EXPOSE_PYTHON to expose python +// Associating namespace(llvmo) with package(LlvmoPkg) + // class DebugLoc_O : public core::T_O + // class InsertPoint_O : public core::T_O + // class LLVMContext_O : public core::ExternalObject_O + // class Pass_O : public core::ExternalObject_O + // class FunctionPass_O : public Pass_O + // class ModulePass_O : public Pass_O + // class ImmutablePass_O : public ModulePass_O + // class PassManagerBase_O : public core::ExternalObject_O + // class Value_O : public core::ExternalObject_O + // class User_O : public Value_O + // class LLVMContext_O : public core::ExternalObject_O + // class Pass_O : public core::ExternalObject_O + // class FunctionPass_O : public Pass_O + // class ModulePass_O : public Pass_O + // class ImmutablePass_O : public ModulePass_O + // class PassManagerBase_O : public core::ExternalObject_O + // class Value_O : public core::ExternalObject_O + // class User_O : public Value_O + // class Attribute_O : public core::T_O + // class DataLayout_O : public ImmutablePass_O + // class Constant_O : public User_O + // class ConstantArray_O : public Constant_O + // class ConstantDataSequential_O : public Constant_O + // class ConstantDataArray_O : public ConstantDataSequential_O + // class ConstantExpr_O : public Constant_O + // class GlobalValue_O : public Constant_O + // class GlobalVariable_O : public GlobalValue_O + // class ExecutionEngine_O : public core::ExternalObject_O + // class Module_O : public core::ExternalObject_O + // class FunctionPassManager_O : public PassManagerBase_O + // class EngineBuilder_O : public core::ExternalObject_O + // class APFloat_O : public core::ExternalObject_O + // class APInt_O : public core::ExternalObject_O + // class IRBuilderBase_O : public core::ExternalObject_O + // class IRBuilder_O : public IRBuilderBase_O + // class Instruction_O : public User_O + // class StoreInst_O : public Instruction_O + // class FenceInst_O : public Instruction_O + // class AtomicCmpXchgInst_O : public Instruction_O + // class AtomicRMWInst_O : public Instruction_O + // class PHINode_O : public Instruction_O + // class CallInst_O : public Instruction_O + // class LandingPadInst_O : public Instruction_O + // class UnaryInstruction_O : public Instruction_O + // class AllocaInst_O : public UnaryInstruction_O + // class VAArgInst_O : public UnaryInstruction_O + // class LoadInst_O : public UnaryInstruction_O + // class TerminatorInst_O : public Instruction_O + // class BranchInst_O : public TerminatorInst_O + // class SwitchInst_O : public TerminatorInst_O + // class IndirectBrInst_O : public TerminatorInst_O + // class InvokeInst_O : public TerminatorInst_O + // class ResumeInst_O : public TerminatorInst_O + // class UnreachableInst_O : public TerminatorInst_O + // class ReturnInst_O : public TerminatorInst_O + // class ConstantFP_O : public Constant_O + // class ConstantInt_O : public Constant_O + // class UndefValue_O : public Constant_O + // class ConstantPointerNull_O : public Constant_O + // class MDNode_O : public Value_O + // class MDString_O : public Value_O + // class Function_O : public GlobalValue_O + // class BasicBlock_O : public Value_O + // class Argument_O : public Value_O + // class Type_O : public core::ExternalObject_O + // class FunctionType_O : public Type_O + // class IntegerType_O : public Type_O + // class CompositeType_O : public Type_O + // class StructType_O : public CompositeType_O + // class SequentialType_O : public CompositeType_O + // class PointerType_O : public SequentialType_O + // class ArrayType_O : public SequentialType_O + // class VectorType_O : public SequentialType_O + // class LLVMContext_O : public core::ExternalObject_O + // class Module_O : public core::ExternalObject_O + // class Builder_O : public core::ExternalObject_O + // class APFloat_O : public core::ExternalObject_O + // class Value_O : public core::ExternalObject_O + // class User_O : public Value_O + // class Constant_O : public User_O + // class ConstantFP_O : public Constant_O +// Associating namespace(llvmo) with package(LlvmoPkg) +#ifdef HEADER_INCLUDES +#include "llvmoExpose.h" +#include "llvmoExpose.scrape_inc.h" +#include "debugLoc.h" +#include "insertPoint.h" +#include "llvmoExpose.generated.h" +#endif // HEADER_INCLUDES +#undef HEADER_INCLUDES +#if defined(SET_SYMBOL) || defined(ALL_STAGES) +// requires LOOKUP_SYMBOL(pkg,symbolName) be defined +llvmo::APFloat_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::APFloat_O::static_packageName(),llvmo::APFloat_O::static_className())); +llvmo::APInt_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::APInt_O::static_packageName(),llvmo::APInt_O::static_className())); +llvmo::Attribute_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Attribute_O::static_packageName(),llvmo::Attribute_O::static_className())); +llvmo::Builder_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Builder_O::static_packageName(),llvmo::Builder_O::static_className())); +llvmo::DebugLoc_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::DebugLoc_O::static_packageName(),llvmo::DebugLoc_O::static_className())); +llvmo::EngineBuilder_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::EngineBuilder_O::static_packageName(),llvmo::EngineBuilder_O::static_className())); +llvmo::ExecutionEngine_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ExecutionEngine_O::static_packageName(),llvmo::ExecutionEngine_O::static_className())); +llvmo::IRBuilderBase_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IRBuilderBase_O::static_packageName(),llvmo::IRBuilderBase_O::static_className())); +llvmo::InsertPoint_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::InsertPoint_O::static_packageName(),llvmo::InsertPoint_O::static_className())); +llvmo::LLVMContext_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::LLVMContext_O::static_packageName(),llvmo::LLVMContext_O::static_className())); +llvmo::Module_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Module_O::static_packageName(),llvmo::Module_O::static_className())); +llvmo::PassManagerBase_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::PassManagerBase_O::static_packageName(),llvmo::PassManagerBase_O::static_className())); +llvmo::Pass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Pass_O::static_packageName(),llvmo::Pass_O::static_className())); +llvmo::Type_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Type_O::static_packageName(),llvmo::Type_O::static_className())); +llvmo::Value_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Value_O::static_packageName(),llvmo::Value_O::static_className())); +llvmo::Argument_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Argument_O::static_packageName(),llvmo::Argument_O::static_className())); +llvmo::BasicBlock_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::BasicBlock_O::static_packageName(),llvmo::BasicBlock_O::static_className())); +llvmo::CompositeType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::CompositeType_O::static_packageName(),llvmo::CompositeType_O::static_className())); +llvmo::FunctionPassManager_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FunctionPassManager_O::static_packageName(),llvmo::FunctionPassManager_O::static_className())); +llvmo::FunctionPass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FunctionPass_O::static_packageName(),llvmo::FunctionPass_O::static_className())); +llvmo::FunctionType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FunctionType_O::static_packageName(),llvmo::FunctionType_O::static_className())); +llvmo::IRBuilder_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IRBuilder_O::static_packageName(),llvmo::IRBuilder_O::static_className())); +llvmo::IntegerType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IntegerType_O::static_packageName(),llvmo::IntegerType_O::static_className())); +llvmo::MDNode_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::MDNode_O::static_packageName(),llvmo::MDNode_O::static_className())); +llvmo::MDString_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::MDString_O::static_packageName(),llvmo::MDString_O::static_className())); +llvmo::ModulePass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ModulePass_O::static_packageName(),llvmo::ModulePass_O::static_className())); +llvmo::User_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::User_O::static_packageName(),llvmo::User_O::static_className())); +llvmo::Constant_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Constant_O::static_packageName(),llvmo::Constant_O::static_className())); +llvmo::ImmutablePass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ImmutablePass_O::static_packageName(),llvmo::ImmutablePass_O::static_className())); +llvmo::Instruction_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Instruction_O::static_packageName(),llvmo::Instruction_O::static_className())); +llvmo::SequentialType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::SequentialType_O::static_packageName(),llvmo::SequentialType_O::static_className())); +llvmo::StructType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::StructType_O::static_packageName(),llvmo::StructType_O::static_className())); +llvmo::ArrayType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ArrayType_O::static_packageName(),llvmo::ArrayType_O::static_className())); +llvmo::AtomicCmpXchgInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::AtomicCmpXchgInst_O::static_packageName(),llvmo::AtomicCmpXchgInst_O::static_className())); +llvmo::AtomicRMWInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::AtomicRMWInst_O::static_packageName(),llvmo::AtomicRMWInst_O::static_className())); +llvmo::CallInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::CallInst_O::static_packageName(),llvmo::CallInst_O::static_className())); +llvmo::ConstantArray_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantArray_O::static_packageName(),llvmo::ConstantArray_O::static_className())); +llvmo::ConstantDataSequential_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantDataSequential_O::static_packageName(),llvmo::ConstantDataSequential_O::static_className())); +llvmo::ConstantExpr_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantExpr_O::static_packageName(),llvmo::ConstantExpr_O::static_className())); +llvmo::ConstantFP_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantFP_O::static_packageName(),llvmo::ConstantFP_O::static_className())); +llvmo::ConstantInt_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantInt_O::static_packageName(),llvmo::ConstantInt_O::static_className())); +llvmo::ConstantPointerNull_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantPointerNull_O::static_packageName(),llvmo::ConstantPointerNull_O::static_className())); +llvmo::DataLayout_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::DataLayout_O::static_packageName(),llvmo::DataLayout_O::static_className())); +llvmo::FenceInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FenceInst_O::static_packageName(),llvmo::FenceInst_O::static_className())); +llvmo::GlobalValue_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::GlobalValue_O::static_packageName(),llvmo::GlobalValue_O::static_className())); +llvmo::LandingPadInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::LandingPadInst_O::static_packageName(),llvmo::LandingPadInst_O::static_className())); +llvmo::PHINode_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::PHINode_O::static_packageName(),llvmo::PHINode_O::static_className())); +llvmo::PointerType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::PointerType_O::static_packageName(),llvmo::PointerType_O::static_className())); +llvmo::StoreInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::StoreInst_O::static_packageName(),llvmo::StoreInst_O::static_className())); +llvmo::TerminatorInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::TerminatorInst_O::static_packageName(),llvmo::TerminatorInst_O::static_className())); +llvmo::UnaryInstruction_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::UnaryInstruction_O::static_packageName(),llvmo::UnaryInstruction_O::static_className())); +llvmo::UndefValue_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::UndefValue_O::static_packageName(),llvmo::UndefValue_O::static_className())); +llvmo::VectorType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::VectorType_O::static_packageName(),llvmo::VectorType_O::static_className())); +llvmo::AllocaInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::AllocaInst_O::static_packageName(),llvmo::AllocaInst_O::static_className())); +llvmo::BranchInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::BranchInst_O::static_packageName(),llvmo::BranchInst_O::static_className())); +llvmo::ConstantDataArray_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantDataArray_O::static_packageName(),llvmo::ConstantDataArray_O::static_className())); +llvmo::Function_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Function_O::static_packageName(),llvmo::Function_O::static_className())); +llvmo::GlobalVariable_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::GlobalVariable_O::static_packageName(),llvmo::GlobalVariable_O::static_className())); +llvmo::IndirectBrInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IndirectBrInst_O::static_packageName(),llvmo::IndirectBrInst_O::static_className())); +llvmo::InvokeInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::InvokeInst_O::static_packageName(),llvmo::InvokeInst_O::static_className())); +llvmo::LoadInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::LoadInst_O::static_packageName(),llvmo::LoadInst_O::static_className())); +llvmo::ResumeInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ResumeInst_O::static_packageName(),llvmo::ResumeInst_O::static_className())); +llvmo::ReturnInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ReturnInst_O::static_packageName(),llvmo::ReturnInst_O::static_className())); +llvmo::SwitchInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::SwitchInst_O::static_packageName(),llvmo::SwitchInst_O::static_className())); +llvmo::UnreachableInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::UnreachableInst_O::static_packageName(),llvmo::UnreachableInst_O::static_className())); +llvmo::VAArgInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::VAArgInst_O::static_packageName(),llvmo::VAArgInst_O::static_className())); +#endif // SET_SYMBOL +#undef SET_SYMBOL +#if defined(CREATE_CLASS) || defined(ALL_STAGES) +// Depends on undefinedMetaClass + core::MetaClass_sp undefinedMetaClass; undefinedMetaClass.reset(); + + LOG(BF("Creating class[classllvmo__APFloat_Oval]")); + core::BuiltInClass_sp classllvmo__APFloat_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__APFloat_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__APFloat_Oval,_lisp,llvmo::APFloat_O::static_classSymbol()); + llvmo::APFloat_O::___staticMetaClass = classllvmo__APFloat_Oval; + _lisp->setf_findClass(llvmo::APFloat_O::static_classSymbol(),classllvmo__APFloat_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::APFloat_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::APFloat_O::static_className() % (void*)(llvmo::APFloat_O::static_newNil_callback()) ); + classllvmo__APFloat_Oval->setInstance_newNil_callback(llvmo::APFloat_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::APFloat_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::APFloat_O::static_className() ); + llvmo::APFloat_O::_nil = nil_for_class; + classllvmo__APFloat_Oval->setInstanceNil(nil_for_class); + } + classllvmo__APFloat_Oval->setSupportsSlots(llvmo::APFloat_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__APInt_Oval]")); + core::BuiltInClass_sp classllvmo__APInt_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__APInt_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__APInt_Oval,_lisp,llvmo::APInt_O::static_classSymbol()); + llvmo::APInt_O::___staticMetaClass = classllvmo__APInt_Oval; + _lisp->setf_findClass(llvmo::APInt_O::static_classSymbol(),classllvmo__APInt_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::APInt_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::APInt_O::static_className() % (void*)(llvmo::APInt_O::static_newNil_callback()) ); + classllvmo__APInt_Oval->setInstance_newNil_callback(llvmo::APInt_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::APInt_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::APInt_O::static_className() ); + llvmo::APInt_O::_nil = nil_for_class; + classllvmo__APInt_Oval->setInstanceNil(nil_for_class); + } + classllvmo__APInt_Oval->setSupportsSlots(llvmo::APInt_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Attribute_Oval]")); + core::BuiltInClass_sp classllvmo__Attribute_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Attribute_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Attribute_Oval,_lisp,llvmo::Attribute_O::static_classSymbol()); + llvmo::Attribute_O::___staticMetaClass = classllvmo__Attribute_Oval; + _lisp->setf_findClass(llvmo::Attribute_O::static_classSymbol(),classllvmo__Attribute_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Attribute_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Attribute_O::static_className() % (void*)(llvmo::Attribute_O::static_newNil_callback()) ); + classllvmo__Attribute_Oval->setInstance_newNil_callback(llvmo::Attribute_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Attribute_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Attribute_O::static_className() ); + llvmo::Attribute_O::_nil = nil_for_class; + classllvmo__Attribute_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Attribute_Oval->setSupportsSlots(llvmo::Attribute_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Builder_Oval]")); + core::BuiltInClass_sp classllvmo__Builder_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Builder_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Builder_Oval,_lisp,llvmo::Builder_O::static_classSymbol()); + llvmo::Builder_O::___staticMetaClass = classllvmo__Builder_Oval; + _lisp->setf_findClass(llvmo::Builder_O::static_classSymbol(),classllvmo__Builder_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Builder_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Builder_O::static_className() % (void*)(llvmo::Builder_O::static_newNil_callback()) ); + classllvmo__Builder_Oval->setInstance_newNil_callback(llvmo::Builder_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Builder_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Builder_O::static_className() ); + llvmo::Builder_O::_nil = nil_for_class; + classllvmo__Builder_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Builder_Oval->setSupportsSlots(llvmo::Builder_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__DebugLoc_Oval]")); + core::BuiltInClass_sp classllvmo__DebugLoc_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__DebugLoc_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__DebugLoc_Oval,_lisp,llvmo::DebugLoc_O::static_classSymbol()); + llvmo::DebugLoc_O::___staticMetaClass = classllvmo__DebugLoc_Oval; + _lisp->setf_findClass(llvmo::DebugLoc_O::static_classSymbol(),classllvmo__DebugLoc_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::DebugLoc_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::DebugLoc_O::static_className() % (void*)(llvmo::DebugLoc_O::static_newNil_callback()) ); + classllvmo__DebugLoc_Oval->setInstance_newNil_callback(llvmo::DebugLoc_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::DebugLoc_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::DebugLoc_O::static_className() ); + llvmo::DebugLoc_O::_nil = nil_for_class; + classllvmo__DebugLoc_Oval->setInstanceNil(nil_for_class); + } + classllvmo__DebugLoc_Oval->setSupportsSlots(llvmo::DebugLoc_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__EngineBuilder_Oval]")); + core::BuiltInClass_sp classllvmo__EngineBuilder_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__EngineBuilder_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__EngineBuilder_Oval,_lisp,llvmo::EngineBuilder_O::static_classSymbol()); + llvmo::EngineBuilder_O::___staticMetaClass = classllvmo__EngineBuilder_Oval; + _lisp->setf_findClass(llvmo::EngineBuilder_O::static_classSymbol(),classllvmo__EngineBuilder_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::EngineBuilder_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::EngineBuilder_O::static_className() % (void*)(llvmo::EngineBuilder_O::static_newNil_callback()) ); + classllvmo__EngineBuilder_Oval->setInstance_newNil_callback(llvmo::EngineBuilder_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::EngineBuilder_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::EngineBuilder_O::static_className() ); + llvmo::EngineBuilder_O::_nil = nil_for_class; + classllvmo__EngineBuilder_Oval->setInstanceNil(nil_for_class); + } + classllvmo__EngineBuilder_Oval->setSupportsSlots(llvmo::EngineBuilder_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ExecutionEngine_Oval]")); + core::BuiltInClass_sp classllvmo__ExecutionEngine_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ExecutionEngine_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ExecutionEngine_Oval,_lisp,llvmo::ExecutionEngine_O::static_classSymbol()); + llvmo::ExecutionEngine_O::___staticMetaClass = classllvmo__ExecutionEngine_Oval; + _lisp->setf_findClass(llvmo::ExecutionEngine_O::static_classSymbol(),classllvmo__ExecutionEngine_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ExecutionEngine_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ExecutionEngine_O::static_className() % (void*)(llvmo::ExecutionEngine_O::static_newNil_callback()) ); + classllvmo__ExecutionEngine_Oval->setInstance_newNil_callback(llvmo::ExecutionEngine_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ExecutionEngine_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ExecutionEngine_O::static_className() ); + llvmo::ExecutionEngine_O::_nil = nil_for_class; + classllvmo__ExecutionEngine_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ExecutionEngine_Oval->setSupportsSlots(llvmo::ExecutionEngine_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IRBuilderBase_Oval]")); + core::BuiltInClass_sp classllvmo__IRBuilderBase_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IRBuilderBase_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IRBuilderBase_Oval,_lisp,llvmo::IRBuilderBase_O::static_classSymbol()); + llvmo::IRBuilderBase_O::___staticMetaClass = classllvmo__IRBuilderBase_Oval; + _lisp->setf_findClass(llvmo::IRBuilderBase_O::static_classSymbol(),classllvmo__IRBuilderBase_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IRBuilderBase_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IRBuilderBase_O::static_className() % (void*)(llvmo::IRBuilderBase_O::static_newNil_callback()) ); + classllvmo__IRBuilderBase_Oval->setInstance_newNil_callback(llvmo::IRBuilderBase_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IRBuilderBase_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IRBuilderBase_O::static_className() ); + llvmo::IRBuilderBase_O::_nil = nil_for_class; + classllvmo__IRBuilderBase_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IRBuilderBase_Oval->setSupportsSlots(llvmo::IRBuilderBase_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__InsertPoint_Oval]")); + core::BuiltInClass_sp classllvmo__InsertPoint_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__InsertPoint_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__InsertPoint_Oval,_lisp,llvmo::InsertPoint_O::static_classSymbol()); + llvmo::InsertPoint_O::___staticMetaClass = classllvmo__InsertPoint_Oval; + _lisp->setf_findClass(llvmo::InsertPoint_O::static_classSymbol(),classllvmo__InsertPoint_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::InsertPoint_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::InsertPoint_O::static_className() % (void*)(llvmo::InsertPoint_O::static_newNil_callback()) ); + classllvmo__InsertPoint_Oval->setInstance_newNil_callback(llvmo::InsertPoint_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::InsertPoint_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::InsertPoint_O::static_className() ); + llvmo::InsertPoint_O::_nil = nil_for_class; + classllvmo__InsertPoint_Oval->setInstanceNil(nil_for_class); + } + classllvmo__InsertPoint_Oval->setSupportsSlots(llvmo::InsertPoint_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__LLVMContext_Oval]")); + core::BuiltInClass_sp classllvmo__LLVMContext_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__LLVMContext_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__LLVMContext_Oval,_lisp,llvmo::LLVMContext_O::static_classSymbol()); + llvmo::LLVMContext_O::___staticMetaClass = classllvmo__LLVMContext_Oval; + _lisp->setf_findClass(llvmo::LLVMContext_O::static_classSymbol(),classllvmo__LLVMContext_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::LLVMContext_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::LLVMContext_O::static_className() % (void*)(llvmo::LLVMContext_O::static_newNil_callback()) ); + classllvmo__LLVMContext_Oval->setInstance_newNil_callback(llvmo::LLVMContext_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::LLVMContext_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::LLVMContext_O::static_className() ); + llvmo::LLVMContext_O::_nil = nil_for_class; + classllvmo__LLVMContext_Oval->setInstanceNil(nil_for_class); + } + classllvmo__LLVMContext_Oval->setSupportsSlots(llvmo::LLVMContext_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Module_Oval]")); + core::BuiltInClass_sp classllvmo__Module_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Module_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Module_Oval,_lisp,llvmo::Module_O::static_classSymbol()); + llvmo::Module_O::___staticMetaClass = classllvmo__Module_Oval; + _lisp->setf_findClass(llvmo::Module_O::static_classSymbol(),classllvmo__Module_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Module_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Module_O::static_className() % (void*)(llvmo::Module_O::static_newNil_callback()) ); + classllvmo__Module_Oval->setInstance_newNil_callback(llvmo::Module_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Module_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Module_O::static_className() ); + llvmo::Module_O::_nil = nil_for_class; + classllvmo__Module_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Module_Oval->setSupportsSlots(llvmo::Module_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__PassManagerBase_Oval]")); + core::BuiltInClass_sp classllvmo__PassManagerBase_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__PassManagerBase_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__PassManagerBase_Oval,_lisp,llvmo::PassManagerBase_O::static_classSymbol()); + llvmo::PassManagerBase_O::___staticMetaClass = classllvmo__PassManagerBase_Oval; + _lisp->setf_findClass(llvmo::PassManagerBase_O::static_classSymbol(),classllvmo__PassManagerBase_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::PassManagerBase_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::PassManagerBase_O::static_className() % (void*)(llvmo::PassManagerBase_O::static_newNil_callback()) ); + classllvmo__PassManagerBase_Oval->setInstance_newNil_callback(llvmo::PassManagerBase_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::PassManagerBase_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::PassManagerBase_O::static_className() ); + llvmo::PassManagerBase_O::_nil = nil_for_class; + classllvmo__PassManagerBase_Oval->setInstanceNil(nil_for_class); + } + classllvmo__PassManagerBase_Oval->setSupportsSlots(llvmo::PassManagerBase_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Pass_Oval]")); + core::BuiltInClass_sp classllvmo__Pass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Pass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Pass_Oval,_lisp,llvmo::Pass_O::static_classSymbol()); + llvmo::Pass_O::___staticMetaClass = classllvmo__Pass_Oval; + _lisp->setf_findClass(llvmo::Pass_O::static_classSymbol(),classllvmo__Pass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Pass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Pass_O::static_className() % (void*)(llvmo::Pass_O::static_newNil_callback()) ); + classllvmo__Pass_Oval->setInstance_newNil_callback(llvmo::Pass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Pass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Pass_O::static_className() ); + llvmo::Pass_O::_nil = nil_for_class; + classllvmo__Pass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Pass_Oval->setSupportsSlots(llvmo::Pass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Type_Oval]")); + core::BuiltInClass_sp classllvmo__Type_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Type_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Type_Oval,_lisp,llvmo::Type_O::static_classSymbol()); + llvmo::Type_O::___staticMetaClass = classllvmo__Type_Oval; + _lisp->setf_findClass(llvmo::Type_O::static_classSymbol(),classllvmo__Type_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Type_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Type_O::static_className() % (void*)(llvmo::Type_O::static_newNil_callback()) ); + classllvmo__Type_Oval->setInstance_newNil_callback(llvmo::Type_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Type_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Type_O::static_className() ); + llvmo::Type_O::_nil = nil_for_class; + classllvmo__Type_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Type_Oval->setSupportsSlots(llvmo::Type_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Value_Oval]")); + core::BuiltInClass_sp classllvmo__Value_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Value_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Value_Oval,_lisp,llvmo::Value_O::static_classSymbol()); + llvmo::Value_O::___staticMetaClass = classllvmo__Value_Oval; + _lisp->setf_findClass(llvmo::Value_O::static_classSymbol(),classllvmo__Value_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Value_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Value_O::static_className() % (void*)(llvmo::Value_O::static_newNil_callback()) ); + classllvmo__Value_Oval->setInstance_newNil_callback(llvmo::Value_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Value_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Value_O::static_className() ); + llvmo::Value_O::_nil = nil_for_class; + classllvmo__Value_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Value_Oval->setSupportsSlots(llvmo::Value_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Argument_Oval]")); + core::BuiltInClass_sp classllvmo__Argument_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Argument_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Argument_Oval,_lisp,llvmo::Argument_O::static_classSymbol()); + llvmo::Argument_O::___staticMetaClass = classllvmo__Argument_Oval; + _lisp->setf_findClass(llvmo::Argument_O::static_classSymbol(),classllvmo__Argument_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Argument_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Argument_O::static_className() % (void*)(llvmo::Argument_O::static_newNil_callback()) ); + classllvmo__Argument_Oval->setInstance_newNil_callback(llvmo::Argument_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Argument_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Argument_O::static_className() ); + llvmo::Argument_O::_nil = nil_for_class; + classllvmo__Argument_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Argument_Oval->setSupportsSlots(llvmo::Argument_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__BasicBlock_Oval]")); + core::BuiltInClass_sp classllvmo__BasicBlock_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__BasicBlock_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__BasicBlock_Oval,_lisp,llvmo::BasicBlock_O::static_classSymbol()); + llvmo::BasicBlock_O::___staticMetaClass = classllvmo__BasicBlock_Oval; + _lisp->setf_findClass(llvmo::BasicBlock_O::static_classSymbol(),classllvmo__BasicBlock_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::BasicBlock_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::BasicBlock_O::static_className() % (void*)(llvmo::BasicBlock_O::static_newNil_callback()) ); + classllvmo__BasicBlock_Oval->setInstance_newNil_callback(llvmo::BasicBlock_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::BasicBlock_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::BasicBlock_O::static_className() ); + llvmo::BasicBlock_O::_nil = nil_for_class; + classllvmo__BasicBlock_Oval->setInstanceNil(nil_for_class); + } + classllvmo__BasicBlock_Oval->setSupportsSlots(llvmo::BasicBlock_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__CompositeType_Oval]")); + core::BuiltInClass_sp classllvmo__CompositeType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__CompositeType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__CompositeType_Oval,_lisp,llvmo::CompositeType_O::static_classSymbol()); + llvmo::CompositeType_O::___staticMetaClass = classllvmo__CompositeType_Oval; + _lisp->setf_findClass(llvmo::CompositeType_O::static_classSymbol(),classllvmo__CompositeType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::CompositeType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::CompositeType_O::static_className() % (void*)(llvmo::CompositeType_O::static_newNil_callback()) ); + classllvmo__CompositeType_Oval->setInstance_newNil_callback(llvmo::CompositeType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::CompositeType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::CompositeType_O::static_className() ); + llvmo::CompositeType_O::_nil = nil_for_class; + classllvmo__CompositeType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__CompositeType_Oval->setSupportsSlots(llvmo::CompositeType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FunctionPassManager_Oval]")); + core::BuiltInClass_sp classllvmo__FunctionPassManager_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FunctionPassManager_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FunctionPassManager_Oval,_lisp,llvmo::FunctionPassManager_O::static_classSymbol()); + llvmo::FunctionPassManager_O::___staticMetaClass = classllvmo__FunctionPassManager_Oval; + _lisp->setf_findClass(llvmo::FunctionPassManager_O::static_classSymbol(),classllvmo__FunctionPassManager_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FunctionPassManager_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FunctionPassManager_O::static_className() % (void*)(llvmo::FunctionPassManager_O::static_newNil_callback()) ); + classllvmo__FunctionPassManager_Oval->setInstance_newNil_callback(llvmo::FunctionPassManager_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FunctionPassManager_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FunctionPassManager_O::static_className() ); + llvmo::FunctionPassManager_O::_nil = nil_for_class; + classllvmo__FunctionPassManager_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FunctionPassManager_Oval->setSupportsSlots(llvmo::FunctionPassManager_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FunctionPass_Oval]")); + core::BuiltInClass_sp classllvmo__FunctionPass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FunctionPass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FunctionPass_Oval,_lisp,llvmo::FunctionPass_O::static_classSymbol()); + llvmo::FunctionPass_O::___staticMetaClass = classllvmo__FunctionPass_Oval; + _lisp->setf_findClass(llvmo::FunctionPass_O::static_classSymbol(),classllvmo__FunctionPass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FunctionPass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FunctionPass_O::static_className() % (void*)(llvmo::FunctionPass_O::static_newNil_callback()) ); + classllvmo__FunctionPass_Oval->setInstance_newNil_callback(llvmo::FunctionPass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FunctionPass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FunctionPass_O::static_className() ); + llvmo::FunctionPass_O::_nil = nil_for_class; + classllvmo__FunctionPass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FunctionPass_Oval->setSupportsSlots(llvmo::FunctionPass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FunctionType_Oval]")); + core::BuiltInClass_sp classllvmo__FunctionType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FunctionType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FunctionType_Oval,_lisp,llvmo::FunctionType_O::static_classSymbol()); + llvmo::FunctionType_O::___staticMetaClass = classllvmo__FunctionType_Oval; + _lisp->setf_findClass(llvmo::FunctionType_O::static_classSymbol(),classllvmo__FunctionType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FunctionType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FunctionType_O::static_className() % (void*)(llvmo::FunctionType_O::static_newNil_callback()) ); + classllvmo__FunctionType_Oval->setInstance_newNil_callback(llvmo::FunctionType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FunctionType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FunctionType_O::static_className() ); + llvmo::FunctionType_O::_nil = nil_for_class; + classllvmo__FunctionType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FunctionType_Oval->setSupportsSlots(llvmo::FunctionType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IRBuilder_Oval]")); + core::BuiltInClass_sp classllvmo__IRBuilder_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IRBuilder_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IRBuilder_Oval,_lisp,llvmo::IRBuilder_O::static_classSymbol()); + llvmo::IRBuilder_O::___staticMetaClass = classllvmo__IRBuilder_Oval; + _lisp->setf_findClass(llvmo::IRBuilder_O::static_classSymbol(),classllvmo__IRBuilder_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IRBuilder_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IRBuilder_O::static_className() % (void*)(llvmo::IRBuilder_O::static_newNil_callback()) ); + classllvmo__IRBuilder_Oval->setInstance_newNil_callback(llvmo::IRBuilder_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IRBuilder_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IRBuilder_O::static_className() ); + llvmo::IRBuilder_O::_nil = nil_for_class; + classllvmo__IRBuilder_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IRBuilder_Oval->setSupportsSlots(llvmo::IRBuilder_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IntegerType_Oval]")); + core::BuiltInClass_sp classllvmo__IntegerType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IntegerType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IntegerType_Oval,_lisp,llvmo::IntegerType_O::static_classSymbol()); + llvmo::IntegerType_O::___staticMetaClass = classllvmo__IntegerType_Oval; + _lisp->setf_findClass(llvmo::IntegerType_O::static_classSymbol(),classllvmo__IntegerType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IntegerType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IntegerType_O::static_className() % (void*)(llvmo::IntegerType_O::static_newNil_callback()) ); + classllvmo__IntegerType_Oval->setInstance_newNil_callback(llvmo::IntegerType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IntegerType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IntegerType_O::static_className() ); + llvmo::IntegerType_O::_nil = nil_for_class; + classllvmo__IntegerType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IntegerType_Oval->setSupportsSlots(llvmo::IntegerType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__MDNode_Oval]")); + core::BuiltInClass_sp classllvmo__MDNode_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__MDNode_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__MDNode_Oval,_lisp,llvmo::MDNode_O::static_classSymbol()); + llvmo::MDNode_O::___staticMetaClass = classllvmo__MDNode_Oval; + _lisp->setf_findClass(llvmo::MDNode_O::static_classSymbol(),classllvmo__MDNode_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::MDNode_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::MDNode_O::static_className() % (void*)(llvmo::MDNode_O::static_newNil_callback()) ); + classllvmo__MDNode_Oval->setInstance_newNil_callback(llvmo::MDNode_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::MDNode_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::MDNode_O::static_className() ); + llvmo::MDNode_O::_nil = nil_for_class; + classllvmo__MDNode_Oval->setInstanceNil(nil_for_class); + } + classllvmo__MDNode_Oval->setSupportsSlots(llvmo::MDNode_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__MDString_Oval]")); + core::BuiltInClass_sp classllvmo__MDString_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__MDString_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__MDString_Oval,_lisp,llvmo::MDString_O::static_classSymbol()); + llvmo::MDString_O::___staticMetaClass = classllvmo__MDString_Oval; + _lisp->setf_findClass(llvmo::MDString_O::static_classSymbol(),classllvmo__MDString_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::MDString_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::MDString_O::static_className() % (void*)(llvmo::MDString_O::static_newNil_callback()) ); + classllvmo__MDString_Oval->setInstance_newNil_callback(llvmo::MDString_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::MDString_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::MDString_O::static_className() ); + llvmo::MDString_O::_nil = nil_for_class; + classllvmo__MDString_Oval->setInstanceNil(nil_for_class); + } + classllvmo__MDString_Oval->setSupportsSlots(llvmo::MDString_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ModulePass_Oval]")); + core::BuiltInClass_sp classllvmo__ModulePass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ModulePass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ModulePass_Oval,_lisp,llvmo::ModulePass_O::static_classSymbol()); + llvmo::ModulePass_O::___staticMetaClass = classllvmo__ModulePass_Oval; + _lisp->setf_findClass(llvmo::ModulePass_O::static_classSymbol(),classllvmo__ModulePass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ModulePass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ModulePass_O::static_className() % (void*)(llvmo::ModulePass_O::static_newNil_callback()) ); + classllvmo__ModulePass_Oval->setInstance_newNil_callback(llvmo::ModulePass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ModulePass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ModulePass_O::static_className() ); + llvmo::ModulePass_O::_nil = nil_for_class; + classllvmo__ModulePass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ModulePass_Oval->setSupportsSlots(llvmo::ModulePass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__User_Oval]")); + core::BuiltInClass_sp classllvmo__User_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__User_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__User_Oval,_lisp,llvmo::User_O::static_classSymbol()); + llvmo::User_O::___staticMetaClass = classllvmo__User_Oval; + _lisp->setf_findClass(llvmo::User_O::static_classSymbol(),classllvmo__User_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::User_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::User_O::static_className() % (void*)(llvmo::User_O::static_newNil_callback()) ); + classllvmo__User_Oval->setInstance_newNil_callback(llvmo::User_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::User_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::User_O::static_className() ); + llvmo::User_O::_nil = nil_for_class; + classllvmo__User_Oval->setInstanceNil(nil_for_class); + } + classllvmo__User_Oval->setSupportsSlots(llvmo::User_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Constant_Oval]")); + core::BuiltInClass_sp classllvmo__Constant_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Constant_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Constant_Oval,_lisp,llvmo::Constant_O::static_classSymbol()); + llvmo::Constant_O::___staticMetaClass = classllvmo__Constant_Oval; + _lisp->setf_findClass(llvmo::Constant_O::static_classSymbol(),classllvmo__Constant_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Constant_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Constant_O::static_className() % (void*)(llvmo::Constant_O::static_newNil_callback()) ); + classllvmo__Constant_Oval->setInstance_newNil_callback(llvmo::Constant_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Constant_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Constant_O::static_className() ); + llvmo::Constant_O::_nil = nil_for_class; + classllvmo__Constant_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Constant_Oval->setSupportsSlots(llvmo::Constant_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ImmutablePass_Oval]")); + core::BuiltInClass_sp classllvmo__ImmutablePass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ImmutablePass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ImmutablePass_Oval,_lisp,llvmo::ImmutablePass_O::static_classSymbol()); + llvmo::ImmutablePass_O::___staticMetaClass = classllvmo__ImmutablePass_Oval; + _lisp->setf_findClass(llvmo::ImmutablePass_O::static_classSymbol(),classllvmo__ImmutablePass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ImmutablePass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ImmutablePass_O::static_className() % (void*)(llvmo::ImmutablePass_O::static_newNil_callback()) ); + classllvmo__ImmutablePass_Oval->setInstance_newNil_callback(llvmo::ImmutablePass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ImmutablePass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ImmutablePass_O::static_className() ); + llvmo::ImmutablePass_O::_nil = nil_for_class; + classllvmo__ImmutablePass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ImmutablePass_Oval->setSupportsSlots(llvmo::ImmutablePass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Instruction_Oval]")); + core::BuiltInClass_sp classllvmo__Instruction_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Instruction_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Instruction_Oval,_lisp,llvmo::Instruction_O::static_classSymbol()); + llvmo::Instruction_O::___staticMetaClass = classllvmo__Instruction_Oval; + _lisp->setf_findClass(llvmo::Instruction_O::static_classSymbol(),classllvmo__Instruction_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Instruction_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Instruction_O::static_className() % (void*)(llvmo::Instruction_O::static_newNil_callback()) ); + classllvmo__Instruction_Oval->setInstance_newNil_callback(llvmo::Instruction_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Instruction_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Instruction_O::static_className() ); + llvmo::Instruction_O::_nil = nil_for_class; + classllvmo__Instruction_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Instruction_Oval->setSupportsSlots(llvmo::Instruction_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__SequentialType_Oval]")); + core::BuiltInClass_sp classllvmo__SequentialType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__SequentialType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__SequentialType_Oval,_lisp,llvmo::SequentialType_O::static_classSymbol()); + llvmo::SequentialType_O::___staticMetaClass = classllvmo__SequentialType_Oval; + _lisp->setf_findClass(llvmo::SequentialType_O::static_classSymbol(),classllvmo__SequentialType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::SequentialType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::SequentialType_O::static_className() % (void*)(llvmo::SequentialType_O::static_newNil_callback()) ); + classllvmo__SequentialType_Oval->setInstance_newNil_callback(llvmo::SequentialType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::SequentialType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::SequentialType_O::static_className() ); + llvmo::SequentialType_O::_nil = nil_for_class; + classllvmo__SequentialType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__SequentialType_Oval->setSupportsSlots(llvmo::SequentialType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__StructType_Oval]")); + core::BuiltInClass_sp classllvmo__StructType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__StructType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__StructType_Oval,_lisp,llvmo::StructType_O::static_classSymbol()); + llvmo::StructType_O::___staticMetaClass = classllvmo__StructType_Oval; + _lisp->setf_findClass(llvmo::StructType_O::static_classSymbol(),classllvmo__StructType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::StructType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::StructType_O::static_className() % (void*)(llvmo::StructType_O::static_newNil_callback()) ); + classllvmo__StructType_Oval->setInstance_newNil_callback(llvmo::StructType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::StructType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::StructType_O::static_className() ); + llvmo::StructType_O::_nil = nil_for_class; + classllvmo__StructType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__StructType_Oval->setSupportsSlots(llvmo::StructType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ArrayType_Oval]")); + core::BuiltInClass_sp classllvmo__ArrayType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ArrayType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ArrayType_Oval,_lisp,llvmo::ArrayType_O::static_classSymbol()); + llvmo::ArrayType_O::___staticMetaClass = classllvmo__ArrayType_Oval; + _lisp->setf_findClass(llvmo::ArrayType_O::static_classSymbol(),classllvmo__ArrayType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ArrayType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ArrayType_O::static_className() % (void*)(llvmo::ArrayType_O::static_newNil_callback()) ); + classllvmo__ArrayType_Oval->setInstance_newNil_callback(llvmo::ArrayType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ArrayType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ArrayType_O::static_className() ); + llvmo::ArrayType_O::_nil = nil_for_class; + classllvmo__ArrayType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ArrayType_Oval->setSupportsSlots(llvmo::ArrayType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__AtomicCmpXchgInst_Oval]")); + core::BuiltInClass_sp classllvmo__AtomicCmpXchgInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__AtomicCmpXchgInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__AtomicCmpXchgInst_Oval,_lisp,llvmo::AtomicCmpXchgInst_O::static_classSymbol()); + llvmo::AtomicCmpXchgInst_O::___staticMetaClass = classllvmo__AtomicCmpXchgInst_Oval; + _lisp->setf_findClass(llvmo::AtomicCmpXchgInst_O::static_classSymbol(),classllvmo__AtomicCmpXchgInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::AtomicCmpXchgInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::AtomicCmpXchgInst_O::static_className() % (void*)(llvmo::AtomicCmpXchgInst_O::static_newNil_callback()) ); + classllvmo__AtomicCmpXchgInst_Oval->setInstance_newNil_callback(llvmo::AtomicCmpXchgInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::AtomicCmpXchgInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::AtomicCmpXchgInst_O::static_className() ); + llvmo::AtomicCmpXchgInst_O::_nil = nil_for_class; + classllvmo__AtomicCmpXchgInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__AtomicCmpXchgInst_Oval->setSupportsSlots(llvmo::AtomicCmpXchgInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__AtomicRMWInst_Oval]")); + core::BuiltInClass_sp classllvmo__AtomicRMWInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__AtomicRMWInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__AtomicRMWInst_Oval,_lisp,llvmo::AtomicRMWInst_O::static_classSymbol()); + llvmo::AtomicRMWInst_O::___staticMetaClass = classllvmo__AtomicRMWInst_Oval; + _lisp->setf_findClass(llvmo::AtomicRMWInst_O::static_classSymbol(),classllvmo__AtomicRMWInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::AtomicRMWInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::AtomicRMWInst_O::static_className() % (void*)(llvmo::AtomicRMWInst_O::static_newNil_callback()) ); + classllvmo__AtomicRMWInst_Oval->setInstance_newNil_callback(llvmo::AtomicRMWInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::AtomicRMWInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::AtomicRMWInst_O::static_className() ); + llvmo::AtomicRMWInst_O::_nil = nil_for_class; + classllvmo__AtomicRMWInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__AtomicRMWInst_Oval->setSupportsSlots(llvmo::AtomicRMWInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__CallInst_Oval]")); + core::BuiltInClass_sp classllvmo__CallInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__CallInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__CallInst_Oval,_lisp,llvmo::CallInst_O::static_classSymbol()); + llvmo::CallInst_O::___staticMetaClass = classllvmo__CallInst_Oval; + _lisp->setf_findClass(llvmo::CallInst_O::static_classSymbol(),classllvmo__CallInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::CallInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::CallInst_O::static_className() % (void*)(llvmo::CallInst_O::static_newNil_callback()) ); + classllvmo__CallInst_Oval->setInstance_newNil_callback(llvmo::CallInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::CallInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::CallInst_O::static_className() ); + llvmo::CallInst_O::_nil = nil_for_class; + classllvmo__CallInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__CallInst_Oval->setSupportsSlots(llvmo::CallInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantArray_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantArray_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantArray_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantArray_Oval,_lisp,llvmo::ConstantArray_O::static_classSymbol()); + llvmo::ConstantArray_O::___staticMetaClass = classllvmo__ConstantArray_Oval; + _lisp->setf_findClass(llvmo::ConstantArray_O::static_classSymbol(),classllvmo__ConstantArray_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantArray_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantArray_O::static_className() % (void*)(llvmo::ConstantArray_O::static_newNil_callback()) ); + classllvmo__ConstantArray_Oval->setInstance_newNil_callback(llvmo::ConstantArray_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantArray_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantArray_O::static_className() ); + llvmo::ConstantArray_O::_nil = nil_for_class; + classllvmo__ConstantArray_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantArray_Oval->setSupportsSlots(llvmo::ConstantArray_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantDataSequential_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantDataSequential_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantDataSequential_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantDataSequential_Oval,_lisp,llvmo::ConstantDataSequential_O::static_classSymbol()); + llvmo::ConstantDataSequential_O::___staticMetaClass = classllvmo__ConstantDataSequential_Oval; + _lisp->setf_findClass(llvmo::ConstantDataSequential_O::static_classSymbol(),classllvmo__ConstantDataSequential_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantDataSequential_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantDataSequential_O::static_className() % (void*)(llvmo::ConstantDataSequential_O::static_newNil_callback()) ); + classllvmo__ConstantDataSequential_Oval->setInstance_newNil_callback(llvmo::ConstantDataSequential_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantDataSequential_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantDataSequential_O::static_className() ); + llvmo::ConstantDataSequential_O::_nil = nil_for_class; + classllvmo__ConstantDataSequential_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantDataSequential_Oval->setSupportsSlots(llvmo::ConstantDataSequential_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantExpr_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantExpr_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantExpr_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantExpr_Oval,_lisp,llvmo::ConstantExpr_O::static_classSymbol()); + llvmo::ConstantExpr_O::___staticMetaClass = classllvmo__ConstantExpr_Oval; + _lisp->setf_findClass(llvmo::ConstantExpr_O::static_classSymbol(),classllvmo__ConstantExpr_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantExpr_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantExpr_O::static_className() % (void*)(llvmo::ConstantExpr_O::static_newNil_callback()) ); + classllvmo__ConstantExpr_Oval->setInstance_newNil_callback(llvmo::ConstantExpr_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantExpr_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantExpr_O::static_className() ); + llvmo::ConstantExpr_O::_nil = nil_for_class; + classllvmo__ConstantExpr_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantExpr_Oval->setSupportsSlots(llvmo::ConstantExpr_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantFP_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantFP_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantFP_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantFP_Oval,_lisp,llvmo::ConstantFP_O::static_classSymbol()); + llvmo::ConstantFP_O::___staticMetaClass = classllvmo__ConstantFP_Oval; + _lisp->setf_findClass(llvmo::ConstantFP_O::static_classSymbol(),classllvmo__ConstantFP_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantFP_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantFP_O::static_className() % (void*)(llvmo::ConstantFP_O::static_newNil_callback()) ); + classllvmo__ConstantFP_Oval->setInstance_newNil_callback(llvmo::ConstantFP_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantFP_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantFP_O::static_className() ); + llvmo::ConstantFP_O::_nil = nil_for_class; + classllvmo__ConstantFP_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantFP_Oval->setSupportsSlots(llvmo::ConstantFP_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantInt_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantInt_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantInt_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantInt_Oval,_lisp,llvmo::ConstantInt_O::static_classSymbol()); + llvmo::ConstantInt_O::___staticMetaClass = classllvmo__ConstantInt_Oval; + _lisp->setf_findClass(llvmo::ConstantInt_O::static_classSymbol(),classllvmo__ConstantInt_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantInt_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantInt_O::static_className() % (void*)(llvmo::ConstantInt_O::static_newNil_callback()) ); + classllvmo__ConstantInt_Oval->setInstance_newNil_callback(llvmo::ConstantInt_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantInt_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantInt_O::static_className() ); + llvmo::ConstantInt_O::_nil = nil_for_class; + classllvmo__ConstantInt_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantInt_Oval->setSupportsSlots(llvmo::ConstantInt_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantPointerNull_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantPointerNull_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantPointerNull_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantPointerNull_Oval,_lisp,llvmo::ConstantPointerNull_O::static_classSymbol()); + llvmo::ConstantPointerNull_O::___staticMetaClass = classllvmo__ConstantPointerNull_Oval; + _lisp->setf_findClass(llvmo::ConstantPointerNull_O::static_classSymbol(),classllvmo__ConstantPointerNull_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantPointerNull_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantPointerNull_O::static_className() % (void*)(llvmo::ConstantPointerNull_O::static_newNil_callback()) ); + classllvmo__ConstantPointerNull_Oval->setInstance_newNil_callback(llvmo::ConstantPointerNull_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantPointerNull_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantPointerNull_O::static_className() ); + llvmo::ConstantPointerNull_O::_nil = nil_for_class; + classllvmo__ConstantPointerNull_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantPointerNull_Oval->setSupportsSlots(llvmo::ConstantPointerNull_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__DataLayout_Oval]")); + core::BuiltInClass_sp classllvmo__DataLayout_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__DataLayout_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__DataLayout_Oval,_lisp,llvmo::DataLayout_O::static_classSymbol()); + llvmo::DataLayout_O::___staticMetaClass = classllvmo__DataLayout_Oval; + _lisp->setf_findClass(llvmo::DataLayout_O::static_classSymbol(),classllvmo__DataLayout_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::DataLayout_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::DataLayout_O::static_className() % (void*)(llvmo::DataLayout_O::static_newNil_callback()) ); + classllvmo__DataLayout_Oval->setInstance_newNil_callback(llvmo::DataLayout_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::DataLayout_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::DataLayout_O::static_className() ); + llvmo::DataLayout_O::_nil = nil_for_class; + classllvmo__DataLayout_Oval->setInstanceNil(nil_for_class); + } + classllvmo__DataLayout_Oval->setSupportsSlots(llvmo::DataLayout_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FenceInst_Oval]")); + core::BuiltInClass_sp classllvmo__FenceInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FenceInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FenceInst_Oval,_lisp,llvmo::FenceInst_O::static_classSymbol()); + llvmo::FenceInst_O::___staticMetaClass = classllvmo__FenceInst_Oval; + _lisp->setf_findClass(llvmo::FenceInst_O::static_classSymbol(),classllvmo__FenceInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FenceInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FenceInst_O::static_className() % (void*)(llvmo::FenceInst_O::static_newNil_callback()) ); + classllvmo__FenceInst_Oval->setInstance_newNil_callback(llvmo::FenceInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FenceInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FenceInst_O::static_className() ); + llvmo::FenceInst_O::_nil = nil_for_class; + classllvmo__FenceInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FenceInst_Oval->setSupportsSlots(llvmo::FenceInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__GlobalValue_Oval]")); + core::BuiltInClass_sp classllvmo__GlobalValue_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__GlobalValue_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__GlobalValue_Oval,_lisp,llvmo::GlobalValue_O::static_classSymbol()); + llvmo::GlobalValue_O::___staticMetaClass = classllvmo__GlobalValue_Oval; + _lisp->setf_findClass(llvmo::GlobalValue_O::static_classSymbol(),classllvmo__GlobalValue_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::GlobalValue_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::GlobalValue_O::static_className() % (void*)(llvmo::GlobalValue_O::static_newNil_callback()) ); + classllvmo__GlobalValue_Oval->setInstance_newNil_callback(llvmo::GlobalValue_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::GlobalValue_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::GlobalValue_O::static_className() ); + llvmo::GlobalValue_O::_nil = nil_for_class; + classllvmo__GlobalValue_Oval->setInstanceNil(nil_for_class); + } + classllvmo__GlobalValue_Oval->setSupportsSlots(llvmo::GlobalValue_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__LandingPadInst_Oval]")); + core::BuiltInClass_sp classllvmo__LandingPadInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__LandingPadInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__LandingPadInst_Oval,_lisp,llvmo::LandingPadInst_O::static_classSymbol()); + llvmo::LandingPadInst_O::___staticMetaClass = classllvmo__LandingPadInst_Oval; + _lisp->setf_findClass(llvmo::LandingPadInst_O::static_classSymbol(),classllvmo__LandingPadInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::LandingPadInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::LandingPadInst_O::static_className() % (void*)(llvmo::LandingPadInst_O::static_newNil_callback()) ); + classllvmo__LandingPadInst_Oval->setInstance_newNil_callback(llvmo::LandingPadInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::LandingPadInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::LandingPadInst_O::static_className() ); + llvmo::LandingPadInst_O::_nil = nil_for_class; + classllvmo__LandingPadInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__LandingPadInst_Oval->setSupportsSlots(llvmo::LandingPadInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__PHINode_Oval]")); + core::BuiltInClass_sp classllvmo__PHINode_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__PHINode_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__PHINode_Oval,_lisp,llvmo::PHINode_O::static_classSymbol()); + llvmo::PHINode_O::___staticMetaClass = classllvmo__PHINode_Oval; + _lisp->setf_findClass(llvmo::PHINode_O::static_classSymbol(),classllvmo__PHINode_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::PHINode_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::PHINode_O::static_className() % (void*)(llvmo::PHINode_O::static_newNil_callback()) ); + classllvmo__PHINode_Oval->setInstance_newNil_callback(llvmo::PHINode_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::PHINode_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::PHINode_O::static_className() ); + llvmo::PHINode_O::_nil = nil_for_class; + classllvmo__PHINode_Oval->setInstanceNil(nil_for_class); + } + classllvmo__PHINode_Oval->setSupportsSlots(llvmo::PHINode_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__PointerType_Oval]")); + core::BuiltInClass_sp classllvmo__PointerType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__PointerType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__PointerType_Oval,_lisp,llvmo::PointerType_O::static_classSymbol()); + llvmo::PointerType_O::___staticMetaClass = classllvmo__PointerType_Oval; + _lisp->setf_findClass(llvmo::PointerType_O::static_classSymbol(),classllvmo__PointerType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::PointerType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::PointerType_O::static_className() % (void*)(llvmo::PointerType_O::static_newNil_callback()) ); + classllvmo__PointerType_Oval->setInstance_newNil_callback(llvmo::PointerType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::PointerType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::PointerType_O::static_className() ); + llvmo::PointerType_O::_nil = nil_for_class; + classllvmo__PointerType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__PointerType_Oval->setSupportsSlots(llvmo::PointerType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__StoreInst_Oval]")); + core::BuiltInClass_sp classllvmo__StoreInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__StoreInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__StoreInst_Oval,_lisp,llvmo::StoreInst_O::static_classSymbol()); + llvmo::StoreInst_O::___staticMetaClass = classllvmo__StoreInst_Oval; + _lisp->setf_findClass(llvmo::StoreInst_O::static_classSymbol(),classllvmo__StoreInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::StoreInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::StoreInst_O::static_className() % (void*)(llvmo::StoreInst_O::static_newNil_callback()) ); + classllvmo__StoreInst_Oval->setInstance_newNil_callback(llvmo::StoreInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::StoreInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::StoreInst_O::static_className() ); + llvmo::StoreInst_O::_nil = nil_for_class; + classllvmo__StoreInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__StoreInst_Oval->setSupportsSlots(llvmo::StoreInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__TerminatorInst_Oval]")); + core::BuiltInClass_sp classllvmo__TerminatorInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__TerminatorInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__TerminatorInst_Oval,_lisp,llvmo::TerminatorInst_O::static_classSymbol()); + llvmo::TerminatorInst_O::___staticMetaClass = classllvmo__TerminatorInst_Oval; + _lisp->setf_findClass(llvmo::TerminatorInst_O::static_classSymbol(),classllvmo__TerminatorInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::TerminatorInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::TerminatorInst_O::static_className() % (void*)(llvmo::TerminatorInst_O::static_newNil_callback()) ); + classllvmo__TerminatorInst_Oval->setInstance_newNil_callback(llvmo::TerminatorInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::TerminatorInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::TerminatorInst_O::static_className() ); + llvmo::TerminatorInst_O::_nil = nil_for_class; + classllvmo__TerminatorInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__TerminatorInst_Oval->setSupportsSlots(llvmo::TerminatorInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__UnaryInstruction_Oval]")); + core::BuiltInClass_sp classllvmo__UnaryInstruction_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__UnaryInstruction_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__UnaryInstruction_Oval,_lisp,llvmo::UnaryInstruction_O::static_classSymbol()); + llvmo::UnaryInstruction_O::___staticMetaClass = classllvmo__UnaryInstruction_Oval; + _lisp->setf_findClass(llvmo::UnaryInstruction_O::static_classSymbol(),classllvmo__UnaryInstruction_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::UnaryInstruction_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::UnaryInstruction_O::static_className() % (void*)(llvmo::UnaryInstruction_O::static_newNil_callback()) ); + classllvmo__UnaryInstruction_Oval->setInstance_newNil_callback(llvmo::UnaryInstruction_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::UnaryInstruction_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::UnaryInstruction_O::static_className() ); + llvmo::UnaryInstruction_O::_nil = nil_for_class; + classllvmo__UnaryInstruction_Oval->setInstanceNil(nil_for_class); + } + classllvmo__UnaryInstruction_Oval->setSupportsSlots(llvmo::UnaryInstruction_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__UndefValue_Oval]")); + core::BuiltInClass_sp classllvmo__UndefValue_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__UndefValue_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__UndefValue_Oval,_lisp,llvmo::UndefValue_O::static_classSymbol()); + llvmo::UndefValue_O::___staticMetaClass = classllvmo__UndefValue_Oval; + _lisp->setf_findClass(llvmo::UndefValue_O::static_classSymbol(),classllvmo__UndefValue_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::UndefValue_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::UndefValue_O::static_className() % (void*)(llvmo::UndefValue_O::static_newNil_callback()) ); + classllvmo__UndefValue_Oval->setInstance_newNil_callback(llvmo::UndefValue_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::UndefValue_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::UndefValue_O::static_className() ); + llvmo::UndefValue_O::_nil = nil_for_class; + classllvmo__UndefValue_Oval->setInstanceNil(nil_for_class); + } + classllvmo__UndefValue_Oval->setSupportsSlots(llvmo::UndefValue_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__VectorType_Oval]")); + core::BuiltInClass_sp classllvmo__VectorType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__VectorType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__VectorType_Oval,_lisp,llvmo::VectorType_O::static_classSymbol()); + llvmo::VectorType_O::___staticMetaClass = classllvmo__VectorType_Oval; + _lisp->setf_findClass(llvmo::VectorType_O::static_classSymbol(),classllvmo__VectorType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::VectorType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::VectorType_O::static_className() % (void*)(llvmo::VectorType_O::static_newNil_callback()) ); + classllvmo__VectorType_Oval->setInstance_newNil_callback(llvmo::VectorType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::VectorType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::VectorType_O::static_className() ); + llvmo::VectorType_O::_nil = nil_for_class; + classllvmo__VectorType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__VectorType_Oval->setSupportsSlots(llvmo::VectorType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__AllocaInst_Oval]")); + core::BuiltInClass_sp classllvmo__AllocaInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__AllocaInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__AllocaInst_Oval,_lisp,llvmo::AllocaInst_O::static_classSymbol()); + llvmo::AllocaInst_O::___staticMetaClass = classllvmo__AllocaInst_Oval; + _lisp->setf_findClass(llvmo::AllocaInst_O::static_classSymbol(),classllvmo__AllocaInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::AllocaInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::AllocaInst_O::static_className() % (void*)(llvmo::AllocaInst_O::static_newNil_callback()) ); + classllvmo__AllocaInst_Oval->setInstance_newNil_callback(llvmo::AllocaInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::AllocaInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::AllocaInst_O::static_className() ); + llvmo::AllocaInst_O::_nil = nil_for_class; + classllvmo__AllocaInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__AllocaInst_Oval->setSupportsSlots(llvmo::AllocaInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__BranchInst_Oval]")); + core::BuiltInClass_sp classllvmo__BranchInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__BranchInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__BranchInst_Oval,_lisp,llvmo::BranchInst_O::static_classSymbol()); + llvmo::BranchInst_O::___staticMetaClass = classllvmo__BranchInst_Oval; + _lisp->setf_findClass(llvmo::BranchInst_O::static_classSymbol(),classllvmo__BranchInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::BranchInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::BranchInst_O::static_className() % (void*)(llvmo::BranchInst_O::static_newNil_callback()) ); + classllvmo__BranchInst_Oval->setInstance_newNil_callback(llvmo::BranchInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::BranchInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::BranchInst_O::static_className() ); + llvmo::BranchInst_O::_nil = nil_for_class; + classllvmo__BranchInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__BranchInst_Oval->setSupportsSlots(llvmo::BranchInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantDataArray_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantDataArray_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantDataArray_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantDataArray_Oval,_lisp,llvmo::ConstantDataArray_O::static_classSymbol()); + llvmo::ConstantDataArray_O::___staticMetaClass = classllvmo__ConstantDataArray_Oval; + _lisp->setf_findClass(llvmo::ConstantDataArray_O::static_classSymbol(),classllvmo__ConstantDataArray_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantDataArray_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantDataArray_O::static_className() % (void*)(llvmo::ConstantDataArray_O::static_newNil_callback()) ); + classllvmo__ConstantDataArray_Oval->setInstance_newNil_callback(llvmo::ConstantDataArray_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantDataArray_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantDataArray_O::static_className() ); + llvmo::ConstantDataArray_O::_nil = nil_for_class; + classllvmo__ConstantDataArray_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantDataArray_Oval->setSupportsSlots(llvmo::ConstantDataArray_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Function_Oval]")); + core::BuiltInClass_sp classllvmo__Function_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Function_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Function_Oval,_lisp,llvmo::Function_O::static_classSymbol()); + llvmo::Function_O::___staticMetaClass = classllvmo__Function_Oval; + _lisp->setf_findClass(llvmo::Function_O::static_classSymbol(),classllvmo__Function_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Function_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Function_O::static_className() % (void*)(llvmo::Function_O::static_newNil_callback()) ); + classllvmo__Function_Oval->setInstance_newNil_callback(llvmo::Function_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Function_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Function_O::static_className() ); + llvmo::Function_O::_nil = nil_for_class; + classllvmo__Function_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Function_Oval->setSupportsSlots(llvmo::Function_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__GlobalVariable_Oval]")); + core::BuiltInClass_sp classllvmo__GlobalVariable_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__GlobalVariable_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__GlobalVariable_Oval,_lisp,llvmo::GlobalVariable_O::static_classSymbol()); + llvmo::GlobalVariable_O::___staticMetaClass = classllvmo__GlobalVariable_Oval; + _lisp->setf_findClass(llvmo::GlobalVariable_O::static_classSymbol(),classllvmo__GlobalVariable_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::GlobalVariable_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::GlobalVariable_O::static_className() % (void*)(llvmo::GlobalVariable_O::static_newNil_callback()) ); + classllvmo__GlobalVariable_Oval->setInstance_newNil_callback(llvmo::GlobalVariable_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::GlobalVariable_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::GlobalVariable_O::static_className() ); + llvmo::GlobalVariable_O::_nil = nil_for_class; + classllvmo__GlobalVariable_Oval->setInstanceNil(nil_for_class); + } + classllvmo__GlobalVariable_Oval->setSupportsSlots(llvmo::GlobalVariable_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IndirectBrInst_Oval]")); + core::BuiltInClass_sp classllvmo__IndirectBrInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IndirectBrInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IndirectBrInst_Oval,_lisp,llvmo::IndirectBrInst_O::static_classSymbol()); + llvmo::IndirectBrInst_O::___staticMetaClass = classllvmo__IndirectBrInst_Oval; + _lisp->setf_findClass(llvmo::IndirectBrInst_O::static_classSymbol(),classllvmo__IndirectBrInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IndirectBrInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IndirectBrInst_O::static_className() % (void*)(llvmo::IndirectBrInst_O::static_newNil_callback()) ); + classllvmo__IndirectBrInst_Oval->setInstance_newNil_callback(llvmo::IndirectBrInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IndirectBrInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IndirectBrInst_O::static_className() ); + llvmo::IndirectBrInst_O::_nil = nil_for_class; + classllvmo__IndirectBrInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IndirectBrInst_Oval->setSupportsSlots(llvmo::IndirectBrInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__InvokeInst_Oval]")); + core::BuiltInClass_sp classllvmo__InvokeInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__InvokeInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__InvokeInst_Oval,_lisp,llvmo::InvokeInst_O::static_classSymbol()); + llvmo::InvokeInst_O::___staticMetaClass = classllvmo__InvokeInst_Oval; + _lisp->setf_findClass(llvmo::InvokeInst_O::static_classSymbol(),classllvmo__InvokeInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::InvokeInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::InvokeInst_O::static_className() % (void*)(llvmo::InvokeInst_O::static_newNil_callback()) ); + classllvmo__InvokeInst_Oval->setInstance_newNil_callback(llvmo::InvokeInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::InvokeInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::InvokeInst_O::static_className() ); + llvmo::InvokeInst_O::_nil = nil_for_class; + classllvmo__InvokeInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__InvokeInst_Oval->setSupportsSlots(llvmo::InvokeInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__LoadInst_Oval]")); + core::BuiltInClass_sp classllvmo__LoadInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__LoadInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__LoadInst_Oval,_lisp,llvmo::LoadInst_O::static_classSymbol()); + llvmo::LoadInst_O::___staticMetaClass = classllvmo__LoadInst_Oval; + _lisp->setf_findClass(llvmo::LoadInst_O::static_classSymbol(),classllvmo__LoadInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::LoadInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::LoadInst_O::static_className() % (void*)(llvmo::LoadInst_O::static_newNil_callback()) ); + classllvmo__LoadInst_Oval->setInstance_newNil_callback(llvmo::LoadInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::LoadInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::LoadInst_O::static_className() ); + llvmo::LoadInst_O::_nil = nil_for_class; + classllvmo__LoadInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__LoadInst_Oval->setSupportsSlots(llvmo::LoadInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ResumeInst_Oval]")); + core::BuiltInClass_sp classllvmo__ResumeInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ResumeInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ResumeInst_Oval,_lisp,llvmo::ResumeInst_O::static_classSymbol()); + llvmo::ResumeInst_O::___staticMetaClass = classllvmo__ResumeInst_Oval; + _lisp->setf_findClass(llvmo::ResumeInst_O::static_classSymbol(),classllvmo__ResumeInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ResumeInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ResumeInst_O::static_className() % (void*)(llvmo::ResumeInst_O::static_newNil_callback()) ); + classllvmo__ResumeInst_Oval->setInstance_newNil_callback(llvmo::ResumeInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ResumeInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ResumeInst_O::static_className() ); + llvmo::ResumeInst_O::_nil = nil_for_class; + classllvmo__ResumeInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ResumeInst_Oval->setSupportsSlots(llvmo::ResumeInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ReturnInst_Oval]")); + core::BuiltInClass_sp classllvmo__ReturnInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ReturnInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ReturnInst_Oval,_lisp,llvmo::ReturnInst_O::static_classSymbol()); + llvmo::ReturnInst_O::___staticMetaClass = classllvmo__ReturnInst_Oval; + _lisp->setf_findClass(llvmo::ReturnInst_O::static_classSymbol(),classllvmo__ReturnInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ReturnInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ReturnInst_O::static_className() % (void*)(llvmo::ReturnInst_O::static_newNil_callback()) ); + classllvmo__ReturnInst_Oval->setInstance_newNil_callback(llvmo::ReturnInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ReturnInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ReturnInst_O::static_className() ); + llvmo::ReturnInst_O::_nil = nil_for_class; + classllvmo__ReturnInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ReturnInst_Oval->setSupportsSlots(llvmo::ReturnInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__SwitchInst_Oval]")); + core::BuiltInClass_sp classllvmo__SwitchInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__SwitchInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__SwitchInst_Oval,_lisp,llvmo::SwitchInst_O::static_classSymbol()); + llvmo::SwitchInst_O::___staticMetaClass = classllvmo__SwitchInst_Oval; + _lisp->setf_findClass(llvmo::SwitchInst_O::static_classSymbol(),classllvmo__SwitchInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::SwitchInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::SwitchInst_O::static_className() % (void*)(llvmo::SwitchInst_O::static_newNil_callback()) ); + classllvmo__SwitchInst_Oval->setInstance_newNil_callback(llvmo::SwitchInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::SwitchInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::SwitchInst_O::static_className() ); + llvmo::SwitchInst_O::_nil = nil_for_class; + classllvmo__SwitchInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__SwitchInst_Oval->setSupportsSlots(llvmo::SwitchInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__UnreachableInst_Oval]")); + core::BuiltInClass_sp classllvmo__UnreachableInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__UnreachableInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__UnreachableInst_Oval,_lisp,llvmo::UnreachableInst_O::static_classSymbol()); + llvmo::UnreachableInst_O::___staticMetaClass = classllvmo__UnreachableInst_Oval; + _lisp->setf_findClass(llvmo::UnreachableInst_O::static_classSymbol(),classllvmo__UnreachableInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::UnreachableInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::UnreachableInst_O::static_className() % (void*)(llvmo::UnreachableInst_O::static_newNil_callback()) ); + classllvmo__UnreachableInst_Oval->setInstance_newNil_callback(llvmo::UnreachableInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::UnreachableInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::UnreachableInst_O::static_className() ); + llvmo::UnreachableInst_O::_nil = nil_for_class; + classllvmo__UnreachableInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__UnreachableInst_Oval->setSupportsSlots(llvmo::UnreachableInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__VAArgInst_Oval]")); + core::BuiltInClass_sp classllvmo__VAArgInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__VAArgInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__VAArgInst_Oval,_lisp,llvmo::VAArgInst_O::static_classSymbol()); + llvmo::VAArgInst_O::___staticMetaClass = classllvmo__VAArgInst_Oval; + _lisp->setf_findClass(llvmo::VAArgInst_O::static_classSymbol(),classllvmo__VAArgInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::VAArgInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::VAArgInst_O::static_className() % (void*)(llvmo::VAArgInst_O::static_newNil_callback()) ); + classllvmo__VAArgInst_Oval->setInstance_newNil_callback(llvmo::VAArgInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::VAArgInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::VAArgInst_O::static_className() ); + llvmo::VAArgInst_O::_nil = nil_for_class; + classllvmo__VAArgInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__VAArgInst_Oval->setSupportsSlots(llvmo::VAArgInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ +#endif // CREATE_CLASS +#undef CREATE_CLASS +#ifdef DUMP_INFO_CLASS // { +// Depends on nothing + + LOG(BF("--- dump_info --- className: llvmo::APFloat_O @ %X") % classllvmo__APFloat_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::APFloat_O::static_className() % llvmo::APFloat_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::APInt_O @ %X") % classllvmo__APInt_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::APInt_O::static_className() % llvmo::APInt_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Attribute_O @ %X") % classllvmo__Attribute_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Attribute_O::static_className() % llvmo::Attribute_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Builder_O @ %X") % classllvmo__Builder_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Builder_O::static_className() % llvmo::Builder_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::DebugLoc_O @ %X") % classllvmo__DebugLoc_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::DebugLoc_O::static_className() % llvmo::DebugLoc_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::EngineBuilder_O @ %X") % classllvmo__EngineBuilder_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::EngineBuilder_O::static_className() % llvmo::EngineBuilder_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ExecutionEngine_O @ %X") % classllvmo__ExecutionEngine_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ExecutionEngine_O::static_className() % llvmo::ExecutionEngine_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IRBuilderBase_O @ %X") % classllvmo__IRBuilderBase_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IRBuilderBase_O::static_className() % llvmo::IRBuilderBase_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::InsertPoint_O @ %X") % classllvmo__InsertPoint_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::InsertPoint_O::static_className() % llvmo::InsertPoint_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::LLVMContext_O @ %X") % classllvmo__LLVMContext_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::LLVMContext_O::static_className() % llvmo::LLVMContext_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Module_O @ %X") % classllvmo__Module_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Module_O::static_className() % llvmo::Module_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::PassManagerBase_O @ %X") % classllvmo__PassManagerBase_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::PassManagerBase_O::static_className() % llvmo::PassManagerBase_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Pass_O @ %X") % classllvmo__Pass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Pass_O::static_className() % llvmo::Pass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Type_O @ %X") % classllvmo__Type_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Type_O::static_className() % llvmo::Type_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Value_O @ %X") % classllvmo__Value_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Value_O::static_className() % llvmo::Value_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Argument_O @ %X") % classllvmo__Argument_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Argument_O::static_className() % llvmo::Argument_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::BasicBlock_O @ %X") % classllvmo__BasicBlock_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::BasicBlock_O::static_className() % llvmo::BasicBlock_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::CompositeType_O @ %X") % classllvmo__CompositeType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::CompositeType_O::static_className() % llvmo::CompositeType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FunctionPassManager_O @ %X") % classllvmo__FunctionPassManager_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FunctionPassManager_O::static_className() % llvmo::FunctionPassManager_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FunctionPass_O @ %X") % classllvmo__FunctionPass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FunctionPass_O::static_className() % llvmo::FunctionPass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FunctionType_O @ %X") % classllvmo__FunctionType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FunctionType_O::static_className() % llvmo::FunctionType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IRBuilder_O @ %X") % classllvmo__IRBuilder_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IRBuilder_O::static_className() % llvmo::IRBuilder_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IntegerType_O @ %X") % classllvmo__IntegerType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IntegerType_O::static_className() % llvmo::IntegerType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::MDNode_O @ %X") % classllvmo__MDNode_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::MDNode_O::static_className() % llvmo::MDNode_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::MDString_O @ %X") % classllvmo__MDString_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::MDString_O::static_className() % llvmo::MDString_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ModulePass_O @ %X") % classllvmo__ModulePass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ModulePass_O::static_className() % llvmo::ModulePass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::User_O @ %X") % classllvmo__User_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::User_O::static_className() % llvmo::User_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Constant_O @ %X") % classllvmo__Constant_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Constant_O::static_className() % llvmo::Constant_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ImmutablePass_O @ %X") % classllvmo__ImmutablePass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ImmutablePass_O::static_className() % llvmo::ImmutablePass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Instruction_O @ %X") % classllvmo__Instruction_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Instruction_O::static_className() % llvmo::Instruction_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::SequentialType_O @ %X") % classllvmo__SequentialType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::SequentialType_O::static_className() % llvmo::SequentialType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::StructType_O @ %X") % classllvmo__StructType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::StructType_O::static_className() % llvmo::StructType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ArrayType_O @ %X") % classllvmo__ArrayType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ArrayType_O::static_className() % llvmo::ArrayType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::AtomicCmpXchgInst_O @ %X") % classllvmo__AtomicCmpXchgInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::AtomicCmpXchgInst_O::static_className() % llvmo::AtomicCmpXchgInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::AtomicRMWInst_O @ %X") % classllvmo__AtomicRMWInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::AtomicRMWInst_O::static_className() % llvmo::AtomicRMWInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::CallInst_O @ %X") % classllvmo__CallInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::CallInst_O::static_className() % llvmo::CallInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantArray_O @ %X") % classllvmo__ConstantArray_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantArray_O::static_className() % llvmo::ConstantArray_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantDataSequential_O @ %X") % classllvmo__ConstantDataSequential_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantDataSequential_O::static_className() % llvmo::ConstantDataSequential_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantExpr_O @ %X") % classllvmo__ConstantExpr_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantExpr_O::static_className() % llvmo::ConstantExpr_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantFP_O @ %X") % classllvmo__ConstantFP_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantFP_O::static_className() % llvmo::ConstantFP_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantInt_O @ %X") % classllvmo__ConstantInt_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantInt_O::static_className() % llvmo::ConstantInt_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantPointerNull_O @ %X") % classllvmo__ConstantPointerNull_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantPointerNull_O::static_className() % llvmo::ConstantPointerNull_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::DataLayout_O @ %X") % classllvmo__DataLayout_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::DataLayout_O::static_className() % llvmo::DataLayout_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FenceInst_O @ %X") % classllvmo__FenceInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FenceInst_O::static_className() % llvmo::FenceInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::GlobalValue_O @ %X") % classllvmo__GlobalValue_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::GlobalValue_O::static_className() % llvmo::GlobalValue_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::LandingPadInst_O @ %X") % classllvmo__LandingPadInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::LandingPadInst_O::static_className() % llvmo::LandingPadInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::PHINode_O @ %X") % classllvmo__PHINode_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::PHINode_O::static_className() % llvmo::PHINode_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::PointerType_O @ %X") % classllvmo__PointerType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::PointerType_O::static_className() % llvmo::PointerType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::StoreInst_O @ %X") % classllvmo__StoreInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::StoreInst_O::static_className() % llvmo::StoreInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::TerminatorInst_O @ %X") % classllvmo__TerminatorInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::TerminatorInst_O::static_className() % llvmo::TerminatorInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::UnaryInstruction_O @ %X") % classllvmo__UnaryInstruction_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::UnaryInstruction_O::static_className() % llvmo::UnaryInstruction_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::UndefValue_O @ %X") % classllvmo__UndefValue_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::UndefValue_O::static_className() % llvmo::UndefValue_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::VectorType_O @ %X") % classllvmo__VectorType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::VectorType_O::static_className() % llvmo::VectorType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::AllocaInst_O @ %X") % classllvmo__AllocaInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::AllocaInst_O::static_className() % llvmo::AllocaInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::BranchInst_O @ %X") % classllvmo__BranchInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::BranchInst_O::static_className() % llvmo::BranchInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantDataArray_O @ %X") % classllvmo__ConstantDataArray_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantDataArray_O::static_className() % llvmo::ConstantDataArray_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Function_O @ %X") % classllvmo__Function_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Function_O::static_className() % llvmo::Function_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::GlobalVariable_O @ %X") % classllvmo__GlobalVariable_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::GlobalVariable_O::static_className() % llvmo::GlobalVariable_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IndirectBrInst_O @ %X") % classllvmo__IndirectBrInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IndirectBrInst_O::static_className() % llvmo::IndirectBrInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::InvokeInst_O @ %X") % classllvmo__InvokeInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::InvokeInst_O::static_className() % llvmo::InvokeInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::LoadInst_O @ %X") % classllvmo__LoadInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::LoadInst_O::static_className() % llvmo::LoadInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ResumeInst_O @ %X") % classllvmo__ResumeInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ResumeInst_O::static_className() % llvmo::ResumeInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ReturnInst_O @ %X") % classllvmo__ReturnInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ReturnInst_O::static_className() % llvmo::ReturnInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::SwitchInst_O @ %X") % classllvmo__SwitchInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::SwitchInst_O::static_className() % llvmo::SwitchInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::UnreachableInst_O @ %X") % classllvmo__UnreachableInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::UnreachableInst_O::static_className() % llvmo::UnreachableInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::VAArgInst_O @ %X") % classllvmo__VAArgInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::VAArgInst_O::static_className() % llvmo::VAArgInst_O::static_classSymbol() ); +#endif // } DUMP_INFO_CLASS +#undef DUMP_INFO_CLASS +#if defined(DEFINE_BASE_CLASSES) || defined(ALL_STAGES) // { +// Depends on nothing +classllvmo__APFloat_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__APInt_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Attribute_Oval->addInstanceBaseClass(core::T_O::static_classSymbol()); +classllvmo__Builder_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__DebugLoc_Oval->addInstanceBaseClass(core::T_O::static_classSymbol()); +classllvmo__EngineBuilder_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__ExecutionEngine_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__IRBuilderBase_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__InsertPoint_Oval->addInstanceBaseClass(core::T_O::static_classSymbol()); +classllvmo__LLVMContext_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Module_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__PassManagerBase_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Pass_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Type_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Value_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Argument_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__BasicBlock_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__CompositeType_Oval->addInstanceBaseClass(llvmo::Type_O::static_classSymbol()); +classllvmo__FunctionPassManager_Oval->addInstanceBaseClass(llvmo::PassManagerBase_O::static_classSymbol()); +classllvmo__FunctionPass_Oval->addInstanceBaseClass(llvmo::Pass_O::static_classSymbol()); +classllvmo__FunctionType_Oval->addInstanceBaseClass(llvmo::Type_O::static_classSymbol()); +classllvmo__IRBuilder_Oval->addInstanceBaseClass(llvmo::IRBuilderBase_O::static_classSymbol()); +classllvmo__IntegerType_Oval->addInstanceBaseClass(llvmo::Type_O::static_classSymbol()); +classllvmo__MDNode_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__MDString_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__ModulePass_Oval->addInstanceBaseClass(llvmo::Pass_O::static_classSymbol()); +classllvmo__User_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__Constant_Oval->addInstanceBaseClass(llvmo::User_O::static_classSymbol()); +classllvmo__ImmutablePass_Oval->addInstanceBaseClass(llvmo::ModulePass_O::static_classSymbol()); +classllvmo__Instruction_Oval->addInstanceBaseClass(llvmo::User_O::static_classSymbol()); +classllvmo__SequentialType_Oval->addInstanceBaseClass(llvmo::CompositeType_O::static_classSymbol()); +classllvmo__StructType_Oval->addInstanceBaseClass(llvmo::CompositeType_O::static_classSymbol()); +classllvmo__ArrayType_Oval->addInstanceBaseClass(llvmo::SequentialType_O::static_classSymbol()); +classllvmo__AtomicCmpXchgInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__AtomicRMWInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__CallInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__ConstantArray_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantDataSequential_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantExpr_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantFP_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantInt_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantPointerNull_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__DataLayout_Oval->addInstanceBaseClass(llvmo::ImmutablePass_O::static_classSymbol()); +classllvmo__FenceInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__GlobalValue_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__LandingPadInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__PHINode_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__PointerType_Oval->addInstanceBaseClass(llvmo::SequentialType_O::static_classSymbol()); +classllvmo__StoreInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__TerminatorInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__UnaryInstruction_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__UndefValue_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__VectorType_Oval->addInstanceBaseClass(llvmo::SequentialType_O::static_classSymbol()); +classllvmo__AllocaInst_Oval->addInstanceBaseClass(llvmo::UnaryInstruction_O::static_classSymbol()); +classllvmo__BranchInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__ConstantDataArray_Oval->addInstanceBaseClass(llvmo::ConstantDataSequential_O::static_classSymbol()); +classllvmo__Function_Oval->addInstanceBaseClass(llvmo::GlobalValue_O::static_classSymbol()); +classllvmo__GlobalVariable_Oval->addInstanceBaseClass(llvmo::GlobalValue_O::static_classSymbol()); +classllvmo__IndirectBrInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__InvokeInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__LoadInst_Oval->addInstanceBaseClass(llvmo::UnaryInstruction_O::static_classSymbol()); +classllvmo__ResumeInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__ReturnInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__SwitchInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__UnreachableInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__VAArgInst_Oval->addInstanceBaseClass(llvmo::UnaryInstruction_O::static_classSymbol()); +#endif // } DEFINE_BASE_CLASSES +#undef DEFINE_BASE_CLASSES +#if defined(DEFINE_CLASS_NAMES) || defined(ALL_STAGES) // { + core::Package_sp _curPkg = _lisp->findPackage(CurrentPkg); +// Depends on nothing + + classllvmo__APFloat_Oval->__setup_stage3_name(llvmo::APFloat_O::static_classSymbol()); + + classllvmo__APInt_Oval->__setup_stage3_name(llvmo::APInt_O::static_classSymbol()); + + classllvmo__Attribute_Oval->__setup_stage3_name(llvmo::Attribute_O::static_classSymbol()); + + classllvmo__Builder_Oval->__setup_stage3_name(llvmo::Builder_O::static_classSymbol()); + + classllvmo__DebugLoc_Oval->__setup_stage3_name(llvmo::DebugLoc_O::static_classSymbol()); + + classllvmo__EngineBuilder_Oval->__setup_stage3_name(llvmo::EngineBuilder_O::static_classSymbol()); + + classllvmo__ExecutionEngine_Oval->__setup_stage3_name(llvmo::ExecutionEngine_O::static_classSymbol()); + + classllvmo__IRBuilderBase_Oval->__setup_stage3_name(llvmo::IRBuilderBase_O::static_classSymbol()); + + classllvmo__InsertPoint_Oval->__setup_stage3_name(llvmo::InsertPoint_O::static_classSymbol()); + + classllvmo__LLVMContext_Oval->__setup_stage3_name(llvmo::LLVMContext_O::static_classSymbol()); + + classllvmo__Module_Oval->__setup_stage3_name(llvmo::Module_O::static_classSymbol()); + + classllvmo__PassManagerBase_Oval->__setup_stage3_name(llvmo::PassManagerBase_O::static_classSymbol()); + + classllvmo__Pass_Oval->__setup_stage3_name(llvmo::Pass_O::static_classSymbol()); + + classllvmo__Type_Oval->__setup_stage3_name(llvmo::Type_O::static_classSymbol()); + + classllvmo__Value_Oval->__setup_stage3_name(llvmo::Value_O::static_classSymbol()); + + classllvmo__Argument_Oval->__setup_stage3_name(llvmo::Argument_O::static_classSymbol()); + + classllvmo__BasicBlock_Oval->__setup_stage3_name(llvmo::BasicBlock_O::static_classSymbol()); + + classllvmo__CompositeType_Oval->__setup_stage3_name(llvmo::CompositeType_O::static_classSymbol()); + + classllvmo__FunctionPassManager_Oval->__setup_stage3_name(llvmo::FunctionPassManager_O::static_classSymbol()); + + classllvmo__FunctionPass_Oval->__setup_stage3_name(llvmo::FunctionPass_O::static_classSymbol()); + + classllvmo__FunctionType_Oval->__setup_stage3_name(llvmo::FunctionType_O::static_classSymbol()); + + classllvmo__IRBuilder_Oval->__setup_stage3_name(llvmo::IRBuilder_O::static_classSymbol()); + + classllvmo__IntegerType_Oval->__setup_stage3_name(llvmo::IntegerType_O::static_classSymbol()); + + classllvmo__MDNode_Oval->__setup_stage3_name(llvmo::MDNode_O::static_classSymbol()); + + classllvmo__MDString_Oval->__setup_stage3_name(llvmo::MDString_O::static_classSymbol()); + + classllvmo__ModulePass_Oval->__setup_stage3_name(llvmo::ModulePass_O::static_classSymbol()); + + classllvmo__User_Oval->__setup_stage3_name(llvmo::User_O::static_classSymbol()); + + classllvmo__Constant_Oval->__setup_stage3_name(llvmo::Constant_O::static_classSymbol()); + + classllvmo__ImmutablePass_Oval->__setup_stage3_name(llvmo::ImmutablePass_O::static_classSymbol()); + + classllvmo__Instruction_Oval->__setup_stage3_name(llvmo::Instruction_O::static_classSymbol()); + + classllvmo__SequentialType_Oval->__setup_stage3_name(llvmo::SequentialType_O::static_classSymbol()); + + classllvmo__StructType_Oval->__setup_stage3_name(llvmo::StructType_O::static_classSymbol()); + + classllvmo__ArrayType_Oval->__setup_stage3_name(llvmo::ArrayType_O::static_classSymbol()); + + classllvmo__AtomicCmpXchgInst_Oval->__setup_stage3_name(llvmo::AtomicCmpXchgInst_O::static_classSymbol()); + + classllvmo__AtomicRMWInst_Oval->__setup_stage3_name(llvmo::AtomicRMWInst_O::static_classSymbol()); + + classllvmo__CallInst_Oval->__setup_stage3_name(llvmo::CallInst_O::static_classSymbol()); + + classllvmo__ConstantArray_Oval->__setup_stage3_name(llvmo::ConstantArray_O::static_classSymbol()); + + classllvmo__ConstantDataSequential_Oval->__setup_stage3_name(llvmo::ConstantDataSequential_O::static_classSymbol()); + + classllvmo__ConstantExpr_Oval->__setup_stage3_name(llvmo::ConstantExpr_O::static_classSymbol()); + + classllvmo__ConstantFP_Oval->__setup_stage3_name(llvmo::ConstantFP_O::static_classSymbol()); + + classllvmo__ConstantInt_Oval->__setup_stage3_name(llvmo::ConstantInt_O::static_classSymbol()); + + classllvmo__ConstantPointerNull_Oval->__setup_stage3_name(llvmo::ConstantPointerNull_O::static_classSymbol()); + + classllvmo__DataLayout_Oval->__setup_stage3_name(llvmo::DataLayout_O::static_classSymbol()); + + classllvmo__FenceInst_Oval->__setup_stage3_name(llvmo::FenceInst_O::static_classSymbol()); + + classllvmo__GlobalValue_Oval->__setup_stage3_name(llvmo::GlobalValue_O::static_classSymbol()); + + classllvmo__LandingPadInst_Oval->__setup_stage3_name(llvmo::LandingPadInst_O::static_classSymbol()); + + classllvmo__PHINode_Oval->__setup_stage3_name(llvmo::PHINode_O::static_classSymbol()); + + classllvmo__PointerType_Oval->__setup_stage3_name(llvmo::PointerType_O::static_classSymbol()); + + classllvmo__StoreInst_Oval->__setup_stage3_name(llvmo::StoreInst_O::static_classSymbol()); + + classllvmo__TerminatorInst_Oval->__setup_stage3_name(llvmo::TerminatorInst_O::static_classSymbol()); + + classllvmo__UnaryInstruction_Oval->__setup_stage3_name(llvmo::UnaryInstruction_O::static_classSymbol()); + + classllvmo__UndefValue_Oval->__setup_stage3_name(llvmo::UndefValue_O::static_classSymbol()); + + classllvmo__VectorType_Oval->__setup_stage3_name(llvmo::VectorType_O::static_classSymbol()); + + classllvmo__AllocaInst_Oval->__setup_stage3_name(llvmo::AllocaInst_O::static_classSymbol()); + + classllvmo__BranchInst_Oval->__setup_stage3_name(llvmo::BranchInst_O::static_classSymbol()); + + classllvmo__ConstantDataArray_Oval->__setup_stage3_name(llvmo::ConstantDataArray_O::static_classSymbol()); + + classllvmo__Function_Oval->__setup_stage3_name(llvmo::Function_O::static_classSymbol()); + + classllvmo__GlobalVariable_Oval->__setup_stage3_name(llvmo::GlobalVariable_O::static_classSymbol()); + + classllvmo__IndirectBrInst_Oval->__setup_stage3_name(llvmo::IndirectBrInst_O::static_classSymbol()); + + classllvmo__InvokeInst_Oval->__setup_stage3_name(llvmo::InvokeInst_O::static_classSymbol()); + + classllvmo__LoadInst_Oval->__setup_stage3_name(llvmo::LoadInst_O::static_classSymbol()); + + classllvmo__ResumeInst_Oval->__setup_stage3_name(llvmo::ResumeInst_O::static_classSymbol()); + + classllvmo__ReturnInst_Oval->__setup_stage3_name(llvmo::ReturnInst_O::static_classSymbol()); + + classllvmo__SwitchInst_Oval->__setup_stage3_name(llvmo::SwitchInst_O::static_classSymbol()); + + classllvmo__UnreachableInst_Oval->__setup_stage3_name(llvmo::UnreachableInst_O::static_classSymbol()); + + classllvmo__VAArgInst_Oval->__setup_stage3_name(llvmo::VAArgInst_O::static_classSymbol()); +#endif // } DEFINE_CLASS_NAMES +#undef DEFINE_CLASS_NAMES +#if defined(EXPOSE_TO_CANDO) || defined(ALL_STAGES) +#ifdef Use_LlvmoPkg +extern void Register_llvmo__APFloat_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__APFloat_O"); + Register_llvmo__APFloat_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__APInt_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__APInt_O"); + Register_llvmo__APInt_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Attribute_O(core::Lisp_sp); // base(s): set(['core::T_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Attribute_O"); + Register_llvmo__Attribute_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Builder_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Builder_O"); + Register_llvmo__Builder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__DebugLoc_O(core::Lisp_sp); // base(s): set(['core::T_O']) +{_BLOCK_TRACE("initializing Register_llvmo__DebugLoc_O"); + Register_llvmo__DebugLoc_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__EngineBuilder_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__EngineBuilder_O"); + Register_llvmo__EngineBuilder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ExecutionEngine_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ExecutionEngine_O"); + Register_llvmo__ExecutionEngine_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IRBuilderBase_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IRBuilderBase_O"); + Register_llvmo__IRBuilderBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__InsertPoint_O(core::Lisp_sp); // base(s): set(['core::T_O']) +{_BLOCK_TRACE("initializing Register_llvmo__InsertPoint_O"); + Register_llvmo__InsertPoint_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__LLVMContext_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__LLVMContext_O"); + Register_llvmo__LLVMContext_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Module_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Module_O"); + Register_llvmo__Module_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__PassManagerBase_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__PassManagerBase_O"); + Register_llvmo__PassManagerBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Pass_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Pass_O"); + Register_llvmo__Pass_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Type_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Type_O"); + Register_llvmo__Type_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Value_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Value_O"); + Register_llvmo__Value_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Argument_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Argument_O"); + Register_llvmo__Argument_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__BasicBlock_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__BasicBlock_O"); + Register_llvmo__BasicBlock_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__CompositeType_O(core::Lisp_sp); // base(s): set(['llvmo::Type_O']) +{_BLOCK_TRACE("initializing Register_llvmo__CompositeType_O"); + Register_llvmo__CompositeType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FunctionPassManager_O(core::Lisp_sp); // base(s): set(['llvmo::PassManagerBase_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FunctionPassManager_O"); + Register_llvmo__FunctionPassManager_O(_lisp); // base(s): set(['llvmo::PassManagerBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FunctionPass_O(core::Lisp_sp); // base(s): set(['llvmo::Pass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FunctionPass_O"); + Register_llvmo__FunctionPass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FunctionType_O(core::Lisp_sp); // base(s): set(['llvmo::Type_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FunctionType_O"); + Register_llvmo__FunctionType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IRBuilder_O(core::Lisp_sp); // base(s): set(['llvmo::IRBuilderBase_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IRBuilder_O"); + Register_llvmo__IRBuilder_O(_lisp); // base(s): set(['llvmo::IRBuilderBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IntegerType_O(core::Lisp_sp); // base(s): set(['llvmo::Type_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IntegerType_O"); + Register_llvmo__IntegerType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__MDNode_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__MDNode_O"); + Register_llvmo__MDNode_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__MDString_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__MDString_O"); + Register_llvmo__MDString_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ModulePass_O(core::Lisp_sp); // base(s): set(['llvmo::Pass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ModulePass_O"); + Register_llvmo__ModulePass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__User_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__User_O"); + Register_llvmo__User_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Constant_O(core::Lisp_sp); // base(s): set(['llvmo::User_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Constant_O"); + Register_llvmo__Constant_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ImmutablePass_O(core::Lisp_sp); // base(s): set(['llvmo::ModulePass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ImmutablePass_O"); + Register_llvmo__ImmutablePass_O(_lisp); // base(s): set(['llvmo::ModulePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Instruction_O(core::Lisp_sp); // base(s): set(['llvmo::User_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Instruction_O"); + Register_llvmo__Instruction_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__SequentialType_O(core::Lisp_sp); // base(s): set(['llvmo::CompositeType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__SequentialType_O"); + Register_llvmo__SequentialType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__StructType_O(core::Lisp_sp); // base(s): set(['llvmo::CompositeType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__StructType_O"); + Register_llvmo__StructType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ArrayType_O(core::Lisp_sp); // base(s): set(['llvmo::SequentialType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ArrayType_O"); + Register_llvmo__ArrayType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__AtomicCmpXchgInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__AtomicCmpXchgInst_O"); + Register_llvmo__AtomicCmpXchgInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__AtomicRMWInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__AtomicRMWInst_O"); + Register_llvmo__AtomicRMWInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__CallInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__CallInst_O"); + Register_llvmo__CallInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantArray_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantArray_O"); + Register_llvmo__ConstantArray_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantDataSequential_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantDataSequential_O"); + Register_llvmo__ConstantDataSequential_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantExpr_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantExpr_O"); + Register_llvmo__ConstantExpr_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantFP_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantFP_O"); + Register_llvmo__ConstantFP_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantInt_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantInt_O"); + Register_llvmo__ConstantInt_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantPointerNull_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantPointerNull_O"); + Register_llvmo__ConstantPointerNull_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__DataLayout_O(core::Lisp_sp); // base(s): set(['llvmo::ImmutablePass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__DataLayout_O"); + Register_llvmo__DataLayout_O(_lisp); // base(s): set(['llvmo::ImmutablePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FenceInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FenceInst_O"); + Register_llvmo__FenceInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__GlobalValue_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__GlobalValue_O"); + Register_llvmo__GlobalValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__LandingPadInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__LandingPadInst_O"); + Register_llvmo__LandingPadInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__PHINode_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__PHINode_O"); + Register_llvmo__PHINode_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__PointerType_O(core::Lisp_sp); // base(s): set(['llvmo::SequentialType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__PointerType_O"); + Register_llvmo__PointerType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__StoreInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__StoreInst_O"); + Register_llvmo__StoreInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__TerminatorInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__TerminatorInst_O"); + Register_llvmo__TerminatorInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__UnaryInstruction_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__UnaryInstruction_O"); + Register_llvmo__UnaryInstruction_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__UndefValue_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__UndefValue_O"); + Register_llvmo__UndefValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__VectorType_O(core::Lisp_sp); // base(s): set(['llvmo::SequentialType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__VectorType_O"); + Register_llvmo__VectorType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__AllocaInst_O(core::Lisp_sp); // base(s): set(['llvmo::UnaryInstruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__AllocaInst_O"); + Register_llvmo__AllocaInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__BranchInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__BranchInst_O"); + Register_llvmo__BranchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantDataArray_O(core::Lisp_sp); // base(s): set(['llvmo::ConstantDataSequential_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantDataArray_O"); + Register_llvmo__ConstantDataArray_O(_lisp); // base(s): set(['llvmo::ConstantDataSequential_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Function_O(core::Lisp_sp); // base(s): set(['llvmo::GlobalValue_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Function_O"); + Register_llvmo__Function_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__GlobalVariable_O(core::Lisp_sp); // base(s): set(['llvmo::GlobalValue_O']) +{_BLOCK_TRACE("initializing Register_llvmo__GlobalVariable_O"); + Register_llvmo__GlobalVariable_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IndirectBrInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IndirectBrInst_O"); + Register_llvmo__IndirectBrInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__InvokeInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__InvokeInst_O"); + Register_llvmo__InvokeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__LoadInst_O(core::Lisp_sp); // base(s): set(['llvmo::UnaryInstruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__LoadInst_O"); + Register_llvmo__LoadInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ResumeInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ResumeInst_O"); + Register_llvmo__ResumeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ReturnInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ReturnInst_O"); + Register_llvmo__ReturnInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__SwitchInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__SwitchInst_O"); + Register_llvmo__SwitchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__UnreachableInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__UnreachableInst_O"); + Register_llvmo__UnreachableInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__VAArgInst_O(core::Lisp_sp); // base(s): set(['llvmo::UnaryInstruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__VAArgInst_O"); + Register_llvmo__VAArgInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#endif // EXPOSE_TO_CANDO +#undef EXPOSE_TO_CANDO +#ifdef EXPOSE_TO_PYTHON +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__APFloat_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__APFloat_O"); + Call_exposePython_llvmo__APFloat_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__APInt_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__APInt_O"); + Call_exposePython_llvmo__APInt_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Attribute_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Attribute_O"); + Call_exposePython_llvmo__Attribute_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Builder_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Builder_O"); + Call_exposePython_llvmo__Builder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__DebugLoc_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__DebugLoc_O"); + Call_exposePython_llvmo__DebugLoc_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__EngineBuilder_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__EngineBuilder_O"); + Call_exposePython_llvmo__EngineBuilder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ExecutionEngine_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ExecutionEngine_O"); + Call_exposePython_llvmo__ExecutionEngine_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IRBuilderBase_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IRBuilderBase_O"); + Call_exposePython_llvmo__IRBuilderBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__InsertPoint_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__InsertPoint_O"); + Call_exposePython_llvmo__InsertPoint_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__LLVMContext_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__LLVMContext_O"); + Call_exposePython_llvmo__LLVMContext_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Module_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Module_O"); + Call_exposePython_llvmo__Module_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__PassManagerBase_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__PassManagerBase_O"); + Call_exposePython_llvmo__PassManagerBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Pass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Pass_O"); + Call_exposePython_llvmo__Pass_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Type_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Type_O"); + Call_exposePython_llvmo__Type_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Value_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Value_O"); + Call_exposePython_llvmo__Value_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Argument_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Argument_O"); + Call_exposePython_llvmo__Argument_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__BasicBlock_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__BasicBlock_O"); + Call_exposePython_llvmo__BasicBlock_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__CompositeType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__CompositeType_O"); + Call_exposePython_llvmo__CompositeType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FunctionPassManager_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FunctionPassManager_O"); + Call_exposePython_llvmo__FunctionPassManager_O(_lisp); // base(s): set(['llvmo::PassManagerBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FunctionPass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FunctionPass_O"); + Call_exposePython_llvmo__FunctionPass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FunctionType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FunctionType_O"); + Call_exposePython_llvmo__FunctionType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IRBuilder_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IRBuilder_O"); + Call_exposePython_llvmo__IRBuilder_O(_lisp); // base(s): set(['llvmo::IRBuilderBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IntegerType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IntegerType_O"); + Call_exposePython_llvmo__IntegerType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__MDNode_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__MDNode_O"); + Call_exposePython_llvmo__MDNode_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__MDString_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__MDString_O"); + Call_exposePython_llvmo__MDString_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ModulePass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ModulePass_O"); + Call_exposePython_llvmo__ModulePass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__User_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__User_O"); + Call_exposePython_llvmo__User_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Constant_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Constant_O"); + Call_exposePython_llvmo__Constant_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ImmutablePass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ImmutablePass_O"); + Call_exposePython_llvmo__ImmutablePass_O(_lisp); // base(s): set(['llvmo::ModulePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Instruction_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Instruction_O"); + Call_exposePython_llvmo__Instruction_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__SequentialType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__SequentialType_O"); + Call_exposePython_llvmo__SequentialType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__StructType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__StructType_O"); + Call_exposePython_llvmo__StructType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ArrayType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ArrayType_O"); + Call_exposePython_llvmo__ArrayType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__AtomicCmpXchgInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__AtomicCmpXchgInst_O"); + Call_exposePython_llvmo__AtomicCmpXchgInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__AtomicRMWInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__AtomicRMWInst_O"); + Call_exposePython_llvmo__AtomicRMWInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__CallInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__CallInst_O"); + Call_exposePython_llvmo__CallInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantArray_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantArray_O"); + Call_exposePython_llvmo__ConstantArray_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantDataSequential_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantDataSequential_O"); + Call_exposePython_llvmo__ConstantDataSequential_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantExpr_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantExpr_O"); + Call_exposePython_llvmo__ConstantExpr_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantFP_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantFP_O"); + Call_exposePython_llvmo__ConstantFP_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantInt_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantInt_O"); + Call_exposePython_llvmo__ConstantInt_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantPointerNull_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantPointerNull_O"); + Call_exposePython_llvmo__ConstantPointerNull_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__DataLayout_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__DataLayout_O"); + Call_exposePython_llvmo__DataLayout_O(_lisp); // base(s): set(['llvmo::ImmutablePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FenceInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FenceInst_O"); + Call_exposePython_llvmo__FenceInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__GlobalValue_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__GlobalValue_O"); + Call_exposePython_llvmo__GlobalValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__LandingPadInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__LandingPadInst_O"); + Call_exposePython_llvmo__LandingPadInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__PHINode_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__PHINode_O"); + Call_exposePython_llvmo__PHINode_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__PointerType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__PointerType_O"); + Call_exposePython_llvmo__PointerType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__StoreInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__StoreInst_O"); + Call_exposePython_llvmo__StoreInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__TerminatorInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__TerminatorInst_O"); + Call_exposePython_llvmo__TerminatorInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__UnaryInstruction_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__UnaryInstruction_O"); + Call_exposePython_llvmo__UnaryInstruction_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__UndefValue_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__UndefValue_O"); + Call_exposePython_llvmo__UndefValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__VectorType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__VectorType_O"); + Call_exposePython_llvmo__VectorType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__AllocaInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__AllocaInst_O"); + Call_exposePython_llvmo__AllocaInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__BranchInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__BranchInst_O"); + Call_exposePython_llvmo__BranchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantDataArray_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantDataArray_O"); + Call_exposePython_llvmo__ConstantDataArray_O(_lisp); // base(s): set(['llvmo::ConstantDataSequential_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Function_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Function_O"); + Call_exposePython_llvmo__Function_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__GlobalVariable_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__GlobalVariable_O"); + Call_exposePython_llvmo__GlobalVariable_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IndirectBrInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IndirectBrInst_O"); + Call_exposePython_llvmo__IndirectBrInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__InvokeInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__InvokeInst_O"); + Call_exposePython_llvmo__InvokeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__LoadInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__LoadInst_O"); + Call_exposePython_llvmo__LoadInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ResumeInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ResumeInst_O"); + Call_exposePython_llvmo__ResumeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ReturnInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ReturnInst_O"); + Call_exposePython_llvmo__ReturnInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__SwitchInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__SwitchInst_O"); + Call_exposePython_llvmo__SwitchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__UnreachableInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__UnreachableInst_O"); + Call_exposePython_llvmo__UnreachableInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__VAArgInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__VAArgInst_O"); + Call_exposePython_llvmo__VAArgInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#endif // EXPOSE_TO_PYTHON +#undef EXPOSE_TO_PYTHON +#undef ALL_STAGES diff --git a/samples/C++/instances.inc b/samples/C++/instances.inc new file mode 100644 index 00000000..37591cb5 --- /dev/null +++ b/samples/C++/instances.inc @@ -0,0 +1,34 @@ +#include "QPBO.h" + +#ifdef _MSC_VER +#pragma warning(disable: 4661) +#endif + +// Instantiations + +template class QPBO; +template class QPBO; +template class QPBO; + +template <> + inline void QPBO::get_type_information(char*& type_name, char*& type_format) +{ + type_name = "int"; + type_format = "d"; +} + +template <> + inline void QPBO::get_type_information(char*& type_name, char*& type_format) +{ + type_name = "float"; + type_format = "f"; +} + +template <> + inline void QPBO::get_type_information(char*& type_name, char*& type_format) +{ + type_name = "double"; + type_format = "Lf"; +} + + diff --git a/samples/C++/qsciprinter.cp b/samples/C++/qsciprinter.cp new file mode 100644 index 00000000..f30d6454 --- /dev/null +++ b/samples/C++/qsciprinter.cp @@ -0,0 +1,116 @@ +// This module defines interface to the QsciPrinter class. +// +// Copyright (c) 2011 Riverbank Computing Limited +// +// This file is part of QScintilla. +// +// This file may be used under the terms of the GNU General Public +// License versions 2.0 or 3.0 as published by the Free Software +// Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3 +// included in the packaging of this file. Alternatively you may (at +// your option) use any later version of the GNU General Public +// License if such license has been publicly approved by Riverbank +// Computing Limited (or its successors, if any) and the KDE Free Qt +// Foundation. In addition, as a special exception, Riverbank gives you +// certain additional rights. These rights are described in the Riverbank +// GPL Exception version 1.1, which can be found in the file +// GPL_EXCEPTION.txt in this package. +// +// If you are unsure which license is appropriate for your use, please +// contact the sales department at sales@riverbankcomputing.com. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +#ifndef QSCIPRINTER_H +#define QSCIPRINTER_H + +#ifdef __APPLE__ +extern "C++" { +#endif + +#include + +#include +#include + + +QT_BEGIN_NAMESPACE +class QRect; +class QPainter; +QT_END_NAMESPACE + +class QsciScintillaBase; + + +//! \brief The QsciPrinter class is a sub-class of the Qt QPrinter class that +//! is able to print the text of a Scintilla document. +//! +//! The class can be further sub-classed to alter to layout of the text, adding +//! headers and footers for example. +class QSCINTILLA_EXPORT QsciPrinter : public QPrinter +{ +public: + //! Constructs a printer paint device with mode \a mode. + QsciPrinter(PrinterMode mode = ScreenResolution); + + //! Destroys the QsciPrinter instance. + virtual ~QsciPrinter(); + + //! Format a page, by adding headers and footers for example, before the + //! document text is drawn on it. \a painter is the painter to be used to + //! add customised text and graphics. \a drawing is true if the page is + //! actually being drawn rather than being sized. \a painter drawing + //! methods must only be called when \a drawing is true. \a area is the + //! area of the page that will be used to draw the text. This should be + //! modified if it is necessary to reserve space for any customised text or + //! graphics. By default the area is relative to the printable area of the + //! page. Use QPrinter::setFullPage() because calling printRange() if you + //! want to try and print over the whole page. \a pagenr is the number of + //! the page. The first page is numbered 1. + virtual void formatPage(QPainter &painter, bool drawing, QRect &area, + int pagenr); + + //! Return the number of points to add to each font when printing. + //! + //! \sa setMagnification() + int magnification() const {return mag;} + + //! Sets the number of points to add to each font when printing to \a + //! magnification. + //! + //! \sa magnification() + virtual void setMagnification(int magnification); + + //! Print a range of lines from the Scintilla instance \a qsb. \a from is + //! the first line to print and a negative value signifies the first line + //! of text. \a to is the last line to print and a negative value + //! signifies the last line of text. true is returned if there was no + //! error. + virtual int printRange(QsciScintillaBase *qsb, int from = -1, int to = -1); + + //! Return the line wrap mode used when printing. The default is + //! QsciScintilla::WrapWord. + //! + //! \sa setWrapMode() + QsciScintilla::WrapMode wrapMode() const {return wrap;} + + //! Sets the line wrap mode used when printing to \a wmode. + //! + //! \sa wrapMode() + virtual void setWrapMode(QsciScintilla::WrapMode wmode); + +private: + int mag; + QsciScintilla::WrapMode wrap; + + QsciPrinter(const QsciPrinter &); + QsciPrinter &operator=(const QsciPrinter &); +}; + +#ifdef __APPLE__ +} +#endif + +#endif diff --git a/samples/Zephir/filenames/exception.zep.c b/samples/C/exception.zep.c similarity index 100% rename from samples/Zephir/filenames/exception.zep.c rename to samples/C/exception.zep.c diff --git a/samples/Zephir/filenames/exception.zep.h b/samples/C/exception.zep.h similarity index 100% rename from samples/Zephir/filenames/exception.zep.h rename to samples/C/exception.zep.h diff --git a/samples/C/filenames/script b/samples/C/filenames/script new file mode 100755 index 00000000..53006397 --- /dev/null +++ b/samples/C/filenames/script @@ -0,0 +1,2310 @@ +#!/usr/bin/tcc -run -lm +// +// ZyklonB scripting plugin, using a custom stack-based language +// +// Copyright 2014 Přemysl Janouch. All rights reserved. +// See the file LICENSE for licensing information. +// +// Just compile this file as usual (sans #!) if you don't feel like using TCC. +// It is a very basic and portable C99 application. It's not supposed to be +// very sophisticated, for it'd get extremely big. +// +// The main influences of the language were Factor and Joy, stripped of all +// even barely complex stuff. In its current state, it's only really useful as +// a calculator but it's got great potential for extending. +// +// If you don't like something, just change it; this is just an experiment. +// +// NOTE: it is relatively easy to abuse. Be careful. +// + +#define _XOPEN_SOURCE 500 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ADDRESS_SPACE_LIMIT (100 * 1024 * 1024) +#include + +#if defined __GNUC__ +#define ATTRIBUTE_PRINTF(x, y) __attribute__ ((format (printf, x, y))) +#else // ! __GNUC__ +#define ATTRIBUTE_PRINTF(x, y) +#endif // ! __GNUC__ + +#define N_ELEMENTS(a) (sizeof (a) / sizeof ((a)[0])) + +// --- Utilities --------------------------------------------------------------- + +static char *strdup_printf (const char *format, ...) ATTRIBUTE_PRINTF (1, 2); + +static char * +strdup_vprintf (const char *format, va_list ap) +{ + va_list aq; + va_copy (aq, ap); + int size = vsnprintf (NULL, 0, format, aq); + va_end (aq); + if (size < 0) + return NULL; + + char buf[size + 1]; + size = vsnprintf (buf, sizeof buf, format, ap); + if (size < 0) + return NULL; + + return strdup (buf); +} + +static char * +strdup_printf (const char *format, ...) +{ + va_list ap; + va_start (ap, format); + char *result = strdup_vprintf (format, ap); + va_end (ap); + return result; +} + +// --- Generic buffer ---------------------------------------------------------- + +struct buffer +{ + char *s; ///< Buffer data + size_t alloc; ///< Number of bytes allocated + size_t len; ///< Number of bytes used + bool memory_failure; ///< Memory allocation failed +}; + +#define BUFFER_INITIALIZER { NULL, 0, 0, false } + +static bool +buffer_append (struct buffer *self, const void *s, size_t n) +{ + if (self->memory_failure) + return false; + + if (!self->s) + self->s = malloc (self->alloc = 8); + while (self->len + n > self->alloc) + self->s = realloc (self->s, self->alloc <<= 1); + + if (!self->s) + { + self->memory_failure = true; + return false; + } + + memcpy (self->s + self->len, s, n); + self->len += n; + return true; +} + +inline static bool +buffer_append_c (struct buffer *self, char c) +{ + return buffer_append (self, &c, 1); +} + +// --- Data types -------------------------------------------------------------- + +enum item_type +{ + ITEM_STRING, + ITEM_WORD, + ITEM_INTEGER, + ITEM_FLOAT, + ITEM_LIST +}; + +struct item +{ +#define ITEM_HEADER \ + enum item_type type; /**< The type of this object */ \ + struct item *next; /**< Next item on the list/stack */ + + ITEM_HEADER +}; + +struct item_string +{ + ITEM_HEADER + size_t len; ///< Length of the string (sans '\0') + char value[]; ///< The null-terminated string value +}; + +#define get_string(item) \ + (assert ((item)->type == ITEM_STRING), \ + ((struct item_string *)(item))->value) + +/// It looks like a string but it doesn't quack like a string +#define item_word item_string + +#define get_word(item) \ + (assert ((item)->type == ITEM_WORD), \ + ((struct item_word *)(item))->value) + +struct item_integer +{ + ITEM_HEADER + long long value; ///< The integer value +}; + +#define get_integer(item) \ + (assert ((item)->type == ITEM_INTEGER), \ + ((struct item_integer *)(item))->value) + +struct item_float +{ + ITEM_HEADER + long double value; ///< The floating point value +}; + +#define get_float(item) \ + (assert ((item)->type == ITEM_FLOAT), \ + ((struct item_float *)(item))->value) + +struct item_list +{ + ITEM_HEADER + struct item *head; ///< The head of the list +}; + +#define get_list(item) \ + (assert ((item)->type == ITEM_LIST), \ + ((struct item_list *)(item))->head) + +#define set_list(item, head_) \ + (assert ((item)->type == ITEM_LIST), \ + item_free_list (((struct item_list *)(item))->head), \ + ((struct item_list *)(item))->head = (head_)) + +const char * +item_type_to_str (enum item_type type) +{ + switch (type) + { + case ITEM_STRING: return "string"; + case ITEM_WORD: return "word"; + case ITEM_INTEGER: return "integer"; + case ITEM_FLOAT: return "float"; + case ITEM_LIST: return "list"; + } + abort (); +} + +// --- Item management --------------------------------------------------------- + +static void item_free_list (struct item *); +static struct item *new_clone_list (const struct item *); + +static void +item_free (struct item *item) +{ + if (item->type == ITEM_LIST) + item_free_list (get_list (item)); + free (item); +} + +static void +item_free_list (struct item *item) +{ + while (item) + { + struct item *link = item; + item = item->next; + item_free (link); + } +} + +static struct item * +new_clone (const struct item *item) +{ + size_t size; + switch (item->type) + { + case ITEM_STRING: + case ITEM_WORD: + { + const struct item_string *x = (const struct item_string *) item; + size = sizeof *x + x->len + 1; + break; + } + case ITEM_INTEGER: size = sizeof (struct item_integer); break; + case ITEM_FLOAT: size = sizeof (struct item_float); break; + case ITEM_LIST: size = sizeof (struct item_list); break; + } + + struct item *clone = malloc (size); + if (!clone) + return NULL; + + memcpy (clone, item, size); + if (item->type == ITEM_LIST) + { + struct item_list *x = (struct item_list *) clone; + if (x->head && !(x->head = new_clone_list (x->head))) + { + free (clone); + return NULL; + } + } + clone->next = NULL; + return clone; +} + +static struct item * +new_clone_list (const struct item *item) +{ + struct item *head = NULL, *clone; + for (struct item **out = &head; item; item = item->next) + { + if (!(clone = *out = new_clone (item))) + { + item_free_list (head); + return NULL; + } + clone->next = NULL; + out = &clone->next; + } + return head; +} + +static struct item * +new_string (const char *s, ssize_t len) +{ + if (len < 0) + len = strlen (s); + + struct item_string *item = calloc (1, sizeof *item + len + 1); + if (!item) + return NULL; + + item->type = ITEM_STRING; + item->len = len; + memcpy (item->value, s, len); + item->value[len] = '\0'; + return (struct item *) item; +} + +static struct item * +new_word (const char *s, ssize_t len) +{ + struct item *item = new_string (s, len); + if (!item) + return NULL; + + item->type = ITEM_WORD; + return item; +} + +static struct item * +new_integer (long long value) +{ + struct item_integer *item = calloc (1, sizeof *item); + if (!item) + return NULL; + + item->type = ITEM_INTEGER; + item->value = value; + return (struct item *) item; +} + +static struct item * +new_float (long double value) +{ + struct item_float *item = calloc (1, sizeof *item); + if (!item) + return NULL; + + item->type = ITEM_FLOAT; + item->value = value; + return (struct item *) item; +} + +static struct item * +new_list (struct item *head) +{ + struct item_list *item = calloc (1, sizeof *item); + if (!item) + return NULL; + + item->type = ITEM_LIST; + item->head = head; + return (struct item *) item; +} + +// --- Parsing ----------------------------------------------------------------- + +#define PARSE_ERROR_TABLE(XX) \ + XX( OK, NULL ) \ + XX( EOF, "unexpected end of input" ) \ + XX( INVALID_HEXA_ESCAPE, "invalid hexadecimal escape sequence" ) \ + XX( INVALID_ESCAPE, "unrecognized escape sequence" ) \ + XX( MEMORY, "memory allocation failure" ) \ + XX( FLOAT_RANGE, "floating point value out of range" ) \ + XX( INTEGER_RANGE, "integer out of range" ) \ + XX( INVALID_INPUT, "invalid input" ) \ + XX( UNEXPECTED_INPUT, "unexpected input" ) + +enum tokenizer_error +{ +#define XX(x, y) PARSE_ERROR_ ## x, + PARSE_ERROR_TABLE (XX) +#undef XX + PARSE_ERROR_COUNT +}; + +struct tokenizer +{ + const char *cursor; + enum tokenizer_error error; +}; + +static bool +decode_hexa_escape (struct tokenizer *self, struct buffer *buf) +{ + int i; + char c, code = 0; + + for (i = 0; i < 2; i++) + { + c = tolower (*self->cursor); + if (c >= '0' && c <= '9') + code = (code << 4) | (c - '0'); + else if (c >= 'a' && c <= 'f') + code = (code << 4) | (c - 'a' + 10); + else + break; + + self->cursor++; + } + + if (!i) + return false; + + buffer_append_c (buf, code); + return true; +} + +static bool +decode_octal_escape (struct tokenizer *self, struct buffer *buf) +{ + int i; + char c, code = 0; + + for (i = 0; i < 3; i++) + { + c = *self->cursor; + if (c < '0' || c > '7') + break; + + code = (code << 3) | (c - '0'); + self->cursor++; + } + + if (!i) + return false; + + buffer_append_c (buf, code); + return true; +} + +static bool +decode_escape_sequence (struct tokenizer *self, struct buffer *buf) +{ + // Support some basic escape sequences from the C language + char c; + switch ((c = *self->cursor)) + { + case '\0': + self->error = PARSE_ERROR_EOF; + return false; + case 'x': + case 'X': + self->cursor++; + if (decode_hexa_escape (self, buf)) + return true; + + self->error = PARSE_ERROR_INVALID_HEXA_ESCAPE; + return false; + default: + if (decode_octal_escape (self, buf)) + return true; + + self->cursor++; + const char *from = "abfnrtv\"\\", *to = "\a\b\f\n\r\t\v\"\\", *x; + if ((x = strchr (from, c))) + { + buffer_append_c (buf, to[x - from]); + return true; + } + + self->error = PARSE_ERROR_INVALID_ESCAPE; + return false; + } +} + +static struct item * +parse_string (struct tokenizer *self) +{ + struct buffer buf = BUFFER_INITIALIZER; + struct item *item = NULL; + char c; + + while (true) + switch ((c = *self->cursor++)) + { + case '\0': + self->cursor--; + self->error = PARSE_ERROR_EOF; + goto end; + case '"': + if (buf.memory_failure + || !(item = new_string (buf.s, buf.len))) + self->error = PARSE_ERROR_MEMORY; + goto end; + case '\\': + if (decode_escape_sequence (self, &buf)) + break; + goto end; + default: + buffer_append_c (&buf, c); + } + +end: + free (buf.s); + return item; +} + +static struct item * +try_parse_number (struct tokenizer *self) +{ + // These two standard library functions can digest a lot of various inputs, + // including NaN and +/- infinity. That may get a bit confusing. + char *float_end; + errno = 0; + long double float_value = strtold (self->cursor, &float_end); + int float_errno = errno; + + char *int_end; + errno = 0; + long long int_value = strtoll (self->cursor, &int_end, 10); + int int_errno = errno; + + // If they both fail, then this is most probably not a number. + if (float_end == int_end && float_end == self->cursor) + return NULL; + + // Only use the floating point result if it parses more characters: + struct item *item; + if (float_end > int_end) + { + if (float_errno == ERANGE) + { + self->error = PARSE_ERROR_FLOAT_RANGE; + return NULL; + } + self->cursor = float_end; + if (!(item = new_float (float_value))) + self->error = PARSE_ERROR_MEMORY; + return item; + } + else + { + if (int_errno == ERANGE) + { + self->error = PARSE_ERROR_INTEGER_RANGE; + return NULL; + } + self->cursor = int_end; + if (!(item = new_integer (int_value))) + self->error = PARSE_ERROR_MEMORY; + return item; + } +} + +static struct item * +parse_word (struct tokenizer *self) +{ + struct buffer buf = BUFFER_INITIALIZER; + struct item *item = NULL; + char c; + + // Here we accept almost anything that doesn't break the grammar + while (!strchr (" []\"", (c = *self->cursor++)) && (unsigned char) c > ' ') + buffer_append_c (&buf, c); + self->cursor--; + + if (buf.memory_failure) + self->error = PARSE_ERROR_MEMORY; + else if (!buf.len) + self->error = PARSE_ERROR_INVALID_INPUT; + else if (!(item = new_word (buf.s, buf.len))) + self->error = PARSE_ERROR_MEMORY; + + free (buf.s); + return item; +} + +static struct item *parse_item_list (struct tokenizer *); + +static struct item * +parse_list (struct tokenizer *self) +{ + struct item *list = parse_item_list (self); + if (self->error) + { + assert (list == NULL); + return NULL; + } + if (!*self->cursor) + { + self->error = PARSE_ERROR_EOF; + item_free_list (list); + return NULL; + } + assert (*self->cursor == ']'); + self->cursor++; + return new_list (list); +} + +static struct item * +parse_item (struct tokenizer *self) +{ + char c; + switch ((c = *self->cursor++)) + { + case '[': return parse_list (self); + case '"': return parse_string (self); + default:; + } + + self->cursor--; + struct item *item = try_parse_number (self); + if (!item && !self->error) + item = parse_word (self); + return item; +} + +static struct item * +parse_item_list (struct tokenizer *self) +{ + struct item *head = NULL; + struct item **tail = &head; + + char c; + bool expected = true; + while ((c = *self->cursor) && c != ']') + { + if (isspace (c)) + { + self->cursor++; + expected = true; + continue; + } + else if (!expected) + { + self->error = PARSE_ERROR_UNEXPECTED_INPUT; + goto fail; + } + + if (!(*tail = parse_item (self))) + goto fail; + tail = &(*tail)->next; + expected = false; + } + return head; + +fail: + item_free_list (head); + return NULL; +} + +static struct item * +parse (const char *s, const char **error) +{ + struct tokenizer self = { .cursor = s, .error = PARSE_ERROR_OK }; + struct item *list = parse_item_list (&self); + if (!self.error && *self.cursor != '\0') + { + self.error = PARSE_ERROR_UNEXPECTED_INPUT; + item_free_list (list); + list = NULL; + } + +#define XX(x, y) y, + static const char *strings[PARSE_ERROR_COUNT] = + { PARSE_ERROR_TABLE (XX) }; +#undef XX + + static char error_buf[128]; + if (self.error && error) + { + snprintf (error_buf, sizeof error_buf, "at character %d: %s", + (int) (self.cursor - s) + 1, strings[self.error]); + *error = error_buf; + } + return list; +} + +// --- Runtime ----------------------------------------------------------------- + +// TODO: try to think of a _simple_ way to do preemptive multitasking + +struct context +{ + struct item *stack; ///< The current top of the stack + size_t stack_size; ///< Number of items on the stack + + size_t reduction_count; ///< # of function calls so far + size_t reduction_limit; ///< The hard limit on function calls + + char *error; ///< Error information + bool error_is_fatal; ///< Whether the error can be catched + bool memory_failure; ///< Memory allocation failure + + void *user_data; ///< User data +}; + +/// Internal handler for a function +typedef bool (*handler_fn) (struct context *); + +struct fn +{ + struct fn *next; ///< The next link in the chain + + handler_fn handler; ///< Internal C handler, or NULL + struct item *script; ///< Alternatively runtime code + char name[]; ///< The name of the function +}; + +struct fn *g_functions; ///< Maps words to functions + +static void +context_init (struct context *ctx) +{ + ctx->stack = NULL; + ctx->stack_size = 0; + + ctx->reduction_count = 0; + ctx->reduction_limit = 2000; + + ctx->error = NULL; + ctx->error_is_fatal = false; + ctx->memory_failure = false; + + ctx->user_data = NULL; +} + +static void +context_free (struct context *ctx) +{ + item_free_list (ctx->stack); + ctx->stack = NULL; + + free (ctx->error); + ctx->error = NULL; +} + +static bool +set_error (struct context *ctx, const char *format, ...) +{ + free (ctx->error); + + va_list ap; + va_start (ap, format); + ctx->error = strdup_vprintf (format, ap); + va_end (ap); + + if (!ctx->error) + ctx->memory_failure = true; + return false; +} + +static bool +push (struct context *ctx, struct item *item) +{ + // The `item' is typically a result from new_(), thus when it is null, + // that function must have failed. This is a shortcut for convenience. + if (!item) + { + ctx->memory_failure = true; + return false; + } + + assert (item->next == NULL); + item->next = ctx->stack; + ctx->stack = item; + ctx->stack_size++; + return true; +} + +static bool +bump_reductions (struct context *ctx) +{ + if (++ctx->reduction_count >= ctx->reduction_limit) + { + ctx->error_is_fatal = true; + return set_error (ctx, "reduction limit reached"); + } + return true; +} + +static bool execute (struct context *, struct item *); + +static bool +call_function (struct context *ctx, const char *name) +{ + struct fn *iter; + for (iter = g_functions; iter; iter = iter->next) + if (!strcmp (name, iter->name)) + goto found; + return set_error (ctx, "unknown function: %s", name); + +found: + if (!bump_reductions (ctx)) + return false; + + if (iter->handler + ? iter->handler (ctx) + : execute (ctx, iter->script)) + return true; + + // In this case, `error' is NULL + if (ctx->memory_failure) + return false; + + // This creates some form of a stack trace + char *tmp = ctx->error; + ctx->error = NULL; + set_error (ctx, "%s -> %s", name, tmp); + free (tmp); + return false; +} + +static void +free_function (struct fn *fn) +{ + item_free_list (fn->script); + free (fn); +} + +static void +unregister_function (const char *name) +{ + for (struct fn **iter = &g_functions; *iter; iter = &(*iter)->next) + if (!strcmp ((*iter)->name, name)) + { + struct fn *tmp = *iter; + *iter = tmp->next; + free_function (tmp); + break; + } +} + +static struct fn * +prepend_new_fn (const char *name) +{ + struct fn *fn = calloc (1, sizeof *fn + strlen (name) + 1); + if (!fn) + return NULL; + + strcpy (fn->name, name); + fn->next = g_functions; + return g_functions = fn; +} + +static bool +register_handler (const char *name, handler_fn handler) +{ + unregister_function (name); + struct fn *fn = prepend_new_fn (name); + if (!fn) + return false; + fn->handler = handler; + return true; +} + +static bool +register_script (const char *name, struct item *script) +{ + unregister_function (name); + struct fn *fn = prepend_new_fn (name); + if (!fn) + return false; + fn->script = script; + return true; +} + +static bool +execute (struct context *ctx, struct item *script) +{ + for (; script; script = script->next) + { + if (script->type != ITEM_WORD) + { + if (!bump_reductions (ctx) + || !push (ctx, new_clone (script))) + return false; + } + else if (!call_function (ctx, get_word (script))) + return false; + } + return true; +} + +// --- Runtime library --------------------------------------------------------- + +#define defn(name) static bool name (struct context *ctx) + +#define check_stack(n) \ + if (ctx->stack_size < n) { \ + set_error (ctx, "stack underflow"); \ + return 0; \ + } + +inline static bool +check_stack_safe (struct context *ctx, size_t n) +{ + check_stack (n); + return true; +} + +static bool +check_type (struct context *ctx, const void *item_, enum item_type type) +{ + const struct item *item = item_; + if (item->type == type) + return true; + + return set_error (ctx, "invalid type: expected `%s', got `%s'", + item_type_to_str (type), item_type_to_str (item->type)); +} + +static struct item * +pop (struct context *ctx) +{ + check_stack (1); + struct item *top = ctx->stack; + ctx->stack = top->next; + top->next = NULL; + ctx->stack_size--; + return top; +} + +// - - Types - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +#define defn_is_type(name, item_type) \ + defn (fn_is_##name) { \ + check_stack (1); \ + struct item *top = pop (ctx); \ + push (ctx, new_integer (top->type == (item_type))); \ + item_free (top); \ + return true; \ + } + +defn_is_type (string, ITEM_STRING) +defn_is_type (word, ITEM_WORD) +defn_is_type (integer, ITEM_INTEGER) +defn_is_type (float, ITEM_FLOAT) +defn_is_type (list, ITEM_LIST) + +defn (fn_to_string) +{ + check_stack (1); + struct item *item = pop (ctx); + char *value; + + switch (item->type) + { + case ITEM_WORD: + item->type = ITEM_STRING; + case ITEM_STRING: + return push (ctx, item); + + case ITEM_FLOAT: + value = strdup_printf ("%Lf", get_float (item)); + break; + case ITEM_INTEGER: + value = strdup_printf ("%lld", get_integer (item)); + break; + + default: + set_error (ctx, "cannot convert `%s' to `%s'", + item_type_to_str (item->type), item_type_to_str (ITEM_STRING)); + item_free (item); + return false; + } + + item_free (item); + if (!value) + { + ctx->memory_failure = true; + return false; + } + + item = new_string (value, -1); + free (value); + return push (ctx, item); +} + +defn (fn_to_integer) +{ + check_stack (1); + struct item *item = pop (ctx); + long long value; + + switch (item->type) + { + case ITEM_INTEGER: + return push (ctx, item); + case ITEM_FLOAT: + value = get_float (item); + break; + + case ITEM_STRING: + { + char *end; + const char *s = get_string (item); + value = strtoll (s, &end, 10); + if (end != s && *s == '\0') + break; + + item_free (item); + return set_error (ctx, "integer conversion error"); + } + + default: + set_error (ctx, "cannot convert `%s' to `%s'", + item_type_to_str (item->type), item_type_to_str (ITEM_INTEGER)); + item_free (item); + return false; + } + + item_free (item); + return push (ctx, new_integer (value)); +} + +defn (fn_to_float) +{ + check_stack (1); + struct item *item = pop (ctx); + long double value; + + switch (item->type) + { + case ITEM_FLOAT: + return push (ctx, item); + case ITEM_INTEGER: + value = get_integer (item); + break; + + case ITEM_STRING: + { + char *end; + const char *s = get_string (item); + value = strtold (s, &end); + if (end != s && *s == '\0') + break; + + item_free (item); + return set_error (ctx, "float conversion error"); + } + + default: + set_error (ctx, "cannot convert `%s' to `%s'", + item_type_to_str (item->type), item_type_to_str (ITEM_FLOAT)); + item_free (item); + return false; + } + + item_free (item); + return push (ctx, new_float (value)); +} + +// - - Miscellaneous - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_length) +{ + check_stack (1); + struct item *item = pop (ctx); + bool success = true; + switch (item->type) + { + case ITEM_STRING: + success = push (ctx, new_integer (((struct item_string *) item)->len)); + break; + case ITEM_LIST: + { + long long length = 0; + struct item *iter; + for (iter = get_list (item); iter; iter = iter->next) + length++; + success = push (ctx, new_integer (length)); + break; + } + default: + success = set_error (ctx, "invalid type"); + } + item_free (item); + return success; +} + +// - - Stack operations - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_dup) +{ + check_stack (1); + return push (ctx, new_clone (ctx->stack)); +} + +defn (fn_drop) +{ + check_stack (1); + item_free (pop (ctx)); + return true; +} + +defn (fn_swap) +{ + check_stack (2); + struct item *second = pop (ctx), *first = pop (ctx); + return push (ctx, second) && push (ctx, first); +} + +defn (fn_call) +{ + check_stack (1); + struct item *script = pop (ctx); + bool success = check_type (ctx, script, ITEM_LIST) + && execute (ctx, get_list (script)); + item_free (script); + return success; +} + +defn (fn_dip) +{ + check_stack (2); + struct item *script = pop (ctx); + struct item *item = pop (ctx); + bool success = check_type (ctx, script, ITEM_LIST) + && execute (ctx, get_list (script)); + item_free (script); + if (!success) + { + item_free (item); + return false; + } + return push (ctx, item); +} + +defn (fn_unit) +{ + check_stack (1); + struct item *item = pop (ctx); + return push (ctx, new_list (item)); +} + +defn (fn_cons) +{ + check_stack (2); + struct item *list = pop (ctx); + struct item *item = pop (ctx); + if (!check_type (ctx, list, ITEM_LIST)) + { + item_free (list); + item_free (item); + return false; + } + item->next = get_list (list); + ((struct item_list *) list)->head = item; + return push (ctx, list); +} + +defn (fn_cat) +{ + check_stack (2); + struct item *scnd = pop (ctx); + struct item *frst = pop (ctx); + if (!check_type (ctx, frst, ITEM_LIST) + || !check_type (ctx, scnd, ITEM_LIST)) + { + item_free (frst); + item_free (scnd); + return false; + } + + // XXX: we shouldn't have to do this in O(n) + struct item **tail = &((struct item_list *) frst)->head; + while (*tail) + tail = &(*tail)->next; + *tail = get_list (scnd); + + ((struct item_list *) scnd)->head = NULL; + item_free (scnd); + return push (ctx, frst); +} + +defn (fn_uncons) +{ + check_stack (1); + struct item *list = pop (ctx); + if (!check_type (ctx, list, ITEM_LIST)) + goto fail; + struct item *first = get_list (list); + if (!first) + { + set_error (ctx, "list is empty"); + goto fail; + } + ((struct item_list *) list)->head = first->next; + first->next = NULL; + return push (ctx, first) && push (ctx, list); +fail: + item_free (list); + return false; +} + +// - - Logical - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +static bool +to_boolean (struct context *ctx, struct item *item, bool *ok) +{ + switch (item->type) + { + case ITEM_STRING: + return *get_string (item) != '\0'; + case ITEM_INTEGER: + return get_integer (item) != 0; + case ITEM_FLOAT: + return get_float (item) != 0.; + default: + return (*ok = set_error (ctx, "cannot convert `%s' to boolean", + item_type_to_str (item->type))); + } +} + +defn (fn_not) +{ + check_stack (1); + struct item *item = pop (ctx); + bool ok = true; + bool result = !to_boolean (ctx, item, &ok); + item_free (item); + return ok && push (ctx, new_integer (result)); +} + +defn (fn_and) +{ + check_stack (2); + struct item *op1 = pop (ctx); + struct item *op2 = pop (ctx); + bool ok = true; + bool result = to_boolean (ctx, op1, &ok) && to_boolean (ctx, op2, &ok); + item_free (op1); + item_free (op2); + return ok && push (ctx, new_integer (result)); +} + +defn (fn_or) +{ + check_stack (2); + struct item *op1 = pop (ctx); + struct item *op2 = pop (ctx); + bool ok = true; + bool result = to_boolean (ctx, op1, &ok) + || !ok || to_boolean (ctx, op2, &ok); + item_free (op1); + item_free (op2); + return ok && push (ctx, new_integer (result)); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_if) +{ + check_stack (3); + struct item *else_ = pop (ctx); + struct item *then_ = pop (ctx); + struct item *cond_ = pop (ctx); + + bool ok = true; + bool condition = to_boolean (ctx, cond_, &ok); + item_free (cond_); + + bool success = false; + if (ok + && check_type (ctx, then_, ITEM_LIST) + && check_type (ctx, else_, ITEM_LIST)) + success = execute (ctx, condition + ? get_list (then_) + : get_list (else_)); + + item_free (then_); + item_free (else_); + return success; +} + +defn (fn_try) +{ + check_stack (2); + struct item *catch = pop (ctx); + struct item *try = pop (ctx); + bool success = false; + if (!check_type (ctx, try, ITEM_LIST) + || !check_type (ctx, catch, ITEM_LIST)) + goto fail; + + if (!execute (ctx, get_list (try))) + { + if (ctx->memory_failure || ctx->error_is_fatal) + goto fail; + + success = push (ctx, new_string (ctx->error, -1)); + free (ctx->error); + ctx->error = NULL; + + if (success) + success = execute (ctx, get_list (catch)); + } + +fail: + item_free (try); + item_free (catch); + return success; +} + +defn (fn_map) +{ + check_stack (2); + struct item *fn = pop (ctx); + struct item *list = pop (ctx); + if (!check_type (ctx, fn, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + { + item_free (fn); + item_free (list); + return false; + } + + bool success = false; + struct item *result = NULL, **tail = &result; + for (struct item *iter = get_list (list); iter; iter = iter->next) + { + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (fn)) + || !check_stack_safe (ctx, 1)) + goto fail; + + struct item *item = pop (ctx); + *tail = item; + tail = &item->next; + } + success = true; + +fail: + set_list (list, result); + item_free (fn); + if (!success) + { + item_free (list); + return false; + } + return push (ctx, list); +} + +defn (fn_filter) +{ + check_stack (2); + struct item *fn = pop (ctx); + struct item *list = pop (ctx); + if (!check_type (ctx, fn, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + { + item_free (fn); + item_free (list); + return false; + } + + bool success = false; + bool ok = true; + struct item *result = NULL, **tail = &result; + for (struct item *iter = get_list (list); iter; iter = iter->next) + { + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (fn)) + || !check_stack_safe (ctx, 1)) + goto fail; + + struct item *item = pop (ctx); + bool survived = to_boolean (ctx, item, &ok); + item_free (item); + if (!ok) + goto fail; + if (!survived) + continue; + + if (!(item = new_clone (iter))) + goto fail; + *tail = item; + tail = &item->next; + } + success = true; + +fail: + set_list (list, result); + item_free (fn); + if (!success) + { + item_free (list); + return false; + } + return push (ctx, list); +} + +defn (fn_fold) +{ + check_stack (3); + struct item *op = pop (ctx); + struct item *null = pop (ctx); + struct item *list = pop (ctx); + bool success = false; + if (!check_type (ctx, op, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + { + item_free (null); + goto fail; + } + + push (ctx, null); + for (struct item *iter = get_list (list); iter; iter = iter->next) + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (op))) + goto fail; + success = true; + +fail: + item_free (op); + item_free (list); + return success; +} + +defn (fn_each) +{ + check_stack (2); + struct item *op = pop (ctx); + struct item *list = pop (ctx); + bool success = false; + if (!check_type (ctx, op, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + goto fail; + + for (struct item *iter = get_list (list); iter; iter = iter->next) + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (op))) + goto fail; + success = true; + +fail: + item_free (op); + item_free (list); + return success; +} + +// - - Arithmetic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// XXX: why not a `struct item_string *` argument? +static bool +push_repeated_string (struct context *ctx, struct item *op1, struct item *op2) +{ + struct item_string *string = (struct item_string *) op1; + struct item_integer *repeat = (struct item_integer *) op2; + assert (string->type == ITEM_STRING); + assert (repeat->type == ITEM_INTEGER); + + if (repeat->value < 0) + return set_error (ctx, "cannot multiply a string by a negative value"); + + char *buf = NULL; + size_t len = string->len * repeat->value; + if (len < string->len && repeat->value != 0) + goto allocation_fail; + + buf = malloc (len); + if (!buf) + goto allocation_fail; + + for (size_t i = 0; i < len; i += string->len) + memcpy (buf + i, string->value, string->len); + struct item *item = new_string (buf, len); + free (buf); + return push (ctx, item); + +allocation_fail: + ctx->memory_failure = true; + return false; +} + +defn (fn_times) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) * get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) * get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) * get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) * get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_STRING) + ok = push_repeated_string (ctx, op2, op1); + else if (op1->type == ITEM_STRING && op2->type == ITEM_INTEGER) + ok = push_repeated_string (ctx, op1, op2); + else + ok = set_error (ctx, "cannot multiply `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_pow) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + // TODO: implement this properly, outputting an integer + ok = push (ctx, new_float (powl (get_integer (op1), get_integer (op2)))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (powl (get_integer (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (powl (get_float (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (powl (get_float (op1), get_integer (op2)))); + else + ok = set_error (ctx, "cannot exponentiate `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_div) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + { + if (get_integer (op2) == 0) + ok = set_error (ctx, "division by zero"); + else + ok = push (ctx, new_integer (get_integer (op1) / get_integer (op2))); + } + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) / get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) / get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) / get_integer (op2))); + else + ok = set_error (ctx, "cannot divide `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_mod) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + { + if (get_integer (op2) == 0) + ok = set_error (ctx, "division by zero"); + else + ok = push (ctx, new_integer (get_integer (op1) % get_integer (op2))); + } + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (fmodl (get_integer (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (fmodl (get_float (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (fmodl (get_float (op1), get_integer (op2)))); + else + ok = set_error (ctx, "cannot divide `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +static bool +push_concatenated_string (struct context *ctx, + struct item *op1, struct item *op2) +{ + struct item_string *s1 = (struct item_string *) op1; + struct item_string *s2 = (struct item_string *) op2; + assert (s1->type == ITEM_STRING); + assert (s2->type == ITEM_STRING); + + char *buf = NULL; + size_t len = s1->len + s2->len; + if (len < s1->len || len < s2->len) + goto allocation_fail; + + buf = malloc (len); + if (!buf) + goto allocation_fail; + + memcpy (buf, s1->value, s1->len); + memcpy (buf + s1->len, s2->value, s2->len); + struct item *item = new_string (buf, len); + free (buf); + return push (ctx, item); + +allocation_fail: + ctx->memory_failure = true; + return false; + +} + +defn (fn_plus) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) + get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) + get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) + get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) + get_integer (op2))); + else if (op1->type == ITEM_STRING && op2->type == ITEM_STRING) + ok = push_concatenated_string (ctx, op1, op2); + else + ok = set_error (ctx, "cannot add `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_minus) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) - get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) - get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) - get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) - get_integer (op2))); + else + ok = set_error (ctx, "cannot subtract `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +// - - Comparison - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +static int +compare_strings (struct item_string *s1, struct item_string *s2) +{ + // XXX: not entirely correct wrt. null bytes + size_t len = (s1->len < s2->len ? s1->len : s2->len) + 1; + return memcmp (s1->value, s2->value, len); +} + +static bool compare_lists (struct item *, struct item *); + +static bool +compare_list_items (struct item *op1, struct item *op2) +{ + if (op1->type != op2->type) + return false; + + switch (op1->type) + { + case ITEM_STRING: + case ITEM_WORD: + return !compare_strings ((struct item_string *) op1, + (struct item_string *) op2); + case ITEM_FLOAT: + return get_float (op1) == get_float (op2); + case ITEM_INTEGER: + return get_integer (op1) == get_integer (op2); + case ITEM_LIST: + return compare_lists (get_list (op1), get_list (op2)); + } + abort (); +} + +static bool +compare_lists (struct item *op1, struct item *op2) +{ + while (op1 && op2) + { + if (!compare_list_items (op1, op2)) + return false; + + op1 = op1->next; + op2 = op2->next; + } + return !op1 && !op2; +} + +defn (fn_eq) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) == get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_integer (op1) == get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_float (op1) == get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_float (op1) == get_integer (op2))); + else if (op1->type == ITEM_LIST && op2->type == ITEM_LIST) + ok = push (ctx, new_integer (compare_lists + (get_list (op1), get_list (op2)))); + else if (op1->type == ITEM_STRING && op2->type == ITEM_STRING) + ok = push (ctx, new_integer (compare_strings + ((struct item_string *)(op1), (struct item_string *)(op2)) == 0)); + else + ok = set_error (ctx, "cannot compare `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_lt) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) < get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_integer (op1) < get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_float (op1) < get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_float (op1) < get_integer (op2))); + else if (op1->type == ITEM_STRING && op2->type == ITEM_STRING) + ok = push (ctx, new_integer (compare_strings + ((struct item_string *)(op1), (struct item_string *)(op2)) < 0)); + else + ok = set_error (ctx, "cannot compare `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +// - - Utilities - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_rand) +{ + return push (ctx, new_float ((long double) rand () + / ((long double) RAND_MAX + 1))); +} + +defn (fn_time) +{ + return push (ctx, new_integer (time (NULL))); +} + +// XXX: this is a bit too constrained; combines strftime() with gmtime() +defn (fn_strftime) +{ + check_stack (2); + struct item *format = pop (ctx); + struct item *time_ = pop (ctx); + bool success = false; + if (!check_type (ctx, time_, ITEM_INTEGER) + || !check_type (ctx, format, ITEM_STRING)) + goto fail; + + if (get_integer (time_) < 0) + { + set_error (ctx, "invalid time value"); + goto fail; + } + + char buf[128]; + time_t time__ = get_integer (time_); + struct tm tm; + gmtime_r (&time__, &tm); + buf[strftime (buf, sizeof buf, get_string (format), &tm)] = '\0'; + success = push (ctx, new_string (buf, -1)); + +fail: + item_free (time_); + item_free (format); + return success; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +static void item_list_to_str (const struct item *, struct buffer *); + +static void +string_to_str (const struct item_string *string, struct buffer *buf) +{ + buffer_append_c (buf, '"'); + for (size_t i = 0; i < string->len; i++) + { + char c = string->value[i]; + if (c == '\n') buffer_append (buf, "\\n", 2); + else if (c == '\r') buffer_append (buf, "\\r", 2); + else if (c == '\t') buffer_append (buf, "\\t", 2); + else if (!isprint (c)) + { + char tmp[8]; + snprintf (tmp, sizeof tmp, "\\x%02x", (unsigned char) c); + buffer_append (buf, tmp, strlen (tmp)); + } + else if (c == '\\') buffer_append (buf, "\\\\", 2); + else if (c == '"') buffer_append (buf, "\\\"", 2); + else buffer_append_c (buf, c); + } + buffer_append_c (buf, '"'); +} + +static void +item_to_str (const struct item *item, struct buffer *buf) +{ + switch (item->type) + { + char *x; + case ITEM_STRING: + string_to_str ((struct item_string *) item, buf); + break; + case ITEM_WORD: + { + struct item_word *word = (struct item_word *) item; + buffer_append (buf, word->value, word->len); + break; + } + case ITEM_INTEGER: + if (!(x = strdup_printf ("%lld", get_integer (item)))) + goto alloc_failure; + buffer_append (buf, x, strlen (x)); + free (x); + break; + case ITEM_FLOAT: + if (!(x = strdup_printf ("%Lf", get_float (item)))) + goto alloc_failure; + buffer_append (buf, x, strlen (x)); + free (x); + break; + case ITEM_LIST: + buffer_append_c (buf, '['); + item_list_to_str (get_list (item), buf); + buffer_append_c (buf, ']'); + break; + } + return; + +alloc_failure: + // This is a bit hackish but it simplifies stuff + buf->memory_failure = true; + free (buf->s); + buf->s = NULL; +} + +static void +item_list_to_str (const struct item *script, struct buffer *buf) +{ + if (!script) + return; + + item_to_str (script, buf); + while ((script = script->next)) + { + buffer_append_c (buf, ' '); + item_to_str (script, buf); + } +} + +// --- IRC protocol ------------------------------------------------------------ + +struct message +{ + char *prefix; ///< Message prefix + char *command; ///< IRC command + char *params[16]; ///< Command parameters (0-terminated) + size_t n_params; ///< Number of parameters present +}; + +inline static char * +cut_word (char **s) +{ + char *start = *s, *end = *s + strcspn (*s, " "); + *s = end + strspn (end, " "); + *end = '\0'; + return start; +} + +static bool +parse_message (char *s, struct message *msg) +{ + memset (msg, 0, sizeof *msg); + + // Ignore IRC 3.2 message tags, if present + if (*s == '@') + { + s += strcspn (s, " "); + s += strspn (s, " "); + } + + // Prefix + if (*s == ':') + msg->prefix = cut_word (&s) + 1; + + // Command + if (!*(msg->command = cut_word (&s))) + return false; + + // Parameters + while (*s) + { + size_t n = msg->n_params++; + if (msg->n_params >= N_ELEMENTS (msg->params)) + return false; + if (*s == ':') + { + msg->params[n] = ++s; + break; + } + msg->params[n] = cut_word (&s); + } + return true; +} + +static struct message * +read_message (void) +{ + static bool discard = false; + static char buf[1025]; + static struct message msg; + + bool discard_this; + do + { + if (!fgets (buf, sizeof buf, stdin)) + return NULL; + size_t len = strlen (buf); + + // Just to be on the safe side, if the line overflows our buffer, + // ignore everything up until the next line. + discard_this = discard; + if (len >= 2 && !strcmp (buf + len - 2, "\r\n")) + { + buf[len -= 2] = '\0'; + discard = false; + } + else + discard = true; + } + // Invalid messages are silently ignored + while (discard_this || !parse_message (buf, &msg)); + return &msg; +} + +// --- Interfacing with the bot ------------------------------------------------ + +#define BOT_PRINT "ZYKLONB print :script: " + +static const char * +get_config (const char *key) +{ + printf ("ZYKLONB get_config :%s\r\n", key); + struct message *msg = read_message (); + if (!msg || msg->n_params <= 0) + exit (EXIT_FAILURE); + return msg->params[0]; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// TODO: implement more functions; try to avoid writing them in C + +static bool +init_runtime_library_scripts (void) +{ + bool ok = true; + + // It's much cheaper (and more fun) to define functions in terms of other + // ones. The "unit tests" serve a secondary purpose of showing the usage. + struct script + { + const char *name; ///< Name of the function + const char *definition; ///< The defining script + const char *unit_test; ///< Trivial unit test, must return 1 + } + scripts[] = + { + { "nip", "swap drop", "1 2 nip 2 =" }, + { "over", "[dup] dip swap", "1 2 over nip nip 1 =" }, + { "swons", "swap cons", "[2] 1 swons [1 2] =" }, + { "first", "uncons drop", "[1 2 3] first 1 =" }, + { "rest", "uncons swap drop", "[1 2 3] rest [2 3] =" }, + { "reverse", "[] swap [swap cons] each", "[1 2] reverse [2 1] =" }, + { "curry", "cons", "1 2 [+] curry call 3 =" }, + + { "xor", "not swap not + 1 =", "1 1 xor 0 =" }, + { "min", "over over < [drop] [nip] if", "1 2 min 1 =" }, + { "max", "over over > [drop] [nip] if", "1 2 max 2 =" }, + + { "all?", "[and] cat 1 swap fold", "[3 4 5] [> 3] all? 0 =" }, + { "any?", "[or] cat 0 swap fold", "[3 4 5] [> 3] any? 1 =" }, + + { ">", "swap <", "1 2 > 0 =" }, + { "!=", "= not", "1 2 != 1 =" }, + { "<=", "> not", "1 2 <= 1 =" }, + { ">=", "< not", "1 2 >= 0 =" }, + + // XXX: this is a bit crazy and does not work with an empty list + { "join", "[uncons] dip swap [[dup] dip swap [+ +] dip] each drop", + "[1 2 3] [>string] map \" -> \" join \"1 -> 2 -> 3\" =" }, + }; + + for (size_t i = 0; i < N_ELEMENTS (scripts); i++) + { + const char *error = NULL; + struct item *script = parse (scripts[i].definition, &error); + if (error) + { + printf (BOT_PRINT "error parsing internal script `%s': %s\r\n", + scripts[i].definition, error); + ok = false; + } + else + ok &= register_script (scripts[i].name, script); + } + + struct context ctx; + for (size_t i = 0; i < N_ELEMENTS (scripts); i++) + { + const char *error = NULL; + struct item *script = parse (scripts[i].unit_test, &error); + if (error) + { + printf (BOT_PRINT "error parsing unit test for `%s': %s\r\n", + scripts[i].name, error); + ok = false; + continue; + } + context_init (&ctx); + execute (&ctx, script); + item_free_list (script); + + const char *failure = NULL; + if (ctx.memory_failure) + failure = "memory allocation failure"; + else if (ctx.error) + failure = ctx.error; + else if (ctx.stack_size != 1) + failure = "too many results on the stack"; + else if (ctx.stack->type != ITEM_INTEGER) + failure = "result is not an integer"; + else if (get_integer (ctx.stack) != 1) + failure = "wrong test result"; + if (failure) + { + printf (BOT_PRINT "error executing unit test for `%s': %s\r\n", + scripts[i].name, failure); + ok = false; + } + context_free (&ctx); + } + return ok; +} + +static bool +init_runtime_library (void) +{ + bool ok = true; + + // Type detection + ok &= register_handler ("string?", fn_is_string); + ok &= register_handler ("word?", fn_is_word); + ok &= register_handler ("integer?", fn_is_integer); + ok &= register_handler ("float?", fn_is_float); + ok &= register_handler ("list?", fn_is_list); + + // Type conversion + ok &= register_handler (">string", fn_to_string); + ok &= register_handler (">integer", fn_to_integer); + ok &= register_handler (">float", fn_to_float); + + // Miscellaneous + ok &= register_handler ("length", fn_length); + + // Basic stack manipulation + ok &= register_handler ("dup", fn_dup); + ok &= register_handler ("drop", fn_drop); + ok &= register_handler ("swap", fn_swap); + + // Calling stuff + ok &= register_handler ("call", fn_call); + ok &= register_handler ("dip", fn_dip); + + // Control flow + ok &= register_handler ("if", fn_if); + ok &= register_handler ("try", fn_try); + + // List processing + ok &= register_handler ("map", fn_map); + ok &= register_handler ("filter", fn_filter); + ok &= register_handler ("fold", fn_fold); + ok &= register_handler ("each", fn_each); + + // List manipulation + ok &= register_handler ("unit", fn_unit); + ok &= register_handler ("cons", fn_cons); + ok &= register_handler ("cat", fn_cat); + ok &= register_handler ("uncons", fn_uncons); + + // Arithmetic operations + ok &= register_handler ("+", fn_plus); + ok &= register_handler ("-", fn_minus); + ok &= register_handler ("*", fn_times); + ok &= register_handler ("^", fn_pow); + ok &= register_handler ("/", fn_div); + ok &= register_handler ("%", fn_mod); + + // Comparison + ok &= register_handler ("=", fn_eq); + ok &= register_handler ("<", fn_lt); + + // Logical operations + ok &= register_handler ("not", fn_not); + ok &= register_handler ("and", fn_and); + ok &= register_handler ("or", fn_or); + + // Utilities + ok &= register_handler ("rand", fn_rand); + ok &= register_handler ("time", fn_time); + ok &= register_handler ("strftime", fn_strftime); + + ok &= init_runtime_library_scripts (); + return ok; +} + +static void +free_runtime_library (void) +{ + struct fn *next, *iter; + for (iter = g_functions; iter; iter = next) + { + next = iter->next; + free_function (iter); + } +} + +// --- Function database ------------------------------------------------------- + +// TODO: a global variable storing the various procedures (db) +// XXX: defining procedures would ideally need some kind of an ACL + +static void +read_db (void) +{ + // TODO +} + +static void +write_db (void) +{ + // TODO +} + +// --- Main -------------------------------------------------------------------- + +static char *g_prefix; + +struct user_info +{ + char *ctx; ///< Context: channel or user + char *ctx_quote; ///< Reply quotation +}; + +defn (fn_dot) +{ + check_stack (1); + struct item *item = pop (ctx); + struct user_info *info = ctx->user_data; + + struct buffer buf = BUFFER_INITIALIZER; + item_to_str (item, &buf); + item_free (item); + buffer_append_c (&buf, '\0'); + if (buf.memory_failure) + { + ctx->memory_failure = true; + return false; + } + + if (buf.len > 255) + buf.s[255] = '\0'; + + printf ("PRIVMSG %s :%s%s\r\n", info->ctx, info->ctx_quote, buf.s); + free (buf.s); + return true; +} + +static void +process_message (struct message *msg) +{ + if (!msg->prefix + || strcasecmp (msg->command, "PRIVMSG") + || msg->n_params < 2) + return; + char *line = msg->params[1]; + + // Filter out only our commands + size_t prefix_len = strlen (g_prefix); + if (strncmp (line, g_prefix, prefix_len)) + return; + line += prefix_len; + + char *command = cut_word (&line); + if (strcasecmp (command, "script")) + return; + + // Retrieve information on how to respond back + char *msg_ctx = msg->prefix, *x; + if ((x = strchr (msg_ctx, '!'))) + *x = '\0'; + + char *msg_ctx_quote; + if (strchr ("#+&!", *msg->params[0])) + { + msg_ctx_quote = strdup_printf ("%s: ", msg_ctx); + msg_ctx = msg->params[0]; + } + else + msg_ctx_quote = strdup (""); + + if (!msg_ctx_quote) + { + printf (BOT_PRINT "%s\r\n", "memory allocation failure"); + return; + } + + struct user_info info; + info.ctx = msg_ctx; + info.ctx_quote = msg_ctx_quote; + + // Finally parse and execute the macro + const char *error = NULL; + struct item *script = parse (line, &error); + if (error) + { + printf ("PRIVMSG %s :%s%s: %s\r\n", + msg_ctx, msg_ctx_quote, "parse error", error); + goto end; + } + + struct context ctx; + context_init (&ctx); + ctx.user_data = &info; + execute (&ctx, script); + item_free_list (script); + + const char *failure = NULL; + if (ctx.memory_failure) + failure = "memory allocation failure"; + else if (ctx.error) + failure = ctx.error; + if (failure) + printf ("PRIVMSG %s :%s%s: %s\r\n", + msg_ctx, msg_ctx_quote, "runtime error", failure); + context_free (&ctx); +end: + free (msg_ctx_quote); +} + +int +main (int argc, char *argv[]) +{ + freopen (NULL, "rb", stdin); setvbuf (stdin, NULL, _IOLBF, BUFSIZ); + freopen (NULL, "wb", stdout); setvbuf (stdout, NULL, _IOLBF, BUFSIZ); + + struct rlimit limit = + { + .rlim_cur = ADDRESS_SPACE_LIMIT, + .rlim_max = ADDRESS_SPACE_LIMIT + }; + + // Lower the memory limits to something sensible to prevent abuse + (void) setrlimit (RLIMIT_AS, &limit); + + read_db (); + if (!init_runtime_library () + || !register_handler (".", fn_dot)) + printf (BOT_PRINT "%s\r\n", "runtime library initialization failed"); + + g_prefix = strdup (get_config ("prefix")); + printf ("ZYKLONB register\r\n"); + struct message *msg; + while ((msg = read_message ())) + process_message (msg); + + free_runtime_library (); + free (g_prefix); + return 0; +} + diff --git a/samples/C/pqiv.h b/samples/C/pqiv.h new file mode 100644 index 00000000..ea535125 --- /dev/null +++ b/samples/C/pqiv.h @@ -0,0 +1,166 @@ +/** + * pqiv + * + * Copyright (c) 2013-2014, Phillip Berndt + * + * 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 3 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, see . + * + */ + +// This file contains the definition of files, image types and +// the plugin infrastructure. It should be included in file type +// handlers. + +#ifndef _PQIV_H_INCLUDED +#define _PQIV_H_INCLUDED + +#include +#include +#include +#include "lib/bostree.h" + +#ifndef PQIV_VERSION +#define PQIV_VERSION "2.3" +#endif + +#define FILE_FLAGS_ANIMATION (guint)(1) +#define FILE_FLAGS_MEMORY_IMAGE (guint)(1<<1) + +// The structure for images {{{ +typedef struct file_type_handler_struct_t file_type_handler_t; +typedef struct { + // File type + const file_type_handler_t *file_type; + + // Special flags + // FILE_FLAGS_ANIMATION -> Animation functions are invoked + // Set by file type handlers + // FILE_FLAGS_MEMORY_IMAGE -> File lives in memory + guint file_flags; + + // The file name to display and to sort by + gchar *display_name; + + // The URI or file name of the file + gchar *file_name; + + // If the file is a memory image, the actual image data + GBytes *file_data; + + // The file monitor structure is used for inotify-watching of + // the files + GFileMonitor *file_monitor; + + // This flag stores whether this image is currently loaded + // and valid. i.e. if it is set, you can assume that + // private_data contains a representation of the image; + // if not, you can NOT assume that it does not. + gboolean is_loaded; + + // Cached image size + guint width; + guint height; + + // File-type specific data, allocated and freed by the file type handlers + void *private; +} file_t; +// }}} +// Definition of the built-in file types {{{ + +// If you want to implement your own file type, you'll have to implement the +// following functions and a non-static initialization function named +// file_type_NAME_initializer that fills a file_type_handler_t with pointers to +// the functions. Store the file in backends/NAME.c and adjust the Makefile to +// add the required libraries if your backend is listed in the $(BACKENDS) +// variable. + +typedef enum { PARAMETER, RECURSION, INOTIFY, BROWSE_ORIGINAL_PARAMETER, FILTER_OUTPUT } load_images_state_t; +// Allocation function: Allocate the ->private structure within a file and add the +// image(s) to the list of available images via load_images_handle_parameter_add_file() +// If an image is not to be loaded for any reason, the file structure should be +// deallocated using file_free() +// Returns a pointer to the first added image +// Optional, you can also set the pointer to this function to NULL. +typedef BOSNode *(*file_type_alloc_fn_t)(load_images_state_t state, file_t *file); + +// Deallocation, if a file is removed from the images list. Free the ->private structure. +// Only called if ->private is non-NULL. +typedef void (*file_type_free_fn_t)(file_t *file); + +// Actually load a file into memory +typedef void (*file_type_load_fn_t)(file_t *file, GInputStream *data, GError **error_pointer); + +// Unload a file +typedef void (*file_type_unload_fn_t)(file_t *file); + +// Animation support: Initialize memory for animations, return ms until first frame +// Optional, you can also set the pointer to this function to NULL. +typedef double (*file_type_animation_initialize_fn_t)(file_t *file); + +// Animation support: Advance to the next frame, return ms until next frame +// Optional, you can also set the pointer to this function to NULL. +typedef double (*file_type_animation_next_frame_fn_t)(file_t *file); + +// Draw the current view to a cairo context +typedef void (*file_type_draw_fn_t)(file_t *file, cairo_t *cr); + +struct file_type_handler_struct_t { + // All files will be filtered with this filter. If it lets it pass, + // a handler is assigned to a file. If none do, the file is + // discarded if it was found during directory traversal or + // loaded using the first image backend if it was an explicit + // parameter. + GtkFileFilter *file_types_handled; + + // Pointers to the functions defined above + file_type_alloc_fn_t alloc_fn; + file_type_free_fn_t free_fn; + file_type_load_fn_t load_fn; + file_type_unload_fn_t unload_fn; + file_type_animation_initialize_fn_t animation_initialize_fn; + file_type_animation_next_frame_fn_t animation_next_frame_fn; + file_type_draw_fn_t draw_fn; +}; + +// Initialization function: Tell pqiv about a backend +typedef void (*file_type_initializer_fn_t)(file_type_handler_t *info); + +// pqiv symbols available to plugins {{{ + +// Global cancellable that should be used for every i/o operation +extern GCancellable *image_loader_cancellable; + +// Current scale level. For backends that don't support cairo natively. +extern gdouble current_scale_level; + +// Load a file from disc/memory/network +GInputStream *image_loader_stream_file(file_t *file, GError **error_pointer); + +// Add a file to the list of loaded files +// Should be called at least once in a file_type_alloc_fn_t, with the state being +// forwarded unaltered. +BOSNode *load_images_handle_parameter_add_file(load_images_state_t state, file_t *file); + +// Load all data from an input stream into memory, conveinience function +GBytes *g_input_stream_read_completely(GInputStream *input_stream, GCancellable *cancellable, GError **error_pointer); + +// Free a file +void file_free(file_t *file); + +// }}} + +// File type handlers, used in the initializer and file type guessing +extern file_type_handler_t file_type_handlers[]; + +/* }}} */ + +#endif diff --git a/samples/CLIPS/demo.clp b/samples/CLIPS/demo.clp new file mode 100644 index 00000000..45cb4828 --- /dev/null +++ b/samples/CLIPS/demo.clp @@ -0,0 +1,343 @@ +;;;*************************** +;;;* DEFFACTS KNOWLEDGE BASE * +;;;*************************** + +(deffacts MAIN::knowledge-base + (welcome (message WelcomeMessage)) + (goal (variable type.animal)) + (legalanswers (values yes no)) + (displayanswers (values "Yes" "No")) + (rule (if backbone is yes) + (then superphylum is backbone)) + (rule (if backbone is no) + (then superphylum is jellyback)) + (question (variable backbone) + (query backbone.query)) + (rule (if superphylum is backbone and + warm.blooded is yes) + (then phylum is warm)) + (rule (if superphylum is backbone and + warm.blooded is no) + (then phylum is cold)) + (question (variable warm.blooded) + (query warm.blooded.query)) + (rule (if superphylum is jellyback and + live.prime.in.soil is yes) + (then phylum is soil)) + (rule (if superphylum is jellyback and + live.prime.in.soil is no) + (then phylum is elsewhere)) + (question (variable live.prime.in.soil) + (query live.prime.in.soil.query)) + (rule (if phylum is warm and + has.breasts is yes) + (then class is breasts)) + (rule (if phylum is warm and + has.breasts is no) + (then type.animal is bird)) + (question (variable has.breasts) + (query has.breasts.query)) + (rule (if phylum is cold and + always.in.water is yes) + (then class is water)) + (rule (if phylum is cold and + always.in.water is no) + (then class is dry)) + (question (variable always.in.water) + (query always.in.water.query)) + (rule (if phylum is soil and + flat.bodied is yes) + (then type.animal is flatworm)) + (rule (if phylum is soil and + flat.bodied is no) + (then type.animal is worm.leech)) + (question (variable flat.bodied) + (query flat.bodied.query)) + (rule (if phylum is elsewhere and + body.in.segments is yes) + (then class is segments)) + (rule (if phylum is elsewhere and + body.in.segments is no) + (then class is unified)) + (question (variable body.in.segments) + (query body.in.segments.query)) + (rule (if class is breasts and + can.eat.meat is yes) + (then order is meat)) + (rule (if class is breasts and + can.eat.meat is no) + (then order is vegy)) + (question (variable can.eat.meat) + (query can.eat.meat.query)) + (rule (if class is water and + boney is yes) + (then type.animal is fish)) + (rule (if class is water and + boney is no) + (then type.animal is shark.ray)) + (question (variable boney) + (query boney.query)) + (rule (if class is dry and + scaly is yes) + (then order is scales)) + (rule (if class is dry and + scaly is no) + (then order is soft)) + (question (variable scaly) + (query scaly.query)) + (rule (if class is segments and + shell is yes) + (then order is shell)) + (rule (if class is segments and + shell is no) + (then type.animal is centipede.millipede.insect)) + (question (variable shell) + (query shell.query)) + (rule (if class is unified and + digest.cells is yes) + (then order is cells)) + (rule (if class is unified and + digest.cells is no) + (then order is stomach)) + (question (variable digest.cells) + (query digest.cells.query)) + (rule (if order is meat and + fly is yes) + (then type.animal is bat)) + (rule (if order is meat and + fly is no) + (then family is nowings)) + (question (variable fly) + (query fly.query)) + (rule (if order is vegy and + hooves is yes) + (then family is hooves)) + (rule (if order is vegy and + hooves is no) + (then family is feet)) + (question (variable hooves) + (query hooves.query)) + (rule (if order is scales and + rounded.shell is yes) + (then type.animal is turtle)) + (rule (if order is scales and + rounded.shell is no) + (then family is noshell)) + (question (variable rounded.shell) + (query rounded.shell.query)) + (rule (if order is soft and + jump is yes) + (then type.animal is frog)) + (rule (if order is soft and + jump is no) + (then type.animal is salamander)) + (question (variable jump) + (query jump.query)) + (rule (if order is shell and + tail is yes) + (then type.animal is lobster)) + (rule (if order is shell and + tail is no) + (then type.animal is crab)) + (question (variable tail) + (query tail.query)) + (rule (if order is cells and + stationary is yes) + (then family is stationary)) + (rule (if order is cells and + stationary is no) + (then type.animal is jellyfish)) + (question (variable stationary) + (query stationary.query)) + (rule (if order is stomach and + multicelled is yes) + (then family is multicelled)) + (rule (if order is stomach and + multicelled is no) + (then type.animal is protozoa)) + (question (variable multicelled) + (query multicelled.query)) + (rule (if family is nowings and + opposing.thumb is yes) + (then genus is thumb)) + (rule (if family is nowings and + opposing.thumb is no) + (then genus is nothumb)) + (question (variable opposing.thumb) + (query opposing.thumb.query)) + (rule (if family is hooves and + two.toes is yes) + (then genus is twotoes)) + (rule (if family is hooves and + two.toes is no) + (then genus is onetoe)) + (question (variable two.toes) + (query two.toes.query)) + (rule (if family is feet and + live.in.water is yes) + (then genus is water)) + (rule (if family is feet and + live.in.water is no) + (then genus is dry)) + (question (variable live.in.water) + (query live.in.water.query)) + (rule (if family is noshell and + limbs is yes) + (then type.animal is crocodile.alligator)) + (rule (if family is noshell and + limbs is no) + (then type.animal is snake)) + (question (variable limbs) + (query limbs.query)) + (rule (if family is stationary and + spikes is yes) + (then type.animal is sea.anemone)) + (rule (if family is stationary and + spikes is no) + (then type.animal is coral.sponge)) + (question (variable spikes) + (query spikes.query)) + (rule (if family is multicelled and + spiral.shell is yes) + (then type.animal is snail)) + (rule (if family is multicelled and + spiral.shell is no) + (then genus is noshell)) + (question (variable spiral.shell) + (query spiral.shell.query)) + (rule (if genus is thumb and + prehensile.tail is yes) + (then type.animal is monkey)) + (rule (if genus is thumb and + prehensile.tail is no) + (then species is notail)) + (question (variable prehensile.tail) + (query prehensile.tail.query)) + (rule (if genus is nothumb and + over.400 is yes) + (then species is 400)) + (rule (if genus is nothumb and + over.400 is no) + (then species is under400)) + (question (variable over.400) + (query over.400.query)) + (rule (if genus is twotoes and + horns is yes) + (then species is horns)) + (rule (if genus is twotoes and + horns is no) + (then species is nohorns)) + (question (variable horns) + (query horns.query)) + (rule (if genus is onetoe and + plating is yes) + (then type.animal is rhinoceros)) + (rule (if genus is onetoe and + plating is no) + (then type.animal is horse.zebra)) + (question (variable plating) + (query plating.query)) + (rule (if genus is water and + hunted is yes) + (then type.animal is whale)) + (rule (if genus is water and + hunted is no) + (then type.animal is dolphin.porpoise)) + (question (variable hunted) + (query hunted.query)) + (rule (if genus is dry and + front.teeth is yes) + (then species is teeth)) + (rule (if genus is dry and + front.teeth is no) + (then species is noteeth)) + (question (variable front.teeth) + (query front.teeth.query)) + (rule (if genus is noshell and + bivalve is yes) + (then type.animal is clam.oyster)) + (rule (if genus is noshell and + bivalve is no) + (then type.animal is squid.octopus)) + (question (variable bivalve) + (query bivalve.query)) + (rule (if species is notail and + nearly.hairless is yes) + (then type.animal is man)) + (rule (if species is notail and + nearly.hairless is no) + (then subspecies is hair)) + (question (variable nearly.hairless) + (query nearly.hairless.query)) + (rule (if species is 400 and + land.based is yes) + (then type.animal is bear.tiger.lion)) + (rule (if species is 400 and + land.based is no) + (then type.animal is walrus)) + (question (variable land.based) + (query land.based.query)) + (rule (if species is under400 and + thintail is yes) + (then type.animal is cat)) + (rule (if species is under400 and + thintail is no) + (then type.animal is coyote.wolf.fox.dog)) + (question (variable thintail) + (query thintail.query)) + (rule (if species is nohorns and + lives.in.desert is yes) + (then type.animal is camel)) + (rule (if species is nohorns and + lives.in.desert is no and + semi.aquatic is no) + (then type.animal is giraffe)) + (rule (if species is nohorns and + lives.in.desert is no and + semi.aquatic is yes) + (then type.animal is hippopotamus)) + (question (variable lives.in.desert) + (query lives.in.desert.query)) + (question (variable semi.aquatic) + (query semi.aquatic.query)) + (rule (if species is teeth and + large.ears is yes) + (then type.animal is rabbit)) + (rule (if species is teeth and + large.ears is no) + (then type.animal is rat.mouse.squirrel.beaver.porcupine)) + (question (variable large.ears) + (query large.ears.query)) + (rule (if species is noteeth and + pouch is yes) + (then type.animal is kangaroo.koala.bear)) + (rule (if species is noteeth and + pouch is no) + (then type.animal is mole.shrew.elephant)) + (question (variable pouch) + (query pouch.query)) + (rule (if subspecies is hair and + long.powerful.arms is yes) + (then type.animal is orangutan.gorilla.chimpanzee)) + (rule (if subspecies is hair and + long.powerful.arms is no) + (then type.animal is baboon)) + (question (variable long.powerful.arms) + (query long.powerful.arms.query)) + (rule (if species is horns and + fleece is yes) + (then type.animal is sheep.goat)) + (rule (if species is horns and + fleece is no) + (then subsubspecies is nofleece)) + (question (variable fleece) + (query fleece.query)) + (rule (if subsubspecies is nofleece and + domesticated is yes) + (then type.animal is cow)) + (rule (if subsubspecies is nofleece and + domesticated is no) + (then type.animal is deer.moose.antelope)) + (question (variable domesticated) + (query domesticated.query)) + (answer (prefix "I think your animal is a ") (variable type.animal) (postfix "."))) diff --git a/samples/CLIPS/sudoku.clp b/samples/CLIPS/sudoku.clp new file mode 100644 index 00000000..cbdbb92d --- /dev/null +++ b/samples/CLIPS/sudoku.clp @@ -0,0 +1,281 @@ +;;; http://www.angusj.com/sudoku/hints +;;; http://www.scanraid.com/BasicStrategies.htm +;;; http://www.sudokuoftheday.com/pages/techniques-overview +;;; http://www.sudokuonline.us/sudoku_solving_techniques +;;; http://www.sadmansoftware.com/sudoku/techniques.htm +;;; http://www.krazydad.com/blog/2005/09/29/an-index-of-sudoku-strategies/ + +;;; ####################### +;;; DEFTEMPLATES & DEFFACTS +;;; ####################### + +(deftemplate possible + (slot row) + (slot column) + (slot value) + (slot group) + (slot id)) + +(deftemplate impossible + (slot id) + (slot value) + (slot priority) + (slot reason)) + +(deftemplate technique-employed + (slot reason) + (slot priority)) + +(deftemplate technique + (slot name) + (slot priority)) + +(deffacts startup + (phase grid-values)) + +(deftemplate size-value + (slot size) + (slot value)) + +(deffacts values + (size-value (size 1) (value 1)) + (size-value (size 2) (value 2)) + (size-value (size 2) (value 3)) + (size-value (size 2) (value 4)) + (size-value (size 3) (value 5)) + (size-value (size 3) (value 6)) + (size-value (size 3) (value 7)) + (size-value (size 3) (value 8)) + (size-value (size 3) (value 9)) + (size-value (size 4) (value 10)) + (size-value (size 4) (value 11)) + (size-value (size 4) (value 12)) + (size-value (size 4) (value 13)) + (size-value (size 4) (value 14)) + (size-value (size 4) (value 15)) + (size-value (size 4) (value 16)) + (size-value (size 5) (value 17)) + (size-value (size 5) (value 18)) + (size-value (size 5) (value 19)) + (size-value (size 5) (value 20)) + (size-value (size 5) (value 21)) + (size-value (size 5) (value 22)) + (size-value (size 5) (value 23)) + (size-value (size 5) (value 24)) + (size-value (size 5) (value 25))) + +;;; ########### +;;; SETUP RULES +;;; ########### + +;;; *********** +;;; stress-test +;;; *********** + +(defrule stress-test + + (declare (salience 10)) + + (phase match) + + (stress-test) + + (priority ?last) + + (not (priority ?p&:(> ?p ?last))) + + (technique (priority ?next&:(> ?next ?last))) + + (not (technique (priority ?p&:(> ?p ?last)&:(< ?p ?next)))) + + => + + (assert (priority ?next))) + +;;; ***************** +;;; enable-techniques +;;; ***************** + +(defrule enable-techniques + + (declare (salience 10)) + + (phase match) + + (size ?) + + (not (possible (value any))) + + => + + (assert (priority 1))) + +;;; ********** +;;; expand-any +;;; ********** + +(defrule expand-any + + (declare (salience 10)) + + (phase expand-any) + + ?f <- (possible (row ?r) (column ?c) (value any) (group ?g) (id ?id)) + + (not (possible (value any) (id ?id2&:(< ?id2 ?id)))) + + (size ?s) + + (size-value (size ?as&:(<= ?as ?s)) (value ?v)) + + (not (possible (row ?r) (column ?c) (value ?v))) + + (not (and (size-value (value ?v2&:(< ?v2 ?v))) + + (not (possible (row ?r) (column ?c) (value ?v2))))) + + => + + (assert (possible (row ?r) (column ?c) (value ?v) (group ?g) (id ?id)))) + +;;; ***************** +;;; position-expanded +;;; ***************** + +(defrule position-expanded + + (declare (salience 10)) + + (phase expand-any) + + ?f <- (possible (row ?r) (column ?c) (value any) (group ?g) (id ?id)) + + (size ?s) + + (not (and (size-value (size ?as&:(<= ?as ?s)) (value ?v)) + + (not (possible (row ?r) (column ?c) (value ?v))))) + + => + + (retract ?f)) + +;;; ########### +;;; PHASE RULES +;;; ########### + +;;; *************** +;;; expand-any-done +;;; *************** + +(defrule expand-any-done + + (declare (salience 10)) + + ?f <- (phase expand-any) + + (not (possible (value any))) + + => + + (retract ?f) + + (assert (phase initial-output)) + (assert (print-position 1 1))) + +;;; *********** +;;; begin-match +;;; *********** + +(defrule begin-match + + (declare (salience -20)) + + ?f <- (phase initial-output) + + => + + (retract ?f) + + (assert (phase match))) + +;;; ***************** +;;; begin-elimination +;;; ***************** + +(defrule begin-elimination + + (declare (salience -20)) + + ?f <- (phase match) + + (not (not (impossible))) + + => + + (retract ?f) + + (assert (phase elimination))) + +;;; ************* +;;; next-priority +;;; ************* + +(defrule next-priority + + (declare (salience -20)) + + (phase match) + + (not (impossible)) + + (priority ?last) + + (not (priority ?p&:(> ?p ?last))) + + (technique (priority ?next&:(> ?next ?last))) + + (not (technique (priority ?p&:(> ?p ?last)&:(< ?p ?next)))) + + => + + (assert (priority ?next))) + +;;; ************ +;;; begin-output +;;; ************ + +(defrule begin-output + + (declare (salience -20)) + + ?f <- (phase match) + + (not (impossible)) + + (priority ?last) + + (not (priority ?p&:(> ?p ?last))) + + (not (technique (priority ?next&:(> ?next ?last)))) + + => + + (retract ?f) + + (assert (phase final-output)) + (assert (print-position 1 1))) + + + + + + + + + + + + + + diff --git a/samples/CMake/sample1.cmake b/samples/CMake/sample1.cmake new file mode 100644 index 00000000..c4b23485 --- /dev/null +++ b/samples/CMake/sample1.cmake @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 2.6) + +enable_testing() + +set(CMAKE_BUILD_TYPE debug) + +include_directories("/usr/local/include") + +find_library(ssl_LIBRARY NAMES ssl PATHS "/usr/local/lib") + +add_custom_command(OUTPUT "ver.c" "ver.h" COMMAND ./ver.sh) + +add_executable(foo foo.c bar.c baz.c ver.c) + +target_link_libraries(foo ${ssl_LIBRARY}) diff --git a/samples/CMake/sample2.cmake b/samples/CMake/sample2.cmake new file mode 100644 index 00000000..7411b5d6 --- /dev/null +++ b/samples/CMake/sample2.cmake @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 2.8 FATAL_ERROR) + +project(PCLVisualizer) +target_link_libraries (PCLVisualizer ${PCL_LIBRARIES}) + +#it seems it's needed only on OS X 10.9 +find_package(GLEW REQUIRED) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/include -v") + +find_package(PCL 1.7 REQUIRED) + +include_directories(${PCL_INCLUDE_DIRS}) +link_directories(${PCL_LIBRARY_DIRS}) +add_definitions(${PCL_DEFINITIONS}) + +set(PCL_BUILD_TYPE Release) + +file(GLOB PCL_openni_viewer_SRC + "src/*.h" + "src/*.cpp" +) +add_executable(PCLVisualizer ${PCL_openni_viewer_SRC}) + +#add this line to solve probem in mac os x 10.9 +target_link_libraries(PCLVisualizer ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES} ${PCL_VISUALIZATION_LIBRARIES} ${PCL_FEATURES_LIBRARIES}) \ No newline at end of file diff --git a/samples/CMake/sample3.cmake b/samples/CMake/sample3.cmake new file mode 100644 index 00000000..7bd9ea77 --- /dev/null +++ b/samples/CMake/sample3.cmake @@ -0,0 +1,33 @@ +# Specifications for building user and development documentation. +# +# ==================================================================== +# Copyright (c) 2009 Ian Blumel. All rights reserved. +# +# This software is licensed as described in the file LICENSE, which +# you should have received as part of this distribution. +# ==================================================================== + +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +FIND_FILE( SPHINX sphinx-build.exe) + +# If we are windows call to the make.bat file, otherwise rely on the Makefile +# to handle the processing. +IF(WIN32) + SET(SPHINX_MAKE make.bat) +ELSE(WIN32) + SET(SPHINX_MAKE make) +ENDIF(WIN32) + +ADD_CUSTOM_TARGET( + doc_usr + COMMAND ${SPHINX_MAKE} html + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/usr +) + +ADD_CUSTOM_TARGET( + doc_dev + COMMAND ${SPHINX_MAKE} html + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dev +) + diff --git a/samples/CMake/sample4.cmake b/samples/CMake/sample4.cmake new file mode 100644 index 00000000..e3c123a0 --- /dev/null +++ b/samples/CMake/sample4.cmake @@ -0,0 +1,33 @@ +cmake_minimum_required (VERSION 2.6) + +set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin") + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/vala) +find_package(Vala REQUIRED) +include(ValaPrecompile) +include(ValaVersion) +ensure_vala_version("0.11.0" MINIMUM) + +project (template C) + +find_package(PkgConfig) + +pkg_check_modules(GOBJECT REQUIRED gobject-2.0) +add_definitions(${GOBJECT_CFLAGS} ${GOBJECT_CFLAGS_OTHER}) +link_libraries(${GOBJECT_LIBRARIES}) +link_directories(${GOBJECT_LIBRARY_DIRS}) + + +vala_precompile(VALA_C + src/template.vala +PACKAGES +OPTIONS + --thread +CUSTOM_VAPIS +GENERATE_VAPI +GENERATE_HEADER +DIRECTORY + gen +) + +add_executable("template" ${VALA_C}) diff --git a/samples/CMake/sample5.cmake b/samples/CMake/sample5.cmake new file mode 100644 index 00000000..f87136e7 --- /dev/null +++ b/samples/CMake/sample5.cmake @@ -0,0 +1,89 @@ +# - Check if the STDCALL function exists. +# This works for non-cdecl functions (kernel32 functions, for example) +# CHECK_STDCALL_FUNCTION_EXISTS(FUNCTION FUNCTION_DUMMY_ARGS VARIABLE) +# - macro which checks if the stdcall function exists +# FUNCTION_DECLARATION - the definition of the function ( e.g.: Sleep(500) ) +# VARIABLE - variable to store the result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link +# CMAKE_EXTRA_INCLUDE_FILES = list of extra includes to check in + +MACRO(CHECK_STDCALL_FUNCTION_EXISTS FUNCTION_DECLARATION VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + #get includes + SET(CHECK_STDCALL_FUNCTION_PREMAIN) + FOREACH(def ${CMAKE_EXTRA_INCLUDE_FILES}) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"${def}\"\n") + ENDFOREACH(def) + + #add some default includes + IF ( HAVE_WINDOWS_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"windows.h\"\n") + ENDIF ( HAVE_WINDOWS_H ) + IF ( HAVE_UNISTD_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"unistd.h\"\n") + ENDIF ( HAVE_UNISTD_H ) + IF ( HAVE_DIRECT_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"direct.h\"\n") + ENDIF ( HAVE_DIRECT_H ) + IF ( HAVE_IO_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"io.h\"\n") + ENDIF ( HAVE_IO_H ) + IF ( HAVE_SYS_TIMEB_H ) + SET(CHECK_STDCALL_FUNCTION_PREMAIN "${CHECK_STDCALL_FUNCTION_PREMAIN}#include \"sys/timeb.h\"\n") + ENDIF ( HAVE_SYS_TIMEB_H ) + + STRING(REGEX REPLACE "(\\(.*\\))" "" CHECK_STDCALL_FUNCTION_EXISTS_FUNCTION ${FUNCTION_DECLARATION} ) + + SET(MACRO_CHECK_STDCALL_FUNCTION_DEFINITIONS "${CMAKE_REQUIRED_FLAGS}") + MESSAGE(STATUS "Looking for ${CHECK_STDCALL_FUNCTION_EXISTS_FUNCTION}") + + IF(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_STDCALL_FUNCTION_EXISTS_ADD_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + + SET(CHECK_STDCALL_FUNCTION_DECLARATION ${FUNCTION_DECLARATION}) + CONFIGURE_FILE("${clucene-shared_SOURCE_DIR}/cmake/CheckStdCallFunctionExists.cpp.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckStdCallFunctionExists.cpp" IMMEDIATE @ONLY) + FILE(READ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckStdCallFunctionExists.cpp" + CHECK_STDCALL_FUNCTION_CONTENT) + + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckStdCallFunctionExists.cpp" + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_STDCALL_FUNCTION_DEFINITIONS} + "${CHECK_STDCALL_FUNCTION_EXISTS_ADD_LIBRARIES}" + "${CHECK_STDCALL_FUNCTION_EXISTS_ADD_INCLUDES}" + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + SET(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION_DECLARATION}") + MESSAGE(STATUS "Looking for ${FUNCTION_DECLARATION} - found") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the stdcall function ${FUNCTION_DECLARATION} exists passed with the following output:\n" + "${OUTPUT}\nCheckStdCallFunctionExists.cpp:\n${CHECK_STDCALL_FUNCTION_CONTENT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${FUNCTION_DECLARATION} - not found") + SET(${VARIABLE} "" CACHE INTERNAL "Have function ${FUNCTION_DECLARATION}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the stdcall function ${FUNCTION_DECLARATION} exists failed with the following output:\n" + "${OUTPUT}\nCheckStdCallFunctionExists.cpp:\n${CHECK_STDCALL_FUNCTION_CONTENT}\n\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_STDCALL_FUNCTION_EXISTS) diff --git a/samples/CMake/uninstall.cmake.in b/samples/CMake/uninstall.cmake.in new file mode 100644 index 00000000..a5b7436f --- /dev/null +++ b/samples/CMake/uninstall.cmake.in @@ -0,0 +1,22 @@ +IF (NOT EXISTS "@PROJECT_BINARY_DIR@/install_manifest.txt") + MESSAGE (FATAL_ERROR "Cannot find install manifest: \"@PROJECT_BINARY_DIR@/install_manifest.txt\"") +ENDIF (NOT EXISTS "@PROJECT_BINARY_DIR@/install_manifest.txt") + +FILE (READ "@PROJECT_BINARY_DIR@/install_manifest.txt" files) +STRING (REGEX REPLACE "\n" ";" files "${files}") +FOREACH (file ${files}) + MESSAGE (STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + IF (EXISTS "$ENV{DESTDIR}${file}") + EXEC_PROGRAM ( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF (NOT "${rm_retval}" STREQUAL 0) + MESSAGE (FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") + ENDIF (NOT "${rm_retval}" STREQUAL 0) + ELSE (EXISTS "$ENV{DESTDIR}${file}") + MESSAGE (STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") + ENDIF (EXISTS "$ENV{DESTDIR}${file}") +ENDFOREACH (file) + diff --git a/test/fixtures/Data/cars.csv b/samples/CSV/cars.csv similarity index 63% rename from test/fixtures/Data/cars.csv rename to samples/CSV/cars.csv index 73280e55..3c504cd2 100644 --- a/test/fixtures/Data/cars.csv +++ b/samples/CSV/cars.csv @@ -1,3 +1,3 @@ Year,Make,Model,Length 1997,Ford,E350,2.34 -2000,Mercury,Cougar,2.38 \ No newline at end of file +2000,Mercury,Cougar,2.38 diff --git a/samples/Chapel/distributions.chpl b/samples/Chapel/distributions.chpl index a3e5f81d..31040c92 100644 --- a/samples/Chapel/distributions.chpl +++ b/samples/Chapel/distributions.chpl @@ -58,6 +58,34 @@ var BA: [BlockSpace] int; forall ba in BA do ba = here.id; +// +// The 'hasSingleLocalSubdomain' method on arrays will return true if the +// index set for a locale can be represented by a single domain. +// +if !BA.hasSingleLocalSubdomain() then + halt("For a Block distribution, the index set per locale should be \ + represented by a single domain"); + +// +// If the distribution's subdomains can be represented as single subdomain, +// we can use the 'localSubdomain' method to get the index set for the +// current locale. +// +// Below, we'll use the index set to confirm that the array elements have the +// correct locale id. +// + +for L in Locales { + on L { + const indices = BA.localSubdomain(); + for i in indices { + if BA[i] != L.id then + halt("Error: incorrect locale id"); + } + } +} + + // // Output the Block-distributed array to visually see how the elements // are partitioned across the locales. @@ -104,6 +132,14 @@ writeln("Block Array Index Map"); writeln(BA2); writeln(); +// +// We can use the 'targetLocales' method available on an array to get the +// locales array used as targets. +// +for (L, ML) in zip(BA2.targetLocales(), MyLocales) do + if L != ML then + halt("Error: BA2.targetLocales() should equal MyLocales"); + // @@ -126,6 +162,18 @@ writeln("Cyclic Array Index Map"); writeln(CA); writeln(); +// +// The domain returned by 'localSubdomain' need not be a dense block, as is +// the case for the Cyclic Distribution. +// +on Locales[0] { + const indices = CA.localSubdomain(); + for i in indices { + if CA[i] != 0 then + halt("Error: Cyclic array values on Locale 0 should be zero"); + } +} + // // Next, we'll declare a Block-Cyclic distribution. These @@ -134,7 +182,7 @@ writeln(); // of indices. Thus, the BlockCyclic distribution is parameterized // by a starting index (as with Cyclic) and a block size (per // dimension) specifying how large the chunks to be dealt out are. -// +// const BlkCycSpace = Space dmapped BlockCyclic(startIdx=Space.low, blocksize=(2, 3)); var BCA: [BlkCycSpace] int; @@ -146,6 +194,46 @@ writeln("Block-Cyclic Array Index Map"); writeln(BCA); writeln(); +// +// A locale's index set for a Block-Cyclic distribution cannot be represented +// by a single subdomain. +// +if BCA.hasSingleLocalSubdomain() then + halt("A Block-Cyclic index set cannot be represented by a single subdomain"); + +// +// If the local index set cannot be represented by a single subdomain, +// we can use the 'localSubdomains' iterator to yield a number of domains +// that represent the whole index set. +// +// Let's write a function that will use 'localSubdomains' to verify the +// correctness of the array values. +// + +proc verifyID(Data: []) { + for L in Locales { + on L { + for indices in Data.localSubdomains() { + for i in indices { + if Data[i] != L.id then + halt("Error: incorrect locale id"); + } + } + } + } +} +verifyID(BCA); + +// +// The 'localSubdomains' iterator is also available on distributions that +// can represent a locale's index set with a single domain. This allows us to +// write more general code that will work for all distributions. +// +// This means that we can call the 'verifyID' function on any array, like the +// 'BA' array from earlier. +// +verifyID(BA); + // // The ReplicatedDist distribution is different: each of the diff --git a/samples/Chapel/lulesh.chpl b/samples/Chapel/lulesh.chpl index d6480d26..78dab00d 100644 --- a/samples/Chapel/lulesh.chpl +++ b/samples/Chapel/lulesh.chpl @@ -292,14 +292,14 @@ proc main() { LagrangeLeapFrog(); if debug { - // deprint("[[ Forces ]]", fx, fy, fz); + deprintatomic("[[ Forces ]]", fx, fy, fz); deprint("[[ Positions ]]", x, y, z); deprint("[[ p, e, q ]]", p, e, q); } if showProgress then - writeln("time = ", format("%e", time), ", dt=", format("%e", deltatime), - if doTiming then ", elapsed = " + (getCurrentTime()-iterTime) - else ""); + writef("time = %er, dt=%er, %s", time, deltatime, + if doTiming then ", elapsed = " + (getCurrentTime()-iterTime) +"\n" + else "\n"); } if (cycle == maxcycles) { writeln("Stopped early due to reaching maxnumsteps"); @@ -314,12 +314,10 @@ proc main() { if printCoords { var outfile = open("coords.out", iomode.cw); var writer = outfile.writer(); - var fmtstr = if debug then "%1.9e" else "%1.4e"; - for i in Nodes { - writer.writeln(format(fmtstr, x[i]), " ", - format(fmtstr, y[i]), " ", - format(fmtstr, z[i])); - } + var fmtstr = if debug then "%1.9re %1.9er %1.9er\n" + else "%1.4er %1.4er %1.4er\n"; + for i in Nodes do + writer.writef(fmtstr, x[i], y[i], z[i]); writer.close(); outfile.close(); } @@ -479,7 +477,7 @@ inline proc localizeNeighborNodes(eli: index(Elems), y: [] real, ref y_local: 8*real, z: [] real, ref z_local: 8*real) { - for param i in 1..nodesPerElem { + for i in 1..nodesPerElem { const noi = elemToNode[eli][i]; x_local[i] = x[noi]; @@ -670,7 +668,7 @@ proc SumElemStressesToNodeForces(b_x: 8*real, b_y: 8*real, b_z: 8*real, ref fx: 8*real, ref fy: 8*real, ref fz: 8*real) { - for param i in 1..8 { + for i in 1..8 { fx[i] = -(stress_xx * b_x[i]); fy[i] = -(stress_yy * b_y[i]); fz[i] = -(stress_zz * b_z[i]); @@ -725,17 +723,17 @@ inline proc CalcElemFBHourglassForce(xd: 8*real, yd: 8*real, zd: 8*real, var hx, hy, hz: 4*real; // reduction - for param i in 1..4 { - for param j in 1..8 { + for i in 1..4 { + for j in 1..8 { hx[i] += hourgam[j][i] * xd[j]; hy[i] += hourgam[j][i] * yd[j]; hz[i] += hourgam[j][i] * zd[j]; } } - for param i in 1..8 { + for i in 1..8 { var shx, shy, shz: real; - for param j in 1..4 { + for j in 1..4 { shx += hourgam[i][j] * hx[j]; shy += hourgam[i][j] * hy[j]; shz += hourgam[i][j] * hz[j]; @@ -1088,16 +1086,16 @@ proc CalcFBHourglassForceForElems(determ, x8n, y8n, z8n, dvdx, dvdy, dvdz) { /* TODO: Can we enable this local block? */ // local { - for param i in 1..4 { + for i in 1..4 { var hourmodx, hourmody, hourmodz: real; // reduction - for param j in 1..8 { + for j in 1..8 { hourmodx += x8n[eli][j] * gammaCoef[i][j]; hourmody += y8n[eli][j] * gammaCoef[i][j]; hourmodz += z8n[eli][j] * gammaCoef[i][j]; } - for param j in 1..8 { + for j in 1..8 { hourgam[j][i] = gammaCoef[i][j] - volinv * (dvdx[eli][j] * hourmodx + dvdy[eli][j] * hourmody + @@ -1221,7 +1219,7 @@ proc CalcKinematicsForElems(dxx, dyy, dzz, const dt: real) { arealg[k] = CalcElemCharacteristicLength(x_local, y_local, z_local, volume); - for param i in 1..8 { + for i in 1..8 { x_local[i] -= dt2 * xd_local[i]; y_local[i] -= dt2 * yd_local[i]; z_local[i] -= dt2 * zd_local[i]; @@ -1669,7 +1667,7 @@ proc CalcSoundSpeedForElems(vnewc, rho0:real, enewc, pnewc, pbvc, bvc) { iter elemToNodes(elem) { - for param i in 1..nodesPerElem do + for i in 1..nodesPerElem do yield elemToNode[elem][i]; } @@ -1679,14 +1677,19 @@ iter elemToNodesTuple(e) { } -proc deprint(title:string, x:[?D] real, y:[D]real, z:[D]real) { +proc deprint(title:string, x:[?D] real, y:[D] real, z:[D] real) { writeln(title); - for i in D { - writeln(format("%3d", i), ": ", - format("%3.4e", x[i]), " ", - format("%3.4e", y[i]), " ", - format("%3.4e", z[i])); - } + for i in D do + writef("%3i: %3.4er %3.4er %3.4er\n", + if use3DRepresentation then idx3DTo1D(i, D.dim(1).size) else i, + x[i], y[i], z[i]); } +proc deprintatomic(title:string, x:[?D] atomic real, y:[] atomic real, z:[] atomic real) { + writeln(title); + for i in D do + writef("%3i: %3.4er %3.4er %3.4er\n", + if use3DRepresentation then idx3DTo1D(i, D.dim(1).size) else i, + x[i].peek(), y[i].peek(), z[i].peek()); +} diff --git a/samples/Charity/example.ch b/samples/Charity/example.ch new file mode 100644 index 00000000..d3ee289b --- /dev/null +++ b/samples/Charity/example.ch @@ -0,0 +1,6 @@ +% +% Some very badly written Charity +% + +data LA(A) -> D = ss: A -> D + | ff: -> D. diff --git a/samples/Clarion/CStringClass.clw b/samples/Clarion/CStringClass.clw new file mode 100644 index 00000000..7fa3ba98 --- /dev/null +++ b/samples/Clarion/CStringClass.clw @@ -0,0 +1,172 @@ + Member() + omit('***$***',_VER_C55) +_ABCDllMode_ EQUATE(0) +_ABCLinkMode_ EQUATE(1) + ***$*** + Include('Equates.CLW'),ONCE + Include('Keycodes.CLW'),ONCE + Include('Errors.CLW'),ONCE + Map + End ! map + Include('CStringClass.inc'),ONCE +CStringClass.Construct PROCEDURE ! Declare Procedure + CODE + SELF.bufferSize = DEFAULT_CS_BUFFER_SIZE + SELF.CS &= New(CSTRING(SELF.bufferSize)) +CStringClass.Destruct PROCEDURE ! Declare Procedure + CODE + Dispose(SELF.cs) +CStringClass.Cat PROCEDURE (STRING pStr) !,*CSTRING,PROC ! Declare Procedure +newLen LONG,AUTO +oldCS &CSTRING + CODE + newLen = Len(pStr) + IF (newLen+SELF.strLength+2) > SELF.newStrSize + ! Only grow the internal string if the result of the cat will be larger than the string currently is. + ! The reason for the "+2" is because this is used in the string slicing outside this IF. Without this matching +2 there is potential for an out of bounds slice which would be bad! + + ! Save a temporary copy of the old string so we can us it in the concatination after we have grown it! + oldCS &= New(CSTRING(SELF.strLength+1)) + oldCS = SELF.CS + Dispose(SELF.CS) + + SELF.newStrSize = newLen + SELF.strLength + 1 + SELF.bufferSize + SELF.CS &= New(CSTRING(SELF.newStrSize)) + SELF.CS = oldCS + Dispose(oldCS) + END + + ! Append the new string directly to the end of the old one. + SELF.CS[SELF.strLength+1 : SELF.strLength+newLen] = pStr + ! And terminate the CSTRING manually + SELF.CS[SELF.strLength+newLen+1] = '<0>' + + ! This is the same as doing "SELF.strLength = Len(SELF.CS)" but the Len() is _really_ slow on large strings. This is much faster! + SELF.strLength += newLen + + ! This is what it used to be: + ! SELF.Str(SELF.Str() & s) + ! It is a nice and neat solution but performance, especially on large strings was terrible! + + RETURN SELF.Str() +CStringClass.Str PROCEDURE (STRING pStr) !,*CSTRING, PROC ! Declare Procedure + CODE + IF Len(pStr) > SELF.newStrSize + ! Only Dispose/New the internal string if the new one requires it. + ! This might be slightly innefficient in terms of memory usage when the string gets smaller + ! But it is _vasty_ better for performance when the string gets added to a lot. + Dispose(SELF.CS) + SELF.newStrSize = Len(pStr) + 1 + SELF.bufferSize + SELF.CS &= New(CSTRING(SELF.newStrSize)) + END + + SELF.CS = pStr + SELF.strLength = Len(SELF.CS) + + RETURN SELF.CS +CStringClass.Len PROCEDURE !,LONG ! Declare Procedure + CODE + RETURN SELF.strLength +CStringClass.Replace PROCEDURE (STRING pFind, STRING pReplace) !,*CSTRING,PROC ! Declare Procedure +! FindString , ReplaceWith +locate LONG,AUTO +lastLocate LONG + CODE + LOOP + locate = InString(Upper(pFind), Upper(SELF.Str()), 1, lastLocate+1) + IF ~locate + BREAK + END + + ! So we dont end up having recursive replacement. + lastLocate = locate + Len(pReplace)-1 + + SELF.Str(Sub(SELF.Str(), 1, locate-1) & | + pReplace & | + Sub(SELF.Str(), locate+Len(pFind), SELF.Len()) | + ) + END + + RETURN SELF.Str() +CStringClass.Str PROCEDURE () !,*CSTRING ! Declare Procedure 3 + CODE + RETURN SELF.CS +!------------------------------------------------------------------------------ +CStringClass.Contains PROCEDURE (STRING pFind, BYTE pCaseSensitive=TRUE) !,BYTE ! Declare Procedure +! Returns a value (TRUE) indicating whether the specified String occurs within this string. +! Second parameter defaults to a case sensitive search. + CODE + IF pCaseSensitive = TRUE + IF InString(pFind, SELF.Str(), 1 , 1) > 0 + RETURN TRUE + END + ELSE + IF InString(Lower(pFind), SELF.Lower(), 1 , 1) > 0 + RETURN TRUE + END + END + + RETURN FALSE +CStringClass.Lower PROCEDURE () !,STRING ! Declare Procedure +! Returns a "Lowered" version of the self.cs doesnt change the self.cs + CODE + RETURN Lower(SELF.CS) +CStringClass.SubString PROCEDURE (LONG pPosition, LONG pLength) !,STRING,PROC ! Declare Procedure + CODE + RETURN Sub(SELF.Str(), pPosition, pLength) +CStringClass.ToLower PROCEDURE () !,*CSTRING,PROC ! Declare Procedure +! Converts this string to lowercase and returns the converted string + + CODE + RETURN SELF.Str(SELF.Lower()) +CStringClass.ToUpper PROCEDURE () !,*CSTRING,PROC ! Declare Procedure +! Converts this string to uppercase and returns the converted string + + CODE + RETURN SELF.Str(SELF.Upper()) +CStringClass.Trim PROCEDURE () !,*CSTRING,PROC ! Declare Procedure + CODE + SELF.Str(Left(SELF.Str())) + SELF.Str(Clip(SELF.Str())) + RETURN SELF.Str() +CStringClass.Upper PROCEDURE () !,STRING ! Declare Procedure + CODE + RETURN Upper(SELF.Str()) +CStringClass.IndexOf PROCEDURE (STRING pLookIn, BYTE pCaseSensitive=TRUE) !,LONG ! Declare Procedure +! Returns the index of the first parameter (pLookIn) is found within the SELF.CS +! zero if it is not found + CODE + IF pCaseSensitive = TRUE + RETURN InString(SELF.Str(), pLookIn, 1 , 1) + ELSE + RETURN InString(SELF.Lower(), Lower(pLookIn), 1 , 1) + END +CStringClass.FoundIn PROCEDURE (STRING pLookIn, BYTE pCaseSensitive=TRUE) !,BYTE ! Declare Procedure +! Returns TRUE if the first parameter (pLookIn) is found within the SELF.CS +! FALSE if it is no + CODE + IF SELF.IndexOf(pLookIn, pCaseSensitive) > 0 + RETURN TRUE + ELSE + RETURN FALSE + END +CStringClass.SetBuffer PROCEDURE (LONG pNewBuffer) ! Declare Procedure + CODE + SELF.bufferSize = pNewBuffer +CStringClass.EscapeXml PROCEDURE () !,STRING ! Declare Procedure +CS CStringClass + CODE + IF Omitted(pStr)=FALSE + CS.Str(pStr) + ELSE + ! Make a copy so we don't alter the original + CS.Str(SELF.Str()) + END + CS.Replace('&', '&') + CS.Replace('<', '<') + CS.Replace('>', '>') + CS.Replace('"', '"') + CS.Replace('''', ''') + + RETURN CS.Str() + diff --git a/samples/Clarion/ConsoleSupport.clw b/samples/Clarion/ConsoleSupport.clw new file mode 100644 index 00000000..c7eac1e1 --- /dev/null +++ b/samples/Clarion/ConsoleSupport.clw @@ -0,0 +1,68 @@ + Member() + Include('ConsoleSupport.inc'),ONCE + Map + MODULE('32-bit Windows API') + ! General functions + GetLastError(),DWORD,PASCAL + + ! Console functions + GetStdHandle(DWORD),HANDLE,PASCAL,PROC,RAW + WriteConsole(Handle,Long,Dword,long,long),bool,Raw,Pascal,name('WriteConsoleA') + ReadConsole(Handle,Long,Dword,long,long),bool,Raw,Pascal,name('ReadConsoleA') + SetConsoleTitle(Long),Bool,Raw,Pascal,name('SetConsoleTitleA') + GetConsoleTitle(Long,dword),Bool,Raw,Pascal,name('GetConsoleTitleA') + SetConsoleMode(Handle,dWord),BOOL,RAW,PASCAL + GetConsoleMode(Handle,Long),BOOL,RAW,PASCAL + End + End + +ConsoleSupport.Construct PROCEDURE + + CODE + +ConsoleSupport.Destruct PROCEDURE + + CODE + +ConsoleSupport.Init PROCEDURE () !,BYTE,VIRTUAL + CODE + + SELF.OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE) + If SELF.OutputHandle = INVALID_HANDLE_VALUE + Halt(1,'Unable to get output handle (' & GetLastError() & ')') + RETURN INVALID_HANDLE_VALUE + End + + SELF.InputHandle = GetStdHandle(STD_INPUT_HANDLE) + if SELF.InputHandle = INVALID_HANDLE_VALUE + Halt(2,'Unable to get console input handle (' & GetLastError() & ')') + RETURN INVALID_HANDLE_VALUE + End + + If ~SetConsoleMode(SELF.InputHandle,ENABLE_PROCESSED_INPUT ) + Halt(3,'Unable to set console mode (' & GetLastError() & ')') + RETURN INVALID_OTHER + End + + RETURN FALSE + +ConsoleSupport.WriteLine PROCEDURE (STRING pText) !,BYTE,PROC,VIRTUAL + CODE + SELF.TextBuffer = SELF.Prefix & pText & '<13,10>' + If WriteConsole(SELF.OutputHandle, ADDRESS(SELF.TextBuffer), LEN(SELF.TextBuffer),ADDRESS(SELF.BytesWritten), NULL) = 0 + Halt(4,'WriteConsoleError (' & GetLastError() & ')') + RETURN -1 + End + RETURN FALSE + +Consolesupport.ReadKey PROCEDURE () !,STRING,PROC,VIRTUAL + CODE + SELF.WriteLine('Press any key to continue...') + Clear(SELF.InBuffer) + Loop + IF ReadConsole(SELF.InputHandle,Address(SELF.InBuffer),100,Address(SELF.BytesRead),NULL) = 0 THEN + Halt(5,'Error on read console (' & GetLastError() & ')') + Break + End + Until SELF.BytesRead > 0 + RETURN SELF.InBuffer \ No newline at end of file diff --git a/samples/Clarion/HelloWorld.clw b/samples/Clarion/HelloWorld.clw new file mode 100644 index 00000000..8cad46dc --- /dev/null +++ b/samples/Clarion/HelloWorld.clw @@ -0,0 +1,10 @@ + PROGRAM + + MAP + END + + CODE + + MESSAGE('Hello World!') + + RETURN \ No newline at end of file diff --git a/samples/Clarion/hello.clw b/samples/Clarion/hello.clw new file mode 100644 index 00000000..14328c84 --- /dev/null +++ b/samples/Clarion/hello.clw @@ -0,0 +1,12 @@ + MEMBER() + INCLUDE('HelloClass.inc'),ONCE + MAP + END + +HelloClass.Construct PROCEDURE + CODE +HelloClass.Destruct PROCEDURE() !,VIRTUAL + CODE +HelloClass.SayHello PROCEDURE + CODE + MESSAGE('Hello World!') diff --git a/samples/Click/sr2.click b/samples/Click/sr2.click new file mode 100644 index 00000000..52b55026 --- /dev/null +++ b/samples/Click/sr2.click @@ -0,0 +1,133 @@ +rates :: AvailableRates +elementclass sr2 { + $sr2_ip, $sr2_nm, $wireless_mac, $gateway, $probes| + + +arp :: ARPTable(); +lt :: LinkTable(IP $sr2_ip); + + +gw :: SR2GatewaySelector(ETHTYPE 0x062c, + IP $sr2_ip, + ETH $wireless_mac, + LT lt, + ARP arp, + PERIOD 15, + GW $gateway); + + +gw -> SR2SetChecksum -> [0] output; + +set_gw :: SR2SetGateway(SEL gw); + + +es :: SR2ETTStat(ETHTYPE 0x0641, + ETH $wireless_mac, + IP $sr2_ip, + PERIOD 30000, + TAU 300000, + ARP arp, + PROBES $probes, + ETT metric, + RT rates); + + +metric :: SR2ETTMetric(LT lt); + + +forwarder :: SR2Forwarder(ETHTYPE 0x0643, + IP $sr2_ip, + ETH $wireless_mac, + ARP arp, + LT lt); + + +querier :: SR2Querier(ETH $wireless_mac, + SR forwarder, + LT lt, + ROUTE_DAMPENING true, + TIME_BEFORE_SWITCH 5, + DEBUG true); + + +query_forwarder :: SR2MetricFlood(ETHTYPE 0x0644, + IP $sr2_ip, + ETH $wireless_mac, + LT lt, + ARP arp, + DEBUG false); + +query_responder :: SR2QueryResponder(ETHTYPE 0x0645, + IP $sr2_ip, + ETH $wireless_mac, + LT lt, + ARP arp, + DEBUG true); + + +query_responder -> SR2SetChecksum -> [0] output; +query_forwarder -> SR2SetChecksum -> SR2Print(forwarding) -> [0] output; +query_forwarder [1] -> query_responder; + +data_ck :: SR2SetChecksum() + +input [1] +-> host_cl :: IPClassifier(dst net $sr2_ip mask $sr2_nm, + -) +-> querier +-> data_ck; + + +host_cl [1] -> [0] set_gw [0] -> querier; + +forwarder[0] + -> dt ::DecIPTTL + -> data_ck + -> [2] output; + + +dt[1] +-> Print(ttl-error) +-> ICMPError($sr2_ip, timeexceeded, 0) +-> querier; + + +// queries +querier [1] -> [1] query_forwarder; +es -> SetTimestamp() -> [1] output; + + +forwarder[1] //ip packets to me + -> SR2StripHeader() + -> CheckIPHeader() + -> from_gw_cl :: IPClassifier(src net $sr2_ip mask $sr2_nm, + -) + -> [3] output; + +from_gw_cl [1] -> [1] set_gw [1] -> [3] output; + + input [0] + -> ncl :: Classifier( + 12/0643 , //sr2_forwarder + 12/0644 , //sr2 + 12/0645 , //replies + 12/0641 , //sr2_es + 12/062c , //sr2_gw + ); + + + ncl[0] -> SR2CheckHeader() -> [0] forwarder; + ncl[1] -> SR2CheckHeader() -> PrintSR(query) -> query_forwarder + ncl[2] -> SR2CheckHeader() -> query_responder; + ncl[3] -> es; + ncl[4] -> SR2CheckHeader() -> gw; + +} + + + +Idle -> s :: sr2(2.0.0.1, 255.0.0.0, 00:00:00:00:00:01, false, "12 60 12 1500") -> Discard; +Idle -> [1] s; +s[1] -> Discard; +s[2] -> Discard; +s[3] -> Discard; diff --git a/samples/Click/thomer-nat.click b/samples/Click/thomer-nat.click new file mode 100644 index 00000000..3523e8a7 --- /dev/null +++ b/samples/Click/thomer-nat.click @@ -0,0 +1,142 @@ +// This Click configuration implements a firewall and NAT, roughly based on the +// mazu-nat.click example. +// +// This example assumes there is one interface that is IP-aliased. In this +// example, eth0 and eth0:0 have IP addresses 66.68.65.90 and 192.168.1.1, +// respectively. There is a local network, 192.168.1.0/24, and an upstream +// gateway, 66.58.65.89. Traffic from the local network is NATed. +// +// Connections can be initiated from the NAT box itself, also. +// +// For bugs, suggestions, and, corrections, please email me. +// +// Author: Thomer M. Gil (click@thomer.com) + +AddressInfo( + eth0-in 192.168.1.1 192.168.1.0/24 00:0d:87:9d:1c:e9, + eth0-ex 66.58.65.90 00:0d:87:9d:1c:e9, + gw-addr 66.58.65.89 00:20:6f:14:54:c2 +); + + +elementclass SniffGatewayDevice { + $device | + from :: FromDevice($device) + -> t1 :: Tee + -> output; + input -> q :: Queue(1024) + -> t2 :: PullTee + -> to :: ToDevice($device); + t1[1] -> ToHostSniffers; + t2[1] -> ToHostSniffers($device); + ScheduleInfo(from .1, to 1); +} + + +device :: SniffGatewayDevice(eth0); +arpq_in :: ARPQuerier(eth0-in) -> device; +ip_to_extern :: GetIPAddress(16) + -> CheckIPHeader + -> EtherEncap(0x800, eth0-ex, gw-addr) + -> device; +ip_to_host :: EtherEncap(0x800, gw-addr, eth0-ex) + -> ToHost; +ip_to_intern :: GetIPAddress(16) + -> CheckIPHeader + -> arpq_in; + + +arp_class :: Classifier( + 12/0806 20/0001, // [0] ARP requests + 12/0806 20/0002, // [1] ARP replies to host + 12/0800); // [2] IP packets + +device -> arp_class; + +// ARP crap +arp_class[0] -> ARPResponder(eth0-in, eth0-ex) -> device; +arp_class[1] -> arp_t :: Tee; + arp_t[0] -> ToHost; + arp_t[1] -> [1]arpq_in; + + +// IP packets +arp_class[2] -> Strip(14) + -> CheckIPHeader + -> ipclass :: IPClassifier(dst host eth0-ex, + dst host eth0-in, + src net eth0-in); + +// Define pattern NAT +iprw :: IPRewriterPatterns(NAT eth0-ex 50000-65535 - -); + +// Rewriting rules for UDP/TCP packets +// output[0] rewritten to go into the wild +// output[1] rewritten to come back from the wild or no match +rw :: IPRewriter(pattern NAT 0 1, + pass 1); + +// Rewriting rules for ICMP packets +irw :: ICMPPingRewriter(eth0-ex, -); +irw[0] -> ip_to_extern; +irw[1] -> icmp_me_or_intern :: IPClassifier(dst host eth0-ex, -); + icmp_me_or_intern[0] -> ip_to_host; + icmp_me_or_intern[1] -> ip_to_intern; + +// Rewriting rules for ICMP error packets +ierw :: ICMPRewriter(rw irw); +ierw[0] -> icmp_me_or_intern; +ierw[1] -> icmp_me_or_intern; + + +// Packets directed at eth0-ex. +// Send it through IPRewriter(pass). If there was a mapping, it will be +// rewritten such that dst is eth0-in:net, otherwise dst will still be for +// eth0-ex. +ipclass[0] -> [1]rw; + +// packets that were rewritten, heading into the wild world. +rw[0] -> ip_to_extern; + +// packets that come back from the wild or are not part of an established +// connection. +rw[1] -> established_class :: IPClassifier(dst host eth0-ex, + dst net eth0-in); + + // not established yet or returning packets for a connection that was + // established from this host itself. + established_class[0] -> + firewall :: IPClassifier(dst tcp port ssh, + dst tcp port smtp, + dst tcp port domain, + dst udp port domain, + icmp type echo-reply, + proto icmp, + port > 4095, + -); + + firewall[0] -> ip_to_host; // ssh + firewall[1] -> ip_to_host; // smtp + firewall[2] -> ip_to_host; // domain (t) + firewall[3] -> ip_to_host; // domain (u) + firewall[4] -> [0]irw; // icmp reply + firewall[5] -> [0]ierw; // other icmp + firewall[6] -> ip_to_host; // port > 4095, probably for connection + // originating from host itself + firewall[7] -> Discard; // don't allow incoming for port <= 4095 + + // established connection + established_class[1] -> ip_to_intern; + +// To eth0-in. Only accept from inside network. +ipclass[1] -> IPClassifier(src net eth0-in) -> ip_to_host; + +// Packets from eth0-in:net either stay on local network or go to the wild. +// Those that go into the wild need to go through the appropriate rewriting +// element. (Either UDP/TCP rewriter or ICMP rewriter.) +ipclass[2] -> inter_class :: IPClassifier(dst net eth0-in, -); + inter_class[0] -> ip_to_intern; + inter_class[1] -> ip_udp_class :: IPClassifier(tcp or udp, + icmp type echo); + ip_udp_class[0] -> [0]rw; + ip_udp_class[1] -> [0]irw; diff --git a/samples/Clojure/build.boot b/samples/Clojure/build.boot new file mode 100644 index 00000000..6de0bfca --- /dev/null +++ b/samples/Clojure/build.boot @@ -0,0 +1,15 @@ +;; from: https://github.com/boot-clj/boot#configure-task-options + +(set-env! + :source-paths #{"src"} + :dependencies '[[me.raynes/conch "0.8.0"]]) + +(task-options! + pom {:project 'my-project + :version "0.1.0"} + jar {:manifest {"Foo" "bar"}}) + +(deftask build + "Build my project." + [] + (comp (pom) (jar) (install))) diff --git a/samples/CoffeeScript/build.cake b/samples/CoffeeScript/build.cake new file mode 100644 index 00000000..b3f7df91 --- /dev/null +++ b/samples/CoffeeScript/build.cake @@ -0,0 +1,17 @@ +fs = require 'fs' + +{print} = require 'sys' +{spawn} = require 'child_process' + +build = (callback) -> + coffee = spawn 'coffee', ['-c', '-o', '.', '.'] + coffee.stderr.on 'data', (data) -> + process.stderr.write data.toString() + coffee.stdout.on 'data', (data) -> + print data.toString() + coffee.on 'exit', (code) -> + callback?() if code is 0 + +task 'build', 'Build from source', -> + build() + \ No newline at end of file diff --git a/samples/Common Lisp/array.l b/samples/Common Lisp/array.l new file mode 100644 index 00000000..a64ac178 --- /dev/null +++ b/samples/Common Lisp/array.l @@ -0,0 +1,164 @@ +;;; -*- Mode: Lisp; Package: LISP -*- +;;; +;;; This file is part of xyzzy. +;;; + +(provide "array") + +(in-package "lisp") + +(export '(make-vector make-array vector array-dimensions array-in-bounds-p + upgraded-array-element-type adjust-array)) + +(defun upgraded-array-element-type (type) + (cond ((or (eq type 't) + (null type)) + 't) + ((member type '(character base-character standard-char + extended-character) :test #'eq) + 'character) + (t + (setq type (car (si:canonicalize-type type))) + (cond ((or (eq type 't) + (null type)) + 't) + ((member type '(character base-character standard-char + extended-character) :test #'eq) + 'character) + (t 't))))) + +(defun check-array-initialize-option (ies-p ics-p displaced-to) + (let ((x 0)) + (and ies-p (incf x)) + (and ics-p (incf x)) + (and displaced-to (incf x)) + (when (> x 1) + (error ":initial-element, :initial-contents, :displaced-to")))) + +(defun make-vector (length &key + (element-type t) + (initial-element nil ies-p) + (initial-contents nil ics-p) + fill-pointer + adjustable + displaced-to + (displaced-index-offset 0)) + (setq element-type (upgraded-array-element-type element-type)) + (check-array-initialize-option ies-p ics-p displaced-to) + (let ((vector (si:*make-vector length element-type initial-element adjustable + fill-pointer displaced-to displaced-index-offset))) + (when ics-p + (si:*copy-into-seq vector initial-contents)) + vector)) + +(defun make-array (dimensions &rest rest + &key + (element-type t) + (initial-element nil ies-p) + (initial-contents nil ics-p) + fill-pointer + adjustable + displaced-to + (displaced-index-offset 0)) + (cond ((integerp dimensions) + (apply #'make-vector dimensions rest)) + ((= (length dimensions) 1) + (apply #'make-vector (car dimensions) rest)) + (t + (setq element-type (upgraded-array-element-type element-type)) + (check-array-initialize-option ies-p ics-p displaced-to) + (when fill-pointer + (error ":fill-pointer")) + (let ((array (si:*make-array dimensions element-type + initial-element adjustable + displaced-to displaced-index-offset))) + (when ics-p + (let ((dims (make-list (array-rank array) + :initial-element 0)) + (stack (list initial-contents)) + (rank (1- (array-rank array)))) + (dolist (x dims) + (push (elt (car stack) 0) stack)) + (dotimes (i (array-total-size array)) + (setf (row-major-aref array i) (car stack)) + (do ((x dims (cdr x)) + (j rank (1- j))) + ((null x)) + (pop stack) + (incf (car x)) + (when (< (car x) (array-dimension array j)) + (do ((r (- rank j) (1- r))) + ((< r 0)) + (push (elt (car stack) (nth r dims)) stack)) + (return)) + (setf (car x) 0))))) + array)))) + +(defun vector (&rest list) + (make-vector (length list) :element-type t :initial-contents list)) + +(defun array-dimensions (array) + (do ((i (1- (array-rank array)) (1- i)) + (dims '())) + ((minusp i) dims) + (push (array-dimension array i) dims))) + +(defun array-in-bounds-p (array &rest subscripts) + (let ((r (array-rank array))) + (when (/= r (length subscripts)) + (error "subscripts: ~S" subscripts)) + (do ((i 0 (1+ i)) + (s subscripts (cdr s))) + ((= i r) t) + (unless (<= 0 (car s) (1- (array-dimension array i))) + (return nil))))) + +(defun adjust-array (old-array + dimensions + &rest rest + &key + (element-type nil ets-p) + initial-element + (initial-contents nil ics-p) + (fill-pointer nil fps-p) + displaced-to + displaced-index-offset) + (when (/= (length dimensions) (array-rank old-array)) + (error "?")) + (unless ets-p + (push (array-element-type old-array) rest) + (push :element-type rest)) + (when (adjustable-array-p old-array) + (push t rest) + (push :adjustable rest)) + (cond (fps-p + (unless (array-has-fill-pointer-p old-array) + (error "?"))) + (t + (when (array-has-fill-pointer-p old-array) + (push (fill-pointer old-array) rest) + (push :fill-pointer rest)))) + (when (eq old-array displaced-to) + (error "?")) + (let ((new-array (apply #'make-array dimensions rest))) + (or ics-p displaced-to + (copy-array-partially old-array new-array)) + (cond ((adjustable-array-p old-array) + (si:*replace-array old-array new-array) + old-array) + (t + new-array)))) + +(defun copy-array-partially (src dst) + (let* ((dims (mapcar #'min (array-dimensions src) (array-dimensions dst))) + (r (array-rank src)) + (s (make-list r :initial-element 0))) + (setq r (1- r)) + (dotimes (x (apply #'* dims)) + (setf (apply #'aref dst s) (apply #'aref src s)) + (do ((i r (1- i))) + ((minusp i)) + (incf (nth i s)) + (when (< (nth i s) (nth i dims)) + (return)) + (setf (nth i s) 0))))) diff --git a/samples/Common Lisp/common.l b/samples/Common Lisp/common.l new file mode 100644 index 00000000..d2c8fa35 --- /dev/null +++ b/samples/Common Lisp/common.l @@ -0,0 +1,1201 @@ +;;; common.l +;;; commonLisp features for eus +;;; +;;; Copyright(c)1988, Toshihiro MATSUI, Electrotechnical Laboratory +;;; 1986-Aug +;;; 1987-Feb +;;; 1988-Jun defclass, setf + +(in-package "LISP") + +(list "@(#)$Id: common.l,v 1.1.1.1 2003/11/20 07:46:30 eus Exp $") + +(export '(lisp-implementation-type lisp-implementation-version)) + +(export '(macroexpand prog1 loop unless until + pop push pushnew inc dec incf decf)) + +(export '(defvar defparameter defconstant deflocal + dotimes dolist + do-symbols do-external-symbols do-all-symbols + psetq do do* prog prog* + case classcase otherwise + string alias + caaar caadr cadar cdaar cdadr cddar cdddr + fourth fifth sixth seventh eighth + cadddr cddddr cadddr caaddr cdaddr caddddr + flatten list-insert list-delete adjoin union intersection + set-difference set-exclusive-or rotate-list last copy-tree + copy-list nreconc rassoc acons member assoc subsetp maplist mapcon)) + +(export '(find find-if find-if-not position position-if position-if-not + count count-if count-if-not member-if member-if-not + pairlis make-list make-sequence fill replace + transpose-list + remove remove-if remove-if-not delete delete-if delete-if-not + substitute substitute-if substitute-if-not + nsubstitute nsubstitute-if nsubstitute-if-not + unique remove-duplicates extream + send-super-lexpr send-lexpr send-super send-all resend + send-super* send* + instance instance* + make-instance defclassmethod delete-method + make-class defstruct defclass readtablep copy-readtable + set-syntax-from-char + collect-if collect-instances +)) + +(export '(keywordp constantp functionp vector-class-p + compiled-function-p input-stream-p output-stream-p io-stream-p + special-form-p macro-function)) + +(export '(zerop plusp minusp oddp evenp /= logandc1 logandc2 + ecase every some reduce merge-list merge expt signum + defsetf define-setf-method + setf multiple-value-bind multiple-value-setq pop push)) +(export '(get-internal-run-time list-length values + first second third bye)) + +(export '(rad2deg deg2rad )) + +;; version +(defun lisp-implementation-type () "EusLisp") +(defun lisp-implementation-version () + (format nil + "EusLisp ~A~A for ~A created on ~A(~A)" + (car lisp-implementation-version) + (cdddr lisp-implementation-version) + *OS-VERSION* + (cadr lisp-implementation-version) + (caddr lisp-implementation-version) + )) +(setq euserror nil) +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; basic macros +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(eval-when (load eval) + +(defun macroexpand (form) + (let ((r (macroexpand2 form))) + (while (and (listp r) (macro-function (car r))) + (setq r (macroexpand2 r))) + r)) + +;(defmacro defun (fname &rest fdef) +; `(progn +; (setq (',fname . function) (cons 'lambda ',fdef)) +; (remprop ',fname 'builtin-function-entry) +; ',fname)) + +(defmacro prog1 (&rest args) + (let ((first (gensym "PROG1"))) + `(let ((,first ,(car args))) + (progn . ,(cdr args)) ,first))) + +(defmacro loop (&rest forms) + (let ((tag (gensym "LOOP"))) + `(block nil (tagbody ,tag ,@forms (go ,tag))))) +(defmacro unless (pred &rest form) + `(when (not ,pred) . ,form)) +(defmacro until (condition &rest forms) + `(while (not ,condition) ,@forms)) +(defmacro pop (s) `(prog1 (car ,s) (setf ,s (cdr ,s)))) +(defmacro push (item place) `(setf ,place (cons ,item ,place))) +(defmacro pushnew (item place &key test test-not key) + `(progn (if (not (member ,item ,place :test ,test :test-not ,test-not + :key ,key)) + (setf ,place (cons ,item ,place))) + nil)) +(defmacro inc (var &optional h) + (if h (setq h (list '+ var h)) (setq h (list '1+ var))) + (list 'setq var h)) +(defmacro dec (var &optional h) + (if h (setq h (list '- var h)) (setq h (list '1- var))) + (list 'setq var h)) +(defmacro incf (var &optional h) + (if h (setq h (list '+ var h)) (setq h (list '1+ var))) + (list 'setf var h)) +(defmacro decf (var &optional h) + (if h (setq h (list '- var h)) (setq h (list '1- var))) + (list 'setf var h)) + +(defmacro defvar (var &optional (init nil) (doc nil)) + (unless (symbolp var) (error 20)) + `(when (eql (send ',var :vtype) 1) + (send ',var :vtype 2) + (if (not (boundp ',var)) + (send ',var :global ,init ,doc )) + ',var)) + +(defmacro deflocal (var &optional (init nil) (doc nil)) + (unless (symbolp var) (error 20)) + `(progn + (send ',var :special ,init ,doc) + ',var)) + +(defmacro defparameter (var init &optional (doc nil)) + (unless (symbolp var) (error 20)) + `(send ',var :global ,init ,doc)) + +(defmacro defconstant (sym val &optional doc) + (unless (symbolp sym) (error 20)) + `(send ',sym :constant ,val ,doc) ) + + +(defmacro dotimes (vars &rest forms) + (let ((endvar (gensym "DOTIMES"))) + `(let ((,(car vars) 0) (,endvar ,(cadr vars))) + (declare (integer ,(car vars) ,endvar)) + (while (< ,(car vars) ,endvar) + ,@forms + (setq ,(car vars) (1+ ,(car vars)))) + ,(caddr vars)))) + +(defmacro dolist (vars &rest forms) + (let ((lists (gensym "DOLIST")) (decl (car forms))) + (if (and (consp decl) (eq (car decl) 'declare)) + (setq forms (cdr forms)) + (setq decl nil)) + `(let ((,(car vars) nil) (,lists ,(cadr vars))) + ,decl + (while ,lists + (setq ,(car vars) (pop ,lists)) + ,@forms) + ,(caddr vars)))) + +(defmacro do-symbols (vars &rest forms) + (let* ((symbols (gensym "DOSYM")) + (v (car vars)) + (pkg (if (cadr vars) (cadr vars) '*package*)) + (pkgv (gensym)) + (i (gensym)) + (size (gensym)) + (svec (gensym)) + ) + `(let* ((,v nil) + (,pkgv (find-package ,pkg)) + (,i 0) + (,svec (,pkgv . intsymvector)) + (,size (length ,svec))) + (while (< ,i ,size) + (setq ,v (elt ,svec ,i)) + (inc ,i) + (when (symbolp ,v) . ,forms)) + ,(caddr vars)))) + +(defmacro do-external-symbols (vars &rest forms) + (let* ((symbols (gensym "DOEXTSYM")) + (v (car vars)) + (pkg (if (cadr vars) (cadr vars) '*package*)) + (pkgv (gensym)) + (i (gensym)) + (size (gensym)) + (svec (gensym)) + ) + `(let* ((,v nil) + (,pkgv (find-package ,pkg)) + (,i 0) + (,svec (,pkgv . symvector)) + (,size (length ,svec))) + (while (< ,i ,size) + (setq ,v (elt ,svec ,i)) + (inc ,i) + (when (symbolp ,v) . ,forms)) + ,(caddr vars)))) + +(defmacro do-all-symbols (var &rest forms) + (let ((apackage (gensym "DOALLSYM"))) + `(dolist (,apackage (list-all-packages) ,(cadr var)) + (do-symbols (,(car var) ,apackage) . ,forms) ) + )) + +(defmacro psetq (&rest varvals) + (let* (vars vals gvars) + (while varvals + (push (pop varvals) vars) + (push (pop varvals) vals) + (push (gensym "PSETQ") gvars)) + (setq vars (nreverse vars) vals (nreverse vals) gvars (nreverse gvars)) + `(let* ,(mapcar #'list gvars vals) + (setq . ,(mapcan #'list vars gvars)) + nil))) + +(defmacro do (vars endtest &rest body) + (let ((decl (car body)) (tag (gensym "DO"))) + (if (and (consp decl) (eq (car decl) 'declare)) + (setq body (cdr body)) + (setq decl nil)) + `(block nil + (let + ,(mapcar + #'(lambda (v) (list (car v) (cadr v))) + vars) + ,decl + (tagbody + ,tag + (if ,(car endtest) (return (progn . ,(cdr endtest)))) + ,@body + (psetq . ,(mapcan #'(lambda (v) (if (cddr v) (list (car v) (caddr v)))) + vars)) + (go ,tag))) ))) + +(defmacro do* (vars endtest &rest body) + (let ((decl (car body)) (tag (gensym "DO*"))) + (if (and (consp decl) (eq (car decl) 'declare)) + (setq body (cdr body)) + (setq decl nil)) + `(block nil + (let* + ,(mapcar + #'(lambda (v) (list (car v) (cadr v))) + vars) + ,decl + (tagbody + ,tag + (if ,(car endtest) (return (progn . ,(cdr endtest)))) + ,@body + (setq . ,(mapcan #'(lambda (v) (if (cddr v) (list (car v) (caddr v)))) + vars)) + (go ,tag))) ))) + + +(defmacro prog (vars &rest body) + `(block nil + (let ,vars + (tagbody ,@body)))) +(defmacro prog* (vars &rest body) + `(block nil + (let* ,vars + (tagbody ,@body)))) + +) +;; +;; case +;; +(eval-when (load eval) +(defun casebody (body) (if (cdr body) (cons 'progn body) (car body))) + +(defun casehead (keyvar head) + (if (atom head) + (if (memq head '(t otherwise)) + t + (list 'eq keyvar (list 'quote head))) + (list 'memq keyvar (list 'quote head)) )) + +(defun case1 (keyvar clauses) + (if (atom clauses) + nil + (list 'if + (casehead keyvar (caar clauses)) + (casebody (cdar clauses)) + (case1 keyvar (cdr clauses)) nil))) + +(defmacro case (key &rest clauses) + (let ((keyvar (gensym "CASE")) (result nil)) + (list 'let (list (list keyvar key)) (case1 keyvar clauses)) + )) + +(defun classcasehead (keyvar head) + (if (memq head '(t otherwise)) + t + (if (atom head) + `(derivedp ,keyvar ,head) + `(or . ,(mapcar #'(lambda (x) `(derivedp ,keyvar ,x)) head))))) + +(defun classcase1 (keyvar clauses) + (if (atom clauses) + nil + (list 'if + (classcasehead keyvar (caar clauses)) + (casebody (cdar clauses)) + (classcase1 keyvar (cdr clauses)) nil))) + +(defmacro classcase (key &rest clauses) + (let ((kv (gensym "CCASE"))) + `(let ((,kv ,key)) ,(classcase1 kv clauses)))) +) + +;; string + +(defun string (x) + (if (stringp x) x + (if (symbolp x) (copy-seq (x . pname)) + (if (numberp x) (format nil "~d" x) + (error x))))) + +; +; more list functions +; +(eval-when (load eval) + (defun alias (new old) (setslot new symbol 'function + (symbol-function old))) + (alias 'list-length 'length) + (alias 'values 'list) + ) + +(eval-when (load eval) +(defun caaar (x) (car (caar x))) +(defun caadr (x) (car (cadr x))) +(defun cadar (x) (car (cdar x))) +(defun cdaar (x) (cdr (caar x))) +(defun cdadr (x) (cdr (cadr x))) +(defun cddar (x) (cdr (cdar x))) +(defun cdddr (x) (cdr (cddr x))) +(alias 'first 'car) +(alias 'second 'cadr) +(alias 'third 'caddr) +(defun fourth (x) (cadr (cddr x))) +(defun fifth (x) (caddr (cddr x))) +(defun sixth (x) (caddr (cdddr x))) +(defun seventh (x) (caddr (cddddr x))) +(defun eighth (x) (cadddr (cddddr x))) +#| +(defun cadddr (x) (car (cdddr x))) +|# +(defun cddddr (x) (cddr (cddr x))) +(defun cadddr (x) (cadr (cddr x))) +(defun caaddr (x) (caar (cddr x))) +(defun cdaddr (x) (cdar (cddr x))) +(defun caddddr (x) (cadr (cdddr x))) +(defun flatten (l &optional accumulator) + (cond + ((null l) accumulator) + ((atom l) (cons l accumulator)) + (t (flatten (car l) + (flatten (cdr l) accumulator)))) ) + +(defun list-insert (item pos list) + "insert item as the pos'th element in list. +if pos is bigger than the length of list, item is nconc'ed at the tail" + (cond ((null list) (list item)) + ((>= pos (length list)) (nconc list (list item))) + ((= pos 0) (cons item list)) + (t (let ((tail (cons item (nthcdr pos list)))) + (rplacd (nthcdr (1- pos) list) tail) + list)))) + +(defun list-delete (lst n) "(lst n) delete nth element of lst" + (if (= n 0) + (setq lst (cdr lst)) + (rplacd (nthcdr (1- n) lst) (nthcdr (1+ n) lst)) ) + lst) + +(defun adjoin (item list &key (test #'eq) (test-not) (key #'identity)) + (if (member item list :test test :test-not test-not :key key) + list + (cons item list))) + +(defun union (list1 list2 &key (test #'eq) (test-not) (key #'identity)) + (let (result) + (dolist (item list1) + (unless (member (funcall key item) result + :test test :test-not test-not :key key) + (setq result (cons item result)))) + (dolist (item list2) + (unless (member (funcall key item) result + :test test :test-not test-not :key key) + (setq result (cons item result)))) + (reverse result))) + +(defun intersection (list1 list2 &key (test #'eq) (test-not) (key #'identity)) + (let (r) + (dolist (item list1) + (if (member (funcall key item) list2 + :test test :test-not test-not :key key) + (setq r (cons item r)))) + r)) + +(defun set-difference (list1 list2 &key (test #'eq) (test-not) + (key #'identity)) + (let (result) + (dolist (l1 list1) + (unless (member (funcall key l1) list2 + :test test :test-not test-not :key key) + (push l1 result))) + (nreverse result))) + +(defun set-exclusive-or (list1 list2 &key (test #'eq) (test-not) + (key #'identity)) + (let (result1 result2) + (dolist (l1 list1) + (setq l1 (funcall key l1)) + (unless (member l1 list2 :test test :test-not test-not :key key) + (push l1 result1))) + (dolist (l2 list2) + (setq l2 (funcall key l2)) + (unless (member l2 list1 :test test :test-not test-not :key key) + (push l2 result2))) + (nconc result1 result2))) + +(defun rotate-list (l) (append (cdr l) (list (car l)))) +(defun last (x) + (while (consp (cdr x)) (setq x (cdr x))) + x) +(defun copy-tree (x) (subst t t x)) +(defun copy-list (x) (nreverse (reverse x))) +(defun nreconc (x y) (nconc (nreverse x) y)) +(defun rassoc (item alist) + (dolist (a alist) + (if (equal item (cdr a)) (return-from rassoc a)))) +(defun acons (key datum alist) (cons (cons key datum) alist)) +(defun member (item list &key key test test-not) + (supermember item list key test test-not)) +(defun assoc (item alist &key key test test-not) + (superassoc item alist key test test-not)) +(defun subsetp (sub super &key key test test-not) + (every #'(lambda (s) (member s super :key key :test test :test-not test-not)) + sub)) +(defun maplist (func arg &rest more-args &aux result) + (if more-args + (let (arglist margs) + (while arg + (setq arglist nil) + (push arg arglist) + (setq arg (cdr arg)) + (setq margs more-args) + (while margs + (push (car margs) arglist) + (setf (car margs) (cdar margs)) + (setq margs (cdr margs)) ) + (push (apply func (nreverse arglist)) result) )) + (while arg + (push (funcall func arg) result) + (setq arg (cdr arg)))) + (nreverse result)) + +(defun mapcon (func arg &rest more-args &aux result) + (if more-args + (let (arglist margs) + (while arg + (setq arglist nil) + (push arg arglist) + (setq arg (cdr arg)) + (setq margs more-args) + (while margs + (push (car margs) arglist) + (setf (car margs) (cdar margs)) + (setq margs (cdr margs)) ) + (setq result (nconc (apply func (nreverse arglist)) result) )) ) + (while arg + (setq result (nconc (funcall func arg) result)) + (setq arg (cdr arg)))) + (nreverse result)) + +(defun find (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) (key #'identity)) + (system::raw-find item seq test test-not key nil nil start end)) +(defun find-if (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-find nil seq nil nil key pred nil start end)) +(defun find-if-not (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-find nil seq nil nil key nil pred start end)) + +(defun position (item seq &key (start 0) (end (length seq)) (count 1) + (test #'eq) (test-not nil) (key #'identity)) + (system::raw-position item seq test test-not key nil nil start end count)) +(defun position-if (pred seq &key (start 0) (end (length seq)) (count 1) (key #'identity)) + (system::raw-position nil seq nil nil key pred nil start end count)) +(defun position-if-not (pred seq &key (start 0) (end (length seq)) (count 1) (key #'identity)) + (system::raw-position nil seq nil nil key nil pred start end count)) + +(defun count (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) (key #'identity)) + (system::raw-count item seq test test-not key nil nil start end)) +(defun count-if (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-count nil seq nil nil key pred nil start end)) +(defun count-if-not (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-count nil seq nil nil key nil pred start end)) +(defun member-if (test list &key (key #'identity)) + (while list + (if (funcall test (funcall key (car list))) + (return-from member-if list) + (setq list (cdr list))))) +(defun member-if-not (test list &key (key #'identity)) + (while list + (if (not (funcall test (funcall key (car list))) ) + (return-from member-if-not list) + (setq list (cdr list))))) +(defun collect-if (func seq &aux r) + (dolist (s seq) + (if (funcall func s) (push s r)) ) + (nreverse r) ) +(defun collect-instances (klass list) + (collect-if #'(lambda (i) (derivedp i klass)) (flatten list))) + +(defun pairlis (l1 l2 &optional alist) + (if l1 + (cons (cons (car l1) (car l2)) (pairlis (cdr l1) (cdr l2) alist)) + alist)) + +(defun transpose-list (dlist) + (let (r) + (dotimes (i (length (car dlist))) + (push (mapcar #'(lambda (x) (nth i x)) dlist) r)) + (nreverse r))) + +(defun make-list (leng &key initial-element) + (let (r) + (unless (integerp leng) (error "integer required for length of make-list")) + (dotimes (i leng r) + (push initial-element r)))) + +(defun make-sequence (type size &key initial-element) + (if (or (memq type '(cons list)) (eq type cons)) + (make-list size :initial-element initial-element) + (make-array size :element-type type :initial-element initial-element))) + +(defun fill (seq item &key (start 0) (end (length seq))) + (system::raw-fill seq item start end)) + +(defun replace (dest src &key (start1 0) (end1 (length dest)) + (start2 0) (end2 (length src))) + (let ((result dest) (count (min (- end1 start1) (- end2 start2)))) + (cond ((listp dest) + (setq dest (nthcdr start1 dest)) + (cond ((listp src) + (setq src (nthcdr start2 src)) + (dotimes (c count) + (setq (dest . car) (pop src)) + (pop dest))) + (t + (dotimes (c count) + (setq (dest . car) (aref src start2)) + (inc start2) (pop dest))))) + ((listp src) ; list --> vector + (setq src (nthcdr start2 src)) + (dotimes (c count) + (aset dest start1 (pop src)) + (inc start1))) + (t (system::vector-replace dest src start1 end1 start2 end2))) + result)) + +(defun remove (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::universal-remove item seq test test-not key nil nil start end count)) +(defun remove-if (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::universal-remove nil seq nil nil key pred nil start end count)) +(defun remove-if-not (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::universal-remove nil seq nil nil key nil pred start end count)) + +(defun delete (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::raw-delete item seq test test-not key nil nil start end count)) +(defun delete-if (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-delete nil seq nil nil key pred nil start end count)) +(defun delete-if-not (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-delete nil seq nil nil key nil pred start end count)) + +(defun substitute (newitem olditem seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::raw-substitute newitem olditem seq test test-not key nil nil start end count)) +(defun substitute-if (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-substitute newitem nil seq nil nil key pred nil start end count)) +(defun substitute-if-not (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-substitute newitem nil seq nil nil key nil pred start end count)) + +(defun nsubstitute (newitem olditem seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::raw-nsubstitute newitem olditem seq test test-not key nil nil start end count)) +(defun nsubstitute-if (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-nsubstitute newitem nil seq nil nil key pred nil start end count)) +(defun nsubstitute-if-not (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-nsubstitute newitem nil seq nil nil key nil pred start end count)) + +(defun unique (l) + (cond + ((atom (cdr l)) l) + ((memq (car l) (cdr l)) (unique (cdr l))) + (t (cons (car l) (unique (cdr l)))))) + +(defun remove-duplicates (seq &key (test #'eq) (test-not) (key #'identity) + (start 0) (end 1000000)) + (system::raw-remove-duplicates seq test test-not key start end)) + +(defun extream (seq test &optional (key #'identity)) + (if (null seq) + nil + (let* ((ext (elt seq 0)) (p (funcall key ext)) x) + (if (consp seq) + (dolist (v (cdr seq)) + (when (funcall test (funcall key v) p) + (setq ext v + p (funcall key ext))) ) + (dotimes (i (length seq)) + (when (funcall test + (funcall key (setq x (aref seq i))) + p) + (setq ext x + p (funcall key ext)))) ) + ext)) ) +) ;eval-when + + +;;; +;;; equivalent pairs from WINSTON +;;; + +#| +(eval-when (load eval) +(defun coalesce (pairs) (coalesce-aux pairs nil)) +(defun coalesce-aux (pairs classes) + (cond ((null pairs) classes) + (t (coalesce-aux (cdr pairs) + (absorb (car pairs) classes))))) +(defun stick-in (new classes) + (cond ((member new (car classes)) classes) + (t (cons (cons new (car classes)) + (cdr classes))))) +(defun absorb (pair classes) + (cond ((null classes) (list pair)) + ((member (car pair) (car classes)) + (stick-in (cadr pair) classes)) + ((member (cadr pair) (car classes)) + (stick-in (car pair) classes)) + (t (cons (car classes) + (absorb pair (cdr classes)))))) +) ;eval-when ; end of more list functions +|# + + +;;; +;;; LEO functions +;;; +(eval-when (load eval) +(defmacro send-super-lexpr (selector &rest msgs) + (declare (type metaclass class)) + `(apply #'send-message self (class . super) ,selector . ,msgs) + ) +(defmacro send-super* (&rest msgs) + (declare (type metaclass class)) + `(apply #'send-message self (class . super) . ,msgs) + ) +(defmacro send-lexpr (target selector &rest msgs) + `(apply #'send ,target ,selector . ,msgs) + ) +(defmacro send* (&rest msgs) + `(apply #'send . ,msgs) + ) +(defmacro send-super (selector &rest msgs) + (declare (type metaclass class)) + `(send-message self (class . super) ,selector ,@msgs)) + +(defun send-all (receivers &rest mesg) + (mapcar #'(lambda (r) (apply 'send r mesg)) receivers)) + +(defun resend (obj mesg) + (eval (cons 'send (cons obj mesg)))) + +(defmacro instance (cls &rest message) + (if message + (let ((v (gensym "INST"))) + `(let ((,v (instantiate ,cls))) (send ,v ,@message) ,v)) + `(instantiate ,cls))) + +(defmacro instance* (cls &rest message) + (if message + (let ((v (gensym "INST"))) + `(let ((,v (instantiate ,cls))) (send* ,v ,@message) ,v)) + `(instantiate ,cls))) + +(defun make-instance (klass &rest args) + (let ((inst (instantiate klass))) + (while args + (setslot inst klass (string (pop args)) (pop args))) + inst)) + +(defmacro defclassmethod (classname &rest methods) + `(defmethod ,(metaclass-name (class (symbol-value classname))) + . ,methods)) +(defun delete-method (classobj methodname) + (setf (metaclass-methods classobj) + (delete methodname (metaclass-methods classobj) :key #'car)) + (system::method-cache t)) + +;;; +;;; defclass macro (T.Matsui 1988-Jun) +;;; + +(defun make-class (name &key + (super object) + (include object) + (printer nil) + (constructor nil) + (predicate nil) + (copier nil) + ((:metaclass metaklass) nil) + (element-type nil) + (size -1) + ((:slots varlist) nil) + (documentation nil)) + (if (symbolp super) (setq super (symbol-value super))) + (let ((classobj (if (boundp name) (symbol-value name))) + (variables) (types) (forwards) + (etype) (index 0) (accessor) (p)) + (cond ((null (classp classobj)) + (cond + (metaklass) + ((classp metaklass)) + (super (setq metaklass (class super))) + (t (setq metaklass (symbol-value 'metaclass)))) + (setq classobj (instantiate metaklass))) + (t (setq metaklass (class classobj)))) + (setq variables (nreverse (coerce (super . vars) cons)) + types (nreverse (coerce (super . types) cons)) + forwards (nreverse (coerce (super . forwards) cons))) + (dolist (v varlist) + (cond ((consp v) + (if (member (car v) variables) + (error "duplicated object variable name")) + (push (car v) variables) + (setq p (position :type v)) + (push (if p (elt v (1+ p)) t) types) + (setq p (position :forward v)) + (push (if p (elt v (1+ p)) nil) forwards)) + ((symbolp v) + (if (member v variables) + (error "duplicated object variable name")) + (push v variables) + (push t types) + (push nil forwards)) + (t (error "variable name expected for :slots")))) + (setq variables (coerce (nreverse variables) vector) + types (coerce (nreverse types) vector) + forwards (coerce (nreverse forwards) vector)) + (setq etype (cdr (assq element-type + '((:BIT . 1) (:CHAR . 2) (:BYTE . 3) + (:INTEGER . 4) (:FLOAT . 5) (:FOREIGN . 6))))) + (if (null etype) + (setq etype (if (subclassp metaklass vectorclass) + (vectorclass-element-type super) + 0))) + (setq (classobj . name) name + (classobj . vars) variables + (classobj . types) types + (classobj . forwards) forwards + (classobj . super) super) + (if (subclassp metaklass vectorclass) + (setq (classobj . element-type) etype + (classobj . size) size)) + (if (null (classobj . cix)) (enter-class classobj)) +;;;??? +;;; (proclaim (list 'special name)) +;; (set name classobj) +;; (send name :global classobj) + (putprop name documentation :class-documentation) +;; define slot access functions and setf methods for all variables + (setq variables (coerce variables cons)) + (dolist (v variables) + (setq accessor (intern (concatenate string + (string name) "-" (string v)))) + (setf (symbol-function accessor) + `(macro (obj) (list 'slot obj ',name ,index))) + (incf index)) + classobj )) + + +(defmacro defstruct (name &rest slots) + `(progn + (send ',name :global + (make-class ',name :slots ',slots)) + ',name)) + + +(defmacro defclass (name &key slots + (super 'object) + (size -1) + ((:metaclass metaklass) nil) + element-type + documentation + (doc documentation)) + `(progn + (send ',name :global + (make-class ',name + :super ,super + :slots ',slots + :metaclass ,metaklass + :element-type ,element-type + :size ,size + :documentation ,doc) ) + ',name)) + + +;;; +;;; READTABLES +;;; +(eval-when (load eval) +(defun readtablep (x) (derivedp x readtable)) +(defun copy-readtable (&optional (from *readtable*) (to nil)) + (when (null from) (setq from *default-readtable*)) + (when (null to) + (setq to (instantiate readtable)) + (setf (readtable-syntax to) (instantiate string 256) + (readtable-macro to) (instantiate vector 256) + (readtable-dispatch-macro to) (instantiate vector 256))) + (if (or (null (readtablep from)) (null (readtablep to))) + (error "readtable expected")) + (replace (readtable-syntax to) (readtable-syntax from)) + (replace (readtable-macro to) (readtable-macro from)) + (replace (readtable-dispatch-macro to) (readtable-dispatch-macro from)) + (setf (readtable-case to) (readtable-case from)) + to) + +(defun set-syntax-from-char + (to-char from-char &optional (to-readtable *readtable*) + (from-readtable *default-readtable*)) + (let (syn) + (setq syn (aref (readtable-syntax from-readtable) from-char)) + (aset (readtable-syntax to-readtable) to-char syn) + (if (or (eq syn 7) (eq syn 8)) + (aset (readtable-macro to-readtable) to-char + (aref (readtable-macro from-readtable) from-char))) + syn)) +) + + +;; +;; predicates +;; +(eval-when (load eval) +(defun keywordp (sym) + (declare (type symbol sym)) + (and (symbolp sym) (eq (sym . homepkg) *keyword-package*))) + +(defun constantp (obj) + (declare (type symbol obj)) + (if (symbolp obj) + (if (or (keywordp obj) (eq (obj . vtype) 0)) t nil) + (if (listp obj) + (if (eq (car obj) 'quote) t nil) + (if (atom obj) t nil)))) + +(defun functionp (obj) + (cond ((numberp obj) nil) + ((listp obj) + (if (or (memq (car obj) '(lambda lambda-closure))) t nil)) + ((derivedp obj compiled-code) + (eq (compiled-code-type obj) 0)) + ((and (symbolp obj) (fboundp obj)) + (functionp (symbol-function obj))) + (t nil))) + +(defun vector-class-p (p) (derivedp p vectorclass)) +(defun compiled-function-p (x) (derivedp x compiled-code)) +(defun input-stream-p (obj) + (declare (stream obj)) + (or (and (derivedp obj stream) (eq (obj . direction) :input)) + (derivedp obj io-stream))) +(defun output-stream-p (obj) + (declare (stream obj)) + (or (and (derivedp obj stream) (eq (obj . direction) :output)) + (derivedp obj io-stream))) +(defun io-stream-p (obj) (derivedp obj io-stream)) + +(defun special-form-p (s) + (and (symbolp s) + (fboundp s) + (setq s (symbol-function s)) + (compiled-function-p s) + (eq (s . type) 2))) + +(defun macro-function (s) + (and (symbolp s) + (fboundp s) + (setq s (symbol-function s)) + (if (and (compiled-function-p s) + (eq (s . type) 1)) + s + (if (and (listp s) (eq (car s) 'macro)) s nil) + ))) + +(defun zerop (n) (= n 0)) +(defun plusp (n) (> n 0)) +(defun minusp (n) (< n 0)) +(defun oddp (n) (logbitp 0 n)) +(defun evenp (n) (not (logbitp 0 n))) +(defun /= (n1 n2) (not (= n1 n2))) +(defun logandc1 (x y) (logand (lognot x) y)) +(defun logandc2 (x y) (logand x (lognot y))) +(defmacro ecase (&rest x) (cons 'case x)) + +(defun every (pred arg &rest more-args) + (cond ((and (null more-args) (listp arg)) + (while arg (unless (funcall pred (pop arg)) (return-from every nil)))) + (t + (setq arg (cons arg more-args)) + (dotimes (i (length (car arg))) + (unless (apply pred (mapcar #'(lambda (x) (elt x i)) arg)) + (return-from every nil))))) + t) + +(defun some (pred arg &rest more-args &aux result) + (setq arg (cons arg more-args)) + (dotimes (i (length (car arg))) + (if (setq result (apply pred (mapcar #'(lambda (x) (elt x i)) arg))) + (return-from some result))) + nil) +) + +(eval-when (load eval) +(defun reduce (func seq &key (start 0) (end (length seq)) + from-end initial-value) + (let ((length (- end start))) + (when from-end (setq seq (reverse seq))) + (cond + ((and (= length 1) (null initial-value)) (elt seq start)) + ((= length 0) + (if initial-value initial-value (funcall func))) + (t + (unless initial-value + (setq initial-value + (funcall func (elt seq start) (elt seq (inc start)))) + (dec length 2) (inc start)) + (dotimes (i length) + (setq initial-value + (funcall func initial-value (elt seq (+ start i))))) + initial-value)))) + +(defun merge-list (list1 list2 pred key &aux result p1 e1 e2 pp1 pp2) + (while (and list2 (not (funcall pred (funcall key (car list1)) + (funcall key (car list2))))) + (push (pop list2) result)) + (setq result (nreverse result)) + (setq p1 list1) + (while (and list2 (cdr p1)) + (setq e2 (funcall key (car list2))) + (while (and p1 (funcall pred (funcall key (cadr p1)) e2)) (pop p1)) + (when p1 + (setf pp1 (cdr p1) + pp2 (cdr list2) + (cdr p1) list2 + (cdr list2) pp1 + p1 list2 + list2 pp2)) ) + (nconc result list1 list2)) + +(defun merge (result-class seq1 seq2 pred &key (key #'identity)) + (if (and (eq result-class cons) (listp seq1) (listp seq2)) + (merge-list seq1 seq2 pred key) + (let* ((l1 (length seq1)) (l2 (length seq2)) (l (+ l1 l2)) + (result (make-sequence result-class l)) + (i1 0) (i2 0) (j 0) (e1) (e2) (e)) + (while (< j l) + (cond ((>= i1 l1) (setq e (elt seq2 i2)) (inc i2)) + ((>= i2 l2) (setq e (elt seq1 i1)) (inc i1)) + (t (setq e1 (elt seq1 i1) + e2 (elt seq2 i2)) + (if (funcall pred (funcall key e1) (funcall key e2)) + (progn (inc i1) (setq e e1)) + (progn (inc i2) (setq e e2))))) + (setf (elt result j) e) + (inc j)) + result))) +) + + +;; +;; arithmetics aux +;; + +(defun expt (a x) + (cond ((and (integerp x) (>= x 0)) + (if (zerop x) + 1 + (let ((b a) (y 1) (ix (1- x))) + (declare (integer y ix)) + (while (> ix 0) + (cond ((> ix y) + (setq b (* b b) + ix (- ix y) + y (ash y 1))) + (t (setq b (* b a) ix (1- ix))))) + b))) + (t (exp (* x (log a)))))) +(defun signum (x) (if (zerop x) x (/ x (abs x)))) +(defun rad2deg (rad) (/ (* 360.0 rad) 2pi)) +(defun deg2rad (deg) (/ (* 2pi deg) 360.0)) +) + +;;;; (C) Copyright Taiichi Yuasa and Masami Hagiya, 1984. All rights reserved. +;;;; +;;;; setf routines +;;;; Modified by T.Matsui to be run on euslisp +;;;; 1988-Jun-27 + +;;; DEFSETF macro. +(defmacro defsetf (access-fn &rest rest) + (cond ((and (car rest) (or (symbolp (car rest)) (functionp (car rest)))) + `(progn (putprop ',access-fn ',(car rest) 'setf-update-fn) + (remprop ',access-fn 'setf-lambda) + (remprop ',access-fn 'setf-method) + (putprop ',access-fn + ,(when (not (endp (cdr rest))) + (unless (stringp (cadr rest)) + (error "A doc-string expected.")) + (unless (endp (cddr rest)) + (error "Extra arguments.")) + (cadr rest)) + 'setf-documentation) + ',access-fn)) + (t + (unless (= (list-length (cadr rest)) 1) + (error "(store-variable) expected.")) + `(progn (putprop ',access-fn ',rest 'setf-lambda) + (remprop ',access-fn 'setf-update-fn) + (remprop ',access-fn 'setf-method) +; (putprop ',access-fn +; ,(find-documentation (cddr rest)) +; 'setf-documentation) + ',access-fn)))) + + +;;; DEFINE-SETF-METHOD macro. +(defmacro define-setf-method (access-fn &rest rest) + `(progn (putprop ',access-fn #'(lambda ,@rest) 'setf-method) + (remprop ',access-fn 'setf-lambda) + (remprop ',access-fn 'setf-update-fn) +; (putprop ',access-fn +; ,(find-documentation (cdr rest)) +; 'setf-documentation) + ',access-fn)) + +;;; The expansion function for SETF. +(defun setf-expand-1 (place newvalue) + (let (g) + (setq place (macroexpand place)) + (cond ((and (consp place) (eq (car place) 'the)) + (setf-expand-1 (caddr place) `(the ,(cadr place) ,newvalue))) + ((symbolp place) `(setq ,place ,newvalue)) + ((and (symbolp (car place)) (setq g (get (car place) 'setf-update-fn))) + `(,g ,@(cdr place) ,newvalue)) + ((and (symbolp (car place)) + (setq g (get (car place) 'structure-access)) + (get (car place) 'setf-lambda) + (not (eq (car g) 'list)) + (not (eq (car g) 'vector))) + `(system::structure-set ,(cadr place) ',(car g) ,(cdr g) ,newvalue)) + ((macro-function (car place)) + (setf-expand-1 (macroexpand place) newvalue)) + ((setq g (get (car place) 'setf-lambda)) + (apply (append '(lambda) (list (append (cadr g) (car g))) (cddr g)) + newvalue (cdr place))) +; ((get (car place) 'setf-method) +; (apply (get (car form) 'setf-method) (cdr place))) + (t (error "SETF?"))))) + +(defun setf-expand (l) + (cond ((endp l) nil) + ((endp (cdr l)) (error "~S is an illegal SETF form." l)) + (t + (cons (setf-expand-1 (car l) (cadr l)) + (setf-expand (cddr l)))))) + + +;;; SETF macro. +(defmacro setf (&rest rest) + (cond ((endp rest) nil) + ((endp (cdr rest)) (error "~S is an illegal SETF form." rest)) + ((endp (cddr rest)) (setf-expand-1 (car rest) (cadr rest))) + (t (cons 'progn (setf-expand rest))))) + +;(defmacro incf (form &optional (d 1)) +; `(setf ,form (+ ,form ,d))) +;(defmacro decf (form &optional (d 1)) +; `(setf ,form (- ,form ,d))) + +;;; +;;; MULTI-VALUE simulation macros +;;; +(defmacro multiple-value-bind (vlist init &rest forms) + (let* ((inits (gensym "MULT")) (vilist) (count 0)) + (dolist (v vlist) + (push (list v `(elt ,inits ,count)) vilist) + (inc count)) + `(let* ((,inits ,init) . ,vilist) . ,forms))) + +(defmacro multiple-value-setq (vlist form) + (let ((i 0) (tempvar (gensym "MULT")) setq-forms) + (dolist (v vlist) + (push (list + (second + (assoc i + '((0 first) (1 second) (2 third) + (3 fourth)(4 fifth) (5 sixth) (6 seventh)))) + tempvar) + setq-forms) + (push v setq-forms) + (incf i)) + `(let ((,tempvar ,form)) + (setq . ,setq-forms)))) + +(alias 'values 'list) + +#| +(defun quick-sort (sequence start end predicate key &aux (j 0) (k 0) exch) + (declare (fixnum start end j k)) + (when (<= end (the fixnum (1+ start))) + (return-from quick-sort sequence)) + (setq j start) + (setq k (1- end)) + (do ((d (aref sequence start))) + ((> j k)) + (do () + ((or (> j k) + (funcall predicate + (funcall key (aref sequence k)) + (funcall key d)))) + (decf k)) + (when (< k start) + (quick-sort sequence (1+ start) end predicate key) + (return-from quick-sort sequence)) + (do () + ((or (> j k) + (not (funcall predicate + (funcall key (aref sequence j)) + (funcall key d))))) + (incf j)) + (when (> j k) (return)) + (setf exch (aref sequence k) + (aref sequence k) (aref sequence j) + (aref sequence j) exch) + (incf j) + (decf k)) + (quick-sort sequence start j predicate key) + (quick-sort sequence j end predicate key) + sequence) + +(defun qsort (seq test &optional (key #'identity) &aux (vec nil) (s nil)) + (cond ((null seq) nil) + ((listp seq) + (setq vec (coerce seq vector)) + (quick-sort vec 0 (length seq) test key) + (setq s seq) + (dotimes (i (length vec)) + (rplaca s (aref vec i)) + (setq s (cdr s))) + seq) + ((vectorp seq) + (quick-sort seq 0 (length seq) test key) + seq) )) +|# + +#| +(eval-when (load eval) + (defmacro pop (s) `(prog1 (car ,s) (setf ,s (cdr ,s)))) + (defmacro push (item place) `(setf ,place (cons ,item ,place))) + ) +|# + + diff --git a/samples/Common Lisp/config.sexp b/samples/Common Lisp/config.sexp new file mode 100644 index 00000000..125892e5 --- /dev/null +++ b/samples/Common Lisp/config.sexp @@ -0,0 +1,2 @@ +((exe_name hello) + (link_order (world hello))) diff --git a/samples/Common Lisp/hello.lisp b/samples/Common Lisp/hello.lisp new file mode 100644 index 00000000..642cdd29 --- /dev/null +++ b/samples/Common Lisp/hello.lisp @@ -0,0 +1,2 @@ +(DEFUN HELLO () + (PRINT 'HELLO)) diff --git a/samples/Common Lisp/rss.sexp b/samples/Common Lisp/rss.sexp new file mode 100644 index 00000000..4898fb55 --- /dev/null +++ b/samples/Common Lisp/rss.sexp @@ -0,0 +1,103 @@ + +(:TURTLE + + (:@PREFIX "rdf:" "") + (:@PREFIX "owl:" "") + (:@PREFIX "dc:" "") + (:@PREFIX "xsd:" "") + (:@PREFIX "rdfs:" "") + + (:TRIPLES (:URIREF "") + + (:PREDICATE-OBJECT-LIST + (:URIREF #1="") + (:OBJECTS + (:QNAME "rdfs:Class"))) + + (:PREDICATE-OBJECT-LIST + (:QNAME "rdfs:comment") + (:OBJECTS + (:STRING "An RSS information channel."))) + + (:PREDICATE-OBJECT-LIST + (:QNAME "rdfs:isDefinedBy") + (:OBJECTS + (:URIREF ""))) + + (:PREDICATE-OBJECT-LIST + (:QNAME "rdfs:label") + (:OBJECTS + (:STRING "Channel")))) + + (:TRIPLES (:URIREF "") + + (:PREDICATE-OBJECT-LIST + (:URIREF #1#) + (:OBJECTS + (:QNAME "rdf:Property"))) + + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "A short text description of the subject."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Description"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:description")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS image."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Image")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS item."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Item")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS + (:STRING "Points to a list of rss:item elements that are members of the subject channel."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Items")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "The URL to which an HTML rendering of the subject will link."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Link"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "The text input field's (variable) name."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Name")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS text input."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Text Input")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "A descriptive title for the channel."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Title"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:title")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS + (:STRING + "The URL of the image to used in the 'src' attribute of the channel's image tag when rendered as HTML."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "URL"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier"))))) diff --git a/samples/Common Lisp/sample.lsp b/samples/Common Lisp/sample.lsp new file mode 100644 index 00000000..9bef6781 --- /dev/null +++ b/samples/Common Lisp/sample.lsp @@ -0,0 +1,21 @@ +;;;; -*- lisp -*- + +(in-package :foo) + +;;; Header comment. +(defvar *foo*) + +(eval-when (:execute :compile-toplevel :load-toplevel) + (defun add (x &optional y &key z) + (declare (ignore z)) + ;; Inline comment. + (+ x (or y 1)))) + +#| +Multi-line comment. +|# + +(defmacro foo (x &body b) + (if x + `(1+ ,x) ;After-line comment. + 42)) diff --git a/samples/D/mpq.d b/samples/D/mpq.d new file mode 100644 index 00000000..d72c2d2a --- /dev/null +++ b/samples/D/mpq.d @@ -0,0 +1,318 @@ +/* + * mpq.d -- D programming language module for libmpq + * + * Copyright (c) 2008 Georg Lukas + * + * 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. + * + * This module is written to support Phobos. Patches to allow binding to + * Tango are welcome. + */ + +module mpq; + +/* the following pragma does not work on DMD/Linux, generates a warning on + * GDC/Linux and has not been tested on Windows. Commented out for now. */ +// pragma(lib, "libmpq"); + +import std.string; // for format() and toStringz() +import std.traits; // for ParameterTypeTuple!() + +/* XXX: this assumes that libmpq is compiled with Large File Support on */ +alias long off_t; + +/* libmpq error return values */ +const LIBMPQ_ERROR_OPEN = -1; /* open error on file. */ +const LIBMPQ_ERROR_CLOSE = -2; /* close error on file. */ +const LIBMPQ_ERROR_SEEK = -3; /* lseek error on file. */ +const LIBMPQ_ERROR_READ = -4; /* read error on file. */ +const LIBMPQ_ERROR_WRITE = -5; /* write error on file. */ +const LIBMPQ_ERROR_MALLOC = -6; /* memory allocation error. */ +const LIBMPQ_ERROR_FORMAT = -7; /* format errror. */ +const LIBMPQ_ERROR_NOT_INITIALIZED = -8; /* init() wasn't called. */ +const LIBMPQ_ERROR_SIZE = -9; /* buffer size is to small. */ +const LIBMPQ_ERROR_EXIST = -10; /* file or block does not exist in archive. */ +const LIBMPQ_ERROR_DECRYPT = -11; /* we don't know the decryption seed. */ +const LIBMPQ_ERROR_UNPACK = -12; /* error on unpacking file. */ + +/** libmpq internal meta-data for an archive */ +extern struct mpq_archive_s; + +extern(C) { + +/* libmpq__generic information about library. */ +char *libmpq__version(); + +/* libmpq__generic mpq archive information. */ +int libmpq__archive_open(mpq_archive_s **mpq_archive, char *mpq_filename, off_t archive_offset); +int libmpq__archive_close(mpq_archive_s *mpq_archive); +int libmpq__archive_packed_size(mpq_archive_s *mpq_archive, off_t *packed_size); +int libmpq__archive_unpacked_size(mpq_archive_s *mpq_archive, off_t *unpacked_size); +int libmpq__archive_offset(mpq_archive_s *mpq_archive, off_t *offset); +int libmpq__archive_version(mpq_archive_s *mpq_archive, uint *version_); +int libmpq__archive_files(mpq_archive_s *mpq_archive, uint *files); + +/* libmpq__generic file processing functions. */ +int libmpq__file_packed_size(mpq_archive_s *mpq_archive, uint file_number, off_t *packed_size); +int libmpq__file_unpacked_size(mpq_archive_s *mpq_archive, uint file_number, off_t *unpacked_size); +int libmpq__file_offset(mpq_archive_s *mpq_archive, uint file_number, off_t *offset); +int libmpq__file_blocks(mpq_archive_s *mpq_archive, uint file_number, uint *blocks); +int libmpq__file_encrypted(mpq_archive_s *mpq_archive, uint file_number, uint *encrypted); +int libmpq__file_compressed(mpq_archive_s *mpq_archive, uint file_number, uint *compressed); +int libmpq__file_imploded(mpq_archive_s *mpq_archive, uint file_number, uint *imploded); +int libmpq__file_number(mpq_archive_s *mpq_archive, char *filename, uint *number); +int libmpq__file_read(mpq_archive_s *mpq_archive, uint file_number, ubyte *out_buf, off_t out_size, off_t *transferred); + +/* libmpq__generic block processing functions. */ +int libmpq__block_open_offset(mpq_archive_s *mpq_archive, uint file_number); +int libmpq__block_close_offset(mpq_archive_s *mpq_archive, uint file_number); +int libmpq__block_unpacked_size(mpq_archive_s *mpq_archive, uint file_number, uint block_number, off_t *unpacked_size); +int libmpq__block_read(mpq_archive_s *mpq_archive, uint file_number, uint block_number, ubyte *out_buf, off_t out_size, off_t *transferred); + +} + + +/** exception class for failed libmpq calls */ +class MPQException : Exception { + const string[] Errors = [ + "unknown error", + "open error on file", + "close error on file", + "lseek error on file", + "read error on file", + "write error on file", + "memory allocation error", + "format errror", + "init() wasn't called", + "buffer size is to small", + "file or block does not exist in archive", + "we don't know the decryption seed", + "error on unpacking file"]; + + public int errno; + this(char[] fnname = "unknown_function", int errno = 0) { + + this.errno = errno; + if (-errno >= Errors.length) + errno = 0; + super(std.string.format("Error in %s(): %s (%d)", + fnname, Errors[-errno], errno)); + } +} + + +/** template to wrap function calls and throw exceptions in case of error + * + * thanks for the idea to while(nan) blog, + * http://while-nan.blogspot.com/2007/06/wrapping-functions-for-fun-and-profit.html + * + * use: MPQ_CHECKERR(libmpq__archive_open)(&m, "foo.mpq", -1); + * returns the retval of archive_open on success; + * throws an MPQException on failure. + * + * @param Fn libmpq__function reference + * @param args libmpq__function parameters + * @return return value of libmpq__function on success + * @throw MPQException on error + */ +int MPQ_CHECKERR(alias Fn)(ParameterTypeTuple!(Fn) args) +{ + int result = Fn(args); + if (result < 0) { + /* XXX: relying on non-specified stringof() behaviour */ + throw new MPQException((&Fn).stringof[2..$], result); + } + return result; +} + + +/** mixin alias to wrap library functions into MPQ_CHECKERR. + * + * alias mpq.func_name(...) to MPQ_CHECKERR(libmpq__func_name)(...) + * @param func_name name of the function to be wrapped + */ +template MPQ_FUNC(char[] func_name) { + const char[] MPQ_FUNC = "alias MPQ_CHECKERR!(libmpq__" ~ func_name ~ ") " ~ func_name ~ ";"; +} + +alias libmpq__version libversion; /* must be direct alias because it returns char*, not error int */ +mixin(MPQ_FUNC!("archive_open")); +mixin(MPQ_FUNC!("archive_close")); +mixin(MPQ_FUNC!("archive_packed_size")); +mixin(MPQ_FUNC!("archive_unpacked_size")); +mixin(MPQ_FUNC!("archive_offset")); +mixin(MPQ_FUNC!("archive_version")); +mixin(MPQ_FUNC!("archive_files")); +mixin(MPQ_FUNC!("file_packed_size")); +mixin(MPQ_FUNC!("file_unpacked_size")); +mixin(MPQ_FUNC!("file_offset")); +mixin(MPQ_FUNC!("file_blocks")); +mixin(MPQ_FUNC!("file_encrypted")); +mixin(MPQ_FUNC!("file_compressed")); +mixin(MPQ_FUNC!("file_imploded")); +mixin(MPQ_FUNC!("file_number")); +mixin(MPQ_FUNC!("file_read")); +mixin(MPQ_FUNC!("block_open_offset")); +mixin(MPQ_FUNC!("block_close_offset")); +mixin(MPQ_FUNC!("block_unpacked_size")); +mixin(MPQ_FUNC!("block_read")); + +/** getter function named name for returning archive_* single values: + * + * Archive.() { return libmpq__archive_() } + * + * @param type return type for the original function reference + * @param name name of the original function + * @param name2 name for the prototype (defaults to name, used for "version") + * @return getter function mixin + */ +template MPQ_A_GET(char[] type, char[] name, char[] name2 = name) { + const char[] MPQ_A_GET = type ~ " " ~ name2 ~ "() { " ~ + type ~ " ret; " ~ + "archive_" ~ name ~ "(m, &ret); return ret;" ~ + "}"; +} + +/** wrapper class for an MPQ Archive + * + * syntax: auto a = new mpq.Archive("somefile.mpq"); + */ +class Archive { + mpq_archive_s *m; + File listfile; + char[][] listfiledata; + + this(char[] archivename, off_t offset = -1) { + archive_open(&m, toStringz(archivename), offset); + } + + mixin(MPQ_A_GET!("off_t", "packed_size")); + mixin(MPQ_A_GET!("off_t", "unpacked_size")); + mixin(MPQ_A_GET!("off_t", "offset")); + mixin(MPQ_A_GET!("uint", "version", "version_")); + mixin(MPQ_A_GET!("uint", "files")); + + ~this() { + archive_close(m); + } + + mpq_archive_s* archive() { + return m; + } + + File opIndex(char[] fname) { + return new File(this, fname); + } + File opIndex(int fno) { + return new File(this, fno); + } + + char[][] filelist() { + try { + if (!listfile) { + listfile = this["(listfile)"]; + listfiledata = (cast(char[])listfile.read()).splitlines(); + } + return listfiledata; + } catch (MPQException e) { + return []; + } + } + + /+uint filenumber(char[] filename) { + try { + if (!listfile) { + listfile = this["(listfile)"]; + listfiledata = (cast(char[])listfile.read()).splitlines(); + } + return listfiledata; + } catch (MPQException e) { + return []; + } + }+/ + +} + + +/** getter function named name for returning file_* single values: + * + * File.() { return libmpq__file_() } + * + * @param type return type for the original function reference + * @param name name of the original function + * @param name2 name for the prototype (defaults to name, used for "version") + * @return getter function mixin + */ +template MPQ_F_GET(char[] type, char[] name, char[] name2 = name) { + const char[] MPQ_F_GET = type ~ " " ~ name2 ~ "() { " ~ + type ~ " ret; " ~ + "file_" ~ name ~ "(am, fileno, &ret); " ~ + "return ret;" ~ + "}"; +} + +/** wrapper class for a single file in an MPQ Archive + * + * syntax: + * auto a = new mpq.Archive("somefile.mpq"); + * auto f = a["(listfile)"]; + * auto f2 = a[0]; + * auto f3 = new File(a, "(listfile)"); + */ +class File { + Archive a; + mpq_archive_s* am; + char[] filename; + uint fileno; + + this(Archive a, int fileno) { + this.a = a; + this.am = a.archive(); + if (fileno >= a.files) { + throw new MPQException(format("File(%d)", fileno), + LIBMPQ_ERROR_EXIST); + } + this.filename = format("file%04d.xxx", fileno); + this.fileno = fileno; + } + + this(Archive a, char[] filename) { + this.a = a; + this.am = a.archive(); + this.filename = filename; + /* this line will throw an exception when the file is not there */ + mpq.file_number(am, toStringz(filename), &this.fileno); + } + + mixin(MPQ_F_GET!("off_t", "packed_size")); + mixin(MPQ_F_GET!("off_t", "unpacked_size")); + mixin(MPQ_F_GET!("off_t", "offset")); + mixin(MPQ_F_GET!("uint", "blocks")); + mixin(MPQ_F_GET!("uint", "encrypted")); + mixin(MPQ_F_GET!("uint", "compressed")); + mixin(MPQ_F_GET!("uint", "imploded")); + + uint no() { return fileno; } + char[] name() { return filename; } + + ubyte[] read() { + ubyte[] content; + content.length = this.unpacked_size(); + off_t trans; + mpq.file_read(am, fileno, content.ptr, content.length, &trans); + content.length = trans; + return content; + } +} diff --git a/samples/DIGITAL Command Language/fis_gtm_kitinstal.com b/samples/DIGITAL Command Language/fis_gtm_kitinstal.com new file mode 100644 index 00000000..b4701ff9 --- /dev/null +++ b/samples/DIGITAL Command Language/fis_gtm_kitinstal.com @@ -0,0 +1,443 @@ +$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +$! ! +$! Copyright 2001, 2011 Fidelity Information Services, Inc ! +$! ! +$! This source code contains the intellectual property ! +$! of its copyright holder(s), and is made available ! +$! under a license. If you do not know the terms of ! +$! the license, please stop and do not read further. ! +$! ! +$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +$! +$! +$! KITINSTAL.COM PROCEDURE FOR THE GT.M PRODUCT +$! +$ ON CONTROL_Y THEN VMI$CALLBACK CONTROL_Y +$! ON WARNING THEN EXIT $STATUS !! allow warning errors for INSTALL REPLACE +$ IF P1 .EQS. "VMI$_INSTALL" THEN GOTO INSTALL +$ IF P1 .EQS. "VMI$_POSTINSTALL" THEN GOTO POSTINSTALL +$ IF P1 .EQS. "VMI$_IVP" THEN GOTO IVP +$ EXIT VMI$_UNSUPPORTED +$! +$INSTALL: +$ TYPE SYS$INPUT + + GT.M (c) COPYRIGHT 1985 - 2000 by Sanchez Computer Associates + ALL RIGHTS RESERVED + +$! the following 2 lines must be maintained +$ GTM$VMS_VERSION :== 072 ! Minimum VMS version required +$ ALPHA = (f$getsyi("arch_name") .eqs. "Alpha") +$ IF ALPHA +$ THEN +$ GTM$DISK_SPACE == 28000 ! Minumum disk space on system disk required +$ ELSE +$ GTM$DISK_SPACE == 16000 ! Minumum disk space on system disk required +$ ENDIF +$ IF F$ELEMENT(0,",",VMI$VMS_VERSION) .EQS. "RELEASED" +$ THEN +$ GTM$VMS_IS == F$ELEMENT(1,",",VMI$VMS_VERSION) +$ IF GTM$VMS_IS .LTS. GTM$VMS_VERSION +$ THEN +$ VMI$CALLBACK MESSAGE E VMSMISMATCH "This GT.M kit requires an existing VMS''GTM$VMS_VERSION' system." +$ EXIT VMI$_FAILURE +$ ENDIF +$ ELSE +$ GTM$VMS_IS :== +$ WRITE SYS$OUTPUT " No VMS version checking performed for field test versions." +$ ENDIF +$ IF (GTM$VMS_IS .GES. "052") THEN T1 = F$VERIFY(VMI$KIT_DEBUG) +$ VMI$CALLBACK CHECK_NET_UTILIZATION GTM$ROOM 'GTM$DISK_SPACE' +$ IF .NOT. GTM$ROOM +$ THEN +$ VMI$CALLBACK MESSAGE E NOSPACE "There is not enough disk space -- GT.M needs ''GTM$DISK_SPACE' blocks." +$ EXIT VMI$_FAILURE +$ ENDIF +$! setup default answers +$ GTM$DOPURGE :== YES +$ GTM$RUN_IVP :== YES +$ GTM$STD_CNF :== YES +$ GTM$DST_OWN :== SYSTEM +$ IF F$IDENTIFIER(GTM$DST_OWN,"NAME_TO_NUMBER") .EQ. 0 THEN GTM$DST_OWN :== 1,4 +$ GTM$SYS_DST :== YES +$ GTM$DST_DIR :== GTM_DIST +$ GTM$DST_CRE == GTM$DST_DIR +$ GTM$DST_DEV :== +$ GTM$STARTDB :== YES +$ GTM$MGR_COM :== YES +$ GTM$HLP_DIR :== NO +$ GTM$DEF_DCL :== YES +$ GTM$DEF_SYS :== YES +$ GTM$LNK_LOG :== YES +$ GTM$INSTALL :== YES +$ GTM$DEF_GLD :== YES +$ GTM$GBL_DIR :== MUMPS.GLD +$ GTM$DEF_RTN :== YES +$ GTM$RTN_DIR :== [],GTM$DIST: +$ GTM$PCT_RTN :== YES +$ VMI$CALLBACK ASK GTM$DOPURGE "Do you want to purge files replaced by this installation" 'GTM$DOPURGE' B - + "@VMI$KWD:GTMKITHLP HELP_PURGE" +$ IF .NOT. GTM$DOPURGE THEN VMI$CALLBACK SET PURGE NO +$ VMI$CALLBACK ASK GTM$STD_CNF "Do you want the standard GT.M configuration (performs INSTALL)" 'GTM$STD_CNF' B - + "@VMI$KWD:GTMKITHLP HELP_STD_CNF" +$ IF GTM$STD_CNF +$ THEN +$ GTM$SYS_DST == 1 +$ GTM$STARTDB == 1 +$ GTM$MGR_COM == 1 +$ GTM$HLP_DIR == 0 +$ GTM$DEF_DCL == 1 +$ GTM$DEF_SYS == 1 +$ GTM$INSTALL == 1 +$ GTM$LNK_LOG == 1 +$ GTM$INSTALL == 1 +$ GTM$DEF_GLD == 1 +$ GTM$DEF_RTN == 1 +$ GTM$PCT_RTN == 1 +$ GTM$DST_LOG :== SYS$COMMON:['GTM$DST_DIR'] +$ GTM$DIR_TYPE :== COMMON +$ ELSE ! Not standard configuration +$ VMI$CALLBACK ASK GTM$DST_OWN "What UIC should own the GT.M distribution" 'GTM$DST_OWN' S "@VMI$KWD:GTMKITHLP HELP_DST_OWN" +$ GTM$DST_OWN == GTM$DST_OWN - "[" - "]" +$ VMI$CALLBACK ASK GTM$SYS_DST "Do you want the GT.M distribution to go into a System Directory" 'GTM$SYS_DST' B - + "@VMI$KWD:GTMKITHLP HELP_SYS_DST" +$ IF GTM$SYS_DST +$ THEN +$ VMI$CALLBACK ASK GTM$DST_DIR "In what System Directory do you want to place GT.M" 'GTM$DST_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_SYS_DIR" +$ GTM$DST_DIR == GTM$DST_DIR - "[" - "]" +$ GTM$DST_CRE == GTM$DST_DIR +$ GTM$DST_LOG :== SYS$COMMON:['GTM$DST_DIR'] +$ GTM$DIR_TYPE :== COMMON +$ ELSE ! Not system disk +$ VMI$CALLBACK ASK GTM$DST_DEV "On which device do you want to place GT.M" "''GTM$DST_DEV'" S "@VMI$KWD:GTMKITHLP HELP_DST_DEV" +$ VMI$CALLBACK ASK GTM$DST_DIR "In what directory on that device do you want to place GT.M" 'GTM$DST_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_DST_DIR" +$ GTM$DST_DEV == GTM$DST_DEV - ":" +$ GTM$DST_DIR == GTM$DST_DIR - "[" - "]" +$ GTM$DST_LOG :== 'GTM$DST_DEV':['GTM$DST_DIR'] +$ GTM$DST_CRE == GTM$DST_LOG +$ GTM$DIR_TYPE :== USER +$ ENDIF ! system disk +$ VMI$CALLBACK ASK GTM$STARTDB "Do you want GTMSTART.COM in the startup database" 'GTM$STARTDB' B - + "@VMI$KWD:GTMKITHLP HELP_STARTDB" +$ IF .NOT. GTM$STARTDB +$ THEN +$ VMI$CALLBACK ASK GTM$MGR_COM "Do you want the GT.M .COM files in SYS$MANAGER" 'GTM$MGR_COM' B - + "@VMI$KWD:GTMKITHLP HELP_MGR_COM" +$ ENDIF +$ VMI$CALLBACK ASK GTM$HLP_DIR "Do you want the GT.M help files in SYS$HELP" 'GTM$HLP_DIR' B "@VMI$KWD:GTMKITHLP HELP_HLP_DIR" +$ VMI$CALLBACK ASK GTM$DEF_DCL "Do you want to define GT.M commands to the system" 'GTM$DEF_DCL' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_DCL" +$ VMI$CALLBACK ASK GTM$DEF_SYS "Do you want to define GT.M logical names in the System Table" 'GTM$DEF_SYS' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_SYS" +$ VMI$CALLBACK ASK GTM$LNK_LOG "Do you want to define the LNK$LIBRARY logical names" 'GTM$LNK_LOG' B - + "@VMI$KWD:GTMKITHLP HELP_LNK_LOG" +$ VMI$CALLBACK ASK GTM$RUN_IVP "Do you want to run the IVP (performs INSTALL)" 'GTM$RUN_IVP' B - + "@VMI$KWD:GTMKITHLP HELP_RUN_IVP" +$ IF GTM$RUN_IVP +$ THEN +$ GTM$PCT_RTN == 1 +$ ELSE +$ VMI$CALLBACK ASK GTM$PCT_RTN "Do you want to compile the GT.M percent routines (performs INSTALL)" 'GTM$PCT_RTN' B - + "@VMI$KWD:GTMKITHLP HELP_PCT_RTN" +$ ENDIF +$ IF (GTM$RUN_IVP .OR. GTM$PCT_RTN) +$ THEN +$ GTM$INSTALL == 1 +$ ELSE +$ VMI$CALLBACK ASK GTM$INSTALL "Do you want to INSTALL the GT.M shareable images now" 'GTM$INSTALL' B - + "@VMI$KWD:GTMKITHLP HELP_INSTALL" +$ ENDIF +$ VMI$CALLBACK ASK GTM$DEF_RTN "Do you want to have a default definition for GTM$ROUTINES" 'GTM$DEF_RTN' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_RTN" +$ IF GTM$DEF_RTN +$ THEN +$ VMI$CALLBACK ASK GTM$RTN_DIR "What is the search specification for GTM$ROUTINES" 'GTM$RTN_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_RTN_DIR" +$ ENDIF +$ VMI$CALLBACK ASK GTM$DEF_GLD "Do you want to have a default definition for GTM$GBLDIR" 'GTM$DEF_GLD' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_GLD" +$ IF GTM$DEF_GLD +$ THEN +$ VMI$CALLBACK ASK GTM$GBL_DIR "What is the file specification for GTM$GBLDIR" 'GTM$GBL_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_GBL_DIR" +$ ENDIF +$ ENDIF ! standard configuration +$! tell them what's happening +$ IF GTM$MGR_COM +$ THEN +$ WRITE SYS$OUTPUT " The following command files are created and copied to SYS$MANAGER:" +$ ELSE +$ WRITE SYS$OUTPUT " The following command files are created:" +$ ENDIF +$ TYPE SYS$INPUT + + GTMINSTALL.COM + GTMLOGICALS.COM + GTMLOGIN.COM + GTMSTART.COM + GTMSTOP.COM + + Each file contains its own user documentation. + + All the questions have been asked. Installation now proceeds without your + manual intervention for about 10-15 minutes. +$ IF GTM$RUN_IVP THEN WRITE SYS$OUTPUT " Finally the Installation Verification Procedure tests the installation." +$ WRITE SYS$OUTPUT "" +$ VMI$CALLBACK CREATE_DIRECTORY 'GTM$DIR_TYPE' 'GTM$DST_CRE' "/OWNER_UIC=[''GTM$DST_OWN'] /PROTECTION=(WO:RE)" +$ VMI$CALLBACK RESTORE_SAVESET B +$ VMI$CALLBACK RESTORE_SAVESET C +$ WRITE SYS$OUTPUT "" +$ VMI$CALLBACK MESSAGE I CRECOM "Creating command files." +$! Create GTMINSTALL.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMINSTALL.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMINSTALL.COM installs GTMSECSHR and other GT.M images." +$ WRITE OUFILE "$! GTMSECSHR is a small protected image and must be installed." +$ WRITE OUFILE "$! GTMSHR is the run-time library and is installed for performance." +$ WRITE OUFILE "$! GTM$DMOD and MCOMPILE are small images frequently used in development." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ INSTALL" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER/PROTECTED GTMSECSHR" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER GTMSHR" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER GTM$DMOD" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER MCOMPILE" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMLOGICALS.COM +$ GTM$HLP_LOG :== GTM$DIST +$ IF GTM$HLP_DIR THEN GTM$HLP_LOG :== SYS$HELP +$ OPEN /WRITE OUFILE VMI$KWD:GTMLOGICALS.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMLOGICALS.COM defines the logical names required to use GT.M." +$ WRITE OUFILE "$! By default the definitions are placed in the PROCESS table." +$ WRITE OUFILE "$! Parameter 1, if supplied should be the name of a logical name table" +$ WRITE OUFILE "$! and/or the mode of definition." +$ WRITE OUFILE "$! Assignments in a ""permanent"" table reduce GT.M activation time." +$ WRITE OUFILE "$!" +$ IF GTM$LNK_LOG THEN WRITE OUFILE "$! The LNK$LIBRARY names many require adjustment to your environment." +$ IF GTM$DEF_GLD THEN WRITE OUFILE "$! GTM$GBLDIR is defined to provide default access to a global directory." +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$! GTM$ROUTINES is defined to provide access to the GT.M utilities." +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$! You may wish to define a different structure for $ZROUTINES." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ IF (P1 .NES. """") .AND. (F$EXTRACT(0,1,P1) .NES. ""/"") THEN P1 := /'P1" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$DIST ''GTM$DST_LOG'" +$ IF GTM$DEF_GLD THEN WRITE OUFILE "$ DEFINE 'P1' GTM$GBLDIR ''GTM$GBL_DIR'" +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$ DEFINE 'P1' GTM$ROUTINES ""''GTM$RTN_DIR'""" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$HELP ''GTM$HLP_LOG'" +$ WRITE OUFILE "$ DEFINE 'P1' GTMSHR GTM$DIST:GTMSHR.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' GTMSECSHR GTM$DIST:GTMSECSHR.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$DMOD GTM$DIST:GTM$DMOD.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' MCOMPILE GTM$DIST:MCOMPILE.EXE" +$ IF GTM$LNK_LOG +$ THEN +$ N1 = 0 +$ DN = 0 +$ T1 = F$TRNLNM("LNK$LIBRARY") +$ IF (T1 .EQS. "") .OR. (F$LOCATE("GTMLIB",T1) .NE. F$LENGTH(T1)) .OR. (F$LOCATE("GTMSHR",T1) .NE. F$LENGTH(T1)) +$ THEN +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY GTM$DIST:GTMLIB.OLB" +$ DN = 1 +$ ELSE ! lnk$library is in use +$LNK_LOOP: +$ N1 = N1 + 1 +$ T1 = F$TRNLNM("LNK$LIBRARY_''N1'") +$ IF (T1 .EQS. "") .OR. (F$LOCATE("GTMLIB",T1) .NE. F$LENGTH(T1)) .OR. (F$LOCATE("GTMSHR",T1) .NE. F$LENGTH(T1)) +$ THEN +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY_''N1' GTM$DIST:GTMLIB.OLB" +$ DN = 1 +$ ENDIF +$ IF (.NOT. DN) .AND. (N1 .LT. 998) THEN GOTO LNK_LOOP +$ ENDIF ! gtmlib handling +$ IF DN ! placed gtmlib +$ THEN +$ N1 = N1 + 1 +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY_''N1' GTM$DIST:GTMSHR.OLB" +$ ELSE +$ VMI$CALLBACK MESSAGE I NOLNKLOG "No LNK$LIBRARY logical names available" +$ ENDIF +$ ENDIF ! setting up LNK$LIBRARYs +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMLOGIN.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMLOGIN.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMLOGIN.COM performs process specific setup for GT.M." +$ WRITE OUFILE "$! It calls GTMLOGICALS.COM if the logical names are not" +$ WRITE OUFILE "$! in the SYSTEM table." +$ WRITE OUFILE "$! It defines symbols to access GT.M images." +$ WRITE OUFILE "$! It defines GT.M commands locally if they are not defined to the system." +$ WRITE OUFILE "$! When the command and logical names are not defined on a process level," +$ WRITE OUFILE "$! a production user may save start-up time by not using GTMLOGIN." +$ WRITE OUFILE "$! CCE is infrequently used, but may be defined as a foreign command." +$ WRITE OUFILE "$!" +$ IF .NOT. GTM$DEF_SYS +$ THEN +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS.COM" +$ ENDIF +$ IF .NOT. GTM$DEF_DCL THEN WRITE OUFILE "$ SET COMMAND GTM$DIST:GTMCOMMANDS.CLD" +$ WRITE OUFILE "$ DSE :== $GTM$DIST:DSE.EXE ! Database System Editor" +$ WRITE OUFILE "$ GDE :== $GTM$DIST:GDE.EXE ! Global Directory Editor" +$ WRITE OUFILE "$ GTM :== MUMPS/DIRECT ! Direct Mode MUMPS" +$ WRITE OUFILE "$ LKE :== $GTM$DIST:LKE.EXE ! Lock Editor" +$ WRITE OUFILE "$ MUPI*P :== $GTM$DIST:MUPIP.EXE ! MUMPS Peripheral Interchange Program" +$ WRITE OUFILE "$ EXIT" +$ WRITE OUFILE "$ CCE :== $GTM$DIST:CCE.EXE ! GT.CX Operator Interface Program" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMSTART.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMSTART.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMSTART.COM should be placed in the VMS startup database." +$ WRITE OUFILE "$! It invokes GTMLOGICALS.COM and GTMINSTALL.COM." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ IF GTM$DEF_SYS THEN WRITE OUFILE "$ IF P1 .EQS. """" .OR. (P1 .EQS. ""FULL"") THEN P1 := SYSTEM/EXEC" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS 'P1'" +$ WRITE OUFILE "$ @'dir'GTMINSTALL" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMSTOP.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMSTOP.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMSTOP.COM stops all the active GT.M processes and does a RUNDOWN." +$ WRITE OUFILE "$! Place an invocation or copy of this procedure in the site specific" +$ WRITE OUFILE "$! shutdown: SYS$MANAGER:SYSHUTDWN to ensure all GT.M databases are" +$ WRITE OUFILE "$! properly closed before VMS terminates. GTMSTOP should follow" +$ WRITE OUFILE "$! GTCMSTOP and precede GTCXSTOP, if they are used." +$ WRITE OUFILE "$! If GTMSTOP is not intended to disable subsequent use of GT.M," +$ WRITE OUFILE "$! add a comment (!) before the INSTALL REMOVE GTMSECSHR." +$ WRITE OUFILE "$!" +$ IF .NOT. GTM$DEF_SYS +$ THEN +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS.COM" +$ ENDIF +$ WRITE OUFILE "$ MUPIP := $GTM$DIST:MUPIP.EXE" +$ WRITE OUFILE "$ STOP := $GTM$DIST:GTM$STOP" +$ WRITE OUFILE "$ STOP 'P1'" +$ WRITE OUFILE "$ MUPIP RUNDOWN" +$ WRITE OUFILE "$ INSTALL REMOVE GTMSECSHR" +$ WRITE OUFILE "$ EXIT" +$ IF GTM$DEF_SYS THEN WRITE OUFILE "$ IF P2 .EQS. """" THEN P2 := /SYSTEM/EXEC" +$ WRITE OUFILE "$ DEASSIGN 'P2' GTMSECSHR" +$ CLOSE OUFILE +$ VMI$CALLBACK MESSAGE I PREINS "Preparing files for installation." +$! GTMFILES.KIT must be maintained as kit contents change +$ GTM$HLP_LOG == GTM$DST_LOG +$ IF GTM$HLP_DIR THEN GTM$HLP_LOG :== VMI$ROOT:[SYSHLP] +$ OPEN /WRITE OUFILE VMI$KWD:GTMFILES.KIT +$ IF GTM$MGR_COM +$ THEN +$ WRITE OUFILE "GTM$ GTMINSTALL.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMLOGICALS.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMLOGIN.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMSTART.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMSTOP.COM VMI$ROOT:[SYSMGR] C" +$ ENDIF +$ WRITE OUFILE "GTM$ GTMINSTALL.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMLOGICALS.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMLOGIN.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSTART.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSTOP.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ DSE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ GDE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ LKE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ MUMPS.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ MUPIP.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ GTMLIB.OLB ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSHR.OLB ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMZCALL.MLB ''GTM$DST_LOG'" +$ IF ALPHA +$ THEN +$ WRITE OUFILE "GTM$ GTM$DEFAULTS.M64 ''GTM$DST_LOG'" +$ ELSE +$ WRITE OUFILE "GTM$ GTM$DEFAULTS.MAR ''GTM$DST_LOG'" +$ ENDIF +$ WRITE OUFILE "GTM$ GTM$CE.H ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMCOLLECT.OPT ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMCOMMANDS.CLD ''GTM$DST_LOG' C" +$ WRITE OUFILE "GTM$ *.M ''GTM$DST_LOG'" +$ CLOSE OUFILE +$! GTMIMAGES.KIT must be maintained as kit contents change +$ OPEN /WRITE OUFILE VMI$KWD:GTMIMAGES.KIT +$ WRITE OUFILE "GTM$ GTMSECSHR.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSHR.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ DSE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GDE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTM$DMOD.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ LKE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ MCOMPILE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ MUPIP.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTM$STOP.EXE ''GTM$DST_LOG'" +$ CLOSE OUFILE +$! Provide with file.KITs +$ VMI$CALLBACK PROVIDE_FILE "" VMI$KWD:GTMFILES.KIT "" T +$ VMI$CALLBACK PROVIDE_IMAGE "" VMI$KWD:GTMIMAGES.KIT "" T +$ VMI$CALLBACK MESSAGE I FININS "Finalizing the installation." +$ IF GTM$DEF_DCL THEN VMI$CALLBACK PROVIDE_DCL_COMMAND GTMCOMMANDS.CLD +$ IF GTM$STARTDB THEN VMI$CALLBACK MODIFY_STARTUP_DB ADD GTMSTART.COM LPMAIN +$! GTM$INSTALL is TRUE if GTM$RUN_IVP or GTM$PCT_RTN +$ IF GTM$INSTALL THEN VMI$CALLBACK SET POSTINSTALL YES +$ IF GTM$RUN_IVP THEN VMI$CALLBACK SET IVP YES +$ EXIT VMI$_SUCCESS +$! +$POSTINSTALL: +$ ON CONTROL_Y THEN EXIT VMI$_FAILURE +$! remove MUPIP from command tables for change from V2.4 to V2.5 +$ SET NOON +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ SET COMMAND /TABLE=SYS$COMMON:[SYSLIB]DCLTABLES /OUTPUT=SYS$COMMON:[SYSLIB]DCLTABLES /DELETE=MUPIP +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ SET COMMAND /DELETE=MUPIP +$ SET ON +$ IF GTM$MGR_COM +$ THEN +$ T1 := SYS$MANAGER: +$ ELSE +$ T1 = GTM$DST_LOG +$ ENDIF +$ @'T1'GTMSTART +$ @'T1'GTMLOGIN +$ ON CONTROL_Y THEN EXIT VMI$_FAILURE +$ SET DEFAULT GTM$DIST +$ T2 = F$ENVIRONMENT("PROTECTION") +$ SET PROTECTION=(S=REWD,O=REWD,G=REWD,W=RE)/DEFAULT +$ MUMPS GTM$DMOD.M +$ IF GTM$LNK_LOG +$ THEN +$ T1 := +$ ELSE +$ T1 :=,GTMLIB.OLB/LIB,GTMSHR.OLB/LIB +$ ENDIF +$ LINK GTM$DMOD.OBJ/NOTRACE'T1 +$ IF GTM$PCT_RTN +$ THEN +$ TYPE SYS$INPUT + + Compiling the GT.M percent (%) routines. +$ MUMPS * +$ IF GTM$DOPURGE THEN PURGE *.* +$ SET DEFAULT VMI$KWD +$ ENDIF ! percent routines +$ SET PROTECTION=('T2')/DEFAULT +$ EXIT VMI$_SUCCESS +$! +$IVP: +$! The real Installation Verification Procedure. +$ TYPE SYS$INPUT + + GT.M Installation Verification Procedure + +$! Extract the IVP .COM file from the text library. +$ LIBRARIAN /EXTRACT=GTM$IVP /OUTPUT=GTM$IVP.COM GTM$IVP.TLB +$ @GTM$IVP +$ EXIT $STATUS +$! diff --git a/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com b/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com new file mode 100644 index 00000000..65e9d0cb --- /dev/null +++ b/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com @@ -0,0 +1,867 @@ +$! make libz under VMS written by +$! Martin P.J. Zinser +$! +$! In case of problems with the install you might contact me at +$! zinser@zinser.no-ip.info(preferred) or +$! martin.zinser@eurexchange.com (work) +$! +$! Make procedure history for Zlib +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20060120 First version to receive a number +$! 0.02 20061008 Adapt to new Makefile.in +$! 0.03 20091224 Add support for large file check +$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite +$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in +$! 0.06 20120111 Fix missing amiss_err, update zconf_h.in, fix new exmples +$! subdir path, update module search in makefile.in +$! 0.07 20120115 Triggered by work done by Alexey Chupahin completly redesigned +$! shared image creation +$! 0.08 20120219 Make it work on VAX again, pre-load missing symbols to shared +$! image +$! 0.09 20120305 SMS. P1 sets builder ("MMK", "MMS", " " (built-in)). +$! "" -> automatic, preference: MMK, MMS, built-in. +$! +$ on error then goto err_exit +$! +$ true = 1 +$ false = 0 +$ tmpnam = "temp_" + f$getjpi("","pid") +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$ th = tmpnam + ".h" +$ define/nolog tconfig 'th' +$ its_decc = false +$ its_vaxc = false +$ its_gnuc = false +$ s_case = False +$! +$! Setup variables holding "config" information +$! +$ Make = "''p1'" +$ name = "Zlib" +$ version = "?.?.?" +$ v_string = "ZLIB_VERSION" +$ v_file = "zlib.h" +$ ccopt = "/include = []" +$ lopts = "" +$ dnsrl = "" +$ aconf_in_file = "zconf.h.in#zconf.h_in#zconf_h.in" +$ conf_check_string = "" +$ linkonly = false +$ optfile = name + ".opt" +$ mapfile = name + ".map" +$ libdefs = "" +$ vax = f$getsyi("HW_MODEL").lt.1024 +$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096 +$ ia64 = f$getsyi("HW_MODEL").ge.4096 +$! +$! 2012-03-05 SMS. +$! Why is this needed? And if it is needed, why not simply ".not. vax"? +$! +$!!! if axp .or. ia64 then set proc/parse=extended +$! +$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL") +$ mydef = F$parse(whoami,,,"DEVICE") +$ mydir = f$parse(whoami,,,"DIRECTORY") - "][" +$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type") +$! +$! Check for MMK/MMS +$! +$ if (Make .eqs. "") +$ then +$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS" +$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK" +$ else +$ Make = f$edit( Make, "trim") +$ endif +$! +$ gosub find_version +$! +$ open/write topt tmp.opt +$ open/write optf 'optfile' +$! +$ gosub check_opts +$! +$! Look for the compiler used +$! +$ gosub check_compiler +$ close topt +$ close optf +$! +$ if its_decc +$ then +$ ccopt = "/prefix=all" + ccopt +$ if f$trnlnm("SYS") .eqs. "" +$ then +$ if axp +$ then +$ define sys sys$library: +$ else +$ ccopt = "/decc" + ccopt +$ define sys decc$library_include: +$ endif +$ endif +$! +$! 2012-03-05 SMS. +$! Why /NAMES = AS_IS? Why not simply ".not. vax"? And why not on VAX? +$! +$ if axp .or. ia64 +$ then +$ ccopt = ccopt + "/name=as_is/opt=(inline=speed)" +$ s_case = true +$ endif +$ endif +$ if its_vaxc .or. its_gnuc +$ then +$ if f$trnlnm("SYS").eqs."" then define sys sys$library: +$ endif +$! +$! Build a fake configure input header +$! +$ open/write conf_hin config.hin +$ write conf_hin "#undef _LARGEFILE64_SOURCE" +$ close conf_hin +$! +$! +$ i = 0 +$FIND_ACONF: +$ fname = f$element(i,"#",aconf_in_file) +$ if fname .eqs. "#" then goto AMISS_ERR +$ if f$search(fname) .eqs. "" +$ then +$ i = i + 1 +$ goto find_aconf +$ endif +$ open/read/err=aconf_err aconf_in 'fname' +$ open/write aconf zconf.h +$ACONF_LOOP: +$ read/end_of_file=aconf_exit aconf_in line +$ work = f$edit(line, "compress,trim") +$ if f$extract(0,6,work) .nes. "#undef" +$ then +$ if f$extract(0,12,work) .nes. "#cmakedefine" +$ then +$ write aconf line +$ endif +$ else +$ cdef = f$element(1," ",work) +$ gosub check_config +$ endif +$ goto aconf_loop +$ACONF_EXIT: +$ write aconf "" +$ write aconf "/* VMS specifics added by make_vms.com: */" +$ write aconf "#define VMS 1" +$ write aconf "#include " +$ write aconf "#include " +$ write aconf "#ifdef _LARGEFILE" +$ write aconf "# define off64_t __off64_t" +$ write aconf "# define fopen64 fopen" +$ write aconf "# define fseeko64 fseeko" +$ write aconf "# define lseek64 lseek" +$ write aconf "# define ftello64 ftell" +$ write aconf "#endif" +$ write aconf "#if !defined( __VAX) && (__CRTL_VER >= 70312000)" +$ write aconf "# define HAVE_VSNPRINTF" +$ write aconf "#endif" +$ close aconf_in +$ close aconf +$ if f$search("''th'") .nes. "" then delete 'th';* +$! Build the thing plain or with mms +$! +$ write sys$output "Compiling Zlib sources ..." +$ if make.eqs."" +$ then +$ if (f$search( "example.obj;*") .nes. "") then delete example.obj;* +$ if (f$search( "minigzip.obj;*") .nes. "") then delete minigzip.obj;* +$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" - + adler32.c zlib.h zconf.h +$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" - + compress.c zlib.h zconf.h +$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - + crc32.c zlib.h zconf.h +$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - + deflate.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" - + gzclose.c zutil.h zlib.h zconf.h +$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" - + gzlib.c zutil.h zlib.h zconf.h +$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" - + gzread.c zutil.h zlib.h zconf.h +$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" - + gzwrite.c zutil.h zlib.h zconf.h +$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" - + infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" - + inffast.c zutil.h zlib.h zconf.h inffast.h +$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" - + inflate.c zutil.h zlib.h zconf.h infblock.h +$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" - + inftrees.c zutil.h zlib.h zconf.h inftrees.h +$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" - + trees.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" - + uncompr.c zlib.h zconf.h +$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" - + zutil.c zutil.h zlib.h zconf.h +$ write sys$output "Building Zlib ..." +$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ +$ write sys$output "Building example..." +$ CALL MAKE example.OBJ "CC ''CCOPT' [.test]example" - + [.test]example.c zlib.h zconf.h +$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb +$ write sys$output "Building minigzip..." +$ CALL MAKE minigzip.OBJ "CC ''CCOPT' [.test]minigzip" - + [.test]minigzip.c zlib.h zconf.h +$ call make minigzip.exe - + "LINK minigzip,libz.olb/lib" - + minigzip.obj libz.olb +$ else +$ gosub crea_mms +$ write sys$output "Make ''name' ''version' with ''Make' " +$ 'make' +$ endif +$! +$! Create shareable image +$! +$ gosub crea_olist +$ write sys$output "Creating libzshr.exe" +$ call map_2_shopt 'mapfile' 'optfile' +$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,'optfile'/opt +$ write sys$output "Zlib build completed" +$ delete/nolog tmp.opt;* +$ exit +$AMISS_ERR: +$ write sys$output "No source for config.hin found." +$ write sys$output "Tried any of ''aconf_in_file'" +$ goto err_exit +$CC_ERR: +$ write sys$output "C compiler required to build ''name'" +$ goto err_exit +$ERR_EXIT: +$ set message/facil/ident/sever/text +$ close/nolog optf +$ close/nolog topt +$ close/nolog aconf_in +$ close/nolog aconf +$ close/nolog out +$ close/nolog min +$ close/nolog mod +$ close/nolog h_in +$ write sys$output "Exiting..." +$ exit 2 +$! +$! +$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES +$ V = 'F$Verify(0) +$! P1 = What we are trying to make +$! P2 = Command to make it +$! P3 - P8 What it depends on +$ +$ If F$Search(P1) .Eqs. "" Then Goto Makeit +$ Time = F$CvTime(F$File(P1,"RDT")) +$arg=3 +$Loop: +$ Argument = P'arg +$ If Argument .Eqs. "" Then Goto Exit +$ El=0 +$Loop2: +$ File = F$Element(El," ",Argument) +$ If File .Eqs. " " Then Goto Endl +$ AFile = "" +$Loop3: +$ OFile = AFile +$ AFile = F$Search(File) +$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl +$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit +$ Goto Loop3 +$NextEL: +$ El = El + 1 +$ Goto Loop2 +$EndL: +$ arg=arg+1 +$ If arg .Le. 8 Then Goto Loop +$ Goto Exit +$ +$Makeit: +$ VV=F$VERIFY(0) +$ write sys$output P2 +$ 'P2 +$ VV='F$Verify(VV) +$Exit: +$ If V Then Set Verify +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Check command line options and set symbols accordingly +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20041206 First version to receive a number +$! 0.02 20060126 Add new "HELP" target +$ CHECK_OPTS: +$ i = 1 +$ OPT_LOOP: +$ if i .lt. 9 +$ then +$ cparm = f$edit(p'i',"upcase") +$! +$! Check if parameter actually contains something +$! +$ if f$edit(cparm,"trim") .nes. "" +$ then +$ if cparm .eqs. "DEBUG" +$ then +$ ccopt = ccopt + "/noopt/deb" +$ lopts = lopts + "/deb" +$ endif +$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ ccopt = ccopt + f$extract(start,len,cparm) +$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - + then s_case = true +$ endif +$ if cparm .eqs. "LINK" then linkonly = true +$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ lopts = lopts + f$extract(start,len,cparm) +$ endif +$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ cc_com = f$extract(start,len,cparm) + if (cc_com .nes. "DECC") .and. - + (cc_com .nes. "VAXC") .and. - + (cc_com .nes. "GNUC") +$ then +$ write sys$output "Unsupported compiler choice ''cc_com' ignored" +$ write sys$output "Use DECC, VAXC, or GNUC instead" +$ else +$ if cc_com .eqs. "DECC" then its_decc = true +$ if cc_com .eqs. "VAXC" then its_vaxc = true +$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ endif +$ endif +$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ mmks = f$extract(start,len,cparm) +$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ then +$ make = mmks +$ else +$ write sys$output "Unsupported make choice ''mmks' ignored" +$ write sys$output "Use MMK or MMS instead" +$ endif +$ endif +$ if cparm .eqs. "HELP" then gosub bhelp +$ endif +$ i = i + 1 +$ goto opt_loop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Look for the compiler used +$! +$! Version history +$! 0.01 20040223 First version to receive a number +$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists +$! 0.03 20060202 Extend handling of GNU C +$! 0.04 20090402 Compaq -> hp +$CHECK_COMPILER: +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then +$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "") +$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "") +$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "") +$ endif +$! +$! Exit if no compiler available +$! +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then goto CC_ERR +$ else +$ if its_decc +$ then +$ write sys$output "CC compiler check ... hp C" +$ if f$trnlnm("decc$no_rooted_search_lists") .nes. "" +$ then +$ dnrsl = f$trnlnm("decc$no_rooted_search_lists") +$ endif +$ define/nolog decc$no_rooted_search_lists 1 +$ else +$ if its_vaxc then write sys$output "CC compiler check ... VAX C" +$ if its_gnuc +$ then +$ write sys$output "CC compiler check ... GNU C" +$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib" +$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib" +$ cc = "gcc" +$ endif +$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share" +$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share" +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! If MMS/MMK are available dump out the descrip.mms if required +$! +$CREA_MMS: +$ write sys$output "Creating descrip.mms..." +$ create descrip.mms +$ open/append out descrip.mms +$ copy sys$input: out +$ deck +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser +# + +OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\ + gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, \ + inftrees.obj, inffast.obj + +$ eod +$ write out "CFLAGS=", ccopt +$ write out "LOPTS=", lopts +$ write out "all : example.exe minigzip.exe libz.olb" +$ copy sys$input: out +$ deck + @ write sys$output " Example applications available" + +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link $(LOPTS) example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link $(LOPTS) minigzip,libz.olb/lib + +clean : + delete *.obj;*,libz.olb;*,*.opt;*,*.exe;* + + +# Other dependencies. +adler32.obj : adler32.c zutil.h zlib.h zconf.h +compress.obj : compress.c zlib.h zconf.h +crc32.obj : crc32.c zutil.h zlib.h zconf.h +deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h +example.obj : [.test]example.c zlib.h zconf.h +gzclose.obj : gzclose.c zutil.h zlib.h zconf.h +gzlib.obj : gzlib.c zutil.h zlib.h zconf.h +gzread.obj : gzread.c zutil.h zlib.h zconf.h +gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h +inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h +inflate.obj : inflate.c zutil.h zlib.h zconf.h +inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h +minigzip.obj : [.test]minigzip.c zlib.h zconf.h +trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h +uncompr.obj : uncompr.c zlib.h zconf.h +zutil.obj : zutil.c zutil.h zlib.h zconf.h +infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ eod +$ close out +$ return +$!------------------------------------------------------------------------------ +$! +$! Read list of core library sources from makefile.in and create options +$! needed to build shareable image +$! +$CREA_OLIST: +$ open/read min makefile.in +$ open/write mod modules.opt +$ src_check_list = "OBJZ =#OBJG =" +$MRLOOP: +$ read/end=mrdone min rec +$ i = 0 +$SRC_CHECK_LOOP: +$ src_check = f$element(i, "#", src_check_list) +$ i = i+1 +$ if src_check .eqs. "#" then goto mrloop +$ if (f$extract(0,6,rec) .nes. src_check) then goto src_check_loop +$ rec = rec - src_check +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .eqs. "\") then goto mrloop +$MRSLOOP: +$ read/end=mrdone min rec +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop +$MRDONE: +$ close min +$ close mod +$ return +$!------------------------------------------------------------------------------ +$! +$! Take record extracted in crea_olist and split it into single filenames +$! +$EXTRA_FILNAM: +$ myrec = f$edit(rec - "\", "trim,compress") +$ i = 0 +$FELOOP: +$ srcfil = f$element(i," ", myrec) +$ if (srcfil .nes. " ") +$ then +$ write mod f$parse(srcfil,,,"NAME"), ".obj" +$ i = i + 1 +$ goto feloop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Find current Zlib version number +$! +$FIND_VERSION: +$ open/read h_in 'v_file' +$hloop: +$ read/end=hdone h_in rec +$ rec = f$edit(rec,"TRIM") +$ if (f$extract(0,1,rec) .nes. "#") then goto hloop +$ rec = f$edit(rec - "#", "TRIM") +$ if f$element(0," ",rec) .nes. "define" then goto hloop +$ if f$element(1," ",rec) .eqs. v_string +$ then +$ version = 'f$element(2," ",rec)' +$ goto hdone +$ endif +$ goto hloop +$hdone: +$ close h_in +$ return +$!------------------------------------------------------------------------------ +$! +$CHECK_CONFIG: +$! +$ in_ldef = f$locate(cdef,libdefs) +$ if (in_ldef .lt. f$length(libdefs)) +$ then +$ write aconf "#define ''cdef' 1" +$ libdefs = f$extract(0,in_ldef,libdefs) + - + f$extract(in_ldef + f$length(cdef) + 1, - + f$length(libdefs) - in_ldef - f$length(cdef) - 1, - + libdefs) +$ else +$ if (f$type('cdef') .eqs. "INTEGER") +$ then +$ write aconf "#define ''cdef' ", 'cdef' +$ else +$ if (f$type('cdef') .eqs. "STRING") +$ then +$ write aconf "#define ''cdef' ", """", '''cdef'', """" +$ else +$ gosub check_cc_def +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$ CHECK_CC_DEF: +$ if (cdef .eqs. "_LARGEFILE64_SOURCE") +$ then +$ copy sys$input: 'tc' +$ deck +#include "tconfig" +#define _LARGEFILE +#include + +int main(){ +FILE *fp; + fp = fopen("temp.txt","r"); + fseeko(fp,1,SEEK_SET); + fclose(fp); +} + +$ eod +$ test_inv = false +$ comm_h = false +$ gosub cc_prop_check +$ return +$ endif +$ write aconf "/* ", line, " */" +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$! Version history +$! 0.01 20031020 First version to receive a number +$! 0.02 20031022 Added logic for defines with value +$! 0.03 20040309 Make sure local config file gets not deleted +$! 0.04 20041230 Also write include for configure run +$! 0.05 20050103 Add processing of "comment defines" +$CC_PROP_CHECK: +$ cc_prop = true +$ is_need = false +$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true) +$ if f$search(th) .eqs. "" then create 'th' +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'.*;*/exclude='th' +$ if (cc_prop .and. .not. is_need) .or. - + (.not. cc_prop .and. is_need) +$ then +$ write sys$output "Checking for ''cdef'... yes" +$ if f$type('cdef_val'_yes) .nes. "" +$ then +$ if f$type('cdef_val'_yes) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes) +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes) +$ else +$ call write_config f$fao("#define !AS 1",cdef) +$ endif +$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. - + (cdef .eqs. "_LARGEFILE64_SOURCE") then - + call write_config f$string("#define _LARGEFILE 1") +$ else +$ write sys$output "Checking for ''cdef'... no" +$ if (comm_h) +$ then + call write_config f$fao("/* !AS */",line) +$ else +$ if f$type('cdef_val'_no) .nes. "" +$ then +$ if f$type('cdef_val'_no) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no) +$ if f$type('cdef_val'_no) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no) +$ else +$ call write_config f$fao("#undef !AS",cdef) +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler with multiple result values +$! +$! Version history +$! 0.01 20040127 First version +$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05 +$CC_MPROP_CHECK: +$ cc_prop = true +$ i = 1 +$ idel = 1 +$ MT_LOOP: +$ if f$type(result_'i') .eqs. "STRING" +$ then +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam'_'i' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam'_'i',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'_'i'.*;* +$ if (cc_prop) +$ then +$ write sys$output "Checking for ''cdef'... ", mdef_'i' +$ if f$type(mdef_'i') .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,mdef_'i') +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,mdef_'i') +$ goto msym_clean +$ else +$ i = i + 1 +$ goto mt_loop +$ endif +$ endif +$ write sys$output "Checking for ''cdef'... no" +$ call write_config f$fao("#undef !AS",cdef) +$ MSYM_CLEAN: +$ if (idel .le. msym_max) +$ then +$ delete/sym mdef_'idel' +$ idel = idel + 1 +$ goto msym_clean +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Write configuration to both permanent and temporary config file +$! +$! Version history +$! 0.01 20031029 First version to receive a number +$! +$WRITE_CONFIG: SUBROUTINE +$ write aconf 'p1' +$ open/append confh 'th' +$ write confh 'p1' +$ close confh +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Analyze the project map file and create the symbol vector for a shareable +$! image from it +$! +$! Version history +$! 0.01 20120128 First version +$! 0.02 20120226 Add pre-load logic +$! +$ MAP_2_SHOPT: Subroutine +$! +$ SAY := "WRITE_ SYS$OUTPUT" +$! +$ IF F$SEARCH("''P1'") .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT-E-NOSUCHFILE: Error, inputfile ''p1' not available" +$ goto exit_m2s +$ ENDIF +$ IF "''P2'" .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT: Error, no output file provided" +$ goto exit_m2s +$ ENDIF +$! +$ module1 = "deflate#deflateEnd#deflateInit_#deflateParams#deflateSetDictionary" +$ module2 = "gzclose#gzerror#gzgetc#gzgets#gzopen#gzprintf#gzputc#gzputs#gzread" +$ module3 = "gzseek#gztell#inflate#inflateEnd#inflateInit_#inflateSetDictionary" +$ module4 = "inflateSync#uncompress#zlibVersion#compress" +$ open/read map 'p1 +$ if axp .or. ia64 +$ then +$ open/write aopt a.opt +$ open/write bopt b.opt +$ write aopt " CASE_SENSITIVE=YES" +$ write bopt "SYMBOL_VECTOR= (-" +$ mod_sym_num = 1 +$ MOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ MOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ mod_in = mod_in + 1 +$ goto mod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto mod_sym_loop +$ endif +$MAP_LOOP: +$ read/end=map_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto map_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ endif +$ goto map_loop +$MAP_END: +$ close/nolog aopt +$ close/nolog bopt +$ open/append libopt 'p2' +$ open/read aopt a.opt +$ open/read bopt b.opt +$ALOOP: +$ read/end=aloop_end aopt line +$ write libopt line +$ goto aloop +$ALOOP_END: +$ close/nolog aopt +$ sv = "" +$BLOOP: +$ read/end=bloop_end bopt svn +$ if (svn.nes."") +$ then +$ if (sv.nes."") then write libopt sv +$ sv = svn +$ endif +$ goto bloop +$BLOOP_END: +$ write libopt f$extract(0,f$length(sv)-2,sv), "-" +$ write libopt ")" +$ close/nolog bopt +$ delete/nolog/noconf a.opt;*,b.opt;* +$ else +$ if vax +$ then +$ open/append libopt 'p2' +$ mod_sym_num = 1 +$ VMOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ VMOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ mod_in = mod_in + 1 +$ goto vmod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto vmod_sym_loop +$ endif +$VMAP_LOOP: +$ read/end=vmap_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto vmap_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ endif +$ goto vmap_loop +$VMAP_END: +$ else +$ write sys$output "Unknown Architecture (Not VAX, AXP, or IA64)" +$ write sys$output "No options file created" +$ endif +$ endif +$ EXIT_M2S: +$ close/nolog map +$ close/nolog libopt +$ endsubroutine diff --git a/samples/DIGITAL Command Language/libxslt_build.com b/samples/DIGITAL Command Language/libxslt_build.com new file mode 100644 index 00000000..89371f01 --- /dev/null +++ b/samples/DIGITAL Command Language/libxslt_build.com @@ -0,0 +1,342 @@ +$! BUILD_XSLT.COM +$! +$! Build the XSLT library +$! +$! Arguments: +$! +$! p1 - "DEBUG" is you want to build with debug +$! +$! This package requires libxml to have already been installed. You need +$! to ensure that the logical name LIBXML is defined and points to the +$! directory containing libxml's .h files +$! +$! This procedure creates the object libraries +$! +$! XML_LIBDIR:LIBXSLT.OLB +$! XML_LIBDIR:LIBEXSLT.OLB +$! +$! and the program +$! +$! XSLTPROC +$! +$! After the library is built, you can link these routines into +$! your code with the command +$! +$! LINK your_modules,XML_LIBDIR:LIBEXSLT/LIB,LIBXSLT/LIBRARY,LIBXML/LIB +$! +$! Change History +$! -------------- +$! Command file author : John A Fotheringham (jaf@jafsoft.com) +$! Last update : 2 Nov 2001 +$! +$!- configuration ------------------------------------------------------------- +$! +$!- compile command. +$! +$ cc_opts = "/INCLUDE=([],XML_SRCDIR:,[-.libxslt])/NAMES=(SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS" +$! +$ if p1.eqs."DEBUG" +$ then +$ debug = "Y" +$ cc_command = "CC''cc_opts'/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL" +$ else +$ debug = "N" +$ cc_command = "CC''cc_opts'" +$ endif +$! +$!- configure multiple build passes for each library. ------------------------- +$! +$! For each pass: +$! +$! "libname" is the name of the library or module being created +$! +$! "progname" is the name of the program being created +$! +$! "src" is the list of sources to be built into the library or program +$! - This should be compared to the definition of +$! "_la_SOURCES" in the MAKEFILE.IN file in +$! corresponding directory. +$! +$ num_passes = 3 ! two libraries and a program +$! +$!- pass 1 - library LIBXSLT +$! +$ libname_1 = "LIBXSLT" +$ h_file_1 = "xslt.h" +$ progname_1 = "" +$! +$ ! see "libxslt_la_SOURCES" in [.libxslt]makefile.in +$ src_1 = "xslt.c xsltutils.c pattern.c templates.c variables.c keys.c" +$ src_1 = src_1 + " numbers.c extensions.c extra.c functions.c" +$ src_1 = src_1 + " namespaces.c imports.c attributes.c documents.c" +$ src_1 = src_1 + " preproc.c transform.c security.c" +$! +$!- pass 2 - library LIBEXSLT +$! +$ libname_2 = "LIBEXSLT" +$ h_file_2 = "exslt.h" +$ progname_2 = "" +$! +$ ! see "libexslt_la_SOURCES" in [.libexslt]makefile.in +$ src_2 = "exslt.c common.c math.c sets.c functions.c strings.c date.c saxon.c dynamic.c" +$! +$!- pass 3 - program XSLTPROC +$! +$ libname_3 = "" +$ h_file_3 = "" +$ progname_3 = "XSLTPROC" +$! +$ ! see "xsltproc_SOURCES" in [.xsltproc]makefile.in +$ src_3 = "xsltproc.c" +$! +$!- set up and check logicals ----------------------------------------------- +$! +$! XML_LIBDIR - object library directory +$! XML_SRCDIR - top-level build directory of libxml package -- needed for config.h and trio.h +$! LIBXML - source directory containing .h files for libxml package +$! +$ if f$trnlnm("XML_LIBDIR").eqs."" +$ then +$ on error then continue +$ globfile = f$search("[--...]libxml.olb") +$ if globfile.eqs."" +$ then +$ write sys$output "" +$ write sys$output " You need to define the XML_LIBDIR logical name to" +$ write sys$output " point to the directory containing your object" +$ write sys$output " libraries. This should already contain LIBXML.OLB" +$ write sys$output " from the libxml package, and will be the directory" +$ write sys$output " the new LIBXSLT.OLB library will be placed in" +$ write sys$output "" +$ exit +$ else +$ srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY") +$ define/process XML_LIBDIR "''srcdir'" +$ write sys$output "Defining XML_LIBDIR as ""''srcdir'""" +$ endif +$ endif +$! +$ if f$trnlnm("libxml").eqs."" +$ then +$ ! look for globals.h in a directory installed paralle to this one +$ on error then continue +$ globfile = f$search("[--...]globals.h") +$ if globfile.eqs."" +$ then +$ write sys$output "" +$ write sys$output " You need to define a LIBXML logical directory to" +$ write sys$output " point to the directory containing the .h files" +$ write sys$output " for the libxml package" +$ write sys$output "" +$ exit +$ else +$ srcdir = f$element(0,"]",globfile)+ "]" +$ define/process LIBXML "''srcdir'" +$ write sys$output "Defining LIBXML as ""''srcdir'""" +$ endif +$ endif +$! +$ if f$trnlnm("XML_SRCDIR").eqs."" +$ then +$ globfile = f$search("[--...]globals.c") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate globals.c. You need to manually define a XML_SRCDIR logical" +$ exit +$ else +$ srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY") +$ define/process XML_SRCDIR "''srcdir'" +$ write sys$output "Defining XML_SRCDIR as ""''srcdir'""" +$ endif +$ endif +$! +$!- set up some working logicals ------------------- +$! +$ pass_no = 1 +$ set_pass_logical: +$! +$ if pass_no.le.num_passes +$ then +$! +$ Libname = libname_'pass_no' +$ progname = progname_'pass_no' +$ if libname.nes."" +$ then +$ logname = "''libname'_SRCDIR" +$ else +$ logname = "''progname'_SRCDIR" +$ endif +$ findfile = f$element(0," ",src_'pass_no') +$! +$!--- set up a source directory logical +$! +$ if f$trnlnm("''logname'").eqs."" +$ then +$ ! look for the target file in a parallel subdirectory +$ globfile = f$search("[-...]''findfile'") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate ''findfile'. You need to manually define a ''logname' logical" +$ exit +$ else +$ srcdir = f$element(0,"]",globfile)+ "]" +$ define/process 'logname' "''srcdir'" +$ write sys$output "Defining ''logname' as ""''srcdir'""" +$ endif +$ endif +$! +$!--- if it's a library, set up a logical pointing to the .h files +$! +$ if libname.nes."" +$ then +$ if f$trnlnm("''libname'").eqs."" +$ then +$ ! look for the target .h file in a parallel subdirectory +$ h_file = h_file_'pass_no' +$ globfile = f$search("[-...]''h_file'") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate ''h_file'. You need to manually define a ''libname' logical" +$ exit +$ else +$ includedir = f$element(0,"]",globfile)+ "]" +$ define/process 'libname' "''includedir'" +$ write sys$output "Defining ''libname' as ""''includedir'""" +$ endif +$ endif +$ endif +$! +$ pass_no = pass_no +1 +$ goto set_pass_logical +$! +$ endif ! for each pass +$! +$!- set up error handling (such as it is) ------------------------------------- +$! +$ exit_status = 1 +$ saved_default = f$environment("default") +$ on error then goto ERROR_OUT +$ on control_y then goto ERROR_OUT +$! +$ goto start_here +$ start_here: ! move this line to debug/rerun parts of this command file +$! +$!- compile modules into the library ------------------------------------------ +$! +$! +$ pass_no = 1 ! make three passes, one for each library, one for XSLTPROC +$ pass_loop: +$! +$ if pass_no.le.num_passes +$ then +$ Libname = libname_'pass_no' +$ progname = progname_'pass_no' +$ if libname.nes."" +$ then +$ logname = "''libname'_SRCDIR" +$ pass_description = "the XML_LIBDIR:''libname'.OLB object library" +$ else +$ logname = "''progname'_SRCDIR" +$ pass_description = "the programs in ''progname'" +$ endif +$ src = src_'pass_no' +$! +$!- create the library if need +$! +$ if libname.nes."" +$ then +$ if f$search("XML_LIBDIR:''libname'.OLB").eqs."" +$ then +$ write sys$output "Creating new object library XML_LIBDIR:''libname'.OLB..." +$ library/create XML_LIBDIR:'libname'.OLB +$ endif +$ endif +$! +$!- move to the source directory +$! +$ set def 'logname' +$! +$!- define the library and link commands (link command not used as is) +$! +$ if libname.nes."" +$ then +$ lib_command = "LIBRARY/REPLACE XML_LIBDIR:''libname'.OLB" +$ link_command = "" +$ else +$ lib_command = "" +$ link_command = "LINK" +$ endif +$! +$ write sys$output "" +$ write sys$output "Building ''pass_description' +$ write sys$output "" +$! +$ s_no = 0 +$ src = f$edit(src,"COMPRESS") +$! +$ source_loop: +$! +$ next_source = f$element (S_no," ",src) +$ if next_source.nes."" .and. next_source.nes." " +$ then +$ call build 'next_source' +$ s_no = s_no + 1 +$ goto source_loop +$ endif +$! +$ pass_no = pass_no + 1 +$ goto pass_loop +$! +$ endif ! for each pass +$! +$!- Th-th-th-th-th-that's all folks! ------------------------------------------ +$! +$EXIT_OUT: +$! +$ set def 'saved_default +$ exit 'exit_status +$! +$ +$ERROR_OUT: +$ exit_status = $status +$ write sys$output "''f$message(exit_status)'" +$ goto EXIT_OUT +$! +$!- the BUILD subroutine. Compile then insert into library or link as required +$! +$BUILD: subroutine +$ on warning then goto EXIT_BUILD +$ source_file = p1 +$ name = f$element(0,".",source_file) +$ object_file = f$fao("XML_LIBDIR:!AS.OBJ",name) +$! +$!- compile +$ write sys$output "Compiling ",p1,p2,"..." +$ cc_command /object='object_file 'source_file' 'p2' +$! +$!- insert into library if command defined +$! +$ if lib_command.nes."" +$ then +$ lib_command 'object_file' +$ delete/nolog 'object_file';* +$ endif +$! +$!- link module if command defined +$! +$ if link_command.nes."" +$ then +$ text = f$element(0,".",p1) ! lose the ".c" +$ write sys$output "Linking ",text,"..." +$ dbgopts = "" +$ if debug then dbgopts = "/DEBUG" +$ link_command'dbgopts' 'object_file',- + XML_LIBDIR:libexslt/lib,- + XML_LIBDIR:libxslt/lib,- + XML_LIBDIR:libxml/library +$ endif +$! +$EXIT_BUILD: +$ exit $status +$! +$endsubroutine diff --git a/samples/DIGITAL Command Language/vmsbackup_build.com b/samples/DIGITAL Command Language/vmsbackup_build.com new file mode 100644 index 00000000..c6cb4cab --- /dev/null +++ b/samples/DIGITAL Command Language/vmsbackup_build.com @@ -0,0 +1,10 @@ +$! Compiling with VAXC is said to work, but it requires the usual cruft +$! (vaxcrtl and all), and to avoid hair we don't supply said cruft here. +$ CC/DECC/PREFIX=all VMSBACKUP.C/DEFINE=(HAVE_MT_IOCTLS=0,HAVE_UNIXIO_H=1) +$ CC/DECC/PREFIX=all DCLMAIN.C +$! Probably we don't want match as it probably doesn't implement VMS-style +$! matching, but I haven't looking into the issues yet. +$ CC/DECC/PREFIX=all match +$ LINK/exe=VMSBACKUP.EXE - +vmsbackup.obj,dclmain.obj,match.obj,sys$input/opt +identification="VMSBACKUP4.1.1" diff --git a/samples/DNS Zone/sample.arpa b/samples/DNS Zone/sample.arpa new file mode 100644 index 00000000..e48ecffe --- /dev/null +++ b/samples/DNS Zone/sample.arpa @@ -0,0 +1,13 @@ +$ORIGIN 0.0.0.c.2.1.0.3.0.0.2.1.e.f.f.3.ip6.arpa. +$TTL 60 +@ IN SOA ns root ( + 2002042901 ; SERIAL + 7200 ; REFRESH + 600 ; RETRY + 36000000 ; EXPIRE + 120 ; MINIMUM + ) + + NS ns.example.com. + +c.a.7.e.d.7.e.f.f.f.0.2.8.0.a.0 PTR sip01.example.com. diff --git a/samples/DNS Zone/sneaky.net.zone b/samples/DNS Zone/sneaky.net.zone new file mode 100644 index 00000000..1276be5a --- /dev/null +++ b/samples/DNS Zone/sneaky.net.zone @@ -0,0 +1,12 @@ +$TTL 3d +@ IN SOA root.localhost. root.sneaky.net. ( + 2015042907 ; serial + 3d ; refresh + 1h ; retry + 12d ; expire + 2h ; negative response TTL + ) + IN NS root.localhost. + IN NS localhost. ; secondary name server is preferably externally maintained + +www IN A 3.141.59.26 diff --git a/samples/DTrace/counts.d b/samples/DTrace/counts.d new file mode 100644 index 00000000..13725d99 --- /dev/null +++ b/samples/DTrace/counts.d @@ -0,0 +1,23 @@ +/* + * This software is in the public domain. + * + * $Id: counts.d 10510 2005-08-15 01:46:19Z kateturner $ + */ + +#pragma D option quiet + +self int tottime; +BEGIN { + tottime = timestamp; +} + +php$target:::function-entry + @counts[copyinstr(arg0)] = count(); +} + +END { + printf("Total time: %dus\n", (timestamp - tottime) / 1000); + printf("# calls by function:\n"); + printa("%-40s %@d\n", @counts); +} + diff --git a/samples/DTrace/javascript-trace.d b/samples/DTrace/javascript-trace.d new file mode 100644 index 00000000..0acbaa97 --- /dev/null +++ b/samples/DTrace/javascript-trace.d @@ -0,0 +1,73 @@ +/* -*- Mode: dtrace-script; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Copyright (C) 2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/* + * javascript provider probes + * + * function-entry (filename, classname, funcname) + * function-info (filename, classname, funcname, lineno, + * runfilename, runlineno) + * function-args (filename, classname, funcname, argc, argv, argv0, + * argv1, argv2, argv3, argv4) + * function-rval (filename, classname, funcname, lineno, rval, rval0) + * function-return (filename, classname, funcname) + * object-create-start (filename, classname) + * object-create (filename, classname, *object, rlineno) + * object-create-done (filename, classname) + * object-finalize (NULL, classname, *object) + * execute-start (filename, lineno) + * execute-done (filename, lineno) + */ + +provider javascript { + probe function__entry(char *, char *, char *); + probe function__info(char *, char *, char *, int, char *, int); + probe function__args(char *, char *, char *, int, void *, void *, void *, + void *, void *, void *); + probe function__rval(char *, char *, char *, int, void *, void *); + probe function__return(char *, char *, char *); + probe object__create__start(char *, char *); + probe object__create__done(char *, char *); + /* XXX must use unsigned longs here instead of uintptr_t for OS X + (Apple radar: 5194316 & 5565198) */ + probe object__create(char *, char *, unsigned long, int); + probe object__finalize(char *, char *, unsigned long); + probe execute__start(char *, int); + probe execute__done(char *, int); +}; + +/* +#pragma D attributes Unstable/Unstable/Common provider mozilla provider +#pragma D attributes Private/Private/Unknown provider mozilla module +#pragma D attributes Private/Private/Unknown provider mozilla function +#pragma D attributes Unstable/Unstable/Common provider mozilla name +#pragma D attributes Unstable/Unstable/Common provider mozilla args +*/ + diff --git a/samples/DTrace/probes.d b/samples/DTrace/probes.d new file mode 100644 index 00000000..483f174d --- /dev/null +++ b/samples/DTrace/probes.d @@ -0,0 +1,93 @@ +/* ---------- + * DTrace probes for PostgreSQL backend + * + * Copyright (c) 2006-2009, PostgreSQL Global Development Group + * + * $PostgreSQL: pgsql/src/backend/utils/probes.d,v 1.11 2009/04/02 20:59:10 momjian Exp $ + * ---------- + */ + + +/* + * Typedefs used in PostgreSQL. + * + * NOTE: Do not use system-provided typedefs (e.g. uintptr_t, uint32_t, etc) + * in probe definitions, as they cause compilation errors on Mac OS X 10.5. + */ +#define LocalTransactionId unsigned int +#define LWLockId int +#define LWLockMode int +#define LOCKMODE int +#define BlockNumber unsigned int +#define Oid unsigned int +#define ForkNumber int +#define bool char + +provider postgresql { + + probe transaction__start(LocalTransactionId); + probe transaction__commit(LocalTransactionId); + probe transaction__abort(LocalTransactionId); + + probe lwlock__acquire(LWLockId, LWLockMode); + probe lwlock__release(LWLockId); + probe lwlock__wait__start(LWLockId, LWLockMode); + probe lwlock__wait__done(LWLockId, LWLockMode); + probe lwlock__condacquire(LWLockId, LWLockMode); + probe lwlock__condacquire__fail(LWLockId, LWLockMode); + + probe lock__wait__start(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE); + probe lock__wait__done(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE); + + probe query__parse__start(const char *); + probe query__parse__done(const char *); + probe query__rewrite__start(const char *); + probe query__rewrite__done(const char *); + probe query__plan__start(); + probe query__plan__done(); + probe query__execute__start(); + probe query__execute__done(); + probe query__start(const char *); + probe query__done(const char *); + probe statement__status(const char *); + + probe sort__start(int, bool, int, int, bool); + probe sort__done(bool, long); + + probe buffer__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool); + probe buffer__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool, bool); + probe buffer__flush__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe buffer__flush__done(ForkNumber, BlockNumber, Oid, Oid, Oid); + + probe buffer__checkpoint__start(int); + probe buffer__checkpoint__sync__start(); + probe buffer__checkpoint__done(); + probe buffer__sync__start(int, int); + probe buffer__sync__written(int); + probe buffer__sync__done(int, int, int); + probe buffer__write__dirty__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe buffer__write__dirty__done(ForkNumber, BlockNumber, Oid, Oid, Oid); + + probe deadlock__found(); + + probe checkpoint__start(int); + probe checkpoint__done(int, int, int, int, int); + probe clog__checkpoint__start(bool); + probe clog__checkpoint__done(bool); + probe subtrans__checkpoint__start(bool); + probe subtrans__checkpoint__done(bool); + probe multixact__checkpoint__start(bool); + probe multixact__checkpoint__done(bool); + probe twophase__checkpoint__start(); + probe twophase__checkpoint__done(); + + probe smgr__md__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe smgr__md__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int); + probe smgr__md__write__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe smgr__md__write__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int); + + probe xlog__insert(unsigned char, unsigned char); + probe xlog__switch(); + probe wal__buffer__write__dirty__start(); + probe wal__buffer__write__dirty__done(); +}; diff --git a/samples/Prolog/or-constraint.ecl b/samples/ECLiPSe/or-constraint.ecl similarity index 100% rename from samples/Prolog/or-constraint.ecl rename to samples/ECLiPSe/or-constraint.ecl diff --git a/samples/Eiffel/application.e b/samples/Eiffel/application.e new file mode 100644 index 00000000..16426905 --- /dev/null +++ b/samples/Eiffel/application.e @@ -0,0 +1,44 @@ +note + description : "nino application root class" + date : "$Date$" + revision : "$Revision$" + +class + APPLICATION + +inherit + ARGUMENTS + + HTTP_SERVER_SHARED_CONFIGURATION + +create + make + +feature {NONE} -- Initialization + + make + -- Run application. + local + l_server : HTTP_SERVER + l_cfg: HTTP_SERVER_CONFIGURATION + l_http_handler : HTTP_HANDLER + do + create l_cfg.make + l_cfg.http_server_port := 9_000 + l_cfg.document_root := default_document_root + set_server_configuration (l_cfg) + debug ("nino") + l_cfg.set_is_verbose (True) + end + + create l_server.make (l_cfg) + create {APPLICATION_CONNECTION_HANDLER} l_http_handler.make (l_server) + l_server.setup (l_http_handler) + end + +feature -- Access + + default_document_root: STRING = "webroot" + +end + diff --git a/samples/Eiffel/book_collection.e b/samples/Eiffel/book_collection.e new file mode 100644 index 00000000..8959455a --- /dev/null +++ b/samples/Eiffel/book_collection.e @@ -0,0 +1,82 @@ +class + BOOK_COLLECTION + +create + make + +feature {NONE} -- Initialization + + make (a_name: STRING_32) + -- Create a book collection with `a_name' as `name'. + do + set_name (a_name) + create book_index.make (10) + ensure + name_set: name = a_name + end + +feature -- Access + + name: STRING_32 + -- Name. + + books: LIST [BOOK] + -- collection of book. + do + create {LINKED_LIST [BOOK]} Result.make + across + book_index as it + loop + Result.append (it.item) + end + end + + books_by_author (a_author: STRING_32): LIST [BOOK] + -- Books wrote by `a_author' in this collection. + do + if attached book_index [a_author] as l_result then + Result := l_result + else + create {LINKED_LIST [BOOK]} Result.make + end + end + +feature -- Change + + set_name (a_name: STRING_32) + -- Set `name' with `a_name'. + do + name := a_name + ensure + name_set: name = a_name + end + + add_book (a_book: BOOK) + -- Extend collection with `a_book'. + local + l: detachable LIST [BOOK] + do + l := book_index.at (a_book.author.name) + if l = Void then + create {LINKED_LIST [BOOK]} l.make + book_index.put (l, a_book.author.name) + end + l.force (a_book) + end + + add_books (book_list: like books) + -- Append collection with `book_list'. + do + across + book_list as it + loop + add_book (it.item) + end + end + +feature {NONE} -- Implementation + + book_index: HASH_TABLE [LIST [BOOK], STRING_32] + -- Association of author name and its books. + +end -- class BOOK_COLLECTION diff --git a/samples/Eiffel/git_checkout_command.e b/samples/Eiffel/git_checkout_command.e new file mode 100644 index 00000000..f78747d2 --- /dev/null +++ b/samples/Eiffel/git_checkout_command.e @@ -0,0 +1,41 @@ +note + description: "Git checkout command." + author: "Olivier Ligot" + +class + GIT_CHECKOUT_COMMAND + +inherit + GIT_COMMAND + +create + make, + make_master + +feature {NONE} -- Initialization + + make (a_branch: STRING) + -- Checkout the branch `a_branch'. + do + initialize + arguments.force_last (a_branch) + branch := a_branch + ensure + branch_set: branch = a_branch + end + + make_master + -- Checkout the master branch. + do + make ("master") + end + +feature -- Access + + branch: STRING + -- Branch to checkout + + name: STRING = "checkout" + -- Git subcommand name + +end diff --git a/samples/Elixir/filenames/mix.lock b/samples/Elixir/filenames/mix.lock new file mode 100644 index 00000000..830b074c --- /dev/null +++ b/samples/Elixir/filenames/mix.lock @@ -0,0 +1,10 @@ +%{"cowboy": {:hex, :cowboy, "1.0.0"}, + "cowlib": {:hex, :cowlib, "1.0.1"}, + "hackney": {:hex, :hackney, "0.14.3"}, + "hound": {:hex, :hound, "0.6.0"}, + "httpoison": {:hex, :httpoison, "0.5.0"}, + "idna": {:hex, :idna, "1.0.1"}, + "phoenix": {:hex, :phoenix, "0.10.0"}, + "plug": {:hex, :plug, "0.11.1"}, + "poison": {:hex, :poison, "1.3.1"}, + "ranch": {:hex, :ranch, "1.0.0"}} diff --git a/samples/Emacs Lisp/.emacs.desktop b/samples/Emacs Lisp/.emacs.desktop new file mode 100644 index 00000000..499e44bb --- /dev/null +++ b/samples/Emacs Lisp/.emacs.desktop @@ -0,0 +1,29 @@ +;; -*- mode: emacs-lisp; coding: emacs-mule; -*- +;; -------------------------------------------------------------------------- +;; Desktop File for Emacs +;; -------------------------------------------------------------------------- +;; Created Sat Jan 3 12:46:35 2015 +;; Desktop file format version 206 +;; Emacs version 24.3.1 + +;; Global section: +(setq desktop-missing-file-warning nil) +(setq tags-file-name nil) +(setq tags-table-list nil) +(setq search-ring nil) +(setq regexp-search-ring nil) +(setq register-alist nil) +(setq file-name-history nil) + +;; Buffer section -- buffers listed in same order as in buffer list: +(desktop-create-buffer 206 + "/home/foo/bar" + "bar" + 'fundamental-mode + nil + 11572 + '(11554 nil) + nil + nil + '((buffer-file-coding-system . undecided-unix))) + diff --git a/samples/Erlang/elixir_parser.yrl b/samples/Erlang/elixir_parser.yrl new file mode 100644 index 00000000..f49f8539 --- /dev/null +++ b/samples/Erlang/elixir_parser.yrl @@ -0,0 +1,856 @@ +Nonterminals + grammar expr_list + expr container_expr block_expr access_expr + no_parens_expr no_parens_zero_expr no_parens_one_expr no_parens_one_ambig_expr + bracket_expr bracket_at_expr bracket_arg matched_expr unmatched_expr max_expr + unmatched_op_expr matched_op_expr no_parens_op_expr no_parens_many_expr + comp_op_eol at_op_eol unary_op_eol and_op_eol or_op_eol capture_op_eol + add_op_eol mult_op_eol two_op_eol three_op_eol pipe_op_eol stab_op_eol + arrow_op_eol match_op_eol when_op_eol in_op_eol in_match_op_eol + type_op_eol rel_op_eol + open_paren close_paren empty_paren eoe + list list_args open_bracket close_bracket + tuple open_curly close_curly + bit_string open_bit close_bit + map map_op map_close map_args map_expr struct_op + assoc_op_eol assoc_expr assoc_base assoc_update assoc_update_kw assoc + container_args_base container_args + call_args_parens_expr call_args_parens_base call_args_parens parens_call + call_args_no_parens_one call_args_no_parens_ambig call_args_no_parens_expr + call_args_no_parens_comma_expr call_args_no_parens_all call_args_no_parens_many + call_args_no_parens_many_strict + stab stab_eoe stab_expr stab_op_eol_and_expr stab_parens_many + kw_eol kw_base kw call_args_no_parens_kw_expr call_args_no_parens_kw + dot_op dot_alias dot_alias_container + dot_identifier dot_op_identifier dot_do_identifier + dot_paren_identifier dot_bracket_identifier + do_block fn_eoe do_eoe end_eoe block_eoe block_item block_list + . + +Terminals + identifier kw_identifier kw_identifier_safe kw_identifier_unsafe bracket_identifier + paren_identifier do_identifier block_identifier + fn 'end' aliases + number atom atom_safe atom_unsafe bin_string list_string sigil + dot_call_op op_identifier + comp_op at_op unary_op and_op or_op arrow_op match_op in_op in_match_op + type_op dual_op add_op mult_op two_op three_op pipe_op stab_op when_op assoc_op + capture_op rel_op + 'true' 'false' 'nil' 'do' eol ';' ',' '.' + '(' ')' '[' ']' '{' '}' '<<' '>>' '%{}' '%' + . + +Rootsymbol grammar. + +%% Two shift/reduce conflicts coming from call_args_parens. +Expect 2. + +%% Changes in ops and precedence should be reflected on lib/elixir/lib/macro.ex +%% Note though the operator => in practice has lower precedence than all others, +%% its entry in the table is only to support the %{user | foo => bar} syntax. +Left 5 do. +Right 10 stab_op_eol. %% -> +Left 20 ','. +Nonassoc 30 capture_op_eol. %% & +Left 40 in_match_op_eol. %% <-, \\ (allowed in matches along =) +Right 50 when_op_eol. %% when +Right 60 type_op_eol. %% :: +Right 70 pipe_op_eol. %% | +Right 80 assoc_op_eol. %% => +Right 90 match_op_eol. %% = +Left 130 or_op_eol. %% ||, |||, or +Left 140 and_op_eol. %% &&, &&&, and +Left 150 comp_op_eol. %% ==, !=, =~, ===, !== +Left 160 rel_op_eol. %% <, >, <=, >= +Left 170 arrow_op_eol. %% |>, <<<, >>>, ~>>, <<~, ~>, <~, <~>, <|> +Left 180 in_op_eol. %% in +Left 190 three_op_eol. %% ^^^ +Right 200 two_op_eol. %% ++, --, .., <> +Left 210 add_op_eol. %% +, - +Left 220 mult_op_eol. %% *, / +Nonassoc 300 unary_op_eol. %% +, -, !, ^, not, ~~~ +Left 310 dot_call_op. +Left 310 dot_op. %% . +Nonassoc 320 at_op_eol. %% @ +Nonassoc 330 dot_identifier. + +%%% MAIN FLOW OF EXPRESSIONS + +grammar -> eoe : nil. +grammar -> expr_list : to_block('$1'). +grammar -> eoe expr_list : to_block('$2'). +grammar -> expr_list eoe : to_block('$1'). +grammar -> eoe expr_list eoe : to_block('$2'). +grammar -> '$empty' : nil. + +% Note expressions are on reverse order +expr_list -> expr : ['$1']. +expr_list -> expr_list eoe expr : ['$3'|'$1']. + +expr -> matched_expr : '$1'. +expr -> no_parens_expr : '$1'. +expr -> unmatched_expr : '$1'. + +%% In Elixir we have three main call syntaxes: with parentheses, +%% without parentheses and with do blocks. They are represented +%% in the AST as matched, no_parens and unmatched. +%% +%% Calls without parentheses are further divided according to how +%% problematic they are: +%% +%% (a) no_parens_one: a call with one unproblematic argument +%% (e.g. `f a` or `f g a` and similar) (includes unary operators) +%% +%% (b) no_parens_many: a call with several arguments (e.g. `f a, b`) +%% +%% (c) no_parens_one_ambig: a call with one argument which is +%% itself a no_parens_many or no_parens_one_ambig (e.g. `f g a, b` +%% or `f g h a, b` and similar) +%% +%% Note, in particular, that no_parens_one_ambig expressions are +%% ambiguous and are interpreted such that the outer function has +%% arity 1 (e.g. `f g a, b` is interpreted as `f(g(a, b))` rather +%% than `f(g(a), b)`). Hence the name, no_parens_one_ambig. +%% +%% The distinction is required because we can't, for example, have +%% a function call with a do block as argument inside another do +%% block call, unless there are parentheses: +%% +%% if if true do true else false end do #=> invalid +%% if(if true do true else false end) do #=> valid +%% +%% Similarly, it is not possible to nest calls without parentheses +%% if their arity is more than 1: +%% +%% foo a, bar b, c #=> invalid +%% foo(a, bar b, c) #=> invalid +%% foo bar a, b #=> valid +%% foo a, bar(b, c) #=> valid +%% +%% So the different grammar rules need to take into account +%% if calls without parentheses are do blocks in particular +%% segments and act accordingly. +matched_expr -> matched_expr matched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')). +matched_expr -> unary_op_eol matched_expr : build_unary_op('$1', '$2'). +matched_expr -> at_op_eol matched_expr : build_unary_op('$1', '$2'). +matched_expr -> capture_op_eol matched_expr : build_unary_op('$1', '$2'). +matched_expr -> no_parens_one_expr : '$1'. +matched_expr -> no_parens_zero_expr : '$1'. +matched_expr -> access_expr : '$1'. +matched_expr -> access_expr kw_identifier : throw_invalid_kw_identifier('$2'). + +unmatched_expr -> matched_expr unmatched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')). +unmatched_expr -> unmatched_expr matched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')). +unmatched_expr -> unmatched_expr unmatched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')). +unmatched_expr -> unmatched_expr no_parens_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')). +unmatched_expr -> unary_op_eol expr : build_unary_op('$1', '$2'). +unmatched_expr -> at_op_eol expr : build_unary_op('$1', '$2'). +unmatched_expr -> capture_op_eol expr : build_unary_op('$1', '$2'). +unmatched_expr -> block_expr : '$1'. + +no_parens_expr -> matched_expr no_parens_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')). +no_parens_expr -> unary_op_eol no_parens_expr : build_unary_op('$1', '$2'). +no_parens_expr -> at_op_eol no_parens_expr : build_unary_op('$1', '$2'). +no_parens_expr -> capture_op_eol no_parens_expr : build_unary_op('$1', '$2'). +no_parens_expr -> no_parens_one_ambig_expr : '$1'. +no_parens_expr -> no_parens_many_expr : '$1'. + +block_expr -> parens_call call_args_parens do_block : build_identifier('$1', '$2' ++ '$3'). +block_expr -> parens_call call_args_parens call_args_parens do_block : build_nested_parens('$1', '$2', '$3' ++ '$4'). +block_expr -> dot_do_identifier do_block : build_identifier('$1', '$2'). +block_expr -> dot_identifier call_args_no_parens_all do_block : build_identifier('$1', '$2' ++ '$3'). + +matched_op_expr -> match_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> add_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> mult_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> two_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> three_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> and_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> or_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> in_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> in_match_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> type_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> when_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> pipe_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> comp_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> rel_op_eol matched_expr : {'$1', '$2'}. +matched_op_expr -> arrow_op_eol matched_expr : {'$1', '$2'}. +%% Warn for no parens subset +matched_op_expr -> arrow_op_eol no_parens_one_expr : warn_pipe('$1', '$2'), {'$1', '$2'}. + +unmatched_op_expr -> match_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> add_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> mult_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> two_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> three_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> and_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> or_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> in_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> in_match_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> type_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> when_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> pipe_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> comp_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> rel_op_eol unmatched_expr : {'$1', '$2'}. +unmatched_op_expr -> arrow_op_eol unmatched_expr : {'$1', '$2'}. + +no_parens_op_expr -> match_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> add_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> mult_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> two_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> three_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> and_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> or_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> in_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> in_match_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> type_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> when_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> pipe_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> comp_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> rel_op_eol no_parens_expr : {'$1', '$2'}. +no_parens_op_expr -> arrow_op_eol no_parens_expr : {'$1', '$2'}. +%% Warn for no parens subset +no_parens_op_expr -> arrow_op_eol no_parens_one_ambig_expr : warn_pipe('$1', '$2'), {'$1', '$2'}. +no_parens_op_expr -> arrow_op_eol no_parens_many_expr : warn_pipe('$1', '$2'), {'$1', '$2'}. + +%% Allow when (and only when) with keywords +no_parens_op_expr -> when_op_eol call_args_no_parens_kw : {'$1', '$2'}. + +no_parens_one_ambig_expr -> dot_op_identifier call_args_no_parens_ambig : build_identifier('$1', '$2'). +no_parens_one_ambig_expr -> dot_identifier call_args_no_parens_ambig : build_identifier('$1', '$2'). + +no_parens_many_expr -> dot_op_identifier call_args_no_parens_many_strict : build_identifier('$1', '$2'). +no_parens_many_expr -> dot_identifier call_args_no_parens_many_strict : build_identifier('$1', '$2'). + +no_parens_one_expr -> dot_op_identifier call_args_no_parens_one : build_identifier('$1', '$2'). +no_parens_one_expr -> dot_identifier call_args_no_parens_one : build_identifier('$1', '$2'). +no_parens_zero_expr -> dot_do_identifier : build_identifier('$1', nil). +no_parens_zero_expr -> dot_identifier : build_identifier('$1', nil). + +%% From this point on, we just have constructs that can be +%% used with the access syntax. Notice that (dot_)identifier +%% is not included in this list simply because the tokenizer +%% marks identifiers followed by brackets as bracket_identifier. +access_expr -> bracket_at_expr : '$1'. +access_expr -> bracket_expr : '$1'. +access_expr -> at_op_eol number : build_unary_op('$1', ?exprs('$2')). +access_expr -> unary_op_eol number : build_unary_op('$1', ?exprs('$2')). +access_expr -> capture_op_eol number : build_unary_op('$1', ?exprs('$2')). +access_expr -> fn_eoe stab end_eoe : build_fn('$1', reverse('$2')). +access_expr -> open_paren stab close_paren : build_stab(reverse('$2')). +access_expr -> open_paren stab ';' close_paren : build_stab(reverse('$2')). +access_expr -> open_paren ';' stab ';' close_paren : build_stab(reverse('$3')). +access_expr -> open_paren ';' stab close_paren : build_stab(reverse('$3')). +access_expr -> open_paren ';' close_paren : build_stab([]). +access_expr -> empty_paren : nil. +access_expr -> number : ?exprs('$1'). +access_expr -> list : element(1, '$1'). +access_expr -> map : '$1'. +access_expr -> tuple : '$1'. +access_expr -> 'true' : ?id('$1'). +access_expr -> 'false' : ?id('$1'). +access_expr -> 'nil' : ?id('$1'). +access_expr -> bin_string : build_bin_string('$1'). +access_expr -> list_string : build_list_string('$1'). +access_expr -> bit_string : '$1'. +access_expr -> sigil : build_sigil('$1'). +access_expr -> max_expr : '$1'. + +%% Aliases and properly formed calls. Used by map_expr. +max_expr -> atom : ?exprs('$1'). +max_expr -> atom_safe : build_quoted_atom('$1', true). +max_expr -> atom_unsafe : build_quoted_atom('$1', false). +max_expr -> parens_call call_args_parens : build_identifier('$1', '$2'). +max_expr -> parens_call call_args_parens call_args_parens : build_nested_parens('$1', '$2', '$3'). +max_expr -> dot_alias : '$1'. + +bracket_arg -> open_bracket kw close_bracket : build_list('$1', '$2'). +bracket_arg -> open_bracket container_expr close_bracket : build_list('$1', '$2'). +bracket_arg -> open_bracket container_expr ',' close_bracket : build_list('$1', '$2'). + +bracket_expr -> dot_bracket_identifier bracket_arg : build_access(build_identifier('$1', nil), '$2'). +bracket_expr -> access_expr bracket_arg : build_access('$1', '$2'). + +bracket_at_expr -> at_op_eol dot_bracket_identifier bracket_arg : + build_access(build_unary_op('$1', build_identifier('$2', nil)), '$3'). +bracket_at_expr -> at_op_eol access_expr bracket_arg : + build_access(build_unary_op('$1', '$2'), '$3'). + +%% Blocks + +do_block -> do_eoe 'end' : [[{do, nil}]]. +do_block -> do_eoe stab end_eoe : [[{do, build_stab(reverse('$2'))}]]. +do_block -> do_eoe block_list 'end' : [[{do, nil}|'$2']]. +do_block -> do_eoe stab_eoe block_list 'end' : [[{do, build_stab(reverse('$2'))}|'$3']]. + +eoe -> eol : '$1'. +eoe -> ';' : '$1'. +eoe -> eol ';' : '$1'. + +fn_eoe -> 'fn' : '$1'. +fn_eoe -> 'fn' eoe : '$1'. + +do_eoe -> 'do' : '$1'. +do_eoe -> 'do' eoe : '$1'. + +end_eoe -> 'end' : '$1'. +end_eoe -> eoe 'end' : '$2'. + +block_eoe -> block_identifier : '$1'. +block_eoe -> block_identifier eoe : '$1'. + +stab -> stab_expr : ['$1']. +stab -> stab eoe stab_expr : ['$3'|'$1']. + +stab_eoe -> stab : '$1'. +stab_eoe -> stab eoe : '$1'. + +%% Here, `element(1, Token)` is the stab operator, +%% while `element(2, Token)` is the expression. +stab_expr -> expr : + '$1'. +stab_expr -> stab_op_eol_and_expr : + build_op(element(1, '$1'), [], element(2, '$1')). +stab_expr -> empty_paren stab_op_eol_and_expr : + build_op(element(1, '$2'), [], element(2, '$2')). +stab_expr -> call_args_no_parens_all stab_op_eol_and_expr : + build_op(element(1, '$2'), unwrap_when(unwrap_splice('$1')), element(2, '$2')). +stab_expr -> stab_parens_many stab_op_eol_and_expr : + build_op(element(1, '$2'), unwrap_splice('$1'), element(2, '$2')). +stab_expr -> stab_parens_many when_op expr stab_op_eol_and_expr : + build_op(element(1, '$4'), [{'when', meta_from_token('$2'), unwrap_splice('$1') ++ ['$3']}], element(2, '$4')). + +stab_op_eol_and_expr -> stab_op_eol expr : {'$1', '$2'}. +stab_op_eol_and_expr -> stab_op_eol : warn_empty_stab_clause('$1'), {'$1', nil}. + +block_item -> block_eoe stab_eoe : {?exprs('$1'), build_stab(reverse('$2'))}. +block_item -> block_eoe : {?exprs('$1'), nil}. + +block_list -> block_item : ['$1']. +block_list -> block_item block_list : ['$1'|'$2']. + +%% Helpers + +open_paren -> '(' : '$1'. +open_paren -> '(' eol : '$1'. +close_paren -> ')' : '$1'. +close_paren -> eol ')' : '$2'. + +empty_paren -> open_paren ')' : '$1'. + +open_bracket -> '[' : '$1'. +open_bracket -> '[' eol : '$1'. +close_bracket -> ']' : '$1'. +close_bracket -> eol ']' : '$2'. + +open_bit -> '<<' : '$1'. +open_bit -> '<<' eol : '$1'. +close_bit -> '>>' : '$1'. +close_bit -> eol '>>' : '$2'. + +open_curly -> '{' : '$1'. +open_curly -> '{' eol : '$1'. +close_curly -> '}' : '$1'. +close_curly -> eol '}' : '$2'. + +% Operators + +add_op_eol -> add_op : '$1'. +add_op_eol -> add_op eol : '$1'. +add_op_eol -> dual_op : '$1'. +add_op_eol -> dual_op eol : '$1'. + +mult_op_eol -> mult_op : '$1'. +mult_op_eol -> mult_op eol : '$1'. + +two_op_eol -> two_op : '$1'. +two_op_eol -> two_op eol : '$1'. + +three_op_eol -> three_op : '$1'. +three_op_eol -> three_op eol : '$1'. + +pipe_op_eol -> pipe_op : '$1'. +pipe_op_eol -> pipe_op eol : '$1'. + +capture_op_eol -> capture_op : '$1'. +capture_op_eol -> capture_op eol : '$1'. + +unary_op_eol -> unary_op : '$1'. +unary_op_eol -> unary_op eol : '$1'. +unary_op_eol -> dual_op : '$1'. +unary_op_eol -> dual_op eol : '$1'. + +match_op_eol -> match_op : '$1'. +match_op_eol -> match_op eol : '$1'. + +and_op_eol -> and_op : '$1'. +and_op_eol -> and_op eol : '$1'. + +or_op_eol -> or_op : '$1'. +or_op_eol -> or_op eol : '$1'. + +in_op_eol -> in_op : '$1'. +in_op_eol -> in_op eol : '$1'. + +in_match_op_eol -> in_match_op : '$1'. +in_match_op_eol -> in_match_op eol : '$1'. + +type_op_eol -> type_op : '$1'. +type_op_eol -> type_op eol : '$1'. + +when_op_eol -> when_op : '$1'. +when_op_eol -> when_op eol : '$1'. + +stab_op_eol -> stab_op : '$1'. +stab_op_eol -> stab_op eol : '$1'. + +at_op_eol -> at_op : '$1'. +at_op_eol -> at_op eol : '$1'. + +comp_op_eol -> comp_op : '$1'. +comp_op_eol -> comp_op eol : '$1'. + +rel_op_eol -> rel_op : '$1'. +rel_op_eol -> rel_op eol : '$1'. + +arrow_op_eol -> arrow_op : '$1'. +arrow_op_eol -> arrow_op eol : '$1'. + +% Dot operator + +dot_op -> '.' : '$1'. +dot_op -> '.' eol : '$1'. + +dot_identifier -> identifier : '$1'. +dot_identifier -> matched_expr dot_op identifier : build_dot('$2', '$1', '$3'). + +dot_alias -> aliases : {'__aliases__', meta_from_token('$1', 0), ?exprs('$1')}. +dot_alias -> matched_expr dot_op aliases : build_dot_alias('$2', '$1', '$3'). +dot_alias -> matched_expr dot_op dot_alias_container : build_dot_container('$2', '$1', '$3'). + +dot_alias_container -> open_curly '}' : []. +dot_alias_container -> open_curly container_args close_curly : '$2'. + +dot_op_identifier -> op_identifier : '$1'. +dot_op_identifier -> matched_expr dot_op op_identifier : build_dot('$2', '$1', '$3'). + +dot_do_identifier -> do_identifier : '$1'. +dot_do_identifier -> matched_expr dot_op do_identifier : build_dot('$2', '$1', '$3'). + +dot_bracket_identifier -> bracket_identifier : '$1'. +dot_bracket_identifier -> matched_expr dot_op bracket_identifier : build_dot('$2', '$1', '$3'). + +dot_paren_identifier -> paren_identifier : '$1'. +dot_paren_identifier -> matched_expr dot_op paren_identifier : build_dot('$2', '$1', '$3'). + +parens_call -> dot_paren_identifier : '$1'. +parens_call -> matched_expr dot_call_op : {'.', meta_from_token('$2'), ['$1']}. % Fun/local calls + +% Function calls with no parentheses + +call_args_no_parens_expr -> matched_expr : '$1'. +call_args_no_parens_expr -> no_parens_expr : throw_no_parens_many_strict('$1'). + +call_args_no_parens_comma_expr -> matched_expr ',' call_args_no_parens_expr : ['$3', '$1']. +call_args_no_parens_comma_expr -> call_args_no_parens_comma_expr ',' call_args_no_parens_expr : ['$3'|'$1']. + +call_args_no_parens_all -> call_args_no_parens_one : '$1'. +call_args_no_parens_all -> call_args_no_parens_ambig : '$1'. +call_args_no_parens_all -> call_args_no_parens_many : '$1'. + +call_args_no_parens_one -> call_args_no_parens_kw : ['$1']. +call_args_no_parens_one -> matched_expr : ['$1']. + +call_args_no_parens_ambig -> no_parens_expr : ['$1']. + +call_args_no_parens_many -> matched_expr ',' call_args_no_parens_kw : ['$1', '$3']. +call_args_no_parens_many -> call_args_no_parens_comma_expr : reverse('$1'). +call_args_no_parens_many -> call_args_no_parens_comma_expr ',' call_args_no_parens_kw : reverse(['$3'|'$1']). + +call_args_no_parens_many_strict -> call_args_no_parens_many : '$1'. +call_args_no_parens_many_strict -> open_paren call_args_no_parens_kw close_paren : throw_no_parens_strict('$1'). +call_args_no_parens_many_strict -> open_paren call_args_no_parens_many close_paren : throw_no_parens_strict('$1'). + +stab_parens_many -> open_paren call_args_no_parens_kw close_paren : ['$2']. +stab_parens_many -> open_paren call_args_no_parens_many close_paren : '$2'. + +% Containers + +container_expr -> matched_expr : '$1'. +container_expr -> unmatched_expr : '$1'. +container_expr -> no_parens_expr : throw_no_parens_container_strict('$1'). + +container_args_base -> container_expr : ['$1']. +container_args_base -> container_args_base ',' container_expr : ['$3'|'$1']. + +container_args -> container_args_base : lists:reverse('$1'). +container_args -> container_args_base ',' : lists:reverse('$1'). +container_args -> container_args_base ',' kw : lists:reverse(['$3'|'$1']). + +% Function calls with parentheses + +call_args_parens_expr -> matched_expr : '$1'. +call_args_parens_expr -> unmatched_expr : '$1'. +call_args_parens_expr -> no_parens_expr : throw_no_parens_many_strict('$1'). + +call_args_parens_base -> call_args_parens_expr : ['$1']. +call_args_parens_base -> call_args_parens_base ',' call_args_parens_expr : ['$3'|'$1']. + +call_args_parens -> empty_paren : []. +call_args_parens -> open_paren no_parens_expr close_paren : ['$2']. +call_args_parens -> open_paren kw close_paren : ['$2']. +call_args_parens -> open_paren call_args_parens_base close_paren : reverse('$2'). +call_args_parens -> open_paren call_args_parens_base ',' kw close_paren : reverse(['$4'|'$2']). + +% KV + +kw_eol -> kw_identifier : ?exprs('$1'). +kw_eol -> kw_identifier eol : ?exprs('$1'). +kw_eol -> kw_identifier_safe : build_quoted_atom('$1', true). +kw_eol -> kw_identifier_safe eol : build_quoted_atom('$1', true). +kw_eol -> kw_identifier_unsafe : build_quoted_atom('$1', false). +kw_eol -> kw_identifier_unsafe eol : build_quoted_atom('$1', false). + +kw_base -> kw_eol container_expr : [{'$1', '$2'}]. +kw_base -> kw_base ',' kw_eol container_expr : [{'$3', '$4'}|'$1']. + +kw -> kw_base : reverse('$1'). +kw -> kw_base ',' : reverse('$1'). + +call_args_no_parens_kw_expr -> kw_eol matched_expr : {'$1', '$2'}. +call_args_no_parens_kw_expr -> kw_eol no_parens_expr : {'$1', '$2'}. + +call_args_no_parens_kw -> call_args_no_parens_kw_expr : ['$1']. +call_args_no_parens_kw -> call_args_no_parens_kw_expr ',' call_args_no_parens_kw : ['$1'|'$3']. + +% Lists + +list_args -> kw : '$1'. +list_args -> container_args_base : reverse('$1'). +list_args -> container_args_base ',' : reverse('$1'). +list_args -> container_args_base ',' kw : reverse('$1', '$3'). + +list -> open_bracket ']' : build_list('$1', []). +list -> open_bracket list_args close_bracket : build_list('$1', '$2'). + +% Tuple + +tuple -> open_curly '}' : build_tuple('$1', []). +tuple -> open_curly container_args close_curly : build_tuple('$1', '$2'). + +% Bitstrings + +bit_string -> open_bit '>>' : build_bit('$1', []). +bit_string -> open_bit container_args close_bit : build_bit('$1', '$2'). + +% Map and structs + +%% Allow unquote/@something/aliases inside maps and structs. +map_expr -> max_expr : '$1'. +map_expr -> dot_identifier : build_identifier('$1', nil). +map_expr -> at_op_eol map_expr : build_unary_op('$1', '$2'). + +assoc_op_eol -> assoc_op : '$1'. +assoc_op_eol -> assoc_op eol : '$1'. + +assoc_expr -> matched_expr assoc_op_eol matched_expr : {'$1', '$3'}. +assoc_expr -> unmatched_expr assoc_op_eol unmatched_expr : {'$1', '$3'}. +assoc_expr -> matched_expr assoc_op_eol unmatched_expr : {'$1', '$3'}. +assoc_expr -> unmatched_expr assoc_op_eol matched_expr : {'$1', '$3'}. +assoc_expr -> map_expr : '$1'. + +assoc_update -> matched_expr pipe_op_eol assoc_expr : {'$2', '$1', ['$3']}. +assoc_update -> unmatched_expr pipe_op_eol assoc_expr : {'$2', '$1', ['$3']}. + +assoc_update_kw -> matched_expr pipe_op_eol kw : {'$2', '$1', '$3'}. +assoc_update_kw -> unmatched_expr pipe_op_eol kw : {'$2', '$1', '$3'}. + +assoc_base -> assoc_expr : ['$1']. +assoc_base -> assoc_base ',' assoc_expr : ['$3'|'$1']. + +assoc -> assoc_base : reverse('$1'). +assoc -> assoc_base ',' : reverse('$1'). + +map_op -> '%{}' : '$1'. +map_op -> '%{}' eol : '$1'. + +map_close -> kw close_curly : '$1'. +map_close -> assoc close_curly : '$1'. +map_close -> assoc_base ',' kw close_curly : reverse('$1', '$3'). + +map_args -> open_curly '}' : build_map('$1', []). +map_args -> open_curly map_close : build_map('$1', '$2'). +map_args -> open_curly assoc_update close_curly : build_map_update('$1', '$2', []). +map_args -> open_curly assoc_update ',' close_curly : build_map_update('$1', '$2', []). +map_args -> open_curly assoc_update ',' map_close : build_map_update('$1', '$2', '$4'). +map_args -> open_curly assoc_update_kw close_curly : build_map_update('$1', '$2', []). + +struct_op -> '%' : '$1'. + +map -> map_op map_args : '$2'. +map -> struct_op map_expr map_args : {'%', meta_from_token('$1'), ['$2', '$3']}. +map -> struct_op map_expr eol map_args : {'%', meta_from_token('$1'), ['$2', '$4']}. + +Erlang code. + +-define(file(), get(elixir_parser_file)). +-define(id(Token), element(1, Token)). +-define(location(Token), element(2, Token)). +-define(exprs(Token), element(3, Token)). +-define(meta(Node), element(2, Node)). +-define(rearrange_uop(Op), (Op == 'not' orelse Op == '!')). + +%% The following directive is needed for (significantly) faster +%% compilation of the generated .erl file by the HiPE compiler +-compile([{hipe, [{regalloc, linear_scan}]}]). +-import(lists, [reverse/1, reverse/2]). + +meta_from_token(Token, Counter) -> [{counter, Counter}|meta_from_token(Token)]. +meta_from_token(Token) -> meta_from_location(?location(Token)). + +meta_from_location({Line, Column, EndColumn}) + when is_integer(Line), is_integer(Column), is_integer(EndColumn) -> [{line, Line}]. + +%% Operators + +build_op({_Kind, Location, 'in'}, {UOp, _, [Left]}, Right) when ?rearrange_uop(UOp) -> + {UOp, meta_from_location(Location), [{'in', meta_from_location(Location), [Left, Right]}]}; + +build_op({_Kind, Location, Op}, Left, Right) -> + {Op, meta_from_location(Location), [Left, Right]}. + +build_unary_op({_Kind, Location, Op}, Expr) -> + {Op, meta_from_location(Location), [Expr]}. + +build_list(Marker, Args) -> + {Args, ?location(Marker)}. + +build_tuple(_Marker, [Left, Right]) -> + {Left, Right}; +build_tuple(Marker, Args) -> + {'{}', meta_from_token(Marker), Args}. + +build_bit(Marker, Args) -> + {'<<>>', meta_from_token(Marker), Args}. + +build_map(Marker, Args) -> + {'%{}', meta_from_token(Marker), Args}. + +build_map_update(Marker, {Pipe, Left, Right}, Extra) -> + {'%{}', meta_from_token(Marker), [build_op(Pipe, Left, Right ++ Extra)]}. + +%% Blocks + +build_block([{Op, _, [_]}]=Exprs) when ?rearrange_uop(Op) -> {'__block__', [], Exprs}; +build_block([{unquote_splicing, _, Args}]=Exprs) when + length(Args) =< 2 -> {'__block__', [], Exprs}; +build_block([Expr]) -> Expr; +build_block(Exprs) -> {'__block__', [], Exprs}. + +%% Dots + +build_dot_alias(Dot, {'__aliases__', _, Left}, {'aliases', _, Right}) -> + {'__aliases__', meta_from_token(Dot), Left ++ Right}; + +build_dot_alias(_Dot, Atom, {'aliases', _, _} = Token) when is_atom(Atom) -> + throw_bad_atom(Token); + +build_dot_alias(Dot, Other, {'aliases', _, Right}) -> + {'__aliases__', meta_from_token(Dot), [Other|Right]}. + +build_dot_container(Dot, Left, Right) -> + Meta = meta_from_token(Dot), + {{'.', Meta, [Left, '{}']}, Meta, Right}. + +build_dot(Dot, Left, Right) -> + {'.', meta_from_token(Dot), [Left, extract_identifier(Right)]}. + +extract_identifier({Kind, _, Identifier}) when + Kind == identifier; Kind == bracket_identifier; Kind == paren_identifier; + Kind == do_identifier; Kind == op_identifier -> + Identifier. + +%% Identifiers + +build_nested_parens(Dot, Args1, Args2) -> + Identifier = build_identifier(Dot, Args1), + Meta = ?meta(Identifier), + {Identifier, Meta, Args2}. + +build_identifier({'.', Meta, _} = Dot, Args) -> + FArgs = case Args of + nil -> []; + _ -> Args + end, + {Dot, Meta, FArgs}; + +build_identifier({op_identifier, Location, Identifier}, [Arg]) -> + {Identifier, [{ambiguous_op, nil}|meta_from_location(Location)], [Arg]}; + +build_identifier({_, Location, Identifier}, Args) -> + {Identifier, meta_from_location(Location), Args}. + +%% Fn + +build_fn(Op, [{'->', _, [_, _]}|_] = Stab) -> + {fn, meta_from_token(Op), build_stab(Stab)}; +build_fn(Op, _Stab) -> + throw(meta_from_token(Op), "expected clauses to be defined with -> inside: ", "'fn'"). + +%% Access + +build_access(Expr, {List, Location}) -> + Meta = meta_from_location(Location), + {{'.', Meta, ['Elixir.Access', get]}, Meta, [Expr, List]}. + +%% Interpolation aware + +build_sigil({sigil, Location, Sigil, Parts, Modifiers}) -> + Meta = meta_from_location(Location), + {list_to_atom("sigil_" ++ [Sigil]), Meta, [{'<<>>', Meta, string_parts(Parts)}, Modifiers]}. + +build_bin_string({bin_string, _Location, [H]}) when is_binary(H) -> + H; +build_bin_string({bin_string, Location, Args}) -> + {'<<>>', meta_from_location(Location), string_parts(Args)}. + +build_list_string({list_string, _Location, [H]}) when is_binary(H) -> + elixir_utils:characters_to_list(H); +build_list_string({list_string, Location, Args}) -> + Meta = meta_from_location(Location), + {{'.', Meta, ['Elixir.String', to_char_list]}, Meta, [{'<<>>', Meta, string_parts(Args)}]}. + +build_quoted_atom({_, _Location, [H]}, Safe) when is_binary(H) -> + Op = binary_to_atom_op(Safe), erlang:Op(H, utf8); +build_quoted_atom({_, Location, Args}, Safe) -> + Meta = meta_from_location(Location), + {{'.', Meta, [erlang, binary_to_atom_op(Safe)]}, Meta, [{'<<>>', Meta, string_parts(Args)}, utf8]}. + +binary_to_atom_op(true) -> binary_to_existing_atom; +binary_to_atom_op(false) -> binary_to_atom. + +string_parts(Parts) -> + [string_part(Part) || Part <- Parts]. +string_part(Binary) when is_binary(Binary) -> + Binary; +string_part({Location, Tokens}) -> + Form = string_tokens_parse(Tokens), + Meta = meta_from_location(Location), + {'::', Meta, [{{'.', Meta, ['Elixir.Kernel', to_string]}, Meta, [Form]}, {binary, Meta, nil}]}. + +string_tokens_parse(Tokens) -> + case parse(Tokens) of + {ok, Forms} -> Forms; + {error, _} = Error -> throw(Error) + end. + +%% Keywords + +build_stab([{'->', Meta, [Left, Right]}|T]) -> + build_stab(Meta, T, Left, [Right], []); + +build_stab(Else) -> + build_block(Else). + +build_stab(Old, [{'->', New, [Left, Right]}|T], Marker, Temp, Acc) -> + H = {'->', Old, [Marker, build_block(reverse(Temp))]}, + build_stab(New, T, Left, [Right], [H|Acc]); + +build_stab(Meta, [H|T], Marker, Temp, Acc) -> + build_stab(Meta, T, Marker, [H|Temp], Acc); + +build_stab(Meta, [], Marker, Temp, Acc) -> + H = {'->', Meta, [Marker, build_block(reverse(Temp))]}, + reverse([H|Acc]). + +%% Every time the parser sees a (unquote_splicing()) +%% it assumes that a block is being spliced, wrapping +%% the splicing in a __block__. But in the stab clause, +%% we can have (unquote_splicing(1, 2, 3)) -> :ok, in such +%% case, we don't actually want the block, since it is +%% an arg style call. unwrap_splice unwraps the splice +%% from such blocks. +unwrap_splice([{'__block__', [], [{unquote_splicing, _, _}] = Splice}]) -> + Splice; + +unwrap_splice(Other) -> Other. + +unwrap_when(Args) -> + case elixir_utils:split_last(Args) of + {Start, {'when', Meta, [_, _] = End}} -> + [{'when', Meta, Start ++ End}]; + {_, _} -> + Args + end. + +to_block([One]) -> One; +to_block(Other) -> {'__block__', [], reverse(Other)}. + +%% Warnings and errors + +throw(Meta, Error, Token) -> + Line = + case lists:keyfind(line, 1, Meta) of + {line, L} -> L; + false -> 0 + end, + throw({error, {Line, ?MODULE, [Error, Token]}}). + +throw_bad_atom(Token) -> + throw(meta_from_token(Token), "atom cannot be followed by an alias. If the '.' was meant to be " + "part of the atom's name, the atom name must be quoted. Syntax error before: ", "'.'"). + +throw_no_parens_strict(Token) -> + throw(meta_from_token(Token), "unexpected parentheses. If you are making a " + "function call, do not insert spaces between the function name and the " + "opening parentheses. Syntax error before: ", "'('"). + +throw_no_parens_many_strict(Node) -> + throw(?meta(Node), + "unexpected comma. Parentheses are required to solve ambiguity in nested calls.\n\n" + "This error happens when you have nested function calls without parentheses. " + "For example:\n\n" + " one a, two b, c, d\n\n" + "In the example above, we don't know if the parameters \"c\" and \"d\" apply " + "to the function \"one\" or \"two\". You can solve this by explicitly adding " + "parentheses:\n\n" + " one a, two(b, c, d)\n\n" + "Elixir cannot compile otherwise. Syntax error before: ", "','"). + +throw_no_parens_container_strict(Node) -> + throw(?meta(Node), + "unexpected comma. Parentheses are required to solve ambiguity inside containers.\n\n" + "This error may happen when you forget a comma in a list or other container:\n\n" + " [a, b c, d]\n\n" + "Or when you have ambiguous calls:\n\n" + " [one, two three, four, five]\n\n" + "In the example above, we don't know if the parameters \"four\" and \"five\" " + "belongs to the list or the function \"two\". You can solve this by explicitly " + "adding parentheses:\n\n" + " [one, two(three, four), five]\n\n" + "Elixir cannot compile otherwise. Syntax error before: ", "','"). + +throw_invalid_kw_identifier({_, _, do} = Token) -> + throw(meta_from_token(Token), elixir_tokenizer:invalid_do_error("unexpected keyword \"do:\""), "'do:'"); +throw_invalid_kw_identifier({_, _, KW} = Token) -> + throw(meta_from_token(Token), "syntax error before: ", "'" ++ atom_to_list(KW) ++ "':"). + +%% TODO: Make those warnings errors. +warn_empty_stab_clause({stab_op, {Line, _Begin, _End}, '->'}) -> + elixir_errors:warn(Line, ?file(), + "an expression is always required on the right side of ->. " + "Please provide a value after ->"). + +warn_pipe({arrow_op, {Line, _Begin, _End}, Op}, {_, [_|_], [_|_]}) -> + elixir_errors:warn(Line, ?file(), + io_lib:format( + "you are piping into a function call without parentheses, which may be ambiguous. " + "Please wrap the function you are piping into in parentheses. For example:\n\n" + " foo 1 ~ts bar 2 ~ts baz 3\n\n" + "Should be written as:\n\n" + " foo(1) ~ts bar(2) ~ts baz(3)\n", + [Op, Op, Op, Op] + ) + ); +warn_pipe(_Token, _) -> + ok. diff --git a/samples/Erlang/factorial.script! b/samples/Erlang/factorial similarity index 100% rename from samples/Erlang/factorial.script! rename to samples/Erlang/factorial diff --git a/samples/Erlang/filenames/rebar.config b/samples/Erlang/filenames/rebar.config new file mode 100644 index 00000000..91d3dff4 --- /dev/null +++ b/samples/Erlang/filenames/rebar.config @@ -0,0 +1,260 @@ +%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- +%% ex: ts=4 sw=4 ft=erlang et +%% This is a sample rebar.conf file that shows examples of some of rebar's +%% options. + +%% == Core == + +%% Extend list of always recursive commands +{recursive_cmds, []}. + +%% Check required ERTS or OTP release version +{require_erts_vsn, ".*"}. +{require_otp_vsn, ".*"}. +{require_min_otp_vsn, ".*"}. + +%% Additional library directories to add to the code path +{lib_dirs, []}. + +%% == Erlang Compiler == + +%% Erlang files to compile before the rest. Rebar automatically compiles +%% parse_transforms and custom behaviours before anything other than the files +%% in this list. +{erl_first_files, ["src/mymib1.erl", "src/mymib2.erl"]}. + +%% Erlang compiler options +{erl_opts, [no_debug_info, + {i, "myinclude"}, + {src_dirs, ["src", "src2", "src3"]}, + {platform_define, + "(linux|solaris|freebsd|darwin)", 'HAVE_SENDFILE'}, + {platform_define, "(linux|freebsd)", 'BACKLOG', 128}, + {platform_define, "R13", 'old_inets'}]}. + +%% MIB Options? +{mib_opts, []}. + +%% SNMP mibs to compile first? +{mib_first_files, []}. + +%% leex options +{xrl_opts, []}. + +%% leex files to compile first +{xrl_first_files, []}. + +%% yecc options +{yrl_opts, []}. + +%% yecc files to compile first +{yrl_first_files, []}. + +%% == EDoc == + +%% EDoc options +{edoc_opts, []}. + +%% == Port Compiler == + +%% Port compilation environment variables. See rebar_port_compiler.erl for +%% more info. Default is `[]' +{port_env, [{"CFLAGS", "$CFLAGS -Ifoo"}, + {"freebsd", "LDFLAGS", "$LDFLAGS -lfoo"}]}. + +%% port_specs +%% List of filenames or wildcards to be compiled. May also contain a tuple +%% consisting of a regular expression to be applied against the system +%% architecture as a filter. +{port_specs, [{"priv/so_name.so", ["c_src/*.c"]}, + {"linux", "priv/hello_linux", ["c_src/hello_linux.c"]}, + {"linux", "priv/hello_linux", ["c_src/*.c"], [{env, []}]}]}. + +%% == escriptize == +{escript_name, "application"}. +{escript_incl_apps, []}. +{escript_shebang, "#!/usr/bin/env escript\n"}. +{escript_comment, "%%\n"}. +{escript_emu_args, "%%! -pa application/application/ebin\n"}. + +%% == LFE Compiler == + +%% LFE files to compile before the rest +{lfe_first_files, []}. + +%% Options for the LFE compiler: reuse {erl_opts, []} + +%% == ErlyDTL Compiler == + +%% Options for the ErlyDTL compiler +{erlydtl_opts, []}. + +%% == Proto compiler == +{proto_opts, [ + {compiler, protobuffs}, + {src_dirs, ["src"]} +]}. +%% Available compilers for protocol buffer files (*.proto): +%% protobuffs (default) +%% gpb +%% Optional src_dirs which is a list of directories where +%% to look for .proto files, default is src + +%% Options for the gpb protocol buffer compiler, +%% if selected by the proto_compiler option +{gpb_opts, []}. + +%% == EUnit == + +%% Options for eunit:test() +{eunit_opts, []}. + +%% Additional compile options for eunit. erl_opts is also used +{eunit_compile_opts, []}. + +%% Same as erl_first_files, but used only when running 'eunit' +{eunit_first_files, []}. + +%% == Cover == + +%% Whether to enable coverage reporting. Default is `false' +{cover_enabled, false}. + +%% Whether to print coverage report to console. Default is `false' +{cover_print_enabled, false}. + +%% Whether to export coverage report to file. Default is `false' +{cover_export_enabled, false}. + +%% == Common Test == + +%% Override the default "test" directory in which SUITEs are located +{ct_dir, "itest"}. + +%% Override the default "logs" directory in which SUITEs are logged +{ct_log_dir, "test/logs"}. + +%% Option to pass extra parameters when launching Common Test +{ct_extra_params, "-boot start_sasl -s myapp"}. + +%% Option to use short names (i.e., -sname test) when starting ct +{ct_use_short_names, true}. + +%% == QuickCheck == + +%% If qc_mod is unspecified, rebar tries to detect Triq or EQC +{qc_opts, [{qc_mod, module()}, Options]}. + +%% Additional compile options for qc. erl_opts is also used +{qc_compile_opts, []}. + +%% Same as erl_first_files, but used only when running 'qc' +{qc_first_files, []}. + +%% == Cleanup == + +%% Which files to cleanup +{clean_files, ["file", "file2"]}. + +%% == OTP Applications == + +%% Enable validation of the OTP app module list. Default is 'true' +{validate_app_modules, true}. + +%% == Dependencies == + +%% Where to put any downloaded dependencies. Default is "deps" +{deps_dir, "deps"}. + +%% What dependencies we have, dependencies can be of 3 forms, an application +%% name as an atom, eg. mochiweb, a name and a version (from the .app file), or +%% an application name, a version and the SCM details on how to fetch it (SCM +%% type, location and revision). +%% Rebar currently supports git, hg, bzr, svn, rsync, fossil, and p4. +{deps, [app_name, + {rebar, "1.0.*"}, + {rebar, ".*", + {git, "git://github.com/rebar/rebar.git"}}, + {rebar, ".*", + {git, "git://github.com/rebar/rebar.git", "Rev"}}, + {rebar, "1.0.*", + {git, "git://github.com/rebar/rebar.git", {branch, "master"}}}, + {rebar, "1.0.0", + {git, "git://github.com/rebar/rebar.git", {tag, "1.0.0"}}}, + %% Dependencies can be marked as 'raw'. Rebar does not require + %% such dependencies to have a standard Erlang/OTP layout + %% which assumes the presence of either + %% "src/dependency_name.app.src" or "ebin/dependency_name.app" + %% files. + %% + %% 'raw' dependencies can still contain 'rebar.config' and + %% even can have the proper OTP directory layout, but they + %% won't be compiled. + %% + %% Only a subset of rebar commands will be executed on the + %% 'raw' subdirectories: get-deps, update-deps, check-deps, + %% list-deps and delete-deps. + {rebar, "", + {git, "git://github.com/rebar/rebar.git", {branch, "master"}}, + [raw]}, + {app_name, ".*", {hg, "https://www.example.org/url"}}, + {app_name, ".*", {rsync, "Url"}}, + {app_name, ".*", {svn, "https://www.example.org/url"}}, + {app_name, ".*", {svn, "svn://svn.example.org/url"}}, + {app_name, ".*", {bzr, "https://www.example.org/url", "Rev"}}, + {app_name, ".*", {fossil, "https://www.example.org/url"}}, + {app_name, ".*", {fossil, "https://www.example.org/url", "Vsn"}}, + {app_name, ".*", {p4, "//depot/subdir/app_dir"}}]}. + +%% == Subdirectories == + +%% Subdirectories? +{sub_dirs, ["dir1", "dir2"]}. + +%% == Plugins == + +%% Plugins you wish to include. +%% These can include any module on the code path, including deps. +%% Alternatively, plugins can be placed as source files in the plugin_dir, in +%% which case they will be compiled and loaded dynamically at runtime. +{plugins, [plugin1, plugin2]}. + +%% Override the directory in which plugin sources can be found. +%% Defaults to ./plugins +{plugin_dir, "some_other_directory"}. + + +%% == Pre/Post Command Hooks == + +{pre_hooks, [{clean, "./prepare_package_files.sh"}, + {"linux", compile, "c_src/build_linux.sh"}, + {compile, "escript generate_headers"}, + {compile, "escript check_headers"}]}. + +{post_hooks, [{clean, "touch file1.out"}, + {"freebsd", compile, "c_src/freebsd_tweaks.sh"}, + {eunit, "touch file2.out"}, + {compile, "touch postcompile.out"}]}. + +%% == xref == + +{xref_warnings, false}. + +%% optional extra paths to include in xref:set_library_path/2. +%% specified relative location of rebar.config. +%% e.g. {xref_extra_paths,["../gtknode/src"]} +{xref_extra_paths,[]}. + +%% xref checks to run +{xref_checks, [undefined_function_calls, undefined_functions, + locals_not_used, exports_not_used, + deprecated_function_calls, deprecated_functions]}. + +%% Optional custom xref queries (xref manual has details) specified as +%% {xref_queries, [{query_string(), expected_query_result()},...]} +%% The following for example removes all references to mod:*foo/4 +%% functions from undefined external function calls as those are in a +%% generated module +{xref_queries, + [{"(XC - UC) || (XU - X - B" + " - (\"mod\":\".*foo\"/\"4\"))",[]}]}. diff --git a/samples/Erlang/filenames/rebar.config.lock b/samples/Erlang/filenames/rebar.config.lock new file mode 100644 index 00000000..1627a9b1 --- /dev/null +++ b/samples/Erlang/filenames/rebar.config.lock @@ -0,0 +1,158 @@ +%% THIS FILE IS GENERATED. DO NOT EDIT IT MANUALLY %% + +{sub_dirs,["rel","apps/riak"]}. +{require_otp_vsn,"R16|17"}. +{cover_enabled,true}. +{lib_dirs,["apps/riak"]}. +{erl_opts,[debug_info,fail_on_warning]}. +{eunit_opts,[verbose]}. +{erlydtl_opts,[{compiler_options,[report,return,debug_info]}]}. +{deps,[{rebar_lock_deps_plugin,".*", + {git,"git://github.com/seth/rebar_lock_deps_plugin.git", + "7a5835029c42b8138325405237ea7e8516a84800"}}, + {node_package,".*", + {git,"git://github.com/basho/node_package.git", + "a829631eccebe3c1d7657a0075584f55bf342977"}}, + {goldrush,".*", + {git,"git://github.com/DeadZen/goldrush.git", + "71e63212f12c25827e0c1b4198d37d5d018a7fec"}}, + {lager,".*", + {git,"git://github.com/basho/lager.git", + "b6b6cebcb27ccff8acc59ae775acebc2f52e4926"}}, + {syslog,".*", + {git,"git://github.com/Vagabond/erlang-syslog.git", + "918c9b453e0811b24f2c99b35b712b0ef9f29c7e"}}, + {lager_syslog,".*", + {git,"git://github.com/basho/lager_syslog.git", + "fa2e7e3daee0d0a59dadb820fd3381eac4a65770"}}, + {cluster_info,".*", + {git,"git://github.com/basho/cluster_info.git", + "e231144ca32dc83317be3360a4a259c73826b08a"}}, + {sidejob,".*", + {git,"git://github.com/basho/sidejob.git", + "c5aabba2d7daa80c340e110902bbcfcb552ccdcf"}}, + {erlang_js,".*", + {git,"git://github.com/basho/erlang_js.git", + "07467d899ab90a2b719ad19ab0be0048c1c8d873"}}, + {meck,".*", + {git,"git://github.com/basho/meck.git", + "dde759050eff19a1a80fd854d7375174b191665d"}}, + {getopt,".*", + {git,"git://github.com/jcomellas/getopt.git", + "659a28f4145bc9843598972854299dc4ea77e4cb"}}, + {neotoma,".*", + {git,"git://github.com/seancribbs/neotoma.git", + "760928ec8870da02eb11bccb501e2700925d06c6"}}, + {cuttlefish,".*", + {git,"git://github.com/basho/cuttlefish.git", + "c92c8325aeaea6b6ba7516bbd434f8e408f87d60"}}, + {bitcask,".*", + {git,"git://github.com/basho/bitcask.git", + "c74d0c43fdefdd435f7621ddf1fc2995b5bd123c"}}, + {eper,".*", + {git,"git://github.com/basho/eper.git", + "7222ecaebceb5422e74a9c1503043bbc6036f6b7"}}, + {edown,".*", + {git,"git://github.com/uwiger/edown.git", + "d62ec85281e451a46ba30045917c119d65b72a84"}}, + {sext,".*", + {git,"git://github.com/basho/sext.git", + "846b9cc22456287a572efd4c924203d77778670f"}}, + {poolboy,".*", + {git,"git://github.com/basho/poolboy.git", + "8bb45fbc715c5f493642a1cc572ec7017d0d5fa3"}}, + {basho_stats,".*", + {git,"git://github.com/basho/basho_stats.git", + "19c532af235ae675439d491b329c55c2f9b02deb"}}, + {riak_sysmon,".*", + {git,"git://github.com/basho/riak_sysmon.git", + "26a58bcaba96d07df885f7b3db4d4306f995ce14"}}, + {eleveldb,".*", + {git,"git://github.com/basho/eleveldb.git", + "0e4e4e7cf3ddc26523a77f853ea9409c1707b26c"}}, + {riak_ensemble,".*", + {git,"git://github.com/basho/riak_ensemble", + "78dc8f623353a212ca3cf12236d1e9ac824bde16"}}, + {pbkdf2,".*", + {git,"git://github.com/basho/erlang-pbkdf2.git", + "7076584f5377e98600a7e2cb81980b2992fb2f71"}}, + {parse_trans,".*", + {git,"git://github.com/uwiger/parse_trans.git", + "82cc00264aa1bad8fc5c0739b7541feb4a843432"}}, + {bear,".*", + {git,"git://github.com/basho/bear.git", + "da820a13c607c3f816ee8b83c587266da5389761"}}, + {folsom,".*", + {git,"git://github.com/basho/folsom.git", + "72944523b6467c9f7add5f1c96dd5020424a2681"}}, + {setup,".*", + {git,"git://github.com/uwiger/setup.git", + "51ee7c9f64d2bbe9dcbb58c278e8fbfd4d0ca5e2"}}, + {exometer_core,".*", + {git,"git://github.com/basho/exometer_core.git", + "b47a5d65d9500c2b8f6ccc50e34005503589ef77"}}, + {clique,".*", + {git,"git://github.com/basho/clique.git", + "3af4db8ea0f74aca42f6713446dcd5915c795a74"}}, + {riak_core,".*", + {git,"git://github.com/basho/riak_core.git", + "044c4e7f8dbfe8c49c45f2f7090adff4cd5aba50"}}, + {riak_pipe,".*", + {git,"git://github.com/basho/riak_pipe.git", + "3c0abc7ba301d57940c5a9c5de368b70429c28ff"}}, + {protobuffs,".*", + {git,"git://github.com/basho/erlang_protobuffs.git", + "f88fc3c6881687432ddd5546b3c7b08009dfb26f"}}, + {riak_pb,".*", + {git,"git://github.com/basho/riak_pb.git", + "78c50efa698f33f7d6ab1c7f5fa4666ec03b46b4"}}, + {mochiweb,".*", + {git,"git://github.com/basho/mochiweb.git", + "ade2a9b29a11034eb550c1d79b4f991bf5ca05ba"}}, + {webmachine,".*", + {git,"git://github.com/basho/webmachine.git", + "7677c240f4a7ed020f4bab48278224966bb42311"}}, + {riak_api,".*", + {git,"git://github.com/basho/riak_api.git", + "2781e66796903bc6847bffcf71a6ba7a05d69275"}}, + {riak_dt,".*", + {git,"git://github.com/basho/riak_dt.git", + "f7981d4ad7407ddc085f133f204dd71bf9d50c56"}}, + {eunit_formatters,".*", + {git,"git://github.com/seancribbs/eunit_formatters", + "96b6ced4d45ba641cbf2c8a8ae9b350dd300bc10"}}, + {riak_kv,".*", + {git,"git://github.com/basho/riak_kv.git", + "404619cb57574cd43e2dc0dc0453884ec6732a99"}}, + {merge_index,".*", + {git,"git://github.com/basho/merge_index.git", + "b701dde5c28956c3b629411e5ff7e50cbb5cb4b3"}}, + {riak_search,".*", + {git,"git://github.com/basho/riak_search.git", + "8fe4a8c020a74c52ee877bf6dd410824b4f79f8b"}}, + {erlydtl,".*", + {git,"git://github.com/evanmiller/erlydtl.git", + "d20b53f04837a1053ed18987f645cb60eae82453"}}, + {riak_control,".*", + {git,"git://github.com/basho/riak_control.git", + "09073ce672260e1ec0ba3999fabed7f319624ba1"}}, + {riaknostic,".*", + {git,"git://github.com/basho/riaknostic.git", + "101d95bddff4b70afcd1dd5442b8c6651887e0a4"}}, + {kvc,".*", + {git,"git://github.com/etrepum/kvc.git", + "5565fe51857747662410cc3c06362ebcf48a2f04"}}, + {ibrowse,".*", + {git,"git://github.com/cmullaparthi/ibrowse.git", + "e8ae353c16d4f0897abb9f80025b52925b974dd1"}}, + {yokozuna,".*", + {git,"git://github.com/basho/yokozuna.git", + "5868266b11f131d14c85495e50f899f3fe8158ba"}}, + {canola,".*", + {git,"git://github.com/basho/canola.git", + "9bdfee88fce20b3a01b7003696b53eb21913d6fb"}}, + {riak_auth_mods,".*", + {git,"git://github.com/basho/riak_auth_mods.git", + "31b8b30e6c215418522eaa615264ae9769a87410"}}]}. +{plugins,[rebar_lock_deps_plugin]}. + diff --git a/samples/Erlang/filenames/rebar.lock b/samples/Erlang/filenames/rebar.lock new file mode 100644 index 00000000..1d3a3982 --- /dev/null +++ b/samples/Erlang/filenames/rebar.lock @@ -0,0 +1,16 @@ +[{<<"goldrush">>, + {git,"git://github.com/DeadZen/goldrush.git", + {ref,"71e63212f12c25827e0c1b4198d37d5d018a7fec"}}, + 1}, + {<<"riak_dt">>, + {git,"git://github.com/helium/riak_dt.git", + {ref,"15d66cb26c2028c1ad1271c359b1d5da213825c3"}}, + 0}, + {<<"lager">>, + {git,"git://github.com/basho/lager.git", + {ref,"d33ccf3b69de09a628fe38b4d7981bb8671b8a4f"}}, + 0}, + {<<"eleveldb">>, + {git,"git://github.com/helium/eleveldb.git", + {ref,"29a5360dc0365b3330dd0cd45b0b8166f3b854be"}}, + 0}]. diff --git a/samples/Erlang/lfe_scan.xrl b/samples/Erlang/lfe_scan.xrl new file mode 100644 index 00000000..72bb1b22 --- /dev/null +++ b/samples/Erlang/lfe_scan.xrl @@ -0,0 +1,256 @@ +%% Copyright (c) 2008-2013 Robert Virding +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +%% File : lfe_scan.xrl +%% Author : Robert Virding +%% Purpose : Token definitions for Lisp Flavoured Erlang. + +Definitions. +B = [01] +O = [0-7] +D = [0-9] +H = [0-9a-fA-F] +B36 = [0-9a-zA-Z] +U = [A-Z] +L = [a-z] +A = ({U}|{L}) +DEL = [][()}{";\000-\s] +SYM = [^][()}{";\000-\s\177-\237] +SSYM = [^][()}{"|;#`',\000-\s\177-\237] +WS = ([\000-\s]|;[^\n]*) + +Rules. +%% Bracketed Comments using #| foo |# +#{D}*\|[^\|]*\|+([^#\|][^\|]*\|+)*# : + block_comment(string:substr(TokenChars, 3)). + +%% Separators +' : {token,{'\'',TokenLine}}. +` : {token,{'`',TokenLine}}. +, : {token,{',',TokenLine}}. +,@ : {token,{',@',TokenLine}}. +\. : {token,{'.',TokenLine}}. +[][()}{] : {token,{list_to_atom(TokenChars),TokenLine}}. + +#{D}*[bB]\( : {token,{'#B(',TokenLine}}. +#{D}*[mM]\( : {token,{'#M(',TokenLine}}. +#{D}*\( : {token,{'#(',TokenLine}}. +#{D}*\. : {token,{'#.',TokenLine}}. + +#{D}*` : {token,{'#`',TokenLine}}. +#{D}*; : {token,{'#;',TokenLine}}. +#{D}*, : {token,{'#,',TokenLine}}. +#{D}*,@ : {token,{'#,@',TokenLine}}. + +%% Characters +#{D}*\\(x{H}+|.) : char_token(skip_past(TokenChars, $\\, $\\), TokenLine). + +%% Based numbers +#{D}*\*{SYM}+ : base_token(skip_past(TokenChars, $*, $*), 2, TokenLine). +#{D}*[bB]{SYM}+ : base_token(skip_past(TokenChars, $b, $B), 2, TokenLine). +#{D}*[oO]{SYM}+ : base_token(skip_past(TokenChars, $o, $O), 8, TokenLine). +#{D}*[dD]{SYM}+ : base_token(skip_past(TokenChars, $d, $D), 10, TokenLine). +#{D}*[xX]{SYM}+ : base_token(skip_past(TokenChars, $x, $X), 16, TokenLine). +#{D}*[rR]{SYM}+ : + %% Scan over digit chars to get base. + {Base,[_|Ds]} = base1(tl(TokenChars), 10, 0), + base_token(Ds, Base, TokenLine). + +%% String +"(\\x{H}+;|\\.|[^"\\])*" : + %% Strip quotes. + S = string:substr(TokenChars, 2, TokenLen - 2), + {token,{string,TokenLine,chars(S)}}. +%% Binary string +#"(\\x{H}+;|\\.|[^"\\])*" : + %% Strip quotes. + S = string:substr(TokenChars, 3, TokenLen - 3), + Bin = unicode:characters_to_binary(chars(S), utf8, utf8), + {token,{binary,TokenLine,Bin}}. +%% Symbols +\|(\\x{H}+;|\\.|[^|\\])*\| : + %% Strip quotes. + S = string:substr(TokenChars, 2, TokenLen - 2), + symbol_token(chars(S), TokenLine). +%% Funs +#'{SSYM}{SYM}*/{D}+ : + %% Strip sharpsign single-quote. + FunStr = string:substr(TokenChars,3), + {token,{'#\'',TokenLine,FunStr}}. +%% Atoms +[+-]?{D}+ : + case catch {ok,list_to_integer(TokenChars)} of + {ok,I} -> {token,{number,TokenLine,I}}; + _ -> {error,"illegal integer"} + end. +[+-]?{D}+\.{D}+([eE][+-]?{D}+)? : + case catch {ok,list_to_float(TokenChars)} of + {ok,F} -> {token,{number,TokenLine,F}}; + _ -> {error,"illegal float"} + end. +{SSYM}{SYM}* : + symbol_token(TokenChars, TokenLine). +{WS}+ : skip_token. + +Erlang code. +%% Copyright (c) 2008-2013 Robert Virding +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +%% File : lfe_scan.erl +%% Author : Robert Virding +%% Purpose : Token definitions for Lisp Flavoured Erlang. + +-export([start_symbol_char/1,symbol_char/1]). + +-import(string, [substr/2,substr/3]). + +%% start_symbol_char(Char) -> true | false. +%% symbol_char(Char) -> true | false. +%% Define start symbol chars and symbol chars. + +start_symbol_char($#) -> false; +start_symbol_char($`) -> false; +start_symbol_char($') -> false; %' +start_symbol_char($,) -> false; +start_symbol_char($|) -> false; %Symbol quote character +start_symbol_char(C) -> symbol_char(C). + +symbol_char($() -> false; +symbol_char($)) -> false; +symbol_char($[) -> false; +symbol_char($]) -> false; +symbol_char(${) -> false; +symbol_char($}) -> false; +symbol_char($") -> false; +symbol_char($;) -> false; +symbol_char(C) -> ((C > $\s) and (C =< $~)) orelse (C > $\240). + +%% symbol_token(Chars, Line) -> {token,{symbol,Line,Symbol}} | {error,E}. +%% Build a symbol from list of legal characters, else error. + +symbol_token(Cs, L) -> + case catch {ok,list_to_atom(Cs)} of + {ok,S} -> {token,{symbol,L,S}}; + _ -> {error,"illegal symbol"} + end. + +%% base_token(Chars, Base, Line) -> Integer. +%% Convert a string of Base characters into a number. We only allow +%% base betqeen 2 and 36, and an optional sign character first. + +base_token(_, B, _) when B < 2; B > 36 -> + {error,"illegal number base"}; +base_token([$+|Cs], B, L) -> base_token(Cs, B, +1, L); +base_token([$-|Cs], B, L) -> base_token(Cs, B, -1, L); +base_token(Cs, B, L) -> base_token(Cs, B, +1, L). + +base_token(Cs, B, S, L) -> + case base1(Cs, B, 0) of + {N,[]} -> {token,{number,L,S*N}}; + {_,_} -> {error,"illegal based number"} + end. + +base1([C|Cs], Base, SoFar) when C >= $0, C =< $9, C < Base + $0 -> + Next = SoFar * Base + (C - $0), + base1(Cs, Base, Next); +base1([C|Cs], Base, SoFar) when C >= $a, C =< $z, C < Base + $a - 10 -> + Next = SoFar * Base + (C - $a + 10), + base1(Cs, Base, Next); +base1([C|Cs], Base, SoFar) when C >= $A, C =< $Z, C < Base + $A - 10 -> + Next = SoFar * Base + (C - $A + 10), + base1(Cs, Base, Next); +base1([C|Cs], _Base, SoFar) -> {SoFar,[C|Cs]}; +base1([], _Base, N) -> {N,[]}. + +-define(IS_UNICODE(C), ((C >= 0) and (C =< 16#10FFFF))). + +%% char_token(InputChars, Line) -> {token,{number,L,N}} | {error,E}. +%% Convert an input string into the corresponding character. For a +%% sequence of hex characters we check resultant is code is in the +%% unicode range. + +char_token([$x,C|Cs], L) -> + case base1([C|Cs], 16, 0) of + {N,[]} when ?IS_UNICODE(N) -> {token,{number,L,N}}; + _ -> {error,"illegal character"} + end; +char_token([C], L) -> {token,{number,L,C}}. + +%% chars(InputChars) -> Chars. +%% Convert an input string into the corresponding string characters. +%% We know that the input string is correct. + +chars([$\\,$x,C|Cs0]) -> + case hex_char(C) of + true -> + case base1([C|Cs0], 16, 0) of + {N,[$;|Cs1]} -> [N|chars(Cs1)]; + _Other -> [escape_char($x)|chars([C|Cs0])] + end; + false -> [escape_char($x)|chars([C|Cs0])] + end; +chars([$\\,C|Cs]) -> [escape_char(C)|chars(Cs)]; +chars([C|Cs]) -> [C|chars(Cs)]; +chars([]) -> []. + +hex_char(C) when C >= $0, C =< $9 -> true; +hex_char(C) when C >= $a, C =< $f -> true; +hex_char(C) when C >= $A, C =< $F -> true; +hex_char(_) -> false. + +escape_char($b) -> $\b; %\b = BS +escape_char($t) -> $\t; %\t = TAB +escape_char($n) -> $\n; %\n = LF +escape_char($v) -> $\v; %\v = VT +escape_char($f) -> $\f; %\f = FF +escape_char($r) -> $\r; %\r = CR +escape_char($e) -> $\e; %\e = ESC +escape_char($s) -> $\s; %\s = SPC +escape_char($d) -> $\d; %\d = DEL +escape_char(C) -> C. + +%% Block Comment: +%% Provide a sensible error when people attempt to include nested +%% comments because currently the parser cannot process them without +%% a rebuild. But simply exploding on a '#|' is not going to be that +%% helpful. + +block_comment(TokenChars) -> + %% Check we're not opening another comment block. + case string:str(TokenChars, "#|") of + 0 -> skip_token; %% No nesting found + _ -> {error, "illegal nested block comment"} + end. + +%% skip_until(String, Char1, Char2) -> String. +%% skip_past(String, Char1, Char2) -> String. + +%% skip_until([C|_]=Cs, C1, C2) when C =:= C1 ; C =:= C2 -> Cs; +%% skip_until([_|Cs], C1, C2) -> skip_until(Cs, C1, C2); +%% skip_until([], _, _) -> []. + +skip_past([C|Cs], C1, C2) when C =:= C1 ; C =:= C2 -> Cs; +skip_past([_|Cs], C1, C2) -> skip_past(Cs, C1, C2); +skip_past([], _, _) -> []. diff --git a/samples/Erlang/release.script! b/samples/Erlang/release similarity index 100% rename from samples/Erlang/release.script! rename to samples/Erlang/release diff --git a/samples/FLUX/gameserver.fx b/samples/FLUX/gameserver.fx new file mode 100644 index 00000000..9c40d5f1 --- /dev/null +++ b/samples/FLUX/gameserver.fx @@ -0,0 +1,54 @@ +typedef engine isEngineMessage; +typedef turn isTurnMessage; +typedef connect isConnectMessage; +typedef disconnect isDisconnectMessage; + +ClientMessage(char* data) => (); +ParseMessage(char* data) => (int type, int client, char* data); +ReadMessage(int type, int client, char* data) => (); + +ParseEngine(int type, int client, char* data) => (int client, int direction); +DoEngine(int client, int direction) => (); + +ParseTurn(int type, int client, char* data) => (int client, int direction); +DoTurn(int client, int direction) => (); + +ParseConnect(int type, int client, char* data) + => (int client, char* host, int port); +DoConnect(int client, char* host, int port) => (); + +ParseDisconnect(int type, int client, char* data) => (int client); +DoDisconnect(int client) => (); + +UpdateBoard(ClientList clients) => (ClientList clients); +SendData(ClientList clients) => (); + +DoUpdate(ClientList clients) => (); + +DataTimer() => (ClientList clients); + +GetClients() => (ClientList clients); + +Wait(ClientList clients) => (ClientList clients); + +Listen () => (char* data); + +source Listen => ClientMessage; +source DataTimer => DoUpdate; + +DataTimer = GetClients -> Wait; + +DoUpdate = UpdateBoard -> SendData; + +ClientMessage=ParseMessage -> ReadMessage; + +ReadMessage:[engine, _, _] = ParseEngine -> DoEngine; +ReadMessage:[turn, _, _] = ParseTurn -> DoTurn; +ReadMessage:[connect, _, _] = ParseConnect -> DoConnect; +ReadMessage:[disconnect, _, _] = ParseDisconnect -> DoDisconnect; + +atomic GetClients:{client_lock}; +atomic DoConnect:{client_lock}; +atomic DoDisconnect:{client_lock}; + + diff --git a/samples/FLUX/imageserver.fx b/samples/FLUX/imageserver.fx new file mode 100644 index 00000000..effbfaed --- /dev/null +++ b/samples/FLUX/imageserver.fx @@ -0,0 +1,44 @@ +typedef xml TestXML; +typedef html TestHTML; + +typedef inCache TestInCache; + +Page (int socket) => (); + +ReadRequest (int socket) => (int socket, bool close, image_tag *request); + +CheckCache (int socket, bool close, image_tag *request) + => (int socket, bool close, image_tag *request); + +Handler (int socket, bool close, image_tag *request) + => (int socket, bool close, image_tag *request); + +Complete (int socket, bool close, image_tag *request) => (); + +ReadInFromDisk (int socket, bool close, image_tag *request) + => (int socket, bool close, image_tag *request, __u8 *rgb_data); + +Write (int socket, bool close, image_tag *request) + => (int socket, bool close, image_tag *request); + +Compress(int socket, bool close, image_tag *request, __u8 *rgb_data) + => (int socket, bool close, image_tag *request); + +StoreInCache(int socket, bool close, image_tag *request) + => (int socket, bool close, image_tag *request); + +Listen () + => (int socket); + +source Listen => Page; + +Handler:[_, _, inCache]=; +Handler:[_, _, _]=ReadInFromDisk -> Compress -> StoreInCache; + +Page = ReadRequest -> CheckCache-> Handler -> Write -> Complete; + +atomic CheckCache:{cache}; +atomic StoreInCache:{cache}; +atomic Complete:{cache}; + +handle error ReadInFromDisk => FourOhFor; diff --git a/samples/FLUX/mbittorrent.fx b/samples/FLUX/mbittorrent.fx new file mode 100644 index 00000000..620bcd54 --- /dev/null +++ b/samples/FLUX/mbittorrent.fx @@ -0,0 +1,151 @@ +typedef choke TestChoke; +typedef unchoke TestUnchoke; +typedef interested TestInterested; +typedef uninterested TestUninterested; +typedef request TestRequest; +typedef cancel TestCancel; +typedef piece TestPiece; +typedef bitfield TestBitfield; +typedef have TestHave; +typedef piececomplete TestPieceComplete; + +CheckinWithTracker (torrent_data_t *tdata) + => (); + +SendRequestToTracker (torrent_data_t *tdata) + => (torrent_data_t *tdata, int socket); + +GetTrackerResponse (torrent_data_t *tdata, int socket) + => (); + +UpdateChokeList (torrent_data_t *tdata) + => (); + +PickChoked (torrent_data_t *tdata) + => (torrent_data_t *tdata, chokelist_t clist); + +SendChokeUnchoke (torrent_data_t *tdata, chokelist_t clist) + => (); + +SetupConnection (torrent_data_t *tdata, int socket) + => (); + +Handshake (torrent_data_t *tdata, int socket) + => (torrent_data_t *tdata, client_data_t *client); + +SendBitfield (torrent_data_t *tdata, client_data_t *client) + => (); + +Message (torrent_data_t *tdata, client_data_t *client) + => (); + +ReadMessage (torrent_data_t *tdata, client_data_t *client) + => (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload); + +HandleMessage (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (client_data_t *client); + +MessageDone (client_data_t *client) + => (); + +CompletePiece (torrent_data_t *tdata, client_data_t *client, int piece) + => (torrent_data_t *tdata, client_data_t *client); + +VerifyPiece (torrent_data_t *tdata, client_data_t *client, int piece) + => (torrent_data_t *tdata, client_data_t *client, int piece); + +SendHave (torrent_data_t *tdata, client_data_t *client, int piece) + => (torrent_data_t *tdata, client_data_t *client); + +SendUninterested (torrent_data_t *tdata, client_data_t *client) + => (torrent_data_t *tdata, client_data_t *client); + +Choke (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (client_data_t *client); + +Cancel (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (client_data_t *client); + +Interested (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (client_data_t *client); + +Uninterested (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (client_data_t *client); + +Bitfield (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (client_data_t *client); + +Unchoke (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (torrent_data_t *tdata, client_data_t *client); + +SendRequest (torrent_data_t *tdata, client_data_t *client) + => (client_data_t *client); + +Have (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (torrent_data_t *tdata, client_data_t *client); + +Piece (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (torrent_data_t *tdata, client_data_t *client, int piece); + +Request (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload) + => (client_data_t *client); + +SendKeepAlives (torrent_data_t *tdata) + => (); + +GetClients () + => (int maxfd, fd_set *fds); + +SelectSockets (int maxfd, fd_set *fds) + => (fd_set *fds); + +CheckSockets (fd_set *fds) + => (torrent_data_t *tdata, client_data_t *client); + +TrackerTimer () + => (torrent_data_t *tdata); + +ChokeTimer () + => (torrent_data_t *tdata); + +Connect () + => (torrent_data_t *tdata, int socket); + +KeepAliveTimer () + => (torrent_data_t *tdata); + +Listen () + => (torrent_data_t *tdata, client_data_t *client); + +source TrackerTimer => CheckinWithTracker; +source ChokeTimer => UpdateChokeList; +source Connect => SetupConnection; +source Listen => Message; +source KeepAliveTimer => SendKeepAlives; + +Listen = GetClients -> SelectSockets -> CheckSockets; +CheckinWithTracker = SendRequestToTracker -> GetTrackerResponse; +UpdateChokeList = PickChoked -> SendChokeUnchoke; +SetupConnection = Handshake -> SendBitfield; +Message = ReadMessage -> HandleMessage -> MessageDone; + +CompletePiece:[_, _, piececomplete] = VerifyPiece -> SendHave -> SendUninterested; + +HandleMessage:[_, _, choke, _, _] = Choke; +HandleMessage:[_, _, unchoke, _, _] = Unchoke -> SendRequest; +HandleMessage:[_, _, interested, _, _] = Interested; + +HandleMessage:[_, _, uninterested, _, _] = Uninterested; +HandleMessage:[_, _, request, _, _] = Request; +HandleMessage:[_, _, cancel, _, _] = Cancel; +HandleMessage:[_, _, piece, _, _] = Piece -> CompletePiece -> SendRequest; +HandleMessage:[_, _, bitfield, _, _] = Bitfield; +HandleMessage:[_, _, have, _, _] = Have -> SendRequest; + +atomic GetClients:{BigLock}; +atomic CheckSockets:{BigLock}; +atomic Message:{BigLock}; +atomic CheckinWithTracker:{BigLock}; +atomic UpdateChokeList:{BigLock}; +atomic SetupConnection:{BigLock}; +atomic SendKeepAlives:{BigLock}; diff --git a/samples/FLUX/test.fx b/samples/FLUX/test.fx new file mode 100644 index 00000000..bb81fa9a --- /dev/null +++ b/samples/FLUX/test.fx @@ -0,0 +1,38 @@ +// concrete node signatures +Listen () + => (int socket); + +ReadRequest (int socket) + => (int socket, bool close, image_tag *request); + +CheckCache (int socket, bool close, image_tag *request) + => (int socket, bool close, image_tag *request); + +// omitted for space: +// ReadInFromDisk, StoreInCache +Compress (int socket, bool close, image_tag *request, __u8 *rgb_data) + => (int socket, bool close, image_tag *request); +Write (int socket, bool close, image_tag *request) + => (int socket, bool close, image_tag *request); +Complete (int socket, bool close, image_tag *request) => (); + +// source node +source Listen => Image; + +// abstract node +Image = ReadRequest -> CheckCache -> Handler -> Write -> Complete; + +// predicate type & dispatch +typedef hit TestInCache; +Handler:[_, _, hit] = ; +Handler:[_, _, _] = +ReadInFromDisk -> Compress -> StoreInCache; + +// error handler +handle error ReadInFromDisk => FourOhFor; + +// atomicity constraints +atomic CheckCache:{cache}; +atomic StoreInCache:{cache}; +atomic Complete:{cache}; + diff --git a/samples/Filterscript/colormatrix.fs b/samples/Filterscript/colormatrix.fs new file mode 100644 index 00000000..86fb2482 --- /dev/null +++ b/samples/Filterscript/colormatrix.fs @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ip.rsh" + +static rs_matrix4x4 Mat; + +void init() { + rsMatrixLoadIdentity(&Mat); +} + +void setMatrix(rs_matrix4x4 m) { + Mat = m; +} + +uchar4 __attribute__((kernel)) root(uchar4 in) { + float4 f = convert_float4(in); + f = rsMatrixMultiply(&Mat, f); + f = clamp(f, 0.f, 255.f); + return convert_uchar4(f); +} + diff --git a/samples/Filterscript/fs_kernel.fs b/samples/Filterscript/fs_kernel.fs new file mode 100644 index 00000000..d8f0c4d6 --- /dev/null +++ b/samples/Filterscript/fs_kernel.fs @@ -0,0 +1,18 @@ +#pragma version(1) +#pragma rs java_package_name(foo) + +int __attribute__((kernel)) root(uint32_t ain) { + return 0; +} + +void __attribute__((kernel)) in_only(uint32_t ain) { +} + +int __attribute__((kernel)) out_only() { + return 0; +} + +int __attribute__((kernel)) everything(uint32_t ain, uint32_t x, uint32_t y) { + return 0; +} + diff --git a/samples/Formatted/NiAlH_jea.eam.fs b/samples/Formatted/NiAlH_jea.eam.fs new file mode 100644 index 00000000..cad5fcdb --- /dev/null +++ b/samples/Formatted/NiAlH_jea.eam.fs @@ -0,0 +1,3608 @@ +see James E Angelo, Neville R Moody, Michael I Baskes +"Trapping of hydrogen to lattice defects in nickel", Modelling and +Simulation in Materials Science & Engineering, vol. 3, pp. 289-307 (1995) + 3 Ni Al H + 1000 0.1300722995578975E-01 1000 0.5678391959798995E-02 0.5650000000000000E+01 + 28 58.710 3.5200 fcc + 0.0000000000000000E+00 -0.1332662793615358E+00 -0.1452921454581837E+00 -0.1523531912368142E+00 -0.1581862523552362E+00 + -0.1639082041116888E+00 -0.1699426545382059E+00 -0.1764570476376752E+00 -0.1835109199136706E+00 -0.1911112227682255E+00 + -0.1992425242400153E+00 -0.2078735593152208E+00 -0.2169708161705926E+00 -0.2264981576262208E+00 -0.2364198685383210E+00 + -0.2467010212354559E+00 -0.2573089641630046E+00 -0.2682127177172648E+00 -0.2793832876249742E+00 -0.2907936148383499E+00 + -0.3024184814336230E+00 -0.3142343948579320E+00 -0.3262194641112117E+00 -0.3383532759151806E+00 -0.3506164751688710E+00 + -0.3629930849818281E+00 -0.3754632992578539E+00 -0.3880132539605681E+00 -0.4006282340364624E+00 -0.4132944249954278E+00 + -0.4259988342802910E+00 -0.4387292219786865E+00 -0.4514740394367802E+00 -0.4642223746432430E+00 -0.4769639034723383E+00 + -0.4896888460377404E+00 -0.5023882063058194E+00 -0.5150514008208491E+00 -0.5276733170954859E+00 -0.5402439685620584E+00 + -0.5527559057851690E+00 -0.5652019937956556E+00 -0.5775754037468577E+00 -0.5898697374354533E+00 -0.6020783706550734E+00 + -0.6141958187973504E+00 -0.6262163111449786E+00 -0.6381344390125845E+00 -0.6499424015305308E+00 -0.6616382540753616E+00 + -0.6731993263249691E+00 -0.6845796030423443E+00 -0.6957060801011892E+00 -0.7064948085245568E+00 -0.7168695757140675E+00 + -0.7267732527299753E+00 -0.7361710465584164E+00 -0.7450484575868490E+00 -0.7534069422321110E+00 -0.7612592416825148E+00 + -0.7686253227224800E+00 -0.7755292274454266E+00 -0.7819968032841373E+00 -0.7880540868431538E+00 -0.7937266203490037E+00 + -0.7990383766649565E+00 -0.8040117767243267E+00 -0.8086674652146524E+00 -0.8130242928279436E+00 -0.8170993717012625E+00 + -0.8209081734003210E+00 -0.8244646490459413E+00 -0.8277813583284139E+00 -0.8308695990447905E+00 -0.8337395320876144E+00 + -0.8364002989992798E+00 -0.8388601306360481E+00 -0.8411264464017005E+00 -0.8432059440847066E+00 -0.8451046806746021E+00 + -0.8468281447278194E+00 -0.8483813209452364E+00 -0.8497687476559737E+00 -0.8509945678935900E+00 -0.8520625747193371E+00 + -0.8529762514032520E+00 -0.8537388100896948E+00 -0.8543532100632678E+00 -0.8548222073722460E+00 -0.8551483635456201E+00 + -0.8553340719766496E+00 -0.8553815772750362E+00 -0.8552929923971586E+00 -0.8550703138095166E+00 -0.8547151651374190E+00 + -0.8542288599579191E+00 -0.8536141001159478E+00 -0.8528770375410186E+00 -0.8520101609408499E+00 -0.8510194840111716E+00 + -0.8499064644469634E+00 -0.8486725211340236E+00 -0.8473190381844873E+00 -0.8458473685456269E+00 -0.8442588372306652E+00 + -0.8425547442066161E+00 -0.8407363669700096E+00 -0.8388049628370240E+00 -0.8367617709719433E+00 -0.8346080141771175E+00 + -0.8323449004663495E+00 -0.8299736244409459E+00 -0.8274953684882504E+00 -0.8249113038193059E+00 -0.8222225913624328E+00 + -0.8194312028270083E+00 -0.8165381656110142E+00 -0.8135381986589678E+00 -0.8104430318985472E+00 -0.8072486480744487E+00 + -0.8039562298106482E+00 -0.8005669360809051E+00 -0.7970819051712361E+00 -0.7935022573432313E+00 -0.7898290971921718E+00 + -0.7860635135890277E+00 -0.7822065375250205E+00 -0.7782588382932190E+00 -0.7742197532367605E+00 -0.7700870580234671E+00 + -0.7658477859557991E+00 -0.7614923740747592E+00 -0.7569976237158578E+00 -0.7523403043259940E+00 -0.7474924540260339E+00 + -0.7424262490644793E+00 -0.7371152605107092E+00 -0.7315359786377336E+00 -0.7256688371398212E+00 -0.7194997208059100E+00 + -0.7130147649374017E+00 -0.7062107830858579E+00 -0.6990840527339586E+00 -0.6916355099263285E+00 -0.6838688833277935E+00 + -0.6757902321840703E+00 -0.6674074545321318E+00 -0.6587298477273151E+00 -0.6497677278712075E+00 -0.6405321085533657E+00 + -0.6310344355558080E+00 -0.6212863721358168E+00 -0.6112922466782784E+00 -0.6010783652240157E+00 -0.5906465248553197E+00 + -0.5800085678384548E+00 -0.5691757383537599E+00 -0.5581582564186043E+00 -0.5469659281367214E+00 -0.5356081318998811E+00 + -0.5240938131155666E+00 -0.5124314854938561E+00 -0.5006292372993926E+00 -0.4886947412876452E+00 -0.4766352673015746E+00 + -0.4644576967166927E+00 -0.4521685380961173E+00 -0.4397739435565100E+00 -0.4272797254586216E+00 -0.4146913731272406E+00 + -0.4020140693777172E+00 -0.3892527066834290E+00 -0.3764119028647137E+00 -0.3634960162151266E+00 -0.3505091600038455E+00 + -0.3374552163098947E+00 -0.3243378491869073E+00 -0.3111605171690215E+00 -0.2979264851148429E+00 -0.2846388353950218E+00 + -0.2713004784405015E+00 -0.2579141626735364E+00 -0.2444824838465252E+00 -0.2310078938154909E+00 -0.2174927087734169E+00 + -0.2039391169721405E+00 -0.1903491859578246E+00 -0.1767248693464794E+00 -0.1630680131652866E+00 -0.1493803617833507E+00 + -0.1356635634555516E+00 -0.1219191755016809E+00 -0.1081486691423308E+00 -0.9435343401120377E-01 -0.8054492422289172E-01 + -0.6670414857713070E-01 -0.5284236389642416E-01 -0.3896067277847237E-01 -0.2506137114673379E-01 -0.1114505736346416E-01 + 0.2787869992531000E-02 0.1673649714292225E-01 0.3069995798121283E-01 0.4467743152122949E-01 0.5866813997114662E-01 + 0.7267134735307934E-01 0.8668635275736136E-01 0.1007124932111410E+00 0.1147491401988674E+00 0.1287956978815430E+00 + 0.1428516014164529E+00 0.1569163153723068E+00 0.1709893322335105E+00 0.1850701709882827E+00 0.1991583757947666E+00 + 0.2132535147217212E+00 0.2273551785580352E+00 0.2414629796876397E+00 0.2555765510256194E+00 0.2696955450121337E+00 + 0.2838196326609008E+00 0.2979485026581798E+00 0.3120818605100766E+00 0.3262194277345074E+00 0.3403609410961295E+00 + 0.3545061518803436E+00 0.3686548252055175E+00 0.3828067393706931E+00 0.3969616852363487E+00 0.4111194656371424E+00 + 0.4252798948247261E+00 0.4394427979383266E+00 0.4536080105023714E+00 0.4677753779491880E+00 0.4819447551653937E+00 + 0.4961160060612713E+00 0.5102890031615175E+00 0.5244636272329899E+00 0.5386397670398893E+00 0.5528173195811590E+00 + 0.5669961916288884E+00 0.5811763038337503E+00 0.5953575986744184E+00 0.6095400529056221E+00 0.6237236940889446E+00 + 0.6379086197162707E+00 0.6520950167319981E+00 0.6662831791056405E+00 0.6804735214359070E+00 0.6946665872026117E+00 + 0.7088630510277696E+00 0.7230637149920511E+00 0.7372694995930971E+00 0.7514814302896511E+00 0.7657006207512822E+00 + 0.7799282539728765E+00 0.7941655623409360E+00 0.8084138075998624E+00 0.8226742614970703E+00 0.8369481877037046E+00 + 0.8512368254336948E+00 0.8655413750282932E+00 0.8798629856427098E+00 0.8942027450633461E+00 0.9085616716017455E+00 + 0.9229407079527192E+00 0.9373407168612360E+00 0.9517624784199370E+00 0.9662066888041991E+00 0.9806739602523891E+00 + 0.9951648221004206E+00 0.1009679722693299E+01 0.1024219032006336E+01 0.1038783044826459E+01 0.1053371984359273E+01 + 0.1067986006143130E+01 0.1082625202169261E+01 0.1097289605119975E+01 0.1111979192652043E+01 0.1126693891663521E+01 + 0.1141433582496241E+01 0.1156198103032580E+01 0.1170987252656857E+01 0.1185800796057570E+01 0.1200638466853661E+01 + 0.1215499971032784E+01 0.1230384990195972E+01 0.1245293184603845E+01 0.1260224196025355E+01 0.1275177650390923E+01 + 0.1290153160254313E+01 0.1305150327069121E+01 0.1320168743286779E+01 0.1335207994283188E+01 0.1350267660123350E+01 + 0.1365347317171768E+01 0.1380446539557269E+01 0.1395564900502009E+01 0.1410701973522016E+01 0.1425857333509093E+01 + 0.1441030557701353E+01 0.1456221226550525E+01 0.1471428924494518E+01 0.1486653240641253E+01 0.1501893769371186E+01 + 0.1517150110865678E+01 0.1532421871566029E+01 0.1547708664570152E+01 0.1563010109971501E+01 0.1578325835145321E+01 + 0.1593655474987493E+01 0.1608998672109891E+01 0.1624371180506387E+01 0.1639740502114151E+01 0.1655122356345302E+01 + 0.1670516417892671E+01 0.1685922369619611E+01 0.1701339902568634E+01 0.1716768715949499E+01 0.1732208517108212E+01 + 0.1747659021479414E+01 0.1763119952524256E+01 0.1778591041654877E+01 0.1794072028147745E+01 0.1809562659046684E+01 + 0.1825062689057695E+01 0.1840571880435753E+01 0.1856090002865933E+01 0.1871616833338670E+01 0.1887152156020591E+01 + 0.1902695762121880E+01 0.1918247449760493E+01 0.1933807023824201E+01 0.1949374295830467E+01 0.1964949083785456E+01 + 0.1980531212042564E+01 0.1996120511159695E+01 0.2011716817757780E+01 0.2027319974378536E+01 0.2042929829344224E+01 + 0.2058546236616969E+01 0.2074169055660697E+01 0.2089798151303690E+01 0.2105433393602993E+01 0.2121074657710956E+01 + 0.2136721823742874E+01 0.2152374776647946E+01 0.2168033406081115E+01 0.2183697606278244E+01 0.2199367275932566E+01 + 0.2215042318074360E+01 0.2230722639952553E+01 0.2246408152918789E+01 0.2262098772314182E+01 0.2277794417357875E+01 + 0.2293495011038814E+01 0.2309200480010006E+01 0.2324910754483760E+01 0.2340625768131687E+01 0.2356345457985135E+01 + 0.2372069764338704E+01 0.2387798630656611E+01 0.2403532003480336E+01 0.2419269832339658E+01 0.2435012069665014E+01 + 0.2450758670702946E+01 0.2466509593432718E+01 0.2482264798486547E+01 0.2498024249070006E+01 0.2513787910886542E+01 + 0.2529555752062322E+01 0.2545327743074537E+01 0.2561103856680077E+01 0.2576884067847857E+01 0.2592668353691494E+01 + 0.2608456693404804E+01 0.2624249068198495E+01 0.2640045461239012E+01 0.2655845857588801E+01 0.2671650244148466E+01 + 0.2687458609600455E+01 0.2703270944353804E+01 0.2719087240491504E+01 0.2734907491718758E+01 0.2750731693312261E+01 + 0.2766559842071786E+01 0.2782391936272532E+01 0.2798227975619128E+01 0.2814067961200806E+01 0.2829911895447779E+01 + 0.2845759782089161E+01 0.2861611626111980E+01 0.2877467433721947E+01 0.2893327212308449E+01 0.2909190970421690E+01 + 0.2925058717783131E+01 0.2940930465370343E+01 0.2956806225646105E+01 0.2972686013021615E+01 0.2988569844663630E+01 + 0.3004457741744432E+01 0.3020349731207816E+01 0.3036245848084562E+01 0.3052146138327856E+01 0.3068050662093938E+01 + 0.3083959497337403E+01 0.3099872743561932E+01 0.3115790525549542E+01 0.3131712996890727E+01 0.3147640343150343E+01 + 0.3163572784533585E+01 0.3179510577942580E+01 0.3195454018354155E+01 0.3211403439482311E+01 0.3227359213718501E+01 + 0.3243321751378190E+01 0.3259291499296893E+01 0.3275268938843027E+01 0.3291254583421065E+01 0.3307248975552397E+01 + 0.3323252683617341E+01 0.3339266298346260E+01 0.3355290429139160E+01 0.3371325700295216E+01 0.3387372747215409E+01 + 0.3403432212646379E+01 0.3419504743012368E+01 0.3435590984884243E+01 0.3451691581620338E+01 0.3467807170206726E+01 + 0.3483938378319635E+01 0.3500085821623841E+01 0.3516250101317652E+01 0.3532431801926151E+01 0.3548631489345226E+01 + 0.3564849709131778E+01 0.3581086985033565E+01 0.3597344652416893E+01 0.3613622490530517E+01 0.3629920843003930E+01 + 0.3646240132058665E+01 0.3662580753832387E+01 0.3678943078161282E+01 0.3695327448517830E+01 0.3711734182088804E+01 + 0.3728163569978022E+01 0.3744615877522165E+01 0.3761091344705235E+01 0.3777590186658585E+01 0.3794112594236921E+01 + 0.3810658734656357E+01 0.3827228752187168E+01 0.3843822768889325E+01 0.3860440885384449E+01 0.3877083181654072E+01 + 0.3893749717858398E+01 0.3910440535169144E+01 0.3927155656609344E+01 0.3943895087897474E+01 0.3960658818286859E+01 + 0.3977446821402751E+01 0.3994259056066866E+01 0.4011095467111076E+01 0.4027955986175584E+01 0.4044840532489744E+01 + 0.4061749013633730E+01 0.4078681326279053E+01 0.4095637356908441E+01 0.4112616982511369E+01 0.4129620071256468E+01 + 0.4146646483140302E+01 0.4163696070611252E+01 0.4180768679168807E+01 0.4197864147938219E+01 0.4214982310220819E+01 + 0.4232122994020187E+01 0.4249286022544283E+01 0.4266471214683492E+01 0.4283678385466899E+01 0.4300907346494270E+01 + 0.4318157906348262E+01 0.4335429870982637E+01 0.4352723044092500E+01 0.4370037227462390E+01 0.4387372221295607E+01 + 0.4404727824526063E+01 0.4422103835109979E+01 0.4439500050301689E+01 0.4456916266912927E+01 0.4474352281555639E+01 + 0.4491807890868955E+01 0.4509282891733321E+01 0.4526777081468666E+01 0.4544290258021121E+01 0.4561822220135298E+01 + 0.4579372767515736E+01 0.4596941700976757E+01 0.4614528822579842E+01 0.4632133935763207E+01 0.4649756845459109E+01 + 0.4667397358203146E+01 0.4685055282234032E+01 0.4702730427585877E+01 0.4720422606171269E+01 0.4738131631857456E+01 + 0.4755857320535952E+01 0.4773599490184296E+01 0.4791357960922696E+01 0.4809132555063428E+01 0.4826923097156268E+01 + 0.4844729414026645E+01 0.4862551334810888E+01 0.4880388690984844E+01 0.4898241316389871E+01 0.4916109047253045E+01 + 0.4933991722205747E+01 0.4951889182295560E+01 0.4969801270997834E+01 0.4987727834222142E+01 0.5005668720316748E+01 + 0.5023623780069656E+01 0.5041592866707418E+01 0.5059575835892119E+01 0.5077572545715171E+01 0.5095582856689347E+01 + 0.5113606631739316E+01 0.5131643736190284E+01 0.5149694037754543E+01 0.5167757406516841E+01 0.5185833714918900E+01 + 0.5203922837741345E+01 0.5222024652085636E+01 0.5240139037355135E+01 0.5258265875233761E+01 0.5276405049664660E+01 + 0.5294556446828821E+01 0.5312719955121622E+01 0.5330895465129331E+01 0.5349083197331439E+01 0.5367282875848076E+01 + 0.5385494235244209E+01 0.5403717174591350E+01 0.5421951595034059E+01 0.5440197399763505E+01 0.5458454493990288E+01 + 0.5476722784918579E+01 0.5495002181717851E+01 0.5513292595496480E+01 0.5531593939274245E+01 0.5549906127955438E+01 + 0.5568229078301286E+01 0.5586562708902733E+01 0.5604906940153441E+01 0.5623261694222876E+01 0.5641626895028466E+01 + 0.5660002468209782E+01 0.5678388341101183E+01 0.5696784442705152E+01 0.5715190703666806E+01 0.5733607056245972E+01 + 0.5752033434292926E+01 0.5770469773221294E+01 0.5788916009983083E+01 0.5807372083043617E+01 0.5825837932355000E+01 + 0.5844313499333083E+01 0.5862798726831699E+01 0.5881293559118404E+01 0.5899797941851205E+01 0.5918311822053070E+01 + 0.5936835148090665E+01 0.5955367869649308E+01 0.5973909937710687E+01 0.5992461304530181E+01 0.6010993710199870E+01 + 0.6029563495483089E+01 0.6048142443794930E+01 0.6066730512264272E+01 0.6085327659184557E+01 0.6103933843993559E+01 + 0.6122549027251964E+01 0.6141173170624000E+01 0.6159806236856411E+01 0.6178448189759933E+01 0.6197098994189034E+01 + 0.6215758616023336E+01 0.6234427022148239E+01 0.6253104180437035E+01 0.6271790059732240E+01 0.6290484629827574E+01 + 0.6309187861451164E+01 0.6327899726246912E+01 0.6346620196758565E+01 0.6365349246411810E+01 0.6384086849498459E+01 + 0.6402832981160216E+01 0.6421587617372310E+01 0.6440350734927804E+01 0.6459122311422306E+01 0.6477902325238560E+01 + 0.6496690755531631E+01 0.6515487582214305E+01 0.6534292785942100E+01 0.6553106348100002E+01 0.6571928250787252E+01 + 0.6590758476804609E+01 0.6609597009640567E+01 0.6628443833458164E+01 0.6647298933081430E+01 0.6666162293983589E+01 + 0.6685033902273446E+01 0.6703913744683604E+01 0.6722801808558643E+01 0.6741698081842145E+01 0.6760602553065809E+01 + 0.6779515211338037E+01 0.6798436046331943E+01 0.6817365048274937E+01 0.6836302207937280E+01 0.6855247516621816E+01 + 0.6874200966153282E+01 0.6893162548867991E+01 0.6912132257603389E+01 0.6931110085688530E+01 0.6950096026934304E+01 + 0.6969090075623598E+01 0.6988092226501735E+01 0.7007102474767507E+01 0.7026120816064235E+01 0.7045147246470421E+01 + 0.7064181762491003E+01 0.7083224361049062E+01 0.7102275039477362E+01 0.7121333795510111E+01 0.7140400627274076E+01 + 0.7159475533281437E+01 0.7178558512421901E+01 0.7197649563954585E+01 0.7216748687500626E+01 0.7235855883035654E+01 + 0.7254971150883136E+01 0.7274094491705881E+01 0.7293225906500751E+01 0.7312365396590522E+01 0.7331512963616746E+01 + 0.7350668609535120E+01 0.7369832336606407E+01 0.7389004147392185E+01 0.7408184044746747E+01 0.7427372031812411E+01 + 0.7446568112012670E+01 0.7465772289046285E+01 0.7484984566881565E+01 0.7504204949750658E+01 0.7523433442143897E+01 + 0.7542670048804212E+01 0.7561914774721672E+01 0.7581167625127947E+01 0.7600428605492169E+01 0.7619697721514100E+01 + 0.7638974979120491E+01 0.7658260384459254E+01 0.7677553943895177E+01 0.7696855664005213E+01 0.7716165551573454E+01 + 0.7735483613586325E+01 0.7754812044852841E+01 0.7774146430634772E+01 0.7793489013893222E+01 0.7812839802364948E+01 + 0.7832198803967884E+01 0.7851566026796888E+01 0.7870941479120802E+01 0.7890325169377391E+01 0.7909717106169680E+01 + 0.7929117298262355E+01 0.7948525754578284E+01 0.7967942484194026E+01 0.7987367496337072E+01 0.8006800800381754E+01 + 0.8026242405846276E+01 0.8045692322388845E+01 0.8065150559804493E+01 0.8084617128021762E+01 0.8104092037099576E+01 + 0.8123575297224079E+01 0.8143066918705415E+01 0.8162566911974665E+01 0.8182075287581299E+01 0.8201592056189469E+01 + 0.8221117228575778E+01 0.8240650815626054E+01 0.8260192828332890E+01 0.8279743277792548E+01 0.8299302175202868E+01 + 0.8318869531860187E+01 0.8338445359156225E+01 0.8358029668577160E+01 0.8377622471699610E+01 0.8397223780188767E+01 + 0.8416833605796000E+01 0.8436451960357047E+01 0.8456078855787993E+01 0.8475714304085500E+01 0.8495358317322456E+01 + 0.8515010907646797E+01 0.8534672087279333E+01 0.8554341868511301E+01 0.8574020263702693E+01 0.8593707285279649E+01 + 0.8613402945733171E+01 0.8633107257617183E+01 0.8652820233545668E+01 0.8672541886191894E+01 0.8692272228285830E+01 + 0.8712011272612585E+01 0.8731759032010899E+01 0.8751515519370983E+01 0.8771280747633298E+01 0.8791054729785913E+01 + 0.8810837478864300E+01 0.8830629007948218E+01 0.8850429330161134E+01 0.8870238458668837E+01 0.8890056406676365E+01 + 0.8909883187428321E+01 0.8929718814206822E+01 0.8949563300329515E+01 0.8969416659148337E+01 0.8989278904048760E+01 + 0.9009150048447722E+01 0.9029030105792657E+01 0.9048919089560115E+01 0.9068817013254048E+01 0.9088723890405547E+01 + 0.9108639734570488E+01 0.9128564559328495E+01 0.9148498378283008E+01 0.9168441205058130E+01 0.9188393053299251E+01 + 0.9208353936670647E+01 0.9228323868854844E+01 0.9248302863551771E+01 0.9268290934477903E+01 0.9288288095363413E+01 + 0.9308294359953749E+01 0.9328309742007235E+01 0.9348334255293310E+01 0.9368367913593602E+01 0.9388410730698894E+01 + 0.9408462720409801E+01 0.9428523896534983E+01 0.9448594272890006E+01 0.9468673863297340E+01 0.9488762681584802E+01 + 0.9508860741584925E+01 0.9528968057134250E+01 0.9549084642072614E+01 0.9569210510241618E+01 0.9589345675484282E+01 + 0.9609490151644962E+01 0.9629643952567108E+01 0.9649807092094022E+01 0.9669979584066937E+01 0.9690161442325262E+01 + 0.9710352680705284E+01 0.9730553313039422E+01 0.9750763353155946E+01 0.9770982814877840E+01 0.9791211712022829E+01 + 0.9811450058402528E+01 0.9831697867820566E+01 0.9851955154073806E+01 0.9872221930951270E+01 0.9892498212232454E+01 + 0.9912784011688075E+01 0.9933079343078646E+01 0.9953384220154447E+01 0.9973698656654562E+01 0.9994022666306762E+01 + 0.1001435626282665E+02 0.1003470009456882E+02 0.1005505370279354E+02 0.1007541692221616E+02 0.1009578976686720E+02 + 0.1011617225075480E+02 0.1013656438786407E+02 0.1015696619215623E+02 0.1017737767756941E+02 0.1019779885801728E+02 + 0.1021822974738978E+02 0.1023867035955192E+02 0.1025912070834428E+02 0.1027958080758259E+02 0.1030005067105711E+02 + 0.1032053031253292E+02 0.1034101974574955E+02 0.1036151898442014E+02 0.1038202804223235E+02 0.1040254693284723E+02 + 0.1042307566989899E+02 0.1044361426699570E+02 0.1046416273771851E+02 0.1048472109562067E+02 0.1050528935422884E+02 + 0.1052586752704187E+02 0.1054645562753072E+02 0.1056705366913900E+02 0.1058766166528144E+02 0.1060827962934513E+02 + 0.1062890757468810E+02 0.1064950908609077E+02 0.1067015700336870E+02 0.1069081494185409E+02 0.1071148291478914E+02 + 0.1073216093538781E+02 0.1075284901683381E+02 0.1077354717228192E+02 0.1079425541485676E+02 0.1081497375765323E+02 + 0.1083570221373617E+02 0.1085644079614013E+02 0.1087718951786965E+02 0.1089794839189827E+02 0.1091871743116957E+02 + 0.1093949664859596E+02 0.1096028605705928E+02 0.1098108566940994E+02 0.1100189549846826E+02 0.1102271555702228E+02 + 0.1104354585782909E+02 0.1106438641361461E+02 0.1108523723707299E+02 0.1110609834086651E+02 0.1112696973762601E+02 + 0.1114785143995061E+02 0.1116874346040703E+02 0.1118964581153000E+02 0.1121055850582263E+02 0.1123148155575473E+02 + 0.1125241497376490E+02 0.1127335877225852E+02 0.1129431296360895E+02 0.1131527756015691E+02 0.1133625257420954E+02 + 0.1135723801804252E+02 0.1137823390389772E+02 0.1139924024398471E+02 0.1142025705047962E+02 0.1144128433552578E+02 + 0.1146232211123331E+02 0.1148337038967921E+02 0.1150442918290690E+02 0.1152549850292635E+02 0.1154657836171509E+02 + 0.1156766877121638E+02 0.1158876974333961E+02 0.1160988128996192E+02 0.1163100342292520E+02 0.1165213615403900E+02 + 0.1167327949507859E+02 0.1169443345778498E+02 0.1171559805386622E+02 0.1173677329499617E+02 0.1175795919281455E+02 + 0.1177915575892700E+02 0.1180036300490579E+02 0.1182158094228856E+02 0.1184280958257915E+02 0.1186404893724685E+02 + 0.1188529901772762E+02 0.1190655983542237E+02 0.1192783140169806E+02 0.1194911372788769E+02 0.1197040682528970E+02 + 0.1199171070516803E+02 0.1201302537875296E+02 0.1203435085723962E+02 0.1205568715178919E+02 0.1207703427352811E+02 + 0.1209839223354848E+02 0.1211976104290818E+02 0.1214114071263091E+02 0.1216253125370503E+02 0.1218393267708453E+02 + 0.1220534499368958E+02 0.1222676821440496E+02 0.1224820235008141E+02 0.1226964741153520E+02 0.1229110340954733E+02 + 0.1231257035486524E+02 0.1233404825820068E+02 0.1235553713023114E+02 0.1237703698160018E+02 0.1239854782291576E+02 + 0.1242006966475194E+02 0.1244160251764720E+02 0.1246314639210712E+02 0.1248470129860064E+02 0.1250626724756299E+02 + 0.1252784424939512E+02 0.1254943231446288E+02 0.1257103145309731E+02 0.1259264167559508E+02 0.1261426299221796E+02 + 0.1263589541319379E+02 0.1265753894871477E+02 0.1267919360893930E+02 0.1270085940399096E+02 0.1272253634395807E+02 + 0.1274422443889557E+02 0.1276592369882235E+02 0.1278763413372411E+02 0.1280935575355105E+02 0.1283108856821895E+02 + 0.1285283258760953E+02 0.1287458782156935E+02 0.1289635427991064E+02 0.1291813197241135E+02 0.1293992090881460E+02 + 0.1296172109882920E+02 0.1298353255212942E+02 0.1300535527835513E+02 0.1302718928711147E+02 0.1304903458796954E+02 + 0.1307089119046614E+02 0.1309275910410295E+02 0.1311463833834799E+02 0.1313652890263444E+02 0.1315843080636154E+02 + 0.1318034405889441E+02 0.1320226866956276E+02 0.1322420464766316E+02 0.1324615200245751E+02 0.1326811074317337E+02 + 0.1329008087900448E+02 0.1331206241910968E+02 0.1333405537261467E+02 0.1335605974861005E+02 0.1337807555615254E+02 + 0.1340010280426523E+02 0.1342214150193681E+02 0.1344419165812167E+02 0.1346625328174062E+02 0.1348832638168022E+02 + 0.1351041096679353E+02 0.1353250704589885E+02 0.1355461462778115E+02 0.1357673372119115E+02 0.1359886433484638E+02 + 0.1362100647742997E+02 0.1364316015759144E+02 0.1366532538394614E+02 0.1368750216507624E+02 0.1370969050953028E+02 + 0.1373189042582217E+02 0.1375410192243334E+02 0.1377632500781127E+02 0.1379855969036910E+02 0.1382080597848685E+02 + 0.1384306388051198E+02 0.1386533340475719E+02 0.1388761455950183E+02 0.1390990735299232E+02 0.1393221179344152E+02 + 0.1395452788902909E+02 0.1397685564790063E+02 0.1399919507816944E+02 0.1402154618791462E+02 0.1404390898518284E+02 + 0.1406628347798727E+02 0.1408866967430708E+02 0.1411106758208999E+02 0.1413347720924909E+02 0.1415589856366520E+02 + 0.1417833165318584E+02 0.1420077648562560E+02 0.1422323306876623E+02 0.1424570141035628E+02 0.1426818151811159E+02 + 0.1429067339971510E+02 0.1431317706281675E+02 0.1433569251503422E+02 0.1435821976395167E+02 0.1438075881712129E+02 + 0.1440330968206166E+02 0.1442587236626011E+02 0.1444844687717011E+02 0.1447103322221295E+02 0.1449363140877790E+02 + 0.1451624144422053E+02 0.1453886333586524E+02 0.1456149709100336E+02 0.1458414271689378E+02 0.1460680022076286E+02 + 0.1462946960980574E+02 0.1465215089118382E+02 0.1467483217256191E+02 0.1469751345393999E+02 0.1472019473531807E+02 + 0.0000000000000000E+00 0.1353993104251454E-10 0.8388292241576100E-09 0.9249073098372293E-08 0.5030460210239372E-07 + 0.1857568627085415E-06 0.5369197789403567E-06 0.1310591025996369E-05 0.2826805415934704E-05 0.5547382204843158E-05 + 0.1010438933657199E-04 0.1732779196828242E-04 0.2827168149581216E-04 0.4423859602721504E-04 0.6680154505955162E-04 + 0.9782344112589946E-04 0.1394737204414197E-03 0.1942420040555485E-03 0.2649487116051849E-03 0.3547525922860875E-03 + 0.4671551828778767E-03 0.6060022412741116E-03 0.7754822366296253E-03 0.9801220045380374E-03 0.1224779698140599E-02 + 0.1514635184246249E-02 0.1855178047873591E-02 0.2252193379531577E-02 0.2711745527424523E-02 0.3240160001952968E-02 + 0.3844003722708506E-02 0.4530063798923195E-02 0.5305325033301281E-02 0.6176946336577127E-02 0.7152236236230247E-02 + 0.8238627657747143E-02 0.9443652150831976E-02 0.1077491372619769E-01 0.1224006246116400E-01 0.1384676802438050E-01 + 0.1560269326170134E-01 0.1751546797666743E-01 0.1959266303029807E-01 0.2184176487603834E-01 0.2427015063682662E-01 + 0.2688506382240104E-01 0.2969359077621229E-01 0.3270263793270082E-01 0.3591890995727141E-01 0.3934888883309312E-01 + 0.4299881395089809E-01 0.4687466325027261E-01 0.5098213545355013E-01 0.5532663342634311E-01 0.5991324869200370E-01 + 0.6474674712088738E-01 0.6983155580921956E-01 0.7517175115663279E-01 0.8077104814605506E-01 0.8663279082458433E-01 + 0.9275994397927995E-01 0.9915508599743368E-01 0.1058204028968442E+00 0.1127576835079031E+00 0.1199683157858993E+00 + 0.1274532842288529E+00 0.1352131683733934E+00 0.1432481423386811E+00 0.1515579753861312E+00 0.1601420334607315E+00 + 0.1689992816780165E+00 0.1781282877192849E+00 0.1875272260963912E+00 0.1971938832464155E+00 0.2071256634156783E+00 + 0.2173195952919433E+00 0.2277723393431911E+00 0.2384801958210745E+00 0.2494391133870441E+00 0.2606446983191641E+00 + 0.2720922242578070E+00 0.2837766424487163E+00 0.2956925924423432E+00 0.3078344132088888E+00 0.3201961546291090E+00 + 0.3327715893216590E+00 0.3455542247685515E+00 0.3585373157011766E+00 0.3717138767102711E+00 0.3850766950442213E+00 + 0.3986183435611380E+00 0.4123311938012285E+00 0.4262074291471305E+00 0.4402390580410298E+00 0.4544179272285823E+00 + 0.4687357350008659E+00 0.4831840444068136E+00 0.4977542964098284E+00 0.5124378229635098E+00 0.5272258599826819E+00 + 0.5421095601871498E+00 0.5570800057968556E+00 0.5721282210583372E+00 0.5872451845836121E+00 0.6024218414838124E+00 + 0.6176491152810919E+00 0.6329179195834939E+00 0.6482191695086116E+00 0.6635437928430084E+00 0.6788827409254566E+00 + 0.6942269992431367E+00 0.7095675977309721E+00 0.7248956207653083E+00 0.7402022168441228E+00 0.7554786079469059E+00 + 0.7707160985682907E+00 0.7859060844203938E+00 0.8010400607996875E+00 0.8161096306150647E+00 0.8311065120745426E+00 + 0.8460225460288135E+00 0.8608497029705907E+00 0.8755800896893798E+00 0.8902059555819789E+00 0.9047196986196469E+00 + 0.9191138709734521E+00 0.9333811842999254E+00 0.9475145146896305E+00 0.9615069072817952E+00 0.9753515805486259E+00 + 0.9890419302533513E+00 0.1002571533086473E+01 0.1015934149985090E+01 0.1029123729140496E+01 0.1042134408699634E+01 + 0.1054960519166231E+01 0.1067596585507774E+01 0.1080037328974709E+01 0.1092277668638490E+01 0.1104312722655314E+01 + 0.1116137809262549E+01 0.1127748447515049E+01 0.1139140357768670E+01 0.1150309461918440E+01 0.1161251883398932E+01 + 0.1171963946954482E+01 0.1182442178186937E+01 0.1192683302888721E+01 0.1202684246168965E+01 0.1212442131380551E+01 + 0.1221954278855855E+01 0.1231218204459002E+01 0.1240231617962418E+01 0.1248992421255417E+01 0.1257498706392534E+01 + 0.1265748753489242E+01 0.1273741028472617E+01 0.1281474180694483E+01 0.1288947040414400E+01 0.1296158616159860E+01 + 0.1303108091970871E+01 0.1309794824536052E+01 0.1316218340227214E+01 0.1322378332039313E+01 0.1328274656442483E+01 + 0.1333907330152773E+01 0.1339276526828055E+01 0.1344382573695405E+01 0.1349225948116168E+01 0.1353807274094698E+01 + 0.1358127318736686E+01 0.1362186988662762E+01 0.1365987326382977E+01 0.1369529506637536E+01 0.1372814832709058E+01 + 0.1375844732711431E+01 0.1378620755860210E+01 0.1381144568729309E+01 0.1383417951498597E+01 0.1385442794196838E+01 + 0.1387221092944273E+01 0.1388754946198940E+01 0.1390046551010727E+01 0.1391098199286932E+01 0.1391912274073011E+01 + 0.1392491245851972E+01 0.1392837668865793E+01 0.1392954177462024E+01 0.1392843482468616E+01 0.1392508367599889E+01 + 0.1391951685896345E+01 0.1391176356200982E+01 0.1390185359674514E+01 0.1388981736351864E+01 0.1387568581742103E+01 + 0.1385949043473885E+01 0.1384126317988323E+01 0.1382103647281089E+01 0.1379884315695416E+01 0.1377471646767576E+01 + 0.1374869000126249E+01 0.1372079768447110E+01 0.1369107374463862E+01 0.1365955268036790E+01 0.1362626923279866E+01 + 0.1359125835747256E+01 0.1355455519680076E+01 0.1351619505314043E+01 0.1347621336248676E+01 0.1343464566878517E+01 + 0.1339152759886839E+01 0.1334689483802160E+01 0.1330078310617843E+01 0.1325322813474955E+01 0.1320426564408511E+01 + 0.1315393132157122E+01 0.1310226080036051E+01 0.1304928963873535E+01 0.1299505330010257E+01 0.1293958713361729E+01 + 0.1288292635543297E+01 0.1282510603057466E+01 0.1276616105543136E+01 0.1270612614086314E+01 0.1264503579591840E+01 + 0.1258292431215576E+01 0.1251982574856509E+01 0.1245577391708143E+01 0.1239080236868539E+01 0.1232494438008325E+01 + 0.1225823294095955E+01 0.1219070074179471E+01 0.1212238016223985E+01 0.1205330326004104E+01 0.1198350176050432E+01 + 0.1191300704649328E+01 0.1184185014895046E+01 0.1177006173793340E+01 0.1169767211415667E+01 0.1162471120103017E+01 + 0.1155120853718478E+01 0.1147719326947540E+01 0.1140269414645216E+01 0.1132773951228974E+01 0.1125235730116526E+01 + 0.1117657503207466E+01 0.1110041980407784E+01 0.1102391829196240E+01 0.1094709674231619E+01 0.1086998096999836E+01 + 0.1079259635499933E+01 0.1071496783967914E+01 0.1063711992637463E+01 0.1055907667536516E+01 0.1048086170318704E+01 + 0.1040249818128692E+01 0.1032400883500383E+01 0.1024541594287072E+01 0.1016674133622509E+01 0.1008800639911969E+01 + 0.1000923206852306E+01 0.9930438834801176E+00 0.9851646742469989E+00 0.9772875391210279E+00 0.9694143937135093E+00 + 0.9615471094301068E+00 0.9536875136454389E+00 0.9458373899002650E+00 0.9379984781203971E+00 0.9301724748564474E+00 + 0.9223610335436100E+00 0.9145657647805825E+00 0.9067882366268739E+00 0.8990299749176214E+00 0.8912924635951891E+00 + 0.8835771450567167E+00 0.8758854205168844E+00 0.8682186503851309E+00 0.8605781546565948E+00 0.8529652133160540E+00 + 0.8453810667541574E+00 0.8378269161952663E+00 0.8303039241362116E+00 0.8228132147953376E+00 0.8153558745711390E+00 + 0.8079329525099168E+00 0.8005454607817869E+00 0.7931943751644794E+00 0.7858806355343143E+00 0.7786051463638074E+00 + 0.7713687772253328E+00 0.7641723633003079E+00 0.7570167058933844E+00 0.7499025729511121E+00 0.7428306995846062E+00 + 0.7358017885957079E+00 0.7288165110062022E+00 0.7218755065895981E+00 0.7149793844050807E+00 0.7081287233331618E+00 + 0.7013240726126531E+00 0.6945659523785421E+00 0.6878548542003931E+00 0.6811912416209033E+00 0.6745755506942478E+00 + 0.6680081905238785E+00 0.6614895437994238E+00 0.6550199673323996E+00 0.6485997925903795E+00 0.6422293262293763E+00 + 0.6359088506240991E+00 0.6296386243958603E+00 0.6234188829378302E+00 0.6172498389374158E+00 0.6111316828955082E+00 + 0.6050645836423746E+00 0.5990486888499783E+00 0.5930841255405085E+00 0.5871710005909401E+00 0.5813094012334057E+00 + 0.5754993955512363E+00 0.5697410329704640E+00 0.5640343447466610E+00 0.5583793444469337E+00 0.5527760284269526E+00 + 0.5472243763028636E+00 0.5417243514179740E+00 0.5362759013040796E+00 0.5308789581373305E+00 0.5255334391885358E+00 + 0.5202392472678002E+00 0.5149962711634282E+00 0.5098043860749818E+00 0.5046634540404551E+00 0.4995733243574682E+00 + 0.4945338339984403E+00 0.4895448080196743E+00 0.4846060599643165E+00 0.4797173922591353E+00 0.4748785966051021E+00 + 0.4700894543617143E+00 0.4653497369250721E+00 0.4606592060996474E+00 0.4560176144637674E+00 0.4514247057287724E+00 + 0.4468802150918596E+00 0.4423838695826035E+00 0.4379353884031551E+00 0.4335344832621323E+00 0.4291808587022021E+00 + 0.4248742124213836E+00 0.4206142355880688E+00 0.4164006131498095E+00 0.4122330241358657E+00 0.4081111419535712E+00 + 0.4040346346785266E+00 0.4000031653386660E+00 0.3960163921922264E+00 0.3920739689996687E+00 0.3881755452895829E+00 + 0.3843207666186236E+00 0.3805092748255328E+00 0.3767407082792822E+00 0.3730147021214013E+00 0.3693308885025316E+00 + 0.3656888968132757E+00 0.3620883539093817E+00 0.3585288843313358E+00 0.3550101105184098E+00 0.3515316530172374E+00 + 0.3480931306849715E+00 0.3446941608870878E+00 0.3413343596899074E+00 0.3380133420478924E+00 0.3347307219857906E+00 + 0.3314861127756896E+00 0.3282791271090590E+00 0.3251093772638369E+00 0.3219764752666408E+00 0.3188800330501668E+00 + 0.3158196626058555E+00 0.3127949761318864E+00 0.3098055861765790E+00 0.3068511057772733E+00 0.3039311485947566E+00 + 0.3010453290433147E+00 0.2981932624164749E+00 0.2953745650085209E+00 0.2925888542318437E+00 0.2898357487302072E+00 + 0.2871148684879984E+00 0.2844258349355381E+00 0.2817682710505188E+00 0.2791418014556485E+00 0.2765460525125659E+00 + 0.2739806524121053E+00 0.2714452312609780E+00 0.2689394211649400E+00 0.2664628563085241E+00 0.2640151730313972E+00 + 0.2615960099014194E+00 0.2592050077844695E+00 0.2568418099111116E+00 0.2545060619401636E+00 0.2521974120192415E+00 + 0.2499155108423418E+00 0.2476600117045342E+00 0.2454305705538249E+00 0.2432268460402566E+00 0.2410484995623153E+00 + 0.2388951953107000E+00 0.2367666003095238E+00 0.2346623844550057E+00 0.2325822205517195E+00 0.2305257843464541E+00 + 0.2284927545597522E+00 0.2264828129151803E+00 0.2244956441663966E+00 0.2225309361220672E+00 0.2205883796686914E+00 + 0.2186676687913947E+00 0.2167685005927387E+00 0.2148905753096101E+00 0.2130335963282359E+00 0.2111972701973850E+00 + 0.2093813066398013E+00 0.2075854185619259E+00 0.2058093220619543E+00 0.2040527364362842E+00 0.2023153841843948E+00 + 0.2005969910122156E+00 0.1988972858340233E+00 0.1972160007729189E+00 0.1955528711599284E+00 0.1939076355317738E+00 + 0.1922800356273561E+00 0.1906698163829959E+00 0.1890767259264730E+00 0.1875005155699057E+00 0.1859409398015150E+00 + 0.1843977562763068E+00 0.1828707258057186E+00 0.1813596123462640E+00 0.1798641829872162E+00 0.1783842079373634E+00 + 0.1769194605108787E+00 0.1754697171123329E+00 0.1740347572208903E+00 0.1726143633737163E+00 0.1712083211486371E+00 + 0.1698164191460766E+00 0.1684384489703060E+00 0.1670742052100373E+00 0.1657234854183902E+00 0.1643860900922608E+00 + 0.1630618226511230E+00 0.1617504894152905E+00 0.1604518995836656E+00 0.1591658652110027E+00 0.1578922011847117E+00 + 0.1566307252012296E+00 0.1553812577419816E+00 0.1541436220489565E+00 0.1529176440999246E+00 0.1517031525833137E+00 + 0.1504999788727721E+00 0.1493079570014363E+00 0.1481269236359270E+00 0.1469567180500930E+00 0.1457971820985229E+00 + 0.1446481601898438E+00 0.1435094992598286E+00 0.1423810487443264E+00 0.1412626605520352E+00 0.1401541890371375E+00 + 0.1390554909718100E+00 0.1379664255186285E+00 0.1368868542028802E+00 0.1358166408848024E+00 0.1347556517317591E+00 + 0.1337037551903719E+00 0.1326608219586172E+00 0.1316267249579071E+00 0.1306013393051614E+00 0.1295845422848884E+00 + 0.1285762133212826E+00 0.1275762339503552E+00 0.1265844877921041E+00 0.1256008605227379E+00 0.1246252398469633E+00 + 0.1236575154703454E+00 0.1226975790717512E+00 0.1217453242758857E+00 0.1208006466259300E+00 0.1198634435562893E+00 + 0.1189336143654594E+00 0.1180110601890202E+00 0.1170956839727626E+00 0.1161873904459593E+00 0.1152860860947805E+00 + 0.1143916791358692E+00 0.1135040794900743E+00 0.1126231987563555E+00 0.1117489501858582E+00 0.1108812486561707E+00 + 0.1100200106457653E+00 0.1091651542086276E+00 0.1083165989490820E+00 0.1074742659968154E+00 0.1066380779821052E+00 + 0.1058079590112519E+00 0.1049838346422265E+00 0.1041656318605295E+00 0.1033532790552702E+00 0.1025467059954647E+00 + 0.1017458438065610E+00 0.1009506249471885E+00 0.1001609831861390E+00 0.9937685357957692E-01 0.9859817244848566E-01 + 0.9782487735634983E-01 0.9705690708707349E-01 0.9629420162313919E-01 0.9553670212400750E-01 0.9478435090475915E-01 + 0.9403709141497944E-01 0.9329486821788784E-01 0.9255762696971309E-01 0.9182531439931366E-01 0.9109787828804443E-01 + 0.9037526744987140E-01 0.8965743171173354E-01 0.8894432189415159E-01 0.8823588979208480E-01 0.8753208815603555E-01 + 0.8683287067340226E-01 0.8613819195007733E-01 0.8544800749229453E-01 0.8476227368872161E-01 0.8408094779279952E-01 + 0.8340398790532604E-01 0.8273135295728512E-01 0.8206300269292026E-01 0.8139889765304979E-01 0.8073899915862499E-01 + 0.8008326929452908E-01 0.7943167089361686E-01 0.7878416752099129E-01 0.7814072345852002E-01 0.7750130368958605E-01 + 0.7686587388407512E-01 0.7623440038359473E-01 0.7560685018692687E-01 0.7498319093571042E-01 0.7436339090035288E-01 + 0.7374741896616860E-01 0.7313524461974377E-01 0.7252683793552536E-01 0.7192216956263091E-01 0.7132121071188088E-01 + 0.7072393314304767E-01 0.7013030915232332E-01 0.6954031156000041E-01 0.6895391369836718E-01 0.6837108939981353E-01 + 0.6779181298514624E-01 0.6721605925211059E-01 0.6664380346411826E-01 0.6607502133917825E-01 0.6550968903902774E-01 + 0.6494778315846379E-01 0.6438928071487048E-01 0.6383415913794230E-01 0.6328239625959906E-01 0.6273397030409252E-01 + 0.6218885987830131E-01 0.6164704396221248E-01 0.6110850189958664E-01 0.6057321338880634E-01 0.6004115847390429E-01 + 0.5951231753576908E-01 0.5898667128352685E-01 0.5846420074609691E-01 0.5794488726391903E-01 0.5742871248084910E-01 + 0.5691565833622340E-01 0.5640570705708669E-01 0.5589884115058460E-01 0.5539504339651542E-01 0.5489429684004177E-01 + 0.5439658478455860E-01 0.5390189078471544E-01 0.5341019863959112E-01 0.5292149238601910E-01 0.5243575629206128E-01 + 0.5195297485062703E-01 0.5147313277323774E-01 0.5099621498393213E-01 0.5052220661331305E-01 0.5005109299273101E-01 + 0.4958285964860470E-01 0.4911749229687554E-01 0.4865497683759399E-01 0.4819529934963621E-01 0.4773844608554897E-01 + 0.4728440346652141E-01 0.4683315807748007E-01 0.4638469666230777E-01 0.4593900611918208E-01 0.4549607349603369E-01 + 0.4505588598612064E-01 0.4461843092371864E-01 0.4418369577992455E-01 0.4375166815857148E-01 0.4332233579225347E-01 + 0.4289568653845881E-01 0.4247170837580991E-01 0.4205038940040735E-01 0.4163171782227736E-01 0.4121568196192090E-01 + 0.4080227024696274E-01 0.4039147120889799E-01 0.3998327347993617E-01 0.3957766578994016E-01 0.3917463696345855E-01 + 0.3877417591685010E-01 0.3837627165549899E-01 0.3798091327111933E-01 0.3758808993914695E-01 0.3719779091621782E-01 + 0.3681000553773126E-01 0.3642472321549702E-01 0.3604193343546399E-01 0.3566162575553031E-01 0.3528378980343305E-01 + 0.3490841527471608E-01 0.3453549193077510E-01 0.3416500959697864E-01 0.3379695816086406E-01 0.3343132757040658E-01 + 0.3306810783236118E-01 0.3270728901067565E-01 0.3234886122497425E-01 0.3199281464910996E-01 0.3163913950978563E-01 + 0.3128782608524168E-01 0.3093886470401072E-01 0.3059224574373675E-01 0.3024795963005924E-01 0.2990599683556058E-01 + 0.2956634787877624E-01 0.2922900332326631E-01 0.2889395377674870E-01 0.2856118989029233E-01 0.2823070235756949E-01 + 0.2790248191416771E-01 0.2757651933695894E-01 0.2725280544352705E-01 0.2693133109165141E-01 0.2661208717884729E-01 + 0.2629506464196176E-01 0.2598025445682497E-01 0.2566764763795566E-01 0.2535723523832159E-01 0.2504900834915327E-01 + 0.2474295809981158E-01 0.2443907565770799E-01 0.2413735222827780E-01 0.2383777905500606E-01 0.2354034741950517E-01 + 0.2324504864164501E-01 0.2295187407973472E-01 0.2266081513075604E-01 0.2237186323064830E-01 0.2208500985464502E-01 + 0.2180024651766184E-01 0.2151756477473634E-01 0.2123695622151859E-01 0.2095841249481422E-01 0.2068192527317876E-01 + 0.2040748627756411E-01 0.2013508727201714E-01 0.1986472006443057E-01 0.1959637650734679E-01 0.1933004849881481E-01 + 0.1906572798330038E-01 0.1880340695265023E-01 0.1854307744711091E-01 0.1828473155640220E-01 0.1802836142084625E-01 + 0.1777395923255295E-01 0.1752151723666215E-01 0.1727102773264334E-01 0.1702248307565384E-01 0.1677587567795624E-01 + 0.1653119801039607E-01 0.1628844260394024E-01 0.1604760205127793E-01 0.1580866900848456E-01 0.1557163619674996E-01 + 0.1533649640417201E-01 0.1510324248761716E-01 0.1487186737464884E-01 0.1464236406552526E-01 0.1441472563526792E-01 + 0.1418894523580252E-01 0.1396501609817369E-01 0.1374293153483488E-01 0.1352268494201562E-01 0.1330426980216726E-01 + 0.1308767968648953E-01 0.1287290825753935E-01 0.1265994927192371E-01 0.1244879658307933E-01 0.1223944414413996E-01 + 0.1203188601089432E-01 0.1182611634483635E-01 0.1162212941630988E-01 0.1141991960775031E-01 0.1121948141702494E-01 + 0.1102080946087490E-01 0.1082389847846042E-01 0.1062874333501194E-01 0.1043533902558977E-01 0.1024368067895393E-01 + 0.1005376356154735E-01 0.9865583081593922E-02 0.9679134793314684E-02 0.9494414401263529E-02 0.9311417764785166E-02 + 0.9130140902597625E-02 0.8950579997500882E-02 0.8772731401214267E-02 0.8596591639343950E-02 0.8422157416482423E-02 + 0.8249425621441884E-02 0.8078393332622082E-02 0.7909057823514530E-02 0.7741416568343256E-02 0.7575467247842871E-02 + 0.7411207755174127E-02 0.7248636201976184E-02 0.7087750924555473E-02 0.6928550490209059E-02 0.6771033703680868E-02 + 0.6615199613748215E-02 0.6461047519934641E-02 0.6308576979345235E-02 0.6157787813618597E-02 0.6008680115989046E-02 + 0.5861254258451652E-02 0.5715510899020261E-02 0.5571450989068522E-02 0.5429075780740853E-02 0.5288386834419521E-02 + 0.5149386026230897E-02 0.5012075555572173E-02 0.4876457952637328E-02 0.4742536085917297E-02 0.4610313169647435E-02 + 0.4479792771170533E-02 0.4350978818180493E-02 0.4223875605807347E-02 0.4098487803498918E-02 0.3974820461650163E-02 + 0.3852879017924298E-02 0.3732669303204216E-02 0.3614197547105479E-02 0.3497470382973937E-02 0.3382494852283408E-02 + 0.3269278408338597E-02 0.3157828919178777E-02 0.3048154669566634E-02 0.2940264361933685E-02 0.2834167116141327E-02 + 0.2729872467901025E-02 0.2627390365681719E-02 0.2526731165915232E-02 0.2427905626291050E-02 0.2330924896912227E-02 + 0.2235800509061165E-02 0.2142544361300639E-02 0.2051168702609613E-02 0.1961686112225166E-02 0.1874109475832896E-02 + 0.1788451957715710E-02 0.1704726968437611E-02 0.1622948127603452E-02 0.1543129221197582E-02 0.1465284152965789E-02 + 0.1389426889263572E-02 0.1315571396752711E-02 0.1243731572285281E-02 0.1173921164272465E-02 0.1106153684794404E-02 + 0.1040442311668004E-02 0.9767997796547971E-03 0.9152382599604941E-03 0.8557692271559906E-03 0.7984033126378760E-03 + 0.7431501437484684E-03 0.6900181676963877E-03 0.6390144594619438E-03 0.5901445129451447E-03 0.5434120147240581E-03 + 0.4988185999463610E-03 0.4563635900883120E-03 0.4160437125934487E-03 0.3778528027632167E-03 0.3417814887280997E-03 + 0.3078168608981688E-03 0.2759421279962239E-03 0.2461362626341978E-03 0.2183736404266527E-03 0.1926236778641105E-03 + 0.1688504756124491E-03 0.1470124755772384E-03 0.1270621419785909E-03 0.1089456788163143E-03 0.9260279843818645E-04 + 0.7796655839983218E-04 0.6496328632466781E-04 0.5351261488371726E-04 0.4352765109263255E-04 0.3491530554961739E-04 + 0.2757680758595959E-04 0.2140843101578471E-04 0.1630245156608879E-04 0.1214835033531085E-04 0.8834266891203550E-05 + 0.6248690035680286E-05 0.4282353222462611E-05 0.2830275035848309E-05 0.1793853932613698E-05 0.1082893085919590E-05 + 0.6174003285747537E-06 0.3289872539180627E-06 0.1616905202076728E-06 0.7206870776681014E-07 0.2849911999804606E-07 + 0.9712198708650968E-08 0.2742442283547959E-08 0.6076172112450161E-09 0.9772731077597771E-10 0.1017048852958432E-10 + 0.5734341782146348E-12 0.1311491489053561E-13 0.7338688834175233E-16 0.3808514445153469E-19 0.2185032842849075E-24 + 0.4450194794086531E-34 0.4448435176905321E-58 0.1173305758391880E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.1353993104251454E-10 0.8388292241576100E-09 0.9249073098372293E-08 0.5030460210239372E-07 + 0.1857568627085415E-06 0.5369197789403567E-06 0.1310591025996369E-05 0.2826805415934704E-05 0.5547382204843158E-05 + 0.1010438933657199E-04 0.1732779196828242E-04 0.2827168149581216E-04 0.4423859602721504E-04 0.6680154505955162E-04 + 0.9782344112589946E-04 0.1394737204414197E-03 0.1942420040555485E-03 0.2649487116051849E-03 0.3547525922860875E-03 + 0.4671551828778767E-03 0.6060022412741116E-03 0.7754822366296253E-03 0.9801220045380374E-03 0.1224779698140599E-02 + 0.1514635184246249E-02 0.1855178047873591E-02 0.2252193379531577E-02 0.2711745527424523E-02 0.3240160001952968E-02 + 0.3844003722708506E-02 0.4530063798923195E-02 0.5305325033301281E-02 0.6176946336577127E-02 0.7152236236230247E-02 + 0.8238627657747143E-02 0.9443652150831976E-02 0.1077491372619769E-01 0.1224006246116400E-01 0.1384676802438050E-01 + 0.1560269326170134E-01 0.1751546797666743E-01 0.1959266303029807E-01 0.2184176487603834E-01 0.2427015063682662E-01 + 0.2688506382240104E-01 0.2969359077621229E-01 0.3270263793270082E-01 0.3591890995727141E-01 0.3934888883309312E-01 + 0.4299881395089809E-01 0.4687466325027261E-01 0.5098213545355013E-01 0.5532663342634311E-01 0.5991324869200370E-01 + 0.6474674712088738E-01 0.6983155580921956E-01 0.7517175115663279E-01 0.8077104814605506E-01 0.8663279082458433E-01 + 0.9275994397927995E-01 0.9915508599743368E-01 0.1058204028968442E+00 0.1127576835079031E+00 0.1199683157858993E+00 + 0.1274532842288529E+00 0.1352131683733934E+00 0.1432481423386811E+00 0.1515579753861312E+00 0.1601420334607315E+00 + 0.1689992816780165E+00 0.1781282877192849E+00 0.1875272260963912E+00 0.1971938832464155E+00 0.2071256634156783E+00 + 0.2173195952919433E+00 0.2277723393431911E+00 0.2384801958210745E+00 0.2494391133870441E+00 0.2606446983191641E+00 + 0.2720922242578070E+00 0.2837766424487163E+00 0.2956925924423432E+00 0.3078344132088888E+00 0.3201961546291090E+00 + 0.3327715893216590E+00 0.3455542247685515E+00 0.3585373157011766E+00 0.3717138767102711E+00 0.3850766950442213E+00 + 0.3986183435611380E+00 0.4123311938012285E+00 0.4262074291471305E+00 0.4402390580410298E+00 0.4544179272285823E+00 + 0.4687357350008659E+00 0.4831840444068136E+00 0.4977542964098284E+00 0.5124378229635098E+00 0.5272258599826819E+00 + 0.5421095601871498E+00 0.5570800057968556E+00 0.5721282210583372E+00 0.5872451845836121E+00 0.6024218414838124E+00 + 0.6176491152810919E+00 0.6329179195834939E+00 0.6482191695086116E+00 0.6635437928430084E+00 0.6788827409254566E+00 + 0.6942269992431367E+00 0.7095675977309721E+00 0.7248956207653083E+00 0.7402022168441228E+00 0.7554786079469059E+00 + 0.7707160985682907E+00 0.7859060844203938E+00 0.8010400607996875E+00 0.8161096306150647E+00 0.8311065120745426E+00 + 0.8460225460288135E+00 0.8608497029705907E+00 0.8755800896893798E+00 0.8902059555819789E+00 0.9047196986196469E+00 + 0.9191138709734521E+00 0.9333811842999254E+00 0.9475145146896305E+00 0.9615069072817952E+00 0.9753515805486259E+00 + 0.9890419302533513E+00 0.1002571533086473E+01 0.1015934149985090E+01 0.1029123729140496E+01 0.1042134408699634E+01 + 0.1054960519166231E+01 0.1067596585507774E+01 0.1080037328974709E+01 0.1092277668638490E+01 0.1104312722655314E+01 + 0.1116137809262549E+01 0.1127748447515049E+01 0.1139140357768670E+01 0.1150309461918440E+01 0.1161251883398932E+01 + 0.1171963946954482E+01 0.1182442178186937E+01 0.1192683302888721E+01 0.1202684246168965E+01 0.1212442131380551E+01 + 0.1221954278855855E+01 0.1231218204459002E+01 0.1240231617962418E+01 0.1248992421255417E+01 0.1257498706392534E+01 + 0.1265748753489242E+01 0.1273741028472617E+01 0.1281474180694483E+01 0.1288947040414400E+01 0.1296158616159860E+01 + 0.1303108091970871E+01 0.1309794824536052E+01 0.1316218340227214E+01 0.1322378332039313E+01 0.1328274656442483E+01 + 0.1333907330152773E+01 0.1339276526828055E+01 0.1344382573695405E+01 0.1349225948116168E+01 0.1353807274094698E+01 + 0.1358127318736686E+01 0.1362186988662762E+01 0.1365987326382977E+01 0.1369529506637536E+01 0.1372814832709058E+01 + 0.1375844732711431E+01 0.1378620755860210E+01 0.1381144568729309E+01 0.1383417951498597E+01 0.1385442794196838E+01 + 0.1387221092944273E+01 0.1388754946198940E+01 0.1390046551010727E+01 0.1391098199286932E+01 0.1391912274073011E+01 + 0.1392491245851972E+01 0.1392837668865793E+01 0.1392954177462024E+01 0.1392843482468616E+01 0.1392508367599889E+01 + 0.1391951685896345E+01 0.1391176356200982E+01 0.1390185359674514E+01 0.1388981736351864E+01 0.1387568581742103E+01 + 0.1385949043473885E+01 0.1384126317988323E+01 0.1382103647281089E+01 0.1379884315695416E+01 0.1377471646767576E+01 + 0.1374869000126249E+01 0.1372079768447110E+01 0.1369107374463862E+01 0.1365955268036790E+01 0.1362626923279866E+01 + 0.1359125835747256E+01 0.1355455519680076E+01 0.1351619505314043E+01 0.1347621336248676E+01 0.1343464566878517E+01 + 0.1339152759886839E+01 0.1334689483802160E+01 0.1330078310617843E+01 0.1325322813474955E+01 0.1320426564408511E+01 + 0.1315393132157122E+01 0.1310226080036051E+01 0.1304928963873535E+01 0.1299505330010257E+01 0.1293958713361729E+01 + 0.1288292635543297E+01 0.1282510603057466E+01 0.1276616105543136E+01 0.1270612614086314E+01 0.1264503579591840E+01 + 0.1258292431215576E+01 0.1251982574856509E+01 0.1245577391708143E+01 0.1239080236868539E+01 0.1232494438008325E+01 + 0.1225823294095955E+01 0.1219070074179471E+01 0.1212238016223985E+01 0.1205330326004104E+01 0.1198350176050432E+01 + 0.1191300704649328E+01 0.1184185014895046E+01 0.1177006173793340E+01 0.1169767211415667E+01 0.1162471120103017E+01 + 0.1155120853718478E+01 0.1147719326947540E+01 0.1140269414645216E+01 0.1132773951228974E+01 0.1125235730116526E+01 + 0.1117657503207466E+01 0.1110041980407784E+01 0.1102391829196240E+01 0.1094709674231619E+01 0.1086998096999836E+01 + 0.1079259635499933E+01 0.1071496783967914E+01 0.1063711992637463E+01 0.1055907667536516E+01 0.1048086170318704E+01 + 0.1040249818128692E+01 0.1032400883500383E+01 0.1024541594287072E+01 0.1016674133622509E+01 0.1008800639911969E+01 + 0.1000923206852306E+01 0.9930438834801176E+00 0.9851646742469989E+00 0.9772875391210279E+00 0.9694143937135093E+00 + 0.9615471094301068E+00 0.9536875136454389E+00 0.9458373899002650E+00 0.9379984781203971E+00 0.9301724748564474E+00 + 0.9223610335436100E+00 0.9145657647805825E+00 0.9067882366268739E+00 0.8990299749176214E+00 0.8912924635951891E+00 + 0.8835771450567167E+00 0.8758854205168844E+00 0.8682186503851309E+00 0.8605781546565948E+00 0.8529652133160540E+00 + 0.8453810667541574E+00 0.8378269161952663E+00 0.8303039241362116E+00 0.8228132147953376E+00 0.8153558745711390E+00 + 0.8079329525099168E+00 0.8005454607817869E+00 0.7931943751644794E+00 0.7858806355343143E+00 0.7786051463638074E+00 + 0.7713687772253328E+00 0.7641723633003079E+00 0.7570167058933844E+00 0.7499025729511121E+00 0.7428306995846062E+00 + 0.7358017885957079E+00 0.7288165110062022E+00 0.7218755065895981E+00 0.7149793844050807E+00 0.7081287233331618E+00 + 0.7013240726126531E+00 0.6945659523785421E+00 0.6878548542003931E+00 0.6811912416209033E+00 0.6745755506942478E+00 + 0.6680081905238785E+00 0.6614895437994238E+00 0.6550199673323996E+00 0.6485997925903795E+00 0.6422293262293763E+00 + 0.6359088506240991E+00 0.6296386243958603E+00 0.6234188829378302E+00 0.6172498389374158E+00 0.6111316828955082E+00 + 0.6050645836423746E+00 0.5990486888499783E+00 0.5930841255405085E+00 0.5871710005909401E+00 0.5813094012334057E+00 + 0.5754993955512363E+00 0.5697410329704640E+00 0.5640343447466610E+00 0.5583793444469337E+00 0.5527760284269526E+00 + 0.5472243763028636E+00 0.5417243514179740E+00 0.5362759013040796E+00 0.5308789581373305E+00 0.5255334391885358E+00 + 0.5202392472678002E+00 0.5149962711634282E+00 0.5098043860749818E+00 0.5046634540404551E+00 0.4995733243574682E+00 + 0.4945338339984403E+00 0.4895448080196743E+00 0.4846060599643165E+00 0.4797173922591353E+00 0.4748785966051021E+00 + 0.4700894543617143E+00 0.4653497369250721E+00 0.4606592060996474E+00 0.4560176144637674E+00 0.4514247057287724E+00 + 0.4468802150918596E+00 0.4423838695826035E+00 0.4379353884031551E+00 0.4335344832621323E+00 0.4291808587022021E+00 + 0.4248742124213836E+00 0.4206142355880688E+00 0.4164006131498095E+00 0.4122330241358657E+00 0.4081111419535712E+00 + 0.4040346346785266E+00 0.4000031653386660E+00 0.3960163921922264E+00 0.3920739689996687E+00 0.3881755452895829E+00 + 0.3843207666186236E+00 0.3805092748255328E+00 0.3767407082792822E+00 0.3730147021214013E+00 0.3693308885025316E+00 + 0.3656888968132757E+00 0.3620883539093817E+00 0.3585288843313358E+00 0.3550101105184098E+00 0.3515316530172374E+00 + 0.3480931306849715E+00 0.3446941608870878E+00 0.3413343596899074E+00 0.3380133420478924E+00 0.3347307219857906E+00 + 0.3314861127756896E+00 0.3282791271090590E+00 0.3251093772638369E+00 0.3219764752666408E+00 0.3188800330501668E+00 + 0.3158196626058555E+00 0.3127949761318864E+00 0.3098055861765790E+00 0.3068511057772733E+00 0.3039311485947566E+00 + 0.3010453290433147E+00 0.2981932624164749E+00 0.2953745650085209E+00 0.2925888542318437E+00 0.2898357487302072E+00 + 0.2871148684879984E+00 0.2844258349355381E+00 0.2817682710505188E+00 0.2791418014556485E+00 0.2765460525125659E+00 + 0.2739806524121053E+00 0.2714452312609780E+00 0.2689394211649400E+00 0.2664628563085241E+00 0.2640151730313972E+00 + 0.2615960099014194E+00 0.2592050077844695E+00 0.2568418099111116E+00 0.2545060619401636E+00 0.2521974120192415E+00 + 0.2499155108423418E+00 0.2476600117045342E+00 0.2454305705538249E+00 0.2432268460402566E+00 0.2410484995623153E+00 + 0.2388951953107000E+00 0.2367666003095238E+00 0.2346623844550057E+00 0.2325822205517195E+00 0.2305257843464541E+00 + 0.2284927545597522E+00 0.2264828129151803E+00 0.2244956441663966E+00 0.2225309361220672E+00 0.2205883796686914E+00 + 0.2186676687913947E+00 0.2167685005927387E+00 0.2148905753096101E+00 0.2130335963282359E+00 0.2111972701973850E+00 + 0.2093813066398013E+00 0.2075854185619259E+00 0.2058093220619543E+00 0.2040527364362842E+00 0.2023153841843948E+00 + 0.2005969910122156E+00 0.1988972858340233E+00 0.1972160007729189E+00 0.1955528711599284E+00 0.1939076355317738E+00 + 0.1922800356273561E+00 0.1906698163829959E+00 0.1890767259264730E+00 0.1875005155699057E+00 0.1859409398015150E+00 + 0.1843977562763068E+00 0.1828707258057186E+00 0.1813596123462640E+00 0.1798641829872162E+00 0.1783842079373634E+00 + 0.1769194605108787E+00 0.1754697171123329E+00 0.1740347572208903E+00 0.1726143633737163E+00 0.1712083211486371E+00 + 0.1698164191460766E+00 0.1684384489703060E+00 0.1670742052100373E+00 0.1657234854183902E+00 0.1643860900922608E+00 + 0.1630618226511230E+00 0.1617504894152905E+00 0.1604518995836656E+00 0.1591658652110027E+00 0.1578922011847117E+00 + 0.1566307252012296E+00 0.1553812577419816E+00 0.1541436220489565E+00 0.1529176440999246E+00 0.1517031525833137E+00 + 0.1504999788727721E+00 0.1493079570014363E+00 0.1481269236359270E+00 0.1469567180500930E+00 0.1457971820985229E+00 + 0.1446481601898438E+00 0.1435094992598286E+00 0.1423810487443264E+00 0.1412626605520352E+00 0.1401541890371375E+00 + 0.1390554909718100E+00 0.1379664255186285E+00 0.1368868542028802E+00 0.1358166408848024E+00 0.1347556517317591E+00 + 0.1337037551903719E+00 0.1326608219586172E+00 0.1316267249579071E+00 0.1306013393051614E+00 0.1295845422848884E+00 + 0.1285762133212826E+00 0.1275762339503552E+00 0.1265844877921041E+00 0.1256008605227379E+00 0.1246252398469633E+00 + 0.1236575154703454E+00 0.1226975790717512E+00 0.1217453242758857E+00 0.1208006466259300E+00 0.1198634435562893E+00 + 0.1189336143654594E+00 0.1180110601890202E+00 0.1170956839727626E+00 0.1161873904459593E+00 0.1152860860947805E+00 + 0.1143916791358692E+00 0.1135040794900743E+00 0.1126231987563555E+00 0.1117489501858582E+00 0.1108812486561707E+00 + 0.1100200106457653E+00 0.1091651542086276E+00 0.1083165989490820E+00 0.1074742659968154E+00 0.1066380779821052E+00 + 0.1058079590112519E+00 0.1049838346422265E+00 0.1041656318605295E+00 0.1033532790552702E+00 0.1025467059954647E+00 + 0.1017458438065610E+00 0.1009506249471885E+00 0.1001609831861390E+00 0.9937685357957692E-01 0.9859817244848566E-01 + 0.9782487735634983E-01 0.9705690708707349E-01 0.9629420162313919E-01 0.9553670212400750E-01 0.9478435090475915E-01 + 0.9403709141497944E-01 0.9329486821788784E-01 0.9255762696971309E-01 0.9182531439931366E-01 0.9109787828804443E-01 + 0.9037526744987140E-01 0.8965743171173354E-01 0.8894432189415159E-01 0.8823588979208480E-01 0.8753208815603555E-01 + 0.8683287067340226E-01 0.8613819195007733E-01 0.8544800749229453E-01 0.8476227368872161E-01 0.8408094779279952E-01 + 0.8340398790532604E-01 0.8273135295728512E-01 0.8206300269292026E-01 0.8139889765304979E-01 0.8073899915862499E-01 + 0.8008326929452908E-01 0.7943167089361686E-01 0.7878416752099129E-01 0.7814072345852002E-01 0.7750130368958605E-01 + 0.7686587388407512E-01 0.7623440038359473E-01 0.7560685018692687E-01 0.7498319093571042E-01 0.7436339090035288E-01 + 0.7374741896616860E-01 0.7313524461974377E-01 0.7252683793552536E-01 0.7192216956263091E-01 0.7132121071188088E-01 + 0.7072393314304767E-01 0.7013030915232332E-01 0.6954031156000041E-01 0.6895391369836718E-01 0.6837108939981353E-01 + 0.6779181298514624E-01 0.6721605925211059E-01 0.6664380346411826E-01 0.6607502133917825E-01 0.6550968903902774E-01 + 0.6494778315846379E-01 0.6438928071487048E-01 0.6383415913794230E-01 0.6328239625959906E-01 0.6273397030409252E-01 + 0.6218885987830131E-01 0.6164704396221248E-01 0.6110850189958664E-01 0.6057321338880634E-01 0.6004115847390429E-01 + 0.5951231753576908E-01 0.5898667128352685E-01 0.5846420074609691E-01 0.5794488726391903E-01 0.5742871248084910E-01 + 0.5691565833622340E-01 0.5640570705708669E-01 0.5589884115058460E-01 0.5539504339651542E-01 0.5489429684004177E-01 + 0.5439658478455860E-01 0.5390189078471544E-01 0.5341019863959112E-01 0.5292149238601910E-01 0.5243575629206128E-01 + 0.5195297485062703E-01 0.5147313277323774E-01 0.5099621498393213E-01 0.5052220661331305E-01 0.5005109299273101E-01 + 0.4958285964860470E-01 0.4911749229687554E-01 0.4865497683759399E-01 0.4819529934963621E-01 0.4773844608554897E-01 + 0.4728440346652141E-01 0.4683315807748007E-01 0.4638469666230777E-01 0.4593900611918208E-01 0.4549607349603369E-01 + 0.4505588598612064E-01 0.4461843092371864E-01 0.4418369577992455E-01 0.4375166815857148E-01 0.4332233579225347E-01 + 0.4289568653845881E-01 0.4247170837580991E-01 0.4205038940040735E-01 0.4163171782227736E-01 0.4121568196192090E-01 + 0.4080227024696274E-01 0.4039147120889799E-01 0.3998327347993617E-01 0.3957766578994016E-01 0.3917463696345855E-01 + 0.3877417591685010E-01 0.3837627165549899E-01 0.3798091327111933E-01 0.3758808993914695E-01 0.3719779091621782E-01 + 0.3681000553773126E-01 0.3642472321549702E-01 0.3604193343546399E-01 0.3566162575553031E-01 0.3528378980343305E-01 + 0.3490841527471608E-01 0.3453549193077510E-01 0.3416500959697864E-01 0.3379695816086406E-01 0.3343132757040658E-01 + 0.3306810783236118E-01 0.3270728901067565E-01 0.3234886122497425E-01 0.3199281464910996E-01 0.3163913950978563E-01 + 0.3128782608524168E-01 0.3093886470401072E-01 0.3059224574373675E-01 0.3024795963005924E-01 0.2990599683556058E-01 + 0.2956634787877624E-01 0.2922900332326631E-01 0.2889395377674870E-01 0.2856118989029233E-01 0.2823070235756949E-01 + 0.2790248191416771E-01 0.2757651933695894E-01 0.2725280544352705E-01 0.2693133109165141E-01 0.2661208717884729E-01 + 0.2629506464196176E-01 0.2598025445682497E-01 0.2566764763795566E-01 0.2535723523832159E-01 0.2504900834915327E-01 + 0.2474295809981158E-01 0.2443907565770799E-01 0.2413735222827780E-01 0.2383777905500606E-01 0.2354034741950517E-01 + 0.2324504864164501E-01 0.2295187407973472E-01 0.2266081513075604E-01 0.2237186323064830E-01 0.2208500985464502E-01 + 0.2180024651766184E-01 0.2151756477473634E-01 0.2123695622151859E-01 0.2095841249481422E-01 0.2068192527317876E-01 + 0.2040748627756411E-01 0.2013508727201714E-01 0.1986472006443057E-01 0.1959637650734679E-01 0.1933004849881481E-01 + 0.1906572798330038E-01 0.1880340695265023E-01 0.1854307744711091E-01 0.1828473155640220E-01 0.1802836142084625E-01 + 0.1777395923255295E-01 0.1752151723666215E-01 0.1727102773264334E-01 0.1702248307565384E-01 0.1677587567795624E-01 + 0.1653119801039607E-01 0.1628844260394024E-01 0.1604760205127793E-01 0.1580866900848456E-01 0.1557163619674996E-01 + 0.1533649640417201E-01 0.1510324248761716E-01 0.1487186737464884E-01 0.1464236406552526E-01 0.1441472563526792E-01 + 0.1418894523580252E-01 0.1396501609817369E-01 0.1374293153483488E-01 0.1352268494201562E-01 0.1330426980216726E-01 + 0.1308767968648953E-01 0.1287290825753935E-01 0.1265994927192371E-01 0.1244879658307933E-01 0.1223944414413996E-01 + 0.1203188601089432E-01 0.1182611634483635E-01 0.1162212941630988E-01 0.1141991960775031E-01 0.1121948141702494E-01 + 0.1102080946087490E-01 0.1082389847846042E-01 0.1062874333501194E-01 0.1043533902558977E-01 0.1024368067895393E-01 + 0.1005376356154735E-01 0.9865583081593922E-02 0.9679134793314684E-02 0.9494414401263529E-02 0.9311417764785166E-02 + 0.9130140902597625E-02 0.8950579997500882E-02 0.8772731401214267E-02 0.8596591639343950E-02 0.8422157416482423E-02 + 0.8249425621441884E-02 0.8078393332622082E-02 0.7909057823514530E-02 0.7741416568343256E-02 0.7575467247842871E-02 + 0.7411207755174127E-02 0.7248636201976184E-02 0.7087750924555473E-02 0.6928550490209059E-02 0.6771033703680868E-02 + 0.6615199613748215E-02 0.6461047519934641E-02 0.6308576979345235E-02 0.6157787813618597E-02 0.6008680115989046E-02 + 0.5861254258451652E-02 0.5715510899020261E-02 0.5571450989068522E-02 0.5429075780740853E-02 0.5288386834419521E-02 + 0.5149386026230897E-02 0.5012075555572173E-02 0.4876457952637328E-02 0.4742536085917297E-02 0.4610313169647435E-02 + 0.4479792771170533E-02 0.4350978818180493E-02 0.4223875605807347E-02 0.4098487803498918E-02 0.3974820461650163E-02 + 0.3852879017924298E-02 0.3732669303204216E-02 0.3614197547105479E-02 0.3497470382973937E-02 0.3382494852283408E-02 + 0.3269278408338597E-02 0.3157828919178777E-02 0.3048154669566634E-02 0.2940264361933685E-02 0.2834167116141327E-02 + 0.2729872467901025E-02 0.2627390365681719E-02 0.2526731165915232E-02 0.2427905626291050E-02 0.2330924896912227E-02 + 0.2235800509061165E-02 0.2142544361300639E-02 0.2051168702609613E-02 0.1961686112225166E-02 0.1874109475832896E-02 + 0.1788451957715710E-02 0.1704726968437611E-02 0.1622948127603452E-02 0.1543129221197582E-02 0.1465284152965789E-02 + 0.1389426889263572E-02 0.1315571396752711E-02 0.1243731572285281E-02 0.1173921164272465E-02 0.1106153684794404E-02 + 0.1040442311668004E-02 0.9767997796547971E-03 0.9152382599604941E-03 0.8557692271559906E-03 0.7984033126378760E-03 + 0.7431501437484684E-03 0.6900181676963877E-03 0.6390144594619438E-03 0.5901445129451447E-03 0.5434120147240581E-03 + 0.4988185999463610E-03 0.4563635900883120E-03 0.4160437125934487E-03 0.3778528027632167E-03 0.3417814887280997E-03 + 0.3078168608981688E-03 0.2759421279962239E-03 0.2461362626341978E-03 0.2183736404266527E-03 0.1926236778641105E-03 + 0.1688504756124491E-03 0.1470124755772384E-03 0.1270621419785909E-03 0.1089456788163143E-03 0.9260279843818645E-04 + 0.7796655839983218E-04 0.6496328632466781E-04 0.5351261488371726E-04 0.4352765109263255E-04 0.3491530554961739E-04 + 0.2757680758595959E-04 0.2140843101578471E-04 0.1630245156608879E-04 0.1214835033531085E-04 0.8834266891203550E-05 + 0.6248690035680286E-05 0.4282353222462611E-05 0.2830275035848309E-05 0.1793853932613698E-05 0.1082893085919590E-05 + 0.6174003285747537E-06 0.3289872539180627E-06 0.1616905202076728E-06 0.7206870776681014E-07 0.2849911999804606E-07 + 0.9712198708650968E-08 0.2742442283547959E-08 0.6076172112450161E-09 0.9772731077597771E-10 0.1017048852958432E-10 + 0.5734341782146348E-12 0.1311491489053561E-13 0.7338688834175233E-16 0.3808514445153469E-19 0.2185032842849075E-24 + 0.4450194794086531E-34 0.4448435176905321E-58 0.1173305758391880E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.1353993104251454E-10 0.8388292241576100E-09 0.9249073098372293E-08 0.5030460210239372E-07 + 0.1857568627085415E-06 0.5369197789403567E-06 0.1310591025996369E-05 0.2826805415934704E-05 0.5547382204843158E-05 + 0.1010438933657199E-04 0.1732779196828242E-04 0.2827168149581216E-04 0.4423859602721504E-04 0.6680154505955162E-04 + 0.9782344112589946E-04 0.1394737204414197E-03 0.1942420040555485E-03 0.2649487116051849E-03 0.3547525922860875E-03 + 0.4671551828778767E-03 0.6060022412741116E-03 0.7754822366296253E-03 0.9801220045380374E-03 0.1224779698140599E-02 + 0.1514635184246249E-02 0.1855178047873591E-02 0.2252193379531577E-02 0.2711745527424523E-02 0.3240160001952968E-02 + 0.3844003722708506E-02 0.4530063798923195E-02 0.5305325033301281E-02 0.6176946336577127E-02 0.7152236236230247E-02 + 0.8238627657747143E-02 0.9443652150831976E-02 0.1077491372619769E-01 0.1224006246116400E-01 0.1384676802438050E-01 + 0.1560269326170134E-01 0.1751546797666743E-01 0.1959266303029807E-01 0.2184176487603834E-01 0.2427015063682662E-01 + 0.2688506382240104E-01 0.2969359077621229E-01 0.3270263793270082E-01 0.3591890995727141E-01 0.3934888883309312E-01 + 0.4299881395089809E-01 0.4687466325027261E-01 0.5098213545355013E-01 0.5532663342634311E-01 0.5991324869200370E-01 + 0.6474674712088738E-01 0.6983155580921956E-01 0.7517175115663279E-01 0.8077104814605506E-01 0.8663279082458433E-01 + 0.9275994397927995E-01 0.9915508599743368E-01 0.1058204028968442E+00 0.1127576835079031E+00 0.1199683157858993E+00 + 0.1274532842288529E+00 0.1352131683733934E+00 0.1432481423386811E+00 0.1515579753861312E+00 0.1601420334607315E+00 + 0.1689992816780165E+00 0.1781282877192849E+00 0.1875272260963912E+00 0.1971938832464155E+00 0.2071256634156783E+00 + 0.2173195952919433E+00 0.2277723393431911E+00 0.2384801958210745E+00 0.2494391133870441E+00 0.2606446983191641E+00 + 0.2720922242578070E+00 0.2837766424487163E+00 0.2956925924423432E+00 0.3078344132088888E+00 0.3201961546291090E+00 + 0.3327715893216590E+00 0.3455542247685515E+00 0.3585373157011766E+00 0.3717138767102711E+00 0.3850766950442213E+00 + 0.3986183435611380E+00 0.4123311938012285E+00 0.4262074291471305E+00 0.4402390580410298E+00 0.4544179272285823E+00 + 0.4687357350008659E+00 0.4831840444068136E+00 0.4977542964098284E+00 0.5124378229635098E+00 0.5272258599826819E+00 + 0.5421095601871498E+00 0.5570800057968556E+00 0.5721282210583372E+00 0.5872451845836121E+00 0.6024218414838124E+00 + 0.6176491152810919E+00 0.6329179195834939E+00 0.6482191695086116E+00 0.6635437928430084E+00 0.6788827409254566E+00 + 0.6942269992431367E+00 0.7095675977309721E+00 0.7248956207653083E+00 0.7402022168441228E+00 0.7554786079469059E+00 + 0.7707160985682907E+00 0.7859060844203938E+00 0.8010400607996875E+00 0.8161096306150647E+00 0.8311065120745426E+00 + 0.8460225460288135E+00 0.8608497029705907E+00 0.8755800896893798E+00 0.8902059555819789E+00 0.9047196986196469E+00 + 0.9191138709734521E+00 0.9333811842999254E+00 0.9475145146896305E+00 0.9615069072817952E+00 0.9753515805486259E+00 + 0.9890419302533513E+00 0.1002571533086473E+01 0.1015934149985090E+01 0.1029123729140496E+01 0.1042134408699634E+01 + 0.1054960519166231E+01 0.1067596585507774E+01 0.1080037328974709E+01 0.1092277668638490E+01 0.1104312722655314E+01 + 0.1116137809262549E+01 0.1127748447515049E+01 0.1139140357768670E+01 0.1150309461918440E+01 0.1161251883398932E+01 + 0.1171963946954482E+01 0.1182442178186937E+01 0.1192683302888721E+01 0.1202684246168965E+01 0.1212442131380551E+01 + 0.1221954278855855E+01 0.1231218204459002E+01 0.1240231617962418E+01 0.1248992421255417E+01 0.1257498706392534E+01 + 0.1265748753489242E+01 0.1273741028472617E+01 0.1281474180694483E+01 0.1288947040414400E+01 0.1296158616159860E+01 + 0.1303108091970871E+01 0.1309794824536052E+01 0.1316218340227214E+01 0.1322378332039313E+01 0.1328274656442483E+01 + 0.1333907330152773E+01 0.1339276526828055E+01 0.1344382573695405E+01 0.1349225948116168E+01 0.1353807274094698E+01 + 0.1358127318736686E+01 0.1362186988662762E+01 0.1365987326382977E+01 0.1369529506637536E+01 0.1372814832709058E+01 + 0.1375844732711431E+01 0.1378620755860210E+01 0.1381144568729309E+01 0.1383417951498597E+01 0.1385442794196838E+01 + 0.1387221092944273E+01 0.1388754946198940E+01 0.1390046551010727E+01 0.1391098199286932E+01 0.1391912274073011E+01 + 0.1392491245851972E+01 0.1392837668865793E+01 0.1392954177462024E+01 0.1392843482468616E+01 0.1392508367599889E+01 + 0.1391951685896345E+01 0.1391176356200982E+01 0.1390185359674514E+01 0.1388981736351864E+01 0.1387568581742103E+01 + 0.1385949043473885E+01 0.1384126317988323E+01 0.1382103647281089E+01 0.1379884315695416E+01 0.1377471646767576E+01 + 0.1374869000126249E+01 0.1372079768447110E+01 0.1369107374463862E+01 0.1365955268036790E+01 0.1362626923279866E+01 + 0.1359125835747256E+01 0.1355455519680076E+01 0.1351619505314043E+01 0.1347621336248676E+01 0.1343464566878517E+01 + 0.1339152759886839E+01 0.1334689483802160E+01 0.1330078310617843E+01 0.1325322813474955E+01 0.1320426564408511E+01 + 0.1315393132157122E+01 0.1310226080036051E+01 0.1304928963873535E+01 0.1299505330010257E+01 0.1293958713361729E+01 + 0.1288292635543297E+01 0.1282510603057466E+01 0.1276616105543136E+01 0.1270612614086314E+01 0.1264503579591840E+01 + 0.1258292431215576E+01 0.1251982574856509E+01 0.1245577391708143E+01 0.1239080236868539E+01 0.1232494438008325E+01 + 0.1225823294095955E+01 0.1219070074179471E+01 0.1212238016223985E+01 0.1205330326004104E+01 0.1198350176050432E+01 + 0.1191300704649328E+01 0.1184185014895046E+01 0.1177006173793340E+01 0.1169767211415667E+01 0.1162471120103017E+01 + 0.1155120853718478E+01 0.1147719326947540E+01 0.1140269414645216E+01 0.1132773951228974E+01 0.1125235730116526E+01 + 0.1117657503207466E+01 0.1110041980407784E+01 0.1102391829196240E+01 0.1094709674231619E+01 0.1086998096999836E+01 + 0.1079259635499933E+01 0.1071496783967914E+01 0.1063711992637463E+01 0.1055907667536516E+01 0.1048086170318704E+01 + 0.1040249818128692E+01 0.1032400883500383E+01 0.1024541594287072E+01 0.1016674133622509E+01 0.1008800639911969E+01 + 0.1000923206852306E+01 0.9930438834801176E+00 0.9851646742469989E+00 0.9772875391210279E+00 0.9694143937135093E+00 + 0.9615471094301068E+00 0.9536875136454389E+00 0.9458373899002650E+00 0.9379984781203971E+00 0.9301724748564474E+00 + 0.9223610335436100E+00 0.9145657647805825E+00 0.9067882366268739E+00 0.8990299749176214E+00 0.8912924635951891E+00 + 0.8835771450567167E+00 0.8758854205168844E+00 0.8682186503851309E+00 0.8605781546565948E+00 0.8529652133160540E+00 + 0.8453810667541574E+00 0.8378269161952663E+00 0.8303039241362116E+00 0.8228132147953376E+00 0.8153558745711390E+00 + 0.8079329525099168E+00 0.8005454607817869E+00 0.7931943751644794E+00 0.7858806355343143E+00 0.7786051463638074E+00 + 0.7713687772253328E+00 0.7641723633003079E+00 0.7570167058933844E+00 0.7499025729511121E+00 0.7428306995846062E+00 + 0.7358017885957079E+00 0.7288165110062022E+00 0.7218755065895981E+00 0.7149793844050807E+00 0.7081287233331618E+00 + 0.7013240726126531E+00 0.6945659523785421E+00 0.6878548542003931E+00 0.6811912416209033E+00 0.6745755506942478E+00 + 0.6680081905238785E+00 0.6614895437994238E+00 0.6550199673323996E+00 0.6485997925903795E+00 0.6422293262293763E+00 + 0.6359088506240991E+00 0.6296386243958603E+00 0.6234188829378302E+00 0.6172498389374158E+00 0.6111316828955082E+00 + 0.6050645836423746E+00 0.5990486888499783E+00 0.5930841255405085E+00 0.5871710005909401E+00 0.5813094012334057E+00 + 0.5754993955512363E+00 0.5697410329704640E+00 0.5640343447466610E+00 0.5583793444469337E+00 0.5527760284269526E+00 + 0.5472243763028636E+00 0.5417243514179740E+00 0.5362759013040796E+00 0.5308789581373305E+00 0.5255334391885358E+00 + 0.5202392472678002E+00 0.5149962711634282E+00 0.5098043860749818E+00 0.5046634540404551E+00 0.4995733243574682E+00 + 0.4945338339984403E+00 0.4895448080196743E+00 0.4846060599643165E+00 0.4797173922591353E+00 0.4748785966051021E+00 + 0.4700894543617143E+00 0.4653497369250721E+00 0.4606592060996474E+00 0.4560176144637674E+00 0.4514247057287724E+00 + 0.4468802150918596E+00 0.4423838695826035E+00 0.4379353884031551E+00 0.4335344832621323E+00 0.4291808587022021E+00 + 0.4248742124213836E+00 0.4206142355880688E+00 0.4164006131498095E+00 0.4122330241358657E+00 0.4081111419535712E+00 + 0.4040346346785266E+00 0.4000031653386660E+00 0.3960163921922264E+00 0.3920739689996687E+00 0.3881755452895829E+00 + 0.3843207666186236E+00 0.3805092748255328E+00 0.3767407082792822E+00 0.3730147021214013E+00 0.3693308885025316E+00 + 0.3656888968132757E+00 0.3620883539093817E+00 0.3585288843313358E+00 0.3550101105184098E+00 0.3515316530172374E+00 + 0.3480931306849715E+00 0.3446941608870878E+00 0.3413343596899074E+00 0.3380133420478924E+00 0.3347307219857906E+00 + 0.3314861127756896E+00 0.3282791271090590E+00 0.3251093772638369E+00 0.3219764752666408E+00 0.3188800330501668E+00 + 0.3158196626058555E+00 0.3127949761318864E+00 0.3098055861765790E+00 0.3068511057772733E+00 0.3039311485947566E+00 + 0.3010453290433147E+00 0.2981932624164749E+00 0.2953745650085209E+00 0.2925888542318437E+00 0.2898357487302072E+00 + 0.2871148684879984E+00 0.2844258349355381E+00 0.2817682710505188E+00 0.2791418014556485E+00 0.2765460525125659E+00 + 0.2739806524121053E+00 0.2714452312609780E+00 0.2689394211649400E+00 0.2664628563085241E+00 0.2640151730313972E+00 + 0.2615960099014194E+00 0.2592050077844695E+00 0.2568418099111116E+00 0.2545060619401636E+00 0.2521974120192415E+00 + 0.2499155108423418E+00 0.2476600117045342E+00 0.2454305705538249E+00 0.2432268460402566E+00 0.2410484995623153E+00 + 0.2388951953107000E+00 0.2367666003095238E+00 0.2346623844550057E+00 0.2325822205517195E+00 0.2305257843464541E+00 + 0.2284927545597522E+00 0.2264828129151803E+00 0.2244956441663966E+00 0.2225309361220672E+00 0.2205883796686914E+00 + 0.2186676687913947E+00 0.2167685005927387E+00 0.2148905753096101E+00 0.2130335963282359E+00 0.2111972701973850E+00 + 0.2093813066398013E+00 0.2075854185619259E+00 0.2058093220619543E+00 0.2040527364362842E+00 0.2023153841843948E+00 + 0.2005969910122156E+00 0.1988972858340233E+00 0.1972160007729189E+00 0.1955528711599284E+00 0.1939076355317738E+00 + 0.1922800356273561E+00 0.1906698163829959E+00 0.1890767259264730E+00 0.1875005155699057E+00 0.1859409398015150E+00 + 0.1843977562763068E+00 0.1828707258057186E+00 0.1813596123462640E+00 0.1798641829872162E+00 0.1783842079373634E+00 + 0.1769194605108787E+00 0.1754697171123329E+00 0.1740347572208903E+00 0.1726143633737163E+00 0.1712083211486371E+00 + 0.1698164191460766E+00 0.1684384489703060E+00 0.1670742052100373E+00 0.1657234854183902E+00 0.1643860900922608E+00 + 0.1630618226511230E+00 0.1617504894152905E+00 0.1604518995836656E+00 0.1591658652110027E+00 0.1578922011847117E+00 + 0.1566307252012296E+00 0.1553812577419816E+00 0.1541436220489565E+00 0.1529176440999246E+00 0.1517031525833137E+00 + 0.1504999788727721E+00 0.1493079570014363E+00 0.1481269236359270E+00 0.1469567180500930E+00 0.1457971820985229E+00 + 0.1446481601898438E+00 0.1435094992598286E+00 0.1423810487443264E+00 0.1412626605520352E+00 0.1401541890371375E+00 + 0.1390554909718100E+00 0.1379664255186285E+00 0.1368868542028802E+00 0.1358166408848024E+00 0.1347556517317591E+00 + 0.1337037551903719E+00 0.1326608219586172E+00 0.1316267249579071E+00 0.1306013393051614E+00 0.1295845422848884E+00 + 0.1285762133212826E+00 0.1275762339503552E+00 0.1265844877921041E+00 0.1256008605227379E+00 0.1246252398469633E+00 + 0.1236575154703454E+00 0.1226975790717512E+00 0.1217453242758857E+00 0.1208006466259300E+00 0.1198634435562893E+00 + 0.1189336143654594E+00 0.1180110601890202E+00 0.1170956839727626E+00 0.1161873904459593E+00 0.1152860860947805E+00 + 0.1143916791358692E+00 0.1135040794900743E+00 0.1126231987563555E+00 0.1117489501858582E+00 0.1108812486561707E+00 + 0.1100200106457653E+00 0.1091651542086276E+00 0.1083165989490820E+00 0.1074742659968154E+00 0.1066380779821052E+00 + 0.1058079590112519E+00 0.1049838346422265E+00 0.1041656318605295E+00 0.1033532790552702E+00 0.1025467059954647E+00 + 0.1017458438065610E+00 0.1009506249471885E+00 0.1001609831861390E+00 0.9937685357957692E-01 0.9859817244848566E-01 + 0.9782487735634983E-01 0.9705690708707349E-01 0.9629420162313919E-01 0.9553670212400750E-01 0.9478435090475915E-01 + 0.9403709141497944E-01 0.9329486821788784E-01 0.9255762696971309E-01 0.9182531439931366E-01 0.9109787828804443E-01 + 0.9037526744987140E-01 0.8965743171173354E-01 0.8894432189415159E-01 0.8823588979208480E-01 0.8753208815603555E-01 + 0.8683287067340226E-01 0.8613819195007733E-01 0.8544800749229453E-01 0.8476227368872161E-01 0.8408094779279952E-01 + 0.8340398790532604E-01 0.8273135295728512E-01 0.8206300269292026E-01 0.8139889765304979E-01 0.8073899915862499E-01 + 0.8008326929452908E-01 0.7943167089361686E-01 0.7878416752099129E-01 0.7814072345852002E-01 0.7750130368958605E-01 + 0.7686587388407512E-01 0.7623440038359473E-01 0.7560685018692687E-01 0.7498319093571042E-01 0.7436339090035288E-01 + 0.7374741896616860E-01 0.7313524461974377E-01 0.7252683793552536E-01 0.7192216956263091E-01 0.7132121071188088E-01 + 0.7072393314304767E-01 0.7013030915232332E-01 0.6954031156000041E-01 0.6895391369836718E-01 0.6837108939981353E-01 + 0.6779181298514624E-01 0.6721605925211059E-01 0.6664380346411826E-01 0.6607502133917825E-01 0.6550968903902774E-01 + 0.6494778315846379E-01 0.6438928071487048E-01 0.6383415913794230E-01 0.6328239625959906E-01 0.6273397030409252E-01 + 0.6218885987830131E-01 0.6164704396221248E-01 0.6110850189958664E-01 0.6057321338880634E-01 0.6004115847390429E-01 + 0.5951231753576908E-01 0.5898667128352685E-01 0.5846420074609691E-01 0.5794488726391903E-01 0.5742871248084910E-01 + 0.5691565833622340E-01 0.5640570705708669E-01 0.5589884115058460E-01 0.5539504339651542E-01 0.5489429684004177E-01 + 0.5439658478455860E-01 0.5390189078471544E-01 0.5341019863959112E-01 0.5292149238601910E-01 0.5243575629206128E-01 + 0.5195297485062703E-01 0.5147313277323774E-01 0.5099621498393213E-01 0.5052220661331305E-01 0.5005109299273101E-01 + 0.4958285964860470E-01 0.4911749229687554E-01 0.4865497683759399E-01 0.4819529934963621E-01 0.4773844608554897E-01 + 0.4728440346652141E-01 0.4683315807748007E-01 0.4638469666230777E-01 0.4593900611918208E-01 0.4549607349603369E-01 + 0.4505588598612064E-01 0.4461843092371864E-01 0.4418369577992455E-01 0.4375166815857148E-01 0.4332233579225347E-01 + 0.4289568653845881E-01 0.4247170837580991E-01 0.4205038940040735E-01 0.4163171782227736E-01 0.4121568196192090E-01 + 0.4080227024696274E-01 0.4039147120889799E-01 0.3998327347993617E-01 0.3957766578994016E-01 0.3917463696345855E-01 + 0.3877417591685010E-01 0.3837627165549899E-01 0.3798091327111933E-01 0.3758808993914695E-01 0.3719779091621782E-01 + 0.3681000553773126E-01 0.3642472321549702E-01 0.3604193343546399E-01 0.3566162575553031E-01 0.3528378980343305E-01 + 0.3490841527471608E-01 0.3453549193077510E-01 0.3416500959697864E-01 0.3379695816086406E-01 0.3343132757040658E-01 + 0.3306810783236118E-01 0.3270728901067565E-01 0.3234886122497425E-01 0.3199281464910996E-01 0.3163913950978563E-01 + 0.3128782608524168E-01 0.3093886470401072E-01 0.3059224574373675E-01 0.3024795963005924E-01 0.2990599683556058E-01 + 0.2956634787877624E-01 0.2922900332326631E-01 0.2889395377674870E-01 0.2856118989029233E-01 0.2823070235756949E-01 + 0.2790248191416771E-01 0.2757651933695894E-01 0.2725280544352705E-01 0.2693133109165141E-01 0.2661208717884729E-01 + 0.2629506464196176E-01 0.2598025445682497E-01 0.2566764763795566E-01 0.2535723523832159E-01 0.2504900834915327E-01 + 0.2474295809981158E-01 0.2443907565770799E-01 0.2413735222827780E-01 0.2383777905500606E-01 0.2354034741950517E-01 + 0.2324504864164501E-01 0.2295187407973472E-01 0.2266081513075604E-01 0.2237186323064830E-01 0.2208500985464502E-01 + 0.2180024651766184E-01 0.2151756477473634E-01 0.2123695622151859E-01 0.2095841249481422E-01 0.2068192527317876E-01 + 0.2040748627756411E-01 0.2013508727201714E-01 0.1986472006443057E-01 0.1959637650734679E-01 0.1933004849881481E-01 + 0.1906572798330038E-01 0.1880340695265023E-01 0.1854307744711091E-01 0.1828473155640220E-01 0.1802836142084625E-01 + 0.1777395923255295E-01 0.1752151723666215E-01 0.1727102773264334E-01 0.1702248307565384E-01 0.1677587567795624E-01 + 0.1653119801039607E-01 0.1628844260394024E-01 0.1604760205127793E-01 0.1580866900848456E-01 0.1557163619674996E-01 + 0.1533649640417201E-01 0.1510324248761716E-01 0.1487186737464884E-01 0.1464236406552526E-01 0.1441472563526792E-01 + 0.1418894523580252E-01 0.1396501609817369E-01 0.1374293153483488E-01 0.1352268494201562E-01 0.1330426980216726E-01 + 0.1308767968648953E-01 0.1287290825753935E-01 0.1265994927192371E-01 0.1244879658307933E-01 0.1223944414413996E-01 + 0.1203188601089432E-01 0.1182611634483635E-01 0.1162212941630988E-01 0.1141991960775031E-01 0.1121948141702494E-01 + 0.1102080946087490E-01 0.1082389847846042E-01 0.1062874333501194E-01 0.1043533902558977E-01 0.1024368067895393E-01 + 0.1005376356154735E-01 0.9865583081593922E-02 0.9679134793314684E-02 0.9494414401263529E-02 0.9311417764785166E-02 + 0.9130140902597625E-02 0.8950579997500882E-02 0.8772731401214267E-02 0.8596591639343950E-02 0.8422157416482423E-02 + 0.8249425621441884E-02 0.8078393332622082E-02 0.7909057823514530E-02 0.7741416568343256E-02 0.7575467247842871E-02 + 0.7411207755174127E-02 0.7248636201976184E-02 0.7087750924555473E-02 0.6928550490209059E-02 0.6771033703680868E-02 + 0.6615199613748215E-02 0.6461047519934641E-02 0.6308576979345235E-02 0.6157787813618597E-02 0.6008680115989046E-02 + 0.5861254258451652E-02 0.5715510899020261E-02 0.5571450989068522E-02 0.5429075780740853E-02 0.5288386834419521E-02 + 0.5149386026230897E-02 0.5012075555572173E-02 0.4876457952637328E-02 0.4742536085917297E-02 0.4610313169647435E-02 + 0.4479792771170533E-02 0.4350978818180493E-02 0.4223875605807347E-02 0.4098487803498918E-02 0.3974820461650163E-02 + 0.3852879017924298E-02 0.3732669303204216E-02 0.3614197547105479E-02 0.3497470382973937E-02 0.3382494852283408E-02 + 0.3269278408338597E-02 0.3157828919178777E-02 0.3048154669566634E-02 0.2940264361933685E-02 0.2834167116141327E-02 + 0.2729872467901025E-02 0.2627390365681719E-02 0.2526731165915232E-02 0.2427905626291050E-02 0.2330924896912227E-02 + 0.2235800509061165E-02 0.2142544361300639E-02 0.2051168702609613E-02 0.1961686112225166E-02 0.1874109475832896E-02 + 0.1788451957715710E-02 0.1704726968437611E-02 0.1622948127603452E-02 0.1543129221197582E-02 0.1465284152965789E-02 + 0.1389426889263572E-02 0.1315571396752711E-02 0.1243731572285281E-02 0.1173921164272465E-02 0.1106153684794404E-02 + 0.1040442311668004E-02 0.9767997796547971E-03 0.9152382599604941E-03 0.8557692271559906E-03 0.7984033126378760E-03 + 0.7431501437484684E-03 0.6900181676963877E-03 0.6390144594619438E-03 0.5901445129451447E-03 0.5434120147240581E-03 + 0.4988185999463610E-03 0.4563635900883120E-03 0.4160437125934487E-03 0.3778528027632167E-03 0.3417814887280997E-03 + 0.3078168608981688E-03 0.2759421279962239E-03 0.2461362626341978E-03 0.2183736404266527E-03 0.1926236778641105E-03 + 0.1688504756124491E-03 0.1470124755772384E-03 0.1270621419785909E-03 0.1089456788163143E-03 0.9260279843818645E-04 + 0.7796655839983218E-04 0.6496328632466781E-04 0.5351261488371726E-04 0.4352765109263255E-04 0.3491530554961739E-04 + 0.2757680758595959E-04 0.2140843101578471E-04 0.1630245156608879E-04 0.1214835033531085E-04 0.8834266891203550E-05 + 0.6248690035680286E-05 0.4282353222462611E-05 0.2830275035848309E-05 0.1793853932613698E-05 0.1082893085919590E-05 + 0.6174003285747537E-06 0.3289872539180627E-06 0.1616905202076728E-06 0.7206870776681014E-07 0.2849911999804606E-07 + 0.9712198708650968E-08 0.2742442283547959E-08 0.6076172112450161E-09 0.9772731077597771E-10 0.1017048852958432E-10 + 0.5734341782146348E-12 0.1311491489053561E-13 0.7338688834175233E-16 0.3808514445153469E-19 0.2185032842849075E-24 + 0.4450194794086531E-34 0.4448435176905321E-58 0.1173305758391880E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 13 26.982 4.0500 fcc + 0.0000000000000000E+00 -0.9628279509886344E-01 -0.9953365511717502E-01 -0.1085367257834955E+00 -0.1214218487615201E+00 + -0.1368680672855588E+00 -0.1540621427490459E+00 -0.1724823698187966E+00 -0.1917766936082239E+00 -0.2116972667780488E+00 + -0.2320627441427241E+00 -0.2527367403313019E+00 -0.2736137350811652E+00 -0.2946105714789528E+00 -0.3156602493701524E+00 + -0.3367083306444053E+00 -0.3577089488344269E+00 -0.3786243739249987E+00 -0.3994221660811231E+00 -0.4200735094048743E+00 + -0.4404904782781875E+00 -0.4603267076635175E+00 -0.4791342002596235E+00 -0.4966697876448934E+00 -0.5129130363987204E+00 + -0.5279649398751899E+00 -0.5419673801142365E+00 -0.5550615741668476E+00 -0.5673715677751278E+00 -0.5790001198451177E+00 + -0.5900298137753388E+00 -0.6005259461781434E+00 -0.6105396931325852E+00 -0.6201109775165654E+00 -0.6292707959422479E+00 + -0.6380435230284373E+00 -0.6464477036605579E+00 -0.6544979268477449E+00 -0.6622058329958839E+00 -0.6695796004816827E+00 + -0.6766263822113870E+00 -0.6833513422524340E+00 -0.6897586759282083E+00 -0.6958513916294100E+00 -0.7016318963634165E+00 + -0.7071020397392846E+00 -0.7122632455033970E+00 -0.7171166154132189E+00 -0.7216630115090188E+00 -0.7259031214369276E+00 + -0.7298375104167867E+00 -0.7334666626446351E+00 -0.7367910666835507E+00 -0.7398107650409456E+00 -0.7425268555598952E+00 + -0.7449393618108722E+00 -0.7470487599589724E+00 -0.7488555593770301E+00 -0.7503603132693473E+00 -0.7515636266841099E+00 + -0.7524661625108897E+00 -0.7530686459172391E+00 -0.7533718513852463E+00 -0.7533768363262632E+00 -0.7530840012877273E+00 + -0.7524921131814579E+00 -0.7515804606478103E+00 -0.7502792607163535E+00 -0.7484607038243816E+00 -0.7459636916668000E+00 + -0.7426298640002307E+00 -0.7383310820407341E+00 -0.7329796809143272E+00 -0.7265308852606689E+00 -0.7189742772379484E+00 + -0.7103273715872973E+00 -0.7006269201238819E+00 -0.6899214100415596E+00 -0.6782669062893683E+00 -0.6657222644919032E+00 + -0.6523467518594732E+00 -0.6381981822655980E+00 -0.6233317828078055E+00 -0.6077995440370048E+00 -0.5916499059655702E+00 + -0.5749276704151935E+00 -0.5576740608036261E+00 -0.5399269902646231E+00 -0.5217207897977505E+00 -0.5030872174417831E+00 + -0.4840550838961484E+00 -0.4646507036272260E+00 -0.4448981173724120E+00 -0.4248192982742891E+00 -0.4044343519155205E+00 + -0.3837617000246638E+00 -0.3628182478945590E+00 -0.3416195360896790E+00 -0.3201798773328464E+00 -0.2985124796289278E+00 + -0.2766295567505006E+00 -0.2545424272145054E+00 -0.2322616028428013E+00 -0.2097968679392537E+00 -0.1871573500428596E+00 + -0.1643515831380795E+00 -0.1413875641241673E+00 -0.1182728032683014E+00 -0.9501436929434126E-01 -0.7161893009339959E-01 + -0.4809278834346697E-01 -0.2444191370712145E-01 -0.6719720983290323E-03 0.2321164851959434E-01 0.4720381488457415E-01 + 0.7129962756731612E-01 0.9549440222479744E-01 0.1197836527451308E+00 0.1441630239601834E+00 0.1686284833950578E+00 + 0.1931760053643994E+00 0.2178017590483101E+00 0.2425020494231500E+00 0.2672733026214353E+00 0.2921120755096318E+00 + 0.3170150833336578E+00 0.3419794799317026E+00 0.3670036243095800E+00 0.3920881689533946E+00 0.4172368973967129E+00 + 0.4424568644116991E+00 0.4677578158531293E+00 0.4931511605824372E+00 0.5186488234682329E+00 0.5442622221402917E+00 + 0.5700014909585294E+00 0.5958749808858199E+00 0.6218890074764571E+00 0.6480477945330341E+00 0.6743535566999124E+00 + 0.7008066705597229E+00 0.7274058941450217E+00 0.7541486054898794E+00 0.7810310401956295E+00 0.8080485153972305E+00 + 0.8351956330126833E+00 0.8624664590130959E+00 0.8898546780165009E+00 0.9173537241128331E+00 0.9449568897488558E+00 + 0.9726574149554992E+00 0.1000448559348619E+01 0.1028323659291245E+01 0.1056276172451073E+01 0.1084299711777170E+01 + 0.1112388070685622E+01 0.1140535241011345E+01 0.1168735425061202E+01 0.1196983042901978E+01 0.1225272735836553E+01 + 0.1253599366863931E+01 0.1281958018782363E+01 0.1310343990479578E+01 0.1338752791854684E+01 0.1367180137734465E+01 + 0.1395621941077129E+01 0.1424074305699794E+01 0.1452533518717449E+01 0.1480996042842949E+01 0.1509458508665117E+01 + 0.1537917706995331E+01 0.1566370831749105E+01 0.1594814471963946E+01 0.1623246104160209E+01 0.1651663086958648E+01 + 0.1680062903840593E+01 0.1708443156854245E+01 0.1736801560607192E+01 0.1765135936545083E+01 0.1793444207513674E+01 + 0.1821724397566120E+01 0.1849974626590099E+01 0.1878193078402154E+01 0.1906378032515773E+01 0.1934527846644618E+01 + 0.1962640952792409E+01 0.1990715853560963E+01 0.2018751118665230E+01 0.2046745381644585E+01 0.2074697336759590E+01 + 0.2102605736064189E+01 0.2130469386642917E+01 0.2158287148004209E+01 0.2186057929620079E+01 0.2213780688603973E+01 + 0.2241454427518249E+01 0.2269078192303640E+01 0.2296651070323292E+01 0.2324172188515120E+01 0.2351640711701886E+01 + 0.2379055842086045E+01 0.2406416827027384E+01 0.2433722996957316E+01 0.2460973865437883E+01 0.2488169306929864E+01 + 0.2515309789359613E+01 0.2542396607347866E+01 0.2569432057808982E+01 0.2596419519065771E+01 0.2623363422536599E+01 + 0.2650269129601363E+01 0.2677142739909846E+01 0.2703990861443457E+01 0.2730820370008068E+01 0.2757638179775513E+01 + 0.2784451039495457E+01 0.2811265362580523E+01 0.2838087094127737E+01 0.2864921614243932E+01 0.2891773674664324E+01 + 0.2918647364337785E+01 0.2945546099121457E+01 0.2972472630730262E+01 0.2999429070422704E+01 0.3026416923420929E+01 + 0.3053437130653784E+01 0.3080490115009347E+01 0.3107575829842219E+01 0.3134693807981898E+01 0.3161843209919625E+01 + 0.3189022870212173E+01 0.3216231341437487E+01 0.3243466935272163E+01 0.3270727760447288E+01 0.3298011757479649E+01 + 0.3325316730182467E+01 0.3352640374035690E+01 0.3379980301550311E+01 0.3407334064796215E+01 0.3434699175284783E+01 + 0.3462073121407959E+01 0.3489453383638473E+01 0.3516837447692921E+01 0.3544222815852538E+01 0.3571607016626300E+01 + 0.3598987612930495E+01 0.3626362208945728E+01 0.3653728455799938E+01 0.3681084056213634E+01 0.3708426768230866E+01 + 0.3735754408148046E+01 0.3763064852741161E+01 0.3790356040882480E+01 0.3817625974627172E+01 0.3844872719842444E+01 + 0.3872094406443206E+01 0.3899289228291301E+01 0.3926455442808664E+01 0.3953591370348690E+01 0.3980695393365072E+01 + 0.4007765955412338E+01 0.4034801560008381E+01 0.4061800769384807E+01 0.4088762203148616E+01 0.4115684536874605E+01 + 0.4142566500646071E+01 0.4169406877558640E+01 0.4196204502200039E+01 0.4222958259116835E+01 0.4249667081277604E+01 + 0.4276329948540632E+01 0.4302945886132529E+01 0.4329513963143877E+01 0.4356033291046330E+01 0.4382503022235336E+01 + 0.4408922348601389E+01 0.4435290500132353E+01 0.4461606743549172E+01 0.4487870380976208E+01 0.4514080748647457E+01 + 0.4540237215649173E+01 0.4566339182699858E+01 0.4592386080967303E+01 0.4618377370923009E+01 0.4644312541233742E+01 + 0.4670191107689631E+01 0.4696012612168792E+01 0.4721776621637420E+01 0.4747482727184995E+01 0.4773130543093758E+01 + 0.4798719705941583E+01 0.4824249873737505E+01 0.4849720725089056E+01 0.4875131958400324E+01 0.4900483291100185E+01 + 0.4925774458899197E+01 0.4951005215074943E+01 0.4976175329784288E+01 0.5001284589402100E+01 0.5026332801140161E+01 + 0.5051319771276494E+01 0.5076245336511819E+01 0.5101109341973393E+01 0.5125911646062397E+01 0.5150652119931829E+01 + 0.5175330646984699E+01 0.5199947122391546E+01 0.5224501452626964E+01 0.5248993555024179E+01 0.5273423357346785E+01 + 0.5297790805953600E+01 0.5322095829385203E+01 0.5346338394872665E+01 0.5370518467903519E+01 0.5394636022497286E+01 + 0.5418691040867781E+01 0.5442683513098503E+01 0.5466613436830711E+01 0.5490480816963549E+01 0.5514285665365584E+01 + 0.5538028000597862E+01 0.5561707847647368E+01 0.5585325237670777E+01 0.5608880207748139E+01 0.5632372800646136E+01 + 0.5655803064590023E+01 0.5679171053044746E+01 0.5702476824504079E+01 0.5725720442287942E+01 0.5748901974347438E+01 + 0.5772021493077228E+01 0.5795079075135007E+01 0.5818074801267764E+01 0.5841008756144801E+01 0.5863881028196719E+01 + 0.5886691709361872E+01 0.5909440895975128E+01 0.5932128683720454E+01 0.5954755179911128E+01 0.5977320485443878E+01 + 0.5999824709469358E+01 0.6022267962734361E+01 0.6044650358660738E+01 0.6066972013230976E+01 0.6089233044877606E+01 + 0.6111433574377054E+01 0.6133573724746905E+01 0.6155653621147478E+01 0.6177673390786589E+01 0.6199633162827851E+01 + 0.6221533068302496E+01 0.6243373240024188E+01 0.6265153812506977E+01 0.6286874921886278E+01 0.6308536705842656E+01 + 0.6330139303528365E+01 0.6351682855496508E+01 0.6373167503632674E+01 0.6394593391089307E+01 0.6415960662221997E+01 + 0.6437269462528379E+01 0.6458519938589133E+01 0.6479712238010886E+01 0.6500846509371517E+01 0.6521922902167027E+01 + 0.6542941566760541E+01 0.6563902654333011E+01 0.6584806316835689E+01 0.6605652706944284E+01 0.6626441978014737E+01 + 0.6647174088072036E+01 0.6667849577716816E+01 0.6688468412040860E+01 0.6709030746709217E+01 0.6729536737868406E+01 + 0.6749986542110525E+01 0.6770380316439014E+01 0.6790718218235369E+01 0.6811000456475160E+01 0.6831227079554464E+01 + 0.6851398303748420E+01 0.6871514287649720E+01 0.6891575190080648E+01 0.6911581170066203E+01 0.6931532386808209E+01 + 0.6951428999660269E+01 0.6971271168103572E+01 0.6991059051723765E+01 0.7010792810188176E+01 0.7030472603224527E+01 + 0.7050098590599536E+01 0.7069670932099115E+01 0.7089189787508612E+01 0.7108655316594129E+01 0.7128067679084379E+01 + 0.7147427034653132E+01 0.7166733542902411E+01 0.7185987363346015E+01 0.7205188655394117E+01 0.7224337578337899E+01 + 0.7243434291334958E+01 0.7262478953395287E+01 0.7281471723367670E+01 0.7300412759926576E+01 0.7319302221559616E+01 + 0.7338140266555139E+01 0.7356927052990867E+01 0.7375662738722378E+01 0.7394347481372199E+01 0.7412981438319438E+01 + 0.7431564766689641E+01 0.7450097623345021E+01 0.7468580164875283E+01 0.7487012547588363E+01 0.7505394927501915E+01 + 0.7523727460334936E+01 0.7542010301499733E+01 0.7560243606094313E+01 0.7578427528894725E+01 0.7596562224348212E+01 + 0.7614647846566118E+01 0.7632684549317478E+01 0.7650672486022634E+01 0.7668611809747173E+01 0.7686502673196021E+01 + 0.7704345228708073E+01 0.7722139628250660E+01 0.7739886023414384E+01 0.7757584565408455E+01 0.7775235405055646E+01 + 0.7792838692788044E+01 0.7810394578642622E+01 0.7827903212257197E+01 0.7845364742866390E+01 0.7862779319297943E+01 + 0.7880147089969217E+01 0.7897468202883433E+01 0.7914742805626958E+01 0.7931971045365675E+01 0.7949153068842364E+01 + 0.7966289022373804E+01 0.7983379051848088E+01 0.8000423302722167E+01 0.8017421920019366E+01 0.8034375048327233E+01 + 0.8051282831795312E+01 0.8068145414133273E+01 0.8084962938608882E+01 0.8101735548046269E+01 0.8118463384824164E+01 + 0.8135146590874683E+01 0.8151785307681390E+01 0.8168379676278345E+01 0.8184929837248552E+01 0.8201435930723028E+01 + 0.8217898096379580E+01 0.8234316473441851E+01 0.8250691200678498E+01 0.8267022416402313E+01 0.8283310258469461E+01 + 0.8299554864278941E+01 0.8315756370771805E+01 0.8331914914430893E+01 0.8348030631280192E+01 0.8364103656884673E+01 + 0.8380134126349787E+01 0.8396122174321329E+01 0.8412067934985277E+01 0.8427971542067645E+01 0.8443833128834413E+01 + 0.8459652828091619E+01 0.8475430772185273E+01 0.8491167093001646E+01 0.8506861921967246E+01 0.8522515390049147E+01 + 0.8538127627755209E+01 0.8553698765134389E+01 0.8569228931777127E+01 0.8584718256815695E+01 0.8600166868924553E+01 + 0.8615574896321021E+01 0.8630942466765738E+01 0.8646269707563008E+01 0.8661556745561711E+01 0.8676803707155621E+01 + 0.8692010718284379E+01 0.8707177904433900E+01 0.8722305390637324E+01 0.8737393301475592E+01 0.8752441761078339E+01 + 0.8767450893124774E+01 0.8782420820844322E+01 0.8797351667017651E+01 0.8812243553977586E+01 0.8827096603609940E+01 + 0.8841910937354429E+01 0.8856686676205864E+01 0.8871423940714820E+01 0.8886122850988944E+01 0.8900783526693864E+01 + 0.8915406087054141E+01 0.8929990650854535E+01 0.8944537336441012E+01 0.8959046261721827E+01 0.8973517544168701E+01 + 0.8987951300817869E+01 0.9002347648271487E+01 0.9016706702698437E+01 0.9031028579835858E+01 0.9045313394990188E+01 + 0.9059561263038376E+01 0.9073772298429056E+01 0.9087946615184084E+01 0.9102084326899423E+01 0.9116185546746657E+01 + 0.9130250387474085E+01 0.9144278961408215E+01 0.9158271380454892E+01 0.9172227756100682E+01 0.9186148199414212E+01 + 0.9200032821047387E+01 0.9213881731236844E+01 0.9227695039805166E+01 0.9241472856162442E+01 0.9255215289307372E+01 + 0.9268922447828803E+01 0.9282594439906916E+01 0.9296231373314885E+01 0.9309833355419986E+01 0.9323400493185019E+01 + 0.9336932882359978E+01 0.9350430594893881E+01 0.9363893783342821E+01 0.9377322553011272E+01 0.9390717008807609E+01 + 0.9404077255245511E+01 0.9417403396445167E+01 0.9430695536134984E+01 0.9443953777652798E+01 0.9457178223947256E+01 + 0.9470368977579316E+01 0.9483526140723573E+01 0.9496649815169690E+01 0.9509740102323899E+01 0.9522797103210273E+01 + 0.9535822238420437E+01 0.9548812165768359E+01 0.9561769891801452E+01 0.9574694732427433E+01 0.9587586786767478E+01 + 0.9600446153569266E+01 0.9613272931208536E+01 0.9626067217690245E+01 0.9638829110650304E+01 0.9651558707356724E+01 + 0.9664256104711166E+01 0.9676921399250290E+01 0.9689554687147089E+01 0.9702157469174860E+01 0.9714727037387689E+01 + 0.9727264885308301E+01 0.9739771107669302E+01 0.9752245798846879E+01 0.9764689052861872E+01 0.9777100963381457E+01 + 0.9789481623720420E+01 0.9801831126842281E+01 0.9814149565361319E+01 0.9826437031543161E+01 0.9838693617306955E+01 + 0.9850919414226038E+01 0.9863114513529872E+01 0.9875279006105066E+01 0.9887412982496855E+01 0.9899516532910610E+01 + 0.9911589747212901E+01 0.9923632714933214E+01 0.9935645525264956E+01 0.9947628267067159E+01 0.9959581028865557E+01 + 0.9971503898854007E+01 0.9983396964895977E+01 0.9995260314525778E+01 0.1000709403494981E+02 0.1001889821304812E+02 + 0.1003067293537552E+02 0.1004241828816303E+02 0.1005413435731925E+02 0.1006582122843160E+02 0.1007747898676759E+02 + 0.1008910771727630E+02 0.1010070750458943E+02 0.1011227843302306E+02 0.1012382058657841E+02 0.1013533404894347E+02 + 0.1014681890349423E+02 0.1015827523329602E+02 0.1016970312110463E+02 0.1018110264936784E+02 0.1019247390022638E+02 + 0.1020381695551557E+02 0.1021513189676633E+02 0.1022641880520652E+02 0.1023767776176225E+02 0.1024890884705905E+02 + 0.1026011214142316E+02 0.1027128772488293E+02 0.1028243567716970E+02 0.1029355607771946E+02 0.1030464900567390E+02 + 0.1031571453988140E+02 0.1032675275889879E+02 0.1033776374099216E+02 0.1034874756413813E+02 0.1035970430602517E+02 + 0.1037063404405489E+02 0.1038153685534300E+02 0.1039241281672065E+02 0.1040326200473567E+02 0.1041408449565369E+02 + 0.1042488036545932E+02 0.1043564968985735E+02 0.1044639254427403E+02 0.1045710900385802E+02 0.1046779914348181E+02 + 0.1047846303774262E+02 0.1048910076096391E+02 0.1049971238719612E+02 0.1051029799021812E+02 0.1052085764353829E+02 + 0.1053139142039568E+02 0.1054189939376099E+02 0.1055238163633786E+02 0.1056283822056399E+02 0.1057326921861215E+02 + 0.1058367470239147E+02 0.1059405474354847E+02 0.1060440941346801E+02 0.1061473878327465E+02 0.1062504292383371E+02 + 0.1063532190575210E+02 0.1064557579937992E+02 0.1065580467481084E+02 0.1066600860188387E+02 0.1067618765018412E+02 + 0.1068634188904373E+02 0.1069647138754325E+02 0.1070657621451248E+02 0.1071665643853165E+02 0.1072671212793241E+02 + 0.1073674335079890E+02 0.1074675017496875E+02 0.1075673266803417E+02 0.1076669089734308E+02 0.1077662492999989E+02 + 0.1078653483286685E+02 0.1079642067256462E+02 0.1080628251547384E+02 0.1081612042773567E+02 0.1082593447525316E+02 + 0.1083572472369191E+02 0.1084549123848135E+02 0.1085523408481566E+02 0.1086495332765466E+02 0.1087464903172486E+02 + 0.1088432126152055E+02 0.1089397008130446E+02 0.1090359555510911E+02 0.1091319774673763E+02 0.1092277671976472E+02 + 0.1093233253753738E+02 0.1094186526317629E+02 0.1095137495957662E+02 0.1096086168940853E+02 0.1097032555892928E+02 + 0.1097976666590150E+02 0.1098918498743821E+02 0.1099858058553585E+02 0.1100795352196447E+02 0.1101730385826855E+02 + 0.1102663165576839E+02 0.1103593697556089E+02 0.1104521987852084E+02 0.1105448042530153E+02 0.1106371867633628E+02 + 0.1107293247783943E+02 0.1108212631163812E+02 0.1109129802968301E+02 0.1110044769153667E+02 0.1110957535654645E+02 + 0.1111868108384563E+02 0.1112776493235422E+02 0.1113682696078008E+02 0.1114586722761977E+02 0.1115488579115973E+02 + 0.1116388270947705E+02 0.1117285804044050E+02 0.1118181184171143E+02 0.1119074417074485E+02 0.1119965508479030E+02 + 0.1120854464089276E+02 0.1121741289589355E+02 0.1122625990643143E+02 0.1123508572894327E+02 0.1124389041966516E+02 + 0.1125267403463331E+02 0.1126143662968485E+02 0.1127017826045877E+02 0.1127889898239682E+02 0.1128759885074458E+02 + 0.1129627792055189E+02 0.1130493624667420E+02 0.1131357388377320E+02 0.1132219088631773E+02 0.1133078730858470E+02 + 0.1133936320465983E+02 0.1134791862843856E+02 0.1135645363362708E+02 0.1136496827374269E+02 0.1137346260211521E+02 + 0.1138193667188745E+02 0.1139039053601605E+02 0.1139882424727257E+02 0.1140723785824395E+02 0.1141563142133352E+02 + 0.1142400498876172E+02 0.1143235861256712E+02 0.1144069234460682E+02 0.1144900623655768E+02 0.1145730033991675E+02 + 0.1146557470600226E+02 0.1147382938595421E+02 0.1148206443073531E+02 0.1149027989113191E+02 0.1149847581775414E+02 + 0.1150665226103736E+02 0.1151480927124249E+02 0.1152294689845698E+02 0.1153106519259537E+02 0.1153916420340013E+02 + 0.1154724398044246E+02 0.1155530457312277E+02 0.1156334603067165E+02 0.1157136840215052E+02 0.1157937173645239E+02 + 0.1158735608230234E+02 0.1159532148825857E+02 0.1160326800271278E+02 0.1161119567389111E+02 0.1161910454985465E+02 + 0.1162699467850026E+02 0.1163486610756115E+02 0.1164271888460782E+02 0.1165055305704804E+02 0.1165836867212856E+02 + 0.1166616577693494E+02 0.1167394441839248E+02 0.1168170464326700E+02 0.1168944649816522E+02 0.1169717002953568E+02 + 0.1170487528366932E+02 0.1171256230670009E+02 0.1172023114460535E+02 0.1172788184320704E+02 0.1173551444817181E+02 + 0.1174312900501185E+02 0.1175072555908556E+02 0.1175830415559807E+02 0.1176586483960187E+02 0.1177340765599744E+02 + 0.1178093264953387E+02 0.1178843986480948E+02 0.1179592934627236E+02 0.1180340113822094E+02 0.1181085528480470E+02 + 0.1181829166269570E+02 0.1182570985953448E+02 0.1183311348562248E+02 0.1184049703658763E+02 0.1184786329267578E+02 + 0.1185521227437533E+02 0.1186254400205932E+02 0.1186985849598701E+02 0.1187715577630568E+02 0.1188443611784194E+02 + 0.1189169878246886E+02 0.1189894457481569E+02 0.1190617328225404E+02 0.1191338494670332E+02 0.1192057960986771E+02 + 0.1192775731323726E+02 0.1193491809808902E+02 0.1194206200548831E+02 0.1194918907628982E+02 0.1195629935113887E+02 + 0.1196339287047247E+02 0.1197046967452045E+02 0.1197752980330694E+02 0.1198457329665118E+02 0.1199160019416887E+02 + 0.1199861053527344E+02 0.1200560435917693E+02 0.1201258170489155E+02 0.1201954261123063E+02 0.1202648711680959E+02 + 0.1203341526004761E+02 0.1204032707916849E+02 0.1204722261220184E+02 0.1205410189698429E+02 0.1206096497116060E+02 + 0.1206781187218495E+02 0.1207464559802799E+02 0.1208146027002577E+02 0.1208825888009797E+02 0.1209504146494779E+02 + 0.1210180806109399E+02 0.1210855896537541E+02 0.1211529410378007E+02 0.1212201340030601E+02 0.1212871689296240E+02 + 0.1213540461963384E+02 0.1214207661808061E+02 0.1214873292593939E+02 0.1215537358072345E+02 0.1216199861982349E+02 + 0.1216860808050769E+02 0.1217520199992239E+02 0.1218178041509279E+02 0.1218834336292295E+02 0.1219489088019657E+02 + 0.1220142300357730E+02 0.1220793976960926E+02 0.1221444121471769E+02 0.1222092737520902E+02 0.1222739828727144E+02 + 0.1223385398697564E+02 0.1224029451027501E+02 0.1224671989300593E+02 0.1225313017088853E+02 0.1225952537952718E+02 + 0.1226590555441035E+02 0.1227227073091185E+02 0.1227862094429078E+02 0.1228495622969180E+02 0.1229127662214604E+02 + 0.1229758215657148E+02 0.1230387286777276E+02 0.1231014879044237E+02 0.1231640995916075E+02 0.1232265640839672E+02 + 0.1232888817250763E+02 0.1233510528574038E+02 0.1234130778223132E+02 0.1234749569600697E+02 0.1235366906098424E+02 + 0.1235982791097082E+02 0.1236597227966591E+02 0.1237210220066028E+02 0.1237821770743661E+02 0.1238431883337027E+02 + 0.1239040561172962E+02 0.1239647807567605E+02 0.1240253625826483E+02 0.1240858019244517E+02 0.1241460991106090E+02 + 0.1242062544685069E+02 0.1242662683244833E+02 0.1243261410038329E+02 0.1243858728308130E+02 0.1244454641286415E+02 + 0.1245049152195065E+02 0.1245642264245671E+02 0.1246233980639583E+02 0.1246824304567928E+02 0.1247413239211681E+02 + 0.1248000787741680E+02 0.1248586953318652E+02 0.1249171739093289E+02 0.1249755148206230E+02 0.1250337183788155E+02 + 0.1250917848959775E+02 0.1251497146831911E+02 0.1252075080505461E+02 0.1252651653071523E+02 0.1253226867611377E+02 + 0.1253800727196519E+02 0.1254373234888717E+02 0.1254944393740030E+02 0.1255514206792864E+02 0.1256082677079984E+02 + 0.1256649807624557E+02 0.1257215601440174E+02 0.1257780061530919E+02 0.1258343190891375E+02 0.1258904992506636E+02 + 0.1259465469352414E+02 0.1260024624394981E+02 0.1260582460591276E+02 0.1261138980888892E+02 0.1261694188226133E+02 + 0.1262248085532045E+02 0.1262800675726433E+02 0.1263351961719898E+02 0.1263901946413904E+02 0.1264450285631671E+02 + 0.1264997675865174E+02 0.1265543773449255E+02 0.1266088581249014E+02 0.1266632102120516E+02 0.1267174338910899E+02 + 0.1267715294458313E+02 0.1268254971592008E+02 0.1268793373132342E+02 0.1269330501890832E+02 0.1269866360670164E+02 + 0.1270400952264229E+02 0.1270934279458158E+02 0.1271466345028335E+02 0.1271997151742474E+02 0.1272526702359572E+02 + 0.1273054999630008E+02 0.1273582044112639E+02 0.1274107829127974E+02 0.1274632368547512E+02 0.1275155665077283E+02 + 0.1275677721414707E+02 0.1276198540248610E+02 0.1276718124259236E+02 0.1277236476118314E+02 0.1277753598489035E+02 + 0.1278269494026117E+02 0.1278784165375827E+02 0.1279297615176009E+02 0.1279809846056095E+02 0.1280320860637152E+02 + 0.1280830661531907E+02 0.1281339251344765E+02 0.1281846632671840E+02 0.1282352808100990E+02 0.1282857780211833E+02 + 0.1283361551575781E+02 0.1283864124756066E+02 0.1284365502307763E+02 0.1284865686777834E+02 0.1285364680705105E+02 + 0.1285862486620364E+02 0.1286359107046338E+02 0.1286854544497717E+02 0.1287348801481206E+02 0.1287841880495558E+02 + 0.1288333784031538E+02 0.1288824514572031E+02 0.1289314074592015E+02 0.1289802466558600E+02 0.1290289692931037E+02 + 0.1290775756160805E+02 0.1291260658691528E+02 0.1291744402959128E+02 0.1292226991391726E+02 0.1292708426409754E+02 + 0.1293188710425972E+02 0.1293667845845432E+02 0.1294145835065556E+02 0.1294622680476155E+02 0.1295098384459444E+02 + 0.1295572949390062E+02 0.1296046377635092E+02 0.1296518671554123E+02 0.1296989833499209E+02 0.1297459865814951E+02 + 0.1297928770838488E+02 0.1298396550899552E+02 0.1298863208320455E+02 0.1299328745416105E+02 0.1299793164494091E+02 + 0.1300256467854653E+02 0.1300718657790715E+02 0.1301179736587904E+02 0.1301639706524610E+02 0.1302098569871943E+02 + 0.1302556328893826E+02 0.1303012985846953E+02 0.1303468542980876E+02 0.1303923002537965E+02 0.1304376366753469E+02 + 0.1304828637855533E+02 0.1305279818065219E+02 0.1305729909596507E+02 0.1306178914656352E+02 0.1306626835444681E+02 + 0.1307073674154426E+02 0.1307519432971517E+02 0.1307964114074970E+02 0.1308407719636832E+02 0.1308850251822266E+02 + 0.1309291712789514E+02 0.1309732104689959E+02 0.1310172496590404E+02 0.1310612888490850E+02 0.1311053280391295E+02 + 0.0000000000000000E+00 0.2350503764662797E-10 0.1452741565148498E-08 0.1598024605657181E-07 0.8670887247915710E-07 + 0.3194268290355064E-06 0.9210999532108705E-06 0.2243032243257230E-05 0.4826533736759059E-05 0.9449280963997414E-05 + 0.1717086310497067E-04 0.2937628005930804E-04 0.4781640004850213E-04 0.7464459701436190E-04 0.1124489746320072E-03 + 0.1642797466831127E-03 0.2336714851009560E-03 0.3246600692852489E-03 0.4417942752036344E-03 0.5901420321021944E-03 + 0.7752914499470295E-03 0.1003346783485080E-02 0.1280919550391384E-02 0.1615115062592291E-02 0.2013514662642524E-02 + 0.2484153982012019E-02 0.3035497556237696E-02 0.3676410143962806E-02 0.4416125103690986E-02 0.5264210184320288E-02 + 0.6230531083824742E-02 0.7325213125386473E-02 0.8558601392363368E-02 0.9941219653166928E-02 0.1148372839483666E-01 + 0.1319688227020127E-01 0.1509148724834461E-01 0.1717835774193908E-01 0.1946827396813322E-01 0.2197193978231332E-01 + 0.2469994120640449E-01 0.2766270585561205E-01 0.3087046344978465E-01 0.3433320757803945E-01 0.3806065886804223E-01 + 0.4206222969448004E-01 0.4634699054488188E-01 0.5092363814510472E-01 0.5580046543156136E-01 0.6098533344267084E-01 + 0.6648564518809444E-01 0.7230832154110638E-01 0.7845977918695805E-01 0.8494591064833676E-01 0.9177206639800155E-01 + 0.9894303905839608E-01 0.1064630496784886E+00 0.1143357360692630E+00 0.1225641431711653E+00 0.1311507154193881E+00 + 0.1400972910661206E+00 0.1494050984128002E+00 0.1590747538999337E+00 0.1691062619971989E+00 0.1794990168322592E+00 + 0.1902518054930074E+00 0.2013628129347618E+00 0.2128296284212524E+00 0.2246492534260200E+00 0.2368181109190946E+00 + 0.2493320559624748E+00 0.2621863875369867E+00 0.2753758615225286E+00 0.2888947047534727E+00 0.3027366300710904E+00 + 0.3168948522952475E+00 0.3313621050382702E+00 0.3461306582847914E+00 0.3611923366625136E+00 0.3765385383301647E+00 + 0.3921602544104397E+00 0.4080480888974157E+00 0.4241922789697600E+00 0.4405827156430124E+00 0.4572089646963136E+00 + 0.4740602878111100E+00 0.4911256638616449E+00 0.5083938102993529E+00 0.5258532045756759E+00 0.5434921055502246E+00 + 0.5612985748336912E+00 0.5792604980173683E+00 0.5973656057436424E+00 0.6156014945742982E+00 0.6339556476159732E+00 + 0.6524154548645443E+00 0.6709682332326954E+00 0.6896012462273114E+00 0.7083017232457365E+00 0.7270568784622643E+00 + 0.7458539292785299E+00 0.7646801143137046E+00 0.7835227109126022E+00 0.8023690521519213E+00 0.8212065433269309E+00 + 0.8400226779029110E+00 0.8588050529176166E+00 0.8775413838228915E+00 0.8962195187553934E+00 0.9148274522281129E+00 + 0.9333533382360560E+00 0.9517855027710543E+00 0.9701124557421923E+00 0.9883229022998167E+00 0.1006405753562465E+01 + 0.1024350136747383E+01 0.1042145404706545E+01 0.1059781144871260E+01 0.1077247187609600E+01 0.1094533614001869E+01 + 0.1111630763040373E+01 0.1128529238260637E+01 0.1145219913812065E+01 0.1161693939976847E+01 0.1177942748146633E+01 + 0.1193958055267189E+01 0.1209731867761823E+01 0.1225256484945006E+01 0.1240524501938026E+01 0.1255528812099049E+01 + 0.1270262608980346E+01 0.1284719387825761E+01 0.1298892946621899E+01 0.1312777386716678E+01 0.1326367113019209E+01 + 0.1339656833795096E+01 0.1352641560071424E+01 0.1365316604665792E+01 0.1377677580853886E+01 0.1389720400690019E+01 + 0.1401441272995214E+01 0.1412836701027270E+01 0.1423903479847286E+01 0.1434638693397013E+01 0.1445039711301291E+01 + 0.1455104185409776E+01 0.1464830046091919E+01 0.1474215498299109E+01 0.1483259017407622E+01 0.1491959344855860E+01 + 0.1500315483589179E+01 0.1508326693325296E+01 0.1515992485653126E+01 0.1523312618977543E+01 0.1530287093322397E+01 + 0.1536916145003750E+01 0.1543200241185077E+01 0.1549140074325868E+01 0.1554736556534737E+01 0.1559990813837915E+01 + 0.1564904180373601E+01 0.1569478192522416E+01 0.1573714582983838E+01 0.1577615274808202E+01 0.1581182375393509E+01 + 0.1584418170455991E+01 0.1587325117983052E+01 0.1589905842176854E+01 0.1592163127396545E+01 0.1594099912106772E+01 + 0.1595719282839819E+01 0.1597024468178396E+01 0.1598018832765788E+01 0.1598705871349761E+01 0.1599089202866354E+01 + 0.1599172564569312E+01 0.1598959806210704E+01 0.1598454884277914E+01 0.1597661856291940E+01 0.1596584875171653E+01 + 0.1595228183668366E+01 0.1593596108874842E+01 0.1591693056812536E+01 0.1589523507100701E+01 0.1587092007710641E+01 + 0.1584403169808198E+01 0.1581461662687349E+01 0.1578272208797470E+01 0.1574839578866685E+01 0.1571168587123450E+01 + 0.1567264086618331E+01 0.1563130964647693E+01 0.1558774138280876E+01 0.1554198549992189E+01 0.1549409163398889E+01 + 0.1544410959106127E+01 0.1539208930659677E+01 0.1533808080607080E+01 0.1528213416667707E+01 0.1522429948012042E+01 + 0.1516462681650386E+01 0.1510316618931021E+01 0.1503996752147732E+01 0.1497508061256460E+01 0.1490855510700755E+01 + 0.1484044046345540E+01 0.1477078592518635E+01 0.1469964049159342E+01 0.1462705289073315E+01 0.1455307155292826E+01 + 0.1447774458541496E+01 0.1440111974802394E+01 0.1432324442988392E+01 0.1424416562713602E+01 0.1416392992164560E+01 + 0.1408258346069873E+01 0.1400017193766902E+01 0.1391674057364033E+01 0.1383233409997026E+01 0.1374699674177898E+01 + 0.1366077220234727E+01 0.1357370364840755E+01 0.1348583369631108E+01 0.1339720439905439E+01 0.1330785723414737E+01 + 0.1321783309230582E+01 0.1312717226695031E+01 0.1303591444449351E+01 0.1294409869539786E+01 0.1285176346598528E+01 + 0.1275894657098056E+01 0.1266568518676988E+01 0.1257201584535619E+01 0.1247797442899263E+01 0.1238359616547584E+01 + 0.1228891562408019E+01 0.1219396671211496E+01 0.1209878267208578E+01 0.1200339607944202E+01 0.1190783884089205E+01 + 0.1181214219326823E+01 0.1171633670292365E+01 0.1162045226564264E+01 0.1152451810704780E+01 0.1142856278348570E+01 + 0.1133261418337408E+01 0.1123669952899346E+01 0.1114084537870646E+01 0.1104507762958775E+01 0.1094942152044870E+01 + 0.1085390163524009E+01 0.1075854190681740E+01 0.1066336562105254E+01 0.1056839542127690E+01 0.1047365331304049E+01 + 0.1037916066917227E+01 0.1028493823512701E+01 0.1019100613460447E+01 0.1009738387542688E+01 0.1000409035566070E+01 + 0.9911143869969610E+00 0.9818562116185301E+00 0.9726362202083267E+00 0.9634560652350970E+00 0.9543173415736288E+00 + 0.9452215872364120E+00 0.9361702841209427E+00 0.9271648587715566E+00 0.9182066831546644E+00 0.9092970754463097E+00 + 0.9004373008310244E+00 0.8916285723109384E+00 0.8828720515241635E+00 0.8741688495714935E+00 0.8655200278504954E+00 + 0.8569265988960664E+00 0.8483895272266132E+00 0.8399097301949807E+00 0.8314880788433289E+00 0.8231253987611650E+00 + 0.8148224709457564E+00 0.8065800326641964E+00 0.7983987783164219E+00 0.7902793602984723E+00 0.7822223898653531E+00 + 0.7742284379928720E+00 0.7662980362378170E+00 0.7584316775959118E+00 0.7506298173569868E+00 0.7428928739568187E+00 + 0.7352212298251275E+00 0.7276152322292518E+00 0.7200751941130188E+00 0.7126013949303633E+00 0.7051940814732806E+00 + 0.6978534686936988E+00 0.6905797405188852E+00 0.6833730506600221E+00 0.6762335234136188E+00 0.6691612544554096E+00 + 0.6621563116264519E+00 0.6552187357111161E+00 0.6483485412067125E+00 0.6415457170844840E+00 0.6348102275417313E+00 + 0.6281420127448483E+00 0.6215409895630656E+00 0.6150070522926947E+00 0.6085400733717113E+00 0.6021399040845107E+00 + 0.5958063752566826E+00 0.5895392979396676E+00 0.5833384640851877E+00 0.5772036472093250E+00 0.5711346030461549E+00 + 0.5651310701908592E+00 0.5591927707322315E+00 0.5533194108745153E+00 0.5475106815485299E+00 0.5417662590120353E+00 + 0.5360858054393003E+00 0.5304689694998603E+00 0.5249153869264497E+00 0.5194246810720941E+00 0.5139964634563777E+00 + 0.5086303343008993E+00 0.5033258830539155E+00 0.4980826889042317E+00 0.4929003212843441E+00 0.4877783403628898E+00 + 0.4827162975264554E+00 0.4777137358507827E+00 0.4727701905614446E+00 0.4678851894840552E+00 0.4630582534840750E+00 + 0.4582888968962981E+00 0.4535766279440972E+00 0.4489209491485098E+00 0.4443213577272558E+00 0.4397773459837845E+00 + 0.4352884016864413E+00 0.4308540084378585E+00 0.4264736460346724E+00 0.4221467908176804E+00 0.4178729160125361E+00 + 0.4136514920611062E+00 0.4094819869436024E+00 0.4053638664915989E+00 0.4012965946920645E+00 0.3972796339825281E+00 + 0.3933124455374964E+00 0.3893944895462572E+00 0.3855252254821869E+00 0.3817041123636960E+00 0.3779306090069412E+00 + 0.3742041742704262E+00 0.3705242672916375E+00 0.3668903477158274E+00 0.3633018759170965E+00 0.3597583132118892E+00 + 0.3562591220650529E+00 0.3528037662885790E+00 0.3493917112331675E+00 0.3460224239727477E+00 0.3426953734820877E+00 + 0.3394100308076194E+00 0.3361658692316251E+00 0.3329623644299036E+00 0.3297989946230563E+00 0.3266752407215223E+00 + 0.3235905864644950E+00 0.3205445185528428E+00 0.3175365267761750E+00 0.3145661041341699E+00 0.3116327469522978E+00 + 0.3087359549920661E+00 0.3058752315559112E+00 0.3030500835868565E+00 0.3002600217630693E+00 0.2975045605874296E+00 + 0.2947832184722352E+00 0.2920955178191660E+00 0.2894409850946181E+00 0.2868191509005325E+00 0.2842295500408273E+00 + 0.2816717215835535E+00 0.2791452089188812E+00 0.2766495598130334E+00 0.2741843264582723E+00 0.2717490655190478E+00 + 0.2693433381744174E+00 0.2669667101568407E+00 0.2646187517874495E+00 0.2622990380079024E+00 0.2600071484089175E+00 + 0.2577426672555859E+00 0.2555051835095635E+00 0.2532942908482358E+00 0.2511095876809479E+00 0.2489506771623981E+00 + 0.2468171672032794E+00 0.2447086704782614E+00 0.2426248044314016E+00 0.2405651912790701E+00 0.2385294580104723E+00 + 0.2365172363858518E+00 0.2345281629324596E+00 0.2325618789383613E+00 0.2306180304441682E+00 0.2286962682327625E+00 + 0.2267962478170977E+00 0.2249176294261405E+00 0.2230600779890333E+00 0.2212232631175415E+00 0.2194068590868594E+00 + 0.2176105448148379E+00 0.2158340038397009E+00 0.2140769242963177E+00 0.2123389988910903E+00 0.2106199248755169E+00 + 0.2089194040184958E+00 0.2072371425774233E+00 0.2055728512681448E+00 0.2039262452338156E+00 0.2022970440127238E+00 + 0.2006849715051299E+00 0.1990897559391716E+00 0.1975111298358903E+00 0.1959488299734197E+00 0.1944025973503926E+00 + 0.1928721771486053E+00 0.1913573186949898E+00 0.1898577754229339E+00 0.1883733048329959E+00 0.1869036684530497E+00 + 0.1854486317979078E+00 0.1840079643284546E+00 0.1825814394103312E+00 0.1811688342722097E+00 0.1797699299636905E+00 + 0.1783845113128567E+00 0.1770123668835237E+00 0.1756532889322104E+00 0.1743070733648679E+00 0.1729735196933954E+00 + 0.1716524309919727E+00 0.1703436138532354E+00 0.1690468783443259E+00 0.1677620379628421E+00 0.1664889095927099E+00 + 0.1652273134600088E+00 0.1639770730887696E+00 0.1627380152567701E+00 0.1615099699513493E+00 0.1602927703252654E+00 + 0.1590862526526123E+00 0.1578902562848216E+00 0.1567046236067624E+00 0.1555291999929633E+00 0.1543638337639696E+00 + 0.1532083761428563E+00 0.1520626812119101E+00 0.1509266058694993E+00 0.1498000097871428E+00 0.1486827553667961E+00 + 0.1475747076983654E+00 0.1464757345174640E+00 0.1453857061634240E+00 0.1443044955375730E+00 0.1432319780617891E+00 + 0.1421680316373446E+00 0.1411125366040483E+00 0.1400653756996955E+00 0.1390264340198362E+00 0.1379955989778688E+00 + 0.1369727602654673E+00 0.1359578098133525E+00 0.1349506417524104E+00 0.1339511523751675E+00 0.1329592400976282E+00 + 0.1319748054214808E+00 0.1309977508966756E+00 0.1300279810843844E+00 0.1290654025203415E+00 0.1281099236785748E+00 + 0.1271614549355259E+00 0.1262199085345698E+00 0.1252851985509296E+00 0.1243572408569959E+00 0.1234359530880505E+00 + 0.1225212546083961E+00 0.1216130664778956E+00 0.1207113114189237E+00 0.1198159137837281E+00 0.1189267995222068E+00 + 0.1180438961500998E+00 0.1171671327175942E+00 0.1162964397783483E+00 0.1154317493589289E+00 0.1145729949286663E+00 + 0.1137201113699259E+00 0.1128730349487938E+00 0.1120317032861783E+00 0.1111960553293266E+00 0.1103660313237529E+00 + 0.1095415727855802E+00 0.1087226224742927E+00 0.1079091243658972E+00 0.1071010236264925E+00 0.1062982665862460E+00 + 0.1055008007137718E+00 0.1047085745909144E+00 0.1039215378879289E+00 0.1031396413390617E+00 0.1023628367185243E+00 + 0.1015910768168619E+00 0.1008243154177097E+00 0.1000625072749386E+00 0.9930560809018427E-01 0.9855357449075822E-01 + 0.9780636400793745E-01 0.9706393505562982E-01 0.9632624690941162E-01 0.9559325968593356E-01 0.9486493432269383E-01 + 0.9414123255817297E-01 0.9342211691232764E-01 0.9270755066744044E-01 0.9199749784932158E-01 0.9129192320885827E-01 + 0.9059079220391024E-01 0.8989407098154546E-01 0.8920172636061409E-01 0.8851372581465511E-01 0.8783003745513447E-01 + 0.8715063001500779E-01 0.8647547283260665E-01 0.8580453583584287E-01 0.8513778952672810E-01 0.8447520496620298E-01 + 0.8381675375927530E-01 0.8316240804045885E-01 0.8251214045951316E-01 0.8186592416747822E-01 0.8122373280299988E-01 + 0.8058554047894315E-01 0.7995132176928955E-01 0.7932105169631275E-01 0.7869470571803144E-01 0.7807225971593283E-01 + 0.7745368998296467E-01 0.7683897321179178E-01 0.7622808648331135E-01 0.7562100725542614E-01 0.7501771335206921E-01 + 0.7441818295247755E-01 0.7382239458071076E-01 0.7323032709541087E-01 0.7264195967979867E-01 0.7205727183190487E-01 + 0.7147624335502985E-01 0.7089885434843042E-01 0.7032508519822850E-01 0.6975491656853922E-01 0.6918832939281314E-01 + 0.6862530486539103E-01 0.6806582443326617E-01 0.6750986978805110E-01 0.6695742285814540E-01 0.6640846580110123E-01 + 0.6586298099618196E-01 0.6532095103711212E-01 0.6478235872501446E-01 0.6424718706153042E-01 0.6371541924212147E-01 + 0.6318703864954746E-01 0.6266202884751911E-01 0.6214037357452046E-01 0.6162205673779986E-01 0.6110706240752450E-01 + 0.6059537481109686E-01 0.6008697832762830E-01 0.5958185748256901E-01 0.5907999694248869E-01 0.5858138151000727E-01 + 0.5808599611887154E-01 0.5759382582917469E-01 0.5710485582271634E-01 0.5661907139850073E-01 0.5613645796836825E-01 + 0.5565700105276017E-01 0.5518068627661225E-01 0.5470749936537444E-01 0.5423742614115482E-01 0.5377045251898517E-01 + 0.5330656450320408E-01 0.5284574818395761E-01 0.5238798973381230E-01 0.5193327540447994E-01 0.5148159152365149E-01 + 0.5103292449193595E-01 0.5058726077990446E-01 0.5014458692523559E-01 0.4970488952995948E-01 0.4926815525779950E-01 + 0.4883437083160901E-01 0.4840352303089959E-01 0.4797559868946120E-01 0.4755058469306943E-01 0.4712846797727979E-01 + 0.4670923552530574E-01 0.4629287436597942E-01 0.4587937157179187E-01 0.4546871425701189E-01 0.4506088957588125E-01 + 0.4465588472088415E-01 0.4425368692108926E-01 0.4385428344056262E-01 0.4345766157684944E-01 0.4306380865952269E-01 + 0.4267271204879778E-01 0.4228435913421057E-01 0.4189873733335742E-01 0.4151583409069603E-01 0.4113563687640473E-01 + 0.4075813318529899E-01 0.4038331053580396E-01 0.4001115646898086E-01 0.3964165854760631E-01 0.3927480435530239E-01 + 0.3891058149571723E-01 0.3854897759175296E-01 0.3818998028484157E-01 0.3783357723426573E-01 0.3747975611652434E-01 + 0.3712850462474054E-01 0.3677981046811218E-01 0.3643366137140177E-01 0.3609004507446641E-01 0.3574894933182556E-01 + 0.3541036191226535E-01 0.3507427059847887E-01 0.3474066318674111E-01 0.3440952748661676E-01 0.3408085132070126E-01 + 0.3375462252439219E-01 0.3343082894569176E-01 0.3310945844503797E-01 0.3279049889516447E-01 0.3247393818098731E-01 + 0.3215976419951815E-01 0.3184796485980308E-01 0.3153852808288556E-01 0.3123144180179359E-01 0.3092669396154863E-01 + 0.3062427251919747E-01 0.3032416544386438E-01 0.3002636071682391E-01 0.2973084633159302E-01 0.2943761029404197E-01 + 0.2914664062252300E-01 0.2885792534801624E-01 0.2857145251429220E-01 0.2828721017808998E-01 0.2800518640931039E-01 + 0.2772536929122391E-01 0.2744774692069189E-01 0.2717230740840119E-01 0.2689903887911129E-01 0.2662792947191326E-01 + 0.2635896734050006E-01 0.2609214065344760E-01 0.2582743759450599E-01 0.2556484636290022E-01 0.2530435517364029E-01 + 0.2504595225783962E-01 0.2478962586304191E-01 0.2453536425355501E-01 0.2428315571079263E-01 0.2403298853362201E-01 + 0.2378485103871834E-01 0.2353873156092471E-01 0.2329461845361733E-01 0.2305250008907579E-01 0.2281236485885801E-01 + 0.2257420117417889E-01 0.2233799746629312E-01 0.2210374218688127E-01 0.2187142380843883E-01 0.2164103082466791E-01 + 0.2141255175087165E-01 0.2118597512435002E-01 0.2096128950479806E-01 0.2073848347470486E-01 0.2051754563975416E-01 + 0.2029846462922549E-01 0.2008122909639606E-01 0.1986582771894261E-01 0.1965224919934375E-01 0.1944048226528158E-01 + 0.1923051567004319E-01 0.1902233819292149E-01 0.1881593863961467E-01 0.1861130584262509E-01 0.1840842866165638E-01 + 0.1820729598400922E-01 0.1800789672497538E-01 0.1781021982822961E-01 0.1761425426621972E-01 0.1741998904055397E-01 + 0.1722741318238660E-01 0.1703651575280017E-01 0.1684728584318532E-01 0.1665971257561794E-01 0.1647378510323276E-01 + 0.1628949261059417E-01 0.1610682431406360E-01 0.1592576946216329E-01 0.1574631733593689E-01 0.1556845724930608E-01 + 0.1539217854942354E-01 0.1521747061702217E-01 0.1504432286676001E-01 0.1487272474756165E-01 0.1470266574295493E-01 + 0.1453413537140393E-01 0.1436712318663735E-01 0.1420161877797267E-01 0.1403761177063589E-01 0.1387509182607664E-01 + 0.1371404864227910E-01 0.1355447195406791E-01 0.1339635153340976E-01 0.1323967718971016E-01 0.1308443877010535E-01 + 0.1293062615974990E-01 0.1277822928209887E-01 0.1262723809918580E-01 0.1247764261189538E-01 0.1232943286023138E-01 + 0.1218259892357987E-01 0.1203713092096717E-01 0.1189301901131328E-01 0.1175025339368011E-01 0.1160882430751480E-01 + 0.1146872203288826E-01 0.1132993689072848E-01 0.1119245924304928E-01 0.1105627949317382E-01 0.1092138808595317E-01 + 0.1078777550798031E-01 0.1065543228779879E-01 0.1052434899610681E-01 0.1039451624595617E-01 0.1026592469294671E-01 + 0.1013856503541558E-01 0.1001242801462182E-01 0.9887504414926333E-02 0.9763785063966725E-02 0.9641260832827890E-02 + 0.9519922636207538E-02 0.9399761432577210E-02 0.9280768224338752E-02 0.9162934057976000E-02 0.9046250024202221E-02 + 0.8930707258102832E-02 0.8816296939273676E-02 0.8703010291955119E-02 0.8590838585161509E-02 0.8479773132806546E-02 + 0.8369805293824308E-02 0.8260926472285997E-02 0.8153128117512804E-02 0.8046401724184376E-02 0.7940738832443478E-02 + 0.7836131027996606E-02 0.7732569942210602E-02 0.7630047252205678E-02 0.7528554680944333E-02 0.7428083997316856E-02 + 0.7328627016223001E-02 0.7230175598650108E-02 0.7132721651747814E-02 0.7036257128899153E-02 0.6940774029788536E-02 + 0.6846264400466227E-02 0.6752720333409701E-02 0.6660133967581916E-02 0.6568497488486375E-02 0.6477803128219479E-02 + 0.6388043165519663E-02 0.6299209925814047E-02 0.6211295781262146E-02 0.6124293150797016E-02 0.6038194500163917E-02 + 0.5952992341956366E-02 0.5868679235650055E-02 0.5785247787634298E-02 0.5702690651241371E-02 0.5621000526773856E-02 + 0.5540170161529816E-02 0.5460192349826328E-02 0.5381059933021076E-02 0.5302765799532243E-02 0.5225302884857029E-02 + 0.5148664171588471E-02 0.5072842689431090E-02 0.4997831515215207E-02 0.4923623772910095E-02 0.4850212633636272E-02 + 0.4777591315676702E-02 0.4705753084487369E-02 0.4634691252707118E-02 0.4564399180166933E-02 0.4494870273898941E-02 + 0.4426097988144961E-02 0.4358075824365064E-02 0.4290797331245945E-02 0.4224256104709619E-02 0.4158445787922197E-02 + 0.4093360071303100E-02 0.4028992692534918E-02 0.3965337436573796E-02 0.3902388135660784E-02 0.3840138669334105E-02 + 0.3778582964442547E-02 0.3717714995160261E-02 0.3657528783002880E-02 0.3598018396845369E-02 0.3539177952941635E-02 + 0.3481001614946027E-02 0.3423483593937147E-02 0.3366618148443765E-02 0.3310399584473416E-02 0.3254822255543565E-02 + 0.3199880562715664E-02 0.3145568954632342E-02 0.3091881927557716E-02 0.3038814025421337E-02 0.2986359839865667E-02 + 0.2934514010297470E-02 0.2883271223943334E-02 0.2832626215909399E-02 0.2782573769245732E-02 0.2733108715015361E-02 + 0.2684225932368273E-02 0.2635920348620736E-02 0.2588186939339922E-02 0.2541020728434335E-02 0.2494416788250113E-02 + 0.2448370239673485E-02 0.2402876252239763E-02 0.2357930044248895E-02 0.2313526882888074E-02 0.2269662084361452E-02 + 0.2226331014027437E-02 0.2183529086543647E-02 0.2141251766019886E-02 0.2099494566179429E-02 0.2058253050528833E-02 + 0.2017522832536582E-02 0.1977299575820819E-02 0.1937578994346416E-02 0.1898356852631761E-02 0.1859628965965341E-02 + 0.1821391200632576E-02 0.1783639474153031E-02 0.1746369755528287E-02 0.1709578065500809E-02 0.1673260476823867E-02 + 0.1637413114542927E-02 0.1602032156288575E-02 0.1567113832581223E-02 0.1532654427147850E-02 0.1498650277250755E-02 + 0.1465097774028671E-02 0.1431993362850165E-02 0.1399333543679485E-02 0.1367114871454921E-02 0.1335333956479567E-02 + 0.1303987464824598E-02 0.1273072118744786E-02 0.1242584697106271E-02 0.1212522035826240E-02 0.1182881028324278E-02 + 0.1153658625985074E-02 0.1124851838631879E-02 0.1096457735010339E-02 0.1068473443281882E-02 0.1040896151525936E-02 + 0.1013723108250083E-02 0.9869516229069582E-03 0.9605790664167954E-03 0.9346028716940452E-03 0.9090205341765010E-03 + 0.8838296123550832E-03 0.8590277283020786E-03 0.8346125681955534E-03 0.8105818828371373E-03 0.7869334881601800E-03 + 0.7636652657249203E-03 0.7407751631967363E-03 0.7182611948033279E-03 0.6961214417659799E-03 0.6743540526996259E-03 + 0.6529572439758464E-03 0.6319293000421489E-03 0.6112685736903467E-03 0.5909734862658870E-03 0.5710425278092155E-03 + 0.5514742571193334E-03 0.5322673017285347E-03 0.5134203577763651E-03 0.4949321897694443E-03 0.4768016302125221E-03 + 0.4590275790946831E-03 0.4416090032129194E-03 0.4245449353136761E-03 0.4078344730309316E-03 0.3914767775974666E-03 + 0.3754710723036193E-03 0.3598166406754878E-03 0.3445128243419585E-03 0.3295590205570407E-03 0.3149546793411112E-03 + 0.3006993002013562E-03 0.2867924283882840E-03 0.2732336506415988E-03 0.2600225903747107E-03 0.2471589022432513E-03 + 0.2346422660385661E-03 0.2224723798427698E-03 0.2106489523774314E-03 0.1991716944731751E-03 0.1880403095829506E-03 + 0.1772544832569928E-03 0.1668138714930798E-03 0.1567180878715900E-03 0.1469666893810824E-03 0.1375591608372710E-03 + 0.1284948977961454E-03 0.1197731878613226E-03 0.1113931902866863E-03 0.1033539137784803E-03 0.9565419240704367E-04 + 0.8829265954769630E-04 0.8126771978413778E-04 0.7457751872672617E-04 0.6821991072362678E-04 0.6219242447627770E-04 + 0.5649222661344906E-04 0.5111608333233986E-04 0.4606032028242377E-04 0.4132078095054316E-04 0.3689278390632745E-04 + 0.3277107938782920E-04 0.2894980585093507E-04 0.2542244727468145E-04 0.2218179221009314E-04 0.1921989578338595E-04 + 0.1652804611495441E-04 0.1409673689099332E-04 0.1191564811913617E-04 0.9973637403230573E-05 0.8258744369264157E-05 + 0.6758211140689631E-05 0.5458521963065276E-05 0.4345465168603044E-05 0.3404220589992921E-05 0.2619475202729796E-05 + 0.1975569103509067E-05 0.1456672814492850E-05 0.1046995232007964E-05 0.7310192213004316E-06 0.4937588492987344E-06 + 0.3210285891032542E-06 0.1997107219284094E-06 0.1180030350752796E-06 0.6562550627018659E-07 0.3396305969110393E-07 + 0.1612304561662313E-07 0.6892228656363058E-08 0.2589636663001748E-08 0.8280887390551865E-09 0.2156614040605737E-09 + 0.4301139703498805E-10 0.6010118005039632E-11 0.5149083260942099E-12 0.2193180426472887E-13 0.3274661750280784E-15 + 0.9138109562588437E-18 0.1354704193168576E-21 0.5668023630192864E-28 0.1003507143230543E-40 0.5696705688614969E-79 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2350503764662797E-10 0.1452741565148498E-08 0.1598024605657181E-07 0.8670887247915710E-07 + 0.3194268290355064E-06 0.9210999532108705E-06 0.2243032243257230E-05 0.4826533736759059E-05 0.9449280963997414E-05 + 0.1717086310497067E-04 0.2937628005930804E-04 0.4781640004850213E-04 0.7464459701436190E-04 0.1124489746320072E-03 + 0.1642797466831127E-03 0.2336714851009560E-03 0.3246600692852489E-03 0.4417942752036344E-03 0.5901420321021944E-03 + 0.7752914499470295E-03 0.1003346783485080E-02 0.1280919550391384E-02 0.1615115062592291E-02 0.2013514662642524E-02 + 0.2484153982012019E-02 0.3035497556237696E-02 0.3676410143962806E-02 0.4416125103690986E-02 0.5264210184320288E-02 + 0.6230531083824742E-02 0.7325213125386473E-02 0.8558601392363368E-02 0.9941219653166928E-02 0.1148372839483666E-01 + 0.1319688227020127E-01 0.1509148724834461E-01 0.1717835774193908E-01 0.1946827396813322E-01 0.2197193978231332E-01 + 0.2469994120640449E-01 0.2766270585561205E-01 0.3087046344978465E-01 0.3433320757803945E-01 0.3806065886804223E-01 + 0.4206222969448004E-01 0.4634699054488188E-01 0.5092363814510472E-01 0.5580046543156136E-01 0.6098533344267084E-01 + 0.6648564518809444E-01 0.7230832154110638E-01 0.7845977918695805E-01 0.8494591064833676E-01 0.9177206639800155E-01 + 0.9894303905839608E-01 0.1064630496784886E+00 0.1143357360692630E+00 0.1225641431711653E+00 0.1311507154193881E+00 + 0.1400972910661206E+00 0.1494050984128002E+00 0.1590747538999337E+00 0.1691062619971989E+00 0.1794990168322592E+00 + 0.1902518054930074E+00 0.2013628129347618E+00 0.2128296284212524E+00 0.2246492534260200E+00 0.2368181109190946E+00 + 0.2493320559624748E+00 0.2621863875369867E+00 0.2753758615225286E+00 0.2888947047534727E+00 0.3027366300710904E+00 + 0.3168948522952475E+00 0.3313621050382702E+00 0.3461306582847914E+00 0.3611923366625136E+00 0.3765385383301647E+00 + 0.3921602544104397E+00 0.4080480888974157E+00 0.4241922789697600E+00 0.4405827156430124E+00 0.4572089646963136E+00 + 0.4740602878111100E+00 0.4911256638616449E+00 0.5083938102993529E+00 0.5258532045756759E+00 0.5434921055502246E+00 + 0.5612985748336912E+00 0.5792604980173683E+00 0.5973656057436424E+00 0.6156014945742982E+00 0.6339556476159732E+00 + 0.6524154548645443E+00 0.6709682332326954E+00 0.6896012462273114E+00 0.7083017232457365E+00 0.7270568784622643E+00 + 0.7458539292785299E+00 0.7646801143137046E+00 0.7835227109126022E+00 0.8023690521519213E+00 0.8212065433269309E+00 + 0.8400226779029110E+00 0.8588050529176166E+00 0.8775413838228915E+00 0.8962195187553934E+00 0.9148274522281129E+00 + 0.9333533382360560E+00 0.9517855027710543E+00 0.9701124557421923E+00 0.9883229022998167E+00 0.1006405753562465E+01 + 0.1024350136747383E+01 0.1042145404706545E+01 0.1059781144871260E+01 0.1077247187609600E+01 0.1094533614001869E+01 + 0.1111630763040373E+01 0.1128529238260637E+01 0.1145219913812065E+01 0.1161693939976847E+01 0.1177942748146633E+01 + 0.1193958055267189E+01 0.1209731867761823E+01 0.1225256484945006E+01 0.1240524501938026E+01 0.1255528812099049E+01 + 0.1270262608980346E+01 0.1284719387825761E+01 0.1298892946621899E+01 0.1312777386716678E+01 0.1326367113019209E+01 + 0.1339656833795096E+01 0.1352641560071424E+01 0.1365316604665792E+01 0.1377677580853886E+01 0.1389720400690019E+01 + 0.1401441272995214E+01 0.1412836701027270E+01 0.1423903479847286E+01 0.1434638693397013E+01 0.1445039711301291E+01 + 0.1455104185409776E+01 0.1464830046091919E+01 0.1474215498299109E+01 0.1483259017407622E+01 0.1491959344855860E+01 + 0.1500315483589179E+01 0.1508326693325296E+01 0.1515992485653126E+01 0.1523312618977543E+01 0.1530287093322397E+01 + 0.1536916145003750E+01 0.1543200241185077E+01 0.1549140074325868E+01 0.1554736556534737E+01 0.1559990813837915E+01 + 0.1564904180373601E+01 0.1569478192522416E+01 0.1573714582983838E+01 0.1577615274808202E+01 0.1581182375393509E+01 + 0.1584418170455991E+01 0.1587325117983052E+01 0.1589905842176854E+01 0.1592163127396545E+01 0.1594099912106772E+01 + 0.1595719282839819E+01 0.1597024468178396E+01 0.1598018832765788E+01 0.1598705871349761E+01 0.1599089202866354E+01 + 0.1599172564569312E+01 0.1598959806210704E+01 0.1598454884277914E+01 0.1597661856291940E+01 0.1596584875171653E+01 + 0.1595228183668366E+01 0.1593596108874842E+01 0.1591693056812536E+01 0.1589523507100701E+01 0.1587092007710641E+01 + 0.1584403169808198E+01 0.1581461662687349E+01 0.1578272208797470E+01 0.1574839578866685E+01 0.1571168587123450E+01 + 0.1567264086618331E+01 0.1563130964647693E+01 0.1558774138280876E+01 0.1554198549992189E+01 0.1549409163398889E+01 + 0.1544410959106127E+01 0.1539208930659677E+01 0.1533808080607080E+01 0.1528213416667707E+01 0.1522429948012042E+01 + 0.1516462681650386E+01 0.1510316618931021E+01 0.1503996752147732E+01 0.1497508061256460E+01 0.1490855510700755E+01 + 0.1484044046345540E+01 0.1477078592518635E+01 0.1469964049159342E+01 0.1462705289073315E+01 0.1455307155292826E+01 + 0.1447774458541496E+01 0.1440111974802394E+01 0.1432324442988392E+01 0.1424416562713602E+01 0.1416392992164560E+01 + 0.1408258346069873E+01 0.1400017193766902E+01 0.1391674057364033E+01 0.1383233409997026E+01 0.1374699674177898E+01 + 0.1366077220234727E+01 0.1357370364840755E+01 0.1348583369631108E+01 0.1339720439905439E+01 0.1330785723414737E+01 + 0.1321783309230582E+01 0.1312717226695031E+01 0.1303591444449351E+01 0.1294409869539786E+01 0.1285176346598528E+01 + 0.1275894657098056E+01 0.1266568518676988E+01 0.1257201584535619E+01 0.1247797442899263E+01 0.1238359616547584E+01 + 0.1228891562408019E+01 0.1219396671211496E+01 0.1209878267208578E+01 0.1200339607944202E+01 0.1190783884089205E+01 + 0.1181214219326823E+01 0.1171633670292365E+01 0.1162045226564264E+01 0.1152451810704780E+01 0.1142856278348570E+01 + 0.1133261418337408E+01 0.1123669952899346E+01 0.1114084537870646E+01 0.1104507762958775E+01 0.1094942152044870E+01 + 0.1085390163524009E+01 0.1075854190681740E+01 0.1066336562105254E+01 0.1056839542127690E+01 0.1047365331304049E+01 + 0.1037916066917227E+01 0.1028493823512701E+01 0.1019100613460447E+01 0.1009738387542688E+01 0.1000409035566070E+01 + 0.9911143869969610E+00 0.9818562116185301E+00 0.9726362202083267E+00 0.9634560652350970E+00 0.9543173415736288E+00 + 0.9452215872364120E+00 0.9361702841209427E+00 0.9271648587715566E+00 0.9182066831546644E+00 0.9092970754463097E+00 + 0.9004373008310244E+00 0.8916285723109384E+00 0.8828720515241635E+00 0.8741688495714935E+00 0.8655200278504954E+00 + 0.8569265988960664E+00 0.8483895272266132E+00 0.8399097301949807E+00 0.8314880788433289E+00 0.8231253987611650E+00 + 0.8148224709457564E+00 0.8065800326641964E+00 0.7983987783164219E+00 0.7902793602984723E+00 0.7822223898653531E+00 + 0.7742284379928720E+00 0.7662980362378170E+00 0.7584316775959118E+00 0.7506298173569868E+00 0.7428928739568187E+00 + 0.7352212298251275E+00 0.7276152322292518E+00 0.7200751941130188E+00 0.7126013949303633E+00 0.7051940814732806E+00 + 0.6978534686936988E+00 0.6905797405188852E+00 0.6833730506600221E+00 0.6762335234136188E+00 0.6691612544554096E+00 + 0.6621563116264519E+00 0.6552187357111161E+00 0.6483485412067125E+00 0.6415457170844840E+00 0.6348102275417313E+00 + 0.6281420127448483E+00 0.6215409895630656E+00 0.6150070522926947E+00 0.6085400733717113E+00 0.6021399040845107E+00 + 0.5958063752566826E+00 0.5895392979396676E+00 0.5833384640851877E+00 0.5772036472093250E+00 0.5711346030461549E+00 + 0.5651310701908592E+00 0.5591927707322315E+00 0.5533194108745153E+00 0.5475106815485299E+00 0.5417662590120353E+00 + 0.5360858054393003E+00 0.5304689694998603E+00 0.5249153869264497E+00 0.5194246810720941E+00 0.5139964634563777E+00 + 0.5086303343008993E+00 0.5033258830539155E+00 0.4980826889042317E+00 0.4929003212843441E+00 0.4877783403628898E+00 + 0.4827162975264554E+00 0.4777137358507827E+00 0.4727701905614446E+00 0.4678851894840552E+00 0.4630582534840750E+00 + 0.4582888968962981E+00 0.4535766279440972E+00 0.4489209491485098E+00 0.4443213577272558E+00 0.4397773459837845E+00 + 0.4352884016864413E+00 0.4308540084378585E+00 0.4264736460346724E+00 0.4221467908176804E+00 0.4178729160125361E+00 + 0.4136514920611062E+00 0.4094819869436024E+00 0.4053638664915989E+00 0.4012965946920645E+00 0.3972796339825281E+00 + 0.3933124455374964E+00 0.3893944895462572E+00 0.3855252254821869E+00 0.3817041123636960E+00 0.3779306090069412E+00 + 0.3742041742704262E+00 0.3705242672916375E+00 0.3668903477158274E+00 0.3633018759170965E+00 0.3597583132118892E+00 + 0.3562591220650529E+00 0.3528037662885790E+00 0.3493917112331675E+00 0.3460224239727477E+00 0.3426953734820877E+00 + 0.3394100308076194E+00 0.3361658692316251E+00 0.3329623644299036E+00 0.3297989946230563E+00 0.3266752407215223E+00 + 0.3235905864644950E+00 0.3205445185528428E+00 0.3175365267761750E+00 0.3145661041341699E+00 0.3116327469522978E+00 + 0.3087359549920661E+00 0.3058752315559112E+00 0.3030500835868565E+00 0.3002600217630693E+00 0.2975045605874296E+00 + 0.2947832184722352E+00 0.2920955178191660E+00 0.2894409850946181E+00 0.2868191509005325E+00 0.2842295500408273E+00 + 0.2816717215835535E+00 0.2791452089188812E+00 0.2766495598130334E+00 0.2741843264582723E+00 0.2717490655190478E+00 + 0.2693433381744174E+00 0.2669667101568407E+00 0.2646187517874495E+00 0.2622990380079024E+00 0.2600071484089175E+00 + 0.2577426672555859E+00 0.2555051835095635E+00 0.2532942908482358E+00 0.2511095876809479E+00 0.2489506771623981E+00 + 0.2468171672032794E+00 0.2447086704782614E+00 0.2426248044314016E+00 0.2405651912790701E+00 0.2385294580104723E+00 + 0.2365172363858518E+00 0.2345281629324596E+00 0.2325618789383613E+00 0.2306180304441682E+00 0.2286962682327625E+00 + 0.2267962478170977E+00 0.2249176294261405E+00 0.2230600779890333E+00 0.2212232631175415E+00 0.2194068590868594E+00 + 0.2176105448148379E+00 0.2158340038397009E+00 0.2140769242963177E+00 0.2123389988910903E+00 0.2106199248755169E+00 + 0.2089194040184958E+00 0.2072371425774233E+00 0.2055728512681448E+00 0.2039262452338156E+00 0.2022970440127238E+00 + 0.2006849715051299E+00 0.1990897559391716E+00 0.1975111298358903E+00 0.1959488299734197E+00 0.1944025973503926E+00 + 0.1928721771486053E+00 0.1913573186949898E+00 0.1898577754229339E+00 0.1883733048329959E+00 0.1869036684530497E+00 + 0.1854486317979078E+00 0.1840079643284546E+00 0.1825814394103312E+00 0.1811688342722097E+00 0.1797699299636905E+00 + 0.1783845113128567E+00 0.1770123668835237E+00 0.1756532889322104E+00 0.1743070733648679E+00 0.1729735196933954E+00 + 0.1716524309919727E+00 0.1703436138532354E+00 0.1690468783443259E+00 0.1677620379628421E+00 0.1664889095927099E+00 + 0.1652273134600088E+00 0.1639770730887696E+00 0.1627380152567701E+00 0.1615099699513493E+00 0.1602927703252654E+00 + 0.1590862526526123E+00 0.1578902562848216E+00 0.1567046236067624E+00 0.1555291999929633E+00 0.1543638337639696E+00 + 0.1532083761428563E+00 0.1520626812119101E+00 0.1509266058694993E+00 0.1498000097871428E+00 0.1486827553667961E+00 + 0.1475747076983654E+00 0.1464757345174640E+00 0.1453857061634240E+00 0.1443044955375730E+00 0.1432319780617891E+00 + 0.1421680316373446E+00 0.1411125366040483E+00 0.1400653756996955E+00 0.1390264340198362E+00 0.1379955989778688E+00 + 0.1369727602654673E+00 0.1359578098133525E+00 0.1349506417524104E+00 0.1339511523751675E+00 0.1329592400976282E+00 + 0.1319748054214808E+00 0.1309977508966756E+00 0.1300279810843844E+00 0.1290654025203415E+00 0.1281099236785748E+00 + 0.1271614549355259E+00 0.1262199085345698E+00 0.1252851985509296E+00 0.1243572408569959E+00 0.1234359530880505E+00 + 0.1225212546083961E+00 0.1216130664778956E+00 0.1207113114189237E+00 0.1198159137837281E+00 0.1189267995222068E+00 + 0.1180438961500998E+00 0.1171671327175942E+00 0.1162964397783483E+00 0.1154317493589289E+00 0.1145729949286663E+00 + 0.1137201113699259E+00 0.1128730349487938E+00 0.1120317032861783E+00 0.1111960553293266E+00 0.1103660313237529E+00 + 0.1095415727855802E+00 0.1087226224742927E+00 0.1079091243658972E+00 0.1071010236264925E+00 0.1062982665862460E+00 + 0.1055008007137718E+00 0.1047085745909144E+00 0.1039215378879289E+00 0.1031396413390617E+00 0.1023628367185243E+00 + 0.1015910768168619E+00 0.1008243154177097E+00 0.1000625072749386E+00 0.9930560809018427E-01 0.9855357449075822E-01 + 0.9780636400793745E-01 0.9706393505562982E-01 0.9632624690941162E-01 0.9559325968593356E-01 0.9486493432269383E-01 + 0.9414123255817297E-01 0.9342211691232764E-01 0.9270755066744044E-01 0.9199749784932158E-01 0.9129192320885827E-01 + 0.9059079220391024E-01 0.8989407098154546E-01 0.8920172636061409E-01 0.8851372581465511E-01 0.8783003745513447E-01 + 0.8715063001500779E-01 0.8647547283260665E-01 0.8580453583584287E-01 0.8513778952672810E-01 0.8447520496620298E-01 + 0.8381675375927530E-01 0.8316240804045885E-01 0.8251214045951316E-01 0.8186592416747822E-01 0.8122373280299988E-01 + 0.8058554047894315E-01 0.7995132176928955E-01 0.7932105169631275E-01 0.7869470571803144E-01 0.7807225971593283E-01 + 0.7745368998296467E-01 0.7683897321179178E-01 0.7622808648331135E-01 0.7562100725542614E-01 0.7501771335206921E-01 + 0.7441818295247755E-01 0.7382239458071076E-01 0.7323032709541087E-01 0.7264195967979867E-01 0.7205727183190487E-01 + 0.7147624335502985E-01 0.7089885434843042E-01 0.7032508519822850E-01 0.6975491656853922E-01 0.6918832939281314E-01 + 0.6862530486539103E-01 0.6806582443326617E-01 0.6750986978805110E-01 0.6695742285814540E-01 0.6640846580110123E-01 + 0.6586298099618196E-01 0.6532095103711212E-01 0.6478235872501446E-01 0.6424718706153042E-01 0.6371541924212147E-01 + 0.6318703864954746E-01 0.6266202884751911E-01 0.6214037357452046E-01 0.6162205673779986E-01 0.6110706240752450E-01 + 0.6059537481109686E-01 0.6008697832762830E-01 0.5958185748256901E-01 0.5907999694248869E-01 0.5858138151000727E-01 + 0.5808599611887154E-01 0.5759382582917469E-01 0.5710485582271634E-01 0.5661907139850073E-01 0.5613645796836825E-01 + 0.5565700105276017E-01 0.5518068627661225E-01 0.5470749936537444E-01 0.5423742614115482E-01 0.5377045251898517E-01 + 0.5330656450320408E-01 0.5284574818395761E-01 0.5238798973381230E-01 0.5193327540447994E-01 0.5148159152365149E-01 + 0.5103292449193595E-01 0.5058726077990446E-01 0.5014458692523559E-01 0.4970488952995948E-01 0.4926815525779950E-01 + 0.4883437083160901E-01 0.4840352303089959E-01 0.4797559868946120E-01 0.4755058469306943E-01 0.4712846797727979E-01 + 0.4670923552530574E-01 0.4629287436597942E-01 0.4587937157179187E-01 0.4546871425701189E-01 0.4506088957588125E-01 + 0.4465588472088415E-01 0.4425368692108926E-01 0.4385428344056262E-01 0.4345766157684944E-01 0.4306380865952269E-01 + 0.4267271204879778E-01 0.4228435913421057E-01 0.4189873733335742E-01 0.4151583409069603E-01 0.4113563687640473E-01 + 0.4075813318529899E-01 0.4038331053580396E-01 0.4001115646898086E-01 0.3964165854760631E-01 0.3927480435530239E-01 + 0.3891058149571723E-01 0.3854897759175296E-01 0.3818998028484157E-01 0.3783357723426573E-01 0.3747975611652434E-01 + 0.3712850462474054E-01 0.3677981046811218E-01 0.3643366137140177E-01 0.3609004507446641E-01 0.3574894933182556E-01 + 0.3541036191226535E-01 0.3507427059847887E-01 0.3474066318674111E-01 0.3440952748661676E-01 0.3408085132070126E-01 + 0.3375462252439219E-01 0.3343082894569176E-01 0.3310945844503797E-01 0.3279049889516447E-01 0.3247393818098731E-01 + 0.3215976419951815E-01 0.3184796485980308E-01 0.3153852808288556E-01 0.3123144180179359E-01 0.3092669396154863E-01 + 0.3062427251919747E-01 0.3032416544386438E-01 0.3002636071682391E-01 0.2973084633159302E-01 0.2943761029404197E-01 + 0.2914664062252300E-01 0.2885792534801624E-01 0.2857145251429220E-01 0.2828721017808998E-01 0.2800518640931039E-01 + 0.2772536929122391E-01 0.2744774692069189E-01 0.2717230740840119E-01 0.2689903887911129E-01 0.2662792947191326E-01 + 0.2635896734050006E-01 0.2609214065344760E-01 0.2582743759450599E-01 0.2556484636290022E-01 0.2530435517364029E-01 + 0.2504595225783962E-01 0.2478962586304191E-01 0.2453536425355501E-01 0.2428315571079263E-01 0.2403298853362201E-01 + 0.2378485103871834E-01 0.2353873156092471E-01 0.2329461845361733E-01 0.2305250008907579E-01 0.2281236485885801E-01 + 0.2257420117417889E-01 0.2233799746629312E-01 0.2210374218688127E-01 0.2187142380843883E-01 0.2164103082466791E-01 + 0.2141255175087165E-01 0.2118597512435002E-01 0.2096128950479806E-01 0.2073848347470486E-01 0.2051754563975416E-01 + 0.2029846462922549E-01 0.2008122909639606E-01 0.1986582771894261E-01 0.1965224919934375E-01 0.1944048226528158E-01 + 0.1923051567004319E-01 0.1902233819292149E-01 0.1881593863961467E-01 0.1861130584262509E-01 0.1840842866165638E-01 + 0.1820729598400922E-01 0.1800789672497538E-01 0.1781021982822961E-01 0.1761425426621972E-01 0.1741998904055397E-01 + 0.1722741318238660E-01 0.1703651575280017E-01 0.1684728584318532E-01 0.1665971257561794E-01 0.1647378510323276E-01 + 0.1628949261059417E-01 0.1610682431406360E-01 0.1592576946216329E-01 0.1574631733593689E-01 0.1556845724930608E-01 + 0.1539217854942354E-01 0.1521747061702217E-01 0.1504432286676001E-01 0.1487272474756165E-01 0.1470266574295493E-01 + 0.1453413537140393E-01 0.1436712318663735E-01 0.1420161877797267E-01 0.1403761177063589E-01 0.1387509182607664E-01 + 0.1371404864227910E-01 0.1355447195406791E-01 0.1339635153340976E-01 0.1323967718971016E-01 0.1308443877010535E-01 + 0.1293062615974990E-01 0.1277822928209887E-01 0.1262723809918580E-01 0.1247764261189538E-01 0.1232943286023138E-01 + 0.1218259892357987E-01 0.1203713092096717E-01 0.1189301901131328E-01 0.1175025339368011E-01 0.1160882430751480E-01 + 0.1146872203288826E-01 0.1132993689072848E-01 0.1119245924304928E-01 0.1105627949317382E-01 0.1092138808595317E-01 + 0.1078777550798031E-01 0.1065543228779879E-01 0.1052434899610681E-01 0.1039451624595617E-01 0.1026592469294671E-01 + 0.1013856503541558E-01 0.1001242801462182E-01 0.9887504414926333E-02 0.9763785063966725E-02 0.9641260832827890E-02 + 0.9519922636207538E-02 0.9399761432577210E-02 0.9280768224338752E-02 0.9162934057976000E-02 0.9046250024202221E-02 + 0.8930707258102832E-02 0.8816296939273676E-02 0.8703010291955119E-02 0.8590838585161509E-02 0.8479773132806546E-02 + 0.8369805293824308E-02 0.8260926472285997E-02 0.8153128117512804E-02 0.8046401724184376E-02 0.7940738832443478E-02 + 0.7836131027996606E-02 0.7732569942210602E-02 0.7630047252205678E-02 0.7528554680944333E-02 0.7428083997316856E-02 + 0.7328627016223001E-02 0.7230175598650108E-02 0.7132721651747814E-02 0.7036257128899153E-02 0.6940774029788536E-02 + 0.6846264400466227E-02 0.6752720333409701E-02 0.6660133967581916E-02 0.6568497488486375E-02 0.6477803128219479E-02 + 0.6388043165519663E-02 0.6299209925814047E-02 0.6211295781262146E-02 0.6124293150797016E-02 0.6038194500163917E-02 + 0.5952992341956366E-02 0.5868679235650055E-02 0.5785247787634298E-02 0.5702690651241371E-02 0.5621000526773856E-02 + 0.5540170161529816E-02 0.5460192349826328E-02 0.5381059933021076E-02 0.5302765799532243E-02 0.5225302884857029E-02 + 0.5148664171588471E-02 0.5072842689431090E-02 0.4997831515215207E-02 0.4923623772910095E-02 0.4850212633636272E-02 + 0.4777591315676702E-02 0.4705753084487369E-02 0.4634691252707118E-02 0.4564399180166933E-02 0.4494870273898941E-02 + 0.4426097988144961E-02 0.4358075824365064E-02 0.4290797331245945E-02 0.4224256104709619E-02 0.4158445787922197E-02 + 0.4093360071303100E-02 0.4028992692534918E-02 0.3965337436573796E-02 0.3902388135660784E-02 0.3840138669334105E-02 + 0.3778582964442547E-02 0.3717714995160261E-02 0.3657528783002880E-02 0.3598018396845369E-02 0.3539177952941635E-02 + 0.3481001614946027E-02 0.3423483593937147E-02 0.3366618148443765E-02 0.3310399584473416E-02 0.3254822255543565E-02 + 0.3199880562715664E-02 0.3145568954632342E-02 0.3091881927557716E-02 0.3038814025421337E-02 0.2986359839865667E-02 + 0.2934514010297470E-02 0.2883271223943334E-02 0.2832626215909399E-02 0.2782573769245732E-02 0.2733108715015361E-02 + 0.2684225932368273E-02 0.2635920348620736E-02 0.2588186939339922E-02 0.2541020728434335E-02 0.2494416788250113E-02 + 0.2448370239673485E-02 0.2402876252239763E-02 0.2357930044248895E-02 0.2313526882888074E-02 0.2269662084361452E-02 + 0.2226331014027437E-02 0.2183529086543647E-02 0.2141251766019886E-02 0.2099494566179429E-02 0.2058253050528833E-02 + 0.2017522832536582E-02 0.1977299575820819E-02 0.1937578994346416E-02 0.1898356852631761E-02 0.1859628965965341E-02 + 0.1821391200632576E-02 0.1783639474153031E-02 0.1746369755528287E-02 0.1709578065500809E-02 0.1673260476823867E-02 + 0.1637413114542927E-02 0.1602032156288575E-02 0.1567113832581223E-02 0.1532654427147850E-02 0.1498650277250755E-02 + 0.1465097774028671E-02 0.1431993362850165E-02 0.1399333543679485E-02 0.1367114871454921E-02 0.1335333956479567E-02 + 0.1303987464824598E-02 0.1273072118744786E-02 0.1242584697106271E-02 0.1212522035826240E-02 0.1182881028324278E-02 + 0.1153658625985074E-02 0.1124851838631879E-02 0.1096457735010339E-02 0.1068473443281882E-02 0.1040896151525936E-02 + 0.1013723108250083E-02 0.9869516229069582E-03 0.9605790664167954E-03 0.9346028716940452E-03 0.9090205341765010E-03 + 0.8838296123550832E-03 0.8590277283020786E-03 0.8346125681955534E-03 0.8105818828371373E-03 0.7869334881601800E-03 + 0.7636652657249203E-03 0.7407751631967363E-03 0.7182611948033279E-03 0.6961214417659799E-03 0.6743540526996259E-03 + 0.6529572439758464E-03 0.6319293000421489E-03 0.6112685736903467E-03 0.5909734862658870E-03 0.5710425278092155E-03 + 0.5514742571193334E-03 0.5322673017285347E-03 0.5134203577763651E-03 0.4949321897694443E-03 0.4768016302125221E-03 + 0.4590275790946831E-03 0.4416090032129194E-03 0.4245449353136761E-03 0.4078344730309316E-03 0.3914767775974666E-03 + 0.3754710723036193E-03 0.3598166406754878E-03 0.3445128243419585E-03 0.3295590205570407E-03 0.3149546793411112E-03 + 0.3006993002013562E-03 0.2867924283882840E-03 0.2732336506415988E-03 0.2600225903747107E-03 0.2471589022432513E-03 + 0.2346422660385661E-03 0.2224723798427698E-03 0.2106489523774314E-03 0.1991716944731751E-03 0.1880403095829506E-03 + 0.1772544832569928E-03 0.1668138714930798E-03 0.1567180878715900E-03 0.1469666893810824E-03 0.1375591608372710E-03 + 0.1284948977961454E-03 0.1197731878613226E-03 0.1113931902866863E-03 0.1033539137784803E-03 0.9565419240704367E-04 + 0.8829265954769630E-04 0.8126771978413778E-04 0.7457751872672617E-04 0.6821991072362678E-04 0.6219242447627770E-04 + 0.5649222661344906E-04 0.5111608333233986E-04 0.4606032028242377E-04 0.4132078095054316E-04 0.3689278390632745E-04 + 0.3277107938782920E-04 0.2894980585093507E-04 0.2542244727468145E-04 0.2218179221009314E-04 0.1921989578338595E-04 + 0.1652804611495441E-04 0.1409673689099332E-04 0.1191564811913617E-04 0.9973637403230573E-05 0.8258744369264157E-05 + 0.6758211140689631E-05 0.5458521963065276E-05 0.4345465168603044E-05 0.3404220589992921E-05 0.2619475202729796E-05 + 0.1975569103509067E-05 0.1456672814492850E-05 0.1046995232007964E-05 0.7310192213004316E-06 0.4937588492987344E-06 + 0.3210285891032542E-06 0.1997107219284094E-06 0.1180030350752796E-06 0.6562550627018659E-07 0.3396305969110393E-07 + 0.1612304561662313E-07 0.6892228656363058E-08 0.2589636663001748E-08 0.8280887390551865E-09 0.2156614040605737E-09 + 0.4301139703498805E-10 0.6010118005039632E-11 0.5149083260942099E-12 0.2193180426472887E-13 0.3274661750280784E-15 + 0.9138109562588437E-18 0.1354704193168576E-21 0.5668023630192864E-28 0.1003507143230543E-40 0.5696705688614969E-79 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2350503764662797E-10 0.1452741565148498E-08 0.1598024605657181E-07 0.8670887247915710E-07 + 0.3194268290355064E-06 0.9210999532108705E-06 0.2243032243257230E-05 0.4826533736759059E-05 0.9449280963997414E-05 + 0.1717086310497067E-04 0.2937628005930804E-04 0.4781640004850213E-04 0.7464459701436190E-04 0.1124489746320072E-03 + 0.1642797466831127E-03 0.2336714851009560E-03 0.3246600692852489E-03 0.4417942752036344E-03 0.5901420321021944E-03 + 0.7752914499470295E-03 0.1003346783485080E-02 0.1280919550391384E-02 0.1615115062592291E-02 0.2013514662642524E-02 + 0.2484153982012019E-02 0.3035497556237696E-02 0.3676410143962806E-02 0.4416125103690986E-02 0.5264210184320288E-02 + 0.6230531083824742E-02 0.7325213125386473E-02 0.8558601392363368E-02 0.9941219653166928E-02 0.1148372839483666E-01 + 0.1319688227020127E-01 0.1509148724834461E-01 0.1717835774193908E-01 0.1946827396813322E-01 0.2197193978231332E-01 + 0.2469994120640449E-01 0.2766270585561205E-01 0.3087046344978465E-01 0.3433320757803945E-01 0.3806065886804223E-01 + 0.4206222969448004E-01 0.4634699054488188E-01 0.5092363814510472E-01 0.5580046543156136E-01 0.6098533344267084E-01 + 0.6648564518809444E-01 0.7230832154110638E-01 0.7845977918695805E-01 0.8494591064833676E-01 0.9177206639800155E-01 + 0.9894303905839608E-01 0.1064630496784886E+00 0.1143357360692630E+00 0.1225641431711653E+00 0.1311507154193881E+00 + 0.1400972910661206E+00 0.1494050984128002E+00 0.1590747538999337E+00 0.1691062619971989E+00 0.1794990168322592E+00 + 0.1902518054930074E+00 0.2013628129347618E+00 0.2128296284212524E+00 0.2246492534260200E+00 0.2368181109190946E+00 + 0.2493320559624748E+00 0.2621863875369867E+00 0.2753758615225286E+00 0.2888947047534727E+00 0.3027366300710904E+00 + 0.3168948522952475E+00 0.3313621050382702E+00 0.3461306582847914E+00 0.3611923366625136E+00 0.3765385383301647E+00 + 0.3921602544104397E+00 0.4080480888974157E+00 0.4241922789697600E+00 0.4405827156430124E+00 0.4572089646963136E+00 + 0.4740602878111100E+00 0.4911256638616449E+00 0.5083938102993529E+00 0.5258532045756759E+00 0.5434921055502246E+00 + 0.5612985748336912E+00 0.5792604980173683E+00 0.5973656057436424E+00 0.6156014945742982E+00 0.6339556476159732E+00 + 0.6524154548645443E+00 0.6709682332326954E+00 0.6896012462273114E+00 0.7083017232457365E+00 0.7270568784622643E+00 + 0.7458539292785299E+00 0.7646801143137046E+00 0.7835227109126022E+00 0.8023690521519213E+00 0.8212065433269309E+00 + 0.8400226779029110E+00 0.8588050529176166E+00 0.8775413838228915E+00 0.8962195187553934E+00 0.9148274522281129E+00 + 0.9333533382360560E+00 0.9517855027710543E+00 0.9701124557421923E+00 0.9883229022998167E+00 0.1006405753562465E+01 + 0.1024350136747383E+01 0.1042145404706545E+01 0.1059781144871260E+01 0.1077247187609600E+01 0.1094533614001869E+01 + 0.1111630763040373E+01 0.1128529238260637E+01 0.1145219913812065E+01 0.1161693939976847E+01 0.1177942748146633E+01 + 0.1193958055267189E+01 0.1209731867761823E+01 0.1225256484945006E+01 0.1240524501938026E+01 0.1255528812099049E+01 + 0.1270262608980346E+01 0.1284719387825761E+01 0.1298892946621899E+01 0.1312777386716678E+01 0.1326367113019209E+01 + 0.1339656833795096E+01 0.1352641560071424E+01 0.1365316604665792E+01 0.1377677580853886E+01 0.1389720400690019E+01 + 0.1401441272995214E+01 0.1412836701027270E+01 0.1423903479847286E+01 0.1434638693397013E+01 0.1445039711301291E+01 + 0.1455104185409776E+01 0.1464830046091919E+01 0.1474215498299109E+01 0.1483259017407622E+01 0.1491959344855860E+01 + 0.1500315483589179E+01 0.1508326693325296E+01 0.1515992485653126E+01 0.1523312618977543E+01 0.1530287093322397E+01 + 0.1536916145003750E+01 0.1543200241185077E+01 0.1549140074325868E+01 0.1554736556534737E+01 0.1559990813837915E+01 + 0.1564904180373601E+01 0.1569478192522416E+01 0.1573714582983838E+01 0.1577615274808202E+01 0.1581182375393509E+01 + 0.1584418170455991E+01 0.1587325117983052E+01 0.1589905842176854E+01 0.1592163127396545E+01 0.1594099912106772E+01 + 0.1595719282839819E+01 0.1597024468178396E+01 0.1598018832765788E+01 0.1598705871349761E+01 0.1599089202866354E+01 + 0.1599172564569312E+01 0.1598959806210704E+01 0.1598454884277914E+01 0.1597661856291940E+01 0.1596584875171653E+01 + 0.1595228183668366E+01 0.1593596108874842E+01 0.1591693056812536E+01 0.1589523507100701E+01 0.1587092007710641E+01 + 0.1584403169808198E+01 0.1581461662687349E+01 0.1578272208797470E+01 0.1574839578866685E+01 0.1571168587123450E+01 + 0.1567264086618331E+01 0.1563130964647693E+01 0.1558774138280876E+01 0.1554198549992189E+01 0.1549409163398889E+01 + 0.1544410959106127E+01 0.1539208930659677E+01 0.1533808080607080E+01 0.1528213416667707E+01 0.1522429948012042E+01 + 0.1516462681650386E+01 0.1510316618931021E+01 0.1503996752147732E+01 0.1497508061256460E+01 0.1490855510700755E+01 + 0.1484044046345540E+01 0.1477078592518635E+01 0.1469964049159342E+01 0.1462705289073315E+01 0.1455307155292826E+01 + 0.1447774458541496E+01 0.1440111974802394E+01 0.1432324442988392E+01 0.1424416562713602E+01 0.1416392992164560E+01 + 0.1408258346069873E+01 0.1400017193766902E+01 0.1391674057364033E+01 0.1383233409997026E+01 0.1374699674177898E+01 + 0.1366077220234727E+01 0.1357370364840755E+01 0.1348583369631108E+01 0.1339720439905439E+01 0.1330785723414737E+01 + 0.1321783309230582E+01 0.1312717226695031E+01 0.1303591444449351E+01 0.1294409869539786E+01 0.1285176346598528E+01 + 0.1275894657098056E+01 0.1266568518676988E+01 0.1257201584535619E+01 0.1247797442899263E+01 0.1238359616547584E+01 + 0.1228891562408019E+01 0.1219396671211496E+01 0.1209878267208578E+01 0.1200339607944202E+01 0.1190783884089205E+01 + 0.1181214219326823E+01 0.1171633670292365E+01 0.1162045226564264E+01 0.1152451810704780E+01 0.1142856278348570E+01 + 0.1133261418337408E+01 0.1123669952899346E+01 0.1114084537870646E+01 0.1104507762958775E+01 0.1094942152044870E+01 + 0.1085390163524009E+01 0.1075854190681740E+01 0.1066336562105254E+01 0.1056839542127690E+01 0.1047365331304049E+01 + 0.1037916066917227E+01 0.1028493823512701E+01 0.1019100613460447E+01 0.1009738387542688E+01 0.1000409035566070E+01 + 0.9911143869969610E+00 0.9818562116185301E+00 0.9726362202083267E+00 0.9634560652350970E+00 0.9543173415736288E+00 + 0.9452215872364120E+00 0.9361702841209427E+00 0.9271648587715566E+00 0.9182066831546644E+00 0.9092970754463097E+00 + 0.9004373008310244E+00 0.8916285723109384E+00 0.8828720515241635E+00 0.8741688495714935E+00 0.8655200278504954E+00 + 0.8569265988960664E+00 0.8483895272266132E+00 0.8399097301949807E+00 0.8314880788433289E+00 0.8231253987611650E+00 + 0.8148224709457564E+00 0.8065800326641964E+00 0.7983987783164219E+00 0.7902793602984723E+00 0.7822223898653531E+00 + 0.7742284379928720E+00 0.7662980362378170E+00 0.7584316775959118E+00 0.7506298173569868E+00 0.7428928739568187E+00 + 0.7352212298251275E+00 0.7276152322292518E+00 0.7200751941130188E+00 0.7126013949303633E+00 0.7051940814732806E+00 + 0.6978534686936988E+00 0.6905797405188852E+00 0.6833730506600221E+00 0.6762335234136188E+00 0.6691612544554096E+00 + 0.6621563116264519E+00 0.6552187357111161E+00 0.6483485412067125E+00 0.6415457170844840E+00 0.6348102275417313E+00 + 0.6281420127448483E+00 0.6215409895630656E+00 0.6150070522926947E+00 0.6085400733717113E+00 0.6021399040845107E+00 + 0.5958063752566826E+00 0.5895392979396676E+00 0.5833384640851877E+00 0.5772036472093250E+00 0.5711346030461549E+00 + 0.5651310701908592E+00 0.5591927707322315E+00 0.5533194108745153E+00 0.5475106815485299E+00 0.5417662590120353E+00 + 0.5360858054393003E+00 0.5304689694998603E+00 0.5249153869264497E+00 0.5194246810720941E+00 0.5139964634563777E+00 + 0.5086303343008993E+00 0.5033258830539155E+00 0.4980826889042317E+00 0.4929003212843441E+00 0.4877783403628898E+00 + 0.4827162975264554E+00 0.4777137358507827E+00 0.4727701905614446E+00 0.4678851894840552E+00 0.4630582534840750E+00 + 0.4582888968962981E+00 0.4535766279440972E+00 0.4489209491485098E+00 0.4443213577272558E+00 0.4397773459837845E+00 + 0.4352884016864413E+00 0.4308540084378585E+00 0.4264736460346724E+00 0.4221467908176804E+00 0.4178729160125361E+00 + 0.4136514920611062E+00 0.4094819869436024E+00 0.4053638664915989E+00 0.4012965946920645E+00 0.3972796339825281E+00 + 0.3933124455374964E+00 0.3893944895462572E+00 0.3855252254821869E+00 0.3817041123636960E+00 0.3779306090069412E+00 + 0.3742041742704262E+00 0.3705242672916375E+00 0.3668903477158274E+00 0.3633018759170965E+00 0.3597583132118892E+00 + 0.3562591220650529E+00 0.3528037662885790E+00 0.3493917112331675E+00 0.3460224239727477E+00 0.3426953734820877E+00 + 0.3394100308076194E+00 0.3361658692316251E+00 0.3329623644299036E+00 0.3297989946230563E+00 0.3266752407215223E+00 + 0.3235905864644950E+00 0.3205445185528428E+00 0.3175365267761750E+00 0.3145661041341699E+00 0.3116327469522978E+00 + 0.3087359549920661E+00 0.3058752315559112E+00 0.3030500835868565E+00 0.3002600217630693E+00 0.2975045605874296E+00 + 0.2947832184722352E+00 0.2920955178191660E+00 0.2894409850946181E+00 0.2868191509005325E+00 0.2842295500408273E+00 + 0.2816717215835535E+00 0.2791452089188812E+00 0.2766495598130334E+00 0.2741843264582723E+00 0.2717490655190478E+00 + 0.2693433381744174E+00 0.2669667101568407E+00 0.2646187517874495E+00 0.2622990380079024E+00 0.2600071484089175E+00 + 0.2577426672555859E+00 0.2555051835095635E+00 0.2532942908482358E+00 0.2511095876809479E+00 0.2489506771623981E+00 + 0.2468171672032794E+00 0.2447086704782614E+00 0.2426248044314016E+00 0.2405651912790701E+00 0.2385294580104723E+00 + 0.2365172363858518E+00 0.2345281629324596E+00 0.2325618789383613E+00 0.2306180304441682E+00 0.2286962682327625E+00 + 0.2267962478170977E+00 0.2249176294261405E+00 0.2230600779890333E+00 0.2212232631175415E+00 0.2194068590868594E+00 + 0.2176105448148379E+00 0.2158340038397009E+00 0.2140769242963177E+00 0.2123389988910903E+00 0.2106199248755169E+00 + 0.2089194040184958E+00 0.2072371425774233E+00 0.2055728512681448E+00 0.2039262452338156E+00 0.2022970440127238E+00 + 0.2006849715051299E+00 0.1990897559391716E+00 0.1975111298358903E+00 0.1959488299734197E+00 0.1944025973503926E+00 + 0.1928721771486053E+00 0.1913573186949898E+00 0.1898577754229339E+00 0.1883733048329959E+00 0.1869036684530497E+00 + 0.1854486317979078E+00 0.1840079643284546E+00 0.1825814394103312E+00 0.1811688342722097E+00 0.1797699299636905E+00 + 0.1783845113128567E+00 0.1770123668835237E+00 0.1756532889322104E+00 0.1743070733648679E+00 0.1729735196933954E+00 + 0.1716524309919727E+00 0.1703436138532354E+00 0.1690468783443259E+00 0.1677620379628421E+00 0.1664889095927099E+00 + 0.1652273134600088E+00 0.1639770730887696E+00 0.1627380152567701E+00 0.1615099699513493E+00 0.1602927703252654E+00 + 0.1590862526526123E+00 0.1578902562848216E+00 0.1567046236067624E+00 0.1555291999929633E+00 0.1543638337639696E+00 + 0.1532083761428563E+00 0.1520626812119101E+00 0.1509266058694993E+00 0.1498000097871428E+00 0.1486827553667961E+00 + 0.1475747076983654E+00 0.1464757345174640E+00 0.1453857061634240E+00 0.1443044955375730E+00 0.1432319780617891E+00 + 0.1421680316373446E+00 0.1411125366040483E+00 0.1400653756996955E+00 0.1390264340198362E+00 0.1379955989778688E+00 + 0.1369727602654673E+00 0.1359578098133525E+00 0.1349506417524104E+00 0.1339511523751675E+00 0.1329592400976282E+00 + 0.1319748054214808E+00 0.1309977508966756E+00 0.1300279810843844E+00 0.1290654025203415E+00 0.1281099236785748E+00 + 0.1271614549355259E+00 0.1262199085345698E+00 0.1252851985509296E+00 0.1243572408569959E+00 0.1234359530880505E+00 + 0.1225212546083961E+00 0.1216130664778956E+00 0.1207113114189237E+00 0.1198159137837281E+00 0.1189267995222068E+00 + 0.1180438961500998E+00 0.1171671327175942E+00 0.1162964397783483E+00 0.1154317493589289E+00 0.1145729949286663E+00 + 0.1137201113699259E+00 0.1128730349487938E+00 0.1120317032861783E+00 0.1111960553293266E+00 0.1103660313237529E+00 + 0.1095415727855802E+00 0.1087226224742927E+00 0.1079091243658972E+00 0.1071010236264925E+00 0.1062982665862460E+00 + 0.1055008007137718E+00 0.1047085745909144E+00 0.1039215378879289E+00 0.1031396413390617E+00 0.1023628367185243E+00 + 0.1015910768168619E+00 0.1008243154177097E+00 0.1000625072749386E+00 0.9930560809018427E-01 0.9855357449075822E-01 + 0.9780636400793745E-01 0.9706393505562982E-01 0.9632624690941162E-01 0.9559325968593356E-01 0.9486493432269383E-01 + 0.9414123255817297E-01 0.9342211691232764E-01 0.9270755066744044E-01 0.9199749784932158E-01 0.9129192320885827E-01 + 0.9059079220391024E-01 0.8989407098154546E-01 0.8920172636061409E-01 0.8851372581465511E-01 0.8783003745513447E-01 + 0.8715063001500779E-01 0.8647547283260665E-01 0.8580453583584287E-01 0.8513778952672810E-01 0.8447520496620298E-01 + 0.8381675375927530E-01 0.8316240804045885E-01 0.8251214045951316E-01 0.8186592416747822E-01 0.8122373280299988E-01 + 0.8058554047894315E-01 0.7995132176928955E-01 0.7932105169631275E-01 0.7869470571803144E-01 0.7807225971593283E-01 + 0.7745368998296467E-01 0.7683897321179178E-01 0.7622808648331135E-01 0.7562100725542614E-01 0.7501771335206921E-01 + 0.7441818295247755E-01 0.7382239458071076E-01 0.7323032709541087E-01 0.7264195967979867E-01 0.7205727183190487E-01 + 0.7147624335502985E-01 0.7089885434843042E-01 0.7032508519822850E-01 0.6975491656853922E-01 0.6918832939281314E-01 + 0.6862530486539103E-01 0.6806582443326617E-01 0.6750986978805110E-01 0.6695742285814540E-01 0.6640846580110123E-01 + 0.6586298099618196E-01 0.6532095103711212E-01 0.6478235872501446E-01 0.6424718706153042E-01 0.6371541924212147E-01 + 0.6318703864954746E-01 0.6266202884751911E-01 0.6214037357452046E-01 0.6162205673779986E-01 0.6110706240752450E-01 + 0.6059537481109686E-01 0.6008697832762830E-01 0.5958185748256901E-01 0.5907999694248869E-01 0.5858138151000727E-01 + 0.5808599611887154E-01 0.5759382582917469E-01 0.5710485582271634E-01 0.5661907139850073E-01 0.5613645796836825E-01 + 0.5565700105276017E-01 0.5518068627661225E-01 0.5470749936537444E-01 0.5423742614115482E-01 0.5377045251898517E-01 + 0.5330656450320408E-01 0.5284574818395761E-01 0.5238798973381230E-01 0.5193327540447994E-01 0.5148159152365149E-01 + 0.5103292449193595E-01 0.5058726077990446E-01 0.5014458692523559E-01 0.4970488952995948E-01 0.4926815525779950E-01 + 0.4883437083160901E-01 0.4840352303089959E-01 0.4797559868946120E-01 0.4755058469306943E-01 0.4712846797727979E-01 + 0.4670923552530574E-01 0.4629287436597942E-01 0.4587937157179187E-01 0.4546871425701189E-01 0.4506088957588125E-01 + 0.4465588472088415E-01 0.4425368692108926E-01 0.4385428344056262E-01 0.4345766157684944E-01 0.4306380865952269E-01 + 0.4267271204879778E-01 0.4228435913421057E-01 0.4189873733335742E-01 0.4151583409069603E-01 0.4113563687640473E-01 + 0.4075813318529899E-01 0.4038331053580396E-01 0.4001115646898086E-01 0.3964165854760631E-01 0.3927480435530239E-01 + 0.3891058149571723E-01 0.3854897759175296E-01 0.3818998028484157E-01 0.3783357723426573E-01 0.3747975611652434E-01 + 0.3712850462474054E-01 0.3677981046811218E-01 0.3643366137140177E-01 0.3609004507446641E-01 0.3574894933182556E-01 + 0.3541036191226535E-01 0.3507427059847887E-01 0.3474066318674111E-01 0.3440952748661676E-01 0.3408085132070126E-01 + 0.3375462252439219E-01 0.3343082894569176E-01 0.3310945844503797E-01 0.3279049889516447E-01 0.3247393818098731E-01 + 0.3215976419951815E-01 0.3184796485980308E-01 0.3153852808288556E-01 0.3123144180179359E-01 0.3092669396154863E-01 + 0.3062427251919747E-01 0.3032416544386438E-01 0.3002636071682391E-01 0.2973084633159302E-01 0.2943761029404197E-01 + 0.2914664062252300E-01 0.2885792534801624E-01 0.2857145251429220E-01 0.2828721017808998E-01 0.2800518640931039E-01 + 0.2772536929122391E-01 0.2744774692069189E-01 0.2717230740840119E-01 0.2689903887911129E-01 0.2662792947191326E-01 + 0.2635896734050006E-01 0.2609214065344760E-01 0.2582743759450599E-01 0.2556484636290022E-01 0.2530435517364029E-01 + 0.2504595225783962E-01 0.2478962586304191E-01 0.2453536425355501E-01 0.2428315571079263E-01 0.2403298853362201E-01 + 0.2378485103871834E-01 0.2353873156092471E-01 0.2329461845361733E-01 0.2305250008907579E-01 0.2281236485885801E-01 + 0.2257420117417889E-01 0.2233799746629312E-01 0.2210374218688127E-01 0.2187142380843883E-01 0.2164103082466791E-01 + 0.2141255175087165E-01 0.2118597512435002E-01 0.2096128950479806E-01 0.2073848347470486E-01 0.2051754563975416E-01 + 0.2029846462922549E-01 0.2008122909639606E-01 0.1986582771894261E-01 0.1965224919934375E-01 0.1944048226528158E-01 + 0.1923051567004319E-01 0.1902233819292149E-01 0.1881593863961467E-01 0.1861130584262509E-01 0.1840842866165638E-01 + 0.1820729598400922E-01 0.1800789672497538E-01 0.1781021982822961E-01 0.1761425426621972E-01 0.1741998904055397E-01 + 0.1722741318238660E-01 0.1703651575280017E-01 0.1684728584318532E-01 0.1665971257561794E-01 0.1647378510323276E-01 + 0.1628949261059417E-01 0.1610682431406360E-01 0.1592576946216329E-01 0.1574631733593689E-01 0.1556845724930608E-01 + 0.1539217854942354E-01 0.1521747061702217E-01 0.1504432286676001E-01 0.1487272474756165E-01 0.1470266574295493E-01 + 0.1453413537140393E-01 0.1436712318663735E-01 0.1420161877797267E-01 0.1403761177063589E-01 0.1387509182607664E-01 + 0.1371404864227910E-01 0.1355447195406791E-01 0.1339635153340976E-01 0.1323967718971016E-01 0.1308443877010535E-01 + 0.1293062615974990E-01 0.1277822928209887E-01 0.1262723809918580E-01 0.1247764261189538E-01 0.1232943286023138E-01 + 0.1218259892357987E-01 0.1203713092096717E-01 0.1189301901131328E-01 0.1175025339368011E-01 0.1160882430751480E-01 + 0.1146872203288826E-01 0.1132993689072848E-01 0.1119245924304928E-01 0.1105627949317382E-01 0.1092138808595317E-01 + 0.1078777550798031E-01 0.1065543228779879E-01 0.1052434899610681E-01 0.1039451624595617E-01 0.1026592469294671E-01 + 0.1013856503541558E-01 0.1001242801462182E-01 0.9887504414926333E-02 0.9763785063966725E-02 0.9641260832827890E-02 + 0.9519922636207538E-02 0.9399761432577210E-02 0.9280768224338752E-02 0.9162934057976000E-02 0.9046250024202221E-02 + 0.8930707258102832E-02 0.8816296939273676E-02 0.8703010291955119E-02 0.8590838585161509E-02 0.8479773132806546E-02 + 0.8369805293824308E-02 0.8260926472285997E-02 0.8153128117512804E-02 0.8046401724184376E-02 0.7940738832443478E-02 + 0.7836131027996606E-02 0.7732569942210602E-02 0.7630047252205678E-02 0.7528554680944333E-02 0.7428083997316856E-02 + 0.7328627016223001E-02 0.7230175598650108E-02 0.7132721651747814E-02 0.7036257128899153E-02 0.6940774029788536E-02 + 0.6846264400466227E-02 0.6752720333409701E-02 0.6660133967581916E-02 0.6568497488486375E-02 0.6477803128219479E-02 + 0.6388043165519663E-02 0.6299209925814047E-02 0.6211295781262146E-02 0.6124293150797016E-02 0.6038194500163917E-02 + 0.5952992341956366E-02 0.5868679235650055E-02 0.5785247787634298E-02 0.5702690651241371E-02 0.5621000526773856E-02 + 0.5540170161529816E-02 0.5460192349826328E-02 0.5381059933021076E-02 0.5302765799532243E-02 0.5225302884857029E-02 + 0.5148664171588471E-02 0.5072842689431090E-02 0.4997831515215207E-02 0.4923623772910095E-02 0.4850212633636272E-02 + 0.4777591315676702E-02 0.4705753084487369E-02 0.4634691252707118E-02 0.4564399180166933E-02 0.4494870273898941E-02 + 0.4426097988144961E-02 0.4358075824365064E-02 0.4290797331245945E-02 0.4224256104709619E-02 0.4158445787922197E-02 + 0.4093360071303100E-02 0.4028992692534918E-02 0.3965337436573796E-02 0.3902388135660784E-02 0.3840138669334105E-02 + 0.3778582964442547E-02 0.3717714995160261E-02 0.3657528783002880E-02 0.3598018396845369E-02 0.3539177952941635E-02 + 0.3481001614946027E-02 0.3423483593937147E-02 0.3366618148443765E-02 0.3310399584473416E-02 0.3254822255543565E-02 + 0.3199880562715664E-02 0.3145568954632342E-02 0.3091881927557716E-02 0.3038814025421337E-02 0.2986359839865667E-02 + 0.2934514010297470E-02 0.2883271223943334E-02 0.2832626215909399E-02 0.2782573769245732E-02 0.2733108715015361E-02 + 0.2684225932368273E-02 0.2635920348620736E-02 0.2588186939339922E-02 0.2541020728434335E-02 0.2494416788250113E-02 + 0.2448370239673485E-02 0.2402876252239763E-02 0.2357930044248895E-02 0.2313526882888074E-02 0.2269662084361452E-02 + 0.2226331014027437E-02 0.2183529086543647E-02 0.2141251766019886E-02 0.2099494566179429E-02 0.2058253050528833E-02 + 0.2017522832536582E-02 0.1977299575820819E-02 0.1937578994346416E-02 0.1898356852631761E-02 0.1859628965965341E-02 + 0.1821391200632576E-02 0.1783639474153031E-02 0.1746369755528287E-02 0.1709578065500809E-02 0.1673260476823867E-02 + 0.1637413114542927E-02 0.1602032156288575E-02 0.1567113832581223E-02 0.1532654427147850E-02 0.1498650277250755E-02 + 0.1465097774028671E-02 0.1431993362850165E-02 0.1399333543679485E-02 0.1367114871454921E-02 0.1335333956479567E-02 + 0.1303987464824598E-02 0.1273072118744786E-02 0.1242584697106271E-02 0.1212522035826240E-02 0.1182881028324278E-02 + 0.1153658625985074E-02 0.1124851838631879E-02 0.1096457735010339E-02 0.1068473443281882E-02 0.1040896151525936E-02 + 0.1013723108250083E-02 0.9869516229069582E-03 0.9605790664167954E-03 0.9346028716940452E-03 0.9090205341765010E-03 + 0.8838296123550832E-03 0.8590277283020786E-03 0.8346125681955534E-03 0.8105818828371373E-03 0.7869334881601800E-03 + 0.7636652657249203E-03 0.7407751631967363E-03 0.7182611948033279E-03 0.6961214417659799E-03 0.6743540526996259E-03 + 0.6529572439758464E-03 0.6319293000421489E-03 0.6112685736903467E-03 0.5909734862658870E-03 0.5710425278092155E-03 + 0.5514742571193334E-03 0.5322673017285347E-03 0.5134203577763651E-03 0.4949321897694443E-03 0.4768016302125221E-03 + 0.4590275790946831E-03 0.4416090032129194E-03 0.4245449353136761E-03 0.4078344730309316E-03 0.3914767775974666E-03 + 0.3754710723036193E-03 0.3598166406754878E-03 0.3445128243419585E-03 0.3295590205570407E-03 0.3149546793411112E-03 + 0.3006993002013562E-03 0.2867924283882840E-03 0.2732336506415988E-03 0.2600225903747107E-03 0.2471589022432513E-03 + 0.2346422660385661E-03 0.2224723798427698E-03 0.2106489523774314E-03 0.1991716944731751E-03 0.1880403095829506E-03 + 0.1772544832569928E-03 0.1668138714930798E-03 0.1567180878715900E-03 0.1469666893810824E-03 0.1375591608372710E-03 + 0.1284948977961454E-03 0.1197731878613226E-03 0.1113931902866863E-03 0.1033539137784803E-03 0.9565419240704367E-04 + 0.8829265954769630E-04 0.8126771978413778E-04 0.7457751872672617E-04 0.6821991072362678E-04 0.6219242447627770E-04 + 0.5649222661344906E-04 0.5111608333233986E-04 0.4606032028242377E-04 0.4132078095054316E-04 0.3689278390632745E-04 + 0.3277107938782920E-04 0.2894980585093507E-04 0.2542244727468145E-04 0.2218179221009314E-04 0.1921989578338595E-04 + 0.1652804611495441E-04 0.1409673689099332E-04 0.1191564811913617E-04 0.9973637403230573E-05 0.8258744369264157E-05 + 0.6758211140689631E-05 0.5458521963065276E-05 0.4345465168603044E-05 0.3404220589992921E-05 0.2619475202729796E-05 + 0.1975569103509067E-05 0.1456672814492850E-05 0.1046995232007964E-05 0.7310192213004316E-06 0.4937588492987344E-06 + 0.3210285891032542E-06 0.1997107219284094E-06 0.1180030350752796E-06 0.6562550627018659E-07 0.3396305969110393E-07 + 0.1612304561662313E-07 0.6892228656363058E-08 0.2589636663001748E-08 0.8280887390551865E-09 0.2156614040605737E-09 + 0.4301139703498805E-10 0.6010118005039632E-11 0.5149083260942099E-12 0.2193180426472887E-13 0.3274661750280784E-15 + 0.9138109562588437E-18 0.1354704193168576E-21 0.5668023630192864E-28 0.1003507143230543E-40 0.5696705688614969E-79 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 1 1.0080 1.8000 fcc + 0.0000000000000000E+00 -0.1535560579048078E+00 -0.2907237616945244E+00 -0.4159976694362098E+00 -0.5313742240924204E+00 + -0.6381516341634162E+00 -0.7372865497340048E+00 -0.8295323942693905E+00 -0.9155075568639930E+00 -0.9957340210656841E+00 + -0.1070661374993902E+01 -0.1140682768426532E+01 -0.1206146070115003E+01 -0.1267361986331669E+01 -0.1324610161159111E+01 + -0.1378143882981543E+01 -0.1428193796698535E+01 -0.1474970886958801E+01 -0.1518668914237085E+01 -0.1559466431801390E+01 + -0.1597528475905044E+01 -0.1633007997183788E+01 -0.1666047084236993E+01 -0.1696778018255523E+01 -0.1725324188761563E+01 + -0.1751800894031140E+01 -0.1776316044902340E+01 -0.1798970786973415E+01 -0.1819860053348930E+01 -0.1839073057876778E+01 + -0.1856693737076276E+01 -0.1872801147573207E+01 -0.1887469824748019E+01 -0.1900770107406360E+01 -0.1912768432550330E+01 + -0.1923527603729046E+01 -0.1933107035951585E+01 -0.1941562979733216E+01 -0.1948948726501137E+01 -0.1955314797295812E+01 + -0.1960709116458849E+01 -0.1965177171789682E+01 -0.1968762162475479E+01 -0.1971505135945817E+01 -0.1973445114672207E+01 + -0.1974619213818786E+01 -0.1975062750551728E+01 -0.1974809345728893E+01 -0.1973891018616083E+01 -0.1972338275210313E+01 + -0.1970180190692498E+01 -0.1967444486480829E+01 -0.1964157602310837E+01 -0.1960344763727966E+01 -0.1956030045342894E+01 + -0.1951236430167903E+01 -0.1945985865324263E+01 -0.1940299314385106E+01 -0.1934196806595530E+01 -0.1927697483190939E+01 + -0.1920819641016471E+01 -0.1913580773633311E+01 -0.1905997610082929E+01 -0.1898086151466418E+01 -0.1889861705483819E+01 + -0.1881338919067047E+01 -0.1872531809229777E+01 -0.1863453792248377E+01 -0.1854117711279363E+01 -0.1844535862511214E+01 + -0.1834720019941148E+01 -0.1824681458861012E+01 -0.1814430978130464E+01 -0.1803978921310083E+01 -0.1793335196722089E+01 + -0.1782509296501631E+01 -0.1771510314697401E+01 -0.1760346964476296E+01 -0.1749027594483329E+01 -0.1737560204404532E+01 + -0.1725952459777540E+01 -0.1714211706091635E+01 -0.1702344982216385E+01 -0.1690359033195583E+01 -0.1678260322440748E+01 + -0.1666055043356523E+01 -0.1653749130428169E+01 -0.1641348269799635E+01 -0.1628857909368793E+01 -0.1616283268425060E+01 + -0.1603629346852960E+01 -0.1590900933923877E+01 -0.1578102616696916E+01 -0.1565238788048639E+01 -0.1552313654350187E+01 + -0.1539331242809444E+01 -0.1526295408494650E+01 -0.1513209841055223E+01 -0.1500078071154424E+01 -0.1486903476627897E+01 + -0.1473689288381174E+01 -0.1460438596038697E+01 -0.1447154353356060E+01 -0.1433839383406718E+01 -0.1420496383553594E+01 + -0.1407127930215773E+01 -0.1393736483439595E+01 -0.1380324391283206E+01 -0.1366893894023143E+01 -0.1353447128190937E+01 + -0.1339986130447453E+01 -0.1326512841302277E+01 -0.1313029108685023E+01 -0.1299536691375160E+01 -0.1286037262296563E+01 + -0.1272532411682773E+01 -0.1259023650118594E+01 -0.1245512411463359E+01 -0.1232000055660992E+01 -0.1218487871441779E+01 + -0.1204977078920362E+01 -0.1191468832094503E+01 -0.1177964221248664E+01 -0.1164464275266519E+01 -0.1150969963856213E+01 + -0.1137482199691838E+01 -0.1124001840474834E+01 -0.1110529690918452E+01 -0.1097066504658454E+01 -0.1083612986093118E+01 + -0.1070169792155417E+01 -0.1056737534020013E+01 -0.1043316778747819E+01 -0.1029908050870580E+01 -0.1016511833917833E+01 + -0.1003128571888578E+01 -0.9897586706698354E+00 -0.9764024994041254E+00 -0.9630603918080221E+00 -0.9497326474434862E+00 + -0.9364195329439393E+00 -0.9231212831968543E+00 -0.9098381024844113E+00 -0.8965701655839697E+00 -0.8833176188297485E+00 + -0.8700805811373453E+00 -0.8568591449923775E+00 -0.8436533774046202E+00 -0.8304633208290344E+00 -0.8172889940547750E+00 + -0.8041303930634986E+00 -0.7909874918580566E+00 -0.7778602432626174E+00 -0.7647485796954503E+00 -0.7516524139151204E+00 + -0.7385716397412827E+00 -0.7255061327509165E+00 -0.7124557509508342E+00 -0.6994203354274540E+00 -0.6863997109745679E+00 + -0.6733936866998824E+00 -0.6604020566111790E+00 -0.6474246001827013E+00 -0.6344610829025981E+00 -0.6215112568020091E+00 + -0.6085748609664665E+00 -0.5956516220302268E+00 -0.5827412546541748E+00 -0.5698434619878014E+00 -0.5569579361158532E+00 + -0.5440843584902399E+00 -0.5312224003475492E+00 -0.5183717231128886E+00 -0.5055319787902968E+00 -0.4927028103404054E+00 + -0.4798838520455784E+00 -0.4670747298631208E+00 -0.4542750617668665E+00 -0.4414844580776081E+00 -0.4287025217826503E+00 + -0.4159288488449873E+00 -0.4031630285022929E+00 -0.3904046435562347E+00 -0.3776532706523132E+00 -0.3649084805505702E+00 + -0.3521698383875012E+00 -0.3394369039294391E+00 -0.3267092318177014E+00 -0.3139863718057774E+00 -0.3012678689887569E+00 + -0.2885532640253530E+00 -0.2758420933527601E+00 -0.2631338893944120E+00 -0.2504281807610877E+00 -0.2377244924455082E+00 + -0.2250223460105389E+00 -0.2123212597713198E+00 -0.1996207489715085E+00 -0.1869203259537742E+00 -0.1742195003247300E+00 + -0.1615177791145765E+00 -0.1488146669314823E+00 -0.1361096661109569E+00 -0.1234022768604086E+00 -0.1106919973989453E+00 + -0.9797832409262908E-01 -0.8526075158534008E-01 -0.7253877292531064E-01 -0.5981187968757973E-01 -0.4707956209239161E-01 + -0.3434130911979061E-01 -0.2159660862033985E-01 -0.8844947422254279E-02 0.3914188564942300E-02 0.1668131425026886E-01 + 0.2945694526441001E-01 0.4224159786604931E-01 0.5503578885129357E-01 0.6784003546613926E-01 0.8065485532187089E-01 + 0.9348076631322821E-01 0.1063182865393753E+00 0.1191679342274936E+00 0.1320302276589731E+00 0.1449056850980641E+00 + 0.1577948247229719E+00 0.1706981645593397E+00 0.1836162224158824E+00 0.1965495158223847E+00 0.2094985619696659E+00 + 0.2224638776517585E+00 0.2354459792100279E+00 0.2484453824792379E+00 0.2614626027354943E+00 0.2744981546460752E+00 + 0.2875525522209847E+00 0.3006263087661927E+00 0.3137199368386514E+00 0.3268339482028364E+00 0.3399688537888836E+00 + 0.3531251636522359E+00 0.3663033869348276E+00 0.3795040318275802E+00 0.3927276055344020E+00 0.4059746142374676E+00 + 0.4192455630638039E+00 0.4325409560532072E+00 0.4458612961272428E+00 0.4592070850596310E+00 0.4725788234476167E+00 + 0.4859770106845307E+00 0.4994021449334540E+00 0.5128547231018850E+00 0.5263352408174535E+00 0.5398441924046491E+00 + 0.5533820708624786E+00 0.5669493678430300E+00 0.5805465736309947E+00 0.5941741771240481E+00 0.6078326658140436E+00 + 0.6215225257691057E+00 0.6352442416164141E+00 0.6489982965258876E+00 0.6627851721945213E+00 0.6766053488314805E+00 + 0.6904593051439232E+00 0.7043475183234973E+00 0.7182704640335023E+00 0.7322286163966445E+00 0.7462224479835151E+00 + 0.7602524298016173E+00 0.7743190312849433E+00 0.7884227202841974E+00 0.8025639630575290E+00 0.8167432242618240E+00 + 0.8309609669444393E+00 0.8452176525355792E+00 0.8595137408410123E+00 0.8738496900353998E+00 0.8882259566559134E+00 + 0.9026429955964752E+00 0.9171012601023203E+00 0.9316012017649666E+00 0.9461432705176964E+00 0.9607279146312910E+00 + 0.9753555807102323E+00 0.9900267136892760E+00 0.1004741756830290E+01 0.1019501151719556E+01 0.1034305338265334E+01 + 0.1049154754695761E+01 0.1064049837557060E+01 0.1078991021712077E+01 0.1093978740339108E+01 0.1109013424930930E+01 + 0.1124095505294220E+01 0.1139225409549223E+01 0.1154403564129567E+01 0.1169630393782453E+01 0.1184906321569069E+01 + 0.1200231768865166E+01 0.1215607155361878E+01 0.1231032899066835E+01 0.1246509416305429E+01 0.1262037121722220E+01 + 0.1277616428282728E+01 0.1293247747275209E+01 0.1308931488312698E+01 0.1324668059335260E+01 0.1340457866612423E+01 + 0.1356301314745660E+01 0.1372198806671151E+01 0.1388150743662683E+01 0.1404157525334607E+01 0.1420219549645083E+01 + 0.1436337212899343E+01 0.1452510909753110E+01 0.1468741033216232E+01 0.1485027974656301E+01 0.1501372123802541E+01 + 0.1517773868749642E+01 0.1534233595961925E+01 0.1550751690277352E+01 0.1567328534911856E+01 0.1583964511463701E+01 + 0.1600659999917852E+01 0.1617415378650525E+01 0.1634231024433875E+01 0.1651107312440629E+01 0.1668044616248917E+01 + 0.1685043307847061E+01 0.1702103757638609E+01 0.1719226334447252E+01 0.1736411405521971E+01 0.1753659336542133E+01 + 0.1770970491622715E+01 0.1788345233319539E+01 0.1805783922634601E+01 0.1823286919021478E+01 0.1840854580390711E+01 + 0.1858487263115261E+01 0.1876185322036066E+01 0.1893949110467636E+01 0.1911778980203568E+01 0.1929675281522265E+01 + 0.1947638363192579E+01 0.1965668572479554E+01 0.1983766255150165E+01 0.2001931755479132E+01 0.2020165416254637E+01 + 0.2038467578784327E+01 0.2056838582901055E+01 0.2075278766968794E+01 0.2093788467888599E+01 0.2112368021104497E+01 + 0.2131017760609439E+01 0.2149738018951330E+01 0.2168529127238993E+01 0.2187391415148134E+01 0.2206325210927415E+01 + 0.2225330841404466E+01 0.2244408631991916E+01 0.2263558906693465E+01 0.2282781988109954E+01 0.2302078197445396E+01 + 0.2321447854513099E+01 0.2340891277741691E+01 0.2360408784181265E+01 0.2380000689509425E+01 0.2399667308037372E+01 + 0.2419408952716023E+01 0.2439225935142099E+01 0.2459118565564146E+01 0.2479087152888749E+01 0.2499132004686517E+01 + 0.2519253427198186E+01 0.2539451725340665E+01 0.2559727202713198E+01 0.2580080161603353E+01 0.2600510902993117E+01 + 0.2621019726564874E+01 0.2641606930707586E+01 0.2662272812522710E+01 0.2683017667830213E+01 0.2703841791174714E+01 + 0.2724745475831364E+01 0.2745729013811853E+01 0.2766792695870475E+01 0.2787936811510058E+01 0.2809161648987794E+01 + 0.2830467495321410E+01 0.2851854636294917E+01 0.2873323356464579E+01 0.2894873939164848E+01 0.2916506666514209E+01 + 0.2938221819421049E+01 0.2960019677589501E+01 0.2981900519525381E+01 0.3003864622541801E+01 0.3025912262765175E+01 + 0.3048043715140940E+01 0.3070259253439192E+01 0.3092559150260705E+01 0.3114943677042409E+01 0.3137413104063187E+01 + 0.3159967700449641E+01 0.3182607734181641E+01 0.3205333472098077E+01 0.3228145179902447E+01 0.3251043122168472E+01 + 0.3274027562345680E+01 0.3297098762765072E+01 0.3320256984644469E+01 0.3343502488094288E+01 0.3366835532122889E+01 + 0.3390256374642066E+01 0.3413765272472630E+01 0.3437362481349784E+01 0.3461048255928476E+01 0.3484822849788961E+01 + 0.3508686515442005E+01 0.3532639504334363E+01 0.3556682066854127E+01 0.3580814452335925E+01 0.3605036909066328E+01 + 0.3629349684289036E+01 0.3653753024210198E+01 0.3678247174003544E+01 0.3702832377815693E+01 0.3727508878771226E+01 + 0.3752276918977883E+01 0.3777136739531759E+01 0.3802088580522303E+01 0.3827132681037432E+01 0.3852269279168641E+01 + 0.3877498612015998E+01 0.3902820915693174E+01 0.3928236425332438E+01 0.3953745375089617E+01 0.3979347998149013E+01 + 0.4005044526728421E+01 0.4030835192083855E+01 0.4056720224514617E+01 0.4082699853368021E+01 0.4108774307044248E+01 + 0.4134943813001183E+01 0.4161208597759163E+01 0.4187568886905720E+01 0.4214024905100390E+01 0.4240576876079345E+01 + 0.4267225022660046E+01 0.4293969566746052E+01 0.4320810729331575E+01 0.4347748730506037E+01 0.4374783789458776E+01 + 0.4401916124483547E+01 0.4429145952983095E+01 0.4456473491473638E+01 0.4483898955589500E+01 0.4511422560087357E+01 + 0.4539044518850936E+01 0.4566765044895316E+01 0.4594584350371322E+01 0.4622502646570012E+01 0.4650520143926894E+01 + 0.4678637052026418E+01 0.4706853579606230E+01 0.4735169934561444E+01 0.4763586323948928E+01 0.4792102953991607E+01 + 0.4820720030082579E+01 0.4849437756789456E+01 0.4878256337858449E+01 0.4907175976218555E+01 0.4936196873985707E+01 + 0.4965319232466936E+01 0.4994543252164328E+01 0.5023869132779231E+01 0.5053297073216303E+01 0.5082827271587405E+01 + 0.5112459925215758E+01 0.5142195230639895E+01 0.5172033383617539E+01 0.5201974579129658E+01 0.5232019011384368E+01 + 0.5262166873820703E+01 0.5292418359112656E+01 0.5322773659173003E+01 0.5353232965157039E+01 0.5383796467466556E+01 + 0.5414464355753495E+01 0.5445236818923759E+01 0.5476114045141041E+01 0.5507096221830388E+01 0.5538183535682169E+01 + 0.5569376172655497E+01 0.5600674317982096E+01 0.5632078156169850E+01 0.5663587871006478E+01 0.5695203645563089E+01 + 0.5726925662197861E+01 0.5758754102559550E+01 0.5790689147591050E+01 0.5822730977532937E+01 0.5854879771926981E+01 + 0.5887135709619618E+01 0.5919498968765412E+01 0.5951969726830611E+01 0.5984548160596443E+01 0.6017234446162569E+01 + 0.6050028758950551E+01 0.6082931273707150E+01 0.6115942164507743E+01 0.6149061604759621E+01 0.6182289767205272E+01 + 0.6215626823925810E+01 0.6249072946344119E+01 0.6282628305228231E+01 0.6316293070694456E+01 0.6350067412210745E+01 + 0.6383951498599807E+01 0.6417945498042277E+01 0.6452049578080040E+01 0.6486263905619155E+01 0.6520588646933274E+01 + 0.6555023967666467E+01 0.6589570032836555E+01 0.6624227006838173E+01 0.6658995053445667E+01 0.6693874335816274E+01 + 0.6728865016493213E+01 0.6763967257408575E+01 0.6799181219886369E+01 0.6834507064645582E+01 0.6869944951802993E+01 + 0.6905495040876272E+01 0.6941157490786817E+01 0.6976932459862688E+01 0.7012820105841560E+01 0.7048820585873601E+01 + 0.7084934056524147E+01 0.7121160673776924E+01 0.7157500593036525E+01 0.7193953969131448E+01 0.7230520956316742E+01 + 0.7267201708277015E+01 0.7303996378128941E+01 0.7340905118424199E+01 0.7377928081152227E+01 0.7415065417742714E+01 + 0.7452317279068625E+01 0.7489683815448713E+01 0.7527165176650154E+01 0.7564761511891398E+01 0.7602472969844660E+01 + 0.7640299698638533E+01 0.7678241845860797E+01 0.7716299558560847E+01 0.7754472983252295E+01 0.7792762265915677E+01 + 0.7831167552000825E+01 0.7869688986429596E+01 0.7908326713598298E+01 0.7947080877380213E+01 0.7985951621128103E+01 + 0.8024939087676790E+01 0.8064043419345456E+01 0.8103264757940238E+01 0.8142603244756712E+01 0.8182059020582113E+01 + 0.8221632225698052E+01 0.8261322999882655E+01 0.8301131482413128E+01 0.8341057812068073E+01 0.8381102127129775E+01 + 0.8421264565386728E+01 0.8461545264135914E+01 0.8501944360185011E+01 0.8542461989854800E+01 0.8583098288981544E+01 + 0.8623853392919127E+01 0.8664727436541362E+01 0.8705720554244369E+01 0.8746832879948686E+01 0.8788064547101555E+01 + 0.8829415688679173E+01 0.8870886437188865E+01 0.8912476924671346E+01 0.8954187282702780E+01 0.8996017642397092E+01 + 0.9037968134408045E+01 0.9080038888931480E+01 0.9122230035707283E+01 0.9164541704021747E+01 0.9206974022709504E+01 + 0.9249527120155676E+01 0.9292201124297971E+01 0.9334996162628819E+01 0.9377912362197343E+01 0.9420949849611493E+01 + 0.9464108751040072E+01 0.9507389192214658E+01 0.9550791298431900E+01 0.9594315194555200E+01 0.9637961005016923E+01 + 0.9681728853820376E+01 0.9725618864541687E+01 0.9769631160331837E+01 0.9813765863918640E+01 0.9858023097608644E+01 + 0.9902402983288997E+01 0.9946905642429570E+01 0.9991531196084678E+01 0.1003627976489508E+02 0.1008115146908984E+02 + 0.1012614642848822E+02 0.1017126476250151E+02 0.1021650659013498E+02 0.1026187202998970E+02 0.1030736120026423E+02 + 0.1035297421875671E+02 0.1039871120286647E+02 0.1044457226959594E+02 0.1049055753555247E+02 0.1053666711695001E+02 + 0.1058290112961095E+02 0.1062925968896805E+02 0.1067574291006588E+02 0.1072235090756281E+02 0.1076908379573268E+02 + 0.1081594168846656E+02 0.1086292469927445E+02 0.1091003294128697E+02 0.1095726652725712E+02 0.1100462556956189E+02 + 0.1105211018020406E+02 0.1109972047081387E+02 0.1114745655265044E+02 0.1119531853660384E+02 0.1124330653319640E+02 + 0.1129142065258453E+02 0.1133966100456022E+02 0.1138802769855287E+02 0.1143652084363064E+02 0.1148514054850226E+02 + 0.1153388692151854E+02 0.1158276007067394E+02 0.1163176010360828E+02 0.1168088712760808E+02 0.1173014124960834E+02 + 0.1177952257619401E+02 0.1182903121360145E+02 0.1187866726772023E+02 0.1192843084409426E+02 0.1197832204792367E+02 + 0.1202834098406616E+02 0.1207848775703852E+02 0.1212876247101815E+02 0.1217916522984446E+02 0.1222969613702057E+02 + 0.1228035529571446E+02 0.1233114280876082E+02 0.1238205877866202E+02 0.1243310330759011E+02 0.1248427649738783E+02 + 0.1253557844957024E+02 0.1258700926532612E+02 0.1263856904551937E+02 0.1269025789069041E+02 0.1274207590105764E+02 + 0.1279402317651873E+02 0.1284609981665210E+02 0.1289830592071831E+02 0.1295064158766139E+02 0.1300310691611016E+02 + 0.1305570200437972E+02 0.1310842695047267E+02 0.1316128185208051E+02 0.1321426680658502E+02 0.1326738191105951E+02 + 0.1332062726227020E+02 0.1337400295667756E+02 0.1342750909043750E+02 0.1348114575940276E+02 0.1353491305912430E+02 + 0.1358881108485235E+02 0.1364283993153797E+02 0.1369699969383405E+02 0.1375129046609678E+02 0.1380571234238685E+02 + 0.1386026541647074E+02 0.1391494978182183E+02 0.1396976553162181E+02 0.1402471275876187E+02 0.1407979155584384E+02 + 0.1413500201518157E+02 0.1419034422880200E+02 0.1424581828844641E+02 0.1430142428557176E+02 0.1435716231135165E+02 + 0.1441303245667767E+02 0.1446903481216061E+02 0.1452516946813144E+02 0.1458143651464284E+02 0.1463783604146995E+02 + 0.1469436813811187E+02 0.1475103289379257E+02 0.1480783039746221E+02 0.1486476073779820E+02 0.1492182400320636E+02 + 0.1497902028182210E+02 0.1503634966151138E+02 0.1509381222987208E+02 0.1515140807423487E+02 0.1520913728166454E+02 + 0.1526699993896084E+02 0.1532499613265989E+02 0.1538312594903494E+02 0.1544138947409778E+02 0.1549978679359965E+02 + 0.1555831799303221E+02 0.1561698315762881E+02 0.1567578237236552E+02 0.1573471572196207E+02 0.1579378329088299E+02 + 0.1585298516333866E+02 0.1591232142328633E+02 0.1597179215443117E+02 0.1603139744022732E+02 0.1609113736387884E+02 + 0.1615101200834081E+02 0.1621102145632030E+02 0.1627116579027744E+02 0.1633144509242638E+02 0.1639185944473622E+02 + 0.1645240892893225E+02 0.1651309362649662E+02 0.1657391361866950E+02 0.1663486898645014E+02 0.1669595981059768E+02 + 0.1675718617163216E+02 0.1681854814983560E+02 0.1688004582525278E+02 0.1694167927769237E+02 0.1700344858672776E+02 + 0.1706535383169809E+02 0.1712739509170910E+02 0.1718957244563422E+02 0.1725188597211529E+02 0.1731433574956364E+02 + 0.1737692185616106E+02 0.1743964436986050E+02 0.1750250336838723E+02 0.1756549892923954E+02 0.1762863112968988E+02 + 0.1769190004678551E+02 0.1775530575734953E+02 0.1781884833798184E+02 0.1788252786505983E+02 0.1794634441473943E+02 + 0.1801029806295595E+02 0.1807438888542495E+02 0.1813861695764293E+02 0.1820298235488868E+02 0.1826748515222356E+02 + 0.1833212542449270E+02 0.1839690324632588E+02 0.1846181869213811E+02 0.1852687183613067E+02 0.1859206275229210E+02 + 0.1865739151439864E+02 0.1872285819601541E+02 0.1878846287049704E+02 0.1885420561098861E+02 0.1892008649042634E+02 + 0.1898610558153868E+02 0.1905226295684672E+02 0.1911855868866527E+02 0.1918499284910370E+02 0.1925156551006659E+02 + 0.1931827674325448E+02 0.1938512662016491E+02 0.1945211521209302E+02 0.1951924259013235E+02 0.1958650882517566E+02 + 0.1965391398791571E+02 0.1972145814884597E+02 0.1978914137826159E+02 0.1985696374625988E+02 0.1992492532274116E+02 + 0.1999302617740977E+02 0.2006126637977442E+02 0.2012964599914926E+02 0.2019816510465454E+02 0.2026682376521724E+02 + 0.2033562204957191E+02 0.2040456002626147E+02 0.2047363776363781E+02 0.2054285532986256E+02 0.2061221279290795E+02 + 0.2068171022055733E+02 0.2075134768040595E+02 0.2082112523986171E+02 0.2089104296614605E+02 0.2096110092629424E+02 + 0.2103129918715649E+02 0.2110163781539841E+02 0.2117211687750176E+02 0.2124273643976533E+02 0.2131349656830528E+02 + 0.2138439732905617E+02 0.2145543878777140E+02 0.2152662101002412E+02 0.2159794406120766E+02 0.2166940800653642E+02 + 0.2174101291104644E+02 0.2181275883959610E+02 0.2188464585686669E+02 0.2195667402736326E+02 0.2202884341541514E+02 + 0.2210115408517663E+02 0.2217360610062771E+02 0.2224619952557461E+02 0.2231893442365038E+02 0.2239181085831591E+02 + 0.2246482889286010E+02 0.2253798859040076E+02 0.2261129001388523E+02 0.2268473322609096E+02 0.2275831828962614E+02 + 0.2283204526693043E+02 0.2290591422027539E+02 0.2297992521176526E+02 0.2305407830333766E+02 0.2312837355676387E+02 + 0.2320281103364977E+02 0.2327739079543636E+02 0.2335211290340030E+02 0.2342697741865454E+02 0.2350198440214897E+02 + 0.2357713391467102E+02 0.2365242601684612E+02 0.2372786076913854E+02 0.2380343823185174E+02 0.2387915846512908E+02 + 0.2395502152895441E+02 0.2403102748315263E+02 0.2410717638739019E+02 0.2418346830117586E+02 0.2425990328386112E+02 + 0.2433648139464079E+02 0.2441320269255370E+02 0.2449006723648306E+02 0.2456707508515719E+02 0.2464422629715007E+02 + 0.2472152093088173E+02 0.2479895904461906E+02 0.2487654069647616E+02 0.2495426594441500E+02 0.2503213484624594E+02 + 0.2511014745962827E+02 0.2518830384207072E+02 0.2526660405093208E+02 0.2534504814342175E+02 0.2542363617660013E+02 + 0.2550236820737923E+02 0.2558124429252339E+02 0.2566026448864954E+02 0.2573942885222773E+02 0.2581873743958190E+02 + 0.2589819030689023E+02 0.2597778751018570E+02 0.2605752910535647E+02 0.2613741514814674E+02 0.2621744569415681E+02 + 0.2629762079884404E+02 0.2637794051752302E+02 0.2645840490536618E+02 0.2653901401740439E+02 0.2661976790852737E+02 + 0.2670066663348421E+02 0.2678171024688378E+02 0.2686289880319548E+02 0.2694423235674941E+02 0.2702571096173704E+02 + 0.2710733467221175E+02 0.2718910354208919E+02 0.2727101762514775E+02 0.2735307697502924E+02 0.2743528164523912E+02 + 0.2751763168914713E+02 0.2760012715998774E+02 0.2768276811086066E+02 0.2776555459473111E+02 0.2784848666443062E+02 + 0.2793156437265721E+02 0.2801478777197602E+02 0.2809815691481973E+02 0.2818167185348894E+02 0.2826533264015273E+02 + 0.2834913932684915E+02 0.2843309196548557E+02 0.2851719060783909E+02 0.2860143530555727E+02 0.2868582611015826E+02 + 0.2877036307303130E+02 0.2885504624543746E+02 0.2893987567850965E+02 0.2902485142325337E+02 0.2910997353054712E+02 + 0.2919524205114265E+02 0.2928065703566552E+02 0.2936621853461569E+02 0.2945192659836760E+02 0.2953778127717089E+02 + 0.2962378262115081E+02 0.2970993068030837E+02 0.2979622550452115E+02 0.2988266714354346E+02 0.2996925564700682E+02 + 0.3005599106442041E+02 0.3014287344517153E+02 0.3022990283852592E+02 0.3031707929362812E+02 0.3040440285950215E+02 + 0.3049187358505165E+02 0.3057949151906041E+02 0.3066725671019266E+02 0.3075516920699371E+02 0.3084322905789012E+02 + 0.3093143631119021E+02 0.3101979101508448E+02 0.3110829321764588E+02 0.3119694296683040E+02 0.3128574031047729E+02 + 0.3137468529630954E+02 0.3146377797193422E+02 0.3155301838484299E+02 0.3164240658241237E+02 0.3173194261190401E+02 + 0.3182162652046552E+02 0.3191145835513032E+02 0.3200143816281827E+02 0.3209156599033621E+02 0.3218184188437798E+02 + 0.3227226589152506E+02 0.3236283805824685E+02 0.3245355843090114E+02 0.3254442705573426E+02 0.3263544397888169E+02 + 0.3272660924636835E+02 0.3281792290410885E+02 0.3290938499790812E+02 0.3300099557346138E+02 0.3309275467635493E+02 + 0.3318466235206626E+02 0.3327671864596444E+02 0.3336892360331044E+02 0.3346127726925774E+02 0.3355377968885226E+02 + 0.3364643090703304E+02 0.3373923096863262E+02 0.3383217991837713E+02 0.3392527780088678E+02 0.3401852466067623E+02 + 0.3411192054215498E+02 0.3420546548962749E+02 0.3429915954729392E+02 0.3439300275925001E+02 0.3448699516948774E+02 + 0.3458113682189561E+02 0.3467542776025882E+02 0.3476986802825981E+02 0.3486445766947862E+02 0.3495919672739288E+02 + 0.3505408524537850E+02 0.3514912326671002E+02 0.3524431083456054E+02 0.3533964799200239E+02 0.3543513478200754E+02 + 0.3553077124744756E+02 0.3562655743109424E+02 0.3572249337561980E+02 0.3581857912359721E+02 0.3591481471750058E+02 + 0.3601120019970533E+02 0.3610773561248870E+02 0.3620442099802995E+02 0.3630125639841068E+02 0.3639824185561516E+02 + 0.3649537741153064E+02 0.3659266310794771E+02 0.3669009898656054E+02 0.3678768508896718E+02 0.3688542145666988E+02 + 0.3698330813107555E+02 0.3708134515349577E+02 0.3717938217591600E+02 0.3727741919833622E+02 0.3737545622075644E+02 + 0.0000000000000000E+00 0.8576998932607242E-09 0.5148474978702150E-07 0.5500333859843751E-06 0.2898571356744415E-05 + 0.1037065667137954E-04 0.2904394432880980E-04 0.6869069328866988E-04 0.1435525383839498E-03 0.2729524897641136E-03 + 0.4817179545381958E-03 0.8004046139757985E-03 0.1265323067409609E-02 0.1918378981427738E-02 0.2806743664553777E-02 + 0.3982376035816319E-02 0.5501419303057878E-02 0.7423496677200373E-02 0.9810930426149240E-02 0.1272790776956854E-01 + 0.1623961574245743E-01 0.2041136538278681E-01 0.2530772356585144E-01 0.3099166862766308E-01 0.3752378368081732E-01 + 0.4496149929855063E-01 0.5335839507962672E-01 0.6276356754813610E-01 0.7322106991690198E-01 0.8476942747035206E-01 + 0.9744123071429918E-01 0.1112628070018588E+00 0.1262539700776599E+00 0.1424278458837341E+00 0.1597907720342443E+00 + 0.1783422675846084E+00 0.1980750690841191E+00 0.2189752283993167E+00 0.2410222674169928E+00 0.2641893844693322E+00 + 0.2884437071578631E+00 0.3137465861762969E+00 0.3400539247340754E+00 0.3673165382520538E+00 0.3954805391293457E+00 + 0.4244877415567311E+00 0.4542760815685687E+00 0.4847800477740307E+00 0.5159311184824792E+00 0.5476582012304797E+00 + 0.5798880710234582E+00 0.6125458039182285E+00 0.6455552028889719E+00 0.6788392132348257E+00 0.7123203250985853E+00 + 0.7459209609702914E+00 0.7795638463441852E+00 0.8131723619807327E+00 0.8466708764954843E+00 0.8799850582522438E+00 + 0.9130421657784031E+00 0.9457713161447614E+00 0.9781037309602292E+00 0.1009972959823397E+01 0.1041315081248019E+01 + 0.1072068881238206E+01 0.1102176009831869E+01 0.1131581116058128E+01 0.1160231961866557E+01 0.1188079515683897E+01 + 0.1215078026337852E+01 0.1241185078158618E+01 0.1266361628127532E+01 0.1290572025989520E+01 0.1313784018282635E+01 + 0.1335968737264703E+01 0.1357100675734715E+01 0.1377157648755932E+01 0.1396120743289401E+01 0.1413974256741546E+01 + 0.1430705625418266E+01 0.1446305343861415E+01 0.1460766876022088E+01 0.1474086559199635E+01 0.1486263501646126E+01 + 0.1497299474703849E+01 0.1507198800308697E+01 0.1515968234655533E+01 0.1523616848783268E+01 0.1530155906797786E+01 + 0.1535598742410441E+01 0.1539960634428920E+01 0.1543258681796175E+01 0.1545511678732089E+01 0.1546739990491811E+01 + 0.1546965430214609E+01 0.1546211137297620E+01 0.1544501457690412E+01 0.1541861826468803E+01 0.1538318653010165E+01 + 0.1533899209057386E+01 0.1528631519925127E+01 0.1522544259069783E+01 0.1515666646213862E+01 0.1508028349186392E+01 + 0.1499659389613263E+01 0.1490590052565443E+01 0.1480850800248451E+01 0.1470472189793603E+01 0.1459484795190111E+01 + 0.1447919133377286E+01 0.1435805594497667E+01 0.1423174376295045E+01 0.1410055422625766E+01 0.1396478366037582E+01 + 0.1382472474357517E+01 0.1368066601218609E+01 0.1353289140445096E+01 0.1338167984206406E+01 0.1322730484842268E+01 + 0.1307003420254224E+01 0.1291012962752784E+01 0.1274784651244435E+01 0.1258343366638420E+01 0.1241713310349911E+01 + 0.1224917985773531E+01 0.1207980182599308E+01 0.1190921963841912E+01 0.1173764655453436E+01 0.1156528838389896E+01 + 0.1139234343002130E+01 0.1121900245622720E+01 0.1104544867221897E+01 0.1087185774007220E+01 0.1069839779843846E+01 + 0.1052522950374696E+01 0.1035250608722480E+01 0.1018037342658465E+01 0.1000897013126039E+01 0.9838427640104167E+00 + 0.9668870330493002E+00 0.9500415637828995E+00 0.9333174184453955E+00 0.9167249917036894E+00 0.9002740251531050E+00 + 0.8839736224835302E+00 0.8678322652333790E+00 0.8518578290525983E+00 0.8360576003997890E+00 0.8204382936023470E+00 + 0.8050060682122852E+00 0.7897665465941298E+00 0.7747248316849636E+00 0.7598855248702404E+00 0.7452527439225495E+00 + 0.7308301409539072E+00 0.7166209203354966E+00 0.7026278565420246E+00 0.6888533118809829E+00 0.6752992540701540E+00 + 0.6619672736296282E+00 0.6488586010574048E+00 0.6359741237603777E+00 0.6233144027150980E+00 0.6108796888351882E+00 + 0.5986699390246809E+00 0.5866848318987949E+00 0.5749237831558405E+00 0.5633859605859940E+00 0.5520702987046087E+00 + 0.5409755129995881E+00 0.5301001137840697E+00 0.5194424196473048E+00 0.5090005704981659E+00 0.4987725401971368E+00 + 0.4887561487740056E+00 0.4789490742297346E+00 0.4693488639221445E+00 0.4599529455361500E+00 0.4507586376402879E+00 + 0.4417631598321903E+00 0.4329636424765457E+00 0.4243571360398264E+00 0.4159406200268177E+00 0.4077110115246057E+00 + 0.3996651733602655E+00 0.3917999218790373E+00 0.3841120343502322E+00 0.3765982560085148E+00 0.3692553067386082E+00 + 0.3620798874117488E+00 0.3550686858825059E+00 0.3482183826548197E+00 0.3415256562262722E+00 0.3349871881197929E+00 + 0.3285996676120873E+00 0.3223597961681734E+00 0.3162642915914723E+00 0.3103098918988991E+00 0.3044933589304323E+00 + 0.2988114817025848E+00 0.2932610795151651E+00 0.2878390048206519E+00 0.2825421458654130E+00 0.2773674291118858E+00 + 0.2723118214507413E+00 0.2673723322118953E+00 0.2625460149830915E+00 0.2578299692446370E+00 0.2532213418286768E+00 + 0.2487173282112436E+00 0.2443151736451206E+00 0.2400121741413617E+00 0.2358056773071348E+00 0.2316930830473297E+00 + 0.2276718441371882E+00 0.2237394666729961E+00 0.2198935104076650E+00 0.2161315889778330E+00 0.2124513700288889E+00 + 0.2088505752441177E+00 0.2053269802839583E+00 0.2018784146411472E+00 0.1985027614173130E+00 0.1951979570263882E+00 + 0.1919619908299856E+00 0.1887929047096988E+00 0.1856887925810768E+00 0.1826477998538276E+00 0.1796681228426198E+00 + 0.1767480081326520E+00 0.1738857519039822E+00 0.1710796992184251E+00 0.1683282432726463E+00 0.1656298246209137E+00 + 0.1629829303707959E+00 0.1603860933549304E+00 0.1578378912818327E+00 0.1553369458685551E+00 0.1528819219578573E+00 + 0.1504715266224071E+00 0.1481045082583851E+00 0.1457796556707337E+00 0.1434957971521608E+00 0.1412517995578756E+00 + 0.1390465673779208E+00 0.1368790418088395E+00 0.1347481998263070E+00 0.1326530532602482E+00 0.1305926478738530E+00 + 0.1285660624478085E+00 0.1265724078709661E+00 0.1246108262385681E+00 0.1226804899590787E+00 0.1207806008705706E+00 + 0.1189103893675429E+00 0.1170691135389732E+00 0.1152560583183238E+00 0.1134705346461653E+00 0.1117118786460041E+00 + 0.1099794508138442E+00 0.1082726352219536E+00 0.1065908387372449E+00 0.1049334902546352E+00 0.1033000399456902E+00 + 0.1016899585228177E+00 0.1001027365192277E+00 0.9853788358483354E-01 0.9699492779823146E-01 0.9547341499485665E-01 + 0.9397290811138079E-01 0.9249298654638069E-01 0.9103324553728220E-01 0.8959329555354877E-01 0.8817276170606399E-01 + 0.8677128317262857E-01 0.8538851263947052E-01 0.8402411575864875E-01 0.8267777062120664E-01 0.8134916724591848E-01 + 0.8003800708345375E-01 0.7874400253576731E-01 0.7746687649051477E-01 0.7620636187027600E-01 0.7496220119635953E-01 + 0.7373414616695294E-01 0.7252195724937327E-01 0.7132540328616367E-01 0.7014426111477837E-01 0.6897831520058859E-01 + 0.6782735728294027E-01 0.6669118603398869E-01 0.6556960673003079E-01 0.6446243093505667E-01 0.6336947619623536E-01 + 0.6229056575105237E-01 0.6122552824581402E-01 0.6017419746523230E-01 0.5913641207280737E-01 0.5811201536172281E-01 + 0.5710085501597033E-01 0.5610278288142408E-01 0.5511765474658521E-01 0.5414533013271837E-01 0.5318567209310896E-01 + 0.5223854702116695E-01 0.5130382446711163E-01 0.5038137696297216E-01 0.4947107985564236E-01 0.4857281114773465E-01 + 0.4768645134597841E-01 0.4681188331691594E-01 0.4594899214965088E-01 0.4509766502540915E-01 0.4425779109367826E-01 + 0.4342926135469399E-01 0.4261196854804814E-01 0.4180580704719781E-01 0.4101067275965932E-01 0.4022646303267519E-01 + 0.3945307656414969E-01 0.3869041331864940E-01 0.3793837444827467E-01 0.3719686221820911E-01 0.3646577993676117E-01 + 0.3574503188971662E-01 0.3503452327882445E-01 0.3433416016424531E-01 0.3364384941079507E-01 0.3296349863782079E-01 + 0.3229301617255276E-01 0.3163231100677876E-01 0.3098129275669249E-01 0.3033987162577284E-01 0.2970795837055464E-01 + 0.2908546426915543E-01 0.2847230109242889E-01 0.2786838107761748E-01 0.2727361690438311E-01 0.2668792167309761E-01 + 0.2611120888527847E-01 0.2554339242606102E-01 0.2498438654859956E-01 0.2443410586029598E-01 0.2389246531075691E-01 + 0.2335938018138393E-01 0.2283476607650571E-01 0.2231853891596374E-01 0.2181061492906659E-01 0.2131091064983147E-01 + 0.2081934291343454E-01 0.2033582885379438E-01 0.1986028590221680E-01 0.1939263178703108E-01 0.1893278453415130E-01 + 0.1848066246849892E-01 0.1803618421622546E-01 0.1759926870767613E-01 0.1716983518103927E-01 0.1674780318662707E-01 + 0.1633309259173651E-01 0.1592562358604172E-01 0.1552531668746990E-01 0.1513209274851720E-01 0.1474587296296080E-01 + 0.1436657887292672E-01 0.1399413237627429E-01 0.1362845573426023E-01 0.1326947157944628E-01 0.1291710292381743E-01 + 0.1257127316707774E-01 0.1223190610509324E-01 0.1189892593845275E-01 0.1157225728111806E-01 0.1125182516913743E-01 + 0.1093755506939646E-01 0.1062937288838200E-01 0.1032720498093588E-01 0.1003097815897619E-01 0.9740619700164219E-02 + 0.9456057356497178E-02 0.9177219362806280E-02 0.8904034445141316E-02 0.8636431829023183E-02 0.8374341247546036E-02 + 0.8117692949311960E-02 0.7866417706180585E-02 0.7620446820816740E-02 0.7379712134019578E-02 0.7144146031816014E-02 + 0.6913681452302325E-02 0.6688251892216657E-02 0.6467791413225554E-02 0.6252234647907211E-02 0.6041516805413253E-02 + 0.5835573676791136E-02 0.5634341639947666E-02 0.5437757664233824E-02 0.5245759314629934E-02 0.5058284755509180E-02 + 0.4875272753955811E-02 0.4696662682613547E-02 0.4522394522037392E-02 0.4352408862520555E-02 0.4186646905366133E-02 + 0.4025050463570553E-02 0.3867561961883894E-02 0.3714124436208813E-02 0.3564681532297067E-02 0.3419177503699341E-02 + 0.3277557208920367E-02 0.3139766107727285E-02 0.3005750256555324E-02 0.2875456302949815E-02 0.2748831478978852E-02 + 0.2625823593545541E-02 0.2506381023522792E-02 0.2390452703627873E-02 0.2277988114946939E-02 0.2168937272013016E-02 + 0.2063250708333439E-02 0.1960879460254761E-02 0.1861775049045227E-02 0.1765889461065943E-02 0.1673175125893125E-02 + 0.1583584892244586E-02 0.1497072001553956E-02 0.1413590059026983E-02 0.1333093002004349E-02 0.1255535065446408E-02 + 0.1180870744346243E-02 0.1109054752869345E-02 0.1040041980010902E-02 0.9737874415562595E-03 0.9102462281261181E-03 + 0.8493734490870866E-03 0.7911241721104120E-03 0.7354533581681445E-03 0.6823157917680999E-03 0.6316660062474194E-03 + 0.5834582039715675E-03 0.5376461713226330E-03 0.4941831884102573E-03 0.4530219335027502E-03 0.4141143822583456E-03 + 0.3774117019399670E-03 0.3428641409258591E-03 0.3104209139870729E-03 0.2800300839961760E-03 0.2516384409654113E-03 + 0.2251913795924475E-03 0.2006327768245250E-03 0.1779048713433524E-03 0.1569481473297049E-03 0.1377012253937927E-03 + 0.1201007641585952E-03 0.1040813766598551E-03 0.8957556647504338E-04 0.7651368930508610E-04 0.6482394658893534E-04 + 0.5443241860150438E-04 0.4526314532314971E-04 0.3723826410463467E-04 0.3027821368846399E-04 0.2430201435404447E-04 + 0.1922763365777299E-04 0.1497244622116435E-04 0.1145379401469120E-04 0.8589650285013768E-05 0.6299385349542388E-05 + 0.4504625622961494E-05 0.3130188220885624E-05 0.2105062280742719E-05 0.1363395085845545E-05 0.8454270900288885E-06 + 0.4983067594254876E-06 0.2767065679872027E-06 0.1431594160449781E-06 0.6804490613003522E-07 0.2918182930693568E-07 + 0.1102919874006033E-07 0.3560261260656263E-08 0.9406176465862757E-09 0.1916420214061158E-09 0.2763777688791933E-10 + 0.2482312356945943E-11 0.1136644735947497E-12 0.1904831683752850E-14 0.6466043629846817E-17 0.1381172060080856E-20 + 0.1274303700193166E-26 0.2106088550891557E-38 0.1212886175035114E-71 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.8576998932607242E-09 0.5148474978702150E-07 0.5500333859843751E-06 0.2898571356744415E-05 + 0.1037065667137954E-04 0.2904394432880980E-04 0.6869069328866988E-04 0.1435525383839498E-03 0.2729524897641136E-03 + 0.4817179545381958E-03 0.8004046139757985E-03 0.1265323067409609E-02 0.1918378981427738E-02 0.2806743664553777E-02 + 0.3982376035816319E-02 0.5501419303057878E-02 0.7423496677200373E-02 0.9810930426149240E-02 0.1272790776956854E-01 + 0.1623961574245743E-01 0.2041136538278681E-01 0.2530772356585144E-01 0.3099166862766308E-01 0.3752378368081732E-01 + 0.4496149929855063E-01 0.5335839507962672E-01 0.6276356754813610E-01 0.7322106991690198E-01 0.8476942747035206E-01 + 0.9744123071429918E-01 0.1112628070018588E+00 0.1262539700776599E+00 0.1424278458837341E+00 0.1597907720342443E+00 + 0.1783422675846084E+00 0.1980750690841191E+00 0.2189752283993167E+00 0.2410222674169928E+00 0.2641893844693322E+00 + 0.2884437071578631E+00 0.3137465861762969E+00 0.3400539247340754E+00 0.3673165382520538E+00 0.3954805391293457E+00 + 0.4244877415567311E+00 0.4542760815685687E+00 0.4847800477740307E+00 0.5159311184824792E+00 0.5476582012304797E+00 + 0.5798880710234582E+00 0.6125458039182285E+00 0.6455552028889719E+00 0.6788392132348257E+00 0.7123203250985853E+00 + 0.7459209609702914E+00 0.7795638463441852E+00 0.8131723619807327E+00 0.8466708764954843E+00 0.8799850582522438E+00 + 0.9130421657784031E+00 0.9457713161447614E+00 0.9781037309602292E+00 0.1009972959823397E+01 0.1041315081248019E+01 + 0.1072068881238206E+01 0.1102176009831869E+01 0.1131581116058128E+01 0.1160231961866557E+01 0.1188079515683897E+01 + 0.1215078026337852E+01 0.1241185078158618E+01 0.1266361628127532E+01 0.1290572025989520E+01 0.1313784018282635E+01 + 0.1335968737264703E+01 0.1357100675734715E+01 0.1377157648755932E+01 0.1396120743289401E+01 0.1413974256741546E+01 + 0.1430705625418266E+01 0.1446305343861415E+01 0.1460766876022088E+01 0.1474086559199635E+01 0.1486263501646126E+01 + 0.1497299474703849E+01 0.1507198800308697E+01 0.1515968234655533E+01 0.1523616848783268E+01 0.1530155906797786E+01 + 0.1535598742410441E+01 0.1539960634428920E+01 0.1543258681796175E+01 0.1545511678732089E+01 0.1546739990491811E+01 + 0.1546965430214609E+01 0.1546211137297620E+01 0.1544501457690412E+01 0.1541861826468803E+01 0.1538318653010165E+01 + 0.1533899209057386E+01 0.1528631519925127E+01 0.1522544259069783E+01 0.1515666646213862E+01 0.1508028349186392E+01 + 0.1499659389613263E+01 0.1490590052565443E+01 0.1480850800248451E+01 0.1470472189793603E+01 0.1459484795190111E+01 + 0.1447919133377286E+01 0.1435805594497667E+01 0.1423174376295045E+01 0.1410055422625766E+01 0.1396478366037582E+01 + 0.1382472474357517E+01 0.1368066601218609E+01 0.1353289140445096E+01 0.1338167984206406E+01 0.1322730484842268E+01 + 0.1307003420254224E+01 0.1291012962752784E+01 0.1274784651244435E+01 0.1258343366638420E+01 0.1241713310349911E+01 + 0.1224917985773531E+01 0.1207980182599308E+01 0.1190921963841912E+01 0.1173764655453436E+01 0.1156528838389896E+01 + 0.1139234343002130E+01 0.1121900245622720E+01 0.1104544867221897E+01 0.1087185774007220E+01 0.1069839779843846E+01 + 0.1052522950374696E+01 0.1035250608722480E+01 0.1018037342658465E+01 0.1000897013126039E+01 0.9838427640104167E+00 + 0.9668870330493002E+00 0.9500415637828995E+00 0.9333174184453955E+00 0.9167249917036894E+00 0.9002740251531050E+00 + 0.8839736224835302E+00 0.8678322652333790E+00 0.8518578290525983E+00 0.8360576003997890E+00 0.8204382936023470E+00 + 0.8050060682122852E+00 0.7897665465941298E+00 0.7747248316849636E+00 0.7598855248702404E+00 0.7452527439225495E+00 + 0.7308301409539072E+00 0.7166209203354966E+00 0.7026278565420246E+00 0.6888533118809829E+00 0.6752992540701540E+00 + 0.6619672736296282E+00 0.6488586010574048E+00 0.6359741237603777E+00 0.6233144027150980E+00 0.6108796888351882E+00 + 0.5986699390246809E+00 0.5866848318987949E+00 0.5749237831558405E+00 0.5633859605859940E+00 0.5520702987046087E+00 + 0.5409755129995881E+00 0.5301001137840697E+00 0.5194424196473048E+00 0.5090005704981659E+00 0.4987725401971368E+00 + 0.4887561487740056E+00 0.4789490742297346E+00 0.4693488639221445E+00 0.4599529455361500E+00 0.4507586376402879E+00 + 0.4417631598321903E+00 0.4329636424765457E+00 0.4243571360398264E+00 0.4159406200268177E+00 0.4077110115246057E+00 + 0.3996651733602655E+00 0.3917999218790373E+00 0.3841120343502322E+00 0.3765982560085148E+00 0.3692553067386082E+00 + 0.3620798874117488E+00 0.3550686858825059E+00 0.3482183826548197E+00 0.3415256562262722E+00 0.3349871881197929E+00 + 0.3285996676120873E+00 0.3223597961681734E+00 0.3162642915914723E+00 0.3103098918988991E+00 0.3044933589304323E+00 + 0.2988114817025848E+00 0.2932610795151651E+00 0.2878390048206519E+00 0.2825421458654130E+00 0.2773674291118858E+00 + 0.2723118214507413E+00 0.2673723322118953E+00 0.2625460149830915E+00 0.2578299692446370E+00 0.2532213418286768E+00 + 0.2487173282112436E+00 0.2443151736451206E+00 0.2400121741413617E+00 0.2358056773071348E+00 0.2316930830473297E+00 + 0.2276718441371882E+00 0.2237394666729961E+00 0.2198935104076650E+00 0.2161315889778330E+00 0.2124513700288889E+00 + 0.2088505752441177E+00 0.2053269802839583E+00 0.2018784146411472E+00 0.1985027614173130E+00 0.1951979570263882E+00 + 0.1919619908299856E+00 0.1887929047096988E+00 0.1856887925810768E+00 0.1826477998538276E+00 0.1796681228426198E+00 + 0.1767480081326520E+00 0.1738857519039822E+00 0.1710796992184251E+00 0.1683282432726463E+00 0.1656298246209137E+00 + 0.1629829303707959E+00 0.1603860933549304E+00 0.1578378912818327E+00 0.1553369458685551E+00 0.1528819219578573E+00 + 0.1504715266224071E+00 0.1481045082583851E+00 0.1457796556707337E+00 0.1434957971521608E+00 0.1412517995578756E+00 + 0.1390465673779208E+00 0.1368790418088395E+00 0.1347481998263070E+00 0.1326530532602482E+00 0.1305926478738530E+00 + 0.1285660624478085E+00 0.1265724078709661E+00 0.1246108262385681E+00 0.1226804899590787E+00 0.1207806008705706E+00 + 0.1189103893675429E+00 0.1170691135389732E+00 0.1152560583183238E+00 0.1134705346461653E+00 0.1117118786460041E+00 + 0.1099794508138442E+00 0.1082726352219536E+00 0.1065908387372449E+00 0.1049334902546352E+00 0.1033000399456902E+00 + 0.1016899585228177E+00 0.1001027365192277E+00 0.9853788358483354E-01 0.9699492779823146E-01 0.9547341499485665E-01 + 0.9397290811138079E-01 0.9249298654638069E-01 0.9103324553728220E-01 0.8959329555354877E-01 0.8817276170606399E-01 + 0.8677128317262857E-01 0.8538851263947052E-01 0.8402411575864875E-01 0.8267777062120664E-01 0.8134916724591848E-01 + 0.8003800708345375E-01 0.7874400253576731E-01 0.7746687649051477E-01 0.7620636187027600E-01 0.7496220119635953E-01 + 0.7373414616695294E-01 0.7252195724937327E-01 0.7132540328616367E-01 0.7014426111477837E-01 0.6897831520058859E-01 + 0.6782735728294027E-01 0.6669118603398869E-01 0.6556960673003079E-01 0.6446243093505667E-01 0.6336947619623536E-01 + 0.6229056575105237E-01 0.6122552824581402E-01 0.6017419746523230E-01 0.5913641207280737E-01 0.5811201536172281E-01 + 0.5710085501597033E-01 0.5610278288142408E-01 0.5511765474658521E-01 0.5414533013271837E-01 0.5318567209310896E-01 + 0.5223854702116695E-01 0.5130382446711163E-01 0.5038137696297216E-01 0.4947107985564236E-01 0.4857281114773465E-01 + 0.4768645134597841E-01 0.4681188331691594E-01 0.4594899214965088E-01 0.4509766502540915E-01 0.4425779109367826E-01 + 0.4342926135469399E-01 0.4261196854804814E-01 0.4180580704719781E-01 0.4101067275965932E-01 0.4022646303267519E-01 + 0.3945307656414969E-01 0.3869041331864940E-01 0.3793837444827467E-01 0.3719686221820911E-01 0.3646577993676117E-01 + 0.3574503188971662E-01 0.3503452327882445E-01 0.3433416016424531E-01 0.3364384941079507E-01 0.3296349863782079E-01 + 0.3229301617255276E-01 0.3163231100677876E-01 0.3098129275669249E-01 0.3033987162577284E-01 0.2970795837055464E-01 + 0.2908546426915543E-01 0.2847230109242889E-01 0.2786838107761748E-01 0.2727361690438311E-01 0.2668792167309761E-01 + 0.2611120888527847E-01 0.2554339242606102E-01 0.2498438654859956E-01 0.2443410586029598E-01 0.2389246531075691E-01 + 0.2335938018138393E-01 0.2283476607650571E-01 0.2231853891596374E-01 0.2181061492906659E-01 0.2131091064983147E-01 + 0.2081934291343454E-01 0.2033582885379438E-01 0.1986028590221680E-01 0.1939263178703108E-01 0.1893278453415130E-01 + 0.1848066246849892E-01 0.1803618421622546E-01 0.1759926870767613E-01 0.1716983518103927E-01 0.1674780318662707E-01 + 0.1633309259173651E-01 0.1592562358604172E-01 0.1552531668746990E-01 0.1513209274851720E-01 0.1474587296296080E-01 + 0.1436657887292672E-01 0.1399413237627429E-01 0.1362845573426023E-01 0.1326947157944628E-01 0.1291710292381743E-01 + 0.1257127316707774E-01 0.1223190610509324E-01 0.1189892593845275E-01 0.1157225728111806E-01 0.1125182516913743E-01 + 0.1093755506939646E-01 0.1062937288838200E-01 0.1032720498093588E-01 0.1003097815897619E-01 0.9740619700164219E-02 + 0.9456057356497178E-02 0.9177219362806280E-02 0.8904034445141316E-02 0.8636431829023183E-02 0.8374341247546036E-02 + 0.8117692949311960E-02 0.7866417706180585E-02 0.7620446820816740E-02 0.7379712134019578E-02 0.7144146031816014E-02 + 0.6913681452302325E-02 0.6688251892216657E-02 0.6467791413225554E-02 0.6252234647907211E-02 0.6041516805413253E-02 + 0.5835573676791136E-02 0.5634341639947666E-02 0.5437757664233824E-02 0.5245759314629934E-02 0.5058284755509180E-02 + 0.4875272753955811E-02 0.4696662682613547E-02 0.4522394522037392E-02 0.4352408862520555E-02 0.4186646905366133E-02 + 0.4025050463570553E-02 0.3867561961883894E-02 0.3714124436208813E-02 0.3564681532297067E-02 0.3419177503699341E-02 + 0.3277557208920367E-02 0.3139766107727285E-02 0.3005750256555324E-02 0.2875456302949815E-02 0.2748831478978852E-02 + 0.2625823593545541E-02 0.2506381023522792E-02 0.2390452703627873E-02 0.2277988114946939E-02 0.2168937272013016E-02 + 0.2063250708333439E-02 0.1960879460254761E-02 0.1861775049045227E-02 0.1765889461065943E-02 0.1673175125893125E-02 + 0.1583584892244586E-02 0.1497072001553956E-02 0.1413590059026983E-02 0.1333093002004349E-02 0.1255535065446408E-02 + 0.1180870744346243E-02 0.1109054752869345E-02 0.1040041980010902E-02 0.9737874415562595E-03 0.9102462281261181E-03 + 0.8493734490870866E-03 0.7911241721104120E-03 0.7354533581681445E-03 0.6823157917680999E-03 0.6316660062474194E-03 + 0.5834582039715675E-03 0.5376461713226330E-03 0.4941831884102573E-03 0.4530219335027502E-03 0.4141143822583456E-03 + 0.3774117019399670E-03 0.3428641409258591E-03 0.3104209139870729E-03 0.2800300839961760E-03 0.2516384409654113E-03 + 0.2251913795924475E-03 0.2006327768245250E-03 0.1779048713433524E-03 0.1569481473297049E-03 0.1377012253937927E-03 + 0.1201007641585952E-03 0.1040813766598551E-03 0.8957556647504338E-04 0.7651368930508610E-04 0.6482394658893534E-04 + 0.5443241860150438E-04 0.4526314532314971E-04 0.3723826410463467E-04 0.3027821368846399E-04 0.2430201435404447E-04 + 0.1922763365777299E-04 0.1497244622116435E-04 0.1145379401469120E-04 0.8589650285013768E-05 0.6299385349542388E-05 + 0.4504625622961494E-05 0.3130188220885624E-05 0.2105062280742719E-05 0.1363395085845545E-05 0.8454270900288885E-06 + 0.4983067594254876E-06 0.2767065679872027E-06 0.1431594160449781E-06 0.6804490613003522E-07 0.2918182930693568E-07 + 0.1102919874006033E-07 0.3560261260656263E-08 0.9406176465862757E-09 0.1916420214061158E-09 0.2763777688791933E-10 + 0.2482312356945943E-11 0.1136644735947497E-12 0.1904831683752850E-14 0.6466043629846817E-17 0.1381172060080856E-20 + 0.1274303700193166E-26 0.2106088550891557E-38 0.1212886175035114E-71 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.8576998932607242E-09 0.5148474978702150E-07 0.5500333859843751E-06 0.2898571356744415E-05 + 0.1037065667137954E-04 0.2904394432880980E-04 0.6869069328866988E-04 0.1435525383839498E-03 0.2729524897641136E-03 + 0.4817179545381958E-03 0.8004046139757985E-03 0.1265323067409609E-02 0.1918378981427738E-02 0.2806743664553777E-02 + 0.3982376035816319E-02 0.5501419303057878E-02 0.7423496677200373E-02 0.9810930426149240E-02 0.1272790776956854E-01 + 0.1623961574245743E-01 0.2041136538278681E-01 0.2530772356585144E-01 0.3099166862766308E-01 0.3752378368081732E-01 + 0.4496149929855063E-01 0.5335839507962672E-01 0.6276356754813610E-01 0.7322106991690198E-01 0.8476942747035206E-01 + 0.9744123071429918E-01 0.1112628070018588E+00 0.1262539700776599E+00 0.1424278458837341E+00 0.1597907720342443E+00 + 0.1783422675846084E+00 0.1980750690841191E+00 0.2189752283993167E+00 0.2410222674169928E+00 0.2641893844693322E+00 + 0.2884437071578631E+00 0.3137465861762969E+00 0.3400539247340754E+00 0.3673165382520538E+00 0.3954805391293457E+00 + 0.4244877415567311E+00 0.4542760815685687E+00 0.4847800477740307E+00 0.5159311184824792E+00 0.5476582012304797E+00 + 0.5798880710234582E+00 0.6125458039182285E+00 0.6455552028889719E+00 0.6788392132348257E+00 0.7123203250985853E+00 + 0.7459209609702914E+00 0.7795638463441852E+00 0.8131723619807327E+00 0.8466708764954843E+00 0.8799850582522438E+00 + 0.9130421657784031E+00 0.9457713161447614E+00 0.9781037309602292E+00 0.1009972959823397E+01 0.1041315081248019E+01 + 0.1072068881238206E+01 0.1102176009831869E+01 0.1131581116058128E+01 0.1160231961866557E+01 0.1188079515683897E+01 + 0.1215078026337852E+01 0.1241185078158618E+01 0.1266361628127532E+01 0.1290572025989520E+01 0.1313784018282635E+01 + 0.1335968737264703E+01 0.1357100675734715E+01 0.1377157648755932E+01 0.1396120743289401E+01 0.1413974256741546E+01 + 0.1430705625418266E+01 0.1446305343861415E+01 0.1460766876022088E+01 0.1474086559199635E+01 0.1486263501646126E+01 + 0.1497299474703849E+01 0.1507198800308697E+01 0.1515968234655533E+01 0.1523616848783268E+01 0.1530155906797786E+01 + 0.1535598742410441E+01 0.1539960634428920E+01 0.1543258681796175E+01 0.1545511678732089E+01 0.1546739990491811E+01 + 0.1546965430214609E+01 0.1546211137297620E+01 0.1544501457690412E+01 0.1541861826468803E+01 0.1538318653010165E+01 + 0.1533899209057386E+01 0.1528631519925127E+01 0.1522544259069783E+01 0.1515666646213862E+01 0.1508028349186392E+01 + 0.1499659389613263E+01 0.1490590052565443E+01 0.1480850800248451E+01 0.1470472189793603E+01 0.1459484795190111E+01 + 0.1447919133377286E+01 0.1435805594497667E+01 0.1423174376295045E+01 0.1410055422625766E+01 0.1396478366037582E+01 + 0.1382472474357517E+01 0.1368066601218609E+01 0.1353289140445096E+01 0.1338167984206406E+01 0.1322730484842268E+01 + 0.1307003420254224E+01 0.1291012962752784E+01 0.1274784651244435E+01 0.1258343366638420E+01 0.1241713310349911E+01 + 0.1224917985773531E+01 0.1207980182599308E+01 0.1190921963841912E+01 0.1173764655453436E+01 0.1156528838389896E+01 + 0.1139234343002130E+01 0.1121900245622720E+01 0.1104544867221897E+01 0.1087185774007220E+01 0.1069839779843846E+01 + 0.1052522950374696E+01 0.1035250608722480E+01 0.1018037342658465E+01 0.1000897013126039E+01 0.9838427640104167E+00 + 0.9668870330493002E+00 0.9500415637828995E+00 0.9333174184453955E+00 0.9167249917036894E+00 0.9002740251531050E+00 + 0.8839736224835302E+00 0.8678322652333790E+00 0.8518578290525983E+00 0.8360576003997890E+00 0.8204382936023470E+00 + 0.8050060682122852E+00 0.7897665465941298E+00 0.7747248316849636E+00 0.7598855248702404E+00 0.7452527439225495E+00 + 0.7308301409539072E+00 0.7166209203354966E+00 0.7026278565420246E+00 0.6888533118809829E+00 0.6752992540701540E+00 + 0.6619672736296282E+00 0.6488586010574048E+00 0.6359741237603777E+00 0.6233144027150980E+00 0.6108796888351882E+00 + 0.5986699390246809E+00 0.5866848318987949E+00 0.5749237831558405E+00 0.5633859605859940E+00 0.5520702987046087E+00 + 0.5409755129995881E+00 0.5301001137840697E+00 0.5194424196473048E+00 0.5090005704981659E+00 0.4987725401971368E+00 + 0.4887561487740056E+00 0.4789490742297346E+00 0.4693488639221445E+00 0.4599529455361500E+00 0.4507586376402879E+00 + 0.4417631598321903E+00 0.4329636424765457E+00 0.4243571360398264E+00 0.4159406200268177E+00 0.4077110115246057E+00 + 0.3996651733602655E+00 0.3917999218790373E+00 0.3841120343502322E+00 0.3765982560085148E+00 0.3692553067386082E+00 + 0.3620798874117488E+00 0.3550686858825059E+00 0.3482183826548197E+00 0.3415256562262722E+00 0.3349871881197929E+00 + 0.3285996676120873E+00 0.3223597961681734E+00 0.3162642915914723E+00 0.3103098918988991E+00 0.3044933589304323E+00 + 0.2988114817025848E+00 0.2932610795151651E+00 0.2878390048206519E+00 0.2825421458654130E+00 0.2773674291118858E+00 + 0.2723118214507413E+00 0.2673723322118953E+00 0.2625460149830915E+00 0.2578299692446370E+00 0.2532213418286768E+00 + 0.2487173282112436E+00 0.2443151736451206E+00 0.2400121741413617E+00 0.2358056773071348E+00 0.2316930830473297E+00 + 0.2276718441371882E+00 0.2237394666729961E+00 0.2198935104076650E+00 0.2161315889778330E+00 0.2124513700288889E+00 + 0.2088505752441177E+00 0.2053269802839583E+00 0.2018784146411472E+00 0.1985027614173130E+00 0.1951979570263882E+00 + 0.1919619908299856E+00 0.1887929047096988E+00 0.1856887925810768E+00 0.1826477998538276E+00 0.1796681228426198E+00 + 0.1767480081326520E+00 0.1738857519039822E+00 0.1710796992184251E+00 0.1683282432726463E+00 0.1656298246209137E+00 + 0.1629829303707959E+00 0.1603860933549304E+00 0.1578378912818327E+00 0.1553369458685551E+00 0.1528819219578573E+00 + 0.1504715266224071E+00 0.1481045082583851E+00 0.1457796556707337E+00 0.1434957971521608E+00 0.1412517995578756E+00 + 0.1390465673779208E+00 0.1368790418088395E+00 0.1347481998263070E+00 0.1326530532602482E+00 0.1305926478738530E+00 + 0.1285660624478085E+00 0.1265724078709661E+00 0.1246108262385681E+00 0.1226804899590787E+00 0.1207806008705706E+00 + 0.1189103893675429E+00 0.1170691135389732E+00 0.1152560583183238E+00 0.1134705346461653E+00 0.1117118786460041E+00 + 0.1099794508138442E+00 0.1082726352219536E+00 0.1065908387372449E+00 0.1049334902546352E+00 0.1033000399456902E+00 + 0.1016899585228177E+00 0.1001027365192277E+00 0.9853788358483354E-01 0.9699492779823146E-01 0.9547341499485665E-01 + 0.9397290811138079E-01 0.9249298654638069E-01 0.9103324553728220E-01 0.8959329555354877E-01 0.8817276170606399E-01 + 0.8677128317262857E-01 0.8538851263947052E-01 0.8402411575864875E-01 0.8267777062120664E-01 0.8134916724591848E-01 + 0.8003800708345375E-01 0.7874400253576731E-01 0.7746687649051477E-01 0.7620636187027600E-01 0.7496220119635953E-01 + 0.7373414616695294E-01 0.7252195724937327E-01 0.7132540328616367E-01 0.7014426111477837E-01 0.6897831520058859E-01 + 0.6782735728294027E-01 0.6669118603398869E-01 0.6556960673003079E-01 0.6446243093505667E-01 0.6336947619623536E-01 + 0.6229056575105237E-01 0.6122552824581402E-01 0.6017419746523230E-01 0.5913641207280737E-01 0.5811201536172281E-01 + 0.5710085501597033E-01 0.5610278288142408E-01 0.5511765474658521E-01 0.5414533013271837E-01 0.5318567209310896E-01 + 0.5223854702116695E-01 0.5130382446711163E-01 0.5038137696297216E-01 0.4947107985564236E-01 0.4857281114773465E-01 + 0.4768645134597841E-01 0.4681188331691594E-01 0.4594899214965088E-01 0.4509766502540915E-01 0.4425779109367826E-01 + 0.4342926135469399E-01 0.4261196854804814E-01 0.4180580704719781E-01 0.4101067275965932E-01 0.4022646303267519E-01 + 0.3945307656414969E-01 0.3869041331864940E-01 0.3793837444827467E-01 0.3719686221820911E-01 0.3646577993676117E-01 + 0.3574503188971662E-01 0.3503452327882445E-01 0.3433416016424531E-01 0.3364384941079507E-01 0.3296349863782079E-01 + 0.3229301617255276E-01 0.3163231100677876E-01 0.3098129275669249E-01 0.3033987162577284E-01 0.2970795837055464E-01 + 0.2908546426915543E-01 0.2847230109242889E-01 0.2786838107761748E-01 0.2727361690438311E-01 0.2668792167309761E-01 + 0.2611120888527847E-01 0.2554339242606102E-01 0.2498438654859956E-01 0.2443410586029598E-01 0.2389246531075691E-01 + 0.2335938018138393E-01 0.2283476607650571E-01 0.2231853891596374E-01 0.2181061492906659E-01 0.2131091064983147E-01 + 0.2081934291343454E-01 0.2033582885379438E-01 0.1986028590221680E-01 0.1939263178703108E-01 0.1893278453415130E-01 + 0.1848066246849892E-01 0.1803618421622546E-01 0.1759926870767613E-01 0.1716983518103927E-01 0.1674780318662707E-01 + 0.1633309259173651E-01 0.1592562358604172E-01 0.1552531668746990E-01 0.1513209274851720E-01 0.1474587296296080E-01 + 0.1436657887292672E-01 0.1399413237627429E-01 0.1362845573426023E-01 0.1326947157944628E-01 0.1291710292381743E-01 + 0.1257127316707774E-01 0.1223190610509324E-01 0.1189892593845275E-01 0.1157225728111806E-01 0.1125182516913743E-01 + 0.1093755506939646E-01 0.1062937288838200E-01 0.1032720498093588E-01 0.1003097815897619E-01 0.9740619700164219E-02 + 0.9456057356497178E-02 0.9177219362806280E-02 0.8904034445141316E-02 0.8636431829023183E-02 0.8374341247546036E-02 + 0.8117692949311960E-02 0.7866417706180585E-02 0.7620446820816740E-02 0.7379712134019578E-02 0.7144146031816014E-02 + 0.6913681452302325E-02 0.6688251892216657E-02 0.6467791413225554E-02 0.6252234647907211E-02 0.6041516805413253E-02 + 0.5835573676791136E-02 0.5634341639947666E-02 0.5437757664233824E-02 0.5245759314629934E-02 0.5058284755509180E-02 + 0.4875272753955811E-02 0.4696662682613547E-02 0.4522394522037392E-02 0.4352408862520555E-02 0.4186646905366133E-02 + 0.4025050463570553E-02 0.3867561961883894E-02 0.3714124436208813E-02 0.3564681532297067E-02 0.3419177503699341E-02 + 0.3277557208920367E-02 0.3139766107727285E-02 0.3005750256555324E-02 0.2875456302949815E-02 0.2748831478978852E-02 + 0.2625823593545541E-02 0.2506381023522792E-02 0.2390452703627873E-02 0.2277988114946939E-02 0.2168937272013016E-02 + 0.2063250708333439E-02 0.1960879460254761E-02 0.1861775049045227E-02 0.1765889461065943E-02 0.1673175125893125E-02 + 0.1583584892244586E-02 0.1497072001553956E-02 0.1413590059026983E-02 0.1333093002004349E-02 0.1255535065446408E-02 + 0.1180870744346243E-02 0.1109054752869345E-02 0.1040041980010902E-02 0.9737874415562595E-03 0.9102462281261181E-03 + 0.8493734490870866E-03 0.7911241721104120E-03 0.7354533581681445E-03 0.6823157917680999E-03 0.6316660062474194E-03 + 0.5834582039715675E-03 0.5376461713226330E-03 0.4941831884102573E-03 0.4530219335027502E-03 0.4141143822583456E-03 + 0.3774117019399670E-03 0.3428641409258591E-03 0.3104209139870729E-03 0.2800300839961760E-03 0.2516384409654113E-03 + 0.2251913795924475E-03 0.2006327768245250E-03 0.1779048713433524E-03 0.1569481473297049E-03 0.1377012253937927E-03 + 0.1201007641585952E-03 0.1040813766598551E-03 0.8957556647504338E-04 0.7651368930508610E-04 0.6482394658893534E-04 + 0.5443241860150438E-04 0.4526314532314971E-04 0.3723826410463467E-04 0.3027821368846399E-04 0.2430201435404447E-04 + 0.1922763365777299E-04 0.1497244622116435E-04 0.1145379401469120E-04 0.8589650285013768E-05 0.6299385349542388E-05 + 0.4504625622961494E-05 0.3130188220885624E-05 0.2105062280742719E-05 0.1363395085845545E-05 0.8454270900288885E-06 + 0.4983067594254876E-06 0.2767065679872027E-06 0.1431594160449781E-06 0.6804490613003522E-07 0.2918182930693568E-07 + 0.1102919874006033E-07 0.3560261260656263E-08 0.9406176465862757E-09 0.1916420214061158E-09 0.2763777688791933E-10 + 0.2482312356945943E-11 0.1136644735947497E-12 0.1904831683752850E-14 0.6466043629846817E-17 0.1381172060080856E-20 + 0.1274303700193166E-26 0.2106088550891557E-38 0.1212886175035114E-71 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.3765610317640694E+00 0.7400358894127599E+00 0.1090712381667745E+01 0.1428873061247002E+01 + 0.1754795319320031E+01 0.2068751483890357E+01 0.2371008922950546E+01 0.2661830152878451E+01 0.2941472952229258E+01 + 0.3210190480819170E+01 0.3468231403786657E+01 0.3715840020150198E+01 0.3953256395252374E+01 0.4180716496383695E+01 + 0.4398452330811846E+01 0.4606692085398965E+01 0.4805660266967400E+01 0.4995577842570571E+01 0.5176662378836555E+01 + 0.5349128179575754E+01 0.5513186420878141E+01 0.5669045282968079E+01 0.5816910078133630E+01 0.5956983374101555E+01 + 0.6089465112286805E+01 0.6214552720405558E+01 0.6332441219002502E+01 0.6443323321505209E+01 0.6547389527480199E+01 + 0.6644828208826436E+01 0.6735825688701171E+01 0.6820566313030878E+01 0.6899232514514866E+01 0.6972004869081964E+01 + 0.7039062144810148E+01 0.7100581343365575E+01 0.7156737734061032E+01 0.7207704880673625E+01 0.7253654661198675E+01 + 0.7294757280749858E+01 0.7331181277846054E+01 0.7363093524351962E+01 0.7390659219363427E+01 0.7414041877348629E+01 + 0.7433403310874117E+01 0.7448903608259055E+01 0.7460701106512816E+01 0.7468952359920434E+01 0.7473812104646840E+01 + 0.7475433219735298E+01 0.7473966684877387E+01 0.7469561535331859E+01 0.7462364814367910E+01 0.7452521523604532E+01 + 0.7440174571612401E+01 0.7425464721137732E+01 0.7408530535299623E+01 0.7389508323102637E+01 0.7368532084596213E+01 + 0.7345733456000793E+01 0.7321241655108376E+01 0.7295183427252115E+01 0.7267682992125909E+01 0.7238861991720891E+01 + 0.7208839439630969E+01 0.7177731671964857E+01 0.7145652300086835E+01 0.7112712165393094E+01 0.7079019296315407E+01 + 0.7044678867728360E+01 0.7009793162921103E+01 0.6974461538279471E+01 0.6938780390809384E+01 0.6902843128617441E+01 + 0.6866740144450676E+01 0.6830558792382606E+01 0.6794383367719482E+01 0.6758295090186962E+01 0.6722372090444448E+01 + 0.6686689399961921E+01 0.6651318944281731E+01 0.6616329539676658E+01 0.6581786893203926E+01 0.6547753606144576E+01 + 0.6514289180807551E+01 0.6481450030667977E+01 0.6449289493800484E+01 0.6417857849559566E+01 0.6387202338451258E+01 + 0.6357367185132800E+01 0.6328393624470087E+01 0.6300319930576388E+01 0.6273181448749665E+01 0.6247010630220808E+01 + 0.6221837069619801E+01 0.6197687545062726E+01 0.6174586060758330E+01 0.6152553892029570E+01 0.6131609632642339E+01 + 0.6111769244331025E+01 0.6093046108408382E+01 0.6075451079345281E+01 0.6058992540204510E+01 0.6043676459811814E+01 + 0.6029506451546534E+01 0.6016483833633909E+01 0.6004607690820981E+01 0.5993874937318422E+01 0.5984280380890941E+01 + 0.5975816787979942E+01 0.5968474949742999E+01 0.5962243748896129E+01 0.5957110227246338E+01 0.5953059653803552E+01 + 0.5950075593363216E+01 0.5948139975452642E+01 0.5947233163536738E+01 0.5947334024380974E+01 0.5948419997472152E+01 + 0.5950467164400099E+01 0.5953450318106323E+01 0.5957343031908459E+01 0.5962117728212475E+01 0.5967745746827388E+01 + 0.5974197412800709E+01 0.5981442103695763E+01 0.5989448316235365E+01 0.5998183732239485E+01 0.6007615283788049E+01 + 0.6017709217542990E+01 0.6028431158167253E+01 0.6039746170781648E+01 0.6051618822403686E+01 0.6064013242315937E+01 + 0.6076893181314657E+01 0.6090222069792634E+01 0.6103963074613425E+01 0.6118079154737412E+01 0.6132533115562999E+01 + 0.6147287661949624E+01 0.6162305449892092E+01 0.6177549136818604E+01 0.6192981430488190E+01 0.6208565136465474E+01 + 0.6224263204154009E+01 0.6240038771371831E+01 0.6255855207455509E+01 0.6271676154881747E+01 0.6287465569397743E+01 + 0.6303187758654289E+01 0.6318807419337479E+01 0.6334289672797612E+01 0.6349600099175650E+01 0.6364704770029900E+01 + 0.6379570279467482E+01 0.6394163773787110E+01 0.6408452979641630E+01 0.6422406230730219E+01 0.6435992493032277E+01 + 0.6449181388596262E+01 0.6461943217898319E+01 0.6474248980787193E+01 0.6486070396033000E+01 0.6497379919498787E+01 + 0.6508150760955191E+01 0.6518356899559369E+01 0.6527973098020561E+01 0.6536974915475707E+01 0.6545338719099223E+01 + 0.6553041694472095E+01 0.6560061854736102E+01 0.6566378048559677E+01 0.6571969966942736E+01 0.6576818148888014E+01 + 0.6580903985967331E+01 0.6584209725811516E+01 0.6586718474552983E+01 0.6588414198250604E+01 0.6589281723326368E+01 + 0.6589306736044133E+01 0.6588475781060250E+01 0.6586776259076728E+01 0.6584196423626929E+01 0.6580725377024553E+01 + 0.6576353065506066E+01 0.6571070273597098E+01 0.6564868617732960E+01 0.6557740539163546E+01 0.6549679296172584E+01 + 0.6540678955640928E+01 0.6530734383983693E+01 0.6519841237490329E+01 0.6507995952096807E+01 0.6495195732618538E+01 + 0.6481438541472563E+01 0.6466723086916791E+01 0.6451048810834144E+01 0.6434415876088694E+01 0.6416825153480584E+01 + 0.6398278208326170E+01 0.6378777286689151E+01 0.6358325301288192E+01 0.6336925817105747E+01 0.6314583036722893E+01 + 0.6291301785403415E+01 0.6267087495951198E+01 0.6241946193363197E+01 0.6215884479300494E+01 0.6188909516399138E+01 + 0.6161029012441793E+01 0.6132251204410994E+01 0.6102584842443767E+01 0.6072039173707282E+01 0.6040623926214209E+01 + 0.6008349292596213E+01 0.5975225913853303E+01 0.5941264863095957E+01 0.5906477629296895E+01 0.5870876101068294E+01 + 0.5834472550479789E+01 0.5797279616932335E+01 0.5759310291102085E+01 0.5720577898967909E+01 0.5681096085935931E+01 + 0.5640878801073526E+01 0.5599940281464876E+01 0.5558295036699770E+01 0.5515957833506386E+01 0.5472943680538803E+01 + 0.5429267813328917E+01 0.5384945679412595E+01 0.5339992923638538E+01 0.5294425373668760E+01 0.5248259025678392E+01 + 0.5201510030262340E+01 0.5154194678555982E+01 0.5106329388576237E+01 0.5057930691789439E+01 0.5009015219911397E+01 + 0.4959599691945191E+01 0.4909700901461299E+01 0.4859335704124821E+01 0.4808521005473441E+01 0.4757273748950229E+01 + 0.4705610904194174E+01 0.4653549455591696E+01 0.4601106391091448E+01 0.4548298691284878E+01 0.4495143318754116E+01 + 0.4441657207689196E+01 0.4387857253775341E+01 0.4333760304351776E+01 0.4279383148842287E+01 0.4224742509458196E+01 + 0.4169855032173684E+01 0.4114737277973392E+01 0.4059405714371826E+01 0.4003876707203877E+01 0.3948166512685741E+01 + 0.3892291269744721E+01 0.3836266992617200E+01 0.3780109563712459E+01 0.3723834726741400E+01 0.3667458080107569E+01 + 0.3610995070558891E+01 0.3554460987097478E+01 0.3497870955145241E+01 0.3441239930962816E+01 0.3384582696318687E+01 + 0.3327913853406216E+01 0.3271247820004922E+01 0.3214598824883478E+01 0.3157980903440747E+01 0.3101407893581784E+01 + 0.3044893431825231E+01 0.2988450949638577E+01 0.2932093669997769E+01 0.2875834604167262E+01 0.2819686548696998E+01 + 0.2763662082632170E+01 0.2707773564932239E+01 0.2652033132094799E+01 0.2596452695980827E+01 0.2541043941836626E+01 + 0.2485818326509053E+01 0.2430787076849344E+01 0.2375961188301807E+01 0.2321351423672851E+01 0.2266968312076604E+01 + 0.2212822148052429E+01 0.2158922990850521E+01 0.2105280663881218E+01 0.2051904754323755E+01 0.1998804612890416E+01 + 0.1945989353741675E+01 0.1893467854548430E+01 0.1841248756696710E+01 0.1789340465631234E+01 0.1737751151333199E+01 + 0.1686488748928507E+01 0.1635560959422214E+01 0.1584975250555055E+01 0.1534738857778293E+01 0.1484858785342541E+01 + 0.1435341807496924E+01 0.1386194469794414E+01 0.1337423090499684E+01 0.1289033762095411E+01 0.1241032352883452E+01 + 0.1193424508676993E+01 0.1146215654580135E+01 0.1099410996851037E+01 0.1053015524845333E+01 0.1007034013035967E+01 + 0.9614710231061919E+00 0.9163309061121906E+00 0.8716178047119132E+00 0.8273356554569915E+00 0.7834881911441322E+00 + 0.7400789432232032E+00 0.6971112442584428E+00 0.6545882304400988E+00 0.6125128441430950E+00 0.5708878365301393E+00 + 0.5297157701959697E+00 0.4889990218502538E+00 0.4487397850361310E+00 0.4089400728816994E+00 0.3696017208819437E+00 + 0.3307263897082250E+00 0.2923155680431669E+00 0.2543705754380062E+00 0.2168925651904757E+00 0.1798825272404206E+00 + 0.1433412910812248E+00 0.1072695286845231E+00 0.7166775743626266E-01 0.3653634308175027E-01 0.1875502677966891E-02 + -0.3231469244926006E-01 -0.6603431374472693E-01 -0.9928357246226212E-01 -0.1320628167035092E+00 -0.1643725284591359E+00 + -0.1962133206540352E+00 -0.2275859341981871E+00 -0.2584912350448162E+00 -0.2889302112573159E+00 -0.3189039700865247E+00 + -0.3484137350596561E+00 -0.3774608430824280E+00 -0.4060467415555353E+00 -0.4341729855069461E+00 -0.4618412347410261E+00 + -0.4890532510058743E+00 -0.5158108951799040E+00 -0.5421161244787339E+00 -0.5679709896834355E+00 -0.5933776323912099E+00 + -0.6183382822893291E+00 -0.6428552544532798E+00 -0.6669309466699765E+00 -0.6905678367868668E+00 -0.7137684800877064E+00 + -0.7365355066956285E+00 -0.7588716190043869E+00 -0.7807795891382519E+00 -0.8022622564412896E+00 -0.8233225249964942E+00 + -0.8439633611754367E+00 -0.8641877912188305E+00 -0.8839988988484928E+00 -0.9033998229112149E+00 -0.9223937550548300E+00 + -0.9409839374369939E+00 -0.9591736604667737E+00 -0.9769662605796675E+00 -0.9943651180460338E+00 -0.1011373654813408E+01 + -0.1027995332382722E+01 -0.1044233649718800E+01 -0.1060092141195189E+01 -0.1075574374573462E+01 -0.1090683949017157E+01 + -0.1105424493140398E+01 -0.1119799663091301E+01 -0.1133813140670142E+01 -0.1147468631482395E+01 -0.1160769863126533E+01 + -0.1173720583416712E+01 -0.1186324558640121E+01 -0.1198585571849071E+01 -0.1210507421187702E+01 -0.1222093918253196E+01 + -0.1233348886491358E+01 -0.1244276159626517E+01 -0.1254879580125511E+01 -0.1265162997695628E+01 -0.1275130267816335E+01 + -0.1284785250304552E+01 -0.1294131807913390E+01 -0.1303173804963923E+01 -0.1311915106009982E+01 -0.1320359574535607E+01 + -0.1328511071684896E+01 -0.1336373455024057E+01 -0.1343950577335306E+01 -0.1351246285442432E+01 -0.1358264419067570E+01 + -0.1365008809719085E+01 -0.1371483279610062E+01 -0.1377691640607245E+01 -0.1383637693209943E+01 -0.1389325225558719E+01 + -0.1394758012473418E+01 -0.1399939814520254E+01 -0.1404874377107532E+01 -0.1409565429609723E+01 -0.1414016684519505E+01 + -0.1418231836627389E+01 -0.1422214562228558E+01 -0.1425968518356584E+01 -0.1429497342043625E+01 -0.1432804649606689E+01 + -0.1435894035959656E+01 -0.1438769073950589E+01 -0.1441433313724035E+01 -0.1443890282107847E+01 -0.1446143482024210E+01 + -0.1448196391924410E+01 -0.1450052465247018E+01 -0.1451715129899050E+01 -0.1453187787759769E+01 -0.1454473814206628E+01 + -0.1455576557663118E+01 -0.1456499339167960E+01 -0.1457245451965397E+01 -0.1457818161116118E+01 -0.1458220703128390E+01 + -0.1458456285609144E+01 -0.1458528086934452E+01 -0.1458439255939184E+01 -0.1458192911625301E+01 -0.1457792142888557E+01 + -0.1457240008263066E+01 -0.1456539535683532E+01 -0.1455693722264615E+01 -0.1454705534097164E+01 -0.1453577906060864E+01 + -0.1452313741653029E+01 -0.1450915912833076E+01 -0.1449387259882392E+01 -0.1447730591279191E+01 -0.1445948683588039E+01 + -0.1444044281363676E+01 -0.1442020097068773E+01 -0.1439878811005344E+01 -0.1437623071259354E+01 -0.1435255493658342E+01 + -0.1432778661741579E+01 -0.1430195126742490E+01 -0.1427507407583088E+01 -0.1424717990879937E+01 -0.1421829330961478E+01 + -0.1418843849896296E+01 -0.1415763937532114E+01 -0.1412591951545110E+01 -0.1409330217499327E+01 -0.1405981028915838E+01 + -0.1402546647351420E+01 -0.1399029302486348E+01 -0.1395431192221163E+01 -0.1391754482782035E+01 -0.1388001308834431E+01 + -0.1384173773604920E+01 -0.1380273949010718E+01 -0.1376303875796823E+01 -0.1372265563680394E+01 -0.1368160991502163E+01 + -0.1363992107384622E+01 -0.1359760828896748E+01 -0.1355469043224972E+01 -0.1351118607350228E+01 -0.1346711348230812E+01 + -0.1342249062990785E+01 -0.1337733519113769E+01 -0.1333166454641865E+01 -0.1328549578379474E+01 -0.1323884570101832E+01 + -0.1319173080768030E+01 -0.1314416732738336E+01 -0.1309617119995603E+01 -0.1304775808370537E+01 -0.1299894335770717E+01 + -0.1294974212413071E+01 -0.1290016921059716E+01 -0.1285023917256931E+01 -0.1279996629577071E+01 -0.1274936459863322E+01 + -0.1269844783477041E+01 -0.1264722949547587E+01 -0.1259572281224406E+01 -0.1254394075931317E+01 -0.1249189605622732E+01 + -0.1243960117041727E+01 -0.1238706831979822E+01 -0.1233430947538271E+01 -0.1228133636390794E+01 -0.1222816047047525E+01 + -0.1217479304120173E+01 -0.1212124508588114E+01 -0.1206752738065413E+01 -0.1201365047068555E+01 -0.1195962467284892E+01 + -0.1190546007841516E+01 -0.1185116655574617E+01 -0.1179675375299079E+01 -0.1174223110078329E+01 -0.1168760781494218E+01 + -0.1163289289916911E+01 -0.1157809514774660E+01 -0.1152322314823388E+01 -0.1146828528415948E+01 -0.1141328973770988E+01 + -0.1135824449241374E+01 -0.1130315733582035E+01 -0.1124803586217146E+01 -0.1119288747506621E+01 -0.1113771939011809E+01 + -0.1108253863760298E+01 -0.1102735206509786E+01 -0.1097216634010968E+01 -0.1091698795269313E+01 -0.1086182321805725E+01 + -0.1080667827915982E+01 -0.1075155910928945E+01 -0.1069647151463423E+01 -0.1064142113683687E+01 -0.1058641345553532E+01 + -0.1053145379088904E+01 -0.1047654730608969E+01 -0.1042169900985625E+01 -0.1036691375891408E+01 -0.1031219626045731E+01 + -0.1025755107459436E+01 -0.1020298261677578E+01 -0.1014849516020502E+01 -0.1009409283823040E+01 -0.1003977964671914E+01 + -0.9985559446412423E+00 -0.9931435965261650E+00 -0.9877412800745212E+00 -0.9823493422165672E+00 -0.9769681172927177E+00 + -0.9715979272792943E+00 -0.9662390820122231E+00 -0.9608918794086823E+00 -0.9555566056867116E+00 -0.9502335355826994E+00 + -0.9449229325667899E+00 -0.9396250490561532E+00 -0.9343401266261530E+00 -0.9290683962193379E+00 -0.9238100783522983E+00 + -0.9185653833203373E+00 -0.9133345113999997E+00 -0.9081176530493820E+00 -0.9029149891062611E+00 -0.8977266909840595E+00 + -0.8925529208655598E+00 -0.8873938318944620E+00 -0.8822495683646910E+00 -0.8771202659075404E+00 -0.8720060516765797E+00 + -0.8669070445303514E+00 -0.8618233552128786E+00 -0.8567550865319589E+00 -0.8517023335352547E+00 -0.8466651836841759E+00 + -0.8416437170255952E+00 -0.8366380063613471E+00 -0.8316481174155630E+00 -0.8266741089998076E+00 -0.8217160331760809E+00 + -0.8167739354176268E+00 -0.8118478547676139E+00 -0.8069378239956513E+00 -0.8020438697521995E+00 -0.7971660127208436E+00 + -0.7923042677684496E+00 -0.7874586440932471E+00 -0.7826291453708021E+00 -0.7778157698979398E+00 -0.7730185107345809E+00 + -0.7682373558435663E+00 -0.7634722882284258E+00 -0.7587232860691486E+00 -0.7539903228559367E+00 -0.7492733675209987E+00 + -0.7445723845683611E+00 -0.7398873342017247E+00 -0.7352181724504098E+00 -0.7305648512933688E+00 -0.7259273187813085E+00 + -0.7213055191569296E+00 -0.7166993929733191E+00 -0.7121088772104908E+00 -0.7075339053901175E+00 -0.7029744076884417E+00 + -0.6984303110474385E+00 -0.6939015392841926E+00 -0.6893880131985548E+00 -0.6848896506790639E+00 -0.6804063668071960E+00 + -0.6759380739599310E+00 -0.6714846819106545E+00 -0.6670460979284606E+00 -0.6626222268758263E+00 -0.6582129713047191E+00 + -0.6538182315511271E+00 -0.6494379058280859E+00 -0.6450718903171657E+00 -0.6407200792584876E+00 -0.6363823650392715E+00 + -0.6320586382809613E+00 -0.6277487879249267E+00 -0.6234527013167734E+00 -0.6191702642893190E+00 -0.6149013612442086E+00 + -0.6106458752322457E+00 -0.6064036880324198E+00 -0.6021746802297080E+00 -0.5979587312916264E+00 -0.5937557196436042E+00 + -0.5895655227431641E+00 -0.5853880171529922E+00 -0.5812230786128654E+00 -0.5770705821105107E+00 -0.5729304019514115E+00 + -0.5688024118275793E+00 -0.5646864848853448E+00 -0.5605824937921645E+00 -0.5564903108025173E+00 -0.5524098078228833E+00 + -0.5483408564758644E+00 -0.5442833281634526E+00 -0.5402370941295085E+00 -0.5362020255214600E+00 -0.5321779934512643E+00 + -0.5281648690556621E+00 -0.5241625235557782E+00 -0.5201708283160628E+00 -0.5161896549026552E+00 -0.5122188751411803E+00 + -0.5082583611740192E+00 -0.5043079855170916E+00 -0.5003676211161868E+00 -0.4964371414029022E+00 -0.4925164203501901E+00 + -0.4886053325275901E+00 -0.4847037531561659E+00 -0.4808115581632069E+00 -0.4769286242367184E+00 -0.4730548288797583E+00 + -0.4691900504646559E+00 -0.4653341682871753E+00 -0.4614870626206452E+00 -0.4576486147701215E+00 -0.4538187071266341E+00 + -0.4499972232215512E+00 -0.4461840477811270E+00 -0.4423790667812826E+00 -0.4385821675026696E+00 -0.4347932385860811E+00 + -0.4310121700882537E+00 -0.4272388535381303E+00 -0.4234731819936421E+00 -0.4197150500990645E+00 -0.4159643541430195E+00 + -0.4122209921171803E+00 -0.4084848637757519E+00 -0.4047558706957974E+00 -0.4010339163384737E+00 -0.3973189061112476E+00 + -0.3936107474311905E+00 -0.3899093497893938E+00 -0.3862146248166102E+00 -0.3825264863501910E+00 -0.3788448505024144E+00 + -0.3751696357302771E+00 -0.3715007629068495E+00 -0.3678381553942878E+00 -0.3641817391185885E+00 -0.3605314426461966E+00 + -0.3568871972625555E+00 -0.3532489370527205E+00 -0.3496165989841241E+00 -0.3459901229916214E+00 -0.3423694520649201E+00 + -0.3387545323385251E+00 -0.3351453131843082E+00 -0.3315417473068326E+00 -0.3279437908415819E+00 -0.3243514034561918E+00 + -0.3207645484548654E+00 -0.3171831928860834E+00 -0.3136073076537766E+00 -0.3100368676321130E+00 -0.3064718517840476E+00 + -0.3029122432838121E+00 -0.2993580296435038E+00 -0.2958092028439498E+00 -0.2922657594700352E+00 -0.2887277008506632E+00 + -0.2851950332035602E+00 -0.2816677677851020E+00 -0.2781459210453749E+00 -0.2746295147886844E+00 -0.2711185763397140E+00 + -0.2676131387155659E+00 -0.2641132408039054E+00 -0.2606189275474402E+00 -0.2571302501349864E+00 -0.2536472661993449E+00 + -0.2501700400222663E+00 -0.2466986427467328E+00 -0.2432331525968512E+00 -0.2397736551055949E+00 -0.2363202433506903E+00 + -0.2328730181989250E+00 -0.2294320885591435E+00 -0.2259975716442418E+00 -0.2225695932424345E+00 -0.2191482879980940E+00 + -0.2157337997024620E+00 -0.2123262815945201E+00 -0.2089258966723290E+00 -0.2055328180151234E+00 -0.2021472291164557E+00 + -0.1987693242286884E+00 -0.1953993087191055E+00 -0.1920373994379287E+00 -0.1886838250985003E+00 -0.1853388266698828E+00 + -0.1820026577821215E+00 -0.1786755851443744E+00 -0.1753578889761193E+00 -0.1720498634515968E+00 -0.1687518171576267E+00 + -0.1654640735649029E+00 -0.1621869715128154E+00 -0.1589208657078173E+00 -0.1556661272352739E+00 -0.1524231440846908E+00 + -0.1491923216881294E+00 -0.1459740834715274E+00 -0.1427688714185721E+00 -0.1395771466466322E+00 -0.1363993899941623E+00 + -0.1332361026188316E+00 -0.1300878066054895E+00 -0.1269550455829047E+00 -0.1238383853480043E+00 -0.1207384144961449E+00 + -0.1176557450556807E+00 -0.1145910131248316E+00 -0.1115448795085540E+00 -0.1085180303527610E+00 -0.1055111777728831E+00 + -0.1025250604733206E+00 -0.9956044435388604E-01 -0.9661812309881886E-01 -0.9369891874337012E-01 -0.9080368221234399E-01 + -0.8793329382426256E-01 -0.8508866375406340E-01 -0.8227073244639434E-01 -0.7948047097061904E-01 -0.7671888130764398E-01 + -0.7398699655753553E-01 -0.7128588105567601E-01 -0.6861663038386651E-01 -0.6598037126130515E-01 -0.6337826129880289E-01 + -0.6081148859784694E-01 -0.5828127117427706E-01 -0.5578885618432740E-01 -0.5333551892862030E-01 -0.5092256160742038E-01 + -0.4855131179798897E-01 -0.4622312062232615E-01 -0.4393936057086534E-01 -0.4170142294489704E-01 -0.3951071487762254E-01 + -0.3736865589081760E-01 -0.3527667394121730E-01 -0.3323620090791550E-01 -0.3124866746947142E-01 -0.2931549731709577E-01 + -0.2743810064840861E-01 -0.2561786688503255E-01 -0.2385615655688409E-01 -0.2215429229678155E-01 -0.2051354889121152E-01 + -0.1893514233719176E-01 -0.1742021786166798E-01 -0.1596983686930661E-01 -0.1458496279764457E-01 -0.1326644587608198E-01 + -0.1201500680808027E-01 -0.1083121942521028E-01 -0.9715492398480059E-02 -0.8668050137937885E-02 -0.7688913067140435E-02 + -0.6777877525966872E-02 -0.5934495634602323E-02 -0.5158055544131036E-02 -0.4447562605453990E-02 -0.3801722107660840E-02 + -0.3218924367835703E-02 -0.2697233092980475E-02 -0.2234378075199077E-02 -0.1827753413977412E-02 -0.1474422570309129E-02 + -0.1171131627019387E-02 -0.9143321317637030E-03 -0.7002148003936321E-03 -0.5247551181118452E-03 -0.3837714480605755E-03 + -0.2729955946109330E-03 -0.1881548319023403E-03 -0.1250631789481358E-03 -0.7971820570180325E-04 -0.4839798665393986E-04 + -0.2775118225470492E-04 -0.1487196131798424E-04 -0.7351058493098910E-05 -0.3295260747991843E-05 -0.1310550608265630E-05 + -0.4491803501599659E-06 -0.1275625109004752E-06 -0.2842493719500779E-07 -0.4598019108179812E-08 -0.4812641260020268E-09 + -0.2729062991232811E-10 -0.6277478184238277E-12 -0.3532884035284522E-14 -0.1843992263449434E-17 -0.1064033801639711E-22 + -0.2179574996326970E-32 -0.2191274365894180E-56 -0.5812978673716309E-216 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.8687248663605213E+00 0.1707263902374461E+01 0.2516310697140216E+01 0.3296545407385949E+01 + 0.4048635017677018E+01 0.4773233612655782E+01 0.5470982663629552E+01 0.6142511330615299E+01 0.6788436779961467E+01 + 0.7409364516870689E+01 0.8005888731517908E+01 0.8578592656974877E+01 0.9128048936794247E+01 0.9654819999856910E+01 + 0.1015945843992924E+02 0.1064250739729831E+02 0.1110450093984054E+02 0.1154596444092118E+02 0.1196741495160918E+02 + 0.1236936156481509E+02 0.1275230576911170E+02 0.1311674179017046E+02 0.1346315691793700E+02 0.1379203181786923E+02 + 0.1410384082476923E+02 0.1439905221795016E+02 0.1467812847668937E+02 0.1494152651512514E+02 0.1518969789595702E+02 + 0.1542308902250295E+02 0.1564214130885283E+02 0.1584729132803401E+02 0.1603897093826909E+02 0.1621760738756086E+02 + 0.1638362339698061E+02 0.1653743722316642E+02 0.1667946270065578E+02 0.1681010926478216E+02 0.1692978195595912E+02 + 0.1703888140625709E+02 0.1713780380924828E+02 0.1722694087415465E+02 0.1730667976538239E+02 0.1737740302856498E+02 + 0.1743948850426588E+02 0.1749330923051193E+02 0.1753923333533993E+02 0.1757762392054244E+02 0.1760883893779540E+02 + 0.1763323105833935E+02 0.1765114753736991E+02 0.1766293007427053E+02 0.1766891466979376E+02 0.1766943148126528E+02 + 0.1766480467684931E+02 0.1765535228987511E+02 0.1764138607418140E+02 0.1762321136139172E+02 0.1760112692098567E+02 + 0.1757542482398380E+02 0.1754639031101227E+02 0.1751430166546395E+02 0.1747943009241989E+02 0.1744203960394378E+02 + 0.1740238691130952E+02 0.1736072132467072E+02 0.1731728466062878E+02 0.1727231115810628E+02 0.1722602740288191E+02 + 0.1717865226109467E+02 0.1713039682197727E+02 0.1708146435003250E+02 0.1703205024682137E+02 0.1698234202248845E+02 + 0.1693251927710871E+02 0.1688275369189969E+02 0.1683320903030526E+02 0.1678404114892058E+02 0.1673539801819411E+02 + 0.1668741975280949E+02 0.1664023865162014E+02 0.1659397924698056E+02 0.1654875836329216E+02 0.1650468518455595E+02 + 0.1646186133070283E+02 0.1642038094245007E+02 0.1638033077441462E+02 0.1634179029619614E+02 0.1630483180112684E+02 + 0.1626952052237267E+02 0.1623591475605696E+02 0.1620406599106814E+02 0.1617401904520420E+02 0.1614581220729854E+02 + 0.1611947738496719E+02 0.1609504025761150E+02 0.1607252043430844E+02 0.1605193161621790E+02 0.1603328176313632E+02 + 0.1601657326382578E+02 0.1600180310974979E+02 0.1598896307184925E+02 0.1597803987999542E+02 0.1596901540476141E+02 + 0.1596186684115860E+02 0.1595656689399044E+02 0.1595308396448294E+02 0.1595138233785788E+02 0.1595142237152340E+02 + 0.1595316068356454E+02 0.1595655034122527E+02 0.1596154104908305E+02 0.1596807933662661E+02 0.1597610874495764E+02 + 0.1598557001234738E+02 0.1599640125838981E+02 0.1600853816650400E+02 0.1602191416454864E+02 0.1603646060332359E+02 + 0.1605210693274370E+02 0.1606878087548201E+02 0.1608640859789002E+02 0.1610491487801469E+02 0.1612422327054205E+02 + 0.1614425626850959E+02 0.1616493546163930E+02 0.1618618169115549E+02 0.1620791520096096E+02 0.1623005578505677E+02 + 0.1625252293110075E+02 0.1627523596000996E+02 0.1629811416152313E+02 0.1632107692564781E+02 0.1634404386992741E+02 + 0.1636693496247232E+02 0.1638967064070816E+02 0.1641217192580325E+02 0.1643436053274611E+02 0.1645615897605117E+02 + 0.1647749067108008E+02 0.1649828003097248E+02 0.1651845255918834E+02 0.1653793493767038E+02 0.1655665511064232E+02 + 0.1657454236406513E+02 0.1659152740077896E+02 0.1660754241136564E+02 0.1662252114077064E+02 0.1663639895072981E+02 + 0.1664911287805092E+02 0.1666060168880418E+02 0.1667080592848118E+02 0.1667966796818515E+02 0.1668713204691969E+02 + 0.1669314431004635E+02 0.1669765284398512E+02 0.1670060770723475E+02 0.1670196095779233E+02 0.1670166667705496E+02 + 0.1669968099028751E+02 0.1669596208374337E+02 0.1669047021852679E+02 0.1668316774128659E+02 0.1667401909183290E+02 + 0.1666299080776961E+02 0.1665005152623624E+02 0.1663517198285345E+02 0.1661832500796750E+02 0.1659948552028914E+02 + 0.1657863051802247E+02 0.1655573906758000E+02 0.1653079228997926E+02 0.1650377334501676E+02 0.1647466741331476E+02 + 0.1644346167633494E+02 0.1641014529445382E+02 0.1637470938319258E+02 0.1633714698769450E+02 0.1629745305554087E+02 + 0.1625562440799640E+02 0.1621165970977314E+02 0.1616555943740087E+02 0.1611732584629117E+02 0.1606696293657995E+02 + 0.1601447641783236E+02 0.1595987367269281E+02 0.1590316371956016E+02 0.1584435717436734E+02 0.1578346621154290E+02 + 0.1572050452422970E+02 0.1565548728383454E+02 0.1558843109898079E+02 0.1551935397393391E+02 0.1544827526656816E+02 + 0.1537521564594045E+02 0.1530019704953602E+02 0.1522324264024800E+02 0.1514437676315159E+02 0.1506362490213083E+02 + 0.1498101363641504E+02 0.1489657059707905E+02 0.1481032442355990E+02 0.1472230472024070E+02 0.1463254201315024E+02 + 0.1454106770682513E+02 0.1444791404137927E+02 0.1435311404982355E+02 0.1425670151567689E+02 0.1415871093090752E+02 + 0.1405917745424228E+02 0.1395813686987899E+02 0.1385562554663566E+02 0.1375168039756887E+02 0.1364633884009084E+02 + 0.1353963875661431E+02 0.1343161845575160E+02 0.1332231663409325E+02 0.1321177233858961E+02 0.1310002492955745E+02 + 0.1298711404433202E+02 0.1287307956158335E+02 0.1275796156631419E+02 0.1264180031555601E+02 0.1252463620477686E+02 + 0.1240650973501518E+02 0.1228746148075084E+02 0.1216753205852430E+02 0.1204676209631323E+02 0.1192519220367461E+02 + 0.1180286294265961E+02 0.1167981479950663E+02 0.1155608815711772E+02 0.1143172326832159E+02 0.1130676022992646E+02 + 0.1118123895756377E+02 0.1105519916132396E+02 0.1092868032218412E+02 0.1080172166922607E+02 0.1067436215764326E+02 + 0.1054664044753408E+02 0.1041859488347744E+02 0.1029026347488684E+02 0.1016168387713817E+02 0.1003289337346536E+02 + 0.9903928857617679E+01 0.9774826817272114E+01 0.9645623318193554E+01 0.9516353989134197E+01 0.9387054007464796E+01 + 0.9257758085527723E+01 0.9128500457703609E+01 0.8999314868181001E+01 0.8870234559419087E+01 0.8741292261293285E+01 + 0.8612520180912444E+01 0.8483949993096608E+01 0.8355612831503974E+01 0.8227539280395387E+01 0.8099759367023964E+01 + 0.7972302554638278E+01 0.7845197736086287E+01 0.7718473228007762E+01 0.7592156765602027E+01 0.7466275497958868E+01 + 0.7340855983939128E+01 0.7215924188591989E+01 0.7091505480096169E+01 0.6967624627211525E+01 0.6844305797227783E+01 + 0.6721572554397537E+01 0.6599447858839925E+01 0.6477954065901652E+01 0.6357112925962435E+01 0.6236945584671568E+01 + 0.6117472583602064E+01 0.5998713861309926E+01 0.5880688754784813E+01 0.5763416001279670E+01 0.5646913740506246E+01 + 0.5531199517183574E+01 0.5416290283926924E+01 0.5302202404464881E+01 0.5188951657171522E+01 0.5076553238901992E+01 + 0.4965021769119214E+01 0.4854371294299406E+01 0.4744615292604905E+01 0.4635766678812629E+01 0.4527837809486449E+01 + 0.4420840488382136E+01 0.4314785972074110E+01 0.4209684975792541E+01 0.4105547679460195E+01 0.4002383733918524E+01 + 0.3900202267332557E+01 0.3799011891764151E+01 0.3698820709903869E+01 0.3599636321951710E+01 0.3501465832636705E+01 + 0.3404315858366423E+01 0.3308192534496821E+01 0.3213101522713837E+01 0.3119048018517560E+01 0.3026036758800617E+01 + 0.2934072029512395E+01 0.2843157673401020E+01 0.2753297097824851E+01 0.2664493282626155E+01 0.2576748788059156E+01 + 0.2490065762765371E+01 0.2404445951788702E+01 0.2319890704624000E+01 0.2236400983291912E+01 0.2153977370433589E+01 + 0.2072620077419250E+01 0.1992328952464182E+01 0.1913103488746359E+01 0.1834942832520140E+01 0.1757845791220436E+01 + 0.1681810841551835E+01 0.1606836137557940E+01 0.1532919518665786E+01 0.1460058517700443E+01 0.1388250368865471E+01 + 0.1317492015684907E+01 0.1247780118901998E+01 0.1179111064331551E+01 0.1111480970661150E+01 0.1044885697198059E+01 + 0.9793208515582879E+00 0.9147817972939893E+00 0.8512636614565350E+00 0.7887613420918976E+00 0.7272695156654265E+00 + 0.6667826444134151E+00 0.6072949836187563E+00 0.5488005888082287E+00 0.4912933228690584E+00 0.4347668630826892E+00 + 0.3792147080735970E+00 0.3246301846712228E+00 0.2710064546832890E+00 0.2183365215789164E+00 0.1666132370796914E+00 + 0.1158293076575852E+00 0.6597730093832276E-01 0.1704965200881259E-01 -0.3096133037222471E-01 -0.7806345766145839E-01 + -0.1242646555170061E+00 -0.1695729578839355E+00 -0.2139965011800796E+00 -0.2575435185826074E+00 -0.3002223344158743E+00 + -0.3420413586411577E+00 -0.3830090814482432E+00 -0.4231340679495004E+00 -0.4624249529762802E+00 -0.5008904359780200E+00 + -0.5385392760237241E+00 -0.5753802869061535E+00 -0.6114223323483075E+00 -0.6466743213121019E+00 -0.6811452034089456E+00 + -0.7148439644120911E+00 -0.7477796218700159E+00 -0.7799612208208035E+00 -0.8113978296067292E+00 -0.8420985357887053E+00 + -0.8720724421598169E+00 -0.9013286628575624E+00 -0.9298763195738665E+00 -0.9577245378622440E+00 -0.9848824435414749E+00 + -0.1011359159194722E+01 -0.1037163800763434E+01 -0.1062305474235226E+01 -0.1086793272424552E+01 -0.1110636271845517E+01 + -0.1133843529675753E+01 -0.1156424080810253E+01 -0.1178386935004340E+01 -0.1199741074104586E+01 -0.1220495449366658E+01 + -0.1240658978858965E+01 -0.1260240544951108E+01 -0.1279248991885808E+01 -0.1297693123433412E+01 -0.1315581700627601E+01 + -0.1332923439581261E+01 -0.1349727009381238E+01 -0.1366001030060941E+01 -0.1381754070649363E+01 -0.1396994647295475E+01 + -0.1411731221466749E+01 -0.1425972198220502E+01 -0.1439725924546859E+01 -0.1453000687782247E+01 -0.1465804714091862E+01 + -0.1478146167020199E+01 -0.1490033146108215E+01 -0.1501473685575904E+01 -0.1512475753069052E+01 -0.1523047248468980E+01 + -0.1533196002763981E+01 -0.1542929776981157E+01 -0.1552256261177614E+01 -0.1561183073489532E+01 -0.1569717759238136E+01 + -0.1577867790091117E+01 -0.1585640563278520E+01 -0.1593043400861668E+01 -0.1600083549054143E+01 -0.1606768177593432E+01 + -0.1613104379162233E+01 -0.1619099168858133E+01 -0.1624759483710538E+01 -0.1630092182243682E+01 -0.1635104044084646E+01 + -0.1639801769615148E+01 -0.1644191979666060E+01 -0.1648281215253528E+01 -0.1652075937355576E+01 -0.1655582526728141E+01 + -0.1658807283759452E+01 -0.1661756428361703E+01 -0.1664436099898922E+01 -0.1666852357150144E+01 -0.1669011178306643E+01 + -0.1670918461002464E+01 -0.1672580022377071E+01 -0.1674001599169259E+01 -0.1675188847841216E+01 -0.1676147344732051E+01 + -0.1676882586239485E+01 -0.1677399989029130E+01 -0.1677704890270234E+01 -0.1677802547897067E+01 -0.1677698140895068E+01 + -0.1677396769610920E+01 -0.1676903456085609E+01 -0.1676223144409744E+01 -0.1675360701100275E+01 -0.1674320915497755E+01 + -0.1673108500183398E+01 -0.1671728091415232E+01 -0.1670184249582419E+01 -0.1668481459677102E+01 -0.1666624131783108E+01 + -0.1664616601580613E+01 -0.1662463130866198E+01 -0.1660167908087604E+01 -0.1657735048892448E+01 -0.1655168596690241E+01 + -0.1652472523227175E+01 -0.1649650729172852E+01 -0.1646707044718564E+01 -0.1643645230186273E+01 -0.1640468976647931E+01 + -0.1637181906554373E+01 -0.1633787574373395E+01 -0.1630289467236240E+01 -0.1626691005592231E+01 -0.1622995543870765E+01 + -0.1619206371150311E+01 -0.1615326711833899E+01 -0.1611359726330491E+01 -0.1607308511741977E+01 -0.1603176102555118E+01 + -0.1598965471338085E+01 -0.1594679529441171E+01 -0.1590321127701217E+01 -0.1585893057149300E+01 -0.1581398049721393E+01 + -0.1576838778971485E+01 -0.1572217860786824E+01 -0.1567537854104941E+01 -0.1562801261632051E+01 -0.1558010530562515E+01 + -0.1553168053298982E+01 -0.1548276168172963E+01 -0.1543337160165420E+01 -0.1538353261627133E+01 -0.1533326652998501E+01 + -0.1528259463528551E+01 -0.1523153771992774E+01 -0.1518011607409659E+01 -0.1512834949755512E+01 -0.1507625730677423E+01 + -0.1502385834204081E+01 -0.1497117097454231E+01 -0.1491821311342496E+01 -0.1486500221282453E+01 -0.1481155527886632E+01 + -0.1475788887663291E+01 -0.1470401913709823E+01 -0.1464996176402467E+01 -0.1459573204082366E+01 -0.1454134483737546E+01 + -0.1448681461680846E+01 -0.1443215544223580E+01 -0.1437738098344736E+01 -0.1432250452355627E+01 -0.1426753896559857E+01 + -0.1421249683908433E+01 -0.1415739030649932E+01 -0.1410223116975571E+01 -0.1404703087659131E+01 -0.1399180052691527E+01 + -0.1393655087910084E+01 -0.1388129235622212E+01 -0.1382603505223591E+01 -0.1377078873810667E+01 -0.1371556286787404E+01 + -0.1366036658466202E+01 -0.1360520872663014E+01 -0.1355009783286443E+01 -0.1349504214920848E+01 -0.1344004963403421E+01 + -0.1338512796395142E+01 -0.1333028453945557E+01 -0.1327552649051373E+01 -0.1322086068208856E+01 -0.1316629371959906E+01 + -0.1311183195431850E+01 -0.1305748148870926E+01 -0.1300324818169403E+01 -0.1294913765386324E+01 -0.1289515529261906E+01 + -0.1284130625725508E+01 -0.1278759548397190E+01 -0.1273402769082885E+01 -0.1268060738263149E+01 -0.1262733885575457E+01 + -0.1257422620290157E+01 -0.1252127331779953E+01 -0.1246848389983009E+01 -0.1241586145859656E+01 -0.1236340931842745E+01 + -0.1231113062281559E+01 -0.1225902833879501E+01 -0.1220710526125339E+01 -0.1215536401718194E+01 -0.1210380706986247E+01 + -0.1205243672299176E+01 -0.1200125512474344E+01 -0.1195026427176832E+01 -0.1189946601313249E+01 -0.1184886205419436E+01 + -0.1179845396042039E+01 -0.1174824316114016E+01 -0.1169823095324133E+01 -0.1164841850480436E+01 -0.1159880685867766E+01 + -0.1154939693599391E+01 -0.1150018953962708E+01 -0.1145118535759160E+01 -0.1140238496638358E+01 -0.1135378883426438E+01 + -0.1130539732448745E+01 -0.1125721069846856E+01 -0.1120922911890006E+01 -0.1116145265280953E+01 -0.1111388127456360E+01 + -0.1106651486881709E+01 -0.1101935323340800E+01 -0.1097239608219940E+01 -0.1092564304786787E+01 -0.1087909368463974E+01 + -0.1083274747097547E+01 -0.1078660381220247E+01 -0.1074066204309709E+01 -0.1069492143041646E+01 -0.1064938117538041E+01 + -0.1060404041610429E+01 -0.1055889822998297E+01 -0.1051395363602706E+01 -0.1046920559715141E+01 -0.1042465302241655E+01 + -0.1038029476922388E+01 -0.1033612964546500E+01 -0.1029215641162557E+01 -0.1024837378284490E+01 -0.1020478043093089E+01 + -0.1016137498633167E+01 -0.1011815604006419E+01 -0.1007512214560045E+01 -0.1003227182071147E+01 -0.9989603549270579E+00 + -0.9947115783015485E+00 -0.9904806943270184E+00 -0.9862675422627522E+00 -0.9820719586592493E+00 -0.9778937775186953E+00 + -0.9737328304516771E+00 -0.9695889468301108E+00 -0.9654619539365238E+00 -0.9613516771097025E+00 -0.9572579398867307E+00 + -0.9531805641415736E+00 -0.9491193702201466E+00 -0.9450741770719889E+00 -0.9410448023785890E+00 -0.9370310626784017E+00 + -0.9330327734886064E+00 -0.9290497494236897E+00 -0.9250818043108714E+00 -0.9211287513024286E+00 -0.9171904029850091E+00 + -0.9132665714859235E+00 -0.9093570685765163E+00 -0.9054617057726567E+00 -0.9015802944323839E+00 -0.8977126458507625E+00 + -0.8938585713520132E+00 -0.8900178823789437E+00 -0.8861903905797556E+00 -0.8823759078922311E+00 -0.8785742466254294E+00 + -0.8747852195388349E+00 -0.8710086399190866E+00 -0.8672443216543031E+00 -0.8634920793060465E+00 -0.8597517281789752E+00 + -0.8560230843882563E+00 -0.8523059649247257E+00 -0.8486001877179036E+00 -0.8449055716968552E+00 -0.8412219368489985E+00 + -0.8375491042768192E+00 -0.8338868962526480E+00 -0.8302351362714315E+00 -0.8265936491016083E+00 -0.8229622608341091E+00 + -0.8193407989295268E+00 -0.8157290922634788E+00 -0.8121269711702471E+00 -0.8085342674846857E+00 -0.8049508145824523E+00 + -0.8013764474186241E+00 -0.7978110025647080E+00 -0.7942543182440929E+00 -0.7907062343659974E+00 -0.7871665925579165E+00 + -0.7836352361966469E+00 -0.7801120104378853E+00 -0.7765967622444689E+00 -0.7730893404132703E+00 -0.7695895956008084E+00 + -0.7660973803475873E+00 -0.7626125491011952E+00 -0.7591349582382320E+00 -0.7556644660850415E+00 -0.7522009329373659E+00 + -0.7487442210788564E+00 -0.7452941947985601E+00 -0.7418507204073561E+00 -0.7384136662534099E+00 -0.7349829027366561E+00 + -0.7315583023223650E+00 -0.7281397395537861E+00 -0.7247270910639445E+00 -0.7213202355865901E+00 -0.7179190539663420E+00 + -0.7145234291680540E+00 -0.7111332462854418E+00 -0.7077483925489899E+00 -0.7043687573331715E+00 -0.7009942321630125E+00 + -0.6976247107200276E+00 -0.6942600888475667E+00 -0.6909002645555757E+00 -0.6875451380248399E+00 -0.6841946116106925E+00 + -0.6808485898462595E+00 -0.6775069794452312E+00 -0.6741696893042333E+00 -0.6708366305047628E+00 -0.6675077163147983E+00 + -0.6641828621900246E+00 -0.6608619857747765E+00 -0.6575450069026729E+00 -0.6542318475970094E+00 -0.6509224320708961E+00 + -0.6476166867272263E+00 -0.6443145401584339E+00 -0.6410159231461258E+00 -0.6377207686605807E+00 -0.6344290118601643E+00 + -0.6311405900906676E+00 -0.6278554428846229E+00 -0.6245735119605972E+00 -0.6212947412225088E+00 -0.6180190767589913E+00 + -0.6147464668428325E+00 -0.6114768619305104E+00 -0.6082102146618701E+00 -0.6049464798599574E+00 -0.6016856145310354E+00 + -0.5984275778648340E+00 -0.5951723312350204E+00 -0.5919198381999848E+00 -0.5886700645038960E+00 -0.5854229780781174E+00 + -0.5821785490429797E+00 -0.5789367497099552E+00 -0.5756975545842548E+00 -0.5724609403678959E+00 -0.5692268859632494E+00 + -0.5659953724771183E+00 -0.5627663832253617E+00 -0.5595399037381192E+00 -0.5563159217656418E+00 -0.5530944272847829E+00 + -0.5498754125061794E+00 -0.5466588718821447E+00 -0.5434448021153181E+00 -0.5402332021681084E+00 -0.5370240732729479E+00 + -0.5338174189434215E+00 -0.5306132449862715E+00 -0.5274115595143415E+00 -0.5242123729604776E+00 -0.5210156980924291E+00 + -0.5178215500287884E+00 -0.5146299462559857E+00 -0.5114409066464112E+00 -0.5082544534776542E+00 -0.5050706114529327E+00 + -0.5018894077227221E+00 -0.4987108719076290E+00 -0.4955350361225455E+00 -0.4923619350021070E+00 -0.4891916057274888E+00 + -0.4860240880545712E+00 -0.4828594243435082E+00 -0.4796976595897113E+00 -0.4765388414562883E+00 -0.4733830203079488E+00 + -0.4702302492464025E+00 -0.4670805841472636E+00 -0.4639340836984699E+00 -0.4607908094402333E+00 -0.4576508258065108E+00 + -0.4545142001680199E+00 -0.4513810028767579E+00 -0.4482513073120319E+00 -0.4451251899279745E+00 -0.4420027303025001E+00 + -0.4388840111876836E+00 -0.4357691185614755E+00 -0.4326581416807331E+00 -0.4295511731354427E+00 -0.4264483089040742E+00 + -0.4233496484099363E+00 -0.4202552945784125E+00 -0.4171653538949250E+00 -0.4140799364634484E+00 -0.4109991560653700E+00 + -0.4079231302184809E+00 -0.4048519802358120E+00 -0.4017858312840442E+00 -0.3987248124411331E+00 -0.3956690567527806E+00 + -0.3926187012873193E+00 -0.3895738871885333E+00 -0.3865347597258667E+00 -0.3835014683414236E+00 -0.3804741666930851E+00 + -0.3774530126929794E+00 -0.3744381685404753E+00 -0.3714298007487684E+00 -0.3684280801640104E+00 -0.3654331819758509E+00 + -0.3624452857181055E+00 -0.3594645752581452E+00 -0.3564912387734580E+00 -0.3535254687136594E+00 -0.3505674617460703E+00 + -0.3476174186827757E+00 -0.3446755443868791E+00 -0.3417420476554580E+00 -0.3388171410764583E+00 -0.3359010408565321E+00 + -0.3329939666165476E+00 -0.3300961411511784E+00 -0.3272077901487176E+00 -0.3243291418668700E+00 -0.3214604267599845E+00 + -0.3186018770527939E+00 -0.3157537262553701E+00 -0.3129162086136159E+00 -0.3100895584892342E+00 -0.3072740096627376E+00 + -0.3044697945526863E+00 -0.3016771433440111E+00 -0.2988962830179719E+00 -0.2961274362760575E+00 -0.2933708203499825E+00 + -0.2906266456898650E+00 -0.2878951145227867E+00 -0.2851764192741990E+00 -0.2824707408451726E+00 -0.2797782467393001E+00 + -0.2770990890342526E+00 -0.2744334021946651E+00 -0.2717813007251957E+00 -0.2691428766655449E+00 -0.2665181969328780E+00 + -0.2639073005217756E+00 -0.2613101955776174E+00 -0.2587268563663881E+00 -0.2561572201724773E+00 -0.2536011841663135E+00 + -0.2510586022957567E+00 -0.2485292822692960E+00 -0.2460129827152067E+00 -0.2435094106190135E+00 -0.2410182191615573E+00 + -0.2385390061013152E+00 -0.2360713128665393E+00 -0.2336146245440482E+00 -0.2311683709702571E+00 -0.2287319291436186E+00 + -0.2263046271825591E+00 -0.2238857500445038E+00 -0.2214745471939171E+00 -0.2190702423535930E+00 -0.2166720453861016E+00 + -0.2142791662241082E+00 -0.2118908305935776E+00 -0.2095062970515578E+00 -0.2071248745972281E+00 -0.2047459398312080E+00 + -0.2023689523724028E+00 -0.1999934670554019E+00 -0.1976191414090548E+00 -0.1952457371550912E+00 -0.1928731150462155E+00 + -0.1905012233025302E+00 -0.1881300810881581E+00 -0.1857597595959972E+00 -0.1833903639169085E+00 -0.1810220185223115E+00 + -0.1786548578143285E+00 -0.1762890213721006E+00 -0.1739246522622315E+00 -0.1715618967099617E+00 -0.1692009041513801E+00 + -0.1668418273480159E+00 -0.1644848225100573E+00 -0.1621300494242820E+00 -0.1597776715867397E+00 -0.1574278563403202E+00 + -0.1550807750173627E+00 -0.1527366030874480E+00 -0.1503955203105244E+00 -0.1480577108955310E+00 -0.1457233636646466E+00 + -0.1433926722233472E+00 -0.1410658351364051E+00 -0.1387430561099922E+00 -0.1364245441800418E+00 -0.1341105139070126E+00 + -0.1318011855772175E+00 -0.1294967854108453E+00 -0.1271975457768302E+00 -0.1249037054146965E+00 -0.1226155096635082E+00 + -0.1203332106980454E+00 -0.1180570677723090E+00 -0.1157873474704553E+00 -0.1135243239652422E+00 -0.1112682792840448E+00 + -0.1090195035824928E+00 -0.1067782954257439E+00 -0.1045449620773913E+00 -0.1023198197959724E+00 -0.1001031941390004E+00 + -0.9789542027442202E-01 -0.9569684329933507E-01 -0.9350781856577459E-01 -0.9132871201329762E-01 -0.8915990050804710E-01 + -0.8700177218790264E-01 -0.8485472681323365E-01 -0.8271917612269755E-01 -0.8059554419341119E-01 -0.7848426780471512E-01 + -0.7638579680463178E-01 -0.7430059447796174E-01 -0.7222913791482828E-01 -0.7017191837828506E-01 -0.6812944166942314E-01 + -0.6610222848819827E-01 -0.6409081478795155E-01 -0.6209575212134812E-01 -0.6011760797515669E-01 -0.5815696609097321E-01 + -0.5621442676864546E-01 -0.5429060714874503E-01 -0.5238614147002400E-01 -0.5050168129729559E-01 -0.4863789571467226E-01 + -0.4679547147851291E-01 -0.4497511312379645E-01 -0.4317754301696363E-01 -0.4140350134749559E-01 -0.3965374604968968E-01 + -0.3792905264519061E-01 -0.3623021399585374E-01 -0.3455803995547253E-01 -0.3291335690774033E-01 -0.3129700717659555E-01 + -0.2970984829376720E-01 -0.2815275210690626E-01 -0.2662660371018717E-01 -0.2513230017763598E-01 -0.2367074907776015E-01 + -0.2224286674626115E-01 -0.2084957629177444E-01 -0.1949180530768286E-01 -0.1817048326111876E-01 -0.1688653852836564E-01 + -0.1564089504398897E-01 -0.1443446852927493E-01 -0.1326816226396534E-01 -0.1214286236395461E-01 -0.1105943252668154E-01 + -0.1001870820551502E-01 -0.9021490174708021E-02 -0.8068537447652485E-02 -0.7160559513483508E-02 -0.6298207860858848E-02 + -0.5482066763324758E-02 -0.4712643308532483E-02 -0.3990356664167553E-02 -0.3315526587400327E-02 -0.2688361202633861E-02 + -0.2108944095059771E-02 -0.1577220795897805E-02 -0.1092984770086615E-02 -0.6558630595718385E-03 -0.2653017861664537E-03 + 0.7944822189490764E-04 0.3793453454019918E-03 0.6355702167323619E-03 0.8495373838452211E-03 0.1022904990027115E-02 + 0.1157581756795607E-02 0.1255730447553756E-02 0.1319766883295748E-02 0.1352353488459118E-02 0.1356386278494535E-02 + 0.1334974179358035E-02 0.1291409617048463E-02 0.1229129462600355E-02 0.1151665700113620E-02 0.1062585641275423E-02 + 0.9654221768740550E-03 0.8635954616548462E-03 0.7603285776664598E-03 0.6585610737771120E-03 0.5608657269660935E-03 + 0.4693752087118773E-03 0.3857262433307593E-03 0.3110288768033999E-03 0.2458671434387088E-03 0.1903343314865707E-03 + 0.1441011800570143E-03 0.1065093644667441E-03 0.7667716125666785E-04 0.5360156636052818E-04 0.3624338213230885E-04 + 0.2358881126340773E-04 0.1468957244294401E-04 0.8688517982512364E-05 0.4836926461183601E-05 0.2505806106186696E-05 + 0.1190778874910442E-05 0.5095498141563876E-06 0.1916497626697207E-06 0.6134629795982277E-07 0.1599283622173898E-07 + 0.3192844313628801E-08 0.4465991345509002E-09 0.3830055172706218E-10 0.1633011596692233E-11 0.2440735408533676E-13 + 0.6817882595562817E-16 0.1011756708173479E-19 0.4237417807138562E-26 0.7509788045435901E-39 0.4267446943283257E-77 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.5899841183367943E+00 0.1161355619573833E+01 0.1714505862663386E+01 0.2249819256784396E+01 + 0.2767673391510573E+01 0.3268439177645294E+01 0.3752481000506378E+01 0.4220156886514003E+01 0.4671818683172639E+01 + 0.5107812251922465E+01 0.5528477672848820E+01 0.5934149459862732E+01 0.6325156784687305E+01 0.6701823707789128E+01 + 0.7064469414269955E+01 0.7413408452670304E+01 0.7748950974623735E+01 0.8071402973330306E+01 0.8381066518882308E+01 + 0.8678239988567556E+01 0.8963218290390984E+01 0.9236293078186977E+01 0.9497752956839562E+01 0.9747883676281340E+01 + 0.9986968313100460E+01 0.1021528743874655E+02 0.1043311927348773E+02 0.1064073982542990E+02 0.1083842301406511E+02 + 0.1102644077796590E+02 0.1120506316638604E+02 0.1137455841466486E+02 0.1153519300345998E+02 0.1168723170195367E+02 + 0.1183093759528836E+02 0.1196657209658812E+02 0.1209439494401590E+02 0.1221466418339854E+02 0.1232763613702556E+02 + 0.1243356535929262E+02 0.1253270457991625E+02 0.1262530463549414E+02 0.1271161439022432E+02 0.1279188064662818E+02 + 0.1286634804714671E+02 0.1293525896749568E+02 0.1299885340267705E+02 0.1305736884654751E+02 0.1311104016584454E+02 + 0.1316009946956320E+02 0.1320477597456633E+02 0.1324529586829482E+02 0.1328188216942499E+02 0.1331475458729735E+02 + 0.1334412938091442E+02 0.1337021921827631E+02 0.1339323303679160E+02 0.1341337590546720E+02 0.1343084888954589E+02 + 0.1344584891822348E+02 0.1345856865604004E+02 0.1346919637850042E+02 0.1347791585244115E+02 0.1348490622162011E+02 + 0.1349034189796659E+02 0.1349439245888940E+02 0.1349722255100133E+02 0.1349899180057996E+02 0.1349985473104553E+02 + 0.1349996068770030E+02 0.1349945376993611E+02 0.1349847277108194E+02 0.1349715112602811E+02 0.1349561686673074E+02 + 0.1349399258566773E+02 0.1349239540728639E+02 0.1349093696745374E+02 0.1348972340089195E+02 0.1348885533655486E+02 + 0.1348842790087613E+02 0.1348853072879561E+02 0.1348924798244868E+02 0.1349065837738147E+02 0.1349283521613647E+02 + 0.1349584642903438E+02 0.1349975462196169E+02 0.1350461713095838E+02 0.1351048608338651E+02 0.1351740846544771E+02 + 0.1352542619580703E+02 0.1353457620507051E+02 0.1354489052085530E+02 0.1355639635818421E+02 0.1356911621492991E+02 + 0.1358306797202959E+02 0.1359826499818650E+02 0.1361471625877207E+02 0.1363242642864042E+02 0.1365139600856614E+02 + 0.1367162144501598E+02 0.1369309525296598E+02 0.1371580614147713E+02 0.1373973914174481E+02 0.1376487573734043E+02 + 0.1379119399636717E+02 0.1381866870525614E+02 0.1384727150393395E+02 0.1387697102209792E+02 0.1390773301634148E+02 + 0.1393952050787757E+02 0.1397229392061555E+02 0.1400601121935343E+02 0.1404062804785455E+02 0.1407609786658558E+02 + 0.1411237208990064E+02 0.1414940022246391E+02 0.1418712999471152E+02 0.1422550749716204E+02 0.1426447731339282E+02 + 0.1430398265150846E+02 0.1434396547393582E+02 0.1438436662538888E+02 0.1442512595885534E+02 0.1446618245946512E+02 + 0.1450747436611004E+02 0.1454893929069182E+02 0.1459051433488456E+02 0.1463213620430574E+02 0.1467374131999813E+02 + 0.1471526592713335E+02 0.1475664620085529E+02 0.1479781834918989E+02 0.1483871871295512E+02 0.1487928386261246E+02 + 0.1491945069200887E+02 0.1495915650896474E+02 0.1499833912267056E+02 0.1503693692786206E+02 0.1507488898574914E+02 + 0.1511213510168126E+02 0.1514861589953717E+02 0.1518427289283329E+02 0.1521904855255031E+02 0.1525288637168290E+02 + 0.1528573092652318E+02 0.1531752793469264E+02 0.1534822430994272E+02 0.1537776821374822E+02 0.1540610910372214E+02 + 0.1543319777888478E+02 0.1545898642182323E+02 0.1548342863778163E+02 0.1550647949072526E+02 0.1552809553642536E+02 + 0.1554823485261403E+02 0.1556685706626144E+02 0.1558392337803033E+02 0.1559939658396475E+02 0.1561324109447264E+02 + 0.1562542295066320E+02 0.1563590983810227E+02 0.1564467109805053E+02 0.1565167773625032E+02 0.1565690242932856E+02 + 0.1566031952888424E+02 0.1566190506332994E+02 0.1566163673755728E+02 0.1565949393049741E+02 0.1565545769064767E+02 + 0.1564951072963612E+02 0.1564163741389599E+02 0.1563182375452176E+02 0.1562005739537916E+02 0.1560632759954093E+02 + 0.1559062523411967E+02 0.1557294275356961E+02 0.1555327418152762E+02 0.1553161509126428E+02 0.1550796258481429E+02 + 0.1548231527085568E+02 0.1545467324140574E+02 0.1542503804740110E+02 0.1539341267322875E+02 0.1535980151027311E+02 + 0.1532421032954375E+02 0.1528664625344730E+02 0.1524711772676548E+02 0.1520563448690045E+02 0.1516220753344726E+02 + 0.1511684909715194E+02 0.1506957260831226E+02 0.1502039266467727E+02 0.1496932499890005E+02 0.1491638644559677E+02 + 0.1486159490806366E+02 0.1480496932470243E+02 0.1474652963520277E+02 0.1468629674652943E+02 0.1462429249875961E+02 + 0.1456053963081552E+02 0.1449506174613458E+02 0.1442788327831924E+02 0.1435902945680608E+02 0.1428852627259312E+02 + 0.1421640044406208E+02 0.1414267938293157E+02 0.1406739116037524E+02 0.1399056447333767E+02 0.1391222861107943E+02 + 0.1383241342198120E+02 0.1375114928063558E+02 0.1366846705525355E+02 0.1358439807541183E+02 0.1349897410016506E+02 + 0.1341222728654655E+02 0.1332419015847903E+02 0.1323489557611632E+02 0.1314437670563505E+02 0.1305266698949474E+02 + 0.1295980011718308E+02 0.1286580999646230E+02 0.1277073072513102E+02 0.1267459656331543E+02 0.1257744190630183E+02 + 0.1247930125792220E+02 0.1238020920450298E+02 0.1228020038938623E+02 0.1217930948803182E+02 0.1207757118370758E+02 + 0.1197502014377439E+02 0.1187169099657116E+02 0.1176761830890495E+02 0.1166283656414955E+02 0.1155738014095610E+02 + 0.1145128329257739E+02 0.1134458012680787E+02 0.1123730458653994E+02 0.1112949043093634E+02 0.1102117121721842E+02 + 0.1091238028306897E+02 0.1080315072964744E+02 0.1069351540521540E+02 0.1058350688936919E+02 0.1047315747787608E+02 + 0.1036249916810981E+02 0.1025156364508113E+02 0.1014038226805835E+02 0.1002898605777191E+02 0.9917405684197892E+01 + 0.9805671454913359E+01 0.9693813304017528E+01 0.9581860781611367E+01 0.9469843043828288E+01 0.9357788843408597E+01 + 0.9245726520809420E+01 0.9133683995842015E+01 0.9021688759828107E+01 0.8909767868266561E+01 0.8797947934001263E+01 + 0.8686255120881437E+01 0.8574715137904995E+01 0.8463353233835596E+01 0.8352194192283553E+01 0.8241262327241410E+01 + 0.8130581479064045E+01 0.8020175010883365E+01 0.7910065805447962E+01 0.7800276262377434E+01 0.7690828295821206E+01 + 0.7581743332512092E+01 0.7473042310204099E+01 0.7364745676484368E+01 0.7256873387949169E+01 0.7149444909733861E+01 + 0.7042479215386244E+01 0.6935994787073786E+01 0.6830009616114025E+01 0.6724541203818547E+01 0.6619606562640385E+01 + 0.6515222217614777E+01 0.6411404208083596E+01 0.6308168089693712E+01 0.6205528936659299E+01 0.6103501344278738E+01 + 0.6002099431696649E+01 0.5901336844901273E+01 0.5801226759948285E+01 0.5701781886401747E+01 0.5603014470983003E+01 + 0.5504936301418622E+01 0.5407558710478755E+01 0.5310892580196972E+01 0.5214948346263076E+01 0.5119736002580636E+01 + 0.5025265105980838E+01 0.4931544781084478E+01 0.4838583725304196E+01 0.4746390213979240E+01 0.4654972105634751E+01 + 0.4564336847358377E+01 0.4474491480286574E+01 0.4385442645193613E+01 0.4297196588176073E+01 0.4209759166425876E+01 + 0.4123135854085263E+01 0.4037331748177098E+01 0.3952351574603862E+01 0.3868199694209329E+01 0.3784880108896700E+01 + 0.3702396467797228E+01 0.3620752073483427E+01 0.3539949888221543E+01 0.3459992540257458E+01 0.3380882330130837E+01 + 0.3302621237012444E+01 0.3225210925059441E+01 0.3148652749783842E+01 0.3072947764429528E+01 0.2998096726353141E+01 + 0.2924100103404396E+01 0.2850958080301697E+01 0.2778670564998860E+01 0.2707237195038878E+01 0.2636657343891009E+01 + 0.2566930127267545E+01 0.2498054409416378E+01 0.2430028809386447E+01 0.2362851707262292E+01 0.2296521250364838E+01 + 0.2231035359415401E+01 0.2166391734659781E+01 0.2102587861949918E+01 0.2039621018780374E+01 0.1977488280277051E+01 + 0.1916186525135823E+01 0.1855712441508784E+01 0.1796062532835888E+01 0.1737233123619909E+01 0.1679220365142876E+01 + 0.1622020241122005E+01 0.1565628573303434E+01 0.1510041026992134E+01 0.1455253116516494E+01 0.1401260210626005E+01 + 0.1348057537820834E+01 0.1295640191612015E+01 0.1244003135710985E+01 0.1193141209147503E+01 0.1143049131314995E+01 + 0.1093721506942225E+01 0.1045152830990733E+01 0.9973374934770503E+00 0.9502697842192204E+00 0.9039438975069450E+00 + 0.8583539366947573E+00 0.8134939187180027E+00 0.7693577785309419E+00 0.7259393734669808E+00 0.6832324875204686E+00 + 0.6412308355501580E+00 0.5999280674039510E+00 0.5593177719650326E+00 0.5193934811192902E+00 0.4801486736441256E+00 + 0.4415767790185855E+00 0.4036711811552292E+00 0.3664252220536028E+00 0.3298322053757856E+00 0.2938853999441776E+00 + 0.2585780431619257E+00 0.2239033443561915E+00 0.1898544880448611E+00 0.1564246371270075E+00 0.1236069359975595E+00 + 0.9139451358676925E-01 0.5978048632501255E-01 0.2875796103333898E-01 -0.1679962259405253E-02 -0.3154018757241899E-01 + -0.6082962030108538E-01 -0.8955516461660286E-01 -0.1177237209366101E+00 -0.1453421834658722E+00 -0.1724174378064842E+00 + -0.1989563586366328E+00 -0.2249658074573321E+00 -0.2504526304061375E+00 -0.2754236561371938E+00 -0.2998856937666934E+00 + -0.3238455308829152E+00 -0.3473099316199632E+00 -0.3702856347944674E+00 -0.3927793521041590E+00 -0.4147977663876007E+00 + -0.4363475299441409E+00 -0.4574352629131093E+00 -0.4780675517114195E+00 -0.4982509475286878E+00 -0.5179919648788196E+00 + -0.5372970802072690E+00 -0.5561727305530091E+00 -0.5746253122642059E+00 -0.5926611797667505E+00 -0.6102866443846747E+00 + -0.6275079732115432E+00 -0.6443313880318098E+00 -0.6607630642913176E+00 -0.6768091301158876E+00 -0.6924756653771867E+00 + -0.7077687008048035E+00 -0.7226942171437692E+00 -0.7372581443564278E+00 -0.7514663608678986E+00 -0.7653246928540729E+00 + -0.7788389135713435E+00 -0.7920147427271221E+00 -0.8048578458902081E+00 -0.8173738339401606E+00 -0.8295682625548225E+00 + -0.8414466317350016E+00 -0.8530143853655495E+00 -0.8642769108119376E+00 -0.8752395385514281E+00 -0.8859075418380596E+00 + -0.8962861364005478E+00 -0.9063804801723496E+00 -0.9161956730529236E+00 -0.9257367566995721E+00 -0.9350087143488421E+00 + -0.9440164706668895E+00 -0.9527648916278635E+00 -0.9612587844196464E+00 -0.9695028973760704E+00 -0.9775019199350281E+00 + -0.9852604826214921E+00 -0.9927831570549439E+00 -0.1000074455980330E+01 -0.1007138833321882E+01 -0.1013980684259106E+01 + -0.1020604345324242E+01 -0.1027014094520476E+01 -0.1033214151460282E+01 -0.1039208677523227E+01 -0.1045001776032526E+01 + -0.1050597492449770E+01 -0.1055999814587213E+01 -0.1061212672836912E+01 -0.1066239940416186E+01 -0.1071085433628814E+01 + -0.1075752912141292E+01 -0.1080246079273645E+01 -0.1084568582304249E+01 -0.1088724012788046E+01 -0.1092715906887623E+01 + -0.1096547745716693E+01 -0.1100222955695317E+01 -0.1103744908916555E+01 -0.1107116923523791E+01 -0.1110342264098502E+01 + -0.1113424142057791E+01 -0.1116365716061343E+01 -0.1119170092427236E+01 -0.1121840325556284E+01 -0.1124379418364351E+01 + -0.1126790322722266E+01 -0.1129075939902947E+01 -0.1131239121035218E+01 -0.1133282667564084E+01 -0.1135209331716900E+01 + -0.1137021816975156E+01 -0.1138722778551496E+01 -0.1140314823871568E+01 -0.1141800513060382E+01 -0.1143182359432848E+01 + -0.1144462829988106E+01 -0.1145644345907359E+01 -0.1146729283054887E+01 -0.1147719972481915E+01 -0.1148618700933064E+01 + -0.1149427711355036E+01 -0.1150149203407336E+01 -0.1150785333974662E+01 -0.1151338217680745E+01 -0.1151809927403365E+01 + -0.1152202494790314E+01 -0.1152517910775978E+01 -0.1152758126098446E+01 -0.1152925051816752E+01 -0.1153020559828135E+01 + -0.1153046483385062E+01 -0.1153004617611814E+01 -0.1152896720020397E+01 -0.1152724511025663E+01 -0.1152489674459358E+01 + -0.1152193858082955E+01 -0.1151838674099132E+01 -0.1151425699661622E+01 -0.1150956477383416E+01 -0.1150432515843014E+01 + -0.1149855290088658E+01 -0.1149226242140391E+01 -0.1148546781489776E+01 -0.1147818285597133E+01 -0.1147042100386233E+01 + -0.1146219540736222E+01 -0.1145351890970717E+01 -0.1144440405343972E+01 -0.1143486308523956E+01 -0.1142490796072246E+01 + -0.1141455034920708E+01 -0.1140380163844745E+01 -0.1139267293933129E+01 -0.1138117509054281E+01 -0.1136931866318917E+01 + -0.1135711396538980E+01 -0.1134457104682830E+01 -0.1133169970326549E+01 -0.1131850948101341E+01 -0.1130500968136960E+01 + -0.1129120936501098E+01 -0.1127711735634675E+01 -0.1126274224782987E+01 -0.1124809240422688E+01 -0.1123317596684496E+01 + -0.1121800085771649E+01 -0.1120257478374031E+01 -0.1118690524077965E+01 -0.1117099951771584E+01 -0.1115486470045851E+01 + -0.1113850767591084E+01 -0.1112193513589038E+01 -0.1110515358100515E+01 -0.1108816932448459E+01 -0.1107098849596516E+01 + -0.1105361704523115E+01 -0.1103606074590946E+01 -0.1101832519911928E+01 -0.1100041583707593E+01 -0.1098233792664933E+01 + -0.1096409657287642E+01 -0.1094569672242852E+01 -0.1092714316703250E+01 -0.1090844054684662E+01 -0.1088959335379075E+01 + -0.1087060593483124E+01 -0.1085148249522008E+01 -0.1083222710168924E+01 -0.1081284368559944E+01 -0.1079333604604411E+01 + -0.1077370785290845E+01 -0.1075396264988352E+01 -0.1073410385743633E+01 -0.1071413477573506E+01 -0.1069405858753038E+01 + -0.1067387836099281E+01 -0.1065359705250640E+01 -0.1063321750941883E+01 -0.1061274247274852E+01 -0.1059217457984850E+01 + -0.1057151636702792E+01 -0.1055077027213080E+01 -0.1052993863707296E+01 -0.1050902371033679E+01 -0.1048802764942500E+01 + -0.1046695252327259E+01 -0.1044580031461829E+01 -0.1042457292233526E+01 -0.1040327216372171E+01 -0.1038189977675128E+01 + -0.1036045742228431E+01 -0.1033894668623957E+01 -0.1031736908172717E+01 -0.1029572605114311E+01 -0.1027401896822551E+01 + -0.1025224914007316E+01 -0.1023041780912662E+01 -0.1020852615511239E+01 -0.1018657529695029E+01 -0.1016456629462466E+01 + -0.1014250015101953E+01 -0.1012037781371852E+01 -0.1009820017676932E+01 -0.1007596808241376E+01 -0.1005368232278329E+01 + -0.1003134364156065E+01 -0.1000895273560783E+01 -0.9986510256561214E+00 -0.9964016812393415E+00 -0.9941472968943378E+00 + -0.9918879251414070E+00 -0.9896236145838693E+00 -0.9873544100515853E+00 -0.9850803527413915E+00 -0.9828014803544729E+00 + -0.9805178272307916E+00 -0.9782294244804987E+00 -0.9759363001124680E+00 -0.9736384791599416E+00 -0.9713359838033104E+00 + -0.9690288334901421E+00 -0.9667170450524106E+00 -0.9644006328210118E+00 -0.9620796087376083E+00 -0.9597539824638249E+00 + -0.9574237614878179E+00 -0.9550889512283189E+00 -0.9527495551361136E+00 -0.9504055747930490E+00 -0.9480570100085778E+00 + -0.9457038589139001E+00 -0.9433461180537021E+00 -0.9409837824755957E+00 -0.9386168458172143E+00 -0.9362453003910622E+00 + -0.9338691372671331E+00 -0.9314883463533257E+00 -0.9291029164737088E+00 -0.9267128354446561E+00 -0.9243180901489110E+00 + -0.9219186666075736E+00 -0.9195145500500918E+00 -0.9171057249822572E+00 -0.9146921752522568E+00 -0.9122738841148049E+00 + -0.9098508342934115E+00 -0.9074230080407725E+00 -0.9049903871973761E+00 -0.9025529532482975E+00 -0.9001106873782734E+00 + -0.8976635705250287E+00 -0.8952115834309455E+00 -0.8927547066930527E+00 -0.8902929208114043E+00 -0.8878262062358644E+00 + -0.8853545434113288E+00 -0.8828779128213984E+00 -0.8803962950305826E+00 -0.8779096707249944E+00 -0.8754180207516187E+00 + -0.8729213261561652E+00 -0.8704195682195257E+00 -0.8679127284928716E+00 -0.8654007888314326E+00 -0.8628837314269541E+00 + -0.8603615388388851E+00 -0.8578341940243193E+00 -0.8553016803666958E+00 -0.8527639817033201E+00 -0.8502210823517030E+00 + -0.8476729671347476E+00 -0.8451196214048268E+00 -0.8425610310667432E+00 -0.8399971825996356E+00 -0.8374280630778245E+00 + -0.8348536601906327E+00 -0.8322739622612096E+00 -0.8296889582643635E+00 -0.8270986378434532E+00 -0.8245029913263251E+00 + -0.8219020097403632E+00 -0.8192956848266297E+00 -0.8166840090531358E+00 -0.8140669756272810E+00 -0.8114445785074459E+00 + -0.8088168124137882E+00 -0.8061836728382580E+00 -0.8035451560538301E+00 -0.8009012591230101E+00 -0.7982519799055862E+00 + -0.7955973170657049E+00 -0.7929372700782288E+00 -0.7902718392344300E+00 -0.7876010256470514E+00 -0.7849248312546936E+00 + -0.7822432588256222E+00 -0.7795563119609465E+00 -0.7768639950972300E+00 -0.7741663135085275E+00 -0.7714632733078751E+00 + -0.7687548814482437E+00 -0.7660411457229735E+00 -0.7633220747657076E+00 -0.7605976780498430E+00 -0.7578679658874885E+00 + -0.7551329494280029E+00 -0.7523926406560499E+00 -0.7496470523892526E+00 -0.7468961982754271E+00 -0.7441400927894049E+00 + -0.7413787512294852E+00 -0.7386121897135014E+00 -0.7358404251745365E+00 -0.7330634753562915E+00 -0.7302813588081042E+00 + -0.7274940948796763E+00 -0.7247017037154513E+00 -0.7219042062487405E+00 -0.7191016241955283E+00 -0.7162939800480140E+00 + -0.7134812970679073E+00 -0.7106635992794407E+00 -0.7078409114621805E+00 -0.7050132591435788E+00 -0.7021806685913191E+00 + -0.6993431668054603E+00 -0.6965007815103690E+00 -0.6936535411464760E+00 -0.6908014748618515E+00 -0.6879446125036175E+00 + -0.6850829846091927E+00 -0.6822166223973989E+00 -0.6793455577594238E+00 -0.6764698232496565E+00 -0.6735894520763950E+00 + -0.6707044780924551E+00 -0.6678149357856630E+00 -0.6649208602692607E+00 -0.6620222872722230E+00 -0.6591192531294906E+00 + -0.6562117947721472E+00 -0.6532999497175199E+00 -0.6503837560592365E+00 -0.6474632524572266E+00 -0.6445384781276909E+00 + -0.6416094728330407E+00 -0.6386762768718036E+00 -0.6357389310685252E+00 -0.6327974767636543E+00 -0.6298519558034233E+00 + -0.6269024105297427E+00 -0.6239488837700962E+00 -0.6209914188274636E+00 -0.6180300594702640E+00 -0.6150648499223307E+00 + -0.6120958348529247E+00 -0.6091230593667976E+00 -0.6061465689942978E+00 -0.6031664096815428E+00 -0.6001826277806448E+00 + -0.5971952700400222E+00 -0.5942043835947710E+00 -0.5912100159571299E+00 -0.5882122150070307E+00 -0.5852110289827398E+00 + -0.5822065064716095E+00 -0.5791986964009260E+00 -0.5761876480288783E+00 -0.5731734109356420E+00 -0.5701560350145878E+00 + -0.5671355704636246E+00 -0.5641120677766707E+00 -0.5610855777352810E+00 -0.5580561514004118E+00 -0.5550238401043444E+00 + -0.5519886954427705E+00 -0.5489507692670410E+00 -0.5459101136765916E+00 -0.5428667810115466E+00 -0.5398208238455037E+00 + -0.5367722949785179E+00 -0.5337212474302724E+00 -0.5306677344334658E+00 -0.5276118094273992E+00 -0.5245535260517865E+00 + -0.5214929381407842E+00 -0.5184300997172553E+00 -0.5153650649872665E+00 -0.5122978883348268E+00 -0.5092286243168869E+00 + -0.5061573276585855E+00 -0.5030840532487656E+00 -0.5000088561357634E+00 -0.4969317915234724E+00 -0.4938529147677048E+00 + -0.4907722813728380E+00 -0.4876899469887706E+00 -0.4846059674081886E+00 -0.4815203985641517E+00 -0.4784332965280080E+00 + -0.4753447175076490E+00 -0.4722547178461055E+00 -0.4691633540205086E+00 -0.4660706826414067E+00 -0.4629767604524667E+00 + -0.4598816443305548E+00 -0.4567853912862148E+00 -0.4536880584645588E+00 -0.4505897031465675E+00 -0.4474903827508280E+00 + -0.4443901548357052E+00 -0.4412890771019746E+00 -0.4381872073959169E+00 -0.4350846037128897E+00 -0.4319813242013982E+00 + -0.4288774271676646E+00 -0.4257729710807258E+00 -0.4226680145780600E+00 -0.4195626164717658E+00 -0.4164568357553127E+00 + -0.4133507316108669E+00 -0.4102443634172216E+00 -0.4071377907583458E+00 -0.4040310734325635E+00 -0.4009242714623935E+00 + -0.3978174451050561E+00 -0.3947106548636826E+00 -0.3916039614992301E+00 -0.3884974260431417E+00 -0.3853911098107584E+00 + -0.3822850744155176E+00 -0.3791793817839579E+00 -0.3760740941715547E+00 -0.3729692741794092E+00 -0.3698649847718308E+00 + -0.3667612892948207E+00 -0.3636582514955066E+00 -0.3605559355425407E+00 -0.3574544060475049E+00 -0.3543537280873476E+00 + -0.3512539672278892E+00 -0.3481551895484317E+00 -0.3450574616675028E+00 -0.3419608507697824E+00 -0.3388654246342396E+00 + -0.3357712516635236E+00 -0.3326784009146562E+00 -0.3295869421310594E+00 -0.3264969457759724E+00 -0.3234084830672975E+00 + -0.3203216260139267E+00 -0.3172364474535990E+00 -0.3141530210923392E+00 -0.3110714215455339E+00 -0.3079917243806994E+00 + -0.3049140061619978E+00 -0.3018383444965689E+00 -0.2987648180827280E+00 -0.2956935067601084E+00 -0.2926244915618033E+00 + -0.2895578547685831E+00 -0.2864936799652645E+00 -0.2834320520992921E+00 -0.2803730575416270E+00 -0.2773167841500085E+00 + -0.2742633213346799E+00 -0.2712127601266646E+00 -0.2681651932486745E+00 -0.2651207151887529E+00 -0.2620794222767396E+00 + -0.2590414127636577E+00 -0.2560067869041315E+00 -0.2529756470419290E+00 -0.2499480976987507E+00 -0.2469242456663659E+00 + -0.2439042001022238E+00 -0.2408880726286486E+00 -0.2378759774357503E+00 -0.2348680313881797E+00 -0.2318643541358485E+00 + -0.2288650682287657E+00 -0.2258702992361172E+00 -0.2228801758697354E+00 -0.2198948301121145E+00 -0.2169143973491063E+00 + -0.2139390165074705E+00 -0.2109688301974238E+00 -0.2080039848603569E+00 -0.2050446309218908E+00 -0.2020909229504274E+00 + -0.1991430198213881E+00 -0.1962010848872974E+00 -0.1932652861539021E+00 -0.1903357964625070E+00 -0.1874127936787024E+00 + -0.1844964608876812E+00 -0.1815869865963202E+00 -0.1786845649422172E+00 -0.1757893959098759E+00 -0.1729016855542115E+00 + -0.1700216462315742E+00 -0.1671494968384586E+00 -0.1642854630580883E+00 -0.1614297776150348E+00 -0.1585826805380398E+00 + -0.1557444194312012E+00 -0.1529152497536538E+00 -0.1500954351078926E+00 -0.1472852475368416E+00 -0.1444849678297712E+00 + -0.1416948858371486E+00 -0.1389153007944590E+00 -0.1361465216550372E+00 -0.1333888674318927E+00 -0.1306426675484822E+00 + -0.1279082621983536E+00 -0.1251860027135053E+00 -0.1224762519412908E+00 -0.1197793846295987E+00 -0.1170957878199916E+00 + -0.1144258612484021E+00 -0.1117700177528869E+00 -0.1091286836878541E+00 -0.1065022993440523E+00 -0.1038913193734918E+00 + -0.1012962132183315E+00 -0.9871746554259221E-01 -0.9615557666540349E-01 -0.9361106299427452E-01 -0.9108445745667579E-01 + -0.8857630992797585E-01 -0.8608718765349675E-01 -0.8361767566217436E-01 -0.8116837716895883E-01 -0.7873991396273913E-01 + -0.7633292677617219E-01 -0.7394807563333809E-01 -0.7158604017067217E-01 -0.6924751992606029E-01 -0.6693323459041152E-01 + -0.6464392421534722E-01 -0.6238034936994107E-01 -0.6014329123865809E-01 -0.5793355165176966E-01 -0.5575195303860343E-01 + -0.5359933829294623E-01 -0.5147657053882339E-01 -0.4938453278367397E-01 -0.4732412744463571E-01 -0.4529627573227194E-01 + -0.4330191687455879E-01 -0.4134200716236433E-01 -0.3941751879595017E-01 -0.3752943851022626E-01 -0.3567876595462575E-01 + -0.3386651180149903E-01 -0.3209369555493235E-01 -0.3036134302986153E-01 -0.2867048346931652E-01 -0.2702214626567594E-01 + -0.2541735724993743E-01 -0.2385713451135265E-01 -0.2234248370839688E-01 -0.2087439283106441E-01 -0.1945382637408551E-01 + -0.1808171888098112E-01 -0.1675896782019106E-01 -0.1548642575704695E-01 -0.1426489178948888E-01 -0.1309510222150092E-01 + -0.1197772045673314E-01 -0.1091332610623831E-01 -0.9902403319266216E-02 -0.8945328365362132E-02 -0.8042356520369600E-02 + -0.7193608339198911E-02 -0.6399055435312237E-02 -0.5658505931682774E-02 -0.4971589801402351E-02 -0.4337744378844948E-02 + -0.3756200394787513E-02 -0.3225968971126078E-02 -0.2745830102014657E-02 -0.2314323246553361E-02 -0.1929740760130854E-02 + -0.1590124991640147E-02 -0.1293269963677403E-02 -0.1036728620523732E-02 -0.8178266578560640E-03 -0.6336839173092652E-03 + -0.4812442114554411E-03 -0.3573142088885663E-03 -0.2586116204308245E-03 -0.1818223529741868E-03 -0.1236655132753167E-03 + -0.8096414791917507E-04 -0.5071843506793948E-04 -0.3017679859046307E-04 -0.1689928305171012E-04 -0.8806800438416483E-05 + -0.4209924174242123E-05 -0.1812186230608453E-05 -0.6856430207874943E-06 -0.2207762234777510E-06 -0.5789808120346374E-07 + -0.1162764438867681E-07 -0.1636092194626611E-08 -0.1411469196261160E-09 -0.6053864648970130E-11 -0.9102103938482552E-13 + -0.2557695550579744E-15 -0.3818161159862620E-19 -0.1608640056516381E-25 -0.2867908542943528E-38 -0.1639405452192707E-76 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.1490972894185426E+01 0.2898594369705328E+01 0.4226102647398204E+01 0.5476628578286624E+01 + 0.6653199649346901E+01 0.7758744314426550E+01 0.8796096630727330E+01 0.9768001136837229E+01 0.1067711788189623E+02 + 0.1152602750277483E+02 0.1231723624359168E+02 0.1305318081663842E+02 0.1373623301352756E+02 0.1436870398832137E+02 + 0.1495284814912227E+02 0.1549086661002188E+02 0.1598491017060163E+02 0.1643708180475745E+02 0.1684943865406904E+02 + 0.1722399353297733E+02 0.1756271596351480E+02 0.1786753276618034E+02 0.1814032824076472E+02 0.1838294397656276E+02 + 0.1859717833554092E+02 0.1878478565478038E+02 0.1894747521601122E+02 0.1908691003043678E+02 0.1920470548645839E+02 + 0.1930242790649218E+02 0.1938159305696006E+02 0.1944366465286470E+02 0.1949005289524725E+02 0.1952211307638757E+02 + 0.1954114428394226E+02 0.1954838823141548E+02 0.1954502823850324E+02 0.1953218838101044E+02 0.1951093282627426E+02 + 0.1948226536638306E+02 0.1944712915800228E+02 0.1940640667433629E+02 0.1936091987169615E+02 0.1931143057032402E+02 + 0.1925864104655939E+02 0.1920319483112569E+02 0.1914567770627270E+02 0.1908661889272693E+02 0.1902649241587448E+02 + 0.1896571863932183E+02 0.1890466595293786E+02 0.1884365260166379E+02 0.1878294864077429E+02 0.1872277800286541E+02 + 0.1866332066162236E+02 0.1860471487736171E+02 0.1854705950943718E+02 0.1849041638082738E+02 0.1843481268057272E+02 + 0.1838024339018270E+02 0.1832667372067947E+02 0.1827404154756324E+02 0.1822225983166999E+02 0.1817121901462569E+02 + 0.1812078937837576E+02 0.1807082335907063E+02 0.1802115780640943E+02 0.1797161618037463E+02 0.1792201067812283E+02 + 0.1787214428462332E+02 0.1782181274145043E+02 0.1777080642893208E+02 0.1771891215763021E+02 0.1766591486587512E+02 + 0.1761159922079143E+02 0.1755575112093501E+02 0.1749815909930632E+02 0.1743861562611338E+02 0.1737691831122648E+02 + 0.1731287100679569E+02 0.1724628481099027E+02 0.1717697897426687E+02 0.1710478170998087E+02 0.1702953091152244E+02 + 0.1695107477848783E+02 0.1686927235468663E+02 0.1678399398103932E+02 0.1669512166663813E+02 0.1660254938142798E+02 + 0.1650618327411663E+02 0.1640594181904419E+02 0.1630175589583457E+02 0.1619356880571659E+02 0.1608133622844232E+02 + 0.1596502612374653E+02 0.1584461858128563E+02 0.1572010562296940E+02 0.1559149096155470E+02 0.1545878971931102E+02 + 0.1532202811049239E+02 0.1518124309126241E+02 0.1503648198061937E+02 0.1488780205575875E+02 0.1473527012519185E+02 + 0.1457896208281294E+02 0.1441896244597594E+02 0.1425536388050388E+02 0.1408826671541400E+02 0.1391777844999757E+02 + 0.1374401325574798E+02 0.1356709147548415E+02 0.1338713912187045E+02 0.1320428737738750E+02 0.1301867209766444E+02 + 0.1283043331994052E+02 0.1263971477828357E+02 0.1244666342705594E+02 0.1225142897398476E+02 0.1205416342406364E+02 + 0.1185502063538666E+02 0.1165415588789458E+02 0.1145172546589620E+02 0.1124788625511554E+02 0.1104279535490879E+02 + 0.1083660970619294E+02 0.1062948573553064E+02 0.1042157901572463E+02 0.1021304394318828E+02 0.1000403343227721E+02 + 0.9794698626690922E+01 0.9585188627981971E+01 0.9375650241143855E+01 0.9166227737187679E+01 0.8957062632560726E+01 + 0.8748293485208164E+01 0.8540055707031815E+01 0.8332481392456542E+01 0.8125699162775922E+01 0.7919834025914198E+01 + 0.7715007251210231E+01 0.7511336258802102E+01 0.7308934523167021E+01 0.7107911490350968E+01 0.6908372508405361E+01 + 0.6710418770533413E+01 0.6514147270438017E+01 0.6319650769353934E+01 0.6127017774240882E+01 0.5936332526610492E+01 + 0.5747675001458052E+01 0.5561120915770464E+01 0.5376741746084129E+01 0.5194604754569927E+01 0.5014773023128366E+01 + 0.4837305494984530E+01 0.4662257023280675E+01 0.4489678426173787E+01 0.4319616547955467E+01 0.4152114325723103E+01 + 0.3987210861143229E+01 0.3824941496860732E+01 0.3665337897121076E+01 0.3508428132186630E+01 0.3354236766142388E+01 + 0.3202784947701370E+01 0.3054090503634531E+01 0.2908168034465503E+01 0.2765029012085665E+01 0.2624681878960210E+01 + 0.2487132148611466E+01 0.2352382507080828E+01 0.2220432915085888E+01 0.2091280710604522E+01 0.1964920711632258E+01 + 0.1841345318874233E+01 0.1720544618147173E+01 0.1602506482281042E+01 0.1487216672323735E+01 0.1374658937865809E+01 + 0.1264815116314972E+01 0.1157665230963353E+01 0.1053187587702279E+01 0.9513588702517990E+00 0.8521542337834218E+00 + 0.7555473968256491E+00 0.6615107313528323E+00 0.5700153509680036E+00 0.4810311971000716E+00 0.3945271231455855E+00 + 0.3104709764939235E+00 0.2288296783834506E+00 0.1495693015446019E+00 0.7265514559315535E-01 -0.1948189855172862E-02 + -0.7427673437111640E-01 -0.1443670782148313E+00 -0.2122563061647371E+00 -0.2779819336760306E+00 -0.3415818453668393E+00 + -0.4030942358252462E+00 -0.4625575527254874E+00 -0.5200104422372566E+00 -0.5754916967079484E+00 -0.6290402045940768E+00 + -0.6806949026143181E+00 -0.7304947300937417E+00 -0.7784785854658435E+00 -0.8246852848961586E+00 -0.8691535229891830E+00 + -0.9119218355379459E+00 -0.9530285642737767E+00 -0.9925118235722190E+00 -0.1030409469069388E+01 -0.1066759068142054E+01 + -0.1101597872203433E+01 -0.1134962790765932E+01 -0.1166890367221378E+01 -0.1197416756288568E+01 -0.1226577703077706E+01 + -0.1254408523721037E+01 -0.1280944087518682E+01 -0.1306218800548890E+01 -0.1330266590691901E+01 -0.1353120894016819E+01 + -0.1374814642481296E+01 -0.1395380252894130E+01 -0.1414849617091440E+01 -0.1433254093277628E+01 -0.1450624498482941E+01 + -0.1466991102090209E+01 -0.1482383620384031E+01 -0.1496831212076521E+01 -0.1510362474764622E+01 -0.1523005442274803E+01 + -0.1534787582851975E+01 -0.1545735798150416E+01 -0.1555876422985430E+01 -0.1565235225805577E+01 -0.1573837409846275E+01 + -0.1581707614926664E+01 -0.1588869919852685E+01 -0.1595347845390397E+01 -0.1601164357774630E+01 -0.1606341872719178E+01 + -0.1610902259895794E+01 -0.1614866847850344E+01 -0.1618256429325549E+01 -0.1621091266960840E+01 -0.1623391099340840E+01 + -0.1625175147365167E+01 -0.1626462120913114E+01 -0.1627270225777996E+01 -0.1627617170846768E+01 -0.1627520175501631E+01 + -0.1626995977221341E+01 -0.1626060839360731E+01 -0.1624730559088164E+01 -0.1623020475461238E+01 -0.1620945477622288E+01 + -0.1618520013095815E+01 -0.1615758096171077E+01 -0.1612673316353719E+01 -0.1609278846871282E+01 -0.1605587453218097E+01 + -0.1601611501725963E+01 -0.1597362968147642E+01 -0.1592853446240992E+01 -0.1588094156342277E+01 -0.1583095953917781E+01 + -0.1577869338083636E+01 -0.1572424460084281E+01 -0.1566771131720695E+01 -0.1560918833720039E+01 -0.1554876724038992E+01 + -0.1548653646093535E+01 -0.1542258136908566E+01 -0.1535698435181091E+01 -0.1528982489251385E+01 -0.1522117964976844E+01 + -0.1515112253503763E+01 -0.1507972478932725E+01 -0.1500705505873594E+01 -0.1493317946886631E+01 -0.1485816169806484E+01 + -0.1478206304946291E+01 -0.1470494252179348E+01 -0.1462685687896228E+01 -0.1454786071835450E+01 -0.1446800653786156E+01 + -0.1438734480161472E+01 -0.1430592400441542E+01 -0.1422379073485444E+01 -0.1414098973711402E+01 -0.1405756397145003E+01 + -0.1397355467335255E+01 -0.1388900141138563E+01 -0.1380394214370867E+01 -0.1371841327328378E+01 -0.1363244970177461E+01 + -0.1354608488214437E+01 -0.1345935086996126E+01 -0.1337227837342175E+01 -0.1328489680210275E+01 -0.1319723431445484E+01 + -0.1310931786405037E+01 -0.1302117324460026E+01 -0.1293282513375510E+01 -0.1284429713570631E+01 -0.1275561182260429E+01 + -0.1266679077481073E+01 -0.1257785462000340E+01 -0.1248882307115163E+01 -0.1239971496338172E+01 -0.1231054828975166E+01 + -0.1222134023595495E+01 -0.1213210721397372E+01 -0.1204286489470143E+01 -0.1195362823955608E+01 -0.1186441153110434E+01 + -0.1177522840271803E+01 -0.1168609186728368E+01 -0.1159701434498662E+01 -0.1150800769019061E+01 -0.1141908321743441E+01 + -0.1133025172656630E+01 -0.1124152352703810E+01 -0.1115290846137928E+01 -0.1106441592787264E+01 -0.1097605490245227E+01 + -0.1088783395984451E+01 -0.1079976129397275E+01 -0.1071184473764625E+01 -0.1062409178155359E+01 -0.1053650959258049E+01 + -0.1044910503147221E+01 -0.1036188466985990E+01 -0.1027485480667053E+01 -0.1018802148393944E+01 -0.1010139050204464E+01 + -0.1001496743438119E+01 -0.9928757641494527E+00 -0.9842766284690484E+00 -0.9756998339140143E+00 -0.9671458606496940E+00 + -0.9586151727043447E+00 -0.9501082191384856E+00 -0.9416254351705762E+00 -0.9331672432606939E+00 -0.9247340541538072E+00 + -0.9163262678842421E+00 -0.9079442747428956E+00 -0.8995884562087340E+00 -0.8912591858460664E+00 -0.8829568301690750E+00 + -0.8746817494750385E+00 -0.8664342986476723E+00 -0.8582148279319598E+00 -0.8500236836818522E+00 -0.8418612090821510E+00 + -0.8337277448458742E+00 -0.8256236298884094E+00 -0.8175492019796625E+00 -0.8095047983754566E+00 -0.8014907564293513E+00 + -0.7935074141860654E+00 -0.7855551109576326E+00 -0.7776341878834073E+00 -0.7697449884750045E+00 -0.7618878591472366E+00 + -0.7540631497360738E+00 -0.7462712140046344E+00 -0.7385124101381848E+00 -0.7307871012290940E+00 -0.7230956557526664E+00 + -0.7154384480347357E+00 -0.7078158587119011E+00 -0.7002282751852088E+00 -0.6926760920681024E+00 -0.6851597116293913E+00 + -0.6776795442319780E+00 -0.6702360087680368E+00 -0.6628295330912921E+00 -0.6554605544470310E+00 -0.6481295199004043E+00 + -0.6408368867635551E+00 -0.6335831230220497E+00 -0.6263687077610380E+00 -0.6191941315915128E+00 -0.6120598970769715E+00 + -0.6049665191607240E+00 -0.5979145255940220E+00 -0.5909044573650831E+00 -0.5839368691290320E+00 -0.5770123296386506E+00 + -0.5701314221757601E+00 -0.5632947449829158E+00 -0.5565029116949882E+00 -0.5497565517700718E+00 -0.5430563109189926E+00 + -0.5364028515325477E+00 -0.5297968531054059E+00 -0.5232390126554224E+00 -0.5167300451368810E+00 -0.5102706838459522E+00 + -0.5038616808163805E+00 -0.4975038072031411E+00 -0.4911978536514589E+00 -0.4849446306482554E+00 -0.4787449688526985E+00 + -0.4725997194020929E+00 -0.4665097541888966E+00 -0.4604759661041344E+00 -0.4544992692419215E+00 -0.4485805990591846E+00 + -0.4427209124840173E+00 -0.4369211879653461E+00 -0.4311824254558134E+00 -0.4255056463188713E+00 -0.4198918931501576E+00 + -0.4143422295021775E+00 -0.4088577395001772E+00 -0.4034395273358983E+00 -0.3980887166245596E+00 -0.3928064496090112E+00 + -0.3875938861934557E+00 -0.3824522027875051E+00 -0.3773825909395854E+00 -0.3723862557368422E+00 -0.3674644139467203E+00 + -0.3626182918733373E+00 -0.3578491228995945E+00 -0.3531581446837392E+00 -0.3485465959768078E+00 -0.3440157130250673E+00 + -0.3395667255192788E+00 -0.3352008520504021E+00 -0.3309192950292724E+00 -0.3267232350259450E+00 -0.3226138244828918E+00 + -0.3185921807551977E+00 -0.3146593784305226E+00 -0.3108164408820478E+00 -0.3070643310091922E+00 -0.3034039411238457E+00 + -0.2998360819446073E+00 -0.2963614706684425E+00 -0.2929807180988327E+00 -0.2896943148224383E+00 -0.2865026164432708E+00 + -0.2834058279051005E+00 -0.2804039869602682E+00 -0.2774969468771566E+00 -0.2746843585203667E+00 -0.2719656519882723E+00 + -0.2693400180531267E+00 -0.2668063897203013E+00 -0.2643634243062732E+00 -0.2620094865300300E+00 -0.2597426332192892E+00 + -0.2575606003500299E+00 -0.2554607932624695E+00 -0.2534402810239623E+00 -0.2514957960316366E+00 -0.2496237400535760E+00 + -0.2478201979810306E+00 -0.2460809605838598E+00 -0.2444015574991944E+00 -0.2427773015044900E+00 -0.2412033447902379E+00 + -0.2396747474109387E+00 -0.2381865573144384E+00 -0.2367339003009647E+00 -0.2353120769446503E+00 -0.2339166619743637E+00 + -0.2325435999910598E+00 -0.2311892899420583E+00 -0.2298506498591054E+00 -0.2285251535007102E+00 -0.2272108322697357E+00 + -0.2259062395150722E+00 -0.2246103800296458E+00 -0.2233226143482858E+00 -0.2220425533758296E+00 -0.2207699612307818E+00 + -0.2195046807982463E+00 -0.2182465877415019E+00 -0.2169955687347858E+00 -0.2157515141286527E+00 -0.2145143163564465E+00 + -0.2132838697320672E+00 -0.2120600704271507E+00 -0.2108428164580473E+00 -0.2096320076725845E+00 -0.2084275457364440E+00 + -0.2072293341191706E+00 -0.2060372780798283E+00 -0.2048512846523208E+00 -0.2036712626303956E+00 -0.2024971225523388E+00 + -0.2013287766853885E+00 -0.2001661390098699E+00 -0.1990091252030775E+00 -0.1978576526229085E+00 -0.1967116402912710E+00 + -0.1955710088772761E+00 -0.1944356806802258E+00 -0.1933055796124141E+00 -0.1921806311817510E+00 -0.1910607624742264E+00 + -0.1899459021362168E+00 -0.1888359803566597E+00 -0.1877309288490946E+00 -0.1866306808335939E+00 -0.1855351710185818E+00 + -0.1844443355825659E+00 -0.1833581121557800E+00 -0.1822764398017569E+00 -0.1811992589988340E+00 -0.1801265116216080E+00 + -0.1790581409223451E+00 -0.1779940915123532E+00 -0.1769343093433298E+00 -0.1758787416886912E+00 -0.1748273371248939E+00 + -0.1737800455127509E+00 -0.1727368179787582E+00 -0.1716976068964338E+00 -0.1706623658676789E+00 -0.1696310497041661E+00 + -0.1686036144087650E+00 -0.1675800171570109E+00 -0.1665602162786198E+00 -0.1655441712390600E+00 -0.1645318426211851E+00 + -0.1635231921069348E+00 -0.1625181824591057E+00 -0.1615167775032033E+00 -0.1605189421093761E+00 -0.1595246421744391E+00 + -0.1585338446039885E+00 -0.1575465172946173E+00 -0.1565626291162327E+00 -0.1555821498944797E+00 -0.1546050503932762E+00 + -0.1536313022974632E+00 -0.1526608781955763E+00 -0.1516937515627348E+00 -0.1507298967436624E+00 -0.1497692889358336E+00 + -0.1488119041727559E+00 -0.1478577193073842E+00 -0.1469067119956771E+00 -0.1459588606802934E+00 -0.1450141445744331E+00 + -0.1440725436458233E+00 -0.1431340386008554E+00 -0.1421986108688733E+00 -0.1412662425866119E+00 -0.1403369165827954E+00 + -0.1394106163628882E+00 -0.1384873260940094E+00 -0.1375670305900030E+00 -0.1366497152966734E+00 -0.1357353662771839E+00 + -0.1348239701976193E+00 -0.1339155143127141E+00 -0.1330099864517488E+00 -0.1321073750046149E+00 -0.1312076689080463E+00 + -0.1303108576320237E+00 -0.1294169311663473E+00 -0.1285258800073831E+00 -0.1276376951449777E+00 -0.1267523680495491E+00 + -0.1258698906593478E+00 -0.1249902553678929E+00 -0.1241134550115789E+00 -0.1232394828574590E+00 -0.1223683325912011E+00 + -0.1214999983052166E+00 -0.1206344744869641E+00 -0.1197717560074267E+00 -0.1189118381097634E+00 -0.1180547163981319E+00 + -0.1172003868266877E+00 -0.1163488456887531E+00 -0.1155000896061621E+00 -0.1146541155187737E+00 -0.1138109206741603E+00 + -0.1129705026174663E+00 -0.1121328591814367E+00 -0.1112979884766172E+00 -0.1104658888817227E+00 -0.1096365590341772E+00 + -0.1088099978208190E+00 -0.1079862043687761E+00 -0.1071651780365066E+00 -0.1063469184050076E+00 -0.1055314252691870E+00 + -0.1047186986294014E+00 -0.1039087386831581E+00 -0.1031015458169785E+00 -0.1022971205984247E+00 -0.1014954637682864E+00 + -0.1006965762329294E+00 -0.9990045905680092E-01 -0.9910711345509600E-01 -0.9831654078657849E-01 -0.9752874254656095E-01 + -0.9674372036003734E-01 -0.9596147597497186E-01 -0.9518201125574054E-01 -0.9440532817672517E-01 -0.9363142881605759E-01 + -0.9286031534951537E-01 -0.9209199004456679E-01 -0.9132645525456264E-01 -0.9056371341307594E-01 -0.8980376702838780E-01 + -0.8904661867811879E-01 -0.8829227100400254E-01 -0.8754072670680409E-01 -0.8679198854137972E-01 -0.8604605931187735E-01 + -0.8530294186707681E-01 -0.8456263909586934E-01 -0.8382515392287562E-01 -0.8309048930419941E-01 -0.8235864822331807E-01 + -0.8162963368710800E-01 -0.8090344872200475E-01 -0.8018009637029486E-01 -0.7945957968654156E-01 -0.7874190173414135E-01 + -0.7802706558201103E-01 -0.7731507430140443E-01 -0.7660593096285831E-01 -0.7589963863326689E-01 -0.7519620037308256E-01 + -0.7449561923364434E-01 -0.7379789825463164E-01 -0.7310304046164423E-01 -0.7241104886390530E-01 -0.7172192645209033E-01 + -0.7103567619627764E-01 -0.7035230104402376E-01 -0.6967180391855922E-01 -0.6899418771710759E-01 -0.6831945530932572E-01 + -0.6764760953586510E-01 -0.6697865320705315E-01 -0.6631258910169627E-01 -0.6564941996600249E-01 -0.6498914851262336E-01 + -0.6433177741981720E-01 -0.6367730933073025E-01 -0.6302574685279916E-01 -0.6237709255727147E-01 -0.6173134897884694E-01 + -0.6108851861543815E-01 -0.6044860392805121E-01 -0.5981160734078578E-01 -0.5917753124095684E-01 -0.5854637797933600E-01 + -0.5791814987051506E-01 -0.5729284919339011E-01 -0.5667047819176833E-01 -0.5605103907509822E-01 -0.5543453401932198E-01 + -0.5482096516785345E-01 -0.5421033463268072E-01 -0.5360264449559476E-01 -0.5299789680954505E-01 -0.5239609360012387E-01 + -0.5179723686717961E-01 -0.5120132858656160E-01 -0.5060837071199547E-01 -0.5001836517709381E-01 -0.4943131389750106E-01 + -0.4884721877317583E-01 -0.4826608169081145E-01 -0.4768790452639723E-01 -0.4711268914792258E-01 -0.4654043741822612E-01 + -0.4597115119799098E-01 -0.4540483234889028E-01 -0.4484148273688456E-01 -0.4428110423567344E-01 -0.4372369873030461E-01 + -0.4316926812094350E-01 -0.4261781432680625E-01 -0.4206933929025882E-01 -0.4152384498108628E-01 -0.4098133340093556E-01 + -0.4044180658793538E-01 -0.3990526662149652E-01 -0.3937171562729746E-01 -0.3884115578245902E-01 -0.3831358932091222E-01 + -0.3778901853896358E-01 -0.3726744580106369E-01 -0.3674887354578273E-01 -0.3623330429199824E-01 -0.3572074064530062E-01 + -0.3521118530462180E-01 -0.3470464106909250E-01 -0.3420111084513349E-01 -0.3370059765378802E-01 -0.3320310463829990E-01 + -0.3270863507194550E-01 -0.3221719236612464E-01 -0.3172878007871772E-01 -0.3124340192271698E-01 -0.3076106177513717E-01 + -0.3028176368621473E-01 -0.2980551188890199E-01 -0.2933231080866432E-01 -0.2886216507358872E-01 -0.2839507952481046E-01 + -0.2793105922726807E-01 -0.2747010948079293E-01 -0.2701223583154306E-01 -0.2655744408378990E-01 -0.2610574031206566E-01 + -0.2565713087368143E-01 -0.2521162242162311E-01 -0.2476922191783597E-01 -0.2432993664690480E-01 -0.2389377423013912E-01 + -0.2346074264007272E-01 -0.2303085021538444E-01 -0.2260410567625017E-01 -0.2218051814013276E-01 -0.2176009713801780E-01 + -0.2134285263110349E-01 -0.2092879502794953E-01 -0.2051793520209298E-01 -0.2011028451013516E-01 -0.1970585481030489E-01 + -0.1930465848150186E-01 -0.1890670844282149E-01 -0.1851201817356444E-01 -0.1812060173372857E-01 -0.1773247378498237E-01 + -0.1734764961211651E-01 -0.1696614514496612E-01 -0.1658797698079692E-01 -0.1621316240714285E-01 -0.1584171942508113E-01 + -0.1547366677292802E-01 -0.1510902395033159E-01 -0.1474781124273767E-01 -0.1439004974619603E-01 -0.1403576139247217E-01 + -0.1368496897442080E-01 -0.1333769617157242E-01 -0.1299396757587675E-01 -0.1265380871753636E-01 -0.1231724609085785E-01 + -0.1198430718003442E-01 -0.1165502048476427E-01 -0.1132941554559642E-01 -0.1100752296888000E-01 -0.1068937445118038E-01 + -0.1037500280300520E-01 -0.1006444197166726E-01 -0.9757727063089234E-02 -0.9454894362331736E-02 -0.9155981352602857E-02 + -0.8861026732477590E-02 -0.8570070431026370E-02 -0.8283153620518910E-02 -0.8000318726330972E-02 -0.7721609433644288E-02 + -0.7447070690483597E-02 -0.7176748706588126E-02 -0.6910690947562739E-02 -0.6648946123695469E-02 -0.6391564172768492E-02 + -0.6138596236119977E-02 -0.5890094627143023E-02 -0.5646112791328837E-02 -0.5406705256875357E-02 -0.5171927574793084E-02 + -0.4941836247340325E-02 -0.4716488643516831E-02 -0.4495942900234213E-02 -0.4280257807663031E-02 -0.4069492677135494E-02 + -0.3863707189852578E-02 -0.3662961224513759E-02 -0.3467314661850819E-02 -0.3276827163911870E-02 -0.3091557925807099E-02 + -0.2911565397496689E-02 -0.2736906973081798E-02 -0.2567638644951017E-02 -0.2403814620049312E-02 -0.2245486895479086E-02 + -0.2092704790623673E-02 -0.1945514433017997E-02 -0.1803958195289058E-02 -0.1668074080673803E-02 -0.1537895054912087E-02 + -0.1413448322734187E-02 -0.1294754547748605E-02 -0.1181827015318322E-02 -0.1074670739037643E-02 -0.9732815127318119E-03 + -0.8776449115510747E-03 -0.7877352477807324E-03 -0.7035144894988547E-03 -0.6249311532533495E-03 -0.5519191855637202E-03 + -0.4843968523409821E-03 -0.4222656603112821E-03 -0.3654093402469373E-03 -0.3136929282422736E-03 -0.2669619883460904E-03 + -0.2250420274226155E-03 -0.1877381608793739E-03 -0.1548350954324305E-03 -0.1260975017208530E-03 -0.1012708544007759E-03 + -0.8008281908161370E-04 -0.6224526246190971E-04 -0.4745695222159778E-04 -0.3540699419800758E-04 -0.2577902344419184E-04 + -0.1825612034243538E-04 -0.1252636105889374E-04 -0.8288832859917125E-05 -0.5259851630896392E-05 -0.3179018438370757E-05 + -0.1814657830647114E-05 -0.9681145896094296E-06 -0.4763777092066571E-06 -0.2125847804801365E-06 -0.8416563922630169E-07 + -0.2871694661282378E-07 -0.8118483409326055E-08 -0.1800875019886702E-08 -0.2899912795055122E-09 -0.3021521412802248E-10 + -0.1705617717949463E-11 -0.3905505511147667E-13 -0.2187979755795985E-15 -0.1136823060733138E-18 -0.6529908184057616E-24 + -0.1331494455842040E-33 -0.1332533824576676E-57 -0.3518780789111388E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2980561953329615E-01 0.5916214233164482E-01 0.8807376775591262E-01 0.1165446070923979E+00 + 0.1445785896945104E+00 0.1721793127131528E+00 0.1993498372288393E+00 0.2260924395124203E+00 0.2524083296657185E+00 + 0.2782973516026372E+00 0.3037576786932059E+00 0.3287855187856478E+00 0.3533748410476745E+00 0.3775171353675275E+00 + 0.4012012131151563E+00 0.4244130560281678E+00 0.4471357179640750E+00 0.4693492823288160E+00 0.4910308762069837E+00 + 0.5121547406179706E+00 0.5326923549257166E+00 0.5526126122474077E+00 0.5718820417388514E+00 0.5904650728749644E+00 + 0.6083243362816283E+00 0.6254209952953163E+00 0.6417151022124156E+00 0.6571659731229090E+00 0.6717325752842186E+00 + 0.6853739211620790E+00 0.6980494635281584E+00 0.7097194863416821E+00 0.7203454865385274E+00 0.7298905422913191E+00 + 0.7383196637747241E+00 0.7456001229593330E+00 0.7517017594547573E+00 0.7565972599187180E+00 0.7602624090360081E+00 + 0.7626763105428430E+00 0.7638215772227638E+00 0.7636844892256079E+00 0.7622551204578512E+00 0.7595274331582714E+00 + 0.7554993411058685E+00 0.7501727422062439E+00 0.7435535214678834E+00 0.7356515256112056E+00 0.7264805107514307E+00 + 0.7160580647622865E+00 0.7044055060626673E+00 0.6915477606740609E+00 0.6775132194747052E+00 0.6623335776287783E+00 + 0.6460436581976104E+00 0.6286812219467698E+00 0.6102867653501249E+00 0.5909033087616116E+00 0.5705761766794121E+00 + 0.5493527719676207E+00 0.5272823458290659E+00 0.5044157652415996E+00 0.4808052794806210E+00 0.4565042872543610E+00 + 0.4315671058772241E+00 0.4060487438014351E+00 0.3800046777198434E+00 0.3534906353440669E+00 0.3265623848532687E+00 + 0.2992755319008061E+00 0.2716853249594787E+00 0.2438464696819385E+00 0.2158129528517275E+00 0.1876378764027582E+00 + 0.1593733018915083E+00 0.1310701057169563E+00 0.1027778452988341E+00 0.7454463634517153E-01 0.4641704126567402E-01 + 0.1843996871823178E-01 -0.9343415788128404E-02 -0.3689176836917064E-01 -0.6416563450906662E-01 -0.9112750630870141E-01 + -0.1177418695188684E+00 -0.1439752406767907E+00 -0.1697961946978080E+00 -0.1951753833029356E+00 -0.2200855446874273E+00 + -0.2445015048556650E+00 -0.2684001710639848E+00 -0.2917605178254852E+00 -0.3145635659398817E+00 -0.3367923550171064E+00 + -0.3584319099660255E+00 -0.3794692019194473E+00 -0.3998931040638364E+00 -0.4196943428370452E+00 -0.4388654449501550E+00 + -0.4574006806803239E+00 -0.4752960038707706E+00 -0.4925489890615999E+00 -0.5091587661615586E+00 -0.5251259530560686E+00 + -0.5404525865310800E+00 -0.5551420518758782E+00 -0.5691990115107658E+00 -0.5826293329679667E+00 -0.5954400165361110E+00 + -0.6076391228604799E+00 -0.6192357007728714E+00 -0.6302397156066638E+00 -0.6406619782344070E+00 -0.6505140750472834E+00 + -0.6598082990779603E+00 -0.6685575824509672E+00 -0.6767754303275997E+00 -0.6844758564958461E+00 -0.6916733207396428E+00 + -0.6983826681062417E+00 -0.7046190701754369E+00 -0.7103979684200303E+00 -0.7157350197331149E+00 -0.7206460441846081E+00 + -0.7251469750570049E+00 -0.7292538111984742E+00 -0.7329825717202728E+00 -0.7363492530549652E+00 -0.7393697883820587E+00 + -0.7420600094185869E+00 -0.7444356105635324E+00 -0.7465121153771925E+00 -0.7483048453692615E+00 -0.7498288910627880E+00 + -0.7510990852950691E+00 -0.7521299787110952E+00 -0.7529358174001737E+00 -0.7535305226219949E+00 -0.7539276725644879E+00 + -0.7541404860724225E+00 -0.7541818082827765E+00 -0.7540640981003759E+00 -0.7537994174452843E+00 -0.7533994222016963E+00 + -0.7528753547968463E+00 -0.7522380383374159E+00 -0.7514978722304342E+00 -0.7506648292152125E+00 -0.7497484537329505E+00 + -0.7487578615608312E+00 -0.7477017406379203E+00 -0.7465883530109418E+00 -0.7454255378288276E+00 -0.7442207153161546E+00 + -0.7429808916567682E+00 -0.7417126647203566E+00 -0.7404222305663006E+00 -0.7391153906607812E+00 -0.7377975597449168E+00 + -0.7364737742936068E+00 -0.7351487015066457E+00 -0.7338266487757376E+00 -0.7325115735730846E+00 -0.7312070937093148E+00 + -0.7299164979106890E+00 -0.7286427566676440E+00 -0.7273885333088894E+00 -0.7261561952575059E+00 -0.7249478254275804E+00 + -0.7237652337221139E+00 -0.7226099685950527E+00 -0.7214833286424112E+00 -0.7203863741895169E+00 -0.7193199388434760E+00 + -0.7182846409819289E+00 -0.7172808951511491E+00 -0.7163089233484455E+00 -0.7153687661656919E+00 -0.7144602937725963E+00 + -0.7135832167201219E+00 -0.7127370965461225E+00 -0.7119213561669281E+00 -0.7111352900401826E+00 -0.7103780740857679E+00 + -0.7096487753530824E+00 -0.7089463614243792E+00 -0.7082697095451826E+00 -0.7076176154740552E+00 -0.7069888020452744E+00 + -0.7063819274390548E+00 -0.7057955931550737E+00 -0.7052283516861344E+00 -0.7046787138897004E+00 -0.7041451560560322E+00 + -0.7036261266724787E+00 -0.7031200528842719E+00 -0.7026253466530071E+00 -0.7021404106145906E+00 -0.7016636436391807E+00 + -0.7011934460961990E+00 -0.7007282248280853E+00 -0.7002663978369600E+00 -0.6998063986888191E+00 -0.6993466806403545E+00 + -0.6988857204938393E+00 -0.6984220221858803E+00 -0.6979541201161606E+00 -0.6974805822225486E+00 -0.6970000128092043E+00 + -0.6965110551345379E+00 -0.6960123937660179E+00 -0.6955027567089953E+00 -0.6949809173168499E+00 -0.6944456959898160E+00 + -0.6938959616699598E+00 -0.6933306331398015E+00 -0.6927486801321128E+00 -0.6921491242584105E+00 -0.6915310397636959E+00 + -0.6908935541148920E+00 -0.6902358484304498E+00 -0.6895571577584888E+00 -0.6888567712107797E+00 -0.6881340319597943E+00 + -0.6873883371059062E+00 -0.6866191374217884E+00 -0.6858259369808462E+00 -0.6850082926764688E+00 -0.6841658136386904E+00 + -0.6832981605547428E+00 -0.6824050448998029E+00 -0.6814862280841192E+00 -0.6805415205224655E+00 -0.6795707806318362E+00 + -0.6785739137629465E+00 -0.6775508710711322E+00 -0.6765016483318922E+00 -0.6754262847062551E+00 -0.6743248614609347E+00 + -0.6731975006480673E+00 -0.6720443637491410E+00 -0.6708656502875580E+00 -0.6696615964141065E+00 -0.6684324734694262E+00 + -0.6671785865273722E+00 -0.6659002729230488E+00 -0.6645979007690805E+00 -0.6632718674635170E+00 -0.6619225981926605E+00 + -0.6605505444318366E+00 -0.6591561824471119E+00 -0.6577400118006743E+00 -0.6563025538625172E+00 -0.6548443503309030E+00 + -0.6533659617639238E+00 -0.6518679661243543E+00 -0.6503509573398282E+00 -0.6488155438802812E+00 -0.6472623473544041E+00 + -0.6456920011267967E+00 -0.6441051489573446E+00 -0.6425024436642409E+00 -0.6408845458119288E+00 -0.6392521224252083E+00 + -0.6376058457305376E+00 -0.6359463919255466E+00 -0.6342744399776308E+00 -0.6325906704524237E+00 -0.6308957643728299E+00 + -0.6291904021092484E+00 -0.6274752623015023E+00 -0.6257510208129137E+00 -0.6240183497169164E+00 -0.6222779163164849E+00 + -0.6205303821966133E+00 -0.6187764023100156E+00 -0.6170166240961311E+00 -0.6152516866334947E+00 -0.6134822198254523E+00 + -0.6117088436191340E+00 -0.6099321672576039E+00 -0.6081527885649929E+00 -0.6063712932644193E+00 -0.6045882543284419E+00 + -0.6028042313617739E+00 -0.6010197700159075E+00 -0.5992354014353167E+00 -0.5974516417348416E+00 -0.5956689915078388E+00 + -0.5938879353646483E+00 -0.5921089415009345E+00 -0.5903324612953872E+00 -0.5885589289362899E+00 -0.5867887610764325E+00 + -0.5850223565158195E+00 -0.5832600959116285E+00 -0.5815023415148403E+00 -0.5797494369329861E+00 -0.5780017069183963E+00 + -0.5762594571813876E+00 -0.5745229742277652E+00 -0.5727925252200571E+00 -0.5710683578618634E+00 -0.5693507003047140E+00 + -0.5676397610768275E+00 -0.5659357290331757E+00 -0.5642387733262232E+00 -0.5625490433967653E+00 -0.5608666689842511E+00 + -0.5591917601560096E+00 -0.5575244073547678E+00 -0.5558646814639211E+00 -0.5542126338899364E+00 -0.5525682966613572E+00 + -0.5509316825438423E+00 -0.5493027851706900E+00 -0.5476815791883145E+00 -0.5460680204161578E+00 -0.5444620460205136E+00 + -0.5428635747017666E+00 -0.5412725068945640E+00 -0.5396887249804451E+00 -0.5381120935124601E+00 -0.5365424594513395E+00 + -0.5349796524127961E+00 -0.5334234849255057E+00 -0.5318737526994184E+00 -0.5303302349039710E+00 -0.5287926944558559E+00 + -0.5272608783160018E+00 -0.5257345177954069E+00 -0.5242133288695329E+00 -0.5226970125009548E+00 -0.5211852549699725E+00 + -0.5196777282129478E+00 -0.5181740901680973E+00 -0.5166739851285399E+00 -0.5151770441023719E+00 -0.5136828851796083E+00 + -0.5121911139058056E+00 -0.5107013236622320E+00 -0.5092130960524547E+00 -0.5077260012952530E+00 -0.5062395986237541E+00 + -0.5047534366907523E+00 -0.5032670539801658E+00 -0.5017799792246062E+00 -0.5002917318290815E+00 -0.4988018223008544E+00 + -0.4973097526855100E+00 -0.4958150170093096E+00 -0.4943171017279344E+00 -0.4928154861817414E+00 -0.4913096430576898E+00 + -0.4897990388581003E+00 -0.4882831343764708E+00 -0.4867613851805592E+00 -0.4852332421030025E+00 -0.4836981517397486E+00 + -0.4821555569566233E+00 -0.4806048974043609E+00 -0.4790456100424820E+00 -0.4774771296724106E+00 -0.4758988894802721E+00 + -0.4743103215898168E+00 -0.4727108576259886E+00 -0.4710999292896421E+00 -0.4694769689439838E+00 -0.4678414102133217E+00 + -0.4661926885947614E+00 -0.4645302420834957E+00 -0.4628535118124025E+00 -0.4611619427066728E+00 -0.4594549841542420E+00 + -0.4577320906928324E+00 -0.4559927227144522E+00 -0.4542363471882220E+00 -0.4524624384024584E+00 -0.4506704787269636E+00 + -0.4488599593965099E+00 -0.4470303813165587E+00 -0.4451812558922650E+00 -0.4433121058818812E+00 -0.4414224662756842E+00 + -0.4395118852016028E+00 -0.4375799248587367E+00 -0.4356261624800019E+00 -0.4336501913251545E+00 -0.4316516217054698E+00 + -0.4296300820413793E+00 -0.4275852199543783E+00 -0.4255167033945205E+00 -0.4234242218048398E+00 -0.4213074873240124E+00 + -0.4191662360285776E+00 -0.4170002292160105E+00 -0.4148092547299044E+00 -0.4125931283284775E+00 -0.4103516950975684E+00 + -0.4080848309091941E+00 -0.4057924439266636E+00 -0.4034744761571206E+00 -0.4011309050522512E+00 -0.3987617451577198E+00 + -0.3963670498117089E+00 -0.3939469128927054E+00 -0.3915014706163934E+00 -0.3890309033812195E+00 -0.3865354376618079E+00 + -0.3840153479490107E+00 -0.3814709587348666E+00 -0.3789026465402212E+00 -0.3763108419821045E+00 -0.3736960318772730E+00 + -0.3710587613774890E+00 -0.3683996361312071E+00 -0.3657193244652975E+00 -0.3630185595792629E+00 -0.3602981417430927E+00 + -0.3575589404884341E+00 -0.3548018967810906E+00 -0.3520280251610328E+00 -0.3492384158340347E+00 -0.3464342366967726E+00 + -0.3436167352746726E+00 -0.3407872405489845E+00 -0.3379471646464616E+00 -0.3350980043615843E+00 -0.3322413424775305E+00 + -0.3293788488479631E+00 -0.3265122811972369E+00 -0.3236434855917447E+00 -0.3207743965298733E+00 -0.3179070365923667E+00 + -0.3150435155888747E+00 -0.3121860291300399E+00 -0.3093368565477600E+00 -0.3064983580792707E+00 -0.3036729712235190E+00 + -0.3008632061710796E+00 -0.2980716402017605E+00 -0.2953009109372595E+00 -0.2925537083300732E+00 -0.2898327652646850E+00 + -0.2871408466433073E+00 -0.2844807368267285E+00 -0.2818552253018305E+00 -0.2792670904519203E+00 -0.2767190813152813E+00 + -0.2742138972325089E+00 -0.2717541653057443E+00 -0.2693424156246247E+00 -0.2669810542566010E+00 -0.2646723340554829E+00 + -0.2624183234141169E+00 -0.2602208731776114E+00 -0.2580815820450847E+00 -0.2560017609230388E+00 -0.2539823968540338E+00 + -0.2520241173314579E+00 -0.2501271560242013E+00 -0.2482913211710008E+00 -0.2465159681564286E+00 -0.2447999780373049E+00 + -0.2431417440311489E+00 -0.2415391681797712E+00 -0.2399896705229777E+00 -0.2384902131086874E+00 -0.2370373409624846E+00 + -0.2356272416659091E+00 -0.2342558243668445E+00 -0.2329188177912029E+00 -0.2316118850938999E+00 -0.2303307511904072E+00 + -0.2290713356663495E+00 -0.2278298817525086E+00 -0.2266030696708936E+00 -0.2253881016292194E+00 -0.2241827467507004E+00 + -0.2229853380898954E+00 -0.2217947209120437E+00 -0.2206101607947411E+00 -0.2194312294160579E+00 -0.2182576912681023E+00 + -0.2170894123227367E+00 -0.2159263013992442E+00 -0.2147682815470252E+00 -0.2136152801508975E+00 -0.2124672267271450E+00 + -0.2113240526296465E+00 -0.2101856910076705E+00 -0.2090520767782083E+00 -0.2079231465985940E+00 -0.2067988388391586E+00 + -0.2056790935559256E+00 -0.2045638524633573E+00 -0.2034530589071708E+00 -0.2023466578372234E+00 -0.2012445957804879E+00 + -0.2001468208141218E+00 -0.1990532825386412E+00 -0.1979639320512100E+00 -0.1968787219190523E+00 -0.1957976061529950E+00 + -0.1947205401811518E+00 -0.1936474808227552E+00 -0.1925783862621419E+00 -0.1915132160229021E+00 -0.1904519309421991E+00 + -0.1893944931452612E+00 -0.1883408660200601E+00 -0.1872910141921747E+00 -0.1862449034998491E+00 -0.1852025009692512E+00 + -0.1841637747899360E+00 -0.1831286942905153E+00 -0.1820972299145447E+00 -0.1810693531966281E+00 -0.1800450367387435E+00 + -0.1790242541867973E+00 -0.1780069802074076E+00 -0.1769931904649212E+00 -0.1759828615986671E+00 -0.1749759712004503E+00 + -0.1739724977922888E+00 -0.1729724208043943E+00 -0.1719757205534020E+00 -0.1709823782208502E+00 -0.1699923758319090E+00 + -0.1690056962343670E+00 -0.1680223230778698E+00 -0.1670422407934179E+00 -0.1660654345731199E+00 -0.1650918903502081E+00 + -0.1641215947793118E+00 -0.1631545352169931E+00 -0.1621906997025439E+00 -0.1612300769390466E+00 -0.1602726562746950E+00 + -0.1593184276843816E+00 -0.1583673817515448E+00 -0.1574195096502818E+00 -0.1564748031277238E+00 -0.1555332544866742E+00 + -0.1545948565685086E+00 -0.1536596027363397E+00 -0.1527274868584397E+00 -0.1517985032919279E+00 -0.1508726468667154E+00 + -0.1499499128697113E+00 -0.1490302970292871E+00 -0.1481137954999969E+00 -0.1472004048475565E+00 -0.1462901220340763E+00 + -0.1453829444035485E+00 -0.1444788696675867E+00 -0.1435778958914185E+00 -0.1426800214801243E+00 -0.1417852451651289E+00 + -0.1408935659909356E+00 -0.1400049833021089E+00 -0.1391194967304976E+00 -0.1382371061827025E+00 -0.1373578118277804E+00 + -0.1364816140851888E+00 -0.1356085136129656E+00 -0.1347385112961426E+00 -0.1338716082353913E+00 -0.1330078057358998E+00 + -0.1321471052964751E+00 -0.1312895085988738E+00 -0.1304350174973551E+00 -0.1295836340084561E+00 -0.1287353603009860E+00 + -0.1278901986862372E+00 -0.1270481516084132E+00 -0.1262092216352652E+00 -0.1253734114489432E+00 -0.1245407238370528E+00 + -0.1237111616839186E+00 -0.1228847279620496E+00 -0.1220614257238084E+00 -0.1212412580932750E+00 -0.1204242282583109E+00 + -0.1196103394628140E+00 -0.1187995949991672E+00 -0.1179919982008737E+00 -0.1171875524353817E+00 -0.1163862610970906E+00 + -0.1155881276005403E+00 -0.1147931553737807E+00 -0.1140013478519165E+00 -0.1132127084708265E+00 -0.1124272406610577E+00 + -0.1116449478418844E+00 -0.1108658334155396E+00 -0.1100899007616072E+00 -0.1093171532315786E+00 -0.1085475941435698E+00 + -0.1077812267771939E+00 -0.1070180543685908E+00 -0.1062580801056096E+00 -0.1055013071231401E+00 -0.1047477384985937E+00 + -0.1039973772475303E+00 -0.1032502263194267E+00 -0.1025062885935886E+00 -0.1017655668751993E+00 -0.1010280638915064E+00 + -0.1002937822881413E+00 -0.9956272462557243E-01 -0.9883489337568613E-01 -0.9811029091849610E-01 -0.9738891953897792E-01 + -0.9667078142402649E-01 -0.9595587865953395E-01 -0.9524421322758671E-01 -0.9453578700377881E-01 -0.9383060175463867E-01 + -0.9312865913516950E-01 -0.9242996068649882E-01 -0.9173450783363590E-01 -0.9104230188333598E-01 -0.9035334402206746E-01 + -0.8966763531408090E-01 -0.8898517669957863E-01 -0.8830596899298146E-01 -0.8763001288129194E-01 -0.8695730892255034E-01 + -0.8628785754438455E-01 -0.8562165904264758E-01 -0.8495871358014560E-01 -0.8429902118545067E-01 -0.8364258175179907E-01 + -0.8298939503607108E-01 -0.8233946065785329E-01 -0.8169277809857793E-01 -0.8104934670074115E-01 -0.8040916566719632E-01 + -0.7977223406052095E-01 -0.7913855080245588E-01 -0.7850811467341570E-01 -0.7788092431206631E-01 -0.7725697821497177E-01 + -0.7663627473630474E-01 -0.7601881208762261E-01 -0.7540458833770475E-01 -0.7479360141245189E-01 -0.7418584909484364E-01 + -0.7358132902495440E-01 -0.7298003870002605E-01 -0.7238197547459475E-01 -0.7178713656067244E-01 -0.7119551902797848E-01 + -0.7060711980422413E-01 -0.7002193567544460E-01 -0.6943996328638005E-01 -0.6886119914090269E-01 -0.6828563960248966E-01 + -0.6771328089473920E-01 -0.6714411910192997E-01 -0.6657815016962187E-01 -0.6601536990529702E-01 -0.6545577397903950E-01 + -0.6489935792425362E-01 -0.6434611713841799E-01 -0.6379604688387538E-01 -0.6324914228865730E-01 -0.6270539834734140E-01 + -0.6216480992194123E-01 -0.6162737174282699E-01 -0.6109307840967654E-01 -0.6056192439245466E-01 -0.6003390403242120E-01 + -0.5950901154316545E-01 -0.5898724101166728E-01 -0.5846858639938206E-01 -0.5795304154335106E-01 -0.5744060015733360E-01 + -0.5693125583296245E-01 -0.5642500204092020E-01 -0.5592183213213570E-01 -0.5542173933900042E-01 -0.5492471677660394E-01 + -0.5443075744398622E-01 -0.5393985422540789E-01 -0.5345199989163673E-01 -0.5296718710124915E-01 -0.5248540840194668E-01 + -0.5200665623188704E-01 -0.5153092292102712E-01 -0.5105820069247997E-01 -0.5058848166388249E-01 -0.5012175784877501E-01 + -0.4965802115799089E-01 -0.4919726340105649E-01 -0.4873947628759936E-01 -0.4828465142876621E-01 -0.4783278033864765E-01 + -0.4738385443571101E-01 -0.4693786504423999E-01 -0.4649480339577959E-01 -0.4605466063058778E-01 -0.4561742779909139E-01 + -0.4518309586334694E-01 -0.4475165569850558E-01 -0.4432309809428110E-01 -0.4389741375642146E-01 -0.4347459330818220E-01 + -0.4305462729180289E-01 -0.4263750616998431E-01 -0.4222322032736679E-01 -0.4181176007201023E-01 -0.4140311563687321E-01 + -0.4099727718129280E-01 -0.4059423479246362E-01 -0.4019397848691562E-01 -0.3979649821199152E-01 -0.3940178384732158E-01 + -0.3900982520629698E-01 -0.3862061203754088E-01 -0.3823413402637604E-01 -0.3785038079629078E-01 -0.3746934191040018E-01 + -0.3709100687290486E-01 -0.3671536513054492E-01 -0.3634240607405034E-01 -0.3597211903958652E-01 -0.3560449331019496E-01 + -0.3523951811722967E-01 -0.3487718264178740E-01 -0.3451747601613299E-01 -0.3416038732511890E-01 -0.3380590560759827E-01 + -0.3345401985783308E-01 -0.3310471902689426E-01 -0.3275799202405693E-01 -0.3241382771818768E-01 -0.3207221493912545E-01 + -0.3173314247905550E-01 -0.3139659909387535E-01 -0.3106257350455455E-01 -0.3073105439848577E-01 -0.3040203043082867E-01 + -0.3007549022584622E-01 -0.2975142237823227E-01 -0.2942981545443215E-01 -0.2911065799395422E-01 -0.2879393851067332E-01 + -0.2847964549412637E-01 -0.2816776741079883E-01 -0.2785829270540316E-01 -0.2755120980214808E-01 -0.2724650710599997E-01 + -0.2694417300393482E-01 -0.2664419586618161E-01 -0.2634656404745713E-01 -0.2605126588819128E-01 -0.2575828971574435E-01 + -0.2546762384561452E-01 -0.2517925658263681E-01 -0.2489317622217316E-01 -0.2460937105129300E-01 -0.2432782934994559E-01 + -0.2404853939212278E-01 -0.2377148944701278E-01 -0.2349666778014561E-01 -0.2322406265452879E-01 -0.2295366233177469E-01 + -0.2268545507321884E-01 -0.2241942914102913E-01 -0.2215557279930686E-01 -0.2189387431517832E-01 -0.2163432195987824E-01 + -0.2137690400982439E-01 -0.2112160874768343E-01 -0.2086842446342893E-01 -0.2061733945539015E-01 -0.2036834203129333E-01 + -0.2012142050929418E-01 -0.1987656321900255E-01 -0.1963375850249907E-01 -0.1939299471534369E-01 -0.1915426022757691E-01 + -0.1891754342471287E-01 -0.1868283270872514E-01 -0.1845011649902528E-01 -0.1821938323343368E-01 -0.1799062136914412E-01 + -0.1776381938368037E-01 -0.1753896577584702E-01 -0.1731604906667307E-01 -0.1709505780034925E-01 -0.1687598054515926E-01 + -0.1665880589440464E-01 -0.1644352246732421E-01 -0.1623011891000752E-01 -0.1601858389630291E-01 -0.1580890612872058E-01 + -0.1560107433933019E-01 -0.1539507729065434E-01 -0.1519090377655698E-01 -0.1498854262312769E-01 -0.1478798268956219E-01 + -0.1458921286903872E-01 -0.1439222208959125E-01 -0.1419699931497929E-01 -0.1400353354555478E-01 -0.1381181381912668E-01 + -0.1362182921182277E-01 -0.1343356883894992E-01 -0.1324702185585244E-01 -0.1306217745876907E-01 -0.1287902488568931E-01 + -0.1269755341720873E-01 -0.1251775237738444E-01 -0.1233961113459019E-01 -0.1216311910237258E-01 -0.1198826574030775E-01 + -0.1181504055485940E-01 -0.1164343310023902E-01 -0.1147343297926770E-01 -0.1130502984424104E-01 -0.1113821339779698E-01 + -0.1097297339378707E-01 -0.1080929963815219E-01 -0.1064718198980239E-01 -0.1048661036150212E-01 -0.1032757472076096E-01 + -0.1017006509073034E-01 -0.1001407155110739E-01 -0.9859584239045534E-02 -0.9706593350073452E-02 -0.9555089139022180E-02 + -0.9405061920961404E-02 -0.9256502072145643E-02 -0.9109400030970487E-02 -0.8963746298940305E-02 -0.8819531441647413E-02 + -0.8676746089763751E-02 -0.8535380940045894E-02 -0.8395426756353708E-02 -0.8256874370684052E-02 -0.8119714684219669E-02 + -0.7983938668394324E-02 -0.7849537365975339E-02 -0.7716501892163617E-02 -0.7584823435712779E-02 -0.7454493260067761E-02 + -0.7325502704523865E-02 -0.7197843185407555E-02 -0.7071506197279220E-02 -0.6946483314159568E-02 -0.6822766190779977E-02 + -0.6700346563858386E-02 -0.6579216253401177E-02 -0.6459367164032316E-02 -0.6340791286350805E-02 -0.6223480698317331E-02 + -0.6107427566671246E-02 -0.5992624148378852E-02 -0.5879062792113993E-02 -0.5766735939772315E-02 -0.5655636128019704E-02 + -0.5545755989876484E-02 -0.5437088256338068E-02 -0.5329625758033137E-02 -0.5223361426920646E-02 -0.5118288298026128E-02 + -0.5014399511218785E-02 -0.4911688313029938E-02 -0.4810148058513781E-02 -0.4709772213151562E-02 -0.4610554354799431E-02 + -0.4512488175681280E-02 -0.4415567484426667E-02 -0.4319786208154660E-02 -0.4225138394604049E-02 -0.4131618214309937E-02 + -0.4039219962827338E-02 -0.3947938063001268E-02 -0.3857767067283620E-02 -0.3768701660096141E-02 -0.3680736660238960E-02 + -0.3593867023344052E-02 -0.3508087844372004E-02 -0.3423394360151161E-02 -0.3339781951956864E-02 -0.3257246148128755E-02 + -0.3175782626723511E-02 -0.3095387218199560E-02 -0.3016055908130390E-02 -0.2937784839941740E-02 -0.2860570317667780E-02 + -0.2784408808720544E-02 -0.2709296946665686E-02 -0.2635231533997301E-02 -0.2562209544902880E-02 -0.2490228128008725E-02 + -0.2419284609094953E-02 -0.2349376493767305E-02 -0.2280501470072159E-02 -0.2212657411038820E-02 -0.2145842377131630E-02 + -0.2080054618592456E-02 -0.2015292577651429E-02 -0.1951554890581906E-02 -0.1888840389572373E-02 -0.1827148104385303E-02 + -0.1766477263769774E-02 -0.1706827296590603E-02 -0.1648197832633426E-02 -0.1590588703040315E-02 -0.1533999940326040E-02 + -0.1478431777920006E-02 -0.1423884649172962E-02 -0.1370359185761869E-02 -0.1317856215419179E-02 -0.1266376758905965E-02 + -0.1215922026140108E-02 -0.1166493411382406E-02 -0.1118092487374301E-02 -0.1070720998310677E-02 -0.1024380851520841E-02 + -0.9790741077189988E-03 -0.9348029696732801E-03 -0.8915697691294780E-03 -0.8493769518112139E-03 -0.8082270603040555E-03 + -0.7681227146151712E-03 -0.7290665901840791E-03 -0.6910613931034242E-03 -0.6541098322911179E-03 -0.6182145883382149E-03 + -0.5833782787391545E-03 -0.5496034191941447E-03 -0.5168923806574943E-03 -0.4852473417906704E-03 -0.4546702364667819E-03 + -0.4251626959634362E-03 -0.3967259854759182E-03 -0.3693609345830440E-03 -0.3430678613055810E-03 -0.3178464894144324E-03 + -0.2936958586742664E-03 -0.2706142277521279E-03 -0.2485989695820504E-03 -0.2276464590608424E-03 -0.2077519530613687E-03 + -0.1889094628931880E-03 -0.1711116195232660E-03 -0.1543495320979493E-03 -0.1386126405900494E-03 -0.1238885637399120E-03 + -0.1101629438755946E-03 -0.9741929069423303E-04 -0.8563882667209854E-04 -0.7480033745236668E-04 -0.6488003134095919E-04 + -0.5585141292167375E-04 -0.4768517677466276E-04 -0.4034912832859186E-04 -0.3380813996360609E-04 -0.2802415155542768E-04 + -0.2295622562937124E-04 -0.1856066806040990E-04 -0.1479122565136393E-04 -0.1159937173437365E-04 -0.8934689902304919E-05 + -0.6745363761688971E-05 -0.4978776837729040E-05 -0.3582221071745688E-05 -0.2503704396851613E-05 -0.1692837474640400E-05 + -0.1101766951461853E-05 -0.6861082076102529E-06 -0.4058159914808505E-06 -0.2259190936022548E-06 -0.1170390843846189E-06 + -0.5561789832021472E-07 -0.2379962422071496E-07 -0.8951415949547709E-08 -0.2865311296782646E-08 -0.7469799452895257E-09 + -0.1491286872225022E-09 -0.2085937681520927E-10 -0.1788909961745903E-11 -0.7627333239967911E-13 -0.1139998169589491E-14 + -0.3184439268690364E-17 -0.4725628150249130E-21 -0.1979177475376566E-27 -0.3507608647733454E-40 -0.1993203231761145E-78 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2092827306407022E+00 0.4057670184399992E+00 0.5898979350532600E+00 0.7621100296525628E+00 + 0.9228266176030425E+00 0.1072464703931703E+01 0.1211436937704310E+01 0.1340155639290343E+01 0.1459036896649656E+01 + 0.1568504688229295E+01 0.1668994708900562E+01 0.1760957569185768E+01 0.1844861052822834E+01 0.1921191152910295E+01 + 0.1990451661396074E+01 0.2053162158653891E+01 0.2109854336461265E+01 0.2161066684867483E+01 0.2207337676111377E+01 + 0.2249197680806415E+01 0.2287159946209046E+01 0.2321711046373938E+01 0.2353301272500611E+01 0.2382335462875013E+01 + 0.2409164771274074E+01 0.2434079838629096E+01 0.2457305766029753E+01 0.2478999191665430E+01 0.2499247656714136E+01 + 0.2518071314420061E+01 0.2535426902944383E+01 0.2551213776615215E+01 0.2565281681669818E+01 0.2577439879309795E+01 + 0.2587467166041904E+01 0.2595122320937184E+01 0.2600154520609984E+01 0.2602313301685621E+01 0.2601357711533437E+01 + 0.2597064364112607E+01 0.2589234201573016E+01 0.2577697846846366E+01 0.2562319511937518E+01 0.2542999496459417E+01 + 0.2519675368173886E+01 0.2492321960446077E+01 0.2460950350463687E+01 0.2425605997739516E+01 0.2386366226474959E+01 + 0.2343337229915742E+01 0.2296650762147126E+01 0.2246460665073238E+01 0.2192939357621151E+01 0.2136274392226351E+01 + 0.2076665161774061E+01 0.2014319819428672E+01 0.1949452454898987E+01 0.1882280554098696E+01 0.1813022755076766E+01 + 0.1741896901539862E+01 0.1669118386164077E+01 0.1594898769003028E+01 0.1519444651395879E+01 0.1442956782587889E+01 + 0.1365629374518453E+01 0.1287649599638170E+01 0.1209197246937915E+01 0.1130444512385982E+01 0.1051555901479737E+01 + 0.9726882234608905E+00 0.8939906587816835E+00 0.8156048835327433E+00 0.7376652366657381E+00 0.6602989178988580E+00 + 0.5836262061335374E+00 0.5077606900028175E+00 0.4328095037959179E+00 0.3588735634485049E+00 0.2860477985519050E+00 + 0.2144213774203916E+00 0.1440779231718307E+00 0.7509571953458535E-01 0.7547905706075591E-02 -0.5849733992897237E-01 + -0.1229766270456308E+00 -0.1858311911485266E+00 -0.2470067412388819E+00 -0.3064533166418045E+00 -0.3641251522021267E+00 + -0.4199805510487963E+00 -0.4739817641533713E+00 -0.5260948759595897E+00 -0.5762896954288581E+00 -0.6245396519239588E+00 + -0.6708216954350136E+00 -0.7151162007320108E+00 -0.7574068751038985E+00 -0.7976806694123654E+00 -0.8359276922467996E+00 + -0.8721411270148933E+00 -0.9063171518391930E+00 -0.9384548621556141E+00 -0.9685561959238236E+00 -0.9966258613642036E+00 + -0.1022671267132381E+01 -0.1046702454831763E+01 -0.1068732033749353E+01 -0.1088775117682357E+01 -0.1106849263704848E+01 + -0.1122974412708365E+01 -0.1137172831539331E+01 -0.1149469056553965E+01 -0.1159889838419920E+01 -0.1168464088017379E+01 + -0.1175222823334259E+01 -0.1180199117315087E+01 -0.1183428046714909E+01 -0.1184946642134393E+01 -0.1184793839575426E+01 + -0.1183010434064154E+01 -0.1179639036149073E+01 -0.1174724032402013E+01 -0.1168311551439714E+01 -0.1160449437451607E+01 + -0.1151187233775371E+01 -0.1140576179713346E+01 -0.1128669224538139E+01 -0.1115521063495940E+01 -0.1101188201577848E+01 + -0.1085729051876920E+01 -0.1069204076448596E+01 -0.1051675978683903E+01 -0.1033209957189757E+01 -0.1013874031892834E+01 + -0.9937394533112268E+00 -0.9728812053358954E+00 -0.9513786099635553E+00 -0.9293160385930985E+00 -0.9067837279225540E+00 + -0.8838786881577604E+00 -0.8607056760163188E+00 -0.8373781836996756E+00 -0.8140193666454354E+00 -0.7907627971280821E+00 + -0.7677528886053459E+00 -0.7451447902474176E+00 -0.7231035087242984E+00 -0.7018019856777432E+00 -0.6814178596116595E+00 + -0.6621286890901025E+00 -0.6441055293683786E+00 -0.6275049500959465E+00 -0.6124598554819389E+00 -0.5990697931249144E+00 + -0.5873917551816811E+00 -0.5774326999496706E+00 -0.5691450588850681E+00 -0.5624262731985009E+00 -0.5571229156877342E+00 + -0.5530392710790523E+00 -0.5499495211576281E+00 -0.5476120912055904E+00 -0.5457844127402661E+00 -0.5442364096307576E+00 + -0.5427613802609629E+00 -0.5411835048730576E+00 -0.5393618006932226E+00 -0.5371908460844405E+00 -0.5345989223491749E+00 + -0.5315443627327854E+00 -0.5280108835019925E+00 -0.5240025549054657E+00 -0.5195389048925442E+00 -0.5146504785947575E+00 + -0.5093750286076997E+00 -0.5037543971983343E+00 -0.4978320732717670E+00 -0.4916513597181557E+00 -0.4852540635555492E+00 + -0.4786796148269129E+00 -0.4719645242683226E+00 -0.4651420995758296E+00 -0.4582423523395834E+00 -0.4512920402678477E+00 + -0.4443148009770967E+00 -0.4373313437888304E+00 -0.4303596744600146E+00 -0.4234153346275730E+00 -0.4165116431348047E+00 + -0.4096599305448206E+00 -0.4028697612557244E+00 -0.3961491399203882E+00 -0.3895047005196642E+00 -0.3829418775915900E+00 + -0.3764650599017688E+00 -0.3700777273477470E+00 -0.3637825721974685E+00 -0.3575816059257799E+00 -0.3514762529766660E+00 + -0.3454674327743286E+00 -0.3395556312570763E+00 -0.3337409631312600E+00 -0.3280232259503844E+00 -0.3224019470255501E+00 + -0.3168764240734279E+00 -0.3114457604107825E+00 -0.3061088954126595E+00 -0.3008646308661068E+00 -0.2957116537733492E+00 + -0.2906485560879659E+00 -0.2856738518046101E+00 -0.2807859917668553E+00 -0.2759833765084032E+00 -0.2712643673995287E+00 + -0.2666272963328205E+00 -0.2620704741493222E+00 -0.2575921979776381E+00 -0.2531907576339031E+00 -0.2488644412092475E+00 + -0.2446115399531009E+00 -0.2404303525450218E+00 -0.2363191888342949E+00 -0.2322763731150775E+00 -0.2283002469950982E+00 + -0.2243891719075561E+00 -0.2205415313087940E+00 -0.2167557325982774E+00 -0.2130302087922870E+00 -0.2093634199784029E+00 + -0.2057538545741509E+00 -0.2022000304100722E+00 -0.1987004956548198E+00 -0.1952538295976336E+00 -0.1918586433016487E+00 + -0.1885135801398642E+00 -0.1852173162242242E+00 -0.1819685607370943E+00 -0.1787660561734181E+00 -0.1756085785009749E+00 + -0.1724949372454470E+00 -0.1694239755063514E+00 -0.1663945699093716E+00 -0.1634056305001383E+00 -0.1604561005841044E+00 + -0.1575449565168044E+00 -0.1546712074484661E+00 -0.1518338950266697E+00 -0.1490320930604994E+00 -0.1462649071494050E+00 + -0.1435314742798000E+00 -0.1408309623922306E+00 -0.1381625699217879E+00 -0.1355255253142844E+00 -0.1329190865205691E+00 + -0.1303425404712269E+00 -0.1277952025337876E+00 -0.1252764159544457E+00 -0.1227855512861943E+00 -0.1203220058051661E+00 + -0.1178852029168765E+00 -0.1154745915539778E+00 -0.1130896455670350E+00 -0.1107298631097586E+00 -0.1083947660200428E+00 + -0.1060838991980789E+00 -0.1037968299827469E+00 -0.1015331475274080E+00 -0.9929246217615594E-01 -0.9707440484152201E-01 + -0.9487862638456054E-01 -0.9270479699818115E-01 -0.9055260559454251E-01 -0.8842175919725527E-01 -0.8631198233909854E-01 + -0.8422301646589628E-01 -0.8215461934715129E-01 -0.8010656449399124E-01 -0.7807864058492887E-01 -0.7607065089990145E-01 + -0.7408241276301041E-01 -0.7211375699433867E-01 -0.7016452737119373E-01 -0.6823458009908026E-01 -0.6632378329267392E-01 + -0.6443201646703840E-01 -0.6255917003929234E-01 -0.6070514484090285E-01 -0.5886985164075899E-01 -0.5705321067914502E-01 + -0.5525515121271331E-01 -0.5347561107053028E-01 -0.5171453622124416E-01 -0.4997188035140731E-01 -0.4824760445495881E-01 + -0.4654167643385925E-01 -0.4485407070984989E-01 -0.4318476784728866E-01 -0.4153375418700541E-01 -0.3990102149109915E-01 + -0.3828656659858688E-01 -0.3669039109180319E-01 -0.3511250097343621E-01 -0.3355290635407111E-01 -0.3201162115010978E-01 + -0.3048866279191616E-01 -0.2898405194203557E-01 -0.2749781222332479E-01 -0.2602996995682040E-01 -0.2458055390917123E-01 + -0.2314959504944821E-01 -0.2173712631514516E-01 -0.2034318238717427E-01 -0.1896779947365720E-01 -0.1761101510230969E-01 + -0.1627286792121220E-01 -0.1495339750775495E-01 -0.1365264418554666E-01 -0.1237064884906971E-01 -0.1110745279586314E-01 + -0.9863097566016712E-02 -0.8637624788750709E-02 -0.7431076035862909E-02 -0.6243492681816734E-02 -0.5074915770246633E-02 + -0.3925385886656976E-02 -0.2794943037087542E-02 -0.1683626532521779E-02 -0.5914748788115108E-03 0.4814743281079707E-03 + 0.1535184501935395E-02 0.2569620160881108E-02 0.3584747017927284E-02 0.4580532066695804E-02 0.5556943663146154E-02 + 0.6513951603328201E-02 0.7451527197409622E-02 0.8369643340202203E-02 0.9268274578406274E-02 0.1014739717479459E-01 + 0.1100698916955656E-01 0.1184703043902031E-01 0.1266750275197406E-01 0.1346838982380348E-01 0.1424967736866517E-01 + 0.1501135314991321E-01 0.1575340702899826E-01 0.1647583101305540E-01 0.1717861930140175E-01 0.1786176833115984E-01 + 0.1852527682222726E-01 0.1916914582181181E-01 0.1979337874875210E-01 0.2039798143784515E-01 0.2098296218440263E-01 + 0.2154833178926046E-01 0.2209410360446425E-01 0.2262029357986047E-01 0.2312692031081800E-01 0.2361400508731372E-01 + 0.2408157194461195E-01 0.2452964771577501E-01 0.2495826208624157E-01 0.2536744765071304E-01 0.2575723997259286E-01 + 0.2612767764622501E-01 0.2647880236218226E-01 0.2681065897585869E-01 0.2712329557962571E-01 0.2741676357881194E-01 + 0.2769111777177585E-01 0.2794641643434182E-01 0.2818272140887457E-01 0.2840009819827491E-01 0.2859861606518020E-01 + 0.2877834813666253E-01 0.2893937151471862E-01 0.2908176739285332E-01 0.2920562117906286E-01 0.2931102262552834E-01 + 0.2939806596533533E-01 0.2946685005654058E-01 0.2951747853391014E-01 0.2955005996865805E-01 0.2956470803651828E-01 + 0.2956154169448472E-01 0.2954068536655733E-01 0.2950226913883336E-01 0.2944642896428323E-01 0.2937330687754944E-01 + 0.2928305122010533E-01 0.2917581687610584E-01 0.2905176551925757E-01 0.2891106587102654E-01 0.2875389397049235E-01 + 0.2858043345614350E-01 0.2839087585989199E-01 0.2818542091356523E-01 0.2796427686810767E-01 0.2772766082569555E-01 + 0.2747579908493241E-01 0.2720892749925168E-01 0.2692729184860401E-01 0.2663114822445014E-01 0.2632076342801500E-01 + 0.2599641538168244E-01 0.2565839355332355E-01 0.2530699939325154E-01 0.2494254678338238E-01 0.2456536249805061E-01 + 0.2417578667578270E-01 0.2377417330116236E-01 0.2336089069573457E-01 0.2293632201668000E-01 0.2250086576175244E-01 + 0.2205493627870053E-01 0.2159896427709156E-01 0.2113339734011533E-01 0.2065870043356471E-01 0.2017535640876495E-01 + 0.1968386649574995E-01 0.1918475078245607E-01 0.1867854867511944E-01 0.1816581933441314E-01 0.1764714208114318E-01 + 0.1712311676453094E-01 0.1659436408523645E-01 0.1606152586432164E-01 0.1552526524830300E-01 0.1498626683930028E-01 + 0.1444523673804386E-01 0.1390290248615655E-01 0.1336001289267242E-01 0.1281733772819916E-01 0.1227566726846887E-01 + 0.1173581166726628E-01 0.1119860013688112E-01 0.1066487991231793E-01 0.1013551497353980E-01 0.9611384498049214E-02 + 0.9093381014167966E-02 0.8582408223524964E-02 0.8079378459570645E-02 0.7585209747505587E-02 0.7100822429962137E-02 + 0.6627135322258290E-02 0.6165061361244632E-02 0.5715502712913672E-02 0.5279345306314358E-02 0.4857452765248114E-02 + 0.4450659715107746E-02 0.4059764450523725E-02 0.3685520960736674E-02 0.3328630324427772E-02 0.2989731504787848E-02 + 0.2669391599617415E-02 0.2368095630986141E-02 0.2086235995182996E-02 0.1824101737017772E-02 0.1581867863467087E-02 + 0.1359584970329603E-02 0.1157169521569523E-02 0.9743951931644752E-03 0.8108857691386213E-03 0.6661101530243749E-03 + 0.5393801270545922E-03 0.4298515449594449E-03 0.3365296699754433E-03 0.2582793513780087E-03 0.1938406504102719E-03 + 0.1418503565121643E-03 0.1008695525362177E-03 0.6941697110285677E-04 0.4600732088117413E-04 0.2919305903894978E-04 + 0.1760728677207078E-04 0.1000464291784026E-04 0.5296427334745831E-05 0.2575932371020878E-05 0.1130373835070578E-05 + 0.4371389867137730E-06 0.1443839527546615E-06 0.3903079296907923E-07 0.8136509367815676E-08 0.1200603994451306E-08 + 0.1103313091144371E-09 0.5169033352084336E-11 0.8862989414281884E-13 0.3078210235071099E-15 0.6727297563933329E-19 + 0.6350331239490211E-25 0.1073811882539351E-36 0.6326995303161769E-70 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 diff --git a/samples/Formatted/long_seq.for b/samples/Formatted/long_seq.for new file mode 100644 index 00000000..eadf8036 --- /dev/null +++ b/samples/Formatted/long_seq.for @@ -0,0 +1,919 @@ +ACCEPTABLE LEFT PRIMERS + 1-based # self self hair- qual- + # sequence start ln N GC% Tm any_th end_th pin lity + 0 tgctagctaggcgatgctag 411 20 0 55.00 60.028 23.16 23.16 38.59 0.028 + 1 actgatacgcgatgctagct 476 20 0 50.00 59.957 17.69 1.35 0.00 0.043 + 2 gatcgatgctagctaggcga 405 20 0 55.00 60.100 16.30 16.30 0.00 0.100 + 3 tcgatcgatgctagctaggc 403 20 0 55.00 60.100 18.63 8.45 0.00 0.100 + 4 tagctgatcgatcgtagcgg 565 20 0 55.00 60.101 25.02 17.36 0.00 0.101 + 5 gctgactgatcgatcgatgc 113 20 0 55.00 59.826 24.08 17.09 35.21 0.174 + 6 tatcatctctgcgcgatcga 361 20 0 50.00 59.747 22.07 1.72 38.48 0.253 + 7 agctaggcgatgctagctag 415 20 0 55.00 59.742 17.46 17.46 41.54 0.258 + 8 ctagctaggcgatgctagct 413 20 0 55.00 59.742 18.68 17.35 43.53 0.258 + 9 ggcgatctagctagctgact 583 20 0 55.00 59.671 17.44 7.44 37.58 0.329 + 10 tcgatgctagctaggcgatg 407 20 0 55.00 60.382 14.03 0.00 0.00 0.382 + 11 gctgatcgatcgatgctagc 398 20 0 55.00 59.618 25.97 24.79 35.21 0.382 + 12 gctagctgatcgatcgatgc 394 20 0 55.00 59.618 24.08 21.09 35.21 0.382 + 13 atcatctctgcgcgatcgat 362 20 0 50.00 60.382 22.07 5.02 38.48 0.382 + 14 gactgatacgcgatgctagc 475 20 0 55.00 59.551 8.61 8.61 0.00 0.449 + 15 atcgatgctagctaggcgat 406 20 0 50.00 59.452 18.43 18.43 0.00 0.548 + 16 gctagctgactgatacgcga 468 20 0 55.00 60.589 16.29 0.00 0.00 0.589 + 17 agctagctgactgatacgcg 467 20 0 55.00 60.590 17.99 3.89 0.00 0.590 + 18 atgctagctaggcgatgcta 410 20 0 50.00 59.375 10.59 8.91 0.00 0.625 + 19 ctatcatctctgcgcgatcg 360 20 0 55.00 59.347 12.19 12.19 39.07 0.653 + 20 gatgctagctaggcgatgct 409 20 0 55.00 60.668 7.01 7.53 0.00 0.668 + 21 gctactatcatctctgcgcg 356 20 0 55.00 59.273 0.00 0.00 0.00 0.727 + 22 cgtagcggcgatctagctag 577 20 0 60.00 60.791 15.64 15.64 37.58 0.791 + 23 cggcgatctagctagctgac 582 20 0 60.00 61.003 14.84 7.25 38.70 1.003 + 24 gctagctgatcgatcgtagc 563 20 0 55.00 58.995 23.70 23.70 0.00 1.005 + 25 gatcgatcgatgtgcggcta 81 20 0 55.00 61.006 19.16 0.00 41.65 1.006 + 26 atcgatcgatgtgcggctag 82 20 0 55.00 61.008 29.65 0.00 41.65 1.008 + 27 gctgactgatacgcgatgc 472 19 0 57.89 60.025 0.00 0.00 0.00 1.025 + 28 agctagctgatcatcgatgct 190 21 0 47.62 60.035 17.99 11.09 0.00 1.035 + 29 gctagctagctgactgatcga 105 21 0 52.38 60.037 34.38 0.00 46.11 1.037 + 30 tcatctctgcgcgatcgat 363 19 0 52.63 59.946 22.07 0.12 38.48 1.054 + 31 atcatctctgcgcgatcga 362 19 0 52.63 59.946 22.07 1.72 38.48 1.054 + 32 atcgatcgatgtgcggcta 82 19 0 52.63 59.945 29.65 0.00 41.65 1.055 + 33 gtagcggcgatctagctagc 578 20 0 60.00 61.071 16.97 7.15 39.86 1.071 + 34 gctagctgactgatcgatcg 109 20 0 55.00 58.924 16.84 13.89 0.00 1.076 + 35 gctgatcgatcgatgtgcg 78 19 0 57.89 60.097 29.87 18.15 42.69 1.097 + 36 tatcatctctgcgcgatcgat 361 21 0 47.62 60.172 22.07 11.47 38.48 1.172 + 37 gctagctagctgatcgatcga 390 21 0 52.38 60.172 34.38 22.52 46.11 1.172 + 38 gctagctagctgatcgatcga 70 21 0 52.38 60.172 34.38 22.52 46.11 1.172 + 39 catctctgcgcgatcgatg 364 19 0 57.89 59.810 13.74 13.74 38.48 1.190 + 40 tcgtagcggcgatctagcta 576 20 0 55.00 61.231 11.55 9.27 36.40 1.231 + 41 actgatacgcgatgctagcta 476 21 0 47.62 59.765 17.69 3.08 0.00 1.235 + 42 actgatcgatcgatgctagct 117 21 0 47.62 59.763 23.29 11.70 35.21 1.237 + 43 agctagctgatcgatcgatgt 73 21 0 47.62 59.763 17.99 2.62 35.21 1.237 + 44 tagcggcgatctagctagct 579 20 0 55.00 61.243 23.74 23.74 46.60 1.243 + 45 cgtagcggcgatctagcta 577 19 0 57.89 59.729 11.55 9.27 37.58 1.271 + 46 ctagctgatcgatcgtagcg 564 20 0 55.00 58.727 25.02 15.05 0.00 1.273 + 47 tagcggcgatctagctagc 579 19 0 57.89 59.725 16.97 9.14 39.86 1.275 + 48 catcgatcgatgcatgcatg 442 20 0 50.00 58.722 37.80 23.31 44.93 1.278 + 49 tcatctctgcgcgatcgatg 363 20 0 55.00 61.279 18.01 18.01 38.48 1.279 + 50 gctagctagctgatcgatcg 559 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 51 gctagctagctgatcgatcg 390 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 52 gctagctagctgatcgatcg 70 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 53 agcatcggattagctagctga 3 21 0 47.62 59.689 28.29 20.88 0.00 1.311 + 54 agctgatcgatcgtagcgg 566 19 0 57.89 60.315 25.02 17.36 0.00 1.315 + 55 cggcgatctagctagctga 582 19 0 57.89 59.650 21.57 16.66 38.70 1.350 + 56 ctagctgatcgatcgatgtgc 75 21 0 52.38 59.643 31.83 30.04 35.21 1.357 + 57 gctagctgatcgatcgatgtg 74 21 0 52.38 59.643 12.06 6.93 35.21 1.357 + 58 gctagctaggcgatgctagc 412 20 0 60.00 61.357 30.41 30.41 46.19 1.357 + 59 tagctagctgactgatacgcg 466 21 0 52.38 60.373 28.29 3.89 0.00 1.373 + 60 gctagctgactgatcgatcga 109 21 0 52.38 60.374 22.52 22.52 0.00 1.374 + 61 agctagctgactgatcgatcg 108 21 0 52.38 60.374 17.99 13.89 0.00 1.374 + 62 cgatcgatgctagctaggcg 404 20 0 60.00 61.409 15.59 9.14 0.00 1.409 + 63 gctagctagctgactgatcg 105 20 0 55.00 58.563 34.38 1.84 46.11 1.437 + 64 atgctagctaggcgatgct 410 19 0 52.63 59.561 10.59 7.53 0.00 1.439 + 65 agctagctgatcgatcgtagc 562 21 0 52.38 60.441 26.87 26.87 0.00 1.441 + 66 gctagctagctgatcgatcgt 559 21 0 52.38 60.441 34.38 2.65 46.11 1.441 + 67 tagctaggcgatgctagctag 414 21 0 52.38 59.559 18.42 17.46 42.44 1.441 + 68 ctagctaggcgatgctagcta 413 21 0 52.38 59.559 18.69 17.64 42.44 1.441 + 69 tagctgatcgatcgatgtgc 76 20 0 50.00 58.558 31.83 30.04 35.21 1.442 + 70 gatgctagctaggcgatgcta 409 21 0 52.38 60.444 9.82 8.91 0.00 1.444 + 71 atgctagctaggcgatgctag 410 21 0 52.38 60.444 23.16 23.16 38.59 1.444 + 72 gctagctgatcatcgatgct 191 20 0 50.00 58.539 16.29 12.14 0.00 1.461 + 73 agctagctgatcatcgatgc 190 20 0 50.00 58.539 21.42 9.22 0.00 1.461 + 74 gctgactgatacgcgatgct 472 20 0 55.00 61.494 2.33 0.00 0.00 1.494 + 75 agctgactgatacgcgatgc 471 20 0 55.00 61.494 3.47 0.00 0.00 1.494 + 76 ggcgatctagctagctgacta 583 21 0 52.38 59.491 17.44 5.40 37.58 1.509 + 77 gatcgatgctagctaggcgat 405 21 0 52.38 60.510 21.61 21.61 0.00 1.510 + 78 atcgatcgatgctagctaggc 402 21 0 52.38 60.510 29.65 8.45 33.56 1.510 + 79 ctgatcgatcgatgtgcgg 79 19 0 57.89 59.447 15.54 5.83 41.65 1.553 + 80 agctgatcgatcgatgtgcg 77 20 0 55.00 61.556 31.92 20.26 42.69 1.556 + 81 cgatcatcgatgctagctagc 548 21 0 52.38 59.444 34.89 34.89 46.99 1.556 + 82 tagctaggcgatgctagcta 414 20 0 50.00 58.433 19.37 17.81 42.44 1.567 + 83 agctagctactgatcgatgct 303 21 0 47.62 59.415 17.56 11.51 0.00 1.585 + 84 tcgatcgatgtgcggctag 83 19 0 57.89 60.606 18.63 0.00 41.65 1.606 + 85 gactgatcgatcgatgctagc 116 21 0 52.38 59.378 15.86 8.45 35.21 1.622 + 86 agctagctgactgatcgatca 260 21 0 47.62 59.347 26.99 26.99 35.44 1.653 + 87 ctgactgatacgcgatgctag 473 21 0 52.38 59.312 1.70 0.00 0.00 1.688 + 88 ctagctgactgatacgcgatg 469 21 0 52.38 59.312 0.00 0.00 0.00 1.688 + 89 gctactatcatctctgcgcga 356 21 0 52.38 60.707 2.71 2.71 0.00 1.707 + 90 agctactatcatctctgcgcg 355 21 0 52.38 60.709 0.00 0.00 0.00 1.709 + 91 actatcatctctgcgcgatc 359 20 0 50.00 58.270 4.99 0.00 0.00 1.730 + 92 actgatcgatcgatgctagc 117 20 0 50.00 58.270 23.29 13.61 35.21 1.730 + 93 gctagctgatcgatcgatgt 74 20 0 50.00 58.270 14.29 2.62 35.21 1.730 + 94 ctatcatctctgcgcgatcga 360 21 0 52.38 60.771 22.07 1.72 38.48 1.771 + 95 atcgatgctagctaggcgatg 406 21 0 52.38 60.779 21.16 4.37 0.00 1.779 + 96 tgactgatacgcgatgctag 474 20 0 50.00 58.207 1.70 0.00 0.00 1.793 + 97 ctgactgatacgcgatgcta 473 20 0 50.00 58.207 2.33 0.00 0.00 1.793 + 98 tagctgactgatacgcgatg 470 20 0 50.00 58.207 0.00 0.00 0.00 1.793 + 99 ctgactgatcgatcgatgct 114 20 0 50.00 58.197 26.44 12.40 35.21 1.803 + 100 agctgactgatcgatcgatg 112 20 0 50.00 58.197 23.05 13.21 35.21 1.803 + 101 tcggattagctagctgatgc 7 20 0 50.00 58.176 17.46 17.46 40.05 1.824 + 102 gcatcggattagctagctga 4 20 0 50.00 58.176 28.29 20.88 0.00 1.824 + 103 agcatcggattagctagctg 3 20 0 50.00 58.171 28.29 10.80 0.00 1.829 + 104 gatgctagctaggcgatgc 409 19 0 57.89 59.141 4.18 0.00 0.00 1.859 + 105 ctgatacgcgatgctagctag 477 21 0 52.38 59.113 17.46 17.46 0.00 1.887 + 106 gctagctgactgatacgcg 468 19 0 57.89 59.086 8.21 3.89 0.00 1.914 + 107 ctctgcgcgatcgatgctag 367 20 0 60.00 61.946 21.94 18.16 38.48 1.946 + 108 tctgcgcgatcgatgctag 368 19 0 57.89 60.966 21.94 18.16 38.48 1.966 + 109 ctctgcgcgatcgatgcta 367 19 0 57.89 60.966 26.61 17.10 38.48 1.966 + 110 cgatgctagctaggcgatgc 408 20 0 60.00 61.968 11.09 0.00 0.00 1.968 + 111 gactgatacgcgatgctagct 475 21 0 52.38 60.975 17.69 1.35 0.00 1.975 + 112 gctagctgactgatacgcgat 468 21 0 52.38 60.975 8.21 0.00 0.00 1.975 + 113 tgatacgcgatgctagctag 478 20 0 50.00 57.994 17.46 17.46 0.00 2.006 + 114 ctgatacgcgatgctagcta 477 20 0 50.00 57.994 17.69 3.08 0.00 2.006 + 115 cgcgatcgatgctagctagc 372 20 0 60.00 62.011 34.89 34.89 43.67 2.011 + 116 gcgcgatcgatgctagctag 371 20 0 60.00 62.011 21.66 17.46 38.48 2.011 + 117 ctgatcgatcgatgctagct 399 20 0 50.00 57.983 19.70 2.01 35.21 2.017 + 118 agctgatcgatcgatgctag 397 20 0 50.00 57.983 27.33 18.05 34.69 2.017 + 119 ctagctgatcgatcgatgct 395 20 0 50.00 57.983 33.87 33.38 38.16 2.017 + 120 agctagctgatcgatcgatg 393 20 0 50.00 57.983 21.99 11.03 35.21 2.017 + 121 ctgatcgatcgatgctagct 118 20 0 50.00 57.983 19.70 2.01 35.21 2.017 + 122 agctagctgatcgatcgatg 73 20 0 50.00 57.983 21.99 11.03 35.21 2.017 + 123 catcggattagctagctgatgc 5 22 0 50.00 59.982 24.41 24.41 40.05 2.018 + 124 gcatcggattagctagctgatg 4 22 0 50.00 59.982 27.81 27.81 33.28 2.018 + 125 tcgatgctagctaggcgat 407 19 0 52.63 58.964 14.03 3.01 0.00 2.036 + 126 atcgatgctagctaggcga 406 19 0 52.63 58.964 16.30 16.30 0.00 2.036 + 127 actatcatctctgcgcgatcg 359 21 0 52.38 61.037 12.19 12.19 39.07 2.037 + 128 gcgcgatcgatgctagcta 371 19 0 57.89 61.037 21.66 3.08 38.48 2.037 + 129 gctgatcgatcgatgctagct 398 21 0 52.38 61.044 27.88 12.70 35.21 2.044 + 130 agctgatcgatcgatgctagc 397 21 0 52.38 61.044 27.33 27.90 34.69 2.044 + 131 gctagctgatcgatcgatgct 394 21 0 52.38 61.044 33.87 33.38 38.16 2.044 + 132 agctagctgatcgatcgatgc 393 21 0 52.38 61.044 24.08 21.09 35.21 2.044 + 133 cgcgatcgatgctagctag 372 19 0 57.89 58.947 22.07 17.46 38.48 2.053 + 134 tcgtagcggcgatctagc 576 18 0 61.11 59.936 4.70 0.00 36.40 2.064 + 135 cgtagcggcgatctagct 577 18 0 61.11 59.935 11.03 11.03 37.58 2.065 + 136 gcggcgatctagctagct 581 18 0 61.11 59.933 23.74 23.74 38.05 2.067 + 137 agcggcgatctagctagc 580 18 0 61.11 59.933 16.97 7.15 39.86 2.067 + 138 ctagctgactgatacgcgat 469 20 0 50.00 57.918 1.43 0.00 0.00 2.082 + 139 ctagctgatcgatcgtagcgg 564 21 0 57.14 61.096 20.31 16.15 0.00 2.096 + 140 agctactatcatctctgcgc 355 20 0 50.00 57.898 0.00 0.00 0.00 2.102 + 141 gctagctactgatcgatgct 304 20 0 50.00 57.898 11.51 11.51 0.00 2.102 + 142 agctagctactgatcgatgc 303 20 0 50.00 57.898 17.56 1.76 0.00 2.102 + 143 agcatcggattagctagctgat 3 22 0 45.45 60.108 17.84 15.13 0.00 2.108 + 144 tgctagctaggcgatgcta 411 19 0 52.63 58.881 17.69 8.91 0.00 2.119 + 145 aagcatcggattagctagctg 2 21 0 47.62 58.879 28.29 10.80 0.00 2.121 + 146 tctgcgcgatcgatgcta 368 18 0 55.56 59.857 26.61 16.13 38.48 2.143 + 147 cgatgctagctaggcgatg 408 19 0 57.89 58.856 11.09 0.00 0.00 2.144 + 148 agctagctgatcatcgatgcta 190 22 0 45.45 59.845 17.99 13.09 0.00 2.155 + 149 tagctagctgatcatcgatgct 189 22 0 45.45 59.845 16.29 15.30 0.00 2.155 + 150 atcgatcgatgtgcggct 82 18 0 55.56 60.166 29.65 4.36 41.65 2.166 + 151 gctagctgactgatcgatca 261 20 0 50.00 57.829 26.99 26.99 35.44 2.171 + 152 tagctagctgactgatcgatcg 107 22 0 50.00 60.174 28.29 13.89 0.00 2.174 + 153 agctgatcatcatcgatgct 515 20 0 45.00 57.788 11.25 0.72 40.32 2.212 + 154 agctagctgactgatcgatcat 260 22 0 45.45 59.778 26.67 18.02 36.62 2.222 + 155 tgactgatacgcgatgctagc 474 21 0 52.38 61.238 8.61 8.61 0.00 2.238 + 156 gctgactgatacgcgatgcta 472 21 0 52.38 61.238 2.33 0.00 0.00 2.238 + 157 tagctgactgatacgcgatgc 470 21 0 52.38 61.238 3.47 0.00 0.00 2.238 + 158 tagctagctgatcgatcgtagc 561 22 0 50.00 60.238 26.87 26.87 0.00 2.238 + 159 gctagctagctgatcgatcgta 559 22 0 50.00 60.238 34.38 3.07 46.11 2.238 + 160 tgatcgatcgatgctagctagg 400 22 0 50.00 60.239 26.44 6.29 35.21 2.239 + 161 gctgactgatcgatcgatgct 113 21 0 52.38 61.244 26.44 12.40 35.21 2.244 + 162 agctgactgatcgatcgatgc 112 21 0 52.38 61.244 24.08 19.43 35.21 2.244 + 163 gatcgatcgatgtgcggct 81 19 0 57.89 61.263 19.16 0.00 41.65 2.263 + 164 gctgatcatcgatgctactagc 195 22 0 50.00 59.727 18.08 16.44 45.61 2.273 + 165 gctagctgatcatcgatgctac 191 22 0 50.00 59.727 9.57 5.47 0.00 2.273 + 166 gatcgatcgatgtgcggc 81 18 0 61.11 59.714 18.10 0.95 41.65 2.286 + 167 ctagctagctgactgatacgc 465 21 0 52.38 58.703 14.90 0.00 0.00 2.297 + 168 tagctgatcgatcgatgtgcg 76 21 0 52.38 61.299 31.92 20.26 42.69 2.299 + 169 agctgatcgatcgatgtgc 77 19 0 52.63 58.698 31.83 30.04 35.21 2.302 + 170 gctgatcatcatcgatgctagc 516 22 0 50.00 60.302 10.80 10.34 40.32 2.302 + 171 gctagctgatcatcatcgatgc 512 22 0 50.00 60.302 21.42 7.40 40.32 2.302 + 172 aagcatcggattagctagctga 2 22 0 45.45 60.306 28.29 20.88 0.00 2.306 + 173 gatcgatcgtagcggcga 570 18 0 61.11 60.318 13.01 8.51 45.59 2.318 + 174 atcggattagctagctgatgc 6 21 0 47.62 58.673 17.46 17.46 40.05 2.327 + 175 gcatcggattagctagctgat 4 21 0 47.62 58.673 17.84 15.13 0.00 2.327 + 176 gcggcgatctagctagctg 581 19 0 63.16 61.329 17.07 8.17 38.05 2.329 + 177 tgctagtgatgcatgctagt 24 20 0 45.00 57.636 24.96 11.17 35.89 2.364 + 178 ctactatcatctctgcgcga 357 20 0 50.00 57.636 2.71 2.71 0.00 2.364 + 179 actagctagctgactgatacgc 464 22 0 50.00 60.368 21.52 0.00 0.00 2.368 + 180 gctagctagctgatcatcga 187 20 0 50.00 57.613 34.38 0.24 46.11 2.387 + 181 tctctgcgcgatcgatgcta 366 20 0 55.00 62.413 26.61 17.10 38.48 2.413 + 182 tgatcgatcgatgctagctagt 119 22 0 45.45 59.586 26.44 5.69 35.21 2.414 + 183 actgatcgatcgatgctagcta 117 22 0 45.45 59.586 23.29 7.65 35.21 2.414 + 184 tagctagctgatcgatcgatgt 72 22 0 45.45 59.586 14.29 2.62 35.21 2.414 + 185 agctaggcgatgctagcta 415 19 0 52.63 58.572 17.69 3.08 41.54 2.428 + 186 tagctaggcgatgctagct 414 19 0 52.63 58.572 17.35 17.35 43.53 2.428 + 187 gatcgatcgatgctagctagg 401 21 0 52.38 58.567 23.89 6.29 35.21 2.433 + 188 gctagctagctgactgatcgat 105 22 0 50.00 60.434 34.38 0.00 46.11 2.434 + 189 gatcgatgctagctaggcg 405 19 0 57.89 58.563 15.59 9.02 0.00 2.437 + 190 cgatcgatgctagctaggc 404 19 0 57.89 58.563 14.87 8.45 0.00 2.437 + 191 tagctagctgactgatacgc 466 20 0 50.00 57.549 28.29 0.00 0.00 2.451 + 192 agctagctgactgatcgatc 260 20 0 50.00 57.536 19.32 19.32 0.00 2.464 + 193 agctagctgactgatcgatc 108 20 0 50.00 57.536 19.32 19.32 0.00 2.464 + 194 aaagcatcggattagctagctg 1 22 0 45.45 59.524 28.29 10.80 0.00 2.476 + 195 gctgactgatcgatcatcatgc 265 22 0 50.00 60.493 25.66 25.12 41.77 2.493 + 196 tagctactatcatctctgcgcg 354 22 0 50.00 60.495 0.00 0.00 0.00 2.495 + 197 ctgatcgatcgatgtgcggc 79 20 0 60.00 62.497 15.54 4.15 41.65 2.497 + 198 gctgatcgatcgatgtgcgg 78 20 0 60.00 62.497 29.87 22.23 41.65 2.497 + 199 tcgtagcggcgatctagct 576 19 0 57.89 61.503 11.03 11.03 36.40 2.503 + 200 agcggcgatctagctagct 580 19 0 57.89 61.519 23.74 23.74 42.96 2.519 + 201 ctagctagctgatcatcgatgc 188 22 0 50.00 59.470 21.42 9.22 0.00 2.530 + 202 gctagctagctgatcatcgatg 187 22 0 50.00 59.470 34.38 20.23 46.11 2.530 + 203 tcatctctgcgcgatcga 363 18 0 55.56 59.468 22.07 0.00 38.48 2.532 + 204 tcgatcgatgtgcggcta 83 18 0 55.56 59.465 18.63 0.00 41.65 2.535 + 205 tgatcgatcgatgtgcggc 80 19 0 57.89 61.549 21.27 8.44 41.65 2.549 + 206 ctagctaggcgatgctagctag 413 22 0 54.55 60.561 22.99 22.99 46.84 2.561 + 207 gctagctagctgatcgatcgat 390 22 0 50.00 60.561 34.38 30.53 46.11 2.561 + 208 gctagctagctgatcgatcgat 70 22 0 50.00 60.561 34.38 30.53 46.11 2.561 + 209 ctgcgcgatcgatgctag 369 18 0 61.11 59.415 19.79 13.97 38.48 2.585 + 210 aagcatcggattagctagct 2 20 0 45.00 57.413 23.74 23.74 0.00 2.587 + 211 gctagctgatcatcgatgcta 191 21 0 47.62 58.410 16.61 13.09 0.00 2.590 + 212 tagctagctgatcatcgatgc 189 21 0 47.62 58.410 21.42 9.22 0.00 2.590 + 213 actgatacgcgatgctagc 476 19 0 52.63 58.407 8.61 8.61 0.00 2.593 + 214 gctagctgactgatcgatcatc 261 22 0 50.00 59.406 23.93 21.92 36.62 2.594 + 215 atcgatcgatgctagctagg 402 20 0 50.00 57.396 29.65 6.29 33.56 2.604 + 216 atctctgcgcgatcgatgc 365 19 0 57.89 61.618 22.01 22.01 38.48 2.618 + 217 tgatcgatcgtagcggcg 569 18 0 61.11 60.621 20.58 0.86 0.00 2.621 + 218 atcatctctgcgcgatcgatg 362 21 0 52.38 61.633 18.01 18.01 38.48 2.633 + 219 agctagctgatcgatcgtag 562 20 0 50.00 57.344 17.99 16.86 0.00 2.656 + 220 ctagctagctgatcgatcgt 560 20 0 50.00 57.344 16.40 2.65 0.00 2.656 + 221 gctagctgactgatcgatcat 261 21 0 47.62 58.339 26.67 18.02 36.62 2.661 + 222 ctgatcgatcgtagcggcg 568 19 0 63.16 61.664 14.21 0.86 0.00 2.664 + 223 ctgactgatacgcgatgct 473 19 0 52.63 58.330 2.33 0.00 0.00 2.670 + 224 agctgactgatacgcgatg 471 19 0 52.63 58.330 0.00 0.00 0.00 2.670 + 225 gctagctgatcgatcgtagcg 563 21 0 57.14 61.676 24.18 16.49 0.00 2.676 + 226 ctagctgactgatcgatcga 110 20 0 50.00 57.276 22.52 22.52 0.00 2.724 + 227 agctagctactgatcgatgcta 303 22 0 45.45 59.252 17.56 12.23 0.00 2.748 + 228 tagctagctactgatcgatgct 302 22 0 45.45 59.252 27.80 11.51 0.00 2.748 + 229 gactgatacgcgatgctagcta 475 22 0 50.00 60.751 17.69 3.08 0.00 2.751 + 230 actgatacgcgatgctagctag 476 22 0 50.00 60.752 17.46 17.46 0.00 2.752 + 231 gactgatcgatcgatgctagct 116 22 0 50.00 60.753 18.04 9.56 35.21 2.753 + 232 gctagctgactgatcgatcgat 109 22 0 50.00 60.753 30.53 30.53 37.90 2.753 + 233 tgcgcgatcgatgctagcta 370 20 0 55.00 62.756 26.61 9.85 38.48 2.756 + 234 gcggcgatctagctagctga 581 20 0 60.00 62.765 21.57 16.66 38.70 2.765 + 235 agcggcgatctagctagctg 580 20 0 60.00 62.771 17.07 8.17 44.87 2.771 + 236 ctactatcatctctgcgcgatc 357 22 0 50.00 59.220 4.99 0.00 0.00 2.780 + 237 tatcatctctgcgcgatcg 361 19 0 52.63 58.199 12.19 12.19 39.07 2.801 + 238 tactatcatctctgcgcgatcg 358 22 0 50.00 60.811 12.19 12.19 39.07 2.811 + 239 tagctagctgactgatcgatca 259 22 0 45.45 59.187 28.29 26.99 35.44 2.813 + 240 gctgatcgatcgatgctagcta 398 22 0 50.00 60.816 27.88 12.57 35.21 2.816 + 241 tagctgatcgatcgatgctagc 396 22 0 50.00 60.816 30.84 27.90 36.80 2.816 + 242 gctagctgatcgatcgatgcta 394 22 0 50.00 60.816 34.11 32.56 36.80 2.816 + 243 tagctagctgatcgatcgatgc 392 22 0 50.00 60.816 24.08 21.09 35.21 2.816 + 244 gctaggcgatgctagctag 416 19 0 57.89 58.179 17.46 17.46 35.42 2.821 + 245 ctagctaggcgatgctagc 413 19 0 57.89 58.179 18.68 9.44 36.95 2.821 + 246 gctagctaggcgatgctag 412 19 0 57.89 58.179 23.16 23.16 38.59 2.821 + 247 catctctgcgcgatcgatgc 364 20 0 60.00 62.823 22.01 22.01 38.48 2.823 + 248 aaagcatcggattagctagct 1 21 0 42.86 58.168 23.74 23.74 0.00 2.832 + 249 ctgactgatcgatcgatgctag 114 22 0 50.00 59.155 22.81 19.44 35.21 2.845 + 250 ctagctgactgatcgatcgatg 110 22 0 50.00 59.155 23.05 13.21 35.21 2.845 + 251 tactatcatctctgcgcgatc 358 21 0 47.62 58.155 4.99 0.00 0.00 2.845 + 252 gctagctactgatcgatgctac 304 22 0 50.00 59.151 8.57 4.26 0.00 2.849 + 253 ctactatcatctctgcgcgat 357 21 0 47.62 58.150 4.99 2.52 0.00 2.850 + 254 agctgatcatcgatgctact 194 20 0 45.00 57.134 17.14 8.95 0.00 2.866 + 255 gctagctagctgatcatcgat 187 21 0 47.62 58.132 34.38 0.00 46.11 2.868 + 256 ctgatacgcgatgctagct 477 19 0 52.63 58.107 17.69 1.35 0.00 2.893 + 257 ggcgatctagctagctgac 583 19 0 57.89 58.106 14.84 7.25 37.58 2.894 + 258 tgactgatcgatcgatgctag 115 21 0 47.62 58.084 22.81 19.44 35.21 2.916 + 259 ctgactgatcgatcgatgcta 114 21 0 47.62 58.084 26.44 14.64 35.21 2.916 + 260 tagctgactgatcgatcgatg 111 21 0 47.62 58.084 23.05 13.21 35.21 2.916 + 261 actgatcgatcatcatgctagc 269 22 0 45.45 59.071 26.67 8.61 41.77 2.929 + 262 agctgactgatcgatcatca 264 20 0 45.00 57.064 26.49 26.49 39.98 2.936 + 263 ctagctagctgatcgatcga 391 20 0 50.00 57.060 22.52 22.52 0.00 2.940 + 264 ctagctagctgatcgatcga 71 20 0 50.00 57.060 22.52 22.52 0.00 2.940 + 265 gatcgatcgatgtgcggctag 81 21 0 57.14 61.947 19.16 0.00 41.65 2.947 + 266 tgctagctaggcgatgct 411 18 0 55.56 59.050 17.69 7.53 0.00 2.950 + 267 gctgatcgatcgtagcggc 567 19 0 63.16 61.960 20.49 19.38 0.00 2.960 + 268 cgatcgatgtgcggctag 84 18 0 61.11 59.032 10.82 0.00 41.65 2.968 + 269 tgatcgatcgatgtgcggct 80 20 0 55.00 62.987 22.21 0.00 41.65 2.987 + 270 ctgactgatcgatcatcatgct 266 22 0 45.45 59.004 20.99 6.82 41.77 2.996 + 271 agctgactgatcgatcatcatg 264 22 0 45.45 59.004 22.70 19.51 41.77 2.996 + 272 agctagctgactgatacgcga 467 21 0 52.38 62.000 17.99 0.00 0.00 3.000 + 273 tgactgatcgatcgatgctagc 115 22 0 50.00 61.008 18.17 12.52 35.21 3.008 + 274 gctgactgatcgatcgatgcta 113 22 0 50.00 61.008 26.44 14.64 35.21 3.008 + 275 tagctgactgatcgatcgatgc 111 22 0 50.00 61.008 24.08 19.43 35.21 3.008 + 276 agctagctgatcgatcgatgtg 73 22 0 50.00 61.010 17.99 6.93 35.21 3.010 + 277 ctgatcgatcgatgctagctag 399 22 0 50.00 58.963 19.70 17.46 35.21 3.037 + 278 ctagctgatcgatcgatgctag 395 22 0 50.00 58.963 37.86 37.86 43.17 3.037 + 279 ctagctagctgatcgatcgatg 391 22 0 50.00 58.963 21.99 11.03 35.21 3.037 + 280 ctgatcgatcgatgctagctag 118 22 0 50.00 58.963 19.70 17.46 35.21 3.037 + 281 ctagctagctgatcgatcgatg 71 22 0 50.00 58.963 21.99 11.03 35.21 3.037 + 282 gactgatcgatcatcatgctagc 268 23 0 47.83 60.053 24.51 9.03 41.77 3.053 + 283 gctagtgatgcatgctagtagtg 25 23 0 47.83 59.929 24.96 10.54 0.00 3.071 + 284 gctactatcatctctgcgcgat 356 22 0 50.00 61.073 4.99 2.52 0.00 3.073 + 285 gtagcggcgatctagctag 578 19 0 57.89 57.903 15.64 15.64 37.58 3.097 + 286 tgactgatcgatcatcatgct 267 21 0 42.86 57.900 26.79 12.28 41.77 3.100 + 287 ctagctactatcatctctgcgc 353 22 0 50.00 58.892 0.00 0.00 0.00 3.108 + 288 gctagctactatcatctctgcg 352 22 0 50.00 58.892 8.21 0.00 0.00 3.108 + 289 ctagctagctactgatcgatgc 301 22 0 50.00 58.892 14.00 1.76 0.00 3.108 + 290 gctagctagctactgatcgatg 300 22 0 50.00 58.892 34.38 7.78 46.11 3.108 + 291 catcgatcgatgctagtatgct 325 22 0 45.45 58.885 37.80 10.02 44.93 3.115 + 292 tgatcgatcgatgctagctag 400 21 0 47.62 57.879 26.44 17.46 35.21 3.121 + 293 ctgatcgatcgatgctagcta 399 21 0 47.62 57.879 19.70 3.77 35.21 3.121 + 294 tagctgatcgatcgatgctag 396 21 0 47.62 57.879 34.03 27.12 36.80 3.121 + 295 ctagctgatcgatcgatgcta 395 21 0 47.62 57.879 34.11 32.56 36.80 3.121 + 296 tagctagctgatcgatcgatg 392 21 0 47.62 57.879 21.99 11.03 35.21 3.121 + 297 tgatcgatcgatgctagctag 119 21 0 47.62 57.879 26.44 17.46 35.21 3.121 + 298 ctgatcgatcgatgctagcta 118 21 0 47.62 57.879 19.70 3.77 35.21 3.121 + 299 tagctagctgatcgatcgatg 72 21 0 47.62 57.879 21.99 11.03 35.21 3.121 + 300 gatcgatcgatgctagctagt 120 21 0 47.62 57.878 23.89 3.56 35.21 3.122 + 301 ctatcatctctgcgcgatcgat 360 22 0 50.00 61.132 22.07 11.47 38.48 3.132 + 302 tgatcgatcgtagcggcga 569 19 0 57.89 62.144 20.58 8.51 45.59 3.144 + 303 tcgtagcggcgatctagctag 576 21 0 57.14 62.173 15.64 15.64 36.40 3.173 + 304 tactagctagctgactgatacgc 463 23 0 47.83 60.176 13.17 0.00 0.00 3.176 + 305 ctgatcatcatcgatgctagct 517 22 0 45.45 58.807 17.69 1.76 40.32 3.193 + 306 agctgatcatcatcgatgctag 515 22 0 45.45 58.807 5.93 2.76 40.32 3.193 + 307 ctagctgatcatcatcgatgct 513 22 0 45.45 58.807 14.14 8.34 40.32 3.193 + 308 agctagctgatcatcatcgatg 511 22 0 45.45 58.807 20.23 20.23 41.48 3.193 + 309 ctgatcgatcatcatgctagct 270 22 0 45.45 58.807 26.67 0.00 41.77 3.193 + 310 ctagctgactgatcgatcgat 110 21 0 47.62 57.806 30.53 30.53 37.90 3.194 + 311 ttagctagctgactgatcgatca 258 23 0 43.48 59.798 28.29 26.99 35.44 3.202 + 312 tagctactatcatctctgcgc 354 21 0 47.62 57.798 0.00 0.00 0.00 3.202 + 313 gctagctactgatcgatgcta 304 21 0 47.62 57.798 12.99 12.23 0.00 3.202 + 314 tagctagctactgatcgatgc 302 21 0 47.62 57.798 27.80 1.76 0.00 3.202 + 315 tctctgcgcgatcgatgc 366 18 0 61.11 61.229 22.01 22.01 38.48 3.229 + 316 ctctgcgcgatcgatgct 367 18 0 61.11 61.232 26.61 0.00 38.48 3.232 + 317 agctagctactatcatctctgcg 351 23 0 47.83 60.238 17.56 0.00 0.00 3.238 + 318 ctagctagctactgatcgatgct 301 23 0 47.83 60.238 14.00 11.51 0.00 3.238 + 319 ctgatcgatcgtagcggc 568 18 0 61.11 58.727 14.21 0.00 0.00 3.273 + 320 gctgatcgatcgtagcgg 567 18 0 61.11 58.727 20.49 15.03 0.00 3.273 + 321 agctaggcgatgctagct 415 18 0 55.56 58.725 17.69 13.00 39.84 3.275 + 322 tgctagtgatgcatgctagtagt 24 23 0 43.48 60.302 24.96 12.98 35.89 3.302 + 323 gcgcgatcgatgctagct 371 18 0 61.11 61.306 21.66 1.35 38.48 3.306 + 324 tgatcatcatcgatgctagct 518 21 0 42.86 57.691 17.69 1.76 40.32 3.309 + 325 agctgatcatcatcgatgcta 515 21 0 42.86 57.691 0.24 0.00 40.32 3.309 + 326 tagctgatcatcatcgatgct 514 21 0 42.86 57.691 14.14 8.34 40.32 3.309 + 327 tgatcgatcatcatgctagct 271 21 0 42.86 57.691 27.48 0.00 37.38 3.309 + 328 ctagctagctgactgatacgcg 465 22 0 54.55 61.313 14.90 3.89 0.00 3.313 + 329 tgctagtgatgcatgctagtag 24 22 0 45.45 58.673 24.96 19.76 35.89 3.327 + 330 gctagtgatgcatgctagtagt 25 22 0 45.45 58.672 24.96 12.98 0.00 3.328 + 331 tagctagctgatcatcgatgcta 189 23 0 43.48 59.671 17.82 15.89 0.00 3.329 + 332 agctagctgactgatacgc 467 19 0 52.63 57.642 17.99 0.00 0.00 3.358 + 333 tatcatctctgcgcgatcgatg 361 22 0 50.00 61.383 18.01 18.01 38.48 3.383 + 334 agctgactgatcgatcatcat 264 21 0 42.86 57.616 26.31 18.90 41.77 3.384 + 335 actagctagctgatcatcatcga 508 23 0 43.48 59.607 22.43 0.00 0.00 3.393 + 336 tagctagctgactgatcgatcat 259 23 0 43.48 59.607 28.29 18.02 36.62 3.393 + 337 gatgctagctaggcgatgctag 409 22 0 54.55 61.393 23.16 23.16 38.59 3.393 + 338 cggcgatctagctagctgact 582 21 0 57.14 62.394 17.44 7.44 38.70 3.394 + 339 ctagctagctgatcgatcgat 391 21 0 47.62 57.600 30.53 30.53 37.90 3.400 + 340 ctagctagctgatcgatcgat 71 21 0 47.62 57.600 30.53 30.53 37.90 3.400 + 341 actgatcgatcatcatgctagct 269 23 0 43.48 60.428 26.67 4.70 41.77 3.428 + 342 ctagctagctgactgatcgatc 106 22 0 50.00 58.567 19.32 19.32 0.00 3.433 + 343 ctgactgatcgatcatcatgc 266 21 0 47.62 57.562 20.99 12.19 41.77 3.438 + 344 gctgactgatcgatcatcatg 265 21 0 47.62 57.562 22.70 19.51 41.77 3.438 + 345 gatcgatcgatgctagctaggc 401 22 0 54.55 61.448 23.89 8.45 35.21 3.448 + 346 gtgatgcatgctagtagtgatgt 29 23 0 43.48 59.551 11.60 0.00 0.00 3.449 + 347 tgctagtgatgcatgctagta 24 21 0 42.86 57.546 24.96 21.25 35.89 3.454 + 348 tagcggcgatctagctagctg 579 21 0 57.14 62.457 18.98 9.30 45.57 3.457 + 349 gtagcggcgatctagctagct 578 21 0 57.14 62.458 23.74 23.74 46.60 3.458 + 350 tagctgatcgatcgtagcg 565 19 0 52.63 57.539 25.02 11.96 0.00 3.461 + 351 gctagctagctactgatcgat 300 21 0 47.62 57.517 34.38 0.00 46.11 3.483 + 352 agctagctactgatcgatgctac 303 23 0 47.83 60.487 17.56 7.81 0.00 3.487 + 353 atcgatcgatgctagtatgct 326 21 0 42.86 57.502 29.65 2.17 33.56 3.498 + 354 agctactgatcgatgctacatc 307 22 0 45.45 58.484 7.41 0.00 37.97 3.516 + 355 agtgatgcatgctagtagtga 28 21 0 42.86 57.471 0.00 0.00 0.00 3.529 + 356 gactgatcgatcgatgctagcta 116 23 0 47.83 60.546 18.04 4.19 35.21 3.546 + 357 ctgatcgatcgatgctagctagt 118 23 0 47.83 60.547 22.18 3.56 35.21 3.547 + 358 actgatcgatcgatgctagctag 117 23 0 47.83 60.547 23.29 17.46 35.21 3.547 + 359 ctagctagctgatcgatcgatgt 71 23 0 47.83 60.547 14.29 2.62 35.21 3.547 + 360 catcgatcgatgctagtatgc 325 21 0 47.62 57.452 37.80 0.00 44.93 3.548 + 361 tagctagctgactgatcgatc 259 21 0 47.62 57.451 28.29 19.32 0.00 3.549 + 362 tagctagctgactgatcgatc 107 21 0 47.62 57.451 28.29 19.32 0.00 3.549 + 363 ctagctagctgactgatcgat 106 21 0 47.62 57.445 14.90 0.00 0.00 3.555 + 364 tcgatgctagctaggcga 407 18 0 55.56 58.427 15.59 13.52 0.00 3.573 + 365 tgatcgatcgatgctagctagta 119 23 0 43.48 59.424 26.44 18.77 35.21 3.576 + 366 ctgcgcgatcgatgctagc 369 19 0 63.16 62.586 20.26 12.12 38.48 3.586 + 367 agctagctgatcatcatcgat 511 21 0 42.86 57.405 17.99 0.00 0.00 3.595 + 368 tgcgcgatcgatgctagc 370 18 0 61.11 61.605 26.61 17.77 38.48 3.605 + 369 ctagctagctgatcgatcgtag 560 22 0 50.00 58.387 16.86 16.86 0.00 3.613 + 370 actagctagctgactgatacg 464 21 0 47.62 57.384 21.52 2.77 0.00 3.616 + 371 ctagctgactgatacgcga 469 19 0 52.63 57.370 16.29 0.00 0.00 3.630 + 372 gctactagctagctgactgat 461 21 0 47.62 57.360 15.96 3.00 44.92 3.640 + 373 ctgatcatcatcgatgctagc 517 21 0 47.62 57.358 8.61 8.61 40.32 3.642 + 374 gctgatcatcatcgatgctag 516 21 0 47.62 57.358 5.93 2.76 40.32 3.642 + 375 ctagctgatcatcatcgatgc 513 21 0 47.62 57.358 21.42 7.40 40.32 3.642 + 376 gctagctgatcatcatcgatg 512 21 0 47.62 57.358 20.23 20.23 41.48 3.642 + 377 ctgatcgatcatcatgctagc 270 21 0 47.62 57.358 26.67 8.61 41.77 3.642 + 378 agctactgatcgatgctacat 307 21 0 42.86 57.344 7.41 0.00 0.00 3.656 + 379 tgatcgatcgatgtgcggcta 80 21 0 52.38 62.663 22.21 0.24 41.65 3.663 + 380 atctctgcgcgatcgatg 365 18 0 55.56 58.327 12.03 4.19 38.48 3.673 + 381 catctctgcgcgatcgat 364 18 0 55.56 58.327 22.07 1.26 38.48 3.673 + 382 atcatctctgcgcgatcg 362 18 0 55.56 58.327 12.19 12.19 39.07 3.673 + 383 aagcatcggattagctagctgat 2 23 0 43.48 60.682 17.84 15.13 0.00 3.682 + 384 agtgatgcatgctagtagtgatg 28 23 0 43.48 59.299 7.49 7.49 0.00 3.701 + 385 gatcgatgctagctaggcgatg 405 22 0 54.55 61.702 24.26 6.24 0.00 3.702 + 386 atctctgcgcgatcgatgcta 365 21 0 52.38 62.723 26.61 17.10 38.48 3.723 + 387 tagctagctgactgatacgcga 466 22 0 50.00 61.730 28.29 0.00 0.00 3.730 + 388 tagctagctgatcgatcgtag 561 21 0 47.62 57.269 16.86 16.86 0.00 3.731 + 389 ctagctagctgatcgatcgta 560 21 0 47.62 57.269 11.68 3.07 0.00 3.731 + 390 tcgatcgatgctagctagtag 122 21 0 47.62 57.269 18.63 2.63 0.00 3.731 + 391 gctagctactgatcgatgctaca 304 23 0 47.83 60.734 11.21 0.06 0.00 3.734 + 392 agctagctgactgatcgatcatc 260 23 0 47.83 60.736 23.93 21.92 36.62 3.736 + 393 agctagctgactgatcgatcga 108 22 0 50.00 61.737 22.52 22.52 0.00 3.737 + 394 tctctgcgcgatcgatgct 366 19 0 57.89 62.740 26.61 0.00 38.48 3.740 + 395 tgatgcatgctagtagtgatgt 30 22 0 40.91 58.256 11.60 0.00 0.00 3.744 + 396 tgatcgatcgatgtgcgg 80 18 0 55.56 58.244 21.27 0.00 41.65 3.756 + 397 cgatcgatgctagctaggcga 404 21 0 57.14 62.770 16.30 16.30 0.00 3.770 + 398 tcgatcgatgctagctaggcg 403 21 0 57.14 62.770 18.63 11.67 0.00 3.770 + 399 atcgatcgatgcatgcatg 443 19 0 47.37 57.226 29.65 23.31 37.30 3.774 + 400 catcgatcgatgcatgcat 442 19 0 47.37 57.226 37.80 33.45 44.93 3.774 + 401 actagctagctgatcatcatcg 508 22 0 45.45 58.219 22.43 3.40 0.00 3.781 + 402 ctgatcatcgatgctactagct 196 22 0 45.45 58.219 10.86 0.00 45.92 3.781 + 403 agctgatcatcgatgctactag 194 22 0 45.45 58.219 13.67 9.68 0.00 3.781 + 404 ctagctgatcatcgatgctact 192 22 0 45.45 58.219 14.85 7.80 0.00 3.781 + 405 tttagctagctgactgatcga 257 21 0 42.86 57.216 0.38 0.00 0.00 3.784 + 406 tagctagctgatcgatcgatgtg 72 23 0 47.83 60.793 10.14 4.94 35.21 3.793 + 407 gctagctagctgatcatcatct 146 22 0 45.45 58.203 34.38 0.00 46.11 3.797 + 408 ctagctagctgatcatcgatgct 188 23 0 47.83 60.799 16.29 15.30 0.00 3.799 + 409 agctagctactatcatcgatcga 429 23 0 43.48 59.170 22.52 22.52 0.00 3.830 + 410 ttagctagctgactgatcgatc 258 22 0 45.45 58.159 28.29 19.32 0.00 3.841 + 411 ctagctgactgatcgatcatca 262 22 0 45.45 58.155 26.49 26.49 39.98 3.845 + 412 aaagcatcggattagctagctga 1 23 0 43.48 60.870 28.29 20.88 0.00 3.870 + 413 agctgactgatacgcgatgct 471 21 0 52.38 62.876 7.57 2.13 0.00 3.876 + 414 tagctagctactgatcgatgcta 302 23 0 43.48 59.102 27.80 12.23 0.00 3.898 + 415 tcatcatcgatgctagctagt 521 21 0 42.86 57.067 22.18 3.56 40.32 3.933 + 416 tcgatcatcatgctagctact 274 21 0 42.86 57.067 0.00 0.00 0.00 3.933 + 417 tgatcatcgatgctactagct 197 21 0 42.86 57.067 17.14 0.00 45.92 3.933 + 418 agctgatcatcgatgctacta 194 21 0 42.86 57.067 17.14 4.89 0.00 3.933 + 419 tagctgatcatcgatgctact 193 21 0 42.86 57.067 14.85 7.80 0.00 3.933 + 420 tcgatcgatgctagtatgctag 327 22 0 45.45 58.044 18.63 13.77 46.09 3.956 + 421 gcgatctagctagctgact 584 19 0 52.63 57.034 17.44 7.44 0.00 3.966 + 422 gctactgatcgatgctacatc 308 21 0 47.62 57.028 2.44 0.00 37.97 3.972 + 423 cggcgatctagctagctg 582 18 0 61.11 58.018 17.07 8.17 37.58 3.982 + 424 gctagctgactgatcgatcatca 261 23 0 47.83 60.983 26.49 26.49 39.98 3.983 + 425 actatcatctctgcgcgat 359 19 0 47.37 57.015 4.99 2.52 0.00 3.985 + 426 catcggattagctagctgatg 5 21 0 47.62 57.003 23.69 23.29 0.00 3.997 + 427 tagctgactgatcgatcatca 263 21 0 42.86 57.000 26.49 26.49 39.98 4.000 + 428 actagctagctgatcatcatcgat 508 24 0 41.67 59.995 22.43 0.00 0.00 4.005 + 429 agtgatgcatgctagtagtgat 28 22 0 40.91 57.984 0.00 0.00 0.00 4.016 + 430 ctagctagctgatcatcatcga 509 22 0 45.45 57.958 11.68 0.00 0.00 4.042 + 431 gctgatcatcgatgctactagct 195 23 0 47.83 61.046 20.91 5.24 45.92 4.046 + 432 agctgatcatcgatgctactagc 194 23 0 47.83 61.046 20.78 20.78 45.61 4.046 + 433 gctagctgatcatcgatgctact 191 23 0 47.83 61.046 12.59 8.92 0.00 4.046 + 434 agctagctgatcatcgatgctac 190 23 0 47.83 61.046 17.99 7.99 0.00 4.046 + 435 tagctagctactatcatctctgcg 350 24 0 45.83 60.058 27.80 0.00 0.00 4.058 + 436 ctagctagctactgatcgatgcta 301 24 0 45.83 60.058 14.00 12.23 0.00 4.058 + 437 agctactatcatctctgcgcga 355 22 0 50.00 62.058 2.71 2.71 0.00 4.058 + 438 gctatttagctagctgactgatcg 253 24 0 45.83 60.060 7.27 0.00 46.11 4.060 + 439 tgatcgatcatcatgctagctac 271 23 0 43.48 58.931 27.48 0.00 37.38 4.069 + 440 gtgatgcatgctagtagtgatg 29 22 0 45.45 57.921 7.49 7.49 0.00 4.079 + 441 ctagctagctgactgatcgatcg 106 23 0 52.17 61.091 16.84 13.89 0.00 4.091 + 442 ctagctactgatcgatgctaca 305 22 0 45.45 57.898 13.79 1.61 0.00 4.102 + 443 cggcgatctagctagctgacta 582 22 0 54.55 62.109 17.44 5.40 38.70 4.109 + 444 atgctagctaggcgatgc 410 18 0 55.56 57.890 10.59 0.00 0.00 4.110 + 445 ctgatcgatcatcatgctagctac 270 24 0 45.83 59.882 26.67 0.00 41.77 4.118 + 446 gctactagctagctgatcatca 505 22 0 45.45 57.879 14.37 0.00 44.92 4.121 + 447 gctactagctagctgatcatca 208 22 0 45.45 57.879 14.37 0.00 44.92 4.121 + 448 ctgactgatacgcgatgctagc 473 22 0 54.55 62.128 8.61 8.61 0.00 4.128 + 449 gctgactgatacgcgatgctag 472 22 0 54.55 62.128 1.70 0.00 0.00 4.128 + 450 ctagctgactgatacgcgatgc 469 22 0 54.55 62.128 3.47 0.00 0.00 4.128 + 451 gctagctgactgatacgcgatg 468 22 0 54.55 62.128 8.21 0.00 0.00 4.128 + 452 tgactgatcgatcatcatgctag 267 23 0 43.48 58.866 26.79 18.40 41.77 4.134 + 453 ctgactgatcgatcatcatgcta 266 23 0 43.48 58.866 20.99 8.89 41.77 4.134 + 454 tagctgactgatcgatcatcatg 263 23 0 43.48 58.866 22.70 19.51 41.77 4.134 + 455 ctagctagctgatcgatcgtagc 560 23 0 52.17 61.151 26.87 26.87 0.00 4.151 + 456 gctagctagctgatcgatcgtag 559 23 0 52.17 61.151 34.38 16.86 46.11 4.151 + 457 ctgatcgatcgatgctagctagg 399 23 0 52.17 61.158 22.67 6.29 35.21 4.158 + 458 gatcgatcgatgctagctagtag 120 23 0 47.83 58.829 23.89 2.63 35.21 4.171 + 459 ttagctagctgactgatcgatcat 258 24 0 41.67 60.177 28.29 18.02 36.62 4.177 + 460 ctgactgatcgatcatcatgctag 266 24 0 45.83 59.822 20.99 12.80 41.77 4.178 + 461 ctagctgactgatcgatcatcatg 262 24 0 45.83 59.822 22.70 19.51 41.77 4.178 + 462 ctagctgatcgatcgatgtgcg 75 22 0 54.55 62.180 31.92 20.85 42.69 4.180 + 463 tttagctagctgactgatcgatc 257 23 0 43.48 58.807 19.32 19.32 0.00 4.193 + 464 tgactgatcgatcatcatgcta 267 22 0 40.91 57.803 26.79 13.11 41.77 4.197 + 465 gctagctactatcatcgatcga 430 22 0 45.45 57.783 22.52 22.52 0.00 4.217 + 466 gatcgatcgatgctagctagta 120 22 0 45.45 57.783 23.89 18.77 35.21 4.217 + 467 agctagctactatcatcgatcg 429 22 0 45.45 57.777 17.56 9.87 0.00 4.223 + 468 atcgatcgatgctagctagtag 121 22 0 45.45 57.777 29.65 2.63 33.56 4.223 + 469 tgatcatcatcgatgctagctagt 518 24 0 41.67 60.238 22.18 3.56 40.32 4.238 + 470 tgatcgatcatcatgctagctact 271 24 0 41.67 60.238 27.48 0.00 37.38 4.238 + 471 actgatcgatcatcatgctagcta 269 24 0 41.67 60.238 26.67 2.76 41.77 4.238 + 472 catcgatcgatgctagtatgcta 325 23 0 43.48 58.753 37.80 6.23 44.93 4.247 + 473 tttagctagctgactgatcgat 257 22 0 40.91 57.736 0.38 0.00 0.00 4.264 + 474 atttagctagctgactgatcga 256 22 0 40.91 57.736 4.16 0.00 0.00 4.264 + 475 cgcgatcgatgctagcta 372 18 0 55.56 57.717 22.07 3.08 38.48 4.283 + 476 catcgatcgatgctagtatgctag 325 24 0 45.83 59.708 37.80 16.01 44.93 4.292 + 477 tagctagctactgatcgatgctac 302 24 0 45.83 60.297 27.80 7.81 0.00 4.297 + 478 agcatcggattagctagctgatg 3 23 0 47.83 61.299 27.81 27.81 33.28 4.299 + 479 agctagctgactgatacgcgat 467 22 0 50.00 62.317 17.99 0.00 0.00 4.317 + 480 tgatcatcatcgatgctagctag 518 23 0 43.48 58.678 17.46 17.46 40.32 4.322 + 481 ctgatcatcatcgatgctagcta 517 23 0 43.48 58.678 17.69 2.41 40.32 4.322 + 482 tagctgatcatcatcgatgctag 514 23 0 43.48 58.678 9.90 2.76 40.32 4.322 + 483 ctagctgatcatcatcgatgcta 513 23 0 43.48 58.678 14.58 9.63 40.32 4.322 + 484 tagctagctgatcatcatcgatg 510 23 0 43.48 58.678 20.23 20.23 41.48 4.322 + 485 ctgatcgatcatcatgctagcta 270 23 0 43.48 58.678 26.67 2.76 41.77 4.322 + 486 gatcatcatcgatgctagctagt 519 23 0 43.48 58.677 22.18 3.56 40.32 4.323 + 487 gatcgatcatcatgctagctact 272 23 0 43.48 58.677 21.11 0.00 0.00 4.323 + 488 gctagctagctgactgatcgatc 105 23 0 52.17 61.341 34.38 19.32 46.11 4.341 + 489 tgatcgatcgatgctagctagtag 119 24 0 45.83 60.356 26.44 2.63 35.21 4.356 + 490 ctgatcgatcgatgctagctagta 118 24 0 45.83 60.356 22.18 18.77 35.21 4.356 + 491 ctgatcatcatcgatgctagctag 517 24 0 45.83 59.644 17.46 17.46 40.32 4.356 + 492 ctagctgatcatcatcgatgctag 513 24 0 45.83 59.644 19.54 18.30 42.07 4.356 + 493 ctagctagctgatcatcatcgatg 509 24 0 45.83 59.644 20.23 20.23 41.48 4.356 + 494 tttagctagctgactgatcgatca 257 24 0 41.67 60.358 26.99 26.99 35.44 4.358 + 495 actatcatctctgcgcgatcga 359 22 0 50.00 62.365 22.07 1.72 38.48 4.365 + 496 agctgatcgatcgtagcg 566 18 0 55.56 57.634 25.02 11.96 0.00 4.366 + 497 gctactagctagctgactgatac 461 23 0 47.83 58.626 15.96 1.42 44.92 4.374 + 498 agctgatcgatcgatgctagct 397 22 0 50.00 62.388 30.32 30.32 38.42 4.388 + 499 agctagctgatcgatcgatgct 393 22 0 50.00 62.388 33.87 33.38 38.16 4.388 + 500 ctagctgactgatcgatcatcat 262 23 0 43.48 58.612 26.31 20.43 41.77 4.388 + 501 agctagctactatcatctctgc 351 22 0 45.45 57.608 17.56 0.00 0.00 4.392 + 502 ctagctactatcatctctgcgcg 353 23 0 52.17 61.393 0.00 0.00 0.00 4.393 + 503 tgatcatcatcgatgctagcta 518 22 0 40.91 57.602 17.69 3.08 40.32 4.398 + 504 tagctgatcatcatcgatgcta 514 22 0 40.91 57.602 15.95 9.16 40.32 4.398 + 505 tgatcgatcatcatgctagcta 271 22 0 40.91 57.602 27.48 3.08 37.38 4.398 + 506 atcatcatcgatgctagctagt 520 22 0 40.91 57.595 22.18 3.56 40.32 4.405 + 507 atcgatcatcatgctagctact 273 22 0 40.91 57.595 0.00 0.00 0.00 4.405 + 508 agctagctactatcatcgatcgat 429 24 0 41.67 59.573 25.37 25.37 35.13 4.427 + 509 gctagctgatcgatcgatgtgc 74 22 0 54.55 62.443 31.83 30.04 35.21 4.443 + 510 tagctgactgatcgatcatcat 263 22 0 40.91 57.531 26.31 20.43 41.77 4.469 + 511 tagctagctgactgatcgatcga 107 23 0 47.83 61.487 28.29 22.52 0.00 4.487 + 512 atcgatcgatgctagtatgctag 326 23 0 43.48 58.501 29.65 13.77 46.09 4.499 + 513 ctagtgatgcatgctagtagtga 26 23 0 43.48 58.483 20.00 1.46 0.00 4.517 + 514 tagctagctgactgatcgatcatc 259 24 0 45.83 60.536 28.29 21.92 36.62 4.536 + 515 tactagctagctgatcatcatcga 507 24 0 41.67 59.449 0.00 0.00 0.00 4.551 + 516 gctagctagctactatcatcga 426 22 0 45.45 57.437 34.38 0.00 46.11 4.563 + 517 tgactgatacgcgatgctagct 474 22 0 50.00 62.569 17.69 1.35 0.00 4.569 + 518 agctgactgatacgcgatgcta 471 22 0 50.00 62.569 7.57 0.00 0.00 4.569 + 519 tagctgactgatacgcgatgct 470 22 0 50.00 62.569 10.87 8.44 0.00 4.569 + 520 atcgatcgatgctagtatgcta 326 22 0 40.91 57.423 29.65 0.00 33.56 4.577 + 521 ctagctagctgatcatcatcgat 509 23 0 43.48 58.422 11.68 0.00 0.00 4.578 + 522 agctgactgatcgatcgatgct 112 22 0 50.00 62.580 26.44 23.13 35.21 4.580 + 523 ctagctagctgatcatcgatgcta 188 24 0 45.83 60.596 16.78 15.81 0.00 4.596 + 524 gtgatgcatgctagtagtgatgta 29 24 0 41.67 59.398 11.60 8.84 0.00 4.602 + 525 gctgatcatcatcgatgctagct 516 23 0 47.83 61.603 20.15 8.14 40.32 4.603 + 526 agctgatcatcatcgatgctagc 515 23 0 47.83 61.603 20.04 19.26 40.32 4.603 + 527 gctagctgatcatcatcgatgct 512 23 0 47.83 61.603 14.14 8.34 40.32 4.603 + 528 agctagctgatcatcatcgatgc 511 23 0 47.83 61.603 21.42 7.40 40.32 4.603 + 529 tagtgatgcatgctagtagtga 27 22 0 40.91 57.391 0.01 0.00 0.00 4.609 + 530 ctactagctagctgactgatacg 462 23 0 47.83 58.387 3.12 0.00 0.00 4.613 + 531 tagctactgatcgatgctacatc 306 23 0 43.48 58.368 13.79 0.00 37.97 4.632 + 532 gactgatacgcgatgctagctag 475 23 0 52.17 61.633 17.46 17.46 0.00 4.633 + 533 ctagctactgatcgatgctacat 305 23 0 43.48 58.364 13.79 0.09 0.00 4.636 + 534 gctagctactatcatctctgcgc 352 23 0 52.17 61.644 8.21 0.00 0.00 4.644 + 535 gctagctagctactgatcgatgc 300 23 0 52.17 61.644 34.38 12.71 46.11 4.644 + 536 gctactagctagctgatcatcat 505 23 0 43.48 58.350 14.37 0.00 44.92 4.650 + 537 gctactagctagctgatcatcat 208 23 0 43.48 58.350 14.37 0.00 44.92 4.650 + 538 ctagctactgatcgatgctacatc 305 24 0 45.83 59.349 13.79 0.00 37.97 4.651 + 539 gctactagctagctgatcatcatc 505 24 0 45.83 59.343 14.37 0.00 44.92 4.657 + 540 gctactagctagctgatcatcatc 208 24 0 45.83 59.343 14.37 0.00 44.92 4.657 + 541 gctgatcatcatctagctagtagc 154 24 0 45.83 59.343 15.25 15.25 45.79 4.657 + 542 tagctagctgatcatcatcgat 510 22 0 40.91 57.329 10.14 0.00 0.00 4.671 + 543 ctactatcatctctgcgcgatcg 357 23 0 52.17 61.686 12.19 12.19 39.07 4.686 + 544 tactagctagctgactgatacg 463 22 0 45.45 57.310 13.17 0.00 0.00 4.690 + 545 gctgatcgatcgatgctagctag 398 23 0 52.17 61.697 27.88 18.22 35.21 4.697 + 546 ctagctgatcgatcgatgctagc 395 23 0 52.17 61.697 38.64 35.38 43.05 4.697 + 547 gctagctgatcgatcgatgctag 394 23 0 52.17 61.697 41.07 41.07 46.89 4.697 + 548 ctagctagctgatcgatcgatgc 391 23 0 52.17 61.697 24.08 21.09 35.21 4.697 + 549 gctagctagctgatcgatcgatg 390 23 0 52.17 61.697 34.38 11.03 46.11 4.697 + 550 gctagctagctgatcgatcgatg 70 23 0 52.17 61.697 34.38 11.03 46.11 4.697 + 551 gctactagctagctgactgata 461 22 0 45.45 57.286 15.96 3.69 44.92 4.714 + 552 gatcgatcatcatgctagctac 272 22 0 45.45 57.284 21.11 0.00 0.00 4.716 + 553 cgatgctagctaggcgat 408 18 0 55.56 57.277 10.81 3.01 0.00 4.723 + 554 atcgatgctagctaggcg 406 18 0 55.56 57.277 15.59 9.02 0.00 4.723 + 555 tagctactgatcgatgctacat 306 22 0 40.91 57.270 13.79 0.09 0.00 4.730 + 556 gctagctactatcatcgatcgat 430 23 0 43.48 58.251 25.37 25.37 35.13 4.749 + 557 tgcatgctagtagtgatgtatacg 33 24 0 41.67 59.224 20.79 0.00 0.00 4.776 + 558 gcatgctagtagtgatgtatacgt 34 24 0 41.67 59.223 11.60 0.00 0.00 4.777 + 559 atttagctagctgactgatcgatc 256 24 0 41.67 59.219 19.32 19.32 0.00 4.781 + 560 gactgatcgatcatcatgctag 268 22 0 45.45 57.215 24.51 15.87 41.77 4.785 + 561 atttagctagctgactgatcgat 256 23 0 39.13 58.215 4.16 0.00 0.00 4.785 + 562 gctgactgatcgatcatcatgct 265 23 0 47.83 61.788 27.72 15.10 41.77 4.788 + 563 agctgactgatcgatcatcatgc 264 23 0 47.83 61.788 27.74 27.74 41.77 4.788 + 564 tagctactatcatctctgcgcga 354 23 0 47.83 61.796 2.71 2.71 0.00 4.796 + 565 gctgatcatcgatgctactagcta 195 24 0 45.83 60.834 20.91 7.37 45.92 4.834 + 566 tagctgatcatcgatgctactagc 193 24 0 45.83 60.834 20.78 20.78 45.61 4.834 + 567 gctagctgatcatcgatgctacta 191 24 0 45.83 60.834 11.65 8.83 0.00 4.834 + 568 tagctagctgatcatcgatgctac 189 24 0 45.83 60.834 17.82 12.06 0.00 4.834 + 569 tagtgatgcatgctagtagtgatg 27 24 0 41.67 59.155 11.56 7.49 0.00 4.845 + 570 agtgatgcatgctagtagtgatgt 28 24 0 41.67 60.846 11.60 0.00 0.00 4.846 + 571 tgatgcatgctagtagtgatgta 30 23 0 39.13 58.147 11.60 8.84 0.00 4.853 + 572 ctgactgatcgatcgatgctagc 114 23 0 52.17 61.878 18.17 12.52 35.21 4.878 + 573 gctgactgatcgatcgatgctag 113 23 0 52.17 61.878 22.81 19.44 35.21 4.878 + 574 ctagctgactgatcgatcgatgc 110 23 0 52.17 61.878 24.08 19.43 35.21 4.878 + 575 gctagctgactgatcgatcgatg 109 23 0 52.17 61.878 23.05 13.21 35.21 4.878 + 576 tcatcatcgatgctagctagtag 521 23 0 43.48 58.114 2.81 0.00 40.32 4.886 + 577 tactagctagctgatcatcatcg 507 23 0 43.48 58.114 0.00 0.00 0.00 4.886 + 578 tcgatcatcatgctagctactag 274 23 0 43.48 58.114 0.00 0.00 37.62 4.886 + 579 tgatcatcgatgctactagctag 197 23 0 43.48 58.114 20.04 20.04 45.92 4.886 + 580 ctgatcatcgatgctactagcta 196 23 0 43.48 58.114 10.86 0.00 45.92 4.886 + 581 tagctgatcatcgatgctactag 193 23 0 43.48 58.114 13.67 9.68 0.00 4.886 + 582 ctagctgatcatcgatgctacta 192 23 0 43.48 58.114 11.65 8.83 0.00 4.886 + 583 ctactagctagctgatcatcatcg 506 24 0 45.83 59.110 1.08 0.00 0.00 4.890 + 584 ctgatcatcgatgctactagctag 196 24 0 45.83 59.110 20.04 20.04 45.92 4.890 + 585 ctagctgatcatcgatgctactag 192 24 0 45.83 59.110 15.68 15.68 0.00 4.890 + 586 gctagctagctgatcatcatctag 146 24 0 45.83 59.102 34.38 13.13 44.71 4.898 + 587 gctagctagctgatcatcatcta 146 23 0 43.48 58.097 34.38 0.00 46.11 4.903 + 588 ctagtgatgcatgctagtagtg 26 22 0 45.45 57.072 20.00 3.96 0.00 4.928 + 589 gctactatcatctctgcgcgatc 356 23 0 52.17 61.936 4.99 0.00 0.00 4.936 + 590 gctgatcgatcgatgtgc 78 18 0 55.56 57.052 29.71 26.38 35.21 4.948 + 591 tagctagctactatcatcgatcga 428 24 0 41.67 59.031 27.80 22.52 0.00 4.969 + 592 agctagctgatcgatcgtagcg 562 22 0 54.55 62.971 27.20 18.31 0.00 4.971 + 593 tgactgatacgcgatgct 474 18 0 50.00 57.028 2.33 0.00 0.00 4.972 + 594 gatcatcatcgatgctagctag 519 22 0 45.45 57.019 17.46 17.46 40.32 4.981 + 595 tcatcatcgatgctagctagta 521 22 0 40.91 57.005 22.18 18.77 40.32 4.995 + 596 tcgatcatcatgctagctacta 274 22 0 40.91 57.005 0.00 0.00 0.00 4.995 + 597 tgatcatcgatgctactagcta 197 22 0 40.91 57.005 17.14 1.01 45.92 4.995 + 598 tagctgatcatcgatgctacta 193 22 0 40.91 57.005 12.62 8.42 0.00 4.995 + 599 tagctagctgactgatacgcgat 466 23 0 47.83 62.044 28.29 0.00 0.00 5.044 + 600 ctagctagctactatcatcgatcga 427 25 0 44.00 59.949 27.80 22.52 0.00 5.051 + 601 agctagctgactgatcgatcgat 108 23 0 47.83 62.053 30.53 30.53 37.90 5.053 + 602 ctactagctagctgactgatacgc 462 24 0 50.00 61.062 3.61 0.00 0.00 5.062 + 603 gctactagctagctgactgatacg 461 24 0 50.00 61.062 14.37 0.00 44.92 5.062 + 604 tgatcatcatcgatgctagctagta 518 25 0 40.00 60.062 22.18 18.77 40.32 5.062 + 605 tgatcgatcatcatgctagctacta 271 25 0 40.00 60.062 27.48 0.00 37.38 5.062 + 606 ctagtgatgcatgctagtagtgatg 26 25 0 44.00 60.064 20.00 7.49 0.00 5.064 + 607 gctagctagctactatcatcgatc 426 24 0 45.83 58.932 34.38 4.20 46.11 5.068 + 608 gctagctactgatcgatgctacat 304 24 0 45.83 61.072 11.21 0.00 0.00 5.072 + 609 gctagctagctactatcatcgat 426 23 0 43.48 57.922 34.38 0.00 46.11 5.078 + 610 ctagtgatgcatgctagtagtgat 26 24 0 41.67 58.911 20.00 4.64 0.00 5.089 + 611 tactatcatctctgcgcgatcga 358 23 0 47.83 62.092 22.07 1.72 38.48 5.092 + 612 agctgatcgatcgatgctagcta 397 23 0 47.83 62.111 31.26 14.51 40.03 5.111 + 613 tagctgatcgatcgatgctagct 396 23 0 47.83 62.111 33.22 33.22 42.08 5.111 + 614 agctagctgatcgatcgatgcta 393 23 0 47.83 62.111 34.11 32.56 36.80 5.111 + 615 tagctagctgatcgatcgatgct 392 23 0 47.83 62.111 33.87 33.38 38.16 5.111 + 616 tagtgatgcatgctagtagtgat 27 23 0 39.13 57.886 11.56 0.00 0.00 5.114 + 617 tactagctagctgatcatcatcgat 507 25 0 40.00 59.828 0.00 0.00 0.00 5.172 + 618 gctagctagctgatcatcgatgc 187 23 0 52.17 62.193 34.38 9.22 46.11 5.193 + 619 gctagtgatgcatgctagtagtga 25 24 0 45.83 61.195 24.96 4.57 0.00 5.195 + 620 aaagcatcggattagctagctgat 1 24 0 41.67 61.209 17.84 15.13 0.00 5.209 + 621 gtgatgcatgctagtagtgatgtat 29 25 0 40.00 59.774 1.07 1.07 0.00 5.226 + 622 ctatcatctctgcgcgatcgatg 360 23 0 52.17 62.227 18.01 18.01 38.48 5.227 + 623 tgactgatacgcgatgctagcta 474 23 0 47.83 62.287 17.69 3.08 0.00 5.287 + 624 tagctgactgatacgcgatgcta 470 23 0 47.83 62.287 12.64 9.09 0.00 5.287 + 625 tgctagtagtgatgtatacgtagct 37 25 0 40.00 59.713 9.37 8.73 0.00 5.287 + 626 tgactgatcgatcgatgctagct 115 23 0 47.83 62.296 20.19 11.59 35.21 5.296 + 627 agctgactgatcgatcgatgcta 112 23 0 47.83 62.296 26.44 14.64 35.21 5.296 + 628 tagctgactgatcgatcgatgct 111 23 0 47.83 62.296 31.98 30.27 35.21 5.296 + 629 ctagctagctactatcatcgatcg 427 24 0 45.83 58.703 12.49 9.87 0.00 5.297 + 630 tagctagctactatcatcgatcg 428 23 0 43.48 57.691 27.80 9.87 0.00 5.309 + 631 gactgatcgatcatcatgctagct 268 24 0 45.83 61.313 24.51 7.81 41.77 5.313 + 632 gctagctgactgatcgatcatcat 261 24 0 45.83 61.313 26.31 20.43 41.77 5.313 + 633 ctatttagctagctgactgatcga 254 24 0 41.67 58.679 0.00 0.00 0.00 5.321 + 634 gcatgctagtagtgatgtatacg 34 23 0 43.48 57.659 11.60 0.00 0.00 5.341 + 635 tatttagctagctgactgatcga 255 23 0 39.13 57.650 0.00 0.00 0.00 5.350 + 636 ctactagctagctgatcatcatcga 506 25 0 44.00 60.352 1.08 0.00 0.00 5.352 + 637 agctactatcatctctgcgcgat 355 23 0 47.83 62.360 4.99 2.52 0.00 5.360 + 638 gctgatcatcatcgatgctagcta 516 24 0 45.83 61.370 20.15 8.49 40.32 5.370 + 639 tagctgatcatcatcgatgctagc 514 24 0 45.83 61.370 20.04 19.26 40.32 5.370 + 640 gctagctgatcatcatcgatgcta 512 24 0 45.83 61.370 14.58 9.63 40.32 5.370 + 641 tagctagctgatcatcatcgatgc 510 24 0 45.83 61.370 21.42 7.40 40.32 5.370 + 642 atgcatgctagtagtgatgtatacg 32 25 0 40.00 59.604 11.70 0.00 0.00 5.396 + 643 tgatgcatgctagtagtgatgtat 30 24 0 37.50 58.592 12.66 12.66 0.00 5.408 + 644 gactgatcgatcgatgctagctag 116 24 0 50.00 61.409 18.04 17.46 35.21 5.409 + 645 gctatttagctagctgactgatc 253 23 0 43.48 57.572 7.27 0.00 46.11 5.428 + 646 tgctagtgatgcatgctagtagtg 24 24 0 45.83 61.434 24.96 10.54 35.89 5.434 + 647 ctagctagctactatcatctctgc 349 24 0 45.83 58.562 27.80 0.00 0.00 5.438 + 648 gctagctagctactatcatctctg 348 24 0 45.83 58.562 34.38 6.79 46.11 5.438 + 649 gatcatcatcgatgctagctagta 519 24 0 41.67 58.557 22.18 18.77 40.32 5.443 + 650 gatcgatcatcatgctagctacta 272 24 0 41.67 58.557 21.11 0.00 0.00 5.443 + 651 atcatcatcgatgctagctagtag 520 24 0 41.67 58.554 2.13 0.00 40.32 5.446 + 652 atcgatcatcatgctagctactag 273 24 0 41.67 58.554 0.00 0.00 37.62 5.446 + 653 tagctagctactatcatctctgc 350 23 0 43.48 57.527 27.80 0.00 0.00 5.473 + 654 atcatcatcgatgctagctagta 520 23 0 39.13 57.514 22.18 18.77 40.32 5.486 + 655 atcgatcatcatgctagctacta 273 23 0 39.13 57.514 0.00 0.00 0.00 5.486 + 656 gatcatcatcgatgctagctagtag 519 25 0 44.00 59.494 0.21 0.00 40.32 5.506 + 657 gatcgatcatcatgctagctactag 272 25 0 44.00 59.494 21.11 0.00 37.62 5.506 + 658 actagctagctgatcatcatctact 211 25 0 40.00 59.471 22.43 6.99 0.00 5.529 + 659 tgactgatcgatcatcatgctagc 267 24 0 45.83 61.547 26.79 14.13 41.77 5.547 + 660 gctgactgatcgatcatcatgcta 265 24 0 45.83 61.547 27.72 16.42 41.77 5.547 + 661 tagctgactgatcgatcatcatgc 263 24 0 45.83 61.547 27.74 27.74 41.77 5.547 + 662 tgctagtagtgatgtatacgtagc 37 24 0 41.67 58.446 4.93 4.93 0.00 5.554 + 663 ctagctagctgactgatacgcga 465 23 0 52.17 62.571 14.90 0.00 0.00 5.571 + 664 tagctagctactatcatcgatcgat 428 25 0 40.00 59.423 27.80 25.37 35.13 5.577 + 665 gctactagctagctgatcatcatct 208 25 0 44.00 60.585 14.37 0.00 44.92 5.585 + 666 agctgatcatcatctagctagtagc 153 25 0 44.00 60.585 15.25 15.25 40.45 5.585 + 667 ctagctagctgatcgatcgatgtg 71 24 0 50.00 61.642 11.68 4.94 35.21 5.642 + 668 agtgatgcatgctagtagtgatgta 28 25 0 40.00 60.646 11.60 8.84 0.00 5.646 + 669 tagtgatgcatgctagtagtgatgt 27 25 0 40.00 60.646 11.60 0.00 0.00 5.646 + 670 actatcatctctgcgcgatcgat 359 23 0 47.83 62.652 22.07 11.47 38.48 5.652 + 671 ctatttagctagctgactgatcg 254 23 0 43.48 57.339 0.00 0.00 0.00 5.661 + 672 tagctagctgatcgatcgtagcg 561 23 0 52.17 62.677 27.20 18.31 0.00 5.677 + 673 gcatcggattagctagctgatgc 4 23 0 52.17 62.687 34.10 34.10 41.15 5.687 + 674 tgcatgctagtagtgatgtatacgt 33 25 0 40.00 60.700 20.79 0.00 0.00 5.700 + 675 tttagctagctgactgatcgatcat 257 25 0 40.00 60.702 26.67 18.02 36.62 5.702 + 676 atttagctagctgactgatcgatca 256 25 0 40.00 60.702 26.99 26.99 35.44 5.702 + 677 gctagctagctactatcatctct 348 23 0 43.48 57.266 34.38 0.00 46.11 5.734 + 678 aagcatcggattagctagctgatg 2 24 0 45.83 61.794 27.81 27.81 33.28 5.794 + 679 agtgatgtatacgtagctagtagc 44 24 0 41.67 58.201 15.25 15.25 45.79 5.799 + 680 gctagtagtgatgtatacgtagct 38 24 0 41.67 58.201 5.92 5.92 0.00 5.799 + 681 tagctagctgactgatcgatcgat 107 24 0 45.83 61.800 30.53 30.53 37.90 5.800 + 682 actagctagctgactgatacgcg 464 23 0 52.17 62.816 21.52 3.89 0.00 5.816 + 683 actagctagctgatcatcatctac 211 24 0 41.67 58.178 22.43 0.00 0.00 5.822 + 684 tagctgatcgatcgatgctagcta 396 24 0 45.83 61.857 34.98 33.55 41.05 5.857 + 685 tagctagctgatcgatcgatgcta 392 24 0 45.83 61.857 34.11 32.56 36.80 5.857 + 686 tatttagctagctgactgatcgat 255 24 0 37.50 58.112 1.68 0.00 0.00 5.888 + 687 gcatgctagtagtgatgtatacgta 34 25 0 40.00 59.089 11.60 0.00 0.00 5.911 + 688 tatttagctagctgactgatcgatc 255 25 0 40.00 59.084 19.32 19.32 0.00 5.916 + 689 ctatttagctagctgactgatcgat 254 25 0 40.00 59.082 0.00 0.00 0.00 5.918 + 690 ctagctagctactatcatctctgcg 349 25 0 48.00 60.920 27.80 5.75 0.00 5.920 + 691 tgatcgatcgatgctagctaggc 400 23 0 52.17 62.955 26.44 12.49 35.21 5.955 + 692 agctagctactgatcgatgctaca 303 24 0 45.83 61.988 17.56 3.03 0.00 5.988 + 693 tgactgatcgatcgatgctagcta 115 24 0 45.83 62.034 20.19 11.16 35.21 6.034 + 694 tagctgactgatcgatcgatgcta 111 24 0 45.83 62.034 33.43 30.74 35.21 6.034 + 695 catgctagtagtgatgtatacgtagc 35 26 0 42.31 59.961 4.93 4.93 0.00 6.039 + 696 gcatgctagtagtgatgtatacgtag 34 26 0 42.31 59.961 11.60 0.00 0.00 6.039 + 697 actgatcgatcgatgctagctagt 117 24 0 45.83 62.039 23.29 15.07 35.21 6.039 + 698 ctatttagctagctgactgatcgatc 254 26 0 42.31 59.960 19.32 19.32 0.00 6.040 + 699 ttagctagctgactgatcgatcatc 258 25 0 44.00 61.041 28.29 21.92 36.62 6.041 + 700 atgctagtagtgatgtatacgtagct 36 26 0 38.46 60.068 9.37 8.73 0.00 6.068 + 701 ctagctagctgatcatcatctact 212 24 0 41.67 57.930 11.68 6.99 0.00 6.070 + 702 ctactagctagctgatcatcatct 209 24 0 41.67 57.930 1.08 0.00 0.00 6.070 + 703 agctgatcatcatctagctagtag 153 24 0 41.67 57.930 7.49 3.73 40.45 6.070 + 704 ctagctgatcatcatctagctagt 151 24 0 41.67 57.930 21.70 5.56 46.15 6.070 + 705 tagctactatcatctctgcgcgat 354 24 0 45.83 62.096 4.99 2.52 0.00 6.096 + 706 gactgatcgatcatcatgctagcta 268 25 0 44.00 61.099 24.51 4.57 41.77 6.099 + 707 ctgatcatcatcgatgctagctagt 517 25 0 44.00 61.101 22.18 3.56 40.32 6.101 + 708 actagctagctgatcatcatcgatg 508 25 0 44.00 61.101 22.43 20.23 41.48 6.101 + 709 ctgatcgatcatcatgctagctact 270 25 0 44.00 61.101 26.67 0.00 41.77 6.101 + 710 atgctagtagtgatgtatacgtagc 36 25 0 40.00 58.855 4.93 4.93 0.00 6.145 + 711 ctagctagctactgatcgatgctac 301 25 0 48.00 61.145 14.00 7.81 0.00 6.145 + 712 gctagctagctactatcatctctgc 348 25 0 48.00 61.152 34.38 11.74 46.11 6.152 + 713 agctagctgatcatcatctactatca 214 26 0 38.46 59.840 17.99 0.00 0.00 6.160 + 714 ctgatcgatcgatgctagctagtag 118 25 0 48.00 61.197 19.70 5.49 35.21 6.197 + 715 agctagctgactgatcgatcatca 260 24 0 45.83 62.232 26.49 26.49 39.98 6.232 + 716 gctagctagctactatcatcgatcg 426 25 0 48.00 61.252 34.38 9.87 46.11 6.252 + 717 gctatttagctagctgactgatcga 253 25 0 44.00 61.268 7.27 0.00 46.11 6.268 + 718 ctagctagctactatcatcgatcgat 427 26 0 42.31 60.291 27.80 25.37 35.13 6.291 + 719 agctgatcatcgatgctactagct 194 24 0 45.83 62.294 24.11 23.60 45.92 6.294 + 720 agctagctgatcatcgatgctact 190 24 0 45.83 62.294 17.99 10.88 0.00 6.294 + 721 ctagctagctgactgatcgatcga 106 24 0 50.00 62.312 22.52 22.52 0.00 6.312 + 722 actgatcgatcatcatgctagctac 269 25 0 44.00 61.328 26.67 0.00 41.77 6.328 + 723 tgatgcatgctagtagtgatgtatac 30 26 0 38.46 59.623 9.19 6.43 0.00 6.377 + 724 gtgatgcatgctagtagtgatgtata 29 26 0 38.46 59.623 4.23 0.00 0.00 6.377 + 725 tactatcatctctgcgcgatcgat 358 24 0 45.83 62.379 22.07 11.47 38.48 6.379 + 726 gctagctgatcatcatctactatca 215 25 0 40.00 58.607 8.21 0.00 0.00 6.393 + 727 gctactagctagctgatcatcatcta 208 26 0 42.31 60.404 14.37 0.00 44.92 6.404 + 728 tagctgatcatcatctagctagtagc 152 26 0 42.31 60.404 15.25 15.25 41.48 6.404 + 729 tgctagtagtgatgtatacgtagcta 37 26 0 38.46 59.564 10.00 8.05 0.00 6.436 + 730 gatgcatgctagtagtgatgtatacg 31 26 0 42.31 60.453 7.40 0.00 0.00 6.453 + 731 tagtgatgcatgctagtagtgatgta 27 26 0 38.46 60.461 11.60 8.84 0.00 6.461 + 732 gctagtgatgcatgctagtagtgat 25 25 0 44.00 61.506 24.96 8.51 0.00 6.506 + 733 tgcatgctagtagtgatgtatacgta 33 26 0 38.46 60.515 20.79 0.00 0.00 6.515 + 734 tatttagctagctgactgatcgatca 255 26 0 38.46 60.516 26.99 26.99 35.44 6.516 + 735 tgatgcatgctagtagtgatgtata 30 25 0 36.00 58.479 4.13 0.00 0.00 6.521 + 736 tactagctagctgactgatacgcg 463 24 0 50.00 62.538 13.17 3.89 0.00 6.538 + 737 ctagctactatcatctctgcgcga 353 24 0 50.00 62.603 2.71 2.71 0.00 6.603 + 738 agctagctgatcatcatctactatc 214 25 0 40.00 58.369 17.99 0.00 0.00 6.631 + 739 agctagctgatcatcatctactat 214 24 0 37.50 57.345 17.99 0.00 0.00 6.655 + 740 gctactagctagctgatcatcatcg 505 25 0 48.00 61.656 14.37 0.00 44.92 6.656 + 741 gctgatcatcgatgctactagctag 195 25 0 48.00 61.656 20.91 20.04 45.92 6.656 + 742 ctagctgatcatcgatgctactagc 192 25 0 48.00 61.656 20.78 20.78 45.61 6.656 + 743 gctagctgatcatcgatgctactag 191 25 0 48.00 61.656 20.13 20.13 0.00 6.656 + 744 ctagctagctgatcatcgatgctac 188 25 0 48.00 61.656 17.82 12.06 0.00 6.656 + 745 actagctagctgatcatcatctacta 211 26 0 38.46 59.328 22.43 8.11 0.00 6.672 + 746 tactagctagctgatcatcatctact 210 26 0 38.46 59.328 6.99 6.99 0.00 6.672 + 747 ctactagctagctgatcatcatcgat 506 26 0 42.31 60.681 1.08 0.00 0.00 6.681 + 748 tagctagctactgatcgatgctaca 302 25 0 44.00 61.746 27.80 5.02 0.00 6.746 + 749 gtagtgatgtatacgtagctagtagc 42 26 0 42.31 59.249 15.25 15.25 45.79 6.751 + 750 actgatcgatcgatgctagctagta 117 25 0 44.00 61.797 23.29 18.77 35.21 6.797 + 751 gatgcatgctagtagtgatgtatac 31 25 0 40.00 58.175 20.79 1.70 0.00 6.825 + 752 agctgatcatcatcgatgctagct 515 24 0 45.83 62.835 23.00 22.41 41.74 6.835 + 753 agctagctgatcatcatcgatgct 511 24 0 45.83 62.835 17.99 8.34 40.32 6.835 + 754 ctagctagctgactgatacgcgat 465 24 0 50.00 62.838 14.90 0.00 0.00 6.838 + 755 atgcatgctagtagtgatgtatac 32 24 0 37.50 57.161 11.70 0.53 0.00 6.839 + 756 agctagctactatcatctctgcgc 351 24 0 50.00 62.858 17.56 0.00 0.00 6.858 + 757 gctagctagctactgatcgatgct 300 24 0 50.00 62.858 34.38 11.51 46.11 6.858 + 758 ctactatcatctctgcgcgatcga 357 24 0 50.00 62.878 22.07 1.72 38.48 6.878 + 759 gctagctactgatcgatgctacatc 304 25 0 48.00 61.879 11.21 4.40 37.97 6.879 + 760 tagtgatgtatacgtagctagtagc 43 25 0 40.00 58.104 15.25 15.25 45.79 6.896 + 761 gctagtagtgatgtatacgtagcta 38 25 0 40.00 58.104 7.24 5.34 0.00 6.896 + 762 tgatcatcatcgatgctagctagtag 518 26 0 42.31 60.902 14.93 0.00 40.32 6.902 + 763 ctgatcatcatcgatgctagctagta 517 26 0 42.31 60.902 22.18 18.77 40.32 6.902 + 764 tactagctagctgatcatcatcgatg 507 26 0 42.31 60.902 20.23 20.23 41.48 6.902 + 765 tgatcgatcatcatgctagctactag 271 26 0 42.31 60.902 27.48 0.00 37.38 6.902 + 766 ctgatcgatcatcatgctagctacta 270 26 0 42.31 60.902 26.67 1.37 41.77 6.902 + 767 agctgatcgatcgatgctagctag 397 24 0 50.00 62.904 31.26 19.90 40.03 6.904 + 768 ctagctgatcgatcgatgctagct 395 24 0 50.00 62.904 35.51 33.22 43.05 6.904 + 769 agctagctgatcgatcgatgctag 393 24 0 50.00 62.904 41.07 41.07 46.89 6.904 + 770 ctagctagctgatcgatcgatgct 391 24 0 50.00 62.904 33.87 33.38 38.16 6.904 + 771 tactagctagctgatcatcatctac 210 25 0 40.00 58.081 0.00 0.00 0.00 6.919 + 772 gctagctgatcatcatctactatc 215 24 0 41.67 57.062 8.21 0.00 0.00 6.938 + 773 agtgatgcatgctagtagtgatgtat 28 26 0 38.46 60.969 1.07 1.07 0.00 6.969 + 774 gctagtagtgatgtatacgtagctag 38 26 0 42.31 59.027 8.99 8.99 0.00 6.973 + 775 tagctagctgactgatcgatcatca 259 25 0 44.00 61.981 28.29 26.49 39.98 6.981 + 776 ctactagctagctgatcatcatctac 209 26 0 42.31 59.015 1.08 0.00 0.00 6.985 + 777 agtagtgatgtatacgtagctagt 41 24 0 37.50 57.012 8.68 8.68 0.00 6.988 + 778 gctagctgatcatcatctactatcat 215 26 0 38.46 59.001 8.21 0.00 0.00 6.999 + 779 agctgatcatcatctactatcatca 218 25 0 36.00 57.993 0.00 0.00 0.00 7.007 + 780 atgcatgctagtagtgatgtatacgt 32 26 0 38.46 61.018 11.70 0.00 0.00 7.018 + 781 atttagctagctgactgatcgatcat 256 26 0 38.46 61.022 26.67 18.02 36.62 7.022 + 782 agctgatcatcgatgctactagcta 194 25 0 44.00 62.040 24.59 9.79 45.92 7.040 + 783 tagctgatcatcgatgctactagct 193 25 0 44.00 62.040 27.00 27.00 45.92 7.040 + 784 agctagctgatcatcgatgctacta 190 25 0 44.00 62.040 17.99 11.59 0.00 7.040 + 785 tagctagctgatcatcgatgctact 189 25 0 44.00 62.040 17.55 15.53 0.00 7.040 + 786 atgctagtagtgatgtatacgtagcta 36 27 0 37.04 59.911 10.00 8.05 0.00 7.089 + 787 gctagctgatcatcatctactatcatc 215 27 0 40.74 59.861 8.21 0.00 0.00 7.139 + 788 ctagctagctgatcatcatctacta 212 25 0 40.00 57.842 11.68 8.11 0.00 7.158 + 789 ctactagctagctgatcatcatcta 209 25 0 40.00 57.842 1.08 0.00 0.00 7.158 + 790 tagctgatcatcatctagctagtag 152 25 0 40.00 57.842 13.40 3.73 41.48 7.158 + 791 ctagctgatcatcatctagctagta 151 25 0 40.00 57.842 21.70 7.13 46.15 7.158 + 792 gctgatcatcatcgatgctagctag 516 25 0 48.00 62.165 20.15 17.46 40.32 7.165 + 793 ctagctgatcatcatcgatgctagc 513 25 0 48.00 62.165 19.27 19.26 41.96 7.165 + 794 gctagctgatcatcatcgatgctag 512 25 0 48.00 62.165 23.70 23.70 45.51 7.165 + 795 ctagctagctgatcatcatcgatgc 509 25 0 48.00 62.165 21.42 7.40 40.32 7.165 + 796 agctagctgatcatcatctactatcat 214 27 0 37.04 60.181 17.99 0.00 0.00 7.181 + 797 ctactagctagctgatcatcatctact 209 27 0 40.74 60.181 6.99 6.99 0.00 7.181 + 798 ctagctgatcatcatctagctagtag 151 26 0 42.31 58.789 21.70 10.73 46.15 7.211 + 799 aaagcatcggattagctagctgatg 1 25 0 44.00 62.249 27.81 27.81 33.28 7.249 + 800 agctagctactgatcgatgctacat 303 25 0 44.00 62.272 17.56 6.16 0.00 7.272 + 801 tagctagctgatcatcatctactatca 213 27 0 37.04 59.689 8.31 0.00 0.00 7.311 + 802 actagctagctgatcatcatctactat 211 27 0 37.04 59.688 22.43 2.36 0.00 7.312 + 803 ctgactgatcgatcatcatgctagc 266 25 0 48.00 62.333 20.99 8.86 41.77 7.333 + 804 gctgactgatcgatcatcatgctag 265 25 0 48.00 62.333 27.72 21.73 41.77 7.333 + 805 ctagctgactgatcgatcatcatgc 262 25 0 48.00 62.333 27.74 27.74 41.77 7.333 + 806 gctagctgactgatcgatcatcatg 261 25 0 48.00 62.333 22.70 19.51 41.77 7.333 + 807 tgctagtagtgatgtatacgtagctag 37 27 0 40.74 60.395 8.99 8.99 0.00 7.395 + 808 agtagtgatgtatacgtagctagtagc 41 27 0 40.74 60.395 15.25 15.25 45.79 7.395 + 809 gctagtagtgatgtatacgtagctagt 38 27 0 40.74 60.395 15.55 15.55 0.00 7.395 + 810 ctagtgatgcatgctagtagtgatgt 26 26 0 42.31 61.460 20.00 0.00 0.00 7.460 + 811 gctgatcatcatctactatcatcatca 219 27 0 37.04 59.533 0.00 0.00 0.00 7.467 + 812 agctagctgactgatcgatcatcat 260 25 0 44.00 62.507 26.31 20.43 41.77 7.507 + 813 tttagctagctgactgatcgatcatc 257 26 0 42.31 61.507 23.93 21.92 36.62 7.507 + 814 catgctagtagtgatgtatacgtag 35 25 0 40.00 57.441 4.74 0.00 0.00 7.559 + 815 agctgatcatcatcgatgctagcta 515 25 0 44.00 62.561 23.50 10.90 43.19 7.561 + 816 tagctgatcatcatcgatgctagct 514 25 0 44.00 62.561 26.21 26.21 44.79 7.561 + 817 agctagctgatcatcatcgatgcta 511 25 0 44.00 62.561 17.99 9.63 40.32 7.561 + 818 tagctagctgatcatcatcgatgct 510 25 0 44.00 62.561 14.14 10.38 40.32 7.561 + 819 gctatttagctagctgactgatcgat 253 26 0 42.31 61.564 7.27 0.00 46.11 7.564 + 820 ctagctagctgactgatcgatcgat 106 25 0 48.00 62.579 30.53 30.53 37.90 7.579 + 821 agctgatcatcatctactatcatcat 218 26 0 34.62 58.415 0.00 0.00 0.00 7.585 + 822 tagctagctactatcatctctgcgc 350 25 0 48.00 62.587 27.80 0.00 0.00 7.587 + 823 gctagctagctactgatcgatgcta 300 25 0 48.00 62.587 34.38 12.23 46.11 7.587 + 824 tgctagtgatgcatgctagtagtga 24 25 0 44.00 62.622 24.96 13.57 35.89 7.622 + 825 tagctgatcgatcgatgctagctag 396 25 0 48.00 62.632 33.71 21.46 41.05 7.632 + 826 ctagctgatcgatcgatgctagcta 395 25 0 48.00 62.632 35.51 32.61 43.05 7.632 + 827 tagctagctgatcgatcgatgctag 392 25 0 48.00 62.632 41.07 41.07 46.89 7.632 + 828 ctagctagctgatcgatcgatgcta 391 25 0 48.00 62.632 34.11 32.56 36.80 7.632 + 829 gtgatgcatgctagtagtgatgtatac 29 27 0 40.74 60.659 9.56 7.17 0.00 7.659 + 830 agctgatcatcatctactatcatcatc 218 27 0 37.04 59.314 0.00 0.00 0.00 7.686 + 831 tagctagctgatcatcatctactat 213 25 0 36.00 57.279 8.31 0.00 0.00 7.721 + 832 tagctagctgatcatcatctactatc 213 26 0 38.46 58.269 8.31 0.00 0.00 7.731 + 833 tgactgatcgatcatcatgctagct 267 25 0 44.00 62.733 26.79 10.55 41.77 7.733 + 834 agctgactgatcgatcatcatgcta 264 25 0 44.00 62.733 30.60 18.10 41.77 7.733 + 835 tagctgactgatcgatcatcatgct 263 25 0 44.00 62.733 32.31 32.31 41.77 7.733 + 836 ctagctagctgatcatcatctactat 212 26 0 38.46 58.265 9.41 0.00 0.00 7.735 + 837 agtgatgcatgctagtagtgatgtata 28 27 0 37.04 60.779 4.23 0.00 0.00 7.779 + 838 tagtgatgcatgctagtagtgatgtat 27 27 0 37.04 60.779 11.56 0.00 0.00 7.779 + 839 tgactgatcgatcgatgctagctag 115 25 0 48.00 62.800 20.19 17.46 35.21 7.800 + 840 ctgactgatcgatcgatgctagcta 114 25 0 48.00 62.800 20.19 11.97 35.21 7.800 + 841 tagctgactgatcgatcgatgctag 111 25 0 48.00 62.800 31.45 26.34 35.21 7.800 + 842 ctagctgactgatcgatcgatgcta 110 25 0 48.00 62.800 31.54 29.68 35.21 7.800 + 843 tagctagctgactgatcgatcgatg 107 25 0 48.00 62.800 28.29 13.21 35.21 7.800 + 844 gactgatcgatcgatgctagctagt 116 25 0 48.00 62.802 22.18 12.64 35.21 7.802 + 845 tactagctagctgatcatcatctacta 210 27 0 37.04 59.196 8.79 8.11 0.00 7.804 + 846 tagctgatcatcgatgctactagcta 193 26 0 42.31 61.805 28.86 27.39 45.92 7.805 + 847 tagctagctgatcatcgatgctacta 189 26 0 42.31 61.805 18.93 16.03 0.00 7.805 + 848 atgcatgctagtagtgatgtatacgta 32 27 0 37.04 60.828 11.70 0.00 0.00 7.828 + 849 tatttagctagctgactgatcgatcat 255 27 0 37.04 60.831 26.67 18.02 36.62 7.831 + 850 ctagctagctgatcatcatctactatc 212 27 0 40.74 59.162 9.41 0.06 0.00 7.838 + 851 tagctactatcatctctgcgcgatc 354 25 0 48.00 62.854 0.00 0.00 0.00 7.854 + 852 gctgatcatcatctactatcatcat 219 25 0 36.00 57.142 0.00 0.00 0.00 7.858 + 853 ctagctactatcatctctgcgcgat 353 25 0 48.00 62.859 4.99 2.52 0.00 7.859 + 854 gctgatcatcatctactatcatcatc 219 26 0 38.46 58.126 0.00 0.00 0.00 7.874 + 855 tagctagctactgatcgatgctacat 302 26 0 42.31 62.028 27.80 3.08 0.00 8.028 + 856 agtagtgatgtatacgtagctagtag 41 26 0 38.46 57.950 9.92 1.30 0.00 8.050 + 857 ctagtagtgatgtatacgtagctagt 39 26 0 38.46 57.950 15.52 15.52 0.00 8.050 + 858 catgctagtagtgatgtatacgtagct 35 27 0 40.74 61.089 9.37 8.73 0.00 8.089 + 859 gactgatcgatcatcatgctagctac 268 26 0 46.15 62.094 24.51 8.36 41.77 8.094 + 860 tagctgatcatcatctactatcatca 217 26 0 34.62 57.906 0.00 0.00 0.00 8.094 + 861 ctagctgatcatcatctactatcatca 216 27 0 37.04 58.826 0.00 0.00 0.00 8.174 + 862 ctagctgatcatcatctagctagtagc 151 27 0 44.44 61.196 21.70 15.25 46.15 8.196 + 863 tagctagctgactgatcgatcatcat 259 26 0 42.31 62.255 28.29 20.43 41.77 8.255 + 864 ctagtgatgcatgctagtagtgatgta 26 27 0 40.74 61.255 20.00 8.84 0.00 8.255 + 865 tgcatgctagtagtgatgtatacgtag 33 27 0 40.74 61.300 20.79 0.00 0.00 8.300 + 866 ctatttagctagctgactgatcgatca 254 27 0 40.74 61.304 26.99 26.99 35.44 8.304 + 867 tagctgatcatcatcgatgctagcta 514 26 0 42.31 62.307 28.23 26.63 43.19 8.307 + 868 tagctagctgatcatcatcgatgcta 510 26 0 42.31 62.307 14.58 11.03 40.32 8.307 + 869 gctagctagctactatcatcgatcga 426 26 0 46.15 62.381 34.38 22.52 46.11 8.381 + 870 gctactagctagctgatcatcatctac 208 27 0 44.44 61.407 14.37 0.00 44.92 8.407 + 871 ttagctagctgactgatcgatcatca 258 26 0 42.31 62.416 28.29 26.49 39.98 8.416 + 872 tgactgatcgatcatcatgctagcta 267 26 0 42.31 62.472 26.79 11.24 41.77 8.472 + 873 tagctgactgatcgatcatcatgcta 263 26 0 42.31 62.472 33.83 32.61 41.77 8.472 + 874 actgatcgatcatcatgctagctact 269 26 0 42.31 62.478 26.67 0.00 41.77 8.478 + 875 gctagtgatgcatgctagtagtgatg 25 26 0 46.15 62.484 24.96 9.07 0.00 8.484 + 876 ctagctagctactgatcgatgctaca 301 26 0 46.15 62.503 14.00 5.87 0.00 8.503 + 877 gactgatcgatcgatgctagctagta 116 26 0 46.15 62.543 22.18 18.77 35.21 8.543 + 878 actgatcgatcgatgctagctagtag 117 26 0 46.15 62.548 23.29 12.42 35.21 8.548 + 879 ctagctgatcatcatctactatcatc 216 26 0 38.46 57.395 0.00 0.00 0.00 8.605 + 880 ctgatcatcatcgatgctagctagtag 517 27 0 44.44 61.665 10.30 1.36 40.32 8.665 + 881 ctactagctagctgatcatcatcgatg 506 27 0 44.44 61.665 20.23 20.23 41.48 8.665 + 882 ctgatcgatcatcatgctagctactag 270 27 0 44.44 61.665 26.67 8.14 41.77 8.665 + 883 tagctgatcatcatctactatcatcat 217 27 0 33.33 58.315 0.00 0.00 0.00 8.685 + 884 tgatgcatgctagtagtgatgtatacg 30 27 0 40.74 61.778 9.81 0.00 0.00 8.778 + 885 gatgcatgctagtagtgatgtatacgt 31 27 0 40.74 61.779 7.40 0.00 0.00 8.779 + 886 gctactagctagctgatcatcatcga 505 26 0 46.15 62.779 14.37 0.00 44.92 8.779 + 887 agctgatcatcgatgctactagctag 194 26 0 46.15 62.784 24.59 20.04 45.92 8.784 + 888 ctagctgatcatcgatgctactagct 192 26 0 46.15 62.784 27.00 27.00 45.92 8.784 + 889 agctagctgatcatcgatgctactag 190 26 0 46.15 62.784 20.13 20.13 0.00 8.784 + 890 ctagctagctgatcatcgatgctact 188 26 0 46.15 62.784 17.55 15.53 0.00 8.784 + 891 atttagctagctgactgatcgatcatc 256 27 0 40.74 61.785 23.93 21.92 36.62 8.785 + 892 tctactatcatcatcatctactagct 230 26 0 34.62 57.155 0.00 0.00 0.00 8.845 + 893 tgctagtgatgcatgctagtagtgat 24 26 0 42.31 62.874 24.96 8.51 35.89 8.874 + 894 ctgatcatcatctactatcatcatca 220 26 0 34.62 57.026 0.00 0.00 0.00 8.974 + 895 agctagctactgatcgatgctacatc 303 26 0 46.15 62.999 17.56 7.89 37.97 8.999 + 896 tagtagtgatgtatacgtagctagtag 40 27 0 37.04 57.869 16.78 1.30 0.00 9.131 + 897 ctagtagtgatgtatacgtagctagta 39 27 0 37.04 57.869 16.85 15.97 0.00 9.131 + 898 actgatcgatcatcatgctagctacta 269 27 0 40.74 62.236 26.67 1.37 41.77 9.236 + 899 gcatgctagtagtgatgtatacgtagc 34 27 0 44.44 62.283 11.60 4.93 0.00 9.283 + 900 gctatttagctagctgactgatcgatc 253 27 0 44.44 62.291 19.32 19.32 46.11 9.291 + 901 atctactatcatcatcatctactagct 229 27 0 33.33 57.592 0.00 0.00 0.00 9.408 + 902 catctactatcatcatcatctactagc 228 27 0 37.04 57.549 0.00 0.00 0.00 9.451 + 903 tgatcatcatctactatcatcatcatc 221 27 0 33.33 57.467 0.00 0.00 0.00 9.533 + 904 tagctgatcatcgatgctactagctag 193 27 0 44.44 62.534 27.70 20.04 45.92 9.534 + 905 ctagctgatcatcgatgctactagcta 192 27 0 44.44 62.534 27.76 26.73 45.92 9.534 + 906 tagctagctgatcatcgatgctactag 189 27 0 44.44 62.534 20.13 20.13 0.00 9.534 + 907 ctagctagctgatcatcgatgctacta 188 27 0 44.44 62.534 17.74 15.95 0.00 9.534 + 908 ctgatcatcatctactatcatcatcat 220 27 0 33.33 57.462 0.00 0.00 0.00 9.538 + 909 gctagctagctactatcatcgatcgat 426 27 0 44.44 62.627 34.38 25.37 46.11 9.627 + 910 ttagctagctgactgatcgatcatcat 258 27 0 40.74 62.665 28.29 20.43 41.77 9.665 + 911 tagctagctactgatcgatgctacatc 302 27 0 44.44 62.742 27.80 7.89 37.97 9.742 + 912 ctagctagctactgatcgatgctacat 301 27 0 44.44 62.747 14.00 2.51 0.00 9.747 + 913 gatcatcatctactatcatcatcatct 222 27 0 33.33 57.242 0.00 0.00 0.00 9.758 + 914 tttagctagctgactgatcgatcatca 257 27 0 40.74 62.820 26.49 26.49 39.98 9.820 + 915 tctactatcatcatcatctactagcta 230 27 0 33.33 57.100 0.00 0.00 0.00 9.900 diff --git a/samples/Formatted/wksst8110.for b/samples/Formatted/wksst8110.for new file mode 100644 index 00000000..1ee1a489 --- /dev/null +++ b/samples/Formatted/wksst8110.for @@ -0,0 +1,1317 @@ + Weekly SST data starts week centered on 3Jan1990 + + Nino1+2 Nino3 Nino34 Nino4 + Week SST SSTA SST SSTA SST SSTA SST SSTA + 03JAN1990 23.4-0.4 25.1-0.3 26.6 0.0 28.6 0.3 + 10JAN1990 23.4-0.8 25.2-0.3 26.6 0.1 28.6 0.3 + 17JAN1990 24.2-0.3 25.3-0.3 26.5-0.1 28.6 0.3 + 24JAN1990 24.4-0.5 25.5-0.4 26.5-0.1 28.4 0.2 + 31JAN1990 25.1-0.2 25.8-0.2 26.7 0.1 28.4 0.2 + 07FEB1990 25.8 0.2 26.1-0.1 26.8 0.1 28.4 0.3 + 14FEB1990 25.9-0.1 26.4 0.0 26.9 0.2 28.5 0.4 + 21FEB1990 26.1-0.1 26.7 0.2 27.1 0.3 28.9 0.8 + 28FEB1990 26.1-0.2 26.7-0.1 27.2 0.3 29.0 0.8 + 07MAR1990 26.7 0.3 26.7-0.2 27.3 0.2 28.9 0.7 + 14MAR1990 26.1-0.4 26.9-0.2 27.3 0.1 28.6 0.4 + 21MAR1990 26.1-0.2 27.2 0.0 27.6 0.3 28.7 0.5 + 28MAR1990 25.7-0.4 27.5 0.2 27.8 0.3 28.8 0.5 + 04APR1990 25.6-0.3 27.6 0.3 27.9 0.4 28.8 0.4 + 11APR1990 25.1-0.6 27.6 0.2 27.9 0.2 28.8 0.3 + 18APR1990 25.3 0.0 27.7 0.2 28.0 0.2 28.9 0.4 + 25APR1990 25.1 0.0 27.7 0.4 28.2 0.4 29.2 0.6 + 02MAY1990 24.6-0.2 27.6 0.3 28.1 0.3 29.0 0.4 + 09MAY1990 24.2-0.2 27.5 0.3 28.1 0.3 28.9 0.2 + 16MAY1990 24.3 0.1 27.4 0.3 28.0 0.2 28.8 0.1 + 23MAY1990 23.7-0.2 27.2 0.2 28.1 0.3 29.0 0.2 + 30MAY1990 23.4-0.1 27.1 0.3 27.9 0.2 28.9 0.1 + 06JUN1990 23.2 0.0 26.7 0.1 27.7 0.0 28.9 0.1 + 13JUN1990 22.8-0.2 26.6 0.1 27.7 0.0 29.0 0.1 + 20JUN1990 22.5-0.1 26.4 0.0 27.5-0.1 29.0 0.1 + 27JUN1990 22.1-0.3 26.0-0.1 27.3-0.2 28.9 0.1 + 04JUL1990 21.7-0.4 25.8-0.2 27.3-0.1 28.9 0.1 + 11JUL1990 21.3-0.5 25.4-0.3 27.2-0.1 28.8 0.0 + 18JUL1990 21.0-0.5 25.7 0.1 27.4 0.2 29.1 0.3 + 25JUL1990 20.2-1.1 25.1-0.4 27.3 0.1 29.1 0.3 + 01AUG1990 20.6-0.6 25.1-0.2 27.1 0.1 29.0 0.3 + 08AUG1990 20.4-0.5 25.2 0.1 27.2 0.3 29.3 0.6 + 15AUG1990 20.4-0.3 25.1 0.1 27.0 0.2 29.2 0.5 + 22AUG1990 19.8-0.7 24.9 0.0 27.0 0.2 29.2 0.5 + 29AUG1990 20.2-0.3 25.0 0.1 26.9 0.2 29.0 0.4 + 05SEP1990 19.7-0.8 24.9 0.0 26.7 0.0 28.9 0.3 + 12SEP1990 20.1-0.3 24.7-0.2 26.7 0.0 29.1 0.4 + 19SEP1990 20.3-0.1 24.9 0.1 26.8 0.0 29.1 0.4 + 26SEP1990 20.3-0.2 24.8-0.1 26.7 0.0 29.0 0.3 + 03OCT1990 20.8 0.1 25.1 0.2 26.9 0.2 29.2 0.5 + 10OCT1990 20.1-0.6 24.9 0.0 27.0 0.3 29.1 0.5 + 17OCT1990 20.3-0.6 24.9 0.0 27.0 0.3 29.3 0.6 + 24OCT1990 20.1-0.9 24.9-0.1 27.0 0.4 29.3 0.6 + 31OCT1990 20.2-1.0 24.7-0.2 26.9 0.2 29.2 0.6 + 07NOV1990 20.5-0.8 25.0 0.1 26.9 0.3 29.1 0.5 + 14NOV1990 20.8-0.8 24.8-0.1 26.7 0.0 29.0 0.4 + 21NOV1990 20.9-0.9 24.6-0.4 26.6 0.0 29.0 0.4 + 28NOV1990 21.5-0.6 24.8-0.3 26.5-0.1 28.9 0.4 + 05DEC1990 22.2-0.2 25.2 0.1 26.9 0.3 29.2 0.7 + 12DEC1990 22.1-0.5 25.0-0.1 26.8 0.3 29.3 0.8 + 19DEC1990 22.2-0.8 24.9-0.3 26.9 0.4 29.2 0.7 + 26DEC1990 23.3 0.0 25.3 0.0 27.0 0.4 29.0 0.6 + 02JAN1991 23.2-0.5 25.3-0.1 26.9 0.4 28.9 0.5 + 09JAN1991 23.5-0.6 25.4-0.1 27.0 0.4 29.1 0.8 + 16JAN1991 23.7-0.7 25.7 0.1 27.0 0.5 29.0 0.8 + 23JAN1991 24.2-0.6 25.8 0.0 27.1 0.5 29.0 0.8 + 30JAN1991 24.7-0.5 26.0 0.0 27.0 0.3 28.9 0.7 + 06FEB1991 25.4-0.2 26.1 0.0 27.0 0.3 28.8 0.6 + 13FEB1991 26.0 0.0 26.3 0.0 27.0 0.3 28.8 0.7 + 20FEB1991 26.5 0.3 26.3-0.2 26.9 0.1 28.7 0.6 + 27FEB1991 26.5 0.2 26.5-0.2 26.8-0.1 28.5 0.4 + 06MAR1991 26.5 0.2 26.6-0.3 26.8-0.2 28.5 0.3 + 13MAR1991 26.8 0.4 27.0-0.1 27.1-0.1 28.5 0.3 + 20MAR1991 26.6 0.2 27.1-0.1 27.4 0.1 28.6 0.4 + 27MAR1991 26.2 0.1 27.4 0.1 27.7 0.3 28.9 0.6 + 03APR1991 25.8-0.1 27.3 0.0 27.8 0.2 28.9 0.5 + 10APR1991 25.2-0.5 27.0-0.4 27.8 0.1 29.1 0.7 + 17APR1991 24.9-0.5 27.5 0.0 28.2 0.4 29.2 0.7 + 24APR1991 24.3-0.8 27.4 0.0 28.1 0.3 29.2 0.6 + 01MAY1991 24.6-0.2 27.6 0.4 28.1 0.3 29.1 0.4 + 08MAY1991 24.4-0.2 27.5 0.3 28.3 0.5 29.3 0.6 + 15MAY1991 24.5 0.2 27.5 0.4 28.4 0.5 29.5 0.7 + 22MAY1991 24.3 0.4 27.7 0.7 28.5 0.7 29.5 0.7 + 29MAY1991 24.2 0.5 27.6 0.8 28.5 0.7 29.5 0.7 + 05JUN1991 23.7 0.4 27.5 0.8 28.3 0.6 29.3 0.5 + 12JUN1991 23.2 0.2 27.4 0.9 28.3 0.6 29.3 0.5 + 19JUN1991 23.0 0.3 27.2 0.9 28.4 0.8 29.4 0.5 + 26JUN1991 22.2-0.2 27.3 1.1 28.4 0.9 29.4 0.6 + 03JUL1991 22.8 0.7 27.0 1.0 28.1 0.7 29.2 0.4 + 10JUL1991 22.3 0.4 26.8 1.0 28.1 0.8 29.2 0.4 + 17JUL1991 21.9 0.3 26.6 1.0 27.9 0.7 29.3 0.5 + 24JUL1991 21.6 0.3 26.2 0.7 27.7 0.5 29.2 0.5 + 31JUL1991 21.6 0.5 26.1 0.8 27.9 0.9 29.5 0.7 + 07AUG1991 21.2 0.3 25.6 0.4 27.5 0.6 29.3 0.6 + 14AUG1991 21.3 0.5 25.4 0.4 27.6 0.7 29.3 0.6 + 21AUG1991 20.9 0.3 25.4 0.5 27.4 0.6 29.3 0.6 + 28AUG1991 20.7 0.2 25.2 0.3 27.0 0.3 29.0 0.3 + 04SEP1991 20.9 0.4 25.1 0.2 27.1 0.3 29.1 0.5 + 11SEP1991 20.7 0.3 24.7-0.1 26.9 0.1 29.0 0.4 + 18SEP1991 20.7 0.3 25.1 0.2 27.2 0.5 29.4 0.7 + 25SEP1991 20.8 0.3 25.2 0.3 27.1 0.4 29.2 0.5 + 02OCT1991 20.8 0.2 25.3 0.4 27.2 0.5 29.3 0.6 + 09OCT1991 21.1 0.4 25.6 0.7 27.7 1.0 29.5 0.8 + 16OCT1991 20.7-0.1 25.5 0.6 27.8 1.1 29.6 1.0 + 23OCT1991 21.2 0.2 25.7 0.8 27.6 0.9 29.4 0.7 + 30OCT1991 21.9 0.7 25.9 1.0 27.8 1.1 29.4 0.8 + 06NOV1991 22.0 0.7 25.8 0.9 27.8 1.1 29.5 0.8 + 13NOV1991 21.9 0.4 25.9 1.0 27.8 1.1 29.5 0.9 + 20NOV1991 22.5 0.7 26.1 1.1 27.9 1.3 29.4 0.8 + 27NOV1991 22.3 0.3 26.1 1.1 28.0 1.4 29.4 0.9 + 04DEC1991 22.8 0.5 26.2 1.1 28.1 1.5 29.4 0.9 + 11DEC1991 23.4 0.8 26.5 1.4 28.3 1.7 29.4 0.9 + 18DEC1991 23.7 0.8 26.6 1.5 28.5 2.0 29.5 1.0 + 25DEC1991 23.6 0.3 26.7 1.4 28.5 1.9 29.6 1.2 + 01JAN1992 24.0 0.3 26.7 1.3 28.5 1.9 29.3 1.0 + 08JAN1992 24.2 0.2 26.8 1.3 28.5 1.9 29.2 0.9 + 15JAN1992 24.6 0.2 26.9 1.3 28.4 1.9 29.1 0.8 + 22JAN1992 25.3 0.5 27.1 1.3 28.4 1.8 29.0 0.7 + 29JAN1992 25.9 0.7 27.4 1.4 28.3 1.7 28.7 0.6 + 05FEB1992 26.3 0.8 27.5 1.3 28.4 1.7 28.8 0.7 + 12FEB1992 26.4 0.5 27.6 1.3 28.6 1.9 29.0 0.9 + 19FEB1992 26.8 0.6 27.8 1.3 28.8 2.0 29.2 1.1 + 26FEB1992 27.3 1.1 27.9 1.2 28.8 1.9 29.1 1.0 + 04MAR1992 27.3 1.0 27.9 1.1 28.6 1.6 29.1 0.9 + 11MAR1992 27.7 1.2 28.1 1.0 28.7 1.6 29.2 1.0 + 18MAR1992 27.9 1.4 28.5 1.3 28.8 1.6 28.9 0.7 + 25MAR1992 28.1 1.9 28.7 1.4 29.0 1.6 29.1 0.8 + 01APR1992 27.9 1.9 28.7 1.3 29.1 1.6 29.4 1.0 + 08APR1992 28.3 2.6 28.8 1.4 29.3 1.6 29.6 1.2 + 15APR1992 28.0 2.5 28.8 1.3 29.2 1.4 29.5 1.0 + 22APR1992 27.1 1.9 28.6 1.2 29.0 1.2 29.3 0.8 + 29APR1992 27.0 2.1 28.8 1.5 29.1 1.2 29.2 0.6 + 06MAY1992 27.0 2.4 28.8 1.6 29.2 1.3 29.4 0.7 + 13MAY1992 26.6 2.3 28.6 1.5 29.1 1.2 29.5 0.8 + 20MAY1992 25.8 1.8 28.2 1.2 29.0 1.1 29.5 0.8 + 27MAY1992 25.9 2.2 28.1 1.3 28.8 1.1 29.5 0.7 + 03JUN1992 24.2 0.9 27.5 0.8 28.6 0.9 29.4 0.6 + 10JUN1992 24.2 1.2 26.8 0.3 28.3 0.6 29.4 0.6 + 17JUN1992 23.9 1.1 26.6 0.2 27.8 0.2 29.2 0.4 + 24JUN1992 23.5 1.0 26.2 0.0 27.6 0.1 29.2 0.4 + 01JUL1992 22.3 0.1 25.8-0.2 27.6 0.1 29.2 0.4 + 08JUL1992 23.0 1.1 26.2 0.4 28.0 0.7 29.5 0.7 + 15JUL1992 21.4-0.3 25.7 0.0 27.7 0.5 29.5 0.7 + 22JUL1992 21.6 0.2 25.1-0.4 27.2 0.0 29.2 0.5 + 29JUL1992 21.5 0.3 24.9-0.5 27.1 0.1 29.2 0.5 + 05AUG1992 20.8-0.2 24.6-0.6 26.7-0.2 29.1 0.4 + 12AUG1992 20.8 0.0 24.9-0.2 26.6-0.3 28.8 0.1 + 19AUG1992 20.3-0.4 24.6-0.4 26.6-0.3 28.8 0.2 + 26AUG1992 20.3-0.3 24.8-0.2 26.7-0.1 28.9 0.3 + 02SEP1992 20.3-0.2 24.4-0.5 26.3-0.4 28.6 0.0 + 09SEP1992 19.7-0.8 24.4-0.5 26.4-0.3 28.7 0.1 + 16SEP1992 20.1-0.2 24.5-0.3 26.5-0.2 28.9 0.2 + 23SEP1992 20.1-0.3 24.6-0.3 26.5-0.2 28.9 0.2 + 30SEP1992 20.2-0.4 24.7-0.2 26.6-0.1 28.7 0.0 + 07OCT1992 20.5-0.2 24.5-0.4 26.4-0.3 28.8 0.1 + 14OCT1992 20.7 0.0 24.6-0.3 26.4-0.3 28.6-0.1 + 21OCT1992 20.9 0.0 24.6-0.4 26.2-0.5 28.8 0.1 + 28OCT1992 21.5 0.4 24.8-0.1 26.2-0.4 28.5-0.1 + 04NOV1992 21.2-0.1 24.7-0.2 26.3-0.4 28.6 0.0 + 11NOV1992 21.2-0.3 24.8-0.1 26.6-0.1 28.8 0.2 + 18NOV1992 21.2-0.5 24.7-0.3 26.4-0.2 28.5-0.1 + 25NOV1992 22.1 0.2 24.9-0.2 26.7 0.0 28.8 0.2 + 02DEC1992 22.2 0.0 24.9-0.2 26.7 0.1 28.9 0.4 + 09DEC1992 22.2-0.3 25.1 0.0 26.8 0.2 28.7 0.2 + 16DEC1992 22.3-0.5 24.9-0.3 26.7 0.1 28.7 0.3 + 23DEC1992 22.5-0.7 25.1-0.2 26.8 0.2 28.9 0.4 + 30DEC1992 23.3-0.2 25.1-0.3 26.6 0.0 28.6 0.2 + 06JAN1993 23.6-0.3 25.4-0.1 26.7 0.1 28.5 0.2 + 13JAN1993 24.4 0.1 25.6 0.0 26.8 0.2 28.7 0.4 + 20JAN1993 24.5-0.2 25.5-0.2 26.6 0.0 28.6 0.3 + 27JAN1993 25.2 0.1 25.8-0.2 26.7 0.0 28.6 0.4 + 03FEB1993 26.2 0.8 26.3 0.2 26.9 0.3 28.5 0.3 + 10FEB1993 26.6 0.7 26.4 0.2 26.8 0.1 28.3 0.2 + 17FEB1993 26.6 0.4 26.9 0.5 27.0 0.2 28.3 0.2 + 24FEB1993 26.6 0.4 26.7 0.1 27.1 0.2 28.5 0.4 + 03MAR1993 26.9 0.6 26.9 0.1 27.2 0.2 28.4 0.3 + 10MAR1993 27.2 0.7 27.3 0.3 27.4 0.3 28.4 0.3 + 17MAR1993 27.1 0.6 27.5 0.3 27.7 0.4 28.6 0.4 + 24MAR1993 27.2 1.0 28.0 0.7 28.0 0.7 28.8 0.5 + 31MAR1993 27.7 1.7 28.3 1.0 28.2 0.7 28.9 0.6 + 07APR1993 26.6 0.9 28.4 1.0 28.3 0.6 28.7 0.3 + 14APR1993 26.3 0.7 28.5 1.0 28.8 1.1 29.0 0.5 + 21APR1993 26.3 1.0 28.4 1.0 28.7 0.9 29.0 0.5 + 28APR1993 26.0 1.1 28.5 1.2 28.8 1.0 29.0 0.4 + 05MAY1993 25.9 1.2 28.5 1.2 28.8 1.0 28.9 0.3 + 12MAY1993 25.6 1.2 28.3 1.2 28.9 1.0 29.1 0.4 + 19MAY1993 24.9 0.8 28.1 1.1 28.8 1.0 29.2 0.4 + 26MAY1993 24.3 0.6 27.9 1.0 28.9 1.1 29.2 0.4 + 02JUN1993 24.5 1.1 27.7 0.9 28.6 0.9 29.2 0.4 + 09JUN1993 23.9 0.7 27.2 0.6 28.3 0.6 29.1 0.2 + 16JUN1993 23.6 0.8 27.1 0.6 28.2 0.6 29.1 0.2 + 23JUN1993 23.8 1.3 26.9 0.7 28.2 0.7 29.3 0.5 + 30JUN1993 23.0 0.7 26.7 0.6 28.1 0.6 29.3 0.5 + 07JUL1993 22.4 0.4 26.1 0.3 27.9 0.6 29.3 0.5 + 14JUL1993 22.2 0.5 25.8 0.1 27.4 0.2 29.2 0.4 + 21JUL1993 22.0 0.6 25.6 0.1 27.5 0.4 29.2 0.4 + 28JUL1993 21.3 0.0 25.3-0.1 27.2 0.1 29.1 0.4 + 04AUG1993 21.2 0.2 25.0-0.3 26.8-0.2 28.9 0.2 + 11AUG1993 20.8 0.0 25.0-0.1 26.9 0.0 29.0 0.3 + 18AUG1993 21.1 0.5 24.8-0.1 26.8 0.0 28.7 0.1 + 25AUG1993 21.2 0.6 24.9 0.0 26.9 0.1 29.1 0.4 + 01SEP1993 20.9 0.4 24.9 0.0 26.9 0.2 29.1 0.4 + 08SEP1993 20.8 0.3 25.0 0.1 26.8 0.1 29.0 0.4 + 15SEP1993 20.8 0.4 24.9 0.0 26.9 0.2 29.1 0.5 + 22SEP1993 21.0 0.5 25.0 0.2 27.0 0.3 29.1 0.4 + 29SEP1993 20.7 0.2 25.1 0.2 27.0 0.3 29.0 0.3 + 06OCT1993 20.6-0.1 25.2 0.3 26.9 0.2 28.8 0.1 + 13OCT1993 20.8 0.0 25.3 0.4 27.0 0.3 29.0 0.3 + 20OCT1993 21.2 0.3 25.0 0.1 26.6 0.0 28.9 0.2 + 27OCT1993 21.3 0.2 25.3 0.4 27.1 0.4 29.0 0.3 + 03NOV1993 22.0 0.8 25.4 0.4 27.2 0.5 29.0 0.3 + 10NOV1993 21.4 0.0 25.1 0.1 26.9 0.2 28.8 0.2 + 17NOV1993 21.7 0.0 25.1 0.2 26.9 0.2 28.9 0.3 + 24NOV1993 21.4-0.5 25.1 0.0 26.7 0.1 29.0 0.5 + 01DEC1993 21.8-0.4 25.3 0.2 26.9 0.3 29.2 0.6 + 08DEC1993 22.1-0.3 25.3 0.2 26.9 0.4 29.0 0.5 + 15DEC1993 23.1 0.4 25.3 0.2 26.8 0.3 28.9 0.4 + 22DEC1993 23.0-0.2 25.3 0.1 26.6 0.1 28.9 0.4 + 29DEC1993 23.3-0.2 25.4 0.0 26.5-0.1 28.6 0.2 + 05JAN1994 23.8 0.0 25.7 0.2 26.7 0.1 28.7 0.3 + 12JAN1994 23.9-0.3 25.7 0.1 26.7 0.2 28.5 0.2 + 19JAN1994 24.6 0.0 25.7-0.1 26.5-0.1 28.5 0.2 + 26JAN1994 24.8-0.2 25.8-0.1 26.5-0.2 28.2 0.0 + 02FEB1994 25.4 0.0 25.9-0.1 26.6 0.0 28.2 0.0 + 09FEB1994 25.9 0.1 26.2 0.0 26.7 0.0 28.1 0.0 + 16FEB1994 25.6-0.5 26.1-0.3 26.6-0.1 28.0 0.0 + 23FEB1994 26.1-0.1 25.9-0.7 26.4-0.5 27.9-0.2 + 02MAR1994 26.2-0.1 26.6-0.2 26.6-0.3 27.9-0.2 + 09MAR1994 25.5-0.9 27.0 0.1 27.2 0.1 28.2 0.1 + 16MAR1994 25.7-0.9 27.0-0.1 27.4 0.2 28.4 0.2 + 23MAR1994 25.0-1.2 26.8-0.4 27.3-0.1 28.3 0.0 + 30MAR1994 24.8-1.3 27.0-0.3 27.7 0.2 28.3 0.0 + 06APR1994 24.9-0.9 27.0-0.4 27.6 0.0 28.5 0.1 + 13APR1994 24.7-0.9 27.2-0.3 28.0 0.2 28.6 0.2 + 20APR1994 24.2-1.1 27.0-0.4 28.0 0.2 28.6 0.1 + 27APR1994 23.4-1.6 27.1-0.2 28.1 0.3 28.7 0.2 + 04MAY1994 23.4-1.3 27.0-0.3 27.9 0.1 28.8 0.1 + 11MAY1994 23.6-0.8 26.8-0.3 27.8 0.0 28.9 0.2 + 18MAY1994 23.0-1.1 27.2 0.1 28.2 0.4 29.0 0.2 + 25MAY1994 23.0-0.8 26.9 0.0 28.1 0.3 29.1 0.3 + 01JUN1994 22.8-0.7 26.9 0.1 28.3 0.5 29.3 0.5 + 08JUN1994 22.7-0.5 26.7 0.1 28.0 0.3 29.1 0.3 + 15JUN1994 22.7-0.1 26.8 0.4 28.2 0.6 29.1 0.3 + 22JUN1994 22.2-0.4 26.2-0.1 27.9 0.3 29.2 0.4 + 29JUN1994 21.7-0.6 25.9-0.2 27.6 0.1 29.2 0.4 + 06JUL1994 21.9-0.1 25.6-0.3 27.4 0.1 29.3 0.5 + 13JUL1994 21.3-0.4 25.2-0.5 27.3 0.1 29.4 0.6 + 20JUL1994 20.9-0.6 25.1-0.4 27.4 0.2 29.5 0.8 + 27JUL1994 20.8-0.5 24.8-0.6 27.2 0.1 29.4 0.6 + 03AUG1994 20.1-1.0 24.5-0.8 27.3 0.3 29.4 0.7 + 10AUG1994 19.2-1.6 24.8-0.3 27.6 0.7 29.5 0.8 + 17AUG1994 19.6-1.1 24.8-0.2 27.4 0.6 29.5 0.9 + 24AUG1994 20.0-0.5 24.8-0.2 27.3 0.5 29.5 0.8 + 31AUG1994 19.6-0.9 24.7-0.2 27.1 0.3 29.4 0.7 + 07SEP1994 20.1-0.4 24.6-0.3 26.9 0.2 29.3 0.6 + 14SEP1994 20.0-0.3 24.6-0.2 26.9 0.1 29.2 0.5 + 21SEP1994 20.5 0.1 24.9 0.0 27.0 0.2 29.2 0.5 + 28SEP1994 20.2-0.3 25.2 0.3 27.2 0.5 29.2 0.6 + 05OCT1994 21.0 0.3 25.4 0.5 27.3 0.6 29.4 0.8 + 12OCT1994 21.7 0.9 25.6 0.7 27.5 0.8 29.4 0.8 + 19OCT1994 21.8 0.9 25.6 0.6 27.5 0.8 29.4 0.8 + 26OCT1994 21.7 0.7 25.6 0.6 27.6 1.0 29.5 0.9 + 02NOV1994 22.1 0.9 25.7 0.7 27.8 1.1 29.6 1.0 + 09NOV1994 22.1 0.7 26.0 1.0 27.9 1.3 29.5 0.9 + 16NOV1994 22.3 0.7 25.8 0.8 27.8 1.1 29.6 1.0 + 23NOV1994 22.8 0.9 25.9 0.9 27.9 1.2 29.7 1.1 + 30NOV1994 22.9 0.7 26.0 0.9 28.0 1.4 29.8 1.3 + 07DEC1994 23.3 0.9 26.0 0.9 27.9 1.3 29.6 1.1 + 14DEC1994 23.4 0.7 25.9 0.8 27.9 1.3 29.5 1.1 + 21DEC1994 23.7 0.6 26.2 1.0 27.9 1.3 29.3 0.9 + 28DEC1994 24.3 0.9 26.3 0.9 27.8 1.3 29.3 0.9 + 04JAN1995 24.7 0.8 26.1 0.7 27.6 1.1 29.3 0.9 + 11JAN1995 25.1 0.9 26.2 0.7 27.6 1.0 29.2 0.9 + 18JAN1995 25.3 0.8 26.4 0.7 27.6 1.0 29.3 1.0 + 25JAN1995 25.9 0.9 26.5 0.6 27.5 0.8 29.1 0.8 + 01FEB1995 26.2 0.9 26.7 0.7 27.4 0.8 29.0 0.9 + 08FEB1995 26.7 0.9 26.9 0.7 27.4 0.7 29.1 1.0 + 15FEB1995 26.5 0.4 26.8 0.4 27.3 0.5 28.9 0.8 + 22FEB1995 26.4 0.2 26.9 0.3 27.5 0.7 29.0 0.9 + 01MAR1995 26.0-0.2 26.9 0.2 27.7 0.7 29.0 0.9 + 08MAR1995 26.0-0.4 26.7-0.2 27.4 0.4 28.9 0.7 + 15MAR1995 26.6 0.1 27.1 0.0 27.7 0.5 29.0 0.9 + 22MAR1995 26.4 0.1 27.2-0.1 27.7 0.3 29.0 0.8 + 29MAR1995 25.4-0.6 27.4 0.1 27.7 0.2 28.8 0.5 + 05APR1995 24.9-1.0 27.2-0.2 27.9 0.3 28.8 0.5 + 12APR1995 24.9-0.7 27.3-0.2 27.8 0.1 28.8 0.4 + 19APR1995 24.6-0.7 27.3-0.2 28.2 0.4 28.9 0.3 + 26APR1995 23.5-1.5 26.6-0.7 27.9 0.1 28.9 0.3 + 03MAY1995 23.3-1.4 26.6-0.6 28.0 0.2 29.2 0.6 + 10MAY1995 23.0-1.4 26.3-0.8 27.7-0.1 29.1 0.4 + 17MAY1995 23.0-1.2 26.2-0.8 27.7-0.2 29.2 0.4 + 24MAY1995 23.2-0.6 26.4-0.5 27.6-0.2 29.1 0.3 + 31MAY1995 22.8-0.7 26.4-0.3 27.7 0.0 29.0 0.2 + 07JUN1995 22.9-0.3 26.4-0.2 27.7 0.0 29.1 0.3 + 14JUN1995 22.9 0.0 26.4-0.1 27.7 0.1 29.1 0.3 + 21JUN1995 21.9-0.7 26.0-0.3 27.5 0.0 28.9 0.1 + 28JUN1995 21.8-0.5 25.8-0.3 27.3-0.1 28.8 0.0 + 05JUL1995 22.0 0.0 25.7-0.2 27.3-0.1 29.0 0.2 + 12JUL1995 21.2-0.5 25.6-0.1 27.1-0.2 28.8 0.0 + 19JUL1995 21.0-0.5 25.3-0.2 26.9-0.3 28.7-0.1 + 26JUL1995 20.8-0.5 25.1-0.3 26.8-0.3 28.6-0.1 + 02AUG1995 20.3-0.8 24.8-0.5 26.7-0.3 28.5-0.2 + 09AUG1995 19.9-1.0 24.3-0.8 26.3-0.6 28.3-0.4 + 16AUG1995 20.0-0.7 24.3-0.7 26.4-0.4 28.5-0.2 + 23AUG1995 19.9-0.7 24.3-0.7 26.3-0.5 28.4-0.2 + 30AUG1995 20.1-0.5 24.0-0.9 25.9-0.8 28.2-0.5 + 06SEP1995 20.4 0.0 24.1-0.8 26.0-0.8 28.2-0.5 + 13SEP1995 19.9-0.5 24.1-0.8 26.0-0.7 28.0-0.6 + 20SEP1995 20.2-0.2 24.0-0.9 26.1-0.7 28.4-0.3 + 27SEP1995 20.2-0.3 23.9-1.0 25.9-0.8 28.4-0.3 + 04OCT1995 19.6-1.0 23.9-1.0 25.6-1.1 28.1-0.5 + 11OCT1995 20.2-0.5 24.1-0.8 25.6-1.1 28.0-0.6 + 18OCT1995 20.0-0.8 24.1-0.9 25.8-0.9 28.2-0.5 + 25OCT1995 20.3-0.7 24.0-0.9 25.6-1.1 27.9-0.8 + 01NOV1995 21.0-0.2 24.1-0.8 25.6-1.0 28.0-0.7 + 08NOV1995 20.6-0.8 23.9-1.1 25.8-0.9 28.1-0.5 + 15NOV1995 21.3-0.2 24.1-0.9 25.7-1.0 27.8-0.8 + 22NOV1995 21.4-0.4 24.1-0.9 25.5-1.1 27.7-0.9 + 29NOV1995 21.6-0.5 24.1-1.0 25.7-0.9 28.1-0.5 + 06DEC1995 21.5-0.9 24.1-1.0 25.6-1.0 27.9-0.6 + 13DEC1995 21.7-1.0 24.0-1.1 25.4-1.2 27.9-0.5 + 20DEC1995 22.0-1.0 24.1-1.1 25.6-1.0 28.1-0.3 + 27DEC1995 22.8-0.6 24.5-0.8 25.7-0.9 28.1-0.3 + 03JAN1996 23.4-0.4 24.6-0.8 25.6-1.0 28.1-0.3 + 10JAN1996 23.6-0.6 24.9-0.6 25.6-1.0 27.9-0.4 + 17JAN1996 24.0-0.5 25.2-0.5 25.9-0.7 27.8-0.5 + 24JAN1996 23.9-1.0 25.0-0.8 25.9-0.7 27.9-0.4 + 31JAN1996 24.6-0.7 25.2-0.8 25.8-0.9 27.8-0.4 + 07FEB1996 25.4-0.3 25.4-0.8 25.6-1.1 27.5-0.6 + 14FEB1996 25.9-0.1 25.7-0.6 25.8-0.9 27.5-0.5 + 21FEB1996 26.0-0.2 25.9-0.6 25.8-1.0 27.4-0.7 + 28FEB1996 26.1-0.2 26.3-0.5 26.3-0.6 27.5-0.6 + 06MAR1996 26.6 0.2 26.5-0.4 26.2-0.8 27.5-0.6 + 13MAR1996 26.1-0.3 26.9-0.2 26.6-0.6 27.7-0.5 + 20MAR1996 26.3-0.1 27.0-0.2 26.8-0.5 27.7-0.5 + 27MAR1996 25.7-0.4 26.7-0.6 26.8-0.6 27.8-0.4 + 03APR1996 24.4-1.5 26.5-0.9 27.0-0.6 27.9-0.5 + 10APR1996 23.9-1.7 27.0-0.4 27.4-0.3 27.9-0.5 + 17APR1996 23.8-1.6 26.8-0.7 27.3-0.4 28.0-0.5 + 24APR1996 23.6-1.5 26.7-0.7 27.6-0.1 28.2-0.3 + 01MAY1996 23.0-1.9 26.4-0.9 27.4-0.4 28.2-0.4 + 08MAY1996 23.0-1.6 26.5-0.7 27.6-0.2 28.4-0.3 + 15MAY1996 23.0-1.3 26.3-0.8 27.3-0.5 28.3-0.4 + 22MAY1996 23.0-0.9 26.2-0.7 27.2-0.6 28.5-0.3 + 29MAY1996 22.6-1.1 26.2-0.6 27.3-0.4 28.6-0.2 + 05JUN1996 22.3-1.0 26.0-0.6 27.3-0.4 28.6-0.3 + 12JUN1996 21.9-1.0 26.0-0.5 27.3-0.4 28.5-0.4 + 19JUN1996 21.4-1.3 25.8-0.6 27.3-0.3 28.4-0.4 + 26JUN1996 20.6-1.8 25.7-0.5 27.3-0.2 28.6-0.2 + 03JUL1996 20.4-1.7 25.9 0.0 27.6 0.2 28.6-0.2 + 10JUL1996 20.1-1.8 25.4-0.3 27.1-0.2 28.5-0.3 + 17JUL1996 20.0-1.6 25.4-0.2 27.1-0.1 28.3-0.5 + 24JUL1996 20.2-1.2 25.1-0.4 26.9-0.2 28.5-0.3 + 31JUL1996 19.2-1.9 24.7-0.6 26.6-0.4 28.4-0.3 + 07AUG1996 19.2-1.7 24.8-0.4 26.7-0.3 28.5-0.2 + 14AUG1996 20.0-0.8 24.6-0.5 26.5-0.4 28.6 0.0 + 21AUG1996 20.1-0.5 24.6-0.3 26.5-0.3 28.6-0.1 + 28AUG1996 18.9-1.6 24.4-0.6 26.5-0.2 28.4-0.3 + 04SEP1996 19.1-1.3 24.3-0.6 26.4-0.4 28.5-0.2 + 11SEP1996 19.4-1.0 24.4-0.5 26.2-0.5 28.3-0.4 + 18SEP1996 19.1-1.3 24.3-0.5 26.4-0.3 28.5-0.2 + 25SEP1996 19.3-1.2 24.4-0.4 26.3-0.4 28.4-0.3 + 02OCT1996 19.5-1.2 24.5-0.4 26.2-0.5 28.3-0.4 + 09OCT1996 19.5-1.3 24.3-0.6 26.2-0.5 28.5-0.2 + 16OCT1996 20.2-0.6 24.4-0.5 26.3-0.3 28.5-0.1 + 23OCT1996 20.5-0.5 24.4-0.6 26.2-0.5 28.3-0.3 + 30OCT1996 20.0-1.1 24.3-0.7 26.1-0.5 28.3-0.3 + 06NOV1996 20.2-1.2 24.4-0.6 26.1-0.5 28.1-0.5 + 13NOV1996 20.1-1.4 24.4-0.6 26.2-0.5 28.3-0.3 + 20NOV1996 20.3-1.5 24.4-0.6 26.3-0.3 28.4-0.1 + 27NOV1996 20.4-1.6 24.3-0.7 26.2-0.4 28.3-0.2 + 04DEC1996 20.8-1.5 24.4-0.7 26.3-0.3 28.5 0.0 + 11DEC1996 21.6-1.0 24.1-1.0 26.1-0.5 28.6 0.1 + 18DEC1996 21.6-1.3 24.2-1.0 25.9-0.6 28.3-0.1 + 25DEC1996 22.1-1.1 24.1-1.1 25.9-0.7 28.3-0.1 + 01JAN1997 22.5-1.2 24.3-1.1 25.8-0.8 28.2-0.2 + 08JAN1997 23.0-1.0 24.5-1.0 25.9-0.6 28.4 0.1 + 15JAN1997 23.6-0.8 24.6-1.0 25.8-0.7 28.4 0.1 + 22JAN1997 24.3-0.5 24.8-1.0 25.9-0.7 28.4 0.2 + 29JAN1997 24.6-0.6 25.1-0.8 26.3-0.4 28.4 0.2 + 05FEB1997 25.3-0.2 25.2-0.9 26.2-0.5 28.4 0.2 + 12FEB1997 25.4-0.6 25.8-0.5 26.4-0.3 28.3 0.2 + 19FEB1997 26.3 0.1 25.9-0.6 26.4-0.4 28.2 0.1 + 26FEB1997 26.2-0.1 26.2-0.4 26.5-0.4 28.2 0.1 + 05MAR1997 26.8 0.5 26.6-0.3 26.6-0.4 28.1 0.0 + 12MAR1997 26.9 0.5 26.8-0.3 26.8-0.4 28.3 0.1 + 19MAR1997 27.0 0.6 27.3 0.1 27.4 0.1 28.5 0.3 + 26MAR1997 27.2 1.0 27.4 0.1 27.3-0.1 28.9 0.7 + 02APR1997 27.0 1.1 27.3-0.1 27.5 0.0 29.2 0.8 + 09APR1997 26.4 0.7 27.3-0.1 27.8 0.2 29.2 0.8 + 16APR1997 26.5 1.1 27.6 0.1 28.0 0.3 29.3 0.8 + 23APR1997 26.6 1.4 27.8 0.4 28.4 0.6 29.5 0.9 + 30APR1997 26.8 1.9 28.0 0.7 28.4 0.6 29.5 0.8 + 07MAY1997 26.8 2.2 28.2 1.0 28.6 0.8 29.4 0.8 + 14MAY1997 26.7 2.4 28.0 0.9 28.5 0.6 29.3 0.6 + 21MAY1997 26.6 2.6 27.9 1.0 28.6 0.8 29.5 0.7 + 28MAY1997 26.8 3.1 28.1 1.3 28.8 1.0 29.5 0.7 + 04JUN1997 26.4 3.1 28.0 1.3 28.8 1.1 29.4 0.6 + 11JUN1997 26.5 3.5 28.1 1.6 28.9 1.2 29.3 0.5 + 18JUN1997 26.0 3.3 28.2 1.8 29.0 1.4 29.4 0.6 + 25JUN1997 26.2 3.7 28.2 2.0 29.1 1.6 29.5 0.7 + 02JUL1997 25.9 3.7 28.1 2.1 29.0 1.5 29.4 0.6 + 09JUL1997 25.7 3.8 28.0 2.2 28.9 1.6 29.5 0.7 + 16JUL1997 25.7 4.1 28.1 2.5 29.0 1.8 29.5 0.7 + 23JUL1997 25.5 4.1 27.9 2.4 28.8 1.7 29.5 0.8 + 30JUL1997 25.2 4.0 27.9 2.6 28.9 1.9 29.5 0.8 + 06AUG1997 25.3 4.3 27.8 2.6 28.8 1.8 29.4 0.7 + 13AUG1997 25.4 4.6 27.9 2.9 28.9 2.0 29.3 0.6 + 20AUG1997 24.2 3.6 27.9 2.9 28.9 2.1 29.2 0.5 + 27AUG1997 24.3 3.7 27.7 2.7 28.8 2.0 29.2 0.5 + 03SEP1997 24.6 4.2 27.8 2.9 28.9 2.1 29.2 0.6 + 10SEP1997 24.6 4.2 27.8 2.9 28.9 2.2 29.3 0.6 + 17SEP1997 24.2 3.8 27.8 2.9 28.9 2.2 29.3 0.6 + 24SEP1997 24.4 3.9 27.9 3.0 28.9 2.2 29.5 0.8 + 01OCT1997 24.1 3.5 28.0 3.1 29.1 2.4 29.4 0.7 + 08OCT1997 24.5 3.8 28.1 3.2 29.2 2.6 29.3 0.6 + 15OCT1997 24.5 3.7 28.1 3.2 29.2 2.5 29.3 0.7 + 22OCT1997 24.9 3.9 28.2 3.3 29.3 2.6 29.5 0.8 + 29OCT1997 24.7 3.6 28.3 3.4 29.2 2.6 29.2 0.6 + 05NOV1997 25.0 3.7 28.4 3.4 29.2 2.6 29.2 0.6 + 12NOV1997 25.8 4.3 28.5 3.6 29.3 2.7 29.5 0.8 + 19NOV1997 25.8 4.1 28.6 3.6 29.3 2.7 29.7 1.1 + 26NOV1997 25.9 3.9 28.7 3.7 29.4 2.8 29.7 1.1 + 03DEC1997 26.2 3.9 28.6 3.6 29.2 2.6 29.4 0.9 + 10DEC1997 26.7 4.2 28.7 3.6 29.2 2.7 29.4 0.9 + 17DEC1997 27.0 4.1 28.8 3.6 29.3 2.7 29.3 0.8 + 24DEC1997 27.2 4.0 28.8 3.5 29.3 2.7 29.3 0.9 + 31DEC1997 27.7 4.1 28.9 3.5 29.2 2.7 29.2 0.8 + 07JAN1998 28.0 4.0 28.9 3.4 29.2 2.6 29.1 0.8 + 14JAN1998 28.4 4.0 28.9 3.3 29.1 2.5 29.0 0.7 + 21JAN1998 28.4 3.7 28.9 3.2 29.0 2.4 28.9 0.7 + 28JAN1998 28.3 3.2 29.1 3.1 29.1 2.4 28.9 0.7 + 04FEB1998 28.9 3.4 29.1 3.0 29.2 2.5 29.0 0.9 + 11FEB1998 28.9 3.0 29.0 2.7 29.0 2.3 29.0 0.9 + 18FEB1998 29.1 3.0 28.8 2.3 28.7 1.9 28.8 0.7 + 25FEB1998 29.1 2.9 28.9 2.2 28.6 1.7 28.8 0.7 + 04MAR1998 29.2 2.8 29.0 2.2 28.5 1.5 28.6 0.4 + 11MAR1998 29.2 2.8 29.1 2.1 28.7 1.6 28.8 0.7 + 18MAR1998 29.2 2.7 29.1 2.0 28.6 1.4 28.6 0.4 + 25MAR1998 29.1 2.8 29.2 2.0 28.8 1.5 28.6 0.4 + 01APR1998 29.1 3.1 29.3 1.9 28.7 1.2 28.6 0.2 + 08APR1998 28.8 3.0 29.2 1.8 28.6 1.0 28.5 0.0 + 15APR1998 28.6 3.1 29.1 1.6 28.4 0.6 28.5 0.0 + 22APR1998 28.4 3.2 29.0 1.6 28.5 0.7 28.5-0.1 + 29APR1998 28.3 3.4 28.9 1.6 28.7 0.8 28.7 0.1 + 06MAY1998 27.8 3.2 29.4 2.1 29.1 1.3 28.7 0.1 + 13MAY1998 28.1 3.8 28.7 1.6 28.8 0.9 28.7-0.1 + 20MAY1998 27.9 3.9 27.6 0.7 28.3 0.5 28.6-0.2 + 27MAY1998 27.0 3.3 27.1 0.2 27.9 0.1 28.8 0.0 + 03JUN1998 26.2 2.8 26.1-0.6 27.1-0.6 28.7-0.1 + 10JUN1998 26.1 3.0 26.2-0.3 26.9-0.8 28.6-0.2 + 17JUN1998 24.6 1.8 25.8-0.6 26.7-1.0 28.7-0.1 + 24JUN1998 24.5 2.0 26.0-0.2 26.4-1.1 28.5-0.3 + 01JUL1998 24.1 1.9 25.7-0.3 26.4-1.1 28.3-0.5 + 08JUL1998 23.6 1.7 25.6-0.2 26.2-1.2 28.2-0.6 + 15JUL1998 23.6 2.0 25.3-0.4 25.9-1.4 28.1-0.7 + 22JUL1998 23.0 1.5 24.9-0.6 25.7-1.4 28.0-0.8 + 29JUL1998 23.2 2.0 24.9-0.5 25.7-1.4 27.8-1.0 + 05AUG1998 22.6 1.7 24.8-0.4 25.6-1.4 27.9-0.8 + 12AUG1998 21.8 1.1 24.6-0.5 25.5-1.4 27.8-0.9 + 19AUG1998 21.3 0.7 24.4-0.6 25.2-1.6 27.6-1.0 + 26AUG1998 21.2 0.7 24.7-0.3 25.6-1.2 27.6-1.0 + 02SEP1998 21.1 0.6 24.5-0.4 25.6-1.2 27.8-0.8 + 09SEP1998 20.9 0.5 24.3-0.6 25.9-0.8 28.3-0.4 + 16SEP1998 21.0 0.7 24.2-0.7 25.7-1.0 28.0-0.7 + 23SEP1998 20.5 0.1 24.1-0.7 25.5-1.2 27.6-1.1 + 30SEP1998 20.9 0.3 23.7-1.2 25.1-1.6 27.2-1.4 + 07OCT1998 20.9 0.2 23.9-1.0 25.3-1.4 27.5-1.2 + 14OCT1998 21.2 0.4 24.1-0.8 25.4-1.3 27.3-1.4 + 21OCT1998 21.1 0.1 24.1-0.8 25.3-1.4 27.2-1.5 + 28OCT1998 21.6 0.5 24.2-0.7 25.5-1.2 27.3-1.3 + 04NOV1998 21.4 0.1 24.4-0.6 25.2-1.5 27.2-1.4 + 11NOV1998 21.0-0.4 24.0-0.9 25.2-1.5 27.2-1.4 + 18NOV1998 21.7 0.0 24.1-0.9 25.2-1.4 27.1-1.5 + 25NOV1998 21.5-0.5 24.0-1.0 25.1-1.5 27.2-1.4 + 02DEC1998 21.7-0.5 23.9-1.2 25.1-1.5 27.3-1.2 + 09DEC1998 22.0-0.5 23.8-1.3 24.8-1.8 27.2-1.2 + 16DEC1998 22.5-0.3 23.9-1.3 24.7-1.8 27.1-1.4 + 23DEC1998 23.3 0.2 23.8-1.4 24.6-1.9 27.0-1.4 + 30DEC1998 23.2-0.4 23.9-1.5 24.7-1.9 26.7-1.7 + 06JAN1999 23.4-0.5 24.1-1.4 24.7-1.9 26.7-1.7 + 13JAN1999 23.7-0.6 24.2-1.4 25.0-1.6 26.8-1.5 + 20JAN1999 23.3-1.4 24.5-1.3 25.0-1.6 26.4-1.8 + 27JAN1999 24.5-0.6 24.9-1.0 25.0-1.6 26.2-2.0 + 03FEB1999 24.8-0.6 25.1-1.0 25.2-1.5 26.6-1.6 + 10FEB1999 25.1-0.7 25.0-1.2 25.2-1.5 26.5-1.6 + 17FEB1999 25.5-0.6 25.5-0.9 25.5-1.3 26.3-1.7 + 24FEB1999 26.8 0.6 26.4-0.2 25.7-1.2 26.4-1.7 + 03MAR1999 27.4 1.1 26.7-0.1 26.1-0.9 26.8-1.3 + 10MAR1999 27.0 0.6 26.6-0.4 26.1-1.0 26.7-1.5 + 17MAR1999 26.4 0.0 26.7-0.4 26.2-1.0 26.9-1.2 + 24MAR1999 26.3 0.0 26.7-0.6 26.5-0.9 27.0-1.2 + 31MAR1999 25.8-0.3 26.6-0.7 26.5-1.0 27.0-1.3 + 07APR1999 24.4-1.3 26.7-0.7 26.7-0.9 27.1-1.3 + 14APR1999 24.6-0.9 26.5-0.9 26.8-0.9 27.3-1.1 + 21APR1999 23.8-1.4 26.7-0.7 27.0-0.8 27.4-1.1 + 28APR1999 23.7-1.3 26.8-0.6 27.0-0.8 27.5-1.1 + 05MAY1999 23.6-1.1 26.6-0.6 27.0-0.8 27.8-0.9 + 12MAY1999 23.7-0.7 26.7-0.4 27.1-0.7 27.9-0.8 + 19MAY1999 23.7-0.4 26.5-0.5 26.9-0.9 27.8-0.9 + 26MAY1999 23.2-0.6 26.1-0.8 26.9-0.9 27.9-0.9 + 02JUN1999 22.5-0.9 25.8-0.9 26.7-1.1 28.0-0.8 + 09JUN1999 22.4-0.8 25.8-0.7 26.6-1.1 27.9-0.9 + 16JUN1999 21.6-1.2 25.6-0.9 26.6-1.1 28.0-0.9 + 23JUN1999 21.3-1.2 25.4-0.8 26.5-1.0 28.0-0.8 + 30JUN1999 21.3-1.0 25.3-0.8 26.6-0.8 28.1-0.7 + 07JUL1999 20.4-1.5 25.2-0.7 26.6-0.7 28.1-0.7 + 14JUL1999 20.4-1.3 24.9-0.7 26.4-0.8 27.8-1.0 + 21JUL1999 20.3-1.1 24.8-0.7 26.2-0.9 27.8-1.0 + 28JUL1999 20.2-1.0 24.4-1.0 26.0-1.0 27.8-0.9 + 04AUG1999 20.2-0.8 24.3-0.9 26.0-1.0 27.8-0.9 + 11AUG1999 19.7-1.1 24.1-1.0 25.6-1.3 27.7-1.0 + 18AUG1999 19.5-1.1 23.9-1.1 25.4-1.4 27.8-0.9 + 25AUG1999 19.7-0.9 24.0-1.0 25.5-1.3 27.6-1.1 + 01SEP1999 19.5-1.0 23.6-1.3 25.4-1.4 27.6-1.0 + 08SEP1999 19.2-1.2 23.7-1.2 25.7-1.1 27.7-0.9 + 15SEP1999 18.9-1.5 23.6-1.3 25.7-1.0 27.7-0.9 + 22SEP1999 19.3-1.2 23.8-1.1 25.8-0.9 27.9-0.7 + 29SEP1999 19.5-1.1 24.0-0.8 25.9-0.8 27.8-0.8 + 06OCT1999 19.7-0.9 23.6-1.3 25.7-1.0 27.9-0.8 + 13OCT1999 20.1-0.7 23.7-1.2 25.8-0.9 28.0-0.6 + 20OCT1999 20.0-1.0 23.7-1.2 25.6-1.0 27.8-0.9 + 27OCT1999 20.6-0.5 23.8-1.1 25.4-1.3 27.7-1.0 + 03NOV1999 20.1-1.2 23.6-1.3 25.4-1.3 27.6-1.0 + 10NOV1999 20.1-1.3 23.7-1.2 25.4-1.3 27.5-1.1 + 17NOV1999 20.6-1.0 23.5-1.5 25.2-1.5 27.6-1.0 + 24NOV1999 20.9-1.1 23.1-1.9 24.7-1.9 27.4-1.1 + 01DEC1999 21.0-1.2 23.1-1.9 24.9-1.7 27.3-1.2 + 08DEC1999 21.1-1.4 23.6-1.5 25.1-1.4 27.3-1.2 + 15DEC1999 21.3-1.4 23.4-1.7 24.9-1.7 27.1-1.4 + 22DEC1999 22.0-1.1 23.8-1.4 24.9-1.6 27.1-1.3 + 29DEC1999 23.0-0.5 23.6-1.8 24.6-1.9 27.2-1.2 + 05JAN2000 23.2-0.6 23.4-2.1 24.5-2.0 27.0-1.3 + 12JAN2000 23.8-0.4 23.9-1.7 24.7-1.9 26.9-1.4 + 19JAN2000 23.7-0.9 24.0-1.7 24.8-1.8 26.9-1.4 + 26JAN2000 24.0-1.0 24.0-1.8 24.6-2.0 26.9-1.3 + 02FEB2000 25.0-0.4 24.7-1.3 24.8-1.9 26.7-1.5 + 09FEB2000 25.1-0.7 25.3-0.9 25.1-1.6 26.6-1.5 + 16FEB2000 25.6-0.5 25.5-0.9 25.4-1.4 26.7-1.4 + 23FEB2000 26.2 0.0 25.4-1.2 25.2-1.6 26.6-1.5 + 01MAR2000 26.4 0.1 25.7-1.0 25.5-1.5 26.5-1.6 + 08MAR2000 26.6 0.2 26.2-0.8 25.7-1.4 26.6-1.5 + 15MAR2000 26.2-0.3 26.5-0.6 26.0-1.2 26.7-1.5 + 22MAR2000 25.3-1.0 26.9-0.3 26.3-1.1 26.7-1.5 + 29MAR2000 25.6-0.5 27.5 0.2 26.8-0.7 27.0-1.3 + 05APR2000 25.7-0.1 27.6 0.2 27.0-0.6 27.2-1.2 + 12APR2000 26.1 0.5 27.4-0.1 26.9-0.8 27.3-1.2 + 19APR2000 25.6 0.3 27.5 0.0 27.0-0.8 27.4-1.1 + 26APR2000 25.3 0.3 27.5 0.1 27.1-0.7 27.5-1.0 + 03MAY2000 24.9 0.2 27.3 0.0 27.1-0.7 27.5-1.1 + 10MAY2000 24.3-0.1 27.2 0.0 27.1-0.7 27.7-1.0 + 17MAY2000 23.9-0.3 26.6-0.4 27.1-0.8 27.8-1.0 + 24MAY2000 23.2-0.6 26.4-0.5 27.1-0.7 28.0-0.8 + 31MAY2000 23.2-0.3 26.3-0.4 27.2-0.5 28.1-0.7 + 07JUN2000 22.6-0.6 26.0-0.7 27.0-0.7 28.0-0.8 + 14JUN2000 22.4-0.5 25.9-0.6 27.1-0.6 28.1-0.7 + 21JUN2000 21.7-0.9 25.8-0.5 27.0-0.6 28.2-0.7 + 28JUN2000 21.4-0.9 25.5-0.6 26.9-0.6 28.0-0.8 + 05JUL2000 21.0-1.0 25.6-0.3 26.9-0.5 28.0-0.8 + 12JUL2000 20.6-1.2 25.2-0.5 26.8-0.5 28.1-0.7 + 19JUL2000 20.3-1.2 24.9-0.6 26.7-0.5 28.2-0.5 + 26JUL2000 20.2-1.1 24.9-0.5 26.5-0.6 28.3-0.4 + 02AUG2000 20.2-0.8 24.7-0.5 26.6-0.4 28.4-0.3 + 09AUG2000 20.1-0.8 24.5-0.6 26.6-0.3 28.4-0.3 + 16AUG2000 20.5-0.2 24.4-0.6 26.4-0.4 28.3-0.3 + 23AUG2000 20.1-0.5 24.3-0.7 26.3-0.5 28.1-0.5 + 30AUG2000 19.3-1.2 24.5-0.4 26.4-0.4 28.2-0.4 + 06SEP2000 20.2-0.3 24.4-0.4 26.3-0.5 28.4-0.2 + 13SEP2000 19.7-0.7 24.3-0.6 26.1-0.6 28.4-0.2 + 20SEP2000 20.1-0.3 24.2-0.6 26.1-0.6 28.5-0.2 + 27SEP2000 19.9-0.6 24.4-0.5 26.3-0.4 28.4-0.3 + 04OCT2000 20.2-0.5 24.7-0.2 26.1-0.6 28.1-0.5 + 11OCT2000 20.2-0.5 24.4-0.5 26.0-0.6 28.2-0.4 + 18OCT2000 20.5-0.3 24.3-0.6 25.9-0.8 28.1-0.5 + 25OCT2000 20.7-0.4 24.3-0.6 25.9-0.8 28.1-0.6 + 01NOV2000 20.6-0.6 24.2-0.8 25.6-1.1 28.0-0.6 + 08NOV2000 20.6-0.8 24.0-1.0 25.6-1.1 28.1-0.6 + 15NOV2000 20.3-1.3 24.2-0.7 25.9-0.7 28.2-0.4 + 22NOV2000 20.2-1.7 24.1-0.9 25.9-0.7 28.1-0.5 + 29NOV2000 21.4-0.7 24.4-0.6 25.9-0.7 27.8-0.7 + 06DEC2000 21.8-0.6 24.4-0.7 25.6-1.0 27.5-1.1 + 13DEC2000 22.4-0.2 24.5-0.6 25.6-1.0 27.6-0.9 + 20DEC2000 22.4-0.6 24.4-0.8 25.6-1.0 27.6-0.8 + 27DEC2000 22.2-1.2 24.4-1.0 25.5-1.0 27.5-0.9 + 03JAN2001 22.8-0.9 24.5-0.9 25.6-1.0 27.5-0.8 + 10JAN2001 23.3-0.8 24.7-0.8 25.6-1.0 27.5-0.9 + 17JAN2001 23.7-0.8 25.1-0.6 25.8-0.8 27.5-0.8 + 24JAN2001 24.6-0.3 25.3-0.5 25.9-0.8 27.4-0.8 + 31JAN2001 25.2 0.0 25.4-0.6 26.0-0.7 27.3-0.9 + 07FEB2001 25.6-0.1 25.8-0.4 25.9-0.8 27.1-1.0 + 14FEB2001 25.6-0.4 25.9-0.5 26.0-0.7 27.2-0.9 + 21FEB2001 26.0-0.2 26.4-0.1 26.3-0.6 27.3-0.8 + 28FEB2001 26.7 0.4 26.7 0.0 26.4-0.5 27.4-0.8 + 07MAR2001 27.2 0.8 27.1 0.2 26.6-0.5 27.4-0.7 + 14MAR2001 27.3 0.8 27.2 0.1 26.8-0.4 27.6-0.6 + 21MAR2001 27.6 1.3 27.4 0.2 27.1-0.2 27.7-0.6 + 28MAR2001 27.7 1.6 27.4 0.2 27.0-0.4 27.8-0.5 + 04APR2001 27.3 1.5 27.6 0.2 27.3-0.3 27.9-0.4 + 11APR2001 27.2 1.6 27.7 0.3 27.6-0.1 28.1-0.3 + 18APR2001 26.2 0.8 27.7 0.2 27.7-0.1 28.3-0.2 + 25APR2001 25.9 0.8 27.2-0.1 27.6-0.2 28.2-0.3 + 02MAY2001 24.2-0.6 27.1-0.2 27.5-0.3 28.3-0.3 + 09MAY2001 23.9-0.6 27.0-0.1 27.6-0.2 28.6-0.1 + 16MAY2001 23.6-0.6 26.7-0.4 27.5-0.3 28.6-0.1 + 23MAY2001 23.3-0.6 26.9-0.1 27.7-0.1 28.8 0.0 + 30MAY2001 23.1-0.5 26.7 0.0 27.7-0.1 28.8 0.0 + 06JUN2001 22.1-1.2 26.7 0.1 27.8 0.1 28.8 0.0 + 13JUN2001 21.7-1.3 26.3-0.1 27.7 0.0 28.8 0.0 + 20JUN2001 21.5-1.2 26.3 0.0 27.7 0.1 28.8-0.1 + 27JUN2001 20.7-1.6 25.9-0.2 27.6 0.1 28.9 0.1 + 04JUL2001 20.7-1.4 25.6-0.3 27.5 0.1 29.0 0.2 + 11JUL2001 21.2-0.6 25.5-0.2 27.4 0.1 29.0 0.2 + 18JUL2001 20.9-0.7 25.5-0.1 27.3 0.1 29.1 0.3 + 25JUL2001 20.7-0.6 25.2-0.2 27.2 0.1 29.1 0.3 + 01AUG2001 20.3-0.8 25.0-0.3 27.2 0.1 29.1 0.4 + 08AUG2001 20.1-0.8 25.0-0.1 27.0 0.1 28.9 0.2 + 15AUG2001 19.8-0.9 24.7-0.3 26.8 0.0 28.9 0.2 + 22AUG2001 19.8-0.8 24.6-0.3 26.8 0.0 28.9 0.2 + 29AUG2001 19.7-0.9 24.3-0.6 26.6-0.2 29.0 0.4 + 05SEP2001 19.6-0.8 24.4-0.5 26.6-0.1 29.2 0.5 + 12SEP2001 19.1-1.3 24.2-0.7 26.6-0.2 29.1 0.4 + 19SEP2001 19.4-1.0 24.2-0.6 26.5-0.2 29.2 0.5 + 26SEP2001 19.6-0.9 24.3-0.6 26.5-0.2 29.1 0.4 + 03OCT2001 19.2-1.4 24.4-0.5 26.5-0.2 28.9 0.3 + 10OCT2001 19.6-1.1 24.4-0.5 26.5-0.2 29.0 0.4 + 17OCT2001 19.4-1.4 24.5-0.4 26.6 0.0 29.0 0.3 + 24OCT2001 19.6-1.4 24.5-0.4 26.6 0.0 29.1 0.4 + 31OCT2001 19.9-1.3 24.5-0.5 26.6 0.0 28.9 0.3 + 07NOV2001 20.3-1.1 24.3-0.7 26.6-0.1 29.1 0.5 + 14NOV2001 20.1-1.5 24.3-0.7 26.5-0.1 29.0 0.4 + 21NOV2001 20.6-1.2 24.3-0.7 26.3-0.3 28.8 0.2 + 28NOV2001 21.4-0.7 24.4-0.6 26.3-0.3 28.7 0.2 + 05DEC2001 21.4-1.0 24.5-0.6 26.1-0.5 28.6 0.1 + 12DEC2001 21.6-1.1 24.5-0.7 26.1-0.4 28.6 0.1 + 19DEC2001 22.0-0.9 24.6-0.5 26.2-0.4 28.5 0.0 + 26DEC2001 22.5-0.8 24.8-0.5 26.2-0.3 28.6 0.2 + 02JAN2002 23.2-0.5 24.8-0.7 26.2-0.4 28.6 0.2 + 09JAN2002 23.3-0.8 25.0-0.5 26.5-0.1 28.8 0.5 + 16JAN2002 23.5-1.0 25.0-0.7 26.4-0.1 28.9 0.6 + 23JAN2002 23.8-1.1 25.3-0.5 26.6 0.0 28.9 0.6 + 30JAN2002 24.3-0.9 25.5-0.5 26.7 0.1 28.7 0.6 + 06FEB2002 25.4-0.2 26.0-0.2 26.9 0.3 28.8 0.7 + 13FEB2002 25.9-0.1 26.2-0.2 27.0 0.3 28.9 0.8 + 20FEB2002 26.3 0.1 26.4-0.1 26.8 0.0 28.6 0.5 + 27FEB2002 27.4 1.1 26.7 0.0 27.1 0.1 28.6 0.5 + 06MAR2002 27.1 0.8 27.1 0.2 27.2 0.1 28.5 0.4 + 13MAR2002 27.6 1.2 27.2 0.1 27.3 0.1 28.6 0.4 + 20MAR2002 27.8 1.4 27.3 0.1 27.4 0.1 28.8 0.6 + 27MAR2002 27.4 1.3 27.4 0.2 27.4 0.0 28.7 0.5 + 03APR2002 27.1 1.2 27.6 0.2 27.7 0.2 28.8 0.5 + 10APR2002 27.1 1.5 27.8 0.4 28.0 0.3 29.0 0.6 + 17APR2002 26.3 0.9 27.6 0.1 27.9 0.2 29.1 0.6 + 24APR2002 25.4 0.3 27.3 0.0 28.0 0.2 29.3 0.7 + 01MAY2002 25.4 0.6 27.4 0.1 28.0 0.2 29.2 0.6 + 08MAY2002 25.0 0.5 27.3 0.1 28.0 0.2 29.2 0.5 + 15MAY2002 24.5 0.2 27.2 0.1 28.0 0.1 29.4 0.6 + 22MAY2002 24.4 0.5 27.1 0.2 28.3 0.4 29.6 0.8 + 29MAY2002 24.5 0.9 27.4 0.5 28.4 0.7 29.7 0.9 + 05JUN2002 23.5 0.2 27.3 0.6 28.6 0.9 29.8 1.0 + 12JUN2002 22.7-0.3 27.1 0.6 28.6 0.9 29.7 0.9 + 19JUN2002 22.1-0.6 27.0 0.6 28.4 0.8 29.6 0.8 + 26JUN2002 22.0-0.4 26.9 0.8 28.2 0.7 29.4 0.6 + 03JUL2002 21.8-0.3 26.6 0.6 28.0 0.6 29.4 0.6 + 10JUL2002 21.1-0.8 26.3 0.5 28.0 0.7 29.4 0.6 + 17JUL2002 21.2-0.4 26.0 0.4 28.0 0.8 29.5 0.7 + 24JUL2002 20.5-0.8 25.7 0.2 27.9 0.8 29.5 0.8 + 31JUL2002 20.3-0.8 25.5 0.2 27.9 0.9 29.6 0.9 + 07AUG2002 20.0-0.9 25.3 0.1 27.8 0.9 29.4 0.7 + 14AUG2002 20.3-0.4 25.5 0.5 27.8 0.9 29.4 0.7 + 21AUG2002 19.8-0.8 25.5 0.5 27.8 1.0 29.3 0.7 + 28AUG2002 19.8-0.7 25.6 0.7 27.8 1.0 29.4 0.7 + 04SEP2002 19.3-1.2 25.4 0.5 27.7 0.9 29.3 0.7 + 11SEP2002 20.2-0.2 25.5 0.6 27.8 1.0 29.4 0.7 + 18SEP2002 20.1-0.3 25.5 0.7 27.9 1.2 29.5 0.9 + 25SEP2002 20.1-0.4 25.7 0.8 27.9 1.2 29.5 0.8 + 02OCT2002 20.1-0.5 25.7 0.8 28.0 1.3 29.5 0.8 + 09OCT2002 20.7 0.0 25.6 0.7 27.9 1.2 29.4 0.7 + 16OCT2002 21.7 0.9 25.7 0.8 27.9 1.2 29.4 0.7 + 23OCT2002 21.6 0.6 26.0 1.1 28.2 1.6 29.8 1.2 + 30OCT2002 21.9 0.7 26.3 1.4 28.3 1.7 29.9 1.2 + 06NOV2002 22.0 0.6 26.2 1.3 28.2 1.6 29.8 1.2 + 13NOV2002 21.9 0.4 26.3 1.4 28.3 1.7 29.9 1.3 + 20NOV2002 22.5 0.7 26.5 1.5 28.3 1.7 29.9 1.3 + 27NOV2002 22.6 0.6 26.4 1.4 28.2 1.6 29.7 1.2 + 04DEC2002 23.0 0.7 26.6 1.6 28.2 1.6 29.6 1.0 + 11DEC2002 23.5 0.9 26.5 1.4 28.1 1.5 29.4 1.0 + 18DEC2002 23.3 0.4 26.5 1.3 28.1 1.5 29.4 1.0 + 25DEC2002 23.5 0.2 26.3 1.0 28.0 1.4 29.5 1.1 + 01JAN2003 24.2 0.6 26.6 1.2 28.1 1.5 29.4 1.1 + 08JAN2003 23.9-0.1 26.3 0.8 27.9 1.3 29.2 0.9 + 15JAN2003 24.1-0.3 26.3 0.7 27.7 1.2 29.3 1.0 + 22JAN2003 24.4-0.4 26.5 0.7 27.7 1.1 29.3 1.0 + 29JAN2003 24.9-0.3 26.3 0.3 27.5 0.8 29.1 0.9 + 05FEB2003 25.3-0.3 26.4 0.3 27.3 0.6 28.9 0.7 + 12FEB2003 25.7-0.3 26.6 0.3 27.4 0.7 28.9 0.9 + 19FEB2003 26.2 0.0 27.0 0.6 27.7 0.9 29.1 1.0 + 26FEB2003 26.0-0.3 26.8 0.1 27.6 0.7 29.2 1.1 + 05MAR2003 25.7-0.7 27.0 0.2 27.6 0.6 29.0 0.9 + 12MAR2003 25.7-0.8 27.2 0.1 27.7 0.6 29.0 0.8 + 19MAR2003 26.5 0.1 27.6 0.4 28.0 0.8 29.1 0.9 + 26MAR2003 25.5-0.7 27.4 0.2 27.9 0.5 29.0 0.7 + 02APR2003 25.7-0.3 27.2-0.1 27.8 0.3 28.9 0.6 + 09APR2003 24.8-0.9 27.3-0.1 27.8 0.2 29.0 0.6 + 16APR2003 24.3-1.1 27.3-0.2 27.9 0.1 28.9 0.5 + 23APR2003 23.6-1.6 27.2-0.2 27.8 0.0 28.9 0.4 + 30APR2003 23.2-1.6 26.5-0.8 27.7-0.1 28.9 0.3 + 07MAY2003 23.0-1.6 26.3-0.9 27.4-0.4 28.9 0.2 + 14MAY2003 22.5-1.8 26.2-0.9 27.3-0.5 28.8 0.1 + 21MAY2003 22.3-1.7 26.0-1.0 27.3-0.6 28.8 0.1 + 28MAY2003 22.0-1.6 26.0-0.9 27.4-0.4 29.0 0.2 + 04JUN2003 21.9-1.4 25.7-0.9 27.4-0.3 29.0 0.2 + 11JUN2003 21.6-1.5 25.7-0.8 27.4-0.2 29.1 0.2 + 18JUN2003 21.1-1.6 25.9-0.5 27.5-0.1 29.1 0.3 + 25JUN2003 21.6-0.8 25.9-0.2 27.6 0.0 29.1 0.3 + 02JUL2003 21.4-0.7 25.9-0.1 27.5 0.1 29.2 0.4 + 09JUL2003 21.1-0.8 25.9 0.0 27.6 0.3 29.2 0.4 + 16JUL2003 20.8-0.8 25.8 0.1 27.5 0.3 29.1 0.3 + 23JUL2003 20.2-1.2 25.7 0.2 27.3 0.2 29.1 0.3 + 30JUL2003 20.3-0.9 25.5 0.2 27.1 0.1 29.0 0.3 + 06AUG2003 20.2-0.8 25.3 0.1 27.0 0.0 29.0 0.3 + 13AUG2003 20.0-0.8 25.0 0.0 26.9 0.1 29.1 0.5 + 20AUG2003 20.6 0.0 24.9-0.1 26.7-0.1 29.0 0.4 + 27AUG2003 20.0-0.5 24.8-0.2 26.7-0.1 29.0 0.3 + 03SEP2003 20.4-0.1 25.0 0.1 26.9 0.1 29.0 0.3 + 10SEP2003 19.9-0.5 24.8-0.1 26.8 0.0 28.9 0.2 + 17SEP2003 19.5-0.8 25.0 0.1 26.9 0.2 28.9 0.3 + 24SEP2003 20.5 0.0 25.0 0.2 27.1 0.4 29.1 0.5 + 01OCT2003 20.1-0.5 25.3 0.4 27.3 0.6 29.1 0.4 + 08OCT2003 20.9 0.2 25.5 0.6 27.4 0.7 29.1 0.5 + 15OCT2003 20.9 0.1 25.2 0.3 27.1 0.4 29.1 0.5 + 22OCT2003 21.5 0.6 25.3 0.3 27.1 0.4 29.3 0.6 + 29OCT2003 21.4 0.3 25.4 0.4 27.2 0.5 29.3 0.7 + 05NOV2003 21.6 0.3 25.3 0.4 27.0 0.4 29.4 0.7 + 12NOV2003 21.8 0.3 25.3 0.4 26.9 0.3 29.3 0.7 + 19NOV2003 22.0 0.3 25.4 0.4 27.1 0.4 29.3 0.7 + 26NOV2003 22.3 0.3 25.5 0.5 27.2 0.5 29.2 0.6 + 03DEC2003 22.5 0.2 25.6 0.5 27.1 0.5 29.2 0.6 + 10DEC2003 22.9 0.3 25.5 0.4 27.0 0.4 29.1 0.6 + 17DEC2003 23.0 0.1 25.4 0.3 26.8 0.3 29.0 0.5 + 24DEC2003 23.0-0.2 25.6 0.3 26.8 0.2 28.9 0.4 + 31DEC2003 23.8 0.2 25.7 0.4 26.7 0.1 28.7 0.4 + 07JAN2004 24.2 0.2 25.7 0.2 26.6 0.0 28.7 0.3 + 14JAN2004 24.6 0.2 25.9 0.3 26.6 0.0 28.9 0.6 + 21JAN2004 24.8 0.0 26.0 0.3 27.0 0.4 28.9 0.7 + 28JAN2004 24.7-0.4 26.1 0.1 26.9 0.2 28.8 0.6 + 04FEB2004 25.0-0.5 26.0-0.1 26.8 0.1 28.7 0.6 + 11FEB2004 25.4-0.5 26.4 0.1 26.8 0.1 28.5 0.4 + 18FEB2004 26.1 0.0 26.7 0.2 26.9 0.1 28.5 0.4 + 25FEB2004 26.3 0.1 26.7 0.1 27.0 0.1 28.5 0.4 + 03MAR2004 25.8-0.6 26.7-0.1 26.9-0.1 28.5 0.4 + 10MAR2004 25.4-1.0 27.1 0.1 26.9-0.2 28.3 0.1 + 17MAR2004 25.6-0.8 27.4 0.2 27.1-0.1 28.3 0.1 + 24MAR2004 26.0-0.3 27.4 0.1 27.3-0.1 28.4 0.2 + 31MAR2004 26.1 0.1 27.4 0.1 27.5 0.0 28.5 0.2 + 07APR2004 26.0 0.2 27.4 0.0 27.7 0.1 28.6 0.2 + 14APR2004 25.2-0.3 27.4 0.0 27.8 0.1 28.7 0.2 + 21APR2004 24.8-0.4 27.4 0.0 28.0 0.2 28.8 0.3 + 28APR2004 24.1-0.9 27.2-0.1 28.1 0.3 28.9 0.3 + 05MAY2004 23.6-1.0 26.7-0.5 27.9 0.1 29.0 0.3 + 12MAY2004 23.1-1.3 26.6-0.6 28.0 0.1 29.0 0.3 + 19MAY2004 22.8-1.3 26.8-0.3 28.2 0.4 29.2 0.4 + 26MAY2004 22.7-1.0 26.7-0.2 28.1 0.3 29.4 0.6 + 02JUN2004 22.1-1.4 26.7 0.0 28.1 0.3 29.2 0.4 + 09JUN2004 21.7-1.4 26.6 0.0 28.0 0.3 29.2 0.4 + 16JUN2004 21.5-1.3 26.4-0.1 27.8 0.1 29.2 0.4 + 23JUN2004 21.3-1.2 26.0-0.3 27.5 0.0 29.1 0.2 + 30JUN2004 21.0-1.2 25.6-0.4 27.3-0.1 29.1 0.3 + 07JUL2004 20.8-1.2 25.4-0.4 27.6 0.3 29.4 0.6 + 14JUL2004 20.9-0.8 25.5-0.2 27.7 0.4 29.4 0.6 + 21JUL2004 20.7-0.7 25.2-0.3 27.7 0.6 29.4 0.7 + 28JUL2004 20.3-0.9 25.4 0.0 27.9 0.8 29.4 0.6 + 04AUG2004 19.9-1.1 25.2 0.0 27.8 0.8 29.4 0.7 + 11AUG2004 19.7-1.1 25.1 0.0 27.6 0.7 29.2 0.6 + 18AUG2004 19.6-1.0 24.9 0.0 27.4 0.6 29.2 0.5 + 25AUG2004 19.2-1.4 24.9 0.0 27.4 0.7 29.3 0.7 + 01SEP2004 20.1-0.4 25.0 0.1 27.4 0.7 29.6 0.9 + 08SEP2004 19.8-0.6 25.0 0.1 27.4 0.6 29.6 0.9 + 15SEP2004 19.8-0.5 25.1 0.3 27.5 0.7 29.6 0.9 + 22SEP2004 20.4-0.1 25.3 0.4 27.6 0.9 29.6 0.9 + 29SEP2004 20.5-0.1 25.4 0.5 27.5 0.8 29.5 0.8 + 06OCT2004 20.8 0.1 25.2 0.4 27.4 0.7 29.5 0.8 + 13OCT2004 20.5-0.2 25.2 0.3 27.3 0.6 29.4 0.8 + 20OCT2004 21.4 0.5 25.4 0.5 27.4 0.7 29.6 1.0 + 27OCT2004 21.3 0.2 25.4 0.5 27.4 0.7 29.7 1.0 + 03NOV2004 21.5 0.3 25.4 0.5 27.3 0.6 29.6 1.0 + 10NOV2004 22.0 0.5 25.5 0.5 27.3 0.6 29.5 0.9 + 17NOV2004 22.2 0.5 25.5 0.5 27.3 0.7 29.6 1.0 + 24NOV2004 21.9 0.0 25.4 0.4 27.3 0.7 29.5 1.0 + 01DEC2004 22.4 0.2 25.6 0.6 27.4 0.8 29.4 0.9 + 08DEC2004 22.3-0.2 25.7 0.6 27.4 0.8 29.4 0.8 + 15DEC2004 22.9 0.2 25.8 0.6 27.3 0.7 29.2 0.8 + 22DEC2004 22.9-0.2 25.9 0.6 27.3 0.7 29.5 1.1 + 29DEC2004 23.6 0.2 25.8 0.5 27.2 0.6 29.5 1.1 + 05JAN2005 23.7-0.2 25.7 0.3 27.1 0.5 29.3 0.9 + 12JAN2005 24.2 0.0 25.9 0.3 27.1 0.5 29.2 0.9 + 19JAN2005 25.0 0.3 26.0 0.3 27.1 0.5 29.2 0.9 + 26JAN2005 24.9-0.1 26.0 0.1 27.1 0.5 29.2 1.0 + 02FEB2005 24.6-0.8 25.9-0.2 26.9 0.2 29.0 0.8 + 09FEB2005 25.1-0.6 26.2-0.1 27.0 0.3 28.8 0.7 + 16FEB2005 25.8-0.3 26.4 0.0 27.0 0.3 28.8 0.7 + 23FEB2005 25.7-0.5 26.3-0.3 27.0 0.1 28.7 0.6 + 02MAR2005 25.2-1.1 26.2-0.6 27.0 0.0 28.8 0.6 + 09MAR2005 25.9-0.5 26.7-0.2 27.2 0.1 28.8 0.6 + 16MAR2005 25.9-0.6 27.3 0.2 27.6 0.4 29.0 0.8 + 23MAR2005 25.0-1.3 27.3 0.0 27.9 0.5 28.9 0.7 + 30MAR2005 24.9-1.1 27.4 0.1 28.0 0.5 29.0 0.7 + 06APR2005 24.8-1.0 27.4 0.0 28.0 0.4 28.9 0.5 + 13APR2005 24.6-0.9 27.7 0.2 27.9 0.1 28.8 0.3 + 20APR2005 24.8-0.5 27.9 0.5 28.2 0.4 28.9 0.4 + 27APR2005 25.4 0.4 28.1 0.8 28.3 0.5 29.1 0.5 + 04MAY2005 25.2 0.5 28.1 0.9 28.3 0.4 29.1 0.4 + 11MAY2005 24.6 0.2 27.6 0.5 28.2 0.4 29.1 0.3 + 18MAY2005 24.5 0.4 27.4 0.3 28.2 0.4 29.3 0.5 + 25MAY2005 23.5-0.3 27.1 0.2 28.2 0.4 29.2 0.4 + 01JUN2005 23.0-0.5 26.8 0.0 28.1 0.3 29.2 0.4 + 08JUN2005 22.6-0.5 26.9 0.3 28.1 0.4 29.2 0.4 + 15JUN2005 22.3-0.5 26.8 0.3 28.1 0.4 29.2 0.4 + 22JUN2005 22.2-0.3 26.9 0.6 28.0 0.5 29.1 0.3 + 29JUN2005 21.6-0.7 26.7 0.6 28.0 0.5 29.1 0.3 + 06JUL2005 21.5-0.5 26.3 0.4 27.8 0.4 29.2 0.4 + 13JUL2005 21.5-0.3 26.2 0.5 27.6 0.3 29.1 0.3 + 20JUL2005 20.7-0.8 25.8 0.2 27.3 0.2 29.0 0.2 + 27JUL2005 20.8-0.5 25.4 0.0 27.1 0.1 28.9 0.1 + 03AUG2005 20.8-0.2 25.2-0.1 26.9-0.1 28.8 0.1 + 10AUG2005 20.6-0.2 25.2 0.1 26.9 0.0 28.7 0.0 + 17AUG2005 20.4-0.2 25.4 0.4 27.0 0.2 28.9 0.2 + 24AUG2005 20.8 0.3 25.2 0.3 26.9 0.1 28.9 0.3 + 31AUG2005 20.4-0.1 24.8-0.1 26.7-0.1 28.9 0.2 + 07SEP2005 20.0-0.5 24.5-0.3 26.5-0.3 28.7 0.1 + 14SEP2005 19.7-0.7 24.5-0.4 26.4-0.3 28.7 0.0 + 21SEP2005 19.6-0.9 24.7-0.2 26.8 0.1 28.9 0.3 + 28SEP2005 19.6-0.9 24.5-0.4 26.7 0.0 28.9 0.3 + 05OCT2005 19.4-1.2 24.6-0.3 26.9 0.2 29.0 0.3 + 12OCT2005 20.0-0.8 24.9 0.0 26.9 0.2 28.9 0.3 + 19OCT2005 19.8-1.1 24.7-0.2 26.7 0.0 28.8 0.2 + 26OCT2005 19.9-1.2 24.7-0.2 26.6-0.1 28.8 0.1 + 02NOV2005 19.8-1.4 24.3-0.7 26.5-0.2 28.7 0.1 + 09NOV2005 20.2-1.2 24.2-0.7 26.3-0.4 28.6 0.0 + 16NOV2005 21.0-0.6 24.3-0.7 26.5-0.2 28.6 0.0 + 23NOV2005 21.2-0.7 24.3-0.7 26.3-0.3 28.7 0.1 + 30NOV2005 21.2-0.9 24.2-0.9 26.1-0.5 28.6 0.1 + 07DEC2005 21.4-1.1 24.1-1.0 26.0-0.6 28.6 0.0 + 14DEC2005 21.8-0.9 24.0-1.1 25.8-0.7 28.5 0.0 + 21DEC2005 23.1 0.1 24.3-0.9 25.8-0.8 28.1-0.3 + 28DEC2005 23.3-0.2 24.7-0.6 25.9-0.7 28.0-0.4 + 04JAN2006 23.4-0.4 25.0-0.5 25.8-0.7 27.9-0.5 + 11JAN2006 24.2 0.0 25.0-0.6 25.7-0.9 27.8-0.5 + 18JAN2006 24.3-0.2 24.8-0.9 25.5-1.1 27.6-0.7 + 25JAN2006 24.8-0.1 25.1-0.8 25.5-1.1 27.4-0.8 + 01FEB2006 25.0-0.3 25.5-0.6 25.8-0.9 27.4-0.7 + 08FEB2006 25.9 0.2 25.8-0.4 26.0-0.7 27.3-0.9 + 15FEB2006 27.1 1.0 26.3 0.0 26.1-0.6 27.3-0.8 + 22FEB2006 26.8 0.6 26.4-0.2 26.3-0.5 27.4-0.7 + 01MAR2006 27.0 0.7 26.2-0.6 26.1-0.9 27.4-0.7 + 08MAR2006 26.9 0.5 26.5-0.4 26.4-0.7 27.6-0.6 + 15MAR2006 26.7 0.2 26.5-0.6 26.5-0.7 27.7-0.5 + 22MAR2006 26.6 0.3 26.6-0.6 26.7-0.6 28.0-0.3 + 29MAR2006 26.0-0.1 26.8-0.5 27.0-0.5 28.1-0.2 + 05APR2006 24.9-0.9 27.1-0.3 27.3-0.3 28.1-0.2 + 12APR2006 24.0-1.5 27.6 0.1 27.7 0.0 28.3-0.1 + 19APR2006 23.4-2.0 27.2-0.2 27.7-0.1 28.4-0.1 + 26APR2006 23.1-1.9 27.2-0.2 27.7-0.1 28.5 0.0 + 03MAY2006 23.9-0.8 27.2-0.1 27.7-0.1 28.6-0.1 + 10MAY2006 24.1-0.4 27.1 0.0 27.8 0.0 28.8 0.1 + 17MAY2006 23.8-0.3 27.1 0.0 28.1 0.2 29.1 0.3 + 24MAY2006 23.5-0.3 26.9 0.0 28.0 0.2 29.0 0.2 + 31MAY2006 23.4-0.1 26.8 0.0 28.0 0.3 29.2 0.4 + 07JUN2006 22.6-0.6 26.6 0.0 28.0 0.3 29.2 0.4 + 14JUN2006 22.8-0.1 26.5 0.1 27.9 0.3 29.2 0.3 + 21JUN2006 22.5-0.1 26.3 0.0 27.8 0.2 29.2 0.3 + 28JUN2006 22.4 0.0 26.1 0.0 27.6 0.1 29.0 0.2 + 05JUL2006 22.2 0.1 26.0 0.1 27.5 0.1 29.0 0.1 + 12JUL2006 22.0 0.2 25.8 0.0 27.3 0.0 29.0 0.2 + 19JUL2006 22.3 0.8 25.8 0.2 27.3 0.1 29.1 0.3 + 26JUL2006 22.0 0.7 25.7 0.3 27.3 0.2 29.2 0.4 + 02AUG2006 21.9 0.8 25.5 0.3 27.2 0.2 29.2 0.5 + 09AUG2006 21.7 0.8 25.3 0.2 27.1 0.2 29.1 0.4 + 16AUG2006 21.6 0.9 25.4 0.4 27.2 0.4 29.2 0.6 + 23AUG2006 21.5 1.0 25.5 0.5 27.3 0.5 29.3 0.6 + 30AUG2006 21.1 0.6 25.6 0.6 27.3 0.5 29.3 0.7 + 06SEP2006 21.6 1.2 25.6 0.7 27.4 0.6 29.4 0.8 + 13SEP2006 21.3 0.9 25.8 0.9 27.3 0.6 29.4 0.7 + 20SEP2006 21.2 0.8 25.9 1.1 27.4 0.7 29.4 0.8 + 27SEP2006 21.7 1.1 25.7 0.8 27.2 0.5 29.3 0.7 + 04OCT2006 21.7 1.0 25.7 0.8 27.2 0.5 29.2 0.6 + 11OCT2006 22.2 1.4 26.1 1.2 27.5 0.8 29.4 0.8 + 18OCT2006 22.4 1.5 26.0 1.1 27.5 0.8 29.5 0.8 + 25OCT2006 22.7 1.6 26.1 1.1 27.6 0.9 29.6 1.0 + 01NOV2006 22.4 1.2 25.9 1.0 27.6 0.9 29.5 0.9 + 08NOV2006 22.5 1.1 25.9 0.9 27.6 0.9 29.6 1.0 + 15NOV2006 22.6 1.0 26.1 1.1 27.8 1.2 29.7 1.1 + 22NOV2006 22.7 0.8 26.3 1.2 27.8 1.2 29.6 1.1 + 29NOV2006 23.0 0.9 26.1 1.1 27.8 1.2 29.6 1.0 + 06DEC2006 22.9 0.5 26.1 1.1 27.9 1.3 29.6 1.1 + 13DEC2006 22.9 0.2 26.3 1.2 27.8 1.2 29.5 1.0 + 20DEC2006 23.7 0.6 26.5 1.3 27.7 1.2 29.4 1.0 + 27DEC2006 24.0 0.6 26.6 1.3 27.7 1.1 29.4 1.0 + 03JAN2007 24.3 0.5 26.4 0.9 27.5 0.9 29.2 0.8 + 10JAN2007 24.9 0.7 26.7 1.1 27.5 0.9 29.1 0.8 + 17JAN2007 25.0 0.4 26.4 0.7 27.2 0.6 28.8 0.6 + 24JAN2007 25.2 0.3 26.5 0.7 27.1 0.5 28.7 0.5 + 31JAN2007 25.6 0.3 26.6 0.6 27.0 0.3 28.7 0.5 + 07FEB2007 26.0 0.4 26.6 0.4 26.9 0.2 28.6 0.4 + 14FEB2007 26.3 0.3 26.3-0.1 26.7 0.0 28.6 0.6 + 21FEB2007 26.4 0.3 26.4-0.1 26.8-0.1 28.6 0.5 + 28FEB2007 25.7-0.6 26.4-0.3 26.9 0.0 28.5 0.4 + 07MAR2007 25.8-0.5 26.6-0.3 26.9-0.2 28.5 0.4 + 14MAR2007 26.0-0.5 27.3 0.2 27.3 0.1 28.6 0.4 + 21MAR2007 25.6-0.8 26.8-0.4 27.2-0.1 28.5 0.3 + 28MAR2007 25.1-1.0 26.6-0.7 27.4 0.0 28.5 0.2 + 04APR2007 24.5-1.4 26.7-0.7 27.5 0.0 28.7 0.3 + 11APR2007 24.4-1.2 27.2-0.2 27.8 0.1 28.7 0.3 + 18APR2007 23.9-1.4 27.4-0.1 27.9 0.2 28.7 0.2 + 25APR2007 24.1-1.0 27.3-0.1 27.8 0.0 28.7 0.1 + 02MAY2007 23.6-1.2 26.9-0.4 27.7-0.1 28.6 0.0 + 09MAY2007 23.0-1.5 26.3-0.9 27.4-0.4 28.7 0.0 + 16MAY2007 22.9-1.3 26.3-0.8 27.5-0.4 28.8 0.1 + 23MAY2007 22.3-1.6 26.3-0.6 27.7-0.1 29.0 0.2 + 30MAY2007 21.8-1.8 26.1-0.7 27.6-0.2 29.0 0.2 + 06JUN2007 21.6-1.6 25.8-0.9 27.6-0.1 29.0 0.2 + 13JUN2007 22.2-0.7 26.1-0.4 27.7 0.1 29.1 0.3 + 20JUN2007 21.8-0.8 25.9-0.5 27.6 0.0 28.9 0.1 + 27JUN2007 20.7-1.7 25.5-0.6 27.3-0.1 28.8 0.0 + 04JUL2007 21.2-0.9 25.3-0.6 27.0-0.4 28.7-0.1 + 11JUL2007 20.1-1.7 24.9-0.9 26.8-0.5 28.8 0.0 + 18JUL2007 19.9-1.7 24.8-0.8 26.9-0.3 28.9 0.1 + 25JUL2007 20.3-1.0 24.5-1.0 26.6-0.5 28.9 0.1 + 01AUG2007 19.6-1.5 24.1-1.2 26.4-0.6 28.7 0.0 + 08AUG2007 19.3-1.6 23.8-1.3 26.2-0.7 28.6-0.1 + 15AUG2007 19.7-1.0 24.0-1.0 26.3-0.6 28.6-0.1 + 22AUG2007 19.2-1.4 23.8-1.2 26.1-0.7 28.5-0.1 + 29AUG2007 18.4-2.1 23.7-1.3 26.1-0.7 28.4-0.2 + 05SEP2007 19.4-1.1 23.7-1.2 26.0-0.8 28.3-0.4 + 12SEP2007 18.6-1.8 23.6-1.3 25.8-1.0 28.0-0.6 + 19SEP2007 18.5-2.0 23.6-1.2 25.8-0.9 28.0-0.7 + 26SEP2007 18.4-2.1 23.2-1.7 25.6-1.1 28.0-0.7 + 03OCT2007 18.3-2.3 23.2-1.7 25.4-1.3 27.9-0.7 + 10OCT2007 18.8-1.9 23.3-1.6 24.9-1.8 27.7-1.0 + 17OCT2007 18.6-2.2 23.5-1.4 25.3-1.4 27.9-0.7 + 24OCT2007 19.2-1.8 23.5-1.4 25.3-1.4 27.8-0.8 + 31OCT2007 19.7-1.5 23.2-1.8 25.2-1.5 27.8-0.8 + 07NOV2007 19.3-2.1 23.0-2.0 25.0-1.6 27.5-1.1 + 14NOV2007 19.2-2.3 23.2-1.7 25.2-1.5 27.3-1.3 + 21NOV2007 19.8-2.0 23.2-1.8 24.9-1.7 27.1-1.5 + 28NOV2007 19.8-2.2 23.3-1.8 25.1-1.6 27.4-1.1 + 05DEC2007 20.6-1.8 23.5-1.5 25.1-1.5 27.5-1.0 + 12DEC2007 20.3-2.4 23.3-1.8 24.9-1.7 27.5-1.0 + 19DEC2007 21.3-1.6 23.7-1.5 25.0-1.6 27.2-1.3 + 26DEC2007 21.9-1.4 23.7-1.6 24.9-1.6 27.0-1.4 + 02JAN2008 22.6-1.1 23.9-1.5 25.0-1.6 26.8-1.6 + 09JAN2008 23.3-0.8 24.0-1.5 24.8-1.8 26.6-1.7 + 16JAN2008 24.1-0.4 24.0-1.6 24.6-2.0 26.6-1.7 + 23JAN2008 24.1-0.7 24.1-1.7 24.4-2.2 26.4-1.8 + 30JAN2008 25.1-0.1 24.7-1.3 24.9-1.7 26.5-1.7 + 06FEB2008 25.9 0.3 24.8-1.4 24.6-2.1 26.4-1.8 + 13FEB2008 25.9-0.1 24.7-1.7 24.5-2.2 26.4-1.7 + 20FEB2008 26.7 0.6 25.1-1.4 24.9-2.0 26.4-1.7 + 27FEB2008 27.2 0.9 25.8-0.9 25.3-1.6 26.3-1.8 + 05MAR2008 27.3 1.0 26.3-0.6 25.7-1.3 26.6-1.5 + 12MAR2008 27.2 0.7 26.5-0.5 26.0-1.1 26.7-1.4 + 19MAR2008 27.3 0.9 26.7-0.5 26.2-1.1 26.8-1.4 + 26MAR2008 27.1 0.9 26.8-0.5 26.3-1.0 27.0-1.2 + 02APR2008 27.2 1.2 26.9-0.4 26.5-1.0 27.2-1.2 + 09APR2008 25.9 0.2 27.3-0.2 26.7-1.0 27.3-1.1 + 16APR2008 25.5 0.0 27.3-0.2 26.9-0.9 27.4-1.1 + 23APR2008 25.5 0.4 27.1-0.3 26.9-0.9 27.5-1.1 + 30APR2008 24.5-0.3 27.3 0.0 27.1-0.7 27.7-0.9 + 07MAY2008 24.1-0.5 26.8-0.4 27.0-0.9 27.7-1.0 + 14MAY2008 24.5 0.2 27.1-0.1 27.1-0.7 27.8-0.9 + 21MAY2008 24.1 0.1 27.2 0.2 27.3-0.5 28.0-0.7 + 28MAY2008 24.1 0.5 27.2 0.4 27.3-0.5 28.0-0.8 + 04JUN2008 24.0 0.7 27.0 0.3 27.3-0.4 28.0-0.8 + 11JUN2008 23.7 0.7 26.7 0.2 27.2-0.5 28.0-0.8 + 18JUN2008 23.3 0.6 26.3-0.1 27.1-0.5 28.1-0.8 + 25JUN2008 23.0 0.6 26.2 0.0 27.1-0.4 28.1-0.7 + 02JUL2008 22.7 0.5 26.3 0.4 27.2-0.2 28.2-0.6 + 09JUL2008 22.7 0.8 26.3 0.5 27.3-0.1 28.3-0.5 + 16JUL2008 22.7 1.1 26.2 0.5 27.3 0.0 28.3-0.5 + 23JUL2008 22.6 1.2 25.9 0.5 27.1 0.0 28.2-0.6 + 30JUL2008 22.2 1.1 25.9 0.5 27.1 0.0 28.2-0.5 + 06AUG2008 22.0 1.1 25.9 0.7 27.0 0.1 28.2-0.5 + 13AUG2008 22.5 1.8 25.8 0.8 27.0 0.2 28.2-0.5 + 20AUG2008 21.1 0.5 25.5 0.5 26.7-0.1 28.1-0.6 + 27AUG2008 21.3 0.8 25.3 0.4 26.6-0.2 28.1-0.6 + 03SEP2008 21.3 0.8 25.3 0.4 26.6-0.2 28.1-0.6 + 10SEP2008 21.0 0.6 25.2 0.3 26.6-0.2 28.1-0.6 + 17SEP2008 21.1 0.8 24.9 0.1 26.4-0.4 28.1-0.6 + 24SEP2008 21.3 0.8 25.1 0.2 26.4-0.4 28.1-0.6 + 01OCT2008 21.0 0.4 24.7-0.2 26.2-0.5 28.3-0.4 + 08OCT2008 20.6-0.1 24.9 0.0 26.3-0.4 28.3-0.4 + 15OCT2008 20.7-0.1 24.9-0.1 26.4-0.3 28.3-0.4 + 22OCT2008 21.0 0.0 24.8-0.2 26.3-0.4 28.2-0.4 + 29OCT2008 20.5-0.7 24.6-0.3 26.4-0.2 28.2-0.4 + 05NOV2008 21.3 0.0 24.6-0.3 26.3-0.3 28.2-0.4 + 12NOV2008 21.8 0.3 24.9-0.1 26.5-0.2 28.1-0.5 + 19NOV2008 21.5-0.2 24.9-0.1 26.3-0.3 28.0-0.6 + 26NOV2008 21.2-0.8 24.6-0.4 26.1-0.5 27.9-0.6 + 03DEC2008 21.4-0.9 24.8-0.3 26.0-0.6 27.9-0.6 + 10DEC2008 22.1-0.4 24.6-0.5 25.8-0.8 27.7-0.7 + 17DEC2008 22.6-0.3 24.6-0.6 25.8-0.8 27.7-0.8 + 24DEC2008 22.8-0.5 24.5-0.8 25.6-1.0 27.5-0.9 + 31DEC2008 23.3-0.3 24.4-1.0 25.4-1.2 27.5-0.9 + 07JAN2009 23.4-0.6 24.5-0.9 25.4-1.2 27.4-1.0 + 14JAN2009 24.0-0.3 24.8-0.8 25.4-1.1 27.4-0.9 + 21JAN2009 25.3 0.5 25.5-0.2 25.8-0.8 27.4-0.8 + 28JAN2009 25.3 0.2 25.5-0.4 25.7-1.0 27.3-0.9 + 04FEB2009 25.1-0.4 25.4-0.7 25.7-0.9 27.2-0.9 + 11FEB2009 25.8 0.0 25.6-0.6 25.9-0.8 27.3-0.8 + 18FEB2009 26.3 0.2 26.1-0.4 26.2-0.6 27.4-0.7 + 25FEB2009 26.5 0.2 26.4-0.3 26.3-0.6 27.4-0.7 + 04MAR2009 26.5 0.2 26.1-0.7 26.4-0.7 27.5-0.6 + 11MAR2009 26.1-0.3 26.1-0.9 26.7-0.5 27.7-0.4 + 18MAR2009 26.0-0.4 26.4-0.7 26.7-0.6 27.8-0.4 + 25MAR2009 26.3 0.1 26.7-0.5 26.8-0.6 27.9-0.4 + 01APR2009 26.4 0.5 27.2-0.1 27.1-0.4 28.1-0.2 + 08APR2009 25.7 0.0 27.4 0.0 27.4-0.2 28.3-0.1 + 15APR2009 26.1 0.7 27.5 0.0 27.5-0.2 28.3-0.2 + 22APR2009 25.4 0.2 27.3-0.1 27.6-0.2 28.4-0.2 + 29APR2009 25.3 0.4 27.5 0.2 27.7-0.1 28.6 0.0 + 06MAY2009 25.3 0.7 27.6 0.4 27.9 0.1 28.8 0.1 + 13MAY2009 24.8 0.5 27.4 0.3 28.0 0.2 29.0 0.2 + 20MAY2009 24.4 0.4 27.4 0.4 28.2 0.4 29.1 0.3 + 27MAY2009 24.3 0.6 27.2 0.4 28.1 0.3 29.1 0.3 + 03JUN2009 23.7 0.4 27.1 0.4 27.9 0.2 29.0 0.2 + 10JUN2009 23.7 0.6 27.2 0.6 28.1 0.4 29.1 0.3 + 17JUN2009 23.9 1.1 27.2 0.8 28.2 0.5 29.2 0.4 + 24JUN2009 23.5 1.0 27.1 0.9 28.2 0.7 29.3 0.5 + 01JUL2009 22.9 0.7 26.9 0.9 28.2 0.7 29.3 0.5 + 08JUL2009 23.0 1.1 26.7 0.9 28.0 0.7 29.2 0.4 + 15JUL2009 22.7 1.0 26.6 1.0 28.0 0.7 29.2 0.4 + 22JUL2009 22.2 0.8 26.5 1.0 27.9 0.8 29.2 0.4 + 29JUL2009 22.1 0.9 26.2 0.8 27.7 0.6 29.1 0.4 + 05AUG2009 22.2 1.2 26.0 0.8 27.6 0.6 29.1 0.4 + 12AUG2009 21.4 0.6 25.9 0.8 27.4 0.6 29.1 0.4 + 19AUG2009 21.6 0.9 25.8 0.9 27.4 0.6 29.2 0.6 + 26AUG2009 21.5 1.0 25.9 1.0 27.6 0.8 29.3 0.7 + 02SEP2009 21.4 0.9 25.9 1.0 27.6 0.8 29.3 0.6 + 09SEP2009 21.1 0.6 25.7 0.8 27.5 0.8 29.3 0.6 + 16SEP2009 20.8 0.4 25.6 0.8 27.5 0.8 29.3 0.6 + 23SEP2009 20.5 0.0 25.6 0.7 27.4 0.7 29.2 0.6 + 30SEP2009 20.4-0.2 25.4 0.6 27.3 0.6 29.2 0.6 + 07OCT2009 20.1-0.5 25.5 0.6 27.3 0.6 29.4 0.7 + 14OCT2009 21.0 0.2 25.6 0.7 27.5 0.8 29.6 1.0 + 21OCT2009 21.2 0.3 25.8 0.8 27.7 1.0 29.8 1.2 + 28OCT2009 21.6 0.5 26.1 1.2 28.1 1.4 30.0 1.3 + 04NOV2009 21.8 0.5 26.2 1.3 28.2 1.6 29.9 1.3 + 11NOV2009 22.1 0.6 26.2 1.2 28.2 1.5 29.9 1.3 + 18NOV2009 22.2 0.5 26.2 1.2 28.2 1.6 29.8 1.2 + 25NOV2009 22.2 0.3 26.3 1.2 28.2 1.6 29.9 1.3 + 02DEC2009 22.7 0.4 26.5 1.4 28.2 1.6 29.7 1.2 + 09DEC2009 22.7 0.2 26.6 1.5 28.2 1.7 29.6 1.1 + 16DEC2009 22.6-0.2 26.7 1.5 28.3 1.8 29.7 1.2 + 23DEC2009 23.7 0.5 26.8 1.5 28.4 1.9 29.7 1.3 + 30DEC2009 24.3 0.7 26.7 1.4 28.3 1.7 29.6 1.2 + 06JAN2010 24.3 0.4 26.7 1.2 28.3 1.7 29.7 1.3 + 13JAN2010 24.6 0.3 26.7 1.1 28.2 1.6 29.6 1.3 + 20JAN2010 24.7 0.1 26.5 0.8 28.0 1.4 29.5 1.2 + 27JAN2010 25.5 0.4 26.6 0.7 27.8 1.2 29.3 1.1 + 03FEB2010 25.4 0.0 26.7 0.6 27.8 1.2 29.1 1.0 + 10FEB2010 25.7-0.2 27.0 0.7 27.9 1.2 29.0 0.9 + 17FEB2010 26.4 0.3 27.2 0.8 27.9 1.2 29.0 1.0 + 24FEB2010 26.5 0.3 27.4 0.8 28.0 1.1 29.2 1.1 + 03MAR2010 26.3-0.1 27.5 0.7 28.1 1.1 29.2 1.0 + 10MAR2010 26.0-0.4 27.5 0.5 28.3 1.2 29.3 1.1 + 17MAR2010 26.2-0.3 27.8 0.7 28.4 1.1 29.2 1.1 + 24MAR2010 26.3 0.0 27.9 0.7 28.4 1.0 29.2 0.9 + 31MAR2010 25.9-0.1 28.1 0.8 28.4 0.9 29.2 0.8 + 07APR2010 26.0 0.3 28.1 0.7 28.4 0.8 29.3 0.9 + 14APR2010 26.6 1.0 28.2 0.8 28.5 0.7 29.2 0.7 + 21APR2010 26.0 0.8 28.0 0.6 28.4 0.6 29.2 0.7 + 28APR2010 25.2 0.3 27.8 0.4 28.2 0.4 29.3 0.7 + 05MAY2010 24.8 0.2 27.7 0.5 28.0 0.2 29.1 0.4 + 12MAY2010 24.8 0.5 27.1 0.0 27.7-0.2 29.0 0.3 + 19MAY2010 24.0 0.0 26.8-0.3 27.5-0.3 29.0 0.2 + 26MAY2010 23.2-0.5 26.4-0.4 27.5-0.3 29.0 0.2 + 02JUN2010 23.4 0.0 26.1-0.6 27.3-0.5 28.8 0.0 + 09JUN2010 23.1 0.0 26.0-0.6 27.1-0.6 28.7-0.1 + 16JUN2010 22.3-0.5 25.8-0.6 27.0-0.7 28.6-0.2 + 23JUN2010 22.4-0.2 25.5-0.8 26.9-0.7 28.5-0.3 + 30JUN2010 21.6-0.7 25.3-0.8 26.7-0.8 28.3-0.5 + 07JUL2010 20.9-1.1 24.8-1.0 26.4-0.9 28.2-0.6 + 14JUL2010 20.0-1.6 24.6-1.1 26.1-1.1 28.2-0.6 + 21JUL2010 19.6-1.9 24.4-1.1 26.0-1.2 28.0-0.8 + 28JUL2010 19.5-1.7 24.0-1.4 25.6-1.4 27.8-1.0 + 04AUG2010 19.5-1.5 24.0-1.3 25.8-1.2 27.7-1.0 + 11AUG2010 19.6-1.2 24.1-1.0 25.7-1.2 27.5-1.2 + 18AUG2010 19.2-1.4 23.8-1.1 25.6-1.2 27.5-1.1 + 25AUG2010 19.2-1.4 23.7-1.3 25.2-1.6 27.1-1.5 + 01SEP2010 18.8-1.7 23.4-1.5 25.1-1.7 27.2-1.5 + 08SEP2010 19.1-1.3 23.5-1.4 25.2-1.6 27.1-1.6 + 15SEP2010 18.6-1.8 23.4-1.5 25.1-1.6 27.1-1.6 + 22SEP2010 19.3-1.2 24.0-0.8 25.1-1.6 27.1-1.6 + 29SEP2010 19.2-1.4 23.5-1.3 24.8-1.9 27.1-1.6 + 06OCT2010 18.7-1.9 23.2-1.7 24.8-1.9 27.1-1.6 + 13OCT2010 18.9-1.9 23.0-2.0 25.1-1.6 27.1-1.6 + 20OCT2010 19.1-1.8 23.2-1.7 25.1-1.6 27.0-1.7 + 27OCT2010 19.8-1.3 23.6-1.4 25.2-1.5 27.0-1.6 + 03NOV2010 19.7-1.6 23.4-1.6 25.2-1.4 27.0-1.6 + 10NOV2010 19.5-1.9 23.5-1.5 25.2-1.4 27.2-1.5 + 17NOV2010 20.2-1.5 23.5-1.5 25.0-1.6 27.1-1.5 + 24NOV2010 20.6-1.3 23.3-1.7 24.9-1.7 26.9-1.7 + 01DEC2010 20.5-1.7 23.3-1.7 25.0-1.7 27.0-1.5 + 08DEC2010 20.9-1.5 23.4-1.7 25.0-1.6 26.9-1.6 + 15DEC2010 21.1-1.7 23.5-1.7 25.0-1.5 26.9-1.6 + 22DEC2010 21.7-1.4 23.4-1.8 24.8-1.8 26.8-1.6 + 29DEC2010 22.9-0.6 23.8-1.5 25.0-1.5 26.7-1.7 + 05JAN2011 23.1-0.7 24.1-1.3 25.0-1.5 26.7-1.7 + 12JAN2011 23.6-0.7 24.1-1.5 24.7-1.8 26.6-1.7 + 19JAN2011 24.2-0.5 24.4-1.3 25.0-1.6 26.7-1.6 + 26JAN2011 25.0 0.0 24.5-1.4 24.9-1.7 26.8-1.4 + 02FEB2011 25.3-0.1 24.9-1.1 25.1-1.5 26.6-1.5 + 09FEB2011 25.9 0.2 25.5-0.8 25.5-1.2 26.8-1.3 + 16FEB2011 26.8 0.7 25.6-0.8 25.4-1.3 27.0-1.1 + 23FEB2011 26.4 0.2 25.9-0.7 25.6-1.3 27.0-1.1 + 02MAR2011 25.7-0.6 26.0-0.8 25.7-1.3 27.1-1.1 + 09MAR2011 26.3-0.2 26.2-0.8 26.0-1.1 27.3-0.9 + 16MAR2011 26.6 0.1 26.3-0.8 26.4-0.9 27.5-0.7 + 23MAR2011 25.8-0.5 26.6-0.6 26.4-0.9 27.5-0.7 + 30MAR2011 25.6-0.4 26.9-0.4 26.6-0.9 27.5-0.8 + 06APR2011 25.4-0.4 27.1-0.2 26.9-0.7 27.7-0.6 + 13APR2011 25.8 0.3 27.3-0.2 27.1-0.7 27.9-0.6 + 20APR2011 25.4 0.1 27.2-0.3 27.1-0.7 27.8-0.7 + 27APR2011 25.8 0.8 27.2-0.1 27.1-0.7 27.9-0.7 + 04MAY2011 25.1 0.4 27.0-0.3 27.2-0.6 28.0-0.7 + 11MAY2011 25.3 0.9 27.0-0.2 27.4-0.5 28.3-0.5 + 18MAY2011 24.6 0.5 27.0-0.1 27.6-0.3 28.4-0.4 + 25MAY2011 24.0 0.3 26.8 0.0 27.5-0.3 28.3-0.5 + 01JUN2011 24.3 0.8 26.8 0.1 27.5-0.2 28.4-0.4 + 08JUN2011 24.2 1.1 26.7 0.1 27.5-0.2 28.4-0.4 + 15JUN2011 23.8 1.0 26.6 0.1 27.4-0.2 28.4-0.4 + 22JUN2011 23.2 0.6 26.5 0.2 27.4-0.1 28.4-0.4 + 29JUN2011 22.9 0.6 26.1 0.1 27.4-0.1 28.6-0.2 + 06JUL2011 22.2 0.2 25.8-0.1 27.1-0.3 28.5-0.3 + 13JUL2011 21.9 0.2 25.7 0.0 27.1-0.2 28.5-0.3 + 20JUL2011 22.1 0.6 25.6 0.0 26.9-0.3 28.4-0.4 + 27JUL2011 21.9 0.7 25.3-0.1 26.8-0.3 28.4-0.4 + 03AUG2011 21.5 0.4 25.0-0.3 26.4-0.6 28.3-0.4 + 10AUG2011 20.9 0.0 24.6-0.5 26.3-0.6 28.4-0.3 + 17AUG2011 20.5-0.1 24.5-0.5 26.0-0.8 28.2-0.4 + 24AUG2011 20.2-0.4 24.3-0.6 26.1-0.7 28.3-0.4 + 31AUG2011 20.0-0.5 24.4-0.5 26.1-0.7 28.3-0.4 + 07SEP2011 19.7-0.7 24.2-0.7 26.1-0.7 28.2-0.5 + 14SEP2011 19.6-0.8 24.1-0.7 26.0-0.8 28.0-0.7 + 21SEP2011 19.8-0.6 24.3-0.6 25.9-0.9 27.8-0.9 + 28SEP2011 19.9-0.6 24.1-0.7 26.0-0.7 28.0-0.7 + 05OCT2011 19.8-0.8 24.1-0.8 25.7-1.0 27.7-0.9 + 12OCT2011 19.7-1.0 24.1-0.8 25.8-0.9 27.9-0.8 + 19OCT2011 20.0-0.9 23.9-1.1 25.8-0.8 28.1-0.6 + 26OCT2011 21.2 0.2 23.8-1.1 25.4-1.2 28.0-0.7 + 02NOV2011 20.5-0.8 23.9-1.1 25.6-1.0 27.9-0.8 + 09NOV2011 20.5-0.9 23.9-1.1 25.7-0.9 27.9-0.7 + 16NOV2011 20.5-1.1 23.8-1.1 25.6-1.0 27.9-0.7 + 23NOV2011 21.4-0.5 24.0-1.0 25.6-1.0 27.8-0.8 + 30NOV2011 21.0-1.2 23.8-1.3 25.4-1.2 27.7-0.9 + 07DEC2011 21.4-1.0 23.9-1.2 25.5-1.1 27.5-1.0 + 14DEC2011 21.5-1.2 24.1-1.0 25.6-1.0 27.4-1.1 + 21DEC2011 22.1-1.0 24.5-0.7 25.6-1.0 27.2-1.3 + 28DEC2011 22.6-0.9 24.4-0.9 25.5-1.1 27.1-1.3 + 04JAN2012 22.7-1.1 24.6-0.8 25.5-1.0 27.2-1.2 + 11JAN2012 23.7-0.5 24.8-0.7 25.6-1.0 27.1-1.2 + 18JAN2012 24.0-0.6 24.9-0.8 25.4-1.2 27.1-1.2 + 25JAN2012 24.6-0.4 25.2-0.7 25.5-1.2 26.9-1.3 + 01FEB2012 24.6-0.8 25.2-0.8 25.5-1.2 27.0-1.2 + 08FEB2012 25.2-0.5 25.6-0.6 25.7-1.0 27.1-1.0 + 15FEB2012 26.9 0.8 26.3-0.1 26.1-0.7 27.1-1.0 + 22FEB2012 26.9 0.8 26.8 0.2 26.5-0.4 27.4-0.7 + 29FEB2012 27.3 1.0 27.1 0.4 26.4-0.6 27.2-0.9 + 07MAR2012 26.6 0.2 26.7-0.2 26.4-0.7 27.3-0.9 + 14MAR2012 26.6 0.2 26.6-0.4 26.6-0.6 27.5-0.7 + 21MAR2012 26.7 0.4 27.0-0.2 26.7-0.6 27.8-0.5 + 28MAR2012 26.9 0.8 27.5 0.3 27.1-0.3 27.7-0.6 + 04APR2012 26.2 0.3 27.6 0.3 27.2-0.3 27.9-0.5 + 11APR2012 27.4 1.8 27.8 0.4 27.3-0.4 28.1-0.3 + 18APR2012 26.8 1.4 27.5 0.0 27.3-0.5 28.1-0.4 + 25APR2012 26.6 1.5 27.5 0.1 27.6-0.2 28.4-0.2 + 02MAY2012 26.3 1.6 27.4 0.1 27.7-0.1 28.4-0.2 + 09MAY2012 25.7 1.2 27.3 0.1 27.8 0.0 28.4-0.3 + 16MAY2012 25.2 1.0 27.2 0.1 27.8 0.0 28.5-0.3 + 23MAY2012 24.8 0.9 27.1 0.2 27.8 0.0 28.6-0.2 + 30MAY2012 24.5 0.9 27.2 0.4 27.9 0.2 28.7-0.1 + 06JUN2012 24.7 1.5 27.1 0.4 27.8 0.1 28.6-0.2 + 13JUN2012 24.4 1.5 27.1 0.6 27.9 0.3 28.6-0.2 + 20JUN2012 24.3 1.7 27.1 0.8 28.0 0.4 28.8 0.0 + 27JUN2012 23.8 1.5 27.1 0.9 28.1 0.6 28.9 0.0 + 04JUL2012 23.2 1.1 26.8 0.8 27.9 0.5 28.8 0.0 + 11JUL2012 22.6 0.8 26.6 0.8 27.7 0.4 28.8 0.0 + 18JUL2012 22.6 1.1 26.5 0.9 27.7 0.5 28.8 0.0 + 25JUL2012 22.0 0.7 26.4 1.0 27.7 0.6 28.9 0.1 + 01AUG2012 21.6 0.5 26.1 0.9 27.6 0.6 29.0 0.3 + 08AUG2012 20.9 0.0 25.9 0.8 27.7 0.8 29.1 0.4 + 15AUG2012 20.8 0.1 25.6 0.6 27.4 0.6 29.1 0.4 + 22AUG2012 21.0 0.4 25.5 0.5 27.4 0.6 29.1 0.4 + 29AUG2012 20.3-0.2 25.6 0.7 27.7 0.9 29.1 0.5 + 05SEP2012 20.7 0.3 25.5 0.6 27.5 0.8 29.2 0.5 + 12SEP2012 20.9 0.5 25.3 0.4 27.3 0.5 29.1 0.4 + 19SEP2012 21.0 0.5 25.2 0.3 27.0 0.3 29.0 0.4 + 26SEP2012 21.0 0.5 25.1 0.2 26.9 0.2 29.1 0.4 + 03OCT2012 20.5-0.1 24.8-0.1 26.8 0.1 29.0 0.3 + 10OCT2012 20.2-0.6 24.7-0.2 26.8 0.1 29.1 0.4 + 17OCT2012 20.5-0.4 25.0 0.1 27.0 0.3 29.1 0.5 + 24OCT2012 21.0 0.0 25.0 0.1 27.2 0.5 29.3 0.7 + 31OCT2012 21.5 0.3 25.2 0.2 27.1 0.4 29.2 0.6 + 07NOV2012 21.5 0.2 25.1 0.1 27.0 0.4 29.2 0.6 + 14NOV2012 21.0-0.5 25.2 0.2 27.2 0.5 29.3 0.7 + 21NOV2012 21.1-0.7 25.1 0.1 26.9 0.3 29.1 0.5 + 28NOV2012 20.7-1.4 24.9-0.1 26.8 0.2 28.9 0.4 + 05DEC2012 21.5-0.9 24.9-0.2 26.5-0.1 28.6 0.1 + 12DEC2012 21.8-0.8 24.8-0.3 26.5-0.1 28.8 0.4 + 19DEC2012 22.4-0.6 24.9-0.3 26.4-0.2 28.6 0.2 + 26DEC2012 22.7-0.6 25.0-0.3 26.4-0.1 28.6 0.2 + 02JAN2013 23.3-0.4 25.0-0.4 26.3-0.3 28.4 0.1 + 09JAN2013 23.7-0.4 24.8-0.7 26.0-0.6 28.3 0.0 + 16JAN2013 24.1-0.4 25.0-0.6 26.0-0.6 28.1-0.2 + 23JAN2013 24.2-0.6 25.3-0.5 26.4-0.2 28.2 0.0 + 30JAN2013 24.8-0.5 25.1-0.9 26.1-0.5 28.1 0.0 + 06FEB2013 25.4-0.2 25.5-0.7 26.2-0.5 28.1-0.1 + 13FEB2013 25.9-0.1 25.9-0.4 26.4-0.3 28.1 0.0 + 20FEB2013 25.6-0.6 26.2-0.3 26.3-0.5 27.9-0.1 + 27FEB2013 25.8-0.4 26.5-0.2 26.6-0.3 27.9-0.2 + 06MAR2013 26.7 0.4 27.0 0.1 26.9-0.1 27.9-0.2 + 13MAR2013 27.0 0.5 27.1 0.0 26.8-0.3 27.7-0.4 + 20MAR2013 26.6 0.2 27.6 0.4 27.1-0.1 28.0-0.2 + 27MAR2013 25.6-0.5 27.6 0.3 27.3-0.1 28.1-0.2 + 03APR2013 25.0-0.9 27.3 0.0 27.6 0.1 28.3 0.0 + 10APR2013 24.8-0.9 27.5 0.0 27.7 0.0 28.5 0.1 + 17APR2013 24.6-0.8 27.5 0.0 27.7-0.1 28.5 0.0 + 24APR2013 24.5-0.6 27.3-0.1 27.7-0.1 28.4-0.1 + 01MAY2013 23.6-1.2 26.9-0.4 27.8 0.0 28.7 0.0 + 08MAY2013 22.9-1.6 26.7-0.5 27.7-0.1 28.7 0.0 + 15MAY2013 23.2-1.1 26.5-0.6 27.5-0.4 28.6-0.2 + 22MAY2013 22.3-1.6 25.9-1.0 27.4-0.4 28.7-0.1 + 29MAY2013 21.5-2.1 25.9-0.9 27.5-0.2 28.8 0.0 + 05JUN2013 22.0-1.3 25.9-0.8 27.5-0.2 28.8 0.0 + 12JUN2013 21.9-1.1 25.9-0.6 27.5-0.2 28.8-0.1 + 19JUN2013 21.1-1.6 25.7-0.7 27.3-0.3 28.6-0.2 + 26JUN2013 20.5-1.9 25.6-0.6 27.4-0.1 28.8 0.0 + 03JUL2013 20.6-1.5 25.4-0.5 27.2-0.2 28.8 0.0 + 10JUL2013 20.5-1.3 25.0-0.8 26.9-0.4 28.8 0.0 + 17JUL2013 20.1-1.5 24.8-0.8 26.8-0.4 28.7-0.1 + 24JUL2013 20.3-1.1 24.9-0.6 26.8-0.3 28.7-0.1 + 31JUL2013 19.8-1.3 24.6-0.8 26.8-0.2 28.7 0.0 + 07AUG2013 19.8-1.1 24.5-0.7 26.7-0.3 28.6-0.1 + 14AUG2013 19.6-1.1 24.4-0.7 26.4-0.4 28.7 0.0 + 21AUG2013 19.9-0.8 24.4-0.6 26.4-0.4 28.7 0.0 + 28AUG2013 19.4-1.1 24.5-0.5 26.7-0.1 28.8 0.2 + 04SEP2013 19.6-0.9 24.6-0.3 26.8 0.0 28.8 0.1 + 11SEP2013 20.0-0.4 24.7-0.2 26.8 0.0 28.7 0.0 + 18SEP2013 19.9-0.5 24.9 0.1 26.7-0.1 28.6-0.1 + 25SEP2013 20.1-0.4 24.7-0.2 26.5-0.2 28.5-0.1 + 02OCT2013 19.7-0.9 24.6-0.2 26.4-0.3 28.7 0.0 + 09OCT2013 20.1-0.7 24.6-0.3 26.3-0.3 28.6 0.0 + 16OCT2013 20.3-0.5 24.8-0.1 26.3-0.4 28.6-0.1 + 23OCT2013 20.5-0.4 24.7-0.2 26.3-0.4 28.7 0.1 + 30OCT2013 20.5-0.7 24.8-0.1 26.5-0.2 28.8 0.2 + 06NOV2013 21.0-0.4 24.8-0.1 26.6 0.0 28.9 0.3 + 13NOV2013 21.1-0.4 24.7-0.2 26.6 0.0 28.9 0.3 + 20NOV2013 21.3-0.5 24.8-0.2 26.7 0.1 28.9 0.3 + 27NOV2013 21.7-0.4 24.9-0.1 26.7 0.1 28.8 0.2 + 04DEC2013 22.0-0.3 24.9-0.2 26.8 0.2 28.8 0.3 + 11DEC2013 22.4-0.2 25.1 0.0 26.6 0.0 28.7 0.2 + 18DEC2013 22.4-0.5 25.2 0.0 26.5-0.1 28.6 0.1 + 25DEC2013 22.8-0.4 25.2-0.1 26.4-0.2 28.5 0.1 + 01JAN2014 23.7 0.0 25.2-0.2 26.3-0.3 28.2-0.2 + 08JAN2014 24.2 0.1 25.1-0.5 26.0-0.5 28.2-0.2 + 15JAN2014 25.0 0.6 25.2-0.4 25.9-0.7 28.0-0.3 + 22JAN2014 25.4 0.6 25.6-0.2 26.2-0.4 28.1-0.1 + 29JAN2014 25.4 0.2 25.3-0.7 25.9-0.7 27.9-0.2 + 05FEB2014 25.1-0.4 25.3-0.8 25.9-0.7 28.1 0.0 + 12FEB2014 25.4-0.6 25.4-0.9 26.2-0.5 28.5 0.4 + 19FEB2014 25.1-1.1 25.7-0.7 26.4-0.4 28.5 0.4 + 26FEB2014 25.5-0.7 26.0-0.6 26.3-0.6 28.2 0.1 + 05MAR2014 26.1-0.3 26.4-0.5 26.6-0.4 28.5 0.3 + 12MAR2014 25.8-0.6 26.8-0.3 26.8-0.4 28.7 0.6 + 19MAR2014 25.2-1.2 27.3 0.1 27.4 0.1 28.8 0.6 + 26MAR2014 25.4-0.7 27.6 0.4 27.6 0.2 29.0 0.7 + 02APR2014 25.2-0.7 27.8 0.5 27.8 0.3 29.0 0.7 + 09APR2014 24.9-0.8 27.6 0.1 27.9 0.2 29.1 0.7 + 16APR2014 24.8-0.7 27.7 0.2 28.0 0.2 29.1 0.6 + 23APR2014 25.3 0.1 27.8 0.4 28.2 0.4 29.2 0.6 + 30APR2014 25.7 0.8 27.8 0.5 28.2 0.4 29.3 0.7 + 07MAY2014 25.8 1.2 27.8 0.6 28.3 0.5 29.5 0.8 + 14MAY2014 25.5 1.3 27.7 0.6 28.3 0.4 29.5 0.8 + 21MAY2014 25.4 1.5 27.6 0.7 28.3 0.5 29.6 0.8 + 28MAY2014 25.3 1.6 27.6 0.7 28.4 0.6 29.7 0.9 + 04JUN2014 24.8 1.4 27.5 0.8 28.3 0.5 29.6 0.8 + 11JUN2014 24.6 1.6 27.3 0.8 28.1 0.4 29.5 0.6 + 18JUN2014 24.8 2.1 27.4 1.0 28.1 0.5 29.4 0.5 + 25JUN2014 24.0 1.6 27.2 1.0 28.0 0.5 29.3 0.5 + 02JUL2014 23.6 1.4 27.0 1.0 27.8 0.4 29.1 0.3 + 09JUL2014 23.0 1.1 26.5 0.6 27.6 0.3 29.1 0.3 + 16JUL2014 23.1 1.5 26.2 0.6 27.4 0.2 29.1 0.4 + 23JUL2014 22.9 1.6 26.0 0.5 27.1-0.1 28.9 0.2 + 30JUL2014 21.8 0.6 25.5 0.2 26.9-0.1 29.0 0.3 + 06AUG2014 22.2 1.2 25.6 0.4 27.0 0.0 29.2 0.5 + 13AUG2014 21.9 1.2 25.5 0.5 26.9 0.0 29.0 0.4 + 20AUG2014 22.1 1.4 25.5 0.5 27.1 0.3 29.1 0.4 + 27AUG2014 21.3 0.8 25.4 0.4 27.2 0.4 29.2 0.5 + 03SEP2014 21.7 1.2 25.3 0.4 27.1 0.4 29.2 0.5 + 10SEP2014 21.1 0.7 25.3 0.4 27.3 0.5 29.4 0.7 + 17SEP2014 21.0 0.7 25.2 0.4 27.2 0.5 29.4 0.8 + 24SEP2014 21.2 0.8 25.4 0.5 27.1 0.4 29.3 0.6 + 01OCT2014 21.7 1.1 25.4 0.5 27.1 0.3 29.2 0.5 + 08OCT2014 21.3 0.6 25.5 0.6 27.1 0.4 29.1 0.5 + 15OCT2014 21.5 0.7 25.5 0.5 27.2 0.5 29.4 0.7 + 22OCT2014 21.8 0.8 25.8 0.8 27.2 0.5 29.4 0.7 + 29OCT2014 21.8 0.6 25.8 0.9 27.3 0.6 29.4 0.8 + 05NOV2014 21.9 0.5 25.8 0.9 27.4 0.8 29.5 0.9 + 12NOV2014 22.4 0.9 25.8 0.9 27.5 0.8 29.5 0.9 + 19NOV2014 22.6 0.8 26.0 1.0 27.5 0.9 29.5 0.9 + 26NOV2014 22.4 0.4 25.9 0.9 27.6 1.0 29.5 0.9 + 03DEC2014 22.3 0.0 25.8 0.7 27.4 0.8 29.4 0.9 + 10DEC2014 22.8 0.2 26.0 0.9 27.5 0.9 29.4 0.9 + 17DEC2014 22.9 0.1 26.0 0.8 27.4 0.8 29.4 1.0 + 24DEC2014 23.1-0.2 26.0 0.7 27.3 0.7 29.3 0.9 + 31DEC2014 23.6 0.0 25.9 0.6 27.1 0.5 29.2 0.8 + 07JAN2015 23.7-0.2 25.9 0.4 27.0 0.4 29.1 0.7 + 14JAN2015 24.0-0.4 25.9 0.3 27.1 0.5 29.1 0.9 + 21JAN2015 24.3-0.4 26.1 0.3 27.2 0.6 29.2 1.0 + 28JAN2015 24.8-0.3 26.2 0.3 27.2 0.5 29.1 0.9 + 04FEB2015 25.0-0.5 26.2 0.1 27.2 0.5 29.1 0.9 + 11FEB2015 25.1-0.8 26.6 0.3 27.2 0.5 29.0 0.9 + 18FEB2015 26.1-0.1 26.7 0.3 27.3 0.5 29.0 1.0 + 25FEB2015 26.1-0.1 26.8 0.1 27.5 0.6 29.3 1.2 diff --git a/samples/Forth/tools.4TH b/samples/Forth/tools.4TH new file mode 100644 index 00000000..b08a29fe --- /dev/null +++ b/samples/Forth/tools.4TH @@ -0,0 +1,133 @@ +\ -*- forth -*- Copyright 2004, 2013 Lars Brinkhoff + +( Tools words. ) + +: .s ( -- ) + [char] < emit depth (.) ." > " + 'SP @ >r r@ depth 1- cells + + begin + dup r@ <> + while + dup @ . + /cell - + repeat r> 2drop ; + +: ? @ . ; + +: c? c@ . ; + +: dump bounds do i ? /cell +loop cr ; + +: cdump bounds do i c? loop cr ; + +: again postpone branch , ; immediate + +: see-find ( caddr -- end xt ) + >r here lastxt @ + begin + dup 0= abort" Undefined word" + dup r@ word= if r> drop exit then + nip dup >nextxt + again ; + +: cabs ( char -- |char| ) dup 127 > if 256 swap - then ; + +: xt. ( xt -- ) + ( >name ) count cabs type ; + +: xt? ( xt -- flag ) + >r lastxt @ begin + ?dup + while + dup r@ = if r> 2drop -1 exit then + >nextxt + repeat r> drop 0 ; + +: disassemble ( x -- ) + dup xt? if + ( >name ) count + dup 127 > if ." postpone " then + cabs type + else + . + then ; + +: .addr dup . ; + +: see-line ( addr -- ) + cr ." ( " .addr ." ) " @ disassemble ; + +: see-word ( end xt -- ) + >r ." : " r@ xt. + r@ >body do i see-line /cell +loop + ." ;" r> c@ 127 > if ." immediate" then ; + +: see bl word see-find see-word cr ; + +: #body bl word see-find >body - ; + +: type-word ( end xt -- flag ) + xt. space drop 0 ; + +: traverse-dictionary ( in.. xt -- out.. ) + \ xt execution: ( in.. end xt2 -- in.. 0 | in.. end xt2 -- out.. true ) + >r here lastxt @ begin + ?dup + while + r> 2dup >r >r execute + if r> r> 2drop exit then + r> dup >nextxt + repeat r> 2drop ; + +: words ( -- ) + ['] type-word traverse-dictionary cr ; + +\ ---------------------------------------------------------------------- + +( Tools extension words. ) + +\ ;code + +\ assembler + +\ in kernel: bye + +\ code + +\ cs-pick + +\ cs-roll + +\ editor + +: forget ' dup >nextxt lastxt ! 'here ! reveal ; + +\ Kernel: state + +\ [else] + +\ [if] + +\ [then] + +\ ---------------------------------------------------------------------- + +( Forth2012 tools extension words. ) + +\ TODO: n>r + +\ TODO: nr> + +\ TODO: synonym + +: [undefined] bl-word find nip 0= ; immediate + +: [defined] postpone [undefined] invert ; immediate + +\ ---------------------------------------------------------------------- + +: @+ ( addr -- addr+/cell x ) dup cell+ swap @ ; + +: !+ ( x addr -- addr+/cell ) tuck ! cell+ ; + +: -rot swap >r swap r> ; diff --git a/samples/FreeMarker/example.ftl b/samples/FreeMarker/example.ftl new file mode 100644 index 00000000..10a6ee95 --- /dev/null +++ b/samples/FreeMarker/example.ftl @@ -0,0 +1,31 @@ +<#import "layout.ftl" as layout> + +<#assign results = [ + { + "title": "Example Result", + "description": "Lorem ipsum dolor sit amet, pede id pellentesque, sollicitudin turpis sed in sed sed, libero dictum." + } + ] /> + +<@layout.page title="FreeMarker Example"> + <#if results?size == 0> + There were no results. + <#else> +
    + <#list results as result> +
  • + ${result.title} +

    ${result.description}

    +
  • + +
+ + + <#-- This is a FreeMarker comment --> + <@currentTime /> + + + +<#macro currentTime> + ${.now?string.full} + diff --git a/samples/FreeMarker/layout.ftl b/samples/FreeMarker/layout.ftl new file mode 100644 index 00000000..18512dd6 --- /dev/null +++ b/samples/FreeMarker/layout.ftl @@ -0,0 +1,32 @@ +<#ftl strip_text=true /> + +<#macro page title> + + + + ${title} + <@metaTags /> + + + <#nested /> + <@footer /> + + + + + +<#--- + Default meta tags +--> +<#macro metaTags> + <#compress> + + + + + + + +<#macro footer> +

This page is using FreeMarker v${.version}

+ diff --git a/samples/G-code/lm.g b/samples/G-code/lm.g deleted file mode 100644 index 4b60a136..00000000 --- a/samples/G-code/lm.g +++ /dev/null @@ -1,25912 +0,0 @@ -48 36266 43 38 - 0 0.259 - 1 0.00232 - 2 0.0392 - 3 0.0317 - 4 0.141 - 6 0.000138 - 7 0.0468 - 8 0.036 - 9 0.0021 - 10 0.00146 - 13 0.0395 - 14 0.0443 - 15 0.00874 - 16 0.000331 - 18 0.013 - 19 0.0104 - 20 0.0106 - 21 0.121 - 22 0.0148 - 23 0.00816 - 24 0.000772 - 25 0.000165 - 26 0.004 - 28 0.0217 - 29 0.0184 - 30 0.00976 - 31 0.0173 - 32 0.00767 - 33 0.0122 - 34 5.51e-05 - 35 5.51e-05 - 36 0.000276 - 37 0.000551 - 38 2.76e-05 - 39 0.00645 - 40 0.000138 - 41 0.0352 - 42 0.00447 - 43 0.000221 - 44 0.00149 - 45 0.0171 - 46 0.00105 - 47 0.0106 - - 0 4 3 0 - 2 0.25 - 13 0.5 - 19 0.25 - - 2 619 18 15 - 0 0.00323 - 3 0.00808 - 4 0.00808 - 7 0.00162 - 8 0.784 - 9 0.042 - 10 0.00646 - 13 0.0517 - 14 0.00323 - 15 0.00969 - 20 0.00162 - 28 0.00162 - 29 0.00162 - 30 0.00485 - 31 0.0307 - 41 0.0178 - 42 0.00969 - 46 0.0145 - - 3 1 1 0 - 3 1 - - 4 1 1 0 - 4 1 - - 8 526 12 0 - 4 0.0076 - 7 0.0019 - 8 0.901 - 10 0.0019 - 13 0.0342 - 15 0.0019 - 29 0.0019 - 30 0.0057 - 31 0.019 - 41 0.0114 - 42 0.00951 - 46 0.0038 - - 9 37 5 0 - 3 0.027 - 8 0.162 - 9 0.703 - 41 0.0811 - 42 0.027 - - 10 3 1 0 - 10 1 - - 13 15 4 0 - 3 0.0667 - 13 0.8 - 14 0.0667 - 41 0.0667 - - 14 1 1 0 - 14 1 - - 15 5 1 0 - 15 1 - - 20 1 1 0 - 20 1 - - 21 5 3 0 - 0 0.2 - 8 0.6 - 41 0.2 - - 28 1 1 0 - 28 1 - - 31 10 2 0 - 13 0.1 - 31 0.9 - - 39 1 1 0 - 3 1 - - 45 7 1 0 - 46 1 - - 48 2 2 0 - 0 0.5 - 3 0.5 - - 3 1036 24 8 - 0 0.00869 - 2 0.00965 - 3 0.0425 - 4 0.496 - 7 0.0734 - 8 0.0502 - 9 0.000965 - 13 0.00579 - 14 0.000965 - 15 0.029 - 18 0.0463 - 20 0.0299 - 24 0.000965 - 26 0.000965 - 28 0.00579 - 30 0.00483 - 31 0.0029 - 32 0.00193 - 33 0.0029 - 38 0.000965 - 39 0.166 - 41 0.0154 - 42 0.0029 - 45 0.000965 - - 2 4 4 0 - 7 0.25 - 13 0.25 - 28 0.25 - 39 0.25 - - 3 39 6 0 - 4 0.128 - 7 0.385 - 8 0.0256 - 18 0.0769 - 32 0.0256 - 39 0.359 - - 8 34 10 0 - 0 0.0294 - 2 0.0882 - 3 0.0294 - 4 0.5 - 8 0.0882 - 18 0.0294 - 20 0.0882 - 28 0.0294 - 32 0.0294 - 39 0.0882 - - 9 2 2 0 - 0 0.5 - 13 0.5 - - 13 769 21 0 - 0 0.0065 - 2 0.0065 - 3 0.0325 - 4 0.635 - 7 0.078 - 8 0.0611 - 9 0.0013 - 13 0.0026 - 14 0.0013 - 15 0.0351 - 18 0.0572 - 20 0.0364 - 24 0.0013 - 26 0.0013 - 28 0.0052 - 30 0.0065 - 31 0.0039 - 33 0.0039 - 41 0.0195 - 42 0.0039 - 45 0.0013 - - 14 2 2 0 - 2 0.5 - 41 0.5 - - 41 1 1 0 - 13 1 - - 47 184 9 0 - 0 0.0109 - 2 0.00543 - 3 0.0978 - 4 0.0163 - 8 0.00543 - 13 0.00543 - 15 0.0163 - 38 0.00543 - 39 0.837 - - 4 59 13 4 - 0 0.305 - 2 0.0847 - 7 0.186 - 10 0.0169 - 13 0.0678 - 21 0.0339 - 28 0.0678 - 29 0.0678 - 30 0.0169 - 31 0.0339 - 41 0.0508 - 42 0.0169 - 47 0.0508 - - 2 5 2 0 - 0 0.2 - 7 0.8 - - 21 4 2 0 - 0 0.75 - 31 0.25 - - 47 8 5 0 - 2 0.375 - 7 0.25 - 10 0.125 - 29 0.125 - 47 0.125 - - 48 3 3 0 - 0 0.333 - 41 0.333 - 42 0.333 - - 6 14 7 1 - 4 0.143 - 6 0.357 - 7 0.143 - 13 0.0714 - 20 0.0714 - 40 0.0714 - 45 0.143 - - 6 5 3 0 - 4 0.4 - 7 0.4 - 20 0.2 - - 7 72 19 3 - 0 0.222 - 2 0.0139 - 3 0.0278 - 7 0.0278 - 8 0.0278 - 9 0.0139 - 13 0.0694 - 14 0.0833 - 15 0.0278 - 21 0.153 - 22 0.0139 - 28 0.0278 - 29 0.0417 - 30 0.0139 - 31 0.0833 - 33 0.0278 - 41 0.0694 - 42 0.0278 - 47 0.0278 - - 8 21 10 0 - 0 0.0952 - 9 0.0476 - 13 0.0476 - 14 0.0476 - 21 0.286 - 22 0.0476 - 28 0.0476 - 31 0.19 - 33 0.0476 - 41 0.143 - - 13 5 5 0 - 3 0.2 - 7 0.2 - 13 0.2 - 42 0.2 - 47 0.2 - - 21 6 5 0 - 0 0.333 - 8 0.167 - 14 0.167 - 29 0.167 - 41 0.167 - - 8 10450 37 10 - 0 0.257 - 1 0.0022 - 2 0.0624 - 3 0.00545 - 4 0.0268 - 7 0.0371 - 8 0.0275 - 9 0.00191 - 10 0.00383 - 13 0.0362 - 14 0.0615 - 15 0.00766 - 16 0.000287 - 18 0.00287 - 19 0.00957 - 20 0.00268 - 21 0.235 - 22 0.0462 - 23 0.0262 - 24 0.000287 - 26 0.00373 - 28 0.0187 - 29 0.0162 - 30 0.00612 - 31 0.0156 - 32 0.00689 - 33 0.0111 - 37 0.000574 - 39 0.00593 - 40 0.000191 - 41 0.0333 - 42 0.00201 - 43 9.57e-05 - 44 0.000383 - 45 0.0185 - 46 0.000957 - 47 0.00785 - - 2 485 30 0 - 0 0.103 - 2 0.0206 - 3 0.00412 - 4 0.181 - 7 0.146 - 8 0.0701 - 9 0.00412 - 13 0.00619 - 14 0.00206 - 15 0.00825 - 18 0.0247 - 19 0.00206 - 20 0.0309 - 21 0.0577 - 22 0.0186 - 23 0.0144 - 24 0.00206 - 26 0.0165 - 28 0.0227 - 29 0.0124 - 30 0.0206 - 31 0.00619 - 32 0.00412 - 33 0.0144 - 40 0.00206 - 41 0.126 - 42 0.00825 - 45 0.0454 - 46 0.00206 - 47 0.0227 - - 8 227 22 0 - 0 0.0308 - 2 0.0837 - 3 0.0176 - 4 0.348 - 7 0.185 - 8 0.0617 - 10 0.00881 - 18 0.0176 - 19 0.00441 - 20 0.0352 - 23 0.00441 - 26 0.022 - 28 0.00441 - 29 0.0264 - 30 0.0132 - 31 0.00441 - 32 0.00441 - 33 0.00441 - 41 0.0264 - 42 0.00441 - 46 0.00441 - 47 0.0881 - - 9 9 5 0 - 0 0.222 - 2 0.111 - 4 0.444 - 20 0.111 - 28 0.111 - - 10 12 2 0 - 4 0.5 - 18 0.5 - - 23 4 1 0 - 4 1 - - 26 11 6 0 - 0 0.0909 - 4 0.273 - 7 0.364 - 29 0.0909 - 41 0.0909 - 45 0.0909 - - 41 91 20 0 - 0 0.0879 - 2 0.022 - 3 0.011 - 4 0.187 - 7 0.231 - 8 0.022 - 15 0.011 - 18 0.011 - 20 0.011 - 21 0.033 - 22 0.022 - 23 0.022 - 28 0.011 - 29 0.011 - 30 0.011 - 31 0.011 - 41 0.143 - 42 0.022 - 45 0.0879 - 47 0.033 - - 42 4 3 0 - 4 0.5 - 7 0.25 - 21 0.25 - - 46 9 1 0 - 45 1 - - 47 9595 37 0 - 0 0.272 - 1 0.0024 - 2 0.0646 - 3 0.00521 - 4 0.00803 - 7 0.0258 - 8 0.0247 - 9 0.00188 - 10 0.00396 - 13 0.0391 - 14 0.0669 - 15 0.00782 - 16 0.000313 - 18 0.00073 - 19 0.0102 - 20 0.000313 - 21 0.252 - 22 0.0492 - 23 0.0275 - 24 0.000208 - 26 0.00271 - 28 0.0189 - 29 0.0162 - 30 0.00521 - 31 0.0165 - 32 0.00719 - 33 0.0113 - 37 0.000625 - 39 0.00646 - 40 0.000104 - 41 0.0278 - 42 0.00146 - 43 0.000104 - 44 0.000417 - 45 0.0158 - 46 0.000834 - 47 0.005 - - 9 882 28 4 - 0 0.22 - 1 0.00227 - 2 0.0737 - 3 0.0317 - 4 0.0249 - 7 0.0181 - 8 0.0159 - 13 0.0964 - 14 0.0351 - 15 0.00227 - 18 0.00113 - 19 0.0204 - 20 0.00113 - 21 0.339 - 22 0.00113 - 24 0.00113 - 26 0.00227 - 28 0.0147 - 29 0.0238 - 30 0.017 - 31 0.0068 - 32 0.00907 - 33 0.0102 - 34 0.00113 - 41 0.017 - 42 0.00113 - 45 0.00794 - 47 0.00454 - - 2 26 16 0 - 0 0.0769 - 1 0.0385 - 4 0.0385 - 7 0.0385 - 13 0.0385 - 14 0.115 - 19 0.0385 - 21 0.0385 - 28 0.115 - 29 0.0385 - 30 0.0769 - 32 0.0385 - 33 0.0385 - 41 0.154 - 45 0.0769 - 47 0.0385 - - 8 15 7 0 - 4 0.2 - 7 0.4 - 8 0.0667 - 13 0.0667 - 20 0.0667 - 28 0.0667 - 30 0.133 - - 41 7 7 0 - 0 0.143 - 2 0.143 - 4 0.143 - 7 0.143 - 14 0.143 - 28 0.143 - 32 0.143 - - 47 829 27 0 - 0 0.23 - 1 0.00121 - 2 0.0772 - 3 0.0338 - 4 0.0169 - 7 0.00965 - 8 0.0157 - 13 0.1 - 14 0.0326 - 15 0.00241 - 18 0.00121 - 19 0.0193 - 21 0.359 - 22 0.00121 - 24 0.00121 - 26 0.00241 - 28 0.00844 - 29 0.0241 - 30 0.0133 - 31 0.00724 - 32 0.00724 - 33 0.00965 - 34 0.00121 - 41 0.0133 - 42 0.00121 - 45 0.00603 - 47 0.00362 - - 10 101 11 2 - 0 0.0495 - 2 0.0495 - 4 0.277 - 7 0.119 - 8 0.119 - 18 0.158 - 20 0.0792 - 21 0.119 - 29 0.0099 - 42 0.0099 - 46 0.0099 - - 8 29 4 0 - 2 0.0345 - 4 0.552 - 18 0.241 - 20 0.172 - - 47 68 11 0 - 0 0.0735 - 2 0.0588 - 4 0.162 - 7 0.176 - 8 0.176 - 18 0.103 - 20 0.0294 - 21 0.176 - 29 0.0147 - 42 0.0147 - 46 0.0147 - - 13 1069 25 11 - 0 0.0131 - 2 0.0215 - 3 0.836 - 4 0.0187 - 7 0.0159 - 8 0.00935 - 9 0.00187 - 10 0.000935 - 13 0.0337 - 14 0.00281 - 15 0.00468 - 18 0.00281 - 20 0.00468 - 21 0.00468 - 22 0.000935 - 25 0.000935 - 26 0.00187 - 28 0.00374 - 29 0.00187 - 30 0.00281 - 31 0.00468 - 33 0.000935 - 41 0.00655 - 45 0.00281 - 47 0.00187 - - 2 32 12 0 - 2 0.0938 - 4 0.219 - 7 0.125 - 8 0.0938 - 15 0.0625 - 18 0.0312 - 20 0.0938 - 28 0.0312 - 30 0.0625 - 31 0.0625 - 33 0.0312 - 41 0.0938 - - 3 3 3 0 - 4 0.333 - 26 0.333 - 41 0.333 - - 8 23 10 0 - 0 0.304 - 2 0.13 - 3 0.0435 - 4 0.087 - 8 0.0435 - 13 0.13 - 21 0.13 - 41 0.0435 - 45 0.0435 - 47 0.0435 - - 9 4 2 0 - 0 0.25 - 4 0.75 - - 13 11 5 0 - 3 0.364 - 4 0.0909 - 7 0.182 - 8 0.273 - 26 0.0909 - - 21 1 1 0 - 25 1 - - 29 5 3 0 - 3 0.4 - 4 0.2 - 13 0.4 - - 31 13 6 0 - 0 0.154 - 3 0.308 - 4 0.154 - 7 0.0769 - 13 0.231 - 21 0.0769 - - 41 5 3 0 - 7 0.4 - 8 0.2 - 20 0.4 - - 42 2 2 0 - 18 0.5 - 47 0.5 - - 47 967 20 0 - 0 0.00414 - 2 0.0165 - 3 0.913 - 4 0.00207 - 7 0.00724 - 8 0.00207 - 9 0.00207 - 10 0.00103 - 13 0.029 - 14 0.0031 - 15 0.0031 - 18 0.00103 - 21 0.00103 - 22 0.00103 - 28 0.0031 - 29 0.00207 - 30 0.00103 - 31 0.0031 - 41 0.00207 - 45 0.00207 - - 14 13 7 0 - 2 0.0769 - 3 0.538 - 4 0.0769 - 14 0.0769 - 33 0.0769 - 42 0.0769 - 47 0.0769 - - 15 172 19 7 - 0 0.0174 - 2 0.064 - 3 0.0116 - 4 0.279 - 7 0.157 - 8 0.0291 - 15 0.198 - 18 0.0174 - 20 0.0116 - 26 0.00581 - 28 0.0116 - 31 0.0174 - 33 0.0116 - 41 0.0465 - 42 0.00581 - 43 0.00581 - 44 0.00581 - 45 0.0116 - 47 0.093 - - 2 6 4 0 - 4 0.5 - 7 0.167 - 8 0.167 - 41 0.167 - - 3 4 2 0 - 4 0.5 - 20 0.5 - - 8 54 11 0 - 0 0.0185 - 4 0.37 - 7 0.278 - 8 0.037 - 15 0.0185 - 18 0.037 - 26 0.0185 - 33 0.0185 - 41 0.0556 - 45 0.0185 - 47 0.13 - - 13 3 3 0 - 3 0.333 - 8 0.333 - 15 0.333 - - 15 30 10 0 - 2 0.1 - 3 0.0333 - 4 0.433 - 7 0.133 - 8 0.0333 - 15 0.0667 - 28 0.0333 - 33 0.0333 - 45 0.0333 - 47 0.1 - - 41 35 8 0 - 2 0.0286 - 4 0.286 - 7 0.143 - 15 0.286 - 18 0.0286 - 28 0.0286 - 41 0.0857 - 47 0.114 - - 47 39 10 0 - 0 0.0513 - 2 0.179 - 7 0.0513 - 15 0.487 - 31 0.0769 - 41 0.0256 - 42 0.0256 - 43 0.0256 - 44 0.0256 - 47 0.0513 - - 20 2 2 0 - 2 0.5 - 7 0.5 - - 21 3162 36 12 - 0 0.285 - 1 0.00316 - 2 0.038 - 3 0.00506 - 4 0.189 - 7 0.0664 - 8 0.00538 - 9 0.000633 - 13 0.0417 - 14 0.0237 - 15 0.00253 - 16 0.000316 - 18 0.0104 - 19 0.012 - 20 0.012 - 21 0.0904 - 22 0.00285 - 23 0.0038 - 24 0.00158 - 25 0.000316 - 26 0.00633 - 28 0.0266 - 29 0.0256 - 30 0.0139 - 31 0.0202 - 32 0.013 - 33 0.0164 - 35 0.000316 - 37 0.00158 - 41 0.0332 - 42 0.00506 - 43 0.000633 - 44 0.00127 - 45 0.031 - 46 0.000316 - 47 0.0104 - - 7 3 3 0 - 2 0.333 - 13 0.333 - 24 0.333 - - 8 1970 32 0 - 0 0.342 - 1 0.00305 - 2 0.0396 - 3 0.00457 - 4 0.177 - 7 0.0503 - 8 0.00508 - 9 0.000508 - 13 0.0315 - 14 0.0107 - 15 0.00152 - 18 0.00812 - 19 0.0142 - 20 0.00914 - 21 0.0985 - 22 0.00254 - 23 0.00254 - 24 0.00152 - 26 0.00558 - 28 0.0223 - 29 0.0198 - 30 0.0117 - 31 0.0173 - 32 0.0107 - 33 0.0183 - 37 0.00254 - 41 0.0294 - 42 0.00508 - 43 0.00102 - 44 0.00152 - 45 0.0421 - 47 0.0102 - - 9 279 22 0 - 0 0.305 - 1 0.00358 - 2 0.0287 - 3 0.00358 - 4 0.219 - 7 0.0645 - 13 0.0287 - 14 0.0179 - 19 0.00717 - 21 0.0358 - 26 0.0108 - 28 0.0538 - 29 0.0538 - 30 0.0323 - 31 0.0215 - 32 0.0251 - 33 0.0179 - 41 0.0394 - 42 0.0108 - 45 0.00717 - 46 0.00358 - 47 0.0108 - - 10 12 3 0 - 2 0.0833 - 4 0.667 - 18 0.25 - - 13 2 1 0 - 21 1 - - 21 123 19 0 - 0 0.358 - 1 0.00813 - 2 0.0732 - 4 0.0244 - 7 0.0325 - 13 0.0407 - 14 0.0976 - 15 0.00813 - 20 0.00813 - 21 0.0732 - 28 0.0244 - 29 0.0163 - 31 0.0488 - 32 0.0244 - 35 0.00813 - 41 0.0732 - 42 0.0244 - 45 0.0407 - 47 0.0163 - - 22 35 12 0 - 0 0.4 - 2 0.114 - 4 0.143 - 7 0.0286 - 13 0.0571 - 19 0.0286 - 21 0.0286 - 28 0.0571 - 29 0.0286 - 30 0.0286 - 32 0.0286 - 41 0.0571 - - 23 2 1 0 - 47 1 - - 31 380 26 0 - 0 0.1 - 2 0.0316 - 3 0.0158 - 4 0.395 - 7 0.168 - 8 0.0105 - 9 0.00263 - 13 0.0132 - 14 0.00263 - 18 0.0289 - 20 0.05 - 21 0.0368 - 22 0.00526 - 23 0.0132 - 25 0.00263 - 26 0.0132 - 28 0.0184 - 29 0.0184 - 30 0.00526 - 31 0.00526 - 32 0.00526 - 33 0.0105 - 41 0.0211 - 44 0.00263 - 45 0.0105 - 47 0.0132 - - 41 5 4 0 - 0 0.4 - 4 0.2 - 31 0.2 - 45 0.2 - - 45 6 5 0 - 0 0.167 - 4 0.167 - 7 0.333 - 19 0.167 - 45 0.167 - - 47 339 26 0 - 0 0.112 - 1 0.0059 - 2 0.0206 - 4 0.056 - 7 0.0649 - 8 0.00885 - 13 0.145 - 14 0.106 - 15 0.0118 - 16 0.00295 - 18 0.00885 - 19 0.0177 - 21 0.165 - 22 0.0059 - 23 0.0059 - 24 0.00295 - 26 0.00295 - 28 0.0383 - 29 0.0501 - 30 0.0265 - 31 0.0442 - 32 0.0206 - 33 0.0206 - 41 0.0472 - 45 0.0059 - 47 0.00295 - - 22 504 23 6 - 0 0.246 - 2 0.0417 - 3 0.00198 - 4 0.188 - 7 0.0258 - 13 0.0516 - 14 0.0675 - 15 0.00992 - 18 0.00397 - 19 0.0298 - 20 0.00198 - 21 0.101 - 24 0.00198 - 26 0.00595 - 28 0.0417 - 29 0.0218 - 30 0.0357 - 31 0.0198 - 32 0.00397 - 33 0.0159 - 41 0.0397 - 45 0.0179 - 47 0.0258 - - 8 431 21 0 - 0 0.262 - 2 0.0464 - 4 0.213 - 7 0.0255 - 13 0.0441 - 14 0.0534 - 15 0.00464 - 18 0.00464 - 19 0.0255 - 21 0.111 - 24 0.00232 - 26 0.00696 - 28 0.0394 - 29 0.0116 - 30 0.0302 - 31 0.0186 - 32 0.00464 - 33 0.0139 - 41 0.0418 - 45 0.0162 - 47 0.0232 - - 21 5 5 0 - 2 0.2 - 7 0.2 - 14 0.2 - 30 0.2 - 41 0.2 - - 30 3 2 0 - 0 0.667 - 7 0.333 - - 31 18 8 0 - 0 0.389 - 14 0.111 - 15 0.167 - 20 0.0556 - 29 0.111 - 33 0.0556 - 41 0.0556 - 45 0.0556 - - 45 3 2 0 - 4 0.667 - 30 0.333 - - 47 42 13 0 - 0 0.0476 - 3 0.0238 - 13 0.167 - 14 0.19 - 19 0.0952 - 21 0.0714 - 28 0.0714 - 29 0.0952 - 30 0.0714 - 31 0.0476 - 33 0.0238 - 45 0.0238 - 47 0.0714 - - 23 292 18 1 - 0 0.0651 - 2 0.0514 - 3 0.0274 - 4 0.634 - 8 0.0171 - 13 0.0103 - 14 0.00342 - 15 0.00342 - 18 0.0548 - 19 0.00342 - 20 0.0548 - 21 0.0171 - 28 0.00342 - 31 0.00342 - 32 0.00342 - 41 0.0205 - 42 0.00342 - 47 0.024 - - 21 11 4 0 - 2 0.0909 - 4 0.727 - 31 0.0909 - 41 0.0909 - - 24 7 2 0 - 0 0.857 - 21 0.143 - - 26 11 1 0 - 8 1 - - 28 10 7 0 - 2 0.1 - 15 0.1 - 19 0.1 - 21 0.1 - 26 0.3 - 28 0.2 - 45 0.1 - - 29 10 4 0 - 2 0.2 - 13 0.6 - 21 0.1 - 32 0.1 - - 30 47 15 1 - 0 0.447 - 2 0.0213 - 4 0.0426 - 7 0.0213 - 10 0.0213 - 13 0.0426 - 14 0.0213 - 21 0.106 - 22 0.0638 - 28 0.0213 - 31 0.0426 - 32 0.0213 - 41 0.0426 - 45 0.0426 - 47 0.0426 - - 2 3 2 0 - 4 0.667 - 7 0.333 - - 31 750 26 3 - 0 0.145 - 1 0.00133 - 2 0.0187 - 3 0.00267 - 4 0.0187 - 7 0.00933 - 8 0.00267 - 9 0.00133 - 13 0.0373 - 14 0.04 - 15 0.00133 - 19 0.00533 - 20 0.00133 - 21 0.583 - 22 0.028 - 23 0.0107 - 25 0.00133 - 28 0.0187 - 29 0.016 - 30 0.004 - 31 0.004 - 32 0.004 - 33 0.0147 - 41 0.00667 - 45 0.00933 - 47 0.0147 - - 2 19 10 0 - 2 0.0526 - 4 0.211 - 7 0.0526 - 8 0.105 - 14 0.0526 - 15 0.0526 - 21 0.105 - 22 0.0526 - 41 0.0526 - 47 0.263 - - 41 2 2 0 - 4 0.5 - 41 0.5 - - 47 728 24 0 - 0 0.15 - 1 0.00137 - 2 0.0179 - 3 0.00275 - 4 0.0124 - 7 0.00824 - 9 0.00137 - 13 0.0385 - 14 0.0398 - 19 0.00549 - 20 0.00137 - 21 0.598 - 22 0.0275 - 23 0.011 - 25 0.00137 - 28 0.0192 - 29 0.0151 - 30 0.00412 - 31 0.00412 - 32 0.00412 - 33 0.0151 - 41 0.00412 - 45 0.00962 - 47 0.00824 - - 32 2 1 0 - 14 1 - - 37 1 1 0 - 47 1 - - 39 235 16 2 - 2 0.017 - 4 0.66 - 7 0.034 - 8 0.0809 - 9 0.0128 - 13 0.00426 - 18 0.0468 - 20 0.0426 - 28 0.017 - 29 0.00851 - 30 0.00426 - 31 0.0128 - 36 0.0128 - 41 0.034 - 42 0.00851 - 44 0.00426 - - 3 172 15 0 - 2 0.0233 - 4 0.721 - 7 0.0291 - 8 0.0698 - 9 0.00581 - 13 0.00581 - 18 0.0407 - 20 0.0233 - 28 0.0233 - 29 0.0116 - 30 0.00581 - 31 0.0174 - 41 0.00581 - 42 0.0116 - 44 0.00581 - - 8 62 8 0 - 4 0.484 - 7 0.0484 - 8 0.113 - 9 0.0323 - 18 0.0645 - 20 0.0968 - 36 0.0484 - 41 0.113 - - 41 151 10 6 - 2 0.00662 - 3 0.00662 - 8 0.603 - 9 0.0464 - 13 0.0331 - 14 0.00662 - 15 0.232 - 21 0.0464 - 31 0.0132 - 42 0.00662 - - 2 11 4 0 - 8 0.545 - 9 0.273 - 13 0.0909 - 31 0.0909 - - 8 109 4 0 - 8 0.642 - 13 0.0183 - 15 0.321 - 21 0.0183 - - 9 2 1 0 - 9 1 - - 13 4 3 0 - 3 0.25 - 8 0.25 - 13 0.5 - - 21 13 4 0 - 8 0.385 - 9 0.154 - 14 0.0769 - 21 0.385 - - 49 1 1 0 - 2 1 - - 42 10 6 0 - 7 0.1 - 8 0.4 - 9 0.1 - 13 0.2 - 15 0.1 - 46 0.1 - - 45 91 17 2 - 0 0.473 - 1 0.011 - 2 0.0989 - 3 0.011 - 4 0.044 - 7 0.0879 - 8 0.033 - 9 0.011 - 13 0.0549 - 14 0.011 - 18 0.011 - 19 0.011 - 21 0.0769 - 22 0.033 - 28 0.011 - 30 0.011 - 31 0.011 - - 21 18 5 0 - 0 0.722 - 2 0.0556 - 4 0.0556 - 7 0.0556 - 21 0.111 - - 48 7 3 0 - 0 0.429 - 7 0.143 - 13 0.429 - - 46 13 3 0 - 8 0.692 - 9 0.0769 - 41 0.231 - - 47 14411 40 29 - 0 0.326 - 1 0.00291 - 2 0.0278 - 3 0.005 - 4 0.176 - 7 0.0572 - 8 0.0154 - 9 0.000555 - 10 0.000416 - 13 0.043 - 14 0.0509 - 15 0.00638 - 16 0.000416 - 18 0.0164 - 19 0.0131 - 20 0.0133 - 21 0.0505 - 22 0.000833 - 23 0.000139 - 24 0.000971 - 25 0.000208 - 26 0.00465 - 28 0.0271 - 29 0.0232 - 30 0.0121 - 31 0.021 - 32 0.00965 - 33 0.0153 - 34 6.94e-05 - 35 6.94e-05 - 36 0.000347 - 37 0.000625 - 40 0.000139 - 41 0.0389 - 42 0.00527 - 43 0.000208 - 44 0.0018 - 45 0.0184 - 46 0.000833 - 47 0.0134 - - 0 4 3 0 - 2 0.25 - 13 0.5 - 19 0.25 - - 2 4 3 0 - 0 0.5 - 7 0.25 - 29 0.25 - - 3 814 22 0 - 0 0.0111 - 2 0.0111 - 3 0.00614 - 4 0.63 - 7 0.0934 - 8 0.0639 - 9 0.00123 - 13 0.00369 - 14 0.00123 - 15 0.0319 - 18 0.059 - 20 0.0381 - 24 0.00123 - 26 0.00123 - 28 0.00614 - 30 0.00614 - 31 0.00369 - 32 0.00246 - 33 0.00369 - 41 0.0197 - 42 0.00369 - 45 0.00123 - - 4 55 12 0 - 0 0.327 - 2 0.0727 - 7 0.164 - 13 0.0727 - 21 0.0364 - 28 0.0727 - 29 0.0727 - 30 0.0182 - 31 0.0364 - 41 0.0545 - 42 0.0182 - 47 0.0545 - - 6 8 5 0 - 4 0.25 - 7 0.25 - 20 0.125 - 40 0.125 - 45 0.25 - - 7 60 17 0 - 0 0.267 - 2 0.0167 - 3 0.0333 - 7 0.0333 - 8 0.0333 - 13 0.0833 - 14 0.0833 - 15 0.0333 - 21 0.117 - 28 0.0333 - 29 0.0333 - 30 0.0167 - 31 0.1 - 33 0.0333 - 41 0.0167 - 42 0.0333 - 47 0.0333 - - 8 6320 35 0 - 0 0.424 - 1 0.00364 - 2 0.0198 - 3 0.00301 - 4 0.0399 - 7 0.0562 - 8 0.00918 - 9 0.000316 - 10 0.000949 - 13 0.0546 - 14 0.0835 - 15 0.00411 - 16 0.000475 - 18 0.00475 - 19 0.0158 - 20 0.00443 - 21 0.0685 - 22 0.00127 - 23 0.000158 - 24 0.000475 - 26 0.00459 - 28 0.0309 - 29 0.0267 - 30 0.0101 - 31 0.0258 - 32 0.0114 - 33 0.0184 - 37 0.000633 - 40 0.000158 - 41 0.0375 - 42 0.00301 - 44 0.000475 - 45 0.0209 - 46 0.00111 - 47 0.013 - - 9 432 27 0 - 0 0.449 - 1 0.00463 - 2 0.0648 - 3 0.00926 - 4 0.0394 - 7 0.0347 - 8 0.00231 - 13 0.0509 - 14 0.0417 - 15 0.00463 - 18 0.00231 - 19 0.0417 - 20 0.00231 - 21 0.0255 - 24 0.00231 - 26 0.00231 - 28 0.0278 - 29 0.0486 - 30 0.0347 - 31 0.0139 - 32 0.0185 - 33 0.0208 - 34 0.00231 - 41 0.0301 - 42 0.00231 - 45 0.0139 - 47 0.00926 - - 10 72 9 0 - 0 0.0694 - 2 0.0278 - 4 0.361 - 7 0.167 - 18 0.222 - 20 0.111 - 29 0.0139 - 42 0.0139 - 46 0.0139 - - 13 133 22 0 - 0 0.105 - 2 0.0602 - 3 0.0602 - 4 0.128 - 7 0.0902 - 8 0.0752 - 13 0.18 - 14 0.0226 - 15 0.015 - 18 0.0226 - 20 0.0376 - 21 0.0226 - 25 0.00752 - 26 0.015 - 28 0.0226 - 29 0.015 - 30 0.0226 - 31 0.0376 - 33 0.00752 - 41 0.0226 - 45 0.015 - 47 0.015 - - 14 5 5 0 - 4 0.2 - 14 0.2 - 33 0.2 - 42 0.2 - 47 0.2 - - 15 130 17 0 - 0 0.0231 - 2 0.0462 - 4 0.369 - 7 0.2 - 8 0.0385 - 15 0.0308 - 18 0.0231 - 20 0.0154 - 26 0.00769 - 28 0.0154 - 31 0.0231 - 33 0.0154 - 41 0.0385 - 43 0.00769 - 44 0.00769 - 45 0.0154 - 47 0.123 - - 21 2958 36 0 - 0 0.305 - 1 0.00338 - 2 0.0389 - 3 0.00507 - 4 0.2 - 7 0.069 - 8 0.00541 - 9 0.000338 - 13 0.0433 - 14 0.0237 - 15 0.0027 - 16 0.000338 - 18 0.0112 - 19 0.0128 - 20 0.0128 - 21 0.0541 - 22 0.00101 - 23 0.000338 - 24 0.00169 - 25 0.000338 - 26 0.00676 - 28 0.0284 - 29 0.0274 - 30 0.0145 - 31 0.0213 - 32 0.0139 - 33 0.0176 - 35 0.000338 - 37 0.00169 - 41 0.0311 - 42 0.00541 - 43 0.000338 - 44 0.00135 - 45 0.027 - 46 0.000338 - 47 0.0112 - - 22 451 23 0 - 0 0.275 - 2 0.0466 - 3 0.00222 - 4 0.208 - 7 0.0288 - 13 0.0355 - 14 0.071 - 15 0.0111 - 18 0.00443 - 19 0.0333 - 20 0.00222 - 21 0.0244 - 24 0.00222 - 26 0.00665 - 28 0.0466 - 29 0.0244 - 30 0.0399 - 31 0.0222 - 32 0.00443 - 33 0.0177 - 41 0.0443 - 45 0.02 - 47 0.0288 - - 23 286 18 0 - 0 0.0664 - 2 0.0524 - 3 0.028 - 4 0.647 - 8 0.0035 - 13 0.0105 - 14 0.0035 - 15 0.0035 - 18 0.0559 - 19 0.0035 - 20 0.0559 - 21 0.0105 - 28 0.0035 - 31 0.0035 - 32 0.0035 - 41 0.021 - 42 0.0035 - 47 0.0245 - - 24 7 2 0 - 0 0.857 - 21 0.143 - - 28 9 6 0 - 15 0.111 - 19 0.111 - 21 0.111 - 26 0.333 - 28 0.222 - 45 0.111 - - 29 5 4 0 - 2 0.4 - 13 0.2 - 21 0.2 - 32 0.2 - - 30 38 12 0 - 0 0.553 - 4 0.0526 - 7 0.0263 - 13 0.0263 - 14 0.0263 - 21 0.0789 - 28 0.0263 - 31 0.0526 - 32 0.0263 - 41 0.0526 - 45 0.0263 - 47 0.0526 - - 31 286 25 0 - 0 0.381 - 1 0.0035 - 2 0.0105 - 3 0.00699 - 4 0.042 - 7 0.0245 - 8 0.0035 - 9 0.0035 - 13 0.0385 - 14 0.105 - 15 0.0035 - 19 0.014 - 20 0.0035 - 21 0.119 - 22 0.0035 - 25 0.0035 - 28 0.049 - 29 0.042 - 30 0.0105 - 31 0.0105 - 32 0.0105 - 33 0.0385 - 41 0.014 - 45 0.021 - 47 0.0385 - - 32 2 1 0 - 14 1 - - 39 234 16 0 - 2 0.0128 - 4 0.662 - 7 0.0342 - 8 0.0812 - 9 0.0128 - 13 0.00427 - 18 0.047 - 20 0.0427 - 28 0.0171 - 29 0.00855 - 30 0.00427 - 31 0.0128 - 36 0.0128 - 41 0.0342 - 42 0.00855 - 44 0.00427 - - 44 1 1 0 - 3 1 - - 45 74 15 0 - 0 0.581 - 1 0.0135 - 2 0.027 - 3 0.0135 - 4 0.0541 - 7 0.108 - 8 0.0405 - 13 0.0676 - 14 0.0135 - 18 0.0135 - 19 0.0135 - 21 0.0135 - 28 0.0135 - 30 0.0135 - 31 0.0135 - - 48 753 27 0 - 0 0.493 - 1 0.00531 - 2 0.0372 - 3 0.00133 - 4 0.089 - 7 0.0266 - 8 0.00266 - 13 0.0505 - 14 0.0398 - 15 0.00133 - 18 0.0186 - 19 0.00797 - 20 0.00797 - 21 0.0544 - 24 0.00266 - 26 0.00266 - 28 0.0133 - 29 0.0133 - 30 0.0093 - 31 0.00664 - 32 0.00531 - 33 0.0146 - 41 0.0452 - 42 0.0186 - 45 0.0212 - 46 0.00266 - 47 0.0093 - - 49 148 24 0 - 0 0.412 - 1 0.00676 - 2 0.0405 - 3 0.00676 - 4 0.142 - 7 0.027 - 13 0.00676 - 14 0.0203 - 15 0.0135 - 18 0.0135 - 19 0.00676 - 21 0.0405 - 26 0.00676 - 28 0.0608 - 29 0.0135 - 30 0.00676 - 31 0.0405 - 32 0.0135 - 33 0.0135 - 41 0.0473 - 42 0.00676 - 45 0.0203 - 46 0.00676 - 47 0.027 - - 55 268 22 0 - 0 0.31 - 2 0.0373 - 3 0.00373 - 4 0.00746 - 7 0.0187 - 13 0.0224 - 14 0.0261 - 16 0.00373 - 18 0.00373 - 19 0.00746 - 21 0.0299 - 24 0.00373 - 26 0.0149 - 28 0.0299 - 29 0.056 - 30 0.0261 - 31 0.00746 - 33 0.00746 - 41 0.347 - 42 0.0187 - 45 0.00746 - 47 0.0112 - - 57 3 3 0 - 2 0.333 - 13 0.333 - 41 0.333 - - 60 843 26 0 - 0 0.0119 - 2 0.00949 - 3 0.00356 - 4 0.619 - 7 0.051 - 8 0.0605 - 13 0.00356 - 15 0.013 - 16 0.00119 - 18 0.0652 - 19 0.00119 - 20 0.0522 - 21 0.00237 - 28 0.0142 - 29 0.00119 - 30 0.00593 - 31 0.0225 - 32 0.00237 - 33 0.00119 - 36 0.00237 - 41 0.019 - 42 0.0107 - 43 0.00119 - 44 0.0202 - 45 0.00237 - 47 0.00237 - - 48 771 28 1 - 0 0.481 - 1 0.00519 - 2 0.0389 - 3 0.00259 - 4 0.0908 - 7 0.0259 - 8 0.00259 - 13 0.0493 - 14 0.0389 - 15 0.0013 - 18 0.0182 - 19 0.00778 - 20 0.00778 - 21 0.0584 - 22 0.0013 - 24 0.00259 - 26 0.00259 - 28 0.013 - 29 0.013 - 30 0.00908 - 31 0.00649 - 32 0.00519 - 33 0.0143 - 41 0.0441 - 42 0.0182 - 45 0.0298 - 46 0.00259 - 47 0.00908 - - 8 2 2 0 - 14 0.5 - 29 0.5 - - 49 153 24 9 - 0 0.399 - 1 0.00654 - 2 0.0392 - 3 0.00654 - 4 0.137 - 7 0.0261 - 13 0.00654 - 14 0.0196 - 15 0.0131 - 18 0.0131 - 19 0.00654 - 21 0.0588 - 26 0.00654 - 28 0.0588 - 29 0.0131 - 30 0.00654 - 31 0.0392 - 32 0.0131 - 33 0.0131 - 41 0.0523 - 42 0.00654 - 45 0.0261 - 46 0.00654 - 47 0.0261 - - 4 2 2 0 - 7 0.5 - 47 0.5 - - 8 94 19 0 - 0 0.457 - 1 0.0106 - 2 0.0319 - 4 0.17 - 7 0.0106 - 14 0.0106 - 19 0.0106 - 21 0.0532 - 26 0.0106 - 28 0.0638 - 29 0.0213 - 30 0.0106 - 31 0.0319 - 32 0.0213 - 33 0.0106 - 41 0.0319 - 45 0.0213 - 46 0.0106 - 47 0.0106 - - 9 3 1 0 - 28 1 - - 22 4 4 0 - 2 0.25 - 13 0.25 - 31 0.25 - 47 0.25 - - 30 3 3 0 - 14 0.333 - 18 0.333 - 41 0.333 - - 31 27 11 0 - 0 0.37 - 2 0.037 - 3 0.037 - 4 0.185 - 7 0.0741 - 18 0.037 - 21 0.0741 - 31 0.037 - 33 0.037 - 45 0.0741 - 47 0.037 - - 47 5 5 0 - 0 0.2 - 15 0.2 - 21 0.2 - 31 0.2 - 42 0.2 - - 48 3 3 0 - 0 0.333 - 14 0.333 - 15 0.333 - - 55 2 1 0 - 41 1 - - 50 5 4 0 - 8 0.4 - 13 0.2 - 28 0.2 - 46 0.2 - - 55 276 23 7 - 0 0.301 - 2 0.0362 - 3 0.0109 - 4 0.00725 - 7 0.0181 - 13 0.0217 - 14 0.029 - 16 0.00362 - 18 0.00362 - 19 0.00725 - 21 0.0435 - 24 0.00362 - 26 0.0145 - 28 0.029 - 29 0.0543 - 30 0.0254 - 31 0.00725 - 33 0.00725 - 41 0.337 - 42 0.0181 - 44 0.00362 - 45 0.00725 - 47 0.0109 - - 8 141 15 0 - 0 0.206 - 2 0.0355 - 4 0.00709 - 7 0.0213 - 13 0.0142 - 14 0.00709 - 16 0.00709 - 19 0.0142 - 21 0.0567 - 29 0.00709 - 30 0.0142 - 33 0.00709 - 41 0.582 - 45 0.00709 - 47 0.0142 - - 9 97 15 0 - 0 0.423 - 2 0.0309 - 7 0.0206 - 13 0.0309 - 14 0.0309 - 21 0.0309 - 24 0.0103 - 26 0.0412 - 28 0.0515 - 29 0.144 - 30 0.0412 - 33 0.0103 - 41 0.0722 - 42 0.0515 - 47 0.0103 - - 21 8 6 0 - 0 0.25 - 3 0.125 - 13 0.125 - 14 0.25 - 30 0.125 - 45 0.125 - - 22 12 6 0 - 0 0.333 - 2 0.0833 - 21 0.0833 - 28 0.25 - 31 0.167 - 41 0.0833 - - 47 5 4 0 - 0 0.2 - 3 0.4 - 14 0.2 - 44 0.2 - - 48 1 1 0 - 18 1 - - 55 2 2 0 - 2 0.5 - 4 0.5 - - 57 5 5 0 - 2 0.2 - 9 0.2 - 13 0.2 - 31 0.2 - 41 0.2 - - 58 4 3 0 - 0 0.25 - 2 0.5 - 21 0.25 - - 60 843 26 5 - 0 0.0119 - 2 0.00949 - 3 0.00356 - 4 0.619 - 7 0.051 - 8 0.0605 - 13 0.00356 - 15 0.013 - 16 0.00119 - 18 0.0652 - 19 0.00119 - 20 0.0522 - 21 0.00237 - 28 0.0142 - 29 0.00119 - 30 0.00593 - 31 0.0225 - 32 0.00237 - 33 0.00119 - 36 0.00237 - 41 0.019 - 42 0.0107 - 43 0.00119 - 44 0.0202 - 45 0.00237 - 47 0.00237 - - 9 7 5 0 - 0 0.286 - 15 0.143 - 28 0.286 - 41 0.143 - 45 0.143 - - 13 117 18 0 - 0 0.0256 - 2 0.00855 - 4 0.282 - 7 0.308 - 8 0.00855 - 13 0.00855 - 15 0.0855 - 16 0.00855 - 18 0.0427 - 20 0.0598 - 21 0.00855 - 28 0.0256 - 29 0.00855 - 31 0.0171 - 32 0.00855 - 36 0.00855 - 41 0.0342 - 42 0.0513 - - 14 5 4 0 - 4 0.4 - 18 0.2 - 30 0.2 - 43 0.2 - - 21 4 3 0 - 0 0.5 - 21 0.25 - 28 0.25 - - 47 702 21 0 - 0 0.00285 - 2 0.00997 - 3 0.00427 - 4 0.689 - 7 0.00997 - 8 0.0712 - 13 0.00285 - 18 0.0698 - 19 0.00142 - 20 0.0513 - 28 0.00712 - 30 0.0057 - 31 0.0242 - 32 0.00142 - 33 0.00142 - 36 0.00142 - 41 0.0128 - 42 0.00427 - 44 0.0242 - 45 0.00142 - 47 0.00285 - - 64 4 2 0 - 9 0.25 - 13 0.75 - -49 42427 42 32 - 0 0.124 - 1 0.000896 - 2 0.0365 - 3 0.00983 - 4 0.00596 - 5 0.00099 - 6 0.000165 - 7 0.0272 - 8 0.00695 - 9 0.00104 - 10 0.000754 - 12 0.0316 - 13 0.111 - 14 0.0815 - 15 0.04 - 16 0.00189 - 17 9.43e-05 - 18 0.000707 - 19 0.0424 - 20 4.71e-05 - 21 0.054 - 22 0.00429 - 23 0.00099 - 24 0.00568 - 26 0.00653 - 28 0.0383 - 29 0.0368 - 30 0.025 - 31 0.0372 - 32 0.0107 - 33 0.0115 - 34 0.00938 - 35 0.00481 - 37 0.00033 - 40 9.43e-05 - 41 0.112 - 42 0.0079 - 43 0.000754 - 44 0.00113 - 45 0.00988 - 46 0.00189 - 47 0.0968 - - 2 138 19 10 - 2 0.0145 - 3 0.0145 - 4 0.0725 - 7 0.087 - 8 0.029 - 9 0.0145 - 10 0.00725 - 13 0.029 - 14 0.00725 - 19 0.00725 - 21 0.536 - 22 0.0725 - 24 0.00725 - 26 0.00725 - 31 0.00725 - 41 0.0435 - 45 0.00725 - 46 0.00725 - 47 0.029 - - 2 2 2 0 - 2 0.5 - 3 0.5 - - 7 9 1 0 - 7 1 - - 8 5 2 0 - 7 0.6 - 8 0.4 - - 9 2 1 0 - 9 1 - - 10 1 1 0 - 10 1 - - 13 3 2 0 - 4 0.333 - 13 0.667 - - 21 82 7 0 - 8 0.0122 - 13 0.0122 - 21 0.878 - 22 0.0122 - 26 0.0122 - 41 0.061 - 47 0.0122 - - 22 10 2 0 - 14 0.1 - 22 0.9 - - 24 1 1 0 - 24 1 - - 47 20 10 0 - 2 0.05 - 4 0.45 - 8 0.05 - 13 0.05 - 19 0.05 - 21 0.05 - 31 0.05 - 45 0.05 - 46 0.05 - 47 0.15 - - 3 35 11 3 - 2 0.0286 - 4 0.0286 - 7 0.0286 - 14 0.114 - 16 0.0286 - 26 0.371 - 28 0.0286 - 29 0.114 - 30 0.0286 - 31 0.0286 - 41 0.2 - - 13 3 3 0 - 4 0.333 - 26 0.333 - 28 0.333 - - 26 10 4 0 - 7 0.1 - 14 0.1 - 29 0.1 - 41 0.7 - - 47 20 6 0 - 2 0.05 - 14 0.15 - 26 0.55 - 29 0.15 - 30 0.05 - 31 0.05 - - 4 146 26 8 - 0 0.151 - 1 0.00685 - 2 0.00685 - 3 0.0274 - 4 0.00685 - 7 0.349 - 8 0.0205 - 12 0.00685 - 13 0.0342 - 14 0.0616 - 15 0.0137 - 17 0.0274 - 19 0.0205 - 21 0.0479 - 26 0.00685 - 28 0.0342 - 29 0.0137 - 30 0.0205 - 31 0.0342 - 33 0.00685 - 34 0.00685 - 41 0.0274 - 42 0.0137 - 44 0.00685 - 45 0.0274 - 47 0.0205 - - 2 10 6 0 - 0 0.5 - 1 0.1 - 15 0.1 - 21 0.1 - 26 0.1 - 31 0.1 - - 7 9 8 0 - 8 0.111 - 13 0.222 - 15 0.111 - 21 0.111 - 29 0.111 - 31 0.111 - 45 0.111 - 47 0.111 - - 8 4 3 0 - 8 0.25 - 17 0.5 - 45 0.25 - - 9 4 3 0 - 0 0.5 - 13 0.25 - 31 0.25 - - 13 9 7 0 - 3 0.111 - 7 0.111 - 8 0.111 - 12 0.111 - 19 0.222 - 41 0.222 - 45 0.111 - - 21 17 10 0 - 0 0.294 - 7 0.0588 - 13 0.0588 - 14 0.0588 - 21 0.176 - 29 0.0588 - 30 0.0588 - 41 0.0588 - 42 0.118 - 45 0.0588 - - 22 14 6 0 - 0 0.429 - 17 0.143 - 28 0.214 - 31 0.0714 - 33 0.0714 - 47 0.0714 - - 47 77 16 0 - 0 0.0519 - 2 0.013 - 3 0.039 - 4 0.013 - 7 0.636 - 13 0.013 - 14 0.0909 - 19 0.013 - 21 0.026 - 28 0.013 - 30 0.026 - 31 0.013 - 34 0.013 - 41 0.013 - 44 0.013 - 47 0.013 - - 5 2 2 0 - 7 0.5 - 14 0.5 - - 6 14 7 2 - 2 0.0714 - 6 0.5 - 13 0.0714 - 21 0.0714 - 41 0.143 - 42 0.0714 - 45 0.0714 - - 6 7 6 0 - 2 0.143 - 13 0.143 - 21 0.143 - 41 0.286 - 42 0.143 - 45 0.143 - - 47 7 1 0 - 6 1 - - 7 947 30 7 - 0 0.103 - 2 0.0454 - 3 0.00528 - 4 0.0127 - 7 0.0275 - 8 0.0158 - 9 0.0116 - 12 0.00422 - 13 0.13 - 14 0.106 - 15 0.0106 - 19 0.0106 - 21 0.0232 - 22 0.0422 - 23 0.00106 - 24 0.00528 - 28 0.0465 - 29 0.0232 - 30 0.0338 - 31 0.038 - 32 0.0106 - 33 0.0095 - 34 0.00106 - 35 0.00106 - 41 0.229 - 42 0.0106 - 44 0.00106 - 45 0.00317 - 46 0.00317 - 47 0.0348 - - 2 12 7 0 - 2 0.0833 - 21 0.0833 - 28 0.167 - 30 0.25 - 32 0.0833 - 33 0.167 - 47 0.167 - - 4 49 14 0 - 4 0.0408 - 7 0.0204 - 8 0.0612 - 12 0.0204 - 13 0.286 - 14 0.102 - 15 0.0408 - 19 0.0408 - 21 0.0816 - 24 0.0408 - 28 0.102 - 31 0.102 - 41 0.0408 - 47 0.0204 - - 8 3 3 0 - 9 0.333 - 14 0.333 - 47 0.333 - - 10 127 17 0 - 0 0.0551 - 2 0.134 - 3 0.00787 - 7 0.165 - 8 0.0157 - 12 0.0157 - 13 0.00787 - 14 0.0394 - 15 0.00787 - 21 0.0315 - 28 0.0709 - 30 0.0236 - 31 0.0157 - 34 0.00787 - 41 0.299 - 42 0.0394 - 47 0.063 - - 13 5 3 0 - 0 0.4 - 13 0.2 - 31 0.4 - - 21 75 20 0 - 0 0.107 - 2 0.0133 - 4 0.0267 - 7 0.0133 - 8 0.08 - 13 0.12 - 14 0.0667 - 15 0.0133 - 21 0.0533 - 22 0.107 - 24 0.04 - 28 0.0267 - 29 0.0133 - 31 0.0133 - 32 0.0133 - 35 0.0133 - 41 0.0933 - 42 0.0133 - 46 0.0133 - 47 0.16 - - 47 667 27 0 - 0 0.12 - 2 0.0345 - 3 0.006 - 4 0.012 - 7 0.003 - 8 0.006 - 9 0.015 - 12 0.0015 - 13 0.145 - 14 0.124 - 15 0.009 - 19 0.012 - 21 0.0135 - 22 0.048 - 23 0.0015 - 28 0.0375 - 29 0.0315 - 30 0.039 - 31 0.039 - 32 0.012 - 33 0.0105 - 41 0.25 - 42 0.006 - 44 0.0015 - 45 0.0045 - 46 0.003 - 47 0.0135 - - 8 249 26 3 - 0 0.0723 - 2 0.0723 - 3 0.012 - 4 0.0201 - 7 0.0482 - 8 0.0161 - 13 0.12 - 14 0.108 - 15 0.0281 - 19 0.0161 - 21 0.0281 - 22 0.0201 - 23 0.0161 - 24 0.00803 - 28 0.0683 - 29 0.0482 - 30 0.0442 - 31 0.0281 - 32 0.0161 - 33 0.0161 - 41 0.0643 - 42 0.00402 - 44 0.00402 - 45 0.00803 - 46 0.00402 - 47 0.108 - - 2 3 2 0 - 30 0.333 - 41 0.667 - - 13 11 8 0 - 2 0.0909 - 7 0.0909 - 13 0.273 - 28 0.0909 - 29 0.182 - 31 0.0909 - 41 0.0909 - 47 0.0909 - - 21 2 2 0 - 4 0.5 - 28 0.5 - - 9 115 18 1 - 0 0.0696 - 2 0.0348 - 3 0.0783 - 4 0.0435 - 8 0.0087 - 13 0.2 - 14 0.139 - 15 0.0087 - 21 0.0261 - 28 0.0522 - 29 0.191 - 30 0.0174 - 31 0.0087 - 32 0.0261 - 33 0.0174 - 41 0.0087 - 45 0.0174 - 47 0.0522 - - 7 9 6 0 - 0 0.222 - 4 0.111 - 13 0.111 - 14 0.333 - 28 0.111 - 45 0.111 - - 10 136 9 1 - 2 0.00735 - 4 0.00735 - 7 0.934 - 13 0.00735 - 14 0.00735 - 18 0.00735 - 19 0.00735 - 33 0.00735 - 41 0.0147 - - 2 1 1 0 - 18 1 - - 11 6 1 0 - 47 1 - - 13 104 21 2 - 0 0.0577 - 2 0.0481 - 3 0.0481 - 4 0.0865 - 7 0.0577 - 8 0.135 - 13 0.0865 - 14 0.0385 - 18 0.00962 - 19 0.0192 - 21 0.00962 - 26 0.0288 - 28 0.0577 - 29 0.0385 - 30 0.125 - 31 0.0577 - 32 0.00962 - 33 0.00962 - 34 0.00962 - 41 0.0577 - 42 0.00962 - - 7 12 8 0 - 0 0.25 - 2 0.0833 - 8 0.0833 - 19 0.0833 - 21 0.0833 - 29 0.0833 - 41 0.25 - 42 0.0833 - - 26 3 3 0 - 14 0.333 - 28 0.333 - 30 0.333 - - 14 6 3 0 - 3 0.333 - 13 0.5 - 41 0.167 - - 15 28 4 0 - 15 0.0714 - 18 0.0357 - 45 0.0714 - 47 0.821 - - 17 5 4 0 - 0 0.2 - 7 0.2 - 31 0.2 - 47 0.4 - - 19 7 4 0 - 3 0.143 - 14 0.571 - 34 0.143 - 45 0.143 - - 21 18349 40 5 - 0 0.129 - 1 0.000872 - 2 0.038 - 3 0.00283 - 4 0.00474 - 5 0.00114 - 7 0.0186 - 8 0.0055 - 9 0.000708 - 10 0.00125 - 12 0.0355 - 13 0.106 - 14 0.0861 - 15 0.0422 - 16 0.00202 - 18 0.00049 - 19 0.0463 - 20 5.45e-05 - 21 0.0809 - 22 0.00665 - 23 0.00196 - 24 0.00501 - 26 0.00605 - 28 0.0338 - 29 0.0305 - 30 0.0215 - 31 0.0337 - 32 0.00948 - 33 0.0101 - 34 0.0104 - 35 0.00534 - 37 0.000381 - 40 0.000109 - 41 0.105 - 42 0.00741 - 43 0.000708 - 44 0.00109 - 45 0.00981 - 46 0.00191 - 47 0.0966 - - 2 72 20 0 - 0 0.125 - 2 0.0417 - 4 0.0417 - 8 0.0139 - 13 0.125 - 14 0.111 - 15 0.0139 - 19 0.0556 - 21 0.0694 - 22 0.0278 - 23 0.0139 - 28 0.0556 - 30 0.0556 - 31 0.0556 - 33 0.0139 - 40 0.0139 - 41 0.0694 - 42 0.0278 - 45 0.0278 - 47 0.0417 - - 21 918 33 0 - 0 0.0915 - 2 0.0447 - 3 0.00109 - 4 0.00871 - 7 0.0229 - 8 0.012 - 9 0.00109 - 10 0.00763 - 12 0.0272 - 13 0.127 - 14 0.0915 - 15 0.0196 - 16 0.00218 - 18 0.00109 - 19 0.0272 - 21 0.0664 - 24 0.0185 - 26 0.00218 - 28 0.0566 - 29 0.037 - 30 0.0403 - 31 0.0632 - 32 0.0174 - 33 0.0153 - 34 0.00436 - 35 0.00109 - 41 0.0436 - 42 0.00871 - 43 0.00327 - 44 0.00218 - 45 0.0251 - 46 0.00436 - 47 0.105 - - 22 11 7 0 - 2 0.182 - 13 0.0909 - 19 0.0909 - 24 0.0909 - 28 0.273 - 31 0.182 - 47 0.0909 - - 26 2 2 0 - 2 0.5 - 29 0.5 - - 47 17337 40 0 - 0 0.131 - 1 0.000923 - 2 0.0375 - 3 0.00294 - 4 0.00438 - 5 0.00121 - 7 0.0185 - 8 0.00513 - 9 0.000692 - 10 0.000923 - 12 0.0362 - 13 0.105 - 14 0.0858 - 15 0.0435 - 16 0.00202 - 18 0.000461 - 19 0.0473 - 20 5.77e-05 - 21 0.0817 - 22 0.00692 - 23 0.00202 - 24 0.00427 - 26 0.00629 - 28 0.0322 - 29 0.0302 - 30 0.0204 - 31 0.032 - 32 0.00911 - 33 0.00981 - 34 0.0108 - 35 0.00559 - 37 0.000404 - 40 5.77e-05 - 41 0.109 - 42 0.00727 - 43 0.000577 - 44 0.00104 - 45 0.00894 - 46 0.00179 - 47 0.0964 - - 22 773 27 5 - 0 0.0414 - 1 0.00129 - 2 0.0388 - 3 0.00259 - 4 0.0233 - 7 0.0103 - 8 0.00647 - 12 0.0155 - 13 0.364 - 14 0.0893 - 15 0.0168 - 18 0.00129 - 19 0.0142 - 21 0.0349 - 24 0.00776 - 26 0.0194 - 28 0.0699 - 29 0.066 - 30 0.0401 - 31 0.0375 - 32 0.0233 - 33 0.022 - 35 0.00259 - 41 0.00906 - 42 0.00388 - 45 0.00259 - 47 0.0362 - - 2 10 6 0 - 2 0.2 - 14 0.1 - 26 0.2 - 32 0.2 - 33 0.1 - 41 0.2 - - 7 39 17 0 - 0 0.282 - 2 0.0513 - 4 0.0256 - 7 0.0256 - 8 0.0256 - 12 0.0769 - 13 0.128 - 14 0.0513 - 15 0.0513 - 19 0.0513 - 26 0.0769 - 28 0.0256 - 29 0.0256 - 32 0.0256 - 41 0.0256 - 42 0.0256 - 47 0.0256 - - 8 4 3 0 - 28 0.25 - 41 0.25 - 47 0.5 - - 21 119 22 0 - 0 0.0504 - 1 0.0084 - 2 0.0756 - 4 0.0336 - 7 0.0336 - 12 0.0168 - 13 0.0672 - 14 0.0672 - 15 0.0252 - 19 0.0168 - 21 0.134 - 24 0.0168 - 26 0.0252 - 28 0.109 - 29 0.0084 - 30 0.0588 - 31 0.0588 - 32 0.0252 - 41 0.0168 - 42 0.0168 - 45 0.0168 - 47 0.118 - - 47 601 24 0 - 0 0.025 - 2 0.0283 - 3 0.00333 - 4 0.0216 - 7 0.00499 - 8 0.00666 - 12 0.0116 - 13 0.446 - 14 0.0965 - 15 0.0133 - 18 0.00166 - 19 0.0116 - 21 0.0183 - 24 0.00666 - 26 0.0116 - 28 0.0649 - 29 0.0815 - 30 0.0399 - 31 0.0366 - 32 0.02 - 33 0.0266 - 35 0.00333 - 41 0.00166 - 47 0.0183 - - 23 76 21 2 - 0 0.184 - 2 0.0263 - 3 0.0132 - 4 0.0921 - 7 0.0395 - 12 0.0263 - 13 0.0789 - 14 0.0658 - 18 0.0132 - 19 0.0395 - 21 0.0132 - 26 0.0132 - 28 0.0132 - 29 0.0526 - 30 0.0132 - 31 0.0395 - 32 0.0132 - 33 0.0263 - 41 0.105 - 42 0.0395 - 47 0.0921 - - 21 35 14 0 - 0 0.0571 - 2 0.0571 - 3 0.0286 - 4 0.143 - 13 0.0857 - 14 0.0571 - 18 0.0286 - 19 0.0571 - 21 0.0286 - 29 0.0571 - 30 0.0286 - 41 0.143 - 42 0.0857 - 47 0.143 - - 47 36 15 0 - 0 0.306 - 4 0.0278 - 7 0.0556 - 12 0.0556 - 13 0.0833 - 14 0.0833 - 19 0.0278 - 26 0.0278 - 28 0.0278 - 29 0.0556 - 31 0.0833 - 32 0.0278 - 33 0.0556 - 41 0.0278 - 47 0.0556 - - 24 97 16 1 - 0 0.144 - 2 0.0103 - 4 0.0206 - 8 0.0206 - 9 0.0103 - 13 0.134 - 14 0.0928 - 19 0.0309 - 21 0.0412 - 28 0.155 - 29 0.134 - 30 0.0722 - 31 0.0309 - 32 0.0206 - 33 0.0515 - 41 0.0309 - - 21 3 3 0 - 21 0.333 - 30 0.333 - 33 0.333 - - 26 19 7 2 - 3 0.526 - 8 0.0526 - 13 0.158 - 14 0.0526 - 21 0.105 - 30 0.0526 - 31 0.0526 - - 3 11 2 0 - 3 0.909 - 14 0.0909 - - 13 3 1 0 - 13 1 - - 28 9 5 0 - 2 0.111 - 21 0.111 - 26 0.111 - 41 0.556 - 42 0.111 - - 31 2 2 0 - 28 0.5 - 30 0.5 - - 37 3 2 0 - 28 0.333 - 47 0.667 - - 41 6 3 0 - 7 0.167 - 13 0.167 - 21 0.667 - - 42 2 2 0 - 21 0.5 - 31 0.5 - - 45 5 4 0 - 0 0.4 - 13 0.2 - 14 0.2 - 42 0.2 - - 47 19808 40 27 - 0 0.133 - 1 0.000959 - 2 0.0361 - 3 0.00979 - 4 0.00464 - 5 0.00106 - 7 0.022 - 8 0.00687 - 9 0.000808 - 10 0.000353 - 12 0.0339 - 13 0.105 - 14 0.0777 - 15 0.0428 - 16 0.00202 - 18 0.000757 - 19 0.0454 - 20 5.05e-05 - 21 0.0318 - 22 0.000252 - 23 5.05e-05 - 24 0.00596 - 26 0.00651 - 28 0.0409 - 29 0.0394 - 30 0.0268 - 31 0.0399 - 32 0.0114 - 33 0.0123 - 34 0.01 - 35 0.00515 - 37 0.000353 - 40 0.000101 - 41 0.12 - 42 0.00838 - 43 0.000808 - 44 0.00121 - 45 0.0105 - 46 0.00202 - 47 0.104 - - 2 16 11 0 - 3 0.0625 - 8 0.0625 - 13 0.0625 - 14 0.0625 - 19 0.0625 - 21 0.125 - 31 0.0625 - 41 0.125 - 45 0.0625 - 46 0.0625 - 47 0.25 - - 3 23 10 0 - 4 0.0435 - 7 0.0435 - 14 0.174 - 16 0.0435 - 26 0.087 - 28 0.0435 - 29 0.174 - 30 0.0435 - 31 0.0435 - 41 0.304 - - 4 91 25 0 - 0 0.242 - 1 0.011 - 2 0.011 - 3 0.044 - 4 0.011 - 7 0.022 - 8 0.033 - 12 0.011 - 13 0.0549 - 14 0.0989 - 15 0.022 - 19 0.033 - 21 0.0549 - 26 0.011 - 28 0.0549 - 29 0.022 - 30 0.033 - 31 0.0549 - 33 0.011 - 34 0.011 - 41 0.044 - 42 0.022 - 44 0.011 - 45 0.044 - 47 0.033 - - 6 6 5 0 - 2 0.167 - 13 0.167 - 41 0.333 - 42 0.167 - 45 0.167 - - 7 750 29 0 - 0 0.131 - 2 0.0453 - 3 0.00667 - 4 0.004 - 7 0.0347 - 8 0.0187 - 9 0.00267 - 12 0.00533 - 13 0.0747 - 14 0.056 - 15 0.0133 - 19 0.0133 - 21 0.024 - 22 0.00133 - 24 0.00667 - 28 0.0587 - 29 0.0293 - 30 0.0427 - 31 0.048 - 32 0.0133 - 33 0.012 - 34 0.00133 - 35 0.00133 - 41 0.289 - 42 0.0133 - 44 0.00133 - 45 0.004 - 46 0.004 - 47 0.044 - - 8 223 25 0 - 0 0.0807 - 2 0.0583 - 3 0.0135 - 4 0.00448 - 7 0.0404 - 8 0.0179 - 13 0.13 - 14 0.112 - 15 0.0269 - 19 0.0179 - 21 0.0314 - 22 0.00448 - 24 0.00897 - 28 0.0673 - 29 0.0538 - 30 0.0493 - 31 0.0314 - 32 0.0179 - 33 0.0179 - 41 0.0717 - 42 0.00448 - 44 0.00448 - 45 0.00897 - 46 0.00448 - 47 0.121 - - 9 67 16 0 - 0 0.119 - 2 0.0299 - 4 0.0149 - 13 0.0597 - 14 0.0746 - 15 0.0149 - 21 0.0299 - 28 0.0896 - 29 0.328 - 30 0.0299 - 31 0.0149 - 32 0.0448 - 33 0.0299 - 41 0.0149 - 45 0.0149 - 47 0.0896 - - 10 8 7 0 - 4 0.125 - 13 0.125 - 14 0.125 - 18 0.125 - 19 0.125 - 33 0.125 - 41 0.25 - - 11 6 1 0 - 47 1 - - 13 69 19 0 - 0 0.087 - 2 0.029 - 3 0.029 - 7 0.0145 - 8 0.0435 - 13 0.116 - 14 0.058 - 18 0.0145 - 19 0.029 - 21 0.0145 - 28 0.087 - 29 0.058 - 30 0.188 - 31 0.087 - 32 0.0145 - 33 0.0145 - 34 0.0145 - 41 0.087 - 42 0.0145 - - 14 4 2 0 - 13 0.75 - 41 0.25 - - 15 27 4 0 - 15 0.037 - 18 0.037 - 45 0.0741 - 47 0.852 - - 17 4 3 0 - 0 0.25 - 31 0.25 - 47 0.5 - - 19 7 4 0 - 3 0.143 - 14 0.571 - 34 0.143 - 45 0.143 - - 21 16535 40 0 - 0 0.143 - 1 0.000968 - 2 0.0372 - 3 0.00302 - 4 0.00423 - 5 0.00127 - 7 0.0161 - 8 0.00593 - 9 0.000786 - 10 0.000363 - 12 0.0394 - 13 0.102 - 14 0.0788 - 15 0.0469 - 16 0.00224 - 18 0.000544 - 19 0.0513 - 20 6.05e-05 - 21 0.0339 - 22 0.000181 - 23 6.05e-05 - 24 0.00538 - 26 0.00659 - 28 0.0374 - 29 0.0337 - 30 0.0238 - 31 0.0374 - 32 0.0105 - 33 0.0112 - 34 0.0116 - 35 0.00593 - 37 0.000423 - 40 0.000121 - 41 0.117 - 42 0.00816 - 43 0.000786 - 44 0.00121 - 45 0.0107 - 46 0.00212 - 47 0.107 - - 22 466 26 0 - 0 0.0687 - 1 0.00215 - 2 0.0429 - 4 0.00858 - 7 0.0172 - 8 0.00644 - 12 0.0258 - 13 0.0987 - 14 0.088 - 15 0.0279 - 18 0.00215 - 19 0.0236 - 21 0.0236 - 24 0.0129 - 26 0.0322 - 28 0.116 - 29 0.109 - 30 0.0665 - 31 0.0622 - 32 0.0386 - 33 0.0365 - 35 0.00429 - 41 0.015 - 42 0.00644 - 45 0.00429 - 47 0.0601 - - 23 72 20 0 - 0 0.194 - 2 0.0278 - 3 0.0139 - 4 0.0833 - 12 0.0278 - 13 0.0833 - 14 0.0694 - 18 0.0139 - 19 0.0417 - 21 0.0139 - 26 0.0139 - 28 0.0139 - 29 0.0556 - 30 0.0139 - 31 0.0417 - 32 0.0139 - 33 0.0278 - 41 0.111 - 42 0.0417 - 47 0.0972 - - 24 90 14 0 - 0 0.156 - 4 0.0111 - 8 0.0111 - 13 0.133 - 14 0.1 - 19 0.0333 - 21 0.0333 - 28 0.156 - 29 0.144 - 30 0.0778 - 31 0.0333 - 32 0.0222 - 33 0.0556 - 41 0.0333 - - 26 2 2 0 - 30 0.5 - 31 0.5 - - 28 8 4 0 - 2 0.125 - 21 0.125 - 41 0.625 - 42 0.125 - - 31 2 2 0 - 28 0.5 - 30 0.5 - - 37 3 2 0 - 28 0.333 - 47 0.667 - - 45 4 3 0 - 0 0.5 - 13 0.25 - 14 0.25 - - 48 5 4 0 - 0 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 347 26 0 - 0 0.0519 - 2 0.0202 - 4 0.00288 - 7 0.0202 - 8 0.0144 - 10 0.00288 - 13 0.15 - 14 0.098 - 15 0.0144 - 16 0.00288 - 18 0.00288 - 19 0.0173 - 21 0.0288 - 24 0.0231 - 28 0.0778 - 29 0.0605 - 30 0.0663 - 31 0.107 - 32 0.0288 - 33 0.0403 - 34 0.00288 - 41 0.0951 - 42 0.0173 - 44 0.00288 - 45 0.0115 - 47 0.0403 - - 55 960 29 0 - 0 0.026 - 1 0.00104 - 2 0.0177 - 3 0.132 - 4 0.00208 - 7 0.12 - 8 0.00417 - 9 0.00104 - 13 0.155 - 14 0.0521 - 15 0.0354 - 16 0.00104 - 19 0.00729 - 21 0.00833 - 24 0.00833 - 26 0.00104 - 28 0.0156 - 29 0.0667 - 30 0.00938 - 31 0.0406 - 32 0.00313 - 33 0.00208 - 34 0.00313 - 35 0.00104 - 41 0.142 - 42 0.00313 - 43 0.00313 - 45 0.00938 - 47 0.128 - - 60 5 4 0 - 0 0.2 - 28 0.2 - 29 0.4 - 33 0.2 - - 48 5 4 0 - 0 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 357 27 2 - 0 0.0504 - 2 0.0224 - 4 0.0028 - 7 0.028 - 8 0.014 - 10 0.0028 - 13 0.148 - 14 0.098 - 15 0.014 - 16 0.0028 - 18 0.0028 - 19 0.0168 - 21 0.028 - 24 0.0252 - 26 0.0028 - 28 0.0756 - 29 0.0588 - 30 0.0644 - 31 0.104 - 32 0.028 - 33 0.0392 - 34 0.0028 - 41 0.0924 - 42 0.0196 - 44 0.0028 - 45 0.014 - 47 0.0392 - - 21 15 6 0 - 2 0.133 - 14 0.0667 - 21 0.0667 - 28 0.0667 - 31 0.0667 - 41 0.6 - - 41 3 3 0 - 13 0.333 - 14 0.333 - 42 0.333 - - 55 962 29 6 - 0 0.026 - 1 0.00104 - 2 0.0177 - 3 0.132 - 4 0.00208 - 7 0.121 - 8 0.00416 - 9 0.00104 - 13 0.156 - 14 0.052 - 15 0.0353 - 16 0.00104 - 19 0.00728 - 21 0.00832 - 24 0.00832 - 26 0.00104 - 28 0.0156 - 29 0.0665 - 30 0.00936 - 31 0.0405 - 32 0.00312 - 33 0.00208 - 34 0.00312 - 35 0.00104 - 41 0.141 - 42 0.00312 - 43 0.00312 - 45 0.00936 - 47 0.128 - - 6 1 1 0 - 30 1 - - 7 114 18 0 - 0 0.0263 - 2 0.00877 - 3 0.14 - 7 0.184 - 9 0.00877 - 13 0.132 - 14 0.0439 - 15 0.0614 - 21 0.0175 - 26 0.00877 - 29 0.0351 - 30 0.00877 - 31 0.0439 - 34 0.00877 - 35 0.00877 - 41 0.132 - 45 0.0263 - 47 0.105 - - 9 39 13 0 - 0 0.0769 - 2 0.0256 - 7 0.0769 - 13 0.0513 - 15 0.0256 - 24 0.0256 - 28 0.103 - 29 0.41 - 30 0.0256 - 31 0.0769 - 33 0.0256 - 41 0.0513 - 47 0.0256 - - 21 527 25 0 - 0 0.0266 - 2 0.0152 - 3 0.108 - 4 0.0038 - 7 0.0892 - 8 0.00759 - 13 0.186 - 14 0.0455 - 15 0.0493 - 16 0.0019 - 19 0.00759 - 21 0.0114 - 24 0.0133 - 28 0.00759 - 29 0.0531 - 30 0.00569 - 31 0.055 - 32 0.0038 - 33 0.0019 - 34 0.0038 - 41 0.108 - 42 0.0019 - 43 0.0038 - 45 0.0114 - 47 0.178 - - 22 269 17 0 - 0 0.0186 - 1 0.00372 - 2 0.0112 - 3 0.201 - 7 0.16 - 13 0.123 - 14 0.0743 - 19 0.0112 - 28 0.026 - 29 0.052 - 30 0.0112 - 31 0.00743 - 32 0.00372 - 41 0.227 - 42 0.00743 - 43 0.00372 - 47 0.0595 - - 47 5 3 0 - 2 0.6 - 13 0.2 - 14 0.2 - - 57 3 3 0 - 7 0.333 - 21 0.333 - 47 0.333 - - 60 5 4 0 - 0 0.2 - 28 0.2 - 29 0.4 - 33 0.2 - -50 1035 26 5 - 0 0.0058 - 2 0.0213 - 7 0.0174 - 8 0.0232 - 13 0.111 - 14 0.0889 - 15 0.0193 - 16 0.00193 - 19 0.00193 - 21 0.382 - 22 0.00193 - 24 0.00193 - 26 0.00483 - 28 0.00773 - 29 0.0058 - 30 0.00966 - 31 0.00773 - 32 0.00386 - 33 0.00773 - 41 0.222 - 42 0.0174 - 43 0.00193 - 44 0.00193 - 45 0.00193 - 46 0.00966 - 47 0.0213 - - 2 22 4 0 - 13 0.227 - 14 0.0455 - 22 0.0455 - 41 0.682 - - 7 223 5 3 - 7 0.00897 - 13 0.00897 - 14 0.00448 - 21 0.928 - 41 0.0493 - - 7 2 2 0 - 14 0.5 - 41 0.5 - - 21 11 2 0 - 13 0.182 - 41 0.818 - - 47 209 2 0 - 7 0.00957 - 21 0.99 - - 21 472 24 5 - 0 0.00636 - 2 0.0466 - 7 0.0275 - 8 0.0254 - 13 0.106 - 14 0.0932 - 15 0.0212 - 16 0.00212 - 19 0.00212 - 21 0.373 - 24 0.00212 - 28 0.00847 - 29 0.00636 - 30 0.0106 - 31 0.00847 - 32 0.00424 - 33 0.00847 - 41 0.189 - 42 0.0191 - 43 0.00212 - 44 0.00212 - 45 0.00212 - 46 0.0106 - 47 0.0233 - - 7 206 14 0 - 7 0.00485 - 8 0.0146 - 13 0.117 - 14 0.0922 - 15 0.00971 - 21 0.612 - 28 0.00485 - 29 0.00485 - 30 0.00485 - 31 0.00485 - 32 0.00971 - 41 0.0874 - 42 0.0243 - 46 0.00971 - - 8 4 3 0 - 0 0.25 - 8 0.5 - 33 0.25 - - 21 174 21 0 - 0 0.0115 - 7 0.00575 - 8 0.0402 - 13 0.149 - 14 0.144 - 15 0.046 - 16 0.00575 - 19 0.00575 - 24 0.00575 - 28 0.0172 - 29 0.0115 - 30 0.023 - 31 0.0172 - 33 0.0172 - 41 0.391 - 42 0.0172 - 43 0.00575 - 44 0.00575 - 45 0.00575 - 46 0.0172 - 47 0.0575 - - 26 5 3 0 - 41 0.6 - 42 0.2 - 47 0.2 - - 47 83 3 0 - 2 0.265 - 7 0.133 - 21 0.602 - - 28 5 1 0 - 26 1 - - 47 302 24 2 - 0 0.00993 - 7 0.00662 - 8 0.0397 - 13 0.189 - 14 0.152 - 15 0.0331 - 16 0.00331 - 19 0.00331 - 21 0.00993 - 22 0.00331 - 24 0.00331 - 28 0.0132 - 29 0.00993 - 30 0.0166 - 31 0.0132 - 32 0.00662 - 33 0.0132 - 41 0.381 - 42 0.0298 - 43 0.00331 - 44 0.00331 - 45 0.00331 - 46 0.0166 - 47 0.0364 - - 2 22 4 0 - 13 0.227 - 14 0.0455 - 22 0.0455 - 41 0.682 - - 7 15 4 0 - 13 0.133 - 14 0.0667 - 21 0.0667 - 41 0.733 - -51 1504 36 26 - 0 0.00399 - 2 0.0259 - 3 0.0153 - 4 0.000665 - 6 0.000665 - 7 0.118 - 8 0.00798 - 9 0.00266 - 10 0.000665 - 13 0.0465 - 14 0.0226 - 15 0.0426 - 16 0.00199 - 19 0.00266 - 21 0.0326 - 22 0.000665 - 24 0.00133 - 25 0.00864 - 27 0.00332 - 28 0.0166 - 29 0.00399 - 30 0.000665 - 31 0.00399 - 32 0.00332 - 33 0.00199 - 34 0.00798 - 35 0.00665 - 37 0.00798 - 40 0.00532 - 41 0.0951 - 42 0.0864 - 43 0.00465 - 44 0.00598 - 45 0.0598 - 46 0.00332 - 47 0.347 - - 2 50 6 0 - 13 0.14 - 14 0.02 - 41 0.24 - 42 0.04 - 45 0.02 - 47 0.54 - - 4 3 2 0 - 7 0.667 - 28 0.333 - - 7 7 5 0 - 2 0.143 - 35 0.286 - 41 0.143 - 45 0.143 - 47 0.286 - - 8 5 4 0 - 4 0.2 - 7 0.4 - 21 0.2 - 47 0.2 - - 21 48 11 0 - 2 0.229 - 7 0.167 - 10 0.0208 - 21 0.146 - 28 0.0208 - 35 0.0208 - 37 0.0833 - 41 0.0417 - 42 0.0208 - 45 0.0417 - 47 0.208 - - 35 4 4 0 - 2 0.25 - 21 0.25 - 42 0.25 - 43 0.25 - - 40 3 2 0 - 15 0.667 - 27 0.333 - - 41 96 15 8 - 0 0.0104 - 3 0.167 - 6 0.0104 - 8 0.0521 - 13 0.156 - 14 0.0417 - 15 0.323 - 16 0.0312 - 19 0.0312 - 21 0.0938 - 27 0.0417 - 28 0.0104 - 29 0.0104 - 30 0.0104 - 43 0.0104 - - 2 4 2 0 - 13 0.75 - 28 0.25 - - 45 2 2 0 - 19 0.5 - 29 0.5 - - 49 7 6 0 - 8 0.143 - 13 0.143 - 19 0.143 - 21 0.286 - 27 0.143 - 43 0.143 - - 55 48 9 0 - 3 0.312 - 8 0.0208 - 13 0.146 - 14 0.0208 - 15 0.292 - 16 0.0417 - 19 0.0208 - 21 0.0833 - 27 0.0625 - - 57 16 2 0 - 8 0.0625 - 15 0.938 - - 64 6 4 0 - 0 0.167 - 8 0.167 - 13 0.5 - 30 0.167 - - 69 2 2 0 - 3 0.5 - 6 0.5 - - 71 3 2 0 - 8 0.333 - 21 0.667 - - 42 78 15 4 - 3 0.0128 - 8 0.0128 - 13 0.218 - 14 0.167 - 15 0.269 - 21 0.0385 - 25 0.103 - 28 0.0128 - 29 0.0128 - 31 0.0385 - 32 0.0128 - 33 0.0128 - 43 0.0513 - 46 0.0128 - 47 0.0256 - - 45 24 6 0 - 13 0.125 - 14 0.125 - 15 0.5 - 21 0.0417 - 33 0.0417 - 43 0.167 - - 55 20 10 0 - 3 0.05 - 8 0.05 - 13 0.05 - 14 0.1 - 15 0.15 - 25 0.3 - 28 0.05 - 29 0.05 - 31 0.15 - 46 0.05 - - 62 19 3 0 - 13 0.632 - 14 0.211 - 15 0.158 - - 69 5 3 0 - 14 0.2 - 25 0.4 - 47 0.4 - - 45 37 5 0 - 41 0.0811 - 42 0.649 - 43 0.027 - 44 0.0541 - 47 0.189 - - 47 495 24 19 - 0 0.00404 - 2 0.0283 - 3 0.00202 - 7 0.178 - 13 0.0242 - 14 0.00606 - 15 0.00202 - 21 0.0121 - 24 0.00202 - 28 0.0202 - 29 0.00404 - 31 0.00202 - 32 0.00404 - 33 0.00202 - 34 0.0121 - 35 0.00202 - 37 0.00606 - 40 0.00404 - 41 0.0444 - 42 0.0525 - 44 0.00606 - 45 0.0525 - 46 0.00202 - 47 0.527 - - 2 42 5 0 - 13 0.119 - 41 0.19 - 42 0.0238 - 45 0.0238 - 47 0.643 - - 4 3 2 0 - 7 0.667 - 28 0.333 - - 21 24 7 0 - 2 0.0833 - 7 0.292 - 21 0.0417 - 28 0.0417 - 41 0.0417 - 45 0.0833 - 47 0.417 - - 41 2 2 0 - 13 0.5 - 21 0.5 - - 42 4 3 0 - 13 0.25 - 32 0.25 - 47 0.5 - - 45 8 2 0 - 44 0.125 - 47 0.875 - - 48 41 8 0 - 0 0.0244 - 7 0.439 - 21 0.0488 - 28 0.0244 - 37 0.0488 - 42 0.0244 - 45 0.0488 - 47 0.341 - - 49 47 8 0 - 2 0.0851 - 7 0.255 - 28 0.0213 - 37 0.0213 - 41 0.0638 - 42 0.0213 - 45 0.0213 - 47 0.511 - - 51 5 3 0 - 7 0.2 - 42 0.6 - 47 0.2 - - 52 7 3 0 - 40 0.143 - 45 0.429 - 47 0.429 - - 55 145 12 0 - 2 0.0138 - 7 0.166 - 14 0.0069 - 29 0.0069 - 33 0.0069 - 34 0.0414 - 35 0.0069 - 41 0.0276 - 42 0.0828 - 44 0.0069 - 45 0.0483 - 47 0.586 - - 57 55 15 0 - 0 0.0182 - 3 0.0182 - 7 0.127 - 13 0.0909 - 14 0.0182 - 15 0.0182 - 21 0.0182 - 28 0.0182 - 31 0.0182 - 41 0.0182 - 42 0.0364 - 44 0.0182 - 45 0.0364 - 46 0.0182 - 47 0.527 - - 64 18 4 0 - 2 0.0556 - 7 0.111 - 45 0.111 - 47 0.722 - - 65 1 1 0 - 40 1 - - 69 15 6 0 - 7 0.533 - 21 0.0667 - 29 0.0667 - 41 0.0667 - 42 0.0667 - 47 0.2 - - 71 13 7 0 - 2 0.231 - 14 0.0769 - 24 0.0769 - 28 0.154 - 41 0.0769 - 42 0.0769 - 47 0.308 - - 72 11 5 0 - 2 0.0909 - 28 0.0909 - 42 0.0909 - 45 0.273 - 47 0.455 - - 73 2 1 0 - 28 1 - - 74 17 4 0 - 7 0.0588 - 32 0.0588 - 41 0.0588 - 47 0.824 - - 48 49 12 3 - 0 0.0204 - 7 0.367 - 13 0.0408 - 15 0.0408 - 21 0.0612 - 28 0.0204 - 37 0.0408 - 40 0.0204 - 41 0.0204 - 42 0.0204 - 45 0.0612 - 47 0.286 - - 41 5 2 0 - 42 0.2 - 47 0.8 - - 42 2 2 0 - 15 0.5 - 21 0.5 - - 47 34 10 0 - 0 0.0294 - 7 0.529 - 13 0.0588 - 21 0.0588 - 28 0.0294 - 37 0.0588 - 40 0.0294 - 41 0.0294 - 45 0.0588 - 47 0.118 - - 49 64 14 3 - 2 0.0625 - 7 0.188 - 8 0.0156 - 13 0.0312 - 14 0.0156 - 19 0.0156 - 21 0.0312 - 28 0.0156 - 35 0.0156 - 37 0.0156 - 41 0.156 - 42 0.0469 - 45 0.0156 - 47 0.375 - - 41 8 2 0 - 41 0.125 - 47 0.875 - - 47 35 11 0 - 2 0.0286 - 7 0.314 - 8 0.0286 - 13 0.0571 - 14 0.0286 - 21 0.0571 - 35 0.0286 - 37 0.0286 - 41 0.2 - 42 0.0286 - 47 0.2 - - 49 3 3 0 - 2 0.333 - 7 0.333 - 28 0.333 - - 51 11 5 0 - 7 0.0909 - 41 0.0909 - 42 0.636 - 45 0.0909 - 47 0.0909 - - 52 11 4 0 - 40 0.0909 - 41 0.182 - 45 0.455 - 47 0.273 - - 55 273 23 6 - 2 0.00733 - 7 0.0879 - 8 0.00366 - 9 0.011 - 13 0.0183 - 14 0.0293 - 15 0.00733 - 21 0.033 - 25 0.00733 - 28 0.00366 - 29 0.00366 - 31 0.00366 - 33 0.00366 - 34 0.022 - 35 0.00366 - 37 0.00733 - 40 0.00733 - 41 0.194 - 42 0.117 - 44 0.011 - 45 0.103 - 46 0.00366 - 47 0.311 - - 2 2 2 0 - 33 0.5 - 47 0.5 - - 40 2 2 0 - 40 0.5 - 45 0.5 - - 41 57 7 0 - 2 0.0175 - 13 0.0175 - 21 0.0175 - 41 0.526 - 42 0.0351 - 45 0.0526 - 47 0.333 - - 42 26 3 0 - 42 0.0385 - 44 0.0769 - 47 0.885 - - 47 162 22 0 - 2 0.00617 - 7 0.13 - 8 0.00617 - 9 0.0185 - 13 0.0185 - 14 0.0432 - 15 0.0123 - 21 0.0494 - 25 0.0123 - 28 0.00617 - 29 0.00617 - 31 0.00617 - 34 0.037 - 35 0.00617 - 37 0.0123 - 40 0.00617 - 41 0.13 - 42 0.167 - 44 0.00617 - 45 0.142 - 46 0.00617 - 47 0.173 - - 62 5 2 0 - 7 0.6 - 47 0.4 - - 57 74 16 5 - 0 0.0135 - 3 0.0135 - 7 0.0946 - 8 0.0135 - 13 0.0676 - 14 0.0135 - 15 0.0135 - 21 0.0135 - 28 0.027 - 31 0.0135 - 41 0.243 - 42 0.027 - 44 0.0135 - 45 0.027 - 46 0.0135 - 47 0.392 - - 41 7 5 0 - 41 0.143 - 42 0.143 - 44 0.143 - 45 0.143 - 47 0.429 - - 42 24 3 0 - 41 0.458 - 45 0.0417 - 47 0.5 - - 47 26 12 0 - 0 0.0385 - 3 0.0385 - 7 0.192 - 13 0.192 - 14 0.0385 - 15 0.0385 - 21 0.0385 - 28 0.0385 - 31 0.0385 - 41 0.0385 - 46 0.0385 - 47 0.269 - - 55 9 3 0 - 7 0.222 - 42 0.111 - 47 0.667 - - 58 4 1 0 - 41 1 - - 58 8 5 0 - 13 0.125 - 15 0.5 - 32 0.125 - 46 0.125 - 47 0.125 - - 62 55 11 1 - 3 0.0727 - 7 0.0909 - 8 0.0182 - 9 0.0182 - 13 0.0182 - 14 0.0182 - 22 0.0182 - 35 0.0182 - 42 0.345 - 45 0.236 - 47 0.145 - - 42 3 1 0 - 47 1 - - 64 37 10 1 - 2 0.027 - 7 0.0541 - 8 0.0541 - 13 0.0541 - 21 0.108 - 35 0.0811 - 41 0.162 - 42 0.027 - 45 0.0811 - 47 0.351 - - 41 8 4 0 - 2 0.125 - 7 0.125 - 45 0.125 - 47 0.625 - - 65 1 1 0 - 40 1 - - 69 29 9 1 - 7 0.276 - 14 0.0345 - 21 0.103 - 25 0.103 - 29 0.0345 - 40 0.0345 - 41 0.103 - 42 0.207 - 47 0.103 - - 42 3 1 0 - 47 1 - - 71 17 7 0 - 2 0.235 - 14 0.0588 - 24 0.0588 - 28 0.118 - 41 0.235 - 42 0.0588 - 47 0.235 - - 72 11 5 0 - 2 0.0909 - 28 0.0909 - 42 0.0909 - 45 0.273 - 47 0.455 - - 73 2 1 0 - 28 1 - - 74 19 6 0 - 0 0.0526 - 7 0.0526 - 28 0.0526 - 32 0.0526 - 41 0.0526 - 47 0.737 - -52 280 19 10 - 2 0.0214 - 4 0.0179 - 7 0.00714 - 8 0.0107 - 13 0.00357 - 15 0.00357 - 20 0.00357 - 27 0.0286 - 28 0.05 - 29 0.0143 - 30 0.0143 - 33 0.00714 - 40 0.0107 - 41 0.225 - 42 0.0214 - 44 0.05 - 45 0.175 - 46 0.00714 - 47 0.329 - - 0 3 1 0 - 4 1 - - 13 6 4 0 - 8 0.5 - 41 0.167 - 44 0.167 - 47 0.167 - - 15 3 3 0 - 15 0.333 - 20 0.333 - 47 0.333 - - 21 18 5 0 - 28 0.0556 - 33 0.0556 - 41 0.111 - 42 0.0556 - 47 0.722 - - 27 86 13 0 - 2 0.0233 - 4 0.0116 - 7 0.0116 - 27 0.0349 - 28 0.0349 - 29 0.0233 - 30 0.0233 - 40 0.0233 - 41 0.221 - 42 0.0116 - 44 0.0581 - 45 0.267 - 47 0.256 - - 28 13 4 0 - 41 0.769 - 45 0.0769 - 46 0.0769 - 47 0.0769 - - 41 5 3 0 - 13 0.2 - 27 0.4 - 28 0.4 - - 45 3 3 0 - 2 0.333 - 28 0.333 - 47 0.333 - - 47 127 15 3 - 2 0.0236 - 4 0.00787 - 7 0.00787 - 27 0.00787 - 28 0.0472 - 29 0.0157 - 30 0.0157 - 33 0.00787 - 40 0.00787 - 41 0.228 - 42 0.0236 - 44 0.0551 - 45 0.181 - 46 0.00787 - 47 0.362 - - 21 17 5 0 - 28 0.0588 - 33 0.0588 - 41 0.0588 - 42 0.0588 - 47 0.765 - - 28 11 4 0 - 41 0.727 - 45 0.0909 - 46 0.0909 - 47 0.0909 - - 52 2 2 0 - 28 0.5 - 44 0.5 - - 52 2 2 0 - 28 0.5 - 44 0.5 - -53 81 5 3 - 2 0.0494 - 7 0.0494 - 42 0.173 - 44 0.0617 - 47 0.667 - - 13 2 1 0 - 44 1 - - 44 5 3 0 - 2 0.4 - 7 0.2 - 42 0.4 - - 47 38 4 1 - 2 0.0526 - 7 0.0526 - 42 0.184 - 47 0.711 - - 44 5 3 0 - 2 0.4 - 7 0.2 - 42 0.4 - -54 1410 26 10 - 0 0.00142 - 2 0.0128 - 3 0.0163 - 4 0.351 - 7 0.044 - 8 0.0326 - 13 0.00355 - 14 0.000709 - 15 0.241 - 16 0.00213 - 18 0.0184 - 20 0.0348 - 21 0.00142 - 26 0.00426 - 28 0.00284 - 29 0.00284 - 30 0.00142 - 31 0.000709 - 33 0.00426 - 34 0.00142 - 39 0.000709 - 41 0.178 - 44 0.00284 - 45 0.0163 - 46 0.00142 - 47 0.0227 - - 3 2 2 0 - 4 0.5 - 39 0.5 - - 4 5 4 0 - 7 0.4 - 21 0.2 - 33 0.2 - 41 0.2 - - 8 11 9 0 - 4 0.0909 - 7 0.0909 - 8 0.0909 - 18 0.0909 - 20 0.0909 - 29 0.0909 - 41 0.0909 - 45 0.182 - 47 0.182 - - 13 19 9 0 - 2 0.0526 - 3 0.158 - 4 0.105 - 7 0.0526 - 8 0.211 - 15 0.158 - 30 0.0526 - 31 0.0526 - 45 0.158 - - 15 697 20 3 - 0 0.00143 - 2 0.0115 - 3 0.01 - 4 0.34 - 7 0.0373 - 8 0.0301 - 13 0.0043 - 15 0.135 - 18 0.0158 - 20 0.0316 - 26 0.0043 - 28 0.00287 - 29 0.00143 - 33 0.00143 - 34 0.00143 - 41 0.344 - 44 0.00287 - 45 0.00574 - 46 0.00143 - 47 0.0172 - - 15 89 12 0 - 2 0.0112 - 3 0.0337 - 4 0.629 - 7 0.0787 - 8 0.0449 - 13 0.0112 - 15 0.0674 - 20 0.0674 - 26 0.0112 - 34 0.0112 - 41 0.0225 - 45 0.0112 - - 41 231 8 0 - 2 0.013 - 4 0.61 - 7 0.0216 - 8 0.026 - 15 0.238 - 18 0.0346 - 20 0.0519 - 33 0.00433 - - 47 371 18 0 - 0 0.0027 - 2 0.0108 - 3 0.0108 - 4 0.097 - 7 0.0377 - 8 0.027 - 13 0.00539 - 15 0.0889 - 18 0.00809 - 20 0.0108 - 26 0.00539 - 28 0.00539 - 29 0.0027 - 41 0.639 - 44 0.00539 - 45 0.00809 - 46 0.0027 - 47 0.0323 - - 16 7 2 0 - 3 0.286 - 15 0.714 - - 41 235 2 0 - 15 0.987 - 16 0.0128 - - 47 411 22 5 - 0 0.00243 - 2 0.0219 - 3 0.0268 - 4 0.596 - 7 0.0754 - 8 0.0438 - 13 0.00487 - 15 0.0146 - 18 0.0316 - 20 0.0584 - 21 0.00243 - 26 0.0073 - 28 0.00487 - 29 0.00487 - 30 0.00243 - 33 0.0073 - 34 0.00243 - 41 0.0195 - 44 0.00487 - 45 0.0268 - 46 0.00243 - 47 0.0389 - - 4 5 4 0 - 7 0.4 - 21 0.2 - 33 0.2 - 41 0.2 - - 8 8 6 0 - 7 0.125 - 18 0.125 - 29 0.125 - 41 0.125 - 45 0.25 - 47 0.25 - - 13 11 7 0 - 2 0.0909 - 3 0.182 - 4 0.182 - 7 0.0909 - 15 0.0909 - 30 0.0909 - 45 0.273 - - 15 365 20 0 - 0 0.00274 - 2 0.0219 - 3 0.0192 - 4 0.638 - 7 0.0712 - 8 0.0466 - 13 0.00548 - 15 0.0137 - 18 0.0301 - 20 0.0603 - 26 0.00822 - 28 0.00548 - 29 0.00274 - 33 0.00274 - 34 0.00274 - 41 0.0164 - 44 0.00548 - 45 0.011 - 46 0.00274 - 47 0.0329 - - 16 2 1 0 - 3 1 - - 54 6 4 0 - 4 0.5 - 7 0.167 - 20 0.167 - 33 0.167 - - 55 10 8 0 - 4 0.3 - 8 0.1 - 14 0.1 - 18 0.1 - 20 0.1 - 41 0.1 - 45 0.1 - 47 0.1 - -55 887998 48 60 - 0 0.0273 - 1 0.000351 - 2 0.0385 - 3 0.0187 - 4 0.0895 - 5 1.13e-05 - 6 0.00017 - 7 0.269 - 8 0.0578 - 9 0.00198 - 10 0.00144 - 11 4.5e-06 - 12 0.000276 - 13 0.0448 - 14 0.00865 - 15 0.0601 - 16 0.00132 - 17 0.000474 - 18 0.00933 - 19 0.00118 - 20 0.00947 - 21 0.00895 - 22 0.00032 - 23 7.09e-05 - 24 0.0044 - 25 2.93e-05 - 26 0.0257 - 27 9.01e-06 - 28 0.0421 - 29 0.0397 - 30 0.0252 - 31 0.0126 - 32 0.00881 - 33 0.0183 - 34 0.0013 - 35 0.000993 - 36 2.14e-05 - 37 0.00439 - 38 1.46e-05 - 39 9.01e-06 - 40 0.000164 - 41 0.0609 - 42 0.00956 - 43 0.000404 - 44 0.0025 - 45 0.0118 - 46 0.00365 - 47 0.078 - - 0 15 6 0 - 7 0.0667 - 13 0.133 - 14 0.0667 - 15 0.6 - 19 0.0667 - 44 0.0667 - - 2 4952 33 24 - 0 0.00101 - 2 0.000404 - 3 0.0186 - 4 0.00323 - 6 0.000202 - 7 0.00424 - 8 0.0307 - 9 0.000808 - 10 0.000404 - 13 0.33 - 14 0.202 - 15 0.361 - 16 0.0224 - 18 0.000404 - 19 0.00141 - 20 0.000808 - 21 0.00101 - 26 0.000202 - 28 0.00121 - 29 0.000202 - 30 0.00363 - 31 0.000808 - 32 0.000202 - 33 0.000404 - 34 0.000202 - 40 0.000202 - 41 0.00687 - 42 0.00182 - 43 0.000202 - 44 0.000202 - 45 0.000202 - 46 0.00283 - 47 0.00263 - - 3 95 6 0 - 3 0.884 - 7 0.0105 - 8 0.0105 - 13 0.0632 - 21 0.0105 - 41 0.0211 - - 4 22 10 0 - 0 0.0909 - 3 0.0455 - 4 0.273 - 7 0.227 - 8 0.0455 - 13 0.0909 - 15 0.0909 - 21 0.0455 - 32 0.0455 - 47 0.0455 - - 6 1 1 0 - 6 1 - - 8 278 11 0 - 3 0.0036 - 4 0.0216 - 8 0.432 - 9 0.00719 - 13 0.439 - 14 0.0396 - 15 0.036 - 31 0.00719 - 40 0.0036 - 41 0.0036 - 42 0.00719 - - 9 4 2 0 - 3 0.5 - 9 0.5 - - 10 2 1 0 - 10 1 - - 13 1555 11 0 - 4 0.00257 - 8 0.0167 - 13 0.826 - 14 0.134 - 15 0.00257 - 16 0.000643 - 30 0.0045 - 41 0.00836 - 42 0.00129 - 46 0.00193 - 47 0.00129 - - 14 982 10 0 - 3 0.00102 - 7 0.00102 - 8 0.00204 - 13 0.196 - 14 0.785 - 15 0.0102 - 16 0.00102 - 19 0.00204 - 33 0.00102 - 41 0.00102 - - 15 1822 10 0 - 8 0.0011 - 13 0.00549 - 14 0.000549 - 15 0.945 - 16 0.0406 - 18 0.0011 - 19 0.0011 - 30 0.000549 - 41 0.00384 - 43 0.000549 - - 16 66 3 0 - 14 0.0152 - 15 0.455 - 16 0.53 - - 19 5 3 0 - 7 0.2 - 15 0.2 - 19 0.6 - - 20 5 2 0 - 7 0.2 - 20 0.8 - - 21 4 2 0 - 13 0.5 - 21 0.5 - - 28 4 1 0 - 28 1 - - 30 15 3 0 - 13 0.333 - 14 0.0667 - 30 0.6 - - 31 4 2 0 - 13 0.75 - 31 0.25 - - 45 12 3 0 - 15 0.0833 - 42 0.167 - 46 0.75 - - 47 9 8 0 - 0 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 28 0.111 - 41 0.111 - 45 0.111 - 46 0.111 - - 48 3 2 0 - 13 0.667 - 31 0.333 - - 49 1 1 0 - 41 1 - - 54 2 2 0 - 15 0.5 - 41 0.5 - - 55 57 18 0 - 0 0.0351 - 2 0.0351 - 3 0.0351 - 7 0.193 - 13 0.0877 - 14 0.0526 - 15 0.0877 - 21 0.0175 - 26 0.0175 - 28 0.0175 - 29 0.0175 - 30 0.0175 - 33 0.0175 - 34 0.0175 - 41 0.105 - 42 0.0526 - 46 0.0175 - 47 0.175 - - 56 1 1 0 - 7 1 - - 57 2 2 0 - 41 0.5 - 44 0.5 - - 3 14951 40 22 - 0 0.0276 - 1 0.000334 - 2 0.0587 - 3 0.0198 - 4 0.0795 - 7 0.288 - 8 0.0544 - 9 0.000401 - 10 0.00114 - 12 0.000134 - 13 0.0364 - 14 0.00408 - 15 0.0177 - 16 6.69e-05 - 18 0.0093 - 19 0.001 - 20 0.00816 - 21 0.0375 - 24 0.00294 - 25 6.69e-05 - 26 0.066 - 28 0.0289 - 29 0.106 - 30 0.0142 - 31 0.0122 - 32 0.00375 - 33 0.0142 - 34 0.00127 - 35 0.000201 - 37 0.000936 - 38 0.00087 - 39 0.000535 - 40 0.000334 - 41 0.0413 - 42 0.026 - 43 0.000669 - 44 0.00261 - 45 0.00348 - 46 0.00107 - 47 0.0286 - - 2 89 12 0 - 0 0.0337 - 2 0.0112 - 4 0.124 - 7 0.461 - 8 0.0449 - 13 0.0225 - 20 0.0225 - 21 0.0337 - 28 0.0112 - 41 0.213 - 45 0.0112 - 46 0.0112 - - 3 284 22 0 - 0 0.00704 - 2 0.0141 - 3 0.00352 - 4 0.0141 - 7 0.387 - 8 0.0176 - 13 0.00352 - 14 0.0106 - 15 0.00352 - 21 0.0176 - 26 0.268 - 28 0.0141 - 29 0.13 - 30 0.00352 - 31 0.0211 - 33 0.0106 - 34 0.00704 - 39 0.00704 - 41 0.0141 - 42 0.0352 - 45 0.00352 - 47 0.00704 - - 7 3 1 0 - 4 1 - - 8 787 30 0 - 0 0.0419 - 1 0.00127 - 2 0.0801 - 3 0.0102 - 4 0.131 - 7 0.26 - 8 0.0305 - 13 0.00635 - 14 0.00254 - 15 0.0152 - 18 0.0343 - 20 0.0267 - 21 0.0178 - 24 0.0127 - 26 0.0165 - 28 0.0394 - 29 0.0496 - 30 0.0267 - 31 0.0114 - 32 0.00508 - 33 0.033 - 34 0.00127 - 35 0.00127 - 37 0.00254 - 39 0.00127 - 41 0.0343 - 42 0.0114 - 44 0.00127 - 45 0.00381 - 47 0.0902 - - 9 19 8 0 - 0 0.158 - 7 0.263 - 13 0.0526 - 28 0.0526 - 29 0.158 - 30 0.0526 - 41 0.0526 - 47 0.211 - - 10 28 4 0 - 4 0.643 - 7 0.0357 - 18 0.25 - 20 0.0714 - - 13 4530 37 0 - 0 0.0232 - 1 0.000442 - 2 0.0433 - 3 0.00596 - 4 0.0656 - 7 0.201 - 8 0.0272 - 9 0.000221 - 10 0.000662 - 12 0.000221 - 13 0.0347 - 14 0.00177 - 15 0.034 - 18 0.0102 - 20 0.00927 - 21 0.0408 - 24 0.00419 - 25 0.000221 - 26 0.0682 - 28 0.0563 - 29 0.179 - 30 0.0143 - 31 0.015 - 32 0.00574 - 33 0.0232 - 34 0.000442 - 35 0.000442 - 37 0.0011 - 39 0.000442 - 40 0.0011 - 41 0.0219 - 42 0.07 - 43 0.00177 - 44 0.00287 - 45 0.00419 - 46 0.0011 - 47 0.0302 - - 14 4275 34 0 - 0 0.0262 - 2 0.106 - 3 0.00819 - 4 0.116 - 7 0.244 - 8 0.0952 - 9 0.000234 - 10 0.00257 - 13 0.0732 - 14 0.00444 - 15 0.0133 - 16 0.000234 - 18 0.0101 - 19 0.00211 - 20 0.00959 - 21 0.0428 - 24 0.00281 - 26 0.0414 - 28 0.018 - 29 0.0648 - 30 0.0131 - 31 0.0159 - 32 0.00327 - 33 0.00912 - 34 0.00211 - 37 0.000468 - 39 0.000468 - 41 0.0409 - 42 0.00795 - 43 0.000234 - 44 0.00234 - 45 0.00234 - 46 0.000234 - 47 0.0201 - - 15 275 26 0 - 0 0.0182 - 2 0.0291 - 3 0.00364 - 4 0.2 - 7 0.153 - 8 0.0327 - 13 0.0436 - 15 0.08 - 18 0.04 - 19 0.00364 - 20 0.0291 - 21 0.00727 - 26 0.0182 - 28 0.0473 - 29 0.0509 - 30 0.0109 - 31 0.0145 - 32 0.00364 - 33 0.0545 - 34 0.0109 - 41 0.0582 - 42 0.00727 - 44 0.00727 - 45 0.00364 - 46 0.00364 - 47 0.0691 - - 16 24 11 0 - 0 0.0417 - 2 0.0417 - 4 0.375 - 7 0.167 - 8 0.0417 - 28 0.0417 - 29 0.0833 - 30 0.0833 - 33 0.0417 - 46 0.0417 - 47 0.0417 - - 18 25 6 0 - 4 0.04 - 7 0.64 - 15 0.2 - 26 0.04 - 28 0.04 - 29 0.04 - - 21 20 6 0 - 2 0.05 - 4 0.1 - 7 0.7 - 20 0.05 - 41 0.05 - 44 0.05 - - 30 15 6 0 - 4 0.267 - 7 0.333 - 18 0.0667 - 20 0.0667 - 28 0.133 - 47 0.133 - - 31 22 12 0 - 0 0.0909 - 2 0.0455 - 4 0.0909 - 7 0.273 - 8 0.0455 - 13 0.136 - 20 0.0455 - 29 0.0909 - 30 0.0455 - 39 0.0455 - 41 0.0455 - 47 0.0455 - - 41 29 8 0 - 2 0.0345 - 3 0.0345 - 4 0.069 - 7 0.172 - 8 0.241 - 21 0.069 - 28 0.0345 - 41 0.345 - - 43 1 1 0 - 44 1 - - 45 9 6 0 - 2 0.222 - 4 0.222 - 7 0.222 - 15 0.111 - 20 0.111 - 28 0.111 - - 46 4 3 0 - 8 0.25 - 13 0.25 - 45 0.5 - - 47 4447 34 0 - 0 0.0324 - 1 0.00045 - 2 0.0322 - 3 0.0501 - 4 0.0369 - 7 0.422 - 8 0.0515 - 9 0.000899 - 10 0.000675 - 12 0.000225 - 13 0.0103 - 14 0.00652 - 15 0.00225 - 19 0.00112 - 20 0.000225 - 21 0.0376 - 24 0.000675 - 26 0.0911 - 28 0.00967 - 29 0.0902 - 30 0.0139 - 31 0.00607 - 32 0.00225 - 33 0.00472 - 34 0.00045 - 37 0.000899 - 38 0.00292 - 41 0.0573 - 42 0.00382 - 43 0.000225 - 44 0.00247 - 45 0.00337 - 46 0.00135 - 47 0.0232 - - 48 43 14 0 - 0 0.0233 - 4 0.233 - 7 0.163 - 8 0.0233 - 13 0.0698 - 15 0.0233 - 18 0.093 - 28 0.0233 - 29 0.0233 - 33 0.0233 - 37 0.0233 - 41 0.209 - 46 0.0233 - 47 0.0465 - - 54 7 4 0 - 2 0.143 - 4 0.429 - 7 0.286 - 8 0.143 - - 55 9 8 0 - 2 0.111 - 4 0.222 - 7 0.111 - 8 0.111 - 15 0.111 - 20 0.111 - 32 0.111 - 33 0.111 - - 4 80857 41 32 - 0 0.0477 - 1 0.000742 - 2 0.0329 - 3 0.0128 - 4 0.00155 - 5 2.47e-05 - 6 2.47e-05 - 7 0.398 - 8 0.00234 - 9 0.000247 - 10 0.000371 - 12 0.000408 - 13 0.0102 - 14 0.0123 - 15 0.00247 - 16 9.89e-05 - 17 0.00409 - 18 2.47e-05 - 19 0.00233 - 21 0.0171 - 22 0.002 - 23 1.24e-05 - 24 0.00694 - 26 0.0309 - 28 0.0629 - 29 0.0511 - 30 0.0334 - 31 0.0145 - 32 0.0125 - 33 0.0213 - 34 0.00146 - 35 0.00124 - 37 0.00651 - 40 4.95e-05 - 41 0.0794 - 42 0.0066 - 43 0.00042 - 44 0.00117 - 45 0.0123 - 46 0.0031 - 47 0.107 - - 2 16 6 0 - 7 0.312 - 26 0.0625 - 28 0.25 - 30 0.188 - 32 0.0625 - 47 0.125 - - 3 1180 26 0 - 0 0.0127 - 2 0.0314 - 3 0.00169 - 7 0.618 - 8 0.00169 - 13 0.00678 - 14 0.00254 - 15 0.000847 - 17 0.00169 - 21 0.00763 - 24 0.00254 - 26 0.0178 - 28 0.0356 - 29 0.0322 - 30 0.0322 - 31 0.00847 - 32 0.00339 - 33 0.00763 - 34 0.000847 - 37 0.00508 - 41 0.05 - 42 0.00763 - 44 0.00169 - 45 0.00254 - 46 0.00254 - 47 0.105 - - 4 71 16 0 - 0 0.0423 - 7 0.394 - 8 0.0141 - 13 0.0141 - 21 0.0423 - 24 0.0141 - 28 0.0845 - 29 0.0141 - 30 0.0563 - 31 0.0282 - 32 0.0423 - 33 0.0282 - 41 0.0282 - 42 0.0141 - 45 0.0563 - 47 0.127 - - 6 18 9 0 - 0 0.0556 - 2 0.111 - 7 0.389 - 8 0.0556 - 28 0.111 - 31 0.0556 - 35 0.0556 - 41 0.0556 - 47 0.111 - - 7 1 1 0 - 15 1 - - 8 17405 38 0 - 0 0.078 - 1 0.00109 - 2 0.0307 - 3 0.00167 - 4 0.000862 - 5 0.000115 - 7 0.426 - 8 0.00184 - 9 5.75e-05 - 10 0.000632 - 12 0.000402 - 13 0.00718 - 14 0.00431 - 15 0.00218 - 16 5.75e-05 - 17 0.00287 - 19 0.00247 - 21 0.0196 - 22 5.75e-05 - 24 0.00678 - 26 0.0298 - 28 0.0666 - 29 0.0525 - 30 0.0357 - 31 0.0159 - 32 0.0133 - 33 0.0219 - 34 0.000804 - 35 0.000919 - 37 0.00368 - 40 5.75e-05 - 41 0.0705 - 42 0.00672 - 43 0.000172 - 44 0.000689 - 45 0.0106 - 46 0.00195 - 47 0.0812 - - 9 397 24 0 - 0 0.0907 - 2 0.063 - 7 0.378 - 13 0.00504 - 14 0.00756 - 15 0.00756 - 16 0.00252 - 17 0.00252 - 19 0.0101 - 21 0.0126 - 24 0.00252 - 26 0.0327 - 28 0.0932 - 29 0.0403 - 30 0.0529 - 31 0.0126 - 32 0.0277 - 33 0.0428 - 37 0.00252 - 41 0.0479 - 42 0.00756 - 44 0.00252 - 45 0.00252 - 47 0.0529 - - 10 727 22 0 - 0 0.144 - 1 0.00275 - 2 0.0151 - 7 0.38 - 13 0.00275 - 17 0.00138 - 19 0.00138 - 21 0.0578 - 24 0.00138 - 26 0.0289 - 28 0.0385 - 29 0.0399 - 30 0.00825 - 31 0.0165 - 32 0.0206 - 33 0.0179 - 37 0.00138 - 41 0.0894 - 42 0.011 - 44 0.00275 - 45 0.0179 - 47 0.1 - - 12 2 2 0 - 0 0.5 - 2 0.5 - - 13 38560 39 0 - 0 0.0431 - 1 0.000726 - 2 0.0281 - 3 0.0249 - 4 0.00114 - 6 2.59e-05 - 7 0.377 - 8 0.00319 - 9 0.000441 - 10 0.000363 - 12 0.000441 - 13 0.0138 - 14 0.0218 - 15 0.00265 - 16 7.78e-05 - 17 0.00423 - 18 5.19e-05 - 19 0.00202 - 21 0.0182 - 22 0.00412 - 24 0.00747 - 26 0.0309 - 28 0.0659 - 29 0.0534 - 30 0.0347 - 31 0.0155 - 32 0.0119 - 33 0.0219 - 34 0.00187 - 35 0.00119 - 37 0.00778 - 40 2.59e-05 - 41 0.0783 - 42 0.00578 - 43 0.000622 - 44 0.00137 - 45 0.0108 - 46 0.00371 - 47 0.101 - - 14 5945 33 0 - 0 0.0192 - 2 0.0441 - 4 0.00404 - 7 0.376 - 8 0.00202 - 10 0.000336 - 12 0.000168 - 13 0.00673 - 14 0.00471 - 15 0.000505 - 16 0.000168 - 17 0.0116 - 19 0.000505 - 21 0.0104 - 23 0.000168 - 24 0.00976 - 26 0.031 - 28 0.0833 - 29 0.0474 - 30 0.0368 - 31 0.00908 - 32 0.0172 - 33 0.02 - 34 0.00118 - 35 0.0032 - 37 0.00622 - 41 0.076 - 42 0.00706 - 43 0.000168 - 44 0.00135 - 45 0.0163 - 46 0.00219 - 47 0.152 - - 15 8602 35 0 - 0 0.0117 - 1 0.000465 - 2 0.0398 - 3 0.000581 - 4 0.00221 - 7 0.483 - 8 0.000581 - 12 0.000698 - 13 0.00581 - 14 0.00174 - 15 0.00267 - 16 0.000116 - 17 0.00093 - 19 0.00105 - 21 0.00523 - 22 0.000116 - 24 0.00302 - 26 0.038 - 28 0.0367 - 29 0.031 - 30 0.0208 - 31 0.0086 - 32 0.00732 - 33 0.0166 - 34 0.00221 - 35 0.00105 - 37 0.0086 - 40 0.000116 - 41 0.114 - 42 0.00546 - 43 0.000116 - 44 0.000814 - 45 0.00802 - 46 0.0057 - 47 0.135 - - 16 411 25 0 - 0 0.00243 - 2 0.0706 - 4 0.00243 - 7 0.406 - 13 0.0243 - 14 0.00487 - 17 0.00243 - 21 0.0219 - 24 0.00973 - 26 0.0487 - 28 0.0535 - 29 0.0316 - 30 0.0219 - 31 0.0073 - 32 0.00487 - 33 0.0073 - 34 0.00487 - 35 0.00243 - 37 0.0292 - 40 0.00243 - 41 0.0925 - 42 0.00487 - 44 0.00243 - 45 0.0122 - 47 0.129 - - 19 14 8 0 - 2 0.143 - 7 0.214 - 21 0.0714 - 26 0.143 - 29 0.0714 - 41 0.0714 - 45 0.143 - 47 0.143 - - 20 23 9 0 - 7 0.304 - 21 0.087 - 24 0.087 - 28 0.174 - 30 0.0435 - 31 0.0435 - 32 0.13 - 35 0.0435 - 45 0.087 - - 21 134 19 0 - 0 0.231 - 2 0.0149 - 4 0.00746 - 7 0.291 - 14 0.0224 - 15 0.00746 - 19 0.0224 - 21 0.0448 - 24 0.0149 - 26 0.0224 - 28 0.0522 - 29 0.0299 - 30 0.0522 - 33 0.0299 - 37 0.00746 - 41 0.0746 - 42 0.0149 - 45 0.0373 - 47 0.0224 - - 22 13 7 0 - 0 0.0769 - 4 0.0769 - 7 0.462 - 28 0.0769 - 29 0.0769 - 30 0.154 - 33 0.0769 - - 23 34 11 0 - 0 0.206 - 2 0.0294 - 7 0.235 - 21 0.0294 - 26 0.0294 - 28 0.0294 - 29 0.0588 - 31 0.0882 - 42 0.0294 - 45 0.0588 - 47 0.206 - - 30 600 27 0 - 0 0.0817 - 1 0.00333 - 2 0.0267 - 7 0.398 - 8 0.00167 - 13 0.005 - 14 0.00167 - 15 0.00333 - 17 0.005 - 19 0.00167 - 21 0.015 - 24 0.01 - 26 0.0333 - 28 0.055 - 29 0.0433 - 30 0.0367 - 31 0.00833 - 32 0.0217 - 33 0.045 - 34 0.00167 - 37 0.00667 - 41 0.0767 - 42 0.00833 - 43 0.00167 - 45 0.00833 - 46 0.00167 - 47 0.0983 - - 31 594 25 0 - 0 0.0303 - 2 0.0354 - 4 0.00673 - 7 0.468 - 8 0.00168 - 9 0.00168 - 13 0.00842 - 14 0.00337 - 17 0.00337 - 19 0.00168 - 21 0.00673 - 22 0.00168 - 24 0.0118 - 26 0.0286 - 28 0.0724 - 29 0.0825 - 30 0.0488 - 31 0.0152 - 32 0.0168 - 33 0.0118 - 37 0.00673 - 41 0.0488 - 42 0.00842 - 45 0.00168 - 47 0.0774 - - 39 26 10 0 - 2 0.0769 - 7 0.5 - 13 0.0385 - 14 0.0385 - 21 0.0385 - 26 0.115 - 29 0.0769 - 30 0.0385 - 41 0.0385 - 47 0.0385 - - 44 28 10 0 - 0 0.0714 - 2 0.107 - 7 0.393 - 19 0.0357 - 21 0.0357 - 28 0.0357 - 30 0.0357 - 35 0.0357 - 41 0.0357 - 45 0.214 - - 45 444 26 0 - 0 0.0968 - 1 0.00901 - 2 0.0203 - 7 0.358 - 9 0.00225 - 13 0.027 - 14 0.0045 - 15 0.0113 - 16 0.00225 - 17 0.00676 - 19 0.0113 - 21 0.0158 - 24 0.0045 - 26 0.027 - 28 0.0676 - 29 0.0968 - 30 0.0495 - 31 0.045 - 32 0.00676 - 33 0.0518 - 37 0.00225 - 41 0.0293 - 42 0.0135 - 45 0.00225 - 46 0.00225 - 47 0.036 - - 47 2538 32 0 - 0 0.0303 - 2 0.0693 - 3 0.0146 - 4 0.00473 - 7 0.265 - 8 0.00197 - 10 0.000394 - 12 0.000394 - 13 0.00709 - 14 0.00512 - 15 0.00197 - 17 0.0106 - 19 0.0118 - 21 0.0296 - 24 0.00591 - 26 0.0209 - 28 0.0571 - 29 0.0201 - 30 0.0197 - 31 0.00906 - 32 0.0197 - 33 0.015 - 34 0.000394 - 35 0.00236 - 37 0.00591 - 41 0.0563 - 42 0.0146 - 43 0.00118 - 44 0.00355 - 45 0.0583 - 46 0.00197 - 47 0.235 - - 48 2419 31 0 - 0 0.0864 - 1 0.000413 - 2 0.0364 - 3 0.00165 - 4 0.000827 - 6 0.000413 - 7 0.329 - 8 0.00248 - 10 0.000827 - 12 0.000413 - 13 0.00537 - 14 0.000827 - 15 0.00661 - 17 0.000413 - 19 0.00331 - 21 0.0215 - 24 0.0103 - 26 0.0302 - 28 0.0566 - 29 0.127 - 30 0.0463 - 31 0.0265 - 32 0.012 - 33 0.0294 - 37 0.00248 - 41 0.0744 - 42 0.00951 - 43 0.000413 - 45 0.0112 - 46 0.000827 - 47 0.0661 - - 49 8 4 0 - 0 0.375 - 7 0.375 - 29 0.125 - 32 0.125 - - 54 240 13 0 - 0 0.0125 - 2 0.0125 - 7 0.292 - 13 0.00417 - 26 0.00833 - 28 0.00833 - 29 0.0208 - 30 0.0208 - 31 0.0167 - 33 0.0208 - 41 0.383 - 42 0.00417 - 47 0.196 - - 55 157 17 0 - 0 0.0318 - 2 0.00637 - 7 0.395 - 13 0.00637 - 19 0.00637 - 21 0.00637 - 24 0.0127 - 26 0.0318 - 28 0.0446 - 29 0.0637 - 30 0.0318 - 31 0.0318 - 32 0.00637 - 33 0.0318 - 34 0.00637 - 41 0.146 - 47 0.14 - - 56 123 14 0 - 0 0.065 - 2 0.0325 - 7 0.463 - 21 0.0244 - 26 0.0325 - 28 0.0732 - 30 0.0244 - 31 0.00813 - 32 0.0325 - 33 0.0244 - 41 0.114 - 42 0.0163 - 45 0.00813 - 47 0.0813 - - 58 10 6 0 - 0 0.1 - 7 0.4 - 28 0.1 - 29 0.1 - 45 0.2 - 47 0.1 - - 60 63 9 0 - 0 0.0476 - 2 0.0317 - 7 0.714 - 21 0.0159 - 26 0.0476 - 28 0.0952 - 29 0.0159 - 30 0.0159 - 41 0.0159 - - 68 43 11 0 - 0 0.0465 - 2 0.0233 - 4 0.0465 - 7 0.628 - 26 0.0465 - 28 0.0233 - 29 0.0233 - 30 0.0465 - 33 0.0465 - 41 0.0233 - 47 0.0465 - - 5 861 24 0 - 0 0.00581 - 2 0.0918 - 7 0.18 - 8 0.00465 - 10 0.00348 - 13 0.0186 - 14 0.00465 - 15 0.00232 - 16 0.00116 - 19 0.00232 - 21 0.029 - 28 0.0163 - 29 0.0395 - 30 0.00465 - 31 0.00232 - 32 0.0279 - 33 0.0151 - 34 0.00813 - 37 0.0267 - 41 0.143 - 42 0.00813 - 44 0.00232 - 45 0.167 - 47 0.195 - - 6 150 19 6 - 2 0.0133 - 3 0.00667 - 4 0.127 - 6 0.193 - 7 0.12 - 8 0.02 - 15 0.28 - 18 0.0133 - 19 0.00667 - 20 0.0133 - 25 0.0133 - 26 0.0133 - 28 0.0133 - 29 0.00667 - 32 0.00667 - 33 0.00667 - 41 0.0333 - 45 0.0667 - 47 0.0467 - - 6 29 12 0 - 2 0.0345 - 4 0.241 - 6 0.172 - 7 0.138 - 8 0.0345 - 15 0.0345 - 18 0.069 - 28 0.0345 - 29 0.0345 - 41 0.0345 - 45 0.069 - 47 0.103 - - 13 12 4 0 - 4 0.25 - 6 0.583 - 8 0.0833 - 15 0.0833 - - 14 7 3 0 - 3 0.143 - 6 0.714 - 7 0.143 - - 15 42 2 0 - 6 0.0476 - 15 0.952 - - 46 2 1 0 - 45 1 - - 47 53 14 0 - 2 0.0189 - 4 0.151 - 6 0.17 - 7 0.226 - 19 0.0189 - 20 0.0377 - 25 0.0377 - 26 0.0377 - 28 0.0189 - 32 0.0189 - 33 0.0189 - 41 0.0755 - 45 0.0943 - 47 0.0755 - - 7 318 24 10 - 0 0.044 - 2 0.0314 - 3 0.0157 - 4 0.00314 - 7 0.151 - 8 0.0126 - 10 0.00314 - 13 0.132 - 14 0.0975 - 15 0.0943 - 18 0.00314 - 21 0.0535 - 26 0.0283 - 28 0.0566 - 29 0.0409 - 30 0.022 - 31 0.022 - 32 0.00943 - 33 0.0252 - 35 0.00314 - 41 0.0472 - 42 0.00943 - 45 0.00943 - 47 0.0849 - - 3 47 13 0 - 0 0.0851 - 3 0.0638 - 7 0.468 - 13 0.0426 - 15 0.0213 - 21 0.0213 - 26 0.106 - 29 0.0213 - 30 0.0426 - 31 0.0213 - 41 0.0638 - 42 0.0213 - 47 0.0213 - - 4 30 11 0 - 0 0.167 - 7 0.233 - 15 0.1 - 21 0.1 - 26 0.0667 - 28 0.0333 - 31 0.0333 - 33 0.0667 - 41 0.1 - 45 0.0333 - 47 0.0667 - - 8 19 11 0 - 0 0.0526 - 4 0.0526 - 7 0.0526 - 8 0.0526 - 14 0.0526 - 21 0.105 - 26 0.0526 - 28 0.316 - 29 0.105 - 31 0.105 - 41 0.0526 - - 13 86 17 0 - 0 0.0116 - 2 0.0116 - 3 0.0116 - 7 0.0581 - 8 0.0233 - 10 0.0116 - 13 0.337 - 14 0.267 - 18 0.0116 - 21 0.0698 - 28 0.0116 - 29 0.0349 - 30 0.0116 - 32 0.0116 - 33 0.0233 - 41 0.0581 - 47 0.0349 - - 14 2 2 0 - 45 0.5 - 47 0.5 - - 15 49 8 0 - 7 0.0204 - 13 0.184 - 14 0.102 - 15 0.531 - 28 0.0204 - 30 0.0408 - 31 0.0612 - 47 0.0408 - - 21 3 2 0 - 2 0.333 - 28 0.667 - - 39 2 2 0 - 21 0.5 - 26 0.5 - - 47 67 17 0 - 0 0.0448 - 2 0.119 - 7 0.149 - 8 0.0149 - 13 0.0149 - 14 0.0149 - 21 0.0597 - 28 0.104 - 29 0.0746 - 30 0.0149 - 32 0.0299 - 33 0.0448 - 35 0.0149 - 41 0.0299 - 42 0.0149 - 45 0.0149 - 47 0.239 - - 55 6 5 0 - 7 0.333 - 13 0.167 - 14 0.167 - 41 0.167 - 42 0.167 - - 8 48850 43 29 - 0 0.0133 - 1 0.000184 - 2 0.0351 - 3 0.0255 - 4 0.357 - 6 0.000143 - 7 0.172 - 8 0.0864 - 9 0.00254 - 10 0.00328 - 12 6.14e-05 - 13 0.0137 - 14 0.00282 - 15 0.0132 - 16 0.000246 - 17 2.05e-05 - 18 0.0354 - 19 0.000676 - 20 0.0406 - 21 0.00948 - 22 0.00086 - 23 0.00102 - 24 0.00264 - 25 2.05e-05 - 26 0.0131 - 28 0.0268 - 29 0.0167 - 30 0.0198 - 31 0.0105 - 32 0.00571 - 33 0.0085 - 34 0.000655 - 35 0.000205 - 36 6.14e-05 - 37 0.00192 - 40 4.09e-05 - 41 0.0306 - 42 0.00268 - 43 0.000368 - 44 0.00086 - 45 0.0123 - 46 0.000512 - 47 0.0316 - - 2 152 23 0 - 0 0.00658 - 2 0.0132 - 3 0.0263 - 4 0.289 - 7 0.23 - 8 0.0395 - 9 0.00658 - 13 0.0132 - 15 0.0263 - 18 0.0263 - 20 0.0197 - 21 0.0132 - 24 0.00658 - 26 0.0263 - 28 0.0263 - 30 0.0197 - 32 0.0132 - 33 0.0197 - 41 0.0855 - 42 0.00658 - 44 0.00658 - 45 0.0526 - 47 0.0263 - - 3 710 19 0 - 0 0.00282 - 2 0.00282 - 3 0.00845 - 4 0.785 - 7 0.141 - 8 0.00282 - 14 0.00282 - 18 0.0183 - 20 0.0127 - 21 0.00141 - 26 0.00141 - 28 0.00282 - 29 0.00563 - 30 0.00282 - 32 0.00141 - 33 0.00141 - 41 0.00141 - 42 0.00282 - 45 0.00282 - - 4 67 13 0 - 0 0.134 - 2 0.0299 - 7 0.328 - 21 0.0597 - 24 0.0149 - 26 0.0149 - 28 0.164 - 29 0.0149 - 30 0.0597 - 37 0.0149 - 41 0.0299 - 45 0.0149 - 47 0.119 - - 6 2 2 0 - 3 0.5 - 8 0.5 - - 8 3996 36 0 - 0 0.0133 - 1 0.000501 - 2 0.0511 - 3 0.0198 - 4 0.362 - 7 0.183 - 8 0.0568 - 9 0.00025 - 10 0.0015 - 13 0.00701 - 14 0.000501 - 15 0.00475 - 18 0.0455 - 19 0.001 - 20 0.048 - 21 0.00551 - 22 0.000751 - 23 0.00025 - 24 0.00375 - 26 0.00976 - 28 0.0263 - 29 0.0235 - 30 0.0205 - 31 0.00826 - 32 0.00676 - 33 0.00826 - 35 0.000501 - 37 0.00225 - 40 0.00025 - 41 0.04 - 42 0.00601 - 43 0.000501 - 44 0.000501 - 45 0.01 - 46 0.00025 - 47 0.0313 - - 9 12 8 0 - 0 0.0833 - 2 0.0833 - 4 0.417 - 7 0.0833 - 18 0.0833 - 31 0.0833 - 45 0.0833 - 47 0.0833 - - 10 7 3 0 - 4 0.429 - 7 0.143 - 18 0.429 - - 13 26070 40 0 - 0 0.011 - 1 0.000153 - 2 0.024 - 3 0.0157 - 4 0.465 - 6 0.000192 - 7 0.112 - 8 0.0908 - 9 0.00226 - 10 0.00315 - 13 0.0171 - 14 0.00345 - 15 0.0185 - 16 0.000345 - 18 0.043 - 19 0.000575 - 20 0.0436 - 21 0.00832 - 22 0.000921 - 23 0.000806 - 24 0.00146 - 25 3.84e-05 - 26 0.00809 - 28 0.0181 - 29 0.0136 - 30 0.0134 - 31 0.00951 - 32 0.00326 - 33 0.0061 - 34 0.000614 - 35 0.000115 - 36 7.67e-05 - 37 0.00119 - 41 0.0252 - 42 0.00153 - 43 0.000422 - 44 0.000959 - 45 0.0114 - 46 0.00046 - 47 0.0233 - - 14 13431 41 0 - 0 0.0187 - 1 0.000223 - 2 0.0561 - 3 0.0497 - 4 0.12 - 6 0.000149 - 7 0.281 - 8 0.11 - 9 0.00439 - 10 0.00499 - 12 0.000223 - 13 0.00864 - 14 0.00127 - 15 0.00849 - 16 0.000149 - 18 0.0237 - 19 0.00067 - 20 0.0344 - 21 0.00834 - 22 0.000968 - 23 0.00119 - 24 0.00499 - 26 0.0237 - 28 0.0472 - 29 0.0201 - 30 0.0331 - 31 0.0135 - 32 0.0108 - 33 0.0134 - 34 0.000968 - 35 0.000298 - 36 7.45e-05 - 37 0.00328 - 40 7.45e-05 - 41 0.0369 - 42 0.00335 - 43 0.000298 - 44 0.00067 - 45 0.00752 - 46 0.000819 - 47 0.0462 - - 15 1891 29 0 - 0 0.00635 - 2 0.0212 - 3 0.028 - 4 0.366 - 7 0.24 - 8 0.0317 - 9 0.00159 - 10 0.000529 - 13 0.027 - 14 0.0111 - 15 0.01 - 18 0.0296 - 19 0.000529 - 20 0.0317 - 21 0.00687 - 24 0.000529 - 26 0.0169 - 28 0.0164 - 29 0.0196 - 30 0.0206 - 31 0.0169 - 32 0.00212 - 33 0.0074 - 37 0.00106 - 41 0.0365 - 42 0.0037 - 45 0.0037 - 46 0.000529 - 47 0.0418 - - 16 101 21 0 - 2 0.0594 - 3 0.0396 - 4 0.168 - 7 0.277 - 8 0.0396 - 10 0.0099 - 13 0.0297 - 15 0.0198 - 20 0.0396 - 21 0.0099 - 26 0.0297 - 28 0.0198 - 29 0.0099 - 30 0.0297 - 31 0.0198 - 32 0.0099 - 33 0.0198 - 41 0.0495 - 42 0.0198 - 45 0.0099 - 47 0.0891 - - 18 12 5 0 - 4 0.583 - 7 0.0833 - 8 0.0833 - 13 0.167 - 47 0.0833 - - 21 3 3 0 - 2 0.333 - 4 0.333 - 15 0.333 - - 30 120 24 0 - 0 0.00833 - 2 0.158 - 3 0.0333 - 4 0.267 - 7 0.15 - 8 0.0333 - 10 0.00833 - 13 0.00833 - 14 0.00833 - 15 0.00833 - 18 0.05 - 20 0.05 - 21 0.0167 - 24 0.00833 - 26 0.0167 - 28 0.0333 - 29 0.00833 - 30 0.0333 - 31 0.00833 - 32 0.00833 - 33 0.025 - 41 0.025 - 45 0.00833 - 47 0.025 - - 31 89 15 0 - 0 0.0225 - 2 0.0112 - 3 0.0112 - 4 0.258 - 7 0.247 - 8 0.124 - 13 0.0674 - 15 0.0337 - 18 0.0562 - 20 0.0337 - 21 0.0112 - 28 0.0225 - 29 0.0449 - 30 0.0337 - 47 0.0225 - - 39 13 2 0 - 4 0.923 - 19 0.0769 - - 41 312 24 0 - 0 0.0128 - 2 0.00962 - 3 0.00641 - 4 0.471 - 7 0.17 - 8 0.0417 - 15 0.00321 - 18 0.00641 - 20 0.0577 - 21 0.00641 - 23 0.00321 - 24 0.00321 - 26 0.0128 - 28 0.0128 - 29 0.00641 - 30 0.00962 - 31 0.00321 - 32 0.00962 - 33 0.016 - 34 0.00321 - 41 0.0641 - 42 0.00641 - 45 0.0192 - 47 0.0449 - - 43 3 3 0 - 2 0.333 - 4 0.333 - 44 0.333 - - 44 7 5 0 - 2 0.143 - 4 0.286 - 7 0.286 - 21 0.143 - 29 0.143 - - 45 95 14 0 - 0 0.0105 - 2 0.0211 - 3 0.0105 - 4 0.537 - 7 0.147 - 8 0.0526 - 13 0.0105 - 18 0.0316 - 20 0.0421 - 28 0.0421 - 30 0.0211 - 31 0.0105 - 41 0.0526 - 47 0.0105 - - 46 136 9 0 - 2 0.00735 - 4 0.00735 - 8 0.0221 - 16 0.00735 - 19 0.00735 - 20 0.00735 - 21 0.0147 - 41 0.0147 - 45 0.912 - - 47 1224 33 0 - 0 0.018 - 2 0.0359 - 3 0.0098 - 4 0.393 - 7 0.151 - 8 0.0237 - 9 0.000817 - 10 0.00163 - 13 0.0106 - 14 0.00408 - 18 0.000817 - 19 0.00163 - 20 0.0474 - 21 0.0637 - 22 0.00163 - 23 0.00817 - 24 0.00163 - 26 0.0147 - 28 0.0221 - 29 0.0327 - 30 0.0163 - 31 0.00817 - 32 0.00654 - 33 0.0106 - 34 0.00163 - 35 0.000817 - 37 0.0049 - 41 0.0408 - 42 0.00572 - 43 0.000817 - 44 0.00327 - 45 0.00654 - 47 0.0507 - - 48 199 22 0 - 0 0.0101 - 2 0.0201 - 3 0.00503 - 4 0.533 - 7 0.121 - 8 0.0452 - 17 0.00503 - 18 0.0653 - 20 0.0704 - 21 0.0151 - 23 0.00503 - 24 0.00503 - 26 0.00503 - 28 0.0101 - 30 0.0151 - 31 0.00503 - 32 0.0101 - 33 0.00503 - 41 0.0201 - 42 0.00503 - 45 0.00503 - 47 0.0201 - - 54 13 5 0 - 4 0.385 - 7 0.308 - 8 0.154 - 20 0.0769 - 29 0.0769 - - 55 22 9 0 - 2 0.0455 - 3 0.0455 - 4 0.455 - 7 0.0909 - 8 0.0455 - 18 0.0909 - 20 0.0909 - 21 0.0909 - 30 0.0455 - - 56 68 12 0 - 2 0.0147 - 3 0.0294 - 4 0.309 - 7 0.221 - 8 0.0441 - 20 0.0882 - 26 0.0441 - 28 0.0735 - 29 0.0294 - 30 0.0441 - 31 0.0294 - 41 0.0735 - - 58 17 5 0 - 0 0.118 - 4 0.588 - 7 0.176 - 24 0.0588 - 33 0.0588 - - 60 30 3 0 - 4 0.9 - 7 0.0333 - 20 0.0667 - - 68 40 12 0 - 2 0.025 - 4 0.475 - 7 0.15 - 8 0.025 - 20 0.025 - 26 0.05 - 28 0.075 - 29 0.025 - 30 0.025 - 37 0.025 - 41 0.05 - 47 0.05 - - 9 1597 31 14 - 0 0.0601 - 1 0.00125 - 2 0.0507 - 3 0.015 - 4 0.249 - 7 0.193 - 8 0.0106 - 12 0.000626 - 13 0.0025 - 14 0.00689 - 15 0.0025 - 16 0.000626 - 18 0.0113 - 19 0.0025 - 20 0.0144 - 21 0.0244 - 24 0.00626 - 26 0.0288 - 28 0.102 - 29 0.0394 - 30 0.0557 - 31 0.01 - 32 0.0276 - 33 0.0244 - 34 0.000626 - 37 0.000626 - 41 0.025 - 42 0.00313 - 43 0.000626 - 45 0.01 - 47 0.02 - - 2 4 4 0 - 0 0.25 - 7 0.25 - 28 0.25 - 41 0.25 - - 3 5 1 0 - 4 1 - - 8 103 16 0 - 0 0.0291 - 2 0.117 - 4 0.214 - 7 0.243 - 21 0.0194 - 24 0.00971 - 26 0.0777 - 28 0.0485 - 29 0.0583 - 30 0.0485 - 31 0.0194 - 32 0.0291 - 33 0.0194 - 41 0.0291 - 45 0.0194 - 47 0.0194 - - 13 734 28 0 - 0 0.0436 - 1 0.00136 - 2 0.0354 - 3 0.0109 - 4 0.384 - 7 0.147 - 8 0.00954 - 12 0.00136 - 13 0.00136 - 14 0.00817 - 15 0.00545 - 16 0.00136 - 18 0.0177 - 19 0.00545 - 20 0.0123 - 21 0.0123 - 24 0.0109 - 26 0.03 - 28 0.0858 - 29 0.0245 - 30 0.045 - 31 0.00545 - 32 0.0232 - 33 0.0204 - 41 0.0327 - 42 0.00545 - 45 0.00545 - 47 0.0136 - - 14 473 26 0 - 0 0.0402 - 2 0.0465 - 3 0.0275 - 4 0.0867 - 7 0.296 - 8 0.0148 - 13 0.00211 - 14 0.00423 - 18 0.0106 - 20 0.0169 - 21 0.0127 - 24 0.00211 - 26 0.0317 - 28 0.123 - 29 0.0613 - 30 0.0677 - 31 0.00846 - 32 0.0317 - 33 0.0296 - 34 0.00211 - 37 0.00211 - 41 0.0233 - 42 0.00211 - 43 0.00211 - 45 0.0148 - 47 0.0402 - - 15 39 8 0 - 2 0.0513 - 4 0.513 - 7 0.154 - 20 0.0513 - 28 0.103 - 29 0.0256 - 30 0.0769 - 41 0.0256 - - 16 2 2 0 - 8 0.5 - 29 0.5 - - 30 2 2 0 - 2 0.5 - 26 0.5 - - 41 17 7 0 - 4 0.471 - 7 0.235 - 20 0.0588 - 30 0.0588 - 31 0.0588 - 32 0.0588 - 33 0.0588 - - 45 3 3 0 - 0 0.333 - 4 0.333 - 33 0.333 - - 46 1 1 0 - 45 1 - - 47 201 18 0 - 0 0.194 - 1 0.00498 - 2 0.0896 - 3 0.0149 - 4 0.0746 - 7 0.109 - 8 0.00995 - 13 0.00995 - 14 0.0149 - 20 0.00498 - 21 0.109 - 28 0.154 - 29 0.0398 - 30 0.0647 - 31 0.0249 - 32 0.0398 - 33 0.0299 - 45 0.00995 - - 48 4 3 0 - 4 0.25 - 7 0.25 - 20 0.5 - - 56 5 4 0 - 7 0.2 - 28 0.2 - 30 0.4 - 47 0.2 - - 10 1526 27 9 - 0 0.00197 - 2 0.0262 - 3 0.019 - 4 0.479 - 7 0.106 - 8 0.00524 - 13 0.00262 - 14 0.000655 - 18 0.132 - 19 0.000655 - 20 0.0511 - 21 0.0059 - 24 0.00459 - 26 0.00328 - 28 0.0105 - 29 0.0151 - 30 0.00655 - 31 0.00262 - 32 0.00328 - 33 0.00721 - 34 0.00131 - 35 0.00131 - 37 0.00262 - 41 0.0256 - 42 0.00262 - 45 0.0177 - 47 0.0655 - - 3 13 2 0 - 4 0.923 - 7 0.0769 - - 8 156 15 0 - 2 0.0128 - 3 0.0449 - 4 0.429 - 7 0.147 - 8 0.00641 - 18 0.154 - 20 0.0897 - 21 0.00641 - 28 0.00641 - 29 0.00641 - 35 0.00641 - 41 0.0192 - 42 0.00641 - 45 0.0321 - 47 0.0321 - - 13 661 14 0 - 2 0.00756 - 3 0.0121 - 4 0.632 - 7 0.0242 - 8 0.00756 - 13 0.00151 - 18 0.219 - 19 0.00151 - 20 0.059 - 28 0.00151 - 33 0.00151 - 37 0.00151 - 41 0.00756 - 47 0.0227 - - 14 291 20 0 - 2 0.0447 - 3 0.0412 - 4 0.316 - 7 0.22 - 8 0.00687 - 13 0.00344 - 14 0.00344 - 18 0.0962 - 20 0.0481 - 21 0.00687 - 26 0.00687 - 29 0.00687 - 33 0.0103 - 34 0.00344 - 35 0.00344 - 37 0.00344 - 41 0.055 - 42 0.00344 - 45 0.0447 - 47 0.0756 - - 15 19 9 0 - 2 0.0526 - 3 0.0526 - 4 0.211 - 7 0.263 - 26 0.0526 - 28 0.0526 - 33 0.105 - 41 0.0526 - 47 0.158 - - 16 3 3 0 - 4 0.333 - 7 0.333 - 32 0.333 - - 31 3 3 0 - 3 0.333 - 18 0.333 - 20 0.333 - - 47 359 21 0 - 0 0.00836 - 2 0.0501 - 4 0.351 - 7 0.139 - 13 0.00557 - 20 0.0279 - 21 0.0167 - 24 0.0195 - 26 0.00557 - 28 0.0362 - 29 0.0557 - 30 0.0279 - 31 0.00836 - 32 0.0111 - 33 0.0139 - 34 0.00279 - 37 0.00279 - 41 0.039 - 42 0.00557 - 45 0.0195 - 47 0.153 - - 56 3 3 0 - 4 0.333 - 31 0.333 - 37 0.333 - - 12 5 4 0 - 4 0.4 - 15 0.2 - 45 0.2 - 46 0.2 - - 13 129892 43 24 - 0 0.0054 - 1 0.000123 - 2 0.0201 - 3 0.0473 - 4 0.298 - 6 0.000123 - 7 0.0813 - 8 0.21 - 9 0.00684 - 10 0.00527 - 12 3.85e-05 - 13 0.123 - 14 0.0094 - 15 0.0406 - 16 0.000762 - 18 0.0276 - 19 0.000362 - 20 0.0287 - 21 0.00234 - 22 5.39e-05 - 23 7.7e-06 - 24 0.000993 - 25 1.54e-05 - 26 0.0052 - 27 1.54e-05 - 28 0.0115 - 29 0.00598 - 30 0.0138 - 31 0.00949 - 32 0.00208 - 33 0.00347 - 34 0.000223 - 35 0.000108 - 36 1.54e-05 - 37 0.000908 - 40 0.0001 - 41 0.0179 - 42 0.00142 - 43 0.000508 - 44 0.000608 - 45 0.00449 - 46 0.00184 - 47 0.0122 - - 2 1627 31 0 - 0 0.0086 - 2 0.0172 - 3 0.00738 - 4 0.189 - 7 0.205 - 8 0.144 - 9 0.00553 - 10 0.00246 - 13 0.0688 - 14 0.00738 - 15 0.0277 - 16 0.00123 - 18 0.0332 - 20 0.0424 - 21 0.00307 - 24 0.00123 - 26 0.0117 - 28 0.0203 - 29 0.0086 - 30 0.0178 - 31 0.0135 - 32 0.00246 - 33 0.00676 - 37 0.000615 - 41 0.119 - 42 0.0043 - 43 0.00123 - 44 0.00123 - 45 0.00615 - 46 0.000615 - 47 0.0209 - - 3 92 11 0 - 3 0.0217 - 4 0.478 - 7 0.174 - 8 0.0435 - 13 0.0217 - 15 0.0109 - 18 0.163 - 20 0.0217 - 30 0.0109 - 41 0.0435 - 45 0.0109 - - 4 1 1 0 - 31 1 - - 8 268 24 0 - 0 0.00373 - 2 0.123 - 3 0.0336 - 4 0.243 - 7 0.127 - 8 0.097 - 9 0.00373 - 10 0.0112 - 13 0.104 - 14 0.00373 - 15 0.0373 - 18 0.0672 - 20 0.0299 - 26 0.00746 - 28 0.0187 - 29 0.0149 - 30 0.0149 - 31 0.00373 - 33 0.00373 - 37 0.00373 - 41 0.0261 - 42 0.00373 - 45 0.00746 - 47 0.0112 - - 10 1 1 0 - 45 1 - - 13 15006 38 0 - 0 0.004 - 1 0.0002 - 2 0.0364 - 3 0.0287 - 4 0.304 - 6 0.000267 - 7 0.0826 - 8 0.211 - 9 0.00553 - 10 0.0072 - 13 0.0804 - 14 0.00653 - 15 0.0508 - 16 0.0004 - 18 0.0394 - 19 0.0002 - 20 0.0337 - 21 0.00187 - 22 6.66e-05 - 24 0.0008 - 25 0.000133 - 26 0.00433 - 28 0.0114 - 29 0.00513 - 30 0.0114 - 31 0.011 - 32 0.0022 - 33 0.0046 - 35 0.0002 - 37 0.001 - 40 0.0004 - 41 0.028 - 42 0.00233 - 43 0.0006 - 44 0.000666 - 45 0.0076 - 46 0.0016 - 47 0.0133 - - 14 9907 35 0 - 0 0.00757 - 2 0.0784 - 3 0.0262 - 4 0.0705 - 7 0.178 - 8 0.229 - 9 0.0139 - 10 0.00737 - 13 0.0728 - 14 0.00262 - 15 0.0373 - 16 0.000101 - 18 0.0196 - 19 0.000303 - 20 0.0263 - 21 0.00313 - 23 0.000101 - 24 0.00444 - 26 0.0146 - 28 0.0333 - 29 0.013 - 30 0.028 - 31 0.0133 - 32 0.00616 - 33 0.0125 - 34 0.000808 - 35 0.000202 - 37 0.00384 - 41 0.0365 - 42 0.00303 - 43 0.000202 - 44 0.000505 - 45 0.00757 - 46 0.00212 - 47 0.0461 - - 15 788 27 0 - 0 0.00635 - 2 0.0127 - 3 0.0178 - 4 0.0787 - 7 0.085 - 8 0.184 - 13 0.221 - 14 0.0127 - 15 0.225 - 16 0.0152 - 18 0.0127 - 20 0.019 - 24 0.00127 - 26 0.00888 - 28 0.00381 - 29 0.0114 - 30 0.00888 - 31 0.00381 - 33 0.014 - 35 0.00127 - 37 0.00254 - 41 0.0292 - 42 0.00127 - 44 0.00254 - 45 0.00381 - 46 0.00254 - 47 0.0152 - - 16 9 7 0 - 2 0.222 - 4 0.222 - 7 0.111 - 13 0.111 - 14 0.111 - 15 0.111 - 20 0.111 - - 18 2901 26 0 - 0 0.00103 - 2 0.00483 - 3 0.00345 - 4 0.694 - 7 0.0476 - 8 0.0958 - 9 0.00276 - 10 0.00207 - 13 0.0589 - 14 0.00414 - 15 0.0269 - 19 0.000345 - 20 0.0203 - 21 0.000689 - 26 0.00483 - 28 0.00172 - 29 0.0031 - 30 0.00552 - 31 0.00172 - 32 0.00138 - 33 0.00138 - 41 0.00276 - 42 0.000345 - 44 0.000345 - 45 0.000689 - 47 0.0138 - - 20 2 2 0 - 7 0.5 - 26 0.5 - - 21 3 3 0 - 2 0.333 - 7 0.333 - 21 0.333 - - 26 2 2 0 - 3 0.5 - 29 0.5 - - 29 11 5 0 - 3 0.273 - 4 0.0909 - 7 0.0909 - 8 0.273 - 13 0.273 - - 30 102 12 0 - 2 0.186 - 4 0.412 - 7 0.0392 - 8 0.118 - 10 0.0294 - 13 0.0588 - 15 0.0392 - 18 0.0392 - 20 0.0196 - 31 0.0196 - 41 0.0294 - 45 0.0098 - - 31 13 5 0 - 7 0.538 - 8 0.154 - 13 0.0769 - 15 0.154 - 41 0.0769 - - 41 247 24 0 - 0 0.00405 - 2 0.0162 - 4 0.19 - 7 0.243 - 8 0.0729 - 9 0.00405 - 10 0.00405 - 13 0.0567 - 15 0.00405 - 18 0.0162 - 20 0.0364 - 21 0.00405 - 26 0.0162 - 28 0.0121 - 29 0.0121 - 30 0.0202 - 31 0.0162 - 32 0.00405 - 33 0.0202 - 41 0.174 - 42 0.0162 - 44 0.00405 - 45 0.0202 - 47 0.0324 - - 42 4 2 0 - 4 0.5 - 7 0.5 - - 43 15 3 0 - 2 0.0667 - 8 0.2 - 44 0.733 - - 45 36 10 0 - 2 0.0556 - 3 0.0556 - 4 0.389 - 7 0.25 - 8 0.111 - 15 0.0278 - 26 0.0278 - 30 0.0278 - 42 0.0278 - 47 0.0278 - - 46 101 7 0 - 4 0.0198 - 7 0.0099 - 8 0.307 - 13 0.119 - 15 0.0099 - 20 0.0198 - 45 0.515 - - 47 98717 41 0 - 0 0.0055 - 1 0.000132 - 2 0.0119 - 3 0.0547 - 4 0.312 - 6 0.000122 - 7 0.0697 - 8 0.213 - 9 0.00656 - 10 0.00492 - 12 5.06e-05 - 13 0.137 - 14 0.0107 - 15 0.0387 - 16 0.00079 - 18 0.0272 - 19 0.000405 - 20 0.0283 - 21 0.00239 - 22 6.08e-05 - 24 0.000709 - 26 0.00422 - 27 2.03e-05 - 28 0.00951 - 29 0.00538 - 30 0.013 - 31 0.0091 - 32 0.00169 - 33 0.00229 - 34 0.000213 - 35 8.1e-05 - 36 2.03e-05 - 37 0.000618 - 40 7.09e-05 - 41 0.0127 - 42 0.00106 - 43 0.000537 - 44 0.000476 - 45 0.00321 - 46 0.00193 - 47 0.00844 - - 48 12 4 0 - 4 0.667 - 7 0.0833 - 18 0.167 - 47 0.0833 - - 58 9 5 0 - 2 0.111 - 8 0.222 - 13 0.333 - 14 0.222 - 20 0.111 - - 14 59133 41 12 - 0 0.00551 - 1 8.46e-05 - 2 0.028 - 3 0.0954 - 4 0.101 - 6 0.000135 - 7 0.098 - 8 0.238 - 9 0.00913 - 10 0.00495 - 12 6.76e-05 - 13 0.172 - 14 0.0106 - 15 0.0368 - 16 0.000507 - 18 0.019 - 19 0.000287 - 20 0.0275 - 21 0.00211 - 22 1.69e-05 - 23 3.38e-05 - 24 0.00215 - 26 0.00883 - 28 0.0216 - 29 0.0107 - 30 0.0221 - 31 0.0124 - 32 0.00499 - 33 0.00504 - 34 0.00093 - 35 0.000237 - 36 3.38e-05 - 37 0.00277 - 40 6.76e-05 - 41 0.0213 - 42 0.00235 - 43 0.000541 - 44 0.000321 - 45 0.00424 - 46 0.00194 - 47 0.0282 - - 2 995 29 0 - 0 0.00603 - 2 0.0101 - 3 0.0141 - 4 0.112 - 7 0.22 - 8 0.166 - 9 0.0111 - 10 0.00503 - 13 0.112 - 14 0.00101 - 15 0.0211 - 18 0.0221 - 19 0.00101 - 20 0.0332 - 21 0.00402 - 24 0.00302 - 26 0.0121 - 28 0.0322 - 29 0.00503 - 30 0.0251 - 31 0.0121 - 32 0.00704 - 33 0.00603 - 35 0.00101 - 37 0.00201 - 41 0.109 - 42 0.00201 - 46 0.00201 - 47 0.0442 - - 7 1 1 0 - 21 1 - - 8 4 4 0 - 10 0.25 - 15 0.25 - 31 0.25 - 47 0.25 - - 13 1104 26 0 - 0 0.000906 - 2 0.0435 - 3 0.0154 - 4 0.302 - 7 0.0462 - 8 0.232 - 9 0.00181 - 10 0.00543 - 13 0.137 - 14 0.00996 - 15 0.067 - 18 0.0362 - 20 0.0272 - 21 0.000906 - 26 0.00181 - 28 0.00634 - 29 0.00181 - 30 0.00453 - 31 0.0127 - 33 0.00362 - 40 0.000906 - 41 0.0317 - 42 0.00181 - 44 0.000906 - 45 0.00272 - 47 0.00634 - - 14 561 28 0 - 0 0.00891 - 1 0.00178 - 2 0.082 - 3 0.0321 - 4 0.0731 - 7 0.152 - 8 0.225 - 9 0.00535 - 10 0.0125 - 13 0.0927 - 14 0.00891 - 15 0.0392 - 16 0.00178 - 18 0.0232 - 20 0.0214 - 21 0.00178 - 26 0.016 - 28 0.0107 - 29 0.0214 - 30 0.025 - 31 0.016 - 32 0.0125 - 33 0.00713 - 37 0.00535 - 41 0.0232 - 42 0.00891 - 45 0.00535 - 47 0.0677 - - 15 46 14 0 - 2 0.087 - 4 0.0652 - 7 0.174 - 8 0.0652 - 13 0.152 - 14 0.0217 - 15 0.217 - 24 0.0217 - 26 0.0217 - 30 0.0217 - 34 0.0217 - 37 0.0217 - 41 0.0435 - 47 0.0652 - - 18 545 28 0 - 0 0.00183 - 2 0.0183 - 3 0.0312 - 4 0.27 - 7 0.196 - 8 0.128 - 10 0.00734 - 13 0.0569 - 14 0.00917 - 15 0.0404 - 18 0.00734 - 20 0.0514 - 21 0.00183 - 24 0.00183 - 26 0.0202 - 28 0.0422 - 29 0.0183 - 30 0.0239 - 31 0.0147 - 32 0.00183 - 33 0.011 - 34 0.00183 - 37 0.0055 - 41 0.011 - 42 0.0055 - 45 0.00734 - 46 0.00183 - 47 0.0128 - - 21 2 2 0 - 7 0.5 - 45 0.5 - - 30 5 3 0 - 3 0.2 - 13 0.4 - 28 0.4 - - 41 126 20 0 - 3 0.00794 - 4 0.0794 - 7 0.23 - 8 0.0714 - 13 0.0952 - 14 0.00794 - 15 0.0159 - 18 0.0317 - 20 0.0397 - 21 0.00794 - 26 0.0159 - 28 0.0159 - 29 0.0159 - 30 0.0397 - 32 0.0159 - 33 0.00794 - 41 0.238 - 42 0.0317 - 45 0.0159 - 47 0.0159 - - 46 7 3 0 - 8 0.286 - 14 0.143 - 45 0.571 - - 47 55733 41 0 - 0 0.00562 - 1 7.18e-05 - 2 0.0276 - 3 0.1 - 4 0.0954 - 6 0.000144 - 7 0.095 - 8 0.241 - 9 0.0094 - 10 0.00484 - 12 7.18e-05 - 13 0.176 - 14 0.0108 - 15 0.0363 - 16 0.00052 - 18 0.0186 - 19 0.000287 - 20 0.0273 - 21 0.00208 - 22 1.79e-05 - 23 3.59e-05 - 24 0.00219 - 26 0.0087 - 28 0.0216 - 29 0.0108 - 30 0.0223 - 31 0.0124 - 32 0.00499 - 33 0.00497 - 34 0.000951 - 35 0.000233 - 36 3.59e-05 - 37 0.00278 - 40 5.38e-05 - 41 0.0191 - 42 0.00221 - 43 0.000574 - 44 0.000323 - 45 0.0042 - 46 0.00201 - 47 0.0281 - - 15 90066 40 28 - 0 0.00298 - 1 4.44e-05 - 2 0.0414 - 3 0.00516 - 4 0.0969 - 6 0.000544 - 7 0.163 - 8 0.0247 - 9 0.000611 - 10 0.000244 - 12 7.77e-05 - 13 0.0143 - 14 0.00192 - 15 0.379 - 16 0.00816 - 18 0.00975 - 19 0.000155 - 20 0.0042 - 21 0.00236 - 24 0.000744 - 25 2.22e-05 - 26 0.0111 - 28 0.00883 - 29 0.0172 - 30 0.00653 - 31 0.0057 - 32 0.00205 - 33 0.0132 - 34 0.00101 - 35 0.000489 - 36 2.22e-05 - 37 0.00244 - 40 0.000644 - 41 0.0659 - 42 0.00489 - 43 0.000533 - 44 0.00461 - 45 0.00521 - 46 0.00472 - 47 0.0883 - - 0 7 5 0 - 4 0.143 - 7 0.429 - 8 0.143 - 41 0.143 - 47 0.143 - - 2 1783 31 0 - 0 0.00112 - 2 0.0202 - 3 0.00449 - 4 0.0892 - 6 0.000561 - 7 0.192 - 8 0.0135 - 13 0.00953 - 14 0.0101 - 15 0.306 - 16 0.0107 - 18 0.0129 - 20 0.00449 - 21 0.00112 - 24 0.00224 - 26 0.0107 - 28 0.00729 - 29 0.00897 - 30 0.00897 - 31 0.00168 - 32 0.000561 - 33 0.0028 - 34 0.000561 - 37 0.00112 - 40 0.00449 - 41 0.183 - 42 0.00449 - 44 0.0028 - 45 0.00393 - 46 0.000561 - 47 0.0802 - - 3 170 13 0 - 2 0.0118 - 3 0.0235 - 4 0.494 - 7 0.118 - 8 0.0471 - 15 0.0529 - 18 0.0706 - 20 0.129 - 28 0.0118 - 33 0.00588 - 41 0.0176 - 45 0.00588 - 47 0.0118 - - 4 9 5 0 - 0 0.111 - 2 0.111 - 7 0.222 - 15 0.444 - 45 0.111 - - 6 42 14 0 - 0 0.0238 - 2 0.0238 - 4 0.0476 - 6 0.0714 - 7 0.0952 - 8 0.0476 - 13 0.0238 - 15 0.357 - 26 0.0238 - 30 0.0238 - 33 0.0476 - 40 0.0476 - 41 0.0476 - 47 0.119 - - 7 26 10 0 - 4 0.0769 - 7 0.0769 - 13 0.0385 - 14 0.0385 - 15 0.385 - 18 0.0385 - 26 0.0385 - 41 0.154 - 45 0.115 - 47 0.0385 - - 8 530 25 0 - 0 0.00189 - 2 0.0226 - 3 0.0245 - 4 0.219 - 7 0.117 - 8 0.0528 - 9 0.00377 - 10 0.00377 - 13 0.017 - 15 0.408 - 18 0.00566 - 20 0.0151 - 26 0.00189 - 28 0.00377 - 29 0.00755 - 30 0.00755 - 31 0.00566 - 32 0.00189 - 33 0.00566 - 34 0.00189 - 37 0.00189 - 41 0.0283 - 44 0.00189 - 45 0.00189 - 47 0.0396 - - 13 5143 34 0 - 0 0.00136 - 2 0.0212 - 3 0.0148 - 4 0.396 - 6 0.000194 - 7 0.0609 - 8 0.0791 - 9 0.00331 - 10 0.000972 - 13 0.00719 - 14 0.000778 - 15 0.278 - 16 0.00486 - 18 0.0282 - 19 0.000583 - 20 0.0249 - 21 0.00156 - 24 0.000583 - 26 0.0035 - 28 0.00681 - 29 0.00506 - 30 0.00817 - 31 0.00564 - 32 0.00156 - 33 0.00506 - 37 0.00117 - 40 0.000583 - 41 0.0124 - 42 0.00117 - 43 0.000194 - 44 0.00117 - 45 0.00136 - 46 0.000194 - 47 0.021 - - 14 2150 33 0 - 0 0.00465 - 2 0.0488 - 3 0.0512 - 4 0.107 - 7 0.158 - 8 0.0963 - 9 0.00884 - 10 0.00279 - 13 0.00186 - 14 0.00093 - 15 0.25 - 16 0.00186 - 18 0.00837 - 20 0.0163 - 21 0.00279 - 24 0.00186 - 26 0.0223 - 28 0.0219 - 29 0.0107 - 30 0.0163 - 31 0.00744 - 32 0.00279 - 33 0.00651 - 34 0.00093 - 36 0.000465 - 37 0.0014 - 41 0.047 - 42 0.00279 - 43 0.00093 - 44 0.0014 - 45 0.00233 - 46 0.00093 - 47 0.093 - - 15 33917 38 0 - 0 0.00433 - 1 2.95e-05 - 2 0.0472 - 3 0.00448 - 4 0.102 - 6 0.000383 - 7 0.168 - 8 0.0195 - 9 0.000206 - 10 0.000236 - 12 5.9e-05 - 13 0.0196 - 14 0.00162 - 15 0.265 - 16 0.00363 - 18 0.0144 - 19 0.000147 - 20 0.00419 - 21 0.00242 - 24 0.000885 - 26 0.0134 - 28 0.00867 - 29 0.0286 - 30 0.00678 - 31 0.00436 - 32 0.00236 - 33 0.0287 - 34 0.00115 - 35 0.000649 - 37 0.00327 - 40 0.000472 - 41 0.0754 - 42 0.00669 - 43 0.000118 - 44 0.00313 - 45 0.00566 - 46 0.0108 - 47 0.142 - - 16 1508 30 0 - 0 0.00265 - 2 0.059 - 3 0.0106 - 4 0.115 - 7 0.208 - 8 0.0232 - 13 0.00464 - 14 0.00133 - 15 0.273 - 16 0.00133 - 18 0.0199 - 20 0.00862 - 21 0.000663 - 24 0.00133 - 25 0.000663 - 26 0.00995 - 28 0.00597 - 29 0.00995 - 30 0.00862 - 31 0.00464 - 33 0.00597 - 34 0.000663 - 35 0.000663 - 37 0.00133 - 41 0.0603 - 42 0.0179 - 43 0.000663 - 44 0.000663 - 45 0.00663 - 47 0.137 - - 18 5065 34 0 - 0 0.0101 - 2 0.0369 - 3 0.00118 - 4 0.0539 - 7 0.243 - 8 0.00967 - 9 0.000197 - 13 0.00296 - 14 0.00079 - 15 0.351 - 16 0.00415 - 18 0.00079 - 19 0.000197 - 20 0.000592 - 21 0.00494 - 24 0.00257 - 26 0.017 - 28 0.0265 - 29 0.0186 - 30 0.0128 - 31 0.00731 - 32 0.00592 - 33 0.0113 - 34 0.000592 - 35 0.000395 - 36 0.000197 - 37 0.00138 - 41 0.0661 - 42 0.00415 - 43 0.000197 - 44 0.00118 - 45 0.00395 - 46 0.00237 - 47 0.0971 - - 19 6 3 0 - 7 0.333 - 15 0.5 - 45 0.167 - - 21 4 1 0 - 47 1 - - 29 4 3 0 - 4 0.5 - 15 0.25 - 20 0.25 - - 30 22 6 0 - 2 0.0455 - 4 0.273 - 8 0.0909 - 15 0.5 - 18 0.0455 - 29 0.0455 - - 40 80 12 0 - 2 0.0625 - 4 0.0625 - 7 0.15 - 13 0.0125 - 15 0.463 - 16 0.0375 - 18 0.0125 - 31 0.0125 - 41 0.075 - 44 0.05 - 45 0.0125 - 47 0.05 - - 41 441 25 0 - 0 0.00454 - 2 0.0635 - 3 0.00227 - 4 0.0385 - 7 0.413 - 8 0.00907 - 13 0.0204 - 14 0.00454 - 15 0.0794 - 16 0.00454 - 18 0.00907 - 20 0.00454 - 21 0.00454 - 26 0.0181 - 28 0.00907 - 29 0.00454 - 30 0.00907 - 31 0.00454 - 37 0.00227 - 40 0.00227 - 41 0.204 - 42 0.0136 - 44 0.00227 - 45 0.0068 - 47 0.0658 - - 43 18 4 0 - 4 0.0556 - 13 0.0556 - 15 0.5 - 44 0.389 - - 44 6 5 0 - 2 0.167 - 4 0.167 - 15 0.333 - 26 0.167 - 32 0.167 - - 45 26 8 0 - 3 0.0385 - 4 0.192 - 7 0.154 - 8 0.0385 - 15 0.423 - 33 0.0385 - 41 0.0769 - 45 0.0385 - - 46 51 8 0 - 4 0.0196 - 7 0.0196 - 8 0.0196 - 15 0.333 - 18 0.0196 - 28 0.0196 - 45 0.49 - 47 0.0784 - - 47 38960 39 0 - 0 0.00108 - 1 7.7e-05 - 2 0.0398 - 3 0.00198 - 4 0.0551 - 6 0.000796 - 7 0.158 - 8 0.0203 - 9 0.000231 - 10 2.57e-05 - 12 0.000128 - 13 0.0134 - 14 0.00218 - 15 0.515 - 16 0.0138 - 18 0.0037 - 19 0.000128 - 20 0.000385 - 21 0.00223 - 24 0.000282 - 25 2.57e-05 - 26 0.00893 - 28 0.00649 - 29 0.0102 - 30 0.00454 - 31 0.00685 - 32 0.00149 - 33 0.00249 - 34 0.00113 - 35 0.000488 - 37 0.00223 - 40 0.000719 - 41 0.0599 - 42 0.00357 - 43 0.001 - 44 0.00706 - 45 0.0049 - 46 0.0011 - 47 0.0488 - - 48 41 7 0 - 4 0.146 - 7 0.0488 - 8 0.0244 - 15 0.707 - 18 0.0244 - 28 0.0244 - 47 0.0244 - - 54 5 3 0 - 4 0.6 - 7 0.2 - 47 0.2 - - 55 2 2 0 - 3 0.5 - 8 0.5 - - 58 35 7 0 - 2 0.0571 - 4 0.0857 - 7 0.0857 - 8 0.0857 - 15 0.629 - 20 0.0286 - 30 0.0286 - - 68 6 2 0 - 4 0.5 - 7 0.5 - - 16 2650 32 9 - 0 0.00189 - 2 0.0325 - 3 0.0136 - 4 0.156 - 7 0.0634 - 8 0.0408 - 9 0.000755 - 10 0.00113 - 13 0.00453 - 14 0.000755 - 15 0.57 - 16 0.0158 - 18 0.0125 - 19 0.000377 - 20 0.00189 - 21 0.0034 - 26 0.00377 - 28 0.00453 - 29 0.00113 - 30 0.00415 - 31 0.00151 - 32 0.000377 - 33 0.00226 - 34 0.000377 - 37 0.00113 - 40 0.00189 - 41 0.0208 - 42 0.00189 - 44 0.00113 - 45 0.00528 - 46 0.000377 - 47 0.0298 - - 2 111 10 0 - 3 0.00901 - 4 0.468 - 7 0.0631 - 8 0.018 - 15 0.288 - 18 0.00901 - 26 0.018 - 41 0.0541 - 45 0.018 - 47 0.0541 - - 8 8 3 0 - 3 0.125 - 15 0.75 - 45 0.125 - - 13 94 10 0 - 2 0.0426 - 3 0.0106 - 4 0.0638 - 7 0.0106 - 8 0.0426 - 13 0.0106 - 15 0.787 - 16 0.0106 - 20 0.0106 - 41 0.0106 - - 14 27 7 0 - 2 0.111 - 4 0.111 - 7 0.0741 - 15 0.593 - 16 0.037 - 28 0.037 - 47 0.037 - - 15 731 19 0 - 0 0.00137 - 2 0.0369 - 4 0.0301 - 7 0.0451 - 8 0.00274 - 13 0.0041 - 15 0.774 - 16 0.00684 - 18 0.0301 - 20 0.00274 - 21 0.00274 - 26 0.00137 - 29 0.00137 - 30 0.00137 - 33 0.00274 - 40 0.00547 - 41 0.0219 - 45 0.00137 - 47 0.0274 - - 16 42 11 0 - 3 0.143 - 4 0.119 - 7 0.119 - 8 0.119 - 15 0.167 - 26 0.0238 - 28 0.0238 - 41 0.0714 - 42 0.0238 - 45 0.0238 - 47 0.167 - - 18 66 8 0 - 2 0.0152 - 4 0.439 - 7 0.0303 - 8 0.0303 - 15 0.439 - 20 0.0152 - 26 0.0152 - 47 0.0152 - - 41 8 4 0 - 7 0.125 - 15 0.25 - 41 0.5 - 42 0.125 - - 47 1553 32 0 - 0 0.00258 - 2 0.0328 - 3 0.0174 - 4 0.191 - 7 0.0753 - 8 0.0599 - 9 0.00129 - 10 0.00193 - 13 0.00515 - 14 0.00129 - 15 0.495 - 16 0.0225 - 18 0.00644 - 19 0.000644 - 20 0.000644 - 21 0.00451 - 26 0.00322 - 28 0.00644 - 29 0.00129 - 30 0.00644 - 31 0.00258 - 32 0.000644 - 33 0.00258 - 34 0.000644 - 37 0.00193 - 40 0.000644 - 41 0.0161 - 42 0.00193 - 44 0.00193 - 45 0.0058 - 46 0.000644 - 47 0.0283 - - 17 321 24 2 - 0 0.0592 - 1 0.00312 - 2 0.0436 - 7 0.364 - 8 0.00312 - 9 0.00312 - 13 0.00623 - 14 0.00623 - 15 0.00312 - 19 0.00623 - 21 0.0343 - 24 0.00935 - 26 0.0218 - 28 0.103 - 29 0.0498 - 30 0.0498 - 31 0.0374 - 32 0.0156 - 33 0.0218 - 37 0.0125 - 41 0.0405 - 42 0.00312 - 45 0.0187 - 47 0.0841 - - 20 19 9 0 - 0 0.0526 - 7 0.316 - 26 0.0526 - 28 0.158 - 29 0.105 - 30 0.158 - 32 0.0526 - 42 0.0526 - 47 0.0526 - - 55 18 11 0 - 0 0.0556 - 2 0.0556 - 7 0.333 - 21 0.0556 - 26 0.111 - 28 0.0556 - 30 0.0556 - 31 0.0556 - 37 0.111 - 41 0.0556 - 47 0.0556 - - 18 8667 14 1 - 0 0.000115 - 3 0.00288 - 6 0.000231 - 8 0.00138 - 13 0.335 - 14 0.0631 - 15 0.587 - 16 0.00762 - 19 0.000808 - 21 0.000692 - 28 0.000577 - 30 0.000115 - 31 0.000346 - 32 0.000115 - - 13 4 4 0 - 13 0.25 - 14 0.25 - 15 0.25 - 21 0.25 - - 19 17428 40 9 - 0 0.00947 - 1 0.000115 - 2 0.0516 - 3 0.00138 - 4 0.0023 - 5 5.74e-05 - 7 0.171 - 8 0.00482 - 9 0.000402 - 10 0.000574 - 12 0.00304 - 13 0.0332 - 14 0.0155 - 15 0.00419 - 16 0.00023 - 18 5.74e-05 - 19 0.00161 - 21 0.0168 - 22 0.000402 - 23 5.74e-05 - 24 0.000115 - 26 0.00637 - 27 5.74e-05 - 28 0.0543 - 29 0.101 - 30 0.0205 - 31 0.0106 - 32 0.0237 - 33 0.0276 - 34 0.00861 - 35 0.0122 - 37 0.0274 - 40 5.74e-05 - 41 0.12 - 42 0.011 - 43 0.000516 - 44 0.00161 - 45 0.0876 - 46 0.0315 - 47 0.139 - - 2 7 5 0 - 2 0.286 - 7 0.286 - 26 0.143 - 34 0.143 - 41 0.143 - - 8 10 7 0 - 7 0.1 - 21 0.1 - 28 0.1 - 29 0.2 - 30 0.3 - 33 0.1 - 45 0.1 - - 13 15 7 0 - 2 0.0667 - 7 0.267 - 28 0.133 - 29 0.333 - 32 0.0667 - 33 0.0667 - 47 0.0667 - - 14 6 5 0 - 4 0.167 - 7 0.333 - 41 0.167 - 45 0.167 - 47 0.167 - - 15 4 4 0 - 4 0.25 - 15 0.25 - 18 0.25 - 47 0.25 - - 18 7 5 0 - 26 0.143 - 28 0.143 - 30 0.286 - 41 0.286 - 42 0.143 - - 41 1 1 0 - 15 1 - - 46 1 1 0 - 8 1 - - 48 4 3 0 - 7 0.5 - 33 0.25 - 41 0.25 - - 20 8397 36 20 - 0 0.0151 - 1 0.000357 - 2 0.0497 - 3 0.000357 - 4 0.00691 - 7 0.425 - 8 0.00214 - 9 0.000238 - 10 0.000119 - 12 0.000238 - 13 0.00429 - 14 0.00155 - 15 0.00131 - 16 0.000119 - 17 0.0031 - 18 0.000238 - 19 0.000238 - 21 0.00893 - 24 0.0168 - 26 0.0355 - 28 0.134 - 29 0.0905 - 30 0.0537 - 31 0.022 - 32 0.0139 - 33 0.0257 - 34 0.000834 - 35 0.00143 - 37 0.00631 - 41 0.025 - 42 0.00441 - 43 0.000119 - 44 0.000715 - 45 0.00965 - 46 0.00131 - 47 0.0381 - - 3 122 14 0 - 0 0.0164 - 2 0.0902 - 7 0.549 - 13 0.0082 - 15 0.0082 - 26 0.041 - 28 0.082 - 29 0.107 - 30 0.0246 - 31 0.0082 - 32 0.0082 - 33 0.0082 - 45 0.0082 - 47 0.041 - - 8 1980 30 0 - 0 0.0232 - 2 0.0399 - 3 0.000505 - 4 0.00253 - 7 0.483 - 8 0.00202 - 9 0.000505 - 13 0.00253 - 14 0.00101 - 15 0.00202 - 16 0.000505 - 17 0.00101 - 19 0.000505 - 21 0.00808 - 24 0.0121 - 26 0.0348 - 28 0.122 - 29 0.0884 - 30 0.05 - 31 0.0197 - 32 0.0136 - 33 0.0242 - 35 0.000505 - 37 0.00354 - 41 0.0217 - 42 0.00707 - 44 0.00101 - 45 0.00707 - 46 0.00101 - 47 0.0258 - - 9 23 6 0 - 2 0.0435 - 7 0.696 - 28 0.0435 - 29 0.087 - 41 0.0435 - 47 0.087 - - 10 78 15 0 - 0 0.0641 - 2 0.0256 - 7 0.449 - 8 0.0128 - 14 0.0128 - 26 0.0897 - 28 0.0256 - 29 0.0513 - 30 0.0256 - 31 0.0256 - 32 0.0128 - 37 0.0256 - 41 0.115 - 42 0.0128 - 47 0.0513 - - 13 3723 32 0 - 0 0.0142 - 2 0.047 - 4 0.00967 - 7 0.385 - 8 0.00161 - 9 0.000269 - 12 0.000537 - 13 0.00537 - 14 0.00161 - 15 0.00161 - 17 0.00322 - 18 0.000537 - 19 0.000269 - 21 0.0094 - 24 0.0172 - 26 0.033 - 28 0.132 - 29 0.107 - 30 0.0543 - 31 0.0277 - 32 0.0126 - 33 0.0312 - 34 0.00134 - 35 0.00134 - 37 0.00779 - 41 0.0263 - 42 0.00349 - 43 0.000269 - 44 0.000806 - 45 0.0145 - 46 0.00134 - 47 0.0486 - - 14 1627 27 0 - 0 0.00922 - 1 0.00184 - 2 0.0719 - 4 0.00676 - 7 0.406 - 8 0.00369 - 10 0.000615 - 13 0.00307 - 14 0.00246 - 17 0.00676 - 21 0.0117 - 24 0.0252 - 26 0.0363 - 28 0.154 - 29 0.0615 - 30 0.0639 - 31 0.0191 - 32 0.024 - 33 0.0234 - 34 0.000615 - 35 0.00307 - 37 0.00553 - 41 0.024 - 42 0.00492 - 45 0.00492 - 46 0.00123 - 47 0.0252 - - 15 368 17 0 - 0 0.00272 - 2 0.0272 - 4 0.00815 - 7 0.478 - 13 0.00272 - 24 0.0136 - 26 0.0408 - 28 0.163 - 29 0.111 - 30 0.0489 - 31 0.00815 - 33 0.0163 - 35 0.00272 - 37 0.0109 - 41 0.0109 - 45 0.00272 - 47 0.0516 - - 21 5 4 0 - 0 0.4 - 7 0.2 - 30 0.2 - 41 0.2 - - 29 1 1 0 - 42 1 - - 30 55 11 0 - 2 0.0727 - 7 0.436 - 8 0.0182 - 21 0.0182 - 24 0.0727 - 26 0.0364 - 28 0.218 - 29 0.0182 - 30 0.0545 - 33 0.0182 - 41 0.0364 - - 31 52 13 0 - 0 0.0192 - 2 0.0385 - 7 0.442 - 24 0.0192 - 26 0.0577 - 28 0.173 - 29 0.0962 - 30 0.0385 - 31 0.0192 - 37 0.0192 - 41 0.0192 - 46 0.0192 - 47 0.0385 - - 43 1 1 0 - 44 1 - - 44 5 3 0 - 7 0.6 - 32 0.2 - 45 0.2 - - 45 40 10 0 - 2 0.05 - 7 0.4 - 26 0.1 - 28 0.1 - 29 0.075 - 30 0.125 - 31 0.025 - 33 0.05 - 41 0.025 - 47 0.05 - - 47 34 12 0 - 0 0.0294 - 2 0.0588 - 3 0.0588 - 7 0.5 - 26 0.0294 - 28 0.0294 - 29 0.0294 - 30 0.0588 - 31 0.0294 - 33 0.0294 - 41 0.0294 - 47 0.118 - - 48 185 19 0 - 0 0.00541 - 2 0.027 - 4 0.00541 - 7 0.465 - 13 0.0162 - 17 0.00541 - 21 0.0216 - 24 0.0108 - 26 0.0216 - 28 0.195 - 29 0.0811 - 30 0.0486 - 31 0.0108 - 32 0.00541 - 33 0.0108 - 41 0.0378 - 45 0.00541 - 46 0.00541 - 47 0.0216 - - 54 23 6 0 - 2 0.13 - 7 0.522 - 13 0.0435 - 26 0.087 - 28 0.087 - 47 0.13 - - 56 36 12 0 - 2 0.0278 - 4 0.0278 - 7 0.5 - 26 0.0556 - 28 0.167 - 29 0.0278 - 31 0.0278 - 33 0.0278 - 34 0.0278 - 37 0.0278 - 41 0.0278 - 47 0.0556 - - 60 7 4 0 - 2 0.143 - 7 0.571 - 26 0.143 - 30 0.143 - - 68 4 3 0 - 4 0.25 - 7 0.5 - 28 0.25 - - 21 1703 33 27 - 0 0.102 - 1 0.00176 - 2 0.0552 - 3 0.0182 - 4 0.0804 - 7 0.203 - 8 0.00411 - 10 0.00117 - 12 0.000587 - 13 0.0393 - 14 0.0252 - 15 0.0153 - 18 0.00117 - 19 0.00294 - 20 0.00294 - 21 0.0687 - 23 0.000587 - 24 0.00646 - 26 0.00763 - 28 0.0399 - 29 0.0341 - 30 0.0164 - 31 0.0188 - 32 0.00881 - 33 0.0241 - 34 0.00411 - 37 0.00528 - 41 0.0781 - 42 0.017 - 44 0.00294 - 45 0.0153 - 46 0.00117 - 47 0.0981 - - 2 4 2 0 - 0 0.25 - 7 0.75 - - 3 108 17 0 - 0 0.13 - 1 0.00926 - 2 0.0648 - 7 0.296 - 13 0.0185 - 15 0.037 - 21 0.0463 - 24 0.00926 - 26 0.00926 - 28 0.0463 - 29 0.13 - 32 0.00926 - 33 0.0278 - 37 0.00926 - 41 0.0648 - 44 0.00926 - 47 0.0833 - - 4 458 23 0 - 0 0.138 - 1 0.00437 - 2 0.0852 - 3 0.00437 - 7 0.17 - 13 0.0524 - 14 0.0306 - 15 0.0131 - 21 0.048 - 24 0.00873 - 28 0.0218 - 29 0.0349 - 30 0.024 - 31 0.0284 - 32 0.00873 - 33 0.0328 - 34 0.00437 - 37 0.00218 - 41 0.105 - 42 0.024 - 45 0.0197 - 46 0.00218 - 47 0.138 - - 7 11 7 0 - 0 0.0909 - 7 0.182 - 14 0.364 - 21 0.0909 - 24 0.0909 - 30 0.0909 - 42 0.0909 - - 8 298 28 0 - 0 0.094 - 2 0.0235 - 3 0.0101 - 4 0.225 - 7 0.124 - 8 0.00671 - 10 0.00336 - 13 0.0268 - 14 0.0168 - 15 0.0134 - 18 0.00671 - 19 0.00336 - 20 0.0168 - 21 0.057 - 24 0.0101 - 26 0.0168 - 28 0.057 - 29 0.0436 - 30 0.0268 - 31 0.0101 - 32 0.0201 - 33 0.0302 - 37 0.0101 - 41 0.047 - 42 0.0101 - 45 0.0268 - 46 0.00336 - 47 0.0604 - - 9 27 12 0 - 0 0.148 - 4 0.0741 - 7 0.259 - 8 0.037 - 15 0.037 - 21 0.037 - 26 0.0741 - 28 0.0741 - 29 0.037 - 30 0.0741 - 33 0.037 - 41 0.111 - - 10 5 1 0 - 4 1 - - 13 130 21 0 - 0 0.115 - 2 0.0231 - 3 0.0231 - 4 0.0615 - 7 0.192 - 8 0.00769 - 13 0.0308 - 14 0.0154 - 15 0.0231 - 21 0.0538 - 26 0.00769 - 28 0.0231 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.0154 - 37 0.0154 - 41 0.154 - 42 0.0231 - 44 0.00769 - 47 0.162 - - 14 42 13 0 - 0 0.0714 - 2 0.119 - 7 0.0952 - 13 0.0238 - 15 0.0476 - 19 0.0238 - 21 0.0476 - 33 0.0238 - 34 0.0238 - 41 0.262 - 42 0.0238 - 45 0.0476 - 47 0.19 - - 15 57 11 0 - 2 0.0351 - 3 0.263 - 7 0.0526 - 13 0.105 - 14 0.0702 - 28 0.0175 - 31 0.0175 - 32 0.0351 - 41 0.193 - 42 0.0175 - 47 0.193 - - 16 5 3 0 - 2 0.4 - 15 0.4 - 21 0.2 - - 17 8 5 0 - 7 0.25 - 21 0.125 - 29 0.125 - 33 0.125 - 47 0.375 - - 18 4 1 0 - 13 1 - - 19 3 3 0 - 7 0.333 - 41 0.333 - 45 0.333 - - 20 17 8 0 - 0 0.0588 - 2 0.118 - 7 0.235 - 21 0.118 - 28 0.176 - 41 0.118 - 44 0.0588 - 47 0.118 - - 21 57 20 0 - 0 0.0702 - 2 0.0877 - 4 0.0175 - 7 0.123 - 8 0.0175 - 13 0.0175 - 14 0.0526 - 15 0.0351 - 21 0.0351 - 28 0.158 - 29 0.0351 - 30 0.0175 - 31 0.0702 - 32 0.0351 - 33 0.0351 - 34 0.0175 - 41 0.0175 - 42 0.0351 - 44 0.0175 - 47 0.105 - - 22 8 6 0 - 0 0.25 - 4 0.125 - 7 0.125 - 19 0.25 - 41 0.125 - 47 0.125 - - 28 3 3 0 - 0 0.333 - 45 0.333 - 47 0.333 - - 30 5 4 0 - 0 0.2 - 2 0.4 - 4 0.2 - 28 0.2 - - 31 26 9 0 - 0 0.115 - 3 0.0385 - 4 0.423 - 7 0.192 - 8 0.0385 - 30 0.0385 - 37 0.0385 - 41 0.0385 - 47 0.0769 - - 39 2 2 0 - 2 0.5 - 28 0.5 - - 40 2 1 0 - 3 1 - - 47 369 26 0 - 0 0.0623 - 2 0.0379 - 3 0.0108 - 4 0.106 - 7 0.347 - 8 0.00271 - 10 0.00271 - 12 0.00271 - 13 0.0461 - 14 0.0244 - 15 0.00542 - 19 0.00271 - 21 0.144 - 23 0.00271 - 24 0.00542 - 26 0.0108 - 28 0.0379 - 29 0.0244 - 30 0.00542 - 31 0.0217 - 33 0.0108 - 34 0.00542 - 37 0.00271 - 41 0.019 - 45 0.00813 - 47 0.0515 - - 48 7 5 0 - 0 0.286 - 4 0.143 - 41 0.143 - 42 0.143 - 45 0.286 - - 49 2 2 0 - 33 0.5 - 42 0.5 - - 55 30 12 0 - 0 0.167 - 2 0.0667 - 7 0.1 - 14 0.0333 - 21 0.1 - 28 0.0333 - 30 0.0333 - 33 0.0333 - 41 0.133 - 42 0.167 - 44 0.0333 - 47 0.1 - - 56 3 3 0 - 0 0.333 - 4 0.333 - 34 0.333 - - 22 205 23 5 - 0 0.039 - 2 0.0195 - 3 0.00488 - 4 0.0634 - 7 0.0585 - 8 0.0146 - 13 0.146 - 14 0.0585 - 15 0.0634 - 16 0.00488 - 19 0.00488 - 21 0.0683 - 24 0.0146 - 26 0.00488 - 28 0.0293 - 29 0.0634 - 30 0.0293 - 31 0.0634 - 32 0.00976 - 33 0.0244 - 41 0.0195 - 45 0.0146 - 47 0.18 - - 4 128 16 0 - 0 0.00781 - 2 0.0156 - 3 0.00781 - 7 0.0156 - 8 0.0234 - 13 0.234 - 14 0.0859 - 15 0.102 - 16 0.00781 - 19 0.00781 - 21 0.0391 - 24 0.00781 - 29 0.0859 - 31 0.0781 - 41 0.0156 - 47 0.266 - - 8 34 14 0 - 0 0.0588 - 2 0.0588 - 4 0.265 - 7 0.147 - 14 0.0294 - 21 0.0294 - 24 0.0294 - 28 0.0294 - 30 0.118 - 31 0.0294 - 33 0.0294 - 41 0.0588 - 45 0.0588 - 47 0.0588 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 26 0.25 - 47 0.25 - - 47 34 12 0 - 0 0.118 - 4 0.0588 - 7 0.118 - 21 0.235 - 24 0.0294 - 28 0.0882 - 29 0.0588 - 30 0.0294 - 31 0.0588 - 32 0.0588 - 33 0.118 - 45 0.0294 - - 48 3 3 0 - 4 0.333 - 7 0.333 - 28 0.333 - - 23 73 13 2 - 0 0.0411 - 2 0.0685 - 4 0.466 - 7 0.151 - 8 0.0137 - 13 0.0274 - 18 0.0137 - 20 0.0137 - 29 0.0137 - 32 0.0137 - 33 0.0137 - 41 0.0548 - 47 0.11 - - 8 50 11 0 - 0 0.06 - 2 0.04 - 4 0.6 - 7 0.1 - 8 0.02 - 13 0.02 - 18 0.02 - 20 0.02 - 32 0.02 - 41 0.02 - 47 0.08 - - 47 19 8 0 - 2 0.105 - 4 0.211 - 7 0.263 - 13 0.0526 - 29 0.0526 - 33 0.0526 - 41 0.105 - 47 0.158 - - 24 4 3 0 - 22 0.25 - 24 0.25 - 30 0.5 - - 25 14 3 0 - 15 0.0714 - 42 0.0714 - 47 0.857 - - 26 6 4 0 - 3 0.333 - 13 0.333 - 21 0.167 - 47 0.167 - - 27 8 5 0 - 0 0.125 - 4 0.125 - 26 0.125 - 30 0.125 - 45 0.5 - - 28 126 20 5 - 0 0.0317 - 2 0.0952 - 4 0.0159 - 7 0.0159 - 12 0.00794 - 13 0.00794 - 14 0.00794 - 19 0.00794 - 21 0.0317 - 26 0.46 - 28 0.0952 - 30 0.0238 - 32 0.00794 - 34 0.00794 - 35 0.00794 - 41 0.00794 - 42 0.0238 - 44 0.0238 - 45 0.0556 - 47 0.0635 - - 2 4 3 0 - 26 0.25 - 28 0.25 - 44 0.5 - - 3 4 3 0 - 2 0.25 - 14 0.25 - 26 0.5 - - 13 10 6 0 - 0 0.1 - 2 0.2 - 26 0.2 - 41 0.1 - 42 0.1 - 47 0.3 - - 14 16 7 0 - 2 0.312 - 4 0.0625 - 12 0.0625 - 13 0.0625 - 26 0.312 - 35 0.0625 - 42 0.125 - - 47 80 13 0 - 0 0.0375 - 2 0.0375 - 4 0.0125 - 7 0.025 - 19 0.0125 - 21 0.05 - 26 0.538 - 28 0.125 - 30 0.025 - 32 0.0125 - 34 0.0125 - 45 0.0625 - 47 0.05 - - 29 40 11 2 - 2 0.125 - 4 0.025 - 7 0.025 - 13 0.325 - 14 0.025 - 15 0.15 - 20 0.025 - 21 0.025 - 31 0.025 - 41 0.2 - 42 0.05 - - 8 11 3 0 - 13 0.545 - 31 0.0909 - 41 0.364 - - 14 10 5 0 - 7 0.1 - 13 0.4 - 14 0.1 - 15 0.2 - 42 0.2 - - 30 1783 33 10 - 0 0.00673 - 2 0.0432 - 3 0.0107 - 4 0.337 - 7 0.204 - 8 0.0707 - 9 0.00112 - 10 0.00112 - 13 0.06 - 14 0.00393 - 15 0.0123 - 16 0.00112 - 18 0.0488 - 19 0.000561 - 20 0.0308 - 21 0.00393 - 22 0.000561 - 24 0.00393 - 26 0.0123 - 28 0.0275 - 29 0.0123 - 30 0.0157 - 31 0.00617 - 32 0.00449 - 33 0.00897 - 36 0.000561 - 37 0.0028 - 41 0.0314 - 42 0.0028 - 43 0.000561 - 45 0.00505 - 46 0.000561 - 47 0.0286 - - 2 15 6 0 - 4 0.2 - 7 0.467 - 22 0.0667 - 28 0.0667 - 41 0.133 - 47 0.0667 - - 3 8 1 0 - 4 1 - - 8 96 15 0 - 0 0.0104 - 2 0.0312 - 3 0.0104 - 4 0.417 - 7 0.25 - 8 0.0104 - 13 0.0104 - 15 0.0104 - 18 0.0938 - 20 0.0312 - 26 0.0104 - 28 0.0312 - 29 0.0312 - 30 0.0208 - 47 0.0312 - - 13 884 28 0 - 0 0.00226 - 2 0.0351 - 3 0.00792 - 4 0.436 - 7 0.0995 - 8 0.0735 - 13 0.106 - 14 0.00339 - 15 0.0181 - 16 0.00226 - 18 0.0622 - 20 0.0328 - 21 0.00226 - 24 0.00452 - 26 0.00452 - 28 0.0158 - 29 0.0102 - 30 0.00905 - 31 0.00566 - 32 0.00113 - 33 0.00679 - 36 0.00113 - 37 0.00113 - 41 0.0317 - 42 0.00113 - 43 0.00113 - 45 0.00566 - 47 0.0192 - - 14 489 28 0 - 0 0.0123 - 2 0.0654 - 3 0.0204 - 4 0.131 - 7 0.299 - 8 0.115 - 9 0.00409 - 10 0.00409 - 13 0.0245 - 14 0.00613 - 15 0.0102 - 18 0.0389 - 19 0.00204 - 20 0.0389 - 21 0.00204 - 24 0.00409 - 26 0.0204 - 28 0.0389 - 29 0.00818 - 30 0.0307 - 31 0.00409 - 32 0.0143 - 33 0.0102 - 37 0.00613 - 41 0.0327 - 42 0.00613 - 46 0.00204 - 47 0.0491 - - 15 59 12 0 - 2 0.0339 - 3 0.0169 - 4 0.593 - 7 0.136 - 8 0.0169 - 18 0.0508 - 20 0.0339 - 26 0.0339 - 31 0.0169 - 33 0.0169 - 41 0.0339 - 47 0.0169 - - 30 4 4 0 - 4 0.25 - 7 0.25 - 29 0.25 - 41 0.25 - - 46 3 1 0 - 45 1 - - 47 198 20 0 - 0 0.0152 - 2 0.0455 - 4 0.237 - 7 0.439 - 8 0.00505 - 14 0.00505 - 20 0.00505 - 21 0.0202 - 24 0.00505 - 26 0.0202 - 28 0.0606 - 29 0.0253 - 30 0.0101 - 31 0.0152 - 33 0.0202 - 37 0.00505 - 41 0.0354 - 42 0.00505 - 45 0.00505 - 47 0.0202 - - 48 8 5 0 - 4 0.5 - 8 0.125 - 18 0.125 - 20 0.125 - 26 0.125 - - 31 1447 30 13 - 0 0.0104 - 2 0.0297 - 3 0.02 - 4 0.411 - 7 0.157 - 8 0.0643 - 9 0.00138 - 10 0.00207 - 13 0.0145 - 14 0.00138 - 15 0.00484 - 16 0.000691 - 18 0.0408 - 19 0.000691 - 20 0.0359 - 21 0.0221 - 24 0.00415 - 26 0.0194 - 28 0.0235 - 29 0.0111 - 30 0.027 - 31 0.00484 - 32 0.00346 - 33 0.00898 - 37 0.000691 - 41 0.0235 - 42 0.0152 - 43 0.00138 - 45 0.00829 - 47 0.0318 - - 2 4 2 0 - 4 0.5 - 47 0.5 - - 3 16 4 0 - 4 0.75 - 7 0.125 - 13 0.0625 - 14 0.0625 - - 8 111 18 0 - 0 0.00901 - 2 0.045 - 4 0.342 - 7 0.252 - 8 0.0811 - 9 0.00901 - 18 0.018 - 20 0.027 - 21 0.018 - 26 0.027 - 28 0.027 - 29 0.00901 - 30 0.00901 - 31 0.00901 - 33 0.00901 - 41 0.027 - 45 0.00901 - 47 0.0721 - - 13 747 27 0 - 0 0.00803 - 2 0.0241 - 3 0.0161 - 4 0.483 - 7 0.123 - 8 0.0589 - 9 0.00134 - 10 0.00268 - 13 0.00803 - 14 0.00134 - 15 0.00535 - 18 0.0589 - 19 0.00134 - 20 0.0455 - 21 0.0201 - 24 0.00402 - 26 0.012 - 28 0.0187 - 29 0.012 - 30 0.0228 - 31 0.00268 - 32 0.00402 - 33 0.00669 - 41 0.0214 - 42 0.00669 - 45 0.00669 - 47 0.0241 - - 14 423 27 0 - 0 0.0165 - 2 0.0473 - 3 0.0402 - 4 0.199 - 7 0.215 - 8 0.0922 - 10 0.00236 - 13 0.0331 - 15 0.00709 - 16 0.00236 - 18 0.0284 - 20 0.0213 - 21 0.026 - 24 0.00709 - 26 0.0355 - 28 0.0402 - 29 0.0142 - 30 0.0473 - 31 0.00946 - 32 0.00473 - 33 0.0165 - 37 0.00236 - 41 0.0165 - 42 0.0355 - 43 0.00473 - 45 0.00709 - 47 0.0284 - - 15 45 6 0 - 4 0.711 - 7 0.178 - 20 0.0222 - 21 0.0444 - 30 0.0222 - 41 0.0222 - - 18 3 2 0 - 4 0.333 - 41 0.667 - - 30 4 3 0 - 0 0.25 - 7 0.25 - 41 0.5 - - 41 7 2 0 - 4 0.714 - 41 0.286 - - 46 3 1 0 - 45 1 - - 47 45 6 0 - 4 0.733 - 7 0.0222 - 20 0.0444 - 21 0.0444 - 42 0.0444 - 47 0.111 - - 48 19 4 0 - 4 0.737 - 18 0.0526 - 20 0.158 - 26 0.0526 - - 60 8 1 0 - 4 1 - - 32 7 4 0 - 7 0.571 - 15 0.143 - 16 0.143 - 41 0.143 - - 33 22 11 0 - 0 0.136 - 2 0.227 - 4 0.0909 - 7 0.0909 - 13 0.0455 - 19 0.0909 - 21 0.0909 - 32 0.0455 - 41 0.0909 - 42 0.0455 - 44 0.0455 - - 34 68 18 2 - 2 0.0441 - 7 0.103 - 8 0.0294 - 13 0.0147 - 14 0.0294 - 15 0.0147 - 21 0.0147 - 28 0.0147 - 30 0.0147 - 32 0.0147 - 33 0.0147 - 35 0.0147 - 37 0.0147 - 41 0.397 - 42 0.0441 - 45 0.0147 - 46 0.0147 - 47 0.191 - - 13 4 3 0 - 7 0.5 - 8 0.25 - 28 0.25 - - 14 3 2 0 - 30 0.333 - 47 0.667 - - 35 8 6 0 - 0 0.125 - 2 0.125 - 26 0.125 - 28 0.125 - 33 0.125 - 47 0.375 - - 36 7 3 0 - 13 0.143 - 14 0.143 - 41 0.714 - - 37 5 4 0 - 7 0.2 - 21 0.2 - 28 0.4 - 33 0.2 - - 38 13 6 0 - 7 0.308 - 24 0.0769 - 26 0.385 - 28 0.0769 - 29 0.0769 - 33 0.0769 - - 39 1798 26 1 - 0 0.0289 - 2 0.191 - 4 0.015 - 6 0.00111 - 7 0.391 - 8 0.0106 - 13 0.00334 - 14 0.00167 - 15 0.00278 - 18 0.00222 - 19 0.00167 - 20 0.00222 - 21 0.0384 - 24 0.00222 - 26 0.12 - 28 0.0211 - 29 0.0651 - 30 0.0117 - 31 0.0117 - 32 0.00222 - 33 0.00612 - 41 0.0184 - 42 0.0139 - 43 0.000556 - 44 0.035 - 47 0.00222 - - 3 8 5 0 - 2 0.25 - 4 0.25 - 20 0.25 - 33 0.125 - 41 0.125 - - 40 83 3 0 - 15 0.964 - 16 0.012 - 21 0.0241 - - 41 1289 21 18 - 0 0.000776 - 2 0.000776 - 3 0.0279 - 7 0.00155 - 8 0.26 - 9 0.014 - 10 0.00388 - 11 0.00155 - 13 0.206 - 14 0.102 - 15 0.353 - 16 0.00698 - 19 0.00233 - 21 0.00233 - 22 0.000776 - 24 0.000776 - 29 0.000776 - 30 0.00465 - 31 0.00853 - 33 0.000776 - 43 0.000776 - - 2 27 6 0 - 3 0.0741 - 8 0.037 - 13 0.481 - 14 0.111 - 15 0.259 - 33 0.037 - - 3 25 1 0 - 3 1 - - 8 318 11 0 - 0 0.00314 - 3 0.0252 - 8 0.836 - 9 0.0252 - 13 0.0597 - 14 0.00314 - 15 0.00629 - 16 0.00314 - 24 0.00314 - 30 0.0126 - 31 0.022 - - 9 9 3 0 - 8 0.556 - 9 0.333 - 13 0.111 - - 10 1 1 0 - 10 1 - - 13 240 5 0 - 8 0.05 - 13 0.729 - 14 0.162 - 15 0.0542 - 31 0.00417 - - 14 117 4 0 - 8 0.0256 - 13 0.248 - 14 0.718 - 21 0.00855 - - 15 430 6 0 - 8 0.00233 - 9 0.00233 - 13 0.0093 - 15 0.981 - 19 0.00233 - 43 0.00233 - - 16 9 2 0 - 15 0.222 - 16 0.778 - - 21 9 4 0 - 2 0.111 - 8 0.444 - 13 0.222 - 15 0.222 - - 31 4 3 0 - 8 0.5 - 13 0.25 - 31 0.25 - - 46 11 2 0 - 13 0.727 - 15 0.273 - - 48 53 7 0 - 8 0.698 - 9 0.0943 - 10 0.0755 - 13 0.0566 - 14 0.0189 - 30 0.0189 - 31 0.0377 - - 49 1 1 0 - 21 1 - - 50 1 1 0 - 22 1 - - 55 16 8 0 - 3 0.0625 - 11 0.0625 - 13 0.25 - 14 0.188 - 15 0.188 - 19 0.125 - 29 0.0625 - 30 0.0625 - - 61 1 1 0 - 16 1 - - 64 6 5 0 - 7 0.333 - 11 0.167 - 13 0.167 - 14 0.167 - 21 0.167 - - 42 86 19 4 - 0 0.0116 - 4 0.0233 - 7 0.0233 - 8 0.0581 - 11 0.0233 - 13 0.0698 - 14 0.0233 - 15 0.0116 - 19 0.0116 - 21 0.0116 - 25 0.0116 - 27 0.0233 - 28 0.0116 - 29 0.0116 - 30 0.0116 - 40 0.0116 - 42 0.0116 - 46 0.0116 - 47 0.628 - - 2 6 3 0 - 8 0.333 - 13 0.333 - 27 0.333 - - 15 31 2 0 - 15 0.0323 - 47 0.968 - - 55 24 14 0 - 7 0.0833 - 8 0.0417 - 11 0.0833 - 13 0.0833 - 14 0.0833 - 21 0.0417 - 25 0.0417 - 28 0.0417 - 29 0.0417 - 30 0.0417 - 40 0.0417 - 42 0.0417 - 46 0.0417 - 47 0.292 - - 62 2 2 0 - 0 0.5 - 19 0.5 - - 43 48 9 1 - 3 0.0208 - 4 0.0208 - 8 0.0625 - 13 0.312 - 15 0.396 - 18 0.0625 - 20 0.0208 - 28 0.0208 - 40 0.0833 - - 15 13 4 0 - 4 0.0769 - 13 0.0769 - 15 0.769 - 40 0.0769 - - 44 91 19 7 - 0 0.011 - 2 0.033 - 3 0.011 - 4 0.319 - 7 0.121 - 8 0.0769 - 13 0.033 - 14 0.022 - 15 0.0879 - 20 0.0549 - 23 0.011 - 26 0.033 - 28 0.044 - 30 0.011 - 34 0.011 - 40 0.044 - 41 0.011 - 42 0.011 - 47 0.0549 - - 4 2 2 0 - 0 0.5 - 26 0.5 - - 8 10 5 0 - 4 0.4 - 7 0.2 - 8 0.2 - 26 0.1 - 40 0.1 - - 13 25 9 0 - 3 0.04 - 4 0.44 - 7 0.08 - 8 0.12 - 13 0.04 - 15 0.08 - 20 0.12 - 23 0.04 - 28 0.04 - - 15 33 12 0 - 2 0.0606 - 4 0.303 - 7 0.152 - 8 0.0303 - 13 0.0303 - 15 0.182 - 20 0.0303 - 28 0.0303 - 30 0.0303 - 34 0.0303 - 40 0.0909 - 41 0.0303 - - 19 2 2 0 - 2 0.5 - 13 0.5 - - 55 10 5 0 - 4 0.1 - 7 0.2 - 28 0.1 - 42 0.1 - 47 0.5 - - 60 2 1 0 - 14 1 - - 45 1242 32 20 - 0 0.0266 - 1 0.000805 - 2 0.0282 - 3 0.0121 - 4 0.357 - 7 0.153 - 8 0.0837 - 9 0.00242 - 10 0.00161 - 13 0.0346 - 14 0.00322 - 15 0.0225 - 18 0.0548 - 19 0.00161 - 20 0.0322 - 21 0.00483 - 22 0.000805 - 24 0.00322 - 26 0.00886 - 28 0.0242 - 29 0.0169 - 30 0.0298 - 31 0.0185 - 32 0.00242 - 33 0.0137 - 40 0.000805 - 41 0.0145 - 42 0.00805 - 44 0.00564 - 45 0.000805 - 46 0.00242 - 47 0.0298 - - 3 11 6 0 - 0 0.0909 - 2 0.0909 - 4 0.545 - 7 0.0909 - 8 0.0909 - 33 0.0909 - - 4 35 13 0 - 0 0.143 - 2 0.0286 - 4 0.0286 - 7 0.229 - 13 0.0571 - 21 0.0571 - 28 0.0857 - 29 0.0286 - 30 0.0286 - 33 0.0571 - 41 0.0857 - 42 0.0571 - 47 0.114 - - 6 4 3 0 - 2 0.25 - 4 0.5 - 42 0.25 - - 8 363 25 0 - 0 0.00826 - 2 0.00551 - 3 0.0165 - 4 0.551 - 7 0.107 - 8 0.0606 - 9 0.00275 - 10 0.00275 - 13 0.00826 - 15 0.00275 - 18 0.0468 - 19 0.00275 - 20 0.0358 - 21 0.00551 - 22 0.00275 - 24 0.00551 - 26 0.00826 - 28 0.0275 - 29 0.0193 - 30 0.0303 - 31 0.0193 - 33 0.00551 - 41 0.0138 - 42 0.00275 - 47 0.00826 - - 10 6 2 0 - 4 0.833 - 20 0.167 - - 13 292 19 0 - 2 0.0445 - 3 0.00685 - 4 0.5 - 7 0.0616 - 8 0.12 - 9 0.00342 - 13 0.0753 - 14 0.00685 - 15 0.0103 - 18 0.0651 - 20 0.0342 - 26 0.00685 - 28 0.00685 - 29 0.00342 - 30 0.0103 - 31 0.0205 - 41 0.00342 - 46 0.0103 - 47 0.0103 - - 14 68 17 0 - 0 0.0147 - 2 0.0294 - 3 0.0147 - 4 0.103 - 7 0.0588 - 8 0.338 - 9 0.0147 - 10 0.0147 - 13 0.162 - 15 0.0147 - 18 0.118 - 19 0.0147 - 20 0.0294 - 28 0.0294 - 30 0.0147 - 31 0.0147 - 33 0.0147 - - 15 97 14 0 - 2 0.0103 - 3 0.0103 - 4 0.34 - 7 0.0412 - 8 0.0928 - 13 0.0309 - 15 0.196 - 18 0.134 - 20 0.0412 - 31 0.0103 - 33 0.0103 - 40 0.0103 - 44 0.0103 - 47 0.0619 - - 16 3 3 0 - 8 0.333 - 20 0.333 - 29 0.333 - - 20 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 18 0.167 - 33 0.167 - - 21 5 5 0 - 4 0.2 - 7 0.2 - 24 0.2 - 29 0.2 - 33 0.2 - - 22 2 2 0 - 20 0.5 - 26 0.5 - - 27 4 3 0 - 2 0.5 - 30 0.25 - 32 0.25 - - 30 6 3 0 - 4 0.667 - 7 0.167 - 31 0.167 - - 31 8 6 0 - 0 0.125 - 8 0.25 - 18 0.25 - 20 0.125 - 29 0.125 - 31 0.125 - - 48 28 9 0 - 0 0.0714 - 4 0.5 - 7 0.179 - 8 0.0357 - 13 0.0357 - 18 0.0357 - 29 0.0357 - 30 0.0714 - 31 0.0357 - - 54 10 7 0 - 0 0.1 - 2 0.1 - 3 0.1 - 4 0.2 - 15 0.2 - 18 0.2 - 20 0.1 - - 55 237 25 0 - 0 0.0717 - 1 0.00422 - 2 0.0422 - 3 0.00844 - 4 0.00844 - 7 0.409 - 8 0.00422 - 13 0.00422 - 14 0.00422 - 15 0.00844 - 18 0.00422 - 21 0.00422 - 24 0.00422 - 26 0.0211 - 28 0.0549 - 29 0.0338 - 30 0.0759 - 31 0.0211 - 32 0.00844 - 33 0.0338 - 41 0.038 - 42 0.0211 - 44 0.0211 - 45 0.00422 - 47 0.0886 - - 56 22 6 0 - 3 0.0455 - 4 0.364 - 8 0.318 - 18 0.0909 - 20 0.136 - 21 0.0455 - - 62 21 8 0 - 0 0.0952 - 3 0.0476 - 4 0.286 - 7 0.333 - 14 0.0476 - 20 0.0952 - 42 0.0476 - 44 0.0476 - - 46 382 21 10 - 3 0.0105 - 6 0.00524 - 8 0.387 - 9 0.00262 - 10 0.00524 - 13 0.304 - 14 0.0183 - 15 0.162 - 16 0.0105 - 18 0.00524 - 19 0.00524 - 21 0.00262 - 27 0.00262 - 28 0.00785 - 29 0.00262 - 30 0.0131 - 31 0.0157 - 40 0.00524 - 41 0.0288 - 46 0.00262 - 47 0.00262 - - 2 14 5 0 - 13 0.643 - 14 0.143 - 15 0.0714 - 41 0.0714 - 47 0.0714 - - 3 2 2 0 - 9 0.5 - 15 0.5 - - 8 15 5 0 - 6 0.0667 - 8 0.467 - 13 0.333 - 28 0.0667 - 31 0.0667 - - 13 206 14 0 - 3 0.00971 - 8 0.422 - 10 0.00485 - 13 0.325 - 14 0.0146 - 15 0.136 - 16 0.0146 - 18 0.00971 - 19 0.00971 - 27 0.00485 - 28 0.00971 - 30 0.0194 - 31 0.0146 - 46 0.00485 - - 14 99 11 0 - 3 0.0202 - 6 0.0101 - 8 0.495 - 10 0.0101 - 13 0.333 - 14 0.0202 - 15 0.0606 - 16 0.0101 - 21 0.0101 - 29 0.0101 - 31 0.0202 - - 15 30 5 0 - 8 0.1 - 13 0.0667 - 15 0.767 - 30 0.0333 - 40 0.0333 - - 45 3 1 0 - 41 1 - - 48 1 1 0 - 40 1 - - 55 6 1 0 - 41 1 - - 58 3 1 0 - 15 1 - - 47 311752 45 53 - 0 0.0388 - 1 0.0005 - 2 0.0469 - 3 0.00405 - 4 0.00179 - 5 1.6e-05 - 6 7.7e-05 - 7 0.382 - 8 0.00254 - 9 0.000189 - 10 9.3e-05 - 12 0.000388 - 13 0.0121 - 14 0.00672 - 15 0.00325 - 16 0.000112 - 17 0.000106 - 18 0.000202 - 19 0.00157 - 20 7.7e-05 - 21 0.0104 - 22 0.00016 - 23 1.28e-05 - 24 0.00627 - 25 3.85e-05 - 26 0.0366 - 27 6.42e-06 - 28 0.0599 - 29 0.0565 - 30 0.0332 - 31 0.0151 - 32 0.0125 - 33 0.026 - 34 0.00184 - 35 0.00141 - 36 1.92e-05 - 37 0.00624 - 40 9.94e-05 - 41 0.0842 - 42 0.0135 - 43 0.00033 - 44 0.00341 - 45 0.0148 - 46 0.00455 - 47 0.111 - - 0 3 3 0 - 7 0.333 - 14 0.333 - 44 0.333 - - 2 61 15 0 - 0 0.0656 - 2 0.0328 - 7 0.344 - 21 0.0164 - 26 0.0164 - 29 0.0164 - 30 0.0492 - 32 0.0164 - 33 0.0328 - 34 0.0164 - 41 0.0984 - 42 0.0492 - 44 0.0164 - 45 0.0164 - 47 0.213 - - 3 11856 34 0 - 0 0.0347 - 1 0.000422 - 2 0.066 - 3 0.000506 - 4 0.000759 - 7 0.359 - 8 0.00793 - 13 0.038 - 14 0.00506 - 15 0.00793 - 16 8.43e-05 - 18 0.000169 - 19 0.0011 - 21 0.038 - 24 0.00371 - 25 8.43e-05 - 26 0.083 - 28 0.0361 - 29 0.134 - 30 0.0172 - 31 0.0135 - 32 0.00472 - 33 0.0179 - 34 0.0016 - 35 0.000253 - 37 0.00118 - 40 0.000253 - 41 0.0499 - 42 0.0328 - 43 0.000843 - 44 0.00321 - 45 0.00346 - 46 0.00118 - 47 0.0361 - - 4 79613 41 0 - 0 0.0484 - 1 0.000754 - 2 0.0331 - 3 0.013 - 4 0.000666 - 5 2.51e-05 - 6 2.51e-05 - 7 0.404 - 8 0.00131 - 9 0.000214 - 10 7.54e-05 - 12 0.000415 - 13 0.0103 - 14 0.0123 - 15 0.0024 - 16 0.0001 - 17 0.000301 - 18 1.26e-05 - 19 0.00236 - 21 0.0111 - 22 0.000377 - 23 1.26e-05 - 24 0.00705 - 26 0.0314 - 28 0.0638 - 29 0.0519 - 30 0.0339 - 31 0.0147 - 32 0.0126 - 33 0.0216 - 34 0.00148 - 35 0.00126 - 37 0.00661 - 40 5.02e-05 - 41 0.0806 - 42 0.00671 - 43 0.000427 - 44 0.00117 - 45 0.0121 - 46 0.00315 - 47 0.108 - - 5 861 24 0 - 0 0.00581 - 2 0.0918 - 7 0.18 - 8 0.00465 - 10 0.00348 - 13 0.0186 - 14 0.00465 - 15 0.00232 - 16 0.00116 - 19 0.00232 - 21 0.029 - 28 0.0163 - 29 0.0395 - 30 0.00465 - 31 0.00232 - 32 0.0279 - 33 0.0151 - 34 0.00813 - 37 0.0267 - 41 0.143 - 42 0.00813 - 44 0.00232 - 45 0.167 - 47 0.195 - - 6 48 13 0 - 2 0.0208 - 4 0.0208 - 7 0.375 - 19 0.0208 - 25 0.0417 - 26 0.0417 - 28 0.0417 - 29 0.0208 - 32 0.0208 - 33 0.0208 - 41 0.104 - 45 0.125 - 47 0.146 - - 7 266 22 0 - 0 0.0526 - 2 0.0376 - 3 0.00376 - 7 0.18 - 8 0.0113 - 10 0.00376 - 13 0.147 - 14 0.105 - 15 0.015 - 21 0.0188 - 26 0.0338 - 28 0.0639 - 29 0.0489 - 30 0.0263 - 31 0.0263 - 32 0.0113 - 33 0.0301 - 35 0.00376 - 41 0.0564 - 42 0.0113 - 45 0.0113 - 47 0.102 - - 8 19385 39 0 - 0 0.0334 - 1 0.000464 - 2 0.0742 - 3 0.00284 - 4 0.00212 - 6 0.000258 - 7 0.434 - 8 0.00175 - 9 5.16e-05 - 12 0.000155 - 13 0.0156 - 14 0.00655 - 15 0.00542 - 16 0.000206 - 18 0.000516 - 19 0.00119 - 20 5.16e-05 - 21 0.00774 - 22 0.000155 - 24 0.00665 - 25 5.16e-05 - 26 0.0329 - 28 0.0675 - 29 0.0412 - 30 0.0447 - 31 0.0181 - 32 0.0144 - 33 0.0214 - 34 0.0016 - 35 0.000516 - 36 0.000103 - 37 0.00464 - 41 0.0594 - 42 0.00645 - 43 0.000258 - 44 0.00165 - 45 0.0122 - 46 0.000413 - 47 0.0797 - - 9 1078 30 0 - 0 0.0891 - 1 0.00186 - 2 0.0714 - 3 0.000928 - 4 0.000928 - 7 0.286 - 8 0.00371 - 12 0.000928 - 13 0.00278 - 14 0.00742 - 15 0.00371 - 16 0.000928 - 18 0.00278 - 19 0.00371 - 21 0.0111 - 24 0.00928 - 26 0.0427 - 28 0.151 - 29 0.0584 - 30 0.0826 - 31 0.0139 - 32 0.0408 - 33 0.0362 - 34 0.000928 - 37 0.000928 - 41 0.0288 - 42 0.00464 - 43 0.000928 - 45 0.0121 - 47 0.0297 - - 10 467 25 0 - 0 0.00642 - 2 0.0814 - 3 0.00214 - 4 0.00642 - 7 0.343 - 8 0.00214 - 13 0.00642 - 14 0.00214 - 19 0.00214 - 21 0.00857 - 24 0.015 - 26 0.0107 - 28 0.0343 - 29 0.0493 - 30 0.0214 - 31 0.00857 - 32 0.0107 - 33 0.0236 - 34 0.00428 - 35 0.00428 - 37 0.00857 - 41 0.0814 - 42 0.00857 - 45 0.045 - 47 0.214 - - 12 2 2 0 - 45 0.5 - 46 0.5 - - 13 22292 40 0 - 0 0.0312 - 1 0.000718 - 2 0.0474 - 3 0.000942 - 4 0.00493 - 7 0.47 - 8 0.00287 - 9 0.000449 - 10 8.97e-05 - 12 0.000224 - 13 0.0139 - 14 0.00453 - 15 0.00359 - 16 0.000135 - 18 0.000224 - 19 0.00144 - 20 4.49e-05 - 21 0.00763 - 22 8.97e-05 - 24 0.00574 - 25 8.97e-05 - 26 0.0302 - 27 4.49e-05 - 28 0.0663 - 29 0.0343 - 30 0.0394 - 31 0.0156 - 32 0.012 - 33 0.0202 - 34 0.00112 - 35 0.000538 - 37 0.00529 - 40 4.49e-05 - 41 0.0834 - 42 0.00745 - 43 0.000179 - 44 0.00242 - 45 0.0131 - 46 0.00112 - 47 0.0713 - - 14 14611 37 0 - 0 0.0223 - 1 0.000342 - 2 0.0463 - 3 0.000137 - 4 0.0011 - 6 6.84e-05 - 7 0.397 - 8 0.0024 - 9 0.000274 - 10 6.84e-05 - 12 0.000274 - 13 0.00609 - 14 0.00342 - 15 0.000342 - 18 0.000274 - 19 0.000753 - 21 0.00527 - 22 6.84e-05 - 24 0.00862 - 26 0.0357 - 28 0.0862 - 29 0.0426 - 30 0.0557 - 31 0.0153 - 32 0.0201 - 33 0.0203 - 34 0.00356 - 35 0.000958 - 37 0.0112 - 40 0.000137 - 41 0.0757 - 42 0.00897 - 43 0.000205 - 44 0.00103 - 45 0.0125 - 46 0.000958 - 47 0.114 - - 15 39318 40 0 - 0 0.00677 - 1 0.000102 - 2 0.0486 - 3 0.00145 - 4 0.00305 - 6 0.000178 - 7 0.372 - 8 0.00542 - 9 0.000203 - 10 7.63e-05 - 12 0.000153 - 13 0.0124 - 14 0.0032 - 15 0.0044 - 16 5.09e-05 - 18 0.000382 - 19 0.000254 - 20 0.000254 - 21 0.00387 - 24 0.0017 - 25 2.54e-05 - 26 0.0255 - 28 0.0202 - 29 0.0393 - 30 0.0134 - 31 0.011 - 32 0.00471 - 33 0.0302 - 34 0.00231 - 35 0.00112 - 36 5.09e-05 - 37 0.0056 - 40 0.000203 - 41 0.14 - 42 0.0104 - 43 0.000102 - 44 0.00972 - 45 0.00946 - 46 0.01 - 47 0.202 - - 16 399 24 0 - 0 0.0125 - 2 0.0501 - 4 0.00752 - 7 0.421 - 8 0.00251 - 13 0.00752 - 14 0.00501 - 15 0.00251 - 20 0.00251 - 21 0.01 - 26 0.0251 - 28 0.0301 - 29 0.00752 - 30 0.0226 - 31 0.00501 - 32 0.00251 - 33 0.015 - 34 0.00251 - 37 0.00752 - 41 0.115 - 42 0.0125 - 44 0.00752 - 45 0.0276 - 47 0.198 - - 17 312 24 0 - 0 0.0609 - 1 0.00321 - 2 0.0449 - 7 0.372 - 8 0.00321 - 9 0.00321 - 13 0.00641 - 14 0.00641 - 15 0.00321 - 19 0.00641 - 21 0.00962 - 24 0.00962 - 26 0.0224 - 28 0.106 - 29 0.0513 - 30 0.0513 - 31 0.0385 - 32 0.016 - 33 0.0224 - 37 0.0128 - 41 0.0417 - 42 0.00321 - 45 0.0192 - 47 0.0865 - - 18 4 1 0 - 28 1 - - 19 17392 39 0 - 0 0.00949 - 1 0.000115 - 2 0.0515 - 3 0.00138 - 4 0.00149 - 5 5.75e-05 - 7 0.171 - 8 0.00477 - 9 0.000402 - 10 0.000575 - 12 0.00305 - 13 0.0331 - 14 0.0155 - 15 0.00385 - 16 0.00023 - 19 0.00161 - 21 0.0166 - 22 0.000402 - 23 5.75e-05 - 24 0.000115 - 26 0.00638 - 27 5.75e-05 - 28 0.0544 - 29 0.101 - 30 0.0205 - 31 0.0106 - 32 0.0237 - 33 0.0277 - 34 0.00862 - 35 0.0122 - 37 0.0274 - 40 5.75e-05 - 41 0.12 - 42 0.011 - 43 0.000517 - 44 0.00149 - 45 0.0877 - 46 0.0316 - 47 0.14 - - 20 8301 36 0 - 0 0.0153 - 1 0.000361 - 2 0.0496 - 3 0.000361 - 4 0.00422 - 7 0.429 - 8 0.00169 - 9 0.000241 - 10 0.00012 - 12 0.000241 - 13 0.00361 - 14 0.00108 - 15 0.00133 - 16 0.00012 - 17 0.00012 - 18 0.000241 - 19 0.000241 - 21 0.00675 - 24 0.017 - 26 0.0359 - 28 0.136 - 29 0.0916 - 30 0.0543 - 31 0.0223 - 32 0.0141 - 33 0.026 - 34 0.000723 - 35 0.00145 - 37 0.00638 - 41 0.0253 - 42 0.00446 - 43 0.00012 - 44 0.000602 - 45 0.00904 - 46 0.00133 - 47 0.0385 - - 21 1441 29 0 - 0 0.12 - 1 0.00208 - 2 0.0625 - 3 0.00625 - 4 0.00208 - 7 0.237 - 8 0.00278 - 12 0.000694 - 13 0.0437 - 14 0.0278 - 15 0.0153 - 19 0.00278 - 21 0.0396 - 24 0.00763 - 26 0.00902 - 28 0.0472 - 29 0.0402 - 30 0.0194 - 31 0.0222 - 32 0.0104 - 33 0.0285 - 34 0.00486 - 37 0.00625 - 41 0.0861 - 42 0.0201 - 44 0.00347 - 45 0.0146 - 46 0.00139 - 47 0.116 - - 22 181 22 0 - 0 0.0442 - 2 0.0221 - 3 0.00552 - 7 0.0663 - 8 0.0166 - 13 0.166 - 14 0.0663 - 15 0.0718 - 16 0.00552 - 19 0.00552 - 21 0.0331 - 24 0.0166 - 26 0.00552 - 28 0.0331 - 29 0.0718 - 30 0.0331 - 31 0.0718 - 32 0.011 - 33 0.0276 - 41 0.0166 - 45 0.00552 - 47 0.204 - - 23 35 9 0 - 0 0.0571 - 2 0.143 - 7 0.314 - 13 0.0571 - 29 0.0286 - 32 0.0286 - 33 0.0286 - 41 0.114 - 47 0.229 - - 24 2 2 0 - 22 0.5 - 24 0.5 - - 25 13 2 0 - 42 0.0769 - 47 0.923 - - 27 3 3 0 - 0 0.333 - 26 0.333 - 30 0.333 - - 28 113 18 0 - 0 0.0354 - 2 0.0708 - 7 0.0177 - 12 0.00885 - 14 0.00885 - 19 0.00885 - 21 0.00885 - 26 0.513 - 28 0.106 - 30 0.0265 - 32 0.00885 - 34 0.00885 - 35 0.00885 - 41 0.00885 - 42 0.0265 - 44 0.0177 - 45 0.0442 - 47 0.0708 - - 29 19 7 0 - 2 0.263 - 7 0.0526 - 13 0.0526 - 15 0.0526 - 31 0.0526 - 41 0.421 - 42 0.105 - - 30 714 22 0 - 0 0.0154 - 2 0.0868 - 7 0.51 - 8 0.0014 - 13 0.0028 - 14 0.0028 - 19 0.0014 - 21 0.0028 - 24 0.0098 - 26 0.0308 - 28 0.0672 - 29 0.0308 - 30 0.0336 - 31 0.0084 - 32 0.0112 - 33 0.0224 - 37 0.007 - 41 0.0714 - 42 0.007 - 43 0.0014 - 45 0.0042 - 47 0.0714 - - 31 540 22 0 - 0 0.0278 - 2 0.0722 - 4 0.00185 - 7 0.419 - 13 0.0037 - 14 0.00185 - 15 0.00556 - 21 0.0111 - 24 0.0111 - 26 0.0519 - 28 0.063 - 29 0.0296 - 30 0.0685 - 31 0.00556 - 32 0.00926 - 33 0.0241 - 37 0.00185 - 41 0.0556 - 42 0.0407 - 43 0.0037 - 45 0.00741 - 47 0.0852 - - 32 6 3 0 - 7 0.667 - 15 0.167 - 41 0.167 - - 33 18 9 0 - 0 0.167 - 2 0.278 - 7 0.111 - 19 0.111 - 21 0.0556 - 32 0.0556 - 41 0.111 - 42 0.0556 - 44 0.0556 - - 34 67 17 0 - 2 0.0448 - 7 0.104 - 8 0.0299 - 13 0.0149 - 14 0.0299 - 15 0.0149 - 28 0.0149 - 30 0.0149 - 32 0.0149 - 33 0.0149 - 35 0.0149 - 37 0.0149 - 41 0.403 - 42 0.0448 - 45 0.0149 - 46 0.0149 - 47 0.194 - - 35 8 6 0 - 0 0.125 - 2 0.125 - 26 0.125 - 28 0.125 - 33 0.125 - 47 0.375 - - 36 7 3 0 - 13 0.143 - 14 0.143 - 41 0.714 - - 37 4 3 0 - 7 0.25 - 28 0.5 - 33 0.25 - - 38 13 6 0 - 7 0.308 - 24 0.0769 - 26 0.385 - 28 0.0769 - 29 0.0769 - 33 0.0769 - - 39 1743 25 0 - 0 0.0298 - 2 0.197 - 4 0.000574 - 6 0.00115 - 7 0.402 - 8 0.00344 - 13 0.00229 - 14 0.00172 - 15 0.00287 - 19 0.00172 - 20 0.000574 - 21 0.0384 - 24 0.00229 - 26 0.124 - 28 0.0218 - 29 0.0671 - 30 0.012 - 31 0.0103 - 32 0.00229 - 33 0.00631 - 41 0.0189 - 42 0.0143 - 43 0.000574 - 44 0.0361 - 47 0.00229 - - 41 2 2 0 - 0 0.5 - 3 0.5 - - 42 57 4 0 - 14 0.0175 - 40 0.0175 - 42 0.0175 - 47 0.947 - - 44 39 13 0 - 0 0.0256 - 2 0.0769 - 4 0.0256 - 7 0.282 - 14 0.0513 - 15 0.0513 - 26 0.0769 - 28 0.103 - 34 0.0256 - 40 0.103 - 41 0.0256 - 42 0.0256 - 47 0.128 - - 45 468 24 0 - 0 0.0662 - 1 0.00214 - 2 0.0491 - 3 0.00427 - 7 0.404 - 13 0.0128 - 14 0.00427 - 15 0.00427 - 18 0.00427 - 19 0.00214 - 21 0.00427 - 24 0.00855 - 26 0.0235 - 28 0.0641 - 29 0.0449 - 30 0.0726 - 31 0.0406 - 32 0.00641 - 33 0.0363 - 41 0.0299 - 42 0.0192 - 44 0.015 - 45 0.00214 - 47 0.0791 - - 48 1258 29 0 - 0 0.0819 - 1 0.000795 - 2 0.0429 - 4 0.00238 - 7 0.431 - 13 0.00477 - 14 0.00159 - 15 0.00238 - 18 0.000795 - 19 0.00238 - 21 0.0127 - 23 0.000795 - 24 0.00477 - 25 0.00159 - 26 0.0334 - 28 0.0787 - 29 0.0437 - 30 0.0437 - 31 0.0151 - 32 0.0207 - 33 0.0231 - 35 0.000795 - 36 0.000795 - 37 0.00397 - 41 0.0453 - 42 0.0167 - 45 0.0175 - 46 0.000795 - 47 0.0652 - - 49 116 18 0 - 0 0.0776 - 2 0.0776 - 3 0.0172 - 7 0.241 - 13 0.0517 - 14 0.00862 - 21 0.00862 - 26 0.00862 - 28 0.0517 - 29 0.0431 - 30 0.0345 - 31 0.0345 - 32 0.00862 - 34 0.00862 - 41 0.284 - 42 0.0259 - 46 0.00862 - 47 0.00862 - - 50 10 7 0 - 0 0.2 - 14 0.1 - 28 0.1 - 29 0.1 - 30 0.2 - 33 0.2 - 42 0.1 - - 53 7 4 0 - 2 0.143 - 7 0.143 - 42 0.429 - 47 0.286 - - 54 72 13 0 - 0 0.0139 - 2 0.0556 - 4 0.0139 - 7 0.417 - 26 0.0417 - 28 0.0278 - 29 0.0278 - 30 0.0139 - 33 0.0278 - 34 0.0139 - 41 0.111 - 46 0.0139 - 47 0.222 - - 55 80263 43 0 - 0 0.0575 - 1 0.000536 - 2 0.0458 - 3 0.000461 - 4 0.00156 - 5 2.49e-05 - 6 8.72e-05 - 7 0.377 - 8 0.00127 - 9 9.97e-05 - 10 2.49e-05 - 12 0.00015 - 13 0.00471 - 14 0.00257 - 15 0.00239 - 16 9.97e-05 - 17 9.97e-05 - 18 0.000174 - 19 0.00179 - 20 0.000125 - 21 0.00893 - 22 6.23e-05 - 24 0.00776 - 25 3.74e-05 - 26 0.0369 - 28 0.0637 - 29 0.0564 - 30 0.0373 - 31 0.0168 - 32 0.0133 - 33 0.0337 - 34 0.000648 - 35 0.000336 - 36 1.25e-05 - 37 0.00262 - 40 8.72e-05 - 41 0.0805 - 42 0.0217 - 43 0.000336 - 44 0.00209 - 45 0.00795 - 46 0.00182 - 47 0.111 - - 57 11 7 0 - 2 0.273 - 24 0.0909 - 28 0.182 - 33 0.182 - 41 0.0909 - 42 0.0909 - 44 0.0909 - - 58 14 6 0 - 0 0.0714 - 2 0.0714 - 7 0.643 - 28 0.0714 - 31 0.0714 - 41 0.0714 - - 60 8061 34 0 - 0 0.0514 - 1 0.000124 - 2 0.0294 - 3 0.000496 - 4 0.00062 - 7 0.386 - 8 0.00248 - 9 0.000124 - 13 0.016 - 14 0.00657 - 15 0.00385 - 16 0.000124 - 18 0.000496 - 19 0.00124 - 21 0.0112 - 22 0.000124 - 23 0.000124 - 24 0.00844 - 26 0.154 - 28 0.0624 - 29 0.08 - 30 0.0249 - 31 0.02 - 32 0.00893 - 33 0.0238 - 34 0.000744 - 37 0.00211 - 41 0.0215 - 42 0.0383 - 43 0.000124 - 44 0.0203 - 45 0.00136 - 46 0.000248 - 47 0.0226 - - 62 34 6 0 - 7 0.647 - 26 0.0882 - 30 0.0294 - 42 0.0294 - 45 0.0588 - 47 0.147 - - 64 40 15 0 - 0 0.1 - 2 0.025 - 7 0.2 - 13 0.025 - 19 0.05 - 24 0.025 - 26 0.05 - 28 0.1 - 29 0.05 - 30 0.025 - 31 0.075 - 33 0.075 - 41 0.1 - 45 0.075 - 47 0.025 - - 68 95 14 0 - 0 0.0105 - 2 0.0211 - 7 0.516 - 21 0.0105 - 26 0.0421 - 28 0.0737 - 29 0.0105 - 30 0.0632 - 31 0.0105 - 32 0.0211 - 33 0.0632 - 41 0.0211 - 42 0.0211 - 47 0.116 - - 48 4567 37 18 - 0 0.0274 - 1 0.000219 - 2 0.0125 - 3 0.0103 - 4 0.53 - 7 0.119 - 8 0.0458 - 9 0.00153 - 10 0.000438 - 13 0.00613 - 14 0.000438 - 15 0.0101 - 16 0.000219 - 18 0.0469 - 19 0.00153 - 20 0.0405 - 21 0.00504 - 22 0.000876 - 23 0.000219 - 24 0.00131 - 25 0.000438 - 26 0.0092 - 28 0.0217 - 29 0.0123 - 30 0.0138 - 31 0.00963 - 32 0.00569 - 33 0.00635 - 35 0.000219 - 36 0.000438 - 37 0.00109 - 40 0.000219 - 41 0.0243 - 42 0.0046 - 45 0.0109 - 46 0.000438 - 47 0.018 - - 3 17 2 0 - 4 0.941 - 18 0.0588 - - 4 16 7 0 - 0 0.375 - 7 0.125 - 21 0.188 - 28 0.0625 - 32 0.125 - 37 0.0625 - 45 0.0625 - - 8 500 23 0 - 0 0.03 - 2 0.016 - 3 0.024 - 4 0.448 - 7 0.148 - 8 0.034 - 13 0.014 - 15 0.006 - 18 0.058 - 20 0.064 - 22 0.002 - 26 0.008 - 28 0.012 - 29 0.016 - 30 0.012 - 31 0.02 - 32 0.004 - 33 0.016 - 35 0.002 - 41 0.036 - 42 0.014 - 45 0.004 - 47 0.012 - - 9 5 4 0 - 2 0.2 - 4 0.4 - 7 0.2 - 30 0.2 - - 13 2669 34 0 - 0 0.0217 - 1 0.000375 - 2 0.00712 - 3 0.0045 - 4 0.651 - 7 0.0573 - 8 0.0476 - 9 0.00225 - 10 0.000375 - 13 0.00525 - 14 0.000749 - 15 0.00599 - 18 0.0555 - 19 0.00187 - 20 0.0412 - 21 0.00337 - 22 0.000749 - 23 0.000375 - 24 0.00112 - 25 0.000375 - 26 0.00599 - 28 0.0139 - 29 0.0109 - 30 0.0105 - 31 0.00974 - 32 0.003 - 33 0.003 - 36 0.000749 - 40 0.000375 - 41 0.0161 - 42 0.00187 - 45 0.00599 - 46 0.000749 - 47 0.00862 - - 14 854 30 0 - 0 0.0457 - 2 0.0269 - 3 0.0234 - 4 0.196 - 7 0.292 - 8 0.0679 - 9 0.00117 - 10 0.00117 - 13 0.00468 - 15 0.0304 - 16 0.00117 - 18 0.0222 - 19 0.00117 - 20 0.0293 - 21 0.0082 - 22 0.00117 - 24 0.00351 - 25 0.00117 - 26 0.0152 - 28 0.0504 - 29 0.0222 - 30 0.0258 - 31 0.0082 - 32 0.0129 - 33 0.0141 - 37 0.00351 - 41 0.0293 - 42 0.0082 - 45 0.0152 - 47 0.0386 - - 15 246 19 0 - 0 0.0122 - 2 0.0203 - 3 0.00813 - 4 0.537 - 7 0.142 - 8 0.0122 - 13 0.00407 - 15 0.00407 - 18 0.0407 - 20 0.0325 - 21 0.00407 - 26 0.0285 - 28 0.0163 - 30 0.0163 - 32 0.00813 - 33 0.00407 - 37 0.00407 - 41 0.0407 - 47 0.065 - - 16 8 5 0 - 4 0.25 - 7 0.375 - 26 0.125 - 41 0.125 - 47 0.125 - - 18 2 1 0 - 13 1 - - 30 11 5 0 - 4 0.545 - 7 0.0909 - 20 0.182 - 28 0.0909 - 45 0.0909 - - 31 14 5 0 - 4 0.429 - 7 0.214 - 18 0.143 - 20 0.143 - 42 0.0714 - - 41 40 10 0 - 2 0.025 - 3 0.025 - 4 0.55 - 7 0.075 - 18 0.05 - 20 0.075 - 21 0.025 - 30 0.025 - 41 0.125 - 47 0.025 - - 46 19 2 0 - 4 0.158 - 45 0.842 - - 47 89 12 0 - 0 0.0225 - 4 0.753 - 7 0.0674 - 8 0.0112 - 19 0.0112 - 20 0.0112 - 21 0.0225 - 28 0.0562 - 30 0.0112 - 31 0.0112 - 32 0.0112 - 41 0.0112 - - 48 29 9 0 - 0 0.069 - 4 0.414 - 7 0.069 - 18 0.0345 - 20 0.0345 - 26 0.0345 - 28 0.0345 - 41 0.276 - 45 0.0345 - - 55 7 5 0 - 4 0.286 - 7 0.286 - 20 0.143 - 28 0.143 - 47 0.143 - - 56 9 4 0 - 4 0.444 - 7 0.333 - 8 0.111 - 47 0.111 - - 58 6 4 0 - 4 0.333 - 7 0.333 - 8 0.167 - 42 0.167 - - 49 130 21 9 - 0 0.0692 - 2 0.0769 - 3 0.0154 - 4 0.0615 - 7 0.215 - 13 0.0462 - 14 0.00769 - 18 0.00769 - 21 0.0231 - 26 0.00769 - 28 0.0462 - 29 0.0385 - 30 0.0308 - 31 0.0308 - 32 0.00769 - 34 0.00769 - 41 0.262 - 42 0.0231 - 45 0.00769 - 46 0.00769 - 47 0.00769 - - 3 7 3 0 - 7 0.429 - 30 0.143 - 41 0.429 - - 4 51 12 0 - 0 0.0588 - 2 0.118 - 7 0.294 - 13 0.118 - 28 0.0588 - 29 0.0392 - 30 0.0392 - 31 0.0588 - 32 0.0196 - 41 0.157 - 42 0.0196 - 47 0.0196 - - 8 6 4 0 - 7 0.5 - 28 0.167 - 29 0.167 - 31 0.167 - - 13 19 10 0 - 0 0.0526 - 4 0.368 - 7 0.158 - 14 0.0526 - 28 0.0526 - 29 0.0526 - 30 0.0526 - 41 0.105 - 42 0.0526 - 45 0.0526 - - 14 4 4 0 - 4 0.25 - 7 0.25 - 26 0.25 - 29 0.25 - - 15 5 3 0 - 18 0.2 - 41 0.6 - 42 0.2 - - 41 3 2 0 - 3 0.667 - 7 0.333 - - 47 1 1 0 - 34 1 - - 55 29 7 0 - 0 0.138 - 2 0.138 - 7 0.069 - 21 0.069 - 28 0.0345 - 41 0.517 - 46 0.0345 - - 50 14 10 0 - 0 0.143 - 14 0.143 - 15 0.0714 - 28 0.0714 - 29 0.0714 - 30 0.143 - 32 0.0714 - 33 0.143 - 41 0.0714 - 42 0.0714 - - 53 7 4 0 - 2 0.143 - 7 0.143 - 42 0.429 - 47 0.286 - - 54 390 20 6 - 0 0.00256 - 2 0.0154 - 3 0.0282 - 4 0.618 - 7 0.0769 - 8 0.0359 - 13 0.00256 - 15 0.0128 - 18 0.0308 - 20 0.059 - 26 0.00769 - 28 0.00513 - 29 0.00513 - 30 0.00256 - 33 0.00513 - 34 0.00256 - 41 0.0205 - 45 0.0256 - 46 0.00256 - 47 0.041 - - 8 28 2 0 - 3 0.0714 - 4 0.929 - - 13 239 11 0 - 2 0.00418 - 3 0.0167 - 4 0.762 - 7 0.0251 - 8 0.0418 - 15 0.00837 - 18 0.046 - 20 0.0753 - 33 0.00837 - 41 0.00837 - 47 0.00418 - - 14 26 8 0 - 2 0.0769 - 3 0.115 - 4 0.462 - 18 0.0385 - 20 0.115 - 28 0.0385 - 41 0.0385 - 47 0.115 - - 15 74 17 0 - 0 0.0135 - 2 0.0405 - 3 0.027 - 4 0.189 - 7 0.27 - 8 0.0541 - 13 0.0135 - 15 0.0405 - 26 0.027 - 28 0.0135 - 29 0.027 - 30 0.0135 - 34 0.0135 - 41 0.0676 - 45 0.027 - 46 0.0135 - 47 0.149 - - 18 3 2 0 - 7 0.667 - 26 0.333 - - 46 8 1 0 - 45 1 - - 55 80957 43 26 - 0 0.057 - 1 0.000531 - 2 0.0461 - 3 0.000581 - 4 0.00351 - 5 2.47e-05 - 6 8.65e-05 - 7 0.374 - 8 0.00166 - 9 9.88e-05 - 10 4.94e-05 - 12 0.000148 - 13 0.00473 - 14 0.00267 - 15 0.00241 - 16 9.88e-05 - 17 0.000371 - 18 0.000259 - 19 0.00178 - 20 0.000259 - 21 0.00965 - 22 7.41e-05 - 24 0.0077 - 25 3.71e-05 - 26 0.0366 - 28 0.0632 - 29 0.0559 - 30 0.037 - 31 0.0167 - 32 0.0131 - 33 0.0334 - 34 0.000642 - 35 0.000334 - 36 1.24e-05 - 37 0.00259 - 40 8.65e-05 - 41 0.0801 - 42 0.0218 - 43 0.000371 - 44 0.0022 - 45 0.0108 - 46 0.00188 - 47 0.11 - - 0 4 4 0 - 7 0.25 - 29 0.25 - 30 0.25 - 32 0.25 - - 2 4 3 0 - 4 0.25 - 7 0.5 - 47 0.25 - - 3 137 16 0 - 0 0.0073 - 2 0.0146 - 7 0.577 - 13 0.0073 - 14 0.0146 - 24 0.0146 - 26 0.0292 - 28 0.0438 - 29 0.0365 - 30 0.0073 - 31 0.0073 - 32 0.0438 - 33 0.0365 - 34 0.0073 - 41 0.0803 - 47 0.073 - - 4 2 2 0 - 13 0.5 - 26 0.5 - - 8 1730 27 0 - 0 0.0254 - 2 0.0353 - 3 0.00116 - 4 0.00578 - 7 0.478 - 8 0.000578 - 9 0.000578 - 13 0.00347 - 18 0.00116 - 21 0.00925 - 24 0.00925 - 26 0.0364 - 28 0.0572 - 29 0.041 - 30 0.0272 - 31 0.00925 - 32 0.00578 - 33 0.0168 - 34 0.00116 - 35 0.00173 - 37 0.00173 - 41 0.102 - 42 0.00694 - 44 0.000578 - 45 0.00347 - 46 0.00347 - 47 0.115 - - 9 15 7 0 - 7 0.467 - 26 0.0667 - 28 0.0667 - 29 0.0667 - 31 0.0667 - 33 0.0667 - 41 0.2 - - 10 202 18 0 - 0 0.114 - 2 0.0248 - 3 0.00495 - 7 0.347 - 15 0.00495 - 20 0.00495 - 21 0.0248 - 24 0.00495 - 26 0.00495 - 28 0.0248 - 29 0.0198 - 30 0.0347 - 31 0.0198 - 32 0.00495 - 33 0.00495 - 41 0.262 - 42 0.0099 - 47 0.0842 - - 13 3620 33 0 - 0 0.0177 - 2 0.0282 - 3 0.0011 - 4 0.0113 - 7 0.41 - 8 0.00414 - 10 0.000276 - 13 0.00249 - 14 0.00166 - 15 0.00138 - 17 0.0011 - 18 0.000276 - 19 0.000552 - 20 0.0011 - 21 0.00912 - 24 0.00691 - 26 0.0373 - 28 0.0715 - 29 0.0561 - 30 0.0331 - 31 0.0133 - 32 0.0127 - 33 0.0218 - 34 0.000552 - 35 0.000276 - 37 0.00331 - 41 0.0956 - 42 0.00635 - 43 0.000552 - 44 0.00138 - 45 0.0047 - 46 0.00221 - 47 0.142 - - 14 1127 28 0 - 0 0.00532 - 2 0.024 - 3 0.00177 - 4 0.0071 - 7 0.482 - 8 0.0071 - 13 0.00532 - 14 0.00177 - 15 0.000887 - 17 0.00177 - 21 0.00266 - 24 0.00621 - 26 0.0417 - 28 0.0816 - 29 0.0488 - 30 0.039 - 31 0.0177 - 32 0.0115 - 33 0.0195 - 34 0.00266 - 35 0.00177 - 37 0.00799 - 41 0.0532 - 42 0.00444 - 44 0.00177 - 45 0.00444 - 46 0.000887 - 47 0.117 - - 15 868 28 0 - 0 0.0104 - 2 0.0657 - 3 0.0023 - 4 0.00806 - 7 0.468 - 8 0.00691 - 13 0.0023 - 14 0.00115 - 15 0.00115 - 18 0.00461 - 20 0.00115 - 21 0.0023 - 24 0.00115 - 26 0.0415 - 28 0.0173 - 29 0.0242 - 30 0.0161 - 31 0.00461 - 32 0.00346 - 33 0.0242 - 34 0.0023 - 37 0.00115 - 41 0.0668 - 42 0.0127 - 44 0.00115 - 45 0.00806 - 46 0.0023 - 47 0.199 - - 16 33 9 0 - 2 0.0303 - 7 0.455 - 20 0.0606 - 28 0.0909 - 30 0.0303 - 32 0.0303 - 41 0.0606 - 45 0.0303 - 47 0.212 - - 18 5 4 0 - 2 0.4 - 7 0.2 - 26 0.2 - 45 0.2 - - 23 2 2 0 - 2 0.5 - 33 0.5 - - 30 87 11 0 - 2 0.023 - 7 0.575 - 26 0.046 - 28 0.103 - 29 0.0345 - 30 0.0345 - 31 0.023 - 33 0.023 - 41 0.092 - 42 0.0115 - 47 0.0345 - - 31 59 13 0 - 2 0.0339 - 4 0.0339 - 7 0.475 - 14 0.0169 - 24 0.0169 - 26 0.0339 - 28 0.0508 - 29 0.102 - 30 0.0508 - 31 0.0169 - 41 0.0169 - 46 0.0169 - 47 0.136 - - 41 5 5 0 - 2 0.2 - 4 0.2 - 7 0.2 - 28 0.2 - 41 0.2 - - 43 4 2 0 - 7 0.25 - 44 0.75 - - 45 68 11 0 - 0 0.0441 - 2 0.0147 - 7 0.426 - 15 0.0147 - 26 0.0735 - 28 0.0735 - 29 0.132 - 30 0.0294 - 33 0.0441 - 41 0.0294 - 47 0.118 - - 46 6 2 0 - 19 0.167 - 45 0.833 - - 47 72658 43 0 - 0 0.0614 - 1 0.000592 - 2 0.0476 - 3 0.000495 - 4 0.0029 - 5 2.75e-05 - 6 9.63e-05 - 7 0.366 - 8 0.00143 - 9 9.63e-05 - 10 4.13e-05 - 12 0.000165 - 13 0.00491 - 14 0.00278 - 15 0.00256 - 16 0.00011 - 17 0.00033 - 18 0.000193 - 19 0.00193 - 20 0.000179 - 21 0.00988 - 22 8.26e-05 - 24 0.0078 - 25 4.13e-05 - 26 0.0365 - 28 0.0633 - 29 0.0569 - 30 0.0378 - 31 0.0172 - 32 0.0135 - 33 0.0349 - 34 0.000578 - 35 0.000289 - 36 1.38e-05 - 37 0.00255 - 40 9.63e-05 - 41 0.0789 - 42 0.0236 - 43 0.000385 - 44 0.00228 - 45 0.0115 - 46 0.00183 - 47 0.107 - - 48 235 20 0 - 0 0.0255 - 2 0.0255 - 4 0.00851 - 7 0.417 - 14 0.00851 - 19 0.00426 - 21 0.0128 - 24 0.0128 - 26 0.034 - 28 0.0638 - 29 0.0213 - 30 0.0255 - 31 0.017 - 32 0.00851 - 33 0.0213 - 41 0.0979 - 42 0.00851 - 45 0.00426 - 46 0.00426 - 47 0.179 - - 54 12 2 0 - 7 0.833 - 28 0.167 - - 55 7 6 0 - 7 0.286 - 13 0.143 - 26 0.143 - 28 0.143 - 29 0.143 - 47 0.143 - - 57 19 7 0 - 4 0.0526 - 7 0.526 - 26 0.0526 - 29 0.105 - 30 0.0526 - 33 0.0526 - 41 0.158 - - 60 22 6 0 - 7 0.682 - 21 0.0455 - 28 0.0455 - 30 0.0455 - 41 0.0909 - 47 0.0909 - - 68 8 5 0 - 7 0.375 - 28 0.25 - 30 0.125 - 32 0.125 - 47 0.125 - - 56 295 15 2 - 2 0.00678 - 3 0.0542 - 4 0.42 - 7 0.00339 - 8 0.251 - 9 0.0169 - 10 0.0102 - 15 0.00339 - 20 0.122 - 21 0.0102 - 30 0.00678 - 31 0.0102 - 34 0.00339 - 41 0.00678 - 45 0.0746 - - 15 2 2 0 - 7 0.5 - 8 0.5 - - 46 2 1 0 - 45 1 - - 57 38 11 4 - 2 0.132 - 13 0.0526 - 14 0.0263 - 15 0.5 - 24 0.0263 - 28 0.0526 - 33 0.0526 - 41 0.0526 - 42 0.0263 - 44 0.0263 - 45 0.0526 - - 18 19 2 0 - 13 0.0526 - 15 0.947 - - 41 4 4 0 - 2 0.25 - 24 0.25 - 41 0.25 - 45 0.25 - - 47 4 4 0 - 13 0.25 - 14 0.25 - 28 0.25 - 33 0.25 - - 55 5 4 0 - 2 0.4 - 28 0.2 - 41 0.2 - 44 0.2 - - 58 108 17 5 - 0 0.00926 - 2 0.00926 - 3 0.037 - 4 0.0926 - 6 0.0185 - 7 0.0833 - 8 0.167 - 13 0.102 - 15 0.333 - 16 0.00926 - 18 0.0185 - 20 0.0278 - 28 0.00926 - 31 0.00926 - 40 0.0185 - 41 0.0185 - 46 0.037 - - 8 10 7 0 - 0 0.1 - 2 0.1 - 4 0.1 - 7 0.2 - 8 0.3 - 18 0.1 - 20 0.1 - - 13 37 10 0 - 3 0.0811 - 4 0.216 - 6 0.027 - 7 0.0811 - 8 0.216 - 13 0.135 - 15 0.162 - 18 0.027 - 20 0.027 - 46 0.027 - - 14 21 10 0 - 4 0.0476 - 6 0.0476 - 7 0.0952 - 8 0.238 - 13 0.19 - 15 0.19 - 20 0.0476 - 28 0.0476 - 31 0.0476 - 46 0.0476 - - 15 31 5 0 - 7 0.0645 - 8 0.0323 - 15 0.806 - 16 0.0323 - 40 0.0645 - - 47 5 4 0 - 3 0.2 - 13 0.2 - 41 0.2 - 46 0.4 - - 60 8217 36 21 - 0 0.0504 - 1 0.000122 - 2 0.0288 - 3 0.00231 - 4 0.00828 - 7 0.378 - 8 0.00633 - 9 0.000122 - 10 0.000122 - 13 0.0158 - 14 0.00645 - 15 0.00377 - 16 0.000122 - 18 0.00316 - 19 0.00122 - 20 0.000852 - 21 0.0113 - 22 0.000122 - 23 0.000122 - 24 0.00828 - 26 0.151 - 28 0.0612 - 29 0.0785 - 30 0.0245 - 31 0.0207 - 32 0.00876 - 33 0.0234 - 34 0.00073 - 37 0.00207 - 41 0.0211 - 42 0.0376 - 43 0.000122 - 44 0.0202 - 45 0.00146 - 46 0.000243 - 47 0.0221 - - 2 2 2 0 - 31 0.5 - 41 0.5 - - 3 8 4 0 - 0 0.25 - 26 0.375 - 28 0.125 - 29 0.25 - - 4 63 16 0 - 0 0.143 - 2 0.111 - 7 0.143 - 13 0.0317 - 14 0.0317 - 15 0.0159 - 24 0.0317 - 26 0.0317 - 28 0.0317 - 29 0.0476 - 31 0.0159 - 32 0.0159 - 33 0.0317 - 41 0.206 - 42 0.0159 - 47 0.0952 - - 7 7 5 0 - 0 0.429 - 2 0.143 - 7 0.143 - 13 0.143 - 45 0.143 - - 8 300 22 0 - 0 0.0933 - 2 0.0467 - 4 0.0267 - 7 0.31 - 8 0.00333 - 13 0.01 - 15 0.00667 - 18 0.03 - 20 0.00333 - 21 0.0133 - 24 0.0133 - 26 0.02 - 28 0.0867 - 29 0.05 - 30 0.0367 - 31 0.0267 - 32 0.00667 - 33 0.0333 - 37 0.00333 - 41 0.04 - 42 0.09 - 47 0.05 - - 9 5 5 0 - 2 0.2 - 28 0.2 - 29 0.2 - 32 0.2 - 41 0.2 - - 13 1033 27 0 - 0 0.0552 - 1 0.000968 - 2 0.0387 - 3 0.000968 - 4 0.0155 - 7 0.284 - 8 0.0029 - 13 0.00581 - 14 0.0106 - 15 0.00194 - 18 0.0029 - 19 0.00194 - 21 0.0271 - 24 0.00678 - 26 0.0736 - 28 0.0697 - 29 0.0794 - 30 0.0368 - 31 0.0281 - 32 0.0126 - 33 0.0523 - 37 0.000968 - 41 0.0542 - 42 0.092 - 44 0.00678 - 45 0.00194 - 47 0.0368 - - 14 1393 31 0 - 0 0.0682 - 2 0.0223 - 3 0.00144 - 4 0.0215 - 7 0.363 - 8 0.0223 - 9 0.000718 - 13 0.0625 - 14 0.00718 - 15 0.00287 - 16 0.000718 - 18 0.00718 - 19 0.00287 - 20 0.00359 - 21 0.0122 - 24 0.00861 - 26 0.0818 - 28 0.0653 - 29 0.0639 - 30 0.023 - 31 0.0294 - 32 0.0108 - 33 0.0294 - 34 0.000718 - 37 0.0101 - 41 0.0251 - 42 0.0101 - 43 0.000718 - 44 0.00144 - 45 0.00287 - 47 0.038 - - 15 70 16 0 - 0 0.0143 - 2 0.0286 - 4 0.0857 - 7 0.386 - 8 0.0143 - 18 0.0143 - 20 0.0143 - 28 0.0857 - 29 0.0571 - 30 0.0286 - 31 0.0143 - 33 0.0571 - 41 0.0286 - 42 0.0429 - 46 0.0143 - 47 0.114 - - 16 12 5 0 - 0 0.0833 - 4 0.333 - 7 0.25 - 28 0.167 - 47 0.167 - - 20 18 11 0 - 0 0.111 - 2 0.111 - 7 0.167 - 26 0.0556 - 28 0.0556 - 29 0.111 - 30 0.0556 - 32 0.0556 - 33 0.111 - 41 0.111 - 42 0.0556 - - 21 4 3 0 - 18 0.25 - 31 0.5 - 42 0.25 - - 31 5 3 0 - 0 0.4 - 7 0.4 - 33 0.2 - - 45 1 1 0 - 32 1 - - 46 1 1 0 - 45 1 - - 47 5237 31 0 - 0 0.0405 - 2 0.0258 - 3 0.00306 - 4 0.000573 - 7 0.409 - 8 0.00286 - 10 0.000191 - 13 0.00592 - 14 0.00573 - 15 0.0042 - 18 0.000382 - 19 0.000764 - 21 0.0084 - 22 0.000191 - 23 0.000191 - 24 0.00802 - 26 0.198 - 28 0.0571 - 29 0.0852 - 30 0.0223 - 31 0.0164 - 32 0.00726 - 33 0.0145 - 34 0.000955 - 37 0.000191 - 41 0.00955 - 42 0.0315 - 44 0.03 - 45 0.000382 - 46 0.000191 - 47 0.0107 - - 48 4 4 0 - 7 0.25 - 28 0.25 - 41 0.25 - 47 0.25 - - 55 19 8 0 - 0 0.105 - 2 0.158 - 7 0.368 - 26 0.105 - 28 0.0526 - 42 0.105 - 45 0.0526 - 47 0.0526 - - 56 14 6 0 - 4 0.0714 - 7 0.571 - 24 0.0714 - 29 0.0714 - 33 0.143 - 47 0.0714 - - 58 1 1 0 - 45 1 - - 60 15 4 0 - 7 0.8 - 8 0.0667 - 26 0.0667 - 31 0.0667 - - 62 60 9 3 - 7 0.367 - 18 0.0167 - 26 0.05 - 30 0.0167 - 34 0.0167 - 41 0.0167 - 42 0.05 - 45 0.383 - 47 0.0833 - - 2 10 3 0 - 7 0.7 - 26 0.2 - 30 0.1 - - 46 14 1 0 - 45 1 - - 47 13 6 0 - 7 0.308 - 34 0.0769 - 41 0.0769 - 42 0.154 - 45 0.154 - 47 0.231 - - 64 48 16 4 - 0 0.0833 - 2 0.0208 - 7 0.188 - 13 0.0208 - 19 0.0417 - 24 0.0208 - 26 0.0417 - 28 0.0833 - 29 0.0417 - 30 0.0208 - 31 0.0625 - 33 0.0625 - 41 0.208 - 45 0.0625 - 46 0.0208 - 47 0.0208 - - 2 5 4 0 - 7 0.4 - 28 0.2 - 29 0.2 - 45 0.2 - - 41 9 7 0 - 0 0.222 - 2 0.111 - 7 0.222 - 19 0.111 - 24 0.111 - 26 0.111 - 47 0.111 - - 42 11 8 0 - 0 0.0909 - 7 0.364 - 13 0.0909 - 26 0.0909 - 28 0.0909 - 29 0.0909 - 30 0.0909 - 33 0.0909 - - 47 22 9 0 - 0 0.0455 - 7 0.0455 - 19 0.0455 - 28 0.0455 - 31 0.136 - 33 0.0909 - 41 0.455 - 45 0.0909 - 46 0.0455 - - 68 206 22 3 - 0 0.00971 - 2 0.00971 - 3 0.00971 - 4 0.209 - 7 0.238 - 8 0.194 - 9 0.00485 - 13 0.0146 - 15 0.0291 - 18 0.034 - 20 0.0194 - 21 0.00485 - 26 0.0194 - 28 0.034 - 29 0.00485 - 30 0.0388 - 31 0.0146 - 32 0.00971 - 33 0.0291 - 41 0.00971 - 42 0.00971 - 47 0.0534 - - 8 17 5 0 - 7 0.294 - 8 0.529 - 15 0.0588 - 32 0.0588 - 47 0.0588 - - 13 71 12 0 - 2 0.0282 - 4 0.465 - 7 0.127 - 8 0.183 - 9 0.0141 - 13 0.0423 - 15 0.0423 - 26 0.0141 - 30 0.0141 - 33 0.0282 - 41 0.0141 - 47 0.0282 - - 14 113 19 0 - 0 0.0177 - 3 0.0177 - 4 0.0796 - 7 0.274 - 8 0.159 - 15 0.0177 - 18 0.0619 - 20 0.0354 - 21 0.00885 - 26 0.0265 - 28 0.0619 - 29 0.00885 - 30 0.0619 - 31 0.0265 - 32 0.00885 - 33 0.0354 - 41 0.00885 - 42 0.0177 - 47 0.0708 - - 69 5 3 0 - 4 0.2 - 18 0.4 - 45 0.4 - -56 3353 24 19 - 2 0.24 - 3 0.0289 - 4 0.15 - 6 0.000596 - 7 0.00209 - 8 0.17 - 9 0.00716 - 10 0.00388 - 13 0.0674 - 14 0.0155 - 15 0.0692 - 16 0.00418 - 18 0.0746 - 20 0.0435 - 21 0.00507 - 30 0.00537 - 31 0.00775 - 34 0.00119 - 36 0.00119 - 39 0.000596 - 40 0.000298 - 41 0.0537 - 42 0.000596 - 45 0.0474 - - 2 8 4 0 - 13 0.375 - 14 0.125 - 15 0.375 - 16 0.125 - - 3 22 9 1 - 2 0.318 - 4 0.136 - 8 0.182 - 15 0.0455 - 18 0.0909 - 20 0.0455 - 21 0.0455 - 39 0.0909 - 45 0.0455 - - 47 7 4 0 - 8 0.429 - 21 0.143 - 39 0.286 - 45 0.143 - - 4 10 4 0 - 2 0.1 - 21 0.1 - 41 0.1 - 45 0.7 - - 6 8 2 0 - 6 0.25 - 45 0.75 - - 7 3 1 0 - 15 1 - - 8 253 14 4 - 2 0.506 - 3 0.0356 - 4 0.107 - 7 0.00395 - 8 0.119 - 9 0.0119 - 13 0.00395 - 15 0.00791 - 18 0.0711 - 20 0.0395 - 30 0.00395 - 31 0.00395 - 41 0.0632 - 45 0.0237 - - 8 21 4 0 - 2 0.857 - 18 0.0476 - 41 0.0476 - 45 0.0476 - - 13 140 14 0 - 2 0.464 - 3 0.00714 - 4 0.15 - 7 0.00714 - 8 0.157 - 9 0.00714 - 13 0.00714 - 15 0.00714 - 18 0.0786 - 20 0.0357 - 30 0.00714 - 31 0.00714 - 41 0.0357 - 45 0.0286 - - 14 76 10 0 - 2 0.5 - 3 0.0526 - 4 0.0263 - 8 0.105 - 9 0.0263 - 15 0.0132 - 18 0.0789 - 20 0.0526 - 41 0.132 - 45 0.0132 - - 47 3 1 0 - 3 1 - - 13 596 17 4 - 2 0.201 - 3 0.0185 - 4 0.0839 - 8 0.309 - 9 0.00503 - 10 0.00336 - 13 0.173 - 14 0.0101 - 15 0.0436 - 18 0.0453 - 20 0.0185 - 30 0.0134 - 31 0.0101 - 34 0.00168 - 36 0.00168 - 41 0.052 - 45 0.0101 - - 13 101 12 0 - 2 0.337 - 3 0.0198 - 4 0.129 - 8 0.248 - 9 0.0099 - 10 0.0099 - 13 0.0891 - 15 0.0297 - 20 0.0198 - 31 0.0099 - 41 0.0891 - 45 0.0099 - - 14 94 9 0 - 2 0.479 - 4 0.0638 - 8 0.266 - 9 0.0106 - 13 0.0319 - 15 0.0106 - 20 0.0319 - 31 0.0213 - 41 0.0851 - - 30 4 1 0 - 2 1 - - 47 392 17 0 - 2 0.0893 - 3 0.023 - 4 0.0791 - 8 0.339 - 9 0.00255 - 10 0.00255 - 13 0.23 - 14 0.0153 - 15 0.0536 - 18 0.0689 - 20 0.0153 - 30 0.0204 - 31 0.00765 - 34 0.00255 - 36 0.00255 - 41 0.0357 - 45 0.0128 - - 14 320 16 1 - 2 0.0781 - 3 0.0375 - 4 0.0531 - 8 0.312 - 9 0.00625 - 10 0.00625 - 13 0.306 - 14 0.00313 - 15 0.0281 - 18 0.0188 - 20 0.0281 - 21 0.00938 - 30 0.00938 - 31 0.0281 - 41 0.0719 - 45 0.00313 - - 13 6 4 0 - 2 0.333 - 13 0.167 - 20 0.167 - 41 0.333 - - 15 301 16 6 - 2 0.159 - 3 0.0133 - 4 0.0897 - 7 0.0133 - 8 0.0399 - 9 0.00332 - 13 0.00664 - 14 0.0332 - 15 0.412 - 16 0.00997 - 18 0.0365 - 20 0.0133 - 21 0.00332 - 40 0.00332 - 41 0.0399 - 45 0.123 - - 7 3 3 0 - 2 0.333 - 15 0.333 - 40 0.333 - - 13 17 9 0 - 2 0.0588 - 4 0.294 - 8 0.235 - 14 0.0588 - 15 0.118 - 18 0.0588 - 20 0.0588 - 41 0.0588 - 45 0.0588 - - 14 6 6 0 - 2 0.167 - 3 0.167 - 4 0.167 - 8 0.167 - 9 0.167 - 15 0.167 - - 15 119 11 0 - 2 0.261 - 4 0.118 - 7 0.0084 - 8 0.0336 - 14 0.0672 - 15 0.252 - 16 0.0084 - 18 0.042 - 20 0.0084 - 41 0.0672 - 45 0.134 - - 16 9 5 0 - 2 0.222 - 15 0.222 - 18 0.111 - 20 0.222 - 45 0.222 - - 47 139 13 0 - 2 0.0719 - 3 0.0216 - 4 0.0432 - 7 0.0216 - 8 0.0216 - 13 0.0144 - 14 0.00719 - 15 0.612 - 16 0.0144 - 18 0.0216 - 21 0.00719 - 41 0.0216 - 45 0.122 - - 16 14 4 0 - 2 0.143 - 4 0.143 - 15 0.643 - 41 0.0714 - - 21 5 2 0 - 2 0.8 - 41 0.2 - - 30 11 4 0 - 2 0.273 - 8 0.273 - 13 0.364 - 20 0.0909 - - 31 9 3 0 - 2 0.556 - 4 0.222 - 21 0.222 - - 45 9 6 0 - 2 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 18 0.333 - 20 0.111 - - 47 1311 20 13 - 2 0.304 - 3 0.0297 - 4 0.188 - 7 0.00153 - 8 0.12 - 9 0.00763 - 10 0.00458 - 13 0.00763 - 14 0.0168 - 15 0.0259 - 16 0.00458 - 18 0.0931 - 20 0.0549 - 21 0.00458 - 30 0.00305 - 31 0.00534 - 34 0.00153 - 36 0.00153 - 41 0.0686 - 45 0.0572 - - 4 9 3 0 - 2 0.111 - 41 0.111 - 45 0.778 - - 6 6 1 0 - 45 1 - - 8 224 12 0 - 2 0.571 - 3 0.0268 - 4 0.116 - 7 0.00446 - 8 0.0402 - 9 0.00893 - 15 0.00446 - 18 0.0804 - 20 0.0446 - 30 0.00446 - 41 0.0714 - 45 0.0268 - - 13 298 15 0 - 2 0.396 - 3 0.00671 - 4 0.154 - 8 0.134 - 9 0.00671 - 10 0.00336 - 13 0.00336 - 15 0.0302 - 18 0.0906 - 20 0.0369 - 31 0.00671 - 34 0.00336 - 36 0.00336 - 41 0.104 - 45 0.0201 - - 14 117 13 0 - 2 0.197 - 3 0.0855 - 4 0.12 - 8 0.197 - 9 0.00855 - 10 0.0171 - 13 0.0342 - 15 0.0256 - 18 0.0342 - 20 0.0598 - 30 0.00855 - 31 0.0171 - 41 0.197 - - 15 154 13 0 - 2 0.292 - 4 0.162 - 7 0.00649 - 8 0.039 - 13 0.00649 - 14 0.0649 - 15 0.026 - 16 0.013 - 18 0.0455 - 20 0.026 - 21 0.00649 - 41 0.0779 - 45 0.234 - - 21 5 2 0 - 2 0.8 - 41 0.2 - - 31 9 3 0 - 2 0.556 - 4 0.222 - 21 0.222 - - 45 9 6 0 - 2 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 18 0.333 - 20 0.111 - - 48 10 4 0 - 2 0.6 - 4 0.2 - 18 0.1 - 20 0.1 - - 55 17 5 0 - 2 0.412 - 3 0.0588 - 4 0.0588 - 18 0.0588 - 45 0.412 - - 56 414 19 0 - 2 0.101 - 3 0.0459 - 4 0.297 - 8 0.181 - 9 0.0121 - 10 0.00725 - 13 0.00483 - 14 0.0266 - 15 0.0411 - 16 0.00966 - 18 0.14 - 20 0.087 - 21 0.00725 - 30 0.00483 - 31 0.00725 - 34 0.00242 - 36 0.00242 - 41 0.0121 - 45 0.00966 - - 62 2 1 0 - 45 1 - - 48 11 5 0 - 2 0.545 - 4 0.182 - 8 0.0909 - 18 0.0909 - 20 0.0909 - - 55 22 6 0 - 2 0.318 - 3 0.0909 - 4 0.0455 - 18 0.0455 - 42 0.0909 - 45 0.409 - - 56 419 19 0 - 2 0.1 - 3 0.0453 - 4 0.294 - 8 0.179 - 9 0.0119 - 10 0.00716 - 13 0.00477 - 14 0.0263 - 15 0.0406 - 16 0.00955 - 18 0.138 - 20 0.0859 - 21 0.00716 - 30 0.00477 - 31 0.00716 - 34 0.00239 - 36 0.00239 - 41 0.0119 - 45 0.0215 - - 62 2 1 0 - 45 1 - -57 191766 42 26 - 0 0.0127 - 1 6.26e-05 - 2 0.00876 - 3 0.0413 - 4 0.00784 - 6 9.91e-05 - 7 0.0115 - 8 0.0343 - 9 0.00545 - 10 0.00283 - 12 0.000167 - 13 0.352 - 14 0.15 - 15 0.0378 - 16 0.00175 - 18 0.000245 - 19 0.00638 - 20 5.21e-06 - 21 0.0315 - 22 0.00242 - 23 0.000209 - 24 0.00711 - 25 3.65e-05 - 26 0.000136 - 27 7.3e-05 - 28 0.0277 - 29 0.0264 - 30 0.0277 - 31 0.0819 - 32 0.00613 - 33 0.00986 - 34 0.000375 - 35 0.000261 - 37 9.39e-05 - 40 4.17e-05 - 41 0.0447 - 42 0.00376 - 43 0.00162 - 44 0.00109 - 45 0.00293 - 46 0.00618 - 47 0.0445 - - 2 77 17 3 - 0 0.013 - 3 0.0519 - 4 0.0519 - 8 0.013 - 9 0.013 - 13 0.338 - 14 0.0779 - 15 0.026 - 18 0.013 - 19 0.013 - 21 0.0519 - 24 0.026 - 28 0.026 - 31 0.013 - 41 0.221 - 42 0.026 - 46 0.026 - - 7 4 3 0 - 24 0.25 - 31 0.25 - 41 0.5 - - 47 57 10 0 - 3 0.0702 - 4 0.0702 - 8 0.0175 - 13 0.439 - 14 0.0702 - 15 0.0351 - 18 0.0175 - 21 0.0702 - 41 0.193 - 42 0.0175 - - 57 14 10 0 - 0 0.0714 - 9 0.0714 - 13 0.0714 - 14 0.143 - 19 0.0714 - 24 0.0714 - 28 0.0714 - 41 0.286 - 42 0.0714 - 46 0.0714 - - 4 29 13 2 - 0 0.103 - 7 0.069 - 8 0.103 - 13 0.0345 - 14 0.103 - 24 0.069 - 28 0.0345 - 29 0.0345 - 32 0.069 - 33 0.103 - 41 0.207 - 46 0.0345 - 47 0.0345 - - 7 18 9 0 - 0 0.111 - 7 0.111 - 14 0.0556 - 24 0.111 - 29 0.0556 - 32 0.0556 - 33 0.167 - 41 0.278 - 47 0.0556 - - 57 11 8 0 - 0 0.0909 - 8 0.273 - 13 0.0909 - 14 0.182 - 28 0.0909 - 32 0.0909 - 41 0.0909 - 46 0.0909 - - 6 16 6 1 - 3 0.0625 - 6 0.188 - 13 0.188 - 15 0.188 - 41 0.188 - 44 0.188 - - 6 3 1 0 - 44 1 - - 7 83565 41 0 - 0 0.0129 - 1 7.18e-05 - 2 0.00859 - 3 0.0374 - 4 0.00881 - 6 7.18e-05 - 7 0.0117 - 8 0.0334 - 9 0.00596 - 10 0.00335 - 12 0.000168 - 13 0.369 - 14 0.156 - 15 0.0407 - 16 0.00188 - 18 0.000239 - 19 0.006 - 21 0.0348 - 22 0.00268 - 23 0.000215 - 24 0.00704 - 25 2.39e-05 - 26 0.000132 - 27 1.2e-05 - 28 0.0257 - 29 0.0221 - 30 0.0204 - 31 0.0807 - 32 0.00594 - 33 0.00902 - 34 0.000419 - 35 0.000299 - 37 8.38e-05 - 40 3.59e-05 - 41 0.0318 - 42 0.00281 - 43 0.0017 - 44 0.00107 - 45 0.00294 - 46 0.0061 - 47 0.0473 - - 8 392 18 5 - 0 0.0281 - 2 0.00255 - 3 0.00255 - 8 0.0051 - 13 0.0765 - 14 0.436 - 20 0.00255 - 21 0.0179 - 24 0.00255 - 29 0.00255 - 30 0.00255 - 31 0.00255 - 41 0.342 - 42 0.0281 - 44 0.0051 - 45 0.0051 - 46 0.0332 - 47 0.0051 - - 7 342 7 0 - 8 0.00292 - 13 0.0614 - 14 0.488 - 41 0.377 - 42 0.0322 - 44 0.00585 - 46 0.0322 - - 14 1 1 0 - 20 1 - - 26 12 8 0 - 3 0.0833 - 13 0.167 - 14 0.0833 - 21 0.0833 - 31 0.0833 - 41 0.25 - 45 0.167 - 47 0.0833 - - 47 25 9 0 - 0 0.44 - 2 0.04 - 8 0.04 - 13 0.12 - 14 0.12 - 21 0.12 - 24 0.04 - 29 0.04 - 30 0.04 - - 57 10 5 0 - 13 0.3 - 21 0.3 - 41 0.2 - 46 0.1 - 47 0.1 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 8 5 0 - 3 0.125 - 8 0.125 - 13 0.5 - 28 0.125 - 41 0.125 - - 15 11 5 0 - 15 0.455 - 16 0.0909 - 42 0.0909 - 45 0.273 - 47 0.0909 - - 21 467 30 5 - 0 0.0428 - 2 0.0428 - 3 0.00214 - 4 0.00214 - 7 0.0171 - 8 0.03 - 10 0.00214 - 13 0.107 - 14 0.122 - 15 0.0107 - 18 0.00428 - 19 0.0214 - 21 0.0685 - 22 0.00214 - 24 0.00214 - 28 0.0364 - 29 0.0321 - 30 0.0193 - 31 0.0664 - 32 0.00642 - 33 0.0236 - 34 0.00214 - 37 0.00214 - 41 0.165 - 42 0.0257 - 43 0.00428 - 44 0.00857 - 45 0.0193 - 46 0.00642 - 47 0.105 - - 7 289 25 0 - 0 0.0346 - 2 0.0554 - 3 0.00346 - 7 0.0138 - 8 0.0381 - 10 0.00346 - 13 0.111 - 14 0.135 - 15 0.0138 - 19 0.00692 - 21 0.0554 - 22 0.00346 - 28 0.0208 - 29 0.0138 - 31 0.0727 - 32 0.00692 - 33 0.00346 - 37 0.00346 - 41 0.221 - 42 0.0311 - 43 0.00692 - 44 0.00346 - 45 0.0138 - 46 0.00692 - 47 0.121 - - 21 10 7 0 - 0 0.1 - 13 0.1 - 14 0.2 - 29 0.1 - 41 0.3 - 44 0.1 - 47 0.1 - - 30 4 3 0 - 41 0.5 - 44 0.25 - 47 0.25 - - 47 90 23 0 - 0 0.0556 - 2 0.0333 - 7 0.0444 - 8 0.0111 - 13 0.133 - 14 0.1 - 15 0.0111 - 18 0.0111 - 19 0.0667 - 21 0.144 - 24 0.0111 - 28 0.0444 - 29 0.0444 - 30 0.0556 - 31 0.0667 - 32 0.0111 - 33 0.0667 - 34 0.0111 - 41 0.0111 - 42 0.0111 - 45 0.0111 - 46 0.0111 - 47 0.0333 - - 57 62 18 0 - 0 0.0645 - 4 0.0161 - 8 0.0323 - 13 0.0484 - 14 0.0968 - 18 0.0161 - 19 0.0323 - 21 0.0323 - 28 0.0968 - 29 0.0968 - 30 0.0645 - 31 0.0645 - 33 0.0645 - 41 0.0645 - 42 0.0323 - 44 0.0161 - 45 0.0323 - 47 0.129 - - 22 7 7 0 - 0 0.143 - 21 0.143 - 22 0.143 - 30 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 24 55 11 0 - 0 0.0182 - 13 0.0909 - 14 0.0545 - 19 0.0545 - 28 0.2 - 29 0.109 - 30 0.145 - 31 0.236 - 32 0.0182 - 33 0.0545 - 41 0.0182 - - 26 8661 35 0 - 0 0.00185 - 2 0.00496 - 3 0.0928 - 4 0.00127 - 6 0.000231 - 7 0.00947 - 8 0.068 - 9 0.00266 - 10 0.000115 - 13 0.286 - 14 0.103 - 15 0.02 - 16 0.000924 - 19 0.00935 - 21 0.0461 - 22 0.00173 - 23 0.000231 - 24 0.00877 - 26 0.000115 - 27 0.000693 - 28 0.0462 - 29 0.0701 - 30 0.076 - 31 0.0876 - 32 0.00774 - 33 0.0162 - 35 0.000115 - 40 0.000115 - 41 0.0264 - 42 0.00196 - 43 0.00127 - 44 0.000231 - 45 0.000462 - 46 0.00531 - 47 0.00231 - - 28 3 3 0 - 2 0.333 - 14 0.333 - 41 0.333 - - 29 2 1 0 - 41 1 - - 30 1062 21 2 - 2 0.00847 - 3 0.00659 - 7 0.00282 - 8 0.00282 - 13 0.0574 - 14 0.0433 - 15 0.0122 - 16 0.00188 - 19 0.00282 - 21 0.0104 - 22 0.000942 - 28 0.000942 - 29 0.00188 - 30 0.000942 - 31 0.0132 - 41 0.65 - 42 0.0377 - 44 0.00188 - 45 0.00282 - 46 0.0113 - 47 0.13 - - 47 613 20 0 - 2 0.00326 - 3 0.00979 - 7 0.00326 - 8 0.00489 - 13 0.0897 - 14 0.0669 - 15 0.0212 - 16 0.00326 - 19 0.00326 - 21 0.0179 - 22 0.00163 - 28 0.00163 - 29 0.00326 - 31 0.0179 - 41 0.622 - 42 0.0636 - 44 0.00326 - 45 0.00163 - 46 0.00653 - 47 0.0555 - - 57 448 12 0 - 2 0.0156 - 3 0.00223 - 7 0.00223 - 13 0.0134 - 14 0.0112 - 19 0.00223 - 30 0.00223 - 31 0.0067 - 41 0.69 - 45 0.00446 - 46 0.0179 - 47 0.232 - - 31 361 21 3 - 2 0.0166 - 3 0.036 - 4 0.00554 - 7 0.0166 - 8 0.036 - 9 0.00277 - 13 0.108 - 14 0.0526 - 15 0.00277 - 21 0.0139 - 28 0.00277 - 30 0.00277 - 31 0.0139 - 32 0.00277 - 41 0.593 - 42 0.00554 - 43 0.00277 - 44 0.00277 - 45 0.0111 - 46 0.00277 - 47 0.0693 - - 7 2 1 0 - 14 1 - - 47 57 12 0 - 2 0.105 - 4 0.0175 - 7 0.0351 - 8 0.0702 - 13 0.0351 - 21 0.0351 - 28 0.0175 - 41 0.404 - 42 0.0175 - 44 0.0175 - 45 0.0526 - 47 0.193 - - 57 302 18 0 - 3 0.043 - 4 0.00331 - 7 0.0132 - 8 0.0298 - 9 0.00331 - 13 0.123 - 14 0.0563 - 15 0.00331 - 21 0.00993 - 30 0.00331 - 31 0.0166 - 32 0.00331 - 41 0.632 - 42 0.00331 - 43 0.00331 - 45 0.00331 - 46 0.00331 - 47 0.0464 - - 41 8 6 0 - 2 0.125 - 13 0.125 - 14 0.125 - 15 0.125 - 18 0.25 - 21 0.25 - - 42 3 1 0 - 25 1 - - 45 10 7 0 - 0 0.2 - 3 0.1 - 13 0.2 - 14 0.1 - 19 0.1 - 21 0.2 - 47 0.1 - - 46 2 1 0 - 21 1 - - 47 94690 41 22 - 0 0.0128 - 1 6.34e-05 - 2 0.00877 - 3 0.0418 - 4 0.00773 - 6 8.45e-05 - 7 0.0116 - 8 0.0327 - 9 0.00546 - 10 0.00276 - 12 0.000169 - 13 0.357 - 14 0.151 - 15 0.0383 - 16 0.00177 - 18 0.000232 - 19 0.00646 - 21 0.0268 - 22 0.00233 - 23 0.000211 - 24 0.0072 - 25 2.11e-05 - 26 0.000137 - 27 7.39e-05 - 28 0.0281 - 29 0.0267 - 30 0.0257 - 31 0.0814 - 32 0.00621 - 33 0.00998 - 34 0.00038 - 35 0.000253 - 37 9.5e-05 - 40 4.22e-05 - 41 0.0452 - 42 0.00379 - 43 0.00163 - 44 0.0011 - 45 0.00291 - 46 0.00625 - 47 0.045 - - 2 75 16 0 - 0 0.0133 - 3 0.0533 - 4 0.0533 - 8 0.0133 - 9 0.0133 - 13 0.347 - 14 0.08 - 15 0.0267 - 19 0.0133 - 21 0.0533 - 24 0.0267 - 28 0.0133 - 31 0.0133 - 41 0.227 - 42 0.0267 - 46 0.0267 - - 4 29 13 0 - 0 0.103 - 7 0.069 - 8 0.103 - 13 0.0345 - 14 0.103 - 24 0.069 - 28 0.0345 - 29 0.0345 - 32 0.069 - 33 0.103 - 41 0.207 - 46 0.0345 - 47 0.0345 - - 6 13 5 0 - 3 0.0769 - 13 0.231 - 15 0.231 - 41 0.231 - 44 0.231 - - 7 82196 41 0 - 0 0.0132 - 1 7.3e-05 - 2 0.00869 - 3 0.0379 - 4 0.00861 - 6 7.3e-05 - 7 0.0119 - 8 0.0297 - 9 0.00592 - 10 0.00316 - 12 0.00017 - 13 0.375 - 14 0.158 - 15 0.0413 - 16 0.00191 - 18 0.000243 - 19 0.0061 - 21 0.0258 - 22 0.00248 - 23 0.000219 - 24 0.00715 - 25 2.43e-05 - 26 0.000134 - 27 1.22e-05 - 28 0.0261 - 29 0.0225 - 30 0.0207 - 31 0.082 - 32 0.00603 - 33 0.00917 - 34 0.000426 - 35 0.00028 - 37 8.52e-05 - 40 3.65e-05 - 41 0.0323 - 42 0.00286 - 43 0.0017 - 44 0.00107 - 45 0.00293 - 46 0.00618 - 47 0.0481 - - 8 387 17 0 - 0 0.0284 - 2 0.00258 - 3 0.00258 - 8 0.00258 - 13 0.0775 - 14 0.442 - 21 0.0103 - 24 0.00258 - 29 0.00258 - 30 0.00258 - 31 0.00258 - 41 0.346 - 42 0.0284 - 44 0.00517 - 45 0.00517 - 46 0.0336 - 47 0.00517 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 7 5 0 - 3 0.143 - 8 0.143 - 13 0.429 - 28 0.143 - 41 0.143 - - 15 11 5 0 - 15 0.455 - 16 0.0909 - 42 0.0909 - 45 0.273 - 47 0.0909 - - 21 439 28 0 - 0 0.0456 - 2 0.0456 - 3 0.00228 - 4 0.00228 - 7 0.0182 - 8 0.0296 - 13 0.114 - 14 0.125 - 15 0.0114 - 18 0.00456 - 19 0.0228 - 21 0.0296 - 24 0.00228 - 28 0.0387 - 29 0.0342 - 30 0.0205 - 31 0.0706 - 32 0.00683 - 33 0.0251 - 34 0.00228 - 37 0.00228 - 41 0.173 - 42 0.0273 - 43 0.00456 - 44 0.00911 - 45 0.0137 - 46 0.00683 - 47 0.112 - - 22 7 7 0 - 0 0.143 - 21 0.143 - 22 0.143 - 30 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 24 55 11 0 - 0 0.0182 - 13 0.0909 - 14 0.0545 - 19 0.0545 - 28 0.2 - 29 0.109 - 30 0.145 - 31 0.236 - 32 0.0182 - 33 0.0545 - 41 0.0182 - - 26 8601 35 0 - 0 0.00186 - 2 0.00488 - 3 0.0935 - 4 0.00128 - 6 0.000233 - 7 0.00953 - 8 0.0671 - 9 0.00267 - 10 0.000116 - 13 0.288 - 14 0.103 - 15 0.0201 - 16 0.00093 - 19 0.00942 - 21 0.0414 - 22 0.00163 - 23 0.000233 - 24 0.00884 - 26 0.000116 - 27 0.000698 - 28 0.0465 - 29 0.0706 - 30 0.0765 - 31 0.0882 - 32 0.00779 - 33 0.0163 - 35 0.000116 - 40 0.000116 - 41 0.0265 - 42 0.00198 - 43 0.00128 - 44 0.000233 - 45 0.000465 - 46 0.00535 - 47 0.00233 - - 29 2 1 0 - 41 1 - - 30 1055 21 0 - 2 0.00853 - 3 0.00664 - 7 0.00284 - 8 0.00284 - 13 0.0578 - 14 0.0436 - 15 0.0123 - 16 0.0019 - 19 0.00284 - 21 0.00379 - 22 0.000948 - 28 0.000948 - 29 0.0019 - 30 0.000948 - 31 0.0133 - 41 0.654 - 42 0.0379 - 44 0.0019 - 45 0.00284 - 46 0.0114 - 47 0.131 - - 31 358 21 0 - 2 0.0168 - 3 0.0363 - 4 0.00559 - 7 0.0168 - 8 0.0363 - 9 0.00279 - 13 0.109 - 14 0.0531 - 15 0.00279 - 21 0.00559 - 28 0.00279 - 30 0.00279 - 31 0.014 - 32 0.00279 - 41 0.598 - 42 0.00559 - 43 0.00279 - 44 0.00279 - 45 0.0112 - 46 0.00279 - 47 0.0698 - - 41 2 2 0 - 2 0.5 - 15 0.5 - - 45 9 7 0 - 0 0.222 - 3 0.111 - 13 0.222 - 14 0.111 - 19 0.111 - 21 0.111 - 47 0.111 - - 49 623 28 0 - 0 0.0674 - 2 0.0369 - 3 0.00321 - 4 0.00642 - 7 0.00482 - 8 0.0161 - 9 0.00161 - 12 0.00161 - 13 0.114 - 14 0.0867 - 15 0.0112 - 19 0.00963 - 21 0.0321 - 22 0.00161 - 24 0.00963 - 28 0.0161 - 29 0.0289 - 30 0.0144 - 31 0.0754 - 32 0.00482 - 33 0.0144 - 37 0.00161 - 41 0.319 - 42 0.0385 - 44 0.00321 - 45 0.0161 - 46 0.00482 - 47 0.0594 - - 50 17 10 0 - 8 0.176 - 13 0.118 - 14 0.0588 - 24 0.0588 - 28 0.0588 - 30 0.0588 - 31 0.118 - 33 0.0588 - 41 0.235 - 45 0.0588 - - 55 135 19 0 - 0 0.141 - 2 0.0593 - 7 0.133 - 8 0.0148 - 13 0.0815 - 14 0.0519 - 15 0.00741 - 21 0.037 - 24 0.00741 - 26 0.00741 - 28 0.0444 - 29 0.0444 - 31 0.0741 - 32 0.00741 - 33 0.0296 - 41 0.156 - 42 0.037 - 46 0.00741 - 47 0.0593 - - 57 656 25 0 - 0 0.0244 - 2 0.00915 - 3 0.00457 - 4 0.00305 - 7 0.00457 - 8 0.0457 - 9 0.0061 - 12 0.00152 - 13 0.245 - 14 0.148 - 15 0.0259 - 19 0.00915 - 21 0.0152 - 24 0.0061 - 28 0.0884 - 29 0.0381 - 30 0.061 - 31 0.123 - 32 0.0213 - 33 0.0274 - 41 0.0396 - 42 0.0152 - 45 0.00305 - 46 0.00305 - 47 0.0305 - - 74 5 2 0 - 41 0.2 - 47 0.8 - - 49 628 28 4 - 0 0.0669 - 2 0.0366 - 3 0.00318 - 4 0.00637 - 7 0.00478 - 8 0.0175 - 9 0.00159 - 12 0.00159 - 13 0.113 - 14 0.086 - 15 0.0111 - 19 0.00955 - 21 0.035 - 22 0.00159 - 24 0.00955 - 28 0.0159 - 29 0.0287 - 30 0.0143 - 31 0.0748 - 32 0.00478 - 33 0.0143 - 37 0.00159 - 41 0.318 - 42 0.0382 - 44 0.00318 - 45 0.0175 - 46 0.00478 - 47 0.0589 - - 21 11 6 0 - 0 0.273 - 2 0.0909 - 13 0.0909 - 14 0.182 - 21 0.0909 - 41 0.273 - - 26 36 15 0 - 0 0.0278 - 2 0.0833 - 8 0.0833 - 13 0.306 - 14 0.0833 - 15 0.0278 - 19 0.0278 - 21 0.0556 - 28 0.0278 - 29 0.0556 - 30 0.0278 - 31 0.0833 - 33 0.0278 - 41 0.0556 - 44 0.0278 - - 48 1 1 0 - 7 1 - - 57 6 3 0 - 21 0.333 - 33 0.167 - 42 0.5 - - 50 17 10 0 - 8 0.176 - 13 0.118 - 14 0.0588 - 24 0.0588 - 28 0.0588 - 30 0.0588 - 31 0.118 - 33 0.0588 - 41 0.235 - 45 0.0588 - - 55 142 21 4 - 0 0.134 - 2 0.0563 - 3 0.00704 - 7 0.141 - 8 0.0141 - 13 0.0775 - 14 0.0493 - 15 0.00704 - 21 0.0423 - 24 0.00704 - 26 0.00704 - 28 0.0423 - 29 0.0423 - 30 0.00704 - 31 0.0704 - 32 0.00704 - 33 0.0282 - 41 0.162 - 42 0.0352 - 46 0.00704 - 47 0.0563 - - 41 2 2 0 - 30 0.5 - 41 0.5 - - 47 5 3 0 - 2 0.2 - 3 0.2 - 7 0.6 - - 55 3 2 0 - 8 0.333 - 41 0.667 - - 57 5 4 0 - 2 0.2 - 13 0.2 - 26 0.2 - 41 0.4 - - 57 1537 25 1 - 0 0.0104 - 2 0.013 - 3 0.00195 - 4 0.00846 - 7 0.00195 - 8 0.028 - 9 0.0026 - 12 0.000651 - 13 0.108 - 14 0.0638 - 15 0.0111 - 19 0.0039 - 21 0.0592 - 24 0.0026 - 28 0.0377 - 29 0.0163 - 30 0.318 - 31 0.249 - 32 0.00911 - 33 0.0117 - 41 0.0176 - 42 0.00846 - 45 0.00195 - 46 0.0013 - 47 0.013 - - 7 8 4 0 - 0 0.125 - 4 0.125 - 31 0.125 - 41 0.625 - - 74 5 2 0 - 41 0.2 - 47 0.8 - -58 7648 40 29 - 0 0.00628 - 2 0.0209 - 3 0.0234 - 4 0.0068 - 6 0.00157 - 7 0.0111 - 8 0.028 - 9 0.00144 - 10 0.00105 - 11 0.000262 - 12 0.00144 - 13 0.168 - 14 0.125 - 15 0.117 - 16 0.00405 - 18 0.00131 - 19 0.00902 - 20 0.000785 - 21 0.0369 - 22 0.00105 - 23 0.000262 - 24 0.00105 - 26 0.000785 - 28 0.00732 - 29 0.0034 - 30 0.00288 - 31 0.011 - 32 0.00366 - 33 0.00484 - 34 0.00209 - 35 0.000523 - 37 0.00235 - 40 0.0123 - 41 0.151 - 42 0.0554 - 43 0.000523 - 44 0.132 - 45 0.00392 - 46 0.036 - 47 0.00314 - - 0 2 1 0 - 2 1 - - 2 101 4 0 - 15 0.0099 - 41 0.327 - 42 0.406 - 44 0.257 - - 4 1 1 0 - 28 1 - - 7 6 3 0 - 41 0.333 - 42 0.167 - 44 0.5 - - 8 16 2 0 - 2 0.125 - 44 0.875 - - 13 22 5 0 - 2 0.0909 - 8 0.136 - 13 0.182 - 15 0.0455 - 44 0.545 - - 15 36 5 0 - 2 0.0556 - 15 0.139 - 41 0.0278 - 44 0.75 - 45 0.0278 - - 21 14 6 0 - 2 0.214 - 7 0.143 - 12 0.0714 - 41 0.143 - 42 0.286 - 44 0.143 - - 28 3 2 0 - 2 0.333 - 44 0.667 - - 32 2 1 0 - 2 1 - - 41 1008 32 9 - 0 0.0129 - 2 0.0595 - 3 0.0188 - 4 0.0109 - 6 0.00198 - 7 0.0218 - 8 0.0506 - 9 0.00298 - 10 0.000992 - 11 0.000992 - 12 0.00198 - 13 0.309 - 14 0.143 - 15 0.143 - 16 0.00397 - 18 0.00198 - 19 0.0139 - 21 0.101 - 22 0.00397 - 23 0.000992 - 24 0.00397 - 26 0.00198 - 28 0.0109 - 29 0.00893 - 30 0.00496 - 31 0.0268 - 32 0.00794 - 33 0.0129 - 34 0.00694 - 35 0.00198 - 37 0.00794 - 43 0.000992 - - 2 23 12 0 - 0 0.0435 - 3 0.0435 - 4 0.0435 - 6 0.0435 - 8 0.087 - 13 0.261 - 14 0.087 - 15 0.087 - 21 0.087 - 31 0.087 - 32 0.0435 - 33 0.087 - - 46 99 15 0 - 0 0.0202 - 4 0.0202 - 7 0.0202 - 8 0.121 - 13 0.424 - 14 0.152 - 15 0.0606 - 16 0.0101 - 19 0.0303 - 21 0.0505 - 24 0.0101 - 28 0.0303 - 31 0.0202 - 32 0.0202 - 43 0.0101 - - 49 51 12 0 - 0 0.0196 - 2 0.294 - 3 0.0196 - 7 0.0588 - 8 0.0784 - 13 0.216 - 14 0.118 - 15 0.0588 - 21 0.0588 - 28 0.0196 - 29 0.0196 - 31 0.0392 - - 52 6 3 0 - 7 0.5 - 13 0.333 - 30 0.167 - - 55 139 10 0 - 0 0.0144 - 3 0.0216 - 8 0.0144 - 10 0.00719 - 13 0.122 - 14 0.129 - 15 0.619 - 21 0.0576 - 31 0.00719 - 33 0.00719 - - 57 77 19 0 - 0 0.013 - 2 0.26 - 7 0.0649 - 8 0.039 - 13 0.221 - 14 0.104 - 15 0.0779 - 16 0.039 - 21 0.026 - 22 0.013 - 26 0.013 - 28 0.013 - 29 0.013 - 30 0.013 - 31 0.013 - 33 0.026 - 34 0.013 - 35 0.013 - 37 0.026 - - 62 507 29 0 - 0 0.00789 - 2 0.0375 - 3 0.0256 - 4 0.0158 - 6 0.00197 - 7 0.00986 - 8 0.0375 - 9 0.00592 - 11 0.00197 - 12 0.00197 - 13 0.349 - 14 0.168 - 15 0.0671 - 18 0.00394 - 19 0.0158 - 21 0.142 - 22 0.00592 - 23 0.00197 - 24 0.00592 - 26 0.00197 - 28 0.00789 - 29 0.00986 - 30 0.00394 - 31 0.0355 - 32 0.00789 - 33 0.00986 - 34 0.00592 - 35 0.00197 - 37 0.00986 - - 64 50 16 0 - 0 0.02 - 2 0.08 - 7 0.04 - 8 0.12 - 12 0.02 - 13 0.32 - 14 0.06 - 15 0.04 - 19 0.02 - 21 0.06 - 28 0.04 - 29 0.02 - 32 0.02 - 33 0.06 - 34 0.06 - 37 0.02 - - 66 45 12 0 - 2 0.0444 - 3 0.0222 - 7 0.0444 - 8 0.0222 - 13 0.378 - 14 0.156 - 15 0.0889 - 19 0.0444 - 21 0.133 - 29 0.0222 - 30 0.0222 - 31 0.0222 - - 42 412 25 9 - 0 0.00971 - 2 0.0146 - 3 0.034 - 4 0.00485 - 7 0.0121 - 8 0.0558 - 9 0.00243 - 10 0.00243 - 12 0.00243 - 13 0.354 - 14 0.26 - 15 0.102 - 16 0.00971 - 18 0.00243 - 19 0.00485 - 21 0.034 - 26 0.00243 - 28 0.017 - 29 0.00485 - 30 0.00485 - 31 0.0243 - 32 0.00971 - 33 0.00728 - 43 0.00243 - 46 0.0218 - - 2 40 13 0 - 3 0.05 - 4 0.025 - 8 0.125 - 13 0.325 - 14 0.025 - 15 0.075 - 21 0.1 - 28 0.025 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.075 - 46 0.025 - - 48 11 7 0 - 2 0.0909 - 3 0.0909 - 7 0.0909 - 8 0.0909 - 13 0.182 - 14 0.364 - 15 0.0909 - - 49 27 10 0 - 0 0.037 - 3 0.037 - 8 0.0741 - 12 0.037 - 13 0.481 - 14 0.148 - 15 0.0741 - 18 0.037 - 21 0.037 - 31 0.037 - - 51 3 3 0 - 13 0.333 - 15 0.333 - 26 0.333 - - 55 119 16 0 - 0 0.0168 - 2 0.0084 - 3 0.042 - 7 0.0084 - 8 0.0168 - 9 0.0084 - 13 0.345 - 14 0.319 - 15 0.118 - 16 0.0168 - 19 0.0084 - 21 0.0336 - 28 0.0168 - 31 0.0084 - 43 0.0084 - 46 0.0252 - - 57 81 15 0 - 0 0.0123 - 2 0.037 - 3 0.0617 - 4 0.0123 - 7 0.0247 - 8 0.0247 - 10 0.0123 - 13 0.309 - 14 0.321 - 15 0.037 - 21 0.0494 - 28 0.0123 - 31 0.037 - 33 0.0123 - 46 0.037 - - 62 65 12 0 - 2 0.0154 - 7 0.0154 - 8 0.138 - 13 0.385 - 14 0.277 - 15 0.0308 - 19 0.0154 - 21 0.0154 - 28 0.0154 - 31 0.0462 - 33 0.0308 - 46 0.0154 - - 64 38 8 0 - 8 0.0263 - 13 0.368 - 14 0.158 - 15 0.316 - 16 0.0526 - 28 0.0263 - 32 0.0263 - 46 0.0263 - - 69 15 3 0 - 13 0.467 - 14 0.333 - 15 0.2 - - 44 1007 29 18 - 0 0.00794 - 2 0.000993 - 3 0.0566 - 4 0.0119 - 6 0.00397 - 7 0.0129 - 8 0.0298 - 9 0.000993 - 10 0.000993 - 12 0.00199 - 13 0.183 - 14 0.229 - 15 0.291 - 16 0.00695 - 18 0.00199 - 19 0.0139 - 20 0.00298 - 21 0.00894 - 28 0.00894 - 29 0.00199 - 30 0.00397 - 31 0.00497 - 32 0.00199 - 33 0.00199 - 37 0.000993 - 40 0.0467 - 41 0.00993 - 46 0.0437 - 47 0.00894 - - 2 26 9 0 - 0 0.0769 - 6 0.0385 - 13 0.423 - 14 0.192 - 15 0.0769 - 16 0.0385 - 28 0.0385 - 30 0.0769 - 31 0.0385 - - 8 14 7 0 - 4 0.214 - 7 0.214 - 8 0.214 - 9 0.0714 - 13 0.143 - 15 0.0714 - 40 0.0714 - - 9 1 1 0 - 20 1 - - 13 12 7 0 - 3 0.167 - 4 0.333 - 7 0.167 - 10 0.0833 - 13 0.0833 - 15 0.0833 - 31 0.0833 - - 14 2 2 0 - 8 0.5 - 41 0.5 - - 15 27 6 0 - 4 0.111 - 15 0.667 - 16 0.037 - 19 0.0741 - 28 0.037 - 40 0.0741 - - 21 2 2 0 - 0 0.5 - 14 0.5 - - 28 2 1 0 - 28 1 - - 45 24 5 0 - 13 0.375 - 14 0.0417 - 15 0.458 - 18 0.0417 - 46 0.0833 - - 48 24 10 0 - 0 0.0417 - 2 0.0417 - 3 0.25 - 4 0.0417 - 8 0.125 - 13 0.333 - 14 0.0417 - 15 0.0417 - 16 0.0417 - 40 0.0417 - - 49 12 7 0 - 0 0.0833 - 8 0.25 - 12 0.167 - 13 0.25 - 15 0.0833 - 33 0.0833 - 47 0.0833 - - 51 3 3 0 - 8 0.333 - 15 0.333 - 47 0.333 - - 52 5 2 0 - 13 0.8 - 21 0.2 - - 55 676 20 0 - 3 0.0621 - 4 0.00148 - 6 0.00444 - 7 0.00888 - 8 0.00888 - 13 0.129 - 14 0.266 - 15 0.354 - 16 0.00592 - 18 0.00148 - 19 0.0163 - 20 0.00296 - 21 0.00296 - 28 0.00296 - 29 0.00148 - 31 0.00148 - 40 0.0636 - 41 0.00888 - 46 0.0562 - 47 0.00148 - - 57 52 14 0 - 0 0.0192 - 3 0.0192 - 8 0.0962 - 13 0.385 - 14 0.25 - 15 0.0385 - 19 0.0192 - 21 0.0385 - 28 0.0192 - 29 0.0192 - 30 0.0192 - 31 0.0385 - 41 0.0192 - 46 0.0192 - - 62 63 14 0 - 0 0.0317 - 3 0.0476 - 7 0.0159 - 8 0.0794 - 13 0.302 - 14 0.159 - 15 0.111 - 21 0.0635 - 28 0.0159 - 32 0.0317 - 33 0.0159 - 37 0.0159 - 46 0.0159 - 47 0.0952 - - 64 23 7 0 - 3 0.087 - 8 0.0435 - 13 0.565 - 14 0.174 - 28 0.0435 - 41 0.0435 - 46 0.0435 - - 69 25 5 0 - 3 0.04 - 13 0.16 - 14 0.56 - 15 0.2 - 30 0.04 - - 45 30 4 0 - 41 0.0667 - 42 0.1 - 44 0.8 - 46 0.0333 - - 46 105 4 1 - 13 0.00952 - 33 0.00952 - 41 0.962 - 46 0.019 - - 42 1 1 0 - 13 1 - - 47 2420 38 11 - 0 0.00909 - 2 0.0298 - 3 0.0364 - 4 0.0107 - 6 0.00248 - 7 0.0165 - 8 0.0434 - 9 0.00207 - 10 0.00124 - 11 0.000413 - 12 0.00207 - 13 0.26 - 14 0.194 - 15 0.163 - 16 0.0062 - 18 0.00207 - 19 0.012 - 20 0.00124 - 21 0.0496 - 22 0.00165 - 23 0.000413 - 24 0.00165 - 26 0.00124 - 28 0.0116 - 29 0.00537 - 30 0.00455 - 31 0.0174 - 32 0.00579 - 33 0.00744 - 34 0.00331 - 35 0.000826 - 37 0.00372 - 40 0.0194 - 41 0.0306 - 42 0.00248 - 43 0.000826 - 46 0.0351 - 47 0.00496 - - 2 12 3 0 - 15 0.0833 - 41 0.833 - 42 0.0833 - - 41 884 32 0 - 0 0.0113 - 2 0.0679 - 3 0.0192 - 4 0.0124 - 6 0.00226 - 7 0.0249 - 8 0.0577 - 9 0.00339 - 10 0.00113 - 11 0.00113 - 12 0.00226 - 13 0.337 - 14 0.145 - 15 0.0679 - 16 0.00339 - 18 0.00226 - 19 0.0158 - 21 0.11 - 22 0.00452 - 23 0.00113 - 24 0.00452 - 26 0.00226 - 28 0.0124 - 29 0.0102 - 30 0.00566 - 31 0.0305 - 32 0.00905 - 33 0.0147 - 34 0.00792 - 35 0.00226 - 37 0.00905 - 43 0.00113 - - 42 407 25 0 - 0 0.00983 - 2 0.0147 - 3 0.0344 - 4 0.00491 - 7 0.0123 - 8 0.0565 - 9 0.00246 - 10 0.00246 - 12 0.00246 - 13 0.359 - 14 0.263 - 15 0.0958 - 16 0.00983 - 18 0.00246 - 19 0.00246 - 21 0.0344 - 26 0.00246 - 28 0.0172 - 29 0.00491 - 30 0.00491 - 31 0.0246 - 32 0.00983 - 33 0.00737 - 43 0.00246 - 46 0.0197 - - 44 1007 29 0 - 0 0.00794 - 2 0.000993 - 3 0.0566 - 4 0.0119 - 6 0.00397 - 7 0.0129 - 8 0.0298 - 9 0.000993 - 10 0.000993 - 12 0.00199 - 13 0.183 - 14 0.229 - 15 0.291 - 16 0.00695 - 18 0.00199 - 19 0.0139 - 20 0.00298 - 21 0.00894 - 28 0.00894 - 29 0.00199 - 30 0.00397 - 31 0.00497 - 32 0.00199 - 33 0.00199 - 37 0.000993 - 40 0.0467 - 41 0.00993 - 46 0.0437 - 47 0.00894 - - 49 6 3 0 - 41 0.667 - 42 0.167 - 46 0.167 - - 51 1 1 0 - 42 1 - - 55 5 3 0 - 41 0.4 - 46 0.4 - 47 0.2 - - 57 9 5 0 - 2 0.333 - 14 0.111 - 15 0.111 - 41 0.333 - 42 0.111 - - 62 70 9 0 - 4 0.0143 - 8 0.0143 - 14 0.0286 - 16 0.0143 - 34 0.0143 - 41 0.557 - 42 0.0286 - 46 0.3 - 47 0.0286 - - 64 3 2 0 - 2 0.667 - 46 0.333 - - 66 12 2 0 - 41 0.333 - 46 0.667 - - 48 48 7 0 - 0 0.0208 - 13 0.0417 - 21 0.146 - 41 0.0208 - 42 0.229 - 44 0.5 - 45 0.0417 - - 49 102 7 3 - 7 0.0098 - 14 0.0098 - 21 0.0392 - 41 0.539 - 42 0.275 - 44 0.118 - 46 0.0098 - - 41 4 1 0 - 42 1 - - 47 57 5 0 - 14 0.0175 - 21 0.0526 - 41 0.684 - 42 0.14 - 44 0.105 - - 48 6 3 0 - 21 0.167 - 41 0.333 - 44 0.5 - - 51 8 3 0 - 41 0.125 - 42 0.5 - 44 0.375 - - 52 12 3 0 - 41 0.5 - 42 0.0833 - 44 0.417 - - 55 985 13 2 - 3 0.00102 - 7 0.00203 - 8 0.00102 - 9 0.00102 - 13 0.00102 - 19 0.00203 - 21 0.0223 - 41 0.143 - 42 0.121 - 44 0.686 - 45 0.0122 - 46 0.00609 - 47 0.00102 - - 41 101 4 0 - 41 0.109 - 42 0.0297 - 44 0.851 - 46 0.0099 - - 69 25 2 0 - 41 0.96 - 46 0.04 - - 57 225 9 1 - 2 0.0178 - 13 0.00889 - 14 0.00889 - 15 0.00444 - 41 0.356 - 42 0.364 - 44 0.231 - 45 0.00444 - 46 0.00444 - - 41 12 2 0 - 42 0.917 - 44 0.0833 - - 58 4 3 0 - 13 0.5 - 21 0.25 - 46 0.25 - - 62 781 11 2 - 4 0.00128 - 8 0.00128 - 14 0.00256 - 16 0.00128 - 34 0.00128 - 41 0.699 - 42 0.0858 - 44 0.0807 - 45 0.0128 - 46 0.111 - 47 0.00256 - - 41 5 3 0 - 41 0.2 - 42 0.4 - 45 0.4 - - 46 2 1 0 - 45 1 - - 64 117 8 0 - 2 0.0171 - 10 0.00855 - 15 0.00855 - 21 0.00855 - 41 0.427 - 42 0.325 - 44 0.197 - 46 0.00855 - - 66 86 2 0 - 41 0.57 - 46 0.43 - - 67 6 3 0 - 41 0.167 - 44 0.167 - 45 0.667 - - 68 4 3 0 - 21 0.25 - 42 0.5 - 44 0.25 - - 69 68 9 0 - 10 0.0147 - 13 0.0294 - 14 0.0441 - 15 0.176 - 19 0.118 - 21 0.0147 - 41 0.0147 - 42 0.221 - 44 0.368 - -59 5288 19 7 - 0 0.00265 - 2 0.000378 - 3 0.000378 - 4 0.00151 - 7 0.000378 - 8 0.00227 - 9 0.000378 - 13 0.0223 - 14 0.0129 - 15 0.00227 - 19 0.0318 - 21 0.000756 - 24 0.000756 - 28 0.326 - 29 0.179 - 30 0.151 - 31 0.169 - 32 0.0416 - 33 0.0552 - - 2 2 1 0 - 24 1 - - 7 65 11 0 - 8 0.0154 - 13 0.0308 - 14 0.0154 - 15 0.0154 - 19 0.0769 - 28 0.154 - 29 0.277 - 30 0.108 - 31 0.215 - 32 0.0308 - 33 0.0615 - - 8 6 4 0 - 8 0.167 - 14 0.167 - 28 0.5 - 31 0.167 - - 21 84 12 0 - 0 0.0119 - 3 0.0119 - 13 0.0833 - 14 0.0238 - 15 0.0119 - 19 0.0714 - 28 0.238 - 29 0.107 - 30 0.155 - 31 0.226 - 32 0.0238 - 33 0.0357 - - 23 1 1 0 - 0 1 - - 24 2483 18 1 - 0 0.00201 - 2 0.000805 - 4 0.00161 - 7 0.000403 - 8 0.00161 - 9 0.000403 - 13 0.0201 - 14 0.0117 - 15 0.00161 - 19 0.0294 - 21 0.000805 - 24 0.000403 - 28 0.333 - 29 0.178 - 30 0.153 - 31 0.166 - 32 0.0427 - 33 0.056 - - 2 2 1 0 - 13 1 - - 47 2642 18 4 - 0 0.00265 - 3 0.000379 - 4 0.00151 - 7 0.000379 - 8 0.00227 - 9 0.000379 - 13 0.0223 - 14 0.0129 - 15 0.00227 - 19 0.0318 - 21 0.000757 - 24 0.000379 - 28 0.326 - 29 0.179 - 30 0.151 - 31 0.169 - 32 0.0416 - 33 0.0553 - - 7 65 11 0 - 8 0.0154 - 13 0.0308 - 14 0.0154 - 15 0.0154 - 19 0.0769 - 28 0.154 - 29 0.277 - 30 0.108 - 31 0.215 - 32 0.0308 - 33 0.0615 - - 8 6 4 0 - 8 0.167 - 14 0.167 - 28 0.5 - 31 0.167 - - 21 84 12 0 - 0 0.0119 - 3 0.0119 - 13 0.0833 - 14 0.0238 - 15 0.0119 - 19 0.0714 - 28 0.238 - 29 0.107 - 30 0.155 - 31 0.226 - 32 0.0238 - 33 0.0357 - - 23 1 1 0 - 0 1 - -60 27233 41 25 - 0 0.0313 - 1 7.34e-05 - 2 0.0264 - 3 0.111 - 4 0.0584 - 7 0.296 - 8 0.0205 - 9 0.0164 - 10 0.0061 - 13 0.0187 - 14 0.00639 - 15 0.00323 - 16 0.000147 - 17 0.000257 - 18 0.00804 - 19 0.000808 - 20 0.00463 - 21 0.0559 - 22 0.00382 - 23 7.34e-05 - 24 0.0051 - 25 0.00011 - 26 0.11 - 28 0.038 - 29 0.0476 - 30 0.0154 - 31 0.0166 - 32 0.00543 - 33 0.0142 - 34 0.000441 - 36 0.000147 - 37 0.00125 - 38 0.0047 - 39 0.00683 - 41 0.0143 - 42 0.0234 - 43 0.000184 - 44 0.0134 - 45 0.00114 - 46 0.00022 - 47 0.0135 - - 2 230 9 4 - 3 0.626 - 4 0.0304 - 7 0.00435 - 8 0.00435 - 13 0.265 - 14 0.0565 - 31 0.00435 - 41 0.00435 - 43 0.00435 - - 3 94 4 0 - 3 0.543 - 4 0.0426 - 13 0.404 - 31 0.0106 - - 7 4 3 0 - 3 0.25 - 4 0.5 - 7 0.25 - - 9 51 3 0 - 3 0.627 - 13 0.176 - 14 0.196 - - 39 43 5 0 - 3 0.907 - 4 0.0233 - 14 0.0233 - 41 0.0233 - 43 0.0233 - - 3 6618 35 9 - 0 0.011 - 2 0.0193 - 3 0.317 - 4 0.0252 - 7 0.221 - 8 0.0113 - 9 0.000151 - 10 0.0192 - 13 0.0119 - 14 0.00287 - 15 0.00181 - 16 0.000151 - 18 0.00468 - 19 0.000302 - 20 0.00181 - 21 0.0979 - 22 0.000151 - 24 0.00121 - 25 0.000453 - 26 0.116 - 28 0.00861 - 29 0.0323 - 30 0.00378 - 31 0.00423 - 32 0.00212 - 33 0.00242 - 34 0.000453 - 38 0.0192 - 39 0.0264 - 41 0.0068 - 42 0.0258 - 43 0.000151 - 44 0.000453 - 45 0.000907 - 47 0.00181 - - 2 115 19 0 - 0 0.0261 - 2 0.0435 - 3 0.209 - 4 0.0609 - 7 0.243 - 8 0.0435 - 13 0.0174 - 14 0.0087 - 19 0.0087 - 21 0.0261 - 26 0.0087 - 28 0.0261 - 29 0.0174 - 31 0.0261 - 32 0.0087 - 33 0.0087 - 38 0.0087 - 39 0.191 - 45 0.0174 - - 3 2100 30 0 - 0 0.0229 - 2 0.0143 - 4 0.0305 - 7 0.277 - 8 0.0162 - 10 0.00143 - 13 0.00286 - 14 0.00667 - 15 0.00524 - 16 0.000476 - 18 0.0138 - 20 0.00571 - 21 0.0419 - 22 0.000476 - 24 0.00238 - 25 0.00143 - 26 0.224 - 28 0.0181 - 29 0.0929 - 30 0.00857 - 31 0.00905 - 32 0.000952 - 33 0.00476 - 34 0.00143 - 38 0.0576 - 39 0.0376 - 41 0.0171 - 42 0.0786 - 44 0.000476 - 47 0.00571 - - 7 33 11 0 - 0 0.0303 - 2 0.0606 - 3 0.0303 - 7 0.303 - 13 0.0303 - 21 0.303 - 31 0.0303 - 32 0.0606 - 33 0.0303 - 41 0.0909 - 42 0.0303 - - 8 4 2 0 - 3 0.5 - 4 0.5 - - 9 13 8 0 - 0 0.154 - 2 0.0769 - 10 0.0769 - 28 0.0769 - 29 0.231 - 30 0.0769 - 32 0.0769 - 41 0.231 - - 13 293 22 0 - 0 0.0205 - 2 0.0751 - 3 0.294 - 4 0.0546 - 7 0.171 - 8 0.0102 - 10 0.00341 - 13 0.0102 - 14 0.00683 - 15 0.00341 - 18 0.00341 - 21 0.041 - 26 0.232 - 28 0.0137 - 29 0.00683 - 30 0.00683 - 31 0.0102 - 32 0.0137 - 33 0.00683 - 39 0.00683 - 42 0.00341 - 45 0.00683 - - 14 71 14 0 - 0 0.0986 - 2 0.127 - 3 0.0423 - 4 0.0141 - 7 0.254 - 14 0.0141 - 21 0.127 - 26 0.169 - 28 0.0563 - 29 0.0141 - 41 0.0282 - 42 0.0282 - 44 0.0141 - 45 0.0141 - - 26 310 22 0 - 0 0.0194 - 3 0.171 - 4 0.0258 - 7 0.155 - 8 0.0194 - 9 0.00323 - 10 0.00323 - 13 0.216 - 19 0.00323 - 21 0.0419 - 24 0.00645 - 28 0.0226 - 29 0.0323 - 30 0.0129 - 31 0.00323 - 32 0.0129 - 33 0.00645 - 39 0.232 - 42 0.00323 - 43 0.00323 - 44 0.00323 - 45 0.00323 - - 47 3678 16 0 - 2 0.016 - 3 0.525 - 4 0.0188 - 7 0.198 - 8 0.00734 - 10 0.0329 - 14 0.000272 - 18 0.000272 - 21 0.139 - 24 0.000272 - 26 0.0593 - 29 0.000272 - 31 0.000272 - 38 0.00136 - 41 0.000272 - 42 0.000272 - - 4 242 23 7 - 0 0.0124 - 2 0.0248 - 3 0.00413 - 4 0.00413 - 7 0.343 - 10 0.0289 - 13 0.0207 - 14 0.00413 - 17 0.0289 - 21 0.165 - 24 0.0165 - 26 0.0331 - 28 0.0702 - 29 0.0702 - 30 0.0165 - 31 0.0248 - 32 0.00413 - 33 0.0289 - 41 0.00826 - 42 0.00826 - 44 0.00413 - 46 0.00413 - 47 0.0744 - - 2 7 5 0 - 7 0.286 - 29 0.286 - 31 0.143 - 32 0.143 - 47 0.143 - - 3 79 19 0 - 0 0.0253 - 2 0.038 - 3 0.0127 - 7 0.278 - 10 0.0253 - 13 0.0506 - 17 0.0127 - 21 0.0127 - 24 0.0127 - 26 0.0253 - 28 0.0633 - 29 0.127 - 30 0.0253 - 33 0.038 - 41 0.0253 - 42 0.0253 - 44 0.0127 - 46 0.0127 - 47 0.177 - - 8 39 9 0 - 7 0.154 - 10 0.0769 - 13 0.0256 - 14 0.0256 - 21 0.513 - 26 0.0769 - 28 0.0769 - 29 0.0256 - 30 0.0256 - - 9 7 3 0 - 7 0.429 - 26 0.429 - 28 0.143 - - 13 35 12 0 - 0 0.0286 - 2 0.0571 - 4 0.0286 - 7 0.429 - 17 0.114 - 21 0.143 - 24 0.0286 - 28 0.0286 - 29 0.0286 - 31 0.0286 - 33 0.0571 - 47 0.0286 - - 39 24 9 0 - 7 0.208 - 17 0.0417 - 21 0.0833 - 28 0.25 - 29 0.0833 - 30 0.0417 - 31 0.167 - 33 0.0833 - 47 0.0417 - - 47 41 6 0 - 7 0.634 - 10 0.0488 - 17 0.0244 - 21 0.244 - 24 0.0244 - 47 0.0244 - - 7 1759 31 14 - 0 0.0352 - 1 0.000569 - 2 0.0222 - 3 0.0188 - 4 0.00227 - 7 0.204 - 8 0.0824 - 9 0.252 - 10 0.00114 - 13 0.00569 - 14 0.0131 - 15 0.00114 - 16 0.000569 - 19 0.00114 - 21 0.0495 - 22 0.0563 - 24 0.00682 - 26 0.0324 - 28 0.0591 - 29 0.0233 - 30 0.021 - 31 0.0171 - 32 0.00625 - 33 0.0347 - 37 0.00625 - 41 0.0148 - 42 0.00455 - 44 0.00284 - 45 0.00227 - 46 0.00114 - 47 0.0222 - - 3 910 26 0 - 0 0.0297 - 2 0.0176 - 3 0.0275 - 4 0.0022 - 7 0.137 - 8 0.112 - 9 0.289 - 13 0.0011 - 14 0.0044 - 15 0.0011 - 16 0.0011 - 21 0.0593 - 22 0.0725 - 24 0.0022 - 26 0.0396 - 28 0.0418 - 29 0.0286 - 30 0.0231 - 31 0.0154 - 32 0.0044 - 33 0.0396 - 37 0.0011 - 41 0.0187 - 42 0.00549 - 45 0.0011 - 47 0.0242 - - 4 45 17 0 - 0 0.0222 - 3 0.0444 - 4 0.0222 - 7 0.0889 - 8 0.0222 - 9 0.333 - 10 0.0222 - 13 0.0222 - 14 0.0444 - 21 0.0444 - 22 0.156 - 24 0.0222 - 29 0.0222 - 31 0.0444 - 33 0.0222 - 41 0.0222 - 42 0.0444 - - 7 5 2 0 - 3 0.8 - 9 0.2 - - 8 11 4 0 - 8 0.0909 - 14 0.364 - 21 0.273 - 22 0.273 - - 10 161 20 0 - 0 0.0435 - 1 0.00621 - 2 0.0497 - 7 0.404 - 8 0.00621 - 13 0.00621 - 14 0.00621 - 21 0.00621 - 24 0.0248 - 26 0.0248 - 28 0.137 - 29 0.0248 - 30 0.0435 - 31 0.0248 - 32 0.00621 - 33 0.0186 - 37 0.0621 - 41 0.0248 - 45 0.00621 - 47 0.0745 - - 13 26 13 0 - 0 0.115 - 4 0.0385 - 9 0.346 - 13 0.0385 - 21 0.0769 - 22 0.0769 - 26 0.0385 - 30 0.0385 - 31 0.0385 - 33 0.0769 - 42 0.0385 - 45 0.0385 - 47 0.0385 - - 14 16 5 0 - 2 0.125 - 7 0.0625 - 9 0.375 - 14 0.375 - 46 0.0625 - - 17 27 10 0 - 0 0.0741 - 7 0.111 - 9 0.481 - 21 0.0741 - 22 0.0741 - 26 0.037 - 28 0.037 - 30 0.037 - 32 0.037 - 45 0.037 - - 21 16 8 0 - 0 0.125 - 3 0.0625 - 8 0.0625 - 9 0.438 - 13 0.0625 - 21 0.0625 - 22 0.0625 - 41 0.125 - - 26 53 12 0 - 7 0.472 - 13 0.0377 - 14 0.0566 - 19 0.0189 - 21 0.0189 - 24 0.0189 - 28 0.226 - 31 0.0189 - 32 0.0377 - 33 0.0377 - 41 0.0377 - 47 0.0189 - - 28 2 1 0 - 22 1 - - 38 10 8 0 - 2 0.2 - 8 0.1 - 9 0.1 - 21 0.1 - 26 0.1 - 28 0.2 - 29 0.1 - 33 0.1 - - 39 470 23 0 - 0 0.0404 - 2 0.0213 - 7 0.287 - 8 0.0809 - 9 0.27 - 10 0.00213 - 13 0.00638 - 14 0.00638 - 15 0.00213 - 19 0.00213 - 21 0.0404 - 22 0.034 - 24 0.00851 - 26 0.0298 - 28 0.0596 - 29 0.0191 - 30 0.0149 - 31 0.0149 - 32 0.00638 - 33 0.034 - 44 0.0106 - 46 0.00213 - 47 0.00638 - - 47 3 3 0 - 2 0.333 - 9 0.333 - 21 0.333 - - 8 256 17 9 - 0 0.0117 - 2 0.00391 - 3 0.0156 - 4 0.195 - 7 0.117 - 10 0.00781 - 15 0.00391 - 21 0.594 - 22 0.00391 - 26 0.00781 - 28 0.00391 - 29 0.00391 - 30 0.00781 - 31 0.00781 - 33 0.00781 - 39 0.00391 - 41 0.00391 - - 3 37 9 0 - 0 0.0541 - 4 0.459 - 7 0.297 - 26 0.027 - 28 0.027 - 29 0.027 - 30 0.027 - 31 0.0541 - 33 0.027 - - 7 140 4 0 - 0 0.00714 - 4 0.00714 - 7 0.00714 - 21 0.979 - - 13 4 3 0 - 4 0.5 - 7 0.25 - 41 0.25 - - 14 3 3 0 - 2 0.333 - 7 0.333 - 33 0.333 - - 21 1 1 0 - 30 1 - - 26 4 3 0 - 4 0.25 - 7 0.5 - 15 0.25 - - 39 8 3 0 - 4 0.625 - 7 0.25 - 21 0.125 - - 41 1 1 0 - 39 1 - - 47 56 7 0 - 3 0.0714 - 4 0.411 - 7 0.196 - 10 0.0357 - 21 0.25 - 22 0.0179 - 26 0.0179 - - 9 511 25 2 - 0 0.0509 - 2 0.133 - 3 0.0254 - 4 0.0274 - 7 0.29 - 8 0.00196 - 13 0.0157 - 14 0.00783 - 15 0.00391 - 19 0.00196 - 20 0.00196 - 21 0.047 - 24 0.00391 - 26 0.0391 - 28 0.0685 - 29 0.0705 - 30 0.0352 - 31 0.0391 - 32 0.00587 - 33 0.0235 - 37 0.00391 - 41 0.0509 - 42 0.0157 - 45 0.00196 - 47 0.0352 - - 7 443 23 0 - 0 0.0587 - 2 0.0384 - 4 0.0316 - 7 0.334 - 13 0.0158 - 14 0.00677 - 15 0.00451 - 19 0.00226 - 20 0.00226 - 21 0.0519 - 24 0.00451 - 26 0.0451 - 28 0.079 - 29 0.0813 - 30 0.0406 - 31 0.0451 - 32 0.00677 - 33 0.0271 - 37 0.00451 - 41 0.0587 - 42 0.0181 - 45 0.00226 - 47 0.0406 - - 47 67 5 0 - 2 0.761 - 3 0.194 - 8 0.0149 - 14 0.0149 - 21 0.0149 - - 10 163 2 0 - 2 0.00613 - 7 0.994 - - 13 383 11 5 - 3 0.765 - 4 0.094 - 7 0.0731 - 8 0.0104 - 10 0.00522 - 20 0.00261 - 21 0.0339 - 24 0.00261 - 26 0.00783 - 33 0.00261 - 42 0.00261 - - 2 23 1 0 - 3 1 - - 7 3 2 0 - 4 0.667 - 7 0.333 - - 26 108 3 0 - 3 0.972 - 7 0.0185 - 21 0.00926 - - 39 1 1 0 - 20 1 - - 47 248 10 0 - 3 0.665 - 4 0.137 - 7 0.101 - 8 0.0161 - 10 0.00806 - 21 0.0484 - 24 0.00403 - 26 0.0121 - 33 0.00403 - 42 0.00403 - - 14 104 11 4 - 2 0.00962 - 3 0.683 - 4 0.00962 - 7 0.173 - 8 0.0288 - 15 0.00962 - 21 0.0385 - 26 0.00962 - 28 0.0192 - 41 0.00962 - 45 0.00962 - - 3 1 1 0 - 4 1 - - 7 10 6 0 - 2 0.1 - 3 0.4 - 7 0.1 - 28 0.2 - 41 0.1 - 45 0.1 - - 47 82 4 0 - 3 0.707 - 7 0.207 - 8 0.0366 - 21 0.0488 - - 58 1 1 0 - 15 1 - - 15 2 2 0 - 3 0.5 - 15 0.5 - - 17 43 7 0 - 4 0.0233 - 7 0.628 - 10 0.0698 - 14 0.0233 - 21 0.209 - 28 0.0233 - 31 0.0233 - - 21 1368 30 13 - 0 0.0775 - 2 0.0702 - 3 0.00146 - 4 0.0139 - 7 0.284 - 8 0.00439 - 13 0.0168 - 14 0.0102 - 15 0.00512 - 18 0.00146 - 19 0.00292 - 20 0.00146 - 21 0.0694 - 23 0.000731 - 24 0.0146 - 26 0.0373 - 28 0.0877 - 29 0.0687 - 30 0.0234 - 31 0.0307 - 32 0.0183 - 33 0.0424 - 36 0.000731 - 37 0.00219 - 41 0.0387 - 42 0.0175 - 43 0.000731 - 44 0.00512 - 45 0.00219 - 47 0.0497 - - 3 628 30 0 - 0 0.0955 - 2 0.0446 - 3 0.00318 - 4 0.00796 - 7 0.247 - 8 0.00159 - 13 0.0175 - 14 0.00478 - 15 0.00955 - 18 0.00159 - 19 0.00318 - 20 0.00318 - 21 0.0525 - 23 0.00159 - 24 0.00637 - 26 0.0318 - 28 0.0732 - 29 0.0971 - 30 0.0271 - 31 0.035 - 32 0.0223 - 33 0.0589 - 36 0.00159 - 37 0.00318 - 41 0.0478 - 42 0.0159 - 43 0.00159 - 44 0.00796 - 45 0.00318 - 47 0.0732 - - 4 38 10 0 - 2 0.0526 - 7 0.263 - 14 0.0263 - 21 0.0789 - 28 0.0263 - 29 0.0789 - 31 0.0526 - 33 0.105 - 41 0.132 - 47 0.184 - - 7 71 14 0 - 0 0.0845 - 2 0.0423 - 7 0.183 - 8 0.0423 - 21 0.394 - 24 0.0423 - 26 0.0141 - 28 0.0282 - 29 0.0282 - 32 0.0141 - 33 0.0563 - 41 0.0141 - 42 0.0282 - 47 0.0282 - - 8 152 20 0 - 0 0.0461 - 2 0.0592 - 4 0.00658 - 7 0.375 - 8 0.00658 - 13 0.0132 - 14 0.0263 - 21 0.0461 - 24 0.0329 - 26 0.0526 - 28 0.164 - 29 0.0526 - 30 0.0197 - 31 0.0197 - 32 0.0132 - 33 0.0132 - 37 0.00658 - 41 0.0132 - 42 0.0132 - 47 0.0197 - - 9 15 9 0 - 0 0.0667 - 4 0.133 - 7 0.267 - 21 0.0667 - 26 0.0667 - 28 0.0667 - 32 0.133 - 41 0.133 - 45 0.0667 - - 13 12 8 0 - 2 0.25 - 21 0.0833 - 24 0.0833 - 28 0.0833 - 29 0.0833 - 32 0.0833 - 41 0.0833 - 47 0.25 - - 14 4 3 0 - 7 0.5 - 24 0.25 - 29 0.25 - - 17 9 6 0 - 2 0.111 - 7 0.222 - 24 0.111 - 29 0.222 - 33 0.111 - 47 0.222 - - 21 59 17 0 - 0 0.0508 - 2 0.0169 - 7 0.102 - 13 0.0508 - 14 0.0847 - 19 0.0339 - 21 0.0169 - 24 0.0169 - 26 0.0169 - 28 0.288 - 29 0.0508 - 31 0.0678 - 32 0.0339 - 33 0.0508 - 41 0.0847 - 42 0.0169 - 47 0.0169 - - 26 21 10 0 - 0 0.19 - 2 0.0952 - 7 0.19 - 14 0.0476 - 15 0.0476 - 28 0.19 - 30 0.0952 - 33 0.0476 - 41 0.0476 - 42 0.0476 - - 38 11 8 0 - 7 0.182 - 21 0.0909 - 24 0.0909 - 26 0.182 - 28 0.182 - 29 0.0909 - 31 0.0909 - 42 0.0909 - - 39 296 20 0 - 0 0.0811 - 2 0.0676 - 4 0.0372 - 7 0.409 - 8 0.00338 - 13 0.0236 - 18 0.00338 - 21 0.0304 - 24 0.0101 - 26 0.0608 - 28 0.0709 - 29 0.0405 - 30 0.0338 - 31 0.0338 - 32 0.0101 - 33 0.0203 - 41 0.0203 - 42 0.0236 - 44 0.00676 - 47 0.0135 - - 47 51 3 0 - 2 0.529 - 7 0.255 - 21 0.216 - - 22 108 17 2 - 0 0.0556 - 2 0.0648 - 4 0.037 - 7 0.333 - 8 0.0185 - 13 0.00926 - 14 0.00926 - 21 0.0278 - 24 0.0185 - 26 0.00926 - 28 0.0185 - 29 0.0926 - 30 0.13 - 31 0.0556 - 33 0.037 - 41 0.0463 - 47 0.037 - - 26 2 2 0 - 0 0.5 - 28 0.5 - - 47 6 3 0 - 2 0.667 - 13 0.167 - 14 0.167 - - 24 3 3 0 - 21 0.333 - 28 0.333 - 41 0.333 - - 25 3 2 0 - 7 0.667 - 30 0.333 - - 26 510 10 4 - 3 0.608 - 7 0.104 - 8 0.00784 - 13 0.212 - 14 0.0118 - 21 0.0412 - 22 0.00392 - 24 0.00196 - 28 0.00784 - 32 0.00196 - - 3 345 9 0 - 3 0.539 - 7 0.0957 - 13 0.304 - 14 0.0145 - 21 0.0261 - 22 0.0029 - 24 0.0029 - 28 0.0116 - 32 0.0029 - - 8 1 1 0 - 8 1 - - 39 157 7 0 - 3 0.783 - 7 0.115 - 8 0.0127 - 13 0.00637 - 14 0.00637 - 21 0.0701 - 22 0.00637 - - 47 1 1 0 - 8 1 - - 31 6 2 0 - 4 0.833 - 20 0.167 - - 38 128 14 0 - 2 0.0312 - 4 0.102 - 7 0.43 - 8 0.0312 - 13 0.0156 - 18 0.0391 - 21 0.0859 - 24 0.00781 - 26 0.195 - 28 0.0156 - 29 0.0156 - 31 0.00781 - 42 0.0156 - 47 0.00781 - - 39 5335 31 2 - 0 0.0274 - 2 0.0231 - 3 0.00075 - 4 0.108 - 7 0.384 - 8 0.0249 - 10 0.00394 - 13 0.00506 - 14 0.00281 - 15 0.00356 - 18 0.0135 - 19 0.000375 - 20 0.00862 - 21 0.0583 - 24 0.00375 - 26 0.153 - 28 0.0319 - 29 0.0437 - 30 0.0144 - 31 0.0172 - 32 0.00356 - 33 0.00619 - 34 0.000562 - 36 0.000187 - 37 0.000187 - 41 0.00656 - 42 0.0191 - 44 0.0313 - 45 0.000187 - 46 0.000187 - 47 0.0045 - - 3 165 16 0 - 0 0.0182 - 2 0.0242 - 4 0.103 - 7 0.582 - 8 0.0242 - 15 0.00606 - 18 0.0121 - 20 0.00606 - 21 0.0727 - 26 0.0121 - 28 0.0485 - 29 0.0182 - 31 0.0364 - 33 0.00606 - 42 0.0121 - 44 0.0182 - - 8 1 1 0 - 20 1 - - 41 2 2 0 - 8 0.5 - 38 0.5 - - 45 3 3 0 - 0 0.333 - 21 0.333 - 28 0.333 - - 46 2 2 0 - 9 0.5 - 10 0.5 - - 47 9444 38 17 - 0 0.0451 - 1 0.000106 - 2 0.026 - 3 0.00381 - 4 0.0736 - 7 0.334 - 8 0.019 - 9 0.000106 - 10 0.000106 - 13 0.0197 - 14 0.00805 - 15 0.00455 - 16 0.000212 - 18 0.0115 - 19 0.00116 - 20 0.00667 - 21 0.0109 - 22 0.000106 - 23 0.000106 - 24 0.0072 - 26 0.132 - 28 0.0547 - 29 0.0686 - 30 0.0222 - 31 0.0236 - 32 0.00784 - 33 0.0205 - 34 0.000635 - 36 0.000212 - 37 0.0018 - 39 0.00106 - 41 0.0205 - 42 0.0338 - 43 0.000212 - 44 0.0194 - 45 0.00148 - 46 0.000212 - 47 0.0195 - - 2 79 4 0 - 3 0.367 - 13 0.468 - 14 0.152 - 31 0.0127 - - 3 1998 31 0 - 0 0.0365 - 2 0.017 - 4 0.044 - 7 0.278 - 8 0.019 - 9 0.000501 - 13 0.0395 - 14 0.00901 - 15 0.00601 - 16 0.000501 - 18 0.015 - 19 0.001 - 20 0.00601 - 21 0.01 - 22 0.000501 - 24 0.0035 - 26 0.212 - 28 0.0285 - 29 0.107 - 30 0.0125 - 31 0.0135 - 32 0.00701 - 33 0.00801 - 34 0.0015 - 39 0.00501 - 41 0.022 - 42 0.0856 - 43 0.000501 - 44 0.0015 - 45 0.003 - 47 0.00601 - - 4 139 20 0 - 0 0.0216 - 2 0.0288 - 3 0.00719 - 7 0.273 - 13 0.036 - 14 0.00719 - 21 0.0144 - 24 0.0216 - 26 0.0432 - 28 0.122 - 29 0.122 - 30 0.0288 - 31 0.0432 - 32 0.00719 - 33 0.0504 - 41 0.0144 - 42 0.0144 - 44 0.00719 - 46 0.00719 - 47 0.129 - - 7 944 27 0 - 0 0.0657 - 1 0.00106 - 2 0.0371 - 4 0.00212 - 7 0.374 - 8 0.0053 - 13 0.00636 - 14 0.0138 - 15 0.00212 - 16 0.00106 - 19 0.00212 - 21 0.0169 - 24 0.0127 - 26 0.0604 - 28 0.11 - 29 0.0434 - 30 0.0392 - 31 0.0318 - 32 0.0117 - 33 0.0646 - 37 0.0117 - 41 0.0275 - 42 0.00847 - 44 0.0053 - 45 0.00318 - 46 0.00106 - 47 0.0413 - - 8 45 12 0 - 0 0.0667 - 2 0.0222 - 4 0.244 - 7 0.422 - 15 0.0222 - 26 0.0222 - 28 0.0222 - 29 0.0222 - 30 0.0444 - 31 0.0444 - 33 0.0444 - 41 0.0222 - - 9 422 23 0 - 0 0.0616 - 2 0.0403 - 4 0.0166 - 7 0.351 - 13 0.0166 - 14 0.00711 - 15 0.00474 - 19 0.00237 - 20 0.00237 - 21 0.0213 - 24 0.00474 - 26 0.0474 - 28 0.0829 - 29 0.0853 - 30 0.0427 - 31 0.0474 - 32 0.00711 - 33 0.0284 - 37 0.00474 - 41 0.0616 - 42 0.019 - 45 0.00237 - 47 0.0427 - - 13 8 7 0 - 4 0.125 - 7 0.25 - 20 0.125 - 21 0.125 - 24 0.125 - 33 0.125 - 42 0.125 - - 14 8 6 0 - 2 0.125 - 4 0.125 - 7 0.25 - 26 0.125 - 28 0.25 - 41 0.125 - - 17 3 3 0 - 14 0.333 - 28 0.333 - 31 0.333 - - 21 1259 30 0 - 0 0.0842 - 2 0.054 - 3 0.00159 - 4 0.0127 - 7 0.296 - 8 0.00397 - 13 0.0183 - 14 0.0103 - 15 0.00556 - 18 0.00159 - 19 0.00318 - 20 0.00159 - 21 0.0286 - 23 0.000794 - 24 0.0159 - 26 0.0397 - 28 0.0953 - 29 0.0747 - 30 0.0254 - 31 0.0334 - 32 0.0199 - 33 0.0461 - 36 0.000794 - 37 0.00238 - 41 0.0421 - 42 0.0191 - 43 0.000794 - 44 0.00556 - 45 0.00238 - 47 0.054 - - 22 100 16 0 - 0 0.06 - 2 0.03 - 4 0.01 - 7 0.36 - 8 0.02 - 13 0.01 - 21 0.03 - 24 0.02 - 26 0.01 - 28 0.02 - 29 0.1 - 30 0.14 - 31 0.06 - 33 0.04 - 41 0.05 - 47 0.04 - - 24 2 2 0 - 28 0.5 - 41 0.5 - - 26 5 2 0 - 28 0.8 - 32 0.2 - - 31 6 2 0 - 4 0.833 - 20 0.167 - - 38 105 13 0 - 2 0.019 - 4 0.124 - 7 0.429 - 8 0.0381 - 13 0.019 - 18 0.0476 - 24 0.00952 - 26 0.238 - 28 0.019 - 29 0.019 - 31 0.00952 - 42 0.019 - 47 0.00952 - - 39 4310 30 0 - 0 0.0339 - 2 0.0186 - 3 0.000928 - 4 0.128 - 7 0.366 - 8 0.029 - 10 0.000232 - 13 0.00603 - 14 0.00348 - 15 0.00441 - 18 0.0167 - 19 0.000464 - 20 0.0107 - 21 0.00348 - 24 0.00464 - 26 0.152 - 28 0.0394 - 29 0.0541 - 30 0.0179 - 31 0.0202 - 32 0.00441 - 33 0.00766 - 34 0.000696 - 36 0.000232 - 37 0.000232 - 41 0.00812 - 42 0.0237 - 44 0.0387 - 45 0.000232 - 47 0.00557 - - 45 3 3 0 - 0 0.333 - 21 0.333 - 28 0.333 - - 55 4 3 0 - 7 0.5 - 42 0.25 - 45 0.25 - - 58 1 1 0 - 14 1 - -61 127 13 5 - 2 0.0315 - 3 0.00787 - 4 0.0315 - 8 0.0157 - 13 0.189 - 14 0.0709 - 15 0.00787 - 21 0.15 - 24 0.00787 - 28 0.0157 - 41 0.441 - 42 0.0157 - 46 0.0157 - - 47 47 8 0 - 2 0.0426 - 4 0.0426 - 13 0.191 - 14 0.0851 - 28 0.0213 - 41 0.574 - 42 0.0213 - 46 0.0213 - - 49 32 6 0 - 2 0.0625 - 4 0.0625 - 13 0.0938 - 14 0.0625 - 24 0.0312 - 41 0.688 - - 55 24 7 0 - 8 0.0833 - 13 0.0833 - 14 0.0417 - 15 0.0417 - 21 0.667 - 41 0.0417 - 46 0.0417 - - 57 11 4 0 - 13 0.455 - 14 0.0909 - 28 0.0909 - 41 0.364 - - 64 1 1 0 - 3 1 - -62 295300 46 32 - 0 0.00594 - 1 0.000213 - 2 0.0265 - 3 0.00539 - 4 0.00642 - 5 0.0029 - 6 5.08e-05 - 7 0.092 - 8 0.0115 - 9 0.000735 - 10 0.000362 - 11 4.06e-05 - 12 0.000328 - 13 0.0983 - 14 0.0637 - 15 0.0501 - 16 0.00223 - 17 1.35e-05 - 18 0.000511 - 19 0.0512 - 20 4.74e-05 - 21 0.0258 - 22 0.00043 - 23 4.74e-05 - 24 0.000969 - 25 2.37e-05 - 26 0.00111 - 27 0.000102 - 28 0.0131 - 29 0.035 - 30 0.00893 - 31 0.0163 - 32 0.0106 - 33 0.0136 - 34 0.0284 - 35 0.0149 - 36 6.77e-06 - 37 0.0127 - 40 0.000139 - 41 0.079 - 42 0.0087 - 43 0.000972 - 44 0.00109 - 45 0.0288 - 46 0.00572 - 47 0.275 - - 0 8 5 0 - 2 0.125 - 13 0.375 - 14 0.25 - 15 0.125 - 37 0.125 - - 2 2293 7 5 - 9 0.000436 - 13 0.000436 - 41 0.00741 - 42 0.00174 - 45 0.044 - 46 0.000436 - 47 0.945 - - 55 1575 4 0 - 41 0.0019 - 45 0.047 - 46 0.000635 - 47 0.95 - - 57 241 3 0 - 42 0.0083 - 45 0.0124 - 47 0.979 - - 62 101 4 0 - 41 0.109 - 42 0.0099 - 45 0.0594 - 47 0.822 - - 66 1 1 0 - 41 1 - - 69 19 5 0 - 9 0.0526 - 13 0.0526 - 41 0.0526 - 45 0.105 - 47 0.737 - - 4 32 9 0 - 4 0.0312 - 8 0.0312 - 14 0.156 - 15 0.312 - 19 0.25 - 34 0.0625 - 35 0.0312 - 41 0.0938 - 42 0.0312 - - 7 39 2 0 - 45 0.0256 - 47 0.974 - - 12 4 3 0 - 14 0.25 - 19 0.5 - 37 0.25 - - 21 199 25 5 - 0 0.0101 - 2 0.0201 - 7 0.101 - 8 0.0201 - 12 0.0201 - 13 0.0704 - 14 0.0452 - 15 0.0201 - 19 0.0452 - 21 0.0151 - 23 0.00503 - 24 0.00503 - 25 0.00503 - 28 0.00503 - 29 0.106 - 31 0.0302 - 32 0.00503 - 33 0.00503 - 35 0.00503 - 37 0.00503 - 41 0.0704 - 42 0.0151 - 45 0.0251 - 46 0.0101 - 47 0.337 - - 41 7 2 0 - 45 0.143 - 47 0.857 - - 55 44 5 0 - 2 0.0682 - 37 0.0227 - 41 0.114 - 45 0.0455 - 47 0.75 - - 57 7 1 0 - 47 1 - - 64 5 1 0 - 47 1 - - 69 122 24 0 - 0 0.0164 - 2 0.0082 - 7 0.148 - 8 0.0328 - 12 0.0328 - 13 0.107 - 14 0.0738 - 15 0.0328 - 19 0.0738 - 21 0.0164 - 23 0.0082 - 24 0.0082 - 25 0.0082 - 28 0.0082 - 29 0.172 - 31 0.0492 - 32 0.0082 - 33 0.0082 - 35 0.0082 - 41 0.0656 - 42 0.0246 - 45 0.0164 - 46 0.0164 - 47 0.0574 - - 26 5 3 0 - 8 0.6 - 13 0.2 - 19 0.2 - - 40 10 6 0 - 8 0.1 - 13 0.4 - 14 0.2 - 19 0.1 - 21 0.1 - 27 0.1 - - 41 12917 37 14 - 0 0.00356 - 2 0.00434 - 3 0.0433 - 4 0.0079 - 5 0.000155 - 6 7.74e-05 - 7 0.00596 - 8 0.0321 - 9 0.00341 - 10 0.00147 - 11 0.000387 - 12 0.000774 - 13 0.376 - 14 0.157 - 15 0.124 - 16 0.00426 - 18 0.000387 - 19 0.0109 - 20 7.74e-05 - 21 0.16 - 22 0.00395 - 23 0.000232 - 24 0.00348 - 26 0.000155 - 27 0.00194 - 28 0.00898 - 29 0.00681 - 30 0.00457 - 31 0.0181 - 32 0.00341 - 33 0.00735 - 34 0.000542 - 35 0.000232 - 37 0.000387 - 42 0.000155 - 43 0.00333 - 46 0.000232 - - 2 15 7 0 - 8 0.133 - 13 0.267 - 14 0.133 - 15 0.267 - 18 0.0667 - 19 0.0667 - 27 0.0667 - - 21 6 3 0 - 13 0.667 - 19 0.167 - 28 0.167 - - 45 125 16 0 - 0 0.008 - 2 0.016 - 3 0.016 - 4 0.008 - 8 0.024 - 13 0.256 - 14 0.216 - 15 0.12 - 16 0.008 - 19 0.04 - 21 0.112 - 28 0.008 - 29 0.024 - 30 0.016 - 31 0.032 - 33 0.096 - - 46 950 26 0 - 0 0.0158 - 2 0.00105 - 3 0.0158 - 4 0.0179 - 7 0.00947 - 8 0.0884 - 9 0.00737 - 10 0.00105 - 12 0.00632 - 13 0.379 - 14 0.154 - 15 0.0674 - 16 0.00526 - 19 0.0442 - 21 0.0695 - 22 0.00105 - 24 0.0126 - 26 0.00105 - 28 0.0316 - 29 0.0147 - 30 0.00947 - 31 0.0337 - 32 0.00421 - 33 0.00632 - 42 0.00211 - 43 0.00105 - - 48 3 3 0 - 0 0.333 - 13 0.333 - 14 0.333 - - 49 375 22 0 - 2 0.016 - 3 0.032 - 4 0.008 - 7 0.0107 - 8 0.008 - 9 0.00267 - 10 0.00267 - 13 0.339 - 14 0.216 - 15 0.171 - 16 0.00533 - 18 0.00533 - 19 0.0347 - 21 0.112 - 24 0.008 - 27 0.00267 - 30 0.00267 - 31 0.00533 - 32 0.00533 - 33 0.00533 - 34 0.00267 - 43 0.00533 - - 55 9312 33 0 - 0 0.00268 - 2 0.00129 - 3 0.0493 - 4 0.00709 - 5 0.000215 - 7 0.00473 - 8 0.0306 - 9 0.00365 - 10 0.00183 - 11 0.000537 - 12 0.00043 - 13 0.39 - 14 0.156 - 15 0.113 - 16 0.00397 - 18 0.000107 - 19 0.00655 - 20 0.000107 - 21 0.165 - 22 0.00515 - 23 0.000322 - 24 0.00279 - 26 0.000107 - 27 0.00215 - 28 0.00805 - 29 0.00677 - 30 0.00451 - 31 0.0183 - 32 0.00333 - 33 0.00698 - 37 0.00043 - 43 0.00365 - 46 0.000322 - - 57 600 21 0 - 2 0.0383 - 3 0.035 - 4 0.01 - 7 0.0183 - 8 0.00167 - 13 0.258 - 14 0.132 - 15 0.275 - 16 0.00667 - 19 0.0117 - 21 0.182 - 22 0.00167 - 27 0.00167 - 29 0.00167 - 30 0.00167 - 31 0.00333 - 32 0.00333 - 34 0.00833 - 35 0.005 - 37 0.00167 - 43 0.00333 - - 58 38 9 0 - 2 0.0263 - 8 0.0263 - 9 0.0263 - 13 0.474 - 14 0.132 - 15 0.105 - 21 0.158 - 32 0.0263 - 33 0.0263 - - 62 430 21 0 - 0 0.00465 - 2 0.00233 - 3 0.0256 - 4 0.00233 - 7 0.0093 - 8 0.0209 - 9 0.00233 - 13 0.302 - 14 0.184 - 15 0.258 - 16 0.00233 - 19 0.0093 - 21 0.135 - 24 0.00698 - 28 0.00698 - 29 0.00698 - 30 0.00233 - 31 0.00465 - 32 0.00233 - 33 0.00698 - 43 0.00465 - - 64 201 16 0 - 0 0.00498 - 2 0.0448 - 3 0.0846 - 4 0.00498 - 7 0.0199 - 8 0.0149 - 13 0.269 - 14 0.114 - 15 0.124 - 16 0.0149 - 21 0.269 - 22 0.00498 - 28 0.00995 - 31 0.00995 - 33 0.00498 - 34 0.00498 - - 66 1 1 0 - 2 1 - - 69 839 21 0 - 0 0.00119 - 3 0.0262 - 4 0.00834 - 7 0.00119 - 8 0.0274 - 13 0.398 - 14 0.16 - 15 0.113 - 16 0.00238 - 18 0.00119 - 19 0.00715 - 21 0.205 - 24 0.00119 - 27 0.00238 - 28 0.00477 - 29 0.00358 - 30 0.00358 - 31 0.0238 - 32 0.00238 - 33 0.00477 - 43 0.00238 - - 74 11 7 0 - 6 0.0909 - 13 0.364 - 14 0.182 - 19 0.0909 - 29 0.0909 - 32 0.0909 - 33 0.0909 - - 42 133 20 7 - 3 0.00752 - 4 0.015 - 8 0.0602 - 11 0.0226 - 13 0.233 - 14 0.143 - 15 0.0677 - 19 0.0226 - 21 0.0226 - 24 0.00752 - 25 0.0301 - 28 0.00752 - 29 0.015 - 40 0.00752 - 41 0.015 - 42 0.00752 - 43 0.00752 - 45 0.00752 - 46 0.015 - 47 0.286 - - 45 19 6 0 - 13 0.0526 - 15 0.158 - 19 0.158 - 24 0.0526 - 29 0.0526 - 47 0.526 - - 49 4 4 0 - 8 0.25 - 14 0.25 - 15 0.25 - 28 0.25 - - 55 51 14 0 - 8 0.0392 - 11 0.0392 - 13 0.255 - 14 0.118 - 15 0.0588 - 21 0.0196 - 25 0.0196 - 29 0.0196 - 40 0.0196 - 41 0.0196 - 42 0.0196 - 43 0.0196 - 46 0.0392 - 47 0.314 - - 57 6 3 0 - 4 0.167 - 13 0.167 - 47 0.667 - - 62 17 6 0 - 13 0.353 - 14 0.176 - 15 0.0588 - 21 0.118 - 45 0.0588 - 47 0.235 - - 66 6 3 0 - 4 0.167 - 8 0.667 - 13 0.167 - - 69 22 8 0 - 3 0.0455 - 8 0.0455 - 11 0.0455 - 13 0.227 - 14 0.409 - 15 0.0455 - 25 0.136 - 41 0.0455 - - 43 32 6 0 - 11 0.0938 - 13 0.344 - 14 0.125 - 15 0.281 - 18 0.0312 - 19 0.125 - - 44 156 17 1 - 0 0.00641 - 2 0.0128 - 4 0.00641 - 7 0.0385 - 8 0.00641 - 13 0.0128 - 14 0.0128 - 21 0.0192 - 28 0.0256 - 29 0.00641 - 32 0.00641 - 33 0.00641 - 35 0.00641 - 41 0.0192 - 45 0.0128 - 46 0.00641 - 47 0.795 - - 57 22 1 0 - 47 1 - - 45 2718 26 8 - 0 0.0011 - 2 0.00478 - 3 0.00258 - 4 0.0011 - 7 0.0118 - 8 0.000736 - 13 0.0545 - 14 0.0309 - 15 0.0213 - 16 0.000736 - 18 0.000736 - 19 0.0169 - 21 0.00331 - 28 0.00184 - 29 0.00258 - 31 0.0118 - 32 0.000736 - 33 0.00736 - 37 0.000368 - 40 0.000368 - 41 0.0982 - 42 0.0232 - 44 0.00221 - 45 0.000736 - 46 0.000736 - 47 0.699 - - 2 87 1 0 - 47 1 - - 48 56 9 0 - 2 0.0179 - 4 0.0179 - 13 0.5 - 14 0.25 - 15 0.0179 - 19 0.125 - 31 0.0357 - 33 0.0179 - 42 0.0179 - - 49 64 7 0 - 13 0.0625 - 14 0.0312 - 15 0.0312 - 19 0.0156 - 41 0.0781 - 42 0.0625 - 47 0.719 - - 55 1037 20 0 - 0 0.00193 - 2 0.00964 - 7 0.0251 - 13 0.0135 - 14 0.000964 - 15 0.00193 - 19 0.0116 - 21 0.00482 - 28 0.00386 - 29 0.00482 - 31 0.026 - 32 0.00193 - 33 0.0145 - 37 0.000964 - 40 0.000964 - 41 0.165 - 42 0.0328 - 44 0.00482 - 46 0.00193 - 47 0.673 - - 57 75 6 0 - 2 0.0133 - 7 0.04 - 31 0.0133 - 41 0.0533 - 42 0.0133 - 47 0.867 - - 62 945 9 0 - 7 0.00317 - 29 0.00106 - 31 0.00106 - 33 0.00106 - 41 0.0254 - 42 0.0159 - 44 0.00106 - 45 0.00212 - 47 0.949 - - 64 96 4 0 - 2 0.0104 - 41 0.104 - 42 0.0417 - 47 0.844 - - 69 334 18 0 - 0 0.00299 - 3 0.021 - 4 0.00599 - 8 0.00599 - 13 0.305 - 14 0.198 - 15 0.159 - 16 0.00599 - 18 0.00599 - 19 0.0778 - 21 0.012 - 28 0.00299 - 29 0.00299 - 31 0.00299 - 33 0.00898 - 41 0.15 - 42 0.00599 - 47 0.0269 - - 46 1060 13 6 - 3 0.000943 - 8 0.00283 - 13 0.0236 - 14 0.0123 - 15 0.0236 - 16 0.00189 - 19 0.000943 - 21 0.000943 - 30 0.000943 - 40 0.0151 - 41 0.899 - 46 0.00472 - 47 0.0132 - - 49 3 3 0 - 13 0.333 - 15 0.333 - 47 0.333 - - 55 921 6 0 - 13 0.00217 - 14 0.00217 - 40 0.0163 - 41 0.967 - 46 0.00434 - 47 0.0076 - - 57 3 2 0 - 41 0.333 - 47 0.667 - - 62 10 2 0 - 41 0.7 - 47 0.3 - - 64 3 2 0 - 8 0.667 - 41 0.333 - - 69 99 12 0 - 3 0.0101 - 8 0.0101 - 13 0.222 - 14 0.111 - 15 0.242 - 16 0.0202 - 19 0.0101 - 21 0.0101 - 30 0.0101 - 40 0.0101 - 41 0.333 - 46 0.0101 - - 47 95402 42 25 - 0 0.00867 - 1 0.000325 - 2 0.0289 - 3 0.0027 - 4 0.00311 - 6 1.05e-05 - 7 0.141 - 8 0.0136 - 9 0.00066 - 10 0.000136 - 12 0.000419 - 13 0.0355 - 14 0.0168 - 15 0.00423 - 16 0.000199 - 17 2.1e-05 - 18 3.14e-05 - 19 0.00112 - 21 0.00595 - 22 0.00022 - 23 2.1e-05 - 24 0.00122 - 25 1.05e-05 - 26 0.00167 - 28 0.0194 - 29 0.0534 - 30 0.0131 - 31 0.0233 - 32 0.016 - 33 0.0203 - 34 0.0436 - 35 0.023 - 36 1.05e-05 - 37 0.0196 - 40 2.1e-05 - 41 0.0307 - 42 0.0112 - 43 0.000199 - 44 0.00087 - 45 0.0302 - 46 0.00213 - 47 0.426 - - 2 2188 5 0 - 41 0.000457 - 42 0.00183 - 45 0.0064 - 46 0.000457 - 47 0.991 - - 4 5 4 0 - 8 0.2 - 34 0.4 - 35 0.2 - 41 0.2 - - 7 38 1 0 - 47 1 - - 21 173 25 0 - 0 0.0116 - 2 0.00578 - 7 0.116 - 8 0.0231 - 12 0.0173 - 13 0.0636 - 14 0.0405 - 15 0.0173 - 19 0.0289 - 21 0.00578 - 23 0.00578 - 24 0.00578 - 25 0.00578 - 28 0.00578 - 29 0.121 - 31 0.0347 - 32 0.00578 - 33 0.00578 - 35 0.00578 - 37 0.00578 - 41 0.0462 - 42 0.0173 - 45 0.00578 - 46 0.0116 - 47 0.387 - - 26 5 3 0 - 8 0.6 - 13 0.2 - 19 0.2 - - 41 29 9 0 - 2 0.069 - 4 0.0345 - 7 0.379 - 15 0.0345 - 21 0.0345 - 31 0.069 - 34 0.241 - 35 0.103 - 37 0.0345 - - 42 40 3 0 - 4 0.025 - 45 0.025 - 47 0.95 - - 44 146 14 0 - 0 0.00685 - 2 0.0137 - 4 0.00685 - 7 0.0411 - 8 0.00685 - 14 0.00685 - 21 0.00685 - 28 0.0274 - 29 0.00685 - 32 0.00685 - 33 0.00685 - 35 0.00685 - 45 0.00685 - 47 0.849 - - 45 2081 17 0 - 0 0.00144 - 2 0.000481 - 7 0.0154 - 13 0.000961 - 14 0.000481 - 21 0.000481 - 28 0.0024 - 29 0.00288 - 31 0.0149 - 32 0.000961 - 33 0.00865 - 37 0.000481 - 41 0.0139 - 42 0.0207 - 44 0.00192 - 45 0.000481 - 47 0.914 - - 46 14 1 0 - 47 1 - - 48 401 21 0 - 0 0.00249 - 2 0.0125 - 7 0.0499 - 13 0.0125 - 14 0.00249 - 15 0.00748 - 16 0.00249 - 21 0.00748 - 24 0.00499 - 28 0.0698 - 29 0.122 - 30 0.0374 - 31 0.387 - 32 0.0249 - 33 0.0249 - 34 0.00249 - 37 0.00249 - 41 0.0823 - 42 0.00249 - 45 0.00998 - 47 0.132 - - 49 2499 23 0 - 0 0.0016 - 2 0.0272 - 7 0.0344 - 8 0.0004 - 12 0.0004 - 13 0.0068 - 14 0.0024 - 15 0.0016 - 21 0.006 - 24 0.0008 - 28 0.0012 - 29 0.0012 - 30 0.0012 - 31 0.0016 - 32 0.002 - 33 0.0016 - 34 0.0656 - 35 0.0324 - 37 0.0012 - 41 0.0312 - 42 0.0156 - 45 0.0228 - 47 0.741 - - 50 6 1 0 - 47 1 - - 51 15 6 0 - 2 0.0667 - 7 0.0667 - 32 0.0667 - 33 0.0667 - 45 0.2 - 47 0.533 - - 52 43 8 0 - 2 0.0233 - 28 0.0233 - 41 0.0233 - 42 0.0233 - 44 0.0233 - 45 0.209 - 46 0.0233 - 47 0.651 - - 53 30 4 0 - 2 0.0333 - 7 0.0333 - 42 0.1 - 47 0.833 - - 55 52582 38 0 - 0 0.00203 - 1 0.000342 - 2 0.0449 - 3 0.00038 - 4 0.00443 - 7 0.183 - 8 0.00304 - 9 0.000133 - 10 0.000133 - 12 1.9e-05 - 13 0.0151 - 14 0.00688 - 15 0.000856 - 16 3.8e-05 - 17 3.8e-05 - 18 1.9e-05 - 19 0.000513 - 21 0.00382 - 22 0.000114 - 24 0.000114 - 26 0.000228 - 28 0.0187 - 29 0.071 - 30 0.00837 - 31 0.0106 - 32 0.018 - 33 0.0195 - 34 0.0097 - 35 0.00778 - 36 1.9e-05 - 37 0.0328 - 41 0.0205 - 42 0.0131 - 43 0.000114 - 44 0.00103 - 45 0.0401 - 46 0.00202 - 47 0.461 - - 57 4707 21 0 - 2 0.0191 - 4 0.00085 - 7 0.0416 - 8 0.000212 - 13 0.000637 - 14 0.000212 - 21 0.00085 - 28 0.000637 - 29 0.000212 - 31 0.00106 - 32 0.000212 - 33 0.000425 - 34 0.00722 - 35 0.00297 - 37 0.00149 - 40 0.000212 - 41 0.0161 - 42 0.0117 - 44 0.00085 - 45 0.021 - 47 0.872 - - 58 17 7 0 - 4 0.0588 - 7 0.294 - 34 0.235 - 35 0.118 - 37 0.118 - 42 0.0588 - 47 0.118 - - 62 4872 24 0 - 0 0.00144 - 2 0.00944 - 4 0.00123 - 7 0.0515 - 8 0.000205 - 13 0.00205 - 14 0.000411 - 15 0.000205 - 19 0.000205 - 21 0.00164 - 28 0.00164 - 29 0.0133 - 30 0.00144 - 31 0.00103 - 32 0.00226 - 33 0.00431 - 34 0.00554 - 35 0.00144 - 37 0.00513 - 41 0.00513 - 42 0.016 - 44 0.000821 - 45 0.0525 - 47 0.821 - - 64 1775 16 0 - 0 0.00113 - 2 0.0293 - 4 0.00169 - 7 0.0958 - 21 0.00225 - 29 0.00451 - 30 0.000563 - 32 0.00282 - 33 0.00169 - 34 0.000563 - 35 0.000563 - 37 0.00113 - 41 0.0169 - 42 0.0135 - 45 0.093 - 47 0.735 - - 66 16 3 0 - 2 0.0625 - 42 0.0625 - 47 0.875 - - 68 15 7 0 - 7 0.0667 - 13 0.0667 - 28 0.0667 - 31 0.0667 - 42 0.0667 - 45 0.0667 - 47 0.6 - - 69 23688 39 0 - 0 0.0296 - 1 0.000549 - 2 0.0054 - 3 0.01 - 4 0.00198 - 6 4.22e-05 - 7 0.13 - 8 0.0475 - 9 0.00236 - 10 0.000253 - 12 0.00148 - 13 0.107 - 14 0.0514 - 15 0.0146 - 16 0.000675 - 18 8.44e-05 - 19 0.00308 - 21 0.0139 - 22 0.000633 - 23 4.22e-05 - 24 0.00443 - 26 0.00621 - 28 0.0343 - 29 0.0511 - 30 0.0331 - 31 0.0616 - 32 0.0226 - 33 0.0358 - 34 0.144 - 35 0.0708 - 37 0.00414 - 40 4.22e-05 - 41 0.0661 - 42 0.00515 - 43 0.000549 - 44 0.000675 - 45 0.0068 - 46 0.00393 - 47 0.0277 - - 74 7 5 0 - 2 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - - 48 954 28 7 - 0 0.00105 - 2 0.00629 - 3 0.00314 - 4 0.00524 - 7 0.021 - 8 0.00314 - 13 0.155 - 14 0.142 - 15 0.0304 - 16 0.00314 - 18 0.00105 - 19 0.169 - 21 0.0136 - 22 0.00105 - 24 0.0021 - 28 0.0294 - 29 0.0514 - 30 0.0157 - 31 0.162 - 32 0.0105 - 33 0.0115 - 34 0.00105 - 37 0.00105 - 41 0.0388 - 42 0.0021 - 45 0.0629 - 46 0.00105 - 47 0.0556 - - 41 16 6 0 - 2 0.125 - 21 0.0625 - 41 0.0625 - 42 0.0625 - 45 0.125 - 47 0.562 - - 47 806 26 0 - 0 0.00124 - 2 0.00372 - 3 0.00372 - 4 0.0062 - 7 0.0223 - 8 0.00372 - 13 0.176 - 14 0.164 - 15 0.036 - 16 0.00372 - 19 0.102 - 21 0.0149 - 22 0.00124 - 24 0.00248 - 28 0.0211 - 29 0.0521 - 30 0.0136 - 31 0.185 - 32 0.0124 - 33 0.00993 - 37 0.00124 - 41 0.0397 - 42 0.00124 - 45 0.0682 - 46 0.00124 - 47 0.0533 - - 49 5 4 0 - 2 0.2 - 13 0.4 - 14 0.2 - 18 0.2 - - 55 19 8 0 - 13 0.0526 - 28 0.211 - 29 0.263 - 30 0.105 - 31 0.158 - 33 0.0526 - 41 0.105 - 47 0.0526 - - 62 36 5 0 - 7 0.0278 - 13 0.0278 - 14 0.0278 - 19 0.889 - 45 0.0278 - - 64 63 9 0 - 13 0.0317 - 14 0.0159 - 19 0.683 - 28 0.111 - 29 0.0317 - 30 0.0317 - 31 0.0476 - 33 0.0317 - 41 0.0159 - - 69 2 2 0 - 34 0.5 - 41 0.5 - - 49 6007 36 13 - 0 0.00117 - 2 0.0255 - 3 0.00117 - 4 0.00383 - 5 0.00333 - 7 0.0146 - 8 0.00133 - 9 0.000333 - 10 0.000166 - 12 0.000166 - 13 0.122 - 14 0.107 - 15 0.101 - 16 0.00449 - 18 0.00117 - 19 0.108 - 21 0.0103 - 23 0.000166 - 24 0.000333 - 28 0.000499 - 29 0.000666 - 30 0.000832 - 31 0.000832 - 32 0.000999 - 33 0.000999 - 34 0.0276 - 35 0.0135 - 37 0.000499 - 40 0.000333 - 41 0.106 - 42 0.00916 - 43 0.000832 - 44 0.000666 - 45 0.0201 - 46 0.0025 - 47 0.308 - - 41 1889 16 0 - 2 0.0238 - 4 0.000529 - 7 0.00106 - 13 0.00318 - 14 0.00159 - 15 0.00106 - 19 0.000529 - 21 0.00424 - 32 0.000529 - 40 0.00106 - 41 0.157 - 42 0.00794 - 44 0.00159 - 45 0.0312 - 46 0.000529 - 47 0.764 - - 44 2 2 0 - 2 0.5 - 45 0.5 - - 45 7 4 0 - 7 0.143 - 14 0.286 - 15 0.286 - 47 0.286 - - 47 59 15 0 - 4 0.0169 - 8 0.0339 - 13 0.237 - 14 0.22 - 15 0.102 - 19 0.0169 - 21 0.0339 - 28 0.0169 - 29 0.0339 - 30 0.0339 - 31 0.0339 - 32 0.0169 - 33 0.0169 - 41 0.119 - 47 0.0678 - - 48 9 4 0 - 14 0.111 - 21 0.111 - 41 0.222 - 47 0.556 - - 49 30 9 0 - 2 0.0333 - 7 0.0333 - 13 0.0667 - 14 0.133 - 15 0.2 - 19 0.233 - 41 0.1 - 42 0.0333 - 47 0.167 - - 55 493 13 0 - 2 0.178 - 7 0.0365 - 9 0.00203 - 13 0.00203 - 14 0.00609 - 21 0.0183 - 32 0.00203 - 34 0.00203 - 37 0.00406 - 41 0.0953 - 42 0.0325 - 45 0.069 - 47 0.552 - - 57 31 7 0 - 2 0.161 - 14 0.0323 - 41 0.0645 - 42 0.0323 - 44 0.0323 - 45 0.0645 - 47 0.613 - - 58 78 5 0 - 2 0.0641 - 41 0.0128 - 42 0.0256 - 45 0.0641 - 47 0.833 - - 62 11 4 0 - 2 0.182 - 42 0.0909 - 45 0.182 - 47 0.545 - - 64 6 3 0 - 2 0.167 - 45 0.5 - 47 0.333 - - 66 3 2 0 - 21 0.667 - 47 0.333 - - 69 3383 34 0 - 0 0.00207 - 2 0.00118 - 3 0.00207 - 4 0.00621 - 5 0.00591 - 7 0.0195 - 8 0.00177 - 9 0.000296 - 10 0.000296 - 12 0.000296 - 13 0.21 - 14 0.181 - 15 0.175 - 16 0.00798 - 18 0.00207 - 19 0.189 - 21 0.0118 - 23 0.000296 - 24 0.000591 - 28 0.000591 - 29 0.000591 - 30 0.000887 - 31 0.000887 - 32 0.000887 - 33 0.00148 - 34 0.0488 - 35 0.0239 - 37 0.000296 - 41 0.0822 - 42 0.00562 - 43 0.00148 - 45 0.00414 - 46 0.00414 - 47 0.00739 - - 50 8 3 0 - 14 0.125 - 19 0.125 - 47 0.75 - - 51 20 7 0 - 2 0.05 - 7 0.05 - 32 0.05 - 33 0.05 - 41 0.05 - 45 0.35 - 47 0.4 - - 52 51 9 1 - 2 0.0196 - 27 0.0196 - 28 0.0196 - 41 0.098 - 42 0.0196 - 44 0.0196 - 45 0.235 - 46 0.0196 - 47 0.549 - - 55 4 3 0 - 28 0.25 - 45 0.5 - 46 0.25 - - 53 30 4 0 - 2 0.0333 - 7 0.0333 - 42 0.1 - 47 0.833 - - 55 67719 43 18 - 0 0.00162 - 1 0.000266 - 2 0.0581 - 3 0.000753 - 4 0.0036 - 5 1.48e-05 - 7 0.143 - 8 0.00282 - 9 0.000266 - 10 0.00034 - 12 2.95e-05 - 13 0.019 - 14 0.00755 - 15 0.00347 - 16 8.86e-05 - 17 2.95e-05 - 18 4.43e-05 - 19 0.00157 - 21 0.0104 - 22 0.000192 - 23 1.48e-05 - 24 8.86e-05 - 25 1.48e-05 - 26 0.000177 - 27 1.48e-05 - 28 0.0146 - 29 0.0552 - 30 0.00653 - 31 0.00828 - 32 0.0141 - 33 0.0153 - 34 0.00755 - 35 0.00604 - 36 1.48e-05 - 37 0.0255 - 40 4.43e-05 - 41 0.159 - 42 0.0118 - 43 0.000295 - 44 0.00233 - 45 0.0466 - 46 0.0162 - 47 0.358 - - 4 27 11 0 - 7 0.037 - 8 0.037 - 13 0.037 - 14 0.037 - 28 0.037 - 29 0.0741 - 32 0.037 - 41 0.0741 - 45 0.037 - 46 0.037 - 47 0.556 - - 12 3 3 0 - 2 0.333 - 33 0.333 - 42 0.333 - - 21 9 5 0 - 7 0.111 - 13 0.111 - 28 0.333 - 29 0.222 - 31 0.222 - - 41 1402 27 0 - 0 0.000713 - 2 0.0464 - 4 0.000713 - 7 0.0464 - 8 0.000713 - 10 0.000713 - 13 0.0728 - 14 0.00499 - 15 0.0278 - 19 0.000713 - 21 0.0107 - 27 0.000713 - 28 0.000713 - 29 0.0157 - 30 0.000713 - 31 0.00143 - 32 0.00713 - 33 0.00214 - 34 0.00214 - 37 0.00285 - 41 0.0449 - 42 0.0157 - 43 0.000713 - 44 0.00357 - 45 0.0271 - 46 0.00143 - 47 0.66 - - 42 27 7 0 - 2 0.111 - 7 0.148 - 21 0.037 - 29 0.0741 - 41 0.111 - 45 0.185 - 47 0.333 - - 43 29 2 0 - 7 0.069 - 44 0.931 - - 45 366 17 0 - 2 0.0273 - 7 0.167 - 13 0.0109 - 14 0.00273 - 21 0.00273 - 22 0.00273 - 28 0.0328 - 29 0.29 - 30 0.0355 - 31 0.0082 - 32 0.0109 - 33 0.082 - 34 0.00273 - 37 0.00273 - 41 0.0765 - 42 0.00273 - 47 0.243 - - 46 63 7 0 - 2 0.0159 - 7 0.0159 - 28 0.0317 - 29 0.0159 - 34 0.0159 - 41 0.0159 - 45 0.889 - - 47 833 26 0 - 0 0.0072 - 2 0.0336 - 3 0.0012 - 4 0.0096 - 7 0.0204 - 8 0.0192 - 9 0.0012 - 13 0.0636 - 14 0.0156 - 15 0.048 - 16 0.0012 - 18 0.0024 - 19 0.0876 - 21 0.0168 - 28 0.0396 - 29 0.0564 - 30 0.0072 - 31 0.376 - 32 0.0072 - 33 0.0264 - 34 0.0048 - 41 0.0264 - 42 0.0108 - 43 0.0024 - 45 0.0888 - 47 0.0264 - - 48 482 15 0 - 0 0.00622 - 2 0.027 - 7 0.0373 - 14 0.00207 - 28 0.344 - 29 0.0996 - 30 0.168 - 31 0.0705 - 32 0.0975 - 33 0.104 - 41 0.0228 - 42 0.00415 - 44 0.00415 - 45 0.00207 - 47 0.0104 - - 49 2900 25 0 - 0 0.00069 - 2 0.0714 - 3 0.000345 - 4 0.00103 - 7 0.108 - 8 0.00069 - 13 0.0121 - 14 0.00448 - 15 0.000345 - 21 0.0031 - 28 0.00586 - 29 0.0366 - 30 0.00138 - 31 0.00276 - 32 0.00931 - 33 0.00931 - 34 0.00586 - 35 0.00655 - 37 0.0169 - 41 0.128 - 42 0.0134 - 44 0.0031 - 45 0.0345 - 46 0.0031 - 47 0.521 - - 55 480 19 0 - 2 0.0854 - 4 0.00417 - 7 0.0437 - 13 0.0104 - 15 0.00208 - 21 0.00833 - 28 0.0896 - 29 0.0854 - 30 0.0479 - 31 0.0146 - 32 0.05 - 33 0.0646 - 35 0.00208 - 37 0.0125 - 41 0.102 - 42 0.0333 - 45 0.0167 - 46 0.00208 - 47 0.325 - - 57 150 18 0 - 0 0.0133 - 1 0.00667 - 2 0.0467 - 4 0.00667 - 7 0.06 - 13 0.0467 - 14 0.02 - 29 0.0333 - 30 0.0133 - 32 0.0267 - 33 0.00667 - 34 0.00667 - 37 0.02 - 41 0.187 - 42 0.0133 - 44 0.02 - 45 0.0267 - 47 0.447 - - 58 218 11 0 - 2 0.0505 - 7 0.0275 - 14 0.00459 - 21 0.00459 - 28 0.00459 - 34 0.00459 - 35 0.00459 - 41 0.0367 - 42 0.0183 - 45 0.0826 - 47 0.761 - - 62 10 5 0 - 2 0.1 - 14 0.1 - 19 0.2 - 37 0.1 - 47 0.5 - - 64 14 5 0 - 2 0.143 - 19 0.0714 - 32 0.0714 - 45 0.0714 - 47 0.643 - - 68 3 3 0 - 30 0.333 - 31 0.333 - 32 0.333 - - 69 60692 42 0 - 0 0.00158 - 1 0.00028 - 2 0.0584 - 3 0.000807 - 4 0.00377 - 5 1.65e-05 - 7 0.151 - 8 0.00282 - 9 0.00028 - 10 0.000362 - 12 3.3e-05 - 13 0.0177 - 14 0.00774 - 15 0.00254 - 16 8.24e-05 - 17 3.3e-05 - 18 1.65e-05 - 19 0.000478 - 21 0.0109 - 22 0.000198 - 23 1.65e-05 - 24 9.89e-05 - 25 1.65e-05 - 26 0.000198 - 28 0.0117 - 29 0.0552 - 30 0.00512 - 31 0.00315 - 32 0.0136 - 33 0.0144 - 34 0.00796 - 35 0.00639 - 36 1.65e-05 - 37 0.0274 - 40 4.94e-05 - 41 0.167 - 42 0.0115 - 43 0.00028 - 44 0.00185 - 45 0.047 - 46 0.0179 - 47 0.35 - - 57 5900 27 12 - 2 0.0561 - 3 0.000339 - 4 0.00102 - 7 0.0334 - 8 0.000508 - 9 0.000169 - 13 0.0149 - 14 0.00797 - 15 0.00831 - 16 0.000169 - 19 0.000339 - 21 0.00746 - 28 0.000508 - 29 0.000169 - 31 0.000847 - 32 0.000169 - 33 0.000339 - 34 0.00576 - 35 0.00237 - 37 0.00119 - 40 0.000678 - 41 0.117 - 42 0.0103 - 44 0.00441 - 45 0.0295 - 46 0.000508 - 47 0.696 - - 41 4850 19 0 - 2 0.0485 - 3 0.000206 - 4 0.000412 - 7 0.0221 - 13 0.00536 - 14 0.00103 - 15 0.00227 - 21 0.00515 - 28 0.000206 - 29 0.000206 - 34 0.000206 - 37 0.000412 - 40 0.000619 - 41 0.132 - 42 0.00928 - 44 0.00536 - 45 0.0262 - 46 0.000412 - 47 0.74 - - 42 18 3 0 - 42 0.111 - 45 0.0556 - 47 0.833 - - 44 2 1 0 - 45 1 - - 46 2 1 0 - 45 1 - - 47 28 11 0 - 7 0.107 - 8 0.0357 - 13 0.107 - 14 0.0357 - 31 0.179 - 32 0.0357 - 37 0.0357 - 41 0.0714 - 42 0.0357 - 45 0.0714 - 47 0.286 - - 49 12 5 0 - 2 0.167 - 13 0.167 - 35 0.0833 - 41 0.0833 - 47 0.5 - - 55 612 13 0 - 2 0.126 - 4 0.00327 - 7 0.127 - 13 0.031 - 21 0.0261 - 28 0.00327 - 33 0.00163 - 37 0.00654 - 40 0.00163 - 41 0.0392 - 42 0.018 - 45 0.049 - 47 0.567 - - 57 50 8 0 - 2 0.02 - 7 0.02 - 14 0.02 - 15 0.02 - 41 0.08 - 42 0.02 - 45 0.02 - 47 0.8 - - 58 106 7 0 - 2 0.0755 - 13 0.00943 - 41 0.00943 - 42 0.00943 - 45 0.066 - 46 0.00943 - 47 0.821 - - 62 14 4 0 - 2 0.286 - 9 0.0714 - 21 0.0714 - 47 0.571 - - 64 6 4 0 - 8 0.167 - 19 0.167 - 45 0.167 - 47 0.5 - - 69 196 17 0 - 2 0.0153 - 3 0.0051 - 4 0.0102 - 7 0.0408 - 8 0.0051 - 13 0.189 - 14 0.204 - 15 0.189 - 16 0.0051 - 19 0.0051 - 21 0.0102 - 33 0.0051 - 34 0.168 - 35 0.0663 - 41 0.0714 - 45 0.0051 - 47 0.0051 - - 58 579 32 8 - 0 0.00173 - 2 0.0311 - 3 0.00864 - 4 0.0155 - 7 0.0138 - 8 0.019 - 9 0.00345 - 10 0.00173 - 11 0.00173 - 13 0.337 - 14 0.162 - 15 0.0725 - 16 0.00345 - 18 0.00345 - 19 0.0104 - 21 0.154 - 22 0.00518 - 23 0.00173 - 24 0.00173 - 28 0.00345 - 29 0.00345 - 30 0.00345 - 31 0.0173 - 32 0.00345 - 33 0.00864 - 34 0.00691 - 35 0.00345 - 37 0.00345 - 41 0.0691 - 42 0.00173 - 46 0.0242 - 47 0.00345 - - 41 32 9 0 - 2 0.0312 - 3 0.0312 - 13 0.25 - 14 0.0312 - 21 0.0625 - 32 0.0312 - 41 0.156 - 46 0.375 - 47 0.0312 - - 42 3 3 0 - 21 0.333 - 41 0.333 - 47 0.333 - - 45 95 13 0 - 2 0.0421 - 4 0.0316 - 7 0.0211 - 8 0.0211 - 13 0.368 - 14 0.158 - 15 0.0526 - 19 0.0105 - 21 0.168 - 31 0.0316 - 33 0.0105 - 37 0.0105 - 41 0.0737 - - 55 212 26 0 - 0 0.00472 - 2 0.0425 - 3 0.0142 - 4 0.00943 - 7 0.00943 - 8 0.0236 - 9 0.00472 - 10 0.00472 - 11 0.00472 - 13 0.259 - 14 0.118 - 15 0.0283 - 19 0.0142 - 21 0.278 - 22 0.00943 - 23 0.00472 - 24 0.00472 - 28 0.00472 - 29 0.00943 - 30 0.00472 - 31 0.0236 - 32 0.00472 - 33 0.0189 - 37 0.00472 - 41 0.0849 - 46 0.00943 - - 57 3 3 0 - 2 0.333 - 21 0.333 - 42 0.333 - - 62 13 9 0 - 3 0.0769 - 7 0.0769 - 8 0.0769 - 9 0.0769 - 13 0.308 - 14 0.0769 - 21 0.154 - 31 0.0769 - 41 0.0769 - - 64 6 3 0 - 2 0.5 - 13 0.167 - 21 0.333 - - 69 207 17 0 - 4 0.0193 - 7 0.0145 - 8 0.0145 - 13 0.435 - 14 0.237 - 15 0.14 - 16 0.00966 - 18 0.00966 - 19 0.00966 - 21 0.029 - 22 0.00483 - 28 0.00483 - 30 0.00483 - 31 0.00483 - 34 0.0193 - 35 0.00966 - 41 0.0338 - - 62 6481 29 9 - 0 0.00108 - 2 0.0227 - 4 0.000926 - 7 0.0389 - 8 0.00463 - 9 0.00108 - 13 0.00339 - 14 0.000463 - 15 0.000309 - 19 0.000309 - 21 0.00355 - 22 0.000154 - 28 0.00123 - 29 0.01 - 30 0.00108 - 31 0.000771 - 32 0.0017 - 33 0.00324 - 34 0.00417 - 35 0.00108 - 37 0.00386 - 40 0.000154 - 41 0.0728 - 42 0.0151 - 43 0.000154 - 44 0.00278 - 45 0.186 - 46 0.00154 - 47 0.617 - - 41 2566 9 0 - 2 0.00857 - 7 0.000779 - 21 0.000779 - 41 0.0744 - 42 0.00468 - 44 0.00039 - 45 0.295 - 46 0.00234 - 47 0.613 - - 42 4 2 0 - 42 0.75 - 45 0.25 - - 45 3 1 0 - 7 1 - - 46 10 1 0 - 45 1 - - 47 3515 29 0 - 0 0.00199 - 2 0.0259 - 4 0.00171 - 7 0.0512 - 8 0.00853 - 9 0.00199 - 13 0.00597 - 14 0.000853 - 15 0.000569 - 19 0.000569 - 21 0.00455 - 22 0.000284 - 28 0.00228 - 29 0.0182 - 30 0.00199 - 31 0.00142 - 32 0.00199 - 33 0.00569 - 34 0.00768 - 35 0.00199 - 37 0.00683 - 40 0.000284 - 41 0.0688 - 42 0.0216 - 43 0.000284 - 44 0.00427 - 45 0.118 - 46 0.00114 - 47 0.634 - - 49 6 4 0 - 2 0.167 - 7 0.333 - 41 0.333 - 47 0.167 - - 55 102 6 0 - 2 0.049 - 13 0.0098 - 41 0.0098 - 42 0.0196 - 45 0.0098 - 47 0.902 - - 58 17 3 0 - 2 0.118 - 45 0.0588 - 47 0.824 - - 69 256 12 0 - 2 0.102 - 7 0.254 - 21 0.0195 - 29 0.00391 - 32 0.0156 - 33 0.00391 - 37 0.00391 - 41 0.141 - 42 0.0195 - 44 0.00781 - 45 0.0664 - 47 0.363 - - 64 2370 27 7 - 0 0.000844 - 2 0.0992 - 4 0.00127 - 7 0.0726 - 8 0.0207 - 9 0.00127 - 10 0.000422 - 13 0.00464 - 14 0.00338 - 19 0.000422 - 21 0.00759 - 22 0.00169 - 29 0.00338 - 30 0.000422 - 32 0.00211 - 33 0.00127 - 34 0.000422 - 35 0.000422 - 37 0.000844 - 40 0.000844 - 41 0.101 - 42 0.0122 - 43 0.000422 - 44 0.00127 - 45 0.11 - 46 0.00127 - 47 0.55 - - 41 1979 21 0 - 0 0.000505 - 2 0.099 - 4 0.00152 - 7 0.0753 - 10 0.000505 - 13 0.00152 - 14 0.000505 - 21 0.00707 - 29 0.00303 - 32 0.00202 - 33 0.00101 - 35 0.000505 - 37 0.000505 - 40 0.000505 - 41 0.111 - 42 0.0116 - 43 0.000505 - 44 0.00152 - 45 0.106 - 46 0.000505 - 47 0.576 - - 47 74 10 0 - 8 0.662 - 9 0.0405 - 13 0.0811 - 14 0.0541 - 19 0.0135 - 21 0.0405 - 22 0.0541 - 41 0.0135 - 46 0.027 - 47 0.0135 - - 49 6 4 0 - 32 0.167 - 41 0.333 - 45 0.333 - 47 0.167 - - 55 100 11 0 - 2 0.12 - 7 0.13 - 13 0.01 - 14 0.01 - 21 0.01 - 29 0.02 - 40 0.01 - 41 0.11 - 42 0.03 - 45 0.08 - 47 0.47 - - 58 68 6 0 - 2 0.132 - 7 0.0147 - 41 0.0441 - 42 0.0147 - 45 0.118 - 47 0.676 - - 62 3 2 0 - 2 0.333 - 45 0.667 - - 69 121 13 0 - 0 0.00826 - 2 0.116 - 7 0.0496 - 13 0.00826 - 14 0.0165 - 30 0.00826 - 33 0.00826 - 34 0.00826 - 37 0.00826 - 41 0.00826 - 42 0.00826 - 45 0.231 - 47 0.521 - - 65 8 2 0 - 45 0.5 - 47 0.5 - - 66 35 6 1 - 2 0.0571 - 21 0.286 - 41 0.0286 - 42 0.2 - 44 0.0286 - 47 0.4 - - 47 3 2 0 - 2 0.667 - 42 0.333 - - 67 6 2 0 - 45 0.667 - 47 0.333 - - 68 21 11 0 - 7 0.0476 - 13 0.0476 - 14 0.0476 - 19 0.0952 - 21 0.0476 - 28 0.0476 - 31 0.0476 - 41 0.0476 - 42 0.0476 - 45 0.0952 - 47 0.429 - - 69 90079 42 2 - 0 0.00829 - 1 0.000155 - 2 0.00168 - 3 0.00775 - 4 0.0133 - 5 0.00924 - 6 0.000144 - 7 0.0348 - 8 0.0152 - 9 0.000844 - 10 0.000544 - 12 0.000444 - 13 0.201 - 14 0.151 - 15 0.13 - 16 0.00602 - 18 0.0014 - 19 0.154 - 20 0.000144 - 21 0.0443 - 22 0.000366 - 23 5.55e-05 - 24 0.00124 - 26 0.00173 - 27 2.22e-05 - 28 0.00959 - 29 0.0139 - 30 0.00948 - 31 0.0174 - 32 0.00625 - 33 0.00968 - 34 0.0385 - 35 0.0187 - 37 0.00109 - 40 9.99e-05 - 41 0.0694 - 42 0.00417 - 43 0.00219 - 44 0.000244 - 45 0.00562 - 46 0.0036 - 47 0.00728 - - 41 4 2 0 - 13 0.75 - 15 0.25 - - 69 6 5 0 - 13 0.167 - 14 0.333 - 34 0.167 - 41 0.167 - 46 0.167 - - 74 22 8 0 - 2 0.0909 - 5 0.0455 - 13 0.0455 - 18 0.0455 - 41 0.545 - 42 0.0455 - 45 0.0909 - 47 0.0909 - -63 79666 1 0 - 47 1 - -64 56433 41 26 - 0 0.0151 - 1 3.54e-05 - 2 0.021 - 3 0.00828 - 4 0.00434 - 5 7.09e-05 - 6 3.54e-05 - 7 0.0226 - 8 0.0251 - 9 0.00383 - 10 0.000656 - 12 3.54e-05 - 13 0.178 - 14 0.1 - 15 0.0189 - 16 0.00159 - 17 0.000106 - 18 0.000213 - 19 0.00564 - 21 0.0233 - 22 0.00184 - 24 0.00365 - 26 0.00124 - 28 0.0339 - 29 0.164 - 30 0.0194 - 31 0.0203 - 32 0.0433 - 33 0.0486 - 34 3.54e-05 - 35 0.000284 - 36 1.77e-05 - 37 8.86e-05 - 40 7.09e-05 - 41 0.155 - 42 0.0084 - 43 0.000939 - 44 0.00119 - 45 0.0125 - 46 0.0073 - 47 0.0483 - - 2 17 8 0 - 7 0.176 - 13 0.0588 - 22 0.0588 - 28 0.176 - 30 0.0588 - 41 0.294 - 46 0.0588 - 47 0.118 - - 4 202 17 0 - 0 0.0891 - 2 0.0594 - 3 0.0149 - 8 0.00495 - 13 0.144 - 14 0.00495 - 21 0.0149 - 24 0.0099 - 28 0.0743 - 29 0.342 - 30 0.0396 - 31 0.0347 - 32 0.099 - 33 0.0446 - 41 0.0149 - 42 0.00495 - 45 0.00495 - - 7 10218 35 1 - 0 0.0262 - 2 0.0361 - 3 0.00861 - 4 0.000587 - 7 0.0236 - 8 0.0418 - 9 0.00803 - 10 0.000685 - 12 9.79e-05 - 13 0.141 - 14 0.0686 - 15 0.0234 - 16 0.00147 - 18 0.000294 - 19 0.00832 - 21 0.065 - 22 0.00431 - 24 0.00528 - 26 0.000391 - 28 0.0397 - 29 0.102 - 30 0.0302 - 31 0.0349 - 32 0.0379 - 33 0.0506 - 34 9.79e-05 - 35 0.00108 - 37 9.79e-05 - 41 0.11 - 42 0.00851 - 43 0.00127 - 44 0.00137 - 45 0.019 - 46 0.00617 - 47 0.0931 - - 7 48 15 0 - 0 0.0208 - 8 0.0208 - 13 0.125 - 14 0.125 - 18 0.0208 - 21 0.104 - 28 0.0625 - 29 0.0208 - 30 0.0417 - 32 0.0208 - 33 0.0625 - 41 0.229 - 42 0.0417 - 46 0.0208 - 47 0.0833 - - 12 1 1 0 - 42 1 - - 13 8 7 0 - 2 0.125 - 7 0.125 - 8 0.125 - 13 0.25 - 14 0.125 - 21 0.125 - 30 0.125 - - 15 14 1 0 - 47 1 - - 21 385 23 4 - 0 0.0182 - 2 0.0779 - 3 0.0104 - 4 0.0026 - 7 0.0545 - 8 0.0234 - 13 0.0909 - 14 0.0649 - 15 0.013 - 19 0.0104 - 21 0.0571 - 24 0.013 - 28 0.0234 - 29 0.013 - 30 0.0156 - 31 0.0312 - 32 0.0026 - 33 0.0026 - 41 0.249 - 42 0.026 - 45 0.0416 - 46 0.013 - 47 0.145 - - 7 246 21 0 - 2 0.0813 - 3 0.0122 - 7 0.061 - 8 0.0325 - 13 0.0854 - 14 0.061 - 15 0.0163 - 19 0.0122 - 21 0.0285 - 24 0.00407 - 28 0.00813 - 29 0.0122 - 30 0.0122 - 31 0.0163 - 32 0.00407 - 33 0.00407 - 41 0.297 - 42 0.0407 - 45 0.0407 - 46 0.0203 - 47 0.15 - - 21 13 8 0 - 2 0.0769 - 7 0.0769 - 8 0.0769 - 13 0.231 - 14 0.154 - 21 0.231 - 29 0.0769 - 41 0.0769 - - 47 118 18 0 - 0 0.0508 - 2 0.0678 - 3 0.00847 - 4 0.00847 - 7 0.0424 - 13 0.0932 - 14 0.0593 - 15 0.00847 - 19 0.00847 - 21 0.102 - 24 0.0339 - 28 0.0508 - 29 0.00847 - 30 0.0254 - 31 0.0678 - 41 0.178 - 45 0.0424 - 47 0.144 - - 71 5 5 0 - 2 0.2 - 14 0.2 - 28 0.2 - 45 0.2 - 47 0.2 - - 26 2 1 0 - 30 1 - - 34 10 5 0 - 2 0.1 - 13 0.4 - 14 0.1 - 41 0.2 - 47 0.2 - - 35 5 2 0 - 2 0.4 - 47 0.6 - - 41 8 5 0 - 8 0.25 - 13 0.375 - 14 0.125 - 28 0.125 - 33 0.125 - - 44 5 4 0 - 2 0.2 - 8 0.4 - 14 0.2 - 30 0.2 - - 45 26 7 0 - 2 0.0385 - 13 0.0769 - 14 0.0769 - 28 0.0769 - 29 0.269 - 33 0.192 - 41 0.269 - - 47 27924 40 25 - 0 0.0152 - 1 3.58e-05 - 2 0.0212 - 3 0.00834 - 4 0.00437 - 5 7.16e-05 - 6 3.58e-05 - 7 0.0219 - 8 0.0252 - 9 0.0038 - 10 0.000573 - 12 3.58e-05 - 13 0.18 - 14 0.1 - 15 0.0191 - 16 0.00161 - 17 0.000107 - 18 0.000215 - 19 0.00569 - 21 0.0165 - 22 0.00175 - 24 0.00369 - 26 0.00125 - 28 0.0342 - 29 0.166 - 30 0.0196 - 31 0.0206 - 32 0.0438 - 33 0.0491 - 34 3.58e-05 - 35 0.000179 - 37 7.16e-05 - 40 7.16e-05 - 41 0.156 - 42 0.00849 - 43 0.000931 - 44 0.00111 - 45 0.0122 - 46 0.00734 - 47 0.0488 - - 2 12 7 0 - 7 0.25 - 13 0.0833 - 22 0.0833 - 28 0.25 - 30 0.0833 - 41 0.0833 - 47 0.167 - - 4 201 17 0 - 0 0.0896 - 2 0.0597 - 3 0.0149 - 8 0.00498 - 13 0.144 - 14 0.00498 - 21 0.00995 - 24 0.00995 - 28 0.0746 - 29 0.343 - 30 0.0398 - 31 0.0348 - 32 0.0995 - 33 0.0448 - 41 0.0149 - 42 0.00498 - 45 0.00498 - - 7 9753 35 0 - 0 0.0275 - 2 0.0378 - 3 0.00892 - 4 0.000615 - 7 0.0198 - 8 0.0437 - 9 0.00841 - 10 0.000513 - 12 0.000103 - 13 0.146 - 14 0.0687 - 15 0.0245 - 16 0.00154 - 18 0.000308 - 19 0.00872 - 21 0.0321 - 22 0.00451 - 24 0.00554 - 26 0.00041 - 28 0.0416 - 29 0.107 - 30 0.0317 - 31 0.0366 - 32 0.0397 - 33 0.053 - 34 0.000103 - 35 0.000513 - 37 0.000103 - 41 0.115 - 42 0.00892 - 43 0.00133 - 44 0.00113 - 45 0.0199 - 46 0.00646 - 47 0.0975 - - 12 1 1 0 - 42 1 - - 13 7 6 0 - 2 0.143 - 8 0.143 - 13 0.286 - 14 0.143 - 21 0.143 - 30 0.143 - - 15 14 1 0 - 47 1 - - 21 367 23 0 - 0 0.0191 - 2 0.0817 - 3 0.0109 - 4 0.00272 - 7 0.0572 - 8 0.0245 - 13 0.0899 - 14 0.0654 - 15 0.0136 - 19 0.0109 - 21 0.0191 - 24 0.0136 - 28 0.0245 - 29 0.0136 - 30 0.0163 - 31 0.0327 - 32 0.00272 - 33 0.00272 - 41 0.262 - 42 0.0272 - 45 0.0436 - 46 0.0136 - 47 0.153 - - 26 2 1 0 - 30 1 - - 34 10 5 0 - 2 0.1 - 13 0.4 - 14 0.1 - 41 0.2 - 47 0.2 - - 35 4 2 0 - 2 0.25 - 47 0.75 - - 41 2 2 0 - 28 0.5 - 33 0.5 - - 44 5 4 0 - 2 0.2 - 8 0.4 - 14 0.2 - 30 0.2 - - 45 24 7 0 - 2 0.0417 - 13 0.0833 - 14 0.0833 - 28 0.0833 - 29 0.292 - 33 0.208 - 41 0.208 - - 49 130 21 0 - 0 0.0385 - 2 0.0385 - 7 0.00769 - 8 0.0308 - 13 0.0923 - 14 0.0385 - 15 0.00769 - 19 0.00769 - 21 0.0385 - 24 0.00769 - 28 0.00769 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.00769 - 41 0.369 - 42 0.0615 - 44 0.00769 - 45 0.0308 - 46 0.0154 - 47 0.146 - - 55 50 13 0 - 2 0.02 - 7 0.04 - 13 0.14 - 14 0.08 - 15 0.06 - 21 0.04 - 29 0.1 - 30 0.02 - 31 0.04 - 33 0.12 - 41 0.2 - 42 0.02 - 47 0.12 - - 57 13 9 0 - 8 0.0769 - 13 0.231 - 14 0.154 - 29 0.0769 - 31 0.0769 - 41 0.154 - 42 0.0769 - 46 0.0769 - 47 0.0769 - - 62 7901 29 0 - 0 0.00253 - 2 0.000506 - 3 0.00797 - 4 0.00367 - 7 0.00101 - 8 0.0221 - 9 0.0024 - 10 0.00101 - 13 0.172 - 14 0.078 - 15 0.00848 - 16 0.000127 - 17 0.000253 - 18 0.000127 - 19 0.00329 - 21 0.00633 - 22 0.000127 - 24 0.000759 - 28 0.0291 - 29 0.424 - 30 0.0182 - 31 0.0151 - 32 0.0938 - 33 0.0919 - 41 0.0103 - 42 0.00101 - 43 0.000506 - 45 0.00165 - 46 0.00354 - - 64 337 24 0 - 0 0.0326 - 2 0.0089 - 4 0.00593 - 7 0.0386 - 8 0.0326 - 13 0.131 - 14 0.0504 - 15 0.0089 - 19 0.0119 - 21 0.00297 - 22 0.00297 - 24 0.0119 - 26 0.00297 - 28 0.0801 - 29 0.285 - 30 0.0178 - 31 0.0148 - 32 0.0475 - 33 0.107 - 41 0.0623 - 42 0.0089 - 44 0.00297 - 45 0.0178 - 47 0.0148 - - 66 31 12 0 - 2 0.0645 - 7 0.0323 - 9 0.0645 - 13 0.226 - 14 0.0323 - 15 0.0645 - 18 0.0323 - 28 0.0323 - 29 0.0323 - 31 0.0968 - 41 0.0968 - 47 0.226 - - 68 2 2 0 - 8 0.5 - 47 0.5 - - 70 36 15 0 - 0 0.0278 - 2 0.0833 - 7 0.167 - 13 0.0278 - 19 0.0278 - 24 0.0278 - 28 0.111 - 29 0.0278 - 30 0.0278 - 31 0.0278 - 32 0.111 - 33 0.139 - 42 0.0278 - 45 0.0556 - 47 0.111 - - 71 1934 30 0 - 0 0.0274 - 2 0.0398 - 3 0.015 - 4 0.000517 - 7 0.0729 - 8 0.0217 - 9 0.00103 - 10 0.00103 - 13 0.171 - 14 0.0693 - 15 0.0274 - 18 0.000517 - 19 0.00982 - 21 0.0274 - 22 0.000517 - 24 0.0062 - 26 0.0031 - 28 0.06 - 29 0.0186 - 30 0.0129 - 31 0.0202 - 32 0.0119 - 33 0.0186 - 40 0.00103 - 41 0.204 - 42 0.014 - 44 0.00155 - 45 0.0264 - 46 0.0114 - 47 0.105 - - 72 6740 35 0 - 0 0.00608 - 1 0.000148 - 2 0.0113 - 3 0.00653 - 4 0.012 - 5 0.000297 - 6 0.000148 - 7 0.0323 - 8 0.00445 - 9 0.000148 - 10 0.000148 - 13 0.241 - 14 0.19 - 15 0.0223 - 16 0.00415 - 17 0.000148 - 19 0.00282 - 21 0.00415 - 22 0.000148 - 24 0.00267 - 26 0.00356 - 28 0.02 - 29 0.00341 - 30 0.00564 - 31 0.00356 - 32 0.0046 - 33 0.00401 - 37 0.000148 - 41 0.368 - 42 0.012 - 43 0.00134 - 44 0.00208 - 45 0.00712 - 46 0.0111 - 47 0.0126 - - 73 321 18 0 - 0 0.00312 - 2 0.0125 - 3 0.00935 - 4 0.00623 - 8 0.00623 - 13 0.424 - 14 0.137 - 15 0.0343 - 16 0.00312 - 28 0.0125 - 30 0.00623 - 31 0.00312 - 33 0.00623 - 41 0.277 - 42 0.0187 - 44 0.00312 - 45 0.00935 - 46 0.028 - - 74 14 5 0 - 7 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - - 49 130 21 3 - 0 0.0385 - 2 0.0385 - 7 0.00769 - 8 0.0308 - 13 0.0923 - 14 0.0385 - 15 0.00769 - 19 0.00769 - 21 0.0385 - 24 0.00769 - 28 0.00769 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.00769 - 41 0.369 - 42 0.0615 - 44 0.00769 - 45 0.0308 - 46 0.0154 - 47 0.146 - - 21 2 2 0 - 30 0.5 - 31 0.5 - - 71 10 6 0 - 8 0.1 - 14 0.1 - 41 0.3 - 42 0.2 - 46 0.1 - 47 0.2 - - 72 7 5 0 - 0 0.429 - 21 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 55 50 13 0 - 2 0.02 - 7 0.04 - 13 0.14 - 14 0.08 - 15 0.06 - 21 0.04 - 29 0.1 - 30 0.02 - 31 0.04 - 33 0.12 - 41 0.2 - 42 0.02 - 47 0.12 - - 57 13 9 0 - 8 0.0769 - 13 0.231 - 14 0.154 - 29 0.0769 - 31 0.0769 - 41 0.154 - 42 0.0769 - 46 0.0769 - 47 0.0769 - - 62 7950 30 0 - 0 0.00252 - 2 0.000503 - 3 0.00792 - 4 0.00365 - 7 0.00126 - 8 0.022 - 9 0.00289 - 10 0.00113 - 13 0.172 - 14 0.0776 - 15 0.00843 - 16 0.000126 - 17 0.000252 - 18 0.000126 - 19 0.00327 - 21 0.00654 - 22 0.000881 - 24 0.000755 - 28 0.0289 - 29 0.421 - 30 0.0181 - 31 0.015 - 32 0.0932 - 33 0.0913 - 37 0.000126 - 41 0.0102 - 42 0.00101 - 43 0.000629 - 45 0.00453 - 46 0.00365 - - 64 340 24 0 - 0 0.0324 - 2 0.00882 - 4 0.00588 - 7 0.0382 - 8 0.0324 - 13 0.129 - 14 0.05 - 15 0.00882 - 19 0.0118 - 21 0.0118 - 22 0.00294 - 24 0.0118 - 26 0.00294 - 28 0.0794 - 29 0.282 - 30 0.0176 - 31 0.0147 - 32 0.0471 - 33 0.106 - 41 0.0618 - 42 0.00882 - 44 0.00294 - 45 0.0176 - 47 0.0147 - - 66 31 12 0 - 2 0.0645 - 7 0.0323 - 9 0.0645 - 13 0.226 - 14 0.0323 - 15 0.0645 - 18 0.0323 - 28 0.0323 - 29 0.0323 - 31 0.0968 - 41 0.0968 - 47 0.226 - - 68 2 2 0 - 8 0.5 - 47 0.5 - - 70 36 15 0 - 0 0.0278 - 2 0.0833 - 7 0.167 - 13 0.0278 - 19 0.0278 - 24 0.0278 - 28 0.111 - 29 0.0278 - 30 0.0278 - 31 0.0278 - 32 0.111 - 33 0.139 - 42 0.0278 - 45 0.0556 - 47 0.111 - - 71 1950 30 0 - 0 0.0272 - 2 0.04 - 3 0.0149 - 4 0.000513 - 7 0.0723 - 8 0.0215 - 9 0.00103 - 10 0.00205 - 13 0.169 - 14 0.0687 - 15 0.0272 - 18 0.000513 - 19 0.00974 - 21 0.0338 - 22 0.000513 - 24 0.00615 - 26 0.00308 - 28 0.0595 - 29 0.0185 - 30 0.0128 - 31 0.02 - 32 0.0118 - 33 0.0185 - 40 0.00103 - 41 0.202 - 42 0.0138 - 44 0.00154 - 45 0.0262 - 46 0.0113 - 47 0.105 - - 72 6757 36 0 - 0 0.00607 - 1 0.000148 - 2 0.0112 - 3 0.00651 - 4 0.0121 - 5 0.000296 - 6 0.000148 - 7 0.0323 - 8 0.00474 - 9 0.000148 - 10 0.000148 - 13 0.24 - 14 0.19 - 15 0.0222 - 16 0.00414 - 17 0.000148 - 19 0.00281 - 21 0.00503 - 22 0.000148 - 24 0.00266 - 26 0.00355 - 28 0.02 - 29 0.0034 - 30 0.00562 - 31 0.00355 - 32 0.00459 - 33 0.004 - 36 0.000148 - 37 0.000148 - 41 0.367 - 42 0.012 - 43 0.00133 - 44 0.00237 - 45 0.00755 - 46 0.0111 - 47 0.0126 - - 73 321 18 0 - 0 0.00312 - 2 0.0125 - 3 0.00935 - 4 0.00623 - 8 0.00623 - 13 0.424 - 14 0.137 - 15 0.0343 - 16 0.00312 - 28 0.0125 - 30 0.00623 - 31 0.00312 - 33 0.00623 - 41 0.277 - 42 0.0187 - 44 0.00312 - 45 0.00935 - 46 0.028 - - 74 14 5 0 - 7 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - -65 683 22 14 - 0 0.00878 - 2 0.0293 - 7 0.00293 - 8 0.00586 - 9 0.00146 - 12 0.00146 - 13 0.0293 - 14 0.00732 - 15 0.00146 - 21 0.0351 - 28 0.00439 - 31 0.00146 - 34 0.00146 - 35 0.124 - 37 0.113 - 40 0.00586 - 41 0.0527 - 42 0.0366 - 44 0.00293 - 45 0.133 - 46 0.00293 - 47 0.398 - - 2 12 3 0 - 0 0.0833 - 44 0.0833 - 47 0.833 - - 21 11 3 0 - 0 0.0909 - 45 0.0909 - 47 0.818 - - 41 14 6 0 - 8 0.214 - 13 0.429 - 15 0.0714 - 21 0.143 - 31 0.0714 - 37 0.0714 - - 45 28 3 0 - 41 0.143 - 42 0.0357 - 47 0.821 - - 46 2 1 0 - 41 1 - - 47 198 10 1 - 0 0.00505 - 2 0.0202 - 7 0.00505 - 21 0.00505 - 28 0.00505 - 40 0.0101 - 41 0.0455 - 42 0.0606 - 45 0.157 - 47 0.687 - - 45 27 3 0 - 41 0.111 - 42 0.037 - 47 0.852 - - 58 5 3 0 - 13 0.2 - 28 0.2 - 37 0.6 - - 62 7 4 0 - 14 0.143 - 35 0.429 - 37 0.286 - 47 0.143 - - 64 12 4 0 - 0 0.0833 - 42 0.0833 - 45 0.25 - 47 0.583 - - 65 3 3 0 - 2 0.333 - 41 0.333 - 42 0.333 - - 67 184 13 0 - 0 0.00543 - 2 0.0109 - 8 0.00543 - 9 0.00543 - 12 0.00543 - 13 0.0652 - 14 0.0217 - 21 0.0489 - 34 0.00543 - 35 0.429 - 37 0.37 - 41 0.0217 - 45 0.00543 - - 69 1 1 0 - 0 1 - - 71 83 9 0 - 2 0.0843 - 21 0.0723 - 28 0.012 - 41 0.0723 - 42 0.0361 - 44 0.012 - 45 0.301 - 46 0.012 - 47 0.398 - - 72 108 9 0 - 2 0.0556 - 7 0.00926 - 21 0.0556 - 40 0.0185 - 41 0.0833 - 42 0.0648 - 45 0.278 - 46 0.00926 - 47 0.426 - -66 9695 38 20 - 0 0.00743 - 2 0.00918 - 3 0.0032 - 4 0.00196 - 5 0.000103 - 6 0.000103 - 7 0.0099 - 8 0.0141 - 9 0.00124 - 10 0.000103 - 12 0.00258 - 13 0.0709 - 14 0.033 - 15 0.00949 - 16 0.000413 - 18 0.000309 - 19 0.00825 - 21 0.0228 - 22 0.000825 - 24 0.00175 - 26 0.000413 - 28 0.00495 - 29 0.00155 - 30 0.00196 - 31 0.00495 - 32 0.00155 - 33 0.00134 - 34 0.000413 - 35 0.000722 - 37 0.000206 - 40 0.00144 - 41 0.158 - 42 0.0033 - 43 0.000619 - 44 0.000309 - 45 0.108 - 46 0.14 - 47 0.372 - - 0 88 14 2 - 2 0.227 - 3 0.0227 - 4 0.0114 - 7 0.227 - 9 0.0227 - 13 0.114 - 14 0.0227 - 18 0.0114 - 21 0.205 - 31 0.0341 - 35 0.0114 - 41 0.0227 - 42 0.0114 - 47 0.0568 - - 47 34 7 0 - 2 0.235 - 4 0.0294 - 7 0.559 - 13 0.0588 - 21 0.0588 - 35 0.0294 - 41 0.0294 - - 55 54 12 0 - 2 0.222 - 3 0.037 - 7 0.0185 - 9 0.037 - 13 0.148 - 14 0.037 - 18 0.0185 - 21 0.296 - 31 0.0556 - 41 0.0185 - 42 0.0185 - 47 0.0926 - - 2 31 3 0 - 41 0.0323 - 45 0.0323 - 47 0.935 - - 12 26 8 0 - 2 0.308 - 13 0.154 - 15 0.0769 - 21 0.231 - 35 0.0385 - 37 0.0385 - 41 0.0769 - 47 0.0769 - - 21 7 4 0 - 12 0.143 - 19 0.286 - 42 0.143 - 47 0.429 - - 33 4 2 0 - 21 0.75 - 47 0.25 - - 40 9 5 0 - 8 0.111 - 13 0.556 - 24 0.111 - 30 0.111 - 42 0.111 - - 41 1398 28 4 - 0 0.0122 - 2 0.000715 - 3 0.0179 - 4 0.00787 - 5 0.000715 - 6 0.000715 - 7 0.0114 - 8 0.0858 - 9 0.00572 - 10 0.000715 - 12 0.00143 - 13 0.408 - 14 0.192 - 15 0.0451 - 16 0.00286 - 19 0.0258 - 21 0.0672 - 22 0.00501 - 24 0.0114 - 26 0.00215 - 28 0.0315 - 29 0.00858 - 30 0.0107 - 31 0.0222 - 32 0.00858 - 33 0.00787 - 35 0.000715 - 43 0.00429 - - 46 1150 27 0 - 0 0.0139 - 3 0.0104 - 4 0.00957 - 5 0.00087 - 6 0.00087 - 7 0.013 - 8 0.0957 - 9 0.00522 - 10 0.00087 - 12 0.00174 - 13 0.415 - 14 0.17 - 15 0.0435 - 16 0.00348 - 19 0.0304 - 21 0.0661 - 22 0.00435 - 24 0.0139 - 26 0.00261 - 28 0.0322 - 29 0.0087 - 30 0.013 - 31 0.0235 - 32 0.00957 - 33 0.00609 - 35 0.00087 - 43 0.00435 - - 49 7 6 0 - 3 0.143 - 8 0.143 - 13 0.143 - 14 0.143 - 15 0.143 - 29 0.286 - - 57 6 3 0 - 13 0.333 - 14 0.167 - 21 0.5 - - 69 231 17 0 - 0 0.00433 - 2 0.00433 - 3 0.0519 - 7 0.00433 - 8 0.039 - 9 0.00866 - 13 0.385 - 14 0.303 - 15 0.0519 - 19 0.00433 - 21 0.0606 - 22 0.00866 - 28 0.0303 - 31 0.0173 - 32 0.00433 - 33 0.0173 - 43 0.00433 - - 45 1037 7 1 - 2 0.00193 - 34 0.000964 - 41 0.000964 - 42 0.00193 - 44 0.000964 - 46 0.000964 - 47 0.992 - - 69 1 1 0 - 46 1 - - 46 1179 3 0 - 40 0.0119 - 41 0.978 - 46 0.0102 - - 47 2027 21 10 - 2 0.0143 - 7 0.0192 - 9 0.000987 - 13 0.00345 - 14 0.000493 - 15 0.000987 - 18 0.000493 - 21 0.00691 - 28 0.000493 - 29 0.000493 - 31 0.00148 - 32 0.000493 - 34 0.000987 - 35 0.00148 - 37 0.000493 - 41 0.0276 - 42 0.0074 - 44 0.000493 - 45 0.00296 - 46 0.0183 - 47 0.89 - - 0 52 11 0 - 2 0.115 - 7 0.385 - 9 0.0385 - 13 0.0577 - 14 0.0192 - 18 0.0192 - 21 0.154 - 31 0.0577 - 35 0.0192 - 41 0.0385 - 47 0.0962 - - 2 30 2 0 - 45 0.0333 - 47 0.967 - - 12 20 8 0 - 2 0.25 - 13 0.2 - 15 0.1 - 21 0.15 - 35 0.05 - 37 0.05 - 41 0.1 - 47 0.1 - - 45 1033 4 0 - 2 0.000968 - 34 0.000968 - 42 0.00194 - 47 0.996 - - 49 86 6 0 - 2 0.151 - 28 0.0116 - 42 0.0116 - 44 0.0116 - 45 0.0116 - 47 0.802 - - 51 6 2 0 - 42 0.333 - 47 0.667 - - 55 11 3 0 - 2 0.182 - 42 0.364 - 47 0.455 - - 57 83 5 0 - 2 0.012 - 7 0.012 - 42 0.012 - 45 0.012 - 47 0.952 - - 62 456 3 0 - 34 0.00219 - 42 0.00439 - 47 0.993 - - 69 198 10 0 - 7 0.0909 - 21 0.0152 - 29 0.00505 - 32 0.00505 - 35 0.00505 - 41 0.253 - 42 0.00505 - 45 0.0101 - 46 0.187 - 47 0.424 - - 48 31 3 0 - 2 0.0323 - 21 0.129 - 47 0.839 - - 49 98 8 0 - 2 0.163 - 21 0.0204 - 28 0.0102 - 41 0.0714 - 42 0.0102 - 44 0.0102 - 45 0.0102 - 47 0.704 - - 51 14 3 0 - 42 0.143 - 45 0.571 - 47 0.286 - - 55 97 11 4 - 0 0.567 - 2 0.0309 - 8 0.0103 - 12 0.227 - 15 0.0103 - 21 0.0103 - 33 0.0103 - 42 0.0412 - 45 0.0309 - 46 0.0103 - 47 0.0515 - - 41 5 4 0 - 2 0.2 - 15 0.2 - 45 0.4 - 47 0.2 - - 47 5 2 0 - 2 0.2 - 42 0.8 - - 57 1 1 0 - 33 1 - - 69 83 8 0 - 0 0.639 - 2 0.012 - 8 0.012 - 12 0.265 - 21 0.012 - 45 0.012 - 46 0.012 - 47 0.0361 - - 57 99 10 3 - 2 0.0303 - 7 0.0101 - 8 0.0101 - 13 0.0202 - 14 0.0101 - 21 0.0404 - 41 0.0606 - 42 0.0101 - 45 0.0101 - 47 0.798 - - 0 9 3 0 - 21 0.333 - 42 0.111 - 47 0.556 - - 41 8 2 0 - 41 0.625 - 47 0.375 - - 69 77 7 0 - 2 0.026 - 7 0.013 - 13 0.013 - 14 0.013 - 21 0.013 - 45 0.013 - 47 0.909 - - 58 6 5 0 - 8 0.167 - 13 0.333 - 14 0.167 - 15 0.167 - 19 0.167 - - 62 1478 6 2 - 2 0.00271 - 34 0.000677 - 41 0.000677 - 42 0.00135 - 45 0.688 - 47 0.306 - - 41 1357 6 0 - 2 0.00295 - 34 0.000737 - 41 0.000737 - 42 0.00147 - 45 0.739 - 47 0.255 - - 69 111 2 0 - 45 0.036 - 47 0.964 - - 64 11 5 0 - 2 0.0909 - 13 0.0909 - 41 0.0909 - 45 0.0909 - 47 0.636 - - 65 9 3 0 - 42 0.111 - 45 0.667 - 47 0.222 - - 69 2030 25 4 - 2 0.000493 - 3 0.00197 - 4 0.00345 - 7 0.00985 - 8 0.0064 - 13 0.0404 - 14 0.0227 - 15 0.0113 - 18 0.000493 - 19 0.0202 - 21 0.036 - 22 0.000493 - 26 0.000493 - 28 0.000985 - 29 0.000985 - 30 0.00148 - 31 0.00542 - 32 0.000985 - 33 0.000493 - 35 0.000493 - 41 0.146 - 42 0.000493 - 45 0.00148 - 46 0.645 - 47 0.0414 - - 41 2 2 0 - 19 0.5 - 47 0.5 - - 47 1970 23 0 - 3 0.00203 - 4 0.00355 - 7 0.00964 - 8 0.0066 - 13 0.0416 - 14 0.0228 - 15 0.0117 - 18 0.000508 - 19 0.0203 - 21 0.0315 - 22 0.000508 - 26 0.000508 - 28 0.00102 - 29 0.000508 - 30 0.00152 - 31 0.00558 - 32 0.00102 - 33 0.000508 - 35 0.000508 - 41 0.151 - 45 0.00152 - 46 0.665 - 47 0.0208 - - 58 2 1 0 - 21 1 - - 69 54 6 0 - 2 0.0185 - 7 0.0185 - 21 0.167 - 29 0.0185 - 42 0.0185 - 47 0.759 - -67 759 24 13 - 0 0.00527 - 2 0.0527 - 4 0.00132 - 7 0.00395 - 8 0.00264 - 9 0.00264 - 12 0.00264 - 13 0.0395 - 14 0.0145 - 15 0.00922 - 19 0.00922 - 21 0.0329 - 31 0.00132 - 33 0.00132 - 34 0.00264 - 35 0.215 - 37 0.182 - 40 0.00395 - 41 0.0461 - 42 0.0237 - 44 0.00527 - 45 0.0777 - 46 0.00132 - 47 0.264 - - 0 167 13 0 - 0 0.00599 - 2 0.0778 - 8 0.00599 - 13 0.0359 - 14 0.012 - 21 0.0359 - 35 0.15 - 37 0.228 - 40 0.00599 - 41 0.0659 - 42 0.0359 - 45 0.0958 - 47 0.246 - - 2 15 2 0 - 46 0.0667 - 47 0.933 - - 12 94 11 0 - 2 0.117 - 9 0.0106 - 13 0.0319 - 14 0.0106 - 21 0.0319 - 35 0.128 - 37 0.245 - 41 0.106 - 42 0.0106 - 45 0.0532 - 47 0.255 - - 14 2 1 0 - 45 1 - - 41 17 9 1 - 4 0.0588 - 7 0.0588 - 13 0.235 - 14 0.118 - 15 0.118 - 19 0.0588 - 21 0.235 - 31 0.0588 - 33 0.0588 - - 12 7 5 0 - 4 0.143 - 13 0.286 - 14 0.286 - 19 0.143 - 31 0.143 - - 45 6 5 0 - 2 0.167 - 7 0.167 - 42 0.167 - 44 0.333 - 47 0.167 - - 46 1 1 0 - 40 1 - - 47 342 18 10 - 0 0.00585 - 2 0.038 - 7 0.00292 - 8 0.00292 - 9 0.00292 - 12 0.00292 - 13 0.0351 - 14 0.0117 - 21 0.0263 - 34 0.00292 - 35 0.237 - 37 0.202 - 40 0.00292 - 41 0.0263 - 42 0.0263 - 44 0.00585 - 45 0.076 - 47 0.292 - - 0 148 13 0 - 0 0.00676 - 2 0.0338 - 8 0.00676 - 13 0.0405 - 14 0.00676 - 21 0.0338 - 35 0.169 - 37 0.257 - 40 0.00676 - 41 0.027 - 42 0.0405 - 45 0.0946 - 47 0.277 - - 2 14 1 0 - 47 1 - - 12 82 11 0 - 2 0.0854 - 9 0.0122 - 13 0.0366 - 14 0.0122 - 21 0.0366 - 35 0.146 - 37 0.28 - 41 0.0366 - 42 0.0122 - 45 0.0488 - 47 0.293 - - 14 2 1 0 - 45 1 - - 45 5 4 0 - 7 0.2 - 42 0.2 - 44 0.4 - 47 0.2 - - 49 5 2 0 - 14 0.2 - 47 0.8 - - 55 7 6 0 - 0 0.143 - 2 0.143 - 12 0.143 - 21 0.143 - 35 0.143 - 45 0.286 - - 57 6 2 0 - 37 0.167 - 47 0.833 - - 64 6 3 0 - 41 0.333 - 45 0.167 - 47 0.5 - - 69 56 7 0 - 13 0.0536 - 14 0.0179 - 34 0.0179 - 35 0.768 - 37 0.0714 - 45 0.0357 - 47 0.0357 - - 49 5 2 0 - 14 0.2 - 47 0.8 - - 55 10 7 0 - 0 0.1 - 2 0.1 - 12 0.1 - 15 0.3 - 21 0.1 - 35 0.1 - 45 0.2 - - 57 6 2 0 - 37 0.167 - 47 0.833 - - 64 8 4 0 - 2 0.125 - 41 0.25 - 45 0.25 - 47 0.375 - - 69 67 10 0 - 13 0.0597 - 14 0.0149 - 15 0.0299 - 19 0.0896 - 21 0.0299 - 34 0.0149 - 35 0.642 - 37 0.0597 - 45 0.0299 - 47 0.0299 - -68 1958 35 27 - 0 0.0827 - 1 0.00102 - 2 0.111 - 3 0.0133 - 4 0.0511 - 7 0.072 - 8 0.116 - 9 0.00358 - 13 0.15 - 14 0.0572 - 15 0.0465 - 16 0.000511 - 18 0.00715 - 19 0.00511 - 20 0.00409 - 21 0.0235 - 22 0.00102 - 24 0.00306 - 26 0.00562 - 27 0.000511 - 28 0.0225 - 29 0.00562 - 30 0.0163 - 31 0.0235 - 32 0.00358 - 33 0.0097 - 37 0.00153 - 40 0.00153 - 41 0.0914 - 42 0.0184 - 43 0.00153 - 44 0.00102 - 45 0.00919 - 46 0.00613 - 47 0.0337 - - 2 466 18 9 - 0 0.00429 - 3 0.0343 - 7 0.0172 - 8 0.193 - 9 0.00858 - 13 0.369 - 14 0.0687 - 15 0.122 - 16 0.00215 - 19 0.00215 - 21 0.0343 - 22 0.00215 - 30 0.00429 - 31 0.00429 - 37 0.00644 - 41 0.109 - 43 0.00644 - 46 0.0107 - - 7 1 1 0 - 37 1 - - 8 110 4 0 - 8 0.109 - 13 0.682 - 14 0.0182 - 15 0.191 - - 13 55 4 0 - 8 0.545 - 13 0.345 - 14 0.0727 - 41 0.0364 - - 14 10 2 0 - 8 0.2 - 13 0.8 - - 15 19 3 0 - 8 0.474 - 14 0.0526 - 15 0.474 - - 30 3 1 0 - 8 1 - - 47 253 17 0 - 3 0.0593 - 7 0.0316 - 8 0.119 - 9 0.0158 - 13 0.265 - 14 0.0988 - 15 0.107 - 16 0.00395 - 19 0.00395 - 21 0.0593 - 22 0.00395 - 30 0.00791 - 31 0.00791 - 37 0.00791 - 41 0.182 - 43 0.0119 - 46 0.0158 - - 48 3 2 0 - 0 0.333 - 8 0.667 - - 57 1 1 0 - 0 1 - - 4 9 5 0 - 0 0.222 - 7 0.444 - 13 0.111 - 41 0.111 - 45 0.111 - - 7 4 4 0 - 2 0.25 - 8 0.25 - 21 0.25 - 41 0.25 - - 8 194 20 4 - 0 0.00515 - 2 0.572 - 3 0.0103 - 4 0.0722 - 7 0.0619 - 8 0.067 - 13 0.0155 - 15 0.0155 - 18 0.0206 - 20 0.00515 - 21 0.00515 - 26 0.0103 - 28 0.0206 - 29 0.00515 - 30 0.0155 - 31 0.00515 - 33 0.0155 - 41 0.0464 - 42 0.0103 - 47 0.0206 - - 2 58 17 0 - 0 0.0172 - 2 0.0172 - 3 0.0345 - 4 0.172 - 7 0.121 - 8 0.155 - 13 0.0517 - 15 0.0345 - 18 0.0345 - 21 0.0172 - 28 0.069 - 29 0.0172 - 30 0.0345 - 31 0.0172 - 33 0.0345 - 41 0.103 - 47 0.069 - - 13 3 3 0 - 8 0.333 - 18 0.333 - 26 0.333 - - 41 18 9 0 - 4 0.222 - 7 0.222 - 8 0.0556 - 18 0.0556 - 26 0.0556 - 30 0.0556 - 33 0.0556 - 41 0.167 - 42 0.111 - - 47 111 4 0 - 2 0.973 - 7 0.00901 - 8 0.00901 - 15 0.00901 - - 13 182 19 3 - 0 0.00549 - 2 0.308 - 3 0.00549 - 4 0.11 - 7 0.137 - 8 0.132 - 9 0.00549 - 13 0.022 - 15 0.022 - 18 0.0165 - 20 0.011 - 26 0.011 - 28 0.0165 - 30 0.022 - 31 0.00549 - 32 0.011 - 33 0.011 - 41 0.132 - 47 0.0165 - - 2 103 19 0 - 0 0.00971 - 2 0.00971 - 3 0.00971 - 4 0.136 - 7 0.204 - 8 0.214 - 9 0.00971 - 13 0.0291 - 15 0.0194 - 18 0.0194 - 20 0.00971 - 26 0.0194 - 28 0.0291 - 30 0.0291 - 31 0.00971 - 32 0.00971 - 33 0.00971 - 41 0.204 - 47 0.0194 - - 41 17 10 0 - 4 0.294 - 7 0.176 - 8 0.0588 - 15 0.0588 - 18 0.0588 - 30 0.0588 - 32 0.0588 - 33 0.0588 - 41 0.118 - 47 0.0588 - - 47 51 2 0 - 2 0.98 - 13 0.0196 - - 14 21 6 2 - 2 0.476 - 4 0.143 - 8 0.0952 - 13 0.0952 - 33 0.0476 - 41 0.143 - - 2 7 4 0 - 4 0.429 - 8 0.143 - 33 0.143 - 41 0.286 - - 47 13 3 0 - 2 0.769 - 8 0.0769 - 13 0.154 - - 15 60 9 2 - 2 0.317 - 4 0.15 - 7 0.117 - 8 0.15 - 13 0.0167 - 15 0.133 - 20 0.0167 - 41 0.0333 - 47 0.0667 - - 2 31 7 0 - 4 0.226 - 7 0.194 - 8 0.258 - 13 0.0323 - 15 0.129 - 20 0.0323 - 47 0.129 - - 47 18 2 0 - 2 0.833 - 15 0.167 - - 21 16 5 1 - 0 0.188 - 2 0.5 - 13 0.125 - 21 0.125 - 42 0.0625 - - 48 3 1 0 - 0 1 - - 30 5 3 0 - 2 0.6 - 7 0.2 - 13 0.2 - - 41 124 16 4 - 3 0.0403 - 4 0.00806 - 8 0.29 - 9 0.00806 - 13 0.387 - 14 0.0887 - 15 0.0242 - 19 0.00806 - 21 0.0403 - 22 0.00806 - 26 0.00806 - 29 0.00806 - 30 0.0323 - 31 0.0161 - 33 0.00806 - 40 0.0242 - - 2 50 12 0 - 3 0.08 - 8 0.16 - 13 0.36 - 14 0.12 - 15 0.02 - 19 0.02 - 21 0.1 - 22 0.02 - 29 0.02 - 30 0.04 - 31 0.04 - 33 0.02 - - 13 22 3 0 - 4 0.0455 - 8 0.591 - 13 0.364 - - 46 5 3 0 - 8 0.2 - 13 0.2 - 40 0.6 - - 48 9 4 0 - 3 0.111 - 8 0.667 - 9 0.111 - 30 0.111 - - 42 11 6 0 - 4 0.0909 - 7 0.0909 - 8 0.273 - 13 0.364 - 15 0.0909 - 47 0.0909 - - 45 10 7 0 - 0 0.1 - 2 0.1 - 7 0.2 - 19 0.1 - 24 0.1 - 42 0.1 - 46 0.3 - - 46 9 4 0 - 8 0.222 - 27 0.111 - 32 0.111 - 41 0.556 - - 47 494 29 16 - 0 0.164 - 1 0.00202 - 2 0.00405 - 3 0.00405 - 4 0.0911 - 7 0.132 - 8 0.0891 - 9 0.00202 - 13 0.0587 - 14 0.0688 - 15 0.0202 - 18 0.0142 - 19 0.0081 - 20 0.0081 - 21 0.0121 - 24 0.00607 - 26 0.0101 - 28 0.0445 - 29 0.0101 - 30 0.0263 - 31 0.0425 - 32 0.00607 - 33 0.0182 - 41 0.0547 - 42 0.0243 - 44 0.00202 - 45 0.0081 - 46 0.00202 - 47 0.0668 - - 4 8 4 0 - 0 0.25 - 7 0.5 - 41 0.125 - 45 0.125 - - 8 71 19 0 - 0 0.0141 - 2 0.0141 - 3 0.0282 - 4 0.197 - 7 0.155 - 8 0.155 - 13 0.0423 - 15 0.0282 - 18 0.0563 - 20 0.0141 - 21 0.0141 - 26 0.0282 - 28 0.0563 - 29 0.0141 - 30 0.0423 - 31 0.0141 - 33 0.0423 - 42 0.0282 - 47 0.0563 - - 13 93 17 0 - 0 0.0108 - 2 0.0108 - 4 0.172 - 7 0.269 - 8 0.226 - 9 0.0108 - 15 0.043 - 18 0.0323 - 20 0.0215 - 26 0.0215 - 28 0.0323 - 30 0.043 - 31 0.0108 - 32 0.0215 - 33 0.0215 - 41 0.0215 - 47 0.0323 - - 14 4 2 0 - 4 0.75 - 33 0.25 - - 15 30 5 0 - 4 0.3 - 7 0.233 - 8 0.3 - 20 0.0333 - 47 0.133 - - 21 5 3 0 - 0 0.6 - 13 0.2 - 42 0.2 - - 45 6 5 0 - 0 0.167 - 7 0.333 - 19 0.167 - 24 0.167 - 42 0.167 - - 48 60 12 0 - 0 0.533 - 1 0.0167 - 4 0.0333 - 7 0.0333 - 13 0.05 - 14 0.0667 - 28 0.0333 - 29 0.0167 - 41 0.0833 - 42 0.0333 - 45 0.0167 - 47 0.0833 - - 49 34 12 0 - 0 0.206 - 7 0.0882 - 13 0.0882 - 14 0.147 - 21 0.0294 - 28 0.118 - 29 0.0294 - 30 0.0294 - 31 0.0294 - 41 0.147 - 42 0.0294 - 47 0.0588 - - 50 2 1 0 - 41 1 - - 55 61 17 0 - 0 0.246 - 4 0.0164 - 7 0.148 - 13 0.0328 - 14 0.131 - 19 0.0328 - 21 0.0328 - 26 0.0164 - 28 0.0656 - 30 0.0328 - 31 0.0328 - 32 0.0164 - 33 0.0328 - 41 0.0656 - 42 0.0492 - 44 0.0164 - 47 0.0328 - - 57 68 17 0 - 0 0.147 - 8 0.0147 - 13 0.191 - 14 0.147 - 15 0.0588 - 19 0.0147 - 21 0.0147 - 24 0.0147 - 28 0.0294 - 29 0.0294 - 30 0.0441 - 31 0.162 - 33 0.0147 - 41 0.0441 - 42 0.0147 - 45 0.0147 - 47 0.0441 - - 62 13 6 0 - 7 0.0769 - 14 0.0769 - 31 0.154 - 41 0.0769 - 46 0.0769 - 47 0.538 - - 64 10 8 0 - 0 0.1 - 8 0.1 - 13 0.2 - 24 0.1 - 28 0.1 - 31 0.2 - 42 0.1 - 47 0.1 - - 65 1 1 0 - 45 1 - - 69 17 5 0 - 0 0.353 - 13 0.0588 - 14 0.353 - 21 0.0588 - 41 0.176 - - 48 82 14 3 - 0 0.39 - 1 0.0122 - 2 0.0366 - 4 0.0488 - 7 0.0244 - 13 0.0366 - 14 0.0488 - 21 0.0488 - 28 0.0244 - 29 0.0122 - 41 0.171 - 42 0.0366 - 45 0.0488 - 47 0.061 - - 41 24 7 0 - 0 0.333 - 14 0.0417 - 21 0.0833 - 28 0.0417 - 41 0.333 - 45 0.0417 - 47 0.125 - - 46 2 1 0 - 45 1 - - 47 2 2 0 - 14 0.5 - 42 0.5 - - 49 40 14 1 - 0 0.175 - 2 0.025 - 4 0.05 - 7 0.075 - 13 0.075 - 14 0.125 - 21 0.05 - 28 0.1 - 29 0.025 - 30 0.025 - 31 0.025 - 41 0.175 - 42 0.025 - 47 0.05 - - 41 7 4 0 - 13 0.286 - 21 0.143 - 29 0.143 - 41 0.429 - - 50 4 1 0 - 41 1 - - 51 2 2 0 - 28 0.5 - 42 0.5 - - 52 1 1 0 - 45 1 - - 55 85 19 3 - 0 0.176 - 4 0.0118 - 7 0.106 - 13 0.0235 - 14 0.106 - 19 0.0235 - 21 0.0471 - 26 0.0118 - 28 0.0471 - 30 0.0235 - 31 0.0235 - 32 0.0118 - 33 0.0235 - 41 0.176 - 42 0.118 - 44 0.0118 - 45 0.0118 - 46 0.0235 - 47 0.0235 - - 2 49 17 0 - 0 0.163 - 4 0.0204 - 7 0.143 - 13 0.0408 - 14 0.163 - 19 0.0204 - 21 0.0408 - 26 0.0204 - 28 0.0408 - 30 0.0408 - 31 0.0408 - 32 0.0204 - 33 0.0204 - 41 0.143 - 42 0.0204 - 45 0.0204 - 47 0.0408 - - 41 20 8 0 - 0 0.3 - 7 0.1 - 19 0.05 - 28 0.1 - 33 0.05 - 41 0.25 - 42 0.1 - 44 0.05 - - 47 15 5 0 - 14 0.0667 - 21 0.133 - 41 0.2 - 42 0.467 - 46 0.133 - - 57 75 19 2 - 0 0.133 - 2 0.0133 - 7 0.0133 - 8 0.0133 - 13 0.173 - 14 0.133 - 15 0.0533 - 19 0.0133 - 21 0.04 - 24 0.0133 - 28 0.0267 - 29 0.0267 - 30 0.04 - 31 0.147 - 33 0.0133 - 41 0.08 - 42 0.0133 - 45 0.0133 - 47 0.04 - - 2 53 15 0 - 0 0.113 - 2 0.0189 - 7 0.0189 - 8 0.0189 - 13 0.151 - 14 0.189 - 15 0.0566 - 21 0.0566 - 24 0.0189 - 28 0.0189 - 29 0.0377 - 30 0.0189 - 31 0.151 - 41 0.113 - 47 0.0189 - - 41 19 11 0 - 0 0.211 - 13 0.158 - 15 0.0526 - 19 0.0526 - 28 0.0526 - 30 0.105 - 31 0.158 - 33 0.0526 - 42 0.0526 - 45 0.0526 - 47 0.0526 - - 62 19 9 2 - 7 0.0526 - 14 0.0526 - 21 0.0526 - 31 0.105 - 41 0.158 - 42 0.105 - 45 0.0526 - 46 0.0526 - 47 0.368 - - 2 7 5 0 - 7 0.143 - 14 0.143 - 31 0.286 - 41 0.286 - 46 0.143 - - 42 5 1 0 - 47 1 - - 64 11 8 0 - 0 0.0909 - 8 0.0909 - 13 0.182 - 24 0.0909 - 28 0.0909 - 31 0.182 - 42 0.182 - 47 0.0909 - - 65 3 1 0 - 45 1 - - 67 2 1 0 - 45 1 - - 69 19 5 0 - 0 0.316 - 13 0.0526 - 14 0.316 - 21 0.0526 - 41 0.263 - - 71 2 2 0 - 31 0.5 - 47 0.5 - -69 294981 43 37 - 0 0.105 - 1 0.00265 - 2 0.0256 - 3 0.00552 - 4 0.00905 - 5 0.00567 - 6 9.49e-05 - 7 0.0229 - 8 0.00961 - 9 0.000532 - 10 0.000431 - 12 0.0558 - 13 0.14 - 14 0.108 - 15 0.0833 - 16 0.00388 - 18 0.000919 - 19 0.0976 - 20 9.49e-05 - 21 0.0678 - 22 0.000427 - 23 0.000122 - 24 0.00078 - 25 2.37e-05 - 26 0.0912 - 27 1.36e-05 - 28 0.00706 - 29 0.00917 - 30 0.00623 - 31 0.0111 - 32 0.00412 - 33 0.00631 - 34 0.0243 - 35 0.0121 - 37 0.000692 - 40 7.12e-05 - 41 0.0548 - 42 0.00322 - 43 0.00148 - 44 0.000363 - 45 0.00512 - 46 0.0116 - 47 0.00527 - - 0 33828 41 0 - 0 0.0459 - 1 0.000443 - 2 0.0164 - 3 0.00573 - 4 0.0196 - 5 0.0219 - 6 0.000118 - 7 0.00198 - 8 0.00399 - 9 0.000236 - 10 0.000709 - 12 0.0834 - 13 0.183 - 14 0.139 - 15 0.0942 - 16 0.00562 - 18 0.0013 - 19 0.154 - 20 8.87e-05 - 21 0.0574 - 22 0.000118 - 23 2.96e-05 - 24 0.000177 - 26 0.0434 - 28 0.00121 - 29 0.00127 - 30 0.00139 - 31 0.0018 - 32 0.00106 - 33 0.000709 - 34 0.0345 - 35 0.0178 - 37 5.91e-05 - 40 2.96e-05 - 41 0.0478 - 42 0.00328 - 43 0.00207 - 44 2.96e-05 - 45 0.00532 - 46 0.00316 - 47 0.000207 - - 1 555 24 0 - 0 0.342 - 2 0.018 - 4 0.0036 - 7 0.245 - 8 0.0018 - 13 0.0613 - 14 0.0721 - 15 0.00541 - 19 0.00541 - 20 0.0036 - 21 0.101 - 24 0.00541 - 26 0.0198 - 28 0.0126 - 29 0.0036 - 31 0.0036 - 32 0.0018 - 33 0.0036 - 41 0.0378 - 42 0.0036 - 43 0.0036 - 45 0.0144 - 46 0.0036 - 47 0.027 - - 2 411 19 14 - 0 0.00243 - 7 0.00487 - 8 0.00973 - 12 0.017 - 13 0.00973 - 14 0.0146 - 15 0.00487 - 28 0.338 - 29 0.0779 - 30 0.151 - 31 0.173 - 32 0.0779 - 33 0.09 - 34 0.00243 - 41 0.0146 - 42 0.00243 - 43 0.00243 - 44 0.00243 - 46 0.00487 - - 0 2 2 0 - 8 0.5 - 12 0.5 - - 8 2 1 0 - 8 1 - - 12 3 1 0 - 12 1 - - 13 2 1 0 - 13 1 - - 21 2 2 0 - 28 0.5 - 46 0.5 - - 28 142 4 0 - 28 0.972 - 41 0.0141 - 42 0.00704 - 43 0.00704 - - 29 33 2 0 - 29 0.97 - 41 0.0303 - - 30 64 3 0 - 7 0.0156 - 8 0.0156 - 30 0.969 - - 31 73 3 0 - 31 0.973 - 41 0.0137 - 44 0.0137 - - 32 34 3 0 - 0 0.0294 - 32 0.941 - 41 0.0294 - - 33 37 1 0 - 33 1 - - 45 1 1 0 - 46 1 - - 47 1 1 0 - 15 1 - - 69 13 6 0 - 7 0.0769 - 12 0.231 - 13 0.154 - 14 0.385 - 15 0.0769 - 34 0.0769 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 13 0.111 - 19 0.111 - 26 0.222 - 41 0.333 - - 7 23 6 0 - 0 0.522 - 8 0.0435 - 13 0.087 - 14 0.0435 - 21 0.261 - 41 0.0435 - - 8 152 22 1 - 0 0.283 - 1 0.0132 - 2 0.0329 - 4 0.0197 - 7 0.0658 - 8 0.00658 - 13 0.0329 - 14 0.0724 - 15 0.0132 - 16 0.00658 - 19 0.00658 - 21 0.25 - 22 0.0197 - 23 0.00658 - 26 0.0526 - 28 0.0132 - 29 0.0132 - 32 0.00658 - 41 0.0395 - 45 0.0263 - 46 0.00658 - 47 0.0132 - - 2 3 2 0 - 4 0.667 - 22 0.333 - - 12 9669 37 0 - 0 0.000207 - 2 0.0233 - 3 0.00776 - 4 0.0185 - 5 0.00755 - 6 0.000207 - 7 0.00114 - 8 0.00259 - 9 0.00031 - 10 0.000207 - 12 0.000103 - 13 0.242 - 14 0.173 - 15 0.106 - 16 0.00641 - 18 0.00103 - 19 0.222 - 21 0.0332 - 22 0.00031 - 23 0.000103 - 24 0.000103 - 28 0.00124 - 29 0.00124 - 30 0.000931 - 31 0.00238 - 32 0.00207 - 33 0.00176 - 34 0.0602 - 35 0.0146 - 40 0.000103 - 41 0.0506 - 42 0.00434 - 43 0.00321 - 44 0.000103 - 45 0.00858 - 46 0.0031 - 47 0.000103 - - 13 318 31 3 - 0 0.0252 - 1 0.00943 - 2 0.0629 - 3 0.066 - 4 0.0377 - 7 0.145 - 8 0.0252 - 10 0.0126 - 12 0.00314 - 13 0.164 - 14 0.0283 - 15 0.0377 - 16 0.00943 - 18 0.00314 - 19 0.00314 - 21 0.066 - 24 0.00629 - 26 0.151 - 28 0.0252 - 29 0.0189 - 30 0.00943 - 31 0.0157 - 32 0.00629 - 34 0.00314 - 37 0.00314 - 41 0.0346 - 42 0.00314 - 43 0.00314 - 45 0.00943 - 46 0.00314 - 47 0.00943 - - 2 2 2 0 - 7 0.5 - 31 0.5 - - 28 3 3 0 - 7 0.333 - 12 0.333 - 45 0.333 - - 69 12 6 0 - 2 0.0833 - 3 0.0833 - 13 0.583 - 15 0.0833 - 18 0.0833 - 41 0.0833 - - 14 122 21 0 - 0 0.0656 - 2 0.123 - 3 0.0328 - 4 0.0082 - 7 0.041 - 8 0.0246 - 13 0.262 - 14 0.0164 - 15 0.254 - 18 0.0082 - 19 0.0164 - 21 0.0082 - 30 0.0082 - 34 0.0082 - 35 0.0164 - 41 0.0574 - 42 0.0082 - 43 0.0082 - 45 0.0164 - 46 0.0082 - 47 0.0082 - - 15 37 10 0 - 0 0.108 - 2 0.027 - 7 0.0541 - 15 0.297 - 18 0.027 - 26 0.0541 - 33 0.027 - 42 0.027 - 45 0.162 - 47 0.216 - - 18 30 6 0 - 4 0.1 - 5 0.367 - 7 0.0667 - 13 0.0667 - 19 0.367 - 34 0.0333 - - 21 80 22 8 - 0 0.1 - 1 0.0125 - 2 0.0875 - 7 0.112 - 8 0.025 - 10 0.0125 - 12 0.112 - 13 0.15 - 14 0.0625 - 16 0.0125 - 19 0.0875 - 21 0.0375 - 26 0.0375 - 28 0.0125 - 29 0.0125 - 31 0.0125 - 32 0.0125 - 35 0.0125 - 41 0.05 - 42 0.0125 - 45 0.0125 - 47 0.0125 - - 0 4 2 0 - 12 0.25 - 19 0.75 - - 26 4 3 0 - 2 0.25 - 13 0.5 - 31 0.25 - - 28 9 6 0 - 2 0.444 - 7 0.111 - 12 0.111 - 13 0.111 - 16 0.111 - 42 0.111 - - 30 12 7 0 - 0 0.0833 - 7 0.25 - 13 0.25 - 19 0.0833 - 26 0.0833 - 32 0.0833 - 41 0.167 - - 31 10 5 0 - 0 0.1 - 7 0.1 - 14 0.5 - 41 0.2 - 47 0.1 - - 47 15 10 0 - 0 0.267 - 1 0.0667 - 2 0.0667 - 7 0.0667 - 10 0.0667 - 13 0.0667 - 21 0.133 - 26 0.133 - 28 0.0667 - 29 0.0667 - - 49 7 6 0 - 0 0.143 - 7 0.143 - 8 0.143 - 13 0.286 - 19 0.143 - 45 0.143 - - 69 13 6 0 - 8 0.0769 - 12 0.538 - 13 0.0769 - 19 0.154 - 21 0.0769 - 35 0.0769 - - 22 3 1 0 - 0 1 - - 26 13048 39 0 - 0 0.0513 - 1 0.00107 - 2 0.0104 - 3 0.018 - 4 0.00107 - 5 7.66e-05 - 6 0.000153 - 7 0.00613 - 8 0.084 - 9 0.00429 - 10 0.00046 - 12 0.00245 - 13 0.2 - 14 0.114 - 15 0.0403 - 16 0.00215 - 18 0.000153 - 19 0.0154 - 21 0.0327 - 22 0.000996 - 23 0.000153 - 24 0.00452 - 26 7.66e-05 - 28 0.0401 - 29 0.073 - 30 0.0567 - 31 0.105 - 32 0.0336 - 33 0.0583 - 34 0.000307 - 35 0.00115 - 37 0.00452 - 41 0.0174 - 42 0.00268 - 43 0.00115 - 44 0.000383 - 45 0.00261 - 46 0.0049 - 47 0.00897 - - 28 21028 36 3 - 0 0.00471 - 1 4.76e-05 - 2 0.0342 - 3 4.76e-05 - 4 0.000856 - 7 0.00185 - 8 0.00019 - 10 0.00019 - 12 0.238 - 13 0.00623 - 14 0.00923 - 15 0.00385 - 16 4.76e-05 - 18 0.000143 - 19 0.00956 - 21 0.117 - 22 0.00105 - 23 9.51e-05 - 26 0.538 - 27 9.51e-05 - 28 0.00518 - 29 0.00271 - 30 0.000476 - 31 0.000618 - 32 0.000666 - 33 0.000808 - 34 0.00019 - 35 0.000428 - 40 0.000333 - 41 0.00704 - 42 0.00195 - 43 0.000333 - 44 0.000666 - 45 0.00818 - 46 0.000238 - 47 0.0049 - - 2 139 9 0 - 2 0.0144 - 12 0.137 - 13 0.00719 - 14 0.0144 - 15 0.00719 - 21 0.0719 - 26 0.669 - 41 0.0647 - 45 0.0144 - - 41 17 6 0 - 0 0.0588 - 12 0.294 - 21 0.0588 - 26 0.353 - 33 0.0588 - 41 0.176 - - 46 2 1 0 - 45 1 - - 29 21706 36 1 - 0 0.00438 - 1 0.00101 - 2 0.0333 - 3 0.00604 - 4 0.00392 - 7 0.00143 - 8 0.00207 - 9 0.000184 - 10 9.21e-05 - 12 0.000276 - 13 0.196 - 14 0.136 - 15 0.23 - 16 0.00792 - 18 0.0018 - 19 0.133 - 21 0.0658 - 22 0.000322 - 23 4.61e-05 - 26 0.000138 - 28 9.21e-05 - 29 0.000322 - 30 0.000461 - 31 0.000921 - 32 4.61e-05 - 33 0.000138 - 34 0.0313 - 35 0.0208 - 37 9.21e-05 - 41 0.0885 - 42 0.0024 - 43 0.00147 - 44 9.21e-05 - 45 0.00235 - 46 0.0266 - 47 0.000645 - - 2 32 10 0 - 2 0.0312 - 13 0.156 - 14 0.0625 - 15 0.156 - 19 0.188 - 21 0.188 - 22 0.0312 - 35 0.125 - 41 0.0312 - 45 0.0312 - - 30 11273 33 1 - 0 0.265 - 2 0.0353 - 3 0.00284 - 4 0.00213 - 7 0.227 - 8 0.00319 - 9 8.87e-05 - 10 0.000355 - 13 0.0685 - 14 0.0679 - 15 0.0108 - 16 0.000621 - 18 0.00115 - 19 0.00337 - 20 0.00071 - 21 0.0726 - 22 0.000355 - 24 0.00364 - 26 0.0114 - 28 0.0184 - 29 0.0169 - 30 0.00337 - 31 0.00523 - 32 0.00417 - 33 0.0047 - 37 0.0016 - 41 0.126 - 42 0.00523 - 43 0.000266 - 44 0.000532 - 45 0.00772 - 46 0.00408 - 47 0.0245 - - 2 62 14 0 - 0 0.0968 - 2 0.0161 - 3 0.0161 - 7 0.355 - 13 0.0323 - 14 0.0968 - 15 0.0161 - 19 0.0323 - 21 0.0806 - 22 0.0161 - 26 0.113 - 28 0.0323 - 33 0.0161 - 41 0.0806 - - 31 15631 38 1 - 0 0.586 - 1 0.0204 - 2 0.0168 - 3 0.00448 - 4 0.00435 - 6 6.4e-05 - 7 0.0117 - 8 0.00032 - 9 0.000128 - 10 0.000256 - 12 0.00032 - 13 0.0843 - 14 0.0769 - 15 0.00409 - 16 0.000384 - 18 0.000256 - 19 0.00186 - 21 0.11 - 22 0.000768 - 23 0.00109 - 26 0.000128 - 28 0.00211 - 29 0.00211 - 30 0.000768 - 31 0.00102 - 32 0.000768 - 33 0.00122 - 34 0.000256 - 35 0.000128 - 37 0.00109 - 40 6.4e-05 - 41 0.047 - 42 0.00237 - 43 0.000448 - 44 0.00147 - 45 0.00333 - 46 0.00224 - 47 0.0094 - - 2 71 8 0 - 0 0.69 - 1 0.0563 - 13 0.0141 - 14 0.0423 - 19 0.0141 - 21 0.0986 - 41 0.0704 - 45 0.0141 - - 32 5414 31 1 - 2 0.0296 - 3 0.00166 - 4 0.0133 - 7 0.00129 - 8 0.00332 - 9 0.000369 - 10 0.00222 - 12 0.000185 - 13 0.0334 - 14 0.401 - 15 0.0253 - 16 0.0105 - 18 0.000739 - 19 0.248 - 21 0.0876 - 22 0.000185 - 23 0.000185 - 29 0.000185 - 30 0.000369 - 31 0.00185 - 32 0.000369 - 33 0.000369 - 34 0.0567 - 35 0.0412 - 37 0.000185 - 41 0.0292 - 42 0.00332 - 43 0.00259 - 45 0.00314 - 46 0.00148 - 47 0.000185 - - 2 32 7 0 - 2 0.0312 - 14 0.406 - 19 0.219 - 21 0.0312 - 34 0.156 - 35 0.0625 - 41 0.0938 - - 33 9604 31 2 - 2 0.0311 - 3 0.00281 - 4 0.0167 - 5 0.000625 - 6 0.000416 - 7 0.00198 - 8 0.00167 - 9 0.000104 - 10 0.000104 - 13 0.207 - 14 0.0117 - 15 0.162 - 16 0.0025 - 18 0.000937 - 19 0.192 - 21 0.0798 - 22 0.000312 - 25 0.000312 - 28 0.000104 - 29 0.000625 - 30 0.000416 - 31 0.000521 - 32 0.000312 - 34 0.0715 - 35 0.0271 - 41 0.0868 - 42 0.00344 - 43 0.00281 - 45 0.00573 - 46 0.0842 - 47 0.00375 - - 2 37 10 0 - 8 0.027 - 13 0.189 - 15 0.189 - 16 0.027 - 18 0.027 - 19 0.0811 - 21 0.027 - 34 0.243 - 35 0.0541 - 41 0.135 - - 41 2 2 0 - 2 0.5 - 34 0.5 - - 41 83 16 15 - 0 0.012 - 2 0.0482 - 3 0.012 - 8 0.0241 - 12 0.012 - 13 0.205 - 14 0.012 - 15 0.0482 - 19 0.0361 - 21 0.145 - 28 0.205 - 29 0.0241 - 30 0.0361 - 31 0.0843 - 32 0.0723 - 33 0.0241 - - 0 5 3 0 - 13 0.6 - 14 0.2 - 21 0.2 - - 2 6 4 0 - 28 0.333 - 29 0.167 - 31 0.333 - 32 0.167 - - 12 4 2 0 - 13 0.5 - 19 0.5 - - 26 5 2 0 - 13 0.6 - 21 0.4 - - 28 14 2 0 - 21 0.0714 - 28 0.929 - - 29 7 4 0 - 13 0.286 - 15 0.429 - 21 0.143 - 29 0.143 - - 30 2 1 0 - 30 1 - - 31 6 2 0 - 21 0.167 - 31 0.833 - - 32 4 1 0 - 32 1 - - 33 2 1 0 - 33 1 - - 49 6 5 0 - 2 0.167 - 12 0.167 - 13 0.333 - 21 0.167 - 28 0.167 - - 55 5 3 0 - 3 0.2 - 13 0.6 - 19 0.2 - - 57 5 3 0 - 2 0.6 - 8 0.2 - 21 0.2 - - 64 3 2 0 - 8 0.333 - 21 0.667 - - 69 6 4 0 - 13 0.333 - 15 0.167 - 21 0.333 - 30 0.167 - - 42 7 3 0 - 25 0.143 - 28 0.143 - 47 0.714 - - 44 5 4 0 - 13 0.4 - 19 0.2 - 26 0.2 - 31 0.2 - - 45 119 15 9 - 0 0.193 - 2 0.0336 - 4 0.0168 - 6 0.0084 - 7 0.0336 - 12 0.0924 - 13 0.134 - 14 0.0588 - 15 0.0252 - 19 0.0672 - 21 0.0672 - 26 0.193 - 28 0.0168 - 35 0.0084 - 41 0.0504 - - 0 6 5 0 - 13 0.167 - 14 0.167 - 15 0.167 - 35 0.167 - 41 0.333 - - 28 35 5 0 - 0 0.0286 - 2 0.0286 - 12 0.2 - 21 0.114 - 26 0.629 - - 29 14 5 0 - 13 0.357 - 14 0.143 - 15 0.143 - 19 0.286 - 41 0.0714 - - 30 15 6 0 - 0 0.267 - 7 0.2 - 14 0.0667 - 21 0.2 - 28 0.133 - 41 0.133 - - 31 14 5 0 - 0 0.714 - 2 0.0714 - 13 0.0714 - 14 0.0714 - 21 0.0714 - - 32 4 3 0 - 2 0.25 - 14 0.25 - 19 0.5 - - 33 8 3 0 - 2 0.125 - 13 0.75 - 19 0.125 - - 49 10 7 0 - 0 0.3 - 4 0.1 - 12 0.2 - 13 0.1 - 14 0.1 - 26 0.1 - 41 0.1 - - 69 9 6 0 - 0 0.333 - 4 0.111 - 6 0.111 - 12 0.111 - 13 0.222 - 19 0.111 - - 46 4 3 0 - 0 0.25 - 21 0.25 - 28 0.5 - - 47 145999 43 35 - 0 0.106 - 1 0.00268 - 2 0.0245 - 3 0.00554 - 4 0.00909 - 5 0.00573 - 6 9.59e-05 - 7 0.023 - 8 0.00966 - 9 0.000527 - 10 0.000404 - 12 0.0564 - 13 0.141 - 14 0.109 - 15 0.0841 - 16 0.00392 - 18 0.000918 - 19 0.0986 - 20 9.59e-05 - 21 0.0628 - 22 0.000363 - 23 6.16e-05 - 24 0.000788 - 25 2.05e-05 - 26 0.0921 - 27 1.37e-05 - 28 0.00658 - 29 0.00915 - 30 0.00608 - 31 0.011 - 32 0.00403 - 33 0.00624 - 34 0.0245 - 35 0.0122 - 37 0.000699 - 40 6.85e-05 - 41 0.0551 - 42 0.00323 - 43 0.00149 - 44 0.000349 - 45 0.00476 - 46 0.0117 - 47 0.00533 - - 0 33747 40 0 - 0 0.046 - 1 0.000444 - 2 0.0164 - 3 0.00572 - 4 0.0196 - 5 0.022 - 6 0.000119 - 7 0.00199 - 8 0.004 - 9 0.000237 - 10 0.000711 - 12 0.0836 - 13 0.183 - 14 0.139 - 15 0.0945 - 16 0.00563 - 18 0.0013 - 19 0.155 - 20 8.89e-05 - 21 0.0558 - 22 0.000119 - 23 2.96e-05 - 24 0.000178 - 26 0.0435 - 28 0.00121 - 29 0.00127 - 30 0.00139 - 31 0.00181 - 32 0.00107 - 33 0.000711 - 34 0.0346 - 35 0.0179 - 37 5.93e-05 - 40 2.96e-05 - 41 0.0477 - 42 0.00329 - 43 0.00207 - 45 0.00516 - 46 0.00317 - 47 0.000207 - - 1 547 24 0 - 0 0.347 - 2 0.0183 - 4 0.00366 - 7 0.249 - 8 0.00183 - 13 0.0622 - 14 0.0731 - 15 0.00548 - 19 0.00548 - 20 0.00366 - 21 0.0878 - 24 0.00548 - 26 0.0201 - 28 0.0128 - 29 0.00366 - 31 0.00366 - 32 0.00183 - 33 0.00366 - 41 0.0384 - 42 0.00366 - 43 0.00366 - 45 0.0146 - 46 0.00366 - 47 0.0274 - - 2 16 6 0 - 7 0.125 - 12 0.25 - 13 0.125 - 14 0.312 - 15 0.125 - 34 0.0625 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 13 0.111 - 19 0.111 - 26 0.222 - 41 0.333 - - 7 23 6 0 - 0 0.522 - 8 0.0435 - 13 0.087 - 14 0.0435 - 21 0.261 - 41 0.0435 - - 8 124 20 0 - 0 0.347 - 1 0.0161 - 2 0.0242 - 4 0.0161 - 7 0.0645 - 8 0.00806 - 13 0.0403 - 14 0.0887 - 15 0.0161 - 16 0.00806 - 19 0.00806 - 21 0.169 - 26 0.0645 - 28 0.0161 - 29 0.0161 - 32 0.00806 - 41 0.0484 - 45 0.0161 - 46 0.00806 - 47 0.0161 - - 12 9643 36 0 - 0 0.000207 - 2 0.023 - 3 0.00778 - 4 0.0186 - 5 0.00757 - 6 0.000207 - 7 0.00114 - 8 0.00259 - 9 0.000311 - 10 0.000207 - 12 0.000104 - 13 0.243 - 14 0.174 - 15 0.106 - 16 0.00643 - 18 0.00104 - 19 0.222 - 21 0.0317 - 22 0.000311 - 23 0.000104 - 24 0.000104 - 28 0.00124 - 29 0.00124 - 30 0.000933 - 31 0.00239 - 32 0.00207 - 33 0.00176 - 34 0.0604 - 35 0.0146 - 40 0.000104 - 41 0.0502 - 42 0.00436 - 43 0.00321 - 45 0.00861 - 46 0.00301 - 47 0.000104 - - 13 311 31 0 - 0 0.0257 - 1 0.00965 - 2 0.0579 - 3 0.0675 - 4 0.0386 - 7 0.148 - 8 0.0257 - 10 0.00643 - 12 0.00322 - 13 0.164 - 14 0.0289 - 15 0.0386 - 16 0.00965 - 18 0.00322 - 19 0.00322 - 21 0.0675 - 24 0.00643 - 26 0.154 - 28 0.0257 - 29 0.0193 - 30 0.00965 - 31 0.0161 - 32 0.00643 - 34 0.00322 - 37 0.00322 - 41 0.0354 - 42 0.00322 - 43 0.00322 - 45 0.00322 - 46 0.00322 - 47 0.00965 - - 14 121 21 0 - 0 0.0661 - 2 0.116 - 3 0.0331 - 4 0.00826 - 7 0.0413 - 8 0.0248 - 13 0.264 - 14 0.0165 - 15 0.256 - 18 0.00826 - 19 0.0165 - 21 0.00826 - 30 0.00826 - 34 0.00826 - 35 0.0165 - 41 0.0579 - 42 0.00826 - 43 0.00826 - 45 0.0165 - 46 0.00826 - 47 0.00826 - - 15 37 10 0 - 0 0.108 - 2 0.027 - 7 0.0541 - 15 0.297 - 18 0.027 - 26 0.0541 - 33 0.027 - 42 0.027 - 45 0.162 - 47 0.216 - - 18 30 6 0 - 4 0.1 - 5 0.367 - 7 0.0667 - 13 0.0667 - 19 0.367 - 34 0.0333 - - 21 72 21 0 - 0 0.0972 - 1 0.0139 - 2 0.0694 - 7 0.111 - 8 0.0278 - 12 0.125 - 13 0.153 - 14 0.0694 - 16 0.0139 - 19 0.0972 - 21 0.0139 - 26 0.0417 - 28 0.0139 - 29 0.0139 - 31 0.0139 - 32 0.0139 - 35 0.0139 - 41 0.0556 - 42 0.0139 - 45 0.0139 - 47 0.0139 - - 22 3 1 0 - 0 1 - - 26 13034 39 0 - 0 0.0514 - 1 0.00107 - 2 0.0104 - 3 0.018 - 4 0.000997 - 5 7.67e-05 - 6 0.000153 - 7 0.00606 - 8 0.0841 - 9 0.0043 - 10 0.00046 - 12 0.00246 - 13 0.2 - 14 0.114 - 15 0.0404 - 16 0.00215 - 18 0.000153 - 19 0.0154 - 21 0.0322 - 22 0.000997 - 23 0.000153 - 24 0.00453 - 26 7.67e-05 - 28 0.0401 - 29 0.0731 - 30 0.0568 - 31 0.105 - 32 0.0337 - 33 0.0584 - 34 0.000307 - 35 0.00115 - 37 0.00453 - 41 0.017 - 42 0.00269 - 43 0.00115 - 44 0.000384 - 45 0.00261 - 46 0.00491 - 47 0.00898 - - 28 20589 35 0 - 0 0.00481 - 1 4.86e-05 - 2 0.028 - 3 4.86e-05 - 4 0.000777 - 7 0.0016 - 8 0.000194 - 10 9.71e-05 - 12 0.243 - 13 0.00612 - 14 0.00937 - 15 0.00393 - 16 4.86e-05 - 18 0.000146 - 19 0.00976 - 21 0.109 - 22 0.000486 - 26 0.55 - 27 9.71e-05 - 28 0.00525 - 29 0.00277 - 30 0.000486 - 31 0.000631 - 32 0.00068 - 33 0.000826 - 34 0.000194 - 35 0.000437 - 40 0.000291 - 41 0.00641 - 42 0.00175 - 43 0.000291 - 44 0.000631 - 45 0.00665 - 46 0.000243 - 47 0.005 - - 29 21355 36 0 - 0 0.00445 - 1 0.00103 - 2 0.0322 - 3 0.00609 - 4 0.00393 - 7 0.00103 - 8 0.00206 - 9 0.000187 - 10 4.68e-05 - 12 0.000281 - 13 0.199 - 14 0.138 - 15 0.234 - 16 0.00805 - 18 0.00183 - 19 0.135 - 21 0.0543 - 22 0.000328 - 23 4.68e-05 - 26 0.00014 - 28 9.37e-05 - 29 0.000328 - 30 0.000468 - 31 0.000937 - 32 4.68e-05 - 33 0.00014 - 34 0.0318 - 35 0.0212 - 37 9.37e-05 - 41 0.0896 - 42 0.00244 - 43 0.0015 - 44 4.68e-05 - 45 0.00173 - 46 0.0271 - 47 0.000656 - - 30 10957 33 0 - 0 0.273 - 2 0.0305 - 3 0.00292 - 4 0.0021 - 7 0.234 - 8 0.00301 - 9 9.13e-05 - 10 0.000365 - 13 0.0703 - 14 0.0698 - 15 0.0111 - 16 0.000639 - 18 0.00119 - 19 0.00347 - 20 0.00073 - 21 0.0539 - 22 0.000365 - 24 0.00374 - 26 0.0118 - 28 0.0189 - 29 0.0174 - 30 0.00347 - 31 0.00538 - 32 0.00429 - 33 0.00484 - 37 0.00164 - 41 0.129 - 42 0.00538 - 43 0.000274 - 44 0.000548 - 45 0.00657 - 46 0.0042 - 47 0.0252 - - 31 14933 38 0 - 0 0.613 - 1 0.0214 - 2 0.0127 - 3 0.00469 - 4 0.00449 - 6 6.7e-05 - 7 0.0115 - 8 0.000335 - 9 0.000134 - 10 0.000134 - 12 0.000335 - 13 0.088 - 14 0.0805 - 15 0.00429 - 16 0.000402 - 18 0.000268 - 19 0.00194 - 21 0.0765 - 22 0.000603 - 23 0.000268 - 26 0.000134 - 28 0.00221 - 29 0.00221 - 30 0.000804 - 31 0.00107 - 32 0.000804 - 33 0.00127 - 34 0.000268 - 35 0.000134 - 37 0.00114 - 40 6.7e-05 - 41 0.0488 - 42 0.00248 - 43 0.000469 - 44 0.00154 - 45 0.00254 - 46 0.00234 - 47 0.00984 - - 32 5292 30 0 - 2 0.0238 - 3 0.0017 - 4 0.0136 - 7 0.000945 - 8 0.0034 - 9 0.000378 - 10 0.00227 - 12 0.000189 - 13 0.034 - 14 0.41 - 15 0.0259 - 16 0.0108 - 18 0.000756 - 19 0.254 - 21 0.0752 - 22 0.000189 - 29 0.000189 - 30 0.000378 - 31 0.00189 - 32 0.000378 - 33 0.000378 - 34 0.058 - 35 0.0421 - 37 0.000189 - 41 0.0291 - 42 0.0034 - 43 0.00265 - 45 0.00246 - 46 0.00151 - 47 0.000189 - - 33 9413 30 0 - 2 0.0278 - 3 0.00287 - 4 0.017 - 5 0.000637 - 6 0.000425 - 7 0.00181 - 8 0.0017 - 9 0.000106 - 13 0.212 - 14 0.0119 - 15 0.166 - 16 0.00255 - 18 0.000956 - 19 0.196 - 21 0.0667 - 22 0.000212 - 25 0.000319 - 28 0.000106 - 29 0.000637 - 30 0.000425 - 31 0.000531 - 32 0.000319 - 34 0.073 - 35 0.0276 - 41 0.0882 - 42 0.00351 - 43 0.00287 - 45 0.00499 - 46 0.0859 - 47 0.00382 - - 41 7 4 0 - 0 0.143 - 2 0.571 - 12 0.143 - 21 0.143 - - 42 5 1 0 - 47 1 - - 45 114 15 0 - 0 0.202 - 2 0.0263 - 4 0.00877 - 6 0.00877 - 7 0.0351 - 12 0.0965 - 13 0.14 - 14 0.0614 - 15 0.0263 - 19 0.0702 - 21 0.0439 - 26 0.202 - 28 0.0175 - 35 0.00877 - 41 0.0526 - - 48 40 3 0 - 2 0.925 - 21 0.025 - 41 0.05 - - 49 1672 33 0 - 0 0.197 - 1 0.00538 - 2 0.145 - 3 0.00359 - 4 0.00718 - 7 0.0317 - 8 0.0012 - 10 0.0012 - 12 0.0514 - 13 0.106 - 14 0.103 - 15 0.0532 - 16 0.00239 - 18 0.000598 - 19 0.0371 - 21 0.0568 - 26 0.0359 - 28 0.0012 - 29 0.00239 - 30 0.0012 - 31 0.0012 - 32 0.000598 - 33 0.000598 - 34 0.0179 - 35 0.0102 - 37 0.0012 - 41 0.101 - 42 0.00538 - 43 0.000598 - 44 0.00179 - 45 0.00478 - 46 0.00299 - 47 0.00897 - - 50 8 7 0 - 0 0.125 - 13 0.125 - 14 0.125 - 15 0.25 - 30 0.125 - 33 0.125 - 41 0.125 - - 53 1 1 0 - 42 1 - - 55 113 11 0 - 0 0.0619 - 2 0.708 - 7 0.0177 - 14 0.0177 - 15 0.00885 - 19 0.0177 - 21 0.00885 - 26 0.0177 - 40 0.00885 - 41 0.106 - 42 0.0265 - - 57 77 6 0 - 0 0.234 - 2 0.558 - 12 0.039 - 15 0.013 - 21 0.039 - 41 0.117 - - 58 8 4 0 - 2 0.625 - 12 0.125 - 41 0.125 - 42 0.125 - - 60 2 2 0 - 0 0.5 - 2 0.5 - - 62 5 2 0 - 2 0.8 - 15 0.2 - - 64 7 4 0 - 0 0.286 - 2 0.429 - 7 0.143 - 41 0.143 - - 69 3673 34 0 - 0 0.0792 - 1 0.00136 - 2 0.00327 - 3 0.00163 - 4 0.00517 - 5 0.000817 - 7 0.0343 - 8 0.00463 - 10 0.000545 - 12 0.0686 - 13 0.141 - 14 0.107 - 15 0.116 - 16 0.00436 - 18 0.000545 - 19 0.106 - 20 0.000272 - 21 0.0482 - 24 0.000817 - 26 0.1 - 28 0.00327 - 29 0.0049 - 30 0.00218 - 31 0.0049 - 32 0.00218 - 33 0.00272 - 34 0.0302 - 35 0.0166 - 41 0.0803 - 42 0.00762 - 43 0.00191 - 45 0.00871 - 46 0.00299 - 47 0.00681 - - 74 1 1 0 - 47 1 - - 48 42 4 0 - 2 0.881 - 9 0.0238 - 21 0.0476 - 41 0.0476 - - 49 1717 34 19 - 0 0.192 - 1 0.00524 - 2 0.142 - 3 0.00466 - 4 0.00699 - 7 0.0309 - 8 0.00116 - 10 0.00116 - 12 0.0501 - 13 0.104 - 14 0.102 - 15 0.0524 - 16 0.00233 - 18 0.000582 - 19 0.0361 - 21 0.0658 - 22 0.000582 - 26 0.0349 - 28 0.00116 - 29 0.00233 - 30 0.00116 - 31 0.00116 - 32 0.000582 - 33 0.000582 - 34 0.0175 - 35 0.0099 - 37 0.00116 - 41 0.103 - 42 0.00524 - 43 0.000582 - 44 0.00175 - 45 0.0105 - 46 0.00291 - 47 0.00874 - - 0 55 10 0 - 0 0.0364 - 2 0.491 - 7 0.0182 - 12 0.0545 - 13 0.0909 - 15 0.0909 - 19 0.0727 - 21 0.0727 - 35 0.0182 - 41 0.0545 - - 1 6 4 0 - 2 0.333 - 7 0.167 - 13 0.333 - 14 0.167 - - 8 23 9 0 - 0 0.478 - 2 0.0435 - 12 0.0435 - 13 0.0435 - 14 0.13 - 21 0.13 - 29 0.0435 - 41 0.0435 - 47 0.0435 - - 12 15 4 0 - 2 0.733 - 13 0.133 - 14 0.0667 - 21 0.0667 - - 21 3 3 0 - 13 0.333 - 26 0.333 - 41 0.333 - - 26 4 4 0 - 0 0.25 - 2 0.25 - 8 0.25 - 29 0.25 - - 28 218 14 0 - 2 0.156 - 7 0.00459 - 12 0.362 - 13 0.0183 - 14 0.0229 - 15 0.00917 - 19 0.0183 - 21 0.101 - 26 0.261 - 37 0.00459 - 41 0.0183 - 42 0.00459 - 45 0.0138 - 47 0.00459 - - 29 283 14 0 - 0 0.0247 - 2 0.194 - 13 0.184 - 14 0.0954 - 15 0.205 - 16 0.00707 - 19 0.0777 - 21 0.0565 - 34 0.0283 - 35 0.0212 - 41 0.0883 - 43 0.00353 - 45 0.0106 - 46 0.00353 - - 30 218 18 0 - 0 0.216 - 2 0.078 - 4 0.00459 - 7 0.188 - 13 0.0872 - 14 0.147 - 15 0.0138 - 19 0.0138 - 21 0.0459 - 26 0.00459 - 29 0.00459 - 30 0.00459 - 31 0.00917 - 32 0.00459 - 41 0.128 - 42 0.0183 - 45 0.00917 - 47 0.0229 - - 31 583 24 0 - 0 0.437 - 1 0.0154 - 2 0.048 - 3 0.0103 - 4 0.0103 - 7 0.00858 - 10 0.00343 - 12 0.00172 - 13 0.0978 - 14 0.11 - 15 0.00515 - 18 0.00172 - 19 0.00343 - 21 0.0703 - 28 0.00343 - 29 0.00172 - 34 0.00172 - 37 0.00172 - 41 0.132 - 42 0.00515 - 44 0.00515 - 45 0.0103 - 46 0.00343 - 47 0.012 - - 32 79 12 0 - 2 0.152 - 4 0.0253 - 13 0.0127 - 14 0.392 - 15 0.038 - 16 0.0127 - 19 0.19 - 21 0.0633 - 34 0.0506 - 35 0.038 - 41 0.0127 - 46 0.0127 - - 33 142 15 0 - 2 0.204 - 4 0.0141 - 7 0.0211 - 13 0.232 - 14 0.0141 - 15 0.106 - 16 0.00704 - 19 0.0704 - 21 0.0352 - 30 0.00704 - 34 0.12 - 35 0.0352 - 41 0.106 - 45 0.0211 - 46 0.00704 - - 41 10 2 0 - 2 0.1 - 41 0.9 - - 45 2 2 0 - 7 0.5 - 21 0.5 - - 46 1 1 0 - 4 1 - - 47 29 9 0 - 0 0.172 - 2 0.345 - 3 0.069 - 12 0.0345 - 14 0.103 - 15 0.0345 - 21 0.103 - 22 0.0345 - 41 0.103 - - 49 11 4 0 - 2 0.545 - 14 0.0909 - 35 0.0909 - 41 0.273 - - 55 6 3 0 - 2 0.5 - 41 0.333 - 42 0.167 - - 69 25 13 0 - 0 0.04 - 2 0.12 - 8 0.04 - 13 0.08 - 14 0.2 - 19 0.08 - 21 0.08 - 26 0.04 - 33 0.04 - 35 0.04 - 41 0.16 - 45 0.04 - 47 0.04 - - 50 13 9 0 - 0 0.0769 - 13 0.154 - 14 0.0769 - 15 0.154 - 30 0.0769 - 31 0.0769 - 32 0.0769 - 33 0.0769 - 41 0.231 - - 53 1 1 0 - 42 1 - - 55 130 17 5 - 0 0.0538 - 2 0.615 - 4 0.00769 - 7 0.0154 - 9 0.00769 - 13 0.00769 - 14 0.0231 - 15 0.00769 - 19 0.0154 - 21 0.0462 - 26 0.0154 - 28 0.00769 - 33 0.00769 - 40 0.00769 - 41 0.131 - 42 0.0231 - 46 0.00769 - - 31 6 2 0 - 0 0.833 - 40 0.167 - - 41 3 3 0 - 15 0.333 - 19 0.333 - 41 0.333 - - 47 89 12 0 - 0 0.0225 - 2 0.652 - 4 0.0112 - 9 0.0112 - 13 0.0112 - 21 0.0449 - 26 0.0112 - 28 0.0112 - 33 0.0112 - 41 0.169 - 42 0.0337 - 46 0.0112 - - 55 4 3 0 - 2 0.5 - 19 0.25 - 26 0.25 - - 62 10 4 0 - 2 0.6 - 7 0.2 - 14 0.1 - 41 0.1 - - 57 96 9 6 - 0 0.188 - 2 0.448 - 3 0.0104 - 8 0.0104 - 12 0.0312 - 13 0.115 - 15 0.0208 - 21 0.0312 - 41 0.146 - - 0 7 1 0 - 2 1 - - 29 7 1 0 - 2 1 - - 41 17 2 0 - 2 0.294 - 41 0.706 - - 47 36 8 0 - 0 0.472 - 2 0.167 - 3 0.0278 - 8 0.0278 - 12 0.0833 - 13 0.167 - 15 0.0278 - 21 0.0278 - - 64 3 2 0 - 13 0.667 - 21 0.333 - - 69 2 2 0 - 13 0.5 - 15 0.5 - - 58 10 6 0 - 2 0.5 - 8 0.1 - 12 0.1 - 28 0.1 - 41 0.1 - 42 0.1 - - 62 16 7 0 - 2 0.25 - 3 0.125 - 4 0.0625 - 13 0.25 - 14 0.188 - 15 0.0625 - 41 0.0625 - - 64 18 10 1 - 0 0.111 - 2 0.167 - 3 0.111 - 7 0.0556 - 8 0.0556 - 9 0.0556 - 13 0.111 - 14 0.0556 - 16 0.0556 - 41 0.222 - - 41 4 2 0 - 2 0.75 - 41 0.25 - - 69 3772 35 0 - 0 0.0771 - 1 0.00133 - 2 0.00663 - 3 0.00159 - 4 0.0061 - 5 0.000795 - 7 0.0334 - 8 0.00477 - 10 0.00053 - 12 0.0668 - 13 0.141 - 14 0.104 - 15 0.114 - 16 0.00424 - 18 0.00133 - 19 0.103 - 20 0.000265 - 21 0.0586 - 23 0.000265 - 24 0.000795 - 26 0.0978 - 28 0.00318 - 29 0.00477 - 30 0.00212 - 31 0.00477 - 32 0.00212 - 33 0.00265 - 34 0.0294 - 35 0.0162 - 41 0.0798 - 42 0.00769 - 43 0.00186 - 45 0.0109 - 46 0.00292 - 47 0.00663 - - 74 1 1 0 - 47 1 - -70 128 19 3 - 0 0.0156 - 2 0.0703 - 7 0.156 - 8 0.0234 - 13 0.0312 - 19 0.0156 - 21 0.0547 - 24 0.0312 - 28 0.172 - 29 0.0312 - 30 0.0312 - 31 0.0312 - 32 0.0781 - 33 0.109 - 37 0.00781 - 41 0.0156 - 42 0.0312 - 45 0.0312 - 47 0.0625 - - 8 3 3 0 - 2 0.333 - 21 0.333 - 37 0.333 - - 21 7 6 0 - 2 0.143 - 28 0.286 - 29 0.143 - 33 0.143 - 42 0.143 - 47 0.143 - - 47 59 17 1 - 0 0.0169 - 2 0.0678 - 7 0.169 - 8 0.0169 - 13 0.0339 - 19 0.0169 - 24 0.0339 - 28 0.186 - 29 0.0339 - 30 0.0339 - 31 0.0339 - 32 0.0847 - 33 0.119 - 41 0.0169 - 42 0.0339 - 45 0.0339 - 47 0.0678 - - 21 7 6 0 - 2 0.143 - 28 0.286 - 29 0.143 - 33 0.143 - 42 0.143 - 47 0.143 - -71 4170 32 7 - 0 0.0254 - 2 0.0451 - 3 0.0139 - 4 0.00048 - 7 0.0686 - 8 0.0206 - 9 0.000959 - 10 0.00192 - 13 0.158 - 14 0.0652 - 15 0.0254 - 18 0.00048 - 19 0.00959 - 21 0.0415 - 22 0.00048 - 24 0.00624 - 26 0.00288 - 28 0.058 - 29 0.0177 - 30 0.012 - 31 0.0197 - 32 0.011 - 33 0.0173 - 34 0.00024 - 37 0.00168 - 40 0.000959 - 41 0.194 - 42 0.0149 - 44 0.00192 - 45 0.0367 - 46 0.011 - 47 0.116 - - 2 6 1 0 - 37 1 - - 7 30 8 0 - 0 0.0333 - 3 0.0667 - 13 0.4 - 14 0.2 - 15 0.133 - 21 0.0667 - 41 0.0667 - 46 0.0333 - - 13 1 1 0 - 34 1 - - 21 24 14 0 - 0 0.0417 - 2 0.0833 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0833 - 24 0.0833 - 28 0.125 - 31 0.0833 - 40 0.0417 - 41 0.0417 - 42 0.0833 - 45 0.0417 - 47 0.0833 - - 37 2036 31 1 - 0 0.025 - 2 0.0462 - 3 0.0133 - 4 0.000491 - 7 0.0693 - 8 0.0192 - 9 0.000982 - 10 0.00196 - 13 0.155 - 14 0.0624 - 15 0.0241 - 18 0.000491 - 19 0.00982 - 21 0.0486 - 22 0.000491 - 24 0.0054 - 26 0.00295 - 28 0.057 - 29 0.0182 - 30 0.0123 - 31 0.0192 - 32 0.0113 - 33 0.0172 - 37 0.000491 - 40 0.000491 - 41 0.196 - 42 0.0142 - 44 0.00196 - 45 0.0373 - 46 0.0108 - 47 0.117 - - 2 6 3 0 - 21 0.333 - 28 0.167 - 30 0.5 - - 47 2063 30 3 - 0 0.0257 - 2 0.0441 - 3 0.0141 - 4 0.000485 - 7 0.0693 - 8 0.0208 - 9 0.000969 - 10 0.00194 - 13 0.16 - 14 0.0659 - 15 0.0257 - 18 0.000485 - 19 0.00969 - 21 0.0349 - 22 0.000485 - 24 0.0063 - 26 0.00291 - 28 0.0587 - 29 0.0179 - 30 0.0121 - 31 0.0199 - 32 0.0111 - 33 0.0175 - 40 0.000969 - 41 0.196 - 42 0.015 - 44 0.00194 - 45 0.0368 - 46 0.0111 - 47 0.117 - - 7 30 8 0 - 0 0.0333 - 3 0.0667 - 13 0.4 - 14 0.2 - 15 0.133 - 21 0.0667 - 41 0.0667 - 46 0.0333 - - 21 24 14 0 - 0 0.0417 - 2 0.0833 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0833 - 24 0.0833 - 28 0.125 - 31 0.0833 - 40 0.0417 - 41 0.0417 - 42 0.0833 - 45 0.0417 - 47 0.0833 - - 49 6 5 0 - 2 0.167 - 8 0.333 - 14 0.167 - 28 0.167 - 33 0.167 - - 49 6 5 0 - 2 0.167 - 8 0.333 - 14 0.167 - 28 0.167 - 33 0.167 - -72 14825 39 21 - 0 0.00567 - 1 0.000135 - 2 0.0114 - 3 0.00614 - 4 0.0123 - 5 0.00027 - 6 0.000135 - 7 0.0813 - 8 0.00668 - 9 0.000202 - 10 0.000337 - 13 0.22 - 14 0.173 - 15 0.0205 - 16 0.00378 - 17 0.000135 - 19 0.00256 - 21 0.00621 - 22 0.000135 - 23 0.000135 - 24 0.00243 - 26 0.0058 - 28 0.0188 - 29 0.00351 - 30 0.00513 - 31 0.00351 - 32 0.00445 - 33 0.00391 - 35 6.75e-05 - 36 0.000135 - 37 0.00256 - 40 0.000405 - 41 0.342 - 42 0.0121 - 43 0.00121 - 44 0.00216 - 45 0.0119 - 46 0.0103 - 47 0.0185 - - 3 7 1 0 - 41 1 - - 4 73 16 0 - 2 0.0411 - 3 0.0685 - 7 0.0274 - 13 0.315 - 14 0.0274 - 17 0.0137 - 21 0.0411 - 24 0.0274 - 28 0.0137 - 30 0.0137 - 31 0.0411 - 32 0.0137 - 33 0.0274 - 41 0.274 - 42 0.0274 - 45 0.0274 - - 7 358 17 0 - 2 0.00279 - 3 0.0168 - 4 0.00279 - 6 0.00279 - 8 0.0112 - 9 0.00279 - 10 0.00279 - 13 0.592 - 14 0.291 - 15 0.0223 - 19 0.00559 - 21 0.0112 - 22 0.00279 - 31 0.00279 - 41 0.014 - 42 0.0112 - 46 0.00559 - - 8 33 4 0 - 8 0.0303 - 23 0.0606 - 37 0.848 - 41 0.0606 - - 9 2 1 0 - 8 1 - - 10 5 1 0 - 41 1 - - 13 19 6 0 - 4 0.158 - 8 0.526 - 13 0.105 - 15 0.105 - 35 0.0526 - 41 0.0526 - - 14 19 5 0 - 8 0.789 - 9 0.0526 - 13 0.0526 - 15 0.0526 - 41 0.0526 - - 15 4 3 0 - 2 0.25 - 8 0.5 - 36 0.25 - - 21 17 9 2 - 0 0.0588 - 2 0.0588 - 13 0.0588 - 28 0.0588 - 29 0.0588 - 31 0.0588 - 32 0.118 - 33 0.0588 - 37 0.471 - - 35 5 4 0 - 0 0.2 - 29 0.2 - 32 0.4 - 33 0.2 - - 47 8 1 0 - 37 1 - - 23 2 1 0 - 4 1 - - 34 4214 26 0 - 0 0.00119 - 2 0.00498 - 3 0.00617 - 4 0.0038 - 7 0.0835 - 8 0.00166 - 13 0.245 - 14 0.173 - 15 0.0209 - 16 0.000237 - 19 0.00119 - 21 0.00119 - 26 0.00403 - 28 0.0038 - 29 0.000949 - 30 0.000475 - 31 0.00119 - 32 0.000475 - 33 0.000949 - 41 0.407 - 42 0.0135 - 43 0.00142 - 44 0.00237 - 45 0.00285 - 46 0.014 - 47 0.0038 - - 35 2343 31 0 - 0 0.0149 - 1 0.000427 - 2 0.0201 - 3 0.00299 - 4 0.0282 - 5 0.000854 - 7 0.0973 - 8 0.00683 - 13 0.141 - 14 0.178 - 15 0.023 - 16 0.0111 - 19 0.00469 - 21 0.0145 - 24 0.0064 - 26 0.0107 - 28 0.0405 - 29 0.00683 - 30 0.0141 - 31 0.00512 - 32 0.0102 - 33 0.00598 - 37 0.000427 - 40 0.000854 - 41 0.257 - 42 0.0102 - 43 0.00128 - 44 0.00256 - 45 0.0294 - 46 0.00555 - 47 0.0495 - - 36 159 11 0 - 2 0.0377 - 7 0.0126 - 13 0.145 - 14 0.157 - 16 0.00629 - 28 0.00629 - 32 0.00629 - 41 0.604 - 42 0.00629 - 46 0.0126 - 47 0.00629 - - 37 36 12 1 - 2 0.0556 - 7 0.222 - 8 0.0833 - 13 0.0278 - 19 0.0278 - 21 0.0833 - 28 0.333 - 33 0.0556 - 41 0.0278 - 42 0.0278 - 45 0.0278 - 47 0.0278 - - 21 8 6 0 - 7 0.125 - 8 0.25 - 21 0.125 - 28 0.125 - 33 0.25 - 42 0.125 - - 47 7352 37 14 - 0 0.00571 - 1 0.000136 - 2 0.0114 - 3 0.00598 - 4 0.0112 - 5 0.000272 - 6 0.000136 - 7 0.082 - 8 0.00449 - 9 0.000136 - 10 0.000136 - 13 0.222 - 14 0.174 - 15 0.0204 - 16 0.00381 - 17 0.000136 - 19 0.00258 - 21 0.00558 - 22 0.000136 - 24 0.00245 - 26 0.00585 - 28 0.0189 - 29 0.00354 - 30 0.00517 - 31 0.00354 - 32 0.00449 - 33 0.00394 - 36 0.000136 - 37 0.000136 - 40 0.000408 - 41 0.345 - 42 0.0122 - 43 0.00122 - 44 0.00218 - 45 0.012 - 46 0.0103 - 47 0.0186 - - 3 7 1 0 - 41 1 - - 4 73 16 0 - 2 0.0411 - 3 0.0685 - 7 0.0274 - 13 0.315 - 14 0.0274 - 17 0.0137 - 21 0.0411 - 24 0.0274 - 28 0.0137 - 30 0.0137 - 31 0.0411 - 32 0.0137 - 33 0.0274 - 41 0.274 - 42 0.0274 - 45 0.0274 - - 7 358 17 0 - 2 0.00279 - 3 0.0168 - 4 0.00279 - 6 0.00279 - 8 0.0112 - 9 0.00279 - 10 0.00279 - 13 0.592 - 14 0.291 - 15 0.0223 - 19 0.00559 - 21 0.0112 - 22 0.00279 - 31 0.00279 - 41 0.014 - 42 0.0112 - 46 0.00559 - - 10 5 1 0 - 41 1 - - 15 1 1 0 - 36 1 - - 21 9 8 0 - 0 0.111 - 2 0.111 - 13 0.111 - 28 0.111 - 29 0.111 - 31 0.111 - 32 0.222 - 33 0.111 - - 34 4211 26 0 - 0 0.00119 - 2 0.00499 - 3 0.00617 - 4 0.00356 - 7 0.0836 - 8 0.00166 - 13 0.246 - 14 0.174 - 15 0.0209 - 16 0.000237 - 19 0.00119 - 21 0.000712 - 26 0.00404 - 28 0.0038 - 29 0.00095 - 30 0.000475 - 31 0.00119 - 32 0.000475 - 33 0.00095 - 41 0.407 - 42 0.0135 - 43 0.00142 - 44 0.00237 - 45 0.00285 - 46 0.014 - 47 0.0038 - - 35 2336 31 0 - 0 0.015 - 1 0.000428 - 2 0.0201 - 3 0.003 - 4 0.0283 - 5 0.000856 - 7 0.0976 - 8 0.00642 - 13 0.141 - 14 0.178 - 15 0.0231 - 16 0.0111 - 19 0.00471 - 21 0.012 - 24 0.00642 - 26 0.0107 - 28 0.0407 - 29 0.00685 - 30 0.0141 - 31 0.00514 - 32 0.0103 - 33 0.00599 - 37 0.000428 - 40 0.000856 - 41 0.258 - 42 0.0103 - 43 0.00128 - 44 0.00257 - 45 0.0295 - 46 0.00557 - 47 0.0497 - - 36 159 11 0 - 2 0.0377 - 7 0.0126 - 13 0.145 - 14 0.157 - 16 0.00629 - 28 0.00629 - 32 0.00629 - 41 0.604 - 42 0.00629 - 46 0.0126 - 47 0.00629 - - 37 34 12 0 - 2 0.0588 - 7 0.235 - 8 0.0882 - 13 0.0294 - 19 0.0294 - 21 0.0294 - 28 0.353 - 33 0.0588 - 41 0.0294 - 42 0.0294 - 45 0.0294 - 47 0.0294 - - 55 43 9 0 - 8 0.0233 - 13 0.0233 - 14 0.0233 - 21 0.0233 - 28 0.0233 - 30 0.0233 - 33 0.0465 - 41 0.767 - 47 0.0465 - - 70 20 10 0 - 2 0.05 - 7 0.2 - 8 0.05 - 24 0.05 - 28 0.35 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.05 - 33 0.1 - - 71 7 6 0 - 7 0.143 - 8 0.143 - 14 0.143 - 28 0.286 - 29 0.143 - 31 0.143 - - 72 78 17 0 - 0 0.0128 - 2 0.0128 - 7 0.0769 - 8 0.0128 - 13 0.0513 - 21 0.0128 - 26 0.0128 - 28 0.0385 - 29 0.0385 - 31 0.0256 - 32 0.0256 - 33 0.0256 - 40 0.0128 - 41 0.564 - 42 0.0128 - 45 0.0513 - 47 0.0128 - - 55 44 9 1 - 8 0.0227 - 13 0.0227 - 14 0.0227 - 21 0.0227 - 28 0.0227 - 30 0.0227 - 33 0.0455 - 41 0.773 - 47 0.0455 - - 73 23 2 0 - 21 0.0435 - 41 0.957 - - 70 20 10 0 - 2 0.05 - 7 0.2 - 8 0.05 - 24 0.05 - 28 0.35 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.05 - 33 0.1 - - 71 7 6 0 - 7 0.143 - 8 0.143 - 14 0.143 - 28 0.286 - 29 0.143 - 31 0.143 - - 72 78 17 0 - 0 0.0128 - 2 0.0128 - 7 0.0769 - 8 0.0128 - 13 0.0513 - 21 0.0128 - 26 0.0128 - 28 0.0385 - 29 0.0385 - 31 0.0256 - 32 0.0256 - 33 0.0256 - 40 0.0128 - 41 0.564 - 42 0.0128 - 45 0.0513 - 47 0.0128 - - 73 23 5 0 - 3 0.13 - 4 0.522 - 8 0.087 - 10 0.13 - 13 0.13 - -73 782 20 2 - 0 0.00256 - 2 0.0128 - 3 0.0384 - 4 0.0767 - 8 0.0205 - 10 0.0205 - 13 0.371 - 14 0.115 - 15 0.0281 - 16 0.00256 - 28 0.0153 - 30 0.00512 - 31 0.00256 - 33 0.00512 - 41 0.23 - 42 0.0153 - 44 0.00256 - 45 0.00767 - 46 0.023 - 47 0.00512 - - 26 18 7 0 - 8 0.0556 - 13 0.444 - 14 0.0556 - 28 0.0556 - 31 0.0556 - 41 0.278 - 46 0.0556 - - 47 391 20 1 - 0 0.00256 - 2 0.0128 - 3 0.0384 - 4 0.0767 - 8 0.0205 - 10 0.0205 - 13 0.371 - 14 0.115 - 15 0.0281 - 16 0.00256 - 28 0.0153 - 30 0.00512 - 31 0.00256 - 33 0.00512 - 41 0.23 - 42 0.0153 - 44 0.00256 - 45 0.00767 - 46 0.023 - 47 0.00512 - - 26 18 7 0 - 8 0.0556 - 13 0.444 - 14 0.0556 - 28 0.0556 - 31 0.0556 - 41 0.278 - 46 0.0556 - -74 443 33 26 - 0 0.0113 - 2 0.0113 - 3 0.0361 - 4 0.0971 - 5 0.00451 - 6 0.00677 - 7 0.0474 - 8 0.00677 - 9 0.00677 - 12 0.00451 - 13 0.0564 - 14 0.0271 - 15 0.0113 - 16 0.00226 - 18 0.00451 - 19 0.00903 - 21 0.0113 - 22 0.00226 - 24 0.00451 - 25 0.00677 - 26 0.00226 - 28 0.00903 - 29 0.0226 - 30 0.00451 - 31 0.00903 - 32 0.00451 - 33 0.00226 - 40 0.00226 - 41 0.147 - 42 0.0271 - 44 0.00451 - 45 0.0406 - 47 0.357 - - 0 2 2 0 - 18 0.5 - 28 0.5 - - 2 5 3 0 - 13 0.2 - 14 0.4 - 47 0.4 - - 4 47 10 0 - 0 0.0426 - 2 0.0213 - 4 0.0213 - 7 0.149 - 13 0.0213 - 32 0.0213 - 41 0.447 - 42 0.0638 - 45 0.0851 - 47 0.128 - - 6 5 4 0 - 6 0.4 - 13 0.2 - 41 0.2 - 45 0.2 - - 7 11 9 0 - 2 0.0909 - 3 0.182 - 4 0.0909 - 13 0.0909 - 14 0.182 - 19 0.0909 - 28 0.0909 - 29 0.0909 - 41 0.0909 - - 8 4 4 0 - 14 0.25 - 22 0.25 - 26 0.25 - 44 0.25 - - 9 26 1 0 - 4 1 - - 12 1 1 0 - 12 1 - - 13 5 4 0 - 6 0.2 - 9 0.4 - 41 0.2 - 47 0.2 - - 14 4 3 0 - 2 0.25 - 8 0.5 - 9 0.25 - - 15 7 6 0 - 7 0.143 - 15 0.286 - 16 0.143 - 40 0.143 - 41 0.143 - 47 0.143 - - 21 3 3 0 - 4 0.333 - 7 0.333 - 13 0.333 - - 22 11 1 0 - 4 1 - - 25 39 4 0 - 3 0.0513 - 13 0.0513 - 14 0.0256 - 47 0.872 - - 26 6 5 0 - 3 0.333 - 7 0.167 - 13 0.167 - 14 0.167 - 29 0.167 - - 40 1 1 0 - 8 1 - - 41 9 4 0 - 0 0.111 - 13 0.333 - 21 0.444 - 33 0.111 - - 42 4 2 0 - 13 0.25 - 25 0.75 - - 47 174 22 15 - 0 0.0115 - 2 0.0115 - 3 0.046 - 4 0.0115 - 5 0.00575 - 7 0.0517 - 12 0.00575 - 13 0.0517 - 14 0.0287 - 18 0.00575 - 19 0.0115 - 24 0.00575 - 28 0.0115 - 29 0.0287 - 30 0.00575 - 31 0.0115 - 32 0.00575 - 41 0.161 - 42 0.023 - 44 0.00575 - 45 0.046 - 47 0.454 - - 0 2 2 0 - 18 0.5 - 28 0.5 - - 4 47 10 0 - 0 0.0426 - 2 0.0213 - 4 0.0213 - 7 0.149 - 13 0.0213 - 32 0.0213 - 41 0.447 - 42 0.0638 - 45 0.0851 - 47 0.128 - - 6 2 2 0 - 13 0.5 - 45 0.5 - - 7 10 9 0 - 2 0.1 - 3 0.2 - 4 0.1 - 13 0.1 - 14 0.1 - 19 0.1 - 28 0.1 - 29 0.1 - 41 0.1 - - 8 2 2 0 - 14 0.5 - 44 0.5 - - 12 1 1 0 - 12 1 - - 21 2 2 0 - 7 0.5 - 13 0.5 - - 25 39 4 0 - 3 0.0513 - 13 0.0513 - 14 0.0256 - 47 0.872 - - 26 5 4 0 - 3 0.4 - 13 0.2 - 14 0.2 - 29 0.2 - - 49 7 3 0 - 31 0.143 - 45 0.143 - 47 0.714 - - 55 15 7 0 - 3 0.0667 - 19 0.0667 - 29 0.133 - 31 0.0667 - 41 0.133 - 45 0.0667 - 47 0.467 - - 57 5 4 0 - 3 0.2 - 13 0.4 - 24 0.2 - 30 0.2 - - 64 2 2 0 - 7 0.5 - 42 0.5 - - 69 1 1 0 - 5 1 - - 74 19 3 0 - 41 0.0526 - 45 0.0526 - 47 0.895 - - 49 7 3 0 - 31 0.143 - 45 0.143 - 47 0.714 - - 55 25 12 0 - 3 0.04 - 7 0.04 - 13 0.04 - 15 0.08 - 19 0.04 - 21 0.04 - 29 0.08 - 31 0.04 - 41 0.2 - 42 0.04 - 45 0.08 - 47 0.28 - - 57 5 4 0 - 3 0.2 - 13 0.4 - 24 0.2 - 30 0.2 - - 62 3 3 0 - 29 0.333 - 42 0.333 - 47 0.333 - - 64 5 4 0 - 7 0.2 - 13 0.2 - 41 0.4 - 42 0.2 - - 69 2 2 0 - 5 0.5 - 42 0.5 - - 74 23 3 0 - 41 0.174 - 45 0.087 - 47 0.739 - diff --git a/samples/G-code/rm.g b/samples/G-code/rm.g deleted file mode 100644 index 89c5aa24..00000000 --- a/samples/G-code/rm.g +++ /dev/null @@ -1,29735 +0,0 @@ -48 34015 42 38 - 0 0.0085 - 2 0.0361 - 3 0.0052 - 4 0.00714 - 5 0.000206 - 6 0.000147 - 7 0.166 - 8 0.0349 - 9 0.00138 - 10 5.88e-05 - 12 0.00218 - 13 0.166 - 14 0.0529 - 15 0.0215 - 16 0.000529 - 17 0.000176 - 18 0.000118 - 19 0.00285 - 20 0.000353 - 21 0.0147 - 22 0.00171 - 23 0.000441 - 24 0.000353 - 26 0.0645 - 28 0.000147 - 29 0.0052 - 30 0.00409 - 31 0.003 - 32 0.00171 - 33 0.000823 - 34 0.0005 - 35 0.00047 - 37 0.00318 - 39 0.00173 - 40 0.223 - 41 0.136 - 42 0.0157 - 43 0.00247 - 44 0.00326 - 45 0.00173 - 46 0.00808 - 47 0.001 - - 0 6 4 0 - 21 0.167 - 30 0.167 - 40 0.333 - 41 0.333 - - 2 252 19 5 - 0 0.00397 - 3 0.0357 - 4 0.0238 - 7 0.0159 - 8 0.206 - 9 0.0437 - 10 0.00794 - 13 0.0556 - 14 0.00397 - 15 0.0119 - 21 0.341 - 22 0.0714 - 23 0.0516 - 29 0.0119 - 30 0.0238 - 31 0.0357 - 39 0.0159 - 41 0.0119 - 45 0.0278 - - 8 29 7 0 - 4 0.103 - 13 0.241 - 14 0.0345 - 21 0.138 - 29 0.0345 - 30 0.172 - 31 0.276 - - 41 42 10 0 - 3 0.0714 - 4 0.0238 - 7 0.0476 - 8 0.19 - 9 0.0476 - 10 0.0238 - 13 0.0238 - 21 0.452 - 29 0.0238 - 39 0.0952 - - 42 4 4 0 - 8 0.25 - 10 0.25 - 13 0.25 - 23 0.25 - - 46 4 1 0 - 45 1 - - 48 170 15 0 - 0 0.00588 - 3 0.0353 - 4 0.0118 - 7 0.0118 - 8 0.253 - 9 0.0529 - 13 0.0294 - 15 0.0176 - 21 0.365 - 22 0.106 - 23 0.0647 - 29 0.00588 - 31 0.00588 - 41 0.0176 - 45 0.0176 - - 3 192 10 5 - 3 0.00521 - 4 0.0104 - 7 0.0104 - 8 0.13 - 13 0.703 - 14 0.0573 - 15 0.0521 - 41 0.0156 - 43 0.0104 - 44 0.00521 - - 2 1 1 0 - 43 1 - - 3 19 5 0 - 8 0.105 - 13 0.421 - 14 0.105 - 15 0.263 - 41 0.105 - - 38 1 1 0 - 44 1 - - 39 155 8 0 - 3 0.00645 - 4 0.0129 - 8 0.142 - 13 0.748 - 14 0.0452 - 15 0.0323 - 41 0.00645 - 43 0.00645 - - 47 6 2 0 - 7 0.333 - 13 0.667 - - 4 32 7 1 - 8 0.312 - 13 0.438 - 14 0.0625 - 15 0.0312 - 39 0.0938 - 41 0.0312 - 42 0.0312 - - 47 5 3 0 - 39 0.6 - 41 0.2 - 42 0.2 - - 6 10 6 0 - 7 0.1 - 8 0.1 - 13 0.4 - 40 0.2 - 44 0.1 - 46 0.1 - - 7 50 13 2 - 2 0.04 - 3 0.02 - 7 0.32 - 8 0.02 - 9 0.02 - 13 0.04 - 14 0.04 - 21 0.18 - 26 0.1 - 30 0.02 - 31 0.02 - 40 0.14 - 41 0.04 - - 41 3 2 0 - 8 0.333 - 21 0.667 - - 47 36 10 0 - 2 0.0278 - 3 0.0278 - 7 0.389 - 9 0.0278 - 14 0.0556 - 21 0.111 - 26 0.139 - 30 0.0278 - 40 0.139 - 41 0.0556 - - 8 9595 38 23 - 0 0.00563 - 2 0.0308 - 3 0.0112 - 4 0.00834 - 5 0.000417 - 6 0.000104 - 7 0.235 - 8 0.0211 - 9 0.000208 - 12 0.00104 - 13 0.116 - 14 0.0552 - 15 0.0311 - 16 0.000521 - 19 0.00584 - 20 0.00073 - 21 0.0174 - 22 0.000521 - 24 0.000208 - 26 0.161 - 28 0.000104 - 29 0.000625 - 30 0.00396 - 31 0.00177 - 32 0.000208 - 33 0.000521 - 34 0.000625 - 35 0.000938 - 37 0.00427 - 39 0.00198 - 40 0.132 - 41 0.117 - 42 0.0148 - 43 0.00146 - 44 0.00208 - 45 0.00188 - 46 0.0127 - 47 0.000104 - - 2 518 18 0 - 0 0.00193 - 2 0.00965 - 7 0.0328 - 8 0.029 - 12 0.00193 - 13 0.342 - 14 0.322 - 15 0.00772 - 16 0.00386 - 19 0.00193 - 21 0.00579 - 26 0.0212 - 40 0.0927 - 41 0.0907 - 42 0.0116 - 43 0.00193 - 45 0.00579 - 46 0.0174 - - 3 34 6 0 - 8 0.0588 - 13 0.618 - 14 0.206 - 40 0.0294 - 41 0.0294 - 44 0.0588 - - 4 11 7 0 - 7 0.273 - 8 0.0909 - 13 0.182 - 14 0.0909 - 15 0.0909 - 21 0.0909 - 41 0.182 - - 7 20 7 0 - 7 0.15 - 8 0.05 - 13 0.1 - 14 0.35 - 15 0.05 - 40 0.2 - 41 0.1 - - 8 227 11 0 - 0 0.00441 - 2 0.0132 - 7 0.00441 - 8 0.0793 - 13 0.498 - 14 0.313 - 15 0.0529 - 30 0.00441 - 39 0.00441 - 40 0.00441 - 41 0.022 - - 9 15 3 0 - 2 0.0667 - 13 0.4 - 14 0.533 - - 10 29 4 0 - 8 0.069 - 13 0.621 - 14 0.276 - 41 0.0345 - - 13 23 7 0 - 2 0.13 - 7 0.304 - 8 0.174 - 13 0.087 - 14 0.087 - 40 0.087 - 41 0.13 - - 14 2 1 0 - 41 1 - - 15 54 8 0 - 8 0.111 - 13 0.259 - 14 0.037 - 15 0.519 - 16 0.0185 - 40 0.0185 - 41 0.0185 - 45 0.0185 - - 21 1945 28 0 - 0 0.00463 - 2 0.0221 - 3 0.0072 - 4 0.0118 - 7 0.217 - 8 0.0411 - 9 0.000514 - 13 0.202 - 14 0.074 - 15 0.0226 - 19 0.00308 - 21 0.00977 - 26 0.0833 - 28 0.000514 - 30 0.00463 - 31 0.000514 - 33 0.000514 - 34 0.000514 - 35 0.00103 - 37 0.00411 - 39 0.00103 - 40 0.128 - 41 0.116 - 42 0.0165 - 43 0.00206 - 44 0.00257 - 45 0.00206 - 46 0.0211 - - 22 423 21 0 - 0 0.00946 - 2 0.0402 - 3 0.00473 - 4 0.00946 - 7 0.229 - 8 0.0402 - 13 0.196 - 14 0.0757 - 15 0.00946 - 16 0.00236 - 19 0.00236 - 21 0.00473 - 26 0.13 - 30 0.00236 - 37 0.00709 - 39 0.00473 - 40 0.109 - 41 0.0969 - 42 0.0118 - 45 0.00236 - 46 0.0118 - - 23 263 15 0 - 0 0.0076 - 2 0.0114 - 7 0.076 - 8 0.0875 - 12 0.0038 - 13 0.441 - 14 0.205 - 15 0.0266 - 19 0.0038 - 26 0.0418 - 31 0.0114 - 40 0.0152 - 41 0.0532 - 42 0.0114 - 45 0.0038 - - 26 10 4 0 - 8 0.1 - 13 0.6 - 14 0.1 - 15 0.2 - - 37 1 1 0 - 19 1 - - 39 62 6 0 - 8 0.0968 - 13 0.742 - 14 0.0161 - 15 0.0161 - 31 0.0161 - 41 0.113 - - 41 59 8 0 - 2 0.0339 - 13 0.525 - 14 0.0678 - 15 0.288 - 16 0.0169 - 40 0.0169 - 41 0.0339 - 45 0.0169 - - 45 44 8 0 - 2 0.0227 - 7 0.0227 - 13 0.0455 - 21 0.0227 - 40 0.159 - 41 0.0455 - 42 0.0227 - 46 0.659 - - 47 5604 35 0 - 0 0.00625 - 2 0.0373 - 3 0.0162 - 4 0.00946 - 5 0.000714 - 7 0.294 - 8 0.00428 - 9 0.000178 - 12 0.00143 - 13 0.0121 - 14 0.00178 - 15 0.0316 - 19 0.00821 - 20 0.00125 - 21 0.0244 - 22 0.000892 - 24 0.000357 - 26 0.231 - 29 0.000892 - 30 0.00464 - 31 0.00214 - 32 0.000178 - 33 0.000714 - 34 0.000892 - 35 0.00125 - 37 0.00482 - 39 0.0025 - 40 0.155 - 41 0.118 - 42 0.0162 - 43 0.00161 - 44 0.00214 - 45 0.00125 - 46 0.00642 - 47 0.000178 - - 49 92 12 0 - 0 0.0109 - 2 0.0109 - 6 0.0109 - 7 0.25 - 8 0.0217 - 13 0.141 - 14 0.0761 - 26 0.141 - 40 0.152 - 41 0.141 - 42 0.0217 - 46 0.0217 - - 50 4 2 0 - 2 0.25 - 14 0.75 - - 55 141 13 0 - 0 0.00709 - 2 0.0496 - 7 0.0638 - 13 0.00709 - 21 0.0213 - 29 0.00709 - 30 0.00709 - 32 0.00709 - 37 0.0213 - 40 0.135 - 41 0.652 - 42 0.0142 - 44 0.00709 - - 60 4 2 0 - 13 0.75 - 40 0.25 - - 9 829 25 8 - 0 0.00362 - 2 0.0338 - 3 0.00362 - 4 0.00362 - 7 0.422 - 8 0.0169 - 12 0.00241 - 13 0.171 - 14 0.0627 - 15 0.0109 - 17 0.00121 - 21 0.00965 - 24 0.00483 - 26 0.0627 - 29 0.00241 - 30 0.00121 - 31 0.00121 - 32 0.00241 - 37 0.00241 - 40 0.0953 - 41 0.0724 - 42 0.00844 - 43 0.00121 - 46 0.00241 - 47 0.00121 - - 2 36 12 0 - 2 0.0278 - 7 0.111 - 8 0.0556 - 13 0.167 - 14 0.25 - 15 0.0556 - 21 0.0278 - 26 0.0556 - 40 0.111 - 41 0.0556 - 42 0.0556 - 46 0.0278 - - 4 5 2 0 - 13 0.6 - 14 0.4 - - 8 9 3 0 - 2 0.222 - 13 0.556 - 14 0.222 - - 21 279 14 0 - 2 0.00717 - 3 0.0108 - 4 0.0108 - 7 0.287 - 8 0.0358 - 13 0.348 - 14 0.0932 - 15 0.0179 - 26 0.0358 - 40 0.0824 - 41 0.0573 - 42 0.00717 - 43 0.00358 - 46 0.00358 - - 47 383 20 0 - 0 0.00261 - 2 0.0601 - 7 0.517 - 8 0.00261 - 12 0.00522 - 13 0.0261 - 14 0.00261 - 15 0.00261 - 17 0.00261 - 21 0.0183 - 24 0.0104 - 26 0.102 - 29 0.00522 - 30 0.00261 - 31 0.00261 - 32 0.00522 - 37 0.00522 - 40 0.123 - 41 0.0966 - 42 0.00783 - - 49 3 2 0 - 13 0.333 - 14 0.667 - - 55 96 9 0 - 0 0.0208 - 7 0.656 - 8 0.0104 - 13 0.156 - 14 0.0625 - 26 0.0104 - 40 0.0417 - 41 0.0312 - 47 0.0104 - - 60 7 6 0 - 7 0.143 - 13 0.143 - 14 0.286 - 15 0.143 - 40 0.143 - 41 0.143 - - 10 68 16 4 - 2 0.132 - 4 0.0294 - 7 0.103 - 8 0.0441 - 13 0.294 - 14 0.0147 - 15 0.0147 - 21 0.0147 - 30 0.0441 - 31 0.0294 - 37 0.0147 - 39 0.0147 - 40 0.0147 - 41 0.191 - 42 0.0294 - 46 0.0147 - - 4 2 2 0 - 2 0.5 - 14 0.5 - - 8 12 3 0 - 8 0.167 - 13 0.75 - 41 0.0833 - - 21 12 5 0 - 7 0.0833 - 8 0.0833 - 13 0.417 - 41 0.333 - 46 0.0833 - - 47 39 13 0 - 2 0.205 - 4 0.0513 - 7 0.154 - 13 0.0769 - 15 0.0256 - 21 0.0256 - 30 0.0769 - 31 0.0513 - 37 0.0256 - 39 0.0256 - 40 0.0256 - 41 0.205 - 42 0.0513 - - 13 1034 21 11 - 0 0.0029 - 2 0.00774 - 4 0.00193 - 7 0.0338 - 8 0.088 - 9 0.00677 - 12 0.000967 - 13 0.632 - 14 0.147 - 15 0.0126 - 21 0.000967 - 26 0.0106 - 29 0.000967 - 30 0.00387 - 31 0.00677 - 33 0.000967 - 40 0.0106 - 41 0.0155 - 42 0.000967 - 44 0.0087 - 46 0.00677 - - 2 23 5 0 - 7 0.0435 - 13 0.304 - 14 0.522 - 40 0.0435 - 41 0.087 - - 3 766 12 0 - 2 0.00392 - 8 0.0914 - 9 0.00261 - 13 0.77 - 14 0.106 - 15 0.0117 - 30 0.00392 - 31 0.00522 - 40 0.00131 - 41 0.00131 - 44 0.00131 - 46 0.00131 - - 8 37 10 0 - 0 0.0811 - 2 0.0811 - 7 0.108 - 8 0.027 - 13 0.27 - 14 0.0811 - 15 0.027 - 41 0.135 - 44 0.0811 - 46 0.108 - - 9 7 5 0 - 7 0.286 - 8 0.143 - 14 0.143 - 26 0.143 - 41 0.286 - - 10 2 2 0 - 7 0.5 - 8 0.5 - - 21 7 4 0 - 7 0.429 - 14 0.286 - 40 0.143 - 44 0.143 - - 45 2 1 0 - 46 1 - - 47 48 11 0 - 2 0.0208 - 4 0.0417 - 7 0.396 - 12 0.0208 - 15 0.0417 - 26 0.188 - 30 0.0208 - 31 0.0208 - 40 0.104 - 41 0.125 - 42 0.0208 - - 49 2 2 0 - 26 0.5 - 40 0.5 - - 55 1 1 0 - 40 1 - - 60 117 12 0 - 7 0.0171 - 8 0.154 - 9 0.0427 - 13 0.291 - 14 0.41 - 15 0.00855 - 21 0.00855 - 29 0.00855 - 31 0.0171 - 33 0.00855 - 40 0.00855 - 44 0.0256 - - 14 11 8 0 - 8 0.182 - 9 0.0909 - 13 0.0909 - 14 0.0909 - 15 0.0909 - 40 0.0909 - 41 0.182 - 44 0.182 - - 15 45 14 3 - 2 0.0444 - 7 0.178 - 8 0.0444 - 13 0.2 - 14 0.111 - 15 0.178 - 16 0.0444 - 21 0.0222 - 26 0.0444 - 40 0.0444 - 41 0.0222 - 42 0.0222 - 43 0.0222 - 47 0.0222 - - 2 5 3 0 - 14 0.4 - 15 0.4 - 40 0.2 - - 15 19 8 0 - 2 0.0526 - 8 0.105 - 13 0.368 - 14 0.105 - 15 0.211 - 26 0.0526 - 42 0.0526 - 47 0.0526 - - 47 15 8 0 - 2 0.0667 - 7 0.533 - 16 0.0667 - 21 0.0667 - 26 0.0667 - 40 0.0667 - 41 0.0667 - 43 0.0667 - - 21 402 29 7 - 0 0.0199 - 2 0.0199 - 3 0.0249 - 4 0.0896 - 6 0.00249 - 7 0.216 - 8 0.0224 - 9 0.00249 - 12 0.00249 - 13 0.0249 - 14 0.00249 - 15 0.00249 - 17 0.00249 - 18 0.00498 - 19 0.00249 - 20 0.00249 - 21 0.0373 - 22 0.0522 - 26 0.197 - 28 0.00249 - 29 0.00498 - 30 0.0796 - 31 0.00746 - 33 0.00249 - 40 0.097 - 41 0.0547 - 42 0.0174 - 46 0.00249 - 47 0.00249 - - 2 9 4 0 - 8 0.444 - 21 0.333 - 40 0.111 - 41 0.111 - - 8 48 10 0 - 2 0.0208 - 4 0.0208 - 7 0.229 - 13 0.0208 - 15 0.0208 - 21 0.0208 - 26 0.479 - 40 0.0833 - 41 0.0833 - 42 0.0208 - - 21 41 10 0 - 2 0.0244 - 4 0.0244 - 7 0.439 - 8 0.0732 - 13 0.0244 - 21 0.0244 - 26 0.22 - 40 0.0732 - 41 0.0732 - 42 0.0244 - - 23 2 2 0 - 28 0.5 - 40 0.5 - - 41 3 3 0 - 8 0.333 - 21 0.333 - 30 0.333 - - 47 282 27 0 - 0 0.0248 - 2 0.0142 - 3 0.0355 - 4 0.117 - 6 0.00355 - 7 0.188 - 8 0.00355 - 9 0.00355 - 12 0.00355 - 13 0.0248 - 14 0.00355 - 17 0.00355 - 18 0.00709 - 19 0.00355 - 20 0.00355 - 21 0.0284 - 22 0.0745 - 26 0.16 - 29 0.00709 - 30 0.11 - 31 0.00709 - 33 0.00355 - 40 0.0957 - 41 0.0496 - 42 0.0177 - 46 0.00355 - 47 0.00355 - - 55 6 5 0 - 0 0.167 - 2 0.167 - 4 0.167 - 31 0.167 - 40 0.333 - - 22 62 10 2 - 0 0.0161 - 2 0.0323 - 7 0.452 - 8 0.113 - 21 0.0161 - 22 0.0161 - 26 0.0806 - 31 0.0161 - 40 0.161 - 41 0.0968 - - 21 20 7 0 - 7 0.3 - 8 0.3 - 21 0.05 - 26 0.1 - 31 0.05 - 40 0.15 - 41 0.05 - - 47 34 7 0 - 0 0.0294 - 2 0.0588 - 7 0.5 - 22 0.0294 - 26 0.0882 - 40 0.176 - 41 0.118 - - 24 11 5 0 - 7 0.273 - 21 0.0909 - 30 0.0909 - 40 0.182 - 41 0.364 - - 26 2 2 0 - 13 0.5 - 21 0.5 - - 28 7 6 0 - 4 0.143 - 7 0.286 - 13 0.143 - 19 0.143 - 42 0.143 - 46 0.143 - - 29 12 5 1 - 7 0.167 - 8 0.417 - 13 0.25 - 26 0.0833 - 41 0.0833 - - 47 4 3 0 - 7 0.5 - 26 0.25 - 41 0.25 - - 30 83 12 4 - 0 0.0361 - 2 0.012 - 7 0.157 - 8 0.0482 - 13 0.277 - 14 0.0602 - 15 0.0482 - 26 0.0723 - 40 0.169 - 41 0.0964 - 43 0.012 - 46 0.012 - - 21 28 6 0 - 8 0.143 - 13 0.5 - 14 0.0714 - 15 0.107 - 26 0.107 - 41 0.0714 - - 45 1 1 0 - 46 1 - - 47 34 8 0 - 0 0.0588 - 2 0.0294 - 7 0.294 - 13 0.0294 - 26 0.0882 - 40 0.353 - 41 0.118 - 43 0.0294 - - 49 3 3 0 - 0 0.333 - 7 0.333 - 14 0.333 - - 31 741 29 9 - 0 0.0027 - 2 0.0243 - 3 0.0121 - 4 0.0081 - 7 0.192 - 8 0.0715 - 9 0.00135 - 12 0.00135 - 13 0.19 - 14 0.117 - 15 0.0526 - 16 0.00135 - 17 0.00135 - 19 0.0027 - 21 0.00675 - 24 0.0081 - 26 0.101 - 30 0.00135 - 31 0.00135 - 37 0.00135 - 39 0.0162 - 40 0.0931 - 41 0.0607 - 42 0.0054 - 43 0.0027 - 44 0.00135 - 45 0.00675 - 46 0.0135 - 47 0.00135 - - 2 18 7 0 - 0 0.0556 - 7 0.111 - 8 0.0556 - 13 0.222 - 14 0.389 - 40 0.111 - 46 0.0556 - - 7 1 1 0 - 46 1 - - 13 13 6 0 - 2 0.0769 - 8 0.538 - 13 0.154 - 14 0.0769 - 26 0.0769 - 40 0.0769 - - 21 379 22 0 - 2 0.0132 - 3 0.0132 - 7 0.0633 - 8 0.106 - 9 0.00264 - 13 0.322 - 14 0.201 - 15 0.095 - 16 0.00264 - 21 0.00528 - 24 0.00792 - 26 0.0343 - 30 0.00264 - 31 0.00264 - 37 0.00264 - 39 0.029 - 40 0.0475 - 41 0.0237 - 42 0.00528 - 43 0.00528 - 45 0.0106 - 46 0.00528 - - 22 17 7 0 - 2 0.118 - 7 0.471 - 13 0.0588 - 14 0.0588 - 40 0.118 - 41 0.118 - 46 0.0588 - - 23 8 6 0 - 2 0.25 - 13 0.25 - 14 0.125 - 24 0.125 - 40 0.125 - 41 0.125 - - 47 268 22 0 - 0 0.00373 - 2 0.0299 - 3 0.0112 - 4 0.0224 - 7 0.358 - 8 0.00373 - 12 0.00373 - 13 0.00746 - 15 0.00746 - 17 0.00373 - 19 0.00746 - 21 0.0112 - 24 0.00746 - 26 0.224 - 39 0.00373 - 40 0.153 - 41 0.112 - 42 0.00373 - 44 0.00373 - 45 0.00373 - 46 0.0149 - 47 0.00373 - - 49 27 11 0 - 3 0.037 - 7 0.333 - 8 0.148 - 13 0.148 - 14 0.037 - 15 0.037 - 26 0.037 - 40 0.0741 - 41 0.0741 - 42 0.037 - 46 0.037 - - 55 5 3 0 - 7 0.6 - 40 0.2 - 41 0.2 - - 39 2 1 0 - 3 1 - - 40 8 3 0 - 6 0.125 - 46 0.25 - 47 0.625 - - 41 149 17 7 - 0 0.0134 - 2 0.289 - 3 0.00671 - 7 0.101 - 8 0.134 - 9 0.0134 - 13 0.0805 - 14 0.0671 - 15 0.00671 - 19 0.0268 - 21 0.121 - 22 0.0403 - 23 0.00671 - 26 0.0403 - 31 0.0134 - 39 0.0134 - 46 0.0268 - - 8 19 10 0 - 2 0.105 - 7 0.0526 - 13 0.211 - 14 0.263 - 19 0.0526 - 21 0.105 - 26 0.0526 - 31 0.0526 - 39 0.0526 - 46 0.0526 - - 9 3 1 0 - 14 1 - - 10 1 1 0 - 23 1 - - 13 2 1 0 - 13 1 - - 48 105 16 0 - 0 0.00952 - 2 0.371 - 3 0.00952 - 7 0.0571 - 8 0.162 - 9 0.019 - 13 0.0476 - 14 0.019 - 15 0.00952 - 19 0.019 - 21 0.152 - 22 0.0571 - 26 0.019 - 31 0.00952 - 39 0.00952 - 46 0.0286 - - 55 6 2 0 - 7 0.667 - 26 0.333 - - 57 6 4 0 - 0 0.167 - 7 0.5 - 8 0.167 - 19 0.167 - - 42 16 7 0 - 2 0.375 - 7 0.125 - 14 0.125 - 21 0.188 - 26 0.0625 - 32 0.0625 - 34 0.0625 - - 44 1 1 0 - 39 1 - - 45 9 6 0 - 7 0.222 - 8 0.222 - 9 0.111 - 13 0.111 - 14 0.111 - 31 0.222 - - 46 73 14 5 - 2 0.11 - 4 0.0274 - 7 0.452 - 8 0.0274 - 13 0.0959 - 14 0.0274 - 19 0.0411 - 21 0.0548 - 26 0.0959 - 29 0.0137 - 30 0.0137 - 42 0.0137 - 44 0.0137 - 45 0.0137 - - 8 56 9 0 - 2 0.0893 - 4 0.0357 - 7 0.518 - 8 0.0179 - 13 0.107 - 14 0.0179 - 19 0.0536 - 21 0.0536 - 26 0.107 - - 13 3 3 0 - 8 0.333 - 14 0.333 - 44 0.333 - - 41 3 3 0 - 21 0.333 - 30 0.333 - 45 0.333 - - 48 5 3 0 - 2 0.6 - 7 0.2 - 42 0.2 - - 57 1 1 0 - 29 1 - - 47 14411 39 31 - 0 0.00992 - 2 0.0338 - 3 0.00222 - 4 0.00583 - 5 0.000139 - 6 0.000139 - 7 0.126 - 8 0.038 - 9 0.00104 - 12 0.00257 - 13 0.193 - 14 0.0622 - 15 0.0192 - 16 0.000625 - 17 0.000208 - 18 0.000139 - 19 0.0018 - 20 0.000278 - 21 0.00971 - 22 0.000416 - 26 0.0212 - 28 0.000139 - 29 0.00597 - 30 0.00285 - 31 0.00285 - 32 0.00201 - 33 0.000971 - 34 0.000555 - 35 0.000486 - 37 0.00347 - 39 0.00118 - 40 0.263 - 41 0.155 - 42 0.0176 - 43 0.00285 - 44 0.00298 - 45 0.00167 - 46 0.00701 - 47 0.00118 - - 0 5 3 0 - 30 0.2 - 40 0.4 - 41 0.4 - - 3 187 8 0 - 4 0.0107 - 8 0.134 - 13 0.711 - 14 0.0588 - 15 0.0535 - 41 0.016 - 43 0.0107 - 44 0.00535 - - 4 28 5 0 - 8 0.357 - 13 0.5 - 14 0.0714 - 15 0.0357 - 41 0.0357 - - 6 8 5 0 - 7 0.125 - 8 0.125 - 13 0.5 - 44 0.125 - 46 0.125 - - 7 20 7 0 - 2 0.1 - 7 0.2 - 13 0.05 - 14 0.1 - 21 0.1 - 40 0.35 - 41 0.1 - - 8 6530 37 0 - 0 0.00827 - 2 0.0409 - 3 0.00322 - 4 0.00796 - 5 0.000153 - 6 0.000153 - 7 0.169 - 8 0.0297 - 9 0.000153 - 12 0.00153 - 13 0.163 - 14 0.0809 - 15 0.0204 - 16 0.000766 - 19 0.00337 - 20 0.000613 - 21 0.0139 - 22 0.000613 - 26 0.0383 - 28 0.000153 - 29 0.000919 - 30 0.00383 - 31 0.00214 - 32 0.000306 - 33 0.000766 - 34 0.000919 - 35 0.00107 - 37 0.00551 - 39 0.000766 - 40 0.194 - 41 0.168 - 42 0.0208 - 43 0.00214 - 44 0.00306 - 45 0.00245 - 46 0.0101 - 47 0.000153 - - 9 730 23 0 - 0 0.00411 - 2 0.0384 - 3 0.00411 - 4 0.00411 - 7 0.403 - 8 0.0192 - 12 0.00274 - 13 0.185 - 14 0.0712 - 15 0.0123 - 17 0.00137 - 21 0.00959 - 26 0.037 - 29 0.00274 - 31 0.00137 - 32 0.00274 - 37 0.00274 - 40 0.108 - 41 0.0781 - 42 0.00822 - 43 0.00137 - 46 0.00137 - 47 0.00137 - - 10 56 14 0 - 2 0.143 - 4 0.0357 - 7 0.0714 - 8 0.0536 - 13 0.321 - 14 0.0179 - 15 0.0179 - 21 0.0179 - 37 0.0179 - 39 0.0179 - 40 0.0179 - 41 0.214 - 42 0.0357 - 46 0.0179 - - 13 1001 21 0 - 0 0.003 - 2 0.00799 - 4 0.002 - 7 0.021 - 8 0.0909 - 9 0.00699 - 12 0.000999 - 13 0.651 - 14 0.152 - 15 0.012 - 21 0.000999 - 26 0.000999 - 29 0.000999 - 30 0.003 - 31 0.00699 - 33 0.000999 - 40 0.011 - 41 0.014 - 42 0.000999 - 44 0.00799 - 46 0.004 - - 14 10 7 0 - 8 0.2 - 9 0.1 - 13 0.1 - 14 0.1 - 40 0.1 - 41 0.2 - 44 0.2 - - 15 39 13 0 - 2 0.0513 - 7 0.179 - 8 0.0513 - 13 0.231 - 14 0.128 - 15 0.128 - 16 0.0513 - 21 0.0256 - 40 0.0513 - 41 0.0256 - 42 0.0256 - 43 0.0256 - 47 0.0256 - - 21 161 21 0 - 0 0.0373 - 2 0.0435 - 4 0.0683 - 7 0.224 - 8 0.0373 - 9 0.00621 - 12 0.00621 - 13 0.0124 - 17 0.00621 - 18 0.0124 - 21 0.0559 - 22 0.00621 - 26 0.0248 - 30 0.00621 - 31 0.0186 - 33 0.00621 - 40 0.236 - 41 0.137 - 42 0.0435 - 46 0.00621 - 47 0.00621 - - 22 58 10 0 - 0 0.0172 - 2 0.0345 - 7 0.448 - 8 0.121 - 21 0.0172 - 22 0.0172 - 26 0.0517 - 31 0.0172 - 40 0.172 - 41 0.103 - - 24 9 4 0 - 7 0.222 - 21 0.111 - 40 0.222 - 41 0.444 - - 28 5 5 0 - 4 0.2 - 13 0.2 - 19 0.2 - 42 0.2 - 46 0.2 - - 29 10 4 0 - 7 0.1 - 8 0.5 - 13 0.3 - 41 0.1 - - 30 74 11 0 - 0 0.0405 - 2 0.0135 - 7 0.122 - 8 0.0541 - 13 0.311 - 14 0.0676 - 15 0.0541 - 26 0.027 - 40 0.189 - 41 0.108 - 43 0.0135 - - 31 530 25 0 - 0 0.00377 - 2 0.034 - 3 0.0113 - 7 0.0585 - 8 0.1 - 9 0.00189 - 12 0.00189 - 13 0.266 - 14 0.164 - 15 0.0717 - 16 0.00189 - 17 0.00189 - 21 0.00566 - 26 0.00189 - 30 0.00189 - 31 0.00189 - 37 0.00189 - 39 0.0208 - 40 0.13 - 41 0.083 - 42 0.00755 - 43 0.00377 - 45 0.00755 - 46 0.0151 - 47 0.00189 - - 40 8 3 0 - 6 0.125 - 46 0.25 - 47 0.625 - - 41 29 9 0 - 0 0.069 - 7 0.0345 - 8 0.0345 - 13 0.414 - 14 0.31 - 15 0.0345 - 26 0.0345 - 31 0.0345 - 46 0.0345 - - 42 5 4 0 - 2 0.2 - 7 0.2 - 14 0.4 - 32 0.2 - - 46 27 11 0 - 2 0.148 - 7 0.222 - 8 0.0741 - 13 0.259 - 14 0.0741 - 19 0.037 - 26 0.037 - 29 0.037 - 30 0.037 - 42 0.037 - 44 0.037 - - 48 221 17 0 - 0 0.00452 - 2 0.0136 - 7 0.0588 - 8 0.0452 - 12 0.00452 - 13 0.167 - 14 0.104 - 15 0.0226 - 16 0.00452 - 21 0.00452 - 26 0.0136 - 30 0.0136 - 40 0.385 - 41 0.109 - 42 0.0317 - 44 0.00452 - 46 0.0136 - - 49 12 4 0 - 2 0.0833 - 7 0.0833 - 40 0.5 - 41 0.333 - - 55 300 18 0 - 0 0.0467 - 2 0.0267 - 3 0.00333 - 7 0.03 - 8 0.00333 - 9 0.00333 - 12 0.0133 - 13 0.0233 - 21 0.01 - 26 0.01 - 29 0.0833 - 31 0.03 - 32 0.0133 - 37 0.00333 - 40 0.213 - 41 0.47 - 42 0.0133 - 46 0.00333 - - 57 2237 27 0 - 0 0.0152 - 2 0.0434 - 4 0.00358 - 7 0.0724 - 8 0.00134 - 12 0.00581 - 13 0.00179 - 14 0.00224 - 15 0.000447 - 19 0.000894 - 21 0.00492 - 26 0.00402 - 28 0.000447 - 29 0.0219 - 30 0.000894 - 32 0.00894 - 33 0.00268 - 34 0.000447 - 37 0.00268 - 40 0.553 - 41 0.219 - 42 0.0259 - 43 0.00134 - 44 0.000894 - 45 0.000894 - 46 0.00358 - 47 0.000894 - - 58 36 11 0 - 2 0.0556 - 7 0.0556 - 8 0.0278 - 13 0.528 - 14 0.0556 - 15 0.0278 - 26 0.0278 - 30 0.0278 - 40 0.0833 - 41 0.0833 - 47 0.0278 - - 59 7 5 0 - 3 0.143 - 7 0.286 - 8 0.286 - 21 0.143 - 40 0.143 - - 60 706 15 0 - 2 0.00142 - 4 0.00283 - 8 0.154 - 9 0.00425 - 13 0.687 - 14 0.00992 - 15 0.0793 - 21 0.00142 - 29 0.00142 - 30 0.00283 - 31 0.00567 - 41 0.0142 - 43 0.0241 - 44 0.0085 - 45 0.00283 - - 62 898 17 0 - 0 0.0189 - 2 0.0156 - 7 0.0746 - 12 0.00445 - 13 0.00111 - 21 0.00557 - 29 0.00111 - 30 0.00111 - 33 0.00111 - 34 0.00111 - 37 0.00334 - 40 0.653 - 41 0.199 - 42 0.0134 - 44 0.00111 - 46 0.00223 - 47 0.00334 - - 64 460 11 0 - 0 0.00652 - 2 0.0283 - 4 0.00217 - 5 0.00217 - 7 0.0326 - 21 0.00217 - 40 0.672 - 41 0.222 - 42 0.0283 - 46 0.00217 - 47 0.00217 - - 48 1047 22 10 - 0 0.000955 - 2 0.165 - 4 0.00573 - 7 0.449 - 8 0.0115 - 12 0.000955 - 13 0.0363 - 14 0.022 - 15 0.00478 - 16 0.000955 - 19 0.000955 - 21 0.00955 - 22 0.000955 - 26 0.0229 - 30 0.00287 - 31 0.000955 - 40 0.0812 - 41 0.129 - 42 0.0229 - 43 0.000955 - 44 0.0229 - 46 0.00764 - - 2 207 18 0 - 0 0.00483 - 2 0.0193 - 4 0.00483 - 7 0.0773 - 8 0.0435 - 12 0.00483 - 13 0.164 - 14 0.106 - 15 0.0145 - 16 0.00483 - 21 0.00966 - 26 0.00966 - 30 0.0145 - 40 0.319 - 41 0.135 - 42 0.0483 - 44 0.00966 - 46 0.00966 - - 4 3 1 0 - 2 1 - - 7 5 3 0 - 8 0.4 - 40 0.4 - 41 0.2 - - 21 10 4 0 - 2 0.1 - 15 0.1 - 40 0.4 - 41 0.4 - - 41 42 8 0 - 2 0.452 - 13 0.0238 - 15 0.0238 - 21 0.0476 - 40 0.119 - 41 0.286 - 44 0.0238 - 46 0.0238 - - 42 3 2 0 - 40 0.667 - 41 0.333 - - 44 1 1 0 - 43 1 - - 45 12 5 0 - 2 0.0833 - 7 0.167 - 40 0.167 - 41 0.167 - 46 0.417 - - 47 750 13 0 - 2 0.191 - 4 0.00667 - 7 0.603 - 8 0.00133 - 13 0.00133 - 19 0.00133 - 21 0.008 - 22 0.00133 - 26 0.028 - 31 0.00133 - 41 0.111 - 42 0.0187 - 44 0.028 - - 50 4 2 0 - 14 0.25 - 41 0.75 - - 49 35 9 3 - 2 0.0286 - 7 0.229 - 8 0.0571 - 13 0.0857 - 15 0.0857 - 21 0.0286 - 26 0.114 - 40 0.171 - 41 0.2 - - 8 16 8 0 - 2 0.0625 - 7 0.125 - 8 0.0625 - 13 0.188 - 15 0.188 - 21 0.0625 - 26 0.25 - 40 0.0625 - - 47 5 2 0 - 7 0.8 - 41 0.2 - - 48 7 3 0 - 7 0.143 - 40 0.571 - 41 0.286 - - 50 4 2 0 - 8 0.75 - 31 0.25 - - 55 335 19 8 - 0 0.0418 - 2 0.0239 - 3 0.00299 - 7 0.0478 - 8 0.00299 - 9 0.00299 - 12 0.0119 - 13 0.0209 - 21 0.00896 - 26 0.0716 - 29 0.0746 - 31 0.0269 - 32 0.0119 - 37 0.00299 - 40 0.191 - 41 0.439 - 42 0.0119 - 43 0.00299 - 46 0.00299 - - 7 4 1 0 - 40 1 - - 8 287 17 0 - 0 0.0418 - 2 0.0279 - 3 0.00348 - 7 0.0279 - 8 0.00348 - 12 0.00697 - 13 0.00697 - 21 0.00697 - 26 0.0836 - 29 0.0871 - 31 0.0314 - 32 0.0105 - 37 0.00348 - 40 0.199 - 41 0.446 - 42 0.0105 - 46 0.00348 - - 21 14 6 0 - 0 0.0714 - 7 0.357 - 12 0.0714 - 21 0.0714 - 32 0.0714 - 41 0.357 - - 31 3 3 0 - 0 0.333 - 12 0.333 - 40 0.333 - - 44 1 1 0 - 43 1 - - 47 1 1 0 - 9 1 - - 48 7 4 0 - 7 0.143 - 13 0.429 - 40 0.143 - 41 0.286 - - 49 8 4 0 - 7 0.125 - 40 0.125 - 41 0.625 - 42 0.125 - - 57 2329 28 15 - 0 0.0146 - 2 0.0416 - 4 0.00386 - 7 0.0932 - 8 0.00129 - 9 0.000429 - 12 0.00558 - 13 0.00215 - 14 0.00215 - 15 0.000859 - 19 0.000859 - 21 0.00558 - 26 0.0125 - 28 0.000429 - 29 0.021 - 30 0.000859 - 32 0.00859 - 33 0.00258 - 34 0.000429 - 37 0.00258 - 40 0.532 - 41 0.213 - 42 0.0258 - 43 0.00129 - 44 0.000859 - 45 0.000859 - 46 0.00386 - 47 0.000859 - - 2 1 1 0 - 9 1 - - 7 12 3 0 - 2 0.0833 - 7 0.333 - 40 0.583 - - 8 1515 26 0 - 0 0.0165 - 2 0.0436 - 4 0.00198 - 7 0.0904 - 8 0.00132 - 12 0.00726 - 13 0.00198 - 14 0.00198 - 15 0.00132 - 19 0.00132 - 21 0.00528 - 26 0.0112 - 28 0.00066 - 29 0.0277 - 30 0.00066 - 32 0.00858 - 33 0.00132 - 34 0.00066 - 37 0.00264 - 40 0.525 - 41 0.222 - 42 0.0205 - 43 0.00132 - 44 0.00066 - 46 0.0033 - 47 0.00066 - - 9 57 9 0 - 0 0.0351 - 2 0.0526 - 4 0.0526 - 7 0.228 - 8 0.0175 - 14 0.0175 - 40 0.421 - 41 0.14 - 42 0.0351 - - 13 19 7 0 - 0 0.0526 - 7 0.158 - 26 0.0526 - 37 0.0526 - 40 0.368 - 41 0.263 - 45 0.0526 - - 21 76 13 0 - 0 0.0132 - 2 0.0263 - 7 0.0658 - 21 0.0132 - 26 0.0658 - 29 0.0526 - 32 0.0526 - 33 0.0395 - 37 0.0132 - 40 0.408 - 41 0.224 - 42 0.0132 - 47 0.0132 - - 31 139 13 0 - 0 0.0144 - 2 0.0647 - 4 0.00719 - 7 0.0719 - 21 0.00719 - 29 0.00719 - 32 0.0144 - 33 0.00719 - 40 0.532 - 41 0.245 - 42 0.0144 - 43 0.00719 - 45 0.00719 - - 32 2 2 0 - 29 0.5 - 32 0.5 - - 42 2 2 0 - 40 0.5 - 46 0.5 - - 46 30 5 0 - 2 0.0667 - 7 0.0333 - 40 0.7 - 41 0.167 - 42 0.0333 - - 48 350 15 0 - 0 0.00571 - 2 0.0343 - 4 0.00571 - 7 0.114 - 12 0.00286 - 13 0.00286 - 14 0.00286 - 21 0.00857 - 26 0.0143 - 30 0.00286 - 40 0.569 - 41 0.186 - 42 0.0429 - 44 0.00286 - 46 0.00571 - - 55 27 3 0 - 40 0.815 - 41 0.0741 - 42 0.111 - - 57 54 7 0 - 2 0.0185 - 7 0.0185 - 12 0.0185 - 29 0.0185 - 40 0.685 - 41 0.222 - 42 0.0185 - - 58 1 1 0 - 46 1 - - 60 1 1 0 - 13 1 - - 58 55 15 3 - 2 0.0545 - 4 0.0182 - 7 0.164 - 8 0.0182 - 13 0.345 - 14 0.0364 - 15 0.0182 - 19 0.0182 - 21 0.0182 - 23 0.0182 - 26 0.0909 - 30 0.0182 - 40 0.0545 - 41 0.109 - 47 0.0182 - - 2 2 2 0 - 21 0.5 - 23 0.5 - - 8 10 5 0 - 4 0.1 - 7 0.3 - 13 0.1 - 19 0.1 - 26 0.4 - - 48 37 11 0 - 2 0.0811 - 7 0.108 - 8 0.027 - 13 0.459 - 14 0.027 - 15 0.027 - 26 0.027 - 30 0.027 - 40 0.0541 - 41 0.135 - 47 0.027 - - 59 11 6 0 - 3 0.0909 - 7 0.364 - 8 0.182 - 21 0.0909 - 26 0.182 - 40 0.0909 - - 60 708 16 1 - 2 0.00141 - 4 0.00282 - 7 0.00141 - 8 0.154 - 9 0.00424 - 13 0.685 - 14 0.00989 - 15 0.0791 - 21 0.00141 - 29 0.00141 - 30 0.00282 - 31 0.00565 - 41 0.0155 - 43 0.024 - 44 0.00847 - 45 0.00282 - - 8 1 1 0 - 29 1 - - 62 909 18 4 - 0 0.0187 - 2 0.0154 - 7 0.0781 - 12 0.0044 - 13 0.0011 - 21 0.0066 - 26 0.0011 - 29 0.0011 - 30 0.0011 - 33 0.0011 - 34 0.0011 - 37 0.0066 - 40 0.646 - 41 0.197 - 42 0.0132 - 44 0.0011 - 46 0.0033 - 47 0.0033 - - 9 6 2 0 - 7 0.5 - 40 0.5 - - 21 35 7 0 - 0 0.114 - 2 0.0286 - 33 0.0286 - 40 0.657 - 41 0.114 - 42 0.0286 - 47 0.0286 - - 31 30 2 0 - 40 0.867 - 41 0.133 - - 57 15 3 0 - 37 0.2 - 40 0.533 - 41 0.267 - - 64 463 12 2 - 0 0.00648 - 2 0.0281 - 4 0.00216 - 5 0.00216 - 7 0.0346 - 21 0.00216 - 26 0.00216 - 40 0.667 - 41 0.22 - 42 0.0302 - 46 0.00216 - 47 0.00216 - - 9 16 5 0 - 0 0.0625 - 2 0.0625 - 7 0.25 - 40 0.438 - 41 0.188 - - 58 8 2 0 - 40 0.875 - 47 0.125 - -49 42263 41 35 - 0 0.065 - 1 0.00182 - 2 0.0136 - 3 0.0157 - 4 0.0309 - 5 0.00128 - 7 0.159 - 8 0.0225 - 9 0.00199 - 10 0.000118 - 12 0.0152 - 13 0.00757 - 14 0.00327 - 15 0.00613 - 16 9.46e-05 - 17 7.1e-05 - 19 0.0103 - 20 0.00149 - 21 0.0208 - 22 0.00442 - 23 0.000189 - 24 0.00026 - 26 0.0331 - 28 0.0399 - 29 0.067 - 30 0.0304 - 31 0.063 - 32 0.0227 - 33 0.0363 - 34 0.000284 - 35 0.00133 - 37 0.00338 - 39 0.00251 - 40 0.131 - 41 0.171 - 42 0.00989 - 43 0.000875 - 44 0.000592 - 45 0.00163 - 46 0.00244 - 47 0.00128 - - 2 55 16 5 - 0 0.0182 - 3 0.109 - 4 0.0364 - 7 0.109 - 8 0.0545 - 9 0.0182 - 19 0.0182 - 21 0.236 - 22 0.109 - 26 0.0182 - 28 0.0182 - 29 0.0909 - 31 0.0727 - 39 0.0182 - 41 0.0545 - 45 0.0182 - - 4 9 4 0 - 8 0.111 - 28 0.111 - 29 0.444 - 31 0.333 - - 22 3 1 0 - 22 1 - - 41 7 4 0 - 3 0.286 - 7 0.143 - 21 0.429 - 39 0.143 - - 47 10 9 0 - 0 0.1 - 7 0.1 - 8 0.1 - 19 0.1 - 21 0.1 - 26 0.1 - 29 0.1 - 31 0.1 - 41 0.2 - - 49 23 7 0 - 3 0.174 - 4 0.087 - 7 0.174 - 8 0.0435 - 21 0.348 - 22 0.13 - 45 0.0435 - - 3 20 7 1 - 2 0.05 - 7 0.1 - 14 0.05 - 15 0.05 - 26 0.05 - 40 0.35 - 41 0.35 - - 47 8 4 0 - 2 0.125 - 15 0.125 - 26 0.125 - 41 0.625 - - 4 84 15 3 - 0 0.0357 - 4 0.0119 - 7 0.19 - 8 0.0595 - 13 0.0238 - 14 0.0238 - 26 0.0119 - 28 0.0119 - 29 0.0119 - 30 0.0119 - 31 0.0357 - 32 0.0476 - 40 0.333 - 41 0.179 - 42 0.0119 - - 7 52 8 0 - 0 0.0192 - 4 0.0192 - 7 0.115 - 8 0.0385 - 28 0.0192 - 31 0.0192 - 40 0.481 - 41 0.288 - - 21 4 2 0 - 8 0.5 - 13 0.5 - - 47 28 11 0 - 0 0.0714 - 7 0.357 - 8 0.0357 - 14 0.0714 - 26 0.0357 - 29 0.0357 - 30 0.0357 - 31 0.0714 - 32 0.143 - 40 0.107 - 42 0.0357 - - 5 2 2 0 - 0 0.5 - 35 0.5 - - 6 7 4 0 - 15 0.143 - 41 0.571 - 42 0.143 - 46 0.143 - - 7 697 30 8 - 0 0.0143 - 2 0.0201 - 3 0.187 - 4 0.0459 - 5 0.00143 - 7 0.244 - 8 0.0244 - 12 0.0043 - 13 0.01 - 14 0.00717 - 15 0.01 - 17 0.00143 - 19 0.00717 - 20 0.00574 - 21 0.0301 - 22 0.0043 - 26 0.0301 - 28 0.00717 - 29 0.0258 - 30 0.0115 - 31 0.0359 - 32 0.0043 - 33 0.00717 - 35 0.00143 - 39 0.0258 - 40 0.115 - 41 0.109 - 42 0.00287 - 45 0.00143 - 47 0.00574 - - 2 9 3 0 - 7 0.111 - 21 0.556 - 41 0.333 - - 4 7 5 0 - 0 0.143 - 4 0.143 - 19 0.143 - 40 0.286 - 41 0.286 - - 9 8 4 0 - 8 0.25 - 29 0.25 - 30 0.125 - 31 0.375 - - 13 12 10 0 - 2 0.0833 - 8 0.25 - 13 0.0833 - 29 0.0833 - 30 0.0833 - 31 0.0833 - 33 0.0833 - 40 0.0833 - 41 0.0833 - 42 0.0833 - - 21 28 11 0 - 3 0.0357 - 4 0.25 - 7 0.179 - 8 0.0714 - 13 0.107 - 15 0.0357 - 21 0.0357 - 26 0.0357 - 30 0.0714 - 40 0.107 - 41 0.0714 - - 22 33 8 0 - 8 0.182 - 21 0.0303 - 28 0.152 - 29 0.212 - 30 0.0303 - 31 0.273 - 32 0.0606 - 33 0.0606 - - 47 482 28 0 - 0 0.0145 - 2 0.0228 - 3 0.268 - 4 0.0436 - 7 0.332 - 8 0.00622 - 12 0.00207 - 13 0.00622 - 14 0.0104 - 15 0.0124 - 17 0.00207 - 19 0.0083 - 20 0.00622 - 21 0.0249 - 22 0.00622 - 26 0.0332 - 29 0.00622 - 30 0.00622 - 31 0.0207 - 32 0.00207 - 33 0.00207 - 35 0.00207 - 39 0.0373 - 40 0.0581 - 41 0.0539 - 42 0.00207 - 45 0.00207 - 47 0.0083 - - 55 114 14 0 - 0 0.0175 - 2 0.0175 - 4 0.0263 - 5 0.00877 - 7 0.0351 - 12 0.0175 - 20 0.00877 - 21 0.0175 - 26 0.0351 - 29 0.0439 - 31 0.00877 - 33 0.00877 - 40 0.404 - 41 0.351 - - 8 310 25 8 - 0 0.00323 - 2 0.00968 - 3 0.0129 - 4 0.0161 - 7 0.31 - 8 0.0161 - 9 0.00323 - 12 0.00323 - 13 0.0419 - 14 0.0226 - 15 0.029 - 19 0.00323 - 21 0.00968 - 26 0.142 - 29 0.00968 - 30 0.00645 - 32 0.00323 - 35 0.00645 - 37 0.00323 - 40 0.129 - 41 0.19 - 42 0.0129 - 43 0.00645 - 46 0.00645 - 47 0.00323 - - 2 5 3 0 - 4 0.2 - 7 0.2 - 41 0.6 - - 4 6 4 0 - 7 0.333 - 40 0.167 - 41 0.167 - 42 0.333 - - 7 5 4 0 - 13 0.2 - 29 0.2 - 40 0.4 - 41 0.2 - - 21 71 10 0 - 4 0.0423 - 7 0.451 - 13 0.0845 - 14 0.0141 - 15 0.0282 - 26 0.127 - 29 0.0141 - 35 0.0141 - 40 0.0845 - 41 0.141 - - 22 7 3 0 - 7 0.286 - 41 0.571 - 46 0.143 - - 23 4 4 0 - 9 0.25 - 14 0.25 - 26 0.25 - 41 0.25 - - 28 2 1 0 - 13 1 - - 47 204 24 0 - 0 0.0049 - 2 0.0147 - 3 0.0196 - 4 0.0049 - 7 0.275 - 8 0.0245 - 12 0.0049 - 13 0.0196 - 14 0.0245 - 15 0.0294 - 19 0.0049 - 21 0.0147 - 26 0.167 - 29 0.0049 - 30 0.0098 - 32 0.0049 - 35 0.0049 - 37 0.0049 - 40 0.142 - 41 0.191 - 42 0.0098 - 43 0.0098 - 46 0.0049 - 47 0.0049 - - 9 132 13 4 - 0 0.00758 - 2 0.0152 - 4 0.0303 - 7 0.508 - 8 0.0303 - 13 0.053 - 14 0.0152 - 15 0.0303 - 21 0.00758 - 26 0.053 - 33 0.00758 - 40 0.106 - 41 0.136 - - 4 4 3 0 - 13 0.25 - 15 0.25 - 41 0.5 - - 21 29 10 0 - 0 0.0345 - 4 0.103 - 7 0.379 - 8 0.103 - 13 0.103 - 15 0.069 - 26 0.0345 - 33 0.0345 - 40 0.103 - 41 0.0345 - - 47 55 9 0 - 2 0.0182 - 4 0.0182 - 7 0.473 - 13 0.0364 - 15 0.0182 - 21 0.0182 - 26 0.0545 - 40 0.164 - 41 0.2 - - 55 39 7 0 - 2 0.0256 - 7 0.692 - 13 0.0256 - 14 0.0256 - 26 0.0769 - 40 0.0513 - 41 0.103 - - 10 131 21 1 - 0 0.0229 - 3 0.0382 - 4 0.191 - 5 0.0153 - 7 0.183 - 8 0.0611 - 13 0.0534 - 15 0.0153 - 19 0.0458 - 20 0.00763 - 21 0.107 - 26 0.0153 - 28 0.0229 - 29 0.00763 - 30 0.0153 - 31 0.0229 - 33 0.00763 - 37 0.0153 - 40 0.0305 - 41 0.107 - 42 0.0153 - - 47 7 5 0 - 0 0.143 - 7 0.286 - 26 0.143 - 31 0.286 - 40 0.143 - - 11 6 1 0 - 41 1 - - 13 92 23 6 - 0 0.0217 - 2 0.0543 - 4 0.0326 - 7 0.293 - 8 0.0217 - 9 0.0109 - 13 0.0217 - 15 0.0109 - 19 0.0109 - 21 0.0217 - 26 0.109 - 28 0.0109 - 29 0.0326 - 30 0.0109 - 31 0.0217 - 32 0.0109 - 33 0.0109 - 34 0.0109 - 35 0.0217 - 37 0.0217 - 40 0.13 - 41 0.0978 - 42 0.0109 - - 2 3 2 0 - 7 0.667 - 42 0.333 - - 3 2 2 0 - 9 0.5 - 13 0.5 - - 4 11 9 0 - 0 0.0909 - 7 0.0909 - 13 0.0909 - 28 0.0909 - 30 0.0909 - 33 0.0909 - 35 0.182 - 37 0.182 - 40 0.0909 - - 7 6 5 0 - 7 0.167 - 8 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 8 11 7 0 - 2 0.0909 - 7 0.182 - 8 0.0909 - 19 0.0909 - 26 0.273 - 32 0.0909 - 40 0.182 - - 47 50 12 0 - 0 0.02 - 2 0.04 - 4 0.06 - 7 0.34 - 15 0.02 - 21 0.02 - 26 0.12 - 29 0.06 - 31 0.04 - 34 0.02 - 40 0.12 - 41 0.14 - - 14 5 3 0 - 2 0.4 - 7 0.2 - 26 0.4 - - 15 26 4 0 - 4 0.0385 - 15 0.0769 - 40 0.0385 - 41 0.846 - - 19 6 4 0 - 0 0.333 - 7 0.167 - 40 0.167 - 41 0.333 - - 21 17337 41 14 - 0 0.0758 - 1 0.00225 - 2 0.01 - 3 0.0253 - 4 0.0318 - 5 0.00127 - 7 0.155 - 8 0.0237 - 9 0.00323 - 10 0.000173 - 12 0.018 - 13 0.00675 - 14 0.00271 - 15 0.00583 - 16 0.000115 - 17 5.77e-05 - 19 0.0114 - 20 0.00144 - 21 0.0224 - 22 0.00848 - 23 0.000231 - 24 0.000404 - 26 0.0337 - 28 0.0465 - 29 0.0786 - 30 0.0359 - 31 0.0731 - 32 0.0269 - 33 0.0436 - 34 0.000115 - 35 0.00121 - 37 0.00335 - 39 0.00438 - 40 0.0751 - 41 0.159 - 42 0.00594 - 43 0.000577 - 44 0.00075 - 45 0.00173 - 46 0.0026 - 47 0.000577 - - 2 80 22 0 - 0 0.0125 - 2 0.025 - 3 0.0125 - 4 0.0125 - 7 0.188 - 8 0.0125 - 10 0.0125 - 15 0.0125 - 19 0.0125 - 21 0.05 - 22 0.0125 - 26 0.025 - 28 0.0125 - 29 0.0125 - 30 0.025 - 31 0.0625 - 32 0.0125 - 40 0.175 - 41 0.262 - 42 0.025 - 44 0.0125 - 45 0.0125 - - 4 12 7 0 - 0 0.0833 - 4 0.0833 - 8 0.333 - 19 0.0833 - 22 0.0833 - 26 0.0833 - 40 0.25 - - 7 72 14 0 - 0 0.0417 - 2 0.0278 - 4 0.125 - 7 0.0556 - 8 0.0139 - 9 0.0278 - 15 0.0278 - 21 0.0139 - 26 0.0278 - 30 0.0278 - 31 0.0417 - 40 0.153 - 41 0.389 - 42 0.0278 - - 10 4 2 0 - 4 0.75 - 15 0.25 - - 19 1 1 0 - 13 1 - - 21 886 32 0 - 0 0.044 - 2 0.0135 - 3 0.00113 - 4 0.044 - 5 0.00339 - 7 0.31 - 8 0.0282 - 9 0.00226 - 10 0.00113 - 12 0.00903 - 13 0.00339 - 14 0.00339 - 15 0.00226 - 19 0.0113 - 21 0.0147 - 22 0.00564 - 26 0.035 - 28 0.0181 - 29 0.0169 - 30 0.00677 - 31 0.0406 - 32 0.00903 - 33 0.0169 - 35 0.00339 - 37 0.00564 - 40 0.159 - 41 0.172 - 42 0.0102 - 43 0.00226 - 44 0.00226 - 45 0.00113 - 46 0.00339 - - 22 117 12 0 - 2 0.00855 - 4 0.0171 - 7 0.342 - 8 0.0598 - 26 0.0427 - 28 0.0513 - 30 0.0171 - 31 0.0598 - 37 0.0171 - 40 0.094 - 41 0.274 - 42 0.0171 - - 23 34 13 0 - 0 0.0294 - 2 0.0294 - 7 0.0588 - 8 0.118 - 12 0.0882 - 14 0.0294 - 15 0.0882 - 19 0.0294 - 29 0.0294 - 31 0.235 - 32 0.0294 - 41 0.206 - 43 0.0294 - - 24 3 3 0 - 7 0.333 - 40 0.333 - 46 0.333 - - 41 2 2 0 - 3 0.5 - 4 0.5 - - 45 3 3 0 - 7 0.333 - 21 0.333 - 46 0.333 - - 47 15577 41 0 - 0 0.0812 - 1 0.0025 - 2 0.00905 - 3 0.0279 - 4 0.0315 - 5 0.00122 - 7 0.146 - 8 0.0237 - 9 0.00327 - 10 6.42e-05 - 12 0.0193 - 13 0.00719 - 14 0.00276 - 15 0.00578 - 16 0.000128 - 17 6.42e-05 - 19 0.0115 - 20 0.0016 - 21 0.0236 - 22 0.00899 - 23 0.000257 - 24 0.000449 - 26 0.0343 - 28 0.0503 - 29 0.0859 - 30 0.0391 - 31 0.0774 - 32 0.0293 - 33 0.0475 - 34 0.000128 - 35 0.00116 - 37 0.00308 - 39 0.00488 - 40 0.0583 - 41 0.149 - 42 0.00507 - 43 0.000449 - 44 0.000642 - 45 0.0018 - 46 0.0025 - 47 0.000642 - - 49 10 5 0 - 3 0.1 - 7 0.4 - 9 0.1 - 40 0.2 - 41 0.2 - - 55 526 17 0 - 0 0.0076 - 2 0.0285 - 4 0.00951 - 7 0.12 - 13 0.0019 - 15 0.0038 - 19 0.00951 - 26 0.0152 - 29 0.0152 - 30 0.0019 - 31 0.0019 - 33 0.0019 - 37 0.0057 - 40 0.395 - 41 0.363 - 42 0.0171 - 46 0.0019 - - 22 718 21 5 - 0 0.00418 - 2 0.0334 - 3 0.00139 - 4 0.0432 - 7 0.297 - 8 0.0752 - 12 0.00279 - 13 0.00279 - 21 0.00696 - 26 0.0306 - 28 0.0306 - 29 0.00696 - 30 0.00557 - 31 0.0153 - 32 0.00139 - 33 0.00418 - 40 0.298 - 41 0.127 - 42 0.0111 - 43 0.00139 - 45 0.00139 - - 2 11 5 0 - 7 0.364 - 8 0.0909 - 28 0.0909 - 40 0.0909 - 41 0.364 - - 4 13 6 0 - 7 0.231 - 8 0.385 - 13 0.0769 - 30 0.154 - 32 0.0769 - 42 0.0769 - - 21 114 13 0 - 2 0.0263 - 4 0.0263 - 7 0.289 - 8 0.325 - 12 0.00877 - 21 0.0351 - 26 0.0351 - 28 0.0439 - 30 0.0175 - 31 0.0263 - 33 0.0175 - 40 0.105 - 41 0.0439 - - 47 311 19 0 - 0 0.00322 - 2 0.0482 - 3 0.00322 - 4 0.0836 - 7 0.476 - 8 0.0161 - 12 0.00322 - 13 0.00322 - 21 0.00322 - 26 0.0482 - 28 0.0514 - 29 0.0161 - 31 0.0257 - 33 0.00322 - 40 0.109 - 41 0.09 - 42 0.00965 - 43 0.00322 - 45 0.00322 - - 55 266 9 0 - 0 0.00752 - 2 0.0226 - 4 0.00752 - 7 0.0827 - 8 0.0226 - 26 0.0113 - 40 0.628 - 41 0.203 - 42 0.015 - - 23 36 13 1 - 0 0.0278 - 4 0.0278 - 7 0.194 - 8 0.0278 - 12 0.0278 - 21 0.0278 - 26 0.0556 - 28 0.0556 - 31 0.389 - 32 0.0278 - 40 0.0556 - 41 0.0278 - 42 0.0556 - - 7 2 2 0 - 12 0.5 - 21 0.5 - - 24 95 19 2 - 0 0.0105 - 2 0.0105 - 3 0.0316 - 4 0.0421 - 7 0.232 - 8 0.0105 - 13 0.0211 - 14 0.0421 - 15 0.0105 - 20 0.0211 - 21 0.0421 - 26 0.0632 - 30 0.0316 - 39 0.0105 - 40 0.274 - 41 0.116 - 42 0.0105 - 46 0.0105 - 47 0.0105 - - 2 1 1 0 - 42 1 - - 8 1 1 0 - 0 1 - - 28 6 3 0 - 8 0.167 - 28 0.333 - 41 0.5 - - 29 1 1 0 - 42 1 - - 31 4 3 0 - 13 0.25 - 26 0.5 - 40 0.25 - - 37 3 2 0 - 4 0.333 - 41 0.667 - - 40 10 3 0 - 43 0.1 - 46 0.1 - 47 0.8 - - 41 32 10 2 - 2 0.219 - 3 0.0625 - 4 0.0312 - 7 0.219 - 8 0.0312 - 21 0.0625 - 26 0.0312 - 29 0.0625 - 31 0.0312 - 37 0.25 - - 21 2 1 0 - 29 1 - - 57 3 1 0 - 7 1 - - 42 3 3 0 - 2 0.333 - 7 0.333 - 22 0.333 - - 46 7 4 0 - 7 0.571 - 8 0.143 - 26 0.143 - 47 0.143 - - 47 19808 41 32 - 0 0.0693 - 1 0.00192 - 2 0.0136 - 3 0.00353 - 4 0.0311 - 5 0.00136 - 7 0.139 - 8 0.0218 - 9 0.00121 - 10 0.000101 - 12 0.0163 - 13 0.00777 - 14 0.00343 - 15 0.00631 - 16 0.000101 - 17 5.05e-05 - 19 0.0109 - 20 0.00157 - 21 0.0207 - 22 0.00151 - 23 0.000202 - 24 0.000202 - 26 0.0283 - 28 0.0426 - 29 0.0715 - 30 0.0323 - 31 0.0671 - 32 0.0242 - 33 0.0388 - 34 0.000303 - 35 0.00136 - 37 0.00323 - 39 0.000505 - 40 0.139 - 41 0.181 - 42 0.0104 - 43 0.000909 - 44 0.000606 - 45 0.00172 - 46 0.00242 - 47 0.00136 - - 2 21 10 0 - 0 0.0476 - 7 0.0476 - 8 0.0952 - 19 0.0476 - 21 0.0952 - 26 0.0476 - 28 0.0476 - 29 0.238 - 31 0.19 - 41 0.143 - - 3 20 7 0 - 2 0.05 - 7 0.1 - 14 0.05 - 15 0.05 - 26 0.05 - 40 0.35 - 41 0.35 - - 4 79 14 0 - 0 0.038 - 4 0.0127 - 7 0.19 - 8 0.038 - 14 0.0253 - 26 0.0127 - 28 0.0127 - 29 0.0127 - 30 0.0127 - 31 0.038 - 32 0.0506 - 40 0.354 - 41 0.19 - 42 0.0127 - - 5 2 2 0 - 0 0.5 - 35 0.5 - - 6 6 3 0 - 41 0.667 - 42 0.167 - 46 0.167 - - 7 377 27 0 - 0 0.0265 - 2 0.0371 - 3 0.00531 - 4 0.0398 - 5 0.00265 - 7 0.111 - 8 0.0371 - 12 0.00796 - 13 0.0159 - 14 0.0133 - 15 0.00531 - 19 0.0133 - 20 0.0106 - 21 0.0451 - 26 0.0292 - 28 0.0133 - 29 0.0477 - 30 0.0159 - 31 0.0663 - 32 0.00796 - 33 0.0133 - 35 0.00265 - 40 0.212 - 41 0.202 - 42 0.00531 - 45 0.00265 - 47 0.0106 - - 8 234 25 0 - 0 0.00427 - 2 0.0128 - 3 0.00427 - 4 0.0214 - 7 0.274 - 8 0.00427 - 9 0.00427 - 12 0.00427 - 13 0.047 - 14 0.0299 - 15 0.0342 - 19 0.00427 - 21 0.0128 - 26 0.0427 - 29 0.0128 - 30 0.00855 - 32 0.00427 - 35 0.00855 - 37 0.00427 - 40 0.171 - 41 0.252 - 42 0.0171 - 43 0.00855 - 46 0.00855 - 47 0.00427 - - 9 130 13 0 - 0 0.00769 - 2 0.0154 - 4 0.0308 - 7 0.508 - 8 0.0308 - 13 0.0538 - 14 0.0154 - 15 0.0308 - 21 0.00769 - 26 0.0462 - 33 0.00769 - 40 0.108 - 41 0.138 - - 10 129 21 0 - 0 0.0233 - 3 0.0388 - 4 0.194 - 5 0.0155 - 7 0.178 - 8 0.062 - 13 0.0543 - 15 0.0155 - 19 0.0465 - 20 0.00775 - 21 0.109 - 26 0.00775 - 28 0.0233 - 29 0.00775 - 30 0.0155 - 31 0.0233 - 33 0.00775 - 37 0.0155 - 40 0.031 - 41 0.109 - 42 0.0155 - - 11 6 1 0 - 41 1 - - 13 78 21 0 - 0 0.0256 - 2 0.0641 - 4 0.0385 - 7 0.269 - 8 0.0256 - 9 0.0128 - 13 0.0256 - 15 0.0128 - 19 0.0128 - 21 0.0256 - 26 0.0769 - 28 0.0128 - 29 0.0385 - 30 0.0128 - 31 0.0256 - 32 0.0128 - 33 0.0128 - 34 0.0128 - 40 0.154 - 41 0.115 - 42 0.0128 - - 14 2 1 0 - 2 1 - - 15 26 4 0 - 4 0.0385 - 15 0.0769 - 40 0.0385 - 41 0.846 - - 19 6 4 0 - 0 0.333 - 7 0.167 - 40 0.167 - 41 0.333 - - 21 15861 41 0 - 0 0.0829 - 1 0.0024 - 2 0.0109 - 3 0.00372 - 4 0.033 - 5 0.00139 - 7 0.134 - 8 0.0212 - 9 0.00132 - 10 0.000126 - 12 0.0197 - 13 0.00694 - 14 0.0029 - 15 0.00624 - 16 0.000126 - 17 6.3e-05 - 19 0.0122 - 20 0.00151 - 21 0.0221 - 22 0.00189 - 23 0.000252 - 24 0.000252 - 26 0.0281 - 28 0.0508 - 29 0.0859 - 30 0.039 - 31 0.0798 - 32 0.0294 - 33 0.0477 - 34 0.000126 - 35 0.00132 - 37 0.00347 - 39 0.000567 - 40 0.0816 - 41 0.174 - 42 0.00643 - 43 0.00063 - 44 0.000757 - 45 0.00189 - 46 0.00265 - 47 0.00063 - - 22 659 20 0 - 0 0.00455 - 2 0.0319 - 4 0.0212 - 7 0.284 - 8 0.0774 - 12 0.00303 - 13 0.00303 - 21 0.00759 - 26 0.0212 - 28 0.0334 - 29 0.00759 - 30 0.00607 - 31 0.0167 - 32 0.00152 - 33 0.00455 - 40 0.323 - 41 0.138 - 42 0.0121 - 43 0.00152 - 45 0.00152 - - 23 35 13 0 - 0 0.0286 - 4 0.0286 - 7 0.171 - 8 0.0286 - 12 0.0286 - 21 0.0286 - 26 0.0571 - 28 0.0571 - 31 0.4 - 32 0.0286 - 40 0.0571 - 41 0.0286 - 42 0.0571 - - 24 74 17 0 - 0 0.0135 - 2 0.0135 - 3 0.0135 - 4 0.0541 - 7 0.162 - 8 0.0135 - 13 0.027 - 14 0.0541 - 15 0.0135 - 20 0.027 - 21 0.0405 - 30 0.027 - 39 0.0135 - 40 0.351 - 41 0.149 - 42 0.0135 - 47 0.0135 - - 28 6 3 0 - 8 0.167 - 28 0.333 - 41 0.5 - - 29 1 1 0 - 42 1 - - 31 3 3 0 - 13 0.333 - 26 0.333 - 40 0.333 - - 37 3 2 0 - 4 0.333 - 41 0.667 - - 40 9 2 0 - 43 0.111 - 47 0.889 - - 41 5 4 0 - 7 0.2 - 26 0.2 - 29 0.4 - 31 0.2 - - 46 2 2 0 - 8 0.5 - 47 0.5 - - 49 42 5 0 - 7 0.119 - 12 0.0238 - 40 0.619 - 41 0.19 - 42 0.0476 - - 55 524 14 0 - 0 0.00573 - 2 0.0134 - 4 0.00763 - 7 0.143 - 13 0.00382 - 19 0.00191 - 21 0.00573 - 26 0.0687 - 29 0.00763 - 31 0.00191 - 40 0.458 - 41 0.191 - 42 0.0897 - 43 0.00191 - - 57 1267 29 0 - 0 0.0189 - 2 0.0316 - 3 0.00158 - 4 0.00947 - 5 0.00158 - 7 0.0805 - 8 0.00395 - 9 0.000789 - 12 0.00158 - 13 0.00316 - 15 0.00395 - 19 0.00395 - 21 0.00474 - 26 0.0166 - 29 0.00868 - 30 0.000789 - 31 0.000789 - 32 0.000789 - 33 0.000789 - 34 0.00237 - 35 0.000789 - 37 0.00474 - 40 0.514 - 41 0.257 - 42 0.0213 - 43 0.00158 - 45 0.00158 - 46 0.00158 - 47 0.00158 - - 58 3 2 0 - 30 0.333 - 40 0.667 - - 59 1 1 0 - 35 1 - - 62 30 5 0 - 0 0.0333 - 21 0.0333 - 40 0.7 - 41 0.133 - 42 0.1 - - 64 156 13 0 - 0 0.00641 - 2 0.00641 - 4 0.0128 - 7 0.00641 - 14 0.00641 - 19 0.00641 - 21 0.00641 - 26 0.0192 - 40 0.615 - 41 0.288 - 42 0.0128 - 43 0.00641 - 46 0.00641 - - 48 6 3 0 - 7 0.5 - 40 0.167 - 41 0.333 - - 49 384 14 4 - 2 0.0599 - 4 0.0234 - 7 0.695 - 8 0.00781 - 12 0.0026 - 14 0.0026 - 19 0.00521 - 21 0.0026 - 26 0.0104 - 37 0.00521 - 40 0.0703 - 41 0.0911 - 42 0.0182 - 46 0.00521 - - 2 27 5 0 - 7 0.111 - 12 0.037 - 40 0.556 - 41 0.259 - 42 0.037 - - 21 14 5 0 - 7 0.429 - 40 0.357 - 41 0.0714 - 42 0.0714 - 46 0.0714 - - 41 4 1 0 - 40 1 - - 47 327 12 0 - 2 0.0703 - 4 0.0275 - 7 0.771 - 8 0.00917 - 14 0.00306 - 19 0.00612 - 21 0.00306 - 26 0.0122 - 37 0.00612 - 41 0.0734 - 42 0.0153 - 46 0.00306 - - 55 740 14 5 - 0 0.00405 - 2 0.00946 - 4 0.00541 - 7 0.307 - 13 0.0027 - 19 0.00135 - 21 0.00541 - 26 0.132 - 29 0.00541 - 31 0.00135 - 40 0.324 - 41 0.136 - 42 0.0635 - 43 0.00135 - - 7 178 10 0 - 2 0.0112 - 7 0.275 - 13 0.0112 - 21 0.0112 - 26 0.0787 - 29 0.00562 - 31 0.00562 - 40 0.365 - 41 0.129 - 42 0.107 - - 21 514 10 0 - 2 0.00584 - 4 0.00778 - 7 0.323 - 21 0.00195 - 26 0.15 - 29 0.00195 - 40 0.321 - 41 0.132 - 42 0.0545 - 43 0.00195 - - 22 18 6 0 - 0 0.0556 - 7 0.222 - 26 0.111 - 29 0.111 - 40 0.222 - 41 0.278 - - 47 4 2 0 - 7 0.75 - 21 0.25 - - 49 10 6 0 - 0 0.2 - 2 0.1 - 7 0.1 - 19 0.1 - 26 0.2 - 41 0.3 - - 57 1294 29 10 - 0 0.0185 - 2 0.0309 - 3 0.00232 - 4 0.00927 - 5 0.00155 - 7 0.0927 - 8 0.00386 - 9 0.000773 - 12 0.00155 - 13 0.00309 - 15 0.00386 - 19 0.00386 - 21 0.00464 - 26 0.0185 - 29 0.0085 - 30 0.000773 - 31 0.000773 - 32 0.000773 - 33 0.000773 - 34 0.00232 - 35 0.000773 - 37 0.00464 - 40 0.503 - 41 0.254 - 42 0.0209 - 43 0.00232 - 45 0.00155 - 46 0.00155 - 47 0.00155 - - 7 133 14 0 - 0 0.0226 - 2 0.0226 - 3 0.00752 - 7 0.0602 - 8 0.015 - 12 0.00752 - 19 0.00752 - 26 0.0301 - 34 0.00752 - 40 0.466 - 41 0.323 - 42 0.015 - 43 0.00752 - 47 0.00752 - - 8 63 10 0 - 0 0.0159 - 2 0.0159 - 4 0.0159 - 7 0.127 - 13 0.0159 - 32 0.0159 - 33 0.0159 - 40 0.476 - 41 0.286 - 45 0.0159 - - 13 10 6 0 - 2 0.1 - 7 0.2 - 15 0.1 - 35 0.1 - 40 0.4 - 41 0.1 - - 21 614 22 0 - 0 0.0277 - 2 0.0326 - 3 0.00326 - 4 0.013 - 5 0.00163 - 7 0.0765 - 9 0.00163 - 12 0.00163 - 13 0.00326 - 15 0.00489 - 19 0.00651 - 21 0.00814 - 26 0.0212 - 29 0.013 - 30 0.00163 - 34 0.00326 - 37 0.00651 - 40 0.484 - 41 0.269 - 42 0.0163 - 45 0.00163 - 46 0.00326 - - 22 32 6 0 - 0 0.0625 - 7 0.188 - 29 0.0625 - 40 0.5 - 41 0.156 - 47 0.0312 - - 24 16 6 0 - 2 0.0625 - 7 0.188 - 8 0.0625 - 21 0.0625 - 40 0.25 - 41 0.375 - - 44 1 1 0 - 43 1 - - 49 164 12 0 - 2 0.0244 - 4 0.0122 - 7 0.183 - 8 0.0122 - 15 0.0061 - 26 0.0122 - 29 0.0061 - 37 0.0061 - 40 0.488 - 41 0.207 - 42 0.0366 - 43 0.0061 - - 55 215 9 0 - 0 0.00465 - 2 0.0465 - 5 0.00465 - 7 0.0605 - 26 0.0186 - 31 0.00465 - 40 0.6 - 41 0.223 - 42 0.0372 - - 57 20 6 0 - 7 0.05 - 13 0.05 - 37 0.05 - 40 0.65 - 41 0.15 - 42 0.05 - - 58 6 4 0 - 7 0.333 - 26 0.167 - 30 0.167 - 40 0.333 - - 59 1 1 0 - 35 1 - - 62 30 5 0 - 0 0.0333 - 21 0.0333 - 40 0.7 - 41 0.133 - 42 0.1 - - 64 159 13 2 - 0 0.00629 - 2 0.00629 - 4 0.0126 - 7 0.0126 - 14 0.00629 - 19 0.00629 - 21 0.00629 - 26 0.0189 - 40 0.61 - 41 0.289 - 42 0.0126 - 43 0.00629 - 46 0.00629 - - 21 35 6 0 - 4 0.0286 - 19 0.0286 - 21 0.0286 - 26 0.0286 - 40 0.486 - 41 0.4 - - 41 10 1 0 - 40 1 - -50 604 25 5 - 0 0.0364 - 1 0.00662 - 3 0.0166 - 4 0.212 - 7 0.166 - 8 0.113 - 9 0.00993 - 12 0.00993 - 13 0.0629 - 14 0.0662 - 15 0.0298 - 16 0.00662 - 20 0.0298 - 21 0.0298 - 22 0.00331 - 26 0.043 - 28 0.043 - 29 0.0132 - 30 0.0497 - 31 0.0232 - 32 0.00662 - 33 0.00993 - 35 0.00331 - 39 0.00331 - 45 0.00662 - - 7 209 21 0 - 0 0.00957 - 1 0.00957 - 3 0.0239 - 4 0.22 - 7 0.115 - 8 0.129 - 9 0.0144 - 13 0.0861 - 14 0.0766 - 15 0.0431 - 16 0.00478 - 20 0.0144 - 21 0.0335 - 26 0.0335 - 28 0.0622 - 30 0.0718 - 31 0.0287 - 32 0.00478 - 35 0.00478 - 39 0.00478 - 45 0.00957 - - 8 4 3 0 - 7 0.5 - 8 0.25 - 26 0.25 - - 21 83 15 3 - 0 0.108 - 4 0.181 - 7 0.289 - 8 0.0723 - 12 0.0361 - 14 0.0241 - 16 0.012 - 20 0.0723 - 21 0.0241 - 22 0.012 - 26 0.0602 - 29 0.0482 - 31 0.012 - 32 0.012 - 33 0.0361 - - 2 22 8 0 - 4 0.227 - 7 0.364 - 14 0.0909 - 20 0.0909 - 22 0.0455 - 26 0.0455 - 29 0.0909 - 31 0.0455 - - 7 11 5 0 - 4 0.364 - 7 0.0909 - 8 0.364 - 20 0.0909 - 21 0.0909 - - 21 50 12 0 - 0 0.18 - 4 0.12 - 7 0.3 - 8 0.04 - 12 0.06 - 16 0.02 - 20 0.06 - 21 0.02 - 26 0.08 - 29 0.04 - 32 0.02 - 33 0.06 - - 28 5 3 0 - 4 0.6 - 13 0.2 - 14 0.2 - - 47 302 25 4 - 0 0.0364 - 1 0.00662 - 3 0.0166 - 4 0.212 - 7 0.166 - 8 0.113 - 9 0.00993 - 12 0.00993 - 13 0.0629 - 14 0.0662 - 15 0.0298 - 16 0.00662 - 20 0.0298 - 21 0.0298 - 22 0.00331 - 26 0.043 - 28 0.043 - 29 0.0132 - 30 0.0497 - 31 0.0232 - 32 0.00662 - 33 0.00993 - 35 0.00331 - 39 0.00331 - 45 0.00662 - - 7 209 21 0 - 0 0.00957 - 1 0.00957 - 3 0.0239 - 4 0.22 - 7 0.115 - 8 0.129 - 9 0.0144 - 13 0.0861 - 14 0.0766 - 15 0.0431 - 16 0.00478 - 20 0.0144 - 21 0.0335 - 26 0.0335 - 28 0.0622 - 30 0.0718 - 31 0.0287 - 32 0.00478 - 35 0.00478 - 39 0.00478 - 45 0.00957 - - 8 4 3 0 - 7 0.5 - 8 0.25 - 26 0.25 - - 21 83 15 0 - 0 0.108 - 4 0.181 - 7 0.289 - 8 0.0723 - 12 0.0361 - 14 0.0241 - 16 0.012 - 20 0.0723 - 21 0.0241 - 22 0.012 - 26 0.0602 - 29 0.0482 - 31 0.012 - 32 0.012 - 33 0.0361 - - 28 5 3 0 - 4 0.6 - 13 0.2 - 14 0.2 - -51 1442 32 20 - 0 0.000693 - 2 0.00763 - 3 0.00139 - 4 0.0146 - 7 0.0444 - 8 0.00416 - 9 0.000693 - 12 0.000693 - 13 0.00347 - 14 0.00139 - 15 0.000693 - 19 0.00347 - 20 0.000693 - 21 0.0173 - 22 0.000693 - 26 0.00832 - 27 0.00208 - 28 0.00208 - 29 0.00277 - 30 0.00208 - 33 0.00139 - 34 0.000693 - 35 0.00139 - 37 0.00139 - 39 0.000693 - 40 0.279 - 41 0.164 - 42 0.025 - 43 0.0118 - 44 0.00139 - 46 0.0374 - 47 0.356 - - 2 42 15 1 - 3 0.0238 - 4 0.167 - 7 0.143 - 8 0.0238 - 9 0.0238 - 13 0.0238 - 14 0.0238 - 19 0.0238 - 21 0.333 - 26 0.0238 - 27 0.0238 - 28 0.0238 - 35 0.0476 - 37 0.0238 - 41 0.0714 - - 41 6 5 0 - 3 0.167 - 4 0.333 - 14 0.167 - 21 0.167 - 35 0.167 - - 4 2 2 0 - 27 0.5 - 41 0.5 - - 7 6 4 0 - 4 0.333 - 13 0.333 - 30 0.167 - 34 0.167 - - 21 42 15 5 - 3 0.0238 - 4 0.143 - 7 0.167 - 8 0.0476 - 13 0.0476 - 15 0.0238 - 19 0.0238 - 21 0.19 - 22 0.0238 - 26 0.0476 - 28 0.0476 - 37 0.0238 - 40 0.143 - 41 0.0238 - 42 0.0238 - - 2 9 4 0 - 7 0.333 - 15 0.111 - 21 0.444 - 41 0.111 - - 21 3 1 0 - 4 1 - - 47 19 10 0 - 3 0.0526 - 4 0.105 - 7 0.211 - 8 0.105 - 13 0.105 - 21 0.211 - 22 0.0526 - 26 0.0526 - 40 0.0526 - 42 0.0526 - - 49 3 2 0 - 26 0.333 - 40 0.667 - - 71 3 2 0 - 28 0.667 - 40 0.333 - - 40 210 3 0 - 43 0.00476 - 46 0.176 - 47 0.819 - - 41 31 12 2 - 2 0.0645 - 4 0.0323 - 7 0.548 - 14 0.0323 - 19 0.0323 - 20 0.0323 - 21 0.0323 - 27 0.0323 - 30 0.0645 - 39 0.0323 - 46 0.0645 - 47 0.0323 - - 51 4 3 0 - 2 0.5 - 19 0.25 - 39 0.25 - - 57 5 4 0 - 4 0.2 - 7 0.4 - 14 0.2 - 47 0.2 - - 42 16 4 0 - 7 0.125 - 8 0.0625 - 40 0.188 - 47 0.625 - - 46 38 4 0 - 7 0.0263 - 33 0.0263 - 43 0.0526 - 47 0.895 - - 47 495 14 13 - 2 0.00808 - 4 0.00202 - 7 0.00202 - 19 0.00202 - 26 0.00606 - 29 0.00404 - 33 0.00202 - 40 0.194 - 41 0.208 - 42 0.0202 - 43 0.0141 - 44 0.00202 - 46 0.0162 - 47 0.519 - - 21 5 3 0 - 19 0.2 - 40 0.6 - 41 0.2 - - 40 174 2 0 - 46 0.0115 - 47 0.989 - - 42 10 1 0 - 47 1 - - 46 36 3 0 - 33 0.0278 - 43 0.0278 - 47 0.944 - - 48 32 9 0 - 2 0.0312 - 7 0.0312 - 26 0.0625 - 40 0.188 - 41 0.531 - 42 0.0312 - 43 0.0625 - 46 0.0312 - 47 0.0312 - - 49 26 4 0 - 40 0.385 - 41 0.5 - 43 0.0769 - 47 0.0385 - - 51 4 1 0 - 40 1 - - 55 86 7 0 - 2 0.0116 - 29 0.0233 - 40 0.267 - 41 0.465 - 42 0.0465 - 46 0.0233 - 47 0.163 - - 57 51 6 0 - 26 0.0196 - 40 0.471 - 41 0.196 - 42 0.0588 - 43 0.0196 - 47 0.235 - - 62 13 4 0 - 40 0.385 - 41 0.462 - 46 0.0769 - 47 0.0769 - - 64 11 4 0 - 2 0.0909 - 40 0.455 - 41 0.0909 - 47 0.364 - - 69 17 5 0 - 4 0.0588 - 40 0.471 - 41 0.353 - 46 0.0588 - 47 0.0588 - - 71 9 6 0 - 2 0.111 - 40 0.333 - 41 0.222 - 43 0.111 - 44 0.111 - 47 0.111 - - 48 39 9 0 - 2 0.0256 - 7 0.0256 - 26 0.0513 - 40 0.308 - 41 0.436 - 42 0.0513 - 43 0.0513 - 46 0.0256 - 47 0.0256 - - 49 53 10 2 - 4 0.0377 - 7 0.132 - 8 0.0189 - 12 0.0189 - 21 0.0189 - 40 0.377 - 41 0.321 - 42 0.0189 - 43 0.0377 - 47 0.0189 - - 2 10 6 0 - 4 0.2 - 7 0.3 - 12 0.1 - 21 0.1 - 40 0.2 - 41 0.1 - - 47 21 5 0 - 7 0.0476 - 40 0.429 - 41 0.429 - 42 0.0476 - 47 0.0476 - - 51 16 5 1 - 2 0.0625 - 40 0.562 - 41 0.25 - 42 0.0625 - 46 0.0625 - - 47 5 3 0 - 2 0.2 - 41 0.6 - 42 0.2 - - 52 8 3 0 - 19 0.125 - 40 0.5 - 41 0.375 - - 55 193 13 8 - 0 0.00518 - 2 0.00518 - 7 0.0518 - 8 0.00518 - 21 0.00518 - 26 0.0155 - 29 0.0104 - 40 0.487 - 41 0.259 - 42 0.0622 - 43 0.00518 - 46 0.0155 - 47 0.0725 - - 2 9 3 0 - 0 0.111 - 40 0.778 - 41 0.111 - - 41 21 4 0 - 40 0.714 - 41 0.19 - 42 0.0476 - 46 0.0476 - - 42 17 5 0 - 40 0.706 - 41 0.0588 - 43 0.0588 - 46 0.0588 - 47 0.118 - - 45 17 2 0 - 40 0.941 - 42 0.0588 - - 47 77 9 0 - 7 0.104 - 21 0.013 - 26 0.039 - 29 0.026 - 40 0.221 - 41 0.429 - 42 0.039 - 46 0.013 - 47 0.117 - - 48 1 1 0 - 8 1 - - 52 1 1 0 - 2 1 - - 57 9 3 0 - 40 0.222 - 41 0.111 - 42 0.667 - - 57 89 8 3 - 4 0.0112 - 7 0.0562 - 26 0.0112 - 40 0.551 - 41 0.169 - 42 0.0562 - 43 0.0112 - 47 0.135 - - 47 26 5 0 - 26 0.0385 - 40 0.385 - 41 0.115 - 42 0.0385 - 47 0.423 - - 49 7 2 0 - 4 0.143 - 40 0.857 - - 55 15 4 0 - 7 0.2 - 40 0.467 - 41 0.267 - 43 0.0667 - - 62 54 5 1 - 40 0.815 - 41 0.111 - 42 0.037 - 46 0.0185 - 47 0.0185 - - 47 8 3 0 - 40 0.25 - 41 0.625 - 46 0.125 - - 64 40 4 0 - 2 0.025 - 40 0.8 - 41 0.075 - 47 0.1 - - 69 31 5 0 - 4 0.0323 - 40 0.71 - 41 0.194 - 46 0.0323 - 47 0.0323 - - 71 11 7 0 - 2 0.0909 - 7 0.0909 - 40 0.364 - 41 0.182 - 43 0.0909 - 44 0.0909 - 47 0.0909 - - 72 6 3 0 - 7 0.667 - 40 0.167 - 41 0.167 - -52 275 19 11 - 0 0.00727 - 2 0.0109 - 4 0.00727 - 7 0.0145 - 13 0.00727 - 19 0.0145 - 20 0.00727 - 21 0.00727 - 26 0.04 - 27 0.0109 - 28 0.0291 - 37 0.00727 - 40 0.142 - 41 0.52 - 42 0.00364 - 43 0.0291 - 45 0.00364 - 46 0.0364 - 47 0.102 - - 2 1 1 0 - 45 1 - - 13 5 2 0 - 40 0.8 - 46 0.2 - - 15 2 2 0 - 41 0.5 - 42 0.5 - - 21 18 5 0 - 4 0.0556 - 21 0.0556 - 37 0.0556 - 40 0.0556 - 41 0.778 - - 27 80 9 1 - 13 0.0125 - 19 0.0125 - 26 0.075 - 27 0.0125 - 28 0.025 - 40 0.225 - 41 0.538 - 43 0.0375 - 46 0.0625 - - 45 2 1 0 - 46 1 - - 28 11 4 0 - 0 0.0909 - 20 0.0909 - 28 0.182 - 41 0.636 - - 40 13 1 0 - 47 1 - - 41 1 1 0 - 27 1 - - 46 2 2 0 - 2 0.5 - 7 0.5 - - 47 127 17 7 - 0 0.00787 - 2 0.00787 - 4 0.00787 - 7 0.0157 - 13 0.00787 - 19 0.0157 - 20 0.00787 - 21 0.00787 - 26 0.0394 - 27 0.00787 - 28 0.0315 - 37 0.00787 - 40 0.102 - 41 0.559 - 43 0.0315 - 46 0.0315 - 47 0.11 - - 13 2 2 0 - 40 0.5 - 46 0.5 - - 21 17 4 0 - 4 0.0588 - 21 0.0588 - 37 0.0588 - 41 0.824 - - 27 70 9 0 - 13 0.0143 - 19 0.0143 - 26 0.0714 - 27 0.0143 - 28 0.0286 - 40 0.157 - 41 0.614 - 43 0.0429 - 46 0.0429 - - 28 11 4 0 - 0 0.0909 - 20 0.0909 - 28 0.182 - 41 0.636 - - 40 13 1 0 - 47 1 - - 46 2 2 0 - 2 0.5 - 7 0.5 - - 52 2 2 0 - 7 0.5 - 43 0.5 - - 52 4 4 0 - 2 0.25 - 7 0.25 - 41 0.25 - 43 0.25 - -53 99 14 6 - 4 0.0606 - 7 0.0808 - 8 0.0606 - 14 0.0202 - 15 0.0404 - 19 0.0404 - 21 0.0202 - 28 0.141 - 31 0.0202 - 37 0.0202 - 40 0.121 - 41 0.101 - 42 0.101 - 43 0.172 - - 8 3 1 0 - 41 1 - - 11 30 4 0 - 40 0.4 - 41 0.0667 - 42 0.167 - 43 0.367 - - 40 12 4 0 - 7 0.25 - 21 0.0833 - 28 0.583 - 37 0.0833 - - 42 2 1 0 - 15 1 - - 43 11 6 0 - 4 0.273 - 7 0.0909 - 8 0.273 - 14 0.0909 - 19 0.182 - 31 0.0909 - - 47 38 13 5 - 4 0.0789 - 7 0.105 - 8 0.0789 - 14 0.0263 - 15 0.0526 - 19 0.0526 - 21 0.0263 - 28 0.184 - 31 0.0263 - 37 0.0263 - 41 0.132 - 42 0.132 - 43 0.0789 - - 8 3 1 0 - 41 1 - - 11 10 3 0 - 41 0.2 - 42 0.5 - 43 0.3 - - 40 12 4 0 - 7 0.25 - 21 0.0833 - 28 0.583 - 37 0.0833 - - 42 2 1 0 - 15 1 - - 43 11 6 0 - 4 0.273 - 7 0.0909 - 8 0.273 - 14 0.0909 - 19 0.182 - 31 0.0909 - -54 1254 23 14 - 0 0.00159 - 2 0.00478 - 3 0.0271 - 4 0.00399 - 6 0.00159 - 7 0.112 - 8 0.0478 - 13 0.386 - 14 0.0447 - 15 0.121 - 18 0.00478 - 26 0.00638 - 29 0.00159 - 30 0.00319 - 31 0.00159 - 34 0.000797 - 40 0.00558 - 41 0.203 - 42 0.00159 - 43 0.00319 - 44 0.00239 - 45 0.00159 - 46 0.0136 - - 3 35 5 1 - 7 0.0286 - 13 0.257 - 15 0.0571 - 41 0.629 - 45 0.0286 - - 41 11 1 0 - 41 1 - - 4 4 1 0 - 8 1 - - 8 6 3 0 - 7 0.167 - 13 0.667 - 42 0.167 - - 13 18 4 0 - 7 0.722 - 26 0.167 - 40 0.0556 - 46 0.0556 - - 14 2 2 0 - 2 0.5 - 34 0.5 - - 15 371 10 3 - 3 0.062 - 4 0.0108 - 6 0.00539 - 7 0.299 - 8 0.0027 - 13 0.0108 - 26 0.0135 - 40 0.0027 - 41 0.59 - 43 0.0027 - - 15 29 4 0 - 7 0.897 - 13 0.0345 - 26 0.0345 - 41 0.0345 - - 41 232 4 0 - 3 0.0431 - 8 0.00431 - 13 0.0129 - 41 0.94 - - 47 105 7 0 - 3 0.124 - 4 0.0381 - 6 0.019 - 7 0.762 - 26 0.0381 - 40 0.00952 - 43 0.00952 - - 16 4 1 0 - 7 1 - - 40 1 1 0 - 43 1 - - 41 237 7 3 - 2 0.00844 - 3 0.0464 - 8 0.097 - 13 0.751 - 14 0.0717 - 15 0.0169 - 30 0.00844 - - 3 22 2 0 - 3 0.5 - 13 0.5 - - 15 213 6 0 - 2 0.00469 - 8 0.108 - 13 0.779 - 14 0.0798 - 15 0.0188 - 30 0.00939 - - 54 1 1 0 - 2 1 - - 47 411 18 8 - 0 0.00243 - 2 0.00487 - 7 0.0073 - 8 0.0681 - 13 0.589 - 14 0.0681 - 15 0.182 - 18 0.0073 - 29 0.00243 - 30 0.00487 - 31 0.00243 - 40 0.0073 - 41 0.0219 - 42 0.00243 - 43 0.00487 - 44 0.00243 - 45 0.00243 - 46 0.0195 - - 3 12 3 0 - 13 0.75 - 15 0.167 - 45 0.0833 - - 8 5 2 0 - 13 0.8 - 42 0.2 - - 13 1 1 0 - 40 1 - - 14 1 1 0 - 2 1 - - 15 15 5 0 - 7 0.2 - 8 0.0667 - 13 0.267 - 41 0.4 - 43 0.0667 - - 40 1 1 0 - 43 1 - - 41 225 6 0 - 2 0.00444 - 8 0.102 - 13 0.791 - 14 0.0756 - 15 0.0178 - 30 0.00889 - - 57 143 12 0 - 0 0.00699 - 8 0.021 - 13 0.294 - 14 0.0769 - 15 0.476 - 18 0.021 - 29 0.00699 - 31 0.00699 - 40 0.014 - 41 0.021 - 44 0.00699 - 46 0.049 - - 54 7 5 0 - 2 0.143 - 7 0.429 - 13 0.143 - 41 0.143 - 44 0.143 - - 55 8 5 0 - 4 0.125 - 7 0.375 - 13 0.25 - 15 0.125 - 41 0.125 - - 57 145 13 2 - 0 0.0069 - 7 0.0069 - 8 0.0207 - 13 0.29 - 14 0.0759 - 15 0.476 - 18 0.0207 - 29 0.0069 - 31 0.0069 - 40 0.0138 - 41 0.0207 - 44 0.0069 - 46 0.0483 - - 13 16 6 0 - 8 0.0625 - 13 0.312 - 14 0.0625 - 15 0.25 - 41 0.0625 - 46 0.25 - - 55 3 3 0 - 7 0.333 - 8 0.333 - 46 0.333 - - 64 1 1 0 - 46 1 - -55 743201 48 64 - 0 0.0725 - 1 0.000324 - 2 0.0381 - 3 0.0109 - 4 0.0192 - 5 9.28e-05 - 6 8.48e-05 - 7 0.218 - 8 0.0157 - 9 0.00101 - 10 0.000679 - 11 2.69e-06 - 12 0.0255 - 13 0.0155 - 14 0.00484 - 15 0.0115 - 16 0.000159 - 17 3.5e-05 - 18 0.000148 - 19 0.00383 - 20 0.000667 - 21 0.0224 - 22 0.00163 - 23 0.000167 - 24 0.000495 - 25 3.23e-05 - 26 0.0314 - 27 2.69e-06 - 28 0.00194 - 29 0.0528 - 30 0.00873 - 31 0.013 - 32 0.0128 - 33 0.0187 - 34 0.0103 - 35 0.00461 - 36 0.000354 - 37 0.00247 - 38 2.96e-05 - 39 0.00155 - 40 0.175 - 41 0.167 - 42 0.0181 - 43 0.00332 - 44 0.00367 - 45 0.00252 - 46 0.00333 - 47 0.00429 - - 0 57 13 3 - 0 0.0175 - 7 0.123 - 8 0.0877 - 13 0.0351 - 15 0.0175 - 21 0.246 - 23 0.175 - 29 0.105 - 30 0.0877 - 31 0.0526 - 41 0.0175 - 43 0.0175 - 45 0.0175 - - 13 25 7 0 - 7 0.08 - 8 0.16 - 13 0.04 - 21 0.2 - 23 0.4 - 30 0.08 - 45 0.04 - - 15 26 9 0 - 7 0.154 - 8 0.0385 - 13 0.0385 - 15 0.0385 - 21 0.346 - 29 0.231 - 30 0.0385 - 31 0.0769 - 41 0.0385 - - 19 3 3 0 - 0 0.333 - 7 0.333 - 30 0.333 - - 1 3 2 0 - 26 0.333 - 40 0.667 - - 2 6940 35 14 - 0 0.000144 - 2 0.000144 - 3 0.104 - 4 0.195 - 6 0.000144 - 7 0.0062 - 8 0.168 - 9 0.0107 - 10 0.00072 - 13 0.114 - 14 0.0501 - 15 0.186 - 16 0.00202 - 17 0.00101 - 19 0.00187 - 20 0.0399 - 21 0.0278 - 22 0.000576 - 23 0.000144 - 26 0.000432 - 28 0.000865 - 29 0.000576 - 30 0.0098 - 31 0.00548 - 33 0.00101 - 34 0.000144 - 35 0.00115 - 36 0.000144 - 37 0.000432 - 38 0.000288 - 39 0.0588 - 41 0.00346 - 42 0.000432 - 44 0.000576 - 45 0.00749 - - 3 18 3 0 - 3 0.889 - 7 0.0556 - 21 0.0556 - - 13 15 7 0 - 3 0.133 - 4 0.0667 - 8 0.2 - 21 0.267 - 28 0.133 - 30 0.133 - 33 0.0667 - - 14 6 2 0 - 30 0.167 - 33 0.833 - - 15 3 2 0 - 15 0.667 - 21 0.333 - - 41 1384 25 0 - 3 0.318 - 4 0.103 - 7 0.0224 - 8 0.0412 - 9 0.00939 - 10 0.00145 - 13 0.0549 - 14 0.0253 - 15 0.091 - 16 0.000723 - 19 0.000723 - 20 0.0065 - 21 0.0571 - 22 0.00145 - 23 0.000723 - 26 0.000723 - 28 0.000723 - 29 0.000723 - 30 0.00361 - 31 0.00289 - 34 0.000723 - 35 0.00217 - 39 0.249 - 41 0.00145 - 45 0.00434 - - 42 77 15 0 - 3 0.0649 - 4 0.156 - 8 0.0779 - 9 0.026 - 13 0.0649 - 14 0.0519 - 15 0.286 - 17 0.013 - 21 0.117 - 28 0.013 - 36 0.013 - 39 0.0519 - 41 0.039 - 44 0.013 - 45 0.013 - - 45 5 3 0 - 4 0.6 - 14 0.2 - 20 0.2 - - 46 35 7 0 - 4 0.143 - 8 0.143 - 13 0.0571 - 21 0.0286 - 22 0.0286 - 31 0.0286 - 45 0.571 - - 47 1 1 0 - 0 1 - - 55 5370 31 0 - 2 0.000186 - 3 0.0477 - 4 0.221 - 6 0.000186 - 7 0.00186 - 8 0.204 - 9 0.011 - 10 0.000559 - 13 0.131 - 14 0.0572 - 15 0.212 - 16 0.00242 - 17 0.00112 - 19 0.00223 - 20 0.0497 - 21 0.0177 - 22 0.000186 - 26 0.000372 - 28 0.000372 - 29 0.000559 - 30 0.0101 - 31 0.00615 - 33 0.000186 - 35 0.000931 - 37 0.000186 - 38 0.000372 - 39 0.0112 - 41 0.00354 - 42 0.000559 - 44 0.000559 - 45 0.00447 - - 57 4 3 0 - 7 0.25 - 13 0.5 - 21 0.25 - - 58 6 6 0 - 4 0.167 - 8 0.167 - 15 0.167 - 21 0.167 - 30 0.167 - 45 0.167 - - 62 6 2 0 - 4 0.167 - 30 0.833 - - 64 3 2 0 - 4 0.333 - 37 0.667 - - 3 8212 38 21 - 0 0.0178 - 2 0.0314 - 3 0.00499 - 4 0.0933 - 6 0.000122 - 7 0.167 - 8 0.00402 - 9 0.00244 - 10 0.000365 - 12 0.00706 - 13 0.00426 - 14 0.00146 - 15 0.00402 - 19 0.00231 - 20 0.000244 - 21 0.0108 - 22 0.000487 - 23 0.000122 - 25 0.000122 - 26 0.0899 - 28 0.000122 - 29 0.0141 - 30 0.00329 - 31 0.00548 - 32 0.0011 - 33 0.00329 - 34 0.00256 - 35 0.000852 - 37 0.00317 - 39 0.000122 - 40 0.2 - 41 0.278 - 42 0.0226 - 43 0.0167 - 44 0.0017 - 45 0.00134 - 46 0.000974 - 47 0.00195 - - 2 92 17 0 - 0 0.0326 - 2 0.0326 - 4 0.0109 - 7 0.0652 - 8 0.0109 - 12 0.0109 - 21 0.0109 - 26 0.0109 - 31 0.0109 - 33 0.0109 - 34 0.0109 - 40 0.304 - 41 0.391 - 42 0.0217 - 43 0.0217 - 44 0.0217 - 45 0.0217 - - 3 254 17 0 - 0 0.00787 - 2 0.0197 - 4 0.0276 - 7 0.217 - 8 0.00394 - 9 0.00394 - 12 0.0118 - 13 0.00787 - 14 0.00394 - 15 0.0354 - 26 0.287 - 32 0.00394 - 40 0.201 - 41 0.126 - 42 0.0236 - 43 0.0118 - 47 0.00787 - - 4 159 24 0 - 0 0.164 - 2 0.0377 - 4 0.00629 - 7 0.195 - 8 0.00629 - 10 0.0126 - 12 0.044 - 13 0.0126 - 14 0.00629 - 15 0.00629 - 19 0.00629 - 21 0.044 - 23 0.00629 - 26 0.0252 - 29 0.0314 - 31 0.0189 - 32 0.00629 - 33 0.00629 - 34 0.0126 - 35 0.0126 - 40 0.164 - 41 0.151 - 42 0.0126 - 45 0.0126 - - 7 12 7 0 - 3 0.0833 - 4 0.25 - 7 0.25 - 14 0.0833 - 21 0.0833 - 40 0.0833 - 41 0.167 - - 8 155 14 0 - 0 0.071 - 2 0.0516 - 7 0.116 - 12 0.00645 - 14 0.00645 - 19 0.0129 - 26 0.0323 - 31 0.0194 - 33 0.00645 - 34 0.00645 - 40 0.374 - 41 0.252 - 42 0.0387 - 47 0.00645 - - 9 3 2 0 - 33 0.667 - 34 0.333 - - 10 1 1 0 - 8 1 - - 13 164 20 0 - 0 0.0366 - 2 0.0549 - 4 0.0061 - 7 0.171 - 8 0.0061 - 12 0.0061 - 13 0.0061 - 14 0.0122 - 19 0.0061 - 26 0.0305 - 29 0.0061 - 30 0.0061 - 32 0.0122 - 33 0.0427 - 34 0.0061 - 40 0.14 - 41 0.378 - 42 0.0488 - 43 0.0122 - 46 0.0122 - - 14 12 7 0 - 2 0.167 - 3 0.167 - 7 0.0833 - 26 0.0833 - 30 0.0833 - 40 0.167 - 41 0.25 - - 15 1421 30 0 - 0 0.019 - 2 0.0394 - 3 0.000704 - 4 0.00281 - 7 0.0739 - 8 0.00141 - 9 0.000704 - 12 0.00563 - 13 0.00141 - 15 0.00422 - 19 0.00141 - 20 0.00141 - 21 0.00281 - 26 0.0387 - 28 0.000704 - 29 0.031 - 30 0.00211 - 31 0.00493 - 32 0.000704 - 33 0.00211 - 34 0.000704 - 37 0.00352 - 39 0.000704 - 40 0.251 - 41 0.481 - 42 0.00844 - 43 0.0169 - 44 0.00141 - 45 0.000704 - 47 0.000704 - - 20 1 1 0 - 30 1 - - 21 31 11 0 - 0 0.0323 - 2 0.0323 - 4 0.0323 - 7 0.484 - 14 0.0323 - 21 0.0323 - 26 0.0323 - 29 0.0645 - 37 0.0645 - 40 0.0968 - 41 0.0968 - - 29 1 1 0 - 14 1 - - 31 2 2 0 - 0 0.5 - 26 0.5 - - 38 13 6 0 - 4 0.0769 - 7 0.0769 - 40 0.231 - 41 0.154 - 42 0.0769 - 44 0.385 - - 39 1781 28 0 - 0 0.000561 - 2 0.0247 - 3 0.0202 - 4 0.396 - 6 0.000561 - 7 0.14 - 8 0.0101 - 9 0.000561 - 12 0.000561 - 13 0.0112 - 15 0.00225 - 19 0.00168 - 21 0.00786 - 22 0.00112 - 26 0.0415 - 29 0.000561 - 30 0.00168 - 31 0.00786 - 33 0.000561 - 34 0.00225 - 35 0.000561 - 37 0.00112 - 40 0.12 - 41 0.149 - 42 0.0118 - 43 0.0444 - 44 0.00112 - 47 0.000561 - - 41 320 10 0 - 2 0.025 - 7 0.00313 - 13 0.00313 - 25 0.00313 - 31 0.00313 - 40 0.172 - 41 0.669 - 42 0.0719 - 43 0.0188 - 47 0.0312 - - 45 3 1 0 - 46 1 - - 47 3753 32 0 - 0 0.0181 - 2 0.0306 - 3 0.000266 - 4 0.0107 - 7 0.227 - 8 0.00213 - 9 0.00453 - 10 0.000266 - 12 0.00959 - 13 0.00187 - 14 0.000799 - 15 0.00346 - 19 0.00266 - 21 0.016 - 22 0.000533 - 26 0.137 - 29 0.0168 - 30 0.0048 - 31 0.00426 - 32 0.00107 - 33 0.00293 - 34 0.00266 - 35 0.00107 - 37 0.00453 - 40 0.217 - 41 0.242 - 42 0.028 - 43 0.00533 - 44 0.000799 - 45 0.00133 - 46 0.000799 - 47 0.000266 - - 55 8 4 0 - 14 0.125 - 40 0.375 - 41 0.375 - 45 0.125 - - 60 6 5 0 - 2 0.167 - 21 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 4 2568 37 12 - 0 0.247 - 1 0.000779 - 2 0.00857 - 3 0.00273 - 4 0.00584 - 7 0.274 - 8 0.00935 - 9 0.000389 - 10 0.000389 - 12 0.0666 - 13 0.00701 - 14 0.00117 - 15 0.00156 - 18 0.000779 - 19 0.00857 - 21 0.0238 - 22 0.000389 - 24 0.00195 - 26 0.00701 - 28 0.00389 - 29 0.0269 - 30 0.00701 - 31 0.0245 - 32 0.0218 - 33 0.0592 - 34 0.00584 - 35 0.0253 - 37 0.000389 - 38 0.000779 - 39 0.0343 - 40 0.0401 - 41 0.0666 - 42 0.0101 - 44 0.00117 - 45 0.00117 - 46 0.00117 - 47 0.00195 - - 2 6 1 0 - 7 1 - - 3 4 2 0 - 7 0.5 - 41 0.5 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 12 0.111 - 33 0.222 - 35 0.111 - 41 0.333 - - 7 1 1 0 - 19 1 - - 8 9 4 0 - 7 0.556 - 12 0.111 - 26 0.111 - 29 0.222 - - 13 3 2 0 - 4 0.333 - 7 0.667 - - 15 3 2 0 - 8 0.667 - 42 0.333 - - 17 25 10 0 - 0 0.24 - 2 0.04 - 7 0.08 - 29 0.04 - 30 0.04 - 31 0.04 - 33 0.12 - 35 0.04 - 40 0.12 - 41 0.24 - - 19 8 7 0 - 12 0.125 - 24 0.125 - 29 0.25 - 32 0.125 - 33 0.125 - 40 0.125 - 41 0.125 - - 21 42 9 0 - 0 0.0476 - 7 0.571 - 29 0.0238 - 31 0.0714 - 35 0.0238 - 40 0.143 - 41 0.0238 - 42 0.0714 - 46 0.0238 - - 28 1 1 0 - 8 1 - - 60 3 3 0 - 7 0.333 - 38 0.333 - 40 0.333 - - 5 861 10 0 - 0 0.861 - 4 0.00232 - 12 0.0848 - 18 0.0128 - 19 0.00116 - 21 0.0244 - 26 0.00116 - 33 0.00697 - 35 0.00116 - 41 0.00465 - - 6 75 17 7 - 0 0.0533 - 2 0.0267 - 6 0.107 - 7 0.08 - 8 0.0133 - 12 0.0267 - 26 0.0533 - 31 0.0133 - 33 0.0533 - 39 0.0133 - 40 0.24 - 41 0.173 - 42 0.0267 - 43 0.0133 - 44 0.0267 - 45 0.0133 - 46 0.0667 - - 4 8 5 0 - 7 0.125 - 33 0.5 - 40 0.125 - 41 0.125 - 45 0.125 - - 6 17 6 0 - 6 0.176 - 7 0.235 - 40 0.118 - 41 0.235 - 43 0.0588 - 46 0.176 - - 8 5 4 0 - 0 0.2 - 6 0.4 - 26 0.2 - 44 0.2 - - 41 5 4 0 - 39 0.2 - 40 0.2 - 41 0.2 - 42 0.4 - - 43 1 1 0 - 8 1 - - 45 4 3 0 - 6 0.5 - 40 0.25 - 46 0.25 - - 47 31 9 0 - 0 0.0645 - 2 0.0645 - 12 0.0645 - 26 0.0968 - 31 0.0323 - 40 0.419 - 41 0.194 - 44 0.0323 - 46 0.0323 - - 7 103 24 7 - 0 0.117 - 2 0.00971 - 3 0.0194 - 4 0.117 - 5 0.00971 - 7 0.175 - 8 0.0291 - 12 0.0291 - 13 0.0583 - 14 0.00971 - 15 0.0194 - 18 0.0194 - 19 0.0291 - 21 0.0291 - 22 0.00971 - 24 0.00971 - 26 0.0194 - 29 0.00971 - 31 0.0485 - 33 0.0291 - 39 0.0194 - 40 0.0874 - 41 0.0874 - 47 0.00971 - - 8 2 2 0 - 7 0.5 - 15 0.5 - - 13 8 6 0 - 7 0.125 - 26 0.125 - 33 0.125 - 40 0.375 - 41 0.125 - 47 0.125 - - 21 9 4 0 - 4 0.444 - 8 0.222 - 13 0.222 - 14 0.111 - - 41 2 2 0 - 13 0.5 - 21 0.5 - - 47 62 20 0 - 0 0.177 - 2 0.0161 - 4 0.0484 - 5 0.0161 - 7 0.177 - 8 0.0161 - 12 0.0484 - 15 0.0161 - 18 0.0323 - 19 0.0484 - 21 0.0161 - 22 0.0161 - 24 0.0161 - 26 0.0161 - 29 0.0161 - 31 0.0806 - 33 0.0323 - 39 0.0323 - 40 0.0484 - 41 0.129 - - 55 10 4 0 - 3 0.1 - 4 0.5 - 13 0.3 - 40 0.1 - - 60 4 1 0 - 7 1 - - 8 1338 39 20 - 0 0.059 - 1 0.000747 - 2 0.0329 - 3 0.00673 - 4 0.0112 - 6 0.00374 - 7 0.361 - 8 0.00897 - 9 0.00747 - 10 0.00224 - 12 0.0112 - 13 0.0142 - 14 0.00673 - 15 0.00598 - 19 0.00299 - 21 0.0172 - 22 0.00299 - 24 0.000747 - 26 0.0471 - 27 0.000747 - 28 0.00374 - 29 0.0262 - 30 0.0172 - 31 0.00523 - 32 0.0105 - 33 0.00972 - 34 0.00224 - 35 0.00299 - 37 0.000747 - 38 0.00149 - 39 0.0493 - 40 0.116 - 41 0.116 - 42 0.0179 - 43 0.00448 - 44 0.00448 - 45 0.00374 - 46 0.00374 - 47 0.000747 - - 2 12 5 0 - 0 0.0833 - 7 0.25 - 14 0.167 - 40 0.333 - 41 0.167 - - 3 4 3 0 - 2 0.25 - 9 0.5 - 40 0.25 - - 4 482 34 0 - 0 0.0622 - 2 0.0456 - 3 0.0124 - 4 0.0187 - 6 0.00207 - 7 0.255 - 8 0.0104 - 9 0.0083 - 10 0.00622 - 12 0.0124 - 13 0.0104 - 14 0.00415 - 15 0.00415 - 19 0.00415 - 21 0.0187 - 22 0.00415 - 24 0.00207 - 26 0.0539 - 27 0.00207 - 28 0.00622 - 29 0.0104 - 30 0.0166 - 32 0.00622 - 33 0.0166 - 34 0.00207 - 35 0.00415 - 37 0.00207 - 38 0.00415 - 39 0.135 - 40 0.133 - 41 0.0996 - 42 0.0207 - 44 0.00207 - 45 0.00415 - - 7 4 4 0 - 7 0.25 - 12 0.25 - 21 0.25 - 26 0.25 - - 8 31 13 0 - 1 0.0323 - 7 0.226 - 14 0.0323 - 15 0.0323 - 21 0.0323 - 22 0.0323 - 26 0.0323 - 29 0.0645 - 33 0.0645 - 35 0.0323 - 40 0.161 - 41 0.226 - 44 0.0323 - - 13 49 12 0 - 0 0.0816 - 2 0.0408 - 4 0.0204 - 7 0.327 - 12 0.0612 - 14 0.0204 - 29 0.0204 - 30 0.0204 - 40 0.163 - 41 0.204 - 42 0.0204 - 46 0.0204 - - 14 11 5 0 - 2 0.0909 - 7 0.364 - 40 0.182 - 41 0.273 - 42 0.0909 - - 15 12 7 0 - 2 0.0833 - 7 0.25 - 22 0.0833 - 26 0.0833 - 29 0.333 - 40 0.0833 - 42 0.0833 - - 20 57 10 0 - 2 0.0526 - 7 0.14 - 13 0.0351 - 15 0.0175 - 21 0.0351 - 26 0.0351 - 29 0.0175 - 33 0.0175 - 40 0.368 - 41 0.281 - - 21 63 11 0 - 0 0.0635 - 2 0.0159 - 7 0.603 - 19 0.0159 - 21 0.0159 - 26 0.111 - 32 0.0159 - 40 0.0794 - 41 0.0476 - 44 0.0159 - 46 0.0159 - - 22 2 2 0 - 28 0.5 - 40 0.5 - - 23 10 4 0 - 0 0.1 - 7 0.5 - 40 0.3 - 46 0.1 - - 30 2 2 0 - 13 0.5 - 41 0.5 - - 42 2 2 0 - 14 0.5 - 26 0.5 - - 45 2 2 0 - 19 0.5 - 46 0.5 - - 47 537 30 0 - 0 0.0689 - 2 0.0149 - 3 0.00186 - 4 0.00745 - 6 0.00559 - 7 0.492 - 8 0.00745 - 9 0.00745 - 12 0.00745 - 13 0.0168 - 14 0.00372 - 15 0.00745 - 21 0.0168 - 26 0.0447 - 28 0.00186 - 29 0.0391 - 30 0.0205 - 31 0.00931 - 32 0.0168 - 33 0.00372 - 34 0.00372 - 35 0.00186 - 39 0.00186 - 40 0.0596 - 41 0.102 - 42 0.0186 - 43 0.00931 - 44 0.00559 - 46 0.00186 - 47 0.00186 - - 48 13 6 0 - 0 0.0769 - 2 0.0769 - 7 0.0769 - 31 0.0769 - 40 0.0769 - 41 0.615 - - 54 1 1 0 - 31 1 - - 55 27 14 0 - 0 0.037 - 2 0.0741 - 3 0.0741 - 4 0.037 - 7 0.185 - 8 0.111 - 13 0.0741 - 29 0.037 - 30 0.0741 - 32 0.037 - 40 0.0741 - 41 0.037 - 43 0.037 - 45 0.111 - - 60 8 6 0 - 2 0.25 - 6 0.125 - 7 0.125 - 12 0.125 - 40 0.25 - 41 0.125 - - 9 236 14 6 - 0 0.0212 - 2 0.00847 - 4 0.00847 - 7 0.619 - 12 0.00424 - 21 0.0254 - 26 0.0763 - 29 0.00424 - 30 0.00424 - 31 0.0127 - 40 0.114 - 41 0.089 - 42 0.00847 - 44 0.00424 - - 4 15 5 0 - 4 0.0667 - 7 0.6 - 31 0.0667 - 40 0.133 - 41 0.133 - - 13 7 5 0 - 0 0.143 - 7 0.429 - 12 0.143 - 40 0.143 - 41 0.143 - - 14 2 2 0 - 0 0.5 - 2 0.5 - - 21 19 4 0 - 7 0.737 - 40 0.158 - 41 0.0526 - 42 0.0526 - - 47 160 11 0 - 0 0.0125 - 2 0.00625 - 7 0.606 - 21 0.0375 - 26 0.106 - 29 0.00625 - 30 0.00625 - 40 0.112 - 41 0.0938 - 42 0.00625 - 44 0.00625 - - 55 9 4 0 - 4 0.111 - 7 0.667 - 31 0.111 - 41 0.111 - - 10 370 23 6 - 0 0.0568 - 2 0.0027 - 4 0.00811 - 5 0.0027 - 7 0.705 - 8 0.00541 - 12 0.00541 - 13 0.00811 - 19 0.00811 - 21 0.0162 - 26 0.0135 - 28 0.0027 - 29 0.0027 - 30 0.00811 - 31 0.0027 - 32 0.0324 - 37 0.0027 - 40 0.0459 - 41 0.0486 - 42 0.0135 - 44 0.0027 - 45 0.0027 - 46 0.0027 - - 2 2 2 0 - 26 0.5 - 46 0.5 - - 4 125 17 0 - 0 0.064 - 2 0.008 - 4 0.024 - 5 0.008 - 7 0.552 - 8 0.016 - 12 0.008 - 13 0.024 - 19 0.016 - 21 0.04 - 26 0.016 - 30 0.008 - 32 0.016 - 40 0.112 - 41 0.056 - 42 0.024 - 44 0.008 - - 20 10 6 0 - 7 0.3 - 26 0.2 - 37 0.1 - 40 0.1 - 41 0.2 - 45 0.1 - - 21 5 2 0 - 7 0.4 - 41 0.6 - - 47 216 12 0 - 0 0.0602 - 7 0.838 - 12 0.00463 - 19 0.00463 - 21 0.00463 - 28 0.00463 - 29 0.00463 - 30 0.00926 - 31 0.00463 - 32 0.0463 - 40 0.00926 - 41 0.00926 - - 55 6 3 0 - 7 0.333 - 41 0.5 - 42 0.167 - - 12 3 3 0 - 40 0.333 - 41 0.333 - 43 0.333 - - 13 98717 46 40 - 0 0.0625 - 1 0.000365 - 2 0.0342 - 3 0.00661 - 4 0.0085 - 5 0.000152 - 6 6.08e-05 - 7 0.33 - 8 0.00775 - 9 0.00124 - 10 5.06e-05 - 12 0.0236 - 13 0.004 - 14 0.000952 - 15 0.00478 - 16 3.04e-05 - 17 2.03e-05 - 18 2.03e-05 - 19 0.00561 - 20 0.000274 - 21 0.0242 - 22 0.00352 - 23 0.000111 - 24 0.000537 - 25 4.05e-05 - 26 0.051 - 28 0.00134 - 29 0.0429 - 30 0.00867 - 31 0.0138 - 32 0.00181 - 33 0.0202 - 34 0.0105 - 35 0.00329 - 36 0.000243 - 37 0.00321 - 38 3.04e-05 - 39 0.000263 - 40 0.146 - 41 0.15 - 42 0.015 - 43 0.00203 - 44 0.002 - 45 0.00284 - 46 0.00573 - 47 0.000669 - - 0 3 3 0 - 3 0.333 - 7 0.333 - 41 0.333 - - 2 783 25 0 - 0 0.0396 - 2 0.0179 - 4 0.00383 - 6 0.00128 - 7 0.298 - 8 0.00383 - 12 0.0204 - 21 0.0153 - 26 0.0383 - 29 0.014 - 30 0.00511 - 31 0.0153 - 32 0.014 - 33 0.0115 - 34 0.0102 - 35 0.00255 - 37 0.00383 - 40 0.25 - 41 0.183 - 42 0.0307 - 43 0.00383 - 44 0.00255 - 45 0.00511 - 46 0.00894 - 47 0.00128 - - 3 4034 35 0 - 0 0.0151 - 1 0.000496 - 2 0.0288 - 3 0.0654 - 4 0.0206 - 7 0.335 - 8 0.0107 - 9 0.00868 - 12 0.00645 - 13 0.00372 - 14 0.000496 - 15 0.00843 - 19 0.00347 - 20 0.000744 - 21 0.0121 - 22 0.00198 - 24 0.000496 - 26 0.128 - 28 0.000496 - 29 0.0129 - 30 0.00397 - 31 0.00744 - 32 0.000248 - 33 0.00645 - 34 0.00347 - 35 0.00198 - 37 0.00223 - 40 0.143 - 41 0.127 - 42 0.0273 - 43 0.00322 - 44 0.00545 - 45 0.00223 - 46 0.00149 - 47 0.000992 - - 4 30713 45 0 - 0 0.078 - 1 0.000456 - 2 0.022 - 3 0.00156 - 4 0.00834 - 5 0.000195 - 6 3.26e-05 - 7 0.359 - 8 0.00703 - 9 0.000977 - 10 9.77e-05 - 12 0.0316 - 13 0.00371 - 14 0.00107 - 15 0.00391 - 16 6.51e-05 - 18 6.51e-05 - 19 0.00834 - 20 0.000456 - 21 0.0346 - 22 0.00866 - 23 0.000195 - 24 0.000912 - 25 3.26e-05 - 26 0.0489 - 28 0.00166 - 29 0.0524 - 30 0.00853 - 31 0.0151 - 32 0.00147 - 33 0.0292 - 34 0.013 - 35 0.00293 - 36 0.000293 - 37 0.00414 - 38 3.26e-05 - 39 0.000521 - 40 0.108 - 41 0.125 - 42 0.00856 - 43 0.00143 - 44 0.000814 - 45 0.00378 - 46 0.00199 - 47 0.000358 - - 6 8 6 0 - 0 0.125 - 2 0.125 - 7 0.25 - 40 0.125 - 41 0.125 - 42 0.25 - - 7 79 12 0 - 0 0.0759 - 2 0.038 - 7 0.152 - 12 0.0253 - 15 0.0127 - 21 0.0253 - 26 0.0253 - 30 0.0253 - 31 0.0127 - 33 0.0127 - 40 0.392 - 41 0.203 - - 8 20150 43 0 - 0 0.0496 - 1 0.000397 - 2 0.0359 - 3 0.00179 - 4 0.00794 - 5 0.000199 - 6 4.96e-05 - 7 0.34 - 8 0.00591 - 9 0.000397 - 10 9.93e-05 - 12 0.0205 - 13 0.00437 - 14 0.000794 - 15 0.00536 - 16 4.96e-05 - 19 0.00541 - 20 0.000149 - 21 0.0172 - 22 0.000844 - 23 4.96e-05 - 24 0.000248 - 25 4.96e-05 - 26 0.0461 - 28 0.00124 - 29 0.032 - 30 0.0103 - 31 0.0154 - 32 0.000943 - 33 0.0144 - 34 0.00983 - 35 0.00407 - 36 0.000248 - 37 0.00323 - 39 9.93e-05 - 40 0.175 - 41 0.158 - 42 0.0168 - 43 0.00159 - 44 0.00199 - 45 0.00149 - 46 0.00928 - 47 0.000596 - - 9 517 25 0 - 0 0.0406 - 2 0.0426 - 4 0.00387 - 7 0.453 - 8 0.0058 - 12 0.0174 - 13 0.00193 - 15 0.00193 - 17 0.00193 - 19 0.00387 - 21 0.0193 - 26 0.0754 - 29 0.00774 - 30 0.0155 - 31 0.0058 - 32 0.0058 - 33 0.0193 - 34 0.00387 - 40 0.128 - 41 0.112 - 42 0.0251 - 43 0.00193 - 44 0.00193 - 45 0.00193 - 46 0.00387 - - 10 469 25 0 - 0 0.0768 - 2 0.0171 - 4 0.0149 - 7 0.36 - 8 0.0149 - 12 0.0213 - 13 0.00426 - 14 0.00426 - 15 0.0064 - 19 0.0107 - 21 0.032 - 26 0.0597 - 29 0.064 - 30 0.0107 - 31 0.00426 - 32 0.00426 - 33 0.0235 - 35 0.00426 - 37 0.00213 - 39 0.00213 - 40 0.109 - 41 0.134 - 42 0.0149 - 44 0.00213 - 46 0.00213 - - 13 12677 39 0 - 0 0.0652 - 1 0.000473 - 2 0.0461 - 3 0.00252 - 4 0.00529 - 7 0.248 - 8 0.00718 - 9 0.000631 - 12 0.0242 - 13 0.00363 - 14 0.000631 - 15 0.00552 - 17 7.89e-05 - 19 0.00387 - 20 0.000158 - 21 0.0204 - 22 0.000868 - 24 0.000158 - 26 0.0311 - 28 0.00142 - 29 0.0506 - 30 0.00812 - 31 0.0177 - 32 0.00252 - 33 0.02 - 34 0.0165 - 35 0.00371 - 36 0.000473 - 37 0.00331 - 38 7.89e-05 - 39 0.000237 - 40 0.189 - 41 0.186 - 42 0.0185 - 43 0.00174 - 44 0.00268 - 45 0.00316 - 46 0.00702 - 47 0.0011 - - 14 957 30 0 - 0 0.0742 - 1 0.00104 - 2 0.0366 - 3 0.0115 - 4 0.00522 - 7 0.222 - 8 0.00522 - 12 0.023 - 13 0.00209 - 14 0.00104 - 15 0.00522 - 19 0.00313 - 21 0.023 - 24 0.00104 - 26 0.0303 - 29 0.0815 - 30 0.00104 - 31 0.0219 - 32 0.00418 - 33 0.0136 - 34 0.0167 - 35 0.00209 - 37 0.00104 - 40 0.181 - 41 0.203 - 42 0.0167 - 43 0.00104 - 44 0.00522 - 45 0.00418 - 46 0.00313 - - 15 3706 37 0 - 0 0.0815 - 2 0.0364 - 3 0.0054 - 4 0.00729 - 7 0.181 - 8 0.00648 - 9 0.00108 - 12 0.0324 - 13 0.00863 - 14 0.00054 - 15 0.00405 - 19 0.00189 - 20 0.00027 - 21 0.0216 - 22 0.00189 - 23 0.000809 - 24 0.00027 - 26 0.0321 - 28 0.000809 - 29 0.11 - 30 0.00756 - 31 0.0165 - 32 0.0027 - 33 0.0262 - 34 0.0132 - 35 0.0108 - 36 0.000809 - 37 0.00162 - 39 0.00054 - 40 0.174 - 41 0.186 - 42 0.0135 - 43 0.0027 - 44 0.0027 - 45 0.00513 - 46 0.00243 - 47 0.00027 - - 16 73 10 0 - 0 0.0685 - 2 0.0411 - 7 0.219 - 13 0.0137 - 15 0.0411 - 21 0.0548 - 26 0.0822 - 29 0.123 - 40 0.178 - 41 0.178 - - 18 2 2 0 - 2 0.5 - 21 0.5 - - 19 13 2 0 - 7 0.231 - 41 0.769 - - 20 2788 31 0 - 0 0.0897 - 2 0.0308 - 3 0.000717 - 4 0.00825 - 5 0.00108 - 7 0.303 - 8 0.00933 - 12 0.0233 - 13 0.00287 - 14 0.000717 - 15 0.00323 - 19 0.00143 - 21 0.0326 - 22 0.00179 - 24 0.00251 - 26 0.0976 - 28 0.00395 - 29 0.0334 - 30 0.00825 - 31 0.00753 - 32 0.000717 - 33 0.0197 - 34 0.00108 - 37 0.0043 - 39 0.000359 - 40 0.145 - 41 0.142 - 42 0.0169 - 44 0.00215 - 45 0.00251 - 46 0.00359 - - 21 101 20 0 - 0 0.0693 - 2 0.0396 - 4 0.0297 - 7 0.297 - 8 0.0297 - 12 0.0396 - 14 0.0099 - 15 0.0099 - 19 0.0099 - 21 0.0297 - 26 0.0396 - 29 0.0198 - 33 0.0396 - 35 0.0099 - 40 0.0693 - 41 0.208 - 42 0.0099 - 43 0.0099 - 44 0.0198 - 46 0.0099 - - 22 4 3 0 - 7 0.25 - 8 0.25 - 41 0.5 - - 28 6 5 0 - 7 0.167 - 15 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 29 9 3 0 - 0 0.111 - 7 0.667 - 40 0.222 - - 30 711 25 0 - 0 0.0394 - 1 0.00141 - 2 0.0338 - 4 0.00422 - 7 0.422 - 8 0.00844 - 9 0.00141 - 12 0.0197 - 13 0.00141 - 15 0.00281 - 19 0.00422 - 21 0.0127 - 26 0.0352 - 29 0.038 - 30 0.00985 - 31 0.0155 - 32 0.00422 - 33 0.0113 - 34 0.00844 - 35 0.00281 - 40 0.148 - 41 0.152 - 42 0.0197 - 45 0.00141 - 46 0.00281 - - 31 547 23 0 - 0 0.0622 - 2 0.0329 - 3 0.00183 - 4 0.00366 - 7 0.419 - 8 0.00183 - 12 0.0347 - 13 0.00183 - 14 0.00183 - 15 0.00183 - 19 0.00366 - 21 0.0165 - 26 0.0548 - 29 0.00548 - 30 0.00914 - 31 0.00548 - 33 0.0219 - 34 0.00366 - 35 0.00548 - 40 0.163 - 41 0.126 - 42 0.0201 - 44 0.00366 - - 34 4 4 0 - 2 0.25 - 7 0.25 - 40 0.25 - 44 0.25 - - 35 2 2 0 - 5 0.5 - 7 0.5 - - 40 6 5 0 - 0 0.167 - 40 0.333 - 42 0.167 - 43 0.167 - 47 0.167 - - 41 22 10 0 - 0 0.0455 - 2 0.0455 - 12 0.0455 - 26 0.0455 - 29 0.136 - 31 0.0455 - 34 0.0455 - 40 0.273 - 41 0.227 - 43 0.0909 - - 42 5 2 0 - 7 0.2 - 40 0.8 - - 43 16 9 0 - 0 0.25 - 7 0.125 - 8 0.0625 - 12 0.0625 - 29 0.0625 - 33 0.0625 - 35 0.0625 - 40 0.125 - 41 0.188 - - 44 11 2 0 - 7 0.182 - 43 0.818 - - 45 138 8 0 - 0 0.0145 - 7 0.188 - 8 0.00725 - 21 0.00725 - 26 0.029 - 40 0.116 - 41 0.0725 - 46 0.565 - - 46 169 21 0 - 0 0.0592 - 2 0.0296 - 4 0.0178 - 7 0.325 - 8 0.00592 - 12 0.0237 - 15 0.00592 - 19 0.0118 - 21 0.0118 - 26 0.0237 - 29 0.0355 - 30 0.0296 - 31 0.0118 - 33 0.0355 - 34 0.0473 - 37 0.00592 - 40 0.148 - 41 0.142 - 42 0.0178 - 44 0.00592 - 45 0.00592 - - 47 13978 39 0 - 0 0.0505 - 1 0.000215 - 2 0.0552 - 3 0.0124 - 4 0.0107 - 6 0.000215 - 7 0.343 - 8 0.0098 - 9 0.00114 - 12 0.0152 - 13 0.00501 - 14 0.00157 - 15 0.00558 - 19 0.00622 - 20 0.000215 - 21 0.022 - 22 0.00172 - 23 7.15e-05 - 24 0.000358 - 25 0.000143 - 26 0.0519 - 28 0.00143 - 29 0.028 - 30 0.00959 - 31 0.01 - 32 0.00272 - 33 0.0132 - 34 0.00637 - 35 0.00265 - 37 0.00286 - 38 7.15e-05 - 40 0.131 - 41 0.166 - 42 0.0189 - 43 0.00365 - 44 0.0015 - 45 0.0015 - 46 0.00651 - 47 0.00136 - - 48 2092 30 0 - 0 0.0344 - 2 0.0191 - 3 0.000956 - 4 0.0086 - 5 0.000478 - 7 0.497 - 8 0.0196 - 12 0.012 - 13 0.00287 - 14 0.000478 - 15 0.00191 - 19 0.00335 - 20 0.000478 - 21 0.00956 - 24 0.000478 - 26 0.0531 - 28 0.000478 - 29 0.0129 - 30 0.0139 - 31 0.0167 - 33 0.0163 - 34 0.00717 - 35 0.000956 - 37 0.00239 - 40 0.132 - 41 0.106 - 42 0.0201 - 44 0.000956 - 45 0.00143 - 46 0.00478 - - 49 17 5 0 - 7 0.529 - 21 0.0588 - 30 0.0588 - 40 0.176 - 41 0.176 - - 54 152 19 0 - 0 0.0658 - 2 0.0263 - 4 0.00658 - 7 0.289 - 12 0.0263 - 13 0.00658 - 14 0.00658 - 15 0.0132 - 19 0.00658 - 21 0.0132 - 26 0.0132 - 29 0.132 - 31 0.00658 - 33 0.0132 - 34 0.0461 - 35 0.0132 - 40 0.158 - 41 0.151 - 45 0.00658 - - 55 2721 34 0 - 0 0.0978 - 1 0.000368 - 2 0.0298 - 3 0.0011 - 4 0.00257 - 7 0.27 - 8 0.00551 - 12 0.0305 - 13 0.00147 - 14 0.000735 - 15 0.00368 - 19 0.000735 - 21 0.0243 - 22 0.0011 - 24 0.000368 - 26 0.0724 - 28 0.000368 - 29 0.0592 - 30 0.00515 - 31 0.00368 - 32 0.00147 - 33 0.0287 - 34 0.00331 - 35 0.00147 - 37 0.00184 - 39 0.000368 - 40 0.166 - 41 0.16 - 42 0.0103 - 43 0.00221 - 44 0.0011 - 45 0.00845 - 46 0.00257 - 47 0.0011 - - 57 1 1 0 - 31 1 - - 58 31 13 0 - 0 0.0968 - 2 0.0323 - 4 0.0323 - 7 0.194 - 13 0.0645 - 21 0.0323 - 26 0.0323 - 29 0.0323 - 31 0.0645 - 33 0.0645 - 40 0.194 - 41 0.129 - 46 0.0323 - - 60 950 25 0 - 0 0.0137 - 2 0.0179 - 3 0.0621 - 4 0.0189 - 7 0.479 - 8 0.0211 - 9 0.0211 - 12 0.00211 - 13 0.00105 - 15 0.00316 - 21 0.0189 - 22 0.00632 - 26 0.0653 - 29 0.0105 - 30 0.00211 - 31 0.0105 - 32 0.00526 - 33 0.00211 - 34 0.00211 - 40 0.132 - 41 0.0705 - 42 0.00947 - 43 0.00421 - 44 0.02 - 46 0.00105 - - 68 43 12 0 - 0 0.0465 - 2 0.0233 - 7 0.186 - 8 0.0233 - 12 0.0233 - 26 0.0233 - 29 0.0465 - 31 0.0465 - 36 0.0233 - 40 0.279 - 41 0.233 - 42 0.0465 - - 14 55733 44 33 - 0 0.0834 - 1 0.000718 - 2 0.044 - 3 0.0017 - 4 0.0176 - 5 8.97e-05 - 7 0.251 - 8 0.0175 - 9 0.001 - 10 3.59e-05 - 12 0.0299 - 13 0.00215 - 14 0.000807 - 15 0.0023 - 16 3.59e-05 - 17 5.38e-05 - 18 3.59e-05 - 19 0.00468 - 20 0.000161 - 21 0.0335 - 22 0.00206 - 23 0.000126 - 24 0.000646 - 25 1.79e-05 - 26 0.0419 - 28 0.00355 - 29 0.0527 - 30 0.0145 - 31 0.0224 - 32 0.0385 - 33 0.00206 - 34 0.0131 - 35 0.00736 - 36 0.000467 - 37 0.00224 - 39 0.000323 - 40 0.144 - 41 0.13 - 42 0.0201 - 43 0.00169 - 44 0.00452 - 45 0.00237 - 46 0.00397 - 47 0.00106 - - 2 903 28 0 - 0 0.0709 - 2 0.0244 - 4 0.00443 - 7 0.199 - 8 0.00443 - 9 0.00221 - 12 0.0321 - 19 0.00554 - 21 0.0377 - 22 0.00221 - 26 0.0255 - 28 0.00111 - 29 0.0532 - 30 0.0166 - 31 0.0233 - 32 0.041 - 33 0.00775 - 34 0.0177 - 35 0.00443 - 36 0.00111 - 37 0.00221 - 40 0.229 - 41 0.142 - 42 0.031 - 43 0.00554 - 45 0.00111 - 46 0.00554 - 47 0.00886 - - 3 4221 37 0 - 0 0.0315 - 2 0.0334 - 4 0.129 - 7 0.211 - 8 0.0339 - 9 0.00379 - 12 0.00782 - 13 0.00355 - 14 0.000237 - 15 0.00498 - 16 0.000237 - 19 0.00498 - 20 0.000237 - 21 0.0576 - 22 0.00426 - 23 0.000237 - 25 0.000237 - 26 0.0431 - 28 0.00118 - 29 0.0206 - 30 0.00805 - 31 0.0199 - 32 0.00877 - 33 0.00142 - 34 0.00332 - 35 0.00284 - 36 0.000474 - 37 0.00118 - 39 0.000711 - 40 0.154 - 41 0.137 - 42 0.0566 - 43 0.00237 - 44 0.00877 - 45 0.000474 - 46 0.00118 - 47 0.00166 - - 4 5302 37 0 - 0 0.151 - 1 0.00132 - 2 0.0228 - 3 0.000566 - 4 0.00622 - 7 0.247 - 8 0.0104 - 9 0.000377 - 12 0.0541 - 13 0.0017 - 14 0.00189 - 15 0.00302 - 17 0.000189 - 19 0.0164 - 20 0.000377 - 21 0.0353 - 22 0.00113 - 23 0.000189 - 24 0.00207 - 26 0.0313 - 28 0.00453 - 29 0.0621 - 30 0.00962 - 31 0.0226 - 32 0.0732 - 33 0.00245 - 34 0.0143 - 35 0.00905 - 36 0.000566 - 37 0.00226 - 40 0.101 - 41 0.0934 - 42 0.0106 - 43 0.000943 - 44 0.0017 - 45 0.00245 - 46 0.00264 - - 6 7 5 0 - 7 0.429 - 26 0.143 - 31 0.143 - 40 0.143 - 44 0.143 - - 8 12828 41 0 - 0 0.075 - 1 0.00039 - 2 0.0472 - 3 0.000468 - 4 0.00834 - 5 7.8e-05 - 7 0.251 - 8 0.0159 - 9 0.000312 - 12 0.0288 - 13 0.00195 - 14 0.00101 - 15 0.0014 - 16 7.8e-05 - 17 7.8e-05 - 18 7.8e-05 - 19 0.00366 - 21 0.0241 - 22 0.00148 - 23 7.8e-05 - 24 0.000156 - 26 0.0391 - 28 0.00226 - 29 0.0366 - 30 0.0132 - 31 0.0214 - 32 0.029 - 33 0.00187 - 34 0.0136 - 35 0.0067 - 36 0.000546 - 37 0.00249 - 39 0.000702 - 40 0.18 - 41 0.153 - 42 0.0216 - 43 0.00164 - 44 0.00639 - 45 0.00226 - 46 0.00514 - 47 0.00156 - - 9 459 25 0 - 0 0.0566 - 1 0.00218 - 2 0.0501 - 4 0.00436 - 7 0.322 - 8 0.00871 - 12 0.0392 - 13 0.00654 - 15 0.00218 - 19 0.00654 - 21 0.0349 - 26 0.0588 - 28 0.00436 - 29 0.0174 - 30 0.0174 - 31 0.0109 - 32 0.0196 - 34 0.0131 - 35 0.00654 - 37 0.00436 - 40 0.15 - 41 0.146 - 42 0.0131 - 44 0.00218 - 46 0.00218 - - 10 269 24 0 - 0 0.126 - 2 0.0112 - 4 0.00372 - 7 0.216 - 8 0.0149 - 12 0.0595 - 13 0.00372 - 19 0.0186 - 21 0.0297 - 24 0.00372 - 26 0.0335 - 28 0.00372 - 29 0.0335 - 30 0.0297 - 31 0.0112 - 32 0.1 - 33 0.00743 - 34 0.00372 - 35 0.00372 - 40 0.0818 - 41 0.167 - 42 0.0186 - 43 0.00372 - 45 0.0149 - - 13 9556 39 0 - 0 0.0876 - 1 0.00115 - 2 0.0643 - 3 0.000837 - 4 0.0068 - 5 0.000105 - 7 0.187 - 8 0.0139 - 9 0.000733 - 12 0.0274 - 13 0.00199 - 14 0.000105 - 15 0.00199 - 18 0.000105 - 19 0.00199 - 20 0.000314 - 21 0.0331 - 22 0.00167 - 23 0.000105 - 24 0.000523 - 26 0.0328 - 28 0.00262 - 29 0.0671 - 30 0.013 - 31 0.0202 - 32 0.0419 - 33 0.0023 - 34 0.0142 - 35 0.0045 - 36 0.000209 - 37 0.00188 - 40 0.173 - 41 0.167 - 42 0.0168 - 43 0.00188 - 44 0.0023 - 45 0.0023 - 46 0.00366 - 47 0.000942 - - 14 538 26 0 - 0 0.0874 - 2 0.0502 - 4 0.00929 - 7 0.18 - 8 0.00929 - 10 0.00186 - 12 0.0297 - 13 0.00558 - 15 0.00186 - 21 0.0335 - 26 0.0372 - 28 0.00186 - 29 0.0967 - 30 0.00558 - 31 0.00929 - 32 0.0409 - 33 0.00372 - 34 0.00929 - 35 0.00558 - 40 0.19 - 41 0.139 - 42 0.0353 - 44 0.00186 - 45 0.00743 - 46 0.00558 - 47 0.00186 - - 15 2001 34 0 - 0 0.125 - 1 0.001 - 2 0.037 - 3 0.006 - 4 0.005 - 7 0.147 - 8 0.013 - 12 0.0335 - 13 0.0005 - 14 0.0015 - 15 0.0045 - 19 0.003 - 21 0.026 - 22 0.003 - 23 0.0005 - 26 0.039 - 28 0.0025 - 29 0.141 - 30 0.0155 - 31 0.015 - 32 0.0465 - 33 0.004 - 34 0.0145 - 35 0.008 - 37 0.0025 - 39 0.0005 - 40 0.14 - 41 0.133 - 42 0.0145 - 43 0.0025 - 44 0.0045 - 45 0.004 - 46 0.003 - 47 0.0015 - - 16 26 9 0 - 0 0.115 - 7 0.0769 - 26 0.115 - 29 0.269 - 32 0.0385 - 40 0.231 - 41 0.0769 - 42 0.0385 - 44 0.0385 - - 19 6 5 0 - 12 0.167 - 21 0.333 - 29 0.167 - 35 0.167 - 40 0.167 - - 20 1519 34 0 - 0 0.107 - 1 0.000658 - 2 0.0434 - 3 0.00132 - 4 0.0105 - 5 0.000658 - 7 0.244 - 8 0.00658 - 9 0.00132 - 12 0.0217 - 13 0.00263 - 14 0.00197 - 15 0.000658 - 19 0.00132 - 21 0.0421 - 22 0.00263 - 23 0.000658 - 24 0.00329 - 26 0.0737 - 28 0.0118 - 29 0.029 - 30 0.00592 - 31 0.0151 - 32 0.0263 - 33 0.00197 - 35 0.00263 - 37 0.00395 - 39 0.000658 - 40 0.185 - 41 0.132 - 42 0.0132 - 43 0.000658 - 45 0.00395 - 46 0.00197 - - 21 38 15 0 - 0 0.0789 - 2 0.0263 - 7 0.316 - 12 0.0263 - 21 0.0263 - 26 0.105 - 29 0.0263 - 30 0.0526 - 31 0.0526 - 32 0.0526 - 35 0.0526 - 40 0.0263 - 41 0.105 - 42 0.0263 - 46 0.0263 - - 23 2 1 0 - 21 1 - - 28 16 6 0 - 7 0.562 - 12 0.125 - 26 0.0625 - 28 0.125 - 32 0.0625 - 41 0.0625 - - 29 9 5 0 - 7 0.444 - 12 0.222 - 15 0.111 - 21 0.111 - 40 0.111 - - 30 480 24 0 - 0 0.0562 - 2 0.0542 - 4 0.00417 - 7 0.296 - 8 0.0104 - 12 0.0229 - 13 0.00208 - 15 0.00417 - 19 0.00417 - 21 0.0208 - 22 0.00208 - 26 0.0312 - 29 0.0521 - 30 0.00625 - 31 0.0146 - 32 0.0229 - 33 0.00208 - 34 0.0104 - 35 0.00417 - 39 0.00208 - 40 0.2 - 41 0.169 - 42 0.00625 - 46 0.00208 - - 31 394 24 0 - 0 0.0558 - 2 0.0508 - 4 0.00761 - 5 0.00254 - 7 0.289 - 8 0.0228 - 12 0.0431 - 19 0.00761 - 21 0.0305 - 26 0.0431 - 29 0.0203 - 30 0.0178 - 31 0.0152 - 32 0.0279 - 33 0.00254 - 34 0.0178 - 35 0.00761 - 40 0.15 - 41 0.142 - 42 0.0127 - 43 0.00254 - 44 0.0203 - 45 0.00508 - 46 0.00508 - - 34 3 2 0 - 7 0.667 - 44 0.333 - - 41 4 4 0 - 7 0.25 - 12 0.25 - 26 0.25 - 41 0.25 - - 42 3 3 0 - 7 0.333 - 40 0.333 - 46 0.333 - - 43 15 7 0 - 0 0.0667 - 2 0.133 - 7 0.0667 - 12 0.133 - 21 0.0667 - 40 0.133 - 41 0.4 - - 44 4 1 0 - 43 1 - - 45 61 6 0 - 0 0.0492 - 7 0.115 - 26 0.0328 - 40 0.148 - 41 0.0984 - 46 0.557 - - 46 98 17 0 - 0 0.0408 - 2 0.051 - 4 0.0102 - 7 0.214 - 8 0.0306 - 21 0.0102 - 26 0.0918 - 29 0.0102 - 30 0.0102 - 31 0.0306 - 32 0.0306 - 34 0.0612 - 35 0.0102 - 36 0.0102 - 40 0.163 - 41 0.173 - 42 0.051 - - 47 13576 41 0 - 0 0.0748 - 1 0.000737 - 2 0.0447 - 3 0.00464 - 4 0.00722 - 5 7.37e-05 - 7 0.329 - 8 0.018 - 9 0.00147 - 10 7.37e-05 - 12 0.0322 - 13 0.0025 - 14 0.000958 - 15 0.00214 - 17 7.37e-05 - 19 0.00412 - 20 0.000221 - 21 0.0351 - 22 0.00258 - 23 7.37e-05 - 24 0.000737 - 26 0.0542 - 28 0.00567 - 29 0.0577 - 30 0.022 - 31 0.0306 - 32 0.0463 - 33 0.00147 - 34 0.0171 - 35 0.0127 - 36 0.000737 - 37 0.00302 - 39 0.000221 - 40 0.0806 - 41 0.0854 - 42 0.0123 - 43 0.00125 - 44 0.00133 - 45 0.00243 - 46 0.00258 - 47 0.00081 - - 48 813 27 0 - 0 0.0652 - 1 0.00123 - 2 0.0271 - 4 0.00738 - 7 0.26 - 8 0.0726 - 9 0.00123 - 12 0.0123 - 15 0.00123 - 19 0.00369 - 21 0.0308 - 26 0.0308 - 28 0.00369 - 29 0.0246 - 30 0.0271 - 31 0.0308 - 32 0.0185 - 33 0.00123 - 34 0.00984 - 35 0.00615 - 40 0.194 - 41 0.143 - 42 0.016 - 43 0.00123 - 44 0.00123 - 45 0.00123 - 46 0.00861 - - 54 11 8 0 - 2 0.0909 - 7 0.0909 - 21 0.0909 - 26 0.0909 - 29 0.182 - 32 0.273 - 34 0.0909 - 40 0.0909 - - 55 1044 28 0 - 0 0.136 - 1 0.000958 - 2 0.0345 - 3 0.000958 - 4 0.00287 - 7 0.221 - 8 0.0125 - 12 0.0354 - 13 0.00192 - 15 0.000958 - 21 0.0172 - 22 0.00287 - 24 0.00192 - 26 0.0489 - 28 0.00479 - 29 0.0766 - 30 0.00958 - 31 0.00287 - 32 0.0326 - 33 0.00287 - 34 0.000958 - 35 0.000958 - 37 0.00192 - 40 0.199 - 41 0.126 - 42 0.0153 - 45 0.0067 - 46 0.000958 - - 58 20 11 0 - 0 0.1 - 1 0.05 - 2 0.1 - 7 0.15 - 8 0.05 - 21 0.05 - 31 0.05 - 40 0.2 - 41 0.15 - 42 0.05 - 44 0.05 - - 60 1381 27 0 - 0 0.034 - 2 0.021 - 4 0.0587 - 7 0.254 - 8 0.0391 - 9 0.00145 - 12 0.0101 - 13 0.00217 - 14 0.000724 - 15 0.00579 - 19 0.00145 - 21 0.0434 - 22 0.00362 - 26 0.0268 - 29 0.0224 - 30 0.0101 - 31 0.0203 - 32 0.00507 - 33 0.000724 - 34 0.00434 - 35 0.00217 - 40 0.177 - 41 0.159 - 42 0.0485 - 43 0.00362 - 44 0.0434 - 46 0.000724 - - 68 113 16 0 - 0 0.0619 - 2 0.0265 - 4 0.00885 - 7 0.142 - 8 0.00885 - 12 0.0177 - 21 0.0531 - 26 0.00885 - 29 0.0442 - 31 0.00885 - 32 0.0177 - 33 0.00885 - 34 0.0354 - 40 0.363 - 41 0.177 - 42 0.0177 - - 15 38960 40 26 - 0 0.0826 - 1 7.7e-05 - 2 0.0494 - 3 0.039 - 4 0.00503 - 5 5.13e-05 - 6 2.57e-05 - 7 0.091 - 8 0.00395 - 9 0.000231 - 12 0.0263 - 13 0.00357 - 14 0.00113 - 15 0.00572 - 17 2.57e-05 - 18 0.000642 - 19 0.00167 - 20 0.000282 - 21 0.0216 - 22 0.000796 - 24 7.7e-05 - 26 0.0177 - 28 0.0021 - 29 0.128 - 30 0.00359 - 31 0.00182 - 32 0.00347 - 33 0.0401 - 34 0.00228 - 35 0.00139 - 37 0.00126 - 39 0.000616 - 40 0.125 - 41 0.3 - 42 0.016 - 43 0.00726 - 44 0.00667 - 45 0.00195 - 46 0.00385 - 47 0.00316 - - 2 1047 29 0 - 0 0.0965 - 2 0.0506 - 4 0.00573 - 7 0.085 - 8 0.00669 - 12 0.022 - 13 0.00382 - 14 0.000955 - 15 0.00287 - 18 0.000955 - 19 0.000955 - 21 0.0172 - 26 0.0086 - 28 0.00191 - 29 0.11 - 30 0.00382 - 32 0.0181 - 33 0.0162 - 34 0.00573 - 35 0.000955 - 37 0.000955 - 40 0.226 - 41 0.29 - 42 0.0162 - 43 0.000955 - 44 0.00191 - 45 0.000955 - 46 0.00287 - 47 0.000955 - - 3 26 9 0 - 2 0.0385 - 3 0.0385 - 7 0.154 - 12 0.0385 - 15 0.0385 - 29 0.192 - 40 0.0769 - 41 0.385 - 42 0.0385 - - 4 2090 35 0 - 0 0.116 - 2 0.0656 - 3 0.0172 - 4 0.0067 - 7 0.201 - 8 0.0067 - 9 0.000957 - 12 0.0536 - 13 0.00335 - 14 0.00431 - 15 0.011 - 19 0.00239 - 20 0.00144 - 21 0.0292 - 22 0.00191 - 24 0.000478 - 26 0.0316 - 28 0.00574 - 29 0.0914 - 30 0.00526 - 31 0.00526 - 32 0.00526 - 33 0.0421 - 34 0.00431 - 35 0.00335 - 37 0.000957 - 39 0.000478 - 40 0.106 - 41 0.15 - 42 0.011 - 43 0.00144 - 44 0.00383 - 45 0.00335 - 46 0.00383 - 47 0.00287 - - 6 28 8 0 - 0 0.0714 - 2 0.179 - 7 0.0357 - 29 0.107 - 40 0.0714 - 41 0.464 - 42 0.0357 - 44 0.0357 - - 7 37 9 0 - 2 0.0811 - 3 0.0811 - 12 0.027 - 26 0.027 - 29 0.0541 - 40 0.378 - 41 0.27 - 42 0.027 - 46 0.0541 - - 8 578 29 0 - 0 0.045 - 2 0.0346 - 3 0.0225 - 4 0.00865 - 7 0.133 - 8 0.00346 - 9 0.00173 - 12 0.026 - 13 0.00173 - 14 0.00346 - 15 0.00173 - 19 0.00519 - 21 0.00519 - 26 0.0242 - 28 0.00346 - 29 0.026 - 30 0.00692 - 31 0.00173 - 32 0.00692 - 33 0.0173 - 34 0.0104 - 35 0.00346 - 37 0.00519 - 40 0.253 - 41 0.325 - 42 0.0138 - 44 0.00346 - 46 0.00173 - 47 0.00519 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 164 20 0 - 0 0.0793 - 2 0.0244 - 3 0.0122 - 7 0.0976 - 12 0.0122 - 13 0.0122 - 15 0.0122 - 21 0.0183 - 26 0.0122 - 29 0.122 - 30 0.0061 - 31 0.0061 - 33 0.0427 - 34 0.0061 - 37 0.0122 - 40 0.122 - 41 0.317 - 42 0.0427 - 44 0.0305 - 46 0.0122 - - 15 19923 36 0 - 0 0.0786 - 2 0.0509 - 3 0.00181 - 4 0.00467 - 7 0.0876 - 8 0.00301 - 9 0.000151 - 12 0.0213 - 13 0.00221 - 14 0.000803 - 15 0.00427 - 18 0.000452 - 19 0.00136 - 20 0.000201 - 21 0.0202 - 22 0.000803 - 24 5.02e-05 - 26 0.013 - 28 0.00176 - 29 0.151 - 30 0.00351 - 31 0.00131 - 32 0.00296 - 33 0.0504 - 34 0.00171 - 35 0.00161 - 37 0.000653 - 39 0.000452 - 40 0.113 - 41 0.34 - 42 0.0163 - 43 0.00407 - 44 0.0102 - 45 0.00216 - 46 0.00371 - 47 0.00386 - - 16 534 23 0 - 0 0.0337 - 2 0.073 - 4 0.00375 - 7 0.0974 - 8 0.00187 - 12 0.015 - 13 0.00375 - 15 0.00187 - 21 0.00749 - 26 0.0169 - 28 0.00187 - 29 0.152 - 30 0.00562 - 32 0.00375 - 33 0.0169 - 34 0.00187 - 35 0.00375 - 39 0.00187 - 40 0.204 - 41 0.307 - 42 0.0393 - 44 0.00187 - 47 0.00562 - - 20 11 8 0 - 0 0.0909 - 2 0.0909 - 7 0.182 - 26 0.0909 - 31 0.0909 - 40 0.273 - 41 0.0909 - 44 0.0909 - - 21 37 10 0 - 0 0.0541 - 2 0.027 - 7 0.108 - 13 0.0541 - 15 0.0541 - 29 0.027 - 33 0.027 - 40 0.243 - 41 0.378 - 42 0.027 - - 30 7 3 0 - 0 0.143 - 40 0.571 - 41 0.286 - - 31 8 7 0 - 2 0.125 - 7 0.25 - 12 0.125 - 33 0.125 - 34 0.125 - 41 0.125 - 42 0.125 - - 40 23 10 0 - 2 0.13 - 6 0.0435 - 7 0.13 - 29 0.087 - 33 0.0435 - 40 0.0435 - 41 0.391 - 43 0.0435 - 44 0.0435 - 47 0.0435 - - 41 51 7 0 - 2 0.0392 - 3 0.098 - 7 0.0196 - 29 0.0588 - 40 0.275 - 41 0.471 - 42 0.0392 - - 43 10 4 0 - 0 0.3 - 2 0.2 - 29 0.1 - 41 0.4 - - 44 8 2 0 - 41 0.125 - 43 0.875 - - 45 19 5 0 - 3 0.0526 - 7 0.211 - 40 0.105 - 41 0.211 - 46 0.421 - - 46 22 9 0 - 0 0.0909 - 7 0.0455 - 26 0.0455 - 29 0.0455 - 33 0.0455 - 40 0.0909 - 41 0.545 - 42 0.0455 - 46 0.0455 - - 47 14081 39 0 - 0 0.0871 - 1 0.000213 - 2 0.0447 - 3 0.101 - 4 0.0054 - 5 0.000142 - 7 0.076 - 8 0.0049 - 9 0.000142 - 12 0.0304 - 13 0.0054 - 14 0.00107 - 15 0.00746 - 17 7.1e-05 - 18 0.00107 - 19 0.00206 - 20 0.000284 - 21 0.0248 - 22 0.000781 - 24 7.1e-05 - 26 0.0229 - 28 0.00213 - 29 0.108 - 30 0.0032 - 31 0.00206 - 32 0.00284 - 33 0.0295 - 34 0.0022 - 35 0.00071 - 37 0.00199 - 39 0.000923 - 40 0.127 - 41 0.266 - 42 0.0149 - 43 0.0135 - 44 0.00241 - 45 0.00178 - 46 0.00355 - 47 0.0022 - - 48 43 13 0 - 0 0.14 - 2 0.0698 - 3 0.0233 - 7 0.14 - 8 0.0233 - 12 0.0698 - 26 0.0465 - 29 0.0698 - 31 0.0233 - 33 0.0233 - 40 0.186 - 41 0.163 - 42 0.0233 - - 54 20 6 0 - 0 0.05 - 7 0.3 - 29 0.1 - 33 0.05 - 40 0.3 - 41 0.2 - - 55 144 17 0 - 0 0.0347 - 2 0.0347 - 3 0.0139 - 7 0.236 - 12 0.0208 - 13 0.00694 - 21 0.0139 - 26 0.0208 - 29 0.181 - 30 0.0139 - 33 0.0347 - 40 0.111 - 41 0.25 - 42 0.00694 - 44 0.00694 - 46 0.00694 - 47 0.00694 - - 58 27 6 0 - 7 0.037 - 12 0.037 - 31 0.037 - 33 0.0741 - 40 0.593 - 41 0.222 - - 60 6 5 0 - 0 0.167 - 3 0.167 - 7 0.333 - 9 0.167 - 14 0.167 - - 16 1553 34 14 - 0 0.122 - 2 0.0599 - 3 0.00129 - 4 0.00515 - 5 0.000644 - 7 0.109 - 8 0.00515 - 9 0.000644 - 12 0.0399 - 13 0.00515 - 14 0.00193 - 15 0.00451 - 19 0.00258 - 20 0.000644 - 21 0.0258 - 22 0.000644 - 26 0.0232 - 28 0.000644 - 29 0.111 - 30 0.0058 - 31 0.00386 - 32 0.0367 - 33 0.0155 - 34 0.000644 - 35 0.0167 - 36 0.000644 - 40 0.127 - 41 0.214 - 42 0.0328 - 43 0.00386 - 44 0.00386 - 45 0.00193 - 46 0.00386 - 47 0.0135 - - 2 42 15 0 - 0 0.0714 - 2 0.0238 - 7 0.0952 - 19 0.0238 - 21 0.0714 - 28 0.0238 - 29 0.0238 - 31 0.0238 - 33 0.0238 - 35 0.0238 - 40 0.143 - 41 0.31 - 42 0.0714 - 45 0.0238 - 47 0.0476 - - 3 16 9 0 - 0 0.125 - 2 0.125 - 7 0.25 - 8 0.0625 - 12 0.0625 - 30 0.0625 - 31 0.0625 - 35 0.0625 - 41 0.188 - - 4 295 23 0 - 0 0.183 - 2 0.0542 - 4 0.00339 - 5 0.00339 - 7 0.0881 - 8 0.0136 - 12 0.0746 - 13 0.0102 - 19 0.00339 - 20 0.00339 - 21 0.0475 - 26 0.0373 - 29 0.119 - 30 0.0102 - 31 0.00339 - 32 0.0847 - 33 0.00339 - 35 0.0102 - 40 0.0915 - 41 0.132 - 42 0.0169 - 43 0.00339 - 45 0.00339 - - 8 87 15 0 - 0 0.207 - 2 0.023 - 7 0.115 - 12 0.0345 - 21 0.0115 - 26 0.023 - 29 0.046 - 31 0.0115 - 32 0.0805 - 34 0.0115 - 35 0.069 - 36 0.0115 - 40 0.149 - 41 0.161 - 42 0.046 - - 13 6 5 0 - 0 0.167 - 12 0.167 - 26 0.167 - 30 0.167 - 41 0.333 - - 15 766 24 0 - 0 0.0888 - 2 0.0614 - 3 0.00261 - 4 0.00522 - 7 0.101 - 8 0.00131 - 12 0.017 - 13 0.00392 - 15 0.00261 - 21 0.0157 - 22 0.00131 - 26 0.0144 - 29 0.144 - 30 0.00131 - 32 0.00653 - 33 0.0261 - 35 0.00653 - 40 0.148 - 41 0.273 - 42 0.0405 - 43 0.00392 - 44 0.00783 - 46 0.00522 - 47 0.0235 - - 16 35 13 0 - 0 0.0857 - 2 0.0286 - 4 0.0286 - 7 0.0857 - 12 0.0571 - 21 0.0571 - 26 0.0286 - 29 0.0286 - 32 0.0286 - 33 0.0286 - 40 0.0857 - 41 0.343 - 42 0.114 - - 21 5 4 0 - 0 0.2 - 2 0.2 - 7 0.2 - 42 0.4 - - 30 2 2 0 - 2 0.5 - 32 0.5 - - 45 1 1 0 - 46 1 - - 47 257 24 0 - 0 0.128 - 2 0.0778 - 4 0.00389 - 7 0.152 - 8 0.00778 - 9 0.00389 - 12 0.0623 - 13 0.00778 - 14 0.0117 - 15 0.0195 - 19 0.00778 - 21 0.0272 - 26 0.0389 - 29 0.0739 - 30 0.00778 - 31 0.00778 - 32 0.0661 - 35 0.0311 - 40 0.105 - 41 0.136 - 42 0.00778 - 43 0.00778 - 45 0.00389 - 46 0.00389 - - 48 8 7 0 - 7 0.125 - 12 0.125 - 32 0.125 - 33 0.125 - 40 0.125 - 41 0.25 - 47 0.125 - - 55 10 7 0 - 4 0.1 - 7 0.2 - 12 0.1 - 21 0.1 - 29 0.1 - 40 0.3 - 41 0.1 - - 60 11 6 0 - 0 0.273 - 7 0.0909 - 30 0.0909 - 35 0.182 - 40 0.182 - 41 0.182 - - 17 3 1 0 - 4 1 - - 18 8656 34 12 - 0 0.00508 - 2 0.0067 - 3 0.0261 - 4 0.000231 - 6 0.000231 - 7 0.00208 - 8 0.207 - 9 0.00173 - 10 0.026 - 12 0.00104 - 13 0.417 - 14 0.13 - 15 0.104 - 16 0.00381 - 19 0.000116 - 21 0.00555 - 22 0.000347 - 23 0.00208 - 26 0.000231 - 28 0.000347 - 29 0.00439 - 30 0.0117 - 31 0.00739 - 32 0.000462 - 33 0.00104 - 38 0.000578 - 39 0.0101 - 40 0.00485 - 41 0.00601 - 42 0.000231 - 43 0.000924 - 44 0.000231 - 45 0.0117 - 46 0.000231 - - 3 25 6 0 - 3 0.04 - 8 0.36 - 13 0.36 - 14 0.12 - 40 0.08 - 41 0.04 - - 6 2 2 0 - 13 0.5 - 46 0.5 - - 8 12 4 0 - 13 0.417 - 14 0.417 - 15 0.0833 - 29 0.0833 - - 13 2900 22 0 - 2 0.00103 - 3 0.0238 - 6 0.00069 - 7 0.00103 - 8 0.236 - 9 0.00172 - 10 0.04 - 13 0.477 - 14 0.132 - 15 0.0441 - 16 0.00103 - 21 0.00483 - 22 0.000345 - 23 0.0031 - 30 0.00793 - 31 0.00655 - 39 0.00931 - 40 0.00207 - 41 0.000345 - 42 0.000345 - 43 0.00069 - 45 0.00724 - - 14 544 15 0 - 2 0.00368 - 3 0.011 - 7 0.00184 - 8 0.0974 - 9 0.00184 - 10 0.00184 - 13 0.417 - 14 0.415 - 15 0.0129 - 23 0.00184 - 26 0.00368 - 30 0.0147 - 31 0.00735 - 40 0.00184 - 45 0.00735 - - 15 5059 31 0 - 0 0.0083 - 2 0.0103 - 3 0.0289 - 4 0.000395 - 7 0.00277 - 8 0.205 - 9 0.00178 - 10 0.0213 - 12 0.00178 - 13 0.381 - 14 0.0996 - 15 0.147 - 16 0.00534 - 19 0.000198 - 21 0.00672 - 22 0.000395 - 23 0.00158 - 29 0.00731 - 30 0.0134 - 31 0.00791 - 32 0.000791 - 33 0.00178 - 38 0.000988 - 39 0.0117 - 40 0.00633 - 41 0.00988 - 42 0.000198 - 43 0.00119 - 44 0.000395 - 45 0.015 - 46 0.000198 - - 16 66 9 0 - 0 0.0152 - 3 0.0303 - 8 0.121 - 13 0.545 - 14 0.0455 - 15 0.167 - 16 0.0455 - 30 0.0152 - 31 0.0152 - - 21 3 2 0 - 13 0.667 - 40 0.333 - - 28 1 1 0 - 0 1 - - 47 4 2 0 - 15 0.25 - 28 0.75 - - 55 3 2 0 - 2 0.333 - 13 0.667 - - 57 19 6 0 - 3 0.0526 - 8 0.0526 - 13 0.421 - 15 0.368 - 30 0.0526 - 39 0.0526 - - 19 17366 41 5 - 0 0.301 - 1 0.000173 - 2 0.0076 - 3 0.000864 - 4 0.012 - 5 0.000115 - 6 5.76e-05 - 7 0.0348 - 8 0.00749 - 9 0.00132 - 10 0.000115 - 12 0.124 - 13 0.00202 - 14 0.000749 - 15 0.000576 - 17 0.000115 - 18 0.000633 - 19 0.00161 - 20 0.000115 - 21 0.0537 - 22 0.00155 - 23 0.000173 - 24 0.00455 - 26 0.0163 - 28 0.0117 - 29 0.166 - 30 0.00242 - 31 0.0019 - 32 0.0774 - 33 0.106 - 34 0.000288 - 35 0.000633 - 37 0.00121 - 39 0.000288 - 40 0.0313 - 41 0.021 - 42 0.00334 - 43 0.000461 - 44 0.000921 - 45 0.00346 - 46 0.000461 - - 4 12 6 0 - 0 0.417 - 7 0.0833 - 12 0.25 - 29 0.0833 - 33 0.0833 - 40 0.0833 - - 13 2 2 0 - 26 0.5 - 40 0.5 - - 15 4 4 0 - 0 0.25 - 29 0.25 - 33 0.25 - 37 0.25 - - 21 3 2 0 - 12 0.667 - 41 0.333 - - 44 2 1 0 - 43 1 - - 20 34 11 0 - 0 0.0882 - 1 0.0588 - 13 0.0882 - 15 0.0294 - 21 0.0294 - 30 0.235 - 39 0.324 - 40 0.0294 - 41 0.0588 - 42 0.0294 - 43 0.0294 - - 21 674 33 12 - 0 0.049 - 2 0.0208 - 3 0.0089 - 4 0.0831 - 6 0.00148 - 7 0.2 - 8 0.0386 - 9 0.0134 - 12 0.0119 - 13 0.0326 - 14 0.0208 - 15 0.0208 - 19 0.0163 - 20 0.00148 - 21 0.0371 - 22 0.0089 - 26 0.0252 - 28 0.00297 - 29 0.00445 - 30 0.00593 - 31 0.00742 - 32 0.00445 - 33 0.0104 - 34 0.00148 - 37 0.00148 - 39 0.0089 - 40 0.168 - 41 0.169 - 42 0.0178 - 43 0.00148 - 44 0.00297 - 46 0.00148 - 47 0.00148 - - 2 50 13 0 - 3 0.02 - 4 0.38 - 8 0.02 - 9 0.02 - 13 0.14 - 14 0.08 - 15 0.1 - 21 0.06 - 28 0.02 - 39 0.02 - 40 0.06 - 41 0.06 - 42 0.02 - - 3 49 11 0 - 2 0.0408 - 3 0.0204 - 7 0.0612 - 8 0.0204 - 13 0.0816 - 29 0.0204 - 37 0.0204 - 40 0.571 - 41 0.122 - 42 0.0204 - 47 0.0204 - - 4 39 12 0 - 0 0.0256 - 4 0.0256 - 6 0.0256 - 7 0.0513 - 8 0.359 - 9 0.179 - 21 0.0256 - 22 0.154 - 30 0.0256 - 33 0.0256 - 40 0.0769 - 41 0.0256 - - 13 84 16 0 - 0 0.0714 - 2 0.0476 - 7 0.202 - 12 0.0119 - 13 0.0119 - 14 0.0119 - 19 0.0238 - 21 0.0238 - 26 0.0476 - 31 0.0119 - 33 0.0357 - 40 0.19 - 41 0.226 - 42 0.0595 - 44 0.0119 - 46 0.0119 - - 14 20 6 0 - 7 0.1 - 15 0.05 - 32 0.05 - 40 0.45 - 41 0.3 - 42 0.05 - - 15 7 5 0 - 2 0.143 - 29 0.143 - 40 0.143 - 41 0.429 - 42 0.143 - - 21 46 11 0 - 4 0.0435 - 7 0.674 - 8 0.0217 - 15 0.0217 - 19 0.0435 - 21 0.0435 - 26 0.0217 - 30 0.0217 - 31 0.0217 - 40 0.0652 - 41 0.0217 - - 41 60 12 0 - 3 0.05 - 4 0.333 - 7 0.0167 - 8 0.1 - 9 0.0167 - 13 0.117 - 14 0.117 - 15 0.0833 - 20 0.0167 - 21 0.1 - 33 0.0167 - 41 0.0333 - - 42 7 2 0 - 4 0.857 - 15 0.143 - - 47 289 26 0 - 0 0.0865 - 2 0.0242 - 3 0.00346 - 4 0.0242 - 7 0.263 - 8 0.0104 - 12 0.0242 - 13 0.0104 - 14 0.00346 - 15 0.00346 - 19 0.0242 - 21 0.0138 - 26 0.0346 - 28 0.00346 - 29 0.00346 - 30 0.00692 - 31 0.0104 - 32 0.00692 - 33 0.00692 - 34 0.00346 - 39 0.0173 - 40 0.163 - 41 0.235 - 42 0.0104 - 43 0.00346 - 44 0.00346 - - 49 2 2 0 - 4 0.5 - 14 0.5 - - 55 10 4 0 - 21 0.5 - 26 0.1 - 40 0.1 - 41 0.3 - - 22 48 11 2 - 2 0.0625 - 7 0.521 - 8 0.0417 - 12 0.0208 - 21 0.0208 - 29 0.0208 - 31 0.0208 - 37 0.0208 - 40 0.0833 - 41 0.167 - 42 0.0208 - - 4 2 2 0 - 8 0.5 - 40 0.5 - - 14 2 2 0 - 29 0.5 - 40 0.5 - - 23 19 8 1 - 7 0.579 - 8 0.0526 - 19 0.0526 - 21 0.105 - 29 0.0526 - 31 0.0526 - 40 0.0526 - 41 0.0526 - - 4 4 4 0 - 8 0.25 - 31 0.25 - 40 0.25 - 41 0.25 - - 24 8 3 0 - 7 0.5 - 40 0.25 - 41 0.25 - - 25 13 2 0 - 3 0.0769 - 42 0.923 - - 26 52 5 0 - 3 0.808 - 14 0.0192 - 15 0.0192 - 28 0.0385 - 39 0.115 - - 27 6 4 0 - 40 0.333 - 41 0.167 - 42 0.333 - 46 0.167 - - 28 92 16 2 - 0 0.0109 - 2 0.0326 - 4 0.087 - 7 0.424 - 8 0.0326 - 13 0.0109 - 15 0.0109 - 21 0.0435 - 26 0.0761 - 29 0.0217 - 40 0.0978 - 41 0.087 - 42 0.0217 - 45 0.0109 - 46 0.0217 - 47 0.0109 - - 13 5 4 0 - 7 0.2 - 26 0.4 - 29 0.2 - 45 0.2 - - 21 3 3 0 - 4 0.333 - 7 0.333 - 47 0.333 - - 29 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 29 0.167 - 33 0.167 - - 30 261 26 5 - 0 0.069 - 2 0.0307 - 3 0.00383 - 4 0.00766 - 7 0.429 - 8 0.0192 - 12 0.0268 - 13 0.00383 - 14 0.00383 - 19 0.00383 - 21 0.0307 - 22 0.00383 - 26 0.0307 - 29 0.023 - 30 0.00383 - 31 0.00766 - 32 0.00383 - 33 0.0153 - 37 0.00383 - 39 0.0115 - 40 0.138 - 41 0.0958 - 42 0.0153 - 43 0.00383 - 44 0.00383 - 46 0.0115 - - 2 9 3 0 - 7 0.778 - 21 0.111 - 40 0.111 - - 4 47 12 0 - 0 0.191 - 2 0.0213 - 3 0.0213 - 7 0.277 - 12 0.106 - 21 0.0426 - 29 0.0426 - 33 0.0851 - 39 0.0638 - 40 0.0426 - 41 0.0638 - 42 0.0426 - - 8 17 8 0 - 7 0.353 - 12 0.0588 - 21 0.0588 - 26 0.0588 - 29 0.0588 - 31 0.0588 - 40 0.118 - 41 0.235 - - 13 28 11 0 - 0 0.0357 - 2 0.0714 - 4 0.0357 - 7 0.536 - 8 0.0357 - 13 0.0357 - 14 0.0357 - 22 0.0357 - 26 0.0714 - 41 0.0714 - 44 0.0357 - - 47 136 19 0 - 0 0.0588 - 2 0.0294 - 4 0.00735 - 7 0.397 - 8 0.0221 - 12 0.00735 - 19 0.00735 - 21 0.0294 - 26 0.0368 - 29 0.0147 - 30 0.00735 - 31 0.00735 - 32 0.00735 - 37 0.00735 - 40 0.206 - 41 0.11 - 42 0.0147 - 43 0.00735 - 46 0.0221 - - 31 60 15 7 - 0 0.0333 - 2 0.0333 - 3 0.0167 - 4 0.0167 - 7 0.0833 - 12 0.05 - 14 0.0167 - 24 0.0167 - 26 0.0333 - 29 0.0833 - 30 0.0167 - 39 0.483 - 40 0.0667 - 41 0.0333 - 45 0.0167 - - 3 2 2 0 - 2 0.5 - 14 0.5 - - 4 33 6 0 - 0 0.0303 - 2 0.0303 - 3 0.0303 - 12 0.0303 - 39 0.848 - 40 0.0303 - - 13 7 6 0 - 4 0.143 - 7 0.286 - 12 0.143 - 26 0.143 - 41 0.143 - 45 0.143 - - 15 2 1 0 - 29 1 - - 21 2 2 0 - 7 0.5 - 41 0.5 - - 47 8 5 0 - 0 0.125 - 12 0.125 - 24 0.125 - 29 0.375 - 40 0.25 - - 55 2 2 0 - 26 0.5 - 30 0.5 - - 32 3 3 0 - 0 0.333 - 32 0.333 - 33 0.333 - - 33 65 17 5 - 0 0.0154 - 3 0.0462 - 4 0.169 - 7 0.138 - 8 0.0923 - 10 0.0154 - 13 0.0154 - 14 0.0308 - 19 0.0615 - 21 0.0308 - 22 0.0154 - 26 0.108 - 30 0.0154 - 34 0.0154 - 40 0.0154 - 41 0.2 - 45 0.0154 - - 2 6 3 0 - 4 0.5 - 7 0.333 - 8 0.167 - - 13 24 10 0 - 4 0.125 - 7 0.125 - 8 0.0417 - 13 0.0417 - 14 0.0417 - 19 0.0833 - 21 0.0417 - 26 0.167 - 34 0.0417 - 41 0.292 - - 14 3 3 0 - 8 0.333 - 19 0.333 - 45 0.333 - - 15 8 6 0 - 0 0.125 - 3 0.25 - 4 0.125 - 7 0.125 - 8 0.25 - 41 0.125 - - 47 17 12 0 - 3 0.0588 - 4 0.0588 - 7 0.176 - 8 0.0588 - 10 0.0588 - 19 0.0588 - 21 0.0588 - 22 0.0588 - 26 0.0588 - 30 0.0588 - 40 0.0588 - 41 0.235 - - 34 58 6 0 - 0 0.259 - 4 0.0172 - 12 0.379 - 21 0.0345 - 29 0.19 - 33 0.121 - - 35 6 4 0 - 0 0.333 - 26 0.167 - 40 0.333 - 41 0.167 - - 39 1790 1 0 - 3 1 - - 40 1001 17 7 - 0 0.000999 - 3 0.002 - 4 0.000999 - 12 0.000999 - 13 0.000999 - 14 0.002 - 15 0.00599 - 21 0.000999 - 26 0.000999 - 31 0.000999 - 35 0.000999 - 42 0.004 - 43 0.0679 - 44 0.0509 - 45 0.000999 - 46 0.014 - 47 0.844 - - 3 10 3 0 - 21 0.1 - 26 0.1 - 47 0.8 - - 15 187 8 0 - 0 0.00535 - 12 0.00535 - 15 0.0321 - 43 0.337 - 44 0.267 - 45 0.00535 - 46 0.0214 - 47 0.326 - - 55 492 11 0 - 3 0.00407 - 4 0.00203 - 13 0.00203 - 14 0.00407 - 31 0.00203 - 35 0.00203 - 42 0.00813 - 43 0.00203 - 44 0.00203 - 46 0.0061 - 47 0.965 - - 57 129 3 0 - 43 0.00775 - 46 0.0233 - 47 0.969 - - 62 40 1 0 - 47 1 - - 67 1 1 0 - 46 1 - - 69 35 1 0 - 47 1 - - 41 20629 39 17 - 0 0.0576 - 1 0.000145 - 2 0.0758 - 3 0.0369 - 4 0.147 - 6 0.000436 - 7 0.0581 - 8 0.0435 - 9 0.00145 - 10 0.000436 - 12 0.0155 - 13 0.0636 - 14 0.0132 - 15 0.126 - 16 0.00097 - 17 4.85e-05 - 19 0.00102 - 20 0.00305 - 21 0.044 - 22 0.000291 - 23 0.000242 - 24 0.000145 - 26 0.01 - 27 4.85e-05 - 28 0.000436 - 29 0.0714 - 30 0.0248 - 31 0.0326 - 32 0.00315 - 33 0.0252 - 34 0.0794 - 35 0.028 - 36 0.00499 - 37 0.014 - 39 0.00155 - 42 0.000145 - 44 0.000339 - 45 0.00344 - 46 0.0109 - - 2 7 3 0 - 7 0.429 - 21 0.429 - 22 0.143 - - 3 358 9 0 - 0 0.0112 - 2 0.00559 - 3 0.888 - 4 0.00279 - 7 0.0447 - 26 0.0196 - 31 0.0196 - 32 0.00559 - 46 0.00279 - - 13 26 10 0 - 3 0.0385 - 4 0.0385 - 6 0.0385 - 7 0.269 - 21 0.0385 - 26 0.0385 - 29 0.0385 - 30 0.0385 - 34 0.0385 - 46 0.423 - - 14 11 6 0 - 0 0.0909 - 6 0.0909 - 7 0.0909 - 13 0.0909 - 21 0.273 - 46 0.364 - - 15 18 9 0 - 0 0.0556 - 2 0.0556 - 3 0.0556 - 4 0.0556 - 7 0.278 - 14 0.0556 - 21 0.111 - 29 0.278 - 33 0.0556 - - 27 1 1 0 - 46 1 - - 48 242 18 0 - 0 0.211 - 2 0.0165 - 4 0.0207 - 7 0.128 - 8 0.0165 - 12 0.0868 - 13 0.0165 - 15 0.00826 - 21 0.062 - 22 0.00413 - 26 0.0372 - 29 0.062 - 30 0.0207 - 31 0.215 - 32 0.0124 - 33 0.0579 - 34 0.0207 - 37 0.00413 - - 49 44 13 0 - 0 0.136 - 2 0.159 - 4 0.182 - 7 0.205 - 12 0.0227 - 13 0.0227 - 15 0.0682 - 21 0.0455 - 29 0.0227 - 30 0.0455 - 31 0.0455 - 32 0.0227 - 46 0.0227 - - 55 17277 39 0 - 0 0.0341 - 1 0.000116 - 2 0.0865 - 3 0.0252 - 4 0.17 - 6 0.000347 - 7 0.0512 - 8 0.0478 - 9 0.00145 - 10 0.000463 - 12 0.00666 - 13 0.0737 - 14 0.0153 - 15 0.148 - 16 0.00116 - 17 5.79e-05 - 19 0.000868 - 20 0.00359 - 21 0.0416 - 22 0.000232 - 23 0.000289 - 24 5.79e-05 - 26 0.007 - 27 5.79e-05 - 28 0.000405 - 29 0.0587 - 30 0.0212 - 31 0.0301 - 32 0.00127 - 33 0.0201 - 34 0.0843 - 35 0.0312 - 36 0.00561 - 37 0.0149 - 39 0.00185 - 42 0.000174 - 44 0.000347 - 45 0.00313 - 46 0.0102 - - 56 4 3 0 - 12 0.25 - 30 0.25 - 46 0.5 - - 57 1015 30 0 - 0 0.106 - 1 0.000985 - 2 0.0177 - 3 0.00394 - 4 0.0236 - 6 0.000985 - 7 0.164 - 8 0.0433 - 9 0.00394 - 12 0.0286 - 13 0.00591 - 14 0.00197 - 15 0.0197 - 20 0.000985 - 21 0.07 - 24 0.000985 - 26 0.0424 - 28 0.000985 - 29 0.0562 - 30 0.1 - 31 0.067 - 32 0.00788 - 33 0.0177 - 34 0.144 - 35 0.0256 - 36 0.00493 - 37 0.0246 - 44 0.000985 - 45 0.00296 - 46 0.0118 - - 58 63 17 0 - 0 0.0317 - 2 0.0317 - 3 0.0159 - 4 0.27 - 7 0.0794 - 8 0.0476 - 9 0.0159 - 13 0.159 - 15 0.0159 - 21 0.0317 - 29 0.0317 - 30 0.0317 - 33 0.0159 - 34 0.0317 - 35 0.127 - 37 0.0159 - 45 0.0476 - - 61 13 6 0 - 0 0.308 - 7 0.0769 - 12 0.231 - 29 0.231 - 31 0.0769 - 33 0.0769 - - 62 20 11 0 - 0 0.05 - 2 0.05 - 3 0.05 - 4 0.1 - 7 0.1 - 8 0.1 - 13 0.15 - 21 0.05 - 29 0.05 - 30 0.1 - 46 0.2 - - 64 1038 24 0 - 0 0.286 - 2 0.0231 - 4 0.0116 - 7 0.0222 - 8 0.0106 - 10 0.000963 - 12 0.0983 - 13 0.00771 - 14 0.00482 - 15 0.0154 - 19 0.00482 - 21 0.0626 - 26 0.0125 - 28 0.000963 - 29 0.283 - 30 0.0164 - 31 0.0135 - 32 0.0183 - 33 0.0877 - 34 0.00289 - 35 0.000963 - 37 0.000963 - 45 0.00867 - 46 0.00578 - - 68 2 2 0 - 0 0.5 - 33 0.5 - - 69 481 24 0 - 0 0.254 - 2 0.0187 - 4 0.0125 - 7 0.0915 - 8 0.0166 - 12 0.0977 - 13 0.00832 - 14 0.00208 - 15 0.00832 - 19 0.00208 - 21 0.0478 - 24 0.00208 - 26 0.027 - 29 0.166 - 30 0.0291 - 31 0.0187 - 32 0.0208 - 33 0.0956 - 34 0.0499 - 35 0.00624 - 36 0.00208 - 37 0.00416 - 45 0.00416 - 46 0.0146 - - 42 2040 38 16 - 0 0.0211 - 2 0.0422 - 3 0.259 - 4 0.102 - 5 0.00049 - 7 0.0284 - 8 0.0373 - 9 0.00294 - 10 0.00049 - 11 0.00098 - 12 0.00686 - 13 0.0422 - 14 0.0304 - 15 0.123 - 16 0.00098 - 19 0.00343 - 20 0.00392 - 21 0.0338 - 22 0.00049 - 25 0.00049 - 26 0.00833 - 28 0.00588 - 29 0.0137 - 30 0.0191 - 31 0.0132 - 32 0.00196 - 33 0.00392 - 34 0.0123 - 35 0.00539 - 37 0.00637 - 38 0.00098 - 39 0.0574 - 40 0.00441 - 42 0.00049 - 44 0.00049 - 45 0.0152 - 46 0.00098 - 47 0.0897 - - 3 11 1 0 - 47 1 - - 13 23 4 0 - 7 0.087 - 8 0.0435 - 26 0.13 - 47 0.739 - - 14 55 4 0 - 2 0.0182 - 7 0.0182 - 40 0.127 - 47 0.836 - - 15 54 1 0 - 47 1 - - 16 10 2 0 - 40 0.2 - 47 0.8 - - 40 3 2 0 - 15 0.333 - 39 0.667 - - 41 3 2 0 - 13 0.333 - 39 0.667 - - 46 11 7 0 - 4 0.364 - 7 0.0909 - 8 0.0909 - 12 0.0909 - 13 0.0909 - 14 0.182 - 15 0.0909 - - 48 5 5 0 - 0 0.2 - 2 0.2 - 7 0.2 - 12 0.2 - 21 0.2 - - 49 2 2 0 - 7 0.5 - 29 0.5 - - 55 1709 36 0 - 0 0.0164 - 2 0.0474 - 3 0.305 - 4 0.116 - 5 0.000585 - 7 0.0199 - 8 0.0392 - 9 0.00351 - 10 0.000585 - 11 0.00117 - 12 0.00293 - 13 0.0486 - 14 0.0339 - 15 0.143 - 16 0.00117 - 19 0.00351 - 20 0.00468 - 21 0.0363 - 22 0.000585 - 25 0.000585 - 26 0.00644 - 28 0.00702 - 29 0.00995 - 30 0.0164 - 31 0.0135 - 32 0.000585 - 33 0.0041 - 34 0.0117 - 35 0.00585 - 37 0.00702 - 38 0.00117 - 39 0.0655 - 42 0.000585 - 44 0.000585 - 45 0.0164 - 47 0.00819 - - 57 51 19 0 - 0 0.118 - 2 0.0196 - 4 0.0588 - 7 0.216 - 8 0.0588 - 12 0.0588 - 15 0.0392 - 19 0.0196 - 21 0.0392 - 26 0.0196 - 29 0.0392 - 30 0.0784 - 33 0.0196 - 34 0.0784 - 35 0.0196 - 37 0.0196 - 45 0.0196 - 46 0.0196 - 47 0.0588 - - 58 39 9 0 - 3 0.179 - 7 0.0256 - 8 0.0256 - 21 0.0256 - 29 0.0513 - 31 0.0513 - 34 0.0256 - 45 0.0256 - 47 0.59 - - 62 5 4 0 - 2 0.2 - 7 0.2 - 30 0.4 - 46 0.2 - - 64 34 15 0 - 0 0.176 - 2 0.0294 - 4 0.0882 - 7 0.0882 - 8 0.0588 - 12 0.118 - 13 0.0294 - 14 0.0588 - 21 0.0294 - 26 0.0294 - 29 0.118 - 30 0.0294 - 31 0.0588 - 32 0.0294 - 47 0.0588 - - 69 20 11 0 - 0 0.1 - 4 0.05 - 7 0.1 - 8 0.05 - 21 0.1 - 26 0.05 - 29 0.1 - 30 0.15 - 32 0.1 - 45 0.05 - 47 0.15 - - 43 97 22 8 - 0 0.0928 - 2 0.0825 - 4 0.0206 - 6 0.0103 - 7 0.144 - 12 0.0412 - 15 0.0103 - 19 0.0103 - 21 0.0206 - 26 0.0103 - 29 0.0103 - 30 0.0103 - 31 0.0103 - 32 0.0206 - 33 0.0619 - 34 0.0103 - 35 0.0103 - 40 0.134 - 41 0.113 - 42 0.103 - 44 0.0103 - 47 0.0619 - - 13 12 7 0 - 0 0.0833 - 2 0.0833 - 7 0.0833 - 33 0.333 - 40 0.0833 - 41 0.167 - 42 0.167 - - 14 8 7 0 - 0 0.25 - 7 0.125 - 12 0.125 - 31 0.125 - 32 0.125 - 34 0.125 - 35 0.125 - - 15 12 9 0 - 0 0.167 - 4 0.0833 - 7 0.0833 - 12 0.0833 - 26 0.0833 - 29 0.0833 - 40 0.0833 - 42 0.25 - 47 0.0833 - - 40 2 1 0 - 47 1 - - 55 37 13 0 - 0 0.027 - 2 0.135 - 4 0.027 - 6 0.027 - 7 0.189 - 15 0.027 - 19 0.027 - 33 0.027 - 40 0.216 - 41 0.135 - 42 0.108 - 44 0.027 - 47 0.027 - - 57 16 10 0 - 0 0.188 - 2 0.125 - 7 0.125 - 12 0.125 - 21 0.0625 - 30 0.0625 - 32 0.0625 - 40 0.0625 - 41 0.0625 - 47 0.125 - - 58 2 1 0 - 41 1 - - 69 2 2 0 - 21 0.5 - 40 0.5 - - 44 52 11 0 - 2 0.0769 - 3 0.0192 - 4 0.0577 - 7 0.25 - 8 0.0385 - 13 0.0385 - 15 0.25 - 21 0.0192 - 30 0.0385 - 35 0.0192 - 39 0.192 - - 45 238 22 10 - 0 0.0252 - 2 0.0252 - 3 0.0084 - 4 0.126 - 6 0.0168 - 7 0.0924 - 8 0.0798 - 9 0.0042 - 12 0.0042 - 13 0.0924 - 15 0.311 - 16 0.0084 - 19 0.0546 - 21 0.0294 - 26 0.0042 - 28 0.021 - 30 0.0168 - 31 0.0252 - 32 0.0042 - 34 0.0168 - 35 0.021 - 37 0.0126 - - 2 30 9 0 - 0 0.0333 - 3 0.0333 - 4 0.0667 - 8 0.133 - 9 0.0333 - 13 0.167 - 15 0.467 - 16 0.0333 - 37 0.0333 - - 8 5 4 0 - 6 0.2 - 8 0.2 - 15 0.4 - 21 0.2 - - 13 11 6 0 - 3 0.0909 - 4 0.0909 - 6 0.0909 - 7 0.0909 - 15 0.545 - 30 0.0909 - - 41 40 14 0 - 0 0.025 - 2 0.05 - 4 0.225 - 7 0.05 - 8 0.075 - 12 0.025 - 13 0.125 - 15 0.175 - 16 0.025 - 19 0.05 - 21 0.05 - 28 0.05 - 30 0.025 - 35 0.05 - - 42 21 8 0 - 0 0.143 - 4 0.143 - 7 0.0476 - 8 0.143 - 13 0.0476 - 19 0.381 - 31 0.0476 - 37 0.0476 - - 46 8 3 0 - 4 0.25 - 13 0.125 - 15 0.625 - - 55 107 16 0 - 2 0.00935 - 4 0.121 - 6 0.0187 - 7 0.15 - 8 0.0467 - 13 0.0935 - 15 0.355 - 19 0.028 - 21 0.0187 - 26 0.00935 - 28 0.028 - 30 0.00935 - 31 0.0467 - 34 0.028 - 35 0.028 - 37 0.00935 - - 57 5 4 0 - 2 0.2 - 7 0.4 - 8 0.2 - 34 0.2 - - 58 6 4 0 - 0 0.167 - 2 0.333 - 21 0.333 - 30 0.167 - - 69 1 1 0 - 32 1 - - 46 898 32 13 - 0 0.0635 - 1 0.00223 - 2 0.0668 - 3 0.00445 - 4 0.0568 - 7 0.345 - 8 0.0212 - 12 0.0167 - 13 0.00557 - 14 0.00223 - 15 0.0167 - 19 0.0078 - 20 0.00111 - 21 0.0323 - 26 0.0646 - 29 0.0212 - 30 0.0212 - 31 0.0345 - 32 0.00334 - 33 0.0167 - 34 0.0624 - 35 0.0111 - 36 0.00223 - 37 0.0122 - 40 0.00334 - 41 0.00668 - 42 0.0323 - 43 0.00334 - 44 0.0379 - 45 0.00891 - 46 0.00223 - 47 0.0134 - - 6 2 2 0 - 0 0.5 - 41 0.5 - - 8 3 3 0 - 7 0.333 - 33 0.333 - 42 0.333 - - 13 251 24 0 - 0 0.0598 - 1 0.00398 - 2 0.0478 - 4 0.00797 - 7 0.498 - 8 0.012 - 12 0.0398 - 19 0.00398 - 21 0.0279 - 26 0.0876 - 29 0.012 - 30 0.0159 - 31 0.0359 - 33 0.00797 - 34 0.0518 - 35 0.00797 - 37 0.012 - 40 0.00797 - 41 0.00398 - 42 0.0279 - 43 0.00398 - 44 0.0159 - 46 0.00398 - 47 0.00398 - - 14 66 15 0 - 0 0.0606 - 2 0.0606 - 7 0.333 - 8 0.0303 - 12 0.0152 - 19 0.0152 - 21 0.0455 - 26 0.152 - 29 0.0152 - 31 0.0455 - 32 0.0455 - 34 0.0455 - 35 0.0606 - 37 0.0152 - 42 0.0606 - - 15 21 11 0 - 2 0.0476 - 4 0.0476 - 7 0.286 - 12 0.0952 - 21 0.0952 - 26 0.0476 - 33 0.0952 - 34 0.0476 - 40 0.0476 - 41 0.143 - 46 0.0476 - - 40 11 3 0 - 15 0.182 - 21 0.0909 - 47 0.727 - - 41 222 23 0 - 0 0.0721 - 2 0.045 - 3 0.018 - 4 0.203 - 7 0.0856 - 8 0.0405 - 12 0.0045 - 13 0.018 - 14 0.00901 - 15 0.0541 - 19 0.00901 - 20 0.0045 - 21 0.0495 - 26 0.018 - 29 0.045 - 30 0.036 - 31 0.045 - 33 0.0225 - 34 0.144 - 35 0.018 - 36 0.00901 - 37 0.0135 - 45 0.036 - - 42 2 2 0 - 33 0.5 - 47 0.5 - - 55 241 21 0 - 0 0.0207 - 1 0.00415 - 2 0.12 - 4 0.0124 - 7 0.448 - 8 0.0166 - 15 0.00415 - 19 0.0083 - 21 0.0124 - 26 0.083 - 29 0.0083 - 30 0.0207 - 31 0.0332 - 33 0.0083 - 34 0.0249 - 37 0.0124 - 41 0.00415 - 42 0.0539 - 43 0.0083 - 44 0.0913 - 47 0.00415 - - 56 26 9 0 - 0 0.269 - 7 0.231 - 12 0.0385 - 19 0.0385 - 29 0.115 - 33 0.0385 - 34 0.0385 - 37 0.0385 - 44 0.192 - - 57 34 10 0 - 0 0.147 - 2 0.118 - 7 0.471 - 8 0.0294 - 13 0.0294 - 21 0.0294 - 26 0.0294 - 30 0.0588 - 31 0.0294 - 42 0.0588 - - 62 10 6 0 - 0 0.2 - 7 0.2 - 21 0.1 - 33 0.1 - 42 0.1 - 44 0.3 - - 65 1 1 0 - 47 1 - - 47 311752 46 59 - 0 0.0863 - 1 0.000289 - 2 0.0341 - 3 0.00328 - 4 0.0119 - 5 0.000103 - 6 4.49e-05 - 7 0.192 - 8 0.0132 - 9 0.000908 - 10 0.000763 - 12 0.0303 - 13 0.0146 - 14 0.00451 - 15 0.00615 - 16 0.000122 - 17 2.57e-05 - 18 0.000176 - 19 0.00338 - 20 0.000186 - 21 0.0233 - 22 0.00185 - 23 0.00017 - 24 0.000565 - 25 2.89e-05 - 26 0.031 - 28 0.00225 - 29 0.0626 - 30 0.00728 - 31 0.0105 - 32 0.0152 - 33 0.0222 - 34 0.00651 - 35 0.00307 - 36 0.00017 - 37 0.00209 - 38 1.92e-05 - 39 0.000504 - 40 0.207 - 41 0.166 - 42 0.0179 - 43 0.0038 - 44 0.00306 - 45 0.00251 - 46 0.00252 - 47 0.00512 - - 0 56 13 0 - 0 0.0179 - 7 0.125 - 8 0.0893 - 13 0.0357 - 15 0.0179 - 21 0.25 - 23 0.179 - 29 0.107 - 30 0.0714 - 31 0.0536 - 41 0.0179 - 43 0.0179 - 45 0.0179 - - 1 3 2 0 - 26 0.333 - 40 0.667 - - 2 3 2 0 - 0 0.333 - 21 0.667 - - 3 7697 38 0 - 0 0.019 - 2 0.0298 - 3 0.00065 - 4 0.099 - 6 0.00013 - 7 0.178 - 8 0.00429 - 9 0.00208 - 10 0.00013 - 12 0.00754 - 13 0.00455 - 14 0.00143 - 15 0.00429 - 19 0.00247 - 20 0.00026 - 21 0.0052 - 22 0.00026 - 23 0.00013 - 25 0.00013 - 26 0.0958 - 28 0.00013 - 29 0.0151 - 30 0.00338 - 31 0.00559 - 32 0.00117 - 33 0.00351 - 34 0.00273 - 35 0.000909 - 37 0.00338 - 39 0.00013 - 40 0.212 - 41 0.251 - 42 0.0227 - 43 0.0178 - 44 0.00182 - 45 0.0013 - 46 0.00065 - 47 0.00208 - - 4 2457 34 0 - 0 0.258 - 1 0.000814 - 2 0.00895 - 3 0.00204 - 4 0.00611 - 7 0.286 - 8 0.00773 - 9 0.000407 - 10 0.000407 - 12 0.0696 - 13 0.00692 - 14 0.00122 - 15 0.00122 - 18 0.000814 - 19 0.00895 - 21 0.0232 - 24 0.00204 - 26 0.00733 - 28 0.00407 - 29 0.0281 - 30 0.00692 - 31 0.0248 - 32 0.0228 - 33 0.0619 - 34 0.00611 - 35 0.0265 - 37 0.000407 - 40 0.0419 - 41 0.0696 - 42 0.0106 - 44 0.000407 - 45 0.00122 - 46 0.000814 - 47 0.00204 - - 5 861 10 0 - 0 0.861 - 4 0.00232 - 12 0.0848 - 18 0.0128 - 19 0.00116 - 21 0.0244 - 26 0.00116 - 33 0.00697 - 35 0.00116 - 41 0.00465 - - 6 59 14 0 - 0 0.0678 - 2 0.0339 - 7 0.102 - 12 0.0339 - 26 0.0678 - 31 0.0169 - 33 0.0678 - 40 0.254 - 41 0.203 - 42 0.0339 - 43 0.0169 - 44 0.0339 - 45 0.0169 - 46 0.0508 - - 7 79 19 0 - 0 0.152 - 2 0.0127 - 4 0.0506 - 5 0.0127 - 7 0.228 - 8 0.0127 - 12 0.038 - 18 0.0253 - 19 0.038 - 21 0.0253 - 22 0.0127 - 24 0.0127 - 26 0.0253 - 29 0.0127 - 31 0.0633 - 33 0.038 - 40 0.114 - 41 0.114 - 47 0.0127 - - 8 1187 34 0 - 0 0.0666 - 1 0.000842 - 2 0.0371 - 3 0.00253 - 4 0.00505 - 7 0.405 - 8 0.00758 - 9 0.00421 - 10 0.000842 - 12 0.0118 - 13 0.0143 - 14 0.00505 - 15 0.00421 - 19 0.00337 - 21 0.0177 - 22 0.00337 - 24 0.000842 - 26 0.0497 - 28 0.00168 - 29 0.0286 - 30 0.00505 - 31 0.00505 - 32 0.0118 - 33 0.00927 - 34 0.00253 - 35 0.00253 - 37 0.000842 - 40 0.131 - 41 0.131 - 42 0.0194 - 43 0.00505 - 44 0.00421 - 46 0.00168 - 47 0.000842 - - 9 235 13 0 - 0 0.0213 - 2 0.00851 - 4 0.00851 - 7 0.621 - 12 0.00426 - 21 0.0255 - 26 0.0766 - 29 0.00426 - 30 0.00426 - 31 0.0128 - 40 0.115 - 41 0.0894 - 42 0.00851 - - 10 367 21 0 - 0 0.0572 - 2 0.00272 - 4 0.00817 - 5 0.00272 - 7 0.711 - 8 0.00545 - 12 0.00545 - 13 0.00817 - 19 0.00817 - 21 0.0163 - 26 0.0109 - 28 0.00272 - 29 0.00272 - 30 0.00817 - 31 0.00272 - 32 0.0327 - 37 0.00272 - 40 0.0463 - 41 0.049 - 42 0.0136 - 45 0.00272 - - 12 3 3 0 - 40 0.333 - 41 0.333 - 43 0.333 - - 13 96406 46 0 - 0 0.0637 - 1 0.000353 - 2 0.0345 - 3 0.00505 - 4 0.00829 - 5 0.000145 - 6 5.19e-05 - 7 0.333 - 8 0.00742 - 9 0.00119 - 10 4.15e-05 - 12 0.0242 - 13 0.00407 - 14 0.000944 - 15 0.0048 - 16 3.11e-05 - 17 2.07e-05 - 18 2.07e-05 - 19 0.00561 - 20 0.00027 - 21 0.0238 - 22 0.0035 - 23 0.000114 - 24 0.000467 - 25 4.15e-05 - 26 0.0426 - 28 0.00132 - 29 0.0439 - 30 0.00859 - 31 0.0141 - 32 0.00186 - 33 0.0205 - 34 0.0107 - 35 0.00337 - 36 0.000249 - 37 0.00326 - 38 1.04e-05 - 39 0.000145 - 40 0.149 - 41 0.153 - 42 0.0151 - 43 0.00195 - 44 0.00201 - 45 0.00279 - 46 0.00327 - 47 0.000685 - - 14 55109 44 0 - 0 0.0843 - 1 0.000726 - 2 0.0441 - 3 0.00132 - 4 0.0177 - 5 9.07e-05 - 7 0.251 - 8 0.0175 - 9 0.00098 - 10 3.63e-05 - 12 0.0303 - 13 0.00218 - 14 0.000817 - 15 0.00212 - 16 3.63e-05 - 17 5.44e-05 - 18 3.63e-05 - 19 0.00468 - 20 0.000163 - 21 0.0335 - 22 0.00205 - 23 0.000127 - 24 0.000653 - 25 1.81e-05 - 26 0.0385 - 28 0.00356 - 29 0.0533 - 30 0.0147 - 31 0.0227 - 32 0.0389 - 33 0.00203 - 34 0.0132 - 35 0.00744 - 36 0.000472 - 37 0.00227 - 39 0.000327 - 40 0.146 - 41 0.131 - 42 0.0194 - 43 0.00156 - 44 0.00454 - 45 0.00238 - 46 0.00281 - 47 0.00107 - - 15 37150 40 0 - 0 0.0859 - 1 8.08e-05 - 2 0.0517 - 3 0.00261 - 4 0.0052 - 5 5.38e-05 - 6 2.69e-05 - 7 0.0953 - 8 0.00377 - 9 0.000242 - 12 0.0275 - 13 0.00353 - 14 0.00116 - 15 0.00571 - 17 2.69e-05 - 18 0.000673 - 19 0.00175 - 20 0.000296 - 21 0.0225 - 22 0.000834 - 24 8.08e-05 - 26 0.0186 - 28 0.00221 - 29 0.135 - 30 0.00363 - 31 0.00186 - 32 0.00363 - 33 0.0419 - 34 0.0024 - 35 0.00145 - 37 0.00132 - 39 0.000619 - 40 0.126 - 41 0.315 - 42 0.0153 - 43 0.00729 - 44 0.00686 - 45 0.00202 - 46 0.00347 - 47 0.00331 - - 16 1540 34 0 - 0 0.123 - 2 0.0604 - 3 0.0013 - 4 0.00519 - 5 0.000649 - 7 0.11 - 8 0.00519 - 9 0.000649 - 12 0.0403 - 13 0.00519 - 14 0.00195 - 15 0.00325 - 19 0.0026 - 20 0.000649 - 21 0.026 - 22 0.000649 - 26 0.0234 - 28 0.000649 - 29 0.112 - 30 0.00584 - 31 0.0039 - 32 0.037 - 33 0.0156 - 34 0.000649 - 35 0.0169 - 36 0.000649 - 40 0.128 - 41 0.216 - 42 0.0266 - 43 0.0039 - 44 0.0039 - 45 0.00195 - 46 0.00325 - 47 0.0136 - - 17 3 1 0 - 4 1 - - 18 8655 34 0 - 0 0.00508 - 2 0.00659 - 3 0.0261 - 4 0.000231 - 6 0.000231 - 7 0.00208 - 8 0.207 - 9 0.00173 - 10 0.026 - 12 0.00104 - 13 0.417 - 14 0.13 - 15 0.104 - 16 0.00381 - 19 0.000116 - 21 0.00555 - 22 0.000347 - 23 0.00208 - 26 0.000231 - 28 0.000347 - 29 0.00439 - 30 0.0117 - 31 0.00739 - 32 0.000462 - 33 0.00104 - 38 0.000578 - 39 0.0101 - 40 0.00485 - 41 0.00601 - 42 0.000231 - 43 0.000924 - 44 0.000231 - 45 0.0117 - 46 0.000231 - - 19 17347 41 0 - 0 0.301 - 1 0.000173 - 2 0.00761 - 3 0.000807 - 4 0.0115 - 5 0.000115 - 6 5.76e-05 - 7 0.0349 - 8 0.00738 - 9 0.00133 - 10 0.000115 - 12 0.124 - 13 0.00202 - 14 0.000749 - 15 0.000576 - 17 0.000115 - 18 0.000634 - 19 0.00161 - 20 0.000115 - 21 0.0537 - 22 0.00156 - 23 0.000173 - 24 0.00455 - 26 0.0163 - 28 0.0117 - 29 0.166 - 30 0.00242 - 31 0.0019 - 32 0.0775 - 33 0.106 - 34 0.000288 - 35 0.000634 - 37 0.00121 - 39 0.000288 - 40 0.0313 - 41 0.021 - 42 0.00334 - 43 0.000346 - 44 0.000865 - 45 0.00346 - 46 0.000461 - - 20 22 10 0 - 0 0.136 - 1 0.0909 - 13 0.0909 - 15 0.0455 - 21 0.0455 - 30 0.364 - 40 0.0455 - 41 0.0909 - 42 0.0455 - 43 0.0455 - - 21 515 31 0 - 0 0.0641 - 2 0.0272 - 3 0.00388 - 4 0.0155 - 6 0.00194 - 7 0.243 - 8 0.035 - 9 0.0136 - 12 0.0155 - 13 0.0136 - 14 0.00388 - 15 0.00388 - 19 0.0194 - 21 0.0214 - 22 0.0117 - 26 0.0311 - 28 0.00388 - 29 0.00583 - 30 0.00583 - 31 0.00971 - 32 0.00583 - 33 0.0117 - 34 0.00194 - 37 0.00194 - 40 0.181 - 41 0.217 - 42 0.0214 - 43 0.00194 - 44 0.00388 - 46 0.00194 - 47 0.00194 - - 22 48 11 0 - 2 0.0625 - 7 0.521 - 8 0.0417 - 12 0.0208 - 21 0.0208 - 29 0.0208 - 31 0.0208 - 37 0.0208 - 40 0.0833 - 41 0.167 - 42 0.0208 - - 23 19 8 0 - 7 0.579 - 8 0.0526 - 19 0.0526 - 21 0.105 - 29 0.0526 - 31 0.0526 - 40 0.0526 - 41 0.0526 - - 24 8 3 0 - 7 0.5 - 40 0.25 - 41 0.25 - - 25 13 2 0 - 3 0.0769 - 42 0.923 - - 26 1 1 0 - 28 1 - - 27 4 3 0 - 40 0.5 - 42 0.25 - 46 0.25 - - 28 87 15 0 - 0 0.0115 - 2 0.0345 - 4 0.0805 - 7 0.437 - 8 0.0345 - 13 0.0115 - 15 0.0115 - 21 0.046 - 26 0.069 - 29 0.023 - 40 0.103 - 41 0.092 - 42 0.0115 - 46 0.023 - 47 0.0115 - - 29 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 29 0.167 - 33 0.167 - - 30 255 24 0 - 0 0.0706 - 2 0.0314 - 4 0.00784 - 7 0.435 - 8 0.0196 - 12 0.0275 - 13 0.00392 - 14 0.00392 - 19 0.00392 - 21 0.0275 - 22 0.00392 - 26 0.0314 - 29 0.0235 - 30 0.00392 - 31 0.00784 - 32 0.00392 - 33 0.0157 - 37 0.00392 - 40 0.141 - 41 0.098 - 42 0.0157 - 43 0.00392 - 44 0.00392 - 46 0.0118 - - 31 27 11 0 - 0 0.0741 - 2 0.0741 - 4 0.037 - 7 0.185 - 12 0.111 - 14 0.037 - 24 0.037 - 26 0.037 - 29 0.185 - 40 0.148 - 41 0.0741 - - 32 3 3 0 - 0 0.333 - 32 0.333 - 33 0.333 - - 33 63 17 0 - 0 0.0159 - 3 0.0476 - 4 0.175 - 7 0.127 - 8 0.0952 - 10 0.0159 - 13 0.0159 - 14 0.0317 - 19 0.0635 - 21 0.0317 - 22 0.0159 - 26 0.0952 - 30 0.0159 - 34 0.0159 - 40 0.0159 - 41 0.206 - 45 0.0159 - - 34 58 6 0 - 0 0.259 - 4 0.0172 - 12 0.379 - 21 0.0345 - 29 0.19 - 33 0.121 - - 35 6 4 0 - 0 0.333 - 26 0.167 - 40 0.333 - 41 0.167 - - 40 975 10 0 - 0 0.00103 - 12 0.00103 - 15 0.00615 - 21 0.00103 - 26 0.00103 - 43 0.0677 - 44 0.0513 - 45 0.00103 - 46 0.00308 - 47 0.867 - - 41 4997 30 0 - 0 0.238 - 2 0.0332 - 3 0.0014 - 4 0.0254 - 7 0.0903 - 8 0.0054 - 9 0.0004 - 10 0.0002 - 12 0.064 - 13 0.00981 - 14 0.0036 - 15 0.00961 - 19 0.003 - 21 0.0476 - 22 0.0006 - 23 0.0002 - 26 0.0272 - 28 0.0012 - 29 0.288 - 30 0.00901 - 31 0.0124 - 32 0.013 - 33 0.104 - 34 0.0038 - 35 0.0012 - 36 0.0002 - 37 0.0026 - 39 0.0002 - 45 0.0042 - 46 0.0006 - - 42 330 23 0 - 0 0.115 - 2 0.0212 - 4 0.0152 - 7 0.0485 - 8 0.00303 - 12 0.0424 - 13 0.00303 - 14 0.00606 - 15 0.00606 - 19 0.00606 - 20 0.00303 - 21 0.0273 - 26 0.0121 - 28 0.00606 - 29 0.0758 - 30 0.00303 - 31 0.00606 - 32 0.0121 - 33 0.0212 - 34 0.00303 - 37 0.00606 - 45 0.00303 - 47 0.555 - - 43 92 18 0 - 0 0.0978 - 2 0.087 - 4 0.0217 - 7 0.152 - 12 0.0435 - 21 0.0217 - 26 0.0109 - 29 0.0109 - 30 0.0109 - 31 0.0109 - 32 0.0217 - 33 0.0652 - 34 0.0109 - 35 0.0109 - 40 0.13 - 41 0.12 - 42 0.109 - 47 0.0652 - - 45 4 4 0 - 0 0.25 - 2 0.25 - 7 0.25 - 32 0.25 - - 46 480 27 0 - 0 0.119 - 1 0.00208 - 2 0.0542 - 4 0.0208 - 7 0.365 - 8 0.0104 - 12 0.0292 - 13 0.00417 - 15 0.00833 - 19 0.00833 - 21 0.0396 - 26 0.0521 - 29 0.0396 - 30 0.00833 - 31 0.0292 - 32 0.00625 - 33 0.0292 - 34 0.0417 - 35 0.0125 - 37 0.0125 - 40 0.00625 - 41 0.0104 - 42 0.0333 - 43 0.00625 - 44 0.0229 - 46 0.00417 - 47 0.025 - - 48 1062 27 0 - 0 0.0546 - 2 0.032 - 4 0.000942 - 7 0.0706 - 8 0.000942 - 9 0.000942 - 12 0.0188 - 13 0.00471 - 15 0.000942 - 19 0.000942 - 21 0.00659 - 26 0.0141 - 28 0.000942 - 29 0.0753 - 30 0.000942 - 31 0.00377 - 32 0.0226 - 33 0.00847 - 34 0.000942 - 37 0.00282 - 40 0.469 - 41 0.171 - 42 0.032 - 43 0.000942 - 44 0.000942 - 45 0.00282 - 46 0.000942 - - 49 817 24 0 - 0 0.0673 - 2 0.0171 - 4 0.00367 - 7 0.0355 - 8 0.00245 - 12 0.00857 - 15 0.00122 - 21 0.00857 - 22 0.00122 - 26 0.0122 - 28 0.00245 - 29 0.0257 - 30 0.00367 - 31 0.00122 - 32 0.0147 - 33 0.00612 - 34 0.00122 - 40 0.518 - 41 0.179 - 42 0.071 - 44 0.00122 - 45 0.00367 - 46 0.00245 - 47 0.0122 - - 51 8 5 0 - 2 0.125 - 33 0.125 - 40 0.25 - 41 0.125 - 47 0.375 - - 54 7 4 0 - 0 0.143 - 13 0.143 - 40 0.429 - 41 0.286 - - 55 13149 39 0 - 0 0.0396 - 2 0.00867 - 3 0.00205 - 4 0.0054 - 5 7.61e-05 - 6 0.000152 - 7 0.0588 - 8 0.00342 - 9 0.000456 - 12 0.0129 - 13 0.000913 - 14 0.000152 - 15 0.000913 - 19 0.000532 - 20 0.000152 - 21 0.00829 - 22 0.000456 - 23 7.61e-05 - 24 0.000152 - 25 0.000152 - 26 0.013 - 28 0.000989 - 29 0.0295 - 30 0.00205 - 31 0.0035 - 32 0.0103 - 33 0.00464 - 34 0.00243 - 35 0.000913 - 36 7.61e-05 - 37 0.000608 - 40 0.508 - 41 0.208 - 42 0.0503 - 43 0.00973 - 44 0.00106 - 45 0.000913 - 46 0.00122 - 47 0.01 - - 56 409 24 0 - 0 0.0513 - 2 0.0122 - 3 0.00244 - 4 0.00978 - 7 0.174 - 8 0.00244 - 12 0.0269 - 14 0.00244 - 21 0.00489 - 26 0.0171 - 28 0.00244 - 29 0.0147 - 30 0.00733 - 31 0.00978 - 32 0.0269 - 33 0.00489 - 34 0.0122 - 35 0.00978 - 39 0.00244 - 40 0.35 - 41 0.237 - 42 0.0122 - 44 0.00244 - 46 0.00489 - - 57 38167 39 0 - 0 0.0755 - 1 0.000105 - 2 0.0403 - 3 0.00055 - 4 0.0043 - 5 0.000131 - 6 2.62e-05 - 7 0.0629 - 8 0.00333 - 9 0.000131 - 12 0.0243 - 13 0.0021 - 14 0.000812 - 15 0.0017 - 19 0.00102 - 20 2.62e-05 - 21 0.0137 - 22 0.000786 - 23 2.62e-05 - 24 7.86e-05 - 26 0.0196 - 28 0.000891 - 29 0.0437 - 30 0.00424 - 31 0.00383 - 32 0.0103 - 33 0.0117 - 34 0.00113 - 35 0.00055 - 37 0.00186 - 39 0.000131 - 40 0.432 - 41 0.205 - 42 0.0232 - 43 0.0022 - 44 0.00191 - 45 0.00176 - 46 0.0027 - 47 0.00144 - - 58 873 28 0 - 0 0.123 - 2 0.0767 - 3 0.0115 - 4 0.0275 - 7 0.139 - 8 0.00229 - 12 0.0401 - 13 0.00229 - 14 0.00344 - 15 0.00229 - 19 0.00458 - 20 0.00115 - 21 0.0229 - 26 0.0321 - 28 0.00229 - 29 0.0527 - 30 0.00344 - 31 0.00229 - 32 0.0275 - 33 0.0367 - 34 0.00458 - 35 0.00229 - 39 0.00115 - 40 0.181 - 41 0.136 - 42 0.0504 - 45 0.00115 - 47 0.0103 - - 60 5584 31 0 - 0 0.00985 - 2 0.0177 - 3 0.00681 - 4 0.0518 - 7 0.358 - 8 0.00734 - 9 0.00412 - 12 0.00304 - 13 0.00358 - 14 0.000179 - 15 0.00304 - 19 0.00125 - 20 0.000179 - 21 0.00591 - 22 0.000179 - 25 0.000179 - 26 0.0566 - 29 0.00304 - 30 0.00251 - 31 0.0077 - 34 0.000895 - 35 0.000537 - 37 0.000179 - 40 0.186 - 41 0.219 - 42 0.0136 - 43 0.0279 - 44 0.00663 - 45 0.000358 - 46 0.000179 - 47 0.00125 - - 61 29 6 0 - 0 0.0345 - 29 0.0345 - 33 0.0345 - 40 0.69 - 41 0.138 - 42 0.069 - - 62 1522 28 0 - 0 0.0453 - 2 0.0191 - 3 0.000657 - 4 0.00197 - 7 0.0315 - 8 0.000657 - 12 0.021 - 15 0.00131 - 19 0.000657 - 21 0.00788 - 22 0.00131 - 26 0.00197 - 28 0.000657 - 29 0.0177 - 30 0.000657 - 31 0.00131 - 32 0.00263 - 33 0.00986 - 34 0.000657 - 37 0.00131 - 40 0.633 - 41 0.171 - 42 0.0138 - 43 0.00329 - 44 0.000657 - 45 0.00197 - 46 0.00263 - 47 0.00526 - - 64 8611 29 0 - 0 0.046 - 2 0.0135 - 4 0.00105 - 7 0.0108 - 12 0.017 - 13 0.000465 - 14 0.000116 - 15 0.000232 - 19 0.000929 - 20 0.000116 - 21 0.0043 - 22 0.000348 - 26 0.00325 - 28 0.000697 - 29 0.00975 - 30 0.000813 - 31 0.000581 - 32 0.00499 - 33 0.00325 - 34 0.000116 - 37 0.000232 - 40 0.694 - 41 0.157 - 42 0.0238 - 43 0.00151 - 44 0.00151 - 45 0.00128 - 46 0.00116 - 47 0.00128 - - 65 8 3 0 - 40 0.5 - 46 0.125 - 47 0.375 - - 67 4 4 0 - 40 0.25 - 42 0.25 - 46 0.25 - 47 0.25 - - 68 65 9 0 - 0 0.0308 - 2 0.0308 - 7 0.0769 - 26 0.0308 - 29 0.0308 - 32 0.0462 - 40 0.631 - 41 0.0769 - 42 0.0462 - - 69 4185 30 0 - 0 0.0712 - 2 0.0229 - 3 0.000239 - 4 0.00191 - 7 0.0244 - 8 0.000478 - 12 0.0318 - 13 0.000478 - 15 0.000239 - 21 0.00956 - 22 0.000956 - 26 0.00789 - 28 0.00119 - 29 0.037 - 30 0.00119 - 31 0.0043 - 32 0.0148 - 33 0.0103 - 34 0.000478 - 35 0.000239 - 37 0.000478 - 39 0.000239 - 40 0.542 - 41 0.18 - 42 0.0277 - 43 0.00335 - 44 0.00119 - 45 0.000717 - 46 0.00119 - 47 0.00215 - - 73 3 3 0 - 0 0.333 - 32 0.333 - 41 0.333 - - 74 13 5 0 - 0 0.0769 - 26 0.0769 - 40 0.154 - 41 0.0769 - 47 0.615 - - 48 1396 29 9 - 0 0.0415 - 2 0.0244 - 4 0.00143 - 7 0.0752 - 8 0.00143 - 9 0.00645 - 12 0.0143 - 13 0.0043 - 15 0.000716 - 19 0.00143 - 21 0.00716 - 26 0.0186 - 28 0.00143 - 29 0.0573 - 30 0.00215 - 31 0.00716 - 32 0.0172 - 33 0.00716 - 34 0.00143 - 35 0.000716 - 37 0.00215 - 39 0.0043 - 40 0.362 - 41 0.304 - 42 0.0279 - 43 0.00143 - 44 0.00215 - 45 0.00287 - 46 0.00143 - - 0 1 1 0 - 44 1 - - 4 66 14 0 - 0 0.0455 - 2 0.0152 - 7 0.379 - 8 0.0152 - 12 0.0152 - 13 0.0152 - 19 0.0152 - 26 0.0455 - 29 0.0152 - 30 0.0152 - 39 0.0909 - 40 0.152 - 41 0.136 - 42 0.0455 - - 41 264 6 0 - 2 0.00379 - 7 0.00758 - 26 0.0114 - 40 0.261 - 41 0.705 - 42 0.0114 - - 42 18 3 0 - 40 0.667 - 41 0.0556 - 42 0.278 - - 44 1 1 0 - 43 1 - - 45 6 5 0 - 40 0.333 - 41 0.167 - 42 0.167 - 44 0.167 - 46 0.167 - - 47 19 8 0 - 2 0.0526 - 7 0.211 - 9 0.421 - 13 0.105 - 28 0.0526 - 30 0.0526 - 33 0.0526 - 40 0.0526 - - 55 951 28 0 - 0 0.0568 - 2 0.0326 - 4 0.0021 - 7 0.0747 - 8 0.00105 - 9 0.00105 - 12 0.0189 - 13 0.00315 - 15 0.00105 - 19 0.00105 - 21 0.0105 - 26 0.021 - 28 0.00105 - 29 0.0831 - 30 0.00105 - 31 0.0105 - 32 0.0252 - 33 0.00946 - 34 0.0021 - 35 0.00105 - 37 0.00315 - 40 0.396 - 41 0.209 - 42 0.0263 - 43 0.00105 - 44 0.00105 - 45 0.00421 - 46 0.00105 - - 57 51 5 0 - 7 0.0196 - 12 0.0196 - 40 0.471 - 41 0.451 - 42 0.0392 - - 49 1035 32 6 - 0 0.0531 - 1 0.000966 - 2 0.0145 - 3 0.00483 - 4 0.0386 - 7 0.0725 - 8 0.0145 - 9 0.00193 - 12 0.00676 - 13 0.0164 - 14 0.0116 - 15 0.0116 - 20 0.0029 - 21 0.00966 - 22 0.00193 - 26 0.0184 - 28 0.00193 - 29 0.0203 - 30 0.0029 - 31 0.00193 - 32 0.0116 - 33 0.00483 - 34 0.00386 - 35 0.00386 - 37 0.000966 - 40 0.411 - 41 0.184 - 42 0.058 - 44 0.000966 - 45 0.0029 - 46 0.00193 - 47 0.00966 - - 2 45 9 0 - 4 0.311 - 8 0.133 - 13 0.156 - 14 0.133 - 15 0.0667 - 20 0.0444 - 21 0.0222 - 40 0.0444 - 41 0.0889 - - 41 350 16 0 - 2 0.00286 - 3 0.0143 - 4 0.0629 - 7 0.00286 - 8 0.00857 - 9 0.00571 - 13 0.0229 - 14 0.0171 - 15 0.02 - 20 0.00286 - 21 0.00571 - 22 0.00286 - 40 0.506 - 41 0.166 - 42 0.131 - 47 0.0286 - - 42 10 5 0 - 8 0.2 - 13 0.1 - 40 0.4 - 41 0.1 - 42 0.2 - - 47 1 1 0 - 32 1 - - 55 548 26 0 - 0 0.0912 - 1 0.00182 - 2 0.0237 - 4 0.00547 - 7 0.128 - 8 0.0073 - 12 0.00912 - 13 0.00182 - 15 0.00365 - 21 0.0109 - 22 0.00182 - 26 0.031 - 28 0.00365 - 29 0.0328 - 30 0.00547 - 31 0.00365 - 32 0.0182 - 33 0.0073 - 34 0.00365 - 35 0.00547 - 37 0.00182 - 40 0.369 - 41 0.204 - 42 0.0201 - 45 0.00547 - 46 0.00365 - - 57 73 15 0 - 0 0.0685 - 2 0.0137 - 7 0.0411 - 12 0.0274 - 21 0.0137 - 26 0.0137 - 29 0.0411 - 32 0.0137 - 33 0.0137 - 34 0.0274 - 35 0.0137 - 40 0.534 - 41 0.151 - 42 0.0137 - 44 0.0137 - - 50 146 15 1 - 3 0.0342 - 4 0.384 - 8 0.144 - 9 0.0137 - 13 0.123 - 14 0.13 - 15 0.0548 - 16 0.00685 - 20 0.0411 - 21 0.0137 - 22 0.00685 - 30 0.0137 - 31 0.0137 - 39 0.00685 - 45 0.0137 - - 46 1 1 0 - 45 1 - - 51 8 5 0 - 2 0.125 - 33 0.125 - 40 0.25 - 41 0.125 - 47 0.375 - - 54 8 4 0 - 0 0.125 - 13 0.125 - 40 0.375 - 41 0.375 - - 55 92386 44 25 - 0 0.00569 - 1 0.000487 - 2 0.0599 - 3 0.0061 - 4 0.022 - 5 3.25e-05 - 6 7.58e-05 - 7 0.423 - 8 0.0122 - 9 0.000509 - 10 0.000108 - 12 0.00184 - 13 0.00187 - 14 0.000682 - 15 0.00441 - 16 3.25e-05 - 17 2.16e-05 - 19 0.00704 - 20 0.000216 - 21 0.011 - 22 0.000346 - 23 0.000152 - 24 7.58e-05 - 25 5.41e-05 - 26 0.0266 - 28 0.000162 - 29 0.0062 - 30 0.0132 - 31 0.0246 - 32 0.00149 - 33 0.000671 - 34 0.0181 - 35 0.00889 - 36 0.000563 - 37 0.00232 - 39 0.000433 - 40 0.0776 - 41 0.217 - 42 0.0281 - 43 0.00179 - 44 0.00812 - 45 0.0015 - 46 0.00279 - 47 0.00143 - - 2 6756 35 0 - 0 0.0628 - 2 0.0154 - 3 0.000148 - 4 0.00681 - 5 0.000148 - 7 0.0813 - 8 0.00488 - 9 0.000148 - 12 0.0207 - 13 0.00133 - 14 0.000888 - 15 0.000888 - 19 0.000592 - 21 0.0148 - 22 0.000444 - 23 0.000148 - 26 0.016 - 28 0.00192 - 29 0.0423 - 30 0.00355 - 31 0.00459 - 32 0.017 - 33 0.00266 - 34 0.00429 - 35 0.00148 - 36 0.000148 - 37 0.000888 - 40 0.412 - 41 0.25 - 42 0.0232 - 43 0.00192 - 44 0.00133 - 45 0.00148 - 46 0.00192 - 47 0.00178 - - 4 104 10 0 - 0 0.0192 - 2 0.865 - 3 0.00962 - 7 0.00962 - 9 0.00962 - 12 0.00962 - 21 0.00962 - 29 0.0192 - 40 0.0192 - 41 0.0288 - - 6 2 2 0 - 40 0.5 - 47 0.5 - - 7 24 7 0 - 0 0.0417 - 2 0.0417 - 29 0.0417 - 32 0.0417 - 40 0.5 - 41 0.25 - 42 0.0833 - - 8 5 4 0 - 7 0.2 - 29 0.2 - 40 0.4 - 42 0.2 - - 13 6 4 0 - 4 0.167 - 30 0.167 - 40 0.167 - 41 0.5 - - 15 8 5 0 - 2 0.125 - 7 0.125 - 29 0.125 - 41 0.5 - 42 0.125 - - 17 14 4 0 - 0 0.0714 - 2 0.714 - 40 0.143 - 41 0.0714 - - 20 4 3 0 - 12 0.25 - 40 0.5 - 41 0.25 - - 21 120 9 0 - 0 0.00833 - 2 0.0667 - 7 0.025 - 8 0.0167 - 26 0.00833 - 40 0.55 - 41 0.292 - 42 0.025 - 43 0.00833 - - 26 49 8 0 - 3 0.49 - 4 0.0408 - 7 0.102 - 8 0.0204 - 19 0.0204 - 40 0.224 - 41 0.0408 - 42 0.0612 - - 40 7 2 0 - 40 0.857 - 41 0.143 - - 41 8157 24 0 - 0 0.00356 - 2 0.114 - 4 0.000613 - 7 0.00282 - 12 0.000613 - 14 0.000245 - 20 0.000123 - 21 0.00049 - 22 0.000123 - 26 0.000613 - 29 0.00699 - 31 0.000368 - 32 0.000123 - 33 0.00331 - 34 0.000736 - 35 0.0011 - 40 0.303 - 41 0.527 - 42 0.0177 - 43 0.0116 - 44 0.00147 - 45 0.000123 - 46 0.000245 - 47 0.00368 - - 42 1360 18 0 - 0 0.00147 - 2 0.00588 - 3 0.00368 - 6 0.000735 - 7 0.00515 - 8 0.000735 - 9 0.000735 - 19 0.000735 - 25 0.00221 - 30 0.00147 - 32 0.000735 - 34 0.000735 - 40 0.561 - 41 0.0449 - 42 0.318 - 43 0.011 - 46 0.00441 - 47 0.036 - - 44 37 5 0 - 7 0.0811 - 40 0.027 - 41 0.027 - 42 0.0811 - 43 0.784 - - 45 324 10 0 - 2 0.0185 - 7 0.0494 - 21 0.00309 - 26 0.00309 - 30 0.00309 - 34 0.00309 - 40 0.133 - 41 0.327 - 42 0.00617 - 46 0.454 - - 46 65 5 0 - 7 0.0154 - 40 0.523 - 41 0.431 - 43 0.0154 - 46 0.0154 - - 47 72120 41 0 - 0 6.93e-05 - 1 0.000624 - 2 0.0597 - 3 0.00738 - 4 0.027 - 5 2.77e-05 - 6 6.93e-05 - 7 0.529 - 8 0.0149 - 9 0.000568 - 10 0.000139 - 13 0.0022 - 14 0.000749 - 15 0.00535 - 16 4.16e-05 - 17 2.77e-05 - 19 0.00892 - 20 0.00025 - 21 0.0123 - 22 0.000333 - 23 0.00018 - 24 6.93e-05 - 25 1.39e-05 - 26 0.0315 - 28 2.77e-05 - 29 0.00257 - 30 0.0164 - 31 0.0309 - 32 4.16e-05 - 33 1.39e-05 - 34 0.0226 - 35 0.0111 - 36 0.000707 - 37 0.00284 - 39 0.000527 - 40 0.000111 - 41 0.177 - 42 0.0204 - 44 0.0101 - 45 0.00176 - 46 0.00122 - - 48 4 4 0 - 0 0.25 - 2 0.25 - 12 0.25 - 40 0.25 - - 49 129 11 0 - 0 0.0155 - 2 0.093 - 4 0.00775 - 7 0.093 - 22 0.00775 - 26 0.0233 - 35 0.0155 - 37 0.00775 - 40 0.419 - 41 0.302 - 42 0.0155 - - 50 156 12 0 - 0 0.00641 - 2 0.0385 - 7 0.0449 - 12 0.00641 - 13 0.00641 - 14 0.00641 - 29 0.00641 - 31 0.00641 - 32 0.00641 - 40 0.66 - 41 0.192 - 42 0.0192 - - 55 2717 34 0 - 0 0.0184 - 2 0.0158 - 3 0.000368 - 4 0.00957 - 6 0.000368 - 7 0.119 - 8 0.00405 - 9 0.0011 - 12 0.00626 - 13 0.00147 - 15 0.00552 - 19 0.000368 - 20 0.000368 - 21 0.00589 - 22 0.0011 - 24 0.000736 - 25 0.000368 - 26 0.025 - 29 0.0118 - 30 0.00147 - 31 0.00405 - 32 0.00515 - 33 0.00552 - 34 0.00184 - 35 0.000368 - 37 0.000736 - 40 0.259 - 41 0.342 - 42 0.134 - 43 0.00331 - 44 0.000368 - 45 0.000368 - 46 0.000368 - 47 0.0144 - - 57 160 13 0 - 0 0.0375 - 2 0.0437 - 7 0.0812 - 12 0.025 - 26 0.025 - 29 0.0437 - 31 0.00625 - 32 0.0125 - 33 0.00625 - 35 0.00625 - 40 0.494 - 41 0.206 - 43 0.0125 - - 58 37 7 0 - 0 0.027 - 7 0.0811 - 40 0.541 - 41 0.216 - 42 0.0811 - 44 0.027 - 47 0.027 - - 60 8 5 0 - 2 0.125 - 7 0.125 - 21 0.125 - 39 0.25 - 40 0.375 - - 56 440 24 15 - 0 0.0477 - 2 0.0114 - 3 0.00227 - 4 0.00909 - 7 0.161 - 8 0.00227 - 12 0.025 - 14 0.00227 - 21 0.00455 - 26 0.0159 - 28 0.00227 - 29 0.0136 - 30 0.00909 - 31 0.00909 - 32 0.025 - 33 0.00455 - 34 0.0114 - 35 0.00909 - 39 0.00227 - 40 0.325 - 41 0.23 - 42 0.0114 - 44 0.00227 - 46 0.0636 - - 4 120 16 0 - 0 0.0583 - 2 0.0167 - 7 0.242 - 12 0.0667 - 14 0.00833 - 28 0.00833 - 31 0.025 - 32 0.025 - 33 0.00833 - 34 0.0167 - 35 0.00833 - 40 0.317 - 41 0.167 - 42 0.00833 - 44 0.00833 - 46 0.0167 - - 8 69 14 0 - 0 0.0725 - 3 0.0145 - 4 0.0145 - 7 0.217 - 8 0.0145 - 12 0.0145 - 21 0.0145 - 26 0.0435 - 30 0.0145 - 32 0.0145 - 34 0.0145 - 35 0.0145 - 40 0.333 - 41 0.203 - - 13 3 2 0 - 30 0.667 - 40 0.333 - - 14 11 7 0 - 2 0.0909 - 29 0.0909 - 32 0.0909 - 33 0.0909 - 40 0.364 - 41 0.182 - 46 0.0909 - - 15 14 4 0 - 0 0.143 - 7 0.0714 - 40 0.357 - 41 0.429 - - 20 36 9 0 - 0 0.0278 - 2 0.0278 - 7 0.25 - 26 0.0278 - 29 0.0556 - 32 0.0556 - 40 0.306 - 41 0.222 - 42 0.0278 - - 21 3 3 0 - 12 0.333 - 41 0.333 - 42 0.333 - - 30 2 2 0 - 0 0.5 - 34 0.5 - - 31 2 2 0 - 7 0.5 - 34 0.5 - - 34 1 1 0 - 4 1 - - 45 61 3 0 - 40 0.246 - 41 0.344 - 46 0.41 - - 48 10 6 0 - 4 0.1 - 7 0.2 - 21 0.1 - 32 0.1 - 40 0.4 - 41 0.1 - - 54 2 2 0 - 35 0.5 - 40 0.5 - - 55 75 12 0 - 0 0.0533 - 2 0.0133 - 4 0.0133 - 7 0.107 - 12 0.0133 - 26 0.0267 - 29 0.0267 - 32 0.0133 - 39 0.0133 - 40 0.347 - 41 0.36 - 42 0.0133 - - 60 14 6 0 - 7 0.214 - 30 0.0714 - 31 0.0714 - 32 0.0714 - 35 0.0714 - 40 0.5 - - 57 43057 41 14 - 0 0.0669 - 1 0.000279 - 2 0.0358 - 3 0.00065 - 4 0.00604 - 5 0.000139 - 6 4.65e-05 - 7 0.106 - 8 0.00476 - 9 0.000139 - 12 0.0216 - 13 0.00232 - 14 0.000836 - 15 0.00272 - 19 0.00183 - 20 2.32e-05 - 21 0.0136 - 22 0.000883 - 23 2.32e-05 - 24 6.97e-05 - 25 2.32e-05 - 26 0.0268 - 28 0.00079 - 29 0.039 - 30 0.00595 - 31 0.00711 - 32 0.00917 - 33 0.0104 - 34 0.0066 - 35 0.00249 - 36 2.32e-05 - 37 0.00221 - 39 0.000116 - 40 0.386 - 41 0.206 - 42 0.0223 - 43 0.00232 - 44 0.00221 - 45 0.00167 - 46 0.00318 - 47 0.00128 - - 2 4 4 0 - 4 0.25 - 15 0.25 - 40 0.25 - 41 0.25 - - 13 20 7 0 - 4 0.05 - 12 0.05 - 26 0.1 - 34 0.05 - 40 0.5 - 41 0.2 - 46 0.05 - - 41 1101 20 0 - 0 0.00363 - 2 0.00272 - 4 0.00182 - 7 0.0163 - 12 0.00182 - 15 0.000908 - 21 0.00182 - 26 0.00363 - 29 0.00636 - 31 0.00182 - 32 0.00182 - 33 0.00182 - 34 0.00182 - 40 0.554 - 41 0.378 - 42 0.0145 - 43 0.00182 - 44 0.000908 - 46 0.000908 - 47 0.00363 - - 42 51 5 0 - 7 0.0196 - 40 0.392 - 41 0.0784 - 42 0.471 - 46 0.0392 - - 44 14 2 0 - 0 0.0714 - 43 0.929 - - 45 21 5 0 - 7 0.0476 - 40 0.476 - 41 0.238 - 42 0.0952 - 46 0.143 - - 46 145 15 0 - 0 0.0345 - 2 0.0138 - 4 0.0069 - 7 0.0483 - 8 0.0069 - 21 0.0207 - 26 0.0207 - 29 0.0069 - 33 0.0069 - 34 0.0069 - 40 0.434 - 41 0.331 - 42 0.0345 - 44 0.0138 - 45 0.0138 - - 48 31 5 0 - 2 0.0323 - 7 0.226 - 40 0.419 - 41 0.29 - 42 0.0323 - - 49 43 8 0 - 0 0.0233 - 2 0.0233 - 7 0.0698 - 26 0.0465 - 29 0.0233 - 40 0.419 - 41 0.372 - 42 0.0233 - - 55 39258 41 0 - 0 0.0695 - 1 0.000306 - 2 0.0374 - 3 0.000662 - 4 0.00642 - 5 0.000153 - 6 5.09e-05 - 7 0.111 - 8 0.00497 - 9 0.000153 - 12 0.0224 - 13 0.00242 - 14 0.000917 - 15 0.00285 - 19 0.00199 - 20 2.55e-05 - 21 0.0143 - 22 0.000942 - 23 2.55e-05 - 24 7.64e-05 - 25 2.55e-05 - 26 0.0284 - 28 0.000841 - 29 0.0411 - 30 0.00629 - 31 0.00746 - 32 0.00978 - 33 0.0109 - 34 0.00693 - 35 0.0027 - 36 2.55e-05 - 37 0.00211 - 39 0.000127 - 40 0.374 - 41 0.202 - 42 0.0215 - 43 0.00201 - 44 0.00217 - 45 0.00163 - 46 0.00326 - 47 0.0012 - - 57 2232 30 0 - 0 0.06 - 2 0.0291 - 3 0.000896 - 4 0.00134 - 7 0.0824 - 8 0.00358 - 12 0.0206 - 13 0.00224 - 15 0.00134 - 19 0.000448 - 21 0.00806 - 22 0.000448 - 26 0.0116 - 28 0.000448 - 29 0.0233 - 30 0.00358 - 31 0.00448 - 32 0.00358 - 33 0.00851 - 34 0.00314 - 35 0.000448 - 37 0.00538 - 40 0.5 - 41 0.187 - 42 0.0269 - 43 0.00269 - 44 0.00314 - 45 0.00269 - 46 0.000896 - 47 0.00134 - - 58 51 12 0 - 0 0.0392 - 7 0.0784 - 21 0.0196 - 26 0.0196 - 29 0.0392 - 30 0.0196 - 31 0.0196 - 32 0.0196 - 40 0.431 - 41 0.235 - 42 0.0588 - 47 0.0196 - - 64 38 8 0 - 0 0.0789 - 8 0.0263 - 26 0.0526 - 29 0.0263 - 34 0.0263 - 40 0.474 - 41 0.237 - 42 0.0789 - - 69 41 6 0 - 0 0.0244 - 2 0.0732 - 29 0.0244 - 40 0.707 - 41 0.146 - 42 0.0244 - - 58 1135 32 9 - 0 0.0943 - 1 0.000881 - 2 0.0643 - 3 0.0106 - 4 0.037 - 7 0.157 - 8 0.00705 - 12 0.0308 - 13 0.00617 - 14 0.00352 - 15 0.00617 - 19 0.00352 - 20 0.00352 - 21 0.0194 - 26 0.0326 - 28 0.00176 - 29 0.0405 - 30 0.00529 - 31 0.00705 - 32 0.0211 - 33 0.0282 - 34 0.0167 - 35 0.00705 - 37 0.00176 - 39 0.000881 - 40 0.142 - 41 0.16 - 42 0.074 - 43 0.00176 - 44 0.000881 - 45 0.00617 - 47 0.00793 - - 2 23 9 0 - 4 0.304 - 8 0.087 - 13 0.174 - 14 0.0435 - 15 0.13 - 20 0.13 - 21 0.0435 - 30 0.0435 - 41 0.0435 - - 13 11 5 0 - 0 0.273 - 7 0.273 - 26 0.273 - 33 0.0909 - 40 0.0909 - - 15 4 4 0 - 2 0.25 - 21 0.25 - 26 0.25 - 41 0.25 - - 41 10 6 0 - 2 0.1 - 29 0.1 - 30 0.1 - 33 0.1 - 40 0.4 - 41 0.2 - - 46 32 7 0 - 0 0.125 - 4 0.0312 - 7 0.125 - 35 0.0312 - 40 0.188 - 41 0.469 - 42 0.0312 - - 55 969 32 0 - 0 0.0949 - 1 0.00103 - 2 0.066 - 3 0.00619 - 4 0.0341 - 7 0.161 - 8 0.00413 - 12 0.032 - 13 0.0031 - 14 0.0031 - 15 0.00413 - 19 0.0031 - 20 0.00103 - 21 0.0165 - 26 0.031 - 28 0.00206 - 29 0.0433 - 30 0.0031 - 31 0.00826 - 32 0.0248 - 33 0.0299 - 34 0.0186 - 35 0.00722 - 37 0.00206 - 39 0.00103 - 40 0.143 - 41 0.156 - 42 0.0826 - 43 0.00206 - 44 0.00103 - 45 0.00413 - 47 0.00929 - - 57 57 17 0 - 0 0.0877 - 2 0.0877 - 3 0.105 - 4 0.0175 - 7 0.105 - 8 0.0351 - 12 0.0351 - 21 0.0526 - 26 0.0175 - 29 0.0351 - 30 0.0175 - 33 0.0175 - 34 0.0175 - 40 0.158 - 41 0.123 - 42 0.0351 - 45 0.0526 - - 60 2 2 0 - 0 0.5 - 21 0.5 - - 64 5 4 0 - 0 0.2 - 2 0.4 - 19 0.2 - 41 0.2 - - 59 3 3 0 - 7 0.333 - 14 0.333 - 40 0.333 - - 60 5599 31 16 - 0 0.00982 - 2 0.0179 - 3 0.00679 - 4 0.0516 - 7 0.357 - 8 0.00732 - 9 0.00411 - 12 0.00304 - 13 0.00357 - 14 0.000179 - 15 0.00304 - 19 0.00125 - 20 0.000179 - 21 0.00589 - 22 0.000179 - 25 0.000179 - 26 0.0564 - 29 0.00304 - 30 0.0025 - 31 0.00768 - 34 0.000893 - 35 0.000536 - 37 0.000179 - 40 0.187 - 41 0.219 - 42 0.0136 - 43 0.0282 - 44 0.00679 - 45 0.000357 - 46 0.000179 - 47 0.00125 - - 3 11 8 0 - 0 0.182 - 2 0.0909 - 7 0.0909 - 14 0.0909 - 26 0.0909 - 29 0.0909 - 40 0.0909 - 41 0.273 - - 4 101 15 0 - 0 0.0396 - 2 0.0297 - 4 0.0891 - 7 0.564 - 8 0.0198 - 12 0.0099 - 15 0.0297 - 19 0.0198 - 21 0.0099 - 26 0.0297 - 29 0.0099 - 31 0.0891 - 40 0.0297 - 41 0.0198 - 44 0.0099 - - 8 72 10 0 - 0 0.0278 - 7 0.486 - 12 0.0139 - 13 0.0139 - 21 0.0278 - 26 0.0694 - 31 0.0139 - 40 0.125 - 41 0.208 - 44 0.0139 - - 13 49 7 0 - 4 0.0612 - 7 0.327 - 21 0.0204 - 34 0.0204 - 40 0.224 - 41 0.327 - 44 0.0204 - - 14 21 6 0 - 7 0.0476 - 19 0.0476 - 30 0.0476 - 40 0.714 - 41 0.0952 - 42 0.0476 - - 20 12 3 0 - 7 0.833 - 8 0.0833 - 40 0.0833 - - 21 8 4 0 - 4 0.125 - 7 0.5 - 40 0.25 - 42 0.125 - - 30 4 3 0 - 7 0.5 - 12 0.25 - 40 0.25 - - 31 30 8 0 - 0 0.1 - 4 0.0667 - 7 0.433 - 13 0.0333 - 26 0.0667 - 31 0.0667 - 40 0.133 - 41 0.1 - - 39 9 7 0 - 2 0.111 - 4 0.222 - 26 0.111 - 40 0.222 - 41 0.111 - 43 0.111 - 47 0.111 - - 42 1 1 0 - 47 1 - - 44 2 1 0 - 43 1 - - 47 5218 30 0 - 0 0.00824 - 2 0.0178 - 3 0.00728 - 4 0.0519 - 7 0.353 - 8 0.00709 - 9 0.00422 - 12 0.00268 - 13 0.00345 - 15 0.00268 - 19 0.000767 - 20 0.000192 - 21 0.00556 - 22 0.000192 - 25 0.000192 - 26 0.0583 - 29 0.00268 - 30 0.00249 - 31 0.00594 - 34 0.000767 - 35 0.000575 - 37 0.000192 - 40 0.186 - 41 0.226 - 42 0.0142 - 43 0.0295 - 44 0.00652 - 45 0.000383 - 46 0.000192 - 47 0.000958 - - 48 6 3 0 - 7 0.167 - 40 0.667 - 44 0.167 - - 55 34 8 0 - 0 0.0294 - 2 0.0588 - 7 0.441 - 8 0.0294 - 9 0.0294 - 29 0.0294 - 40 0.265 - 41 0.118 - - 60 16 4 0 - 4 0.0625 - 7 0.125 - 40 0.688 - 41 0.125 - - 61 43 6 0 - 0 0.0233 - 29 0.0233 - 33 0.0233 - 40 0.465 - 41 0.395 - 42 0.0698 - - 62 1601 28 11 - 0 0.0431 - 2 0.02 - 3 0.000625 - 4 0.00187 - 7 0.03 - 8 0.000625 - 12 0.02 - 15 0.00125 - 19 0.000625 - 21 0.0075 - 22 0.00125 - 26 0.00187 - 28 0.000625 - 29 0.0169 - 30 0.000625 - 31 0.00125 - 32 0.0025 - 33 0.00937 - 34 0.000625 - 37 0.00125 - 40 0.626 - 41 0.176 - 42 0.0162 - 43 0.00312 - 44 0.00125 - 45 0.00187 - 46 0.00874 - 47 0.005 - - 2 20 3 0 - 29 0.05 - 40 0.75 - 41 0.2 - - 4 2 2 0 - 40 0.5 - 43 0.5 - - 8 5 4 0 - 40 0.4 - 41 0.2 - 43 0.2 - 46 0.2 - - 13 936 26 0 - 0 0.0513 - 2 0.016 - 3 0.00107 - 4 0.00214 - 7 0.031 - 8 0.00107 - 12 0.0246 - 15 0.00107 - 19 0.00107 - 21 0.00962 - 22 0.00107 - 26 0.00321 - 28 0.00107 - 29 0.0214 - 31 0.00214 - 33 0.0118 - 34 0.00107 - 37 0.00214 - 40 0.607 - 41 0.185 - 42 0.0139 - 43 0.00107 - 44 0.00107 - 45 0.00321 - 46 0.00321 - 47 0.00321 - - 14 215 16 0 - 0 0.0698 - 2 0.0419 - 4 0.00465 - 7 0.0512 - 12 0.0279 - 15 0.00465 - 21 0.0093 - 22 0.00465 - 29 0.0233 - 30 0.00465 - 32 0.014 - 33 0.00465 - 40 0.581 - 41 0.144 - 42 0.00465 - 47 0.0093 - - 41 42 5 0 - 2 0.0714 - 40 0.548 - 41 0.333 - 42 0.0238 - 43 0.0238 - - 42 99 5 0 - 40 0.889 - 41 0.0303 - 42 0.0505 - 46 0.0101 - 47 0.0202 - - 45 38 4 0 - 40 0.553 - 41 0.184 - 42 0.0263 - 46 0.237 - - 47 8 4 0 - 12 0.25 - 33 0.125 - 40 0.5 - 47 0.125 - - 55 65 7 0 - 0 0.0154 - 2 0.0462 - 7 0.0615 - 40 0.569 - 41 0.246 - 42 0.0462 - 44 0.0154 - - 57 132 12 0 - 0 0.0303 - 2 0.00758 - 7 0.0227 - 12 0.00758 - 21 0.00758 - 29 0.00758 - 32 0.00758 - 33 0.0152 - 40 0.689 - 41 0.182 - 42 0.0152 - 43 0.00758 - - 64 9765 30 13 - 0 0.0406 - 2 0.012 - 4 0.00113 - 7 0.0138 - 8 0.000102 - 12 0.015 - 13 0.00041 - 14 0.000102 - 15 0.000307 - 19 0.000819 - 20 0.000102 - 21 0.00379 - 22 0.000307 - 26 0.00379 - 28 0.000614 - 29 0.0086 - 30 0.00102 - 31 0.000512 - 32 0.0044 - 33 0.00287 - 34 0.00041 - 37 0.000205 - 40 0.613 - 41 0.245 - 42 0.0247 - 43 0.00143 - 44 0.00164 - 45 0.00113 - 46 0.00113 - 47 0.00113 - - 2 12 3 0 - 40 0.75 - 41 0.0833 - 42 0.167 - - 8 2 2 0 - 40 0.5 - 44 0.5 - - 13 484 13 0 - 0 0.0331 - 2 0.00826 - 7 0.00413 - 12 0.0145 - 26 0.00207 - 29 0.0124 - 33 0.00826 - 40 0.731 - 41 0.157 - 42 0.0227 - 43 0.00207 - 45 0.00207 - 46 0.00207 - - 14 162 8 0 - 0 0.037 - 2 0.00617 - 12 0.00617 - 29 0.0123 - 32 0.00617 - 40 0.79 - 41 0.136 - 42 0.00617 - - 41 2797 15 0 - 0 0.00465 - 2 0.00107 - 4 0.000358 - 7 0.000358 - 12 0.000715 - 15 0.000358 - 21 0.000715 - 29 0.0025 - 33 0.000715 - 40 0.555 - 41 0.417 - 42 0.0136 - 43 0.000715 - 44 0.000358 - 47 0.00179 - - 42 55 4 0 - 40 0.545 - 41 0.0364 - 42 0.4 - 46 0.0182 - - 44 1 1 0 - 43 1 - - 46 78 5 0 - 2 0.0128 - 40 0.718 - 41 0.244 - 42 0.0128 - 44 0.0128 - - 49 18 3 0 - 22 0.0556 - 40 0.667 - 41 0.278 - - 55 5353 30 0 - 0 0.0616 - 2 0.0189 - 4 0.00187 - 7 0.023 - 8 0.000187 - 12 0.023 - 13 0.000747 - 14 0.000187 - 15 0.000374 - 19 0.00149 - 20 0.000187 - 21 0.00654 - 22 0.000187 - 26 0.00579 - 28 0.000934 - 29 0.0116 - 30 0.00187 - 31 0.000747 - 32 0.0071 - 33 0.00411 - 34 0.000747 - 37 0.000374 - 40 0.611 - 41 0.181 - 42 0.0275 - 43 0.00187 - 44 0.00205 - 45 0.00168 - 46 0.00168 - 47 0.00112 - - 57 678 15 0 - 0 0.0383 - 2 0.00885 - 7 0.0133 - 12 0.0192 - 22 0.00147 - 26 0.00737 - 28 0.00147 - 29 0.00885 - 31 0.00147 - 32 0.0059 - 40 0.715 - 41 0.15 - 42 0.0236 - 44 0.00295 - 45 0.00147 - - 58 36 4 0 - 0 0.0278 - 40 0.806 - 41 0.111 - 42 0.0556 - - 69 29 3 0 - 40 0.862 - 41 0.103 - 42 0.0345 - - 65 9 3 0 - 40 0.444 - 46 0.222 - 47 0.333 - - 67 5 4 0 - 40 0.4 - 42 0.2 - 46 0.2 - 47 0.2 - - 68 68 9 1 - 0 0.0294 - 2 0.0294 - 7 0.0882 - 26 0.0294 - 29 0.0294 - 32 0.0441 - 40 0.603 - 41 0.103 - 42 0.0441 - - 57 10 3 0 - 2 0.2 - 40 0.7 - 42 0.1 - - 69 4817 31 8 - 0 0.0619 - 2 0.0199 - 3 0.000415 - 4 0.00166 - 7 0.0309 - 8 0.00145 - 12 0.0276 - 13 0.000415 - 15 0.000208 - 21 0.0083 - 22 0.00083 - 25 0.000208 - 26 0.00851 - 28 0.00104 - 29 0.0324 - 30 0.00208 - 31 0.00415 - 32 0.0129 - 33 0.00893 - 34 0.00353 - 35 0.000623 - 37 0.000415 - 39 0.000208 - 40 0.478 - 41 0.256 - 42 0.0286 - 43 0.00332 - 44 0.00145 - 45 0.00083 - 46 0.00104 - 47 0.00187 - - 41 789 13 0 - 0 0.00634 - 2 0.00253 - 7 0.0152 - 12 0.00127 - 21 0.00127 - 26 0.00253 - 29 0.0139 - 32 0.00253 - 33 0.00634 - 40 0.326 - 41 0.597 - 42 0.0228 - 47 0.00253 - - 42 8 2 0 - 40 0.25 - 42 0.75 - - 44 2 1 0 - 43 1 - - 45 5 5 0 - 0 0.2 - 8 0.2 - 40 0.2 - 41 0.2 - 44 0.2 - - 46 31 6 0 - 0 0.0323 - 21 0.0323 - 32 0.0323 - 40 0.516 - 41 0.355 - 45 0.0323 - - 48 7 1 0 - 41 1 - - 55 3706 31 0 - 0 0.0739 - 2 0.0237 - 3 0.00054 - 4 0.00216 - 7 0.0351 - 8 0.00162 - 12 0.0351 - 13 0.00054 - 15 0.00027 - 21 0.00944 - 22 0.000809 - 25 0.00027 - 26 0.0105 - 28 0.00135 - 29 0.0364 - 30 0.0027 - 31 0.0054 - 32 0.0159 - 33 0.0103 - 34 0.00459 - 35 0.000809 - 37 0.00054 - 39 0.00027 - 40 0.502 - 41 0.188 - 42 0.0286 - 43 0.00324 - 44 0.00162 - 45 0.000809 - 46 0.00135 - 47 0.00189 - - 57 248 11 0 - 0 0.0645 - 2 0.0202 - 7 0.0282 - 12 0.00806 - 21 0.0121 - 22 0.00403 - 29 0.0403 - 40 0.597 - 41 0.185 - 42 0.0323 - 43 0.00806 - - 73 3 3 0 - 0 0.333 - 32 0.333 - 41 0.333 - - 74 16 7 0 - 0 0.0625 - 26 0.0625 - 35 0.0625 - 40 0.125 - 41 0.125 - 42 0.0625 - 47 0.5 - -56 3639 35 22 - 0 0.0231 - 2 0.288 - 3 0.00302 - 4 0.00769 - 6 0.000275 - 7 0.104 - 8 0.0445 - 9 0.0011 - 12 0.0115 - 13 0.0409 - 14 0.0168 - 15 0.0176 - 16 0.00055 - 18 0.000824 - 20 0.000275 - 21 0.0055 - 23 0.000275 - 26 0.00907 - 28 0.0011 - 29 0.00632 - 30 0.00467 - 31 0.0055 - 32 0.0121 - 33 0.00247 - 34 0.00632 - 35 0.00467 - 37 0.000275 - 39 0.0022 - 40 0.144 - 41 0.192 - 42 0.00714 - 43 0.00055 - 44 0.0118 - 45 0.0011 - 46 0.0231 - - 2 357 16 3 - 3 0.0224 - 4 0.0056 - 8 0.361 - 9 0.0112 - 13 0.325 - 14 0.0728 - 15 0.126 - 16 0.0028 - 20 0.0028 - 21 0.0196 - 23 0.0028 - 30 0.0084 - 31 0.014 - 33 0.0028 - 39 0.0112 - 45 0.0112 - - 41 17 7 0 - 8 0.118 - 13 0.412 - 14 0.0588 - 15 0.118 - 31 0.0588 - 39 0.176 - 45 0.0588 - - 46 3 1 0 - 45 1 - - 56 337 15 0 - 3 0.0237 - 4 0.00593 - 8 0.377 - 9 0.0119 - 13 0.323 - 14 0.0742 - 15 0.128 - 16 0.00297 - 20 0.00297 - 21 0.0208 - 23 0.00297 - 30 0.0089 - 31 0.0119 - 33 0.00297 - 39 0.00297 - - 3 7 5 0 - 2 0.286 - 4 0.286 - 40 0.143 - 41 0.143 - 46 0.143 - - 6 7 3 0 - 40 0.286 - 41 0.286 - 46 0.429 - - 13 392 19 8 - 0 0.0102 - 2 0.416 - 7 0.148 - 12 0.0102 - 14 0.0051 - 21 0.00255 - 26 0.0102 - 29 0.0051 - 30 0.00255 - 31 0.00255 - 32 0.0051 - 33 0.00255 - 34 0.0051 - 35 0.00255 - 39 0.00255 - 40 0.107 - 41 0.24 - 42 0.0051 - 46 0.0179 - - 3 7 5 0 - 2 0.429 - 7 0.143 - 14 0.143 - 31 0.143 - 40 0.143 - - 4 4 2 0 - 41 0.25 - 46 0.75 - - 8 107 13 0 - 0 0.00935 - 2 0.271 - 7 0.15 - 12 0.0187 - 21 0.00935 - 26 0.00935 - 29 0.00935 - 32 0.0187 - 34 0.0187 - 40 0.103 - 41 0.355 - 42 0.00935 - 46 0.0187 - - 9 1 1 0 - 42 1 - - 13 89 11 0 - 0 0.0337 - 2 0.371 - 7 0.169 - 12 0.0112 - 26 0.0112 - 29 0.0112 - 33 0.0112 - 39 0.0112 - 40 0.135 - 41 0.225 - 46 0.0112 - - 14 6 2 0 - 2 0.5 - 40 0.5 - - 30 8 3 0 - 7 0.125 - 40 0.5 - 41 0.375 - - 47 147 10 0 - 2 0.565 - 7 0.156 - 12 0.0068 - 14 0.0068 - 26 0.0136 - 30 0.0068 - 35 0.0068 - 40 0.0544 - 41 0.177 - 46 0.0068 - - 14 312 22 7 - 0 0.0353 - 2 0.385 - 4 0.00321 - 7 0.0994 - 8 0.016 - 12 0.00962 - 14 0.00321 - 21 0.00321 - 26 0.0192 - 28 0.00321 - 29 0.00641 - 30 0.00962 - 31 0.00641 - 32 0.0192 - 34 0.00962 - 35 0.00962 - 40 0.128 - 41 0.212 - 42 0.00321 - 43 0.00321 - 44 0.00641 - 46 0.00962 - - 8 75 12 0 - 0 0.0267 - 2 0.333 - 7 0.0933 - 8 0.0533 - 21 0.0133 - 26 0.04 - 28 0.0133 - 29 0.0133 - 35 0.0133 - 40 0.2 - 41 0.187 - 46 0.0133 - - 13 93 15 0 - 0 0.0753 - 2 0.312 - 4 0.0108 - 7 0.118 - 12 0.0215 - 30 0.0108 - 31 0.0215 - 32 0.0323 - 34 0.0108 - 35 0.0215 - 40 0.172 - 41 0.161 - 43 0.0108 - 44 0.0108 - 46 0.0108 - - 15 6 5 0 - 2 0.333 - 12 0.167 - 26 0.167 - 29 0.167 - 41 0.167 - - 21 3 3 0 - 2 0.333 - 7 0.333 - 14 0.333 - - 31 5 5 0 - 0 0.2 - 2 0.2 - 30 0.2 - 41 0.2 - 44 0.2 - - 45 1 1 0 - 46 1 - - 47 111 10 0 - 2 0.523 - 7 0.0721 - 8 0.00901 - 26 0.018 - 30 0.00901 - 32 0.027 - 34 0.018 - 40 0.0631 - 41 0.252 - 42 0.00901 - - 15 139 12 3 - 0 0.00719 - 2 0.266 - 7 0.0719 - 14 0.00719 - 18 0.0216 - 29 0.00719 - 32 0.0144 - 33 0.00719 - 40 0.194 - 41 0.223 - 44 0.0863 - 46 0.0935 - - 3 3 3 0 - 2 0.333 - 7 0.333 - 14 0.333 - - 15 83 9 0 - 2 0.265 - 7 0.012 - 29 0.012 - 32 0.0241 - 33 0.012 - 40 0.229 - 41 0.253 - 44 0.12 - 46 0.0723 - - 47 45 8 0 - 0 0.0222 - 2 0.244 - 7 0.178 - 18 0.0667 - 40 0.156 - 41 0.156 - 44 0.0444 - 46 0.133 - - 16 12 6 0 - 0 0.0833 - 2 0.417 - 7 0.0833 - 41 0.25 - 42 0.0833 - 46 0.0833 - - 18 3 3 0 - 0 0.333 - 7 0.333 - 12 0.333 - - 30 2 2 0 - 2 0.5 - 4 0.5 - - 33 1 1 0 - 4 1 - - 41 116 15 1 - 0 0.0172 - 2 0.155 - 3 0.00862 - 4 0.0259 - 6 0.00862 - 7 0.0172 - 8 0.138 - 13 0.267 - 14 0.19 - 15 0.103 - 16 0.00862 - 21 0.0172 - 31 0.00862 - 35 0.00862 - 46 0.0259 - - 57 3 3 0 - 0 0.333 - 21 0.333 - 46 0.333 - - 42 3 3 0 - 4 0.333 - 32 0.333 - 37 0.333 - - 45 3 1 0 - 15 1 - - 46 8 4 0 - 2 0.5 - 7 0.125 - 29 0.125 - 34 0.25 - - 47 1311 27 19 - 0 0.032 - 2 0.263 - 3 0.00153 - 4 0.00763 - 7 0.127 - 8 0.00458 - 12 0.016 - 13 0.000763 - 14 0.00381 - 15 0.00153 - 21 0.00381 - 26 0.0114 - 28 0.00153 - 29 0.00839 - 30 0.00534 - 31 0.00534 - 32 0.0168 - 33 0.00305 - 34 0.00763 - 35 0.0061 - 39 0.00153 - 40 0.2 - 41 0.222 - 42 0.00839 - 43 0.000763 - 44 0.0114 - 46 0.029 - - 2 2 2 0 - 3 0.5 - 30 0.5 - - 3 7 5 0 - 2 0.286 - 4 0.286 - 40 0.143 - 41 0.143 - 46 0.143 - - 6 7 3 0 - 40 0.286 - 41 0.286 - 46 0.429 - - 13 389 18 0 - 0 0.0103 - 2 0.419 - 7 0.147 - 12 0.0103 - 14 0.00514 - 21 0.00257 - 26 0.00771 - 29 0.00514 - 31 0.00257 - 32 0.00514 - 33 0.00257 - 34 0.00514 - 35 0.00257 - 39 0.00257 - 40 0.108 - 41 0.242 - 42 0.00514 - 46 0.018 - - 14 310 22 0 - 0 0.0355 - 2 0.387 - 4 0.00323 - 7 0.0968 - 8 0.0161 - 12 0.00968 - 14 0.00323 - 21 0.00323 - 26 0.0194 - 28 0.00323 - 29 0.00645 - 30 0.00968 - 31 0.00645 - 32 0.0194 - 34 0.00968 - 35 0.00968 - 40 0.129 - 41 0.213 - 42 0.00323 - 43 0.00323 - 44 0.00645 - 46 0.00645 - - 15 135 11 0 - 0 0.00741 - 2 0.274 - 7 0.0667 - 14 0.00741 - 29 0.00741 - 32 0.0148 - 33 0.00741 - 40 0.2 - 41 0.23 - 44 0.0889 - 46 0.0963 - - 16 12 6 0 - 0 0.0833 - 2 0.417 - 7 0.0833 - 41 0.25 - 42 0.0833 - 46 0.0833 - - 18 3 3 0 - 0 0.333 - 7 0.333 - 12 0.333 - - 30 2 2 0 - 2 0.5 - 4 0.5 - - 33 1 1 0 - 4 1 - - 41 7 5 0 - 0 0.286 - 2 0.143 - 3 0.143 - 7 0.286 - 31 0.143 - - 46 3 3 0 - 2 0.333 - 7 0.333 - 29 0.333 - - 48 4 1 0 - 40 1 - - 55 8 4 0 - 7 0.125 - 40 0.5 - 41 0.25 - 46 0.125 - - 56 346 23 0 - 0 0.0578 - 2 0.00867 - 4 0.0116 - 7 0.173 - 8 0.00289 - 12 0.0289 - 14 0.00289 - 21 0.00578 - 26 0.0173 - 28 0.00289 - 29 0.0145 - 30 0.00867 - 31 0.00867 - 32 0.0318 - 33 0.00578 - 34 0.0145 - 35 0.0116 - 39 0.00289 - 40 0.344 - 41 0.22 - 42 0.0116 - 44 0.00289 - 46 0.0116 - - 57 45 12 0 - 0 0.0222 - 2 0.0667 - 4 0.0222 - 7 0.0889 - 12 0.0667 - 13 0.0222 - 15 0.0444 - 21 0.0222 - 40 0.333 - 41 0.2 - 42 0.0222 - 46 0.0889 - - 58 13 4 0 - 2 0.308 - 40 0.308 - 41 0.231 - 42 0.154 - - 60 3 1 0 - 41 1 - - 64 5 4 0 - 0 0.2 - 40 0.4 - 41 0.2 - 46 0.2 - - 48 4 1 0 - 40 1 - - 55 20 9 1 - 2 0.05 - 7 0.35 - 29 0.05 - 31 0.05 - 34 0.05 - 40 0.2 - 41 0.1 - 42 0.1 - 46 0.05 - - 47 10 6 0 - 2 0.1 - 7 0.5 - 29 0.1 - 31 0.1 - 34 0.1 - 42 0.1 - - 56 860 23 4 - 0 0.0233 - 2 0.395 - 4 0.00698 - 7 0.11 - 8 0.00581 - 12 0.0116 - 14 0.00465 - 21 0.00349 - 26 0.0093 - 28 0.00116 - 29 0.00581 - 30 0.00349 - 31 0.00349 - 32 0.0128 - 33 0.00233 - 34 0.00581 - 35 0.00465 - 39 0.00116 - 40 0.138 - 41 0.217 - 42 0.00698 - 44 0.0163 - 46 0.0093 - - 2 351 23 0 - 0 0.057 - 2 0.0114 - 4 0.0114 - 7 0.177 - 8 0.00285 - 12 0.0285 - 14 0.0114 - 21 0.0057 - 26 0.0171 - 28 0.00285 - 29 0.0142 - 30 0.00855 - 31 0.00855 - 32 0.0313 - 33 0.0057 - 34 0.0142 - 35 0.0114 - 39 0.00285 - 40 0.328 - 41 0.225 - 42 0.0114 - 44 0.00285 - 46 0.0114 - - 41 83 2 0 - 2 0.675 - 41 0.325 - - 45 8 3 0 - 40 0.25 - 41 0.25 - 46 0.5 - - 47 414 9 0 - 2 0.676 - 4 0.00483 - 7 0.0773 - 8 0.00966 - 21 0.00242 - 26 0.00483 - 41 0.188 - 42 0.00483 - 44 0.0314 - - 57 50 12 0 - 0 0.02 - 2 0.06 - 4 0.02 - 7 0.12 - 12 0.06 - 13 0.02 - 15 0.04 - 21 0.02 - 40 0.3 - 41 0.24 - 42 0.02 - 46 0.08 - - 58 14 4 0 - 2 0.286 - 40 0.286 - 41 0.286 - 42 0.143 - - 60 3 1 0 - 41 1 - - 64 6 4 0 - 0 0.167 - 40 0.333 - 41 0.333 - 46 0.167 - -57 285122 47 41 - 0 0.025 - 1 0.000582 - 2 0.0249 - 3 0.0218 - 4 0.118 - 5 0.000179 - 6 8.77e-05 - 7 0.0779 - 8 0.0345 - 9 0.00187 - 10 0.000544 - 12 0.0081 - 13 0.0408 - 14 0.0204 - 15 0.0544 - 16 0.000593 - 17 0.000368 - 18 0.000154 - 19 0.00467 - 20 0.0129 - 21 0.012 - 22 0.000722 - 23 7.01e-05 - 24 2.1e-05 - 25 1.4e-05 - 26 0.018 - 27 7.01e-06 - 28 0.000656 - 29 0.0139 - 30 0.013 - 31 0.0035 - 32 0.00343 - 33 0.0038 - 34 0.00234 - 35 0.00156 - 36 1.05e-05 - 37 0.00221 - 38 0.000277 - 39 0.0111 - 40 0.28 - 41 0.164 - 42 0.0145 - 43 0.00169 - 44 0.00118 - 45 0.00235 - 46 0.00192 - 47 0.00108 - - 2 472 17 6 - 3 0.00847 - 4 0.0275 - 7 0.684 - 8 0.0424 - 9 0.00636 - 13 0.0169 - 14 0.0169 - 15 0.0106 - 20 0.00212 - 21 0.0826 - 22 0.00212 - 26 0.0742 - 30 0.00424 - 31 0.00424 - 39 0.00212 - 41 0.0127 - 45 0.00212 - - 3 1 1 0 - 3 1 - - 7 33 2 0 - 4 0.0606 - 7 0.939 - - 41 83 8 0 - 3 0.0241 - 4 0.012 - 7 0.602 - 21 0.253 - 22 0.012 - 26 0.0723 - 31 0.012 - 45 0.012 - - 47 56 10 0 - 3 0.0179 - 4 0.179 - 8 0.357 - 9 0.0357 - 13 0.125 - 14 0.143 - 15 0.0714 - 30 0.0357 - 31 0.0179 - 39 0.0179 - - 55 3 3 0 - 13 0.333 - 15 0.333 - 20 0.333 - - 57 280 5 0 - 7 0.807 - 9 0.00357 - 21 0.0643 - 26 0.104 - 41 0.0214 - - 6 13 5 0 - 4 0.154 - 8 0.231 - 14 0.0769 - 15 0.462 - 39 0.0769 - - 7 83957 45 12 - 0 0.000107 - 1 0.00155 - 2 0.00102 - 3 0.0553 - 4 0.345 - 5 3.57e-05 - 6 0.000226 - 7 0.0167 - 8 0.0969 - 9 0.00506 - 10 0.00163 - 12 4.76e-05 - 13 0.119 - 14 0.0601 - 15 0.16 - 16 0.00185 - 17 0.00114 - 19 0.00769 - 20 0.0394 - 21 0.0123 - 22 0.000643 - 23 0.000167 - 25 1.19e-05 - 26 0.000798 - 27 1.19e-05 - 28 0.000119 - 29 2.38e-05 - 30 0.0324 - 31 0.00273 - 32 1.19e-05 - 33 2.38e-05 - 34 0.000226 - 35 0.00219 - 36 1.19e-05 - 37 0.00157 - 38 0.000584 - 39 0.0269 - 40 0.000655 - 41 0.000691 - 42 0.000202 - 43 3.57e-05 - 44 0.00031 - 45 0.00479 - 46 0.000119 - 47 0.000191 - - 2 40 9 0 - 3 0.025 - 4 0.35 - 7 0.1 - 8 0.025 - 13 0.175 - 14 0.05 - 15 0.225 - 19 0.025 - 20 0.025 - - 4 18 7 0 - 2 0.167 - 4 0.278 - 13 0.0556 - 14 0.0556 - 15 0.278 - 20 0.111 - 40 0.0556 - - 7 356 14 0 - 3 0.00562 - 4 0.41 - 8 0.16 - 9 0.0281 - 13 0.129 - 14 0.0927 - 15 0.0365 - 20 0.0871 - 21 0.00281 - 30 0.014 - 31 0.014 - 35 0.00281 - 39 0.00281 - 45 0.014 - - 8 342 16 0 - 3 0.00292 - 4 0.146 - 7 0.00585 - 8 0.12 - 9 0.00585 - 13 0.184 - 14 0.0848 - 15 0.371 - 20 0.00292 - 21 0.00585 - 30 0.0263 - 31 0.00292 - 32 0.00292 - 37 0.00585 - 41 0.00585 - 45 0.0263 - - 21 289 21 0 - 1 0.0138 - 3 0.0346 - 4 0.301 - 7 0.0484 - 8 0.0934 - 9 0.00346 - 10 0.00346 - 13 0.111 - 14 0.0484 - 15 0.0727 - 19 0.00346 - 20 0.0381 - 21 0.0277 - 26 0.0104 - 28 0.00692 - 30 0.163 - 31 0.00346 - 35 0.00346 - 39 0.00346 - 41 0.00346 - 45 0.00692 - - 22 5 4 0 - 4 0.4 - 14 0.2 - 15 0.2 - 28 0.2 - - 44 1 1 0 - 43 1 - - 45 5 4 0 - 4 0.2 - 13 0.4 - 21 0.2 - 30 0.2 - - 47 82196 44 0 - 0 0.000109 - 1 0.0015 - 2 0.00101 - 3 0.0561 - 4 0.345 - 5 3.65e-05 - 6 0.000231 - 7 0.0161 - 8 0.0969 - 9 0.00495 - 10 0.00164 - 12 4.87e-05 - 13 0.118 - 14 0.0599 - 15 0.16 - 16 0.00189 - 17 0.00117 - 19 0.00779 - 20 0.0393 - 21 0.0123 - 22 0.000657 - 23 0.00017 - 25 1.22e-05 - 26 0.000766 - 27 1.22e-05 - 28 8.52e-05 - 29 2.43e-05 - 30 0.032 - 31 0.0027 - 33 1.22e-05 - 34 0.000231 - 35 0.0022 - 36 1.22e-05 - 37 0.00157 - 38 0.000596 - 39 0.0274 - 40 0.000657 - 41 0.000645 - 42 0.000207 - 43 2.43e-05 - 44 0.000316 - 45 0.00467 - 46 0.000109 - 47 0.000182 - - 49 561 20 0 - 1 0.00535 - 3 0.0232 - 4 0.385 - 7 0.0945 - 8 0.0731 - 9 0.00891 - 10 0.00178 - 13 0.171 - 14 0.0624 - 15 0.0838 - 19 0.00713 - 20 0.0285 - 21 0.00535 - 30 0.0357 - 33 0.00178 - 35 0.00178 - 39 0.00357 - 45 0.00357 - 46 0.00178 - 47 0.00178 - - 55 124 13 0 - 3 0.0242 - 4 0.54 - 8 0.0403 - 13 0.0968 - 14 0.00806 - 15 0.0645 - 20 0.105 - 21 0.0161 - 26 0.00806 - 30 0.0645 - 37 0.00806 - 39 0.00806 - 41 0.0161 - - 57 8 4 0 - 4 0.125 - 7 0.625 - 13 0.125 - 21 0.125 - - 8 27 13 0 - 3 0.0741 - 4 0.111 - 9 0.037 - 13 0.148 - 14 0.111 - 15 0.111 - 19 0.037 - 20 0.037 - 26 0.111 - 30 0.111 - 39 0.037 - 40 0.037 - 46 0.037 - - 13 8 4 0 - 3 0.125 - 15 0.375 - 40 0.25 - 41 0.25 - - 14 6 4 0 - 2 0.167 - 32 0.167 - 40 0.333 - 41 0.333 - - 15 12 4 0 - 4 0.25 - 14 0.0833 - 15 0.583 - 16 0.0833 - - 20 2 1 0 - 14 1 - - 21 132 17 5 - 2 0.00758 - 3 0.0227 - 4 0.0985 - 7 0.205 - 8 0.114 - 9 0.00758 - 13 0.0455 - 14 0.00758 - 15 0.0379 - 19 0.0303 - 20 0.0227 - 21 0.197 - 26 0.0455 - 30 0.053 - 31 0.0227 - 40 0.0455 - 41 0.0379 - - 2 14 2 0 - 7 0.714 - 26 0.286 - - 7 10 5 0 - 4 0.1 - 19 0.1 - 21 0.1 - 40 0.3 - 41 0.4 - - 41 14 4 0 - 7 0.786 - 21 0.0714 - 26 0.0714 - 30 0.0714 - - 47 80 15 0 - 2 0.0125 - 3 0.0375 - 4 0.138 - 7 0.05 - 8 0.162 - 9 0.0125 - 13 0.075 - 15 0.0125 - 19 0.025 - 20 0.0375 - 21 0.275 - 26 0.0125 - 30 0.075 - 31 0.0375 - 40 0.0375 - - 49 8 6 0 - 4 0.125 - 8 0.25 - 14 0.125 - 15 0.25 - 19 0.125 - 21 0.125 - - 22 2 2 0 - 8 0.5 - 14 0.5 - - 23 4 2 0 - 26 0.5 - 41 0.5 - - 24 55 14 0 - 0 0.0364 - 3 0.0545 - 4 0.145 - 7 0.182 - 8 0.0545 - 14 0.0364 - 15 0.0727 - 21 0.0364 - 26 0.145 - 30 0.0182 - 31 0.0182 - 40 0.145 - 41 0.0182 - 45 0.0364 - - 26 8661 37 4 - 0 0.000231 - 1 0.00115 - 2 0.00104 - 3 0.158 - 4 0.289 - 6 0.000231 - 7 0.00912 - 8 0.0774 - 9 0.00774 - 10 0.000577 - 13 0.0784 - 14 0.0602 - 15 0.116 - 16 0.00115 - 17 0.000808 - 19 0.0128 - 20 0.0344 - 21 0.0102 - 22 0.000693 - 23 0.000115 - 27 0.000115 - 28 0.00739 - 30 0.0172 - 31 0.00323 - 34 0.000346 - 35 0.00254 - 37 0.000693 - 38 0.00346 - 39 0.1 - 40 0.000462 - 41 0.00104 - 42 0.000115 - 43 0.000115 - 44 0.000346 - 45 0.00323 - 46 0.000115 - 47 0.000462 - - 8 12 6 0 - 4 0.417 - 8 0.0833 - 13 0.167 - 14 0.0833 - 15 0.0833 - 20 0.167 - - 21 8 4 0 - 4 0.625 - 8 0.125 - 14 0.125 - 31 0.125 - - 41 1 1 0 - 28 1 - - 49 36 8 0 - 3 0.0278 - 4 0.556 - 8 0.111 - 9 0.111 - 13 0.0833 - 14 0.0278 - 15 0.0278 - 20 0.0556 - - 28 2 2 0 - 4 0.5 - 37 0.5 - - 29 2 1 0 - 4 1 - - 30 613 21 0 - 3 0.0375 - 4 0.401 - 7 0.00489 - 8 0.106 - 9 0.00816 - 13 0.116 - 14 0.0571 - 15 0.166 - 16 0.00163 - 19 0.00163 - 20 0.0277 - 21 0.00326 - 22 0.00163 - 25 0.00163 - 30 0.0147 - 31 0.00816 - 37 0.00489 - 39 0.0245 - 41 0.00326 - 42 0.00163 - 45 0.00816 - - 31 57 10 0 - 4 0.526 - 7 0.123 - 8 0.0877 - 13 0.0175 - 15 0.0877 - 19 0.0351 - 20 0.0702 - 29 0.0175 - 30 0.0175 - 35 0.0175 - - 40 16 3 0 - 40 0.188 - 46 0.125 - 47 0.688 - - 41 284 20 7 - 0 0.0106 - 2 0.317 - 3 0.00704 - 4 0.173 - 5 0.00352 - 7 0.19 - 8 0.00704 - 13 0.00704 - 15 0.00352 - 19 0.00352 - 20 0.00352 - 21 0.148 - 22 0.00704 - 26 0.0634 - 28 0.00704 - 29 0.0106 - 34 0.00704 - 37 0.00352 - 45 0.0141 - 46 0.0141 - - 2 2 1 0 - 22 1 - - 7 7 3 0 - 21 0.286 - 28 0.286 - 45 0.429 - - 48 2 1 0 - 46 1 - - 49 6 4 0 - 2 0.167 - 4 0.167 - 7 0.5 - 34 0.167 - - 52 3 2 0 - 13 0.667 - 20 0.333 - - 55 71 12 0 - 0 0.0282 - 2 0.0423 - 4 0.62 - 5 0.0141 - 7 0.169 - 8 0.0282 - 15 0.0141 - 19 0.0141 - 21 0.0141 - 26 0.0141 - 29 0.0282 - 46 0.0141 - - 57 189 11 0 - 0 0.00529 - 2 0.45 - 3 0.0106 - 4 0.0212 - 7 0.206 - 21 0.196 - 26 0.0899 - 29 0.00529 - 34 0.00529 - 37 0.00529 - 45 0.00529 - - 42 32 10 3 - 2 0.219 - 4 0.0938 - 7 0.125 - 8 0.0312 - 13 0.0312 - 21 0.125 - 26 0.0312 - 30 0.0312 - 42 0.0312 - 47 0.281 - - 7 5 4 0 - 4 0.4 - 8 0.2 - 30 0.2 - 42 0.2 - - 55 10 2 0 - 13 0.1 - 47 0.9 - - 57 16 4 0 - 2 0.438 - 7 0.25 - 21 0.25 - 26 0.0625 - - 43 7 6 0 - 0 0.143 - 2 0.143 - 3 0.143 - 14 0.143 - 15 0.143 - 41 0.286 - - 44 4 3 0 - 4 0.25 - 15 0.5 - 21 0.25 - - 45 232 15 3 - 1 0.00862 - 3 0.00862 - 4 0.168 - 7 0.00431 - 8 0.22 - 10 0.00431 - 13 0.159 - 14 0.0517 - 15 0.241 - 19 0.00431 - 21 0.0431 - 28 0.0129 - 30 0.056 - 31 0.00431 - 35 0.0129 - - 26 17 8 0 - 3 0.0588 - 4 0.0588 - 8 0.176 - 13 0.235 - 15 0.294 - 21 0.0588 - 28 0.0588 - 30 0.0588 - - 41 2 2 0 - 10 0.5 - 15 0.5 - - 55 1 1 0 - 7 1 - - 46 72 19 4 - 0 0.0139 - 2 0.111 - 4 0.0972 - 7 0.208 - 8 0.0278 - 12 0.0278 - 13 0.0417 - 14 0.0417 - 15 0.0417 - 20 0.0139 - 21 0.0278 - 26 0.0833 - 29 0.0139 - 32 0.0139 - 33 0.0417 - 40 0.0278 - 42 0.0972 - 44 0.0139 - 47 0.0556 - - 7 10 4 0 - 4 0.4 - 14 0.3 - 15 0.2 - 20 0.1 - - 41 4 4 0 - 4 0.25 - 13 0.25 - 15 0.25 - 29 0.25 - - 55 44 14 0 - 0 0.0227 - 2 0.159 - 7 0.318 - 8 0.0455 - 12 0.0455 - 13 0.0227 - 21 0.0227 - 26 0.136 - 32 0.0227 - 33 0.0682 - 40 0.0455 - 42 0.0455 - 44 0.0227 - 47 0.0227 - - 62 2 1 0 - 42 1 - - 47 94690 45 25 - 0 0.0377 - 1 0.000127 - 2 0.0352 - 3 0.000898 - 4 0.00774 - 5 0.000253 - 6 2.11e-05 - 7 0.106 - 8 0.0044 - 9 0.000158 - 10 6.34e-05 - 12 0.0122 - 13 0.00432 - 14 0.000993 - 15 0.00449 - 16 1.06e-05 - 17 1.06e-05 - 18 0.000232 - 19 0.00299 - 20 0.00018 - 21 0.0112 - 22 0.00075 - 23 3.17e-05 - 24 3.17e-05 - 25 1.06e-05 - 26 0.0254 - 28 0.00057 - 29 0.0208 - 30 0.00416 - 31 0.00387 - 32 0.00516 - 33 0.00571 - 34 0.00339 - 35 0.00124 - 36 1.06e-05 - 37 0.00257 - 39 9.5e-05 - 40 0.421 - 41 0.245 - 42 0.0216 - 43 0.0025 - 44 0.00162 - 45 0.0012 - 46 0.00251 - 47 0.00163 - - 7 248 21 0 - 0 0.0282 - 2 0.121 - 4 0.0685 - 7 0.117 - 8 0.0242 - 12 0.0161 - 13 0.0121 - 14 0.0121 - 15 0.0121 - 20 0.00403 - 21 0.0323 - 22 0.00403 - 26 0.0323 - 29 0.00403 - 31 0.00806 - 37 0.00806 - 40 0.222 - 41 0.169 - 42 0.0363 - 43 0.00403 - 47 0.0645 - - 8 4 2 0 - 26 0.75 - 40 0.25 - - 14 6 4 0 - 2 0.167 - 32 0.167 - 40 0.333 - 41 0.333 - - 21 20 8 0 - 2 0.05 - 4 0.05 - 7 0.2 - 19 0.05 - 21 0.05 - 26 0.05 - 40 0.3 - 41 0.25 - - 23 4 2 0 - 26 0.5 - 41 0.5 - - 24 17 7 0 - 0 0.118 - 7 0.176 - 15 0.0588 - 21 0.0588 - 26 0.0588 - 40 0.471 - 41 0.0588 - - 26 38 12 0 - 0 0.0526 - 2 0.0789 - 4 0.0526 - 7 0.237 - 14 0.0263 - 15 0.0526 - 19 0.0263 - 21 0.0526 - 23 0.0263 - 40 0.105 - 41 0.184 - 47 0.105 - - 40 11 1 0 - 47 1 - - 41 27 12 0 - 0 0.111 - 2 0.0741 - 3 0.037 - 4 0.185 - 5 0.037 - 7 0.185 - 15 0.037 - 19 0.037 - 21 0.037 - 26 0.148 - 29 0.0741 - 45 0.037 - - 42 10 2 0 - 13 0.1 - 47 0.9 - - 43 4 3 0 - 0 0.25 - 2 0.25 - 41 0.5 - - 46 58 17 0 - 0 0.0172 - 2 0.138 - 4 0.0345 - 7 0.259 - 8 0.0345 - 12 0.0345 - 13 0.0172 - 15 0.0172 - 21 0.0172 - 26 0.103 - 29 0.0172 - 32 0.0172 - 33 0.0517 - 40 0.0345 - 42 0.121 - 44 0.0172 - 47 0.069 - - 48 254 23 0 - 0 0.0394 - 2 0.0394 - 4 0.0276 - 7 0.157 - 12 0.00787 - 13 0.00394 - 14 0.0157 - 15 0.00394 - 21 0.00787 - 22 0.00394 - 26 0.0394 - 29 0.00787 - 30 0.00394 - 31 0.00787 - 33 0.00394 - 37 0.00787 - 39 0.00394 - 40 0.26 - 41 0.291 - 42 0.0394 - 43 0.00394 - 45 0.0118 - 46 0.0118 - - 49 446 17 0 - 0 0.0112 - 2 0.0202 - 4 0.00897 - 7 0.0336 - 8 0.00224 - 13 0.00224 - 15 0.00673 - 19 0.00448 - 26 0.0224 - 29 0.00448 - 32 0.00224 - 33 0.00224 - 40 0.601 - 41 0.258 - 42 0.0157 - 43 0.00224 - 46 0.00224 - - 51 17 2 0 - 40 0.706 - 41 0.294 - - 55 87632 45 0 - 0 0.0392 - 1 0.000137 - 2 0.0359 - 3 0.000913 - 4 0.0077 - 5 0.000262 - 6 2.28e-05 - 7 0.111 - 8 0.0046 - 9 0.00016 - 10 6.85e-05 - 12 0.0127 - 13 0.00454 - 14 0.000959 - 15 0.00461 - 16 1.14e-05 - 17 1.14e-05 - 18 0.000251 - 19 0.00304 - 20 0.000183 - 21 0.0117 - 22 0.000742 - 23 2.28e-05 - 24 3.42e-05 - 25 1.14e-05 - 26 0.0265 - 28 0.000605 - 29 0.0222 - 30 0.00445 - 31 0.00404 - 32 0.00544 - 33 0.00598 - 34 0.00358 - 35 0.0013 - 36 1.14e-05 - 37 0.00261 - 39 9.13e-05 - 40 0.408 - 41 0.246 - 42 0.0216 - 43 0.00251 - 44 0.00163 - 45 0.00118 - 46 0.00252 - 47 0.00106 - - 57 2302 31 0 - 0 0.0122 - 2 0.0187 - 3 0.0013 - 4 0.00608 - 7 0.0478 - 8 0.0013 - 9 0.000434 - 12 0.00348 - 13 0.00174 - 14 0.000869 - 15 0.00348 - 19 0.00174 - 21 0.00608 - 22 0.0013 - 26 0.0113 - 29 0.00521 - 30 0.000434 - 31 0.00174 - 32 0.00217 - 33 0.000869 - 34 0.000434 - 35 0.0013 - 37 0.00217 - 40 0.595 - 41 0.241 - 42 0.0204 - 43 0.00304 - 44 0.00174 - 45 0.000869 - 46 0.00261 - 47 0.00304 - - 58 9 5 0 - 2 0.111 - 4 0.111 - 7 0.222 - 40 0.333 - 41 0.222 - - 62 3086 28 0 - 0 0.0198 - 2 0.0237 - 3 0.000324 - 4 0.00162 - 7 0.0256 - 8 0.000648 - 12 0.00713 - 15 0.000324 - 19 0.00259 - 21 0.00324 - 22 0.000324 - 26 0.00551 - 28 0.000324 - 29 0.00259 - 30 0.000648 - 31 0.0013 - 32 0.000972 - 33 0.00324 - 34 0.00162 - 37 0.0013 - 40 0.631 - 41 0.239 - 42 0.0185 - 43 0.00194 - 44 0.000972 - 45 0.00162 - 46 0.00162 - 47 0.00259 - - 64 448 14 0 - 0 0.0246 - 2 0.0134 - 7 0.0246 - 12 0.00893 - 21 0.00223 - 26 0.00223 - 32 0.00223 - 34 0.00223 - 40 0.696 - 41 0.192 - 42 0.0223 - 43 0.00223 - 44 0.00446 - 46 0.00223 - - 67 1 1 0 - 46 1 - - 68 17 2 0 - 40 0.765 - 41 0.235 - - 69 14 6 0 - 0 0.0714 - 2 0.0714 - 37 0.0714 - 40 0.571 - 41 0.143 - 42 0.0714 - - 72 5 2 0 - 0 0.6 - 29 0.4 - - 74 3 2 0 - 40 0.333 - 47 0.667 - - 48 259 23 3 - 0 0.0386 - 2 0.0386 - 4 0.027 - 7 0.154 - 12 0.00772 - 13 0.00386 - 14 0.0154 - 15 0.00386 - 21 0.00772 - 22 0.00386 - 26 0.0386 - 29 0.00772 - 30 0.00386 - 31 0.00772 - 33 0.00386 - 37 0.00772 - 39 0.00386 - 40 0.255 - 41 0.293 - 42 0.0386 - 43 0.00386 - 45 0.0116 - 46 0.0232 - - 21 14 5 0 - 4 0.0714 - 7 0.0714 - 40 0.5 - 41 0.214 - 46 0.143 - - 26 22 5 0 - 7 0.5 - 14 0.0455 - 40 0.182 - 41 0.182 - 42 0.0909 - - 45 14 3 0 - 40 0.5 - 41 0.286 - 46 0.214 - - 49 475 17 5 - 0 0.0105 - 2 0.0189 - 4 0.0168 - 7 0.0674 - 8 0.00211 - 13 0.00211 - 15 0.00842 - 19 0.00421 - 26 0.0232 - 29 0.00421 - 32 0.00211 - 33 0.00211 - 40 0.564 - 41 0.255 - 42 0.0147 - 43 0.00211 - 46 0.00211 - - 2 12 3 0 - 4 0.0833 - 7 0.833 - 26 0.0833 - - 7 209 16 0 - 0 0.0191 - 2 0.0287 - 4 0.0335 - 7 0.067 - 8 0.00478 - 15 0.0144 - 19 0.00957 - 26 0.0431 - 29 0.00957 - 32 0.00478 - 33 0.00478 - 40 0.364 - 41 0.368 - 42 0.0191 - 43 0.00478 - 46 0.00478 - - 21 6 5 0 - 0 0.167 - 7 0.167 - 13 0.167 - 40 0.333 - 41 0.167 - - 41 53 4 0 - 7 0.113 - 26 0.0189 - 40 0.755 - 41 0.113 - - 55 186 5 0 - 2 0.0161 - 7 0.00538 - 40 0.785 - 41 0.177 - 42 0.0161 - - 50 38 2 0 - 7 0.842 - 26 0.158 - - 51 18 3 0 - 40 0.667 - 41 0.278 - 46 0.0556 - - 52 3 1 0 - 41 1 - - 55 88258 45 19 - 0 0.0389 - 1 0.000136 - 2 0.0356 - 3 0.000974 - 4 0.00988 - 5 0.000261 - 6 2.27e-05 - 7 0.112 - 8 0.00509 - 9 0.000159 - 10 6.8e-05 - 12 0.0126 - 13 0.00455 - 14 0.000952 - 15 0.00487 - 16 1.13e-05 - 17 1.13e-05 - 18 0.000249 - 19 0.00301 - 20 0.000181 - 21 0.0119 - 22 0.000748 - 23 2.27e-05 - 24 3.4e-05 - 25 1.13e-05 - 26 0.0263 - 28 0.000601 - 29 0.022 - 30 0.00442 - 31 0.00401 - 32 0.0054 - 33 0.00594 - 34 0.00356 - 35 0.00129 - 36 1.13e-05 - 37 0.00261 - 39 9.06e-05 - 40 0.405 - 41 0.245 - 42 0.0216 - 43 0.00253 - 44 0.00162 - 45 0.00118 - 46 0.003 - 47 0.00105 - - 2 62 11 0 - 0 0.0323 - 2 0.0161 - 7 0.0806 - 13 0.0323 - 21 0.0161 - 26 0.0161 - 40 0.258 - 41 0.435 - 42 0.0806 - 43 0.0161 - 47 0.0161 - - 6 13 6 0 - 0 0.0769 - 13 0.0769 - 15 0.0769 - 40 0.385 - 43 0.231 - 47 0.154 - - 7 78674 44 0 - 0 0.0417 - 1 0.000153 - 2 0.0359 - 3 0.000953 - 4 0.01 - 5 0.000267 - 6 2.54e-05 - 7 0.102 - 8 0.0053 - 9 0.000165 - 10 7.63e-05 - 12 0.0136 - 13 0.00469 - 14 0.00103 - 15 0.00516 - 16 1.27e-05 - 17 1.27e-05 - 18 0.00028 - 19 0.00324 - 20 0.000178 - 21 0.0122 - 22 0.000775 - 23 2.54e-05 - 24 3.81e-05 - 26 0.0278 - 28 0.000636 - 29 0.0238 - 30 0.00456 - 31 0.0044 - 32 0.00578 - 33 0.0063 - 34 0.00385 - 35 0.0014 - 36 1.27e-05 - 37 0.00253 - 39 8.9e-05 - 40 0.401 - 41 0.25 - 42 0.0215 - 43 0.00247 - 44 0.00174 - 45 0.00114 - 46 0.00262 - 47 0.00105 - - 8 16 7 0 - 2 0.0625 - 7 0.188 - 21 0.125 - 25 0.0625 - 26 0.125 - 40 0.25 - 41 0.188 - - 13 4 3 0 - 7 0.25 - 29 0.25 - 41 0.5 - - 15 11 4 0 - 40 0.273 - 41 0.364 - 42 0.0909 - 46 0.273 - - 21 54 11 0 - 2 0.111 - 4 0.0185 - 7 0.111 - 8 0.0185 - 15 0.0185 - 19 0.0185 - 26 0.0185 - 32 0.0185 - 40 0.426 - 41 0.185 - 42 0.0556 - - 24 23 7 0 - 2 0.0435 - 4 0.0435 - 7 0.13 - 13 0.0435 - 40 0.435 - 41 0.261 - 43 0.0435 - - 26 8384 35 0 - 0 0.0173 - 2 0.0354 - 3 0.00131 - 4 0.00942 - 5 0.000239 - 7 0.22 - 8 0.0037 - 9 0.000119 - 12 0.00549 - 13 0.00334 - 14 0.000358 - 15 0.00262 - 19 0.00119 - 20 0.000239 - 21 0.0099 - 22 0.000596 - 26 0.0149 - 28 0.000358 - 29 0.00704 - 30 0.0037 - 31 0.000954 - 32 0.00239 - 33 0.00322 - 34 0.00131 - 35 0.000358 - 37 0.0037 - 39 0.000119 - 40 0.433 - 41 0.191 - 42 0.0198 - 43 0.00191 - 44 0.000716 - 45 0.00143 - 46 0.00155 - 47 0.000716 - - 30 598 14 0 - 0 0.00836 - 2 0.00836 - 4 0.00167 - 7 0.0134 - 13 0.00167 - 29 0.0134 - 32 0.00167 - 33 0.00167 - 40 0.562 - 41 0.319 - 42 0.0602 - 43 0.00502 - 45 0.00167 - 47 0.00167 - - 31 45 5 0 - 2 0.0222 - 40 0.267 - 41 0.644 - 42 0.0444 - 43 0.0222 - - 41 10 2 0 - 40 0.8 - 41 0.2 - - 42 5 1 0 - 40 1 - - 44 3 1 0 - 43 1 - - 45 185 5 0 - 2 0.00541 - 7 0.00541 - 40 0.497 - 41 0.259 - 46 0.232 - - 46 12 4 0 - 7 0.0833 - 40 0.583 - 41 0.25 - 45 0.0833 - - 55 121 7 0 - 2 0.0248 - 7 0.0496 - 21 0.00826 - 40 0.736 - 41 0.165 - 42 0.00826 - 43 0.00826 - - 57 10 6 0 - 0 0.2 - 7 0.2 - 21 0.1 - 35 0.1 - 40 0.2 - 41 0.2 - - 58 15 3 0 - 29 0.0667 - 40 0.667 - 41 0.267 - - 57 3084 31 15 - 0 0.00908 - 2 0.105 - 3 0.000973 - 4 0.00681 - 7 0.0516 - 8 0.0013 - 9 0.000324 - 12 0.00259 - 13 0.00162 - 14 0.0013 - 15 0.00292 - 19 0.00162 - 21 0.0123 - 22 0.000973 - 26 0.0717 - 29 0.00389 - 30 0.000324 - 31 0.0013 - 32 0.00162 - 33 0.000649 - 34 0.000324 - 35 0.000973 - 37 0.00195 - 40 0.445 - 41 0.243 - 42 0.0211 - 43 0.00259 - 44 0.00195 - 45 0.000649 - 46 0.00227 - 47 0.00227 - - 2 354 24 0 - 0 0.00847 - 2 0.0254 - 4 0.0169 - 7 0.0508 - 12 0.00282 - 13 0.00282 - 14 0.00282 - 15 0.00282 - 19 0.00282 - 21 0.00847 - 26 0.00847 - 29 0.0169 - 31 0.00282 - 32 0.00282 - 35 0.00282 - 37 0.00282 - 40 0.621 - 41 0.169 - 42 0.0282 - 43 0.00565 - 44 0.00282 - 45 0.00565 - 46 0.00282 - 47 0.00282 - - 4 11 2 0 - 2 0.818 - 41 0.182 - - 7 619 28 0 - 0 0.0226 - 2 0.0468 - 3 0.00162 - 4 0.0162 - 7 0.0565 - 8 0.00485 - 9 0.00162 - 12 0.00808 - 13 0.00485 - 14 0.00323 - 15 0.00646 - 19 0.00485 - 21 0.0162 - 22 0.00162 - 26 0.00808 - 29 0.00969 - 30 0.00162 - 31 0.00162 - 32 0.00485 - 33 0.00162 - 35 0.00323 - 37 0.00646 - 40 0.439 - 41 0.288 - 42 0.0242 - 43 0.00646 - 46 0.00646 - 47 0.00323 - - 8 10 3 0 - 0 0.1 - 40 0.7 - 41 0.2 - - 21 90 8 0 - 2 0.111 - 3 0.0111 - 7 0.0778 - 12 0.0111 - 21 0.0111 - 40 0.444 - 41 0.322 - 46 0.0111 - - 24 12 6 0 - 2 0.0833 - 7 0.167 - 22 0.0833 - 40 0.5 - 41 0.0833 - 42 0.0833 - - 30 448 11 0 - 0 0.00223 - 3 0.00223 - 4 0.00446 - 7 0.0067 - 12 0.00223 - 15 0.0067 - 33 0.00223 - 40 0.629 - 41 0.33 - 42 0.0112 - 44 0.00223 - - 31 302 10 0 - 4 0.00331 - 7 0.00993 - 13 0.00331 - 21 0.00331 - 22 0.00331 - 40 0.788 - 41 0.172 - 42 0.00331 - 44 0.00331 - 47 0.00993 - - 41 66 5 0 - 2 0.227 - 7 0.0152 - 40 0.348 - 41 0.379 - 42 0.0303 - - 44 1 1 0 - 43 1 - - 47 644 10 0 - 2 0.354 - 4 0.00155 - 7 0.0652 - 21 0.0326 - 26 0.289 - 37 0.00155 - 41 0.225 - 42 0.0264 - 44 0.00311 - 46 0.00155 - - 49 25 7 0 - 2 0.04 - 7 0.12 - 19 0.04 - 21 0.04 - 40 0.48 - 41 0.24 - 42 0.04 - - 50 54 5 0 - 2 0.204 - 14 0.0185 - 40 0.537 - 41 0.222 - 42 0.0185 - - 55 185 10 0 - 0 0.00541 - 2 0.0378 - 7 0.151 - 8 0.00541 - 26 0.0541 - 40 0.557 - 41 0.168 - 42 0.0108 - 44 0.00541 - 47 0.00541 - - 57 241 14 0 - 0 0.0332 - 2 0.0166 - 4 0.00415 - 7 0.0705 - 15 0.00415 - 21 0.00415 - 26 0.0705 - 31 0.0083 - 32 0.00415 - 34 0.00415 - 40 0.531 - 41 0.207 - 42 0.0373 - 43 0.00415 - - 58 32 12 3 - 2 0.156 - 3 0.0625 - 4 0.156 - 7 0.0938 - 8 0.125 - 14 0.0312 - 15 0.0938 - 26 0.0625 - 30 0.0312 - 39 0.0312 - 40 0.0938 - 41 0.0625 - - 2 3 2 0 - 7 0.333 - 26 0.667 - - 7 15 9 0 - 2 0.0667 - 3 0.133 - 4 0.0667 - 8 0.2 - 14 0.0667 - 15 0.2 - 30 0.0667 - 39 0.0667 - 41 0.133 - - 57 9 3 0 - 2 0.444 - 7 0.222 - 40 0.333 - - 62 3093 28 4 - 0 0.0197 - 2 0.0236 - 3 0.000323 - 4 0.00162 - 7 0.0259 - 8 0.000647 - 12 0.00711 - 15 0.000323 - 19 0.00259 - 21 0.00323 - 22 0.000323 - 26 0.0055 - 28 0.000323 - 29 0.00259 - 30 0.000647 - 31 0.00129 - 32 0.00097 - 33 0.00323 - 34 0.00162 - 37 0.00129 - 40 0.63 - 41 0.239 - 42 0.0188 - 43 0.00194 - 44 0.00097 - 45 0.00162 - 46 0.00226 - 47 0.00259 - - 26 148 11 0 - 0 0.0135 - 2 0.0135 - 7 0.0338 - 15 0.00676 - 26 0.00676 - 29 0.00676 - 33 0.00676 - 40 0.635 - 41 0.264 - 46 0.00676 - 47 0.00676 - - 41 1 1 0 - 45 1 - - 45 22 3 0 - 40 0.682 - 41 0.227 - 46 0.0909 - - 58 1 1 0 - 12 1 - - 64 449 14 1 - 0 0.0245 - 2 0.0134 - 7 0.0245 - 12 0.00891 - 21 0.00223 - 26 0.00223 - 32 0.00223 - 34 0.00223 - 40 0.695 - 41 0.192 - 42 0.0223 - 43 0.00223 - 44 0.00445 - 46 0.00445 - - 45 2 2 0 - 40 0.5 - 46 0.5 - - 65 2 2 0 - 40 0.5 - 46 0.5 - - 67 1 1 0 - 46 1 - - 68 17 2 0 - 40 0.765 - 41 0.235 - - 69 14 6 0 - 0 0.0714 - 2 0.0714 - 37 0.0714 - 40 0.571 - 41 0.143 - 42 0.0714 - - 72 5 2 0 - 0 0.6 - 29 0.4 - - 74 4 3 0 - 40 0.25 - 46 0.25 - 47 0.5 - -58 7315 39 31 - 0 0.063 - 1 0.000547 - 2 0.0418 - 3 0.00465 - 4 0.0407 - 5 0.000957 - 7 0.0861 - 8 0.0161 - 9 0.000684 - 10 0.00109 - 12 0.0257 - 13 0.0245 - 14 0.0164 - 15 0.0215 - 16 0.000547 - 19 0.0178 - 20 0.0026 - 21 0.0178 - 22 0.000273 - 23 0.000273 - 26 0.0161 - 28 0.00602 - 29 0.0187 - 30 0.00574 - 31 0.00437 - 32 0.00916 - 33 0.0145 - 34 0.00547 - 35 0.00273 - 37 0.00191 - 39 0.000547 - 40 0.0711 - 41 0.194 - 42 0.076 - 43 0.139 - 44 0.00041 - 45 0.0428 - 46 0.00342 - 47 0.00547 - - 2 85 22 4 - 0 0.0235 - 3 0.0353 - 4 0.0824 - 5 0.0118 - 7 0.0941 - 8 0.0353 - 9 0.0118 - 12 0.0235 - 13 0.0706 - 14 0.0471 - 15 0.0118 - 19 0.0353 - 21 0.341 - 22 0.0235 - 26 0.0118 - 29 0.0118 - 30 0.0118 - 31 0.0118 - 32 0.0118 - 33 0.0235 - 41 0.0588 - 45 0.0118 - - 41 20 9 0 - 0 0.05 - 3 0.05 - 7 0.1 - 13 0.1 - 15 0.05 - 21 0.45 - 22 0.1 - 33 0.05 - 45 0.05 - - 42 31 12 0 - 3 0.0323 - 4 0.161 - 5 0.0323 - 7 0.129 - 8 0.0323 - 12 0.0323 - 13 0.0645 - 14 0.0645 - 19 0.0968 - 21 0.29 - 26 0.0323 - 32 0.0323 - - 44 22 13 0 - 0 0.0455 - 4 0.0909 - 7 0.0455 - 8 0.0455 - 12 0.0455 - 13 0.0909 - 14 0.0909 - 21 0.182 - 29 0.0455 - 30 0.0455 - 31 0.0455 - 33 0.0455 - 41 0.182 - - 47 12 6 0 - 3 0.0833 - 7 0.0833 - 8 0.0833 - 9 0.0833 - 21 0.583 - 41 0.0833 - - 4 1 1 0 - 44 1 - - 7 5 4 0 - 9 0.2 - 21 0.2 - 26 0.2 - 43 0.4 - - 8 13 3 0 - 40 0.154 - 42 0.154 - 43 0.692 - - 13 17 3 0 - 41 0.0588 - 42 0.0588 - 43 0.882 - - 14 3 1 0 - 43 1 - - 15 30 4 1 - 40 0.233 - 41 0.1 - 43 0.633 - 46 0.0333 - - 2 2 1 0 - 41 1 - - 21 13 9 0 - 4 0.385 - 7 0.0769 - 8 0.0769 - 13 0.0769 - 20 0.0769 - 26 0.0769 - 31 0.0769 - 42 0.0769 - 43 0.0769 - - 28 3 1 0 - 43 1 - - 32 2 1 0 - 42 1 - - 40 16 3 0 - 4 0.0625 - 43 0.875 - 46 0.0625 - - 41 895 30 11 - 0 0.115 - 2 0.067 - 3 0.00447 - 4 0.0983 - 5 0.00335 - 7 0.124 - 8 0.038 - 9 0.00112 - 10 0.00447 - 12 0.0503 - 13 0.0313 - 14 0.0391 - 15 0.0402 - 16 0.00223 - 19 0.0391 - 20 0.0067 - 21 0.0291 - 23 0.00112 - 26 0.019 - 28 0.0145 - 29 0.0223 - 30 0.0145 - 31 0.00447 - 32 0.0134 - 33 0.019 - 34 0.00223 - 35 0.00559 - 37 0.00335 - 45 0.184 - 46 0.00223 - - 2 5 2 0 - 7 0.8 - 21 0.2 - - 15 3 2 0 - 13 0.667 - 14 0.333 - - 48 5 4 0 - 7 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 33 14 0 - 0 0.0606 - 3 0.0303 - 4 0.121 - 7 0.273 - 8 0.182 - 13 0.0303 - 15 0.0303 - 19 0.0303 - 20 0.0606 - 21 0.0303 - 26 0.0303 - 28 0.0303 - 29 0.0606 - 35 0.0303 - - 52 7 6 0 - 2 0.143 - 4 0.143 - 7 0.143 - 15 0.286 - 26 0.143 - 30 0.143 - - 55 24 12 0 - 0 0.125 - 4 0.0417 - 7 0.417 - 13 0.0417 - 14 0.0417 - 30 0.0417 - 31 0.0417 - 32 0.0833 - 34 0.0417 - 35 0.0417 - 45 0.0417 - 46 0.0417 - - 57 83 23 0 - 0 0.0723 - 2 0.0723 - 3 0.012 - 4 0.157 - 7 0.157 - 8 0.0241 - 12 0.0241 - 13 0.0843 - 14 0.012 - 15 0.0361 - 19 0.012 - 20 0.012 - 21 0.0361 - 23 0.012 - 26 0.0602 - 28 0.0241 - 29 0.0723 - 30 0.012 - 32 0.012 - 33 0.0602 - 35 0.012 - 45 0.012 - 46 0.012 - - 62 585 28 0 - 0 0.126 - 2 0.0786 - 3 0.00342 - 4 0.101 - 5 0.00513 - 7 0.0906 - 8 0.0376 - 9 0.00171 - 10 0.00513 - 12 0.0632 - 13 0.0188 - 14 0.0393 - 15 0.041 - 16 0.00342 - 19 0.0479 - 20 0.00342 - 21 0.0291 - 26 0.0103 - 28 0.012 - 29 0.0171 - 30 0.0154 - 31 0.00513 - 32 0.012 - 33 0.0154 - 34 0.00171 - 35 0.00342 - 37 0.00513 - 45 0.207 - - 64 50 15 0 - 0 0.18 - 2 0.06 - 4 0.06 - 7 0.22 - 12 0.06 - 13 0.02 - 14 0.04 - 15 0.04 - 21 0.08 - 26 0.06 - 28 0.04 - 29 0.02 - 32 0.02 - 33 0.04 - 45 0.06 - - 66 71 15 0 - 0 0.0986 - 2 0.0423 - 7 0.0986 - 8 0.0141 - 10 0.0141 - 12 0.0423 - 13 0.0141 - 14 0.0704 - 15 0.0141 - 19 0.0141 - 28 0.0141 - 29 0.0141 - 32 0.0141 - 33 0.0141 - 45 0.521 - - 69 24 11 0 - 2 0.0417 - 4 0.292 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0417 - 15 0.125 - 19 0.167 - 20 0.0417 - 26 0.0417 - 45 0.0417 - - 42 358 24 11 - 0 0.182 - 2 0.0782 - 3 0.00559 - 4 0.0587 - 7 0.168 - 8 0.0196 - 12 0.0587 - 13 0.0279 - 14 0.0168 - 15 0.0251 - 19 0.0363 - 20 0.00838 - 21 0.0279 - 26 0.0503 - 28 0.014 - 29 0.0531 - 30 0.0168 - 31 0.0168 - 32 0.0307 - 33 0.0419 - 34 0.0363 - 35 0.00838 - 37 0.00559 - 45 0.014 - - 21 1 1 0 - 28 1 - - 32 2 1 0 - 4 1 - - 46 2 2 0 - 31 0.5 - 33 0.5 - - 48 14 10 0 - 0 0.143 - 2 0.0714 - 3 0.0714 - 4 0.0714 - 8 0.0714 - 13 0.143 - 14 0.0714 - 26 0.0714 - 30 0.0714 - 34 0.214 - - 49 11 6 0 - 0 0.0909 - 4 0.0909 - 7 0.455 - 12 0.0909 - 26 0.182 - 30 0.0909 - - 55 125 19 0 - 0 0.232 - 2 0.048 - 4 0.032 - 7 0.152 - 12 0.096 - 14 0.008 - 15 0.032 - 19 0.024 - 20 0.008 - 21 0.048 - 26 0.064 - 28 0.008 - 29 0.064 - 30 0.016 - 31 0.024 - 32 0.04 - 33 0.048 - 34 0.04 - 35 0.016 - - 57 68 22 0 - 0 0.206 - 2 0.0441 - 3 0.0147 - 4 0.0735 - 7 0.162 - 8 0.0294 - 12 0.0441 - 13 0.0441 - 14 0.0147 - 15 0.0294 - 19 0.0147 - 20 0.0147 - 21 0.0294 - 26 0.0294 - 28 0.0147 - 29 0.0735 - 30 0.0147 - 31 0.0294 - 32 0.0294 - 34 0.0441 - 37 0.0147 - 45 0.0294 - - 62 59 19 0 - 0 0.0678 - 2 0.169 - 4 0.0339 - 7 0.203 - 8 0.0508 - 12 0.0169 - 13 0.0678 - 14 0.0169 - 15 0.0339 - 19 0.0847 - 21 0.0169 - 26 0.0508 - 28 0.0169 - 29 0.0169 - 30 0.0169 - 32 0.0169 - 33 0.0678 - 34 0.0169 - 45 0.0339 - - 64 40 12 0 - 0 0.225 - 2 0.1 - 4 0.1 - 7 0.125 - 12 0.075 - 19 0.075 - 26 0.05 - 29 0.075 - 32 0.05 - 33 0.075 - 34 0.025 - 35 0.025 - - 67 1 1 0 - 45 1 - - 69 27 14 0 - 0 0.148 - 2 0.111 - 4 0.0741 - 7 0.259 - 8 0.037 - 12 0.037 - 15 0.037 - 20 0.037 - 21 0.037 - 28 0.037 - 29 0.0741 - 32 0.037 - 33 0.037 - 37 0.037 - - 43 1007 28 21 - 0 0.0487 - 1 0.00199 - 2 0.0616 - 3 0.00993 - 4 0.0248 - 7 0.132 - 8 0.0139 - 12 0.0199 - 13 0.0457 - 14 0.0159 - 15 0.0328 - 19 0.00497 - 21 0.0119 - 26 0.0218 - 28 0.00298 - 29 0.0278 - 30 0.000993 - 31 0.00497 - 32 0.00894 - 33 0.0189 - 34 0.00497 - 35 0.00199 - 39 0.000993 - 40 0.167 - 41 0.206 - 42 0.0894 - 45 0.000993 - 47 0.0189 - - 0 2 2 0 - 13 0.5 - 31 0.5 - - 7 2 2 0 - 7 0.5 - 19 0.5 - - 8 9 3 0 - 8 0.111 - 13 0.556 - 14 0.333 - - 13 15 6 0 - 7 0.267 - 13 0.333 - 14 0.2 - 15 0.0667 - 26 0.0667 - 42 0.0667 - - 14 3 3 0 - 8 0.333 - 21 0.333 - 29 0.333 - - 15 19 6 0 - 12 0.105 - 13 0.211 - 14 0.105 - 15 0.474 - 26 0.0526 - 42 0.0526 - - 20 1 1 0 - 8 1 - - 21 1 1 0 - 8 1 - - 28 3 3 0 - 2 0.333 - 4 0.333 - 13 0.333 - - 40 14 7 0 - 2 0.0714 - 7 0.0714 - 13 0.143 - 14 0.0714 - 15 0.429 - 19 0.0714 - 47 0.143 - - 46 20 8 0 - 0 0.05 - 2 0.15 - 8 0.05 - 12 0.1 - 15 0.05 - 40 0.3 - 41 0.2 - 42 0.1 - - 48 29 7 0 - 2 0.0345 - 8 0.138 - 13 0.552 - 14 0.069 - 15 0.0345 - 40 0.069 - 41 0.103 - - 49 6 5 0 - 1 0.167 - 2 0.167 - 28 0.333 - 40 0.167 - 47 0.167 - - 51 4 3 0 - 40 0.25 - 41 0.5 - 47 0.25 - - 52 3 1 0 - 40 1 - - 54 2 2 0 - 8 0.5 - 15 0.5 - - 55 691 24 0 - 0 0.0507 - 2 0.0651 - 3 0.00289 - 4 0.0304 - 7 0.161 - 8 0.00579 - 12 0.013 - 13 0.013 - 14 0.00434 - 15 0.0188 - 21 0.0116 - 26 0.0232 - 28 0.00145 - 29 0.0347 - 30 0.00145 - 31 0.00289 - 32 0.0101 - 33 0.0232 - 34 0.00579 - 35 0.00145 - 40 0.158 - 41 0.236 - 42 0.113 - 47 0.013 - - 57 52 15 0 - 0 0.173 - 2 0.0577 - 4 0.0385 - 7 0.154 - 12 0.115 - 13 0.0192 - 19 0.0385 - 26 0.0192 - 29 0.0192 - 32 0.0192 - 34 0.0192 - 39 0.0192 - 40 0.135 - 41 0.154 - 47 0.0192 - - 62 68 17 0 - 0 0.0147 - 1 0.0147 - 2 0.0441 - 4 0.0147 - 7 0.0441 - 13 0.0147 - 19 0.0147 - 21 0.0147 - 29 0.0147 - 31 0.0147 - 33 0.0147 - 35 0.0147 - 40 0.382 - 41 0.235 - 42 0.0588 - 45 0.0147 - 47 0.0735 - - 64 23 8 0 - 0 0.13 - 2 0.087 - 7 0.087 - 12 0.0435 - 26 0.0435 - 32 0.0435 - 40 0.261 - 41 0.304 - - 69 30 11 0 - 2 0.0667 - 3 0.267 - 7 0.1 - 21 0.0667 - 26 0.0667 - 29 0.0333 - 31 0.0333 - 33 0.0667 - 40 0.133 - 41 0.0667 - 42 0.1 - - 45 37 11 0 - 0 0.135 - 2 0.0811 - 4 0.135 - 7 0.108 - 8 0.027 - 12 0.135 - 14 0.027 - 19 0.216 - 21 0.0541 - 26 0.027 - 37 0.0541 - - 46 23 3 0 - 29 0.0435 - 42 0.087 - 43 0.87 - - 47 2420 38 14 - 0 0.0946 - 1 0.000826 - 2 0.0632 - 3 0.0062 - 4 0.0583 - 5 0.00124 - 7 0.124 - 8 0.0227 - 9 0.000413 - 10 0.00165 - 12 0.0384 - 13 0.0351 - 14 0.024 - 15 0.0322 - 16 0.000826 - 19 0.026 - 20 0.00372 - 21 0.0198 - 23 0.000413 - 26 0.0236 - 28 0.00909 - 29 0.0281 - 30 0.00785 - 31 0.0062 - 32 0.0136 - 33 0.0215 - 34 0.00826 - 35 0.00413 - 37 0.00289 - 39 0.000826 - 40 0.104 - 41 0.108 - 42 0.0409 - 43 0.00165 - 44 0.000413 - 45 0.057 - 46 0.000413 - 47 0.00826 - - 41 842 30 0 - 0 0.122 - 2 0.0713 - 3 0.00356 - 4 0.102 - 5 0.00356 - 7 0.121 - 8 0.0392 - 9 0.00119 - 10 0.00475 - 12 0.0534 - 13 0.0321 - 14 0.0416 - 15 0.0428 - 16 0.00238 - 19 0.0416 - 20 0.00713 - 21 0.0297 - 23 0.00119 - 26 0.019 - 28 0.0154 - 29 0.0238 - 30 0.0143 - 31 0.00475 - 32 0.0143 - 33 0.0202 - 34 0.00238 - 35 0.00594 - 37 0.00356 - 45 0.154 - 46 0.00119 - - 42 357 24 0 - 0 0.182 - 2 0.0784 - 3 0.0056 - 4 0.0588 - 7 0.168 - 8 0.0196 - 12 0.0588 - 13 0.028 - 14 0.0168 - 15 0.0252 - 19 0.0364 - 20 0.0084 - 21 0.028 - 26 0.0504 - 28 0.014 - 29 0.0532 - 30 0.0168 - 31 0.0168 - 32 0.0308 - 33 0.042 - 34 0.0364 - 35 0.0084 - 37 0.0056 - 45 0.0112 - - 43 1006 28 0 - 0 0.0487 - 1 0.00199 - 2 0.0616 - 3 0.00994 - 4 0.0249 - 7 0.131 - 8 0.0139 - 12 0.0199 - 13 0.0457 - 14 0.0159 - 15 0.0328 - 19 0.00497 - 21 0.0119 - 26 0.0219 - 28 0.00298 - 29 0.0278 - 30 0.000994 - 31 0.00497 - 32 0.00895 - 33 0.0189 - 34 0.00497 - 35 0.00199 - 39 0.000994 - 40 0.167 - 41 0.206 - 42 0.0895 - 45 0.000994 - 47 0.0189 - - 45 36 11 0 - 0 0.139 - 2 0.0833 - 4 0.139 - 7 0.111 - 8 0.0278 - 12 0.139 - 14 0.0278 - 19 0.222 - 21 0.0278 - 26 0.0278 - 37 0.0556 - - 48 7 4 0 - 13 0.143 - 32 0.143 - 40 0.571 - 41 0.143 - - 49 9 2 0 - 40 0.889 - 41 0.111 - - 51 2 2 0 - 41 0.5 - 43 0.5 - - 55 28 4 0 - 13 0.0357 - 40 0.857 - 41 0.0714 - 43 0.0357 - - 57 30 7 0 - 0 0.0333 - 4 0.0333 - 7 0.0333 - 40 0.733 - 41 0.1 - 42 0.0333 - 44 0.0333 - - 62 71 12 0 - 0 0.0423 - 4 0.0282 - 12 0.0282 - 28 0.0141 - 33 0.0141 - 39 0.0141 - 40 0.211 - 41 0.507 - 42 0.0704 - 43 0.0282 - 45 0.0282 - 47 0.0141 - - 64 6 3 0 - 40 0.667 - 41 0.167 - 42 0.167 - - 66 15 6 0 - 0 0.2 - 19 0.133 - 40 0.133 - 41 0.4 - 42 0.0667 - 45 0.0667 - - 68 2 1 0 - 40 1 - - 69 6 3 0 - 40 0.333 - 41 0.5 - 42 0.167 - - 48 57 7 4 - 13 0.0175 - 32 0.0175 - 40 0.0702 - 41 0.105 - 42 0.246 - 43 0.509 - 46 0.0351 - - 42 11 2 0 - 32 0.0909 - 42 0.909 - - 44 24 1 0 - 43 1 - - 45 2 1 0 - 46 1 - - 49 7 4 0 - 13 0.143 - 40 0.143 - 41 0.286 - 43 0.429 - - 49 78 10 5 - 0 0.0128 - 4 0.0256 - 7 0.141 - 8 0.0256 - 9 0.0128 - 21 0.0256 - 40 0.103 - 41 0.436 - 42 0.141 - 43 0.0769 - - 2 17 9 0 - 0 0.0588 - 4 0.118 - 7 0.176 - 8 0.118 - 9 0.0588 - 21 0.118 - 40 0.176 - 41 0.118 - 42 0.0588 - - 41 39 4 0 - 7 0.128 - 40 0.0256 - 41 0.744 - 42 0.103 - - 42 8 3 0 - 7 0.125 - 40 0.125 - 42 0.75 - - 44 6 1 0 - 43 1 - - 49 5 2 0 - 40 0.6 - 41 0.4 - - 51 9 4 0 - 40 0.111 - 41 0.222 - 42 0.111 - 43 0.556 - - 52 11 3 0 - 40 0.0909 - 41 0.636 - 43 0.273 - - 54 3 2 0 - 42 0.333 - 43 0.667 - - 55 884 7 8 - 7 0.00226 - 13 0.00113 - 40 0.0305 - 41 0.0294 - 42 0.141 - 43 0.783 - 46 0.0124 - - 2 18 4 0 - 40 0.167 - 41 0.167 - 42 0.444 - 43 0.222 - - 21 6 4 0 - 40 0.333 - 41 0.333 - 42 0.167 - 43 0.167 - - 41 106 6 0 - 7 0.00943 - 13 0.00943 - 40 0.0566 - 41 0.0472 - 42 0.0377 - 43 0.84 - - 42 115 4 0 - 40 0.0696 - 41 0.0261 - 42 0.878 - 43 0.0261 - - 44 585 2 0 - 41 0.00342 - 43 0.997 - - 45 13 2 0 - 41 0.154 - 46 0.846 - - 47 3 3 0 - 7 0.333 - 40 0.333 - 43 0.333 - - 49 28 4 0 - 40 0.25 - 41 0.25 - 42 0.357 - 43 0.143 - - 57 236 10 8 - 0 0.00424 - 4 0.00424 - 7 0.00424 - 19 0.00424 - 30 0.00847 - 40 0.0932 - 41 0.364 - 42 0.292 - 43 0.22 - 44 0.00424 - - 2 7 4 0 - 19 0.143 - 30 0.286 - 40 0.429 - 42 0.143 - - 21 2 1 0 - 40 1 - - 41 82 4 0 - 40 0.0488 - 41 0.878 - 42 0.0366 - 43 0.0366 - - 42 68 3 0 - 7 0.0147 - 40 0.0588 - 42 0.926 - - 43 1 1 0 - 0 1 - - 44 49 1 0 - 43 1 - - 47 9 4 0 - 4 0.111 - 40 0.222 - 41 0.556 - 44 0.111 - - 49 11 3 0 - 40 0.455 - 41 0.455 - 42 0.0909 - - 58 4 3 0 - 8 0.25 - 41 0.25 - 43 0.5 - - 62 789 13 7 - 0 0.0038 - 4 0.00253 - 12 0.00253 - 28 0.00127 - 33 0.00127 - 39 0.00127 - 40 0.0203 - 41 0.787 - 42 0.0811 - 43 0.0887 - 45 0.00253 - 46 0.00634 - 47 0.00127 - - 2 13 4 0 - 40 0.0769 - 41 0.0769 - 42 0.615 - 43 0.231 - - 41 507 6 0 - 0 0.00197 - 39 0.00197 - 40 0.00789 - 41 0.98 - 42 0.00592 - 43 0.00197 - - 42 62 5 0 - 4 0.0161 - 40 0.129 - 42 0.806 - 43 0.0323 - 47 0.0161 - - 44 64 2 0 - 40 0.0156 - 43 0.984 - - 45 6 2 0 - 41 0.167 - 46 0.833 - - 46 66 3 0 - 4 0.0152 - 41 0.97 - 45 0.0152 - - 47 69 9 0 - 0 0.029 - 12 0.029 - 28 0.0145 - 33 0.0145 - 40 0.0145 - 41 0.841 - 42 0.029 - 43 0.0145 - 45 0.0145 - - 64 119 4 3 - 40 0.0336 - 41 0.429 - 42 0.345 - 43 0.193 - - 41 51 3 0 - 40 0.0392 - 41 0.941 - 42 0.0196 - - 42 38 2 0 - 40 0.0263 - 42 0.974 - - 44 23 1 0 - 43 1 - - 66 86 6 1 - 0 0.0349 - 19 0.0233 - 40 0.0233 - 41 0.895 - 42 0.0116 - 45 0.0116 - - 47 12 4 0 - 0 0.0833 - 19 0.167 - 40 0.167 - 41 0.583 - - 67 7 4 0 - 40 0.286 - 42 0.143 - 43 0.286 - 46 0.286 - - 68 4 2 0 - 40 0.5 - 42 0.5 - - 69 87 4 3 - 40 0.023 - 41 0.31 - 42 0.322 - 43 0.345 - - 42 15 1 0 - 42 1 - - 44 25 1 0 - 43 1 - - 55 25 2 0 - 41 0.96 - 42 0.04 - -59 5284 34 6 - 0 0.00151 - 1 0.00114 - 2 0.0151 - 3 0.0178 - 4 0.211 - 7 0.239 - 8 0.0503 - 9 0.00492 - 10 0.00265 - 12 0.000379 - 13 0.0492 - 14 0.0462 - 15 0.0235 - 17 0.00114 - 19 0.000757 - 20 0.0526 - 21 0.0488 - 22 0.00454 - 24 0.00114 - 26 0.0462 - 30 0.0163 - 31 0.00189 - 35 0.00568 - 37 0.00492 - 38 0.000757 - 39 0.00871 - 40 0.0765 - 41 0.05 - 42 0.00568 - 43 0.000757 - 44 0.000379 - 45 0.00454 - 46 0.0053 - 47 0.000379 - - 7 65 7 0 - 2 0.0615 - 8 0.0154 - 21 0.0154 - 40 0.523 - 41 0.308 - 42 0.0615 - 43 0.0154 - - 8 6 3 0 - 3 0.167 - 7 0.667 - 14 0.167 - - 21 84 9 0 - 0 0.0119 - 2 0.143 - 7 0.0833 - 8 0.0119 - 26 0.0119 - 40 0.464 - 41 0.214 - 42 0.0476 - 47 0.0119 - - 22 1 1 0 - 24 1 - - 24 2481 33 0 - 0 0.00121 - 1 0.00121 - 2 0.00967 - 3 0.0185 - 4 0.225 - 7 0.25 - 8 0.0528 - 9 0.00524 - 10 0.00282 - 12 0.000403 - 13 0.052 - 14 0.0484 - 15 0.025 - 17 0.00121 - 19 0.000806 - 20 0.056 - 21 0.0512 - 22 0.00484 - 24 0.000806 - 26 0.0488 - 30 0.0173 - 31 0.00202 - 35 0.00605 - 37 0.00524 - 38 0.000806 - 39 0.00927 - 40 0.0516 - 41 0.0379 - 42 0.00282 - 43 0.000403 - 44 0.000403 - 45 0.00484 - 46 0.00564 - - 47 2642 34 5 - 0 0.00151 - 1 0.00114 - 2 0.0151 - 3 0.0178 - 4 0.211 - 7 0.239 - 8 0.0503 - 9 0.00492 - 10 0.00265 - 12 0.000379 - 13 0.0492 - 14 0.0462 - 15 0.0235 - 17 0.00114 - 19 0.000757 - 20 0.0526 - 21 0.0488 - 22 0.00454 - 24 0.00114 - 26 0.0462 - 30 0.0163 - 31 0.00189 - 35 0.00568 - 37 0.00492 - 38 0.000757 - 39 0.00871 - 40 0.0765 - 41 0.05 - 42 0.00568 - 43 0.000757 - 44 0.000379 - 45 0.00454 - 46 0.0053 - 47 0.000379 - - 7 65 7 0 - 2 0.0615 - 8 0.0154 - 21 0.0154 - 40 0.523 - 41 0.308 - 42 0.0615 - 43 0.0154 - - 8 6 3 0 - 3 0.167 - 7 0.667 - 14 0.167 - - 21 84 9 0 - 0 0.0119 - 2 0.143 - 7 0.0833 - 8 0.0119 - 26 0.0119 - 40 0.464 - 41 0.214 - 42 0.0476 - 47 0.0119 - - 22 1 1 0 - 24 1 - - 24 2481 33 0 - 0 0.00121 - 1 0.00121 - 2 0.00967 - 3 0.0185 - 4 0.225 - 7 0.25 - 8 0.0528 - 9 0.00524 - 10 0.00282 - 12 0.000403 - 13 0.052 - 14 0.0484 - 15 0.025 - 17 0.00121 - 19 0.000806 - 20 0.056 - 21 0.0512 - 22 0.00484 - 24 0.000806 - 26 0.0488 - 30 0.0173 - 31 0.00202 - 35 0.00605 - 37 0.00524 - 38 0.000806 - 39 0.00927 - 40 0.0516 - 41 0.0379 - 42 0.00282 - 43 0.000403 - 44 0.000403 - 45 0.00484 - 46 0.00564 - -60 29066 33 16 - 0 0.00378 - 2 0.00932 - 3 0.35 - 4 0.0253 - 6 6.88e-05 - 7 0.139 - 8 0.0319 - 9 0.00368 - 12 0.00117 - 13 0.114 - 14 0.0974 - 15 0.0103 - 16 0.000826 - 19 0.000482 - 20 0.00131 - 21 0.0032 - 22 0.000344 - 25 6.88e-05 - 26 0.0221 - 29 0.00131 - 30 0.00124 - 31 0.00365 - 34 0.000344 - 35 0.000482 - 37 6.88e-05 - 40 0.072 - 41 0.0853 - 42 0.00523 - 43 0.012 - 44 0.0031 - 45 0.000344 - 46 0.000172 - 47 0.000482 - - 2 37 4 0 - 3 0.108 - 9 0.73 - 13 0.027 - 21 0.135 - - 3 13760 32 11 - 0 0.00363 - 2 0.00996 - 3 0.356 - 4 0.0206 - 6 7.27e-05 - 7 0.136 - 8 0.0312 - 9 0.00203 - 12 0.00124 - 13 0.115 - 14 0.0988 - 15 0.0102 - 16 0.000872 - 19 0.000436 - 20 7.27e-05 - 21 0.0024 - 22 0.000145 - 25 7.27e-05 - 26 0.0225 - 29 0.00109 - 30 0.00124 - 31 0.00356 - 34 0.000363 - 37 7.27e-05 - 40 0.0715 - 41 0.0883 - 42 0.00516 - 43 0.0126 - 44 0.00327 - 45 0.000363 - 46 7.27e-05 - 47 0.000509 - - 2 62 12 0 - 3 0.0161 - 4 0.0161 - 7 0.113 - 8 0.0323 - 13 0.0323 - 14 0.548 - 21 0.0161 - 31 0.0161 - 34 0.0161 - 40 0.0806 - 41 0.0968 - 45 0.0161 - - 3 6824 31 0 - 0 0.00659 - 2 0.0182 - 3 0.000293 - 4 0.0262 - 6 0.000147 - 7 0.257 - 8 0.0478 - 9 0.00249 - 12 0.00205 - 13 0.119 - 14 0.0928 - 15 0.0147 - 16 0.000879 - 19 0.000879 - 20 0.000147 - 21 0.0041 - 22 0.000147 - 25 0.000147 - 26 0.0441 - 29 0.00147 - 30 0.0022 - 31 0.00659 - 34 0.000586 - 40 0.137 - 41 0.174 - 42 0.00996 - 43 0.0246 - 44 0.00601 - 45 0.00044 - 46 0.000147 - 47 0.00103 - - 4 70 7 0 - 7 0.0286 - 8 0.129 - 13 0.229 - 14 0.486 - 15 0.0857 - 16 0.0286 - 41 0.0143 - - 7 732 17 0 - 0 0.00273 - 2 0.00137 - 3 0.00137 - 4 0.0041 - 7 0.0232 - 8 0.056 - 9 0.00137 - 12 0.00137 - 13 0.493 - 14 0.373 - 15 0.0246 - 29 0.00273 - 31 0.00137 - 37 0.00137 - 40 0.0082 - 41 0.00273 - 44 0.00137 - - 8 27 4 0 - 7 0.037 - 13 0.37 - 14 0.556 - 15 0.037 - - 10 120 8 0 - 7 0.0333 - 8 0.175 - 9 0.0167 - 13 0.233 - 14 0.483 - 15 0.0333 - 30 0.0167 - 40 0.00833 - - 21 513 14 0 - 0 0.00195 - 2 0.00195 - 3 0.00195 - 7 0.0253 - 8 0.0507 - 9 0.00585 - 13 0.567 - 14 0.312 - 15 0.0156 - 16 0.0039 - 29 0.0039 - 31 0.00195 - 40 0.00585 - 41 0.00195 - - 26 226 16 0 - 0 0.00885 - 2 0.00442 - 3 0.00442 - 4 0.00885 - 7 0.0221 - 8 0.0133 - 9 0.00442 - 13 0.23 - 14 0.664 - 15 0.00885 - 16 0.00885 - 21 0.00442 - 22 0.00442 - 40 0.00442 - 41 0.00442 - 42 0.00442 - - 38 5 4 0 - 9 0.2 - 40 0.4 - 41 0.2 - 44 0.2 - - 39 5169 20 0 - 2 0.00193 - 3 0.946 - 4 0.0192 - 7 0.0135 - 8 0.000193 - 9 0.00058 - 12 0.000387 - 13 0.00271 - 14 0.000387 - 15 0.000193 - 21 0.00058 - 26 0.00174 - 29 0.000193 - 31 0.000193 - 40 0.00658 - 41 0.00368 - 42 0.000387 - 43 0.00116 - 44 0.000193 - 45 0.000193 - - 41 1 1 0 - 44 1 - - 4 42 8 0 - 0 0.0238 - 3 0.0238 - 4 0.0476 - 7 0.0952 - 13 0.738 - 15 0.0238 - 35 0.0238 - 42 0.0238 - - 7 10 6 0 - 3 0.4 - 4 0.2 - 8 0.1 - 13 0.1 - 20 0.1 - 40 0.1 - - 8 58 11 2 - 4 0.069 - 7 0.276 - 8 0.0862 - 13 0.103 - 14 0.328 - 15 0.0345 - 20 0.0345 - 29 0.0172 - 31 0.0172 - 35 0.0172 - 40 0.0172 - - 4 23 5 0 - 7 0.348 - 8 0.0435 - 13 0.0435 - 14 0.522 - 29 0.0435 - - 7 12 8 0 - 4 0.167 - 7 0.0833 - 8 0.167 - 13 0.167 - 14 0.167 - 15 0.0833 - 20 0.0833 - 31 0.0833 - - 9 98 14 3 - 0 0.0102 - 2 0.0102 - 4 0.0204 - 7 0.194 - 8 0.0714 - 13 0.112 - 14 0.102 - 15 0.0204 - 19 0.0102 - 26 0.0204 - 29 0.0102 - 40 0.337 - 41 0.0612 - 42 0.0204 - - 2 78 13 0 - 0 0.0128 - 2 0.0128 - 4 0.0256 - 7 0.244 - 8 0.0513 - 13 0.0256 - 14 0.0897 - 19 0.0128 - 26 0.0256 - 29 0.0128 - 40 0.41 - 41 0.0641 - 42 0.0128 - - 3 13 7 0 - 8 0.154 - 13 0.308 - 14 0.154 - 15 0.154 - 40 0.0769 - 41 0.0769 - 42 0.0769 - - 13 4 2 0 - 13 0.75 - 14 0.25 - - 13 248 19 6 - 0 0.00403 - 2 0.0605 - 3 0.153 - 4 0.0282 - 7 0.343 - 8 0.0242 - 9 0.0282 - 13 0.0605 - 14 0.0605 - 20 0.0161 - 21 0.00806 - 26 0.0605 - 31 0.00403 - 35 0.00806 - 40 0.0927 - 41 0.0323 - 42 0.00806 - 43 0.00403 - 46 0.00403 - - 3 165 15 0 - 2 0.0667 - 3 0.218 - 4 0.0242 - 7 0.255 - 8 0.0121 - 9 0.0242 - 13 0.0848 - 14 0.0303 - 21 0.00606 - 26 0.0788 - 31 0.00606 - 40 0.127 - 41 0.0485 - 42 0.0121 - 43 0.00606 - - 4 33 8 0 - 2 0.0606 - 3 0.0606 - 7 0.394 - 8 0.121 - 9 0.0303 - 14 0.273 - 21 0.0303 - 46 0.0303 - - 7 24 8 0 - 0 0.0417 - 4 0.0833 - 7 0.5 - 13 0.0417 - 14 0.0417 - 20 0.125 - 35 0.0833 - 40 0.0833 - - 8 4 2 0 - 7 0.75 - 9 0.25 - - 21 12 3 0 - 4 0.0833 - 7 0.833 - 20 0.0833 - - 47 5 4 0 - 2 0.2 - 7 0.2 - 9 0.2 - 26 0.4 - - 14 83 17 4 - 0 0.012 - 3 0.012 - 4 0.205 - 7 0.229 - 8 0.0843 - 9 0.0723 - 13 0.0361 - 14 0.0602 - 15 0.0602 - 20 0.0482 - 21 0.0602 - 22 0.0361 - 29 0.012 - 31 0.012 - 35 0.0361 - 41 0.012 - 46 0.012 - - 3 59 14 0 - 3 0.0169 - 4 0.288 - 7 0.0339 - 8 0.119 - 9 0.0847 - 13 0.0508 - 14 0.0847 - 15 0.0678 - 20 0.0508 - 21 0.0847 - 22 0.0339 - 29 0.0169 - 31 0.0169 - 35 0.0508 - - 7 16 5 0 - 0 0.0625 - 7 0.75 - 9 0.0625 - 15 0.0625 - 46 0.0625 - - 8 3 2 0 - 7 0.667 - 22 0.333 - - 21 4 2 0 - 7 0.75 - 41 0.25 - - 17 36 2 0 - 4 0.833 - 20 0.167 - - 21 56 10 3 - 0 0.0179 - 4 0.304 - 7 0.0893 - 8 0.143 - 14 0.125 - 20 0.0179 - 21 0.0536 - 31 0.0179 - 40 0.0714 - 41 0.161 - - 2 32 8 0 - 0 0.0312 - 4 0.0625 - 7 0.125 - 8 0.125 - 14 0.219 - 21 0.0312 - 40 0.125 - 41 0.281 - - 7 12 5 0 - 4 0.417 - 7 0.0833 - 8 0.333 - 20 0.0833 - 31 0.0833 - - 21 11 2 0 - 4 0.818 - 21 0.182 - - 22 6 6 0 - 8 0.167 - 9 0.167 - 13 0.167 - 29 0.167 - 30 0.167 - 40 0.167 - - 23 1 1 0 - 21 1 - - 26 12 1 0 - 3 1 - - 28 2 1 0 - 4 1 - - 39 5169 1 0 - 3 1 - - 47 9444 33 13 - 0 0.00582 - 2 0.0125 - 3 0.00498 - 4 0.0389 - 6 0.000106 - 7 0.213 - 8 0.049 - 9 0.00402 - 12 0.0018 - 13 0.175 - 14 0.15 - 15 0.0159 - 16 0.00127 - 19 0.000741 - 20 0.00201 - 21 0.00466 - 22 0.000529 - 25 0.000106 - 26 0.0335 - 29 0.00201 - 30 0.00191 - 31 0.00561 - 34 0.000529 - 35 0.000741 - 37 0.000106 - 40 0.111 - 41 0.131 - 42 0.00805 - 43 0.0185 - 44 0.00476 - 45 0.000529 - 46 0.000212 - 47 0.000741 - - 3 8844 32 0 - 0 0.00565 - 2 0.0131 - 3 0.000905 - 4 0.0321 - 6 0.000113 - 7 0.212 - 8 0.0485 - 9 0.00317 - 12 0.00192 - 13 0.179 - 14 0.154 - 15 0.0158 - 16 0.00136 - 19 0.000678 - 20 0.000113 - 21 0.00373 - 22 0.000226 - 25 0.000113 - 26 0.0351 - 29 0.0017 - 30 0.00192 - 31 0.00554 - 34 0.000565 - 37 0.000113 - 40 0.111 - 41 0.137 - 42 0.00803 - 43 0.0197 - 44 0.00509 - 45 0.000565 - 46 0.000113 - 47 0.000791 - - 4 41 7 0 - 0 0.0244 - 4 0.0488 - 7 0.0976 - 13 0.756 - 15 0.0244 - 35 0.0244 - 42 0.0244 - - 7 3 3 0 - 4 0.333 - 20 0.333 - 40 0.333 - - 8 58 11 0 - 4 0.069 - 7 0.276 - 8 0.0862 - 13 0.103 - 14 0.328 - 15 0.0345 - 20 0.0345 - 29 0.0172 - 31 0.0172 - 35 0.0172 - 40 0.0172 - - 9 98 14 0 - 0 0.0102 - 2 0.0102 - 4 0.0204 - 7 0.194 - 8 0.0714 - 13 0.112 - 14 0.102 - 15 0.0204 - 19 0.0102 - 26 0.0204 - 29 0.0102 - 40 0.337 - 41 0.0612 - 42 0.0204 - - 13 211 19 0 - 0 0.00474 - 2 0.00474 - 3 0.175 - 4 0.0332 - 7 0.37 - 8 0.0284 - 9 0.0142 - 13 0.0711 - 14 0.0711 - 20 0.019 - 21 0.00948 - 26 0.019 - 31 0.00474 - 35 0.00948 - 40 0.109 - 41 0.0379 - 42 0.00948 - 43 0.00474 - 46 0.00474 - - 14 82 16 0 - 0 0.0122 - 3 0.0122 - 4 0.207 - 7 0.232 - 8 0.0854 - 9 0.0732 - 13 0.0366 - 14 0.061 - 15 0.061 - 20 0.0488 - 21 0.061 - 22 0.0366 - 29 0.0122 - 31 0.0122 - 35 0.0366 - 41 0.0122 - - 17 36 2 0 - 4 0.833 - 20 0.167 - - 21 56 10 0 - 0 0.0179 - 4 0.304 - 7 0.0893 - 8 0.143 - 14 0.125 - 20 0.0179 - 21 0.0536 - 31 0.0179 - 40 0.0714 - 41 0.161 - - 22 6 6 0 - 8 0.167 - 9 0.167 - 13 0.167 - 29 0.167 - 30 0.167 - 40 0.167 - - 23 1 1 0 - 21 1 - - 26 1 1 0 - 3 1 - - 28 2 1 0 - 4 1 - -61 113 10 4 - 0 0.0177 - 2 0.0265 - 7 0.133 - 21 0.00885 - 29 0.0177 - 30 0.00885 - 33 0.0177 - 40 0.372 - 41 0.327 - 42 0.0708 - - 2 1 1 0 - 21 1 - - 47 47 7 0 - 0 0.0213 - 2 0.0213 - 29 0.0213 - 33 0.0213 - 40 0.447 - 41 0.383 - 42 0.0851 - - 49 14 4 0 - 7 0.786 - 30 0.0714 - 41 0.0714 - 42 0.0714 - - 57 19 3 0 - 40 0.579 - 41 0.316 - 42 0.105 - -62 239664 43 23 - 0 0.00769 - 1 8.35e-06 - 2 0.0246 - 3 0.000417 - 4 0.00451 - 5 0.000255 - 6 8.35e-06 - 7 0.0107 - 8 0.00105 - 9 7.09e-05 - 10 7.09e-05 - 11 8.35e-06 - 12 0.00318 - 13 0.00107 - 14 0.00113 - 15 0.00279 - 16 2.5e-05 - 17 2.09e-05 - 19 0.00431 - 20 0.000559 - 21 0.00236 - 22 9.6e-05 - 23 2.09e-05 - 26 0.00115 - 27 1.25e-05 - 28 0.000221 - 29 0.0016 - 30 0.000421 - 31 0.000184 - 32 0.00053 - 33 0.0016 - 34 0.0002 - 35 3.34e-05 - 37 0.000526 - 39 3.34e-05 - 40 0.438 - 41 0.154 - 42 0.0193 - 43 0.00174 - 44 0.000538 - 45 0.000726 - 46 0.0115 - 47 0.303 - - 0 1 1 0 - 21 1 - - 2 2635 38 8 - 0 0.00835 - 1 0.00038 - 2 0.00038 - 3 0.022 - 4 0.25 - 5 0.0121 - 7 0.049 - 8 0.0509 - 9 0.0038 - 10 0.00607 - 12 0.00417 - 13 0.055 - 14 0.0687 - 15 0.12 - 16 0.00152 - 17 0.00114 - 19 0.205 - 20 0.0364 - 21 0.0509 - 22 0.00114 - 23 0.00114 - 26 0.00569 - 27 0.00038 - 28 0.00342 - 29 0.00114 - 30 0.00873 - 31 0.00152 - 32 0.00038 - 33 0.00152 - 34 0.00114 - 35 0.000759 - 37 0.00569 - 39 0.00114 - 41 0.0114 - 42 0.00038 - 43 0.00038 - 44 0.00152 - 45 0.00645 - - 41 1755 33 0 - 0 0.00627 - 2 0.00057 - 3 0.0131 - 4 0.271 - 5 0.0114 - 7 0.0581 - 8 0.0541 - 9 0.00399 - 10 0.00513 - 12 0.00399 - 13 0.045 - 14 0.0638 - 15 0.113 - 16 0.00228 - 17 0.00114 - 19 0.226 - 20 0.0336 - 21 0.049 - 22 0.00114 - 23 0.00114 - 26 0.00285 - 28 0.00228 - 29 0.00057 - 30 0.0108 - 31 0.00171 - 34 0.00057 - 35 0.00057 - 37 0.00741 - 39 0.00114 - 41 0.00342 - 42 0.00057 - 44 0.00057 - 45 0.00399 - - 42 83 20 0 - 0 0.0241 - 1 0.012 - 3 0.0361 - 4 0.229 - 7 0.0602 - 8 0.0361 - 10 0.0241 - 12 0.012 - 13 0.0482 - 14 0.0241 - 15 0.108 - 19 0.157 - 20 0.012 - 21 0.0964 - 26 0.012 - 27 0.012 - 28 0.012 - 35 0.012 - 41 0.0602 - 44 0.012 - - 44 1 1 0 - 43 1 - - 45 16 5 0 - 4 0.188 - 13 0.125 - 14 0.0625 - 19 0.562 - 21 0.0625 - - 46 38 11 0 - 4 0.158 - 7 0.0263 - 13 0.0526 - 14 0.0526 - 15 0.0789 - 19 0.316 - 20 0.0526 - 21 0.0526 - 22 0.0263 - 37 0.0263 - 45 0.158 - - 58 43 14 0 - 3 0.0465 - 4 0.256 - 5 0.0465 - 7 0.0233 - 8 0.0698 - 12 0.0233 - 13 0.0698 - 14 0.093 - 15 0.0465 - 19 0.186 - 20 0.0698 - 21 0.0233 - 28 0.0233 - 45 0.0233 - - 62 696 30 0 - 0 0.0129 - 3 0.0388 - 4 0.208 - 5 0.0144 - 7 0.0287 - 8 0.0474 - 9 0.00431 - 10 0.00718 - 12 0.00287 - 13 0.079 - 14 0.0862 - 15 0.149 - 17 0.00144 - 19 0.147 - 20 0.0445 - 21 0.0517 - 23 0.00144 - 26 0.0129 - 28 0.00431 - 29 0.00287 - 30 0.00575 - 31 0.00144 - 32 0.00144 - 33 0.00575 - 34 0.00287 - 37 0.00144 - 39 0.00144 - 41 0.0273 - 44 0.00287 - 45 0.00431 - - 69 2 1 0 - 3 1 - - 7 42 8 1 - 3 0.0238 - 4 0.286 - 5 0.0238 - 7 0.0238 - 13 0.0476 - 14 0.167 - 15 0.0476 - 19 0.381 - - 62 4 3 0 - 3 0.25 - 4 0.25 - 14 0.5 - - 21 32 13 1 - 3 0.0312 - 4 0.156 - 7 0.0312 - 8 0.0312 - 9 0.0312 - 15 0.0625 - 19 0.312 - 20 0.0625 - 21 0.0938 - 26 0.0625 - 28 0.0312 - 37 0.0625 - 41 0.0312 - - 2 7 5 0 - 4 0.429 - 15 0.143 - 19 0.143 - 21 0.143 - 37 0.143 - - 40 35953 5 2 - 40 2.78e-05 - 43 0.00337 - 45 0.000278 - 46 0.06 - 47 0.936 - - 6 1 1 0 - 43 1 - - 62 2516 4 0 - 43 0.00556 - 45 0.000795 - 46 0.0823 - 47 0.911 - - 41 2397 27 8 - 0 0.00167 - 2 0.736 - 3 0.00292 - 4 0.0217 - 5 0.00375 - 6 0.000417 - 7 0.0321 - 8 0.000834 - 9 0.000417 - 12 0.000417 - 13 0.00709 - 14 0.00501 - 15 0.0375 - 19 0.0209 - 20 0.00167 - 21 0.0196 - 23 0.000417 - 26 0.00125 - 27 0.000417 - 28 0.00125 - 29 0.00125 - 30 0.00626 - 33 0.00292 - 34 0.000834 - 45 0.00501 - 46 0.0868 - 47 0.00209 - - 2 26 8 0 - 3 0.0385 - 4 0.0385 - 7 0.615 - 9 0.0385 - 19 0.0769 - 21 0.115 - 27 0.0385 - 30 0.0385 - - 6 1 1 0 - 26 1 - - 21 1 1 0 - 45 1 - - 49 4 3 0 - 2 0.25 - 7 0.5 - 21 0.25 - - 55 8 5 0 - 7 0.25 - 15 0.125 - 21 0.125 - 30 0.125 - 46 0.375 - - 58 7 3 0 - 2 0.143 - 14 0.143 - 45 0.714 - - 62 2139 22 0 - 2 0.813 - 3 0.00234 - 4 0.0229 - 5 0.00421 - 6 0.000468 - 7 0.022 - 8 0.000935 - 13 0.00748 - 14 0.00421 - 15 0.0411 - 19 0.0206 - 20 0.0014 - 21 0.0173 - 23 0.000468 - 26 0.000935 - 28 0.0014 - 29 0.000468 - 30 0.00468 - 33 0.000935 - 34 0.000468 - 45 0.00234 - 46 0.0299 - - 69 206 19 0 - 0 0.0194 - 2 0.0971 - 3 0.00485 - 4 0.00971 - 7 0.0388 - 12 0.00485 - 13 0.00485 - 14 0.00971 - 15 0.00485 - 19 0.0194 - 20 0.00485 - 21 0.0243 - 29 0.00971 - 30 0.0146 - 33 0.0243 - 34 0.00485 - 45 0.00485 - 46 0.675 - 47 0.0243 - - 42 977 35 6 - 0 0.00102 - 1 0.00102 - 2 0.088 - 3 0.0143 - 4 0.148 - 5 0.00614 - 7 0.0645 - 8 0.0287 - 9 0.00409 - 10 0.00102 - 11 0.00205 - 13 0.0409 - 14 0.0409 - 15 0.1 - 16 0.00205 - 17 0.00102 - 19 0.141 - 20 0.0194 - 21 0.0522 - 23 0.00102 - 26 0.00512 - 27 0.00102 - 28 0.00921 - 30 0.00614 - 31 0.00102 - 34 0.00205 - 35 0.00205 - 37 0.00512 - 39 0.00205 - 40 0.0747 - 41 0.00102 - 42 0.00205 - 45 0.0491 - 46 0.00409 - 47 0.0768 - - 42 2 1 0 - 45 1 - - 46 6 1 0 - 47 1 - - 58 4 3 0 - 7 0.25 - 21 0.25 - 45 0.5 - - 62 815 34 0 - 0 0.00123 - 1 0.00123 - 2 0.103 - 3 0.0172 - 4 0.178 - 5 0.00736 - 7 0.0736 - 8 0.0331 - 9 0.00491 - 10 0.00123 - 11 0.00245 - 13 0.0479 - 14 0.0491 - 15 0.119 - 16 0.00245 - 17 0.00123 - 19 0.168 - 20 0.0233 - 21 0.0577 - 23 0.00123 - 26 0.00613 - 27 0.00123 - 28 0.011 - 30 0.00736 - 31 0.00123 - 34 0.00245 - 35 0.00245 - 37 0.00491 - 39 0.00123 - 40 0.00859 - 42 0.00245 - 45 0.0528 - 46 0.00245 - 47 0.00245 - - 66 3 3 0 - 2 0.333 - 8 0.333 - 40 0.333 - - 69 144 13 0 - 2 0.00694 - 7 0.0139 - 13 0.00694 - 15 0.00694 - 19 0.00694 - 21 0.0208 - 37 0.00694 - 39 0.00694 - 40 0.444 - 41 0.00694 - 45 0.00694 - 46 0.0139 - 47 0.451 - - 43 125 4 3 - 20 0.008 - 40 0.032 - 42 0.008 - 47 0.952 - - 2 1 1 0 - 20 1 - - 40 115 2 0 - 42 0.0087 - 47 0.991 - - 69 4 1 0 - 40 1 - - 45 82 15 5 - 0 0.0244 - 2 0.22 - 4 0.134 - 5 0.0122 - 7 0.11 - 8 0.0122 - 13 0.0244 - 14 0.0122 - 15 0.0244 - 19 0.146 - 20 0.0366 - 21 0.0732 - 28 0.0366 - 37 0.0122 - 47 0.122 - - 2 15 7 0 - 0 0.0667 - 4 0.4 - 5 0.0667 - 7 0.133 - 19 0.0667 - 21 0.133 - 28 0.133 - - 40 10 1 0 - 47 1 - - 41 11 4 0 - 2 0.636 - 8 0.0909 - 19 0.182 - 21 0.0909 - - 42 31 11 0 - 0 0.0323 - 4 0.161 - 7 0.194 - 13 0.0645 - 14 0.0323 - 15 0.0645 - 19 0.258 - 20 0.0968 - 21 0.0323 - 28 0.0323 - 37 0.0323 - - 58 13 3 0 - 2 0.846 - 7 0.0769 - 19 0.0769 - - 46 2445 19 7 - 0 0.00164 - 2 0.0225 - 4 0.00204 - 6 0.000409 - 7 0.00573 - 15 0.00777 - 19 0.0151 - 21 0.00164 - 26 0.000818 - 28 0.000409 - 29 0.0139 - 30 0.000409 - 33 0.0278 - 40 0.00409 - 42 0.00327 - 43 0.00368 - 45 0.000409 - 46 0.00859 - 47 0.88 - - 40 2157 5 0 - 2 0.000464 - 42 0.00278 - 43 0.00278 - 46 0.00881 - 47 0.985 - - 41 201 13 0 - 0 0.00995 - 2 0.169 - 4 0.0249 - 6 0.00498 - 7 0.0149 - 15 0.0796 - 19 0.179 - 21 0.00498 - 29 0.169 - 30 0.00498 - 33 0.328 - 45 0.00498 - 46 0.00498 - - 42 4 3 0 - 28 0.25 - 40 0.25 - 47 0.5 - - 48 12 2 0 - 2 0.667 - 7 0.333 - - 55 11 6 0 - 2 0.182 - 7 0.364 - 21 0.0909 - 26 0.0909 - 33 0.0909 - 42 0.182 - - 62 7 4 0 - 2 0.571 - 15 0.143 - 19 0.143 - 47 0.143 - - 69 33 10 0 - 0 0.0606 - 2 0.182 - 7 0.0909 - 15 0.0606 - 21 0.0606 - 26 0.0303 - 40 0.273 - 43 0.0909 - 46 0.0303 - 47 0.121 - - 47 95402 34 17 - 0 0.00953 - 2 0.0171 - 3 8.39e-05 - 4 0.000954 - 5 6.29e-05 - 7 0.0109 - 8 0.000419 - 12 0.00393 - 13 0.000241 - 14 0.000157 - 15 0.000618 - 19 0.00136 - 20 5.24e-05 - 21 0.00164 - 22 0.000105 - 26 0.00125 - 28 0.000136 - 29 0.00199 - 30 0.000293 - 31 0.000199 - 32 0.00066 - 33 0.00197 - 34 0.00021 - 35 2.1e-05 - 37 0.000514 - 39 2.1e-05 - 40 0.361 - 41 0.181 - 42 0.0191 - 43 0.00153 - 44 0.000566 - 45 0.000356 - 46 0.00162 - 47 0.38 - - 40 33670 2 0 - 43 0.000178 - 47 1 - - 41 47 15 0 - 0 0.0851 - 2 0.17 - 4 0.0213 - 7 0.0213 - 12 0.0213 - 13 0.0213 - 14 0.0426 - 15 0.0213 - 19 0.0851 - 20 0.0213 - 29 0.0638 - 33 0.149 - 45 0.0213 - 46 0.149 - 47 0.106 - - 42 78 4 0 - 19 0.0128 - 39 0.0128 - 41 0.0128 - 47 0.962 - - 43 119 1 0 - 47 1 - - 45 10 1 0 - 47 1 - - 46 2350 15 0 - 0 0.0017 - 2 0.00723 - 4 0.00213 - 7 0.00383 - 15 0.00766 - 19 0.014 - 21 0.0017 - 26 0.000851 - 29 0.0145 - 33 0.0277 - 42 0.000851 - 43 0.0017 - 45 0.000426 - 46 0.000426 - 47 0.915 - - 48 773 21 0 - 0 0.0103 - 2 0.0414 - 4 0.00517 - 7 0.19 - 12 0.00517 - 14 0.00129 - 15 0.00129 - 19 0.00259 - 21 0.00517 - 26 0.00129 - 30 0.00129 - 31 0.00129 - 32 0.00129 - 33 0.00129 - 37 0.00259 - 40 0.446 - 41 0.254 - 42 0.0207 - 43 0.00259 - 46 0.00129 - 47 0.00388 - - 49 56 9 0 - 0 0.0357 - 2 0.0357 - 7 0.125 - 15 0.0179 - 40 0.393 - 41 0.304 - 42 0.0536 - 46 0.0179 - 47 0.0179 - - 55 709 22 0 - 0 0.00846 - 2 0.0367 - 4 0.00282 - 7 0.0339 - 8 0.00282 - 12 0.00705 - 15 0.00282 - 21 0.00564 - 22 0.00141 - 26 0.00423 - 29 0.00282 - 30 0.00423 - 32 0.00423 - 33 0.00141 - 34 0.00564 - 37 0.00282 - 40 0.54 - 41 0.288 - 42 0.0339 - 43 0.00282 - 46 0.00423 - 47 0.00423 - - 57 217 12 0 - 0 0.00461 - 2 0.023 - 7 0.0184 - 12 0.00461 - 19 0.00461 - 21 0.0138 - 26 0.0138 - 40 0.479 - 41 0.392 - 42 0.0369 - 46 0.00461 - 47 0.00461 - - 58 11 4 0 - 8 0.0909 - 28 0.0909 - 40 0.545 - 41 0.273 - - 62 880 12 0 - 2 0.00227 - 7 0.00114 - 12 0.00114 - 19 0.00227 - 28 0.00114 - 29 0.00227 - 40 0.512 - 41 0.441 - 42 0.017 - 43 0.00341 - 46 0.00568 - 47 0.0102 - - 64 87 4 0 - 7 0.0115 - 40 0.747 - 41 0.23 - 43 0.0115 - - 65 4 4 0 - 40 0.25 - 41 0.25 - 46 0.25 - 47 0.25 - - 67 7 2 0 - 46 0.143 - 47 0.857 - - 68 12 6 0 - 2 0.0833 - 15 0.0833 - 19 0.0833 - 40 0.417 - 41 0.25 - 42 0.0833 - - 69 56363 34 0 - 0 0.0157 - 2 0.0273 - 3 0.000142 - 4 0.0014 - 5 0.000106 - 7 0.015 - 8 0.000656 - 12 0.00644 - 13 0.00039 - 14 0.000213 - 15 0.000621 - 19 0.00153 - 20 7.1e-05 - 21 0.0025 - 22 0.00016 - 26 0.00195 - 28 0.000195 - 29 0.00264 - 30 0.000426 - 31 0.000319 - 32 0.00105 - 33 0.00202 - 34 0.000284 - 35 3.55e-05 - 37 0.000798 - 39 1.77e-05 - 40 0.587 - 41 0.29 - 42 0.031 - 43 0.00227 - 44 0.000958 - 45 0.000568 - 46 0.00238 - 47 0.00405 - - 48 811 21 4 - 0 0.00986 - 2 0.0395 - 4 0.00493 - 7 0.211 - 12 0.00493 - 14 0.00123 - 15 0.00123 - 19 0.00247 - 21 0.00493 - 26 0.00123 - 30 0.00123 - 31 0.00123 - 32 0.00123 - 33 0.00123 - 37 0.00247 - 40 0.428 - 41 0.242 - 42 0.0197 - 43 0.00247 - 46 0.016 - 47 0.0037 - - 45 54 4 0 - 7 0.037 - 40 0.556 - 41 0.204 - 46 0.204 - - 47 350 14 0 - 2 0.0229 - 4 0.0114 - 7 0.354 - 14 0.00286 - 19 0.00286 - 21 0.00857 - 26 0.00286 - 30 0.00286 - 31 0.00286 - 32 0.00286 - 33 0.00286 - 40 0.291 - 41 0.28 - 42 0.0114 - - 49 8 2 0 - 40 0.125 - 41 0.875 - - 55 393 14 0 - 0 0.0204 - 2 0.0611 - 7 0.115 - 12 0.0102 - 15 0.00254 - 19 0.00254 - 21 0.00254 - 37 0.00509 - 40 0.532 - 41 0.201 - 42 0.0305 - 43 0.00509 - 46 0.00509 - 47 0.00763 - - 49 97 22 6 - 0 0.0309 - 2 0.0206 - 3 0.0103 - 4 0.0515 - 7 0.144 - 8 0.0206 - 12 0.0103 - 13 0.0103 - 14 0.0309 - 15 0.0206 - 19 0.0515 - 21 0.0206 - 26 0.0309 - 28 0.0103 - 33 0.0103 - 37 0.0103 - 40 0.237 - 41 0.216 - 42 0.0309 - 45 0.0103 - 46 0.0103 - 47 0.0103 - - 2 20 13 0 - 0 0.05 - 4 0.1 - 7 0.05 - 8 0.05 - 12 0.05 - 13 0.05 - 14 0.1 - 19 0.2 - 26 0.1 - 33 0.05 - 40 0.05 - 41 0.1 - 45 0.05 - - 41 20 11 0 - 3 0.05 - 4 0.15 - 8 0.05 - 14 0.05 - 15 0.05 - 19 0.05 - 21 0.1 - 28 0.05 - 40 0.2 - 41 0.1 - 42 0.15 - - 47 18 6 0 - 0 0.0556 - 7 0.222 - 40 0.222 - 41 0.389 - 46 0.0556 - 47 0.0556 - - 48 5 2 0 - 40 0.8 - 41 0.2 - - 55 31 7 0 - 0 0.0323 - 2 0.0645 - 7 0.29 - 15 0.0323 - 26 0.0323 - 40 0.258 - 41 0.29 - - 69 2 2 0 - 37 0.5 - 40 0.5 - - 51 13 2 0 - 40 0.846 - 41 0.154 - - 55 895 23 6 - 0 0.0067 - 2 0.0291 - 4 0.00223 - 7 0.15 - 8 0.00223 - 12 0.00559 - 15 0.00223 - 21 0.00559 - 22 0.00112 - 26 0.0101 - 29 0.00223 - 30 0.00335 - 32 0.00335 - 33 0.00112 - 34 0.00447 - 37 0.00223 - 40 0.482 - 41 0.237 - 42 0.0268 - 43 0.00223 - 45 0.00223 - 46 0.0156 - 47 0.00335 - - 45 72 4 0 - 40 0.556 - 41 0.278 - 42 0.0139 - 46 0.153 - - 47 526 22 0 - 0 0.0076 - 2 0.0209 - 4 0.0019 - 7 0.228 - 8 0.0019 - 12 0.0076 - 15 0.0038 - 21 0.0076 - 22 0.0019 - 26 0.0152 - 29 0.0038 - 30 0.0057 - 32 0.0038 - 33 0.0019 - 34 0.0076 - 37 0.0019 - 40 0.376 - 41 0.27 - 42 0.0228 - 43 0.0038 - 45 0.0038 - 46 0.0019 - - 48 18 6 0 - 2 0.0556 - 7 0.167 - 26 0.0556 - 40 0.389 - 41 0.278 - 47 0.0556 - - 49 11 3 0 - 7 0.273 - 40 0.0909 - 41 0.636 - - 55 195 14 0 - 0 0.00513 - 2 0.0718 - 4 0.00513 - 7 0.041 - 8 0.00513 - 12 0.00513 - 21 0.00513 - 32 0.00513 - 37 0.00513 - 40 0.631 - 41 0.159 - 42 0.0462 - 46 0.00513 - 47 0.0103 - - 69 59 4 0 - 0 0.0169 - 40 0.915 - 41 0.0508 - 42 0.0169 - - 57 259 12 4 - 0 0.00386 - 2 0.0193 - 7 0.0502 - 12 0.00386 - 19 0.00386 - 21 0.0116 - 26 0.0154 - 40 0.517 - 41 0.332 - 42 0.0347 - 46 0.00386 - 47 0.00386 - - 41 24 4 0 - 7 0.0417 - 40 0.833 - 41 0.0833 - 42 0.0417 - - 47 26 4 0 - 21 0.0385 - 26 0.0385 - 40 0.269 - 41 0.654 - - 48 24 6 0 - 2 0.0417 - 7 0.167 - 40 0.333 - 41 0.333 - 42 0.0833 - 47 0.0417 - - 69 30 5 0 - 0 0.0333 - 26 0.0333 - 40 0.7 - 41 0.2 - 42 0.0333 - - 58 100 11 4 - 2 0.43 - 7 0.08 - 8 0.02 - 19 0.01 - 21 0.01 - 26 0.01 - 28 0.01 - 40 0.14 - 41 0.1 - 42 0.04 - 45 0.15 - - 2 3 3 0 - 8 0.333 - 19 0.333 - 26 0.333 - - 46 9 4 0 - 40 0.222 - 41 0.556 - 42 0.111 - 45 0.111 - - 62 73 9 0 - 2 0.562 - 7 0.0274 - 8 0.0137 - 21 0.0137 - 28 0.0137 - 40 0.11 - 41 0.0411 - 42 0.0411 - 45 0.178 - - 69 11 4 0 - 7 0.545 - 40 0.273 - 41 0.0909 - 45 0.0909 - - 62 7159 19 11 - 2 0.0976 - 4 0.00014 - 7 0.00279 - 8 0.000419 - 12 0.00014 - 15 0.00014 - 19 0.000419 - 21 0.000419 - 28 0.00014 - 29 0.000279 - 37 0.000279 - 40 0.414 - 41 0.361 - 42 0.116 - 43 0.000419 - 44 0.00182 - 45 0.00014 - 46 0.00168 - 47 0.00126 - - 2 2599 15 0 - 2 0.0104 - 7 0.00577 - 8 0.000385 - 12 0.000385 - 19 0.00077 - 28 0.000385 - 29 0.00077 - 37 0.000385 - 40 0.809 - 41 0.155 - 42 0.0119 - 43 0.00077 - 44 0.000385 - 46 0.00154 - 47 0.00192 - - 7 43 4 0 - 2 0.0233 - 40 0.86 - 41 0.093 - 44 0.0233 - - 21 30 5 0 - 2 0.0333 - 40 0.767 - 41 0.133 - 42 0.0333 - 46 0.0333 - - 41 488 5 0 - 2 0.248 - 40 0.184 - 41 0.514 - 42 0.0492 - 46 0.0041 - - 42 697 6 0 - 2 0.00717 - 40 0.859 - 41 0.0689 - 42 0.0588 - 46 0.00143 - 47 0.0043 - - 44 12 3 0 - 2 0.167 - 41 0.5 - 42 0.333 - - 45 222 7 0 - 2 0.113 - 7 0.0045 - 40 0.189 - 41 0.568 - 42 0.104 - 46 0.018 - 47 0.0045 - - 47 2942 13 0 - 2 0.171 - 4 0.00034 - 7 0.00102 - 8 0.00068 - 15 0.00034 - 19 0.00034 - 21 0.00102 - 37 0.00034 - 40 0.00034 - 41 0.582 - 42 0.238 - 44 0.00374 - 45 0.00034 - - 48 36 3 0 - 7 0.0278 - 40 0.833 - 41 0.139 - - 49 36 4 0 - 2 0.0556 - 40 0.75 - 41 0.167 - 43 0.0278 - - 57 12 3 0 - 2 0.5 - 40 0.167 - 41 0.333 - - 64 106 7 1 - 2 0.00943 - 7 0.00943 - 21 0.00943 - 40 0.755 - 41 0.198 - 42 0.00943 - 43 0.00943 - - 47 1 1 0 - 42 1 - - 66 32 3 0 - 40 0.781 - 41 0.125 - 42 0.0938 - - 67 9 3 0 - 40 0.222 - 46 0.111 - 47 0.667 - - 68 12 6 0 - 2 0.0833 - 15 0.0833 - 19 0.0833 - 40 0.417 - 41 0.25 - 42 0.0833 - - 69 90067 36 14 - 0 0.00981 - 2 0.0171 - 3 0.000111 - 4 0.000999 - 5 6.66e-05 - 7 0.00973 - 8 0.000411 - 9 1.11e-05 - 12 0.00403 - 13 0.000289 - 14 0.000133 - 15 0.000811 - 17 1.11e-05 - 19 0.000966 - 20 4.44e-05 - 21 0.0016 - 22 9.99e-05 - 26 0.00123 - 28 0.000122 - 29 0.00165 - 30 0.000266 - 31 0.000211 - 32 0.000655 - 33 0.00127 - 34 0.000189 - 35 2.22e-05 - 37 0.000522 - 39 1.11e-05 - 40 0.736 - 41 0.184 - 42 0.021 - 43 0.00147 - 44 0.000644 - 45 0.000366 - 46 0.00185 - 47 0.00253 - - 2 19 3 0 - 40 0.895 - 41 0.0526 - 44 0.0526 - - 4 32 4 0 - 7 0.0312 - 12 0.0312 - 40 0.844 - 41 0.0938 - - 21 122 8 0 - 0 0.0082 - 2 0.0082 - 7 0.0246 - 29 0.0164 - 40 0.631 - 41 0.27 - 42 0.0328 - 47 0.0082 - - 41 838 11 0 - 0 0.00119 - 2 0.00477 - 4 0.00119 - 15 0.0143 - 33 0.00119 - 37 0.00119 - 40 0.899 - 41 0.0513 - 42 0.0203 - 43 0.00239 - 47 0.00358 - - 43 28 3 0 - 0 0.0714 - 40 0.464 - 41 0.464 - - 45 334 7 0 - 2 0.00898 - 7 0.00299 - 40 0.557 - 41 0.38 - 42 0.018 - 46 0.0269 - 47 0.00599 - - 46 98 10 0 - 0 0.0102 - 2 0.0102 - 3 0.0102 - 4 0.0204 - 7 0.0102 - 15 0.255 - 40 0.531 - 41 0.122 - 42 0.0204 - 43 0.0102 - - 47 23686 34 0 - 0 0.0246 - 2 0.021 - 3 0.000253 - 4 0.00186 - 5 8.44e-05 - 7 0.0269 - 8 0.00118 - 12 0.0117 - 13 0.00076 - 14 0.000169 - 15 0.000844 - 17 4.22e-05 - 19 0.00101 - 20 4.22e-05 - 21 0.00422 - 22 0.000338 - 26 0.00355 - 28 0.000296 - 29 0.00469 - 30 0.000633 - 31 0.000633 - 32 0.00182 - 33 0.00338 - 34 0.000464 - 37 0.00148 - 39 4.22e-05 - 40 0.625 - 41 0.231 - 42 0.0221 - 43 0.00207 - 44 0.000929 - 45 0.000929 - 46 0.00312 - 47 0.00262 - - 49 3383 23 0 - 0 0.00532 - 2 0.00769 - 3 0.000296 - 4 0.000887 - 7 0.00236 - 9 0.000296 - 12 0.00236 - 13 0.000591 - 15 0.000591 - 19 0.000296 - 21 0.00118 - 26 0.000296 - 29 0.000887 - 30 0.000887 - 32 0.000887 - 33 0.000887 - 40 0.792 - 41 0.156 - 42 0.021 - 43 0.00118 - 44 0.000296 - 46 0.00148 - 47 0.00207 - - 55 60684 33 0 - 0 0.0046 - 2 0.0165 - 3 3.3e-05 - 4 0.000659 - 5 6.59e-05 - 7 0.00369 - 8 0.000148 - 12 0.00125 - 13 9.89e-05 - 14 0.000132 - 15 0.000214 - 19 0.00101 - 20 4.94e-05 - 21 0.000659 - 22 1.65e-05 - 26 0.000428 - 28 6.59e-05 - 29 0.000527 - 30 9.89e-05 - 31 6.59e-05 - 32 0.000214 - 33 0.000478 - 34 9.89e-05 - 35 3.3e-05 - 37 0.000181 - 40 0.774 - 41 0.168 - 42 0.0204 - 43 0.00125 - 44 0.00056 - 45 0.000165 - 46 0.00129 - 47 0.0025 - - 57 196 6 0 - 2 0.0153 - 29 0.0051 - 40 0.811 - 41 0.122 - 42 0.0408 - 45 0.0051 - - 58 207 4 0 - 2 0.00966 - 40 0.928 - 41 0.0338 - 42 0.029 - - 62 256 6 0 - 2 0.00781 - 15 0.00391 - 33 0.00391 - 40 0.793 - 41 0.148 - 42 0.043 - - 64 121 6 0 - 19 0.00826 - 40 0.785 - 41 0.132 - 42 0.0579 - 46 0.00826 - 47 0.00826 - -63 79666 1 0 - 47 1 - -64 76641 43 33 - 0 0.0391 - 1 9.13e-05 - 2 0.0169 - 3 0.00201 - 4 0.0542 - 5 0.0026 - 7 0.0151 - 8 0.011 - 9 0.000692 - 10 0.000665 - 11 1.3e-05 - 12 0.0139 - 13 0.0113 - 14 0.0129 - 15 0.0225 - 16 0.000209 - 17 0.000326 - 18 2.61e-05 - 19 0.0442 - 20 0.00497 - 21 0.00892 - 22 0.000248 - 23 1.3e-05 - 26 0.00343 - 28 0.000613 - 29 0.0176 - 30 0.00316 - 31 0.00274 - 32 0.00857 - 33 0.0137 - 34 0.000626 - 35 0.000535 - 36 5.22e-05 - 37 0.001 - 39 0.000183 - 40 0.488 - 41 0.175 - 42 0.0152 - 43 0.00151 - 44 0.000887 - 45 0.0024 - 46 0.00119 - 47 0.00198 - - 0 1 1 0 - 14 1 - - 2 337 19 7 - 0 0.00297 - 3 0.00297 - 4 0.0623 - 5 0.00297 - 7 0.623 - 8 0.00297 - 14 0.0119 - 15 0.00297 - 19 0.0089 - 20 0.00297 - 21 0.0415 - 22 0.00297 - 26 0.00297 - 34 0.0564 - 35 0.0712 - 36 0.0119 - 37 0.0742 - 41 0.0089 - 45 0.00593 - - 7 2 1 0 - 21 1 - - 41 107 11 0 - 4 0.0467 - 7 0.729 - 14 0.00935 - 19 0.00935 - 21 0.028 - 22 0.00935 - 34 0.0654 - 35 0.0374 - 37 0.0374 - 41 0.00935 - 45 0.0187 - - 42 9 4 0 - 7 0.444 - 34 0.111 - 37 0.333 - 41 0.111 - - 46 8 2 0 - 7 0.875 - 14 0.125 - - 47 10 7 0 - 4 0.2 - 5 0.1 - 8 0.1 - 14 0.2 - 19 0.2 - 20 0.1 - 26 0.1 - - 62 6 2 0 - 15 0.167 - 21 0.833 - - 64 194 10 0 - 0 0.00515 - 3 0.00515 - 4 0.0722 - 7 0.619 - 21 0.0206 - 34 0.0567 - 35 0.103 - 36 0.0206 - 37 0.0928 - 41 0.00515 - - 4 202 13 0 - 3 0.0149 - 7 0.0297 - 8 0.153 - 10 0.0149 - 13 0.411 - 15 0.158 - 20 0.173 - 21 0.0099 - 31 0.00495 - 33 0.00495 - 41 0.00495 - 42 0.0099 - 44 0.0099 - - 7 10169 37 8 - 0 0.00521 - 1 0.000492 - 2 0.00059 - 3 0.0103 - 4 0.305 - 5 0.0145 - 7 0.0308 - 8 0.061 - 9 0.00403 - 10 0.00334 - 11 9.83e-05 - 12 9.83e-05 - 13 0.0558 - 14 0.0677 - 15 0.116 - 16 0.00108 - 17 0.00187 - 19 0.217 - 20 0.0234 - 21 0.0175 - 22 0.000885 - 26 0.00413 - 28 0.000983 - 29 9.83e-05 - 30 0.0177 - 31 0.0146 - 32 0.000295 - 33 0.000492 - 34 0.000197 - 35 0.000787 - 37 0.00256 - 39 0.000787 - 41 0.006 - 42 0.000197 - 43 0.000197 - 44 0.000787 - 45 0.0137 - - 7 48 11 0 - 4 0.25 - 5 0.0208 - 10 0.0208 - 13 0.0625 - 14 0.0625 - 15 0.0208 - 19 0.458 - 20 0.0208 - 26 0.0417 - 30 0.0208 - 42 0.0208 - - 21 246 16 0 - 4 0.341 - 5 0.0163 - 7 0.0203 - 8 0.061 - 9 0.00407 - 13 0.061 - 14 0.0447 - 15 0.0813 - 19 0.285 - 20 0.0203 - 21 0.0163 - 26 0.00407 - 28 0.0244 - 30 0.0122 - 31 0.00407 - 45 0.00407 - - 35 5 2 0 - 4 0.8 - 13 0.2 - - 44 3 2 0 - 15 0.333 - 43 0.667 - - 47 9705 36 0 - 0 0.00546 - 1 0.000515 - 2 0.000618 - 3 0.0108 - 4 0.304 - 5 0.0145 - 7 0.0316 - 8 0.0613 - 9 0.00412 - 10 0.0034 - 11 0.000103 - 12 0.000103 - 13 0.0551 - 14 0.0687 - 15 0.117 - 16 0.00113 - 17 0.00196 - 19 0.214 - 20 0.0236 - 21 0.0177 - 22 0.000927 - 26 0.00402 - 28 0.000412 - 29 0.000103 - 30 0.018 - 31 0.015 - 32 0.000309 - 33 0.000515 - 34 0.000206 - 35 0.000824 - 37 0.00268 - 39 0.000824 - 41 0.00629 - 42 0.000103 - 44 0.000721 - 45 0.0141 - - 49 106 13 0 - 4 0.311 - 5 0.00943 - 7 0.00943 - 8 0.066 - 13 0.0943 - 14 0.066 - 15 0.123 - 19 0.255 - 20 0.0189 - 21 0.0189 - 30 0.00943 - 31 0.00943 - 44 0.00943 - - 55 47 6 0 - 4 0.383 - 8 0.0213 - 13 0.0638 - 15 0.298 - 19 0.213 - 20 0.0213 - - 57 5 3 0 - 4 0.4 - 8 0.4 - 45 0.2 - - 12 1 1 0 - 9 1 - - 13 52 10 2 - 4 0.0385 - 5 0.0192 - 7 0.0385 - 13 0.0192 - 14 0.0192 - 15 0.0192 - 19 0.0385 - 26 0.75 - 30 0.0385 - 41 0.0192 - - 7 45 5 0 - 4 0.0444 - 5 0.0222 - 14 0.0222 - 19 0.0444 - 26 0.867 - - 47 7 5 0 - 7 0.286 - 13 0.143 - 15 0.143 - 30 0.286 - 41 0.143 - - 15 14 3 0 - 4 0.0714 - 15 0.857 - 19 0.0714 - - 21 134 22 5 - 0 0.0224 - 3 0.0149 - 4 0.239 - 5 0.00746 - 7 0.0448 - 8 0.0896 - 9 0.0224 - 10 0.00746 - 13 0.0299 - 14 0.00746 - 15 0.0373 - 19 0.134 - 20 0.0224 - 21 0.112 - 26 0.0149 - 28 0.00746 - 30 0.0149 - 31 0.0821 - 40 0.0224 - 41 0.0373 - 44 0.0149 - 45 0.0149 - - 2 7 4 0 - 19 0.143 - 40 0.429 - 41 0.286 - 45 0.143 - - 7 7 5 0 - 4 0.143 - 7 0.143 - 8 0.143 - 19 0.429 - 26 0.143 - - 21 6 4 0 - 4 0.167 - 15 0.5 - 26 0.167 - 44 0.167 - - 37 1 1 0 - 28 1 - - 47 107 19 0 - 0 0.028 - 3 0.0187 - 4 0.252 - 5 0.00935 - 7 0.0374 - 8 0.103 - 9 0.028 - 10 0.00935 - 13 0.0374 - 14 0.00935 - 15 0.0187 - 19 0.121 - 20 0.028 - 21 0.14 - 30 0.0187 - 31 0.0935 - 41 0.028 - 44 0.00935 - 45 0.00935 - - 26 2 1 0 - 4 1 - - 28 1 1 0 - 26 1 - - 34 10 8 0 - 4 0.1 - 5 0.1 - 8 0.1 - 10 0.1 - 14 0.1 - 15 0.1 - 20 0.1 - 21 0.3 - - 37 1 1 0 - 21 1 - - 40 24 3 0 - 42 0.0417 - 46 0.292 - 47 0.667 - - 41 246 21 8 - 0 0.0122 - 2 0.423 - 3 0.00407 - 4 0.0203 - 7 0.301 - 8 0.0163 - 13 0.00813 - 15 0.00407 - 19 0.0122 - 20 0.00407 - 21 0.0569 - 26 0.00407 - 29 0.00407 - 30 0.0366 - 31 0.0122 - 33 0.00407 - 34 0.0163 - 35 0.00813 - 37 0.0203 - 45 0.00813 - 46 0.0244 - - 7 49 10 0 - 4 0.0204 - 7 0.673 - 8 0.0204 - 20 0.0204 - 21 0.0204 - 26 0.0204 - 30 0.102 - 31 0.0612 - 37 0.0204 - 45 0.0408 - - 49 2 2 0 - 34 0.5 - 37 0.5 - - 55 1 1 0 - 0 1 - - 57 2 1 0 - 19 1 - - 62 7 5 0 - 4 0.143 - 13 0.286 - 19 0.143 - 21 0.286 - 29 0.143 - - 64 136 10 0 - 0 0.0147 - 2 0.765 - 4 0.00735 - 7 0.0809 - 21 0.0221 - 30 0.00735 - 34 0.0221 - 35 0.0147 - 37 0.0221 - 46 0.0441 - - 71 11 5 0 - 4 0.0909 - 7 0.273 - 8 0.273 - 21 0.273 - 30 0.0909 - - 72 36 6 0 - 3 0.0278 - 7 0.75 - 15 0.0278 - 21 0.111 - 30 0.0556 - 33 0.0278 - - 42 22 7 1 - 1 0.0455 - 2 0.409 - 7 0.136 - 21 0.0455 - 37 0.227 - 45 0.0455 - 47 0.0909 - - 62 2 1 0 - 47 1 - - 43 4 4 0 - 4 0.25 - 9 0.25 - 12 0.25 - 29 0.25 - - 44 1 1 0 - 26 1 - - 45 112 19 3 - 0 0.0179 - 1 0.00893 - 3 0.0179 - 4 0.259 - 5 0.0536 - 7 0.0804 - 8 0.0536 - 10 0.0179 - 13 0.0536 - 14 0.0625 - 15 0.0179 - 17 0.00893 - 19 0.259 - 20 0.0268 - 21 0.0179 - 31 0.00893 - 33 0.00893 - 34 0.00893 - 37 0.0179 - - 41 2 2 0 - 15 0.5 - 31 0.5 - - 58 2 2 0 - 10 0.5 - 37 0.5 - - 72 2 2 0 - 0 0.5 - 33 0.5 - - 46 17 5 3 - 2 0.412 - 34 0.0588 - 42 0.0588 - 44 0.0588 - 47 0.412 - - 40 7 1 0 - 47 1 - - 41 6 2 0 - 2 0.833 - 34 0.167 - - 62 2 2 0 - 42 0.5 - 44 0.5 - - 47 27924 33 12 - 0 0.0193 - 2 0.0173 - 4 0.00147 - 5 0.000215 - 7 0.00806 - 8 0.000143 - 12 0.00623 - 13 0.00043 - 14 0.000215 - 15 0.00043 - 19 0.0024 - 20 0.000179 - 21 0.00208 - 22 0.000107 - 26 0.00161 - 28 0.000322 - 29 0.00326 - 30 0.00043 - 31 0.000215 - 32 0.00165 - 33 0.00154 - 34 0.000322 - 35 7.16e-05 - 37 0.000251 - 39 3.58e-05 - 40 0.669 - 41 0.235 - 42 0.0204 - 43 0.00201 - 44 0.000967 - 45 0.000466 - 46 0.00133 - 47 0.00272 - - 40 17 2 0 - 42 0.0588 - 47 0.941 - - 41 9 6 0 - 0 0.222 - 4 0.111 - 13 0.222 - 19 0.111 - 21 0.222 - 29 0.111 - - 42 2 1 0 - 47 1 - - 45 1 1 0 - 19 1 - - 46 9 3 0 - 42 0.111 - 44 0.111 - 47 0.778 - - 51 89 9 0 - 2 0.0112 - 4 0.0112 - 7 0.0112 - 26 0.0225 - 40 0.236 - 41 0.652 - 42 0.0337 - 46 0.0112 - 47 0.0112 - - 62 27364 33 0 - 0 0.0196 - 2 0.0175 - 4 0.00139 - 5 0.000219 - 7 0.00819 - 8 0.000146 - 12 0.00636 - 13 0.000365 - 14 0.000219 - 15 0.000439 - 19 0.00238 - 20 0.000183 - 21 0.00205 - 22 0.00011 - 26 0.00157 - 28 0.000329 - 29 0.00329 - 30 0.000439 - 31 0.000219 - 32 0.00168 - 33 0.00157 - 34 0.000292 - 35 7.31e-05 - 37 0.000256 - 39 3.65e-05 - 40 0.669 - 41 0.236 - 42 0.0203 - 43 0.00201 - 44 0.000914 - 45 0.000475 - 46 0.00132 - 47 0.00175 - - 64 335 5 0 - 40 0.887 - 41 0.0925 - 42 0.0149 - 43 0.00299 - 44 0.00299 - - 65 1 1 0 - 47 1 - - 66 76 6 0 - 2 0.0263 - 4 0.0132 - 34 0.0132 - 40 0.697 - 41 0.237 - 42 0.0132 - - 67 1 1 0 - 47 1 - - 72 3 2 0 - 40 0.333 - 42 0.667 - - 49 5 3 0 - 7 0.4 - 33 0.2 - 41 0.4 - - 50 2 2 0 - 0 0.5 - 7 0.5 - - 51 89 9 1 - 2 0.0112 - 4 0.0112 - 7 0.0112 - 26 0.0225 - 40 0.236 - 41 0.652 - 42 0.0337 - 46 0.0112 - 47 0.0112 - - 21 4 3 0 - 26 0.25 - 41 0.5 - 46 0.25 - - 58 20 13 2 - 0 0.1 - 2 0.05 - 4 0.15 - 7 0.05 - 15 0.1 - 19 0.1 - 20 0.05 - 32 0.05 - 33 0.05 - 35 0.05 - 40 0.05 - 41 0.1 - 45 0.1 - - 2 2 2 0 - 7 0.5 - 35 0.5 - - 72 5 4 0 - 0 0.4 - 4 0.2 - 15 0.2 - 33 0.2 - - 62 27403 33 15 - 0 0.0196 - 2 0.0177 - 4 0.00139 - 5 0.000219 - 7 0.00821 - 8 0.000146 - 12 0.00635 - 13 0.000365 - 14 0.000219 - 15 0.000438 - 19 0.00237 - 20 0.000182 - 21 0.00204 - 22 0.000109 - 26 0.00157 - 28 0.000328 - 29 0.00328 - 30 0.000438 - 31 0.000219 - 32 0.00168 - 33 0.00157 - 34 0.000292 - 35 7.3e-05 - 37 0.000255 - 39 3.65e-05 - 40 0.668 - 41 0.236 - 42 0.0204 - 43 0.00201 - 44 0.000912 - 45 0.000511 - 46 0.00139 - 47 0.00175 - - 4 201 8 0 - 0 0.00995 - 2 0.0498 - 7 0.00498 - 29 0.00498 - 30 0.00498 - 40 0.796 - 41 0.124 - 42 0.00498 - - 7 9838 29 0 - 0 0.00498 - 2 0.0176 - 4 0.00203 - 5 0.000305 - 7 0.00407 - 8 0.000102 - 12 0.00173 - 13 0.000203 - 14 0.000407 - 15 0.000813 - 19 0.00335 - 20 0.000203 - 21 0.00102 - 26 0.000712 - 28 0.000305 - 29 0.00122 - 32 0.000407 - 33 0.00152 - 34 0.000102 - 37 0.000203 - 39 0.000102 - 40 0.665 - 41 0.273 - 42 0.0147 - 43 0.00193 - 44 0.00061 - 45 0.000305 - 46 0.000813 - 47 0.00173 - - 13 50 6 0 - 2 0.02 - 7 0.02 - 40 0.68 - 41 0.22 - 42 0.04 - 46 0.02 - - 15 14 3 0 - 0 0.0714 - 33 0.0714 - 41 0.857 - - 21 118 6 0 - 2 0.00847 - 7 0.0169 - 40 0.525 - 41 0.432 - 42 0.00847 - 47 0.00847 - - 41 95 3 0 - 2 0.0105 - 40 0.905 - 41 0.0842 - - 45 132 6 0 - 35 0.00758 - 40 0.788 - 41 0.136 - 42 0.0303 - 46 0.0152 - 47 0.0227 - - 47 7896 30 0 - 0 0.0215 - 2 0.0193 - 4 0.000887 - 5 0.000127 - 7 0.0146 - 8 0.000253 - 12 0.0057 - 13 0.00038 - 15 0.000253 - 19 0.00127 - 21 0.00177 - 22 0.00038 - 26 0.00203 - 28 0.000253 - 29 0.0019 - 30 0.00076 - 31 0.000127 - 32 0.000633 - 33 0.00127 - 34 0.00038 - 35 0.000127 - 37 0.000633 - 40 0.769 - 41 0.135 - 42 0.0168 - 43 0.000633 - 44 0.00076 - 45 0.000253 - 46 0.00139 - 47 0.0019 - - 58 12 4 0 - 19 0.0833 - 40 0.667 - 41 0.167 - 43 0.0833 - - 68 2 2 0 - 19 0.5 - 46 0.5 - - 70 36 6 0 - 0 0.0278 - 12 0.0278 - 40 0.556 - 41 0.333 - 42 0.0278 - 44 0.0278 - - 71 1931 24 0 - 0 0.0109 - 2 0.0166 - 4 0.00311 - 5 0.000518 - 7 0.0088 - 12 0.00414 - 13 0.00104 - 14 0.00104 - 15 0.000518 - 19 0.00984 - 20 0.00104 - 21 0.00104 - 29 0.000518 - 31 0.000518 - 32 0.00104 - 34 0.000518 - 40 0.572 - 41 0.328 - 42 0.029 - 43 0.00363 - 44 0.00155 - 45 0.000518 - 46 0.00311 - 47 0.00104 - - 72 6697 28 0 - 0 0.0426 - 2 0.0166 - 4 0.000597 - 5 0.000149 - 7 0.00732 - 8 0.000149 - 12 0.0148 - 13 0.000448 - 15 0.000149 - 19 0.000149 - 20 0.000149 - 21 0.00433 - 26 0.00284 - 28 0.000597 - 29 0.00881 - 30 0.000747 - 31 0.000597 - 32 0.00523 - 33 0.00254 - 34 0.000448 - 40 0.579 - 41 0.274 - 42 0.03 - 43 0.00314 - 44 0.00119 - 45 0.00119 - 46 0.00134 - 47 0.00134 - - 73 320 12 0 - 0 0.025 - 2 0.0125 - 12 0.0125 - 21 0.00313 - 26 0.00313 - 29 0.00625 - 40 0.669 - 41 0.216 - 42 0.0406 - 43 0.00625 - 44 0.00313 - 47 0.00313 - - 74 14 2 0 - 4 0.0714 - 41 0.929 - - 64 690 9 3 - 2 0.281 - 7 0.00145 - 35 0.00145 - 40 0.432 - 41 0.243 - 42 0.0348 - 43 0.00145 - 44 0.00145 - 46 0.0029 - - 2 306 6 0 - 7 0.00327 - 40 0.892 - 41 0.0882 - 42 0.0098 - 43 0.00327 - 44 0.00327 - - 42 7 2 0 - 40 0.429 - 42 0.571 - - 47 337 5 0 - 2 0.561 - 35 0.00297 - 41 0.38 - 42 0.0504 - 46 0.00593 - - 65 1 1 0 - 47 1 - - 66 76 6 0 - 2 0.0263 - 4 0.0132 - 34 0.0132 - 40 0.697 - 41 0.237 - 42 0.0132 - - 67 2 2 0 - 40 0.5 - 47 0.5 - - 70 36 7 0 - 4 0.417 - 9 0.0278 - 14 0.0278 - 15 0.0278 - 19 0.444 - 20 0.0278 - 26 0.0278 - - 71 1951 27 2 - 0 0.000513 - 3 0.00718 - 4 0.281 - 5 0.0118 - 7 0.00923 - 8 0.0492 - 9 0.00154 - 10 0.00205 - 13 0.063 - 14 0.0866 - 15 0.121 - 16 0.00154 - 17 0.00205 - 19 0.255 - 20 0.0297 - 21 0.0128 - 26 0.0308 - 28 0.000513 - 29 0.00103 - 30 0.0118 - 31 0.00923 - 34 0.000513 - 35 0.000513 - 39 0.000513 - 40 0.000513 - 41 0.00871 - 45 0.00154 - - 2 1 1 0 - 28 1 - - 21 5 4 0 - 4 0.2 - 8 0.2 - 19 0.4 - 31 0.2 - - 72 6756 35 3 - 0 0.274 - 2 0.000296 - 3 0.00074 - 4 0.0333 - 5 0.000148 - 7 0.00873 - 8 0.00784 - 9 0.000444 - 10 0.000888 - 12 0.106 - 13 0.00562 - 14 0.00977 - 15 0.0255 - 16 0.000148 - 17 0.000148 - 18 0.000296 - 19 0.0598 - 20 0.0037 - 21 0.0465 - 22 0.000444 - 23 0.000148 - 26 0.00296 - 28 0.00252 - 29 0.172 - 30 0.000296 - 31 0.00237 - 32 0.083 - 33 0.141 - 34 0.000296 - 40 0.000148 - 41 0.00918 - 42 0.000296 - 43 0.000296 - 44 0.000296 - 45 0.000888 - - 44 2 1 0 - 43 1 - - 49 7 4 0 - 0 0.143 - 4 0.143 - 15 0.143 - 19 0.571 - - 60 3 2 0 - 4 0.667 - 8 0.333 - - 73 321 15 0 - 0 0.00623 - 3 0.0654 - 4 0.249 - 5 0.0187 - 8 0.0312 - 13 0.0623 - 14 0.112 - 15 0.159 - 16 0.00312 - 19 0.249 - 20 0.0125 - 21 0.00312 - 26 0.0156 - 39 0.00935 - 41 0.00312 - -65 580 13 7 - 2 0.00862 - 4 0.0069 - 19 0.00345 - 29 0.0069 - 30 0.00345 - 33 0.00345 - 37 0.00172 - 40 0.372 - 41 0.0069 - 42 0.0138 - 43 0.00172 - 46 0.0914 - 47 0.479 - - 2 1 1 0 - 37 1 - - 40 158 6 1 - 4 0.00633 - 41 0.00633 - 42 0.00633 - 43 0.00633 - 46 0.215 - 47 0.759 - - 72 1 1 0 - 42 1 - - 46 19 5 0 - 19 0.0526 - 29 0.105 - 33 0.0526 - 46 0.0526 - 47 0.737 - - 47 198 11 3 - 2 0.0101 - 4 0.0101 - 19 0.00505 - 29 0.0101 - 30 0.00505 - 33 0.00505 - 40 0.146 - 41 0.0101 - 42 0.0101 - 46 0.0859 - 47 0.702 - - 40 139 5 0 - 4 0.00719 - 41 0.00719 - 42 0.00719 - 46 0.115 - 47 0.863 - - 46 18 4 0 - 19 0.0556 - 29 0.111 - 33 0.0556 - 47 0.778 - - 67 32 7 0 - 2 0.0625 - 4 0.0312 - 30 0.0312 - 40 0.781 - 41 0.0312 - 42 0.0312 - 46 0.0312 - - 62 6 2 0 - 40 0.833 - 42 0.167 - - 65 2 2 0 - 2 0.5 - 40 0.5 - - 67 184 7 0 - 2 0.0109 - 4 0.00543 - 30 0.00543 - 40 0.946 - 41 0.00543 - 42 0.0217 - 46 0.00543 - -66 8140 31 21 - 0 0.00123 - 2 0.00147 - 3 0.00909 - 4 0.0339 - 5 0.000246 - 7 0.00823 - 8 0.0043 - 9 0.000246 - 13 0.00799 - 14 0.00381 - 15 0.177 - 16 0.000123 - 17 0.000123 - 19 0.00332 - 20 0.00209 - 21 0.00209 - 26 0.00135 - 30 0.00455 - 31 0.000369 - 34 0.000246 - 35 0.000369 - 37 0.000614 - 39 0.000123 - 40 0.239 - 41 0.0378 - 42 0.0108 - 43 0.000123 - 44 0.000123 - 45 0.00639 - 46 0.00541 - 47 0.438 - - 0 38 10 0 - 4 0.263 - 8 0.0789 - 13 0.0789 - 14 0.0526 - 15 0.316 - 17 0.0263 - 19 0.0789 - 20 0.0526 - 21 0.0263 - 31 0.0263 - - 2 4 4 0 - 0 0.25 - 20 0.25 - 21 0.25 - 30 0.25 - - 12 3 3 0 - 4 0.333 - 19 0.333 - 20 0.333 - - 28 1 1 0 - 3 1 - - 29 3 3 0 - 4 0.333 - 13 0.333 - 42 0.333 - - 32 1 1 0 - 13 1 - - 33 3 3 0 - 4 0.333 - 13 0.333 - 15 0.333 - - 40 1764 4 2 - 43 0.000567 - 45 0.0034 - 46 0.0227 - 47 0.973 - - 55 1602 4 0 - 43 0.000624 - 45 0.00375 - 46 0.00936 - 47 0.986 - - 62 82 2 0 - 46 0.293 - 47 0.707 - - 41 62 7 1 - 2 0.0484 - 4 0.0161 - 7 0.194 - 13 0.0161 - 21 0.0484 - 30 0.516 - 45 0.161 - - 64 2 1 0 - 21 1 - - 42 53 8 0 - 3 0.0189 - 4 0.0189 - 15 0.0189 - 21 0.0377 - 31 0.0189 - 40 0.0755 - 45 0.585 - 47 0.226 - - 45 45 9 2 - 4 0.178 - 5 0.0444 - 7 0.111 - 13 0.0444 - 19 0.378 - 35 0.0444 - 37 0.0444 - 44 0.0222 - 47 0.133 - - 40 6 1 0 - 47 1 - - 42 28 6 0 - 4 0.25 - 7 0.143 - 13 0.0357 - 19 0.464 - 35 0.0357 - 37 0.0714 - - 46 40 1 0 - 47 1 - - 47 2027 11 8 - 0 0.00148 - 2 0.00197 - 4 0.000493 - 19 0.000987 - 34 0.000493 - 40 0.0449 - 41 0.0607 - 42 0.00839 - 45 0.000493 - 46 0.000987 - 47 0.879 - - 40 1717 1 0 - 47 1 - - 46 40 1 0 - 47 1 - - 48 4 2 0 - 40 0.5 - 41 0.5 - - 55 174 9 0 - 0 0.0115 - 2 0.00575 - 19 0.0115 - 40 0.333 - 41 0.546 - 42 0.046 - 45 0.00575 - 46 0.0115 - 47 0.0287 - - 57 11 4 0 - 0 0.0909 - 40 0.182 - 41 0.364 - 42 0.364 - - 64 3 2 0 - 40 0.333 - 42 0.667 - - 66 1 1 0 - 42 1 - - 69 55 6 0 - 2 0.0545 - 4 0.0182 - 34 0.0182 - 40 0.491 - 41 0.382 - 42 0.0364 - - 48 6 3 0 - 7 0.167 - 40 0.5 - 41 0.333 - - 49 5 4 0 - 0 0.4 - 13 0.2 - 40 0.2 - 41 0.2 - - 55 1940 18 5 - 0 0.00103 - 2 0.000515 - 4 0.00258 - 7 0.017 - 8 0.00206 - 13 0.000515 - 14 0.000515 - 15 0.000515 - 19 0.00103 - 21 0.00206 - 26 0.00464 - 30 0.00103 - 40 0.856 - 41 0.0778 - 42 0.0278 - 45 0.00155 - 46 0.00103 - 47 0.00258 - - 0 38 7 0 - 2 0.0263 - 4 0.132 - 8 0.105 - 14 0.0263 - 21 0.0526 - 40 0.553 - 41 0.105 - - 12 3 3 0 - 21 0.333 - 40 0.333 - 41 0.333 - - 47 5 1 0 - 26 1 - - 55 8 3 0 - 7 0.25 - 40 0.625 - 41 0.125 - - 69 1873 14 0 - 0 0.00107 - 7 0.0166 - 13 0.000534 - 15 0.000534 - 19 0.00107 - 21 0.000534 - 26 0.0016 - 30 0.00107 - 40 0.868 - 41 0.0758 - 42 0.0278 - 45 0.0016 - 46 0.00107 - 47 0.00267 - - 57 52 9 3 - 0 0.0192 - 4 0.0385 - 7 0.154 - 8 0.0192 - 13 0.0192 - 21 0.0192 - 40 0.538 - 41 0.115 - 42 0.0769 - - 41 9 2 0 - 40 0.667 - 41 0.333 - - 55 34 8 0 - 0 0.0294 - 4 0.0588 - 7 0.235 - 8 0.0294 - 13 0.0294 - 21 0.0294 - 40 0.529 - 41 0.0588 - - 57 8 3 0 - 40 0.375 - 41 0.125 - 42 0.5 - - 62 85 2 0 - 40 0.976 - 42 0.0235 - - 64 28 3 1 - 40 0.786 - 41 0.0714 - 42 0.143 - - 47 3 2 0 - 41 0.667 - 42 0.333 - - 66 6 4 0 - 2 0.167 - 40 0.333 - 41 0.167 - 42 0.333 - - 69 1970 25 11 - 0 0.000508 - 2 0.00152 - 3 0.0365 - 4 0.124 - 7 0.00406 - 8 0.0137 - 9 0.00102 - 13 0.0269 - 14 0.0142 - 15 0.722 - 16 0.000508 - 19 0.00102 - 20 0.0066 - 21 0.00254 - 26 0.00102 - 30 0.00102 - 31 0.000508 - 34 0.000508 - 35 0.000508 - 37 0.00152 - 39 0.000508 - 40 0.0264 - 41 0.0107 - 42 0.00203 - 45 0.000508 - - 21 4 3 0 - 3 0.25 - 4 0.25 - 40 0.5 - - 41 231 7 0 - 3 0.0216 - 4 0.104 - 8 0.013 - 13 0.0346 - 14 0.0346 - 15 0.788 - 16 0.00433 - - 46 1168 6 0 - 3 0.0402 - 4 0.0753 - 8 0.00856 - 13 0.018 - 15 0.854 - 20 0.00342 - - 47 152 13 0 - 0 0.00658 - 3 0.0263 - 4 0.178 - 8 0.0197 - 13 0.0592 - 14 0.0197 - 15 0.605 - 19 0.0132 - 20 0.0395 - 21 0.00658 - 30 0.0132 - 31 0.00658 - 42 0.00658 - - 48 25 7 0 - 3 0.04 - 4 0.56 - 7 0.08 - 8 0.08 - 15 0.16 - 20 0.04 - 35 0.04 - - 49 54 9 0 - 3 0.037 - 4 0.463 - 8 0.037 - 9 0.0185 - 13 0.185 - 14 0.0741 - 15 0.0926 - 21 0.037 - 37 0.0556 - - 55 82 7 0 - 2 0.0366 - 4 0.0488 - 7 0.0122 - 34 0.0122 - 40 0.61 - 41 0.256 - 42 0.0244 - - 57 76 11 0 - 3 0.0526 - 4 0.382 - 7 0.0526 - 8 0.0132 - 13 0.0263 - 14 0.118 - 15 0.289 - 20 0.0132 - 21 0.0263 - 39 0.0132 - 45 0.0132 - - 58 6 4 0 - 4 0.333 - 7 0.167 - 15 0.167 - 26 0.333 - - 62 111 5 0 - 3 0.0541 - 4 0.045 - 8 0.00901 - 13 0.018 - 15 0.874 - - 69 54 9 0 - 3 0.0185 - 4 0.407 - 8 0.0926 - 9 0.0185 - 13 0.0185 - 14 0.0741 - 15 0.333 - 20 0.0185 - 42 0.0185 - -67 1431 33 20 - 0 0.0314 - 1 0.000699 - 2 0.00699 - 4 0.0664 - 5 0.0021 - 7 0.0175 - 8 0.0133 - 12 0.000699 - 13 0.0175 - 14 0.00559 - 15 0.0182 - 16 0.0014 - 17 0.000699 - 19 0.0783 - 20 0.000699 - 21 0.051 - 24 0.000699 - 26 0.0021 - 28 0.0783 - 29 0.0014 - 30 0.0168 - 31 0.00839 - 32 0.0028 - 34 0.000699 - 35 0.0028 - 37 0.0014 - 40 0.366 - 41 0.0175 - 42 0.00978 - 43 0.0028 - 45 0.0014 - 46 0.0266 - 47 0.148 - - 0 167 12 1 - 4 0.299 - 5 0.018 - 7 0.024 - 8 0.018 - 13 0.0599 - 14 0.018 - 15 0.108 - 16 0.00599 - 17 0.00599 - 19 0.311 - 21 0.108 - 30 0.024 - - 2 8 3 0 - 13 0.125 - 15 0.125 - 19 0.75 - - 2 5 4 0 - 0 0.4 - 12 0.2 - 13 0.2 - 35 0.2 - - 12 94 11 0 - 0 0.0426 - 4 0.202 - 8 0.0106 - 13 0.0319 - 14 0.0319 - 15 0.0532 - 19 0.447 - 20 0.0106 - 21 0.106 - 28 0.0532 - 45 0.0106 - - 14 2 1 0 - 4 1 - - 21 28 6 1 - 4 0.286 - 13 0.0714 - 15 0.0357 - 16 0.0357 - 19 0.536 - 30 0.0357 - - 55 2 2 0 - 15 0.5 - 30 0.5 - - 40 130 8 1 - 0 0.00769 - 4 0.00769 - 35 0.00769 - 40 0.0231 - 41 0.0154 - 42 0.0154 - 46 0.146 - 47 0.777 - - 40 3 2 0 - 40 0.667 - 47 0.333 - - 41 11 6 0 - 0 0.0909 - 2 0.273 - 4 0.0909 - 7 0.273 - 21 0.0909 - 28 0.182 - - 45 2 2 0 - 15 0.5 - 37 0.5 - - 46 8 4 0 - 7 0.125 - 28 0.125 - 43 0.125 - 47 0.625 - - 47 342 12 7 - 0 0.00292 - 2 0.00877 - 4 0.00292 - 7 0.00585 - 30 0.00292 - 35 0.00292 - 40 0.576 - 41 0.0175 - 42 0.0205 - 43 0.00585 - 46 0.0439 - 47 0.31 - - 40 120 7 0 - 0 0.00833 - 4 0.00833 - 35 0.00833 - 41 0.0167 - 42 0.0167 - 46 0.1 - 47 0.842 - - 46 7 3 0 - 7 0.143 - 43 0.143 - 47 0.714 - - 48 8 2 0 - 40 0.875 - 41 0.125 - - 55 14 3 0 - 40 0.786 - 42 0.0714 - 46 0.143 - - 57 8 2 0 - 7 0.125 - 40 0.875 - - 69 176 5 0 - 2 0.017 - 30 0.00568 - 40 0.943 - 41 0.017 - 42 0.017 - - 73 1 1 0 - 43 1 - - 48 23 5 0 - 7 0.13 - 21 0.0435 - 26 0.0435 - 40 0.739 - 41 0.0435 - - 49 29 11 0 - 0 0.138 - 4 0.069 - 7 0.0345 - 8 0.069 - 13 0.0345 - 21 0.0345 - 28 0.414 - 29 0.0345 - 30 0.0345 - 40 0.103 - 41 0.0345 - - 55 278 19 8 - 0 0.112 - 4 0.036 - 7 0.0324 - 8 0.0468 - 13 0.0288 - 14 0.00719 - 21 0.144 - 24 0.0036 - 26 0.00719 - 28 0.331 - 29 0.0036 - 30 0.0576 - 31 0.0432 - 32 0.0144 - 37 0.0036 - 40 0.0935 - 41 0.0216 - 42 0.0036 - 46 0.0108 - - 0 145 17 0 - 0 0.0621 - 4 0.0621 - 7 0.0414 - 8 0.0552 - 13 0.0414 - 21 0.193 - 24 0.0069 - 26 0.0138 - 28 0.248 - 29 0.0069 - 30 0.11 - 31 0.0828 - 32 0.0207 - 37 0.0069 - 40 0.0345 - 41 0.0069 - 42 0.0069 - - 12 75 6 0 - 0 0.253 - 21 0.107 - 28 0.587 - 32 0.0133 - 40 0.0133 - 41 0.0267 - - 14 2 1 0 - 13 1 - - 21 27 8 0 - 0 0.111 - 4 0.037 - 8 0.148 - 14 0.037 - 21 0.0741 - 28 0.444 - 40 0.111 - 41 0.037 - - 45 1 1 0 - 46 1 - - 49 4 3 0 - 21 0.25 - 40 0.5 - 41 0.25 - - 55 16 3 0 - 7 0.0625 - 40 0.812 - 46 0.125 - - 69 5 5 0 - 7 0.2 - 8 0.2 - 14 0.2 - 21 0.2 - 41 0.2 - - 57 11 3 0 - 7 0.0909 - 40 0.818 - 41 0.0909 - - 58 2 2 0 - 34 0.5 - 45 0.5 - - 62 6 3 0 - 4 0.167 - 40 0.667 - 41 0.167 - - 64 10 2 0 - 40 0.9 - 41 0.1 - - 67 13 7 1 - 0 0.0769 - 2 0.0769 - 7 0.0769 - 35 0.0769 - 40 0.385 - 41 0.231 - 46 0.0769 - - 47 5 3 0 - 0 0.2 - 2 0.2 - 41 0.6 - - 69 267 9 1 - 1 0.00375 - 2 0.0112 - 15 0.00375 - 19 0.0112 - 21 0.00749 - 30 0.00375 - 40 0.936 - 41 0.0112 - 42 0.0112 - - 47 56 8 0 - 1 0.0179 - 2 0.0179 - 15 0.0179 - 19 0.0357 - 21 0.0357 - 30 0.0179 - 40 0.821 - 42 0.0357 - - 73 1 1 0 - 43 1 - -68 1301 34 22 - 0 0.00692 - 2 0.00692 - 3 0.000769 - 4 0.0208 - 6 0.000769 - 7 0.0653 - 8 0.0507 - 9 0.00922 - 12 0.000769 - 13 0.119 - 14 0.175 - 15 0.00999 - 16 0.00154 - 19 0.00231 - 20 0.00154 - 21 0.0515 - 22 0.00384 - 23 0.000769 - 26 0.0146 - 29 0.00461 - 30 0.0123 - 31 0.0138 - 32 0.00461 - 34 0.000769 - 35 0.000769 - 36 0.000769 - 37 0.00461 - 40 0.271 - 41 0.0953 - 42 0.0238 - 44 0.000769 - 45 0.00231 - 46 0.00384 - 47 0.0184 - - 2 253 25 10 - 0 0.00395 - 3 0.00395 - 4 0.0553 - 6 0.00395 - 7 0.233 - 8 0.103 - 9 0.0474 - 12 0.00395 - 13 0.0356 - 15 0.00395 - 19 0.00395 - 20 0.00791 - 21 0.241 - 22 0.0198 - 23 0.00395 - 26 0.0474 - 29 0.00791 - 30 0.0593 - 31 0.0593 - 35 0.00395 - 36 0.00395 - 37 0.0237 - 41 0.00791 - 44 0.00395 - 45 0.0119 - - 15 2 1 0 - 8 1 - - 41 45 16 0 - 0 0.0222 - 3 0.0222 - 4 0.0667 - 6 0.0222 - 7 0.2 - 8 0.0889 - 9 0.0222 - 13 0.0444 - 21 0.2 - 22 0.0444 - 26 0.0667 - 29 0.0444 - 30 0.0222 - 31 0.0667 - 36 0.0222 - 37 0.0444 - - 46 3 2 0 - 8 0.333 - 45 0.667 - - 48 47 10 0 - 4 0.128 - 7 0.213 - 8 0.0426 - 12 0.0213 - 13 0.0426 - 21 0.234 - 30 0.128 - 31 0.149 - 41 0.0213 - 45 0.0213 - - 49 27 7 0 - 7 0.63 - 8 0.037 - 15 0.037 - 20 0.037 - 21 0.111 - 23 0.037 - 30 0.111 - - 55 47 14 0 - 4 0.0426 - 7 0.106 - 8 0.0851 - 9 0.213 - 13 0.0213 - 19 0.0213 - 21 0.298 - 22 0.0213 - 26 0.0638 - 30 0.0213 - 31 0.0426 - 35 0.0213 - 37 0.0213 - 41 0.0213 - - 57 51 12 0 - 4 0.0588 - 7 0.157 - 8 0.0196 - 9 0.0196 - 13 0.0588 - 21 0.373 - 22 0.0196 - 26 0.118 - 30 0.0784 - 31 0.0588 - 37 0.0196 - 44 0.0196 - - 62 7 2 0 - 7 0.857 - 21 0.143 - - 66 1 1 0 - 20 1 - - 69 15 5 0 - 7 0.0667 - 8 0.6 - 13 0.0667 - 21 0.2 - 22 0.0667 - - 8 111 5 0 - 8 0.117 - 13 0.306 - 14 0.559 - 16 0.00901 - 42 0.00901 - - 13 51 3 0 - 13 0.333 - 14 0.627 - 41 0.0392 - - 14 13 2 0 - 13 0.538 - 14 0.462 - - 15 18 4 0 - 8 0.167 - 13 0.222 - 14 0.389 - 15 0.222 - - 21 9 5 0 - 4 0.222 - 7 0.222 - 8 0.333 - 21 0.111 - 26 0.111 - - 30 4 1 0 - 13 1 - - 40 12 2 0 - 46 0.0833 - 47 0.917 - - 41 10 8 0 - 2 0.1 - 4 0.1 - 7 0.1 - 8 0.1 - 13 0.2 - 19 0.1 - 21 0.2 - 31 0.1 - - 42 2 2 0 - 34 0.5 - 47 0.5 - - 45 3 3 0 - 4 0.333 - 8 0.333 - 30 0.333 - - 46 1 1 0 - 46 1 - - 47 494 20 17 - 0 0.0081 - 2 0.0081 - 4 0.0081 - 7 0.0142 - 8 0.0344 - 13 0.148 - 14 0.231 - 15 0.0101 - 16 0.00202 - 19 0.00202 - 21 0.00202 - 26 0.00607 - 29 0.00405 - 31 0.00202 - 32 0.00607 - 40 0.344 - 41 0.113 - 42 0.0283 - 46 0.00405 - 47 0.0243 - - 7 1 1 0 - 4 1 - - 8 110 4 0 - 8 0.118 - 13 0.309 - 14 0.564 - 16 0.00909 - - 13 49 2 0 - 13 0.347 - 14 0.653 - - 14 13 2 0 - 13 0.538 - 14 0.462 - - 15 18 4 0 - 8 0.167 - 13 0.222 - 14 0.389 - 15 0.222 - - 30 4 1 0 - 13 1 - - 40 12 2 0 - 46 0.0833 - 47 0.917 - - 41 6 5 0 - 4 0.167 - 7 0.167 - 13 0.333 - 19 0.167 - 31 0.167 - - 46 1 1 0 - 46 1 - - 48 45 9 0 - 2 0.0444 - 7 0.0889 - 13 0.0444 - 14 0.0444 - 26 0.0222 - 32 0.0444 - 40 0.533 - 41 0.111 - 42 0.0667 - - 49 46 7 0 - 0 0.0435 - 2 0.0217 - 7 0.0435 - 26 0.0217 - 32 0.0217 - 40 0.63 - 41 0.217 - - 55 38 6 0 - 14 0.0526 - 15 0.0263 - 29 0.0263 - 40 0.605 - 41 0.211 - 42 0.0789 - - 57 69 7 0 - 0 0.0145 - 2 0.0145 - 21 0.0145 - 29 0.0145 - 40 0.652 - 41 0.232 - 42 0.058 - - 62 17 4 0 - 4 0.0588 - 40 0.647 - 41 0.235 - 42 0.0588 - - 64 21 3 0 - 40 0.714 - 41 0.238 - 42 0.0476 - - 69 34 6 0 - 0 0.0294 - 13 0.0588 - 26 0.0294 - 40 0.618 - 41 0.206 - 42 0.0588 - - 71 1 1 0 - 4 1 - - 48 50 10 0 - 2 0.04 - 4 0.02 - 7 0.1 - 13 0.04 - 14 0.04 - 26 0.02 - 32 0.04 - 40 0.48 - 41 0.16 - 42 0.06 - - 49 57 10 0 - 0 0.0351 - 2 0.0175 - 4 0.0175 - 7 0.14 - 8 0.0351 - 26 0.0175 - 31 0.0175 - 32 0.0175 - 40 0.509 - 41 0.193 - - 55 48 6 0 - 14 0.0417 - 15 0.0417 - 29 0.0208 - 40 0.583 - 41 0.229 - 42 0.0833 - - 57 70 7 0 - 0 0.0143 - 2 0.0143 - 21 0.0143 - 29 0.0143 - 40 0.643 - 41 0.243 - 42 0.0571 - - 58 3 2 0 - 7 0.667 - 14 0.333 - - 62 21 4 0 - 4 0.0476 - 40 0.714 - 41 0.19 - 42 0.0476 - - 64 23 4 0 - 7 0.0435 - 40 0.696 - 41 0.217 - 42 0.0435 - - 65 1 1 0 - 46 1 - - 69 35 7 0 - 0 0.0286 - 13 0.0571 - 15 0.0286 - 26 0.0286 - 40 0.6 - 41 0.2 - 42 0.0571 - -69 482293 48 46 - 0 0.0224 - 1 0.00057 - 2 0.0308 - 3 0.00808 - 4 0.0469 - 5 0.000257 - 6 4.15e-05 - 7 0.0864 - 8 0.0202 - 9 0.00219 - 10 0.000199 - 11 2.07e-06 - 12 0.00331 - 13 0.0122 - 14 0.00875 - 15 0.014 - 16 8.5e-05 - 17 0.000261 - 18 8.29e-06 - 19 0.00971 - 20 0.00668 - 21 0.0342 - 22 0.00161 - 23 0.000114 - 24 0.00542 - 25 4.15e-06 - 26 0.0285 - 27 5.81e-05 - 28 0.0407 - 29 0.00358 - 30 0.0133 - 31 0.0242 - 32 0.000977 - 33 0.0015 - 34 0.000506 - 35 0.000666 - 36 4.15e-06 - 37 0.00212 - 38 2.28e-05 - 39 0.00219 - 40 0.418 - 41 0.127 - 42 0.0138 - 43 0.00104 - 44 0.00067 - 45 0.00305 - 46 0.0022 - 47 0.00131 - - 0 33826 40 4 - 0 0.0458 - 1 0.00556 - 2 0.000887 - 3 0.0145 - 4 0.115 - 5 5.91e-05 - 7 0.0456 - 8 0.1 - 9 0.00955 - 10 0.000237 - 12 5.91e-05 - 13 0.021 - 14 0.00958 - 15 0.00695 - 16 0.000118 - 17 0.000562 - 19 0.00251 - 20 0.00364 - 21 0.192 - 22 0.00514 - 23 0.000828 - 24 0.000769 - 26 0.0203 - 27 2.96e-05 - 28 0.00304 - 29 0.00263 - 30 0.0892 - 31 0.274 - 33 8.87e-05 - 34 0.000148 - 35 0.00106 - 37 0.00154 - 39 0.00585 - 40 0.00411 - 41 0.00532 - 42 0.00101 - 43 0.000148 - 44 0.000384 - 45 0.0103 - 46 0.000148 - - 44 1 1 0 - 43 1 - - 45 6 4 0 - 4 0.167 - 8 0.167 - 21 0.5 - 26 0.167 - - 49 55 14 0 - 0 0.0364 - 3 0.0909 - 4 0.127 - 8 0.0727 - 9 0.0364 - 13 0.0545 - 14 0.0182 - 15 0.0182 - 21 0.164 - 26 0.0364 - 30 0.0909 - 31 0.218 - 41 0.0182 - 42 0.0182 - - 57 7 5 0 - 8 0.143 - 13 0.143 - 21 0.429 - 30 0.143 - 31 0.143 - - 1 555 21 1 - 0 0.027 - 3 0.00901 - 4 0.11 - 7 0.0126 - 8 0.0613 - 9 0.00721 - 13 0.0342 - 14 0.00901 - 15 0.00721 - 17 0.0018 - 19 0.0036 - 20 0.00541 - 21 0.0541 - 22 0.0018 - 26 0.0234 - 28 0.0018 - 29 0.0396 - 31 0.577 - 35 0.0018 - 40 0.0018 - 45 0.0108 - - 49 6 3 0 - 0 0.167 - 3 0.167 - 31 0.667 - - 2 3483 26 11 - 0 0.152 - 1 0.00258 - 3 0.00632 - 4 0.00718 - 7 0.0135 - 8 0.0126 - 9 0.00201 - 12 0.0617 - 13 0.00689 - 14 0.00402 - 15 0.00144 - 20 0.00172 - 21 0.0939 - 22 0.00172 - 23 0.000287 - 26 0.0284 - 28 0.159 - 29 0.194 - 30 0.0764 - 31 0.0485 - 32 0.0356 - 33 0.0744 - 39 0.00172 - 41 0.0089 - 42 0.000574 - 45 0.00488 - - 0 2 2 0 - 4 0.5 - 30 0.5 - - 28 1 1 0 - 13 1 - - 31 1 1 0 - 8 1 - - 41 654 21 0 - 0 0.19 - 1 0.00306 - 3 0.00765 - 4 0.00917 - 7 0.0291 - 8 0.00612 - 9 0.00153 - 12 0.0765 - 13 0.00306 - 14 0.00306 - 21 0.15 - 22 0.00459 - 26 0.0352 - 28 0.0703 - 29 0.226 - 30 0.052 - 31 0.0138 - 32 0.0291 - 33 0.081 - 41 0.00306 - 45 0.00612 - - 42 39 13 0 - 0 0.103 - 4 0.0256 - 7 0.0769 - 12 0.103 - 21 0.154 - 26 0.0256 - 28 0.128 - 29 0.154 - 30 0.0513 - 31 0.0513 - 32 0.0513 - 33 0.0256 - 41 0.0513 - - 46 38 9 0 - 0 0.132 - 12 0.0789 - 21 0.105 - 28 0.105 - 29 0.289 - 30 0.0263 - 31 0.0526 - 33 0.158 - 45 0.0526 - - 47 1 1 0 - 4 1 - - 55 4 4 0 - 8 0.25 - 21 0.25 - 29 0.25 - 30 0.25 - - 57 2 2 0 - 3 0.5 - 7 0.5 - - 58 5 5 0 - 12 0.2 - 21 0.2 - 28 0.2 - 30 0.2 - 45 0.2 - - 69 2736 26 0 - 0 0.144 - 1 0.00256 - 3 0.00585 - 4 0.00585 - 7 0.00877 - 8 0.0139 - 9 0.00219 - 12 0.0574 - 13 0.00768 - 14 0.00439 - 15 0.00183 - 20 0.00219 - 21 0.0793 - 22 0.0011 - 23 0.000365 - 26 0.0274 - 28 0.182 - 29 0.186 - 30 0.0826 - 31 0.057 - 32 0.0376 - 33 0.0727 - 39 0.00219 - 41 0.00987 - 42 0.000731 - 45 0.00365 - - 4 42 14 2 - 0 0.0238 - 4 0.0238 - 6 0.0238 - 7 0.143 - 8 0.0952 - 13 0.0238 - 16 0.0238 - 21 0.0952 - 28 0.0952 - 29 0.0952 - 30 0.0952 - 31 0.214 - 32 0.0238 - 45 0.0238 - - 0 34 12 0 - 0 0.0294 - 4 0.0294 - 6 0.0294 - 7 0.118 - 8 0.118 - 13 0.0294 - 16 0.0294 - 21 0.0882 - 29 0.118 - 30 0.118 - 31 0.265 - 45 0.0294 - - 12 4 2 0 - 28 0.75 - 32 0.25 - - 7 36 11 4 - 4 0.139 - 7 0.0556 - 8 0.0833 - 13 0.0278 - 14 0.0278 - 19 0.0278 - 20 0.0278 - 26 0.472 - 28 0.0556 - 37 0.0278 - 41 0.0556 - - 29 2 2 0 - 8 0.5 - 13 0.5 - - 30 3 3 0 - 4 0.333 - 7 0.333 - 41 0.333 - - 47 23 5 0 - 4 0.13 - 8 0.087 - 14 0.0435 - 19 0.0435 - 26 0.696 - - 69 3 2 0 - 28 0.667 - 37 0.333 - - 8 152 17 2 - 2 0.0329 - 3 0.0132 - 4 0.0329 - 7 0.395 - 8 0.0329 - 13 0.0658 - 14 0.0724 - 15 0.0197 - 20 0.0197 - 21 0.0395 - 22 0.00658 - 24 0.0132 - 26 0.0855 - 32 0.00658 - 40 0.125 - 41 0.0263 - 46 0.0132 - - 45 2 1 0 - 46 1 - - 49 22 7 0 - 4 0.0455 - 7 0.5 - 14 0.0455 - 21 0.0455 - 26 0.0909 - 40 0.227 - 41 0.0455 - - 12 9666 21 2 - 0 0.291 - 2 0.000724 - 4 0.000828 - 7 0.00197 - 12 0.000207 - 13 0.00031 - 21 0.171 - 22 0.00124 - 23 0.000207 - 26 0.00331 - 28 0.517 - 29 0.000621 - 31 0.000517 - 32 0.000103 - 40 0.00207 - 41 0.00331 - 42 0.000724 - 43 0.000103 - 44 0.000207 - 45 0.00455 - 46 0.000207 - - 41 4 1 0 - 0 1 - - 44 1 1 0 - 43 1 - - 13 297 26 2 - 0 0.0101 - 2 0.0168 - 3 0.0135 - 4 0.0976 - 7 0.256 - 8 0.0168 - 9 0.00337 - 12 0.0101 - 13 0.0404 - 14 0.111 - 15 0.0202 - 19 0.00673 - 20 0.0101 - 21 0.0438 - 22 0.00337 - 24 0.0707 - 26 0.0606 - 29 0.00337 - 30 0.0135 - 31 0.00337 - 39 0.00337 - 40 0.0707 - 41 0.0909 - 42 0.0135 - 45 0.00337 - 46 0.00673 - - 2 3 3 0 - 7 0.333 - 13 0.333 - 46 0.333 - - 45 1 1 0 - 46 1 - - 14 122 18 0 - 2 0.0164 - 4 0.082 - 7 0.197 - 8 0.0328 - 13 0.0246 - 14 0.082 - 15 0.0164 - 19 0.0082 - 21 0.0246 - 24 0.041 - 26 0.246 - 30 0.0246 - 31 0.0082 - 32 0.0082 - 34 0.0082 - 37 0.0164 - 40 0.0984 - 41 0.0656 - - 15 35 10 0 - 4 0.114 - 7 0.143 - 15 0.514 - 19 0.0286 - 21 0.0286 - 24 0.0286 - 26 0.0286 - 32 0.0286 - 42 0.0286 - 46 0.0571 - - 18 27 10 0 - 3 0.037 - 7 0.185 - 8 0.296 - 9 0.148 - 13 0.0741 - 14 0.0741 - 15 0.037 - 20 0.0741 - 37 0.037 - 45 0.037 - - 21 4005 31 12 - 0 0.146 - 1 0.0035 - 2 0.00025 - 3 0.0015 - 4 0.0442 - 7 0.0215 - 8 0.0662 - 9 0.00025 - 12 0.000749 - 13 0.0115 - 14 0.00175 - 15 0.00125 - 20 0.00225 - 21 0.0969 - 24 0.000499 - 26 0.00449 - 28 0.405 - 29 0.0135 - 30 0.04 - 31 0.118 - 32 0.000749 - 33 0.000749 - 35 0.000749 - 37 0.000749 - 40 0.00874 - 41 0.00524 - 42 0.00125 - 43 0.00025 - 45 0.002 - 46 0.00025 - 47 0.00025 - - 0 2915 27 0 - 0 0.0803 - 1 0.0048 - 2 0.000343 - 3 0.00172 - 4 0.0583 - 7 0.0274 - 8 0.0864 - 9 0.000343 - 13 0.0141 - 14 0.0024 - 15 0.00172 - 20 0.00309 - 21 0.113 - 24 0.000343 - 26 0.0024 - 28 0.352 - 29 0.0151 - 30 0.0528 - 31 0.162 - 32 0.000343 - 35 0.00103 - 37 0.00103 - 40 0.0103 - 41 0.00515 - 42 0.00137 - 43 0.000343 - 45 0.00172 - - 2 30 12 0 - 0 0.0333 - 4 0.0333 - 8 0.0333 - 12 0.1 - 21 0.0667 - 28 0.267 - 29 0.2 - 30 0.0667 - 31 0.0333 - 32 0.0333 - 33 0.0667 - 41 0.0667 - - 12 987 12 0 - 0 0.347 - 3 0.00101 - 4 0.00101 - 7 0.00304 - 21 0.0466 - 26 0.00101 - 28 0.588 - 40 0.00405 - 41 0.00405 - 42 0.00101 - 45 0.00304 - 46 0.00101 - - 21 3 2 0 - 8 0.667 - 28 0.333 - - 28 1 1 0 - 47 1 - - 32 7 6 0 - 4 0.143 - 13 0.286 - 26 0.143 - 29 0.143 - 30 0.143 - 40 0.143 - - 33 1 1 0 - 13 1 - - 41 20 9 0 - 0 0.05 - 7 0.05 - 13 0.05 - 21 0.15 - 26 0.2 - 28 0.25 - 29 0.15 - 30 0.05 - 33 0.05 - - 42 1 1 0 - 32 1 - - 45 4 2 0 - 8 0.5 - 21 0.5 - - 47 12 7 0 - 0 0.0833 - 4 0.167 - 7 0.0833 - 8 0.0833 - 13 0.0833 - 21 0.0833 - 26 0.417 - - 49 21 8 0 - 0 0.143 - 4 0.0952 - 7 0.0476 - 8 0.333 - 21 0.19 - 24 0.0476 - 30 0.0952 - 31 0.0476 - - 22 5 3 0 - 26 0.2 - 41 0.6 - 42 0.2 - - 25 2 1 0 - 6 1 - - 26 13048 19 0 - 0 0.112 - 1 7.66e-05 - 4 0.000307 - 7 0.000153 - 8 0.000613 - 13 0.0036 - 15 0.000153 - 21 0.0082 - 22 0.00107 - 28 0.867 - 29 0.00023 - 30 0.000153 - 31 0.000153 - 40 0.000996 - 41 0.000536 - 42 7.66e-05 - 44 0.000153 - 45 0.00429 - 46 0.000153 - - 28 20867 44 10 - 0 0.00192 - 1 0.000335 - 2 0.00441 - 3 0.0235 - 4 0.245 - 5 0.000671 - 6 9.58e-05 - 7 0.129 - 8 0.073 - 9 0.0104 - 10 0.000767 - 12 0.000575 - 13 0.0718 - 14 0.0604 - 15 0.0381 - 16 0.000575 - 17 0.00163 - 18 0.000192 - 19 0.0453 - 20 0.054 - 21 0.0454 - 22 0.00407 - 23 9.58e-05 - 24 0.0409 - 26 0.0441 - 27 0.000144 - 28 0.00565 - 30 0.0123 - 31 0.00398 - 33 4.79e-05 - 34 0.000863 - 35 0.0046 - 36 4.79e-05 - 37 0.00666 - 38 0.000144 - 39 0.0102 - 40 0.0288 - 41 0.0185 - 42 0.00259 - 43 0.000192 - 44 0.0012 - 45 0.00474 - 46 0.00264 - 47 0.000144 - - 2 142 19 0 - 3 0.0211 - 4 0.296 - 7 0.0493 - 8 0.0915 - 13 0.0704 - 14 0.12 - 15 0.0282 - 16 0.00704 - 19 0.0563 - 20 0.0423 - 21 0.0211 - 31 0.00704 - 35 0.00704 - 37 0.00704 - 40 0.0634 - 41 0.0704 - 42 0.0211 - 44 0.00704 - 45 0.0141 - - 13 3 2 0 - 4 0.667 - 46 0.333 - - 21 8 7 0 - 4 0.25 - 8 0.125 - 13 0.125 - 19 0.125 - 21 0.125 - 41 0.125 - 42 0.125 - - 42 5 3 0 - 4 0.6 - 14 0.2 - 24 0.2 - - 44 1 1 0 - 43 1 - - 45 34 10 0 - 2 0.0294 - 4 0.0882 - 7 0.0294 - 13 0.0294 - 17 0.0294 - 21 0.118 - 24 0.0294 - 35 0.0294 - 40 0.0294 - 46 0.588 - - 47 20444 44 0 - 0 0.00196 - 1 0.000342 - 2 0.0044 - 3 0.0238 - 4 0.243 - 5 0.000685 - 6 9.78e-05 - 7 0.131 - 8 0.0732 - 9 0.0105 - 10 0.000783 - 12 0.000587 - 13 0.072 - 14 0.0602 - 15 0.038 - 16 0.000538 - 17 0.00161 - 18 0.000196 - 19 0.0453 - 20 0.0539 - 21 0.0458 - 22 0.00406 - 23 9.78e-05 - 24 0.0412 - 26 0.0446 - 27 9.78e-05 - 28 0.00577 - 30 0.0125 - 31 0.00401 - 33 4.89e-05 - 34 0.00088 - 35 0.00445 - 36 4.89e-05 - 37 0.00675 - 38 0.000147 - 39 0.0103 - 40 0.0288 - 41 0.018 - 42 0.00235 - 43 0.000147 - 44 0.00113 - 45 0.0047 - 46 0.00157 - 47 0.000147 - - 49 216 24 0 - 2 0.00463 - 4 0.352 - 7 0.0694 - 8 0.0602 - 9 0.00463 - 13 0.0556 - 14 0.0509 - 15 0.0741 - 19 0.0463 - 20 0.088 - 21 0.0185 - 22 0.00926 - 24 0.0417 - 26 0.0417 - 27 0.00463 - 30 0.00926 - 35 0.0139 - 39 0.00463 - 40 0.00463 - 41 0.0185 - 42 0.00926 - 44 0.00463 - 45 0.00463 - 46 0.00926 - - 50 3 3 0 - 4 0.333 - 40 0.333 - 41 0.333 - - 57 3 3 0 - 3 0.333 - 4 0.333 - 8 0.333 - - 29 21672 44 8 - 0 0.00198 - 1 9.23e-05 - 2 0.0024 - 3 0.0832 - 4 0.195 - 5 0.00157 - 6 4.61e-05 - 7 0.138 - 8 0.0454 - 9 0.00655 - 10 0.00111 - 12 0.000554 - 13 0.0358 - 14 0.0287 - 15 0.0713 - 16 0.000138 - 17 0.000738 - 19 0.0812 - 20 0.0351 - 21 0.0391 - 22 0.00401 - 23 0.000231 - 24 0.0213 - 26 0.072 - 27 0.000138 - 28 0.00263 - 29 0.000277 - 30 0.00992 - 31 0.00291 - 32 4.61e-05 - 33 0.000231 - 34 0.000185 - 35 0.000738 - 37 0.00175 - 38 0.000138 - 39 0.0162 - 40 0.0611 - 41 0.0302 - 42 0.00392 - 43 0.000138 - 44 0.000138 - 45 0.00383 - 46 0.000461 - 47 4.61e-05 - - 2 33 13 0 - 3 0.0606 - 4 0.273 - 7 0.152 - 8 0.0909 - 13 0.0303 - 14 0.0303 - 19 0.0606 - 20 0.0606 - 24 0.0303 - 40 0.0303 - 41 0.121 - 42 0.0303 - 45 0.0303 - - 41 6 6 0 - 4 0.167 - 14 0.167 - 20 0.167 - 26 0.167 - 28 0.167 - 42 0.167 - - 44 1 1 0 - 43 1 - - 45 14 7 0 - 4 0.214 - 7 0.143 - 14 0.0714 - 19 0.0714 - 21 0.0714 - 27 0.0714 - 46 0.357 - - 47 21324 44 0 - 0 0.00202 - 1 9.38e-05 - 2 0.00234 - 3 0.0843 - 4 0.193 - 5 0.00159 - 6 4.69e-05 - 7 0.138 - 8 0.0455 - 9 0.00642 - 10 0.00113 - 12 0.000563 - 13 0.0356 - 14 0.0286 - 15 0.0715 - 16 0.000141 - 17 0.00075 - 19 0.0818 - 20 0.0347 - 21 0.039 - 22 0.00394 - 23 0.000234 - 24 0.0213 - 26 0.0718 - 27 9.38e-05 - 28 0.00263 - 29 0.000281 - 30 0.00994 - 31 0.00281 - 32 4.69e-05 - 33 0.000234 - 34 0.000141 - 35 0.000703 - 37 0.00169 - 38 0.000141 - 39 0.0164 - 40 0.0618 - 41 0.0303 - 42 0.00389 - 43 9.38e-05 - 44 0.000141 - 45 0.00385 - 46 0.000141 - 47 4.69e-05 - - 49 281 24 0 - 2 0.00712 - 3 0.0178 - 4 0.267 - 7 0.142 - 8 0.0356 - 9 0.0142 - 13 0.0463 - 14 0.0285 - 15 0.0783 - 19 0.0356 - 20 0.0498 - 21 0.0498 - 22 0.0107 - 24 0.0249 - 26 0.103 - 30 0.0107 - 31 0.0107 - 34 0.00356 - 35 0.00356 - 37 0.00712 - 39 0.00712 - 40 0.0214 - 41 0.0178 - 46 0.00712 - - 55 5 4 0 - 7 0.2 - 13 0.2 - 19 0.4 - 20 0.2 - - 57 7 5 0 - 4 0.429 - 9 0.143 - 14 0.143 - 19 0.143 - 20 0.143 - - 30 11209 39 4 - 0 0.00241 - 2 0.00419 - 3 0.0186 - 4 0.22 - 5 0.000357 - 7 0.173 - 8 0.078 - 9 0.0106 - 10 0.000892 - 12 0.000178 - 13 0.0741 - 14 0.0694 - 15 0.0376 - 16 0.000714 - 17 0.00143 - 19 0.0317 - 20 0.0388 - 21 0.0465 - 22 0.00607 - 23 8.92e-05 - 24 0.0352 - 26 0.0869 - 27 0.000268 - 28 0.00116 - 29 0.000357 - 30 0.00473 - 31 0.00419 - 32 8.92e-05 - 34 0.000268 - 35 0.00294 - 37 0.00205 - 39 0.00714 - 40 0.0168 - 41 0.0121 - 42 0.00223 - 43 0.000268 - 44 0.000446 - 45 0.00598 - 46 0.00223 - - 2 63 12 0 - 4 0.238 - 7 0.127 - 8 0.111 - 13 0.111 - 14 0.206 - 15 0.0317 - 19 0.0159 - 20 0.0635 - 21 0.0159 - 40 0.0317 - 41 0.0317 - 42 0.0159 - - 21 12 9 0 - 3 0.0833 - 4 0.167 - 7 0.25 - 14 0.0833 - 20 0.0833 - 26 0.0833 - 35 0.0833 - 37 0.0833 - 40 0.0833 - - 45 15 4 0 - 4 0.133 - 7 0.0667 - 14 0.0667 - 46 0.733 - - 49 214 24 0 - 2 0.00935 - 3 0.0187 - 4 0.28 - 7 0.136 - 8 0.0888 - 9 0.00467 - 13 0.0561 - 14 0.0654 - 15 0.0467 - 19 0.0234 - 20 0.0514 - 21 0.0374 - 24 0.0327 - 26 0.0794 - 27 0.00467 - 31 0.00935 - 35 0.00467 - 37 0.00935 - 39 0.00935 - 40 0.00935 - 41 0.00935 - 42 0.00467 - 45 0.00467 - 46 0.00467 - - 31 15551 42 7 - 0 0.00386 - 1 0.000129 - 2 0.0102 - 3 0.0112 - 4 0.0743 - 5 0.000129 - 7 0.434 - 8 0.0333 - 9 0.0027 - 10 0.000257 - 12 0.00122 - 13 0.0231 - 14 0.0143 - 15 0.0274 - 16 0.000129 - 17 0.000836 - 19 0.0116 - 20 0.0116 - 21 0.0532 - 22 0.00373 - 23 0.000257 - 24 0.0271 - 26 0.132 - 28 0.000836 - 29 0.000965 - 30 0.00514 - 31 0.00174 - 32 0.000643 - 33 0.000322 - 34 0.000322 - 35 0.000707 - 37 0.00257 - 38 6.43e-05 - 39 0.00367 - 40 0.0578 - 41 0.037 - 42 0.00424 - 43 0.00103 - 44 0.000386 - 45 0.00482 - 46 0.00167 - 47 0.000193 - - 2 72 17 0 - 4 0.0694 - 7 0.417 - 9 0.0139 - 14 0.0278 - 17 0.0139 - 19 0.0139 - 20 0.0139 - 21 0.0417 - 26 0.0278 - 29 0.0139 - 30 0.0278 - 39 0.0139 - 40 0.153 - 41 0.0972 - 42 0.0139 - 43 0.0139 - 46 0.0278 - - 21 9 4 0 - 0 0.111 - 7 0.667 - 12 0.111 - 47 0.111 - - 41 2 2 0 - 2 0.5 - 40 0.5 - - 45 13 6 0 - 7 0.231 - 8 0.0769 - 17 0.0769 - 21 0.0769 - 24 0.0769 - 46 0.462 - - 47 14860 42 0 - 0 0.0035 - 1 0.000135 - 2 0.00976 - 3 0.0116 - 4 0.0758 - 5 0.000135 - 7 0.43 - 8 0.0338 - 9 0.00276 - 10 0.000269 - 12 0.00108 - 13 0.0238 - 14 0.0147 - 15 0.028 - 16 0.000135 - 17 0.00074 - 19 0.0118 - 20 0.0114 - 21 0.0543 - 22 0.00384 - 23 0.000269 - 24 0.0281 - 26 0.134 - 28 0.000875 - 29 0.000875 - 30 0.00518 - 31 0.00182 - 32 0.000673 - 33 0.000336 - 34 0.000336 - 35 0.00074 - 37 0.00262 - 38 6.73e-05 - 39 0.00377 - 40 0.0559 - 41 0.0355 - 42 0.00397 - 43 0.000875 - 44 0.000404 - 45 0.00491 - 46 0.00101 - 47 0.000135 - - 49 583 25 0 - 0 0.012 - 2 0.0223 - 3 0.00172 - 4 0.0429 - 7 0.52 - 8 0.024 - 12 0.00343 - 13 0.0103 - 14 0.00515 - 15 0.0172 - 19 0.00515 - 20 0.0172 - 21 0.0274 - 22 0.00172 - 24 0.00686 - 26 0.0909 - 29 0.00172 - 30 0.00172 - 37 0.00172 - 40 0.0961 - 41 0.0686 - 42 0.0103 - 43 0.00343 - 45 0.00343 - 46 0.00515 - - 55 6 2 0 - 7 0.833 - 40 0.167 - - 32 5375 43 3 - 0 0.00651 - 1 0.000186 - 2 0.00335 - 3 0.0134 - 4 0.192 - 5 0.00447 - 6 0.000186 - 7 0.169 - 8 0.0662 - 9 0.0108 - 10 0.00093 - 12 0.00372 - 13 0.0506 - 14 0.0545 - 15 0.0344 - 16 0.000186 - 17 0.00093 - 19 0.0768 - 20 0.0218 - 21 0.0508 - 22 0.00409 - 23 0.000558 - 24 0.0203 - 26 0.0941 - 28 0.0026 - 29 0.000372 - 30 0.0104 - 31 0.00391 - 32 0.000186 - 33 0.000558 - 34 0.000558 - 35 0.00447 - 36 0.000186 - 37 0.00521 - 39 0.00428 - 40 0.0383 - 41 0.0387 - 42 0.00521 - 43 0.000558 - 44 0.000558 - 45 0.00316 - 46 0.000744 - 47 0.000186 - - 2 34 10 0 - 3 0.0294 - 4 0.0882 - 7 0.235 - 8 0.176 - 13 0.0588 - 14 0.206 - 20 0.0294 - 21 0.0294 - 40 0.0882 - 41 0.0588 - - 45 4 3 0 - 4 0.25 - 24 0.25 - 46 0.5 - - 49 79 19 0 - 3 0.0127 - 4 0.19 - 7 0.19 - 8 0.114 - 9 0.0127 - 12 0.0127 - 13 0.0886 - 14 0.0506 - 19 0.0506 - 20 0.0253 - 21 0.0253 - 24 0.0253 - 26 0.0759 - 30 0.0127 - 37 0.0127 - 40 0.0506 - 41 0.0253 - 42 0.0127 - 43 0.0127 - - 33 9565 42 3 - 0 0.0024 - 1 0.000209 - 2 0.00157 - 3 0.0238 - 4 0.181 - 5 0.00136 - 6 0.000105 - 7 0.141 - 8 0.0558 - 9 0.00659 - 10 0.00115 - 12 0.00178 - 13 0.0474 - 14 0.0311 - 15 0.124 - 16 0.000627 - 17 0.000732 - 19 0.0499 - 20 0.0226 - 21 0.0374 - 22 0.00355 - 23 0.000314 - 24 0.0154 - 26 0.0935 - 28 0.00178 - 29 0.000314 - 30 0.00711 - 31 0.0045 - 32 0.000209 - 34 0.000418 - 35 0.00157 - 37 0.0046 - 38 0.000105 - 39 0.0046 - 40 0.0667 - 41 0.0484 - 42 0.00815 - 43 0.000209 - 44 0.000418 - 45 0.00742 - 46 0.000209 - 47 0.000105 - - 2 37 10 0 - 4 0.243 - 7 0.135 - 8 0.162 - 9 0.027 - 12 0.027 - 13 0.135 - 14 0.135 - 15 0.027 - 21 0.027 - 40 0.0811 - - 45 8 7 0 - 7 0.125 - 8 0.125 - 13 0.125 - 21 0.125 - 24 0.125 - 26 0.25 - 46 0.125 - - 49 142 21 0 - 0 0.00704 - 3 0.0141 - 4 0.324 - 7 0.12 - 8 0.0634 - 10 0.00704 - 13 0.0634 - 14 0.00704 - 15 0.0352 - 17 0.0141 - 19 0.0845 - 20 0.0634 - 21 0.0211 - 24 0.0493 - 26 0.0423 - 30 0.0141 - 39 0.00704 - 40 0.0211 - 41 0.00704 - 42 0.0141 - 45 0.0211 - - 40 18 4 0 - 27 0.0556 - 43 0.0556 - 46 0.333 - 47 0.556 - - 41 6243 35 21 - 0 0.00416 - 1 0.0024 - 2 0.113 - 3 0.00432 - 4 0.0271 - 6 0.000641 - 7 0.276 - 8 0.0128 - 9 0.000481 - 10 0.000481 - 12 0.00176 - 13 0.00449 - 14 0.00384 - 15 0.00144 - 16 0.00016 - 19 0.00256 - 20 0.00176 - 21 0.149 - 22 0.00032 - 24 0.00016 - 26 0.0284 - 27 0.000961 - 28 0.0123 - 29 0.0111 - 30 0.222 - 31 0.0368 - 32 0.00352 - 33 0.00352 - 34 0.0103 - 35 0.00128 - 37 0.00657 - 39 0.000481 - 44 0.00016 - 45 0.0365 - 46 0.0189 - - 0 65 14 0 - 0 0.0154 - 4 0.0154 - 7 0.415 - 13 0.0462 - 15 0.0154 - 16 0.0154 - 19 0.0923 - 21 0.185 - 26 0.0154 - 27 0.0308 - 28 0.0154 - 30 0.0154 - 37 0.0615 - 45 0.0615 - - 2 14 4 0 - 4 0.0714 - 7 0.5 - 21 0.357 - 26 0.0714 - - 12 12 3 0 - 3 0.0833 - 7 0.75 - 21 0.167 - - 13 4 4 0 - 7 0.25 - 27 0.25 - 30 0.25 - 46 0.25 - - 28 63 13 0 - 2 0.0159 - 4 0.0159 - 6 0.0159 - 7 0.286 - 8 0.0476 - 12 0.0159 - 13 0.0159 - 14 0.0317 - 21 0.206 - 28 0.0159 - 30 0.0952 - 31 0.0159 - 45 0.222 - - 29 225 14 0 - 0 0.00444 - 7 0.107 - 13 0.00444 - 14 0.00444 - 15 0.00444 - 19 0.00444 - 20 0.00444 - 21 0.12 - 22 0.00444 - 26 0.0133 - 30 0.249 - 31 0.00444 - 45 0.471 - 46 0.00444 - - 30 30 5 0 - 2 0.0667 - 7 0.433 - 21 0.133 - 30 0.0333 - 45 0.333 - - 31 73 10 0 - 4 0.0274 - 7 0.411 - 8 0.0137 - 12 0.0137 - 14 0.0274 - 21 0.233 - 26 0.0137 - 30 0.205 - 31 0.0274 - 45 0.0274 - - 32 25 9 0 - 4 0.08 - 7 0.2 - 8 0.04 - 15 0.04 - 20 0.04 - 21 0.28 - 30 0.12 - 37 0.04 - 45 0.16 - - 33 92 8 0 - 7 0.152 - 14 0.0217 - 19 0.0109 - 21 0.0978 - 27 0.0109 - 28 0.0217 - 30 0.185 - 45 0.5 - - 48 218 13 0 - 1 0.00459 - 2 0.00459 - 3 0.00459 - 4 0.00917 - 7 0.44 - 8 0.0183 - 15 0.00459 - 21 0.234 - 26 0.00917 - 30 0.202 - 31 0.0275 - 45 0.00459 - 46 0.0367 - - 49 387 22 0 - 0 0.00258 - 1 0.00258 - 2 0.0155 - 3 0.00258 - 4 0.0284 - 7 0.488 - 8 0.0233 - 13 0.00775 - 14 0.00775 - 15 0.00258 - 19 0.00517 - 20 0.00258 - 21 0.106 - 26 0.0362 - 28 0.00775 - 30 0.178 - 31 0.0155 - 34 0.0129 - 35 0.00775 - 37 0.0129 - 45 0.0233 - 46 0.0103 - - 52 8 5 0 - 4 0.125 - 8 0.375 - 13 0.125 - 37 0.125 - 39 0.25 - - 55 1378 26 0 - 1 0.00145 - 2 0.0116 - 3 0.00508 - 4 0.0152 - 6 0.000726 - 7 0.319 - 8 0.00871 - 10 0.00145 - 12 0.000726 - 13 0.00218 - 14 0.0029 - 19 0.00145 - 20 0.000726 - 21 0.166 - 26 0.0689 - 27 0.00145 - 28 0.00145 - 29 0.000726 - 30 0.296 - 31 0.0537 - 33 0.000726 - 34 0.00581 - 35 0.00145 - 37 0.00871 - 45 0.00943 - 46 0.0145 - - 57 1875 30 0 - 0 0.00373 - 1 0.00427 - 2 0.0101 - 3 0.00427 - 4 0.0331 - 6 0.00107 - 7 0.341 - 8 0.0197 - 9 0.000533 - 10 0.000533 - 12 0.00107 - 13 0.00427 - 14 0.00267 - 15 0.00213 - 19 0.0016 - 20 0.00213 - 21 0.202 - 24 0.000533 - 26 0.0235 - 28 0.00267 - 29 0.0016 - 30 0.25 - 31 0.0485 - 32 0.00107 - 34 0.00853 - 35 0.00107 - 37 0.008 - 39 0.000533 - 45 0.00693 - 46 0.0133 - - 58 6 5 0 - 4 0.167 - 7 0.333 - 21 0.167 - 31 0.167 - 45 0.167 - - 59 16 8 0 - 2 0.0625 - 7 0.25 - 8 0.0625 - 13 0.0625 - 21 0.312 - 28 0.0625 - 30 0.125 - 46 0.0625 - - 62 353 19 0 - 0 0.00283 - 2 0.0113 - 3 0.00283 - 4 0.0085 - 7 0.34 - 8 0.0142 - 13 0.00283 - 14 0.00283 - 21 0.122 - 26 0.00567 - 29 0.00567 - 30 0.354 - 31 0.0567 - 34 0.00567 - 35 0.00283 - 37 0.0085 - 44 0.00283 - 45 0.00283 - 46 0.0482 - - 64 171 17 0 - 0 0.0117 - 1 0.00585 - 2 0.0234 - 4 0.0175 - 7 0.327 - 12 0.0117 - 13 0.00585 - 19 0.00585 - 21 0.117 - 26 0.0175 - 28 0.00585 - 29 0.00585 - 30 0.351 - 31 0.0234 - 34 0.0117 - 45 0.0117 - 46 0.0468 - - 68 7 6 0 - 7 0.143 - 21 0.143 - 26 0.143 - 30 0.286 - 45 0.143 - 46 0.143 - - 69 1214 24 0 - 0 0.0107 - 1 0.00165 - 2 0.537 - 3 0.00659 - 4 0.0478 - 7 0.0231 - 8 0.00329 - 9 0.00165 - 12 0.00329 - 13 0.00412 - 14 0.00329 - 20 0.00247 - 21 0.0527 - 22 0.000824 - 26 0.00824 - 28 0.0502 - 29 0.0511 - 30 0.0865 - 31 0.0198 - 32 0.0165 - 33 0.0173 - 34 0.0255 - 45 0.000824 - 46 0.0255 - - 42 485 30 16 - 0 0.00412 - 2 0.0866 - 3 0.0103 - 4 0.136 - 6 0.00206 - 7 0.144 - 8 0.0124 - 9 0.00206 - 11 0.00206 - 12 0.0103 - 13 0.0165 - 14 0.0124 - 15 0.0206 - 19 0.0103 - 21 0.101 - 22 0.00206 - 23 0.00206 - 26 0.00825 - 28 0.0103 - 29 0.00206 - 30 0.0474 - 31 0.0165 - 33 0.00412 - 34 0.00619 - 35 0.00619 - 37 0.00619 - 39 0.00206 - 42 0.00619 - 44 0.00206 - 45 0.307 - - 0 14 10 0 - 0 0.0714 - 2 0.0714 - 4 0.0714 - 7 0.143 - 15 0.143 - 28 0.143 - 30 0.0714 - 35 0.0714 - 42 0.0714 - 45 0.143 - - 12 2 2 0 - 0 0.5 - 11 0.5 - - 28 9 8 0 - 4 0.111 - 13 0.111 - 14 0.111 - 23 0.111 - 26 0.111 - 35 0.111 - 37 0.111 - 45 0.222 - - 29 63 4 0 - 3 0.0159 - 4 0.0317 - 7 0.0159 - 45 0.937 - - 30 12 3 0 - 4 0.0833 - 7 0.0833 - 45 0.833 - - 32 7 4 0 - 4 0.286 - 7 0.286 - 15 0.143 - 42 0.286 - - 33 49 4 0 - 3 0.0204 - 4 0.0204 - 14 0.0204 - 45 0.939 - - 42 3 2 0 - 4 0.333 - 13 0.667 - - 46 2 2 0 - 7 0.5 - 31 0.5 - - 48 16 7 0 - 4 0.125 - 7 0.25 - 21 0.25 - 26 0.0625 - 30 0.188 - 44 0.0625 - 45 0.0625 - - 49 20 8 0 - 4 0.05 - 7 0.3 - 8 0.1 - 12 0.05 - 13 0.05 - 21 0.25 - 37 0.05 - 45 0.15 - - 55 64 10 0 - 4 0.125 - 7 0.328 - 12 0.0156 - 13 0.0156 - 19 0.0312 - 21 0.25 - 28 0.0156 - 30 0.0938 - 35 0.0156 - 45 0.109 - - 57 82 17 0 - 3 0.0122 - 4 0.171 - 6 0.0122 - 7 0.232 - 8 0.0366 - 9 0.0122 - 12 0.0122 - 13 0.0122 - 14 0.0244 - 15 0.061 - 19 0.0122 - 21 0.146 - 26 0.0244 - 30 0.0366 - 31 0.0122 - 39 0.0122 - 45 0.171 - - 62 14 7 0 - 2 0.0714 - 3 0.0714 - 7 0.357 - 15 0.0714 - 19 0.0714 - 21 0.214 - 30 0.143 - - 64 16 7 0 - 4 0.25 - 7 0.25 - 8 0.0625 - 13 0.0625 - 19 0.0625 - 30 0.25 - 45 0.0625 - - 69 99 17 0 - 2 0.394 - 3 0.0101 - 4 0.242 - 7 0.0202 - 12 0.0202 - 13 0.0101 - 14 0.0202 - 21 0.0808 - 22 0.0101 - 28 0.0202 - 29 0.0101 - 30 0.0303 - 31 0.0505 - 33 0.0202 - 34 0.0303 - 37 0.0101 - 45 0.0202 - - 43 36 15 4 - 0 0.0278 - 2 0.0556 - 4 0.0556 - 7 0.167 - 12 0.0278 - 13 0.0278 - 19 0.0278 - 21 0.139 - 26 0.0556 - 28 0.0278 - 30 0.0278 - 31 0.0556 - 40 0.139 - 41 0.139 - 42 0.0278 - - 0 4 3 0 - 21 0.25 - 30 0.25 - 31 0.5 - - 28 2 2 0 - 13 0.5 - 19 0.5 - - 55 13 7 0 - 2 0.154 - 7 0.231 - 12 0.0769 - 21 0.308 - 26 0.0769 - 40 0.0769 - 41 0.0769 - - 57 9 5 0 - 7 0.222 - 26 0.111 - 40 0.222 - 41 0.333 - 42 0.111 - - 44 27 12 2 - 4 0.111 - 7 0.296 - 8 0.0741 - 13 0.111 - 14 0.037 - 15 0.148 - 26 0.037 - 28 0.037 - 31 0.037 - 34 0.037 - 37 0.037 - 45 0.037 - - 28 8 5 0 - 4 0.125 - 7 0.125 - 8 0.25 - 13 0.25 - 15 0.25 - - 55 5 3 0 - 7 0.6 - 13 0.2 - 26 0.2 - - 45 947 30 20 - 0 0.0169 - 1 0.00106 - 2 0.00211 - 3 0.00845 - 4 0.147 - 5 0.0116 - 6 0.00528 - 7 0.0993 - 8 0.119 - 9 0.00739 - 12 0.00845 - 13 0.0401 - 14 0.0201 - 15 0.0264 - 16 0.00211 - 17 0.00106 - 19 0.141 - 20 0.00422 - 21 0.116 - 22 0.00422 - 26 0.0211 - 27 0.0116 - 28 0.0919 - 29 0.00317 - 30 0.0348 - 31 0.0275 - 34 0.00211 - 35 0.0095 - 37 0.0127 - 42 0.00317 - - 0 241 18 0 - 1 0.00415 - 3 0.0083 - 4 0.149 - 7 0.0664 - 8 0.249 - 9 0.0083 - 12 0.00415 - 13 0.0207 - 14 0.0124 - 15 0.0124 - 21 0.224 - 22 0.0083 - 26 0.0124 - 28 0.0124 - 29 0.00415 - 30 0.104 - 31 0.0954 - 37 0.00415 - - 1 4 3 0 - 7 0.5 - 21 0.25 - 31 0.25 - - 2 14 4 0 - 0 0.286 - 12 0.357 - 28 0.214 - 29 0.143 - - 12 33 4 0 - 0 0.0909 - 21 0.0909 - 28 0.788 - 37 0.0303 - - 21 4 3 0 - 21 0.25 - 28 0.5 - 30 0.25 - - 26 33 2 0 - 21 0.0303 - 28 0.97 - - 28 57 16 0 - 3 0.0351 - 4 0.246 - 7 0.0351 - 8 0.228 - 9 0.0351 - 13 0.123 - 14 0.0351 - 15 0.0351 - 19 0.0175 - 20 0.0175 - 21 0.105 - 22 0.0175 - 26 0.0175 - 28 0.0175 - 30 0.0175 - 35 0.0175 - - 29 48 16 0 - 0 0.0208 - 4 0.25 - 5 0.0208 - 6 0.0417 - 7 0.104 - 8 0.125 - 13 0.0625 - 14 0.0208 - 15 0.0833 - 19 0.0417 - 21 0.0833 - 26 0.0417 - 28 0.0417 - 30 0.0208 - 34 0.0208 - 37 0.0208 - - 30 36 11 0 - 4 0.278 - 7 0.0278 - 8 0.194 - 9 0.0278 - 13 0.111 - 14 0.0278 - 15 0.0833 - 17 0.0278 - 21 0.167 - 26 0.0278 - 28 0.0278 - - 31 23 10 0 - 3 0.0435 - 4 0.13 - 6 0.087 - 7 0.087 - 8 0.087 - 13 0.0435 - 14 0.13 - 15 0.0435 - 21 0.304 - 28 0.0435 - - 32 12 7 0 - 4 0.0833 - 7 0.0833 - 8 0.333 - 13 0.0833 - 15 0.167 - 28 0.167 - 30 0.0833 - - 33 30 13 0 - 3 0.0667 - 4 0.167 - 5 0.0333 - 7 0.133 - 8 0.2 - 9 0.0333 - 13 0.0667 - 14 0.0667 - 15 0.0333 - 19 0.1 - 21 0.0333 - 22 0.0333 - 30 0.0333 - - 41 196 20 0 - 0 0.0306 - 2 0.0102 - 4 0.128 - 5 0.0153 - 7 0.0765 - 8 0.0255 - 13 0.0408 - 14 0.0102 - 15 0.0153 - 16 0.0051 - 19 0.398 - 20 0.0102 - 21 0.0714 - 27 0.0357 - 28 0.0459 - 30 0.0051 - 31 0.0051 - 35 0.0357 - 37 0.0255 - 42 0.0102 - - 42 126 18 0 - 4 0.183 - 5 0.0476 - 7 0.0714 - 8 0.0397 - 12 0.0159 - 13 0.0397 - 14 0.0238 - 15 0.0317 - 16 0.00794 - 19 0.381 - 20 0.00794 - 21 0.0397 - 27 0.0317 - 28 0.0317 - 34 0.00794 - 35 0.00794 - 37 0.0238 - 42 0.00794 - - 48 2 2 0 - 7 0.5 - 26 0.5 - - 49 13 9 0 - 0 0.0769 - 4 0.231 - 7 0.0769 - 8 0.154 - 21 0.154 - 28 0.0769 - 30 0.0769 - 31 0.0769 - 37 0.0769 - - 55 39 9 0 - 3 0.0256 - 4 0.103 - 7 0.487 - 8 0.0256 - 9 0.0256 - 13 0.0256 - 14 0.0256 - 21 0.0769 - 26 0.205 - - 57 18 7 0 - 4 0.111 - 7 0.556 - 8 0.0556 - 19 0.0556 - 21 0.0556 - 26 0.111 - 30 0.0556 - - 58 10 5 0 - 0 0.1 - 4 0.1 - 7 0.5 - 21 0.1 - 26 0.2 - - 59 8 7 0 - 6 0.125 - 7 0.125 - 8 0.125 - 13 0.125 - 14 0.125 - 15 0.25 - 19 0.125 - - 46 498 27 21 - 0 0.01 - 2 0.151 - 3 0.00402 - 4 0.0723 - 7 0.398 - 8 0.0161 - 12 0.00201 - 13 0.0161 - 14 0.01 - 15 0.0321 - 19 0.0141 - 20 0.00602 - 21 0.0221 - 26 0.0683 - 28 0.00402 - 29 0.00803 - 30 0.0743 - 31 0.00201 - 33 0.00602 - 35 0.00402 - 37 0.0201 - 40 0.00201 - 41 0.00201 - 42 0.0141 - 44 0.012 - 46 0.0141 - 47 0.0161 - - 13 2 2 0 - 8 0.5 - 15 0.5 - - 26 1 1 0 - 28 1 - - 28 48 12 0 - 3 0.0208 - 4 0.354 - 7 0.229 - 8 0.0625 - 13 0.0417 - 14 0.0417 - 15 0.0833 - 19 0.0417 - 20 0.0417 - 35 0.0208 - 37 0.0417 - 44 0.0208 - - 29 9 6 0 - 4 0.222 - 7 0.111 - 13 0.111 - 21 0.111 - 26 0.222 - 30 0.222 - - 30 21 7 0 - 3 0.0476 - 4 0.333 - 7 0.19 - 13 0.0476 - 14 0.0476 - 15 0.286 - 20 0.0476 - - 31 21 8 0 - 4 0.0952 - 7 0.429 - 13 0.0476 - 14 0.0476 - 15 0.0476 - 19 0.0476 - 26 0.238 - 37 0.0476 - - 40 5 2 0 - 46 0.2 - 47 0.8 - - 41 118 15 0 - 0 0.0169 - 2 0.246 - 4 0.0254 - 7 0.237 - 8 0.00847 - 13 0.00847 - 15 0.00847 - 19 0.0169 - 21 0.0593 - 26 0.0169 - 29 0.0254 - 30 0.28 - 31 0.00847 - 33 0.0254 - 46 0.0169 - - 48 39 7 0 - 0 0.0256 - 2 0.308 - 7 0.487 - 8 0.0256 - 26 0.0513 - 37 0.0513 - 44 0.0513 - - 49 34 11 0 - 0 0.0294 - 2 0.0294 - 4 0.0588 - 7 0.529 - 13 0.0294 - 26 0.176 - 28 0.0294 - 30 0.0294 - 35 0.0294 - 37 0.0294 - 42 0.0294 - - 51 1 1 0 - 44 1 - - 52 2 2 0 - 2 0.5 - 37 0.5 - - 55 98 11 0 - 0 0.0102 - 2 0.0918 - 7 0.724 - 12 0.0102 - 19 0.0102 - 26 0.0816 - 29 0.0102 - 30 0.0102 - 41 0.0102 - 42 0.0306 - 44 0.0102 - - 57 31 9 0 - 2 0.129 - 4 0.0323 - 7 0.516 - 8 0.0323 - 13 0.0323 - 21 0.0323 - 26 0.129 - 37 0.0645 - 40 0.0323 - - 59 13 5 0 - 4 0.0769 - 7 0.462 - 15 0.154 - 21 0.0769 - 26 0.231 - - 62 11 7 0 - 2 0.0909 - 7 0.364 - 26 0.0909 - 42 0.0909 - 44 0.0909 - 46 0.182 - 47 0.0909 - - 64 5 2 0 - 7 0.8 - 8 0.2 - - 65 6 4 0 - 2 0.167 - 15 0.167 - 46 0.333 - 47 0.333 - - 66 2 2 0 - 37 0.5 - 42 0.5 - - 67 3 3 0 - 4 0.333 - 19 0.333 - 47 0.333 - - 69 22 4 0 - 2 0.773 - 7 0.136 - 21 0.0455 - 42 0.0455 - - 47 145999 39 35 - 0 0.0116 - 1 6.85e-06 - 2 0.0386 - 3 0.000603 - 4 0.0028 - 5 6.16e-05 - 7 0.0116 - 8 0.000671 - 9 2.05e-05 - 12 0.00449 - 13 0.000678 - 14 0.000404 - 15 0.0104 - 16 6.85e-06 - 17 6.85e-06 - 19 0.000808 - 20 0.000178 - 21 0.00211 - 22 0.000137 - 25 6.85e-06 - 26 0.0016 - 28 0.000164 - 29 0.00262 - 30 0.000384 - 31 0.000349 - 32 0.00107 - 33 0.00145 - 34 0.000288 - 35 4.11e-05 - 37 0.000623 - 39 2.05e-05 - 40 0.691 - 41 0.188 - 42 0.0209 - 43 0.00159 - 44 0.000692 - 45 0.000336 - 46 0.00192 - 47 0.00216 - - 0 598 28 0 - 0 0.0485 - 1 0.00167 - 2 0.0318 - 3 0.0167 - 4 0.164 - 7 0.0518 - 8 0.0234 - 9 0.00502 - 12 0.00334 - 13 0.0284 - 14 0.0301 - 15 0.0853 - 19 0.00669 - 20 0.00836 - 21 0.0167 - 26 0.01 - 30 0.00502 - 31 0.00167 - 34 0.00167 - 35 0.00167 - 37 0.00836 - 39 0.00167 - 40 0.232 - 41 0.176 - 42 0.0301 - 43 0.00167 - 45 0.00334 - 46 0.00502 - - 2 1 1 0 - 30 1 - - 7 2 2 0 - 13 0.5 - 41 0.5 - - 8 34 7 0 - 2 0.147 - 7 0.118 - 20 0.0294 - 21 0.0294 - 32 0.0294 - 40 0.559 - 41 0.0882 - - 12 59 11 0 - 0 0.0508 - 2 0.0508 - 4 0.0169 - 7 0.0508 - 13 0.0169 - 21 0.0339 - 26 0.0339 - 40 0.339 - 41 0.288 - 42 0.0847 - 46 0.0339 - - 13 57 9 0 - 0 0.0351 - 2 0.0877 - 7 0.0351 - 12 0.0351 - 26 0.0175 - 30 0.0175 - 40 0.368 - 41 0.368 - 42 0.0351 - - 15 4 2 0 - 15 0.5 - 46 0.5 - - 21 60 9 0 - 0 0.0167 - 8 0.0167 - 21 0.0167 - 28 0.0333 - 40 0.583 - 41 0.233 - 42 0.0667 - 46 0.0167 - 47 0.0167 - - 22 3 1 0 - 41 1 - - 26 26 8 0 - 0 0.0385 - 7 0.0769 - 21 0.0385 - 28 0.0385 - 40 0.5 - 41 0.231 - 42 0.0385 - 46 0.0385 - - 28 1249 28 0 - 0 0.028 - 2 0.0697 - 4 0.00961 - 5 0.000801 - 7 0.0641 - 8 0.0032 - 12 0.00881 - 13 0.0056 - 15 0.0016 - 17 0.000801 - 19 0.004 - 20 0.0016 - 21 0.00881 - 26 0.004 - 30 0.000801 - 31 0.000801 - 33 0.000801 - 34 0.000801 - 37 0.0048 - 39 0.000801 - 40 0.481 - 41 0.254 - 42 0.0336 - 43 0.0016 - 44 0.0016 - 45 0.000801 - 46 0.0056 - 47 0.0024 - - 29 2544 28 0 - 0 0.00825 - 2 0.0197 - 3 0.0157 - 4 0.0204 - 7 0.00432 - 8 0.000786 - 12 0.000393 - 13 0.00314 - 14 0.000786 - 15 0.219 - 16 0.000393 - 19 0.000786 - 20 0.000786 - 21 0.00118 - 26 0.00118 - 28 0.000393 - 29 0.00197 - 30 0.000393 - 31 0.000786 - 32 0.000393 - 33 0.00118 - 40 0.521 - 41 0.167 - 42 0.00825 - 43 0.000786 - 45 0.000393 - 46 0.000393 - 47 0.000393 - - 30 440 24 0 - 0 0.0591 - 2 0.0977 - 3 0.00227 - 4 0.00227 - 7 0.0659 - 8 0.00909 - 12 0.00455 - 13 0.0114 - 14 0.00682 - 15 0.00227 - 19 0.00227 - 20 0.00227 - 21 0.00909 - 22 0.00227 - 26 0.00227 - 28 0.00227 - 32 0.00227 - 37 0.00227 - 40 0.427 - 41 0.239 - 42 0.0273 - 43 0.00682 - 44 0.00455 - 46 0.00909 - - 31 1808 30 0 - 0 0.0321 - 2 0.0857 - 3 0.000553 - 4 0.00332 - 7 0.0243 - 8 0.00111 - 12 0.0083 - 13 0.000553 - 14 0.000553 - 15 0.00111 - 19 0.00111 - 20 0.000553 - 21 0.00387 - 22 0.000553 - 26 0.00332 - 29 0.0083 - 30 0.000553 - 31 0.000553 - 32 0.00553 - 33 0.00277 - 35 0.000553 - 37 0.00221 - 40 0.497 - 41 0.269 - 42 0.0321 - 43 0.0083 - 44 0.00111 - 45 0.000553 - 46 0.00277 - 47 0.00166 - - 32 490 22 0 - 0 0.0286 - 2 0.0347 - 4 0.0184 - 7 0.0163 - 8 0.00612 - 12 0.0184 - 13 0.00408 - 14 0.0184 - 15 0.00204 - 19 0.00408 - 21 0.00816 - 26 0.00204 - 29 0.00204 - 32 0.00204 - 35 0.00204 - 40 0.42 - 41 0.361 - 42 0.0347 - 43 0.00612 - 44 0.00408 - 46 0.00408 - 47 0.00204 - - 33 2098 25 0 - 0 0.00763 - 2 0.0062 - 3 0.0114 - 4 0.0472 - 7 0.00477 - 8 0.00477 - 12 0.00191 - 13 0.0124 - 15 0.404 - 19 0.000477 - 20 0.00286 - 21 0.000477 - 26 0.000477 - 29 0.000477 - 30 0.000477 - 31 0.000477 - 32 0.000477 - 40 0.304 - 41 0.173 - 42 0.0129 - 43 0.000953 - 44 0.000953 - 45 0.000477 - 46 0.000477 - 47 0.000477 - - 40 11 2 0 - 46 0.0909 - 47 0.909 - - 41 55 17 0 - 0 0.0727 - 2 0.364 - 4 0.109 - 7 0.0545 - 8 0.0182 - 12 0.109 - 13 0.0182 - 14 0.0364 - 15 0.0182 - 19 0.0364 - 21 0.0364 - 29 0.0182 - 30 0.0182 - 31 0.0182 - 32 0.0182 - 37 0.0364 - 45 0.0182 - - 42 5 4 0 - 4 0.2 - 12 0.2 - 19 0.4 - 31 0.2 - - 43 14 5 0 - 2 0.143 - 12 0.0714 - 40 0.357 - 41 0.357 - 42 0.0714 - - 46 81 16 0 - 0 0.037 - 2 0.42 - 4 0.0247 - 7 0.0864 - 12 0.0123 - 15 0.0247 - 19 0.0494 - 21 0.0123 - 29 0.037 - 33 0.0247 - 40 0.0123 - 41 0.0123 - 42 0.0494 - 44 0.0123 - 46 0.0864 - 47 0.0988 - - 48 4185 23 0 - 0 0.0098 - 2 0.0437 - 5 0.000239 - 7 0.00621 - 8 0.000239 - 12 0.00119 - 19 0.00143 - 20 0.000239 - 21 0.000717 - 26 0.000717 - 29 0.000717 - 30 0.000717 - 32 0.000239 - 33 0.000478 - 34 0.000478 - 40 0.651 - 41 0.249 - 42 0.0284 - 43 0.000956 - 44 0.000478 - 45 0.000239 - 46 0.00143 - 47 0.00143 - - 49 3148 26 0 - 0 0.0156 - 2 0.0594 - 3 0.000318 - 4 0.000635 - 7 0.0133 - 8 0.000318 - 12 0.00762 - 13 0.000318 - 15 0.000318 - 19 0.000953 - 21 0.00254 - 26 0.00159 - 28 0.000318 - 29 0.00349 - 30 0.000635 - 32 0.00127 - 33 0.00222 - 34 0.000318 - 37 0.000635 - 40 0.619 - 41 0.234 - 42 0.027 - 43 0.00286 - 45 0.000318 - 46 0.00191 - 47 0.00222 - - 51 49 5 0 - 40 0.735 - 41 0.102 - 42 0.0204 - 43 0.0408 - 47 0.102 - - 55 29370 35 0 - 0 0.0136 - 2 0.0618 - 3 0.00017 - 4 0.00109 - 5 3.4e-05 - 7 0.0157 - 8 0.000613 - 12 0.00582 - 13 0.000204 - 14 0.000136 - 15 0.000477 - 19 0.000783 - 20 6.81e-05 - 21 0.00289 - 22 0.000238 - 25 3.4e-05 - 26 0.00221 - 28 0.000272 - 29 0.00371 - 30 0.000272 - 31 0.000477 - 32 0.00112 - 33 0.00197 - 34 0.000409 - 35 3.4e-05 - 37 0.000783 - 39 3.4e-05 - 40 0.65 - 41 0.205 - 42 0.0224 - 43 0.0018 - 44 0.000647 - 45 0.000409 - 46 0.00211 - 47 0.00218 - - 57 28760 33 0 - 0 0.0139 - 2 0.0438 - 3 6.95e-05 - 4 0.00104 - 5 6.95e-05 - 7 0.00883 - 8 0.000556 - 12 0.00619 - 13 0.000417 - 14 0.000104 - 15 0.000313 - 19 0.000626 - 20 0.000104 - 21 0.00209 - 22 0.000139 - 26 0.00205 - 28 0.000209 - 29 0.00466 - 30 0.000522 - 31 0.000591 - 32 0.00191 - 33 0.00209 - 34 0.000487 - 35 3.48e-05 - 37 0.000313 - 40 0.684 - 41 0.195 - 42 0.0239 - 43 0.00212 - 44 0.00101 - 45 0.000382 - 46 0.00125 - 47 0.00174 - - 58 125 18 0 - 0 0.04 - 2 0.112 - 4 0.016 - 7 0.008 - 12 0.032 - 15 0.04 - 19 0.04 - 20 0.008 - 21 0.008 - 26 0.008 - 29 0.016 - 33 0.008 - 35 0.008 - 40 0.512 - 41 0.112 - 42 0.016 - 45 0.008 - 47 0.008 - - 59 392 14 0 - 0 0.0102 - 2 0.0969 - 4 0.00765 - 7 0.0255 - 8 0.00255 - 12 0.00255 - 21 0.0051 - 26 0.0051 - 40 0.51 - 41 0.291 - 42 0.0332 - 43 0.0051 - 46 0.00255 - 47 0.00255 - - 62 12424 28 0 - 0 0.00789 - 2 0.0249 - 3 8.05e-05 - 4 0.000644 - 7 0.00539 - 8 0.000241 - 12 0.0037 - 13 8.05e-05 - 14 0.000402 - 15 8.05e-05 - 19 0.000644 - 21 0.00145 - 26 0.000644 - 29 0.00129 - 30 0.000241 - 31 8.05e-05 - 32 0.000805 - 33 0.00121 - 34 0.000402 - 37 0.000322 - 40 0.761 - 41 0.163 - 42 0.0182 - 43 0.000563 - 44 0.000724 - 45 0.000402 - 46 0.0025 - 47 0.00266 - - 64 13381 22 0 - 0 0.00239 - 2 0.0106 - 4 7.47e-05 - 5 7.47e-05 - 7 0.000374 - 8 7.47e-05 - 12 0.00105 - 13 7.47e-05 - 15 7.47e-05 - 19 0.000374 - 21 7.47e-05 - 29 0.000299 - 32 0.000149 - 33 0.000224 - 34 7.47e-05 - 40 0.86 - 41 0.106 - 42 0.0132 - 43 0.000972 - 44 0.000224 - 46 0.000972 - 47 0.00277 - - 65 17 2 0 - 40 0.765 - 47 0.235 - - 67 12 4 0 - 40 0.5 - 42 0.0833 - 46 0.25 - 47 0.167 - - 68 148 8 0 - 0 0.0135 - 2 0.00676 - 4 0.00676 - 31 0.00676 - 40 0.73 - 41 0.189 - 42 0.0405 - 46 0.00676 - - 69 44302 32 0 - 0 0.0102 - 2 0.0279 - 3 6.77e-05 - 4 0.000971 - 5 6.77e-05 - 7 0.0133 - 8 0.000361 - 12 0.00354 - 13 0.000203 - 14 0.000271 - 15 0.000406 - 19 0.000564 - 20 2.26e-05 - 21 0.00185 - 22 0.000158 - 26 0.00144 - 28 9.03e-05 - 29 0.00174 - 30 0.000339 - 31 0.000226 - 32 0.00079 - 33 0.00124 - 34 0.000113 - 37 0.00079 - 40 0.719 - 41 0.189 - 42 0.0194 - 43 0.0012 - 44 0.000632 - 45 0.000248 - 46 0.00192 - 47 0.00156 - - 74 15 3 0 - 40 0.4 - 41 0.0667 - 47 0.533 - - 48 5913 33 15 - 0 0.00727 - 2 0.0313 - 3 0.00101 - 4 0.00643 - 5 0.000169 - 7 0.163 - 8 0.00372 - 12 0.00101 - 13 0.00558 - 14 0.000338 - 15 0.00169 - 17 0.000507 - 19 0.00152 - 20 0.000169 - 21 0.0167 - 22 0.000507 - 26 0.0338 - 29 0.000507 - 30 0.00355 - 31 0.0022 - 32 0.000169 - 33 0.000338 - 34 0.00101 - 35 0.000676 - 37 0.00693 - 40 0.461 - 41 0.214 - 42 0.0237 - 43 0.000676 - 44 0.00152 - 45 0.000507 - 46 0.00761 - 47 0.00101 - - 0 4156 30 0 - 0 0.00794 - 2 0.0337 - 3 0.000722 - 4 0.00553 - 5 0.000241 - 7 0.149 - 8 0.00217 - 12 0.0012 - 13 0.00674 - 14 0.000241 - 15 0.000962 - 17 0.000481 - 19 0.00144 - 21 0.0156 - 26 0.038 - 29 0.000722 - 30 0.00337 - 31 0.00265 - 33 0.000481 - 34 0.0012 - 35 0.000481 - 37 0.00577 - 40 0.474 - 41 0.217 - 42 0.0231 - 43 0.000722 - 44 0.00192 - 45 0.000481 - 46 0.00217 - 47 0.00144 - - 1 36 8 0 - 0 0.0278 - 7 0.194 - 19 0.0278 - 21 0.0278 - 40 0.333 - 41 0.306 - 42 0.0556 - 46 0.0278 - - 21 356 17 0 - 0 0.00562 - 2 0.0169 - 4 0.00281 - 7 0.152 - 8 0.00281 - 19 0.00281 - 21 0.014 - 26 0.014 - 30 0.00281 - 32 0.00281 - 34 0.00281 - 35 0.00281 - 37 0.0225 - 40 0.458 - 41 0.256 - 42 0.0365 - 46 0.00562 - - 28 251 17 0 - 0 0.012 - 2 0.0239 - 4 0.0199 - 7 0.243 - 8 0.0199 - 12 0.00398 - 14 0.00398 - 15 0.00398 - 20 0.00398 - 21 0.0239 - 26 0.0438 - 30 0.00398 - 40 0.394 - 41 0.175 - 42 0.0159 - 43 0.00398 - 45 0.00398 - - 29 218 16 0 - 0 0.00459 - 2 0.0275 - 3 0.00917 - 4 0.0275 - 7 0.284 - 8 0.0229 - 13 0.00917 - 15 0.0138 - 21 0.0275 - 22 0.0138 - 26 0.0275 - 30 0.00917 - 37 0.0138 - 40 0.362 - 41 0.138 - 42 0.00917 - - 30 87 10 0 - 0 0.0115 - 2 0.0345 - 4 0.0115 - 7 0.184 - 15 0.0115 - 17 0.0115 - 21 0.0345 - 26 0.0115 - 40 0.517 - 41 0.172 - - 31 99 12 0 - 2 0.0202 - 4 0.0101 - 7 0.343 - 15 0.0101 - 21 0.0202 - 26 0.0303 - 30 0.0101 - 37 0.0101 - 40 0.374 - 41 0.141 - 42 0.0202 - 44 0.0101 - - 32 99 9 0 - 2 0.0303 - 4 0.0101 - 7 0.172 - 13 0.0101 - 26 0.0101 - 37 0.0101 - 40 0.475 - 41 0.253 - 42 0.0303 - - 33 166 10 0 - 2 0.0301 - 7 0.0904 - 13 0.00602 - 21 0.0361 - 26 0.0241 - 31 0.00602 - 37 0.00602 - 40 0.53 - 41 0.235 - 42 0.0361 - - 41 43 6 0 - 7 0.0698 - 21 0.0233 - 30 0.0233 - 40 0.651 - 41 0.186 - 42 0.0465 - - 45 96 7 0 - 2 0.0104 - 7 0.0312 - 30 0.0104 - 31 0.0104 - 40 0.354 - 41 0.25 - 46 0.333 - - 47 37 1 0 - 7 1 - - 49 232 14 0 - 0 0.00431 - 2 0.0517 - 7 0.142 - 8 0.00862 - 13 0.00431 - 19 0.00431 - 21 0.0172 - 26 0.0474 - 35 0.00431 - 37 0.0129 - 40 0.418 - 41 0.25 - 42 0.0302 - 46 0.00431 - - 59 3 3 0 - 3 0.333 - 40 0.333 - 42 0.333 - - 69 2 2 0 - 0 0.5 - 40 0.5 - - 49 8591 38 29 - 0 0.047 - 1 0.00291 - 2 0.0221 - 3 0.00466 - 4 0.0363 - 7 0.185 - 8 0.0282 - 9 0.00163 - 10 0.000116 - 12 0.00326 - 13 0.00873 - 14 0.00384 - 15 0.00349 - 17 0.000116 - 19 0.00105 - 20 0.00186 - 21 0.0312 - 22 0.00233 - 24 0.000466 - 26 0.0481 - 28 0.0638 - 29 0.00349 - 30 0.0345 - 31 0.076 - 32 0.000931 - 33 0.00128 - 34 0.000233 - 35 0.00151 - 37 0.00442 - 39 0.000698 - 40 0.227 - 41 0.132 - 42 0.0128 - 43 0.00105 - 44 0.000698 - 45 0.0021 - 46 0.00466 - 47 0.000815 - - 0 2149 33 0 - 0 0.0558 - 1 0.0116 - 2 0.00558 - 3 0.00651 - 4 0.0879 - 7 0.102 - 8 0.0814 - 9 0.00605 - 12 0.000465 - 13 0.0172 - 14 0.00745 - 15 0.00465 - 17 0.000465 - 20 0.000465 - 21 0.053 - 22 0.00279 - 24 0.0014 - 26 0.0219 - 28 0.00279 - 29 0.000465 - 30 0.117 - 31 0.276 - 32 0.000465 - 33 0.000465 - 35 0.00372 - 37 0.00233 - 39 0.000931 - 40 0.0749 - 41 0.0433 - 42 0.00465 - 45 0.00558 - 46 0.000465 - 47 0.000465 - - 1 9 3 0 - 0 0.111 - 31 0.778 - 47 0.111 - - 2 61 13 0 - 0 0.115 - 7 0.0328 - 8 0.0164 - 12 0.0492 - 21 0.0164 - 26 0.0656 - 28 0.18 - 29 0.213 - 30 0.0984 - 31 0.082 - 32 0.0492 - 33 0.0656 - 45 0.0164 - - 8 4 2 0 - 7 0.75 - 41 0.25 - - 12 581 7 0 - 0 0.31 - 21 0.0172 - 22 0.00172 - 28 0.664 - 29 0.00172 - 32 0.00172 - 41 0.00344 - - 13 14 7 0 - 7 0.357 - 14 0.143 - 26 0.143 - 30 0.0714 - 37 0.0714 - 40 0.143 - 41 0.0714 - - 21 224 16 0 - 0 0.196 - 3 0.00446 - 4 0.0491 - 7 0.0268 - 8 0.0714 - 13 0.0179 - 20 0.00446 - 21 0.0179 - 26 0.0179 - 28 0.366 - 30 0.0402 - 31 0.156 - 40 0.00893 - 41 0.00893 - 42 0.00893 - 46 0.00446 - - 26 59 4 0 - 0 0.0169 - 21 0.0169 - 28 0.932 - 45 0.0339 - - 28 735 26 0 - 0 0.00544 - 2 0.0667 - 3 0.00272 - 4 0.0517 - 7 0.291 - 8 0.015 - 12 0.00136 - 13 0.0068 - 14 0.00816 - 15 0.00544 - 20 0.0068 - 21 0.0381 - 22 0.00408 - 26 0.0803 - 29 0.00136 - 30 0.00952 - 31 0.00136 - 35 0.00408 - 37 0.0109 - 39 0.00272 - 40 0.215 - 41 0.144 - 42 0.00952 - 44 0.00136 - 46 0.015 - 47 0.00136 - - 29 723 27 0 - 0 0.00138 - 2 0.0277 - 3 0.0166 - 4 0.0194 - 7 0.383 - 8 0.0194 - 9 0.00138 - 12 0.00138 - 13 0.0138 - 14 0.00553 - 15 0.0152 - 19 0.00692 - 20 0.00692 - 21 0.0332 - 22 0.00277 - 26 0.116 - 30 0.00553 - 31 0.00138 - 32 0.00138 - 37 0.00415 - 40 0.169 - 41 0.129 - 42 0.0111 - 43 0.00138 - 44 0.00138 - 45 0.00138 - 46 0.00415 - - 30 476 29 0 - 0 0.0168 - 2 0.0147 - 3 0.0063 - 4 0.0315 - 7 0.332 - 8 0.0105 - 10 0.0021 - 12 0.0126 - 13 0.0126 - 14 0.0105 - 15 0.0021 - 20 0.0021 - 21 0.0441 - 22 0.0021 - 26 0.105 - 28 0.0021 - 29 0.0021 - 30 0.0084 - 31 0.0021 - 33 0.0084 - 34 0.0021 - 35 0.0021 - 37 0.0063 - 39 0.0042 - 40 0.197 - 41 0.139 - 42 0.0126 - 43 0.0042 - 46 0.0042 - - 31 679 25 0 - 0 0.0103 - 2 0.0353 - 3 0.00736 - 4 0.0177 - 7 0.384 - 8 0.00884 - 12 0.0103 - 13 0.00295 - 15 0.00147 - 19 0.00295 - 20 0.00147 - 21 0.0177 - 26 0.0854 - 29 0.0118 - 30 0.00442 - 35 0.00147 - 37 0.00295 - 40 0.225 - 41 0.137 - 42 0.0206 - 43 0.00147 - 44 0.00442 - 45 0.00147 - 46 0.00147 - 47 0.00147 - - 32 203 15 0 - 0 0.0197 - 2 0.0542 - 4 0.0345 - 7 0.31 - 8 0.00985 - 13 0.0148 - 21 0.0394 - 22 0.00493 - 26 0.0788 - 31 0.00493 - 32 0.00493 - 37 0.00493 - 40 0.241 - 41 0.163 - 42 0.0148 - - 33 209 19 0 - 2 0.0287 - 3 0.00957 - 4 0.0383 - 7 0.297 - 8 0.0239 - 13 0.00478 - 19 0.00478 - 20 0.00478 - 21 0.0383 - 22 0.00478 - 26 0.0718 - 34 0.00478 - 37 0.00957 - 40 0.254 - 41 0.167 - 42 0.0191 - 43 0.00478 - 46 0.00478 - 47 0.00957 - - 41 627 13 0 - 0 0.00159 - 2 0.00159 - 7 0.0223 - 20 0.00159 - 21 0.00159 - 26 0.00319 - 29 0.00638 - 30 0.00797 - 31 0.00159 - 40 0.619 - 41 0.313 - 42 0.0191 - 47 0.00159 - - 42 15 6 0 - 7 0.0667 - 26 0.0667 - 40 0.667 - 41 0.0667 - 42 0.0667 - 43 0.0667 - - 43 4 3 0 - 2 0.25 - 7 0.25 - 40 0.5 - - 45 38 7 0 - 7 0.105 - 21 0.105 - 28 0.0526 - 31 0.105 - 40 0.237 - 41 0.0789 - 46 0.316 - - 46 6 2 0 - 40 0.333 - 41 0.667 - - 47 19 5 0 - 2 0.0526 - 7 0.421 - 26 0.0526 - 40 0.263 - 41 0.211 - - 48 81 9 0 - 0 0.0123 - 2 0.0123 - 7 0.173 - 13 0.0123 - 15 0.0247 - 26 0.037 - 40 0.444 - 41 0.247 - 42 0.037 - - 49 150 16 0 - 0 0.0133 - 2 0.0133 - 4 0.02 - 7 0.147 - 8 0.0133 - 13 0.00667 - 21 0.02 - 22 0.0133 - 26 0.0533 - 28 0.0333 - 30 0.02 - 31 0.02 - 40 0.327 - 41 0.267 - 42 0.0133 - 46 0.02 - - 55 1082 27 0 - 0 0.012 - 2 0.0407 - 3 0.000924 - 4 0.0129 - 7 0.174 - 8 0.00277 - 12 0.00555 - 13 0.0037 - 15 0.000924 - 19 0.000924 - 21 0.0213 - 22 0.00185 - 24 0.000924 - 26 0.0434 - 29 0.000924 - 30 0.00277 - 31 0.000924 - 32 0.000924 - 33 0.000924 - 37 0.00555 - 40 0.418 - 41 0.216 - 42 0.0259 - 43 0.00185 - 44 0.000924 - 45 0.000924 - 46 0.00277 - - 57 294 15 0 - 0 0.034 - 2 0.0272 - 7 0.119 - 8 0.0034 - 12 0.0102 - 13 0.0034 - 21 0.0068 - 26 0.0136 - 33 0.0034 - 37 0.0102 - 40 0.497 - 41 0.248 - 42 0.0136 - 43 0.0034 - 46 0.0068 - - 59 95 10 0 - 2 0.0211 - 4 0.0105 - 7 0.242 - 21 0.0316 - 22 0.0105 - 26 0.0737 - 37 0.0316 - 40 0.326 - 41 0.221 - 42 0.0316 - - 62 38 6 0 - 7 0.158 - 21 0.0263 - 26 0.0263 - 40 0.5 - 41 0.237 - 42 0.0526 - - 64 6 3 0 - 2 0.167 - 7 0.333 - 40 0.5 - - 68 1 1 0 - 42 1 - - 69 3 3 0 - 37 0.333 - 40 0.333 - 41 0.333 - - 50 39 9 0 - 0 0.0513 - 1 0.0513 - 13 0.0256 - 21 0.103 - 26 0.0769 - 28 0.256 - 29 0.0513 - 30 0.308 - 31 0.0769 - - 51 53 8 1 - 26 0.0189 - 40 0.679 - 41 0.113 - 42 0.0189 - 43 0.0377 - 44 0.0189 - 46 0.0189 - 47 0.0943 - - 28 8 4 0 - 40 0.5 - 42 0.125 - 43 0.25 - 47 0.125 - - 52 22 6 1 - 7 0.0455 - 21 0.0455 - 26 0.182 - 40 0.273 - 41 0.364 - 46 0.0909 - - 41 9 2 0 - 40 0.111 - 41 0.889 - - 55 47284 43 31 - 0 0.00854 - 1 2.11e-05 - 2 0.0387 - 3 0.00247 - 4 0.0117 - 5 8.46e-05 - 6 4.23e-05 - 7 0.211 - 8 0.00544 - 9 0.000656 - 10 6.34e-05 - 12 0.00364 - 13 0.00398 - 14 0.000613 - 15 0.00271 - 17 0.000106 - 19 0.0018 - 20 0.000338 - 21 0.0256 - 22 0.00235 - 23 6.34e-05 - 24 0.00343 - 25 2.11e-05 - 26 0.0759 - 28 0.000486 - 29 0.00235 - 30 0.00334 - 31 0.00131 - 32 0.000698 - 33 0.00123 - 34 0.000761 - 35 0.000423 - 37 0.00419 - 38 2.11e-05 - 39 0.000952 - 40 0.404 - 41 0.157 - 42 0.0156 - 43 0.0014 - 44 0.000909 - 45 0.00123 - 46 0.00338 - 47 0.00135 - - 0 6750 33 0 - 0 0.00252 - 2 0.0296 - 3 0.000444 - 4 0.00504 - 7 0.114 - 8 0.00296 - 12 0.000889 - 13 0.00207 - 14 0.000148 - 15 0.000593 - 19 0.00119 - 20 0.000296 - 21 0.0169 - 22 0.000148 - 23 0.000148 - 24 0.000148 - 26 0.0105 - 29 0.000593 - 30 0.00222 - 31 0.00207 - 32 0.000296 - 33 0.000148 - 34 0.00207 - 35 0.00148 - 37 0.00252 - 40 0.549 - 41 0.221 - 42 0.0246 - 43 0.00119 - 44 0.00104 - 45 0.000741 - 46 0.00252 - 47 0.00119 - - 1 94 13 0 - 0 0.0426 - 2 0.0532 - 4 0.0319 - 7 0.117 - 12 0.0106 - 21 0.0213 - 26 0.0213 - 30 0.0426 - 31 0.0213 - 33 0.0213 - 40 0.34 - 41 0.255 - 42 0.0213 - - 2 4 4 0 - 2 0.25 - 4 0.25 - 7 0.25 - 40 0.25 - - 8 38 9 0 - 0 0.0526 - 2 0.0263 - 7 0.211 - 19 0.0526 - 21 0.0526 - 26 0.0263 - 40 0.342 - 41 0.184 - 42 0.0526 - - 12 4 3 0 - 0 0.25 - 26 0.25 - 28 0.5 - - 13 94 10 0 - 0 0.0426 - 2 0.0638 - 7 0.234 - 12 0.0213 - 13 0.0106 - 21 0.0106 - 26 0.0957 - 34 0.0106 - 40 0.362 - 41 0.149 - - 14 29 7 0 - 2 0.0345 - 7 0.448 - 21 0.0345 - 26 0.069 - 30 0.0345 - 40 0.276 - 41 0.103 - - 15 17 7 0 - 7 0.0588 - 26 0.0588 - 40 0.294 - 41 0.294 - 42 0.0588 - 46 0.176 - 47 0.0588 - - 18 17 5 0 - 7 0.0588 - 21 0.176 - 26 0.0588 - 40 0.588 - 41 0.118 - - 21 265 16 0 - 0 0.00377 - 2 0.0226 - 3 0.00377 - 7 0.117 - 19 0.00377 - 21 0.0113 - 26 0.0113 - 28 0.00755 - 31 0.00377 - 35 0.00755 - 40 0.494 - 41 0.245 - 42 0.0566 - 44 0.00377 - 46 0.00377 - 47 0.00377 - - 28 12476 38 0 - 0 0.00697 - 2 0.0437 - 3 0.00176 - 4 0.013 - 7 0.248 - 8 0.00601 - 9 0.0012 - 10 8.02e-05 - 12 0.00353 - 13 0.00449 - 14 0.000721 - 15 0.00208 - 17 8.02e-05 - 19 0.00168 - 20 0.000802 - 21 0.0374 - 22 0.00297 - 23 8.02e-05 - 24 0.00513 - 26 0.0612 - 28 0.000641 - 29 0.00224 - 30 0.00313 - 31 0.00104 - 32 0.000321 - 33 0.00128 - 34 0.000481 - 35 0.000321 - 37 0.00529 - 39 0.0016 - 40 0.389 - 41 0.134 - 42 0.0119 - 43 0.0012 - 44 0.000721 - 45 0.00136 - 46 0.00361 - 47 0.00112 - - 29 8581 37 0 - 0 0.00373 - 2 0.0332 - 3 0.00629 - 4 0.0124 - 5 0.000233 - 7 0.253 - 8 0.0107 - 9 0.000699 - 10 0.000117 - 12 0.00105 - 13 0.00594 - 14 0.000583 - 15 0.00886 - 19 0.00408 - 21 0.0198 - 22 0.00431 - 24 0.00408 - 26 0.19 - 28 0.000583 - 29 0.0021 - 30 0.00501 - 31 0.00163 - 32 0.000233 - 33 0.000233 - 34 0.000117 - 35 0.000117 - 37 0.00373 - 38 0.000117 - 39 0.0021 - 40 0.295 - 41 0.117 - 42 0.00979 - 43 0.000932 - 44 0.000233 - 45 0.00128 - 46 0.000583 - 47 0.000699 - - 30 6281 37 0 - 0 0.0275 - 2 0.0393 - 3 0.00271 - 4 0.0146 - 6 0.000159 - 7 0.217 - 8 0.00494 - 9 0.000478 - 12 0.0126 - 13 0.0035 - 14 0.000955 - 15 0.00191 - 17 0.000318 - 19 0.00127 - 20 0.000318 - 21 0.0318 - 22 0.00223 - 24 0.0043 - 26 0.0715 - 28 0.000159 - 29 0.00462 - 30 0.00239 - 31 0.00127 - 32 0.00223 - 33 0.00478 - 34 0.000955 - 35 0.000159 - 37 0.00478 - 39 0.000159 - 40 0.367 - 41 0.154 - 42 0.0135 - 43 0.000955 - 44 0.00127 - 45 0.00191 - 46 0.00191 - 47 0.000478 - - 31 2695 36 0 - 0 0.00631 - 2 0.0445 - 3 0.00223 - 4 0.0137 - 6 0.000371 - 7 0.277 - 8 0.00334 - 12 0.00186 - 13 0.00445 - 14 0.00148 - 15 0.000742 - 19 0.00148 - 20 0.000371 - 21 0.0249 - 22 0.00223 - 24 0.00223 - 25 0.000371 - 26 0.0716 - 28 0.000742 - 29 0.00519 - 30 0.00334 - 31 0.000742 - 32 0.000742 - 33 0.000371 - 34 0.000371 - 35 0.000371 - 37 0.00297 - 39 0.000742 - 40 0.35 - 41 0.157 - 42 0.0122 - 43 0.00223 - 44 0.000742 - 45 0.00148 - 46 0.00148 - 47 0.000742 - - 32 1863 32 0 - 0 0.00966 - 2 0.0446 - 3 0.00215 - 4 0.0193 - 5 0.000537 - 7 0.188 - 8 0.00376 - 9 0.00161 - 10 0.000537 - 12 0.00429 - 13 0.00429 - 15 0.00107 - 17 0.00107 - 19 0.000537 - 21 0.0327 - 22 0.00376 - 24 0.0059 - 26 0.0505 - 28 0.00107 - 29 0.00107 - 30 0.00322 - 32 0.00322 - 37 0.00751 - 39 0.000537 - 40 0.429 - 41 0.144 - 42 0.0247 - 43 0.000537 - 44 0.00161 - 45 0.00161 - 46 0.00215 - 47 0.00429 - - 33 3326 33 0 - 0 0.00301 - 2 0.0427 - 3 0.0018 - 4 0.018 - 7 0.196 - 8 0.00331 - 9 0.0012 - 12 0.0018 - 13 0.00481 - 14 0.000601 - 15 0.0012 - 19 0.000902 - 20 0.000301 - 21 0.0216 - 22 0.0021 - 23 0.000301 - 24 0.00541 - 26 0.0496 - 29 0.0015 - 30 0.0021 - 31 0.000601 - 33 0.000902 - 34 0.000301 - 37 0.00241 - 39 0.000902 - 40 0.442 - 41 0.164 - 42 0.0213 - 43 0.0015 - 44 0.0012 - 45 0.0012 - 46 0.0012 - 47 0.00361 - - 41 223 9 0 - 0 0.00448 - 2 0.00448 - 3 0.00448 - 30 0.00448 - 40 0.807 - 41 0.139 - 42 0.0269 - 43 0.00448 - 46 0.00448 - - 42 82 6 0 - 7 0.0122 - 13 0.0122 - 40 0.939 - 41 0.0122 - 42 0.0122 - 46 0.0122 - - 44 13 2 0 - 40 0.0769 - 43 0.923 - - 45 212 7 0 - 7 0.0425 - 21 0.00472 - 26 0.00943 - 40 0.448 - 41 0.241 - 42 0.0142 - 46 0.241 - - 46 73 8 0 - 0 0.0274 - 2 0.0137 - 7 0.247 - 21 0.0274 - 37 0.0137 - 40 0.479 - 41 0.178 - 42 0.0137 - - 47 75 7 0 - 7 0.693 - 26 0.213 - 31 0.0133 - 40 0.0267 - 41 0.0267 - 42 0.0133 - 46 0.0133 - - 48 97 10 0 - 0 0.0206 - 2 0.0825 - 4 0.0103 - 7 0.134 - 12 0.0103 - 26 0.0619 - 37 0.0103 - 40 0.433 - 41 0.206 - 42 0.0309 - - 49 604 21 0 - 0 0.00331 - 2 0.0348 - 3 0.00166 - 4 0.00828 - 7 0.118 - 8 0.00331 - 13 0.00331 - 21 0.00993 - 26 0.0281 - 29 0.00166 - 33 0.00166 - 34 0.00331 - 35 0.00166 - 37 0.00166 - 40 0.518 - 41 0.214 - 42 0.0315 - 43 0.00331 - 44 0.00166 - 46 0.00497 - 47 0.00662 - - 55 1276 24 0 - 0 0.00549 - 1 0.000784 - 2 0.0353 - 3 0.000784 - 4 0.00392 - 7 0.143 - 8 0.00157 - 12 0.000784 - 13 0.000784 - 21 0.00862 - 26 0.0533 - 28 0.000784 - 29 0.00313 - 30 0.00784 - 31 0.00157 - 32 0.00157 - 34 0.00235 - 37 0.00705 - 40 0.472 - 41 0.226 - 42 0.0188 - 43 0.000784 - 46 0.00157 - 47 0.00235 - - 57 656 22 0 - 0 0.0107 - 2 0.0366 - 4 0.00457 - 7 0.145 - 8 0.00152 - 12 0.00305 - 14 0.00152 - 15 0.00152 - 19 0.00152 - 26 0.0244 - 29 0.00152 - 30 0.00457 - 31 0.00152 - 32 0.00152 - 33 0.00152 - 34 0.00152 - 37 0.0061 - 40 0.486 - 41 0.248 - 42 0.0122 - 43 0.00152 - 44 0.00305 - - 58 23 4 0 - 7 0.087 - 29 0.0435 - 40 0.696 - 41 0.174 - - 59 1272 26 0 - 0 0.0118 - 2 0.0645 - 3 0.000786 - 4 0.0055 - 5 0.000786 - 7 0.21 - 8 0.0055 - 12 0.00629 - 13 0.00314 - 14 0.000786 - 15 0.000786 - 19 0.000786 - 21 0.0204 - 22 0.00157 - 26 0.0558 - 29 0.00314 - 30 0.00393 - 33 0.000786 - 37 0.00472 - 40 0.411 - 41 0.166 - 42 0.0118 - 44 0.00236 - 45 0.00157 - 46 0.00472 - 47 0.00157 - - 62 57 9 0 - 0 0.0351 - 4 0.0175 - 7 0.175 - 21 0.0175 - 31 0.0175 - 37 0.0175 - 40 0.368 - 41 0.316 - 42 0.0351 - - 69 56 6 0 - 2 0.0536 - 7 0.179 - 26 0.0536 - 40 0.5 - 41 0.196 - 44 0.0179 - - 74 2 2 0 - 31 0.5 - 40 0.5 - - 57 37637 38 30 - 0 0.0109 - 2 0.0336 - 3 0.00109 - 4 0.00717 - 5 5.31e-05 - 7 0.128 - 8 0.00438 - 9 2.66e-05 - 10 0.000106 - 12 0.00476 - 13 0.00404 - 14 0.000372 - 15 0.00215 - 17 2.66e-05 - 19 0.000797 - 20 0.000239 - 21 0.0102 - 22 0.000771 - 23 5.31e-05 - 26 0.0253 - 28 0.000345 - 29 0.00361 - 30 0.00321 - 31 0.00138 - 32 0.00149 - 33 0.00159 - 34 0.000824 - 35 0.000159 - 37 0.00343 - 39 7.97e-05 - 40 0.523 - 41 0.199 - 42 0.0209 - 43 0.00186 - 44 0.00104 - 45 0.000824 - 46 0.00178 - 47 0.00133 - - 0 1140 30 0 - 0 0.0105 - 2 0.0184 - 3 0.00175 - 4 0.0123 - 7 0.113 - 8 0.0114 - 10 0.000877 - 12 0.00351 - 13 0.00614 - 15 0.00175 - 19 0.00175 - 21 0.0281 - 22 0.000877 - 26 0.0211 - 28 0.000877 - 29 0.00175 - 30 0.00439 - 31 0.0123 - 32 0.00175 - 33 0.00351 - 34 0.000877 - 35 0.00175 - 37 0.00614 - 39 0.000877 - 40 0.482 - 41 0.218 - 42 0.0281 - 44 0.00351 - 45 0.00175 - 46 0.000877 - - 8 57 8 0 - 0 0.0175 - 2 0.0702 - 7 0.123 - 29 0.0175 - 37 0.0351 - 40 0.491 - 41 0.228 - 42 0.0175 - - 12 9 4 0 - 0 0.111 - 28 0.333 - 31 0.222 - 40 0.333 - - 13 73 10 0 - 0 0.0137 - 2 0.0548 - 7 0.164 - 8 0.0137 - 26 0.0274 - 29 0.0137 - 33 0.0274 - 40 0.534 - 41 0.137 - 42 0.0137 - - 14 26 7 0 - 0 0.0385 - 2 0.0385 - 7 0.192 - 8 0.0385 - 40 0.5 - 41 0.154 - 42 0.0385 - - 15 6 4 0 - 2 0.167 - 7 0.167 - 40 0.5 - 46 0.167 - - 21 68 10 0 - 0 0.0147 - 4 0.0147 - 7 0.0735 - 21 0.0735 - 28 0.0441 - 32 0.0147 - 40 0.471 - 41 0.221 - 42 0.0588 - 46 0.0147 - - 28 2496 32 0 - 0 0.012 - 2 0.0341 - 3 0.0028 - 4 0.018 - 7 0.156 - 8 0.00401 - 10 0.000401 - 12 0.00361 - 13 0.00561 - 14 0.0016 - 15 0.0028 - 19 0.000801 - 20 0.0016 - 21 0.0148 - 26 0.0268 - 29 0.002 - 30 0.002 - 31 0.000401 - 32 0.0016 - 33 0.0012 - 34 0.000401 - 35 0.000401 - 37 0.00801 - 39 0.000401 - 40 0.508 - 41 0.163 - 42 0.018 - 43 0.000801 - 44 0.0016 - 45 0.002 - 46 0.002 - 47 0.002 - - 29 2493 30 0 - 0 0.00682 - 2 0.0253 - 3 0.00201 - 4 0.014 - 7 0.271 - 8 0.0132 - 10 0.000401 - 12 0.00281 - 13 0.01 - 14 0.0012 - 15 0.00722 - 19 0.00361 - 21 0.016 - 22 0.000802 - 23 0.000401 - 26 0.0401 - 29 0.00321 - 30 0.00361 - 31 0.000401 - 32 0.0012 - 34 0.000401 - 37 0.00441 - 39 0.000401 - 40 0.361 - 41 0.192 - 42 0.0136 - 43 0.000802 - 44 0.0012 - 45 0.0012 - 46 0.0016 - - 30 1791 27 0 - 0 0.029 - 2 0.0374 - 3 0.00112 - 4 0.0207 - 7 0.13 - 8 0.00503 - 12 0.014 - 13 0.00838 - 15 0.00391 - 19 0.00168 - 20 0.000558 - 21 0.0151 - 22 0.00279 - 26 0.0352 - 28 0.000558 - 29 0.00335 - 30 0.00391 - 31 0.00168 - 32 0.00447 - 33 0.00558 - 37 0.00112 - 40 0.419 - 41 0.229 - 42 0.0218 - 44 0.00112 - 46 0.00168 - 47 0.00168 - - 31 7097 32 0 - 0 0.0194 - 2 0.0327 - 3 0.000986 - 4 0.00592 - 7 0.131 - 8 0.00535 - 10 0.000141 - 12 0.0069 - 13 0.0038 - 14 0.000564 - 15 0.00268 - 19 0.000423 - 21 0.00972 - 22 0.00127 - 26 0.034 - 28 0.000423 - 29 0.00986 - 30 0.00211 - 31 0.00211 - 32 0.00352 - 33 0.00352 - 34 0.00141 - 35 0.000282 - 37 0.00211 - 40 0.477 - 41 0.215 - 42 0.0201 - 43 0.00366 - 44 0.00113 - 45 0.000705 - 46 0.00155 - 47 0.00127 - - 32 565 24 0 - 0 0.0159 - 2 0.0425 - 3 0.00177 - 4 0.0106 - 7 0.113 - 8 0.00354 - 12 0.0124 - 13 0.00177 - 14 0.00177 - 15 0.00177 - 19 0.00354 - 21 0.0283 - 23 0.00177 - 26 0.023 - 29 0.00531 - 30 0.00354 - 31 0.00177 - 32 0.00177 - 37 0.00708 - 40 0.487 - 41 0.196 - 42 0.0301 - 43 0.00354 - 46 0.00177 - - 33 905 26 0 - 0 0.00663 - 2 0.0365 - 4 0.0133 - 5 0.0011 - 7 0.105 - 8 0.0011 - 9 0.0011 - 12 0.00552 - 13 0.00442 - 14 0.0011 - 15 0.00221 - 19 0.0011 - 20 0.0011 - 21 0.00884 - 26 0.0177 - 29 0.00221 - 30 0.00442 - 31 0.00331 - 37 0.00552 - 40 0.543 - 41 0.19 - 42 0.032 - 43 0.00331 - 44 0.00221 - 46 0.00331 - 47 0.00442 - - 41 1622 14 0 - 2 0.00185 - 7 0.0333 - 8 0.00123 - 13 0.00185 - 15 0.000617 - 19 0.000617 - 21 0.00185 - 26 0.00308 - 40 0.763 - 41 0.179 - 42 0.00863 - 43 0.000617 - 44 0.000617 - 47 0.00308 - - 42 61 6 0 - 4 0.0328 - 21 0.0164 - 40 0.721 - 41 0.082 - 42 0.131 - 46 0.0164 - - 43 6 4 0 - 0 0.167 - 40 0.5 - 41 0.167 - 42 0.167 - - 44 8 1 0 - 43 1 - - 45 65 9 0 - 7 0.0769 - 21 0.0154 - 26 0.0308 - 29 0.0154 - 31 0.0154 - 40 0.569 - 41 0.154 - 42 0.0154 - 46 0.108 - - 46 184 13 0 - 2 0.038 - 4 0.0109 - 7 0.0435 - 13 0.00543 - 21 0.00543 - 26 0.00543 - 30 0.00543 - 33 0.00543 - 40 0.543 - 41 0.304 - 42 0.0109 - 44 0.00543 - 45 0.0163 - - 47 27 4 0 - 0 0.037 - 40 0.815 - 41 0.111 - 42 0.037 - - 48 712 17 0 - 0 0.0014 - 2 0.0435 - 4 0.00281 - 7 0.0955 - 12 0.00421 - 13 0.00281 - 21 0.00843 - 26 0.00983 - 30 0.0014 - 31 0.00281 - 37 0.0014 - 40 0.552 - 41 0.256 - 42 0.0126 - 44 0.0014 - 46 0.00281 - 47 0.0014 - - 49 1600 26 0 - 0 0.00938 - 2 0.0425 - 4 0.00313 - 5 0.000625 - 7 0.109 - 8 0.00187 - 12 0.0025 - 13 0.005 - 15 0.00187 - 20 0.000625 - 21 0.01 - 26 0.0244 - 29 0.000625 - 30 0.0025 - 31 0.000625 - 32 0.000625 - 33 0.00125 - 37 0.00438 - 40 0.514 - 41 0.233 - 42 0.0269 - 43 0.00125 - 44 0.000625 - 45 0.000625 - 46 0.00187 - 47 0.00125 - - 55 11225 30 0 - 0 0.00775 - 2 0.0394 - 3 0.00098 - 4 0.00383 - 7 0.139 - 8 0.00276 - 12 0.00454 - 13 0.00249 - 15 0.00107 - 19 0.000356 - 21 0.00775 - 22 0.000713 - 26 0.0247 - 28 0.000178 - 29 0.00205 - 30 0.0049 - 31 0.000356 - 32 0.000535 - 33 0.000802 - 34 0.00125 - 35 8.91e-05 - 37 0.00365 - 40 0.533 - 41 0.192 - 42 0.0211 - 43 0.00125 - 44 0.000624 - 45 0.000713 - 46 0.00151 - 47 0.00134 - - 57 4244 30 0 - 0 0.00683 - 2 0.028 - 3 0.000943 - 4 0.00259 - 7 0.0738 - 8 0.00448 - 12 0.00212 - 13 0.00259 - 14 0.000236 - 15 0.00212 - 19 0.000707 - 20 0.000236 - 21 0.00448 - 22 0.000943 - 26 0.0179 - 29 0.00283 - 30 0.00259 - 31 0.000707 - 32 0.00118 - 33 0.000236 - 34 0.000943 - 37 0.00283 - 40 0.621 - 41 0.192 - 42 0.0229 - 43 0.00189 - 44 0.000707 - 45 0.000236 - 46 0.000943 - 47 0.00141 - - 58 46 6 0 - 2 0.0652 - 7 0.0217 - 40 0.804 - 41 0.0435 - 42 0.0435 - 44 0.0217 - - 59 626 24 0 - 0 0.00479 - 2 0.0399 - 3 0.00319 - 4 0.0208 - 7 0.128 - 8 0.00319 - 12 0.00799 - 13 0.00479 - 17 0.0016 - 20 0.0016 - 21 0.024 - 26 0.0272 - 29 0.0016 - 30 0.00319 - 31 0.0016 - 33 0.00319 - 37 0.0016 - 40 0.494 - 41 0.193 - 42 0.024 - 43 0.0016 - 44 0.0016 - 45 0.00479 - 46 0.00319 - - 62 377 12 0 - 0 0.00265 - 2 0.0796 - 7 0.0531 - 12 0.00265 - 13 0.00796 - 21 0.00265 - 26 0.00531 - 33 0.00265 - 40 0.637 - 41 0.191 - 42 0.0133 - 46 0.00265 - - 64 28 5 0 - 0 0.0357 - 26 0.0357 - 40 0.714 - 41 0.143 - 42 0.0714 - - 67 1 1 0 - 43 1 - - 69 45 7 0 - 0 0.0222 - 2 0.0222 - 26 0.0222 - 37 0.0222 - 40 0.756 - 41 0.0889 - 42 0.0667 - - 58 317 27 20 - 0 0.0252 - 1 0.00315 - 2 0.0631 - 4 0.0599 - 7 0.271 - 8 0.0126 - 9 0.00315 - 12 0.0126 - 13 0.0158 - 15 0.0158 - 19 0.0158 - 20 0.00631 - 21 0.041 - 26 0.0315 - 28 0.0315 - 29 0.0126 - 30 0.0284 - 31 0.0158 - 32 0.00315 - 33 0.00315 - 35 0.00315 - 37 0.0126 - 40 0.202 - 41 0.0631 - 42 0.00631 - 45 0.0379 - 47 0.00315 - - 0 16 10 0 - 0 0.0625 - 1 0.0625 - 4 0.188 - 7 0.0625 - 9 0.0625 - 13 0.0625 - 29 0.0625 - 31 0.0625 - 40 0.25 - 45 0.125 - - 2 10 7 0 - 0 0.2 - 21 0.1 - 28 0.3 - 29 0.1 - 30 0.1 - 32 0.1 - 45 0.1 - - 12 3 1 0 - 28 1 - - 13 3 3 0 - 7 0.333 - 8 0.333 - 45 0.333 - - 21 3 3 0 - 4 0.333 - 21 0.333 - 28 0.333 - - 28 13 7 0 - 0 0.0769 - 2 0.0769 - 4 0.308 - 7 0.231 - 13 0.154 - 21 0.0769 - 40 0.0769 - - 29 9 4 0 - 0 0.111 - 4 0.111 - 7 0.556 - 26 0.222 - - 30 3 2 0 - 4 0.667 - 40 0.333 - - 31 18 8 0 - 7 0.556 - 15 0.0556 - 20 0.0556 - 21 0.0556 - 30 0.0556 - 37 0.0556 - 40 0.0556 - 41 0.111 - - 32 9 6 0 - 2 0.111 - 4 0.222 - 7 0.222 - 8 0.111 - 21 0.222 - 45 0.111 - - 33 9 7 0 - 4 0.111 - 7 0.333 - 8 0.111 - 13 0.111 - 26 0.111 - 30 0.111 - 40 0.111 - - 41 15 3 0 - 40 0.733 - 41 0.133 - 42 0.133 - - 46 7 4 0 - 2 0.143 - 35 0.143 - 40 0.571 - 41 0.143 - - 48 19 8 0 - 2 0.0526 - 4 0.0526 - 7 0.263 - 12 0.158 - 37 0.0526 - 40 0.211 - 41 0.158 - 45 0.0526 - - 49 14 8 0 - 2 0.0714 - 7 0.357 - 12 0.0714 - 28 0.0714 - 37 0.0714 - 40 0.214 - 41 0.0714 - 45 0.0714 - - 55 63 13 0 - 0 0.0317 - 2 0.0794 - 4 0.0159 - 7 0.365 - 19 0.0159 - 21 0.0317 - 26 0.0794 - 30 0.0317 - 31 0.0159 - 40 0.19 - 41 0.0794 - 45 0.0476 - 47 0.0159 - - 57 50 12 0 - 2 0.08 - 4 0.02 - 7 0.3 - 15 0.02 - 19 0.06 - 29 0.02 - 30 0.06 - 31 0.06 - 37 0.02 - 40 0.26 - 41 0.08 - 45 0.02 - - 62 11 6 0 - 7 0.455 - 15 0.0909 - 21 0.182 - 26 0.0909 - 40 0.0909 - 45 0.0909 - - 64 4 3 0 - 30 0.25 - 40 0.5 - 41 0.25 - - 69 30 16 0 - 0 0.0333 - 2 0.2 - 4 0.0333 - 7 0.167 - 8 0.0333 - 13 0.0333 - 15 0.0667 - 19 0.0333 - 20 0.0333 - 21 0.0667 - 26 0.0333 - 28 0.0333 - 29 0.0333 - 33 0.0333 - 40 0.133 - 41 0.0333 - - 59 2627 34 12 - 0 0.00152 - 1 0.00114 - 2 0.0152 - 3 0.0175 - 4 0.212 - 7 0.239 - 8 0.0499 - 9 0.00495 - 10 0.00266 - 12 0.000381 - 13 0.0495 - 14 0.0461 - 15 0.0236 - 17 0.00114 - 19 0.000761 - 20 0.0529 - 21 0.0487 - 22 0.00457 - 24 0.00114 - 26 0.0457 - 30 0.0164 - 31 0.0019 - 35 0.00533 - 37 0.00495 - 38 0.000761 - 39 0.00876 - 40 0.0761 - 41 0.0502 - 42 0.00571 - 43 0.000761 - 44 0.000381 - 45 0.00457 - 46 0.00533 - 47 0.000381 - - 0 6 5 0 - 4 0.167 - 7 0.333 - 9 0.167 - 21 0.167 - 26 0.167 - - 8 2 2 0 - 13 0.5 - 26 0.5 - - 13 19 8 0 - 4 0.263 - 7 0.0526 - 8 0.0526 - 13 0.158 - 14 0.211 - 20 0.158 - 21 0.0526 - 40 0.0526 - - 14 7 6 0 - 4 0.286 - 7 0.143 - 8 0.143 - 13 0.143 - 14 0.143 - 20 0.143 - - 15 2 2 0 - 4 0.5 - 47 0.5 - - 28 861 27 0 - 1 0.00232 - 2 0.0105 - 3 0.0186 - 4 0.28 - 7 0.163 - 8 0.065 - 9 0.00581 - 10 0.00348 - 13 0.0674 - 14 0.0569 - 15 0.0267 - 17 0.00232 - 20 0.0767 - 21 0.0465 - 22 0.00116 - 24 0.00116 - 26 0.0279 - 30 0.0267 - 31 0.00116 - 35 0.0105 - 37 0.00813 - 38 0.00116 - 39 0.0105 - 40 0.0511 - 41 0.0267 - 45 0.00581 - 46 0.00348 - - 29 473 25 0 - 0 0.00634 - 2 0.0127 - 3 0.0381 - 4 0.22 - 7 0.271 - 8 0.0338 - 10 0.00211 - 13 0.0359 - 14 0.0486 - 15 0.0296 - 19 0.00423 - 20 0.0507 - 21 0.0381 - 22 0.00634 - 24 0.00211 - 26 0.0592 - 30 0.0148 - 31 0.00211 - 35 0.00211 - 39 0.0169 - 40 0.0592 - 41 0.0359 - 42 0.00423 - 45 0.00423 - 46 0.00211 - - 30 399 24 0 - 2 0.0125 - 3 0.01 - 4 0.236 - 7 0.188 - 8 0.0852 - 9 0.00752 - 10 0.00251 - 13 0.0677 - 14 0.0727 - 15 0.0276 - 20 0.0501 - 21 0.0351 - 22 0.00752 - 26 0.0376 - 30 0.015 - 31 0.00501 - 35 0.00752 - 37 0.00501 - 39 0.00752 - 40 0.0652 - 41 0.0376 - 42 0.01 - 45 0.00251 - 46 0.00501 - - 31 440 26 0 - 0 0.00227 - 2 0.0159 - 3 0.00455 - 4 0.132 - 7 0.398 - 8 0.0205 - 9 0.00682 - 12 0.00227 - 13 0.0341 - 14 0.0136 - 15 0.0227 - 17 0.00227 - 20 0.0318 - 21 0.0591 - 22 0.00682 - 26 0.0545 - 30 0.00227 - 31 0.00227 - 37 0.00227 - 39 0.00682 - 40 0.107 - 41 0.0477 - 42 0.00682 - 43 0.00227 - 45 0.00682 - 46 0.00909 - - 32 110 19 0 - 2 0.0273 - 3 0.0364 - 4 0.164 - 7 0.2 - 8 0.0818 - 9 0.00909 - 10 0.00909 - 13 0.0545 - 14 0.0545 - 15 0.0273 - 20 0.0364 - 21 0.0818 - 22 0.00909 - 26 0.00909 - 30 0.0364 - 38 0.00909 - 40 0.0636 - 41 0.0818 - 46 0.00909 - - 33 146 20 0 - 1 0.00685 - 2 0.00685 - 3 0.0137 - 4 0.199 - 7 0.24 - 8 0.0342 - 10 0.00685 - 13 0.0137 - 14 0.0205 - 15 0.00685 - 20 0.0479 - 21 0.0753 - 26 0.089 - 35 0.00685 - 37 0.00685 - 40 0.089 - 41 0.103 - 42 0.0205 - 45 0.00685 - 46 0.00685 - - 55 159 15 0 - 2 0.0566 - 4 0.0252 - 7 0.289 - 21 0.0503 - 22 0.00629 - 24 0.00629 - 26 0.0818 - 30 0.0126 - 37 0.0126 - 40 0.214 - 41 0.201 - 42 0.0189 - 43 0.00629 - 44 0.00629 - 46 0.0126 - - 62 13537 29 20 - 0 0.00731 - 2 0.0228 - 3 0.000443 - 4 0.0017 - 7 0.044 - 8 0.00185 - 12 0.00362 - 13 0.000517 - 14 0.000369 - 15 0.000813 - 19 0.000591 - 21 0.00451 - 22 0.000295 - 26 0.00399 - 29 0.00118 - 30 0.000886 - 31 0.000369 - 32 0.000739 - 33 0.00111 - 34 0.000369 - 37 0.00207 - 40 0.699 - 41 0.177 - 42 0.0179 - 43 0.000517 - 44 0.000739 - 45 0.000369 - 46 0.0031 - 47 0.00244 - - 0 792 16 0 - 0 0.00758 - 2 0.0177 - 4 0.00379 - 7 0.0366 - 8 0.00253 - 13 0.00126 - 19 0.00126 - 21 0.0114 - 26 0.0265 - 33 0.00253 - 37 0.00253 - 40 0.652 - 41 0.206 - 42 0.0215 - 46 0.00379 - 47 0.00379 - - 1 31 8 0 - 0 0.0645 - 2 0.0323 - 7 0.0645 - 12 0.0968 - 37 0.0323 - 40 0.419 - 41 0.258 - 42 0.0323 - - 12 37 3 0 - 40 0.784 - 41 0.189 - 46 0.027 - - 14 26 3 0 - 2 0.0769 - 40 0.885 - 46 0.0385 - - 28 1599 24 0 - 0 0.0075 - 2 0.0275 - 4 0.0025 - 7 0.0619 - 8 0.00375 - 12 0.00313 - 14 0.00125 - 15 0.00188 - 19 0.00125 - 21 0.00813 - 26 0.00375 - 29 0.00125 - 30 0.000625 - 31 0.000625 - 32 0.00125 - 33 0.0025 - 37 0.005 - 40 0.634 - 41 0.204 - 42 0.0219 - 43 0.00125 - 44 0.00125 - 46 0.00375 - 47 0.000625 - - 29 1679 23 0 - 0 0.00596 - 2 0.0381 - 3 0.00179 - 4 0.00357 - 7 0.0643 - 8 0.00596 - 12 0.00119 - 14 0.000596 - 15 0.00357 - 21 0.00357 - 22 0.00119 - 26 0.00238 - 29 0.00179 - 30 0.00179 - 31 0.000596 - 32 0.000596 - 37 0.00238 - 40 0.671 - 41 0.172 - 42 0.0125 - 44 0.000596 - 46 0.00238 - 47 0.00238 - - 30 1088 23 0 - 0 0.0165 - 2 0.0239 - 3 0.000919 - 4 0.00368 - 7 0.0469 - 8 0.000919 - 12 0.011 - 13 0.000919 - 14 0.000919 - 19 0.000919 - 21 0.00368 - 22 0.000919 - 26 0.00276 - 29 0.0046 - 30 0.000919 - 32 0.000919 - 33 0.00184 - 40 0.626 - 41 0.226 - 42 0.0184 - 45 0.00276 - 46 0.00368 - 47 0.000919 - - 31 2064 26 0 - 0 0.00678 - 2 0.0252 - 3 0.000484 - 4 0.000969 - 7 0.0766 - 8 0.000969 - 12 0.00436 - 14 0.000484 - 15 0.000484 - 19 0.000484 - 21 0.00775 - 22 0.000484 - 26 0.00388 - 29 0.00145 - 30 0.00242 - 31 0.000484 - 32 0.00194 - 33 0.00145 - 34 0.00194 - 37 0.00242 - 40 0.636 - 41 0.195 - 42 0.0233 - 43 0.00145 - 46 0.00145 - 47 0.00194 - - 32 768 19 0 - 0 0.0143 - 2 0.0273 - 4 0.0013 - 7 0.0352 - 12 0.00391 - 13 0.0026 - 19 0.0013 - 21 0.00781 - 26 0.00391 - 29 0.0026 - 30 0.0013 - 32 0.0013 - 34 0.0013 - 40 0.647 - 41 0.224 - 42 0.0156 - 44 0.0026 - 46 0.00391 - 47 0.0026 - - 33 1187 17 0 - 0 0.00758 - 2 0.027 - 7 0.0278 - 12 0.00421 - 13 0.000842 - 19 0.000842 - 21 0.00253 - 26 0.00505 - 30 0.000842 - 33 0.00168 - 37 0.00337 - 40 0.732 - 41 0.152 - 42 0.0236 - 44 0.00168 - 46 0.00337 - 47 0.00505 - - 41 1264 6 0 - 7 0.00158 - 40 0.902 - 41 0.087 - 42 0.00791 - 44 0.000791 - 46 0.000791 - - 42 63 5 0 - 7 0.0159 - 40 0.889 - 41 0.0635 - 42 0.0159 - 46 0.0159 - - 45 324 6 0 - 21 0.00309 - 40 0.873 - 41 0.0741 - 42 0.0216 - 46 0.0216 - 47 0.00617 - - 48 188 11 0 - 2 0.00532 - 4 0.00532 - 7 0.0851 - 21 0.00532 - 26 0.00532 - 31 0.00532 - 37 0.0106 - 40 0.574 - 41 0.293 - 42 0.00532 - 46 0.00532 - - 49 234 8 0 - 0 0.00427 - 2 0.0256 - 7 0.0342 - 12 0.00427 - 40 0.701 - 41 0.192 - 42 0.0342 - 46 0.00427 - - 55 1193 18 0 - 0 0.00922 - 2 0.0277 - 3 0.000838 - 4 0.000838 - 7 0.0285 - 8 0.00168 - 12 0.00503 - 26 0.000838 - 33 0.00168 - 37 0.000838 - 40 0.733 - 41 0.163 - 42 0.0142 - 43 0.00168 - 44 0.00168 - 45 0.000838 - 46 0.00168 - 47 0.00587 - - 57 699 16 0 - 0 0.00572 - 2 0.01 - 4 0.00143 - 7 0.0243 - 8 0.00286 - 12 0.00143 - 13 0.00286 - 15 0.00143 - 21 0.00286 - 29 0.00143 - 31 0.00143 - 32 0.00143 - 40 0.758 - 41 0.162 - 42 0.02 - 47 0.00286 - - 58 17 1 0 - 40 1 - - 59 102 11 0 - 0 0.0098 - 2 0.0196 - 7 0.049 - 12 0.0098 - 19 0.0098 - 26 0.0098 - 37 0.0098 - 40 0.667 - 41 0.196 - 42 0.0098 - 47 0.0098 - - 62 50 4 0 - 2 0.06 - 40 0.76 - 41 0.16 - 45 0.02 - - 64 13660 26 19 - 0 0.00234 - 2 0.0104 - 4 0.00022 - 5 7.32e-05 - 7 0.00425 - 8 0.000146 - 12 0.00102 - 13 0.000293 - 15 7.32e-05 - 19 0.000366 - 21 0.000659 - 26 0.00022 - 29 0.000293 - 30 0.000146 - 31 7.32e-05 - 32 0.000146 - 33 0.00022 - 34 0.000146 - 37 0.000366 - 40 0.842 - 41 0.117 - 42 0.0141 - 43 0.0011 - 44 0.000439 - 46 0.00132 - 47 0.00271 - - 0 384 11 0 - 2 0.0026 - 7 0.00781 - 12 0.0026 - 15 0.0026 - 21 0.0026 - 40 0.76 - 41 0.206 - 42 0.00781 - 43 0.0026 - 46 0.0026 - 47 0.0026 - - 21 14 3 0 - 7 0.0714 - 40 0.571 - 41 0.357 - - 28 886 15 0 - 0 0.00903 - 2 0.0158 - 5 0.00113 - 7 0.0147 - 8 0.00113 - 12 0.00226 - 21 0.00339 - 33 0.00113 - 37 0.00226 - 40 0.699 - 41 0.218 - 42 0.0237 - 43 0.00113 - 46 0.00451 - 47 0.00339 - - 29 4524 17 0 - 0 0.00133 - 2 0.0124 - 4 0.000221 - 7 0.00133 - 8 0.000221 - 13 0.000442 - 19 0.000442 - 21 0.000442 - 29 0.000663 - 30 0.000221 - 37 0.000663 - 40 0.914 - 41 0.0573 - 42 0.00685 - 43 0.000442 - 46 0.000663 - 47 0.00287 - - 30 513 12 0 - 0 0.0039 - 2 0.0117 - 7 0.00975 - 12 0.0039 - 21 0.00195 - 30 0.00195 - 32 0.00195 - 40 0.768 - 41 0.183 - 42 0.00585 - 44 0.0039 - 46 0.0039 - - 31 497 12 0 - 2 0.0121 - 7 0.00402 - 12 0.00201 - 26 0.00201 - 29 0.00201 - 40 0.779 - 41 0.171 - 42 0.0181 - 43 0.00201 - 44 0.00201 - 46 0.00201 - 47 0.00402 - - 32 1197 13 0 - 0 0.00251 - 2 0.0109 - 7 0.00334 - 12 0.00167 - 13 0.000835 - 19 0.000835 - 21 0.000835 - 32 0.000835 - 34 0.000835 - 40 0.785 - 41 0.17 - 42 0.0209 - 47 0.00167 - - 33 1314 12 0 - 0 0.00381 - 2 0.0122 - 7 0.00228 - 19 0.000761 - 31 0.000761 - 40 0.867 - 41 0.0883 - 42 0.0183 - 43 0.000761 - 44 0.000761 - 46 0.00152 - 47 0.00381 - - 41 1017 7 0 - 7 0.000983 - 21 0.000983 - 40 0.887 - 41 0.0895 - 42 0.0167 - 43 0.00295 - 47 0.00197 - - 42 45 4 0 - 40 0.844 - 41 0.0444 - 42 0.0889 - 47 0.0222 - - 44 3 2 0 - 40 0.333 - 43 0.667 - - 48 353 6 0 - 2 0.00567 - 7 0.0085 - 40 0.822 - 41 0.159 - 42 0.00283 - 47 0.00283 - - 49 245 9 0 - 0 0.00408 - 2 0.0163 - 7 0.00408 - 19 0.00408 - 26 0.00408 - 33 0.00408 - 40 0.784 - 41 0.167 - 42 0.0122 - - 55 1264 13 0 - 0 0.00158 - 2 0.00791 - 4 0.00158 - 7 0.00949 - 12 0.00316 - 13 0.000791 - 26 0.000791 - 40 0.803 - 41 0.147 - 42 0.019 - 44 0.000791 - 46 0.00237 - 47 0.00237 - - 57 868 12 0 - 0 0.00346 - 2 0.0104 - 7 0.00346 - 12 0.0023 - 33 0.00115 - 34 0.00115 - 40 0.829 - 41 0.121 - 42 0.0219 - 43 0.0023 - 46 0.0023 - 47 0.00115 - - 58 60 3 0 - 40 0.95 - 41 0.0333 - 47 0.0167 - - 59 89 5 0 - 0 0.0112 - 2 0.0225 - 40 0.73 - 41 0.191 - 42 0.0449 - - 62 197 7 0 - 7 0.00508 - 40 0.827 - 41 0.142 - 42 0.0102 - 43 0.00508 - 44 0.00508 - 47 0.00508 - - 64 36 4 0 - 40 0.778 - 41 0.139 - 42 0.0556 - 43 0.0278 - - 65 23 3 0 - 40 0.565 - 46 0.261 - 47 0.174 - - 66 5 2 0 - 40 0.6 - 46 0.4 - - 67 16 5 0 - 7 0.0625 - 40 0.375 - 42 0.0625 - 46 0.375 - 47 0.125 - - 68 161 12 4 - 0 0.0124 - 2 0.00621 - 4 0.00621 - 7 0.00621 - 13 0.0124 - 21 0.00621 - 26 0.00621 - 31 0.00621 - 40 0.671 - 41 0.217 - 42 0.0435 - 46 0.00621 - - 4 1 1 0 - 13 1 - - 29 4 3 0 - 7 0.25 - 26 0.25 - 40 0.5 - - 55 15 4 0 - 21 0.0667 - 40 0.733 - 41 0.0667 - 42 0.133 - - 57 1 1 0 - 31 1 - - 69 48590 32 19 - 0 0.00926 - 2 0.0818 - 3 8.23e-05 - 4 0.00134 - 5 6.17e-05 - 7 0.0134 - 8 0.000535 - 12 0.00323 - 13 0.000288 - 14 0.000391 - 15 0.000412 - 19 0.000535 - 20 0.000185 - 21 0.00241 - 22 0.000144 - 26 0.00161 - 28 0.000144 - 29 0.00158 - 30 0.000391 - 31 0.000206 - 32 0.00072 - 33 0.00113 - 34 0.000144 - 37 0.000782 - 40 0.656 - 41 0.198 - 42 0.02 - 43 0.00111 - 44 0.000741 - 45 0.000226 - 46 0.0022 - 47 0.00142 - - 0 14471 30 0 - 0 0.00947 - 2 0.0333 - 4 0.00104 - 5 6.91e-05 - 7 0.00442 - 8 6.91e-05 - 12 0.00228 - 13 0.000138 - 14 0.000346 - 15 0.000276 - 19 0.000691 - 20 6.91e-05 - 21 0.000829 - 22 6.91e-05 - 26 0.00076 - 28 0.000138 - 29 0.00131 - 30 0.000207 - 31 6.91e-05 - 32 0.00111 - 33 0.000967 - 37 0.000276 - 40 0.728 - 41 0.189 - 42 0.0207 - 43 0.00159 - 44 0.000622 - 45 6.91e-05 - 46 0.00111 - 47 0.00117 - - 1 372 15 0 - 0 0.0188 - 2 0.0457 - 7 0.00538 - 12 0.00538 - 15 0.00269 - 21 0.00538 - 26 0.00538 - 31 0.00269 - 32 0.00538 - 37 0.00269 - 40 0.645 - 41 0.228 - 42 0.0161 - 43 0.00538 - 46 0.00538 - - 2 3353 26 0 - 0 0.00328 - 2 0.00746 - 3 0.000298 - 4 0.00537 - 7 0.0197 - 8 0.00298 - 12 0.000895 - 13 0.00119 - 14 0.00209 - 15 0.000596 - 19 0.000298 - 20 0.00179 - 21 0.00358 - 26 0.00388 - 28 0.000895 - 29 0.000298 - 31 0.000298 - 32 0.000298 - 37 0.000298 - 40 0.775 - 41 0.15 - 42 0.0155 - 43 0.000895 - 45 0.000298 - 46 0.00239 - 47 0.000298 - - 4 29 3 0 - 2 0.172 - 40 0.759 - 41 0.069 - - 12 7932 26 0 - 0 0.00693 - 2 0.0241 - 4 0.000504 - 5 0.000126 - 7 0.00403 - 8 0.000504 - 12 0.00277 - 13 0.000126 - 14 0.000378 - 15 0.000252 - 19 0.000252 - 21 0.00063 - 26 0.000378 - 29 0.00126 - 30 0.000252 - 31 0.000126 - 32 0.000504 - 33 0.00151 - 37 0.000126 - 40 0.759 - 41 0.175 - 42 0.0173 - 43 0.00113 - 44 0.000756 - 46 0.000756 - 47 0.00151 - - 15 2 1 0 - 46 1 - - 21 2998 22 0 - 0 0.006 - 2 0.0317 - 4 0.000667 - 7 0.004 - 12 0.00167 - 14 0.000667 - 15 0.000334 - 19 0.001 - 21 0.000334 - 26 0.000334 - 28 0.000334 - 29 0.001 - 32 0.000334 - 33 0.000334 - 37 0.000334 - 40 0.662 - 41 0.255 - 42 0.027 - 43 0.000667 - 45 0.000334 - 46 0.00367 - 47 0.002 - - 26 12919 31 0 - 0 0.016 - 2 0.0296 - 3 0.000232 - 4 0.0017 - 5 7.74e-05 - 7 0.0358 - 8 0.000774 - 12 0.00658 - 13 0.000464 - 14 0.000155 - 15 0.000697 - 19 0.000774 - 21 0.00441 - 22 0.000464 - 26 0.00348 - 28 7.74e-05 - 29 0.00333 - 30 0.000774 - 31 0.000464 - 32 0.000774 - 33 0.00217 - 34 0.00031 - 37 0.00224 - 40 0.666 - 41 0.197 - 42 0.0184 - 43 0.000697 - 44 0.000851 - 45 0.000542 - 46 0.00279 - 47 0.00224 - - 28 80 8 0 - 0 0.0125 - 2 0.0375 - 7 0.0125 - 8 0.0125 - 40 0.712 - 41 0.188 - 42 0.0125 - 46 0.0125 - - 29 67 6 0 - 2 0.0597 - 7 0.0149 - 26 0.0149 - 40 0.597 - 41 0.254 - 42 0.0597 - - 41 356 8 0 - 2 0.419 - 26 0.00281 - 37 0.00281 - 40 0.242 - 41 0.312 - 42 0.0169 - 46 0.00281 - 47 0.00281 - - 42 25 4 0 - 2 0.04 - 40 0.36 - 41 0.12 - 42 0.48 - - 44 2 2 0 - 40 0.5 - 43 0.5 - - 45 144 6 0 - 2 0.0625 - 40 0.618 - 41 0.215 - 42 0.0139 - 46 0.0833 - 47 0.00694 - - 47 3672 10 0 - 2 0.69 - 4 0.000545 - 7 0.000817 - 21 0.00735 - 30 0.00109 - 34 0.000545 - 41 0.27 - 42 0.0248 - 44 0.00218 - 46 0.00245 - - 49 1916 19 0 - 0 0.00678 - 2 0.0339 - 7 0.00365 - 12 0.00365 - 13 0.000522 - 15 0.000522 - 20 0.000522 - 21 0.000522 - 26 0.000522 - 29 0.000522 - 34 0.000522 - 40 0.724 - 41 0.196 - 42 0.0209 - 43 0.00261 - 44 0.00104 - 45 0.000522 - 46 0.00157 - 47 0.00104 - - 50 47 7 0 - 2 0.0426 - 4 0.0426 - 7 0.0213 - 20 0.0213 - 40 0.574 - 41 0.277 - 42 0.0213 - - 57 48 3 0 - 2 0.0208 - 40 0.875 - 41 0.104 - - 58 21 3 0 - 32 0.0476 - 40 0.857 - 41 0.0952 - - 74 23 8 1 - 4 0.0435 - 7 0.13 - 8 0.0435 - 26 0.087 - 28 0.0435 - 40 0.261 - 41 0.0435 - 47 0.348 - - 29 5 4 0 - 4 0.2 - 8 0.2 - 26 0.2 - 40 0.4 - -70 183 17 7 - 0 0.0109 - 2 0.0109 - 4 0.164 - 6 0.00546 - 7 0.0109 - 8 0.317 - 9 0.0328 - 13 0.0874 - 14 0.109 - 15 0.0109 - 19 0.175 - 20 0.0109 - 21 0.0109 - 26 0.0109 - 41 0.0219 - 45 0.00546 - 46 0.00546 - - 8 58 11 0 - 2 0.0345 - 4 0.259 - 7 0.0345 - 8 0.0172 - 9 0.0517 - 13 0.121 - 14 0.172 - 15 0.0172 - 19 0.259 - 20 0.0172 - 41 0.0172 - - 21 2 2 0 - 0 0.5 - 8 0.5 - - 37 56 3 0 - 8 0.946 - 21 0.0357 - 45 0.0179 - - 45 1 1 0 - 6 1 - - 47 59 11 1 - 0 0.0169 - 4 0.254 - 8 0.0169 - 9 0.0508 - 13 0.136 - 14 0.169 - 15 0.0169 - 19 0.271 - 20 0.0169 - 26 0.0169 - 41 0.0339 - - 57 2 2 0 - 26 0.5 - 41 0.5 - - 48 1 1 0 - 46 1 - - 57 2 2 0 - 26 0.5 - 41 0.5 - -71 4205 34 8 - 0 0.0219 - 2 0.00166 - 3 0.00666 - 4 0.263 - 5 0.0109 - 7 0.00951 - 8 0.0533 - 9 0.00143 - 10 0.0019 - 12 0.0133 - 13 0.0604 - 14 0.0818 - 15 0.113 - 16 0.00143 - 17 0.0019 - 19 0.236 - 20 0.0276 - 21 0.0252 - 26 0.0285 - 28 0.000951 - 29 0.000951 - 30 0.0109 - 31 0.00856 - 32 0.000476 - 34 0.000476 - 35 0.000476 - 39 0.000476 - 40 0.00309 - 41 0.0109 - 43 0.000476 - 44 0.000476 - 45 0.00143 - 46 0.000238 - 47 0.000476 - - 7 30 7 0 - 4 0.3 - 8 0.0667 - 13 0.0333 - 14 0.0667 - 15 0.233 - 19 0.2 - 20 0.1 - - 8 23 7 0 - 4 0.217 - 8 0.087 - 13 0.348 - 14 0.13 - 15 0.13 - 19 0.0435 - 40 0.0435 - - 21 45 14 0 - 0 0.0667 - 2 0.0222 - 4 0.289 - 7 0.0222 - 8 0.0222 - 12 0.0222 - 13 0.0222 - 14 0.0444 - 15 0.133 - 19 0.222 - 20 0.0444 - 21 0.0222 - 28 0.0444 - 40 0.0222 - - 37 2029 31 3 - 0 0.0202 - 2 0.00148 - 3 0.0069 - 4 0.259 - 5 0.0113 - 7 0.00936 - 8 0.0591 - 9 0.00148 - 10 0.00197 - 12 0.0128 - 13 0.0586 - 14 0.0808 - 15 0.108 - 16 0.00148 - 17 0.00197 - 19 0.235 - 20 0.0261 - 21 0.036 - 26 0.0291 - 29 0.000986 - 30 0.0113 - 31 0.00887 - 32 0.000493 - 34 0.000493 - 35 0.000493 - 39 0.000493 - 40 0.00246 - 41 0.0113 - 43 0.000493 - 44 0.000493 - 45 0.00148 - - 2 6 2 0 - 4 0.833 - 26 0.167 - - 21 21 9 0 - 0 0.0476 - 4 0.19 - 8 0.19 - 13 0.0952 - 15 0.0476 - 19 0.238 - 20 0.0952 - 21 0.0476 - 31 0.0476 - - 49 6 3 0 - 4 0.167 - 5 0.333 - 19 0.5 - - 40 1 1 0 - 46 1 - - 46 1 1 0 - 47 1 - - 47 2063 33 5 - 0 0.0223 - 2 0.00145 - 3 0.00679 - 4 0.268 - 5 0.0111 - 7 0.00969 - 8 0.048 - 9 0.00145 - 10 0.00194 - 12 0.0136 - 13 0.0606 - 14 0.0834 - 15 0.115 - 16 0.00145 - 17 0.00194 - 19 0.241 - 20 0.0281 - 21 0.015 - 26 0.0291 - 28 0.000969 - 29 0.000969 - 30 0.0111 - 31 0.00873 - 32 0.000485 - 34 0.000485 - 35 0.000485 - 39 0.000485 - 40 0.00291 - 41 0.0111 - 43 0.000485 - 44 0.000485 - 45 0.00145 - 47 0.000485 - - 7 30 7 0 - 4 0.3 - 8 0.0667 - 13 0.0333 - 14 0.0667 - 15 0.233 - 19 0.2 - 20 0.1 - - 8 18 6 0 - 4 0.278 - 8 0.111 - 13 0.222 - 14 0.167 - 15 0.167 - 19 0.0556 - - 21 43 12 0 - 0 0.0698 - 4 0.302 - 7 0.0233 - 8 0.0233 - 12 0.0233 - 13 0.0233 - 14 0.0465 - 15 0.14 - 19 0.233 - 20 0.0465 - 28 0.0465 - 40 0.0233 - - 46 1 1 0 - 47 1 - - 55 4 3 0 - 0 0.5 - 4 0.25 - 12 0.25 - - 55 4 3 0 - 0 0.5 - 4 0.25 - 12 0.25 - -72 15188 37 29 - 0 0.257 - 2 0.000856 - 3 0.00356 - 4 0.0405 - 5 0.000922 - 7 0.0239 - 8 0.0117 - 9 0.000527 - 10 0.000856 - 12 0.0985 - 13 0.0189 - 14 0.0197 - 15 0.0309 - 16 0.000329 - 17 0.000132 - 18 0.000263 - 19 0.0643 - 20 0.00382 - 21 0.0426 - 22 0.000395 - 23 0.000132 - 26 0.00375 - 28 0.00224 - 29 0.155 - 30 0.000329 - 31 0.0023 - 32 0.0744 - 33 0.128 - 34 0.000263 - 39 0.000593 - 40 0.000658 - 41 0.00974 - 42 0.000263 - 43 0.000395 - 44 0.000461 - 45 0.000988 - 46 0.000132 - - 2 8 3 0 - 7 0.125 - 13 0.625 - 14 0.25 - - 3 9 3 0 - 7 0.778 - 8 0.111 - 14 0.111 - - 4 71 11 1 - 0 0.225 - 7 0.211 - 8 0.0282 - 12 0.0986 - 13 0.169 - 15 0.113 - 18 0.0141 - 21 0.0141 - 29 0.0141 - 32 0.0423 - 33 0.0704 - - 35 4 2 0 - 8 0.5 - 13 0.5 - - 7 358 24 0 - 0 0.00559 - 3 0.00279 - 4 0.154 - 7 0.014 - 8 0.0559 - 9 0.00279 - 10 0.00838 - 13 0.0223 - 14 0.0922 - 15 0.19 - 16 0.00279 - 19 0.237 - 20 0.0279 - 21 0.0447 - 22 0.00279 - 23 0.00279 - 28 0.00279 - 29 0.0279 - 30 0.00559 - 31 0.0251 - 32 0.00838 - 33 0.0168 - 41 0.0447 - 45 0.00279 - - 8 76 17 5 - 0 0.0263 - 4 0.0921 - 7 0.0789 - 8 0.0658 - 13 0.329 - 14 0.171 - 15 0.0395 - 17 0.0132 - 19 0.0658 - 20 0.0263 - 29 0.0132 - 31 0.0132 - 40 0.0132 - 41 0.0132 - 42 0.0132 - 45 0.0132 - 46 0.0132 - - 21 1 1 0 - 17 1 - - 23 2 1 0 - 7 1 - - 36 30 6 0 - 8 0.167 - 13 0.467 - 14 0.267 - 31 0.0333 - 41 0.0333 - 45 0.0333 - - 37 25 10 0 - 0 0.08 - 4 0.28 - 7 0.08 - 13 0.04 - 15 0.12 - 19 0.2 - 20 0.08 - 29 0.04 - 40 0.04 - 42 0.04 - - 47 2 1 0 - 7 1 - - 9 3 3 0 - 12 0.333 - 14 0.333 - 15 0.333 - - 10 6 2 0 - 7 0.833 - 13 0.167 - - 13 186 16 9 - 0 0.269 - 2 0.0108 - 4 0.0806 - 7 0.145 - 8 0.0108 - 12 0.0269 - 13 0.0645 - 14 0.0323 - 15 0.0323 - 19 0.0806 - 21 0.0215 - 26 0.0215 - 29 0.0753 - 33 0.086 - 41 0.0376 - 44 0.00538 - - 2 5 4 0 - 0 0.4 - 13 0.2 - 14 0.2 - 29 0.2 - - 4 5 3 0 - 0 0.2 - 7 0.6 - 19 0.2 - - 8 25 13 0 - 0 0.24 - 2 0.04 - 7 0.04 - 13 0.08 - 14 0.04 - 15 0.04 - 19 0.04 - 21 0.12 - 26 0.04 - 29 0.08 - 33 0.12 - 41 0.08 - 44 0.04 - - 13 13 8 0 - 0 0.231 - 7 0.231 - 8 0.0769 - 12 0.0769 - 19 0.154 - 21 0.0769 - 29 0.0769 - 33 0.0769 - - 34 39 13 0 - 0 0.103 - 2 0.0256 - 4 0.256 - 7 0.128 - 12 0.0256 - 13 0.0513 - 14 0.0256 - 15 0.0513 - 19 0.179 - 26 0.0256 - 29 0.0256 - 33 0.0256 - 41 0.0769 - - 35 14 8 0 - 0 0.286 - 4 0.0714 - 7 0.286 - 14 0.0714 - 19 0.0714 - 26 0.0714 - 29 0.0714 - 41 0.0714 - - 36 58 11 0 - 0 0.362 - 7 0.121 - 12 0.0172 - 13 0.121 - 14 0.0345 - 15 0.0172 - 19 0.0345 - 26 0.0172 - 29 0.103 - 33 0.155 - 41 0.0172 - - 70 7 4 0 - 0 0.286 - 4 0.286 - 8 0.143 - 15 0.286 - - 71 2 1 0 - 4 1 - - 14 114 16 6 - 0 0.307 - 2 0.0439 - 4 0.0263 - 7 0.0526 - 8 0.0175 - 12 0.0439 - 13 0.0175 - 15 0.00877 - 19 0.0965 - 21 0.0175 - 26 0.0351 - 29 0.105 - 32 0.202 - 34 0.00877 - 41 0.00877 - 45 0.00877 - - 8 15 8 0 - 0 0.2 - 12 0.0667 - 19 0.0667 - 21 0.0667 - 29 0.2 - 32 0.267 - 34 0.0667 - 45 0.0667 - - 15 2 2 0 - 4 0.5 - 29 0.5 - - 34 17 9 0 - 0 0.294 - 4 0.0588 - 7 0.176 - 12 0.0588 - 15 0.0588 - 19 0.0588 - 26 0.0588 - 29 0.0588 - 32 0.176 - - 35 5 4 0 - 0 0.2 - 4 0.2 - 12 0.2 - 26 0.4 - - 36 48 8 0 - 0 0.354 - 2 0.104 - 13 0.0417 - 19 0.0833 - 21 0.0208 - 29 0.0833 - 32 0.292 - 41 0.0208 - - 71 3 3 0 - 8 0.333 - 12 0.333 - 19 0.333 - - 15 18 6 0 - 7 0.0556 - 13 0.278 - 14 0.0556 - 15 0.5 - 16 0.0556 - 33 0.0556 - - 21 12 6 0 - 0 0.167 - 4 0.0833 - 7 0.333 - 8 0.0833 - 12 0.167 - 19 0.167 - - 31 2 2 0 - 13 0.5 - 14 0.5 - - 32 1 1 0 - 28 1 - - 34 4214 29 1 - 0 0.274 - 2 0.000475 - 3 0.00522 - 4 0.0282 - 5 0.00142 - 7 0.00878 - 8 0.00807 - 9 0.000475 - 10 0.000237 - 12 0.133 - 13 0.0157 - 14 0.0164 - 15 0.0216 - 16 0.000237 - 18 0.000237 - 19 0.0356 - 20 0.00119 - 21 0.046 - 26 0.000949 - 28 0.00119 - 29 0.159 - 31 0.000949 - 32 0.0729 - 33 0.161 - 39 0.000712 - 41 0.00617 - 42 0.000237 - 44 0.000237 - 45 0.000475 - - 21 2 1 0 - 13 1 - - 35 2343 27 2 - 0 0.268 - 3 0.00128 - 4 0.0448 - 7 0.0128 - 8 0.00512 - 9 0.000427 - 10 0.000854 - 12 0.0657 - 13 0.0111 - 14 0.00896 - 15 0.0188 - 19 0.0905 - 20 0.00512 - 21 0.0448 - 22 0.000854 - 26 0.0064 - 28 0.00427 - 29 0.193 - 31 0.000854 - 32 0.0952 - 33 0.111 - 34 0.000427 - 40 0.000854 - 41 0.00683 - 43 0.00128 - 44 0.000427 - 45 0.000854 - - 21 5 4 0 - 19 0.4 - 20 0.2 - 26 0.2 - 33 0.2 - - 49 1 1 0 - 28 1 - - 36 159 12 0 - 3 0.0126 - 8 0.201 - 9 0.00629 - 10 0.00629 - 13 0.371 - 14 0.302 - 15 0.0566 - 21 0.00629 - 30 0.00629 - 31 0.00629 - 39 0.0189 - 45 0.00629 - - 41 6 6 0 - 0 0.167 - 12 0.167 - 15 0.167 - 31 0.167 - 45 0.167 - 46 0.167 - - 45 2 1 0 - 8 1 - - 47 7352 36 19 - 0 0.266 - 2 0.000408 - 3 0.00354 - 4 0.0415 - 5 0.000952 - 7 0.0181 - 8 0.00871 - 9 0.000408 - 10 0.000816 - 12 0.102 - 13 0.00789 - 14 0.0139 - 15 0.0305 - 16 0.000272 - 17 0.000136 - 18 0.000272 - 19 0.0664 - 20 0.00394 - 21 0.0435 - 22 0.000408 - 23 0.000136 - 26 0.00367 - 28 0.00231 - 29 0.161 - 30 0.000272 - 31 0.00218 - 32 0.0768 - 33 0.132 - 34 0.000272 - 39 0.000408 - 40 0.00068 - 41 0.00952 - 42 0.000272 - 43 0.000408 - 44 0.000408 - 45 0.000816 - - 3 5 1 0 - 7 1 - - 4 61 10 0 - 0 0.262 - 7 0.148 - 12 0.115 - 13 0.164 - 15 0.131 - 18 0.0164 - 21 0.0164 - 29 0.0164 - 32 0.0492 - 33 0.082 - - 7 358 24 0 - 0 0.00559 - 3 0.00279 - 4 0.154 - 7 0.014 - 8 0.0559 - 9 0.00279 - 10 0.00838 - 13 0.0223 - 14 0.0922 - 15 0.19 - 16 0.00279 - 19 0.237 - 20 0.0279 - 21 0.0447 - 22 0.00279 - 23 0.00279 - 28 0.00279 - 29 0.0279 - 30 0.00559 - 31 0.0251 - 32 0.00838 - 33 0.0168 - 41 0.0447 - 45 0.00279 - - 8 31 12 0 - 0 0.0645 - 4 0.226 - 7 0.194 - 13 0.0323 - 15 0.0968 - 17 0.0323 - 19 0.161 - 20 0.0645 - 29 0.0323 - 40 0.0323 - 41 0.0323 - 42 0.0323 - - 9 2 2 0 - 12 0.5 - 15 0.5 - - 10 4 1 0 - 7 1 - - 13 163 13 0 - 0 0.307 - 4 0.092 - 7 0.147 - 8 0.0123 - 12 0.0307 - 15 0.0368 - 19 0.092 - 21 0.0245 - 26 0.0245 - 29 0.0859 - 33 0.0982 - 41 0.0429 - 44 0.00613 - - 14 107 14 0 - 0 0.327 - 4 0.028 - 7 0.0561 - 8 0.0187 - 12 0.0467 - 15 0.00935 - 19 0.103 - 21 0.0187 - 26 0.0374 - 29 0.112 - 32 0.215 - 34 0.00935 - 41 0.00935 - 45 0.00935 - - 15 2 2 0 - 7 0.5 - 33 0.5 - - 21 11 5 0 - 0 0.182 - 4 0.0909 - 7 0.364 - 12 0.182 - 19 0.182 - - 32 1 1 0 - 28 1 - - 34 4153 29 0 - 0 0.278 - 2 0.000482 - 3 0.0053 - 4 0.0287 - 5 0.00144 - 7 0.00891 - 8 0.00722 - 9 0.000482 - 10 0.000241 - 12 0.135 - 13 0.0065 - 14 0.0125 - 15 0.0219 - 16 0.000241 - 18 0.000241 - 19 0.0361 - 20 0.0012 - 21 0.0467 - 26 0.000963 - 28 0.0012 - 29 0.161 - 31 0.000963 - 32 0.0739 - 33 0.164 - 39 0.000722 - 41 0.00602 - 42 0.000241 - 44 0.000241 - 45 0.000482 - - 35 2312 26 0 - 0 0.271 - 3 0.0013 - 4 0.0433 - 7 0.013 - 8 0.00433 - 10 0.000865 - 12 0.0666 - 13 0.00519 - 14 0.00692 - 15 0.019 - 19 0.0917 - 20 0.00519 - 21 0.0437 - 22 0.000865 - 26 0.00649 - 28 0.00433 - 29 0.196 - 31 0.000865 - 32 0.0965 - 33 0.112 - 34 0.000433 - 40 0.000865 - 41 0.00692 - 43 0.0013 - 44 0.000433 - 45 0.000865 - - 49 2 2 0 - 15 0.5 - 19 0.5 - - 55 7 5 0 - 0 0.143 - 21 0.143 - 29 0.143 - 32 0.286 - 41 0.286 - - 57 59 14 0 - 0 0.407 - 4 0.0678 - 5 0.0169 - 12 0.0847 - 14 0.0169 - 15 0.0169 - 19 0.0508 - 21 0.0169 - 29 0.186 - 31 0.0169 - 32 0.0169 - 33 0.0508 - 40 0.0169 - 41 0.0339 - - 60 2 1 0 - 7 1 - - 62 1 1 0 - 40 1 - - 73 62 7 0 - 0 0.581 - 2 0.0161 - 12 0.129 - 19 0.0323 - 29 0.161 - 32 0.0484 - 33 0.0323 - - 48 4 2 0 - 13 0.75 - 19 0.25 - - 49 2 2 0 - 15 0.5 - 19 0.5 - - 55 28 8 4 - 0 0.0357 - 7 0.607 - 13 0.0357 - 21 0.0357 - 26 0.0357 - 29 0.0357 - 32 0.0714 - 41 0.143 - - 36 4 3 0 - 13 0.25 - 21 0.25 - 32 0.5 - - 41 3 1 0 - 41 1 - - 47 18 2 0 - 7 0.944 - 26 0.0556 - - 72 2 2 0 - 0 0.5 - 29 0.5 - - 57 60 15 1 - 0 0.4 - 4 0.0667 - 5 0.0167 - 7 0.0167 - 12 0.0833 - 14 0.0167 - 15 0.0167 - 19 0.05 - 21 0.0167 - 29 0.183 - 31 0.0167 - 32 0.0167 - 33 0.05 - 40 0.0167 - 41 0.0333 - - 55 18 6 0 - 0 0.444 - 4 0.0556 - 5 0.0556 - 12 0.111 - 21 0.0556 - 29 0.278 - - 58 4 4 0 - 0 0.25 - 4 0.25 - 13 0.25 - 19 0.25 - - 60 2 1 0 - 7 1 - - 62 1 1 0 - 40 1 - - 69 1 1 0 - 41 1 - - 72 78 8 0 - 7 0.846 - 8 0.0128 - 15 0.0128 - 19 0.0128 - 21 0.0256 - 26 0.0256 - 41 0.0513 - 44 0.0128 - - 73 62 7 0 - 0 0.581 - 2 0.0161 - 12 0.129 - 19 0.0323 - 29 0.161 - 32 0.0484 - 33 0.0323 - -73 1173 26 5 - 0 0.0682 - 2 0.00171 - 3 0.0358 - 4 0.137 - 5 0.0102 - 8 0.0171 - 12 0.0153 - 13 0.0341 - 14 0.0614 - 15 0.087 - 16 0.00171 - 19 0.14 - 20 0.00682 - 21 0.00171 - 26 0.00853 - 29 0.0171 - 32 0.00682 - 33 0.00341 - 34 0.299 - 35 0.0315 - 36 0.000853 - 37 0.000853 - 39 0.00512 - 40 0.00341 - 41 0.00341 - 43 0.00171 - - 7 373 5 0 - 4 0.00268 - 34 0.903 - 35 0.0885 - 36 0.00268 - 37 0.00268 - - 26 18 2 0 - 34 0.778 - 35 0.222 - - 47 391 22 1 - 0 0.102 - 2 0.00256 - 3 0.0537 - 4 0.205 - 5 0.0153 - 8 0.0256 - 12 0.023 - 13 0.0512 - 14 0.0921 - 15 0.13 - 16 0.00256 - 19 0.21 - 20 0.0102 - 21 0.00256 - 26 0.0128 - 29 0.0256 - 32 0.0102 - 33 0.00512 - 39 0.00767 - 40 0.00512 - 41 0.00512 - 43 0.00256 - - 64 1 1 0 - 41 1 - - 64 1 1 0 - 41 1 - - 72 389 22 1 - 0 0.1 - 2 0.00257 - 3 0.054 - 4 0.206 - 5 0.0154 - 8 0.0257 - 12 0.0231 - 13 0.0514 - 14 0.0925 - 15 0.131 - 16 0.00257 - 19 0.211 - 20 0.0103 - 21 0.00257 - 26 0.0129 - 29 0.0257 - 32 0.0103 - 33 0.00514 - 39 0.00771 - 40 0.00514 - 41 0.00257 - 43 0.00257 - - 26 18 8 0 - 4 0.389 - 13 0.0556 - 14 0.0556 - 15 0.0556 - 19 0.278 - 21 0.0556 - 40 0.0556 - 43 0.0556 - -74 426 24 23 - 0 0.00939 - 4 0.0986 - 7 0.0657 - 8 0.0188 - 10 0.00469 - 13 0.0329 - 14 0.0164 - 15 0.00939 - 19 0.0775 - 20 0.0164 - 21 0.0164 - 22 0.00939 - 26 0.0164 - 28 0.00469 - 31 0.00939 - 33 0.0141 - 34 0.00235 - 35 0.00469 - 40 0.124 - 41 0.0516 - 42 0.12 - 43 0.00469 - 46 0.00939 - 47 0.263 - - 2 4 4 0 - 7 0.25 - 14 0.25 - 19 0.25 - 26 0.25 - - 4 8 4 0 - 7 0.125 - 10 0.125 - 22 0.5 - 47 0.25 - - 6 2 2 0 - 8 0.5 - 40 0.5 - - 7 9 5 0 - 4 0.111 - 7 0.222 - 8 0.111 - 35 0.111 - 47 0.444 - - 9 23 6 0 - 4 0.348 - 7 0.0435 - 13 0.13 - 14 0.13 - 19 0.261 - 20 0.087 - - 12 1 1 0 - 28 1 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 7 0.25 - 41 0.25 - - 14 2 2 0 - 8 0.5 - 40 0.5 - - 15 4 3 0 - 26 0.25 - 40 0.5 - 43 0.25 - - 21 3 3 0 - 20 0.333 - 40 0.333 - 41 0.333 - - 22 10 2 0 - 4 0.3 - 19 0.7 - - 25 39 9 0 - 7 0.0513 - 8 0.0256 - 13 0.0769 - 15 0.0256 - 21 0.0513 - 31 0.0256 - 33 0.0769 - 42 0.538 - 47 0.128 - - 26 5 2 0 - 26 0.4 - 47 0.6 - - 35 2 1 0 - 7 1 - - 40 23 2 0 - 46 0.087 - 47 0.913 - - 41 4 2 0 - 4 0.75 - 7 0.25 - - 42 9 5 0 - 7 0.444 - 13 0.111 - 21 0.111 - 31 0.111 - 47 0.222 - - 47 174 22 17 - 0 0.0115 - 4 0.092 - 7 0.0517 - 8 0.0172 - 10 0.00575 - 13 0.0345 - 14 0.0172 - 15 0.00575 - 19 0.092 - 20 0.0172 - 21 0.0115 - 26 0.0172 - 28 0.00575 - 31 0.00575 - 33 0.0172 - 35 0.00575 - 40 0.0862 - 41 0.0517 - 42 0.121 - 43 0.00575 - 46 0.00575 - 47 0.322 - - 4 4 3 0 - 7 0.25 - 10 0.25 - 47 0.5 - - 7 8 4 0 - 7 0.25 - 8 0.125 - 35 0.125 - 47 0.5 - - 9 22 5 0 - 4 0.364 - 13 0.136 - 14 0.136 - 19 0.273 - 20 0.0909 - - 12 1 1 0 - 28 1 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 7 0.25 - 41 0.25 - - 14 2 2 0 - 8 0.5 - 40 0.5 - - 15 3 3 0 - 26 0.333 - 40 0.333 - 43 0.333 - - 21 3 3 0 - 20 0.333 - 40 0.333 - 41 0.333 - - 22 10 2 0 - 4 0.3 - 19 0.7 - - 25 39 9 0 - 7 0.0513 - 8 0.0256 - 13 0.0769 - 15 0.0256 - 21 0.0513 - 31 0.0256 - 33 0.0769 - 42 0.538 - 47 0.128 - - 26 5 2 0 - 26 0.4 - 47 0.6 - - 35 2 1 0 - 7 1 - - 40 21 1 0 - 47 1 - - 48 5 3 0 - 4 0.4 - 19 0.4 - 47 0.2 - - 55 19 5 0 - 4 0.0526 - 7 0.0526 - 40 0.368 - 41 0.316 - 47 0.211 - - 57 10 3 0 - 40 0.2 - 46 0.1 - 47 0.7 - - 69 1 1 0 - 0 1 - - 48 6 4 0 - 4 0.333 - 19 0.333 - 40 0.167 - 47 0.167 - - 55 33 8 0 - 4 0.0303 - 7 0.0606 - 15 0.0303 - 34 0.0303 - 40 0.485 - 41 0.212 - 42 0.0303 - 47 0.121 - - 57 15 4 0 - 40 0.333 - 42 0.133 - 46 0.0667 - 47 0.467 - - 69 4 2 0 - 0 0.25 - 40 0.75 - - 74 26 11 1 - 4 0.231 - 7 0.0769 - 8 0.0385 - 13 0.0385 - 15 0.0385 - 20 0.0385 - 21 0.0769 - 31 0.0385 - 40 0.0769 - 41 0.115 - 42 0.231 - - 41 6 4 0 - 4 0.333 - 13 0.167 - 20 0.167 - 40 0.333 - diff --git a/samples/GAP/bugfix.tst b/samples/GAP/bugfix.tst new file mode 100644 index 00000000..be4bd975 --- /dev/null +++ b/samples/GAP/bugfix.tst @@ -0,0 +1,161 @@ +gap> START_TEST("Test for various former bugs"); + + +gap> # The following used to trigger an error starting with: +gap> # "SolutionMat: matrix and vector incompatible called from" +gap> K:=AbelianPcpGroup([3,3,3]);; +gap> A:=Subgroup(K,[K.1]);; +gap> cr:=CRRecordBySubgroup(K,A);; +gap> ExtensionsCR(cr);; + + +# Comparing homomorphisms used to be broken +gap> K:=AbelianPcpGroup(1,[3]);; +gap> hom1:=GroupHomomorphismByImages(K,K,[K.1],[K.1]);; +gap> hom2:=GroupHomomorphismByImages(K,K,[K.1^2],[K.1^2]);; +gap> hom1=hom2; +true +gap> hom1=IdentityMapping(K); +true +gap> hom2=IdentityMapping(K); +true + + +gap> # The following incorrectly triggered an error at some point +gap> IsTorsionFree(ExamplesOfSomePcpGroups(5)); +true + + +gap> # Verify IsGeneratorsOfMagmaWithInverses warnings are silenced +gap> IsGeneratorsOfMagmaWithInverses(GeneratorsOfGroup(ExamplesOfSomePcpGroups(5))); +true + + +gap> # Check for a bug reported 2012-01-19 by Robert Morse +gap> g := PcGroupToPcpGroup(SmallGroup(48,1)); +Pcp-group with orders [ 2, 2, 2, 2, 3 ] +gap> # The next two commands used to trigger errors +gap> NonAbelianTensorSquare(Centre(g)); +Pcp-group with orders [ 8 ] +gap> NonAbelianExteriorSquare(Centre(g)); +Pcp-group with orders [ ] + + +gap> # Check for a bug reported 2012-01-19 by Robert Morse +gap> F := FreeGroup("x","y"); + +gap> x := F.1;; y := F.2;; +gap> G := F/[x^2/y^24, y^24, y^x/y^23]; + +gap> iso := IsomorphismPcGroup(G); +[ x, y ] -> [ f1, f2*f5 ] +gap> iso1 := IsomorphismPcpGroup(Image(iso)); +[ f1, f2, f3, f4, f5 ] -> [ g1, g2, g3, g4, g5 ] +gap> G := Image(iso*iso1); +Pcp-group with orders [ 2, 2, 2, 2, 3 ] +gap> # The next command used to trigger an error +gap> NonAbelianTensorSquare(Image(iso*iso1)); +Pcp-group with orders [ 2, 2, 3, 2, 2, 2, 2 ] + + +gap> # The problem with the previous example is/was that Igs(G) +gap> # is set to a non-standard value: +gap> Igs(G); +[ g1, g2*g5, g3*g4*g5^2, g4*g5, g5 ] +gap> # Unfortunately, it seems that a lot of code that +gap> # really should be using Ngs or Cgs is using Igs incorrectly. +gap> # For example, direct products could return *invalid* embeddings: +gap> D := DirectProduct(G, G); +Pcp-group with orders [ 2, 2, 2, 2, 3, 2, 2, 2, 2, 3 ] +gap> hom:=Embedding(D,1);; +gap> mapi:=MappingGeneratorsImages(hom);; +gap> GroupHomomorphismByImages(Source(hom),Range(hom),mapi[1],mapi[2]) <> fail; +true +gap> hom:=Projection(D,1);; +gap> mapi:=MappingGeneratorsImages(hom);; +gap> GroupHomomorphismByImages(Source(hom),Range(hom),mapi[1],mapi[2]) <> fail; +true + + +gap> # Check for bug computing Schur extension of infinite cyclic groups, +gap> # found by Max Horn 2012-05-25 +gap> G:=AbelianPcpGroup(1,[0]); +Pcp-group with orders [ 0 ] +gap> # The next command used to trigger an error +gap> SchurExtension(G); +Pcp-group with orders [ 0 ] + + +gap> # Check for bug computing Schur extensions of subgroups, found by MH 2012-05-25. +gap> G:=HeisenbergPcpGroup(2); +Pcp-group with orders [ 0, 0, 0, 0, 0 ] +gap> H:=Subgroup(G,[G.2^3*G.3^2, G.1^9]); +Pcp-group with orders [ 0, 0, 0 ] +gap> # The next command used to trigger an error +gap> SchurExtension(H); +Pcp-group with orders [ 0, 0, 0, 0, 0, 0 ] + + +gap> # Check for bug computing Schur extensions of subgroups, found by MH 2012-05-25. +gap> G:=HeisenbergPcpGroup(2); +Pcp-group with orders [ 0, 0, 0, 0, 0 ] +gap> H:=Subgroup(G,[G.1, G.2]); +Pcp-group with orders [ 0, 0 ] +gap> # The next command used to trigger an error +gap> SchurExtension(H); +Pcp-group with orders [ 0, 0, 0 ] + + +gap> # Check for bug computing normalizer of two subgroups, found by MH 2012-05-30. +gap> # The problem was caused by incorrect resp. overly restrictive use of Parent(). +gap> G:=HeisenbergPcpGroup(2); +Pcp-group with orders [ 0, 0, 0, 0, 0 ] +gap> A:=Subgroup(Subgroup(G,[G.2,G.3,G.4,G.5]), [G.3]); +Pcp-group with orders [ 0 ] +gap> B:=Subgroup(Subgroup(G,[G.1,G.4,G.5]), [G.4]); +Pcp-group with orders [ 0 ] +gap> Normalizer(A,B); +Pcp-group with orders [ 0 ] +gap> # The following used to trigger the error "arguments must have a common parent group" +gap> Normalizer(B,A); +Pcp-group with orders [ 0 ] + + +gap> # In polycyclic 2.9 and 2.10, the code for 2-cohomology computations was broken. +gap> G := UnitriangularPcpGroup(3,0); +Pcp-group with orders [ 0, 0, 0 ] +gap> mats := G!.mats; +[ [ [ 1, 1, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ], + [ [ 1, 0, 0 ], [ 0, 1, 1 ], [ 0, 0, 1 ] ], + [ [ 1, 0, 1 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] ] +gap> C := CRRecordByMats(G,mats);; +gap> cc := TwoCohomologyCR(C);; +gap> cc.factor.rels; +[ 2, 0, 0 ] +gap> c := cc.factor.prei[2]; +[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 1 ] +gap> cc.gcb; +[ [ 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], + [ 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0 ], + [ 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1 ], + [ -1, 0, 1, 1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], + [ 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1 ] ] +gap> cc.gcc; +[ [ 1, 0, 0, 0, 0, -2, -1, 0, 1, 1, -1, -1, 0, 0, 0, 0, 0, 0 ], + [ 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0 ], + [ 0, 0, 1, 0, 0, -2, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0 ], + [ 0, 0, 0, 1, 0, 0, -1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], + [ 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0 ], + [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 1 ], + [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1 ] ] + + +gap> # LowerCentralSeriesOfGroup for non-nilpotent pcp-groups used to trigger +gap> # an infinite recursion +gap> G := PcGroupToPcpGroup(SmallGroup(6,1)); +Pcp-group with orders [ 2, 3 ] +gap> LowerCentralSeriesOfGroup(G); +[ Pcp-group with orders [ 2, 3 ], Pcp-group with orders [ 3 ] ] + + +gap> STOP_TEST( "bugfix.tst", 10000000); diff --git a/samples/GAP/factor.tst b/samples/GAP/factor.tst new file mode 100644 index 00000000..115fe921 --- /dev/null +++ b/samples/GAP/factor.tst @@ -0,0 +1,21 @@ +gap> START_TEST("Test of factor groups and natural homomorphisms"); + +gap> G:=HeisenbergPcpGroup(2); +Pcp-group with orders [ 0, 0, 0, 0, 0 ] + +gap> H:=Subgroup(G,[G.2,G.3,G.4,G.5]); +gap> K:=G/H; +gap> NaturalHomomorphism(K); + +gap> A:=Subgroup(H, [G.3]); +Pcp-group with orders [ 0 ] +gap> B:=Subgroup(Subgroup(G,[G.1,G.4,G.5]), [G.4]); +Pcp-group with orders [ 0 ] +gap> Normalizer(A,B); +Pcp-group with orders [ 0 ] +gap> # The following used to trigger the error "arguments must have a common parent group" +gap> Normalizer(B,A); +Pcp-group with orders [ 0 ] + + +gap> STOP_TEST( "factor.tst", 10000000); diff --git a/samples/GAS/hello.ms b/samples/GAS/hello.ms new file mode 100644 index 00000000..b063c296 --- /dev/null +++ b/samples/GAS/hello.ms @@ -0,0 +1,91 @@ +# output(): Hello, world.\n +# mach(): all + +# Emit hello world while switching back and forth between arm/thumb. +# ??? Unfinished + + .macro invalid +# This is "undefined" but it's not properly decoded yet. + .word 0x07ffffff +# This is stc which isn't recognized yet. + stc 0,cr0,[r0] + .endm + + .global _start +_start: +# Run some simple insns to confirm the engine is at least working. + nop + +# Skip over output text. + + bl skip_output + +hello_text: + .asciz "Hello, world.\n" + + .p2align 2 +skip_output: + +# Prime loop. + + mov r4, r14 + +output_next: + +# Switch arm->thumb to output next chacter. +# At this point r4 must point to the next character to output. + + adr r0, into_thumb + 1 + bx r0 + +into_thumb: + .thumb + +# Output a character. + + mov r0,#3 @ writec angel call + mov r1,r4 + swi 0xab @ ??? Confirm number. + +# Switch thumb->arm. + + adr r5, back_to_arm + bx r5 + + .p2align 2 +back_to_arm: + .arm + +# Load next character, see if done. + + add r4,r4,#1 + sub r3,r3,r3 + ldrb r5,[r4,r3] + teq r5,#0 + beq done + +# Output a character (in arm mode). + + mov r0,#3 + mov r1,r4 + swi #0x123456 + +# Load next character, see if done. + + add r4,r4,#1 + sub r3,r3,r3 + ldrb r5,[r4,r3] + teq r5,#0 + bne output_next + +done: + mov r0,#0x18 + ldr r1,exit_code + swi #0x123456 + +# If that fails, try to die with an invalid insn. + + invalid + +exit_code: + .word 0x20026 diff --git a/samples/Go/api.pb.go b/samples/Go/api.pb.go new file mode 100644 index 00000000..a4fe4921 --- /dev/null +++ b/samples/Go/api.pb.go @@ -0,0 +1,1157 @@ +// Code generated by protoc-gen-gogo. +// source: api.proto +// DO NOT EDIT! + +/* + Package proto is a generated protocol buffer package. + + It is generated from these files: + api.proto + config.proto + data.proto + errors.proto + gossip.proto + heartbeat.proto + internal.proto + + It has these top-level messages: + ClientCmdID + RequestHeader + ResponseHeader + ContainsRequest + ContainsResponse + GetRequest + GetResponse + PutRequest + PutResponse + ConditionalPutRequest + ConditionalPutResponse + IncrementRequest + IncrementResponse + DeleteRequest + DeleteResponse + DeleteRangeRequest + DeleteRangeResponse + ScanRequest + ScanResponse + EndTransactionRequest + EndTransactionResponse + ReapQueueRequest + ReapQueueResponse + EnqueueUpdateRequest + EnqueueUpdateResponse + EnqueueMessageRequest + EnqueueMessageResponse + RequestUnion + ResponseUnion + BatchRequest + BatchResponse + AdminSplitRequest + AdminSplitResponse + AdminMergeRequest + AdminMergeResponse +*/ +package proto + +import proto1 "github.com/gogo/protobuf/proto" +import math "math" + +// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto1.Marshal +var _ = math.Inf + +// ClientCmdID provides a unique ID for client commands. Clients which +// provide ClientCmdID gain operation idempotence. In other words, +// clients can submit the same command multiple times and always +// receive the same response. This is common on retries over flaky +// networks. However, the system imposes a limit on how long +// idempotence is provided. Retries over an hour old are not +// guaranteed idempotence and may be executed more than once with +// potentially different results. +// +// ClientCmdID contains the client's timestamp and a client-generated +// random number. The client Timestamp is specified in unix +// nanoseconds and is used for some uniqueness but also to provide a +// rough ordering of requests, useful for data locality on the +// server. The Random is specified for additional uniqueness. +// NOTE: An accurate time signal IS NOT required for correctness. +type ClientCmdID struct { + // Nanoseconds since Unix epoch. + WallTime int64 `protobuf:"varint,1,opt,name=wall_time" json:"wall_time"` + Random int64 `protobuf:"varint,2,opt,name=random" json:"random"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ClientCmdID) Reset() { *m = ClientCmdID{} } +func (m *ClientCmdID) String() string { return proto1.CompactTextString(m) } +func (*ClientCmdID) ProtoMessage() {} + +func (m *ClientCmdID) GetWallTime() int64 { + if m != nil { + return m.WallTime + } + return 0 +} + +func (m *ClientCmdID) GetRandom() int64 { + if m != nil { + return m.Random + } + return 0 +} + +// RequestHeader is supplied with every storage node request. +type RequestHeader struct { + // Timestamp specifies time at which read or writes should be + // performed. If the timestamp is set to zero value, its value + // is initialized to the wall time of the receiving node. + Timestamp Timestamp `protobuf:"bytes,1,opt,name=timestamp" json:"timestamp"` + // CmdID is optionally specified for request idempotence + // (i.e. replay protection). + CmdID ClientCmdID `protobuf:"bytes,2,opt,name=cmd_id" json:"cmd_id"` + // The key for request. If the request operates on a range, this + // represents the starting key for the range. + Key Key `protobuf:"bytes,3,opt,name=key,customtype=Key" json:"key"` + // End key is empty if request spans only a single key. + EndKey Key `protobuf:"bytes,4,opt,name=end_key,customtype=Key" json:"end_key"` + // User is the originating user. Used to lookup priority when + // scheduling queued operations at target node. + User string `protobuf:"bytes,5,opt,name=user" json:"user"` + // Replica specifies the destination for the request. This is a specific + // instance of the available replicas belonging to RangeID. + Replica Replica `protobuf:"bytes,6,opt,name=replica" json:"replica"` + // RaftID specifies the ID of the Raft consensus group which the key + // range belongs to. This is used by the receiving node to route the + // request to the correct range. + RaftID int64 `protobuf:"varint,7,opt,name=raft_id" json:"raft_id"` + // UserPriority specifies priority multiple for non-transactional + // commands. This value should be a positive integer [1, 2^31-1). + // It's properly viewed as a multiple for how likely this + // transaction will be to prevail if a write conflict occurs. + // Commands with UserPriority=100 will be 100x less likely to be + // aborted as conflicting transactions or non-transactional commands + // with UserPriority=1. This value is ignored if Txn is + // specified. If neither this value nor Txn is specified, the value + // defaults to 1. + UserPriority *int32 `protobuf:"varint,8,opt,name=user_priority,def=1" json:"user_priority,omitempty"` + // Txn is set non-nil if a transaction is underway. To start a txn, + // the first request should set this field to non-nil with name and + // isolation level set as desired. The response will contain the + // fully-initialized transaction with txn ID, priority, initial + // timestamp, and maximum timestamp. + Txn *Transaction `protobuf:"bytes,9,opt,name=txn" json:"txn,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *RequestHeader) Reset() { *m = RequestHeader{} } +func (m *RequestHeader) String() string { return proto1.CompactTextString(m) } +func (*RequestHeader) ProtoMessage() {} + +const Default_RequestHeader_UserPriority int32 = 1 + +func (m *RequestHeader) GetTimestamp() Timestamp { + if m != nil { + return m.Timestamp + } + return Timestamp{} +} + +func (m *RequestHeader) GetCmdID() ClientCmdID { + if m != nil { + return m.CmdID + } + return ClientCmdID{} +} + +func (m *RequestHeader) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +func (m *RequestHeader) GetReplica() Replica { + if m != nil { + return m.Replica + } + return Replica{} +} + +func (m *RequestHeader) GetRaftID() int64 { + if m != nil { + return m.RaftID + } + return 0 +} + +func (m *RequestHeader) GetUserPriority() int32 { + if m != nil && m.UserPriority != nil { + return *m.UserPriority + } + return Default_RequestHeader_UserPriority +} + +func (m *RequestHeader) GetTxn() *Transaction { + if m != nil { + return m.Txn + } + return nil +} + +// ResponseHeader is returned with every storage node response. +type ResponseHeader struct { + // Error is non-nil if an error occurred. + Error *Error `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + // Timestamp specifies time at which read or write actually was + // performed. In the case of both reads and writes, if the timestamp + // supplied to the request was 0, the wall time of the node + // servicing the request will be set here. Additionally, in the case + // of writes, this value may be increased from the timestamp passed + // with the RequestHeader if the key being written was either read + // or written more recently. + Timestamp Timestamp `protobuf:"bytes,2,opt,name=timestamp" json:"timestamp"` + // Transaction is non-nil if the request specified a non-nil + // transaction. The transaction timestamp and/or priority may have + // been updated, depending on the outcome of the request. + Txn *Transaction `protobuf:"bytes,3,opt,name=txn" json:"txn,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } +func (m *ResponseHeader) String() string { return proto1.CompactTextString(m) } +func (*ResponseHeader) ProtoMessage() {} + +func (m *ResponseHeader) GetError() *Error { + if m != nil { + return m.Error + } + return nil +} + +func (m *ResponseHeader) GetTimestamp() Timestamp { + if m != nil { + return m.Timestamp + } + return Timestamp{} +} + +func (m *ResponseHeader) GetTxn() *Transaction { + if m != nil { + return m.Txn + } + return nil +} + +// A ContainsRequest is arguments to the Contains() method. +type ContainsRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ContainsRequest) Reset() { *m = ContainsRequest{} } +func (m *ContainsRequest) String() string { return proto1.CompactTextString(m) } +func (*ContainsRequest) ProtoMessage() {} + +// A ContainsResponse is the return value of the Contains() method. +type ContainsResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Exists bool `protobuf:"varint,2,opt,name=exists" json:"exists"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ContainsResponse) Reset() { *m = ContainsResponse{} } +func (m *ContainsResponse) String() string { return proto1.CompactTextString(m) } +func (*ContainsResponse) ProtoMessage() {} + +func (m *ContainsResponse) GetExists() bool { + if m != nil { + return m.Exists + } + return false +} + +// A GetRequest is arguments to the Get() method. +type GetRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GetRequest) Reset() { *m = GetRequest{} } +func (m *GetRequest) String() string { return proto1.CompactTextString(m) } +func (*GetRequest) ProtoMessage() {} + +// A GetResponse is the return value from the Get() method. +// If the key doesn't exist, returns nil for Value.Bytes. +type GetResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Value *Value `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GetResponse) Reset() { *m = GetResponse{} } +func (m *GetResponse) String() string { return proto1.CompactTextString(m) } +func (*GetResponse) ProtoMessage() {} + +func (m *GetResponse) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +// A PutRequest is arguments to the Put() method. Note that to write +// an empty value, the value parameter is still specified, but both +// Bytes and Integer are set to nil. +type PutRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Value Value `protobuf:"bytes,2,opt,name=value" json:"value"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *PutRequest) Reset() { *m = PutRequest{} } +func (m *PutRequest) String() string { return proto1.CompactTextString(m) } +func (*PutRequest) ProtoMessage() {} + +func (m *PutRequest) GetValue() Value { + if m != nil { + return m.Value + } + return Value{} +} + +// A PutResponse is the return value from the Put() method. +type PutResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *PutResponse) Reset() { *m = PutResponse{} } +func (m *PutResponse) String() string { return proto1.CompactTextString(m) } +func (*PutResponse) ProtoMessage() {} + +// A ConditionalPutRequest is arguments to the ConditionalPut() method. +// +// - Returns true and sets value if ExpValue equals existing value. +// - If key doesn't exist and ExpValue is nil, sets value. +// - If key exists, but value is empty and ExpValue is not nil but empty, sets value. +// - Otherwise, returns error and the actual value of the key in the response. +type ConditionalPutRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // The value to put. + Value Value `protobuf:"bytes,2,opt,name=value" json:"value"` + // ExpValue.Bytes empty to test for non-existence. Specify as nil + // to indicate there should be no existing entry. This is different + // from the expectation that the value exists but is empty. + ExpValue *Value `protobuf:"bytes,3,opt,name=exp_value" json:"exp_value,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ConditionalPutRequest) Reset() { *m = ConditionalPutRequest{} } +func (m *ConditionalPutRequest) String() string { return proto1.CompactTextString(m) } +func (*ConditionalPutRequest) ProtoMessage() {} + +func (m *ConditionalPutRequest) GetValue() Value { + if m != nil { + return m.Value + } + return Value{} +} + +func (m *ConditionalPutRequest) GetExpValue() *Value { + if m != nil { + return m.ExpValue + } + return nil +} + +// A ConditionalPutResponse is the return value from the +// ConditionalPut() method. +type ConditionalPutResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ConditionalPutResponse) Reset() { *m = ConditionalPutResponse{} } +func (m *ConditionalPutResponse) String() string { return proto1.CompactTextString(m) } +func (*ConditionalPutResponse) ProtoMessage() {} + +// An IncrementRequest is arguments to the Increment() method. It +// increments the value for key, and returns the new value. If no +// value exists for a key, incrementing by 0 is not a noop, but will +// create a zero value. IncrementRequest cannot be called on a key set +// by Put() or ConditionalPut(). Similarly, Get(), Put() and +// ConditionalPut() cannot be invoked on an incremented key. +type IncrementRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Increment int64 `protobuf:"varint,2,opt,name=increment" json:"increment"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *IncrementRequest) Reset() { *m = IncrementRequest{} } +func (m *IncrementRequest) String() string { return proto1.CompactTextString(m) } +func (*IncrementRequest) ProtoMessage() {} + +func (m *IncrementRequest) GetIncrement() int64 { + if m != nil { + return m.Increment + } + return 0 +} + +// An IncrementResponse is the return value from the Increment +// method. The new value after increment is specified in NewValue. If +// the value could not be decoded as specified, Error will be set. +type IncrementResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + NewValue int64 `protobuf:"varint,2,opt,name=new_value" json:"new_value"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *IncrementResponse) Reset() { *m = IncrementResponse{} } +func (m *IncrementResponse) String() string { return proto1.CompactTextString(m) } +func (*IncrementResponse) ProtoMessage() {} + +func (m *IncrementResponse) GetNewValue() int64 { + if m != nil { + return m.NewValue + } + return 0 +} + +// A DeleteRequest is arguments to the Delete() method. +type DeleteRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } +func (m *DeleteRequest) String() string { return proto1.CompactTextString(m) } +func (*DeleteRequest) ProtoMessage() {} + +// A DeleteResponse is the return value from the Delete() method. +type DeleteResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } +func (m *DeleteResponse) String() string { return proto1.CompactTextString(m) } +func (*DeleteResponse) ProtoMessage() {} + +// A DeleteRangeRequest is arguments to the DeleteRange method. It +// specifies the range of keys to delete. +type DeleteRangeRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // If 0, *all* entries between Key (inclusive) and EndKey + // (exclusive) are deleted. Must be >= 0 + MaxEntriesToDelete int64 `protobuf:"varint,2,opt,name=max_entries_to_delete" json:"max_entries_to_delete"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } +func (m *DeleteRangeRequest) String() string { return proto1.CompactTextString(m) } +func (*DeleteRangeRequest) ProtoMessage() {} + +func (m *DeleteRangeRequest) GetMaxEntriesToDelete() int64 { + if m != nil { + return m.MaxEntriesToDelete + } + return 0 +} + +// A DeleteRangeResponse is the return value from the DeleteRange() +// method. +type DeleteRangeResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Number of entries removed. + NumDeleted int64 `protobuf:"varint,2,opt,name=num_deleted" json:"num_deleted"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } +func (m *DeleteRangeResponse) String() string { return proto1.CompactTextString(m) } +func (*DeleteRangeResponse) ProtoMessage() {} + +func (m *DeleteRangeResponse) GetNumDeleted() int64 { + if m != nil { + return m.NumDeleted + } + return 0 +} + +// A ScanRequest is arguments to the Scan() method. It specifies the +// start and end keys for the scan and the maximum number of results. +type ScanRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Must be > 0. + MaxResults int64 `protobuf:"varint,2,opt,name=max_results" json:"max_results"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ScanRequest) Reset() { *m = ScanRequest{} } +func (m *ScanRequest) String() string { return proto1.CompactTextString(m) } +func (*ScanRequest) ProtoMessage() {} + +func (m *ScanRequest) GetMaxResults() int64 { + if m != nil { + return m.MaxResults + } + return 0 +} + +// A ScanResponse is the return value from the Scan() method. +type ScanResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Empty if no rows were scanned. + Rows []KeyValue `protobuf:"bytes,2,rep,name=rows" json:"rows"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ScanResponse) Reset() { *m = ScanResponse{} } +func (m *ScanResponse) String() string { return proto1.CompactTextString(m) } +func (*ScanResponse) ProtoMessage() {} + +func (m *ScanResponse) GetRows() []KeyValue { + if m != nil { + return m.Rows + } + return nil +} + +// An EndTransactionRequest is arguments to the EndTransaction() method. +// It specifies whether to commit or roll back an extant transaction. +type EndTransactionRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // False to abort and rollback. + Commit bool `protobuf:"varint,2,opt,name=commit" json:"commit"` + // Optional commit triggers. Note that commit triggers are for + // internal use only and will be ignored if requested through the + // public-facing KV API. + SplitTrigger *SplitTrigger `protobuf:"bytes,3,opt,name=split_trigger" json:"split_trigger,omitempty"` + MergeTrigger *MergeTrigger `protobuf:"bytes,4,opt,name=merge_trigger" json:"merge_trigger,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EndTransactionRequest) Reset() { *m = EndTransactionRequest{} } +func (m *EndTransactionRequest) String() string { return proto1.CompactTextString(m) } +func (*EndTransactionRequest) ProtoMessage() {} + +func (m *EndTransactionRequest) GetCommit() bool { + if m != nil { + return m.Commit + } + return false +} + +func (m *EndTransactionRequest) GetSplitTrigger() *SplitTrigger { + if m != nil { + return m.SplitTrigger + } + return nil +} + +func (m *EndTransactionRequest) GetMergeTrigger() *MergeTrigger { + if m != nil { + return m.MergeTrigger + } + return nil +} + +// An EndTransactionResponse is the return value from the +// EndTransaction() method. The final transaction record is returned +// as part of the response header. In particular, transaction status +// and timestamp will be updated to reflect final committed +// values. Clients may propagate the transaction timestamp as the +// final txn commit timestamp in order to preserve causal ordering +// between subsequent transactions. CommitWait specifies the commit +// wait, which is the remaining time the client MUST wait before +// signalling completion of the transaction to another distributed +// node to maintain consistency. +type EndTransactionResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Remaining time (ns). + CommitWait int64 `protobuf:"varint,2,opt,name=commit_wait" json:"commit_wait"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EndTransactionResponse) Reset() { *m = EndTransactionResponse{} } +func (m *EndTransactionResponse) String() string { return proto1.CompactTextString(m) } +func (*EndTransactionResponse) ProtoMessage() {} + +func (m *EndTransactionResponse) GetCommitWait() int64 { + if m != nil { + return m.CommitWait + } + return 0 +} + +// A ReapQueueRequest is arguments to the ReapQueue() method. It +// specifies the recipient inbox key to which messages are waiting +// to be reapted and also the maximum number of results to return. +type ReapQueueRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Maximum results to return; must be > 0. + MaxResults int64 `protobuf:"varint,2,opt,name=max_results" json:"max_results"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ReapQueueRequest) Reset() { *m = ReapQueueRequest{} } +func (m *ReapQueueRequest) String() string { return proto1.CompactTextString(m) } +func (*ReapQueueRequest) ProtoMessage() {} + +func (m *ReapQueueRequest) GetMaxResults() int64 { + if m != nil { + return m.MaxResults + } + return 0 +} + +// A ReapQueueResponse is the return value from the ReapQueue() method. +type ReapQueueResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Messages []Value `protobuf:"bytes,2,rep,name=messages" json:"messages"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ReapQueueResponse) Reset() { *m = ReapQueueResponse{} } +func (m *ReapQueueResponse) String() string { return proto1.CompactTextString(m) } +func (*ReapQueueResponse) ProtoMessage() {} + +func (m *ReapQueueResponse) GetMessages() []Value { + if m != nil { + return m.Messages + } + return nil +} + +// An EnqueueUpdateRequest is arguments to the EnqueueUpdate() method. +// It specifies the update to enqueue for asynchronous execution. +// Update is an instance of one of the following messages: PutRequest, +// IncrementRequest, DeleteRequest, DeleteRangeRequest, or +// AccountingRequest. +type EnqueueUpdateRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueUpdateRequest) Reset() { *m = EnqueueUpdateRequest{} } +func (m *EnqueueUpdateRequest) String() string { return proto1.CompactTextString(m) } +func (*EnqueueUpdateRequest) ProtoMessage() {} + +// An EnqueueUpdateResponse is the return value from the +// EnqueueUpdate() method. +type EnqueueUpdateResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueUpdateResponse) Reset() { *m = EnqueueUpdateResponse{} } +func (m *EnqueueUpdateResponse) String() string { return proto1.CompactTextString(m) } +func (*EnqueueUpdateResponse) ProtoMessage() {} + +// An EnqueueMessageRequest is arguments to the EnqueueMessage() method. +// It specifies the recipient inbox key and the message (an arbitrary +// byte slice value). +type EnqueueMessageRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Message value to delivery to inbox. + Msg Value `protobuf:"bytes,2,opt,name=msg" json:"msg"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueMessageRequest) Reset() { *m = EnqueueMessageRequest{} } +func (m *EnqueueMessageRequest) String() string { return proto1.CompactTextString(m) } +func (*EnqueueMessageRequest) ProtoMessage() {} + +func (m *EnqueueMessageRequest) GetMsg() Value { + if m != nil { + return m.Msg + } + return Value{} +} + +// An EnqueueMessageResponse is the return value from the +// EnqueueMessage() method. +type EnqueueMessageResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueMessageResponse) Reset() { *m = EnqueueMessageResponse{} } +func (m *EnqueueMessageResponse) String() string { return proto1.CompactTextString(m) } +func (*EnqueueMessageResponse) ProtoMessage() {} + +// A RequestUnion contains exactly one of the optional requests. +type RequestUnion struct { + Contains *ContainsRequest `protobuf:"bytes,1,opt,name=contains" json:"contains,omitempty"` + Get *GetRequest `protobuf:"bytes,2,opt,name=get" json:"get,omitempty"` + Put *PutRequest `protobuf:"bytes,3,opt,name=put" json:"put,omitempty"` + ConditionalPut *ConditionalPutRequest `protobuf:"bytes,4,opt,name=conditional_put" json:"conditional_put,omitempty"` + Increment *IncrementRequest `protobuf:"bytes,5,opt,name=increment" json:"increment,omitempty"` + Delete *DeleteRequest `protobuf:"bytes,6,opt,name=delete" json:"delete,omitempty"` + DeleteRange *DeleteRangeRequest `protobuf:"bytes,7,opt,name=delete_range" json:"delete_range,omitempty"` + Scan *ScanRequest `protobuf:"bytes,8,opt,name=scan" json:"scan,omitempty"` + EndTransaction *EndTransactionRequest `protobuf:"bytes,9,opt,name=end_transaction" json:"end_transaction,omitempty"` + ReapQueue *ReapQueueRequest `protobuf:"bytes,10,opt,name=reap_queue" json:"reap_queue,omitempty"` + EnqueueUpdate *EnqueueUpdateRequest `protobuf:"bytes,11,opt,name=enqueue_update" json:"enqueue_update,omitempty"` + EnqueueMessage *EnqueueMessageRequest `protobuf:"bytes,12,opt,name=enqueue_message" json:"enqueue_message,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *RequestUnion) Reset() { *m = RequestUnion{} } +func (m *RequestUnion) String() string { return proto1.CompactTextString(m) } +func (*RequestUnion) ProtoMessage() {} + +func (m *RequestUnion) GetContains() *ContainsRequest { + if m != nil { + return m.Contains + } + return nil +} + +func (m *RequestUnion) GetGet() *GetRequest { + if m != nil { + return m.Get + } + return nil +} + +func (m *RequestUnion) GetPut() *PutRequest { + if m != nil { + return m.Put + } + return nil +} + +func (m *RequestUnion) GetConditionalPut() *ConditionalPutRequest { + if m != nil { + return m.ConditionalPut + } + return nil +} + +func (m *RequestUnion) GetIncrement() *IncrementRequest { + if m != nil { + return m.Increment + } + return nil +} + +func (m *RequestUnion) GetDelete() *DeleteRequest { + if m != nil { + return m.Delete + } + return nil +} + +func (m *RequestUnion) GetDeleteRange() *DeleteRangeRequest { + if m != nil { + return m.DeleteRange + } + return nil +} + +func (m *RequestUnion) GetScan() *ScanRequest { + if m != nil { + return m.Scan + } + return nil +} + +func (m *RequestUnion) GetEndTransaction() *EndTransactionRequest { + if m != nil { + return m.EndTransaction + } + return nil +} + +func (m *RequestUnion) GetReapQueue() *ReapQueueRequest { + if m != nil { + return m.ReapQueue + } + return nil +} + +func (m *RequestUnion) GetEnqueueUpdate() *EnqueueUpdateRequest { + if m != nil { + return m.EnqueueUpdate + } + return nil +} + +func (m *RequestUnion) GetEnqueueMessage() *EnqueueMessageRequest { + if m != nil { + return m.EnqueueMessage + } + return nil +} + +// A ResponseUnion contains exactly one of the optional responses. +type ResponseUnion struct { + Contains *ContainsResponse `protobuf:"bytes,1,opt,name=contains" json:"contains,omitempty"` + Get *GetResponse `protobuf:"bytes,2,opt,name=get" json:"get,omitempty"` + Put *PutResponse `protobuf:"bytes,3,opt,name=put" json:"put,omitempty"` + ConditionalPut *ConditionalPutResponse `protobuf:"bytes,4,opt,name=conditional_put" json:"conditional_put,omitempty"` + Increment *IncrementResponse `protobuf:"bytes,5,opt,name=increment" json:"increment,omitempty"` + Delete *DeleteResponse `protobuf:"bytes,6,opt,name=delete" json:"delete,omitempty"` + DeleteRange *DeleteRangeResponse `protobuf:"bytes,7,opt,name=delete_range" json:"delete_range,omitempty"` + Scan *ScanResponse `protobuf:"bytes,8,opt,name=scan" json:"scan,omitempty"` + EndTransaction *EndTransactionResponse `protobuf:"bytes,9,opt,name=end_transaction" json:"end_transaction,omitempty"` + ReapQueue *ReapQueueResponse `protobuf:"bytes,10,opt,name=reap_queue" json:"reap_queue,omitempty"` + EnqueueUpdate *EnqueueUpdateResponse `protobuf:"bytes,11,opt,name=enqueue_update" json:"enqueue_update,omitempty"` + EnqueueMessage *EnqueueMessageResponse `protobuf:"bytes,12,opt,name=enqueue_message" json:"enqueue_message,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ResponseUnion) Reset() { *m = ResponseUnion{} } +func (m *ResponseUnion) String() string { return proto1.CompactTextString(m) } +func (*ResponseUnion) ProtoMessage() {} + +func (m *ResponseUnion) GetContains() *ContainsResponse { + if m != nil { + return m.Contains + } + return nil +} + +func (m *ResponseUnion) GetGet() *GetResponse { + if m != nil { + return m.Get + } + return nil +} + +func (m *ResponseUnion) GetPut() *PutResponse { + if m != nil { + return m.Put + } + return nil +} + +func (m *ResponseUnion) GetConditionalPut() *ConditionalPutResponse { + if m != nil { + return m.ConditionalPut + } + return nil +} + +func (m *ResponseUnion) GetIncrement() *IncrementResponse { + if m != nil { + return m.Increment + } + return nil +} + +func (m *ResponseUnion) GetDelete() *DeleteResponse { + if m != nil { + return m.Delete + } + return nil +} + +func (m *ResponseUnion) GetDeleteRange() *DeleteRangeResponse { + if m != nil { + return m.DeleteRange + } + return nil +} + +func (m *ResponseUnion) GetScan() *ScanResponse { + if m != nil { + return m.Scan + } + return nil +} + +func (m *ResponseUnion) GetEndTransaction() *EndTransactionResponse { + if m != nil { + return m.EndTransaction + } + return nil +} + +func (m *ResponseUnion) GetReapQueue() *ReapQueueResponse { + if m != nil { + return m.ReapQueue + } + return nil +} + +func (m *ResponseUnion) GetEnqueueUpdate() *EnqueueUpdateResponse { + if m != nil { + return m.EnqueueUpdate + } + return nil +} + +func (m *ResponseUnion) GetEnqueueMessage() *EnqueueMessageResponse { + if m != nil { + return m.EnqueueMessage + } + return nil +} + +// A BatchRequest contains one or more requests to be executed in +// parallel, or if applicable (based on write-only commands and +// range-locality), as a single update. +type BatchRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Requests []RequestUnion `protobuf:"bytes,2,rep,name=requests" json:"requests"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *BatchRequest) Reset() { *m = BatchRequest{} } +func (m *BatchRequest) String() string { return proto1.CompactTextString(m) } +func (*BatchRequest) ProtoMessage() {} + +func (m *BatchRequest) GetRequests() []RequestUnion { + if m != nil { + return m.Requests + } + return nil +} + +// A BatchResponse contains one or more responses, one per request +// corresponding to the requests in the matching BatchRequest. The +// error in the response header is set to the first error from the +// slice of responses, if applicable. +type BatchResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Responses []ResponseUnion `protobuf:"bytes,2,rep,name=responses" json:"responses"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *BatchResponse) Reset() { *m = BatchResponse{} } +func (m *BatchResponse) String() string { return proto1.CompactTextString(m) } +func (*BatchResponse) ProtoMessage() {} + +func (m *BatchResponse) GetResponses() []ResponseUnion { + if m != nil { + return m.Responses + } + return nil +} + +// An AdminSplitRequest is arguments to the AdminSplit() method. The +// existing range which contains RequestHeader.Key is split by +// split_key. If split_key is not specified, then this method will +// determine a split key that is roughly halfway through the +// range. The existing range is resized to cover only its start key to +// the split key. The new range created by the split starts at the +// split key and extends to the original range's end key. If split_key +// is known, header.key should also be set to split_key. +// +// New range IDs for each of the split range's replica and a new Raft +// ID are generated by the operation. Split requests are done in the +// context of a distributed transaction which updates range addressing +// records, range metadata and finally, provides a commit trigger to +// update bookkeeping and instantiate the new range on commit. +// +// The new range contains range replicas located on the same stores; +// no range data is moved during this operation. The split can be +// thought of as a mostly logical operation, though some other +// metadata (e.g. response cache and range stats must be copied or +// recomputed). +type AdminSplitRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + SplitKey Key `protobuf:"bytes,2,opt,name=split_key,customtype=Key" json:"split_key"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} } +func (m *AdminSplitRequest) String() string { return proto1.CompactTextString(m) } +func (*AdminSplitRequest) ProtoMessage() {} + +// An AdminSplitResponse is the return value from the AdminSplit() +// method. +type AdminSplitResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} } +func (m *AdminSplitResponse) String() string { return proto1.CompactTextString(m) } +func (*AdminSplitResponse) ProtoMessage() {} + +// An AdminMergeRequest is arguments to the AdminMerge() method. A +// merge is always performed by calling AdminMerge on the range +// that is subsuming the passed in subsumed_range. The ranges must +// be consecutive in the key space, such that the end_key of the +// subsuming range must match the start_key of the range being subsumed. +// After the merge operation, the subsumed_range will no longer exist and +// the subsuming range will now encompass all keys from its original +// start_key to the end_key of the subsumed_range. +type AdminMergeRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + SubsumedRange RangeDescriptor `protobuf:"bytes,2,opt,name=subsumed_range" json:"subsumed_range"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} } +func (m *AdminMergeRequest) String() string { return proto1.CompactTextString(m) } +func (*AdminMergeRequest) ProtoMessage() {} + +func (m *AdminMergeRequest) GetSubsumedRange() RangeDescriptor { + if m != nil { + return m.SubsumedRange + } + return RangeDescriptor{} +} + +// An AdminMergeResponse is the return value from the AdminMerge() +// method. +type AdminMergeResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} } +func (m *AdminMergeResponse) String() string { return proto1.CompactTextString(m) } +func (*AdminMergeResponse) ProtoMessage() {} + +func init() { +} +func (this *RequestUnion) GetValue() interface{} { + if this.Contains != nil { + return this.Contains + } + if this.Get != nil { + return this.Get + } + if this.Put != nil { + return this.Put + } + if this.ConditionalPut != nil { + return this.ConditionalPut + } + if this.Increment != nil { + return this.Increment + } + if this.Delete != nil { + return this.Delete + } + if this.DeleteRange != nil { + return this.DeleteRange + } + if this.Scan != nil { + return this.Scan + } + if this.EndTransaction != nil { + return this.EndTransaction + } + if this.ReapQueue != nil { + return this.ReapQueue + } + if this.EnqueueUpdate != nil { + return this.EnqueueUpdate + } + if this.EnqueueMessage != nil { + return this.EnqueueMessage + } + return nil +} + +func (this *RequestUnion) SetValue(value interface{}) bool { + switch vt := value.(type) { + case *ContainsRequest: + this.Contains = vt + case *GetRequest: + this.Get = vt + case *PutRequest: + this.Put = vt + case *ConditionalPutRequest: + this.ConditionalPut = vt + case *IncrementRequest: + this.Increment = vt + case *DeleteRequest: + this.Delete = vt + case *DeleteRangeRequest: + this.DeleteRange = vt + case *ScanRequest: + this.Scan = vt + case *EndTransactionRequest: + this.EndTransaction = vt + case *ReapQueueRequest: + this.ReapQueue = vt + case *EnqueueUpdateRequest: + this.EnqueueUpdate = vt + case *EnqueueMessageRequest: + this.EnqueueMessage = vt + default: + return false + } + return true +} +func (this *ResponseUnion) GetValue() interface{} { + if this.Contains != nil { + return this.Contains + } + if this.Get != nil { + return this.Get + } + if this.Put != nil { + return this.Put + } + if this.ConditionalPut != nil { + return this.ConditionalPut + } + if this.Increment != nil { + return this.Increment + } + if this.Delete != nil { + return this.Delete + } + if this.DeleteRange != nil { + return this.DeleteRange + } + if this.Scan != nil { + return this.Scan + } + if this.EndTransaction != nil { + return this.EndTransaction + } + if this.ReapQueue != nil { + return this.ReapQueue + } + if this.EnqueueUpdate != nil { + return this.EnqueueUpdate + } + if this.EnqueueMessage != nil { + return this.EnqueueMessage + } + return nil +} + +func (this *ResponseUnion) SetValue(value interface{}) bool { + switch vt := value.(type) { + case *ContainsResponse: + this.Contains = vt + case *GetResponse: + this.Get = vt + case *PutResponse: + this.Put = vt + case *ConditionalPutResponse: + this.ConditionalPut = vt + case *IncrementResponse: + this.Increment = vt + case *DeleteResponse: + this.Delete = vt + case *DeleteRangeResponse: + this.DeleteRange = vt + case *ScanResponse: + this.Scan = vt + case *EndTransactionResponse: + this.EndTransaction = vt + case *ReapQueueResponse: + this.ReapQueue = vt + case *EnqueueUpdateResponse: + this.EnqueueUpdate = vt + case *EnqueueMessageResponse: + this.EnqueueMessage = vt + default: + return false + } + return true +} diff --git a/samples/Go/embedded.go b/samples/Go/embedded.go new file mode 100644 index 00000000..6d6dba8a --- /dev/null +++ b/samples/Go/embedded.go @@ -0,0 +1,852 @@ +// Code generated by go-bindata. +// sources: +// ui/css/app.css +// ui/css/graph.css +// ui/css/libs/nvd3/1.7.1/nv.d3.min.css +// ui/css/rest_explorer.css +// ui/index.html +// ui/js/app.js +// ui/js/libs/d3/3.3.5/d3.min.js +// ui/js/libs/mithriljs/0.2.0/mithril.min.js +// ui/js/libs/mithriljs/0.2.0/mithril.min.js.map +// ui/js/libs/nvd3/1.7.1/nv.d3.min.js +// ui/ts/app.ts +// ui/ts/components/metrics.ts +// ui/ts/header.ts +// ui/ts/models/node_status.ts +// ui/ts/models/stats.ts +// ui/ts/models/store_status.ts +// ui/ts/models/timeseries.ts +// ui/ts/pages/graph.ts +// ui/ts/pages/monitor.ts +// ui/ts/pages/nodes.ts +// ui/ts/pages/rest_explorer.ts +// ui/ts/pages/stores.ts +// ui/ts/tsconfig.json +// ui/ts/typings/d3/d3.d.ts +// ui/ts/typings/jquery/jquery.d.ts +// ui/ts/typings/mithriljs/mithril.d.ts +// DO NOT EDIT! +package resource + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _uiCssAppCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x54\xdb\x6e\xdb\x38\x10\x7d\xe7\x57\x0c\x52\x2c\x72\x81\x65\x3b\x4e\x16\x58\xd8\x2f\xab\xba\x59\xc4\x68\xa1\x2c\x22\x67\x8b\x3e\x52\xd2\x48\x22\x42\x91\x5c\x92\xb2\xec\x2e\xfa\xef\x3b\x94\xe4\x34\xee\xcd\x0f\x86\x67\xe6\x78\xe6\x9c\xb9\x70\x76\x75\xc5\xd6\xda\x1c\xac\xa8\x6a\x0f\x8b\xf9\xf5\x2d\x6c\x6b\x84\xb5\xce\x9f\xad\xe6\x79\x0d\x71\xeb\x6b\x6d\xdd\x94\xb1\x0f\x22\x47\xe5\xb0\x80\x56\x15\x68\xc1\x13\x2c\x36\x04\x41\x18\x23\x13\xf8\x07\xad\x13\x5a\xc1\x62\x3a\x87\x8b\x00\x38\x1b\x43\x67\x97\x2b\x76\xd0\x2d\x34\xfc\x00\x4a\x7b\x68\x1d\x52\x02\xe1\xa0\x14\x12\x01\xf7\x39\x1a\x0f\x42\x41\xae\x1b\x23\x05\x57\x39\x42\x27\x7c\xdd\x17\x19\x53\x4c\xd9\xa7\x31\x81\xce\x3c\x27\x2c\x27\xb4\x21\xab\x7c\x8d\x02\xee\x19\x03\xfa\xd4\xde\x9b\xe5\x6c\xd6\x75\xdd\x94\xf7\x2c\xa7\xda\x56\x33\x39\xa0\xdc\xec\xc3\x66\x7d\x97\xa4\x77\x11\x31\x65\xec\x49\x49\x74\x0e\x2c\xfe\xdb\x0a\x4b\x02\xb3\x03\x70\x43\x3c\x72\x9e\x11\x3b\xc9\x3b\xd0\x16\x78\x65\x91\x62\x5e\x07\x9e\x9d\x15\x5e\xa8\x6a\x02\x4e\x97\xbe\xe3\x16\x59\x21\x9c\xb7\x22\x6b\xfd\x49\x83\x8e\xac\x48\xe9\x6b\x00\xb5\x88\x2b\x38\x8b\x53\xd8\xa4\x67\xf0\x36\x4e\x37\xe9\x84\x7d\xdc\x6c\xef\x1f\x9e\xb6\xf0\x31\x7e\x7c\x8c\x93\xed\xe6\x2e\x85\x87\x47\x58\x3f\x24\xef\x36\xdb\xcd\x43\x42\xd6\x5f\x10\x27\x9f\xe0\xfd\x26\x79\x37\x01\xa4\xf6\x50\x11\xdc\x1b\x1b\xb8\x6b\xcb\x44\x68\x1d\x16\x53\x48\x11\x4f\x8a\x97\x7a\x20\xe3\x0c\xe6\xa2\x14\x39\x29\x52\x55\xcb\x2b\x84\x4a\xef\xd0\x2a\x12\xc2\x0c\xda\x46\xb8\x30\x3c\x47\xd4\x0a\x90\xa2\x11\x9e\xfb\xde\xfe\x4e\xce\xd7\x12\xf1\x13\x71\x7e\x4c\xfb\x31\xb2\x50\x47\xf1\x06\x5d\x98\x49\xae\xd5\x20\x77\x58\x9e\x61\x8d\x96\x10\xab\xc2\x62\x07\x6f\xb5\xda\x21\x01\x10\x2e\xa8\xda\x21\xa3\x32\x7f\x56\x0d\x17\x72\x4a\x1b\x70\xc9\xae\x66\xec\x0a\xfe\xa3\x39\x36\xdc\x56\x42\x2d\x61\xbe\x22\xc3\xf0\xa2\x20\xae\xa3\x15\x35\xfa\x73\x94\xe9\x7d\xe4\xc4\xe7\xde\x9b\x69\x4b\x3c\x83\xab\x0f\x77\x98\x3d\x0b\xff\x0b\xc4\xcf\x22\x5f\x58\xed\x1b\x39\x61\x99\x2e\x0e\x3d\x89\x1a\xc3\x71\x2c\xe1\x7a\x3e\xff\xed\x5b\x1e\x5f\xbe\xc2\x32\x9e\x3f\x57\x56\x53\xb7\xa2\x5c\xcb\x20\xf6\x4d\x79\x5d\x2e\xca\x9b\xf0\x9f\xa3\xe7\xe6\xa6\x37\x4b\xea\x4e\x54\xf2\x46\xc8\xc3\x12\xce\x53\xdd\x5a\xda\xf8\x94\x53\xb3\xff\xb6\xfa\x7c\x02\xe7\xf7\x28\x77\xe8\x69\x03\x21\xc1\x16\xc9\xf3\xe2\xa0\x9d\x23\x5c\xe4\xd0\x8a\xf2\x25\x55\x37\x52\xbc\x9d\xcf\x5f\x7c\xa4\x0d\x89\xf4\xad\xe9\x35\x4d\xcb\x56\xca\xfb\x1e\xb6\xa6\x28\x1d\x10\xcd\xf4\xb5\xba\x9c\xcb\xfc\x22\x48\x84\x08\x7e\x9f\x9b\xfd\xe5\x0a\x66\x57\xf0\x1e\xd1\x84\x85\x97\x84\x1f\x4e\x72\xc0\x87\x11\xd3\x61\x99\x84\xef\x80\xa6\x45\xf9\x47\xe3\x75\xca\x90\x66\xf5\x93\xce\x94\xe5\x30\x83\xb1\xef\xde\xeb\x86\xc8\x9a\x3d\x5d\x94\x14\x05\xbc\x29\x8a\xe2\xa4\xd7\xd7\x94\x8b\xde\xa7\x51\xcc\x50\x2c\x22\x56\xcf\xcb\xf0\x35\x39\x75\xed\x84\x13\xe1\xce\x02\x19\x8f\x7b\x1f\x15\x98\x6b\xdb\xaf\xf3\x92\xde\x1f\x85\xab\x63\xc0\x5b\x6a\x26\x2d\x2e\x15\x6f\x0d\x1d\x41\xce\x1d\xfe\x60\x5e\x74\xbc\x46\x72\x9a\x95\x50\xa1\x13\x51\x26\xe9\x81\x5c\xbd\x2c\x68\x64\x07\xc1\x3f\xe2\x77\xfc\x5d\xeb\x06\x13\xba\x8e\x9e\xd4\xc9\xd0\xfe\xf8\x6e\x68\x8b\xc5\xd0\xb8\x6f\x29\x1e\xa9\xd3\xd5\x86\x55\x90\x11\x97\xa2\x22\x49\xd1\x62\xa8\xfb\x7f\x00\x00\x00\xff\xff\x4c\xec\x61\x77\xce\x05\x00\x00") + +func uiCssAppCssBytes() ([]byte, error) { + return bindataRead( + _uiCssAppCss, + "ui/css/app.css", + ) +} + +func uiCssAppCss() (*asset, error) { + bytes, err := uiCssAppCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/app.css", size: 1486, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiCssGraphCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x8d\x31\x0e\xc2\x30\x0c\x45\xf7\x9c\xc2\x12\x2b\xad\xd2\x81\x25\x9d\x39\x48\x20\x9f\xc6\x22\x72\x23\x27\x88\x4a\x88\xbb\x03\x29\x12\x4c\xdd\xfc\xf4\x9e\xed\x3e\xb1\x80\x1e\x86\xe8\xc2\x29\x39\x92\x59\x30\xbe\xa9\x54\x9d\xaf\xe8\xee\x1c\x6a\x74\x34\xf4\x87\xbc\x8c\xe6\x69\x4c\xeb\x6d\x5b\x58\x13\xa7\x08\x3f\x33\xfc\x9b\x53\xba\x61\x55\x7e\xe1\x42\xd9\xd7\xb8\xff\xce\x9b\x5f\x1d\xed\xac\xb5\x8d\xa3\xcf\xe8\x14\x12\xa0\x2c\x93\xa3\xb3\x72\xc9\xc7\x30\xa1\x7c\x0e\xbf\x02\x00\x00\xff\xff\xd9\x8a\x57\x81\xbd\x00\x00\x00") + +func uiCssGraphCssBytes() ([]byte, error) { + return bindataRead( + _uiCssGraphCss, + "ui/css/graph.css", + ) +} + +func uiCssGraphCss() (*asset, error) { + bytes, err := uiCssGraphCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/graph.css", size: 189, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiCssLibsNvd3171NvD3MinCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xcc\x5a\x4f\x6f\xe3\xba\x11\xff\x2a\x2a\x16\x05\x1a\x40\x12\x24\xc5\x4e\x62\xe9\xf4\x5e\x1b\xb4\x87\x3e\xa0\x87\xa2\x77\x5a\xa2\x6d\xc2\x94\x28\x50\x74\x6c\xc7\xd8\xef\x5e\xfe\x11\x25\x52\xa4\x64\x67\x91\xc3\x83\x91\x0d\x43\xfe\x66\x38\x1c\xce\x5f\x7a\xe3\xe6\xa3\x7a\x0e\xf8\xbf\x11\xb8\xa0\xee\xd6\x12\xd4\x30\x48\x23\xf8\x01\x1b\xd6\xe5\x0d\x69\x60\x41\x5a\x50\x22\x76\xcd\xd3\x9f\x36\x38\x68\x01\x3b\xdc\x76\x08\x63\x85\xeb\x18\x25\x47\x98\xff\x48\x92\xa4\x1f\x47\x9a\x34\x7e\x5d\x17\xdd\x01\xb4\x30\xa2\xb0\xa9\x20\x45\xcd\x3e\x2f\x29\xea\xda\xf7\x6a\x0f\x3b\x1f\xdf\xb8\x22\x35\x40\xcd\xcd\x65\x34\x41\x8b\xdf\x97\x25\x92\x64\xca\x1e\xa3\x06\x7a\xc4\x86\x6b\xf1\xf9\x82\x98\xf1\x27\xa4\x44\x72\x0b\x3d\x3b\xc8\xd5\xfb\xe2\x0f\x83\x3f\xc0\xe5\x0f\xd4\x04\x0c\x5e\xd8\x6d\x47\x1a\x16\x9d\x21\xda\x1f\x58\xfe\x9a\x0c\x07\xb8\x2c\x52\x69\x21\x2e\xd9\x63\xb0\x3b\x32\x88\x7f\x22\xd0\x94\x07\x42\xf3\x1a\x55\x15\x86\x1e\xc5\x57\xa8\x03\x5b\x0c\xab\x9b\x4f\xd9\x5b\x40\xbb\x80\xc2\x92\x49\x65\x5b\xb6\xc0\x28\x68\x3a\xc4\x10\x69\x72\x73\x2d\xc8\xd6\x49\xad\xd4\x07\x68\x11\xd5\xe4\x33\x7a\x0c\x79\x86\xdb\x23\x62\x0f\x81\x7d\x02\xc6\x07\xf2\x01\xa9\x2d\x66\x3a\x05\x2a\xd0\x78\xa0\xfc\x07\xa8\xaa\x37\xf8\x32\xc5\xa9\x1b\x14\x00\xba\xdf\x82\xbf\x25\xa1\xfc\x3c\xcd\xb0\xf3\xa2\x53\x13\x5d\x9f\x30\x43\x9c\x44\xfe\xb1\xa7\xe4\xd4\x2a\xa1\x43\x17\xf2\x2f\x42\xd1\x27\xb7\x1d\x80\x17\xc0\xfc\xce\x4a\x0a\x19\xf4\xb0\x74\x5c\xe7\x4f\x72\x51\x73\x2a\xc8\xa5\x0e\xbf\xa4\x08\x87\x64\x41\x1d\xf9\x1d\xb3\x98\x21\x35\xbd\xec\xae\x4c\x3e\x7f\x2f\x5c\x7b\xd0\x51\xca\x63\x52\xd2\xa2\x4e\x18\x43\xc5\x27\x4f\x93\xf6\x12\x74\x5c\xbf\x51\xc7\x23\xd8\x6e\x0a\x52\x32\x41\xd0\x9d\x28\x9c\x38\xe6\xdb\x12\x76\x41\x19\x53\x02\x40\x8f\x1c\xe9\x49\x07\x67\x54\xb1\x43\x9e\xb5\x97\x05\xba\xff\x52\x04\x9a\x3d\x86\x16\xbd\xf2\xb7\xdd\x6e\x67\x73\x4a\xe3\xf5\x0c\x2f\x86\xca\xa3\x0a\xf4\x9a\xcd\xcb\xcb\x8b\x4d\x3c\x4b\xcb\x6d\x73\x0f\xc5\xa0\x4b\x7a\x47\x87\x10\xde\x41\xa6\x3d\xb2\xaa\xaa\x3b\xc8\xac\x47\x96\x65\x39\x23\x39\xe3\x87\x97\x16\xd1\xa1\x4f\x98\xa7\xab\xf6\x52\x78\x13\xc2\x84\xb0\x3b\x6d\x7b\x5a\xc9\x7f\xb3\xd9\xcc\x4b\xd2\x63\xb6\x40\x7c\x0a\xdb\x0a\x56\xf3\x64\x3e\x1b\x88\x5f\x47\xbc\x50\xf8\x7f\xf0\xa9\xfb\xbd\x77\x08\xe1\x18\xde\x04\x70\x9f\xe4\x9e\xef\xf5\xee\x23\xf3\x7e\xcf\x66\xcc\xe9\xf3\x38\x40\x21\xd0\x26\x31\x22\x35\x87\x60\xf8\xab\x2b\x01\xe3\x75\x90\xc9\x42\x0c\x65\x79\x64\x0b\xe5\xd4\x3a\xc6\xed\xf4\x5c\xe4\x10\x09\xa3\x56\x0c\x1e\xe0\x1a\xaf\xff\x82\xea\x96\x50\x06\x1a\xe6\x14\x53\xc6\xda\xcf\xf8\x8c\xd8\xc1\x88\xa7\x5d\xe0\x9c\x7d\xdc\xc2\x08\xbb\xa6\x2b\x58\x61\x37\xb4\x77\x5b\x8e\xf4\xbf\xc8\xc5\xcd\x02\xbf\xc4\xc8\x51\xb4\xf7\xd4\xf1\x34\xe2\xfb\x01\x37\x2b\x38\xbc\x0a\xa7\xb3\x2e\x64\xb3\x74\x23\x1b\xeb\x4a\x86\x9d\x24\xfb\x48\xd8\x5e\x5f\x2c\xeb\x60\x04\x00\x70\xcc\xa6\x18\x62\x8d\xbd\xb3\x59\x52\x21\x5e\x95\x5e\xfe\x2d\x6c\xbd\x3c\xd1\x8e\x57\x66\xf0\xcc\x4b\x55\x11\x27\x7e\x76\x1f\x7b\x89\x8b\xf8\xe0\x36\x68\x98\x9c\xca\x43\x54\x02\x8c\xc9\x89\xa9\x72\x57\x2f\x9d\x78\x76\xe0\x19\x02\x0b\x5f\x53\x0b\xc7\x03\xab\xb1\x67\xbe\xee\x7c\x93\xdc\x10\x9c\x59\x67\x82\x67\xc8\x16\x83\x6b\xbe\xc5\xa4\x3c\x16\x7d\xd0\x4e\x92\xbf\x16\x07\x15\xcb\xc4\x58\x1c\x8f\x11\xc2\x93\x64\xab\x8c\xf9\xb9\x8a\x78\x11\x5e\x91\x73\x38\xf9\x3b\x18\x91\x37\x29\xc0\x96\x5c\xfa\xa5\x3c\x09\x78\x38\x0f\x64\xee\x33\x72\x64\x9c\x3d\x0d\x07\x7e\x08\xfc\x45\x8e\x94\x37\x09\x3c\x34\x56\xe8\xd4\xe5\x1c\x5d\xf4\x52\x4d\xa7\x9d\x99\xfe\x4a\x87\xe4\x9f\xaf\x92\x24\x48\x79\x62\x0c\x7e\xe3\xe9\x0f\xeb\x1b\x1f\x73\x81\x88\xfa\x81\x48\x05\x36\x40\x06\xcc\xf2\x28\x2c\xba\xa9\x6e\x63\x96\xf4\x19\x90\x00\x37\xe4\x1f\x80\x01\x33\xbb\xbc\xf9\xb3\x4b\xb4\xa5\xa7\xee\x10\xc4\x5c\x40\xe8\xc4\xa6\x34\xbb\xd7\x26\x69\x72\x65\x9b\x46\xa3\x28\xcd\xdb\x48\xc9\xc6\x41\x30\xdc\x73\x6e\x2a\x95\x71\x9e\xb0\xd3\x36\xde\xf7\xa4\x7e\xa8\xee\x40\x82\x12\xd1\x12\x4f\x2a\x1a\xab\x1b\x99\x3f\x50\xe2\x75\x5e\x49\xf0\xfb\xa0\x5d\xb3\x40\xf6\x14\x35\xf1\xaa\x98\x51\xbf\x99\x20\xc9\x01\x97\x3a\xd3\x89\x12\xa5\x1b\x46\x76\xf8\x49\xcd\xd2\x64\x9e\xc8\x17\xb9\xb2\x07\x49\x5b\x22\x42\xef\xc7\x58\x20\x65\x25\x48\xb2\xf2\x21\xda\x06\xee\x81\x45\x5b\xbd\x64\xaf\xd9\x9b\x56\xde\x68\x92\x73\x4f\x04\xef\xef\xef\x4e\x0c\x5d\x3d\xd0\x7a\xef\x08\x85\x4b\x9c\x1d\xa5\xab\x30\x0c\x28\x8f\x80\x10\xff\x9d\x70\x3f\x44\x0d\x60\xb0\xf3\x98\x83\xef\xea\x74\xc9\x98\xef\x29\xb8\x3e\xf6\x34\xe0\xd9\x2c\xf0\xf6\x97\xb6\xfd\x3c\x0f\x41\x21\xae\x51\x27\xaa\x85\xff\x01\x7c\x82\x9d\x2c\x4b\x66\x5e\x2c\x1c\x23\x4c\xa7\x6a\x18\x26\x2a\xc0\x85\xa7\xfc\x10\xf9\x3a\x34\xaa\xaf\x16\x41\x33\x31\x7d\xb1\xf1\x0b\xbf\xa7\x88\xf8\x76\xfe\x5f\x68\x32\x7f\x6d\x0b\x5b\x81\xfd\x6f\xa7\x72\xcf\x56\x7d\x11\xa1\xba\xb6\x74\x13\xa6\x9b\x97\x30\x5b\x6d\xc2\x78\xbd\x79\x72\x79\xf0\xbb\x2e\xa1\xca\x09\xb3\x37\x9c\xcc\xde\x9d\xaf\x3d\xe2\xfb\x4f\x0d\x62\xb2\xad\x7a\x84\x18\x7c\xc9\x1b\xb4\xb4\x7c\x18\x6c\x21\xf6\xbd\x10\xce\x40\x3d\xa5\xff\x5c\xb1\xfc\x70\x5d\x96\x25\xee\x99\x62\xf3\x4d\xcd\xac\x04\x4d\x2e\x6e\x23\xc1\x93\x61\x23\x8f\x02\x4a\x19\xcb\x66\x0e\x26\x32\x0c\xbb\x84\x7a\x74\x5d\x56\x40\xc7\xdd\xff\x28\x7d\xd6\x8e\x4f\x1e\x44\xcb\xbb\x9e\x40\xd4\x6c\x91\x94\x50\xba\xfb\x83\xcc\x25\xa9\x4d\x69\x37\xbb\xcf\xcf\xcf\x8b\x9d\xb2\xc5\x29\x9c\x93\x6d\x2a\x0d\x8f\x6b\x86\xa6\xe5\xde\xbf\x89\x7e\xea\xf1\x7e\xc8\x39\xc0\x45\x0a\x3f\x27\x81\x98\xb9\x2a\xc5\xd8\x5e\x50\x8c\x5e\x16\x6f\x60\x6d\x55\x30\xab\x64\x71\x47\x8b\x1f\x77\x1a\x5d\x83\xf8\xd1\x35\xb8\xd8\x78\x95\x25\xfb\x5c\x3f\x4d\x99\x1e\x7a\xd4\xd8\xf4\x2a\x53\xf6\xf4\x66\xda\xf4\xd3\xf3\x12\x88\xe7\x1b\xa6\x78\x38\xcf\x44\x63\x19\x17\xa7\xb0\x36\xf8\x30\x9e\x81\x61\x25\x9a\x5d\xbb\xf3\x9d\xf8\xb8\xdb\x83\x7c\x25\x66\x7e\x4f\x70\xff\xb6\x10\x7e\xa7\x43\x9c\x51\x89\x2f\x3c\xc4\x1b\x3f\x9d\xb7\xa7\xf6\xb6\x71\xb6\xf1\xeb\x9e\x45\x95\x5c\xfc\x2c\x60\xdb\x11\x7c\x62\xb0\x18\x2b\xa5\xa8\x24\x98\xd7\xba\x32\x53\x64\xeb\x75\xa8\x7f\xd2\xa7\xc2\x58\x19\x9e\x03\x5b\x50\x55\xa2\x04\x49\x87\xee\x42\x0c\x03\xce\x16\x55\xd3\x76\xe5\x53\xb5\x8d\xa2\xd9\xe2\x46\x63\xb7\x64\xd2\x84\x76\xa0\x46\xf8\x9a\xcb\xce\xc2\x34\x2a\x5e\x93\x14\xea\x6b\x00\x8c\xf6\x4d\x8e\xe1\x8e\x15\xbe\x2f\x88\xce\x07\xc4\xa0\x30\xde\x52\x3c\xaa\x9c\x29\x68\x8b\xef\x6d\x40\x7d\xbd\xa6\xb7\x2d\x9d\x4e\x98\xda\x1f\x75\xed\x6a\x39\x7e\x7b\x5a\x56\xe3\xfa\x69\xd2\xc4\xad\x54\x38\xb5\x1a\x57\xe3\x15\x26\xf4\xbe\xcb\x68\x51\x0c\xb3\xd6\x56\xbb\xe4\x43\x5e\x8c\xeb\x21\x3e\xd8\xb8\x1c\x55\x50\x5c\x7b\x96\xf0\xd5\xe9\x0e\xf6\x9a\xc3\xd9\x5c\x36\x0f\x7d\x89\x86\x71\x68\x4c\x5f\x23\xc3\xe4\x7b\x3b\x7d\xb3\xd4\x15\x1c\x9e\x6f\x35\xa0\x7b\xd4\x70\x7f\xd1\x10\xd1\xdc\xca\xc7\x4e\x21\x7a\xa4\x1f\x08\xa6\xfd\x29\x8f\xee\x73\x5e\xb3\x7a\x0d\xf5\x4f\xfc\xba\xf6\xfb\x8d\x61\xce\x25\x14\x86\xac\xaf\x75\x4b\x18\x23\xb5\x71\xfb\x3f\xe0\x56\x7c\xe6\x9b\x7d\xf9\x3c\x90\x04\xc9\x4c\xd3\x3f\x2c\xdb\x2b\xe9\xb8\x62\x2a\xa4\x75\xf5\xb1\xd6\xfa\x70\x64\x36\x09\xb9\xd7\x35\x37\xed\xd3\xa8\x91\xba\x53\xae\xdd\x33\x14\x8f\x0a\xd6\x56\x4c\xf4\xcb\x7a\xbb\x97\xf1\x75\x42\xf8\xaf\xd8\xd7\x05\x07\xac\x1a\x2e\x52\xb0\xdb\xf0\x1f\xc9\xb6\xe0\xa1\x93\x37\x84\x00\xf7\xe2\x8d\xdf\x13\x4e\xe9\xe3\x23\xbc\xde\x3c\x59\xda\xc1\x7d\xc8\x4c\x67\x1c\x99\x0a\xb8\xef\x89\x62\x42\x4a\xe3\x03\x5f\xc5\x02\x61\xca\x9b\xf6\xf2\xa6\x52\x5e\xeb\xb2\x79\x6c\xbf\x62\x98\xcb\xeb\x9e\xac\x8c\xf5\x73\x3f\xcf\x48\xeb\x83\x8b\x69\xab\x63\x77\xce\xa3\x9e\x2a\x94\x9d\x46\xfb\x13\xaa\x60\x50\xa1\x8f\x9b\x22\x12\xc6\xdd\x1b\xba\x18\x3e\xae\xcd\x45\xae\xe2\x1d\x69\x78\x60\xcb\x7c\x09\x42\x7f\x39\xa0\xf9\xf2\xbe\x9a\x70\xbb\x1a\x94\xf6\x7c\xc7\xea\xa2\x96\xef\xce\x81\xbc\x17\xae\x09\xbf\x31\xef\x7f\x1b\xd0\x46\x39\x79\x90\x37\x4a\xee\x7f\x0a\xc1\xe5\x6b\xe6\x6c\xd9\xab\xbe\x4a\x17\x79\x57\x60\xad\x1a\x57\x7c\x81\xf2\xff\x00\x00\x00\xff\xff\x04\x28\x3d\x62\xbe\x20\x00\x00") + +func uiCssLibsNvd3171NvD3MinCssBytes() ([]byte, error) { + return bindataRead( + _uiCssLibsNvd3171NvD3MinCss, + "ui/css/libs/nvd3/1.7.1/nv.d3.min.css", + ) +} + +func uiCssLibsNvd3171NvD3MinCss() (*asset, error) { + bytes, err := uiCssLibsNvd3171NvD3MinCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/libs/nvd3/1.7.1/nv.d3.min.css", size: 8382, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiCssRest_explorerCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x54\xdd\x6f\xdb\x36\x10\x7f\xe7\x5f\x71\xc8\x30\xa4\x0d\xfc\x91\xb6\xdb\x8b\x02\x0c\x53\xdc\x0c\x13\x16\x38\x83\xe5\xac\xe8\x23\x45\x9d\x24\xa2\x14\x8f\x23\xa9\xc8\xc6\xb0\xff\x7d\x47\xc9\xd9\x9a\x64\x5f\xf5\x93\x8f\xbc\xbb\xdf\xc7\x1d\xb5\xbe\xb8\x10\x1b\x72\x47\xaf\xdb\x2e\xc2\xdb\xcb\x37\xdf\xc0\xbe\x43\xd8\x90\xfa\xe4\x49\xaa\x0e\xf2\x21\x76\xe4\xc3\x4a\x88\x5b\xad\xd0\x06\xac\x61\xb0\x35\x7a\x88\x9c\x96\x3b\x4e\x41\x38\xdd\x2c\xe0\x17\xf4\x41\x93\x85\xb7\xab\x4b\x78\x95\x12\xce\x4e\x57\x67\xaf\xaf\xc4\x91\x06\xe8\xe5\x11\x2c\x45\x18\x02\x72\x03\x1d\xa0\xd1\x06\x01\x0f\x0a\x5d\x04\x6d\x41\x51\xef\x8c\x96\x56\x21\x8c\x3a\x76\x13\xc8\xa9\xc5\x4a\x7c\x3c\x35\xa0\x2a\x4a\xce\x95\x9c\xed\x38\x6a\x3e\xcf\x02\x19\x85\x00\xfe\x75\x31\xba\x6c\xbd\x1e\xc7\x71\x25\x27\x96\x2b\xf2\xed\xda\xcc\x59\x61\x7d\x5b\x6c\x6e\xb6\xe5\xcd\x92\x99\x0a\x71\x6f\x0d\x86\x00\x1e\x7f\x1d\xb4\x67\x81\xd5\x11\xa4\x63\x1e\x4a\x56\xcc\xce\xc8\x11\xc8\x83\x6c\x3d\xf2\x5d\xa4\xc4\x73\xf4\x3a\x6a\xdb\x2e\x20\x50\x13\x47\xe9\x51\xd4\x3a\x44\xaf\xab\x21\x3e\x31\xe8\x91\x15\x2b\xfd\x3c\x81\x2d\x92\x16\xce\xf2\x12\x8a\xf2\x0c\xae\xf3\xb2\x28\x17\xe2\x43\xb1\xff\xf1\xee\x7e\x0f\x1f\xf2\xdd\x2e\xdf\xee\x8b\x9b\x12\xee\x76\xb0\xb9\xdb\xbe\x2f\xf6\xc5\xdd\x96\xa3\x1f\x20\xdf\x7e\x84\x9f\x8a\xed\xfb\x05\x20\xdb\xc3\x20\x78\x70\x3e\x71\x27\x2f\x74\xb2\x0e\xeb\x15\x94\x88\x4f\xc0\x1b\x9a\xc9\x04\x87\x4a\x37\x5a\xb1\x22\xdb\x0e\xb2\x45\x68\xe9\x01\xbd\x65\x21\xc2\xa1\xef\x75\x48\xc3\x0b\x4c\xad\x06\xa3\x7b\x1d\x65\x9c\xe2\x17\x72\xfe\x82\xc8\xef\x99\xf3\xae\x9c\xc6\x28\x12\x8e\x95\x3d\x86\x34\x13\x45\x76\x96\x3b\x2f\xcf\xbc\x46\x19\xe4\xb6\xf6\x38\xc2\x35\xd9\x07\xe4\x04\x84\x57\x8c\x76\xac\x18\xe6\xfb\xb6\x97\xda\xac\x78\x03\x5e\x8b\x8b\xb5\x58\xb1\xac\x78\x73\x70\x86\x3c\xfa\xc5\xd3\x70\x93\x7a\x93\x09\xcf\x8e\x6f\xa9\x85\xdf\x78\xf8\x1d\xa6\x65\xce\xe0\xcd\xe5\xe5\xd7\x57\xe2\xf7\x2f\xaa\x6d\x0c\x49\x2e\x35\xd8\xc4\x2b\x0e\x9d\xac\x6b\xb6\x27\xf5\x72\x07\x7e\x1e\xee\x90\x4e\x47\x5d\xc7\x2e\x83\x6f\xff\xa5\xfd\xd4\xac\x92\xea\x53\xeb\x89\xfd\x5b\x2a\x32\x49\xfe\x57\x4d\xd3\xfc\x63\xcd\x52\xcd\x7f\xa6\xda\x5e\xfa\x56\xdb\x65\x45\x31\x52\x9f\x9d\xa0\xff\xab\xf0\x3b\xe8\xde\xcd\x32\xf8\x60\x39\x9e\x7c\xb0\xe4\x7b\x69\x12\xf1\x88\x87\xb8\x8c\x5e\xda\xc0\xb3\xe2\xae\x83\xe3\xb9\x2b\x19\xf0\xea\x25\xe2\xbb\xff\x03\xa8\xad\x1b\xe2\x9f\x88\x19\xc7\xbc\x94\x3a\xbe\x28\x7c\xb4\xd7\x51\xd0\x69\xa9\x32\x7e\x6c\x86\xd7\xeb\x61\x42\x9e\xd8\x36\xb2\xd7\xe6\x98\xc1\x79\x49\x83\x57\xe9\x13\x54\x23\xfc\xec\xe9\x7c\x01\xe7\x1b\x3e\xd2\xbc\x83\x5b\x1c\x39\x3c\x45\x0b\xe8\xc9\x52\xe0\xc7\x8d\x7f\x87\xb7\x54\x06\xa5\xbf\x1e\x58\x8d\x7d\x86\x2d\xab\x40\x86\x1f\x62\xc2\xf6\xb3\x47\x8f\xa3\x8d\xe4\xe6\x61\xa7\x96\x7f\x04\x00\x00\xff\xff\x29\xec\xd5\x5f\x1d\x05\x00\x00") + +func uiCssRest_explorerCssBytes() ([]byte, error) { + return bindataRead( + _uiCssRest_explorerCss, + "ui/css/rest_explorer.css", + ) +} + +func uiCssRest_explorerCss() (*asset, error) { + bytes, err := uiCssRest_explorerCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/rest_explorer.css", size: 1309, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x55\x51\x93\x9b\x36\x10\x7e\xe7\x57\x6c\xe8\x83\x93\x89\x0d\xbe\x5c\x3a\x6d\xaf\xf6\xb5\xc4\x71\x1b\x4f\x53\xae\x63\x7c\xcd\xe4\xa9\x23\xc3\x02\x4a\x84\x44\x25\x61\x1f\x33\xfd\xf1\x5d\x01\xbe\xf8\x5a\x2e\x93\xf8\xc5\x48\xfb\xed\xee\xb7\xbb\xdf\xc2\xe2\xc9\x6c\xe6\xad\x54\xdd\x6a\x5e\x94\x16\x5e\xcc\x2f\x5e\xc2\xae\x44\x58\xa9\xf4\xa3\x56\x2c\x2d\x21\x6a\x6c\xa9\xb4\x09\x3c\xef\x2d\x4f\x51\x1a\xcc\xa0\x91\x19\x6a\xb0\x04\x8b\x6a\x82\x20\x0c\x96\x29\xfc\x89\xda\x70\x25\xe1\x45\x30\x87\xa7\x0e\xe0\x0f\x26\xff\xd9\x8f\x5e\xab\x1a\xa8\x58\x0b\x52\x59\x68\x0c\x52\x00\x6e\x20\xe7\x02\x01\xef\x52\xac\x2d\x70\x09\xa9\xaa\x6a\xc1\x99\x4c\x11\x8e\xdc\x96\x5d\x92\x21\x44\xe0\xbd\x1f\x02\xa8\xbd\x65\x84\x65\x84\xae\xe9\x94\x9f\xa3\x80\x59\xcf\x03\xfa\x95\xd6\xd6\x57\x61\x78\x3c\x1e\x03\xd6\xb1\x0c\x94\x2e\x42\xd1\xa3\x4c\xf8\x76\xb3\x5a\xc7\xc9\x7a\x46\x4c\x3d\xef\x56\x0a\x34\x06\x34\xfe\xdd\x70\x4d\x05\xee\x5b\x60\x35\xf1\x48\xd9\x9e\xd8\x09\x76\x04\xa5\x81\x15\x1a\xc9\x66\x95\xe3\x79\xd4\xdc\x72\x59\x4c\xc1\xa8\xdc\x1e\x99\x46\x2f\xe3\xc6\x6a\xbe\x6f\xec\x83\x06\x9d\x58\x51\xa5\xe7\x00\x6a\x11\x93\xe0\x47\x09\x6c\x12\x1f\x5e\x45\xc9\x26\x99\x7a\xef\x36\xbb\x37\x37\xb7\x3b\x78\x17\x6d\xb7\x51\xbc\xdb\xac\x13\xb8\xd9\xc2\xea\x26\x7e\xbd\xd9\x6d\x6e\x62\x3a\xfd\x02\x51\xfc\x1e\x7e\xdb\xc4\xaf\xa7\x80\xd4\x1e\x4a\x82\x77\xb5\x76\xdc\x95\xf6\xb8\x6b\x1d\x66\x01\x24\x88\x0f\x92\xe7\xaa\x27\x63\x6a\x4c\x79\xce\x53\xaa\x48\x16\x0d\x2b\x10\x0a\x75\x40\x2d\xa9\x10\xaf\x46\x5d\x71\xe3\x86\x67\x88\x5a\x06\x82\x57\xdc\x32\xdb\x9d\xff\x57\xce\xa7\x14\xd1\x2d\x71\xde\x26\xdd\x18\x3d\x97\x47\xb2\x0a\x8d\x9b\x49\xaa\x64\x5f\x6e\x2f\x9e\x5e\x46\x57\x10\xc9\x4c\xe3\x11\x5e\x29\x79\x40\x02\x20\x3c\xa5\x6c\xed\x9e\xd2\xfc\x5c\x54\x8c\x8b\x80\x14\xf0\xcc\x9b\xcd\xae\xbd\xc5\x93\x4c\xa5\xb6\xad\x91\x46\x59\x09\x3a\xf7\x7f\x00\x8b\x12\x59\x76\xdd\x0d\x79\x51\xa1\x25\x19\x94\x4c\x1b\xb4\x4b\xbf\xb1\xf9\xec\x7b\x7f\x30\x09\x2e\x3f\x42\xa9\x31\x5f\x4e\x9c\x16\x0c\x89\x21\x27\x4e\x26\x28\x94\x2a\x04\xb2\x9a\x1b\x97\x2c\x4c\x8d\xf9\x29\x67\x15\x17\xed\x32\x51\x8d\x4e\xf1\x79\xc2\xa4\x79\xfe\x87\x56\x57\x2f\xe7\xf3\xe9\x0f\xf3\xf9\x3f\xc3\xfd\x4a\x65\xe8\xee\x27\xa4\x14\xb1\x9c\x18\xdb\x92\x6c\x4a\x44\x3b\x01\xc7\x73\x39\xb1\x78\x67\x5d\xbc\xc9\x39\x05\x87\xf5\x3f\x61\xfd\x9e\x93\xef\x70\x24\xc7\xbd\x09\xe5\x21\xbb\x0c\x2f\x82\xef\x82\x0b\x7a\x0c\xb2\xcb\xa0\xe2\x32\x20\xab\xff\xa5\x51\x48\xab\x5f\x85\x27\xc1\xd8\xbf\x48\x38\x42\x69\xd4\x5f\xe5\x59\x68\x56\x97\xe7\x1e\x26\xd5\x9c\x36\xd7\xe8\x94\x10\x1f\x86\x82\xa8\x9c\xcb\xe0\x32\xf8\x36\x1c\x6a\xf9\x40\xf0\x45\xd8\x43\x3f\xe7\x37\xda\x88\x2f\x75\x26\xb9\x96\x9a\x0b\x3a\xce\x03\x5a\xea\xd3\xf9\xb1\x18\x96\x5b\x81\xd7\xf7\xaf\xb9\x45\xd8\x5f\x38\x79\x85\x27\x7d\x2d\xf6\x2a\x6b\x07\xbc\xbb\xa3\x25\x48\x05\x33\x66\xe9\x53\xc7\x63\x76\x18\x9a\x40\x56\x36\x34\xe9\x9b\xd0\x7f\x08\x99\x75\x2d\x1d\x9e\x4b\x55\x61\x4c\xfb\xe1\x9f\xe7\x65\x23\x41\x2a\x25\x39\xed\xcd\x58\x2c\xff\xfa\xf7\xde\x38\xee\xe9\x46\x3b\x3b\x8d\x76\xdc\x7f\xbb\x4e\x76\xb0\x1e\x20\xe3\x51\x24\x09\xdd\x8c\x7b\xc7\xce\x34\xee\x65\x88\xd5\x63\x6e\x49\x67\x1b\xf7\xeb\x44\x35\xee\xf6\xab\x33\xdd\x7b\xf5\x93\x41\x3d\x9c\x32\x7e\x00\x9e\x2d\x7d\xad\x94\xbd\x77\xcf\x1b\x21\xde\xa0\xfb\x98\xad\x68\xd9\xe9\x33\x41\x6d\xa0\xd9\x13\xf6\x11\xf1\xb8\xe5\xf9\xaf\x3e\x16\x61\x3f\x79\x4a\xd8\xbd\x73\xfe\x0d\x00\x00\xff\xff\xee\xd4\x3d\x5f\x26\x07\x00\x00") + +func uiIndexHtmlBytes() ([]byte, error) { + return bindataRead( + _uiIndexHtml, + "ui/index.html", + ) +} + +func uiIndexHtml() (*asset, error) { + bytes, err := uiIndexHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/index.html", size: 1830, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsAppJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\x3d\x7f\x73\xdb\x36\xb2\x7f\x5f\x3f\x05\xaa\x99\x9c\xa9\x8b\x4c\xd9\xed\xdc\xcd\x7b\xf2\xb9\x77\x6e\xec\xa6\xbe\x4b\xec\x3c\xdb\xc9\xbd\x8e\xc7\xe3\xa1\x45\x58\x62\x4b\x91\x2a\x49\xf9\xc7\xf5\xfc\xdd\xdf\x2e\x7e\x90\x00\x08\x90\x94\x6c\x39\x69\x5e\x38\x99\x48\x02\x17\x8b\xc5\x62\xb1\xd8\x5d\x00\xeb\xe1\x90\xbc\xa6\x09\xcd\x82\x82\x86\xe4\xea\x9e\x14\xf9\xd8\xff\x0a\x0a\xf3\x74\x91\x8d\xe9\x88\x8c\xd3\xf1\x2f\x59\x1a\x8c\xa7\xc3\x8c\xf2\xb2\xe1\x22\x1f\x16\xf9\xd0\xf7\x19\xdc\xfe\x31\x39\x3a\x3e\x23\x07\xfb\x87\x67\x5f\xc3\x6f\x2c\x7a\x95\xce\xef\xb3\x68\x32\x2d\xc8\x37\x5b\xdb\x7f\x26\x67\x53\x0a\x45\x02\x0b\xd9\x5b\x14\xd3\x34\xcb\x7d\x01\xfb\x26\x1a\xd3\x24\x87\xa6\x17\x49\x48\x33\x52\x00\xec\xde\x1c\xe0\xa8\x7c\x33\x20\x1f\x68\x96\x47\x69\x42\xbe\xf1\xb7\x88\x87\x00\x3d\xf1\xaa\xd7\xdf\x41\x14\xf7\xe9\x82\xcc\x82\x7b\x92\xa4\x05\x59\xe4\x14\x70\x44\x39\xb9\x8e\x62\x4a\xe8\xdd\x98\xce\x0b\x12\x25\xd0\x8b\xd9\x3c\x8e\x82\x64\x4c\xc9\x6d\x54\x4c\x59\x3b\x02\x0b\xeb\xc5\x4f\x02\x47\x7a\x55\x04\x00\x1e\x40\x85\x39\xfc\xba\x56\x01\x49\x50\x08\xa2\xf1\x99\x16\xc5\x7c\x34\x1c\xde\xde\xde\xfa\x01\x23\xd8\x4f\xb3\xc9\x30\xe6\xa0\xf9\xf0\xcd\xe1\xab\x83\xa3\xd3\x83\x4d\x20\x5a\x54\x7a\x9f\xc4\x34\xcf\x49\x46\x7f\x5d\x44\x19\xe7\x75\x30\x07\xa2\xc6\xc1\x15\x90\x1a\x07\xb7\x24\xcd\x48\x30\xc9\x28\xbc\x2b\x52\x24\xfa\x36\x8b\x8a\x28\x99\x0c\x60\x2c\xae\x8b\xdb\x20\xa3\x88\x26\x8c\xf2\x22\x8b\xae\x16\x85\xc6\x33\x49\x22\xf4\x5c\x05\x00\xae\x05\x09\xe9\xed\x9d\x92\xc3\xd3\x1e\xf9\x7e\xef\xf4\xf0\x74\x80\x48\xfe\x75\x78\xf6\xe3\xf1\xfb\x33\xf2\xaf\xbd\x93\x93\xbd\xa3\xb3\xc3\x83\x53\x72\x7c\x42\x5e\x1d\x1f\xc1\x28\x1e\x1e\x1f\xc1\xaf\x1f\xc8\xde\xd1\x4f\xe4\x9f\x87\x47\xfb\x03\x42\x81\x63\xd0\x0e\xbd\x9b\x67\xd8\x83\x34\x43\x14\x11\x32\x94\x86\x3e\x39\xa5\x54\x23\xe1\x3a\xe5\x24\xe5\x73\x3a\x8e\xae\xa3\x31\x74\x2d\x99\x2c\x82\x09\x25\x93\xf4\x86\x66\x09\xf4\x08\xeb\xcf\x69\x36\x8b\x72\x1c\xd8\x1c\x68\x0c\x49\x1c\xcd\xa2\x22\x28\xd8\xef\x5a\xbf\xaa\x56\xf6\xde\x03\xe5\x27\xa7\x6c\x7c\x11\x0d\xb6\x96\x04\x33\x9a\xe3\x60\x8d\xd3\x84\x77\x5d\x11\x30\x21\x6f\x23\xf2\x7d\x16\xcc\xc8\xeb\x6c\x91\xd0\x28\x23\xde\x15\xfc\xf2\x27\xfc\xd7\xdf\x27\xb3\x20\x8a\x7d\x90\x91\x3e\xd4\xf8\xc3\x1f\x70\x78\xf7\x92\x30\xa3\xb7\xe4\xfb\x34\xb9\xa1\x80\x94\x12\x0f\x88\xbc\xbf\x02\xea\x6c\xd0\x6f\x83\xa2\x20\x67\x59\x30\xbe\x27\xde\x0c\xbe\xff\xbd\x9c\x35\x71\x70\x95\x4b\xd8\xaf\x6e\x82\x8c\x4c\x69\x00\x9d\xdb\xa7\xf9\x38\x8b\xe6\xd8\x5d\xb2\x4b\x36\xce\x4a\x91\xc5\x01\xa4\x79\x34\x49\xb8\x14\x04\x61\xc8\xba\xcd\x6b\x61\x09\xfe\x2a\xd2\xb9\x94\x4d\x40\x7d\x15\x21\xf0\xcf\x1c\x81\xbf\xb1\xa3\xce\xde\x59\x1a\xd2\x18\xa6\x6b\x04\x1c\xa2\x59\x44\x73\xbf\xc8\xe1\xfd\x90\xfc\x35\xa3\xd7\x34\xa3\x38\x21\xe6\x41\x31\xdd\xed\xf9\xfe\xb0\xb8\x9f\xc3\xe0\xe4\x43\x18\x88\x69\x16\xc5\x3f\x97\xdf\xfc\x10\xaa\xf5\xc8\xf0\xbb\x8a\xa1\xa3\x4e\x7d\xc6\x0e\xbf\x65\x24\xec\x7c\xe5\x5d\x2f\x92\x31\xeb\xb0\xc7\x8b\xfa\xe4\xb7\xaf\x90\x79\x0c\x88\xc2\xc0\x8d\x01\x0a\x0b\x54\x48\x5e\x2e\x41\x8d\xb7\xff\xb3\xa0\xd9\xfd\xde\x04\xe6\xcc\x24\x80\x31\x57\xa1\xf0\x31\x5e\x9f\x9b\xbf\x7b\x7b\x1f\x5e\xf7\x2e\x80\xff\xdb\xf8\x1f\xfb\xb5\xb3\x34\x82\xcb\x93\xbd\xb3\x03\x86\xe5\x1b\x89\x85\x17\x55\xa8\x1e\xfa\xb2\x1f\xbe\x81\x81\xfc\xe7\x3f\xc4\xf9\x6e\x97\xfc\xf6\xd0\xef\x57\x68\x90\x4f\x75\x18\x47\xed\xaa\x5a\xc9\xae\x5f\x11\xc2\xcb\x8b\x20\x2b\x60\x4e\x27\xe1\x00\xb4\x0d\x2a\x17\x26\x17\x26\xef\xb0\xb1\x45\x16\x63\x8f\x50\xd9\xb3\xba\x06\x77\x10\x24\x0c\x8a\x00\x09\xd5\x5e\xe0\xc3\x9a\xb9\x4c\x82\x24\x85\xa9\xc7\x7e\xf8\x13\x5a\x9c\x81\x1c\x7a\x7d\xf2\x27\xb2\xed\x6f\xd1\xbf\x0c\x6a\xb5\x80\x2a\x59\x07\xbe\x76\xa9\x81\x84\x01\xf9\x23\xd1\x0d\x7f\x16\xcc\x15\x01\xa9\x89\x84\x7c\x32\x5a\x2c\xb2\xc4\xf1\x12\x1f\xd4\x29\x23\x92\xd5\x1b\x94\x4f\x50\xb2\x7a\xc4\xf8\x68\x05\x7c\xd8\xa9\x15\x3f\xf4\x75\x50\x03\x44\x10\x36\xf3\x71\x9d\xa0\x79\xe1\xfd\x86\xc3\x30\xc2\xff\x06\x64\x46\x61\xea\x85\x23\xd2\x7b\x77\x7c\x7a\xd6\x83\x41\xbc\x2b\x60\xfe\x15\x23\x58\xfa\x92\x7f\xe4\x69\x72\x90\x65\xa0\xea\x06\x6c\x54\x46\x7c\x6c\x1e\xfa\x35\x0a\x7c\xd0\x1b\x89\xc2\xa4\xd0\xc6\xa4\xe8\x9a\x78\x5f\x87\x40\x45\xbe\x88\x8b\x9a\x74\xc8\xa7\x04\x00\x19\x38\xbf\xb0\x74\xb6\x56\x52\xd6\xf0\x41\x73\x1f\x80\xb2\xe8\x32\x5a\x8c\x98\xcc\xc7\x0e\xcd\xd3\x28\x71\xd3\xc3\x38\xa8\xc0\x39\xc8\xb2\x93\xf6\xd0\xaf\x43\x8a\xe1\x08\xf5\x37\x2a\xe4\x83\x36\x3f\x4f\x28\xac\x57\x05\x9b\x8b\xd0\xb6\xd2\x37\x93\xe2\xf2\x8d\x52\xc3\xbb\x8d\x92\x30\xbd\xdd\x5f\x64\x6c\x1d\x1c\x90\x4b\x10\x2c\x5b\x57\xb1\x25\x2e\xef\x8e\x0e\xe2\xaa\xe8\x21\xd4\x65\x84\x8a\x69\x07\x3f\xff\x4a\x82\x6c\xb2\x98\x41\x63\xb9\x1f\xd3\x64\x52\x4c\xb1\xf8\xe5\x4b\x17\x2f\x79\x03\xe7\x50\x73\x93\xab\xb6\xb2\x3a\x94\x75\x1a\x6b\x34\xc4\x7c\xbd\x4f\x80\x46\x2f\xa8\xe3\x61\xb5\xb0\xe7\x00\x8b\x1f\x2e\x88\x92\x01\xfc\x8b\x31\x42\xda\x2f\x85\xc7\xfe\x3c\x4b\x8b\x14\x56\x3a\xea\xff\x2a\x46\xc9\x3d\x48\x92\xd7\xa0\x8b\x50\x0f\x01\x6c\x02\x36\xc1\x3e\x98\xca\x9e\x45\x56\xd8\xa8\xa0\xa6\x33\x61\x45\x75\x45\x9d\x6d\xda\x78\xe3\x16\x3f\x45\x73\x23\x82\x81\x24\x68\x50\x31\x6b\xa0\x71\xc5\x40\x65\xd7\x31\x0a\x57\xb4\xb5\x4a\xa9\x2c\x17\x17\x5d\xac\xad\x15\xcb\xd5\xe9\x6d\x90\x80\xb1\x97\x75\x14\x7f\xb5\x8a\x77\xc9\x3a\x6a\x1b\x05\xde\x39\x39\x62\xfc\x8b\x4b\x30\xb8\x82\xc1\x01\x58\xc4\xb1\x0b\x88\xa2\xaa\x6c\x81\xe1\x88\x0e\xe6\x29\xb8\x2d\xbb\x64\xcb\x05\x96\x2e\x0a\x18\x9a\x24\x04\xdb\xc9\x8a\xf0\xa1\x6e\x53\x88\x0e\x2b\xc2\x08\xdf\xc6\x60\x5c\x1f\x6b\xb8\x9a\x25\x13\xb5\x62\x8d\x02\xd7\x6c\xc6\xe1\x61\x4e\x10\x45\xbf\x60\xd7\x52\xd3\x67\x2c\x81\x96\xbe\xe6\x9d\x40\xdb\xa4\x0e\xc4\x79\x52\x41\x59\x84\x56\xd2\x56\x36\xd7\xa4\xad\x8d\x21\x73\x37\x68\x6f\xa7\x42\x21\x07\xd4\xd9\xaf\x36\x04\x6d\xc3\xe8\xa2\x9a\xc9\xc7\xcb\x97\x9d\x57\x99\xa6\x99\xe9\x10\x8e\x9c\x96\x73\xaf\x12\x89\x5f\xdb\xe7\xc9\xaf\x8d\x6a\xc0\xd1\x58\x39\x16\xcd\xd2\xc7\x5a\xaa\x4b\xad\x8d\xcf\x42\xdf\xa8\x4c\x5b\x85\x30\x2a\x26\xe2\x3a\xe9\x62\x83\xb9\x12\x71\x42\xfc\xd6\x43\x1c\xc3\xbe\xda\x60\x5e\x43\xc7\x3a\x72\xcd\x3d\xd5\x98\x01\xd6\x59\xd7\xd8\xe6\x53\x83\xbd\xc6\x5a\x1d\xa9\xa2\xcb\x97\x66\xaf\xef\xb6\xbe\x19\x43\xc0\xbd\xc5\xae\xce\x3d\xa6\x88\x3a\x5b\xe0\x56\x12\x45\xe7\xb9\x6d\x8c\xf8\x06\x2e\x4d\x62\x61\x4f\x7d\x96\x6b\xa3\x57\x6f\xa6\xcb\xf2\xac\x8e\x68\xdb\xfa\x6c\x2c\xbc\xf6\xaa\xa5\x04\x68\xde\x82\x77\x37\xcd\x06\x24\x9d\xd7\x8d\x6a\x41\x07\xbc\xf7\x81\xfc\x62\x91\x93\xef\xc8\x37\x5b\x5b\xe4\x6f\xe4\x1f\xa7\xc7\x47\x3e\x46\x99\x92\x49\x74\x7d\x8f\x18\xb0\x5f\xf3\x34\xc9\xe9\x19\xf8\x24\x7d\x32\x22\x66\x99\x69\x30\x57\x3e\x31\xfa\xb0\x2c\x1e\xe0\xcb\x02\xe6\x14\xeb\x45\xd2\x17\xc6\x6a\xec\x8d\x02\x54\xbe\xd4\xa2\x96\x33\x68\x1a\x8d\xd5\xe1\x4c\xf0\xe8\xb1\x81\x8f\xe6\xaa\xe1\xb7\xf0\xaf\x1d\xdc\x16\x8f\x61\x15\x70\x7d\x7e\x55\x12\xad\x45\x4b\xaa\xe2\x15\x23\x26\x08\xfe\x26\x4a\xe8\xeb\x2c\x98\x2b\xca\x4d\xa9\x54\xbe\xb5\x85\x01\x5e\x61\x54\x2d\x8d\xe3\x36\x9b\x4e\x93\xb1\xaa\x92\x77\x33\x6b\x32\x4a\x2e\x59\xb8\x96\xaf\xdb\x0d\x73\xf5\x66\x06\x30\x37\xb3\x06\x88\xf1\x14\xcc\x63\x5c\xb9\x6f\x7c\xce\x65\x3f\x86\x5e\xbd\xc2\x52\xaf\xee\x04\xcb\xc7\xbf\x33\x3c\x61\x29\xf6\xa5\xf5\x0e\x63\x8a\xa3\x55\x04\xb3\x39\x8f\x4d\x90\x21\x0f\x46\xf4\x77\x6c\xde\x75\x89\xf8\xde\x81\x38\xf4\x6f\x82\x78\x41\x9b\x2b\x2f\x72\x7a\x98\x14\x14\xbd\xfb\xe8\x86\xbe\x5e\x44\xd0\x21\xe8\x8d\x57\x64\x0b\xda\x50\x2d\x9f\xa6\xb7\x6f\xe8\x04\xdc\x83\x2e\x90\x3f\xed\xdd\x45\x79\x17\xc0\xff\xed\x02\x78\x77\x3a\x0e\x62\x60\xd7\xb7\x8c\x5f\x7e\xce\x7e\xf5\x1d\x66\x17\x1b\xb1\x30\x0b\x6e\x99\xd4\x69\xcb\x13\x8d\x29\x7a\x99\x03\x12\xe5\x87\x49\x54\x44\x41\x1c\xfd\x9b\x86\x03\x16\xdc\x65\xca\xc5\xbd\x94\xb0\x65\x4a\xab\xd6\x04\x8d\x0f\x08\x4b\x10\x86\x8c\x08\xef\xb2\x12\xa3\x06\x63\xb1\xae\xeb\xd5\xd6\x39\x0e\xe0\xd9\x22\x0e\x4f\x28\x86\xb1\x41\x86\x02\x60\x43\x0b\x1d\x38\x13\xc0\x69\xc7\x38\x2a\x0d\xf7\x79\x50\xcd\x15\xb9\xa8\xb7\x77\x33\xe3\x2b\x66\xb9\x82\xb7\x35\x87\x8f\xd9\x9c\x03\x55\x19\xaf\xd1\x23\x6b\xad\x9c\x95\x4f\x6b\xa4\xad\xce\x0a\x98\x1d\xf9\x08\xe6\x49\x15\xc7\x71\x1b\x02\xe6\xf3\x0b\xbd\xc7\xaa\x18\xbe\xeb\x5e\x69\x9c\xc6\x68\x4d\x54\x3a\xcb\x67\x25\xb9\xc7\x11\x35\xd8\x21\xe6\x13\x64\x34\x00\x53\x06\x66\x4a\xf7\x3a\xd7\x51\x1c\x1f\xcf\x83\x71\x54\x00\xe9\xfe\x76\xb7\x8a\x0e\xbb\x46\x03\x69\x90\x62\xf6\xbe\xf1\x2d\xcc\xe3\x1c\xa6\xe2\xb8\x90\x13\xd2\x3d\xf5\xe5\x83\x03\xb6\x98\x79\x9a\x60\x75\xa8\x55\x64\x41\x92\x47\x28\x56\x20\x6d\xa1\x08\x86\x78\x7f\xde\xda\xea\x50\x17\x94\x4c\xfc\xa8\x89\xdb\x64\x1f\x32\x8c\xfe\x1d\x2a\x3f\xb7\xda\x2b\xa2\xf1\x2f\x3f\xb0\x1e\x97\xaa\x8f\x33\xc0\xdb\x78\x71\x38\x7a\xf1\x76\xf4\xe2\x74\xa3\xdf\xa2\x5f\xdf\x06\x77\x6f\xa3\xc4\xbb\x0e\xe2\x9c\x76\x32\x2f\x15\x49\x55\xbc\x44\x43\xeb\xb4\x1a\xfd\xf8\xb0\xf0\x96\x70\xac\x74\x05\xc0\x4a\x5d\x6e\x33\xea\x1e\x5e\xed\xbb\xb2\x5a\x1c\xe4\xdc\x7f\x6a\xf5\xf7\x55\x60\x68\x97\xd6\x9d\x2e\xf5\x91\xb6\x34\x4c\xaa\xae\x4e\xb6\x52\x8d\x31\xd5\xc2\xd3\x7a\x91\x95\xa9\xd3\x20\xef\xcc\x4b\xd5\xe8\x37\xd9\x08\x7c\xb2\x04\x90\x9a\xa9\xe0\x4a\x08\x9a\xc6\xb9\x88\xcb\x29\x88\x7b\x41\x27\x69\x76\xbf\xbd\xd5\xe0\x32\x56\x18\xcc\xa8\xb5\x59\xa9\xec\xd2\xb8\xb2\xd6\x98\xed\x64\xeb\xa1\x62\x17\xbd\x32\xc1\x9b\x02\x5e\xa5\x6d\xe9\x8f\x55\x43\x72\xec\xa0\xb2\xa4\xe9\x26\xa2\xb7\xde\xb8\xc8\xac\xc4\xb0\xf8\x12\xbc\x93\xe3\xe3\x5e\xf2\xe4\x86\x8a\xd7\x63\xf6\xe0\x04\x29\xe9\x0d\xc0\x1c\xcb\x8b\xfb\x18\x3c\x85\xde\x6d\x14\x16\xd3\x11\xa8\x9b\xf9\xdd\xce\x94\xe2\xb1\x85\xd1\xb7\xec\x47\x8f\x3c\x0c\xb0\x5e\x7e\x33\xf1\xab\x6a\x40\xf7\x75\x34\x01\x0f\x03\x5b\xaf\x2c\x98\x07\x9b\xa5\x53\x17\x4c\x30\x4b\x69\x2b\xa1\xd0\x4e\x2f\x4e\x03\xe6\x2f\xfa\x7e\xaf\x15\xb1\x8b\xdf\xc8\x41\xb4\x9a\xe1\xc3\x35\xee\xb0\x5c\x81\x89\xcb\x24\x75\x80\x6b\xa7\x2b\x02\xce\xcc\xef\xdf\x48\x39\x6b\x47\x64\x6b\xc0\xc3\xd2\x23\xfe\x61\x13\x65\x1c\x24\x07\x4e\x86\x77\xe6\xc3\x5b\xc0\x0b\xff\x2f\xe1\x53\xcf\xfc\xd2\xb9\xab\xfc\x96\x01\x60\xeb\x2a\x85\xac\xcf\x28\x81\xec\x8b\xe6\x5a\x97\x50\xca\xc6\x6a\x55\xa6\x6e\xd6\xaa\x90\xd5\x36\xad\xe6\xd5\x56\x7e\x9b\xe6\xd9\x5a\x8a\x15\xef\xb6\x7a\x6b\x00\xdb\xbc\xdc\x39\x38\xf8\xf9\x90\xc9\xe6\x27\xee\xde\xba\x2a\x58\xfd\xf4\xd2\x21\xde\x0b\x67\x51\xf2\x01\xc4\x57\x77\x88\xab\x62\xd5\x21\x56\xbc\x5b\x05\xb6\xe6\xd5\x22\xe8\x3b\xe0\x9b\xd5\x0f\xc6\x17\xeb\x70\x81\x9f\xc0\x01\xce\x17\x33\x19\xd6\x45\x15\xac\xc7\x47\xd4\x0d\x1a\x6f\x7b\x8b\xfc\x89\xfc\x05\xff\xdb\xde\xda\x82\x69\x6a\x80\x1a\x07\x05\xfc\xbd\x0f\xaf\x41\xdf\x8c\x33\x3f\x01\x38\x66\x50\x61\x63\x63\x0c\x51\xfa\xdb\x36\xe5\x53\x92\x84\x67\xc6\xd6\x46\x13\x3b\x44\xb1\x22\x61\x45\x3a\x99\xc4\xb4\xee\x5a\x36\x19\x26\xa5\xe7\x76\x7b\x02\xdd\xc2\x01\xf9\xda\x28\x72\x5b\x28\x9a\xe7\xc7\x81\xdb\xdc\x23\x0e\x3e\x13\x01\x5b\x19\xe0\x17\x58\x4a\xc6\xae\xe4\x87\x36\xac\x31\x9d\x5a\x97\x92\xb6\x52\xe3\x3a\x66\x11\x7e\x76\x59\x91\x4d\xc6\xf7\xac\x8c\x66\x5a\x44\x4b\xdb\x35\xec\x42\xf4\x32\x54\x31\xd8\x08\xa3\x2f\xe0\x8a\xb2\xfd\xe5\xe2\x50\xfc\xd2\xa7\xbe\x5c\x91\x5c\x7d\x46\xfb\x01\xc5\x7d\x6b\x75\x9b\x3e\x4d\x16\x09\x9a\x02\x9d\xc4\x78\x1c\xd3\x20\x2b\x49\xd5\xba\x61\xa3\x60\x4d\x06\x64\x77\xdb\xb1\x71\xc1\x46\x55\xfc\x94\x16\x23\xaa\xda\xab\x45\x51\xa4\x89\x1e\x8e\x96\x4f\x69\x51\xb6\x4e\xe1\x0a\x0b\x9e\x8e\x3a\x05\x70\x72\x96\x16\xe0\x66\xf4\x1e\x69\x01\x5a\x10\x33\x42\x3a\xe1\x55\xec\x5c\x66\x10\x20\xff\xc0\x90\x3c\xb7\xb6\x04\x50\x3f\x7e\x8b\x66\x26\xd7\x91\xfb\x74\x96\xf6\x1c\x51\x8e\xba\xb9\xe2\x9b\xb6\x14\xe7\x9b\x90\xff\xf5\xa2\xe1\xd6\x31\xfc\x1f\x25\xf3\x45\x71\x8e\x73\x64\x97\xb3\xed\x02\xad\x73\xa7\x5a\x62\x41\xa5\x91\xc2\x61\x77\x94\x25\x4d\xc6\x31\xf8\xf4\xc2\xc2\x57\x96\x12\xc7\x06\x53\xdf\x42\xea\x45\xbb\x68\x5b\x8d\x73\x98\x61\xf8\x12\xca\x39\x63\xd8\x0f\xb4\x03\x95\x9f\x86\xbd\x29\x57\xb9\xca\x28\xf2\x2b\x6b\xb5\x56\xa8\x58\x9a\xd5\x3b\x03\xd4\x6d\x69\xce\xd2\x24\xc2\xe5\xf9\x71\xb6\xe6\xd2\x96\xdd\x5b\xde\x6c\x7d\xab\x83\x97\x3f\xca\xba\x73\x68\xb0\x27\x52\x46\x0d\xba\x10\x64\x78\xca\xa6\xa0\xe8\x05\x79\x17\x07\x63\x3a\x4d\xe3\x90\x66\xa6\x71\xb3\xbc\xf8\x08\xa4\x95\x00\x69\x05\xa6\xcb\x22\x28\xd0\x84\x48\x16\x1a\x62\x54\xc1\xae\x26\x48\xc2\x43\xc0\x0d\xc5\x27\x3c\x8b\xdc\xf5\x6c\xb7\x49\x06\x5a\x96\x97\x7c\x73\x73\x1d\x0e\x94\xec\xe5\x6a\xe4\x76\x3e\x3c\x7d\x04\x25\xa7\xac\x13\xb5\x29\x52\xbd\x32\x67\x09\xbe\xc9\x3b\x1e\xd2\x62\xb0\xee\x73\x03\x97\xe2\x14\xb0\xd8\x8d\xff\xcd\x16\x78\xe6\x1b\x3e\x34\x1f\x77\x81\xe3\x23\xc2\xc8\x73\xc1\xea\x53\x82\x11\xa8\x98\x4d\xf5\xd3\x32\x2e\x93\xa0\xd9\xfb\x52\x4f\x41\x0b\x39\x61\x32\x93\x0f\x2d\x6b\x72\xb7\xa3\xbb\xaf\x0f\xdc\x27\x77\x5d\x5b\x82\xe6\x89\xdd\x96\x53\xb9\x72\xc7\x26\xb4\x9c\xb1\xcd\x6b\xc2\x60\xeb\x33\xf6\xf1\x10\x8d\x4e\x31\x37\x70\xe0\x98\x1b\x76\x19\x85\x5d\xdc\x20\x26\x11\x5e\xff\x9c\xe3\xb9\x20\xbb\xe2\xb0\x58\x27\xb7\xa4\x56\xb9\x71\x27\xcc\xed\x8a\x88\xf3\x98\x40\xff\x9b\x28\x2f\xca\x1d\x2e\x03\x7d\x73\x77\xbc\x0a\x81\x38\x34\x8b\x7d\xd9\xea\x83\xa6\x6b\xec\x89\x52\xef\xbc\x8e\x62\x93\x6c\x5f\xf8\x8b\x79\x88\x77\xae\x2e\x83\x82\xfc\x55\xf2\xb9\x2a\x6b\xdd\xc2\xb3\x76\xc6\x9f\x2f\xc0\xf3\x10\x63\xdc\xbc\xfb\x73\xa9\xcd\x34\x8d\xdd\xb9\xa2\x4b\x6c\x8f\x63\x27\xc5\xd1\xa0\x20\x74\x8e\x0a\xee\x38\x0e\x0f\xf0\x8a\x0e\x36\xd8\x08\xcd\x19\xa1\xdc\x92\x71\x56\x10\xb3\x4e\xc8\xbc\xc5\x52\x6e\x3e\x0b\x6b\x6a\x0e\x4b\xcb\xdd\x0e\x4f\xe1\x14\xb1\xab\xb4\x6a\x42\xd5\xdf\xb1\x83\xda\x62\xb6\x45\x09\x51\xc7\xb4\xf1\x74\x15\x6b\x4d\x1d\x33\x9b\x34\x9c\x5b\x45\x44\x95\x41\x44\xd3\x1a\x5d\x6e\x61\x98\x31\xb0\x9d\xb4\xee\x13\xb2\xa3\x9a\xe5\x0e\x2e\xb8\x37\xb0\xc4\xa4\x13\x0c\xf9\x4e\x74\x8d\x55\x7f\x83\xb7\xd1\x9a\xa6\x60\xd9\xa4\x40\x92\xa3\xd3\x40\x0d\x94\x9b\x2a\xca\x77\xc8\xa7\xf0\x34\xfa\x37\x1d\x10\x13\x6c\xdb\x15\x20\x79\xe4\xd8\x04\x37\x60\x4d\x04\x57\x51\x1c\x15\xfa\x72\xc8\x79\xd3\x34\x3c\x92\x9b\x75\x0d\x61\xf7\x9d\x59\x90\x2e\x66\xd7\xd4\x2e\xb3\x20\x99\xd0\xcb\x71\xba\x48\x0a\xa1\x2e\x1b\xb7\x3c\x7a\xdb\x5b\x5b\x2f\x96\x71\x72\x79\x63\xa2\x73\x31\xd5\xda\x1b\x12\x17\x25\x2c\xf6\xd8\x07\x8f\xee\x94\x9d\x5c\x03\xe1\x7c\x49\x7a\x66\xbb\x6d\x1c\xcd\x28\xbb\xb2\xc9\x0f\x51\x7f\x5e\xfc\xac\xba\xb6\x76\x86\x5e\xf2\x2d\xf2\x7d\xbe\x11\xa3\xb0\x11\xcf\x57\xb9\xb8\x88\x7a\xb9\x30\xae\x56\x18\x07\xb2\x5c\x1d\xac\xa6\x21\xc3\xc0\xf7\xeb\xc1\xd3\x93\x05\xcb\xad\x11\xfb\xb4\x00\xc9\xcb\x9f\x41\x00\xda\x0c\xa7\xca\x97\x0c\xa3\x1b\x74\x26\x8f\x52\x7e\xed\x0b\x6f\xea\x52\x18\xa2\x7b\x5a\x74\xd8\x40\xb4\xa1\x72\x06\x8e\x0a\x9c\x72\x4e\x00\x09\x94\x21\x04\x7e\x09\x91\xac\x53\x70\x19\x61\x69\xf0\x7a\x20\x21\x4c\x9a\x72\x2c\x00\x63\xb2\xd4\x81\x20\x39\xfd\x91\x2b\x06\xa5\x22\x46\x7c\xe7\x06\x0e\xfd\x68\x12\x2b\xb7\x8f\x45\x17\x1e\xba\xfb\x65\x21\x27\x38\x9f\x82\xd3\xb7\x3b\x64\x6d\x82\x57\x00\xfd\x10\xcd\x63\x8f\x2e\xb4\x1d\x63\x70\x0c\xd2\x05\x08\xfc\xc3\x40\xc2\x2c\x71\xb0\xa8\x07\xd8\x5a\x2c\x3a\x7c\x1e\xfa\x17\xee\xb3\x26\x17\x0d\xed\xd5\xc7\xec\x88\x16\xb7\x69\xf6\x0b\x0e\x4a\xc9\x78\xc6\x77\xe6\x0c\x04\x61\x88\x97\xc1\xfd\x84\x43\xf5\x97\xc3\xbd\xc7\x6b\xb7\xe0\x16\x9f\x4b\xe2\x3e\xc5\x6b\x52\xa0\x9e\x83\x42\x43\x5f\x53\x3c\x9e\x10\x22\x06\xcd\x2c\xee\xe5\xda\x79\xcf\x6d\xf5\x8e\xed\xa8\x96\xfd\x72\xed\x9c\xa0\xc6\xb5\xb0\x4a\xd1\xc4\x4b\x62\x7c\xc3\x2f\x93\xbb\x10\xd7\x35\xfd\xb2\xa3\x2b\x17\x66\x67\x13\xd6\xa5\x7b\xc5\x56\x98\x71\xa3\x35\x21\x2e\xc5\x29\xb6\x8f\x54\xcf\xcb\x0e\x31\x1e\xa5\xda\x3c\xa9\x96\xfc\xee\x2c\x03\xa3\xae\x61\x51\x5d\x92\x8e\x1f\x60\x09\xb8\x27\x15\x1d\x96\xde\x56\xed\x28\x7d\xb5\x36\x61\x29\xae\x85\xab\xad\x6b\x76\x69\x17\xe3\x8d\x79\xdc\xd6\xda\x72\x82\x55\xb6\x2e\xc0\xfe\x77\x13\xa8\xb6\x1e\xf3\xa3\x4e\xea\x19\xba\xde\x8b\x9f\x36\x5f\xcc\x36\x5f\x84\xe4\xc5\x8f\xfc\x30\x9d\xb9\x9a\xa9\x2b\xbc\x16\x09\x55\xe0\xaa\x28\x98\x2f\xc3\x5e\x06\xfc\xa7\x76\x37\xa2\xa2\xb8\xba\x1e\xa1\x94\x29\x37\x24\x34\xc8\xe5\x2e\x49\xf0\xa0\x3e\x8b\x67\xad\xe9\xf8\x88\x35\xcc\xba\xda\x26\x80\x32\x60\x46\x7c\x53\x1b\x1c\x2e\x59\x49\xc9\x14\x36\xd8\xca\x0e\xb2\x29\x0a\x9e\x91\x60\xa1\xeb\x49\x8f\xae\xa7\x3c\xea\xf4\xf0\xe0\xa4\x2d\x9c\xc1\x67\xf2\x32\x3b\xcf\x0d\xd8\xd1\xcc\x50\xb6\x94\xf9\xc5\xaa\x83\x1b\xdc\x37\x3f\x6d\x8c\xa5\x3e\x6e\x1f\xda\xb2\x07\x7d\xe9\xd8\x84\x36\xb4\x8c\x8b\x58\xa9\x6d\xac\xd3\xde\xb6\x55\x5d\x9f\xfb\xb9\xaf\x0d\xab\xad\x52\x29\x62\xce\xdd\xa3\xf2\x6d\xc7\x2d\x24\x97\x85\xbd\xcc\x26\x78\xd9\xe6\xd3\x6f\x3e\xb5\x58\xf9\xd3\x6f\xb8\x3b\x81\xda\x12\x43\x97\x2e\xd3\x1c\x40\x17\x71\xa3\xd5\x7c\x7c\xf5\x33\x1d\x17\x78\xd4\x2f\xf7\x2c\xf2\xca\x23\x59\x7d\x3f\x4f\xf1\x9e\x8e\x61\xca\xbb\xbd\x2a\xf5\x61\xce\x21\xdf\x5a\x70\x36\xd0\x1e\xee\xd5\xd9\x13\x47\xcc\x76\xe7\xd7\x09\x94\xe8\xb7\x38\x13\xda\xd5\x55\x98\xf9\x45\xb6\xc8\x61\x1d\xfb\x63\x72\x95\xcf\x77\xfe\x78\x85\xd7\x8a\xf9\xf7\x36\x67\x87\x55\xaf\x3c\x0c\xb1\xed\x00\x6e\x85\x46\x4e\x93\x97\xc1\x86\x6f\x64\x56\xe9\xd0\x6c\x8f\x27\xc9\x2a\xad\x74\x89\xc1\x30\xfa\xb1\xf1\xcd\xda\x4b\xf1\xd9\xd8\xc8\x85\xeb\x5e\x10\x3e\x66\x86\x94\xaa\xd2\xb2\x1b\xed\xd5\xf4\x71\x6d\x97\x96\x10\xa5\xec\x54\x25\xb8\x78\x9a\x65\xb6\x9c\x3c\xf8\xb6\x51\x6b\x7c\x04\xa5\xf1\x94\x3a\x43\xdb\x10\x12\xe2\xe5\xcf\x83\x2c\x00\xe9\x14\x32\x65\x0b\x31\xac\xa0\x6a\x08\x9f\xb4\x0d\xba\xa6\x6d\xde\x95\xbb\xea\x4c\xf4\x89\x8c\x37\x34\xba\xda\x16\x9d\x21\x22\x3c\x52\xff\xac\x6c\x47\xdb\xc7\xa5\x49\x18\x6b\xb2\x68\x11\x45\xdb\x1e\xbe\xb4\x6b\x95\xad\x7a\x5e\x64\xec\xdf\x4b\xb8\xc7\x1c\x03\x81\xe9\x5d\x5c\xd2\xbb\x79\x9c\x66\xf4\xd9\x0f\x83\x9c\x40\xe3\x07\xa2\xed\x9a\x39\xa8\xbe\x34\x37\xbc\x99\x01\x68\x9d\xa3\xec\x8d\x29\xf9\xac\xd0\xcf\x81\xfe\x98\xfe\x93\x1d\x53\x17\x5b\xd1\x3d\x53\xd8\x55\xc8\x0f\x78\xce\xa8\x23\xec\x2b\xf4\x04\xd9\xdc\x14\xd0\xe6\x39\x41\x0e\xcc\xdc\x46\x16\xd4\x68\xc5\xcb\x40\x0f\x92\xb0\x1d\x50\x78\x1f\x6f\xd2\x49\x05\x7b\x6e\x8a\x6f\xc9\xa1\x38\x9d\x9c\x88\x1a\x6e\x97\x48\xf2\x19\xfd\x3f\x7b\x44\x53\xf3\x7b\xc0\xaa\x24\xbb\xbb\xbb\xa4\xf7\x33\xb8\x5b\x3d\x67\x82\x29\x7e\xb2\xa0\xc1\xa9\x7a\xec\xb5\x0b\xd1\x82\xdb\x27\x73\x63\x15\x55\xf1\xa3\xda\x44\x42\x1f\x90\xbd\x00\xed\x03\xfa\x83\x48\xa4\xe4\x2a\x0d\xef\xfb\x96\xa8\xbc\xc0\x72\xbe\x71\xbe\xc1\x19\xeb\xf3\xb3\x02\x03\xb2\x71\x41\xa0\xa8\xf2\x31\xa1\x84\x48\x18\x76\xa8\x60\x63\x84\xbf\x11\xc1\x85\xff\x73\x1a\x25\xde\xc6\x86\x85\x1d\xb5\x21\x07\x33\x8b\xed\x13\x63\x45\xb7\xe2\x36\x78\x6e\x01\x7e\xb0\x4b\x4b\x3e\x0e\x12\x8f\xf7\xa1\x21\xa1\x12\xbb\xd8\xc9\x0e\x56\xfc\x72\xc3\x34\xca\x90\x49\xef\xdf\x58\x40\x6e\x17\x15\x37\xe8\x12\xa0\xfc\xfd\xc9\x61\x79\x76\xd0\x33\x67\x84\xf5\x7e\x31\xbb\x05\xfc\xb5\x3e\x23\xdc\xfb\x87\x25\x29\x2f\x77\xc9\xc6\x1f\xe1\xd7\xee\x46\x6b\xdb\x1c\xe1\x32\x51\xf5\xea\x4c\x88\x7d\x65\x13\xa7\x43\xc4\xc8\x5b\x61\xd8\x59\x12\x49\xad\x1d\xa4\x3c\x55\xa2\x4c\xd8\x3a\x64\xf3\x51\x1a\xa1\xa1\x60\x0c\xd1\x01\x85\x0f\x87\x4e\xc0\xac\x98\xf7\xab\x0c\x33\xab\xc8\x0c\x59\x43\xc5\xba\x72\x6a\x09\xd6\x39\x93\x88\x3c\x2b\xf3\xf0\xc1\xab\x2d\xec\x7a\xf9\x48\x71\x86\xd9\xfc\x50\x6e\xf9\xa3\x16\x04\x23\xbc\xce\x7d\xbb\xc0\x72\xe2\xb9\x46\x64\xd9\xfd\xdc\x5b\x3e\x8c\x1b\x3e\xb7\xf7\x35\x7f\xbc\x51\x35\xcb\x87\xa9\x13\x5a\x9c\x70\x34\x3f\xb2\xc0\xa5\xd7\x43\xdb\x12\x06\x66\x13\xd5\x32\x9a\x4f\x78\xd3\x7e\x38\x8f\x83\x28\xd9\x21\x78\x0d\x16\x6a\xec\xbe\x3f\xfb\x61\xf3\xbf\x5c\xf7\x2e\x38\x69\x32\x28\xe6\xd8\xcd\xb6\x17\xcb\x1e\x09\x45\x58\x5b\x4e\x6d\x72\xd1\x61\xa6\x89\xcf\x0e\xc2\xce\x24\x12\xef\xa1\xe2\xa7\x43\xdc\xc7\x7c\xb1\x5e\x45\xe0\x45\xd5\x2f\x22\xaf\x3c\x9f\xa0\xc8\x8b\x64\xcc\x88\x77\x78\xb7\x79\x7b\x7b\xbb\x89\x31\xe8\x4d\x60\x23\x5f\x0c\xc2\x8f\x3a\x13\x84\xb1\xb8\xf6\xb9\x30\x2e\x8d\x52\xf1\xcd\x35\x1f\x30\xce\xc7\x6c\x09\x0b\xe3\xeb\x16\x47\xcd\xb6\xb4\xb6\x2d\x70\x62\xe3\xe2\xab\x5e\x49\xf3\x96\x58\x9d\x2a\xc2\x5d\x73\xcd\x4b\x52\xf9\xa1\x7f\x0f\x55\xda\x40\x9e\xee\x1f\x60\x9a\x6c\xdc\x80\xaa\x4d\xe5\xca\x6d\xed\x78\xc5\x40\x5c\x2d\x28\xac\x97\x0a\x64\x2b\xa3\xf2\x9b\x2d\xab\x55\x79\xe5\x40\x52\xa7\xb3\xca\x9a\x6d\xb4\xec\xde\x75\x44\xe3\x50\xf4\x8e\xd1\xb2\x64\xdf\xb0\xa6\xbd\x67\xf3\xea\x44\xfa\xe3\xfa\x27\x58\x74\xc3\xb5\xb9\xb5\xff\x53\xb4\xab\x30\x7a\x85\x91\xa7\xbd\xa2\x80\x09\xca\xc0\x7b\xa2\x53\x66\xd6\x5c\x67\x06\x56\x3c\x86\x76\x5f\x5a\x6d\x56\x7f\x4f\x07\xf9\x44\xef\x7b\xca\xd9\xf3\x8e\xca\x14\x6a\xc2\x4d\x73\x65\x89\x28\x6b\xf2\x4b\xd5\xc6\x4a\xd3\x00\xcf\xf7\x1a\x6a\xcb\x6e\x43\x0d\x99\xd9\xd1\xdc\x0d\xd0\x2f\xc4\x19\x3d\x90\x84\x37\xde\xfa\x9b\xd0\x5a\xe6\x41\x13\x29\xd7\x68\xec\x1c\x75\x0b\xb2\x79\x9a\x77\xc5\xc6\xd7\x9f\x66\x74\x98\x83\xbd\x23\xba\x1f\x0f\xf6\xf6\xdb\xd0\x01\xbb\x3b\xb0\x50\x20\xdc\x3f\x78\x73\x70\x76\xe0\x40\xd9\xf1\x2e\x61\x65\x54\x54\x2d\xba\xcd\x99\x92\x4e\x73\x18\x59\x1a\x28\x7b\xbf\x14\x73\x4a\x62\xe6\x47\xd7\x35\xa9\x19\xe8\x42\xf4\xfb\xbb\x9a\xa8\xeb\x8f\xa7\xbc\xa4\x58\x29\xe8\x9c\x32\x70\xe4\x7e\x19\xd1\x12\xf4\xe5\x9b\xa2\x91\xc6\xa0\x2a\x8b\x82\xfe\x73\xf8\x81\xbc\x0b\xa2\xac\x21\xa2\x8a\x46\x4e\x63\x48\x95\xaf\x2f\x3d\xd0\x21\x00\xc6\xee\xc4\x81\x82\x11\xdf\x0c\xd9\x68\x3a\xd4\x50\x6e\x84\x64\x41\x96\x35\x6e\x7e\x88\x06\x3f\x08\xf5\xcf\x1a\x02\x1d\xb5\x74\x93\x62\xdd\xef\xbd\xa6\x85\x44\x03\xea\x65\x65\x34\x68\x37\x4a\x3c\xa8\x0a\x56\x46\xf4\x6e\x51\xd2\x83\x1a\x6a\x65\x3c\xfb\x4c\x81\x48\x54\x5c\x9d\x2c\x85\x6c\xe9\x08\xb6\x21\xf8\xae\x38\xb6\x0e\xc6\x4c\x34\xa3\xc8\xb6\x8d\xc2\xce\xd6\x34\x2f\xdc\x3a\xc8\x67\xb7\x70\x6b\x91\x5e\x33\xd4\xd5\x56\x8f\x87\x7d\xf5\x20\xd5\xef\x7f\x09\xff\x6c\x17\x49\x35\x48\xfa\x39\xae\x91\xfa\x54\xfd\x94\xd7\x48\x46\xe9\x13\x2c\x90\x6c\x96\x4a\x6d\x5c\xcd\xdb\x67\x58\x29\x61\xa6\x6b\xed\x1e\x24\xab\x2f\x4e\x4f\xb4\x58\x3e\xff\xda\x64\x08\x9c\x6b\x6d\xd2\xc1\xd8\xda\x64\x14\xd9\xd6\x26\x11\x7d\x69\x5e\x9d\x4c\xa0\xcf\x6e\x7d\x7a\xbc\x63\xf9\xca\x16\x53\xd2\xea\xfc\x4e\xd6\xa5\x2f\xae\xe5\x47\x59\x35\x8d\x28\xfc\xe7\xb8\x70\x9a\x5a\xe4\x53\x5e\x3a\x05\xad\x5f\xbc\xcb\x2f\xde\x65\xfd\x59\x7a\x05\xaf\x49\xbe\x6b\x0d\x37\x01\x45\xa6\x44\xa3\xd0\xb6\x8e\xbf\x49\x27\xcd\x6b\xb8\x0a\xf0\xc8\x23\x7b\x76\xbd\x17\xa7\x93\x51\x7d\x7f\xc4\xce\x41\xb6\x09\x32\x32\x36\x47\x5a\xb7\xd7\x8c\xbc\x97\x4a\x87\xd6\xa3\x4a\x34\x1d\x02\xcd\x75\x51\x1b\x49\x9e\xc6\x4e\x9b\x5b\x4a\xe0\x2b\xec\xb1\x14\x40\xd6\xfd\x81\x7d\x41\xe3\x29\x7e\x9d\xe7\x46\x59\xfd\x98\x1d\x7b\x31\x2f\x0a\x3a\xff\xe2\x9c\xde\xc5\x1e\xde\xd8\xb3\xfd\xe1\x0f\xc6\xef\x65\xe5\x5c\x1b\x12\x97\x8c\xab\x40\x4c\xbe\xb5\x02\x9b\x6c\xff\x6e\xd2\x1e\x69\x02\xd3\x24\x2d\xd6\xd5\xa9\x71\x35\xd1\xc3\x4c\x6e\x25\xa7\x9b\xfc\x6e\x38\x53\xa9\x74\x3f\x98\x8c\x8f\x3a\x64\xeb\xc8\x11\xa6\x9e\x76\xac\x32\x3d\xd5\x4b\x8d\xa3\xa2\x2a\x80\x7e\x62\x54\x7b\x63\x1c\x1c\x35\x6a\x3d\x32\xfb\x13\xde\xdc\x5d\x5f\xde\xa5\x25\x13\xd7\x5a\xae\x27\x7d\xcc\x74\x4e\xec\xb2\xb4\x23\x9f\x93\xf2\xce\x3c\xdf\x2a\xee\x58\x77\xbb\xb5\xc4\x81\x3f\xe5\x94\x4e\x9c\xc2\x67\xca\xe9\x24\xaf\x6f\x3b\x5d\x83\xcf\x21\xa9\x93\xbc\x98\xae\x67\x75\x92\xb7\xe8\xed\x8b\x1b\x3e\xf5\xb4\x4e\x02\xd3\x8a\x79\x9d\xaa\xda\xeb\x49\xec\x24\xf1\x37\xf7\xe8\xf7\x92\xd9\x49\xf6\xe6\x31\xa9\x9d\x14\x8e\xff\x7f\xca\xed\x54\x53\x21\x5f\x92\x3b\xb5\x24\x10\xaa\x73\xec\xf3\xc9\xee\x24\xfa\xf6\xa4\xe9\x9d\x54\x9c\xcf\x90\xdf\xa9\x3e\x3c\xce\x04\x4f\x0d\x49\x50\xca\xb5\xc0\x92\x91\xc6\xad\x3b\x39\x4b\xe1\xed\xb3\x25\x25\xe2\xad\xb9\xb2\x3c\x39\x69\x59\x25\x2b\x51\x9d\xb1\x8e\x3c\x4f\x9f\x0d\x5b\x9d\xc9\x9e\xd6\xc1\xd7\xe7\x4e\xf7\xa4\x4c\xcb\x55\xf2\x3d\xd5\xa4\xc1\x96\xf0\x69\x7d\x92\xf0\xb9\x24\x7d\x62\x37\x3a\x0f\xf5\x64\x25\xd6\x0b\xcd\x5c\xe4\xca\x3b\xca\x9d\xee\x36\x3b\xea\x2c\x9b\xe1\x85\xd1\x68\xcb\x74\x64\xe2\x7f\x5c\xbe\x23\xd6\x8c\x2d\xe9\x91\xab\x99\x27\x4d\x7d\x54\x9f\x85\x42\x09\x3c\x79\xf2\x23\x67\x4b\x4f\x9a\xfe\x48\x68\xb0\x35\xe4\x3f\x72\x29\xbf\xa7\x4c\x80\xd4\xb0\xac\xad\x33\x03\x92\xd4\x57\x6b\x48\x81\xe4\x5c\x32\x36\x49\xd3\x62\xb3\xd6\x24\x48\x4a\x77\x57\xde\x9d\xb0\xaf\x65\x6d\x69\x90\xec\x36\xa1\x3d\x0f\x92\x6b\xa1\x7a\x44\x22\x24\x8e\x52\x0b\x17\x2a\x80\x4a\xfc\xc8\x2f\x03\x46\x66\x95\x4f\x2d\x19\x92\x42\x74\x95\x0d\x49\x2d\x54\xd2\x21\xe9\xb0\xab\xe4\x43\xe2\xb1\xa0\xf5\x26\x44\x32\x02\xa0\xab\xdd\x84\x57\x87\xcd\x0c\x11\x6a\x63\x24\xa4\x2c\xaf\x58\x63\x66\x45\xaa\x8b\xc5\xba\xf3\x22\xd9\x68\x7a\xca\xcc\x48\x8d\xf8\xbf\xe4\x46\xd2\x06\xa1\x53\x72\x24\x0e\xeb\xdc\x64\xaa\x5e\x3f\x63\xa6\x93\xaa\xd1\x8f\x94\x1f\x49\xa8\xd0\xa7\x4b\x90\x64\x15\xdb\xc6\x14\x49\x1d\xb3\x9d\x2a\x39\x92\x1a\xda\xe8\x10\x3b\xd5\xb9\x54\x4b\x93\x24\xc3\xc9\x1f\x2d\x4f\xd2\x92\x99\x58\xf9\x10\x8e\x14\xf0\x4e\xf9\x91\x80\xf3\xbd\xc7\xa6\x6f\x5a\x35\x87\xd3\x13\x24\x72\xb2\xb9\x34\x7a\x36\x27\x9b\x37\xd2\xd8\xdc\x33\xa5\x74\x52\xa6\xbc\x6b\x77\xb4\x02\xa9\x84\x5d\x29\x43\x1b\xa0\x5e\x6a\xdb\x51\x67\xaf\x9b\x35\xde\xc7\x50\x78\x4f\x9d\xdb\xa9\xda\x17\x32\x92\x3b\xc9\xb9\xfc\x04\xd9\x9d\x18\xe1\x4f\x98\xde\x89\xcf\x5a\xd2\x6d\xda\x5a\x15\x9e\x4c\xf1\x24\xab\xaf\xec\x25\x38\x06\xa8\x51\x3a\x2d\xc2\x69\x95\x4d\xdb\xf6\x7d\x69\xb6\x2b\x9b\xf3\xa2\xcc\xd8\xb2\x2f\x21\x57\xdb\xac\x0f\xe6\x73\xa7\x15\xbc\xaa\x09\xac\xff\xc5\xda\x36\xb8\xea\xef\x8d\xb5\x41\xca\x24\xa6\x6d\x70\x66\xea\xaa\x36\xf8\xd2\x19\x60\x80\x72\x7e\xa0\x15\x8f\xfb\xc7\xd3\x20\x9f\xf6\x76\x64\xb1\x17\xa6\xe3\x05\xfe\xa5\x7c\x3c\x08\x78\xc0\xff\x68\xfe\xf7\xf7\x87\xa1\xd7\xcb\xd2\x14\xed\x03\xd2\x63\xed\x6f\xd2\xea\xec\x0b\x9f\x91\x3d\xce\x91\xde\xa8\xf6\x57\xdc\xd8\x01\x8e\x81\x00\x12\xec\xd0\xc1\xd4\x3f\xec\x25\x01\x91\x1b\x3a\x94\x91\xc7\x4e\x05\xcc\x3b\x43\x0e\x47\x32\xdd\x9b\xa3\x46\x0d\xf5\x52\x35\x74\xde\x8c\x5c\x07\x53\xb4\x9e\xb2\xf1\xd1\x61\xcd\xf9\xa3\x81\xe6\x6e\xd8\xbc\x06\x3c\x1c\x95\x1a\x70\x89\x16\xba\xd6\xfa\x0a\xb7\x13\xff\x2f\x00\x00\xff\xff\x1f\x41\x30\x6b\x7e\x9d\x00\x00") + +func uiJsAppJsBytes() ([]byte, error) { + return bindataRead( + _uiJsAppJs, + "ui/js/app.js", + ) +} + +func uiJsAppJs() (*asset, error) { + bytes, err := uiJsAppJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/app.js", size: 40318, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsD3335D3MinJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\xbd\x69\x77\xdb\x46\xd2\x28\xfc\xfd\xfd\x15\x16\x6f\xa2\x83\xa5\xc1\x4d\xde\x02\xaa\xc9\xe3\x38\xce\x32\xb1\x1c\xc7\xca\xce\x61\x74\x20\xb0\x49\x22\x06\x01\x1a\x8b\x44\xda\xd2\xf3\xdb\xdf\xaa\xea\x6e\xa0\x01\x52\xb2\x3d\xf3\xdc\x3b\x19\x8b\x00\x7a\xdf\x6a\xaf\xea\xa3\x45\x99\x84\x45\x94\x26\x96\xfd\x41\x3f\x3e\x48\xac\xc4\xfe\x90\x89\xa2\xcc\xe0\xf9\xf8\xd8\x4a\xba\xe9\x75\x22\xb2\x6f\xd2\xb0\x5c\x8b\xa4\xb8\xb9\x49\xba\xf3\xfa\xd9\xae\x5e\x5e\xc4\x02\x7f\x6e\xab\x8a\x8a\xfb\x2b\x3a\x3e\x6e\x7d\xe8\xce\xc5\x22\x28\xe3\xe2\xb7\x48\x5c\x9b\xad\x40\x46\x7a\xad\x53\xed\xba\x11\x61\x25\xac\xa8\x9a\x29\xc6\xc9\xc4\x1b\xf8\xc9\xb8\x98\xe0\x5f\x5e\x4c\xfa\x7e\xbf\xd7\xaf\xb3\x67\x66\x9f\xca\x38\xe6\x9c\x27\x13\xc8\xe1\xbb\x49\x9d\xa9\xac\x33\x1d\x45\xf9\xab\xe0\x15\xbc\xd7\xa9\x51\x9d\xfa\x21\x16\x8b\xc2\xaf\x26\xb1\x60\x82\x65\xac\x84\xb9\x4c\x33\x2b\xc8\x96\xd4\xfb\xbc\x1b\x8b\x64\x59\xac\x4e\x4f\x60\x0a\x32\xde\xb7\xd9\x5e\xca\x43\x48\x29\x79\xa1\x5e\xed\x51\x39\xce\x46\xf6\x87\xab\x20\x7b\x10\xf1\xcc\x2d\xc7\xe3\xf1\x60\x04\xb5\x4f\xa3\x19\x13\xf6\x69\x7f\x92\xf1\xc8\x1d\xf8\x25\x8f\x6e\xd5\x48\xb2\x5b\x96\x45\xcb\xd5\xff\xeb\xae\x8c\xfb\x13\xe8\x84\x4f\xdd\xa9\xbb\x72\x5b\x4f\x55\x6a\xce\xb6\xaa\xb3\x4e\x0d\x30\x15\xfb\x87\xd5\x17\x1c\x2a\x76\x8a\x2f\x07\x23\xbb\x70\xf8\xa0\x3f\xd2\x2b\x5a\xe7\x0f\xe5\x52\xeb\x12\xe2\x41\x04\xc9\xf6\x4f\x97\xff\x88\x90\xf6\x4e\x94\x88\xd7\x59\xba\x11\x59\xb1\x83\xbd\xb6\xc9\xd2\x22\x2d\x76\x1b\x01\x33\x01\x03\x88\x4b\xe1\x17\x53\x01\xdd\x4e\x60\xc4\x59\x70\x19\x0b\xff\x68\x70\x6b\xac\x6b\x0c\x87\xa0\x58\x45\x79\xf7\x82\xab\x3a\xc3\x4c\x04\x05\x6c\x30\xd8\x27\x46\xbe\xbc\x1e\x94\x95\xb8\xbc\xd3\xb1\x61\x13\x6d\x02\xd8\xa2\xd3\xfe\x0c\x1e\xaf\x82\xc9\x55\xe0\x26\xbe\xb1\xa1\x16\x7b\x45\xaa\xac\x49\x37\x8f\xa3\x50\x58\x03\xdb\x2c\xb0\x32\x26\x0e\xdb\xc3\x91\x52\xd7\xea\x2c\x4b\xb3\x4e\x8e\x99\xea\x5c\xc7\xc7\x73\x11\x8b\x42\xa8\xd7\x69\x32\xab\xcb\x6d\x2c\xb9\x9e\x09\x9f\xce\x46\xd5\xec\x3f\xa8\xca\xda\x30\x75\x65\xbe\xb2\x16\x56\x61\xdb\x7a\x15\x8c\xae\x5d\x55\xe5\xfb\x07\x8b\xbb\x6e\x72\xa0\xd4\xdc\xaa\x17\x2e\x31\x72\xab\x53\x36\x50\x45\x8e\x8c\xa3\xba\xfe\xc4\xf5\xd8\x99\x9b\xac\xfe\x7c\x86\xbb\x05\x36\xa9\x4e\x32\x40\x1d\x76\x22\xe3\xa2\x1b\x6c\x36\xf1\x0e\x8e\x4a\x75\x0a\xaa\xf1\x66\xb0\x38\xc5\x24\xf1\x33\x63\x33\x6f\xe5\xf6\x8b\x60\x62\x70\x00\x89\xad\x77\xe8\xa8\x80\x03\x13\xae\x82\xec\x59\x61\xf5\xed\x6e\x91\xfe\xba\x81\x4d\xf8\x3c\xc8\x85\x65\xbb\x45\xb5\xbe\xd5\x6c\x09\xde\x67\x19\x9f\x07\xea\x40\x8c\xb2\xb1\x18\xb9\xae\x90\xfd\x2a\x21\x01\xb6\xa9\x5b\x8c\xa0\xa1\xb2\xd1\x50\x69\x74\xe6\x12\x86\x51\xbf\x5d\x34\xde\xae\xe9\x5c\xd5\x50\xd8\x38\x64\xd0\xae\x60\x25\xf7\x06\x0c\x8e\xb3\x6e\xdf\x75\xcb\xd3\x68\x64\x5b\x05\xcf\xa6\xe5\xac\x9b\x26\xf6\xf1\x71\xa1\x27\x07\x16\xe0\xc0\xfc\x24\xb7\x72\x20\xd3\x19\xd4\x98\x88\xeb\x07\x71\x75\x5e\xa1\x3c\x37\xc0\x50\xa9\xa0\x07\x4b\xa1\xc1\xa5\x28\x60\x57\xe9\xac\x7b\xc0\x67\x38\x49\x8f\x8f\x53\xa8\xc0\xb7\xe0\xc1\xc2\x27\x8e\x8b\xcd\x04\x2c\x96\x9c\xc6\x3e\x74\x5c\x74\xa3\x64\x2e\xb6\x3f\x2d\xac\xd4\xb6\xbb\x61\x9a\x84\x41\x61\xe9\x0c\x00\x8a\x6c\x9b\x65\xdd\x4c\xac\xd3\x2b\x81\x7b\x98\x95\xc7\xc7\x42\xee\xe9\xac\x9b\x63\x0f\xd8\x07\x68\xa2\xbc\x85\x24\x80\xeb\xcc\x80\x30\xe7\xb8\xe5\x82\xae\xb8\x42\x6c\xb4\xc9\xe8\xf7\x1b\x89\x76\x2c\x63\xc7\xbd\x35\x37\x33\x83\xd5\x57\x45\x46\x09\x6c\x84\x3c\x2d\xb3\x50\xbc\xa0\x77\xbb\xe0\xc9\x01\x40\xf6\xa2\x09\xf8\x70\xfe\x2e\x98\xdc\x15\xed\x39\xc1\x8d\x71\x0a\x20\xb8\x98\x56\x29\xb0\x3b\x66\xfc\xda\x98\x47\x98\xf2\x45\x3d\xe5\x00\xf7\xf7\xf7\x3c\xac\x42\x91\xed\x14\x1c\x2f\xcd\x3e\xd6\x9d\x2f\xbb\x05\xb4\x21\xa0\x3f\x4c\x7f\xe3\x25\x2b\xa6\xf0\x1d\xa0\xe8\x4c\x6d\x08\xac\xfe\x16\x40\x6d\x10\xc7\xbb\x6a\xae\x00\x13\xdd\x36\x26\xf2\x99\x71\x26\x77\x00\xe7\xd9\x45\x00\x93\x5d\xa7\xbf\xaa\xd3\x3b\xfa\x63\x07\x8e\x1c\x34\x94\x2e\x1e\x24\x70\xf2\x8c\xe3\xaa\xea\x39\xc3\x7a\x70\x3f\xda\xc6\x39\x78\xfe\x1f\x54\xb4\x3d\x54\xd1\x7b\x85\x5c\x6a\xba\x42\x41\x1f\xb9\x91\x9e\x15\x45\x16\x5d\x96\x08\x7d\x6c\x93\x9a\x38\x9c\xe9\xd5\x39\x20\xa0\x7c\x13\x84\x82\x01\xda\x4b\xc3\xc0\x84\x57\xa5\x2e\x04\x7b\xd1\xa8\x16\x5a\x37\x69\x8c\x03\x79\xf6\x6b\x6d\x94\x49\x15\x64\x13\xfc\xae\xc3\x2b\x09\x1e\x31\xb9\x63\x5c\xfe\xa1\x5e\x09\xdb\x44\xd8\xff\x4d\x0b\x07\x26\x65\xbf\xc5\x03\x63\x84\x1e\x68\xa8\x83\x9b\x35\xc9\xbb\xef\xca\x20\x8e\x16\x08\xf7\x99\x6c\x10\x40\xb5\xcc\x3c\xc9\x7c\xe1\x1f\xd8\x08\x75\x86\xc0\x4f\x7d\xfd\x1c\x01\x10\xa8\x06\xf7\xae\x41\xab\x40\x77\x00\xff\xc0\x10\x36\x31\xf4\xc5\xea\xfd\x3b\x77\x7b\x4b\xd6\x79\xd0\x31\xa6\xe3\xa5\x59\x02\xce\xf0\x1b\xb1\x7c\xb1\xdd\x58\x1d\x6b\xe2\xff\x7d\xf3\x6f\x28\x61\x77\x5c\xe8\x70\x26\xde\x95\x29\x4d\xb0\x8b\x49\x98\x70\xf3\x85\xdd\x61\x9d\xa5\x59\xd9\x2f\x0d\x12\x01\x28\x04\xdd\x85\x7c\x13\x47\x85\xd5\x83\x1a\xa1\x0b\x46\x81\x37\x07\x36\x6c\x8d\x61\xbc\x01\x41\x8e\x72\x64\x27\x00\x2f\xe4\x3a\x15\xad\x9d\x6b\xe6\x06\xd0\x73\xd7\x9a\xee\xd5\x03\x00\x20\xe1\xd8\xdf\xee\x3a\xd8\x58\xdf\xd8\x23\x89\xb7\x92\x0a\x9f\xdd\x75\x1c\x0b\x5c\x9e\xba\x0f\xdf\xe0\x90\x25\x08\xc4\xa9\x1c\xb5\x81\x16\x41\x32\xc4\x82\x00\xf1\xc3\x38\xc8\xf3\x97\x51\x5e\x68\x64\x98\x4d\xca\x6e\x30\x9f\xe3\xb6\x2d\x35\xb0\x4f\x74\x57\x04\x62\x9a\x7a\x17\x77\xa8\x74\xc7\xbe\xb9\xe9\x74\x46\xd9\xc4\x02\xf2\x36\xc8\x8b\x1f\x10\x89\x00\xd0\x2d\xba\x85\xc8\x0b\x00\x91\x37\x37\xa2\xb9\xfb\x55\x39\xf6\xce\x2a\x5d\x58\x7a\x17\x48\x2c\xdb\xbf\x3b\x4f\xb5\x5b\x0a\xda\x28\xb6\x09\x5e\x5e\x6b\x6a\x64\x1f\x76\xe4\xc5\x2e\x16\x6a\x08\x35\xfd\x7a\x10\x60\x50\x4e\x68\xbe\xce\x46\x95\x36\xe1\x86\xa4\x6e\xee\x3f\xa1\xd9\xe4\xbe\xa6\xfd\x3b\x5b\xcb\xcc\xd3\xa8\x8e\x5e\x76\xf8\xc0\x35\x0e\xd7\xaf\x07\x36\xab\x41\xa2\x36\x08\x54\x3d\x31\xf0\x91\x17\xcd\x59\xf8\x34\xe0\xd3\xac\xd8\xd7\x75\x89\x76\xc7\xef\x80\x14\x25\x50\x7d\x55\xab\xff\xec\xd1\x52\x72\xc3\xd2\x0c\x35\xb8\x57\x40\xe0\xf4\x31\x09\xd6\x82\x00\xd8\xaf\x6f\x7e\xd0\x5b\x1a\x00\xa2\x22\x5e\x15\x93\x0c\x60\x0e\x00\x1c\x4c\x74\xf3\x73\x63\xd9\x45\x8d\xb1\xf6\x5b\xdb\xab\x6e\x0f\xdf\xdc\x8b\x14\xad\x7d\x50\x6a\x2b\xa0\x08\x6c\x52\xdd\x87\x6f\x2b\x62\x9f\xba\xb0\x09\x32\x6c\x2d\x9d\x8b\x51\x82\xec\xbb\xdc\x39\xcf\x57\x51\x3c\xb7\x24\x42\xad\x4a\x7e\x6f\x70\xc9\x17\x17\xf3\xa0\x08\x2e\x2e\x80\xc3\xa9\x33\xfc\x64\x40\xcf\x7d\x1c\x7d\x19\xc8\xe5\x4d\xcc\x43\xf4\x83\x51\xa4\x4d\x28\xdd\xdc\xc0\x98\x84\xcd\x4c\x0e\xb8\x9e\x3f\xa0\x00\x27\xf0\xa9\xab\x7b\xc2\x44\xf5\x68\xfb\x47\x85\x77\x24\x8c\x66\xfe\x6c\xf1\x99\x44\x98\x25\x26\xb5\x2e\x5c\xd7\xd6\xc9\x25\x50\xa4\x08\x1b\x81\xc0\xed\xb3\x80\x47\x3a\x5f\x30\x4e\x47\x29\xe4\x03\xf0\x15\x4d\xd3\x19\xd2\xd4\x56\xc9\x52\xe8\xd5\x01\xf6\xe8\xaf\x36\xbd\x74\xde\xa4\x97\x7e\xab\x40\x25\x13\x7b\x70\x12\xf8\x7c\x16\xc9\xe4\x14\x7a\x90\x00\x73\xde\x2d\x37\x30\x3a\xc1\x42\x5e\x71\x19\xd8\xdf\xe8\x88\x0b\x20\xac\x05\x8f\x80\x6a\x05\xf6\xbf\x1c\x73\x98\x1a\x20\xfc\x4b\xa0\x9a\x47\x47\x56\xca\x83\x69\x81\x5d\x75\xdd\xe2\x34\x1c\x55\x3d\x4d\x8d\xd9\xf9\xe3\x20\x24\xab\x4f\x05\x8c\x75\x44\x95\xd6\x24\x00\x11\x9a\x08\xbc\x05\xec\x60\x2a\x5e\x74\xbf\xb0\x99\x79\x4e\x61\x82\xf6\x8f\x7a\xc9\x43\x58\xc6\x2c\xa8\x05\x18\xc8\x91\x76\x61\x97\xc6\x72\xbb\x11\x15\x87\x68\x60\xaf\x05\x59\x27\xd0\xaf\x65\xf7\x0b\xdc\x16\x25\x70\x91\xc5\x3e\x9c\xc4\x53\x6b\xa2\xee\xbf\x2f\x2e\x60\x42\xa7\x7f\x77\x67\x07\x90\xf7\x17\x9d\x9a\x87\xcb\x34\x0f\x6b\x23\x3f\x08\xac\xcd\x3a\x28\xc2\x95\x25\x6c\xdd\x73\xea\x41\x06\x53\x71\xd7\x34\x14\xd3\xc1\x8c\x51\xff\x9a\x33\x91\xcd\x6e\x89\xb9\x4a\x79\x07\x3b\x03\x58\x07\xd7\xb4\x62\x79\x3a\xdd\x8e\x0d\xcb\xfa\x05\xec\xaf\x3e\xca\xd4\x78\x52\x71\x46\x81\x2d\xf1\x5f\xcc\xdf\x06\xc4\x6a\xd5\x38\x35\xa6\xac\x31\x14\xfc\xda\x66\xc1\x84\x80\x9c\x5f\x4c\x2e\xfd\xa8\x9e\x93\x2f\x1a\x92\xb4\x1a\x0b\x57\x18\x45\x33\x0a\x15\xd5\x2f\x80\x3b\xe8\xcf\x24\x68\xd0\xc7\x69\x84\x7c\x46\x62\x42\xe8\xe2\x00\xbf\xd0\x90\x12\x7d\x2d\x1b\x96\x67\x4d\xf6\x62\x6f\x8f\x27\xe6\x16\xa3\xe3\x98\x89\x18\x76\xf8\xfc\x17\xe2\x59\x46\x19\x49\xb4\x00\xc6\xdd\xdc\x3c\x3d\x86\x2d\x92\xae\x11\x56\x69\x68\xf9\x3a\xcd\x23\x09\x14\x6c\xc2\xf2\x72\x07\x35\x81\xcb\xef\xf5\x48\x3b\xdd\x79\x16\x2c\xf3\x72\x03\x2c\x60\x9e\x7b\x1d\xf7\x81\xeb\x3e\x0b\x80\x6f\x06\x64\x1f\x85\x6f\x3b\x6e\x06\x67\x1e\xc6\x92\xc3\xb2\x85\xc0\x4f\xe2\xb2\x03\xaf\x6a\x75\x8a\xb4\x0c\x57\xb8\xd4\x98\xe5\x5c\x7e\xa3\xaa\x80\xb3\x2a\x8c\x6f\xb2\xa0\xf1\x15\x99\x7d\x89\x96\x5e\x04\x30\x92\x17\x01\xef\xa4\x89\x99\x2b\x42\x24\x72\x34\xf0\xb7\xc8\xe8\x22\x62\x66\x9d\x32\x17\xd9\x39\x65\x01\x5a\x83\xbd\x08\x14\x04\xe0\xb8\x64\x2a\x4f\xc0\xd3\xe9\x8b\x60\x36\xa2\xbf\xbc\x93\xa4\x89\xe8\xdc\x1e\x98\x5a\x68\x3d\xea\x12\x24\x21\xd9\x0a\xa3\x4e\xc8\x42\x08\x87\xf4\xdc\x1b\x60\x9a\xb2\x97\x32\xfb\xed\x48\xbd\x19\xe9\xc0\x49\x33\xe4\x99\xd9\x11\x80\x19\xa0\x21\x7e\x89\xd6\x22\x2d\x91\xf7\xee\xdb\xe6\xda\xff\x8b\x58\x8c\x0f\x02\xe5\x27\xc9\x12\x96\x13\x67\x50\xe4\x04\xa4\xda\x1f\x61\xaf\xc9\x0d\x8e\xcb\x4f\xd8\xf0\xfc\xb7\xef\x14\x06\xbc\xb9\x49\x70\x0e\x33\x85\x17\x21\xe1\x75\x1a\x25\x85\x3e\x8d\xed\xef\x16\xcd\x78\x7f\xfc\x2a\xd0\xc2\x4d\x3a\x2d\x34\x0f\x79\x98\xa5\x71\xfc\xc7\xcd\x8d\x7e\xfc\x13\x0e\x85\xb1\xdc\x9d\xcb\x74\xbe\x03\xfa\x1c\xb6\xb8\x48\xe6\xb0\x98\x57\x40\xc8\xcb\x09\xb7\x3e\x6c\xd4\x4e\xf3\x3b\xc1\x65\x9e\xc6\x40\x21\x76\x58\x91\x6e\xfc\x3e\x23\x51\x71\x9f\xad\x61\xbf\x46\x09\x3c\x6c\x00\x6c\x45\xc9\x12\x9e\x2e\xd3\x6c\x2e\x80\x8a\x92\xcb\xc3\x3a\xd1\x7a\x93\x66\x45\x90\xc0\xba\x8e\xe4\x92\x66\x30\x74\xf8\x3f\x1e\xea\x73\x18\x88\x48\x9e\xff\x72\x06\x43\x78\x15\x70\x80\xd9\xdd\xc5\xcd\x4d\xda\x15\x86\xd0\x03\x66\x58\x2d\xf2\xab\x60\x02\x74\xe9\x16\xa6\x72\x13\x2c\xc5\x1f\x00\x6d\x76\xea\xf9\x4f\xdb\x57\x29\xb0\xa7\x61\x02\x75\x9a\x7c\xfb\x13\x20\x26\x2f\x11\xa8\x65\xd1\xf6\x97\x2c\x48\x72\x00\x7c\x6b\x20\x32\x9a\x3d\x00\xa8\x74\x25\x32\x94\x73\xd9\x6c\x0a\xb5\x61\x1d\x33\x82\x5e\x08\xb2\x20\xef\xd7\x69\x99\xe0\x28\x9f\x53\xad\x6f\x70\xfa\xf4\xd9\x9e\x56\x2d\x7b\x88\xa3\x16\x85\x97\xa8\x0f\x2f\xe1\x85\x55\x3d\x81\x54\x98\xc0\x2a\xf1\x97\x74\x63\xd0\x8a\xdf\x19\x34\x92\x96\xdb\xec\x6d\x9a\x6e\x34\x87\xef\xd1\x22\x12\x06\x61\xf7\xa3\xc9\xbc\x8d\xfb\x93\x81\xdf\x97\xba\x03\x43\x02\xf9\x73\x53\x84\x68\x21\xb4\xf3\x50\xca\x6b\x3b\x96\x00\xf0\x0d\xcf\x83\x99\xed\x11\x28\x97\xcf\xf8\x5d\xe7\xa9\xeb\x49\x1a\x9a\x90\xf1\x60\xd2\xf7\xbd\x01\xb4\xf6\x2e\xf0\xcf\x82\x62\xd5\x0d\xc2\x34\x6f\x90\x7e\x45\xbb\xc0\x9b\x40\x96\xf0\xde\xe8\x22\x79\x94\x34\xa9\x45\xa3\x88\x05\xb0\x9e\x72\x09\xc0\x69\x40\xd9\x79\x83\x5e\x62\xf7\x86\x06\x89\x7d\x4f\x66\xb7\x9d\xb9\xbc\x2b\xf3\xd0\xa1\xba\xed\x1e\x30\xac\x03\x93\x09\x29\x1a\xa2\x69\xca\x4f\xdd\xed\x0d\x6d\xdb\x31\xa8\x9a\xb4\x68\xc8\x2d\x83\xa2\x25\xb2\x45\x58\x0f\x78\x16\x20\x60\x12\x22\xe5\x1a\x14\x13\x49\x56\xac\xb8\x2b\x71\x7c\x37\xe7\x6e\xc1\xae\xd2\x48\xd2\x9f\xdd\x98\xbb\x00\x8b\xfd\x03\x92\xc5\xa4\x55\x11\x62\x7d\x6c\xb0\xbb\x02\x92\x39\x47\xb2\xd9\xf6\x2f\xe1\x70\x23\xbe\xbd\x28\x58\x50\xd8\xbe\xce\xd2\xe2\xb1\xc2\xe2\x00\x05\x64\x2e\xd7\xc9\xe3\xfe\x24\xf1\x38\xfc\xe0\x9e\x42\xcc\xeb\xe2\x8b\xcd\x1e\xe3\x16\x8b\x5c\x2b\xf5\x22\x98\x87\x1e\xa4\x0f\x9e\xe2\xa7\xd4\x1f\x3e\x34\x93\x2c\x78\xf5\x60\x11\x20\x43\x74\x50\x2b\xf5\x80\xe6\x34\xc3\xc3\x65\x0d\x1f\x3d\x72\xb0\x7d\xfb\x56\xc9\x59\x2b\xf2\x92\x6b\xdd\x15\xec\x37\x2b\xf9\x92\xfa\x70\x0a\x5d\x73\xb1\x67\x28\xb7\x94\xe9\x05\xa6\xf7\xc7\xa8\x2a\x2b\x60\xab\x0d\x7c\x24\x8a\xfa\x63\x01\xef\x82\xde\x05\x90\xb6\xdd\x47\x63\xe0\xac\x84\x63\x0d\x5c\x98\x19\xe1\x16\x9e\x70\x0a\xc0\x82\x43\x47\x78\x29\xc3\x99\x5a\x03\x79\x8b\x1b\x61\x88\x74\x25\x8a\x66\xe0\x8f\x87\x6f\xa6\x8a\xe5\x63\x2b\x1c\xef\xaf\x70\xf8\x1f\xad\x70\x2c\x57\x38\xd6\x2b\x1c\xca\x15\x6e\xe4\x59\x14\x93\x25\xa6\xc7\x90\x16\xc0\xbf\x4b\xdb\x87\x77\xd8\xb1\xd7\xf4\x17\xa9\xbf\xe5\x25\x71\x46\x80\x17\xbb\x4b\xca\x61\x9b\xb9\x75\x0b\xad\x0d\x92\xb7\x47\xa9\xd7\x81\x88\x30\x98\x1e\x3d\xef\x44\x7a\xc3\x3b\xd6\xb3\x00\x2a\x82\xd1\xb2\x12\x30\x70\xf8\x37\x81\x0d\x33\x5c\x1f\x1e\x78\x33\xda\x58\x7c\x6c\x26\x17\x7a\x26\xe3\x6a\x26\x83\xe6\x4c\x5e\x7e\xda\x4c\x2e\xe4\x4c\x2e\x5a\x33\xd5\x9e\xed\xbc\x35\xd3\x72\x0e\xd7\x45\x6b\xfe\x7c\x5d\x57\x6b\xce\x56\xd5\x78\x24\x82\xc7\x9d\xf4\xd8\xee\x0d\x06\x8f\x01\x11\x65\x6e\xd1\x7b\xd4\x47\xd1\x7f\xe6\x89\xde\xb0\x5f\x29\x07\x4b\xbe\x41\xc1\x8d\xf3\x47\x00\x24\x21\x3c\x66\xb6\xf3\x45\x00\xd9\xe0\x11\x8e\xd1\xd7\x81\xde\x98\xf3\xc2\x3a\xe9\xc2\xa1\x7a\xf8\xe8\xe1\xd0\x29\xbd\x41\xf7\xd1\xc9\x93\xc1\xc9\x53\x38\x38\x5e\xf7\xe1\x57\x4f\x1f\x9d\x0c\x1e\x3a\x11\x90\xe1\x85\xe5\x75\xbf\x7a\xfc\xd5\xf0\xf1\x63\x07\x38\xa2\xee\xd3\x27\x8f\xfb\x83\xfe\x53\x27\x73\xbb\xfd\x87\x83\x47\x8f\x1e\xab\x4c\xdd\x3e\x3c\x3f\x3c\x79\x08\x55\x75\x87\xfd\x87\xfd\xe1\xa3\xaf\x20\xcf\x00\x3e\x3f\x19\x0e\x1f\x0d\x21\x97\x31\xb2\x65\x7b\xa5\x10\xdb\xa8\x9d\x23\x41\x39\xcc\xe2\x10\x16\xbf\xb0\x9d\xd7\x81\x5a\xf0\x77\x00\xa1\x0b\xa7\x70\x85\x23\x90\xfe\xd2\x3b\xad\xdf\xeb\x33\xfc\x67\x02\xfe\x4d\x13\x57\x40\x87\x1e\x3f\xfd\xea\xa4\x7f\xf2\x70\x92\x38\xf0\x1f\x9c\x7c\xef\x61\x6f\xf8\x95\xdd\x7b\xd2\x7d\xf2\xf4\x49\xff\xe4\x89\xa1\xca\x6b\x15\xed\xf7\x9f\x3e\x7d\xf4\x78\x42\x5d\xd8\xa4\xd7\xd0\xef\x41\xef\xc4\xf6\x75\x41\x27\x71\xb1\x26\x43\xa9\x57\xdc\x0d\x92\x60\x92\xfa\x27\xfd\x87\x63\x9e\x4c\x06\xc3\xee\x57\x80\x2b\x7c\x9c\xa0\x47\x4e\xa3\xf6\x61\xf7\xa1\xed\xe1\x67\x73\xc6\xd6\x1f\xdb\xdb\x6b\xbd\xb7\x33\xfe\x3f\xff\xa3\x36\xf7\x12\x1e\x9b\xbb\xfb\x7f\xfe\xe7\x53\xb6\xf7\x5a\x6e\x6f\x6c\xd3\xdc\xa6\x1a\x15\xac\x0b\x16\x2a\x54\xb0\xde\xdf\xb5\xbb\xa2\x25\x02\xc6\x3c\xe3\x31\x6c\x5a\xf8\xfb\xf4\x18\xe6\x81\xc1\xbf\x63\x73\xb9\xce\xcc\x22\x54\xde\xed\x74\x0c\x25\xa3\x99\x3c\x78\x0c\x48\xa1\xd3\xef\xb8\x34\x67\xeb\x60\x6b\xe1\xd2\x03\x39\x74\x0e\x64\x59\xb2\xb4\xe0\x84\x48\x6a\x60\x0d\x00\x02\x1b\x6b\x25\x1a\xea\xc2\xe6\xf1\x42\x81\x81\x92\x57\xf4\x81\x27\xec\x13\xe9\xcc\x7b\xd6\x34\xf0\xde\x03\xe7\xfb\x6f\xcb\xea\x3a\xf6\xbf\xed\x5e\x04\x78\x5e\x84\x78\x84\xf3\xeb\x08\xf9\x5b\x38\x8b\xd3\xe1\x4c\xc9\xa4\x3b\x0c\x58\xd1\x0c\xc9\x9e\x0f\x61\x90\x8b\xce\x2a\x8f\x3b\xbe\x96\x78\x59\xc0\x7f\xe5\xe2\xdb\x38\x05\x0c\x5a\x22\x39\xc4\x1a\x1f\xa0\x50\x6f\xd0\xef\x37\x3f\x0e\xe5\x47\x7b\x44\xd5\x01\xf0\xad\xaa\x2b\xac\xb7\xba\x9a\xb7\xaa\xb8\x7c\x80\x22\x5a\xd4\x65\x45\xfc\x3b\xc5\xf7\xc2\x2c\xbc\x4c\xaf\xb5\x0e\xd6\xb6\x27\x00\x0f\x60\x75\x23\x58\xdd\x08\x57\x57\xf1\x5a\xc9\xcd\x4d\xe7\xff\x74\x8e\xe0\xa1\x56\xdf\x02\xd9\x4f\xd0\x19\x80\x08\x76\xed\x07\xa4\xdd\x2a\x15\x2e\x83\x49\x85\x1c\xd6\x43\x34\x1b\x51\x1b\x6a\x62\xa5\xdc\x3a\x79\xfa\xb0\x7f\x1c\xd9\xe3\xf1\x43\x98\xd6\x14\x7e\x6e\x50\x12\x33\xc4\x8f\xf0\x1b\xe0\x87\x00\x26\x7a\xf0\x08\xde\x43\x1e\x9e\x9e\x3e\xbc\x09\xe1\x60\x19\xd5\x20\xc3\xc5\x61\xd1\x9e\x00\xc8\x7b\x2a\xeb\x82\x6d\x14\x70\xeb\xf1\xa3\xa1\x7a\x7f\x0a\x45\x71\x3b\x01\x78\x01\xde\x0a\x1a\x60\xa1\x79\x6c\x2e\xf6\xd7\x98\x57\xbb\x23\xe9\x61\x51\x56\xc8\x1f\x41\x3f\x36\xf4\xb5\xda\x59\xb2\x28\x72\x8c\x1e\x76\xd1\x4a\xdd\x08\xa8\xc0\x4a\x55\x0b\x6c\x04\xd2\x00\xe1\x24\xe8\x51\x92\x0f\xbf\x43\x0f\xa9\x15\x64\xc6\x39\x4f\xe1\x44\x7a\xc2\xee\x05\xae\x25\x80\x94\x78\xec\xf7\x6d\xbf\xa0\xcf\x02\x29\x99\xc0\x1d\x22\x20\x2a\xf0\xe9\x21\xcb\x1c\x0e\xa4\x88\x8f\x26\x28\x00\xcc\x4a\x1e\xa2\x28\x63\x00\x95\xf7\xfd\x4c\x62\x43\xd8\x0e\x38\x80\xd0\x18\xde\x75\x35\xbc\x84\x9f\xe3\x29\x01\x02\xe6\x1c\xd5\xc9\x40\xad\x9c\x23\x0b\xae\x58\x43\x00\x6a\x56\xf7\xe1\x60\xf8\x10\x40\x34\x40\xac\xee\xc9\xa3\x27\x8f\x9e\x3c\x1e\x00\x30\xed\x02\xb5\xf5\xf0\xe4\xc9\x23\x80\xa9\xbd\x3f\x02\xe4\x70\x28\xef\x70\x30\x7c\xfc\x64\xf8\x15\xe6\x7d\x32\x78\x34\x78\x34\x1c\x62\xde\xfe\x93\xe1\x40\x66\xfd\x02\xb2\x46\x32\x6b\x7f\xf0\xd5\xc9\xc9\x09\x65\x1d\x0c\xbe\x1a\x7c\x45\x39\xbf\x7a\x84\x80\x6e\x80\x59\xbf\x0e\x6a\xc9\x45\x61\xc1\x4a\x22\xb2\x79\xcc\x00\x77\x39\x56\xe6\x95\x36\x1b\xe2\x53\xe9\x35\x10\xc4\x79\x83\x5c\x96\x2b\x73\xca\x01\xe3\x00\xba\x9a\x24\x3d\x82\x9e\x7e\x05\x35\x01\x31\x12\xbc\xec\x11\x34\x65\x08\x40\x0d\xc5\x74\x51\x0b\x4a\x8c\x93\x55\xc9\x81\x3a\x5f\x76\xb8\xb1\xdb\xf5\xde\x03\x1a\x7e\x62\x82\xef\x2e\x80\x69\x00\x7a\xa6\xc6\xba\xf8\x0f\xf4\xac\xa6\xb4\xf7\x59\x71\x48\xdc\x4b\x56\x4a\xd5\xe7\x21\xf4\xad\x0d\xae\x8f\x8f\x0f\x34\x27\x48\xd8\x23\x50\x76\x47\xe2\x8a\x57\x05\xd5\x94\xa0\x66\xca\xd0\x31\xab\x0d\x83\x2d\xec\x89\x16\x91\xfc\x0d\x81\x69\x0f\x8a\x32\x47\xe8\x77\x54\x1c\x1f\xbf\x2f\xac\x10\x4e\x77\x31\xe6\xb0\x4c\xc7\xc7\x27\x7d\x20\x8a\x6f\x6e\x60\x6d\x51\xae\x24\x15\xe8\x09\x57\xc2\xa3\x08\xf7\x66\x48\x32\xbf\x7a\x00\x88\x7d\x1e\x00\x2b\x9e\x65\x69\xa6\xb3\x41\x97\xd2\x2e\xac\xc2\x5c\x7f\x00\x64\x20\xe2\x5c\xb4\xf3\x85\x8a\x7e\xe7\x1f\x6e\xe1\x58\x02\xed\x39\x8f\xf2\x0d\xd5\xdf\xb9\x14\xc0\x7c\x8b\x5c\x24\x73\x80\xb8\x9b\x2c\x5d\xa2\x54\x0a\x1e\xb1\x56\xf8\xa1\x6a\x3a\x78\x74\xa1\x68\x48\xe2\xcc\x3f\xce\x5e\x7e\x5f\x14\x9b\x37\xe2\x5d\x29\xf2\x82\xc5\x34\x4f\xda\xc4\x86\xd0\xe3\x1f\xdf\xa4\xeb\x20\x4a\x54\x0e\x80\x83\x00\xdf\x57\xcf\x33\x41\x9c\x72\x10\xe7\x28\x70\x0a\x6f\x6e\x8e\x7a\x7f\x5b\x2b\xa8\xc9\xca\xed\x89\x6f\x4f\xfe\xdd\xfb\x77\xaf\x27\xd5\x65\x09\xc2\x41\xd5\x5a\xa3\x2e\x9b\x75\xd2\x84\xba\x86\x55\x4c\xc2\xae\x7c\xe3\xf8\x40\x5d\xe5\xa5\x8f\xcf\x99\x08\xe6\x3b\x5c\x00\x21\x19\x76\x53\xba\x14\x76\x29\xf5\x1c\x53\xc7\x27\xc7\xc7\x25\x4a\x92\xb0\x90\x1e\x3d\x3f\x20\x18\xdc\x13\x4f\x26\x24\x8b\x4c\xbb\xba\x90\x31\xd5\x7b\x02\xc9\xe2\xf6\x16\x50\xc3\x0a\x5a\x15\x99\x51\xb9\x21\x10\x4d\xb8\xd6\xcb\x9a\xb8\x65\xdf\x82\x6e\x38\x09\x50\xeb\x64\x69\x2d\x93\x92\xed\xd2\xc7\x80\x74\x5a\x50\x0b\x8b\x6c\x6c\x6f\x1d\xad\xc5\x2f\xb0\xa7\x1b\xc3\xb9\x43\xc1\x01\x00\x96\x2b\xb4\x35\xc1\x5f\x3f\x91\xf5\xc0\x31\x85\x9a\x60\x7c\x1b\x94\x18\x7e\x7a\x6d\xb0\x29\xb0\x74\x6c\x96\x3e\x54\x52\x60\xbe\x5b\x36\xed\x00\x66\xc5\xfd\x97\xe6\x45\x67\xd6\x85\x1d\xf9\x22\x80\xcd\xd9\x90\x22\xe2\xe8\xf6\xc1\x40\xd4\xc5\xad\xab\x24\xc2\x11\x83\x4c\xda\x66\xa7\x29\xd9\x87\xb3\x0b\x80\x96\x32\x37\xac\x59\xd0\x84\x08\x4e\xe8\x27\x43\x87\x8c\x4c\x18\x33\xc4\x4b\x04\x1d\x60\xdf\x6c\x04\xd6\x94\x90\x30\x52\xad\x0b\x6c\xf9\x20\x0c\xc5\x86\x44\xab\x01\xec\xe5\xa0\x2b\xdf\x71\x7d\x98\xd3\x73\x50\xcc\x8e\xda\x4f\xb5\xad\xbf\xa7\xad\x51\x69\x7d\x90\x1e\x7d\x10\xd8\xfb\x39\xac\x9c\x05\xd3\x7c\x56\x2b\x79\xa0\xb9\x23\xd4\xb2\x40\x37\xae\x60\xff\x47\x73\x71\xa6\x56\xfd\xd0\x37\xc4\x67\xb2\x08\x8a\xec\xc3\xe6\xba\xc6\x3a\xad\x3c\x3e\x26\x91\xab\x3a\xfb\x30\x43\xf4\x26\x01\x82\xb9\x24\x25\x6d\x43\x84\x39\x80\xec\xbb\x35\x20\xa9\x8f\x02\x0d\x12\x80\xbe\xd6\x0b\xd3\xd6\x02\x2c\x1c\xe1\xbe\x08\x2e\xd3\xac\x38\xb0\xa4\xa1\x4c\xb1\x28\x1b\x69\x49\x2e\x23\xa8\x03\x68\x4a\x3c\xfc\x1d\x3d\xc9\xd9\x24\xf2\x23\xa2\xc8\x9e\x23\x6f\x66\x20\xaa\xe7\x0d\x32\xd7\xa4\xa6\x9a\xfa\xbb\xc4\xaa\x95\xb5\x52\xd6\x6c\x5a\x49\xbe\x37\xd0\x5d\xd2\x98\xaa\x51\xad\xf8\xeb\x14\x62\x5b\x20\x91\x87\x36\x20\x3a\x8f\x6f\x64\x87\x64\xc3\x0a\xa4\xa8\x34\x9e\x2f\x71\x7c\x05\xff\x05\x7e\x3c\x00\x25\xe3\xe1\xc3\x89\x15\xe5\xdf\x46\x49\x54\x08\xc9\xbc\x87\xb1\x08\xb2\x4a\xb2\x0d\x73\x59\x84\xdc\x90\x75\xbf\x2b\x18\x9a\x9f\x25\x40\x60\x23\xc9\x09\xe4\x1f\xcb\x42\xf8\x6a\x4e\xc4\xcb\xba\xbd\x6f\x00\xd8\x75\x13\x40\xf1\x52\xcb\x24\x42\xfe\x63\x30\x12\xe1\xc8\x4e\xc6\x5c\x84\x5d\xd4\xa9\xc1\xcf\x02\x9f\x81\x24\xf7\xf0\x13\xd4\x0e\xd9\xe0\xe9\x90\xc9\xe5\x2f\x45\xcb\x4c\xed\xc7\x00\x30\xe6\xa0\xd7\x1f\xa1\x61\x5a\x77\x31\x29\x10\x92\x74\xd1\x66\x2d\xf1\x7f\x0c\xe8\xc7\x2a\xba\xc5\xa9\x54\x11\xc2\x13\x0e\x1f\x05\x21\x76\xb7\xd6\x24\xfd\x1c\x00\x3c\x30\x8c\x38\xde\x14\x4d\x03\x6c\xcf\x4a\x24\x2d\x11\x8a\x28\x96\x0c\x6e\x9c\xa2\xad\x6a\x8f\x9e\x5f\xbe\x1a\xc0\x64\x98\xd2\xc2\x6f\x0a\x53\xfd\x53\xd1\x39\x83\x3e\x3b\x71\x96\x81\xf5\xd4\xab\xcd\x50\x3f\xe4\xb0\x6d\x85\x5f\x8c\x9f\x4e\x0e\x00\xaa\xa4\x27\x6e\xfd\x43\xdf\x1d\x71\xcb\xf2\xdd\xfa\x32\x8d\x1b\x0a\xe8\xd7\x8d\xdd\x33\x17\x61\xb4\x46\x6b\x23\x78\x2e\x56\x69\x99\x07\xc9\x5c\x2a\x9a\x96\x40\x15\x6d\x80\xa3\x62\x68\xe2\x12\x96\x59\x26\x92\x70\x87\xb2\x08\x54\x2a\x37\x51\x45\xa5\x13\xae\xf6\x33\xe4\x9b\x6a\xd5\x30\x4a\xf1\x89\xdb\x2a\x91\xde\x95\xfa\xbb\xd0\x0d\xdc\xc1\x18\xd7\x36\xa8\x69\xf1\x01\x2b\x3c\x20\xed\xe1\x00\x92\xd5\x22\xf0\x1f\xe5\x65\x2e\xb9\xba\xd2\xe3\x01\x2b\xdd\x00\x52\x8f\x2c\x28\xcd\xa1\xb8\x3d\xc6\x29\xb2\xb1\x81\x14\x09\xf7\x81\xfd\xa5\xb6\xed\x9c\x8d\x2a\x20\x8c\xd6\x8c\x24\xaa\xef\xfe\x93\x46\xa8\x23\xba\xf5\x77\x77\xa9\xd9\x04\x8f\x42\xcd\xfa\xa1\xc9\x28\xf0\x5b\x00\x2f\x1f\x74\x60\x20\x02\x58\x2e\x78\x1e\x77\x60\x40\x62\x7a\x82\xcf\x5e\x07\x46\x25\xa6\x0f\xf1\xb9\x03\xc4\x86\x98\x3e\x9a\xb1\x9c\xbb\x62\xfa\x78\xc6\x60\xbf\x4e\x9f\xcc\xd8\x0a\x7e\x9e\xce\xd8\x12\x7e\xbe\x9a\xb1\x0d\x1c\x85\x2b\x0e\x99\xe7\xf8\x67\xcd\x8f\x06\x6c\xc7\x8f\xfa\x23\xc5\x65\x22\x33\xb4\xe2\xee\xca\x18\x37\x1a\x75\x5a\x31\x34\xd0\x47\x0a\x16\xa6\xbe\xc3\xf1\x21\xc5\x63\x18\xf3\x8c\xc3\x77\xe8\x1c\x7c\xb4\xd9\x52\xb1\xa3\x49\xc7\x5f\x40\xa5\xd0\x66\x67\xd9\x19\x5d\x02\x45\xf1\x56\x32\x96\x5f\x76\x7c\xe8\x00\x30\x9f\xd0\xfa\x97\x1d\x4c\x5f\x34\xd2\x37\x7b\xe9\x59\x23\x1d\xd8\x52\xfa\x4d\xd5\xef\x56\xfd\xfe\xd1\xf1\x81\x9d\x84\x5e\x85\xd0\xa9\x2b\xec\x92\xbb\x6c\x71\xa2\xb2\x82\xb0\xe3\xc3\x70\x07\xf2\x65\xde\xf1\xd7\xd8\xcd\x15\x6c\x0c\xa3\x91\x1c\x3b\xe1\x0d\x64\xeb\xb7\x9d\x2f\xea\x7a\x91\x0d\x86\xae\x49\x26\x18\x12\x8f\xf8\xf2\xe6\x06\xed\x1f\x68\xa0\x1a\x45\xe0\x1c\xc2\x2b\xe7\xcb\xc9\xca\xdc\x59\xb5\xbc\x60\xc0\x56\x36\xc0\xa5\x8e\xc0\x4c\x30\xb3\x0b\xfc\xb5\x69\xea\x0d\x79\x43\x9d\xbf\x8f\xf9\x61\x19\x96\x3c\x0d\x09\xa8\x2f\x81\x04\xfc\xb5\x20\xb6\xeb\x0c\xd1\xd5\xe2\xee\xed\x34\x47\x1a\x7b\x7d\x7c\x9c\x7c\x39\x50\x06\x5c\x9d\x8e\xb2\xd5\xea\x8f\x81\x0d\xef\x23\x0a\x38\x3e\xee\x8f\x07\xbd\x64\x02\x20\xc7\x4b\x18\x6c\x2b\xdb\x87\x3f\x88\xf6\x27\x9d\x8e\x1f\x48\x8d\xdd\x46\x56\x19\x22\xbd\x87\x3a\xa9\xa0\x78\x9d\x89\x45\x84\x0c\xec\xca\x1e\x25\x48\xd4\x23\x90\xc0\x8d\x2b\xf0\x85\xce\xbd\x3b\x97\x34\x77\xe2\xf0\x0d\xe4\x59\xca\xcc\x58\xcf\x96\x5d\xb2\x0b\x3c\xad\xda\x20\x4c\xa9\xd8\x65\x63\x17\xb2\xb1\x6b\xbe\x9b\xb4\xb2\x08\xe8\x9c\x37\x18\xf5\xc7\xd7\x13\x6b\x0b\x10\xf1\x12\x8d\xfa\x7d\x7c\x34\x36\x6d\x9f\x5d\xdb\x90\x62\x7e\xba\xb6\x15\xf9\xdf\xce\x79\x81\x39\x0b\xd7\xfc\x78\x41\x46\x19\x38\xb1\xb0\x28\x5b\x1e\x59\x5b\x06\xd0\x5b\x29\xf9\xcf\xf9\x95\x3a\xe3\xee\x56\x3f\x5c\xea\x07\xeb\x0c\x58\xe9\x52\x3b\x71\xb0\xb7\x3c\x1f\x9f\x93\x98\xeb\x59\x96\x05\x3b\xeb\x9c\xe7\xde\x39\x54\x2e\x21\x41\x06\xd3\xdc\xd1\x4b\x77\xa6\x9a\x7a\xeb\x6e\xd9\x5b\x8d\x93\x73\x4f\xd7\xec\x53\x07\x00\x00\xf1\x2b\x96\xf0\xad\x7b\xc9\xac\xce\x29\x1d\xc4\x49\xe9\x26\xee\x5b\x1f\x00\x03\xbd\xbd\x75\xe1\xdd\xef\xfc\xad\xde\x1a\x43\x3d\x1f\x8f\xf9\xc0\x76\xa9\x80\x91\x70\x6e\xfb\x25\xf6\x3c\xf1\xdf\xa2\xa5\x9d\x2b\x4c\x3d\xf1\xaf\x0d\x49\x5b\x43\x64\xf6\x4f\x51\x3b\x0a\xe0\x18\x11\x8f\xee\xb9\xbc\x8c\x07\x13\xc2\xaf\xbf\xfe\xf2\xfc\xb0\xf5\x58\x2d\x28\x6c\xea\xee\xbe\x3d\xa4\xed\xa9\xd0\x15\x5a\x14\x00\x80\x8c\x80\xba\x1c\xd4\xce\x03\x5e\x31\x2e\x3c\x01\x24\x4b\x66\x6a\x6f\x0c\x79\xa6\x85\x25\xb1\xaf\x61\x68\x09\x0f\x61\xdb\xc0\x36\x91\x6a\x24\xb5\xe2\x55\xf6\x84\xab\xcc\x2e\x6e\xeb\x86\x65\x50\x4a\x56\x79\xda\xfc\x87\x93\xe6\x25\x40\xd7\x0e\xd4\x65\x8f\x07\x44\xb0\x8e\xb2\x71\x3a\xb2\x85\x95\xda\x5f\x46\x37\x37\x81\xc2\x2a\x7a\xaa\xdc\x54\xc9\x93\x60\x04\xb4\x35\xeb\x22\xf7\x65\xd5\x8c\x45\xc3\x9f\x47\xce\x14\xb2\x5d\x61\xc8\xff\x29\xb4\xb6\x1e\xca\xc3\x8b\x9e\x1e\x5c\x27\x96\x5a\x99\x12\xa6\x2a\x56\x0c\x0a\x60\x1b\xb7\xb7\x49\x77\x11\xa7\xc0\x26\x26\x2c\x91\x02\x09\x8e\x72\x59\x24\x27\x78\x09\x0f\xe9\x62\x01\x34\x16\x8f\x30\x95\xf8\xc6\x74\x24\x01\x42\xd2\x2d\x81\xfe\xfa\xde\x34\x7b\x09\x55\x55\x21\x50\xb9\xb2\xaa\xef\x91\x10\x85\x37\xaa\xee\x7b\x54\x1e\x20\x7f\x20\xab\xfc\x1e\xb5\x06\x98\x93\xaa\x0d\xcc\x59\xfe\xfe\x2e\xf1\xc5\xa7\x0c\xb6\x60\x68\x59\x21\x6c\xf4\xde\x69\x0f\xd6\xb0\x87\x2b\x5a\xa6\x86\xcd\x37\xd3\x20\x4d\x89\x6f\x81\xb0\x08\x10\x45\x20\x49\xe1\xba\x01\xba\x09\x9c\x3c\xa9\xe4\x3b\xcf\xd3\xb9\x78\x56\x58\x81\x4d\x9e\x14\x9a\x90\x20\x41\x66\x88\xa6\x42\x0a\x4f\x00\xab\x94\x87\x53\x51\x0b\x85\xa0\x26\x1b\x4d\xc0\xac\xd6\x37\xc0\xbf\x11\x7f\x35\x15\x2a\x2d\x42\xfb\x19\xa2\xcd\xcb\x09\xa1\x10\x2e\x26\x40\x21\xf8\x80\xf5\xfc\xd2\x46\x6e\x83\x9a\x14\x68\xac\x84\x34\x4a\x65\x4a\x76\xa8\x2b\xa9\x84\x44\x00\x42\x6f\xb5\x7d\x47\xc3\x96\xf8\x41\xd1\x25\x71\x96\xe1\x58\xa2\x15\x45\x1f\x76\xfe\xe0\x2b\xc0\xd5\x6b\x1f\xf0\xb5\x3f\x60\xdf\xc3\xef\x19\xfc\x3b\x87\x7f\x2f\xe1\xdf\x5f\xc4\x37\xdc\x02\xf1\x26\xd0\xbc\x85\xa1\x01\x0a\xb9\xd6\x1c\xd5\x5e\x6e\x06\xab\x36\x02\xec\x0f\x9c\x1d\x99\x13\x75\xbf\xe7\xf0\xef\xcb\xc1\xd0\x1d\x0c\x9d\xac\xbb\x91\x80\x37\xe2\x72\xe2\xb2\xee\x5f\xc0\xc0\x85\xc0\x58\xfc\x53\xc0\x62\xc0\xb2\x5b\xd1\xe4\x9f\xc2\x0f\xc3\x4a\xda\xf6\x0f\x55\x35\x49\x91\x49\xfc\x16\x0a\xfd\x09\xec\x02\x54\xbb\x63\x7d\x96\x75\xff\x01\xb0\x7b\xad\xdb\xea\xfc\x4e\x4f\x80\x85\x7f\xa5\x07\x7b\x62\x1d\x2a\x35\xc0\xa9\xda\xff\xac\x4a\x4f\xe0\xf5\xda\x7d\x6c\x7f\xf9\xc4\x7d\x02\xfd\xfd\xdd\x83\x3a\x00\x4f\x7f\x03\x10\xdf\x76\x1f\xc1\x67\x1f\xd3\x31\xe9\xd7\x46\x12\x96\x00\x4a\x60\xbf\xe6\xac\xbb\x86\x7f\x73\xd5\xe8\xf7\x69\x99\xe5\x38\x2b\x2e\xfc\xf9\x0b\x05\xf5\x37\x7d\x34\x3a\x39\x73\xe1\xf5\x4b\xa4\x97\xb2\xee\x39\xfc\x7b\x09\x84\x2b\x8c\xf9\xc2\x4f\x6f\xd1\xb6\x5a\xe9\x23\x0e\x70\x91\x49\xc3\x65\x44\x18\xd2\xba\xda\xb4\x92\xa5\x4a\x47\xa1\x17\x0b\xe9\x4b\xbd\x39\xc2\x71\x30\x22\xd9\x40\x36\x06\xde\x58\xd6\x0a\x48\x99\x4c\xc6\x8b\xc6\x21\x70\x5d\x9b\xd1\xd9\x90\xb2\x84\xb4\x76\xd8\xa2\xa4\x88\x3f\x9f\xa6\xc8\xd1\xe7\xe1\xa4\x91\xe2\xa7\x33\x76\x04\x30\xd3\x42\x18\x9f\x50\xef\xec\xd3\x7e\xd5\x94\x44\xe5\x72\x37\x09\xb3\xc1\x0c\xca\xd6\xb9\x34\x2c\x68\xb8\xa1\x4a\x50\x79\x61\x9a\xa2\x2b\x08\x72\x21\x49\x6f\xed\x39\x26\x6a\x37\x3c\x58\xe2\xa4\x7b\xcd\xaf\x89\xfc\x42\x76\xa2\x45\x5e\x32\xe1\xd2\x57\xb5\xaf\x81\x42\x69\x98\x0f\xc8\x26\xb7\x07\x9a\xdc\x7e\xac\xc9\xcb\xff\xa4\xc9\x48\x37\xf9\xe2\x40\x93\x2f\xee\x6f\x72\xcd\x9f\xfd\x27\x4d\xa6\xba\xc9\xf3\x03\x4d\x9e\x7f\xac\xc9\xb7\xff\x49\x93\x12\xed\xd5\x52\x60\xdc\xc8\xaf\xba\x61\xad\x89\xb3\x29\xb9\xe5\xc7\xba\x57\x60\x7b\x77\x81\xf8\x60\x81\x3f\xee\x2e\x90\x37\x95\xe9\x67\xd2\xf1\x4e\x0f\x1b\x06\xc3\x87\x76\x9b\x33\x69\x18\xc7\x67\x68\x09\x85\x4e\xb4\x9c\x2c\xfe\xb1\x9a\x05\x32\xc9\x80\xb3\x50\xba\x01\xcc\x8a\x7c\x01\x66\x00\xd8\x65\xfc\xb2\x81\x87\x8d\xc8\xa2\x14\xb8\xe6\x2b\x4a\xdd\xe5\xc0\xa5\x00\x9c\x5f\xa5\x19\x02\x9a\x1c\xf8\x3c\x98\xe3\x34\x29\x56\x39\x70\x7b\x2a\xe1\x8c\xde\x47\x05\xe1\x6e\x93\x6f\x30\xe1\x42\x1b\xc9\x16\x8a\x1c\xaa\xb1\x03\x52\x14\x48\x96\xed\x23\x58\x65\xbb\x6a\x10\x05\xa2\x8d\x4b\x0e\xd4\x9f\xc9\x3c\x46\xa9\x02\x7d\x22\x0f\x20\x70\x26\x6a\x10\x97\x55\x8f\x40\xcc\x01\xec\x5b\x97\x71\x11\x71\x1a\x9b\x7a\x0e\x84\x62\x97\x80\x7b\x41\xe7\x19\x9b\x6d\xf9\x9f\x85\x75\x85\xc4\xff\x5f\xf4\x7b\x81\xef\x00\x72\xaf\xf1\x1d\x7e\xcf\xf1\x7d\x8d\x34\xfc\x5f\xf4\xfb\x02\xdf\x77\x36\x7b\x86\xef\x3b\x7b\xb4\x39\x20\x8a\x45\x51\xc4\x19\xb9\x3a\xb6\x34\xa1\x68\x8b\x2b\xb1\xd8\x2b\xfe\x21\x38\x24\x2c\x99\x4f\x93\x0a\x31\xcc\x6e\xd9\xb3\x43\x79\xae\x9a\x79\x2e\x0f\xe5\xd9\xc9\x3c\xb4\xbc\x94\xeb\xeb\x43\xb9\xd6\xed\x5c\xa1\x5f\x58\x0b\x1b\x10\xf9\x41\x11\xfc\x0f\x85\xa5\x5a\x2e\x68\x30\x6c\x68\xc3\xfc\x7f\x46\xde\xef\xef\xcf\x2b\x31\x9c\xce\xfc\xc3\x27\x65\x06\xf2\xe0\xe6\x66\x30\x54\x65\xfe\xb9\xb3\xcc\xc0\x0d\x42\x3c\x14\x3f\x2d\x08\xbd\xa2\xfa\x92\x9d\x40\x89\x97\xf7\xb7\x72\x16\xc5\x71\x94\x8b\x30\x4d\xe6\xb2\x67\x58\x66\xfd\x91\x32\x72\x3a\xdd\x81\xea\xd4\xd9\xc7\x9a\x48\xca\x42\xd4\xe3\xde\x1c\x5a\xa9\xcd\xd4\x6d\x0c\x1b\x38\xb8\x21\x2e\xd8\xf9\xfd\x75\x9f\x1b\x3d\xc7\xba\x7f\xbd\x33\x3b\xcc\x4e\x0e\x04\x7a\x73\x82\xb0\xc8\xf5\x41\x99\x5e\xb5\x01\x6f\xd9\xef\xf7\xd5\x09\xf0\xe6\x40\x9d\x5b\xd8\x66\xc0\x17\xff\xe1\xa3\x10\x83\xed\xee\x1f\x43\x45\x12\xd9\x44\xe4\xc8\x1a\xfe\xfc\xf4\x32\xe2\x21\x94\x79\x08\x65\xfe\xf2\x23\xc1\x50\xfa\xb4\x47\x0a\xc1\x47\x80\x24\xcf\xf1\x4c\x66\x70\xe6\x4a\x38\x53\x11\x9c\x98\x14\xce\x43\x00\x87\xe1\x67\x80\xe5\xf8\xe7\x7b\x1f\x20\xee\x0f\xf8\xe7\x1f\x3f\x11\xb0\x75\x4a\x01\x7b\xe1\xc7\x02\x56\x58\x00\x04\xf6\x73\x58\x8e\x4c\xc0\x24\xff\x51\xc0\xb4\xfd\x56\xc0\xd4\x7c\x51\xc0\x60\x43\x18\x69\x0c\xc3\xfc\xbd\x80\x7e\x7f\x5d\x40\x47\xfe\x55\x50\x47\x52\x71\x7b\xc0\x3d\xf9\x87\x96\x2d\x16\x9a\x26\x76\x3c\x20\xed\x3b\x40\x45\x5b\x80\x1a\x12\x9f\xac\x56\x18\xba\x12\x37\xe9\xf4\x0c\xd5\xff\x91\x21\x6a\x10\x5e\x54\x09\x1a\x0a\xe0\xf9\x81\x37\x30\x1c\x6d\xda\xe6\x33\x95\x1b\x86\x35\xf1\x3b\x6e\x42\x20\xb2\x76\xc2\x50\xd5\x74\x6e\x3a\xd0\x3a\x3a\x50\x46\xa6\x03\xe5\x5f\xc5\xbe\x57\x35\x8a\x73\xc9\xb7\x31\x69\xbb\x53\x4b\xe8\x08\xdc\x4c\x0b\x40\xd6\xde\x39\xc6\x84\xfc\x56\xcb\x00\xc2\x03\x64\xc5\x22\x6c\xd1\x15\x80\x60\x07\x7b\x14\x14\x11\x10\xf7\xd1\x11\x7f\x7c\x66\x2b\xad\x16\x7e\xfd\x78\x0b\x5f\xfc\x77\x2d\xfc\xfe\xf1\x16\xbe\xfe\xfc\x99\x7a\xd8\x6a\x65\xf7\xf1\x56\x7e\xff\xfc\x56\x86\x7b\xad\x7c\x07\x6c\x6d\x46\x16\x45\xf7\xb4\xf4\xaf\x96\x29\x5a\xef\xef\xa9\xeb\xcd\xfe\x3d\xff\xf0\xf0\xf6\x0b\xa5\x08\xc7\xe0\x0f\x75\x3b\x8f\x6c\x1b\xab\xff\x8b\x7b\x05\xbd\x35\x6a\xfb\xae\x29\xc4\xb2\x92\xf1\xe3\xa7\x13\xe4\x5e\xfd\xa1\x38\x31\xb6\xf2\x8f\xff\xfd\xf8\xd6\xa4\x6d\x80\xbd\x7f\xcf\xe0\x7e\xfe\xef\x9b\x99\x7f\x7c\xb1\x12\xf1\xd9\xad\x9c\xb4\x5a\xf9\xe7\xe3\xad\x14\x9f\xdf\x4a\x7b\x2c\xdf\x7f\xbc\x15\xf1\xdf\xb7\x72\xf6\xf1\x56\xb2\xff\xbe\x95\xf3\x8f\xb7\x52\xfe\xf7\xeb\xf2\xf2\xe3\xad\x44\xc2\x54\xb2\x2d\xa5\x72\xf4\x7d\x9a\x88\x9f\x48\xe6\x86\x10\x97\x17\xe3\xbe\xc4\x2f\x6e\x07\x40\xf5\x32\x00\x44\xd1\x7b\xdc\xbf\x41\xcb\x30\x7a\xf9\xf2\x71\x65\xf0\x2b\xdc\x1f\xd0\x32\x0c\xb5\x3d\x43\x1b\x9f\x4b\xf5\x6c\x70\x80\xd5\xb8\x56\x87\xc6\xb5\xfa\x18\xb0\x6e\x0c\xa6\xc9\xe8\x89\x16\x86\xd1\x22\x89\xca\xdd\xbe\x90\x6e\xf2\xda\x29\xce\x52\x2f\xfb\xee\x6c\xfb\xee\xa5\x90\x73\x74\x84\xc6\x94\x18\xd8\xc3\xc6\x0f\x50\x61\xa5\xbe\xc3\x2e\x21\x7b\x63\x30\x91\xa2\xe1\x3b\x11\x8b\x26\xce\x16\xdd\x9c\x27\x6e\x81\xc6\xd3\x5e\x42\x86\xd3\xe5\x08\x38\x15\x9e\x00\x3e\xb6\x0a\xcf\xc4\xc2\xb9\x0a\xa1\x95\x1c\x1f\xcf\xc3\xee\x2a\xc8\x7f\xba\x4e\x8c\x38\x4a\x68\x55\x61\x63\xd2\x54\x3e\xcf\x5a\xa1\x2a\x16\xa2\x65\x76\x28\xa3\xcb\x54\xb6\x65\x82\xb4\xd9\x45\x37\x8e\x12\x71\x8e\xbe\x6c\x96\xad\x23\xce\xe0\x28\xcb\x19\x30\x4a\x1b\xf2\xc9\xa2\xbd\x84\x53\xc0\xd0\xc8\xd4\x1e\xc9\x32\x2f\x92\xb9\x19\x7b\x65\x25\x4c\x75\x71\x13\xb9\xcb\x86\x36\x69\xbc\x5b\xa6\x49\xdd\x16\x61\x7c\xec\x26\x7a\xe9\x16\x28\xbb\xae\x32\xb5\x2a\x5f\x8a\x56\x20\x34\x9a\x17\xb4\xc5\xc7\x28\x2f\xce\x37\x41\x6f\xe8\xbe\x0b\x7a\x0f\x47\x4a\xfa\xef\x65\xa8\x11\x1d\x73\x74\x1f\x82\xae\x04\x3c\x75\xd0\xe7\xb6\x32\xe3\x2f\x6c\x16\xd7\xfe\x2f\xf0\x96\xf3\xc8\x89\xd9\x82\x97\x4e\xe8\xe6\x4e\x95\x2f\xb0\x81\xa3\xce\x9d\xd4\xa9\xf2\x06\xf6\x68\x17\x52\x80\x03\xc3\x46\x7c\xc5\x16\x36\xd9\x5b\xa2\xcd\x24\xcc\x71\x7c\xab\x7c\x58\x19\x59\x7b\x8e\xce\x42\x39\x93\x35\x6b\x9b\xb2\x00\x58\x41\xfd\x19\x78\x64\x0e\xf8\x2a\xb5\x61\x24\x50\x45\xdd\x3c\xb7\x04\x0f\xec\x7a\x7c\xb6\x36\x1d\x95\x5d\x01\x16\x22\xd4\x6b\x61\xca\xf1\xa4\x04\xdc\xd8\x94\x1b\xf3\xb4\x13\x64\xe0\x09\xad\x67\xdd\x56\x45\x60\x4d\x33\xc7\x9c\xa7\xcc\x31\xe7\xa9\x7a\x16\xb6\xe1\xed\x75\xd5\x0c\xf6\x86\x2d\x38\xe8\x93\xe5\x62\x23\x0e\x7a\x61\xc1\xd3\x10\x9f\x86\x46\xa9\x79\xa3\xd4\x54\xe5\x1d\xa2\x97\xd6\x50\x96\x62\xea\x49\x79\x6e\x51\x2a\x53\x4f\xca\xb3\x8b\x52\x8d\x4a\xd7\xfa\xd0\x60\xf3\x1c\x13\x19\x66\xc3\x47\x55\x1f\x3e\x9a\xdd\xd8\xb5\xbb\x81\xd5\x33\x59\xb7\xea\x80\x91\xfb\xcc\x98\xc9\xda\x25\x80\x0a\x25\xd5\x88\x93\x6a\xc4\x09\x1d\x18\x4c\xe9\x71\x59\xa9\xfc\x1d\xe2\xaf\x61\x5d\x2e\x6a\x02\x64\x6a\x6c\xac\x44\x76\x1a\x89\x21\x74\x3d\xc3\xca\x8c\xbe\x5c\x36\xa7\x1d\x60\x32\x66\xf5\x70\xd0\xf6\xe9\xf3\xe0\xf8\x98\xbe\x0c\xf0\xcb\x80\xbe\x18\x36\xc9\xc2\x38\x43\x23\xc3\xc4\x83\x56\x9d\x9c\x5c\x46\xd7\x00\x84\xeb\xad\x80\x0a\x2e\xc7\xf0\x7a\x61\xc6\xb6\x30\xad\x81\x2b\xa8\xe3\xba\xdb\x90\x5d\x84\x2e\xb7\x12\xef\x22\xb4\x7b\xf0\x76\x8d\x6f\x85\x77\x2d\xdf\xce\xf1\x4d\x78\xe7\xf4\x66\x98\xdd\xee\x9d\xf5\xd2\xec\x67\x54\xf7\xb3\xa4\x7e\xc2\x49\x8f\x1a\xdd\x0c\xf4\xbb\xea\x68\x58\x1f\x99\xb2\x3a\xf7\x72\x7e\xeb\x15\xb4\x62\x2e\x9c\xd0\xcb\x1c\x38\x6e\xb1\x8b\xa6\x0b\x4e\xea\x15\x4e\xa8\xde\x0a\x27\xf0\x84\x03\x07\x34\x86\x95\x70\x52\x57\x38\x81\x9b\x41\xea\xe8\x12\x06\x11\xb3\xb7\xf8\xd7\xb1\x0a\x97\x4e\xb1\xcd\x5e\xc8\x77\xe1\xd2\xf9\xb5\xd9\x33\xf9\x0e\x5c\x58\xc6\xd1\x80\xe4\x5a\x28\x13\xdb\x1a\x50\x8c\xde\xed\x01\x09\x8a\x1e\x50\x56\x23\x4f\xeb\x91\x47\x72\x85\xa0\xb1\x7a\xe4\x25\xa2\x6c\x03\x52\x95\xb6\x3e\xde\xf8\x16\xd9\xec\x5d\x0d\x6e\xea\xf6\x0d\x1b\x65\x9c\xf7\x2a\xcf\x85\xa1\xf5\x7c\x71\x27\xf4\x3d\xbc\x73\x10\xf6\xb6\x56\x44\xdc\xb5\x22\x04\x89\x01\xea\x7a\x91\x13\x10\x14\x4e\x61\x0d\x42\x80\xc4\xb0\x12\x5e\xe9\xa4\x6c\x65\x1c\xb3\x18\x16\x23\x77\x72\x77\xe1\x2c\xd0\xdc\x01\x96\xc8\x2d\x61\x21\x22\x28\xb0\x41\xc3\x0a\x2f\x41\xb9\x41\x6f\xc5\xae\x78\x03\x3a\x2f\xed\xd1\x2b\x58\x81\x0d\x80\xf8\xe7\xf4\x9b\xb3\xf7\xf4\xbb\x60\xb8\x7e\x57\xb4\x7e\x57\x6a\x7d\xf4\xfa\xc1\x7b\xe9\x5a\x65\xb5\x7e\xf0\x0e\x28\x3a\xd2\xeb\x27\x83\x3b\xb4\x00\xfd\xfe\x1a\x12\xa0\x87\x75\x62\xa8\xb8\x34\x56\x20\xad\xa6\xcf\x40\x4b\x81\x5c\x56\xd8\x23\xf5\xf4\xa5\x68\x0f\x1f\xd6\xd3\x97\xb6\x70\x80\xd1\x17\xac\xff\x4e\x6c\x60\x26\xbe\x15\xcc\x5c\x68\xc3\x1a\x5c\xec\xc5\x83\x31\x0d\xc1\x51\x3b\x8e\xef\xac\x20\x77\x5a\x86\xf6\x47\x75\xd8\x19\xe9\x74\x4c\xf2\x58\xfd\x64\x09\xf5\xd8\x30\x1c\x35\xea\xd3\x59\x65\xb5\x02\x63\x97\xe8\x0f\x75\x03\x0d\x15\xfc\xab\x3a\xfc\x8a\x19\x94\xf0\x79\xa5\xa6\xaa\x22\xdb\x49\x03\x2f\xa9\x71\x4f\x0e\x1b\xc6\x2e\xac\x23\xcb\xaa\x09\x46\x6f\x60\x9f\xf2\xbe\x6d\x84\xa0\x20\xca\x07\x7e\x0a\xaa\xe5\x52\x4e\x07\x1c\xca\x06\xd5\xa4\x29\xc6\x00\x88\xd9\x62\x1c\xa0\xce\xd7\x2e\x15\xed\x84\xda\xda\x69\x30\xb3\xab\xd1\x8c\x4c\x9b\xf4\xd2\xa0\xa4\x94\xb2\x5c\x5c\x3f\x78\x27\xc8\x28\x96\x2c\x44\xd1\x32\x36\x36\xbe\xe2\xb7\x90\x1d\x01\xad\x14\x76\x53\x80\x3c\xca\x14\x2d\xac\x14\xbb\x68\x58\xab\xf3\x67\x55\x2d\x03\xa3\x96\xac\xaa\xa5\x4f\x4a\xf6\xc3\xb5\xdc\x92\x65\x6a\x8e\xd6\xa4\x70\x46\xdf\x0b\x84\x20\xef\x05\x6d\x3f\xcd\x50\x7c\x30\x06\x8e\x96\x66\xd0\x44\xaa\x49\xbe\x58\xcd\x43\x0a\x83\xef\x0a\x1e\xf2\xa3\xb0\x9a\xa7\x9c\x2d\xe0\x58\x47\x30\x25\xa3\x51\x5d\xc9\x92\xaf\xe0\x14\x1f\xf5\x47\xcb\xee\xd5\x08\xa3\x77\x58\x4b\xbe\xec\x26\x18\xc4\x53\x6b\x82\x47\x39\x7c\x79\xcf\x9a\xb3\x3f\x4f\x71\x1d\xa1\x10\xa4\xa5\xf0\x17\x2d\xcb\xba\x82\x16\x77\x63\x9b\x3d\x8c\x79\xde\xee\x5d\xb5\x4a\x0b\x9e\xeb\x55\x5a\xd0\x2a\x91\x02\x31\x83\x6a\xb7\x50\x5b\x02\x7f\x07\xb0\xaf\x46\xd4\x23\x52\x2e\xca\xea\x3f\x60\x87\x36\xdd\xf7\xc6\x16\xc8\xab\xbd\x34\x0a\x80\x00\x1d\x79\xde\x3d\xcd\xdc\x36\x9a\xd9\xc0\x5f\xaf\x6a\x67\x73\x8b\x7f\x53\x26\xc7\x0c\x33\xb3\xb9\xbd\x5e\x45\xc0\x4f\x1c\xc1\x58\xed\x91\xb9\x75\xcc\x70\x79\x42\x6d\xec\x7a\x57\x9b\x61\x26\x61\xfb\x72\xe4\xdf\x70\x63\xc3\x0c\x64\xc8\x19\x95\xdd\x84\xe3\x2e\xcd\x60\x87\x76\x37\x18\x9a\x85\x8b\x91\xfe\xd8\x57\x1f\x8d\x26\xde\x19\x1a\x61\x32\xef\x41\x3b\x2b\x7a\x78\x0f\xb4\x8d\x0c\x89\x84\x21\x48\xf0\x41\xf0\x4c\x3e\x5c\xa1\x2d\xa1\x8c\xc3\xa4\x42\x16\x91\xba\xde\x30\xb8\x35\x6a\x6d\x73\x65\x84\x08\x0d\x55\xa2\xc1\x4f\x95\xf4\x82\xa1\x6f\xa5\x19\x27\x34\x88\x13\x8b\x76\xd8\x72\xce\x8b\x56\xa4\x3c\x83\x49\x29\x65\x48\x93\xb9\xca\x69\x40\x1c\x43\x25\x68\x7f\xd8\x29\x48\x19\xb0\xb9\xb9\xf1\x4c\x35\x60\x9d\x29\x55\x99\x5a\x0c\x4c\xae\xda\x95\xa7\x6b\x0a\x2f\x2a\x64\x46\xd5\x8b\xed\x3d\xbd\x58\x58\xa4\x1d\xae\xdb\x06\x04\x37\x35\x08\xc1\x15\xa4\xe7\xd6\x95\x0c\x46\xc1\xe8\x17\x6d\x10\xb7\x75\x4f\x46\xda\xd6\x78\xdb\x45\xe3\xe8\x84\xf8\xfb\xb3\xee\x65\xb9\x58\x88\xcc\x22\x5b\x52\x7d\x36\x60\xef\x40\x37\x53\xd4\x81\x6d\x64\x77\xaf\xb0\x3d\x82\x19\x19\x9e\xcb\xc1\x31\xa2\x7f\x8e\x1d\x95\xa6\x82\x06\xab\x07\xdb\x37\xe5\x52\xd5\x9f\x8d\xfb\x72\xe7\x5d\xde\xdc\x58\x51\x8b\xfb\x63\x97\x1c\xa1\x4f\xd4\xe2\x3e\x53\xe4\x08\xf5\xca\x59\xb8\x4d\x53\x79\x5a\xc8\xa8\x72\x14\x99\x7b\x5e\x1e\x9d\xf1\xe0\xf8\x78\x78\x5c\x54\x91\x44\x85\xec\xba\x11\x7d\x74\x15\x2d\x0a\x8b\xec\x23\x75\x8e\x45\x14\x17\x30\xea\x5f\x84\xf2\xcd\x5f\xb2\x0d\xbb\x62\x73\x4e\x66\x46\x6b\x5e\x6a\x14\x54\xf1\xbd\x36\xdb\xf1\x0f\xd4\x29\x3f\x65\x55\x8f\xfd\x90\xa9\xee\xf8\x31\x33\x87\x67\xea\x11\xf4\xbe\xc8\xd9\xae\x1e\x2b\x5f\xa8\x37\x44\xc6\x40\x9e\x20\xa6\xda\xe0\x8a\xb2\x9a\xfd\x3d\x54\x49\xda\xa8\x24\x34\x2a\x89\xa1\x12\x54\x5d\x8a\x0c\x58\xe5\xa5\x5a\x6e\xfe\xad\xb0\xd6\x6c\x03\xe0\xa4\x72\x2e\xb9\x67\x2d\x00\x83\x2e\xd9\x37\x88\x78\x04\x1c\x37\xdb\xc7\x00\x09\x9f\xba\x74\x4c\x28\x7f\x06\xfc\x33\x80\xe2\xcc\x58\x2a\x28\x01\x55\x45\x0d\xd6\x1e\x2b\x19\x20\x0d\xa7\xc0\x00\xcb\x37\x2b\x91\x09\x73\xd0\x7b\xed\x7e\x7a\x8b\xac\xd9\xd8\x2d\xf0\xc9\xfc\x8d\x20\xa5\x6e\x61\x9d\xc9\xc6\x35\x1e\xde\x19\x90\xed\x17\x71\x20\x2e\xf6\xd8\x90\x34\x61\x25\x95\x9b\xda\x54\x4b\x81\x3e\xd4\x5b\xc2\xe8\x7f\xa1\x0c\xaa\x20\x1f\x2a\xef\x68\xf7\x34\x2d\xd4\x54\x40\xe7\x29\xbc\x60\x16\xbd\x99\x2e\x99\x3c\x96\x66\x65\x2a\xc0\x5e\xa5\x03\xc1\x1d\xa3\x63\xf0\xde\xb2\x4c\xa0\x02\xa6\xd9\xb8\xee\x3c\x92\x63\xd4\x4c\xd1\x3c\x19\x45\x7d\x32\x4c\xfc\xf1\x4d\x83\xa7\xb4\x28\x8e\xd5\x16\x8f\x20\x06\xa8\x40\x5e\xf2\x4d\xe0\x3d\x0f\x7c\xf8\xab\x62\xac\x90\x9c\x5d\xe7\x28\x1a\x39\x8a\x26\x14\x7b\x2d\x8c\x60\x69\xe4\x61\xaa\xfd\x4c\xe1\xef\xbd\x53\x99\x34\x56\xbe\xe0\x83\xbd\xf9\x8c\x58\x2a\xab\x06\xe6\x6f\xdc\xc7\x00\x2e\xde\x3b\x74\xec\x05\x0e\x38\xf2\x00\x3f\xc0\x6f\x08\x5f\x90\x09\x46\x01\xa9\x02\xb5\x28\x76\xc9\xdc\xd4\xee\x0d\xa1\x0c\x86\x72\x79\x83\x51\x95\x54\x6a\x89\x14\x69\x62\x6c\xaa\x66\x2f\x74\xb6\x40\x66\x93\x2f\x11\x11\xc7\xe8\x56\x52\x1e\x71\x0e\x1c\x78\x38\xe6\xef\x30\x66\x13\xb4\x2f\xbc\x52\x72\xe5\xf0\x04\x1c\xcf\x73\x68\x8a\x7a\x17\xa8\xaf\x91\xc7\x03\xfa\x9a\xf1\x5f\x89\xce\x44\x23\xab\xff\xac\x3b\x32\x78\x85\x1e\x25\x87\x5e\x71\x62\x23\x82\x7a\x93\xed\xcd\xae\xac\x14\xd0\x27\xae\xc6\x2d\x23\x2c\x71\xc0\x77\x74\xe8\x15\x0d\xf3\x5f\x03\x6b\x57\x96\x61\x46\x64\x19\xaf\xd6\xdb\xc1\x60\x53\x7b\x0c\xf3\x5f\xb1\x66\x96\x65\xb0\x81\xc0\x5d\xd5\x8c\x10\xd0\xd8\x8e\x21\x6a\xf2\xaa\xe7\x0c\xf2\x95\xa6\x1c\xcf\x36\x19\x4b\xbb\x67\x95\x0e\xb0\x90\x68\x3e\x5f\xb8\x59\x23\x5a\xce\x3f\xed\x9e\xd6\xa1\xbd\x12\x1b\x28\x1e\xe7\x0d\x4c\x9d\x9a\x32\xdc\x3b\xc8\x3e\xab\xd7\xbe\xf9\xd2\x4c\x82\xb7\x7e\xe3\xcd\x6b\x94\x33\xdf\xbc\x56\xaa\xd7\x2c\x2b\xdb\x1c\x69\xc3\xb5\x86\x30\x07\x66\x4d\xf3\x34\xf8\xf1\x14\x3f\xaa\x3d\x3e\xc2\xae\x47\xbd\x61\x5d\x4f\x74\x67\xd7\x31\x45\xa1\x4d\x4d\x1c\x21\x86\x6b\x1d\xd3\x6f\x1b\x82\xdc\x8a\x03\xc2\xa0\x78\x7c\x6a\x2c\x0a\xf3\x0c\xd9\x21\x83\x5c\x11\x50\x96\x29\x50\xbc\x3b\xf2\x8e\x13\x2d\xce\xc8\x30\x15\x24\xfb\x40\x24\xbf\x3f\xc8\xa8\x78\x05\xd0\xc4\x40\xe6\xc6\x06\x05\x92\x57\x94\xfb\x82\xc7\xd8\x85\x15\x5f\xe0\xcf\x92\x23\xdd\xac\xa4\xa1\x80\x33\xab\xfe\x2c\x6d\xcd\xf4\x63\x87\xe0\x6d\xce\x07\xc8\x5d\xcc\x81\x7d\xc0\xa8\x65\x73\x3a\x12\x50\xd7\x5c\x12\x2d\x6b\x39\xb2\x1d\x8d\x4c\xd7\x77\x56\xd7\xb7\x43\x64\x51\xd5\xb7\x43\x9c\xb1\xf6\x56\xec\x82\x5f\x56\x52\xe5\x6b\x7e\xe1\x5c\xb2\x73\x7e\x3d\x86\xa5\x7b\xcb\x37\xce\x19\xf6\x7c\x5f\x3a\xfc\xd6\xb9\xa8\x37\xe9\x35\xf4\xd3\xd9\xba\x6f\x6b\x06\xff\x1a\x69\x93\xc8\xe5\xe7\x93\x4b\xf7\xc2\x79\x19\x00\xfc\x3f\xff\x7b\x35\xe6\xe2\xef\x35\xfc\x91\x73\xf4\x82\xcf\x85\xb5\x11\x68\x82\x43\xa2\x5c\x7b\x74\x26\xac\x17\x12\xcd\x3f\xc3\xb4\x92\xbd\xa0\x6f\xcf\xb4\x15\x91\x75\xfe\x37\xf5\xd4\x1b\xf8\x03\xdb\x29\x0a\xeb\x19\x49\x22\x81\x2a\x7b\x75\x73\x83\x01\xf9\x5e\x61\x38\x3b\x98\x82\x9b\x9b\x17\xb8\xfe\x64\x8d\x0c\x9d\xf8\xbb\x1a\x9f\x7d\x8b\xec\xf1\xdc\x75\x6d\xe9\xfd\xb2\xe2\x6b\x9c\x70\x98\xe6\x2d\x5b\xf0\x44\x87\x32\xb3\x00\xd8\x8f\xa3\x9b\x1b\xfc\x8b\x8e\x22\xbb\xd0\xfe\x7b\x70\x9c\x1a\x26\xda\xa2\x6d\x3f\x6d\xc8\x2c\x0d\x29\x91\x29\x75\x1e\x47\xb7\x4d\x3b\x33\x69\x5e\x1d\x01\xd3\x1a\xb3\xfc\x5e\x5c\x11\x23\xaf\x39\x80\xed\xb4\x8f\x24\x80\xeb\x94\x35\x2d\x91\xda\x82\x37\xa0\x95\x81\x20\xc0\xcf\xb0\x5d\xd2\xc9\x15\x3a\x67\xd0\xab\x7f\x35\x81\x07\xd7\xea\x8f\x17\xea\x9c\xd9\xf8\x95\xe2\x71\x1c\x09\x72\x6d\x0a\xf9\x95\x8d\xe2\x8a\x06\x55\x7e\x24\x7d\x81\x96\x3c\x03\x00\xbe\xb1\x99\x94\x18\xa0\x3f\x0e\x3c\x6c\xe0\x01\xa7\x79\x43\xa2\xe9\xe7\x01\xdb\x90\x60\x1a\x1e\xb0\x17\xf8\x95\xbe\xe0\x76\xa0\x8a\xec\x1c\x4e\xcd\x15\xa2\x2b\xb3\x0d\xac\x7b\x43\xbe\x06\xea\x0c\x2f\xe9\x5c\x50\x41\xbf\x6e\x79\x3f\xd5\x44\x1e\x08\xe8\x97\x15\xac\x01\xec\x03\x63\x4a\xff\xbe\x92\xb3\xb3\x1e\xcd\x8f\x61\x41\x8f\xac\xb5\x6c\x0a\xe5\x04\xe8\x54\x8e\xdd\x49\xdb\xdd\xd1\xed\xac\x15\xf3\xb1\xd6\xcc\x47\x9d\x30\x50\x09\x83\xd9\x5e\x37\x7c\xeb\x53\xb2\xdd\x81\xea\xda\x4d\x02\x21\x73\x74\x75\x73\x03\x43\xa1\x59\xdf\xd8\x78\x39\x8d\xcc\x5a\x4f\x2e\x0c\x7c\x03\xa0\xe8\x0a\xa0\xd5\xfc\x20\x36\x0c\xf5\xa2\x6a\x84\x28\xe9\xd3\xbb\xf0\x61\x7e\x63\xc5\x80\xe6\xed\xd3\xd3\x81\x89\x17\xb3\xa6\xd6\x8f\x0e\x2d\xc0\x4f\xe9\x47\x9c\xf2\xe9\x80\xf5\x11\x64\x06\x78\x76\x51\x62\x85\x5d\x12\x80\xbc\x03\x94\xd3\x04\xd8\xdb\x9c\x87\x5e\xec\xc4\xb4\xe3\x72\x7d\x1d\x07\x0a\xc8\x46\x12\x2a\x46\x4e\xd8\xcb\x01\x2c\x7a\x91\x13\xc3\xc3\x12\x6b\x42\x61\x23\x6c\xed\x1d\x3e\x2d\x10\x20\xee\xb0\xce\x95\x3d\x5a\xe3\xee\xbb\x92\xb0\x61\xce\x97\xc0\xe4\x5c\xe1\x97\x39\x32\x36\xf0\x34\xc7\xa7\x33\xbe\x76\xd6\xde\xce\xb1\x28\x69\x83\x01\xe4\xa8\x71\x38\x04\x67\x4a\x24\xb6\x35\x64\xb1\x44\x46\xef\xb0\xac\xe5\xad\xbd\xad\xdd\xdb\x51\x76\x68\xe9\x12\xf7\xdf\x25\xdf\xc2\x93\xcd\x8e\x84\xb6\xe2\xbf\xa4\xd6\x2f\x00\x6c\x12\xe4\x3d\x97\xca\x99\xb7\x12\xb5\xbc\x20\xfd\xcc\xe8\x7a\x7c\x0e\x07\xe4\x82\x5f\x43\xae\x73\xc8\x72\xa1\x41\xdc\xb9\x77\xcd\x5e\x21\x35\xf7\x4c\x51\x71\xec\x39\x7f\x45\x40\xe7\x19\x75\x12\xa0\xd9\xdb\xf1\x0b\x2a\xfb\x16\xea\x7c\x01\x15\x5e\x00\x4b\x33\x79\x35\x79\xeb\xbe\x18\xf7\xff\xbe\x84\xda\x4f\x11\xa9\x5e\x22\x52\xbd\x26\x3a\xf0\xad\xff\xc2\xf6\xdf\x9e\x72\x4c\x83\x3d\x83\x39\xf8\x0b\xff\x19\x40\xf3\xbf\xad\x6b\xfc\xdc\xa7\xcf\x80\x6f\xf9\xb9\x9a\x80\xf7\xd5\x88\x5d\x39\x62\x6d\x2f\x29\xac\xf7\x38\xea\xe9\x25\x83\x61\xbf\xb7\x67\xe6\x5e\x28\x4d\x79\x45\x3a\x49\xfc\x77\x40\x3c\x23\xd5\xab\x4a\x7b\xd9\xb8\x98\x94\x37\x7c\xe0\x17\x63\xf2\x91\xbf\xe1\x43\xc0\xae\xd9\x58\xe0\xd7\x87\xbe\xd0\x5f\x9f\xc2\x16\xba\x6d\xe9\x40\x12\xd2\x7f\x8c\xd1\x8d\x15\xa9\x49\x24\x15\x90\xec\xc5\xfd\xf7\xd8\xf9\xa6\x0e\x7b\xf2\x52\x4a\xfc\x43\x38\xc1\x53\xa0\x4b\x92\x99\x3f\x45\x8a\x23\x81\x3f\x26\xf2\xff\xe9\x3e\x29\x4c\x7d\x63\x48\xd9\x85\xad\x0a\x7f\x2f\xa1\xad\xb4\xbb\x25\xc1\xdf\x0e\xb6\x6c\xd0\x45\xdc\x10\xc0\xf3\x8a\xa3\x83\xe7\x00\x76\x63\xee\x85\xb0\x13\x17\x1e\x6d\x65\x20\x60\xe0\x75\x83\xd0\x05\x3a\x6d\xcb\x08\xa7\x3d\x38\x92\xe4\x40\x08\x2f\xab\x71\xa4\x85\x7d\x4b\x44\x28\x00\xd1\x22\xbb\x32\xe7\xdf\xa0\x4c\x81\x1c\xa8\x96\x3a\x57\x34\x96\x5e\xa9\x11\xe1\xab\x88\x0b\x5d\x7f\x1f\x6a\xda\xaf\xff\x70\xc9\x76\xfd\x87\x7b\x41\xf5\x17\x5e\xcc\xae\xda\xfd\xbf\x82\xfa\xaf\x3e\xa1\xff\x57\x1f\xef\x7f\xa6\xeb\x37\xfb\x5f\xd7\x7f\x7f\xff\xaf\xee\xed\xbf\x5a\xd0\x15\x39\x38\xc3\x12\xf2\x0f\x5b\x3f\x74\x57\xce\x86\xed\xfc\x18\x7e\xaf\x6e\x6d\x36\x18\x2f\x29\xf1\x52\x26\x2e\x55\xe2\x92\x12\xcb\x5b\xfa\x5f\x6d\x90\x28\x0e\x46\x72\x21\x11\x7c\x4d\xf5\x93\xc1\x53\x42\x47\xae\x04\x3e\xab\xef\x9f\xf8\xfa\xab\xa8\xbe\x0e\xfd\x81\xfc\x8a\xea\xca\xea\xeb\xc0\x07\x8c\x0c\xbf\x27\xfe\xb0\xe5\xbd\x50\x35\x90\x5a\x28\x9d\x45\x16\xb4\xe5\x6c\x60\x4a\xf9\x06\xc8\x55\xe1\x39\xac\xfd\x9d\xc4\x11\x5a\xd3\x0b\x2f\xf3\xfb\xe4\x23\x55\x69\x94\xfd\x01\xbd\x57\xd4\xb7\x3f\x54\xef\x4a\x91\xea\x57\xfa\xe8\xbd\x88\xbd\x81\x31\x0d\x61\xd3\x26\xa5\x0f\x98\x64\xae\xed\x52\x2a\x7a\xba\x3f\x12\xe3\x12\xad\x2e\x2a\x72\x17\x4f\x17\x1a\x2c\xcc\xd1\x00\xa3\x8e\x12\xae\xb0\x02\x50\xce\x29\x8a\xc9\xec\x08\x5e\xd3\x19\x8b\x09\x68\x65\x93\x08\x7e\x11\x4a\xfc\x6c\xc5\x0c\x23\xd9\xe0\x0a\xbb\x6e\xe1\x47\x32\xbd\x4e\x38\x85\x04\xcf\xc3\xc8\x33\x91\x9e\x88\x3e\x86\x60\x30\x85\x99\x11\x06\xb0\x62\xb1\x9c\x3f\x44\xfa\x0b\x19\x88\x4c\x32\x4b\x11\x51\x02\x25\xc5\xa8\xb0\xa1\xa8\xb5\x80\x17\x8a\x78\x75\x73\x93\x62\x59\x68\xe3\xef\x10\xf7\xe1\x3c\x7d\x10\x6b\x36\x04\xa9\xf0\x9b\x9b\x13\xfc\x01\x00\x28\x58\x3e\x1e\x4c\x32\xbf\xb0\x47\x52\xa4\x0d\x35\x5a\xb9\x1b\xba\x0f\xed\x2f\x1f\x62\xa5\x0b\xb5\xa5\x75\x79\xc2\x88\x41\x93\x4f\xc9\xa5\x58\x58\x8d\xa2\x1c\xa3\x9f\xb2\x18\x53\x08\x0e\x8a\x9e\x9e\x8d\x79\x64\x8a\x50\x69\x4b\x48\x39\xec\xf1\x71\xa0\x2a\x6e\x9a\xcc\xa0\x1c\xf5\xb9\x92\xb5\x01\x76\x3c\x3e\x9e\x4b\xd1\xc9\x1a\x65\x38\x80\x8e\x8e\xfa\x80\x97\x80\xb8\xbc\xe4\x17\xbc\x71\x7b\xdd\x12\x45\x34\x48\xda\x59\x3b\x06\x88\x71\x7b\x7c\x7c\x7d\x7c\xfc\xac\x2b\xe5\x32\x48\x18\xca\x7a\x9e\x55\x02\x57\xa0\xc0\x74\x43\x0b\x76\x8d\xfd\x39\x20\x34\xde\x28\x4d\x6b\xed\xf6\xed\xfd\x12\xd6\x8e\xdf\xf0\x9c\xa0\xdb\xe7\xdd\xc9\x85\xad\x85\xcc\x72\xdc\xb8\x8a\x30\xaa\xb5\x29\x85\x66\xe7\x36\x30\x41\x80\xfd\x0b\x60\x78\x04\x0e\x72\x80\x7a\x38\x2b\x68\xd0\x5c\xe6\x7c\xd5\x4c\x2a\xe4\xbb\xb6\xcd\x24\x4a\xd1\x0e\x80\x81\x0f\x20\xe4\x12\xc0\xc7\x05\xfa\x22\xc0\x73\x02\xcf\xc5\xed\xed\xe8\x95\x85\x7e\x74\xd7\x14\xdb\xe5\x50\x23\x59\x17\xf1\x08\xfe\xdd\xd9\xe6\xd7\x4b\xfa\x7a\x09\x5f\x99\x40\x77\xd9\x9a\x4a\x7b\x8b\xd2\x44\xff\xfe\x6e\xcb\x4c\xb7\x97\x30\x58\x74\xfd\xbc\xe6\x82\x70\xe9\x15\x9b\xb3\x35\x83\x65\x63\xe4\x72\xce\xae\xd9\x39\x7b\x0b\xe4\x43\xc0\x9e\x49\x99\xe1\x2b\x6e\x20\x45\xb4\x05\x57\x5c\x85\x21\x08\x5e\x55\x84\xe4\xf2\x4e\x41\x70\xc0\x9f\x91\xd4\x1e\x38\x8d\x29\x92\x3d\x47\xfd\xbb\xa4\xbd\x01\x90\x2f\x57\xb5\x34\x57\x91\x6d\x05\x0f\x71\xc5\x32\x22\x61\xdf\x1e\x1f\xa3\x09\x99\xf6\x34\x1f\x59\x30\x1f\xa5\x4d\xc3\x6f\x09\x4d\xf7\xe7\x24\x6e\x08\x4e\x03\x9c\x24\x83\x2f\x80\xe3\xf3\x1c\xda\x04\x60\x01\x40\x42\xa6\x9a\xa2\x54\x24\x2a\xe7\x7c\x2d\x89\xe2\xca\x46\xfd\xb9\x79\x49\x83\x61\x20\x83\x40\x0f\x18\xeb\x13\xf4\xc4\xce\x24\x05\x9c\x49\x7d\x8d\x3e\xb5\xe8\xce\x13\xc4\x31\x6c\x9b\x4f\x0a\x8e\x94\x59\xd2\x7e\xc9\x81\x5a\x07\x4f\xfb\xca\x8c\x49\xbd\xd9\xfe\xb4\xe8\xbd\x0b\x1c\x4a\x50\x0f\xb3\x5b\x66\xdc\x76\xf2\xd7\xbe\x7a\xbb\x1d\xe2\x84\x68\xdb\xc8\x1b\x3a\xa5\x69\xf7\x64\xf7\x4a\x6d\x1d\x65\x5a\x32\x38\x1c\x28\xf7\xd4\x6b\x18\x3b\xcc\x94\x67\x93\x69\xef\x80\xd6\xf9\x6e\xa3\xba\x21\xf0\x1f\x03\x37\x73\x2c\x0c\x7b\x9a\x55\x01\xff\x64\xeb\x75\x6b\x0f\xf6\xf5\xe7\x46\x87\x53\x4f\x0b\x84\x1b\x36\x43\x30\xbf\xbd\x12\xed\x85\x60\x1c\xd0\xc7\x84\x82\x95\xc2\x78\x4a\xbb\x87\xcd\xd9\xe8\x1e\x62\x28\xd4\x7f\x3b\x64\xdd\xf1\x4d\xe8\xf2\xd2\x01\xd2\xd4\x29\x94\x5d\x5b\x61\x9a\x3a\x8c\xbe\xdf\x33\x74\x20\x09\xec\xf7\xb5\x81\x43\xc1\x61\xd1\x61\x81\x4a\x9e\xde\xb2\xef\x3f\xcd\x4c\xed\x0f\xb5\x1e\xaf\x43\x0a\xcf\xfc\x3a\xe4\x78\x93\xd4\xf8\x1f\xe4\xa9\xff\xa1\x97\x5f\x43\x8a\xc9\xf2\x6b\xc8\x31\x08\xce\xf8\x5b\x4c\xf9\x16\x5f\x0c\x63\xfa\x43\xe3\x51\x6a\xed\xce\x59\x87\x25\xac\x03\xff\x15\x68\x30\xd1\x16\x4a\xec\xe7\xaa\x40\x08\x17\xb7\xed\x5d\xa3\x73\xbf\xac\x73\x9b\x0c\x20\x1c\x64\x3d\x19\x26\x2f\x50\x97\xfb\xab\xa3\x43\xcb\x7d\x2d\xac\x87\x5d\x0a\xfb\x48\xae\xe3\x0a\xc2\x24\xec\xa0\x80\x43\xd7\x5a\xd4\xec\x6b\x76\x37\xd4\xa9\xe6\xbd\xbc\x13\xdc\x54\x59\x32\x56\xf7\x58\xca\x4e\xde\x04\xf3\xa8\xcc\x0f\x39\xfa\x50\xa7\xd1\xb4\x07\xb5\x0f\x79\x19\x37\x5a\x45\x4f\xde\x4a\xf9\x2c\x55\x51\xb5\x27\x79\xe5\x70\x4e\x3a\x8c\xdb\x1a\x8a\x18\xe6\x69\x5f\x1b\x8a\x98\xce\xba\xcf\x3a\x6e\xe2\x76\x02\xfa\x2b\x9f\x1f\xf4\x1f\x0c\xd8\xe0\x01\xa6\xc0\x59\xbd\x3b\x91\xd2\xde\x1b\x41\x29\x7e\x57\x8b\x87\x86\x69\x09\x19\xa4\x15\xcc\x75\xcf\x0d\xfb\xb3\x7f\xed\xed\x1f\x2d\x31\x06\xde\xa5\x90\xb1\x8e\x1b\xe7\x15\x4e\x96\x1b\x39\x91\x3d\x42\x2b\xa2\x14\xad\xc0\x30\x4e\x3b\xd9\x10\xa5\x68\x03\x86\x72\x68\xb2\x20\x4a\x19\xb4\x8e\x67\x43\xf0\xda\xf2\x6b\xf4\xc3\xde\x51\x22\xfa\xf9\x87\xfa\x28\x51\xa9\x0c\xcf\x92\x79\x58\xbe\xc3\x7e\x56\xb9\x7e\x37\xf6\xe7\x8f\x87\x4e\x40\x6d\x19\x8b\x3c\x4c\xd9\x18\x01\x00\x88\xc6\x08\xb2\xc6\x08\x4a\xb7\xa8\x47\x90\x56\x60\xe1\x55\x9d\x97\xac\xaa\x54\x4e\xb2\xac\x3a\x71\x68\xac\x0a\x72\x34\xac\xa4\x0e\x8c\x97\x40\xc7\xde\x78\x35\xf4\x40\x8f\xbf\x4f\x03\x1f\x3f\xb7\x25\x8d\x4a\xcb\x86\x77\x2f\xfc\x92\xc2\xba\xa4\x52\x6e\x16\x64\x21\x31\xc3\x29\xeb\xb3\x97\x41\xe3\x66\xa7\x56\x09\x8a\xbc\xaa\xfa\xd5\xf0\x12\x57\xf9\xb0\x57\x2a\x5f\xf3\x8c\xd7\x87\xd4\x60\x5b\xb0\x44\x18\xa7\xb9\x78\x1d\xa0\x1f\xa0\xba\x4d\x06\x4e\x7e\x7d\xe6\x8b\xfb\xcf\xbc\xa8\xcf\x7c\xf9\x09\x67\x3e\xfa\xf8\x99\x2f\x99\x01\x4f\x3e\x72\xe6\x53\x58\x9b\xfa\xbc\x5f\x1e\x3a\xb8\x49\xb6\x1f\x2c\x43\xc9\x89\x03\xbc\x64\xce\x6e\xdd\xa4\x55\xf3\x71\x19\x4e\x6a\xd3\x4a\xac\x36\x37\xdb\xb7\x8d\x68\x80\xda\x03\x16\x6b\xf7\x95\x6d\x00\xe9\x33\xd2\x41\x9e\xab\x49\x00\xb2\xe7\xb0\x8d\x47\x64\x55\x9a\xa3\x08\xc5\x78\x53\x41\xa4\x58\xaa\x9a\x19\x95\x16\x12\x90\x3b\x45\x42\x9e\xf1\x14\x9b\xdb\xc2\xcf\x00\x95\x0c\x02\x58\x06\xb4\x77\x02\xca\x13\x59\x32\x20\x3e\x23\x34\x65\x0e\x10\xc1\xe8\x0e\x42\xf9\xd6\xa5\x91\xba\x53\x82\x1d\xb4\xb8\x47\xdb\x14\xb4\xdd\xd0\xd9\x62\x78\xd2\xcb\x9a\xb7\x9c\xd4\x01\x26\x03\xa3\x96\xb0\x15\xe2\xcd\x25\x3f\x63\x1b\xbe\x05\x52\xee\x12\xa8\xd1\x0b\xb6\xe6\xd7\xf5\x04\x98\x0c\x16\xc6\x29\x34\x87\x85\x86\x12\x0b\x26\x29\x66\xea\x7b\xdd\x20\x40\x06\xb5\xa3\x17\x6c\xc5\x94\x45\x45\x9b\xb0\xd6\xbb\x5c\x18\xbb\x3c\xab\x76\x74\x7a\xe7\x8e\x6e\xfb\x0e\xa8\x76\x95\x19\xc4\xff\x77\xd7\x2e\x6f\x7a\x13\x34\x0a\x65\x35\xda\x39\x6f\x49\xea\x00\x48\x05\x52\xcf\xc0\x1a\x43\x91\x8b\xbf\xe3\x39\x20\x81\x33\xbe\x00\x24\xb0\xe5\x3b\x67\xe7\x9e\x49\xbd\xcf\x76\xfc\xd0\x89\x80\x63\xf4\x3c\x99\xf1\x92\x07\xee\x12\xd6\x3b\x74\x37\xb0\xdc\xb1\x7b\x05\xc3\xaf\x21\xee\xa5\x83\xca\x9e\x0b\xf7\xda\xb9\x46\xc6\xa4\xbe\x3a\xe4\xba\xc7\xcf\xd1\x99\x7c\x19\xa0\xb4\xf2\x1a\xa5\xb0\xa7\xcf\x83\x9b\x1b\x94\x8d\x78\x2b\xa9\xbf\xce\xdc\x15\x00\x64\xdf\xa0\xf9\x2e\xd8\x25\x7a\x9e\x27\xd6\x0b\xf6\x16\x39\x96\x67\xb8\xd7\x9e\xc3\x0f\xec\xb5\xf7\xfc\x15\xf4\xf8\x1d\x7f\x0e\x3d\x7e\xc9\xcf\x9c\xf7\xde\xce\x79\x37\xb2\x5e\x3a\x2f\x7b\x5b\x54\xdc\x40\xcd\xd6\xce\x79\x0f\xe3\x78\x67\xf7\xb6\x1e\xd0\x21\xe3\xee\x09\xf0\xf2\xe3\xc0\x59\xba\xa1\xb3\x71\x63\x07\x35\x1d\x56\x73\x72\x5e\xb1\xe7\xec\x05\xbb\x84\xde\xb2\x0b\xfc\x73\x4d\x53\xc4\xd6\x6a\x33\x43\x32\x5e\x34\xa1\x72\xd1\xea\xb7\xa7\xd3\xbe\x55\xd4\x0f\xc0\x3f\xc3\xb4\xf9\xa4\x8f\x62\x4b\x80\x88\x83\xc7\x46\x90\x99\x4c\x84\x51\x1e\x99\x37\x18\xdf\x17\x42\x35\xe0\x28\x68\x74\xa4\x1c\x64\xf0\x18\x76\xaa\x6f\x92\xd7\x8d\xf0\x26\x45\x66\xb8\x46\x64\x56\xd3\x42\x43\x9b\x82\x58\xd3\x02\xef\x00\x10\xf0\x07\x61\xcf\xa1\x78\x6a\x1a\x46\x02\x34\xa2\x4b\x3f\x0c\x28\x47\x2d\xa8\xab\x1b\x33\x11\xac\x4d\x82\x30\xcb\x4c\x69\x56\x85\x05\xf6\xcd\x61\xf0\x1e\x41\xfc\x66\x29\x4b\x91\xfb\x8d\x24\x3e\xa6\xe8\xbf\xbd\xf3\xac\x25\xad\xb3\x76\xd7\xe1\x4a\x5a\x26\x36\xc6\x29\x32\x6f\x5d\x89\x8c\x29\x35\x02\xcc\xd8\x0d\xd8\x7a\x27\xd2\x00\xc2\x51\xea\xc1\xd1\x31\x86\x58\x3d\xdc\x1b\xd2\x47\x63\xe5\xc2\x3e\x94\x3e\x20\xab\x59\x4b\x5d\x58\x97\xd6\xb6\x5c\x52\x9b\x1e\xa2\x71\xb8\x25\x4b\xc1\x23\x10\x03\xc7\xc7\xb2\xb6\xd7\xaa\x7e\x58\xe0\x16\x11\xcf\x9f\x09\x2b\xe5\x71\x66\xad\x11\x94\xd9\xc0\x37\x28\xeb\xaa\x08\xd8\xe4\x79\x1d\xd2\x8a\x2f\xa5\x93\x0a\xca\xea\x36\xd2\x0f\x64\xc5\x4a\xab\x45\x18\x68\xb5\x11\x1c\xa8\xbc\x7b\x15\xc4\xd1\x5c\x6a\x2b\x65\x48\xdc\x42\xdf\x15\x53\x83\xa0\xc6\xa6\x6c\xc6\x3d\x96\x82\xd0\x83\xd3\x81\x7e\x4b\x83\x47\x28\x82\x7f\x08\xdc\xf0\x86\x0f\xe1\xf9\x8a\x63\xe4\xc4\x3e\x80\xfb\x3e\x00\xb0\x3e\xc3\x3b\x56\x2f\xf9\xcb\x10\x80\xd4\x0e\xb5\x32\x28\x10\x38\x37\x23\x52\xc3\xc1\x53\x1b\xf6\xc0\x46\x6f\x8e\x00\x3d\xa8\xd0\xd4\x0f\x15\x4f\xd6\x05\x1e\x00\x1b\x3e\xe9\xe4\x3e\xcb\x31\xec\x46\x18\x47\x9b\x67\xc9\x32\xfe\xc4\x40\xc8\x97\x55\x58\x65\x0b\x7a\xc7\x5e\x86\xb6\xff\xbd\xb0\xe0\x19\x28\x4e\xda\x07\x25\x6a\x10\xaf\x75\xcd\x2f\xb6\x85\x30\xa9\xca\xfb\xaa\x3e\x27\x21\x50\x32\x41\x01\xb6\xd2\x22\x26\x52\x8b\x48\xbb\x40\x7b\x0d\xe1\x2e\xf1\x77\xb2\x9d\x73\x6c\x87\x42\x18\x7e\x5a\x13\x74\x51\x0e\x4a\xfa\xfc\x15\x85\x5b\xc2\xbb\xba\xf0\x62\xbc\x4f\x2b\xbd\x84\xd2\xa4\xb3\xe4\xae\x74\xd4\xc2\x8a\xa6\x00\x3c\x67\x34\x5c\xc8\xdb\x08\x87\x7d\x4f\x4d\x57\x24\x30\xf9\xf2\xe4\x31\xc2\x55\x0c\xfc\x02\xd5\xe9\x37\x59\xeb\x15\x6e\xfe\x39\xed\x7c\xa8\x3b\x4b\x8b\x4f\xee\xe5\xba\x51\xf7\x59\xa3\xee\x6d\x65\x13\x3a\x1e\x4e\xd0\x73\x49\x25\xf8\x7d\xd5\xec\x9a\x6e\x55\xc1\x3f\x5b\xd5\x76\x15\xaf\x18\x08\x41\x0c\xa8\xae\x60\x7e\xc7\x66\xfb\x20\x04\x1d\x19\x0f\xc6\x0b\x64\xda\xa5\x80\x47\x95\x1b\x82\xc0\x26\x0d\x08\x95\x9a\x10\x8a\x20\xf0\x9e\x61\x9e\x34\x8f\xc1\x81\x08\xdc\x6b\x26\xbd\x19\x64\x4d\x87\x31\x66\xfa\x87\x85\xad\xc4\xf1\xbb\x60\x92\x78\x2f\xc9\x86\x60\x9c\x4c\x12\x17\x1e\x9b\x25\xe2\xac\x7d\x0f\xcd\xa4\xb8\xb9\x11\x13\x00\x3b\x0b\x12\x9a\xad\x24\xbb\x61\xfb\xf4\xea\x53\xa2\xfa\xe6\x87\x06\x57\x92\x67\x77\xc6\xc2\xd3\xe7\x19\x79\xde\x69\x81\x7d\x2a\x74\x9f\x8a\x49\x81\x7d\x42\x1b\x44\x63\x86\x16\x06\x56\xa4\x7a\x6b\x90\xa0\x66\x17\xbe\x7a\x18\xb7\xc3\x90\x9e\x67\x1f\x95\xae\x29\x9f\xc2\xc0\xd4\x5f\xd6\x9e\x99\xea\x3a\x25\xb1\xe7\x9b\x19\x3b\x99\x1b\x38\xe5\x01\x61\x57\xe8\x44\x5e\x0e\xcc\x66\xe0\x64\x5e\xec\x94\xe4\x26\x97\x3b\x11\xd0\x2d\x69\x53\x12\xa7\x74\xa5\x65\x43\x2e\x17\x35\x7a\x95\x9a\xad\x7e\x92\x00\xee\xbf\x1b\x53\xe4\x41\x2f\x0f\x8f\x09\x68\x2e\x1a\x93\x9b\x57\x63\xca\x3c\x98\x81\x96\xe8\x6e\x99\x1d\xec\x4d\xd2\xf0\xfc\x3a\x70\x81\xb7\x8a\xdf\xa6\x23\xb6\xa6\x4e\x31\x52\xf1\xcb\xf1\x3a\x91\x0d\x9a\x90\x94\x38\x3b\xf4\x14\xd9\xcc\x4a\xc7\xfd\x49\x34\x2e\xfd\x72\x1c\x11\x29\x88\xdc\x3e\x70\xce\x78\x55\x21\x4f\x5c\x7c\x46\xcf\x62\xa0\x1d\xd1\x25\x4e\xab\xb2\x00\x7d\xf1\x72\x84\x45\xf3\x71\xe4\x47\xe3\x7c\x94\x7b\x3c\xac\xf4\x05\x56\x8c\x26\x02\xc0\x47\x79\x86\xc3\x69\x6e\x57\xaf\xd8\xf7\xdc\x9e\xd9\x64\xff\x1d\x13\xe3\x66\xa8\x46\x1a\x23\x27\xb3\x8a\x11\xdd\xf0\x87\xaa\x0c\x51\x5f\x3a\x82\x06\x71\xa6\xdb\x8d\x85\xaf\x43\x34\x55\xf5\x32\x3f\xb3\xdd\xa1\x6c\xeb\xf5\x0f\xde\xf3\xc0\xfe\xd2\xaa\x5e\x8d\xe3\x7e\xd5\xb2\xe5\x40\x30\x85\x81\x28\xf1\x2b\x94\xc2\xf8\x91\xda\xa4\xf6\x3e\xc2\x30\xa3\xa0\x29\xf5\xb1\x6c\xc2\x0f\x73\x6c\xf3\xff\xcb\x0d\x16\x2c\x69\x36\xb8\x6e\x5c\x93\xd7\xcd\xd3\x32\x0b\x8d\x5d\xb6\x6b\x26\x17\x74\xb1\xab\xe1\x11\x9b\xb5\x0c\x2b\x1b\xc7\x22\x6a\x6c\xfb\xd4\x34\xf1\xd4\x47\x46\xda\x75\xc2\x81\x29\x1b\x4e\x83\x31\x2f\x1b\x4e\x83\xb9\xe9\xec\x88\x17\x4a\x9b\xce\x8e\x02\x09\x1e\xb5\x7a\xc4\x47\x19\xf4\x7e\x01\x9c\x13\x86\xb8\x71\x52\x07\x9e\xf1\xda\x1b\x0a\x96\x3c\xe8\x55\xa5\x57\x68\x35\xb3\x6a\xc4\x2e\x37\x3d\x7c\xa5\xa8\x7f\x65\x3b\x4b\x26\xea\x4f\x2b\xa8\x08\xbe\x64\xe8\x37\xea\x16\x4e\x8e\x6e\x33\x4e\x0c\x4f\x0b\xf2\x7f\x8c\xe0\x29\x38\x70\xba\xd1\x8e\xb7\xba\x4f\x4c\x7e\x4a\x8d\xcb\xc5\x32\x38\xf4\x28\xaa\xb7\x09\x27\xee\x1b\x1c\x4d\x13\x2c\x5c\x50\xaa\x5e\xfc\x0d\xde\x49\x42\xf7\x66\xa1\x0b\x95\xe1\x55\x9c\x1d\xf0\xa4\x35\xec\x47\xc8\x4b\x54\x7b\x6c\x9a\x7e\xa4\x64\x4b\xa2\xee\xba\x83\xa9\x33\x3d\xe7\x03\x7b\xf4\x67\xe8\xde\xe1\x43\x1b\xf0\x86\xa7\xbc\xed\x04\x2e\x7c\xcb\x00\xd2\x09\x98\xfc\x10\xde\xd1\x89\x38\x72\x33\x7a\x63\x52\x14\x4a\xd6\xc9\x86\x1f\xec\x5f\x87\xfd\x60\x0b\xd8\x0e\x88\x8d\x0d\x97\x56\xd9\x75\x03\xc0\x03\xa8\xaa\x4a\x27\xb7\xf8\x7c\x40\x6c\x58\xe5\x30\x92\x2f\x8d\xd3\x70\xb9\x8f\xc6\xcc\x90\x7d\xc6\xde\x2e\x4d\xef\x79\x04\x80\xb0\x7a\x65\xe5\x46\x1f\x35\x55\x48\x2c\x72\x1a\xce\xf3\xf7\xe0\x97\x66\x63\xd2\xc1\x5c\xa9\x71\x50\x9c\x8a\x87\x25\x6a\xf8\x34\x37\x56\xef\x90\x4a\xc8\x81\x49\x06\x8c\xc8\xea\xf3\x81\x41\xf2\x9d\xa8\x97\xb5\x30\xca\xc5\x1d\x38\x1c\xa1\xb8\xf7\x26\x70\x9f\x07\x63\x79\x31\xb9\x7c\x01\x6a\x64\x4c\xe6\xfe\xf4\x8d\x9e\xb4\xc6\x39\x95\xc7\x0b\xaf\x0c\x28\x69\xf8\xf6\x01\x0d\x5a\xe4\x24\x2d\x05\x1a\x7e\x39\x8c\xb8\x0f\x80\x38\xca\x80\x86\xe4\x68\xbd\xeb\xe2\x35\xa6\xb7\xb8\x0c\x78\x2d\xd0\xc4\x00\x1d\x92\xf9\xc7\xdb\x0e\xb2\x9e\x69\x3a\xde\xab\xbe\x63\x0f\x7b\x18\xa2\x19\xe7\x32\x73\x8c\x9e\x23\x95\x60\xf7\x2a\x63\x89\x68\x72\xc0\xa5\xb5\xa9\x92\x83\x0d\xf9\x23\xde\x72\xb8\xbf\x78\x77\x29\xeb\x22\xa6\x21\x17\x8e\xa5\x6a\x3c\xed\x65\x6c\xd0\x8b\x6c\x1b\xe6\x1a\x57\x09\x78\x10\x83\xda\xbb\xbe\x97\xda\x8a\x6a\xd5\xa0\x31\xdd\x25\x4e\x77\x64\x4e\x77\x79\xe7\x74\xef\xcf\x22\x80\xd1\xc6\xec\x59\x85\x47\x34\x54\xd6\x2b\xdd\xc4\xb0\xf2\x27\x37\x87\x49\x90\xf9\xf7\x4f\x55\x74\x9f\xf6\x32\xf2\x7e\xc4\xfb\x23\xf7\xe7\x90\x26\xc2\x08\x16\xd0\xa6\xc5\xab\x25\x6d\xee\x8d\x02\xaf\xb8\x35\x88\xee\xb7\x99\xe9\x8b\x42\x12\x0b\xf2\x81\x23\x06\x0f\x21\x79\xcd\xb0\xc1\x08\x85\xc1\x60\xd6\x84\x61\x8b\x19\xd4\x9a\xae\x4c\xf1\x25\xc2\x60\x4a\x46\x15\xcf\x4e\xa6\x46\x13\xb3\x42\x52\xc7\xdb\xbe\xf0\x13\x8a\x59\xb9\xcf\x27\xea\x8a\xcb\xff\xaa\xe2\x3b\x58\x64\xa9\x83\x88\x0e\x55\x4d\xf1\x78\x39\x17\xda\x9d\x54\xf9\x4a\x28\x37\x9b\x77\x40\x9e\x5a\x84\xb5\xf1\xce\x6e\x6b\x3a\x0d\x91\xfc\x0a\x58\x88\x76\x52\xc1\x8c\xd1\xbb\x2b\xdf\xdd\x60\x36\xd3\x1e\x7b\x05\x5d\xa8\x47\x5d\xab\x34\x81\xcd\xfe\xc9\x7e\x1b\xe1\x07\x9a\x6b\x7c\xdf\x0a\xa3\x61\xa3\xe1\xcd\xde\x20\x5c\xd0\x60\xab\x4a\x7a\xd5\x4c\x1a\x18\x49\xcf\xb3\x3b\xa3\x09\x4d\xfb\x8c\x82\xa6\x0c\x61\x87\x0c\x47\xc5\xb8\x1c\x95\xae\x2b\xf3\x8e\xc8\x13\xf1\x67\x8c\x65\x33\xcd\xbc\xe1\x0c\x05\x08\xf8\x34\xa0\xa7\x72\x86\x8e\xe5\x23\xdb\xf3\x32\x20\x53\x33\xd7\x9d\xf1\xb2\xc6\x00\x32\xe0\x51\xbf\x11\x29\xf6\x7d\xb6\x17\x52\x85\xac\xd1\x6e\x6e\x2a\x43\x34\xc3\x23\xb7\xc5\x42\xca\xcb\xae\xc9\x75\xc4\x31\x23\x80\xc8\xcb\xb1\x0b\x79\x21\x76\xed\x5e\x62\x38\xe1\xee\xd1\x72\x24\x85\x88\xc8\xd9\x13\xaf\x3f\xc3\x32\xa5\xba\x32\x85\xee\x23\x24\xe9\x44\x4c\x37\x91\x00\x85\x46\x46\x74\x14\xbd\x01\x1f\x62\xa0\xc9\xac\xc0\xb1\x42\x2f\xb6\xbd\x85\xba\x5f\xaf\x67\x2d\x9c\x14\x78\x99\x6a\xef\x4e\x4b\x77\x05\xdc\x0e\x1a\x22\xe6\xc6\x98\x7e\xc9\x0e\x84\xac\xa9\xdd\x4c\xb5\xef\xdd\x91\xbc\xfc\x5b\xd0\xd4\x50\xf3\x2d\x1d\xcf\x1b\x24\x82\x8a\x92\xc4\x04\xb6\x72\x4a\x9e\x2f\x85\x74\x42\xce\xa3\x42\x3d\x85\x51\x16\xc6\xa2\xe5\x93\xfc\x8d\xd1\x07\x11\x4b\xff\x39\x58\x00\x0c\x88\x98\x19\x32\x32\xac\x24\x31\x39\xe1\xd7\x54\xee\x0f\x82\x2a\x3f\x87\xfa\xf6\x77\x8c\xa0\x12\x2b\xa7\x40\xe8\x49\xd9\x50\x85\xfd\x6a\x0e\x57\xf5\x06\x43\x70\xa1\xc9\x13\x06\xc5\xde\xc1\x96\xfb\xb0\xf5\x05\xdb\xf9\x19\x21\xb9\xee\x6b\x54\x3e\x75\x5f\xe1\xa5\x02\xc9\x6c\x44\x4d\x56\xac\x57\xc8\xa3\x51\xa8\x6a\xa1\x30\x30\xc2\xd3\xaf\xdd\x6d\x15\x1b\x26\xab\x3f\x86\x3b\xfc\x3a\xb2\x23\x1e\x42\xc5\x41\xb7\x4c\xa4\x77\x20\x50\x69\x50\x33\xde\x46\x05\x35\x36\x3e\xff\x81\x9f\x6b\x5e\x8f\xa7\xa3\xb8\xd9\x60\x7c\xa8\xc1\xb8\xdd\x60\xca\x63\x1c\x43\x15\xbb\x00\x5a\x8b\x91\xf6\x4f\x47\xf5\xb7\x3f\xf0\xdb\x48\x45\x0e\xa8\x4c\x22\xa9\xed\x9c\x0f\x46\x0b\xe0\x2c\x5d\x37\xb7\xd1\x44\x32\x27\xa3\xc9\x69\x0e\x1b\x84\xfd\x08\xc5\x68\xad\xf1\x2a\x2d\x58\x23\x16\xcb\x1f\x20\x91\x42\x69\x63\x8f\x25\x16\x98\x55\xe6\xe3\xff\x82\x31\x35\xb2\x92\x4c\x14\x08\xac\xdf\x68\x0e\x7e\xc3\x7e\x18\x1e\x65\x4d\x40\xa1\x83\x80\xa0\xc3\x24\x2d\xcd\x0e\x96\x06\x56\xff\x62\x14\x50\x38\x83\x8c\x7f\x9b\x59\x01\x4b\x6d\x38\x37\x19\x7a\x74\x05\x30\x94\x97\x23\x1d\x4c\xa0\x04\x84\xf8\xbd\xcc\xc0\x8e\xac\x12\x33\xc0\x71\x1e\x7b\xa8\xf0\x29\x20\xe7\x6b\x8c\x20\x62\x03\x07\xae\xbf\xe0\x7b\xf7\x15\xde\xe6\x09\x0f\xf2\x86\x1a\xf2\xd8\x09\xba\x6f\x90\x5a\xd6\x9f\xb0\x95\x37\x2a\xb8\x04\xed\x67\x84\xeb\xd0\xad\x28\xc9\x51\x2e\x5e\xe0\x55\x63\x28\x52\x52\x50\x1e\xe1\xbd\xda\xd9\x7f\x64\xf2\x12\xcf\x6f\x30\x78\x17\x4e\x07\x6d\x66\x55\x2e\x44\xd5\x78\x28\xa7\x4d\x54\xb3\x27\xf3\xa9\xf9\xa6\x09\x83\x1a\x28\xd2\x05\x3c\x0a\xe9\x4f\x50\xd5\x4f\x77\x02\x87\x77\x94\xb5\x47\xb2\xf9\x3f\x32\xcd\xcc\xc7\x5c\xe5\x40\x4f\x31\x34\x33\x8f\xc9\xcc\x1c\x66\xdb\xcb\x29\xdc\xf5\xce\x5b\x00\x1b\x27\x64\xa6\x2b\xbe\xa1\x84\x39\xfc\x62\xc2\x1a\xb8\x43\x6b\xe5\xcc\xbd\xa5\x73\x85\x5e\x0f\x2b\x67\xe5\x2e\x81\x7d\x3b\xe3\x57\xce\x95\x3b\x77\xe6\x6c\x8b\xe7\xcb\x9a\x3b\x3b\xc8\x72\x66\xf7\xd6\x6e\x0e\x67\x0d\x8a\x9c\x79\x57\xce\x0e\xdf\x17\xb7\x23\xd8\x52\x72\xb0\x2c\x66\x1b\x54\x06\xd4\xdd\x8f\x75\xac\x0d\xf8\x5a\x4f\x48\x02\xd9\xf4\x57\x39\x1b\x34\x11\x06\xbb\xf1\x6d\x43\x92\x91\xc8\xde\x23\x29\xb2\x25\x32\x04\x2f\xb4\x2a\x81\x52\xc2\x99\xd3\x36\xdd\x0f\x32\x15\x0f\x08\x80\x00\x25\xa4\x55\x48\xfb\x5e\x7f\x04\x44\x28\x55\x32\x92\x78\x1a\x2b\x0a\xa9\xa2\x98\x87\xaa\x22\x1d\x93\xff\x81\x8c\x40\x93\xf3\xc0\xcb\x60\x42\x81\xd8\x84\x1a\x10\x6a\xe7\xbd\x4a\x07\xb0\x98\x58\xde\xca\xad\x09\x31\x98\x38\x6f\xe8\x00\x34\xcf\x9d\xbc\x67\xc1\x23\xc0\xf6\xd0\x8d\x7b\x43\x17\xc0\x3b\xe2\x60\xbb\xb7\x70\x81\xf6\xcb\xdc\xa0\xe1\x7f\xf9\x7d\x6b\x9c\xaf\xb0\x27\xd5\x5e\xf8\x36\xa3\x8b\xb6\xb5\xd4\x46\x0e\xa0\x12\x64\xec\x88\x16\xcd\xba\x5b\xbc\xe6\xc6\x70\x56\x30\x14\x6b\x0a\x06\x6b\xf0\x9e\x37\xe2\x23\xfc\x70\xf8\xa4\x36\xd5\x2c\x4a\x0f\xb0\xe2\x5a\x03\xb0\xe4\x5a\x27\xb0\xe1\x4a\x1b\x00\xdb\xea\xc7\x10\xf6\x54\x65\x78\x39\xf7\x3c\x3a\xdc\x11\xbf\x9a\xce\x01\x51\x52\xdc\x89\x4c\x6c\x02\x54\xd4\x91\x51\x77\x00\xc4\x15\xf5\xc8\xb4\xe6\x46\x37\x49\x34\xe5\xb6\x73\xb2\xe3\xee\x0a\x52\x50\x67\x3c\xa7\x55\xcf\x69\xb1\x82\xa9\xeb\xa6\x5f\x86\x33\xbc\x0c\x55\xf9\x3d\xe3\xbe\x17\xb4\xef\x2d\x82\xa6\x05\xba\x7b\x90\x06\xb7\xf4\x04\x79\x89\x92\xb5\x27\xde\x02\x1d\xa2\x0f\x50\x9f\xee\xec\xfd\x39\xb3\xbe\xcb\xac\x48\x1d\x1e\x46\x25\x17\x12\x26\x6f\x3c\x04\x34\x13\xd8\xf8\x0b\xd8\xec\x18\xd4\x51\xa6\x4c\x84\xbf\xb9\xf5\xa9\xde\x8d\xcc\xb9\xf2\x32\x95\x93\x80\x3b\x7d\x9d\xa0\xe5\xeb\x4e\xe5\x54\xda\xe9\xe3\xe3\xd2\x5b\xaa\x9c\x2b\x5d\xe7\x4a\xd5\xb9\x54\x75\x2e\x65\x4e\xe8\x86\x59\xe7\x52\xd5\x49\x5d\xb9\x95\xd7\x0a\xb2\xa8\x06\xc4\x40\xde\xb9\xae\x79\xf3\xf0\x9f\x4d\x1a\xa9\xe8\x06\xa8\x5c\xf2\x12\xf9\x6b\x98\x7d\xee\x93\x00\x5b\x89\xf5\x77\xf2\x27\xc8\xc2\x3d\x7a\x60\xd7\xa2\x05\x7e\x6b\x20\xe8\xd7\xac\xda\xc3\xa8\x5f\xa8\x44\x75\x0a\xc3\xe8\x73\x1c\x29\x70\x44\xf1\x30\x8e\x38\xaf\xaf\x03\x82\x95\x44\x07\x9a\x1d\xec\x0a\xd8\xd7\x5e\x0a\x0b\x0e\xfb\xdc\xa3\x18\x58\xf4\xbe\x80\x5f\x7c\x47\xb1\x96\x15\x3a\x0b\x2f\x76\x72\xe5\x90\xb5\x1a\x73\xef\x7d\xa0\x5c\x92\x96\x3c\x74\xe0\xfc\x39\x31\xba\xda\xc8\xd8\x58\xb0\x4b\x81\xc8\x5a\x42\x89\x0d\xea\x3b\xe7\x1c\xca\x6f\xbc\xdc\xa1\xd0\x58\x0b\x3e\x07\xaa\x7c\xcd\xb3\x06\x3d\xf3\x57\x36\x5a\xd3\x34\x24\x6c\x2d\x67\xa1\x84\x87\x2d\xbf\x72\x53\xf8\xdd\xf1\x85\x01\x01\x14\xc0\x44\x65\x3f\xcc\xd2\x82\x69\x72\x85\xaf\x2b\x72\x40\x4e\x1e\x1a\x95\xc7\x80\xff\xce\xe8\x88\x40\x35\xa7\x67\xdd\xdd\xcd\xcd\x9a\xce\x33\x3c\xa2\x25\xfa\xf6\x14\x9e\xb6\x32\x14\xd3\x59\xf7\xa5\xfd\x61\x07\xef\xaf\x15\xee\x3a\x83\xe7\x97\x55\xb8\x1d\x48\x7f\x43\xe9\x46\xea\x9b\x5b\x68\x41\xa1\xa4\x1d\x1a\x20\x40\xfd\x56\x12\xf3\xb5\xdd\x70\x54\xf9\xe3\x00\x75\x35\x22\x41\x46\xf7\xb5\x2c\x50\x00\x2a\x65\x50\x97\xa2\xd5\x30\xf0\xa1\xa2\xd5\x0a\xa2\xd5\xf0\xfa\x4f\x93\x48\x34\x0d\x4e\xdb\xd0\x85\x7f\x17\xc2\x59\xfe\xe9\xe3\xba\x45\x82\xf0\x0a\x92\x94\x08\x49\x00\x97\xa3\xdf\x87\x75\xf4\x35\xea\x77\xf0\x2a\xdf\x23\x44\x1a\x74\xc4\x0b\xb4\x8a\xf7\x0a\xb4\x82\xaf\x08\x2a\xfc\xb6\xa3\x6f\x44\x4e\xd9\x34\x22\xbc\x31\xf2\x52\xc5\x86\xd0\xb0\xa0\x64\x03\x33\x4a\xdf\xd7\x2d\x60\x7c\x69\x02\xe3\x23\x15\x92\x55\x11\x33\x81\xa2\xfb\xc9\x05\x83\x28\xfc\x29\x5d\x97\x58\xa8\x41\xc5\xf2\x1b\xd1\xff\x40\x9f\x23\x28\xed\x66\x88\x43\x30\xa6\x11\xc1\xb2\x0d\x5f\x74\xd1\xda\x68\x01\xcf\xb0\x19\x57\xee\x06\xed\x09\xd7\xdc\x5a\xba\x57\x78\x97\x39\x3a\x2e\x71\xbc\xe3\x8e\x0c\x47\xc7\xf3\x9b\x9b\xf9\x18\x68\x1d\xed\xe6\x84\xee\x4c\xca\x79\x4b\xfe\xed\xee\xea\x6b\x65\x94\xeb\x13\xe2\xee\x39\xc0\x8d\xf0\x16\xf0\x9f\x7a\x8e\x6f\xab\xad\x53\x15\x3c\x0d\x0f\x97\x8b\x8d\x72\xe1\xed\x6d\xe5\x50\x95\x41\x77\x01\xd8\xf5\xac\x2b\x00\x4f\xb0\x5c\x6b\x2f\x03\x52\xc1\x1b\x8c\xb3\x9b\x1b\xe0\xf8\xec\x4f\xee\x1c\x30\x41\xa5\xdd\xcb\x8c\x2e\x5a\xb1\xfe\xf2\xa9\x1d\x35\x4b\xa8\x3a\x8c\x5a\x0d\x27\xb0\x65\xa3\x43\xdb\x7a\x32\x8d\xca\x52\xe4\x24\x30\x80\x9e\xaa\x2a\xa0\xf7\x00\xde\xf7\x3a\xb3\x3d\x4d\xf7\xcb\xd7\xf9\x65\xf9\xba\xbe\x3a\x20\x5c\x40\xb7\x81\x5d\x72\x74\x21\x36\x4c\x70\xd5\xe6\x23\x38\x1b\x6b\xac\x9d\xe9\xd8\x51\x81\x04\xc0\x97\x2d\xf8\xfb\xaf\x7d\xd6\x14\xe0\x96\xaa\x4b\x93\x0a\xdf\x85\xf2\xcc\x96\xe4\xf8\x00\xd4\x5a\xc9\x24\x63\xcc\x32\xf5\x5a\xd0\x6d\xe4\xec\x47\x8c\x9a\x1b\xcd\x24\x66\xae\x2f\x53\xfb\x59\x95\xb0\x29\x47\x71\x57\x8e\x82\x1c\x6f\x0c\xc7\x82\xef\x5a\x2a\x9b\xaa\x6b\x0d\x39\x47\x86\x63\x43\x0f\x16\x98\x10\xdd\x53\xe8\x8b\x21\xd4\xfb\xd1\x18\x24\x4c\x1f\x3a\x30\x5f\xe2\x0d\x87\xd2\x03\x0d\x0a\x66\x3e\xce\x6a\x86\x7e\xd3\x01\x5d\xbf\x16\x63\x38\x51\x98\x3c\x53\x28\xf6\x73\xbb\x37\xdd\x80\x50\xd2\xe5\xa8\x66\x7f\xd5\xac\x4b\x84\xa7\x26\x9e\x4c\x33\xc4\xc4\x90\xc6\x09\x82\x2e\x3b\x80\x23\x08\x79\xb6\xb6\x2f\xfb\x52\x98\x79\x00\x95\x79\x19\x79\xe6\xec\x3c\x40\x68\xb6\x69\x97\x86\xa8\x0d\x51\x1d\x7c\x87\x3c\x3b\xa3\x8f\x49\x69\x5c\x0e\xd8\x58\x68\x62\x8c\x3f\x60\xdc\xfc\xa4\xfb\x9c\x63\x30\xeb\xa4\xfb\x06\x51\x2e\x22\xdc\x56\x5e\x51\x9a\x70\xac\x20\x56\xf9\x0d\x41\xd5\x5f\x47\xe5\xa4\x84\xb2\x38\x71\xf8\x9b\xf9\x25\xd4\x82\xd3\x77\x81\x57\x50\x43\xed\x25\x8c\xea\x57\x34\xab\xc6\xef\xdd\x97\xf8\x4b\x01\x0b\xdf\xc0\x57\xdc\x30\x50\xc8\xa0\x21\xb2\x03\x2d\xbd\xfc\xec\x96\x20\x15\xfa\x07\xbf\xd4\xd2\x4b\xdd\xd2\x1b\xb3\xa5\xb2\xd4\xe8\x64\x04\x83\x1f\xd9\x18\x81\xe7\x65\x25\xe7\x33\xac\xa6\xcc\x1e\x55\xac\x27\x05\xec\x4b\x4b\x5b\x22\x77\x42\xc8\xdf\x85\x68\x69\xff\xa3\x8c\x0a\x28\x6f\x7f\xa8\x42\xc3\x01\x47\x47\x9f\x13\xd8\xd4\xb1\x7a\x1a\x11\xba\x86\x0d\x13\x23\x3d\x6b\x1d\x95\x37\x37\x08\x90\x4a\xc4\xdd\x11\xe1\xee\x12\x71\x37\xc2\x05\x58\x5b\xdb\x46\x08\x01\xb4\x8d\xa0\x54\xf4\xaa\x44\x34\x04\xc7\x27\x82\xe3\x43\x55\x02\x9d\x1e\xd9\xec\x1f\xfa\x2b\x90\xbc\x41\x7f\x20\xf4\xe2\xc2\x0e\xcb\x7e\x56\x38\xbe\x54\xd1\x26\x7e\xcd\xd0\x43\x35\x03\x72\x0f\xd1\xf4\x17\xc4\x3a\xfd\x80\x7f\x6d\xc5\xfb\x7c\x08\x45\x1c\xe7\x3e\x90\xe3\x74\x42\xfd\xef\xc2\x4a\x1f\x06\x63\x82\xc1\xc0\xb0\x71\xcc\x88\x06\x8d\x68\x14\x69\xd9\xa2\x19\x77\x40\x2f\xc2\xc0\x60\x77\xc3\xc3\xd6\xb0\xf2\x28\x5b\x32\x35\x64\x34\x51\x98\xe1\x58\xaa\x90\xed\xd1\xb7\x82\xbe\x09\xf5\xcd\xb0\x04\x29\x1b\x6a\x53\xa3\xea\xb8\x99\xb2\x33\x4c\x38\x6a\x13\xb1\x0f\xb1\x08\x16\xfe\x11\x90\xf0\xe9\x1c\x86\x87\x11\xc2\xa4\x57\x08\x71\x93\xf2\x67\x27\xef\xd0\x33\xcc\x36\xca\x3a\x0a\x26\x93\xe0\xfb\x28\xb1\xea\x0f\x9a\xfc\xec\x3e\x42\xc7\x04\xd2\xf4\xe1\x63\xe6\xe2\xfd\x8a\x78\xd1\x34\xb6\x35\x0a\xc9\xf3\x9d\xea\x0a\x49\xf2\x06\xa5\x29\xb4\x40\x48\x9e\xf2\x2a\x01\x10\x7e\x4a\xd5\x52\xc2\xb0\x4e\x18\x62\x09\xa0\x1a\xd0\x72\x20\x9c\x9e\xd4\x09\x27\x33\xe2\xb8\x28\x56\xa9\x61\x36\xd2\xe8\x73\x15\xc7\x09\xfa\x33\xa8\xc2\x42\x3d\x68\x58\x33\x2b\x4b\x52\x15\xbf\x33\x47\x23\xd6\xc5\x38\x45\x84\xbc\xba\xb9\x29\x01\xfb\xc9\xe0\x8f\x5c\x99\xf1\xc8\x0a\x37\xe8\x53\x87\x4b\x0c\x24\x08\xf2\x08\x3b\x0c\x82\x20\x29\x59\x24\x31\xc2\x71\x65\xe0\x5b\x53\xba\x21\xd0\x91\x23\x38\xe9\x1e\x4a\xdf\x84\x87\xbc\x78\xe1\xee\x50\xbd\xeb\xa2\x70\x67\x03\xa3\x50\x54\xdf\x19\x34\x46\x93\xc7\xb6\x34\xa3\xb9\xbb\xc2\x18\x08\xf8\xb8\x70\x97\x78\x7b\x54\x31\xe6\x5b\x74\x3a\x1c\x73\x8a\x19\x73\x7a\x3a\xb8\xb9\x60\x6f\xf9\xb9\xfb\x70\xf4\x76\x7c\x3e\x72\xdd\x73\x3c\x75\x09\x3f\x9b\x9e\x1c\x9f\xcf\x6c\x75\xe3\x32\x3c\xcb\x5b\x93\x1f\xf4\x7d\x3d\xf4\x2d\xbb\xb4\x8d\x1b\x89\x1f\x0c\x28\x65\x4b\x93\xd2\x4c\x19\xaa\x32\x97\x90\xba\x6c\xa4\x9c\xa8\x32\x97\x34\x91\x40\xf0\xa0\x9b\x8b\x9a\x7f\x66\xd8\xf3\x2f\x4b\xed\x83\x8a\x56\x08\xcb\x4b\x92\x5c\xea\xe7\x42\xeb\xfa\x90\xe0\xa3\x1b\xb9\x25\x9a\xc1\x69\xea\x4a\x2f\x99\xa2\xbb\xf4\x32\x46\x14\xa9\x57\xde\x6d\xac\xd0\xf9\x3f\x1d\x77\x5b\x48\x89\x3e\xdd\x07\x6a\xa1\x43\x0a\x5e\x36\xdb\xfc\x9a\xb9\xe9\x81\xaf\xa5\x1b\x38\x4d\x93\xdb\x4d\x13\x36\xf2\x0f\x78\xcf\xe4\x87\x5b\x79\x7f\x3b\xde\x27\x98\xd8\xf4\x53\x4c\xb2\xa9\x98\xf1\x75\xa9\x62\xd0\xe3\x2d\x9a\x7e\x89\x9f\x28\xee\x7f\x95\xbd\x90\xd9\x13\xe0\x15\x28\x95\x32\x1e\x1a\x4e\x55\x22\xb3\x29\x23\x56\x6f\x58\xe0\x98\x61\x34\xaf\xca\x96\x39\xa7\x8b\x4e\x73\xae\xe9\x04\x61\x5c\x95\x6e\x0d\x80\xc3\x77\x0b\xc7\x8c\xd6\x3b\x3f\x80\x01\xa2\xd8\xb8\x5b\x21\x35\x5f\xfa\x14\x99\x91\xee\xa0\x65\x88\x11\x68\x74\x89\x8b\x17\x7d\x17\xf8\x77\x84\x91\xc2\x62\x7d\xbb\x38\xc2\xf0\x0c\x2b\x90\x97\x32\xe0\x3d\xe6\x80\x12\x32\xe0\xb5\xa0\x2e\x9b\x62\x0a\x94\xd5\x05\x2b\x14\x72\x0a\x05\x19\x13\xfc\xe3\xf2\xd2\x27\xe1\xc5\x0c\xdd\x23\xa1\x56\x14\xce\x63\x18\x57\xa8\x90\x2e\x76\x99\x18\x59\x33\x9d\x15\x68\x1a\xf5\x24\xa3\xd3\x4a\xf2\xe8\x43\x04\x84\xe5\xd6\x87\xb9\xa2\x68\xd5\x18\x29\xa9\x31\xaa\x4a\x2f\x7b\xaa\x83\x4b\x35\x3b\x76\x67\xb7\xb4\x28\xe6\x74\x38\x41\x18\x87\x12\x55\xfc\x45\xc1\xe2\xbe\x9e\x19\x2d\x92\xf1\x6a\x63\xfb\x40\x00\x98\xe2\xd6\xc7\xb2\x5a\xb2\xd3\xde\x0c\x7a\x07\x62\x64\xe0\x0c\x23\xae\xda\xc1\x14\xa6\x24\x9c\x66\x33\x1b\xf1\x23\x60\x14\x63\x7f\x04\xf5\x7d\xab\x06\x26\x59\xab\x75\x36\xeb\x2b\xd0\xb2\xb9\x10\xd9\x26\x8d\x83\x22\xcd\xaa\xc8\xb6\x9e\x97\x8d\x79\xff\xf8\xf8\x08\x1a\x69\xe7\x81\x36\x95\x03\x77\x6d\xde\x66\x98\xf9\xb4\xce\xcc\x94\x02\x7e\xcd\x8c\x2b\x23\xe8\x3c\xab\x47\x7d\x2b\x3e\xaa\x86\xf5\xb7\xea\xde\x56\x79\x70\x60\xcc\xc1\x58\xe0\x3d\x0f\x76\xa6\xfc\xe8\xcd\x73\x26\x73\x8d\x22\x95\xa5\x79\xea\x46\xa9\xf9\x19\xf3\xdf\x79\xda\x8c\x66\x3e\x76\xe4\xce\xca\x83\x16\x92\xd5\xa7\xfe\x18\x48\xdb\xbe\x0f\xa0\x7a\x30\x19\xf8\x49\xf3\x62\x8f\xed\x47\x0a\x0f\xbc\x04\x0e\x69\xa3\xc8\xe5\xfd\x45\x10\x3b\x74\x1f\x8d\x8b\x49\x62\x0d\x9d\xc2\xf6\x87\x50\xc3\xd0\xc3\x47\xb3\x92\x8b\x06\xb5\xe0\x18\x14\xe0\x75\x2b\xc5\x4c\x3b\x2f\x55\x1c\x60\x18\x53\xa2\xa5\xac\x32\x8c\x03\x5e\xf2\xad\xfb\xac\x5c\xcb\xa1\x28\x2a\x9b\x9c\x4a\x8d\xff\x90\x7a\x96\x4c\x84\x7f\xe2\x58\x09\x9a\x4f\x09\xaf\xfb\xe4\x91\xb1\x29\xdf\x7e\x64\x3a\x2a\x33\x06\x64\x96\x8c\xe1\xbc\x30\xcb\x0d\x6a\x8b\x82\xc4\x79\x63\xba\xe2\x3d\x2b\xdb\x76\x1e\x58\xd7\x90\x0d\xfa\xd8\x9f\x86\x30\xe3\xd5\x81\x1a\x09\x7d\xc3\x8a\x38\xa6\x8e\xed\xb9\xb9\xc3\x47\x77\x58\x35\x9f\x0e\xc9\x96\xa5\xfb\xf0\x91\xcd\xf6\x2c\x9e\x61\x8e\x7a\x2f\x03\xc3\xcc\x6c\xd0\x43\xc3\x88\x84\x0f\x70\xfa\xf0\x7e\x8e\x6a\x26\xea\x00\x3a\x03\x37\x71\x8c\x11\x78\x30\x84\xcc\x08\x5b\x68\x01\xa6\xb4\x9d\x97\x41\xaf\xb1\x75\xde\x37\xd6\x16\x65\x54\x7c\xd0\x7d\xd2\x1f\x3c\x7a\x6a\xb4\x61\xd0\xb1\x4e\xe1\x58\x00\xcd\x31\xd6\x9b\xd7\x98\xef\x77\x8d\xd9\xe9\x0d\x61\x15\x61\x5d\x9f\x74\x1f\x3d\x1e\x3e\xc2\x2d\xe3\x0f\x5b\xdf\x60\x7a\xa1\xa9\x47\xf4\xd5\x76\x12\x17\x7e\xfc\xa1\x7a\x6f\xe6\x1a\x76\x87\x46\xb6\xaf\x4e\x20\x63\x23\xf5\x71\x23\xf9\xe9\x43\xc8\x60\xa8\x9a\x4d\xca\x62\x15\xc6\x15\x65\x81\xcf\x06\x65\x41\xd1\x52\xba\x21\x51\x16\x31\x51\x16\x2b\x45\x59\x84\x8a\xb2\x88\x6b\xca\x22\xca\x5f\x05\xaf\xac\x94\x82\xd9\xd1\xf5\x3d\xf2\x43\x66\xe3\xed\xc1\x3e\xda\x4d\xd1\x7b\x64\x4f\xac\x88\xa2\x13\xc8\x77\x81\xe9\x2b\x5f\xd8\x7e\x34\x1e\x3c\xed\x4f\x22\x8f\x9f\x3c\xee\xfb\x1e\x3c\x13\xa6\x8b\x5c\x7c\xb7\x0f\xa1\x86\xbc\x90\xa4\x0a\x23\xd2\x84\x49\x52\x04\x71\x85\xa1\xc9\x6e\x8c\x34\x37\x46\x9a\x1f\x18\x69\x7e\x60\xa4\xf9\xe7\x8d\x34\xff\xbf\x32\xd2\xf0\xe3\x23\x7d\x63\x8e\x34\x0e\x6a\x6a\x11\x9f\x8d\x91\xc6\xcc\x10\x4a\xd0\x48\x63\x35\xd2\xe0\x53\xa8\xc5\x07\xab\x8f\x77\xe5\x9b\x16\x9f\x87\x86\xc1\x07\x08\x2b\x83\x8a\x4c\x90\xba\x32\x4f\xce\xeb\xb2\x16\x1a\x4f\xb1\xbb\xd0\x59\x34\x43\x98\xe2\x76\x4c\xba\x73\xb4\x04\xf9\xa7\x94\x86\x80\xbf\xca\x20\x5f\x30\x16\xf8\xf2\x2d\x52\x2b\x05\x06\xfb\xb4\x6f\x6e\x00\xf1\xa3\x7b\x0e\x5a\x25\x9c\x0a\x7d\x75\x0d\x82\x18\x7c\x46\x82\x0c\xdf\xe9\x21\xa3\xbf\x25\xfe\x55\x5a\x0a\xe5\x8b\x61\x65\xa6\xbc\x85\x2e\xb2\x21\xbb\x0d\x53\xd2\xe2\xd5\xfe\xad\x64\x5e\x4a\xe5\x6b\x63\x22\xe8\xb3\x80\x3e\x2f\x66\x4a\xec\x43\xa6\x4b\xd3\x8c\x45\xfa\xc3\x5b\x71\xcd\xa3\x86\x58\x07\xb8\x34\xa8\xc8\x37\x04\x77\xbf\x96\x1f\xbb\xe6\xc7\x50\x8e\x97\x6d\x2b\x5a\x84\xc8\x54\x43\x62\x9b\x97\xf7\x5a\xad\xcb\x71\x1a\x2e\x05\xdf\x96\x6d\xdf\x08\x8a\x9d\x28\x1c\xe3\x62\x1f\xa1\xae\x0a\x32\x54\x8d\x77\x52\x32\xb0\x15\x69\x4e\x80\x70\x58\xcb\xd0\x69\x8d\x2f\x64\xc6\x1f\x19\xa6\x5f\x18\xdd\xac\x7e\x8b\x21\x4d\x2e\x09\x1a\x23\xeb\x47\x54\xd4\xe0\xf4\xb1\x15\x2a\x5e\xf1\x61\x89\x5f\xc8\x90\x6c\x83\x9f\xf0\xa9\xc2\x36\xd0\xef\x23\xa2\x34\x6f\x6e\x30\x9e\x11\x3e\x0f\x66\x78\x41\xbc\x8c\x09\x51\x35\x66\x75\xa4\xde\x18\xe3\x4a\xc8\x07\xbb\x03\x1b\xad\xa2\x8a\x07\x92\x2a\x26\x33\x86\x90\x8c\x78\x18\x7c\x3d\xd1\x5f\x07\x33\xe2\xd0\x91\x62\xf6\x55\xdd\xb2\x51\x6a\xce\x6c\xc6\x0d\xf1\xce\x4e\x1f\x48\x4e\x16\x1f\xf1\x7c\x62\xc5\x5e\x4e\xa0\x21\x27\x50\xe0\xe7\x5e\x8c\xaf\x18\xf3\x52\xc1\x86\xba\x13\xaa\xe6\x4c\x0a\x71\xdc\x8e\x9c\x11\xcb\xe8\xb1\x37\x94\x3d\x8a\x59\x4e\x7d\xc9\x8f\x8f\xef\x2a\xe4\xe6\x2e\x8d\x71\x71\xc4\x57\x93\xbb\xdb\xc0\x19\xfe\xe3\x50\x13\x18\xb7\x13\x28\xf4\xd5\x7e\x0b\xaa\x88\xbb\x92\x0d\x2c\x69\x0d\x36\x34\x1d\x4b\x5a\x83\x0d\xad\x81\xe0\x7b\x05\x71\xe9\x3e\xb6\x12\xc2\x7b\x28\x3b\xb0\x94\x41\x26\xf5\x5a\x08\xdd\xb1\x25\xa9\x90\xf5\x6a\x58\x03\xdd\xf6\x40\x36\x6c\x1f\xe8\xb0\x6c\xd7\xdd\xc8\x0e\x8b\xea\x3a\xd7\x83\xec\x05\xc6\xa4\xa0\x7b\xee\xa2\x53\x31\xb2\xb3\x29\x50\x2f\xe5\x34\x92\xec\x45\xd1\x60\x2f\xb2\x9a\xbd\x30\xb4\xe8\x2d\x48\x89\x37\x34\x71\xe4\x46\x01\x78\x0d\x7a\x87\xd8\x51\xb2\xa1\xef\x15\x66\x20\xb8\xcf\xae\xe3\x41\x15\xb4\xaa\x5f\x87\xac\x1a\x30\x55\x75\x83\x00\xfe\xb3\x6c\x1b\xe4\x49\x0f\x05\x52\xc1\x4a\x6f\x04\x38\xe4\xbf\x29\x08\x0c\x27\xbd\x98\x8d\x0a\x94\x43\xa2\x3e\xad\xc0\x08\x43\x40\xc2\xe9\x05\x2b\x6a\x9b\x25\xe3\x96\x5c\x21\xb3\x97\x5a\x5d\x16\xb1\x3e\xd6\x85\xa6\x2d\xb2\x78\xcd\x4d\xd4\x5a\xe5\x56\xb7\xa6\x64\xa2\xa6\xf3\x4b\x7f\x1a\x81\x37\xda\x6a\x8b\xaf\x84\x8b\x03\x35\xd6\xe9\xe6\xc5\xb6\x6a\x3e\x49\x22\xc4\x01\x28\x6a\xf0\x37\xaa\x6f\x27\xa4\xf6\x61\xe0\x7f\x29\x14\xa4\x6e\x3e\x40\x83\x5c\xf5\x24\xcd\x2c\x47\x25\xd4\x10\xa1\xa5\x55\x79\x28\x57\x6d\x84\x59\x6b\x4b\x95\x04\x7e\x11\x6d\xc5\xfc\x86\x1b\x46\x1c\x5f\x98\x29\xc7\xdc\x7b\x62\xa8\x14\x9b\x85\x1e\x62\x98\xd6\x2d\xd9\x42\xc1\x03\x5e\x2b\x6f\x88\x39\x7f\x6f\x55\x63\x90\x85\xff\x2a\x9b\xba\x0b\x0a\x0f\x2f\x6f\xf0\x09\x57\xb8\xd6\xf0\xe5\x08\x39\xce\x60\xd1\x88\x99\xa7\xc5\x6f\x41\x75\x05\x0d\x00\x6f\x3a\x15\xe1\x29\xd9\xb5\xa5\xd3\x70\xc6\xe4\xaa\x20\xa1\xf3\x2f\x8c\x60\x57\xc8\x78\x20\xb2\x62\x17\xa0\xb6\x7c\x02\xb2\xa2\x7a\x76\xe0\x61\x0b\x14\x46\xe3\x83\x0c\x75\x5a\x89\x17\x65\x77\x90\x46\x97\x5f\xba\x5b\xe5\x20\x01\x50\x76\x9e\xae\x2d\xdb\xeb\x3e\xd2\x51\x6b\xbb\xbb\xfd\xb4\xca\xbe\x09\xa8\x04\x9d\x8d\xe4\x2c\xb3\x51\xdd\x39\x95\xf0\x5c\x4e\x42\x8c\x7d\x8c\x9d\xaa\x41\xec\x61\xfd\xba\xbb\x85\x72\x5b\x9e\xf5\x74\x71\x1c\xe4\x8e\x97\xd5\xbb\xa1\xb9\x6a\x9d\xdc\xca\x07\x13\x57\xa1\x83\xda\x04\x80\x7b\xe1\x2a\x8a\xe7\xb0\x69\xe1\xf1\x2a\x88\x4b\xd1\xc1\x59\xa3\xf9\x06\xaa\x8a\xbc\xca\xdf\xe6\x3c\x8b\x4c\x1c\xfc\x63\x5b\x66\x41\x56\x8a\x72\xfe\x61\x4f\xab\x6d\x68\x93\xaa\x01\xc5\x2b\x0c\x15\x0e\x5d\xdd\x90\x94\x3e\xe9\xe3\x69\x57\x2b\x8d\xf1\x63\xa4\x84\x63\x64\xab\x0b\x3f\x4a\x94\xa4\x18\xba\xaf\x43\xed\x12\x0d\x70\x47\xe3\x59\x75\xfe\x30\x66\x40\xa3\x07\x25\x8f\xf6\x7a\x20\x03\xdc\xd3\xc6\x4a\x4f\xcb\xaa\x17\x11\x5e\x54\x22\x25\x17\x55\x33\x59\xd5\x4c\xd1\x30\xf5\x4c\xa2\x86\xf8\x5f\xb7\x68\x68\xc0\x9a\x19\x68\xca\x0d\x9d\x57\xd4\xd2\x60\x50\xba\xb7\x97\x2f\x33\x6b\xa9\xa2\xc9\x25\x4d\xaf\xb0\xc4\x50\x6f\xe8\x8e\xdc\xdc\x4c\x01\x79\x1c\x76\x1e\xfb\x20\x41\x2f\xba\xb0\x12\xe0\xc5\x78\x7e\x88\xd6\x0c\xf5\x55\x74\x97\xda\x23\x8a\xee\x52\x7b\xa4\x91\x3e\xf4\xf0\xb9\x4f\x1a\xcd\x9d\xa9\x12\x0b\x5a\x43\x51\xee\x70\x7a\x71\x0c\x9d\x4b\xd4\x84\xc9\x78\xcf\x32\x59\x71\xd5\x91\x37\xa7\x78\xef\x51\x21\x31\x65\x31\xab\x82\xf0\x3e\x30\xb4\xb0\x71\xd4\x36\xe8\x18\x18\xd7\x26\x21\x36\xaf\x65\x62\x95\xfc\x8a\x22\xd3\x09\x32\xeb\x18\x97\xb4\x7d\x05\xc5\x3e\x3a\x50\x7f\xde\x9c\x88\x4c\xcc\x4b\xc0\x39\x0b\x40\x3a\xe6\x9d\x3f\xcd\x65\x06\xee\xa4\x41\x5f\xaf\x9a\xc9\x4b\x7c\x95\xb2\x14\x11\xc5\x56\x65\x23\x5f\x89\xe4\xa4\xaf\xcb\xcb\x57\x43\xb7\x21\x3b\x59\x46\xed\xe3\x42\x37\xb7\x4a\xe7\xf3\x92\x4b\xe3\xf1\x0c\x30\x32\x8b\xe4\xcc\x89\x53\x5e\xc0\xb9\x41\x41\x5b\xe9\x08\xb7\x32\x83\x36\xe2\xc6\x6c\x8c\xe1\x4d\x71\xe3\x49\xff\x3d\x7c\x0a\x90\x1a\x31\x2f\x0e\x6d\x0d\x52\xed\xe5\xa2\xbd\x97\xe7\x51\xd3\x5e\xe5\x62\x13\x84\x6f\x2f\x12\xb1\x05\x44\x6b\xbc\xa0\x26\x5b\xbd\x6e\x32\x71\x85\x4a\x6e\x33\x15\xd0\xaf\x99\x6a\xe0\xdb\xb5\xaa\xff\xde\xca\x0c\x51\x69\xa3\x3b\x4a\x75\x48\x2a\x61\x52\x02\x12\x5f\x9b\xb9\x45\x57\xcf\x4e\xf7\xab\xaf\xbe\xc2\x00\x7c\x63\x0c\xb4\x95\x39\xc6\x56\x38\x8b\xf6\x43\x5f\xe4\xa6\x68\x15\xab\xce\x80\x78\x06\x36\xa3\xa2\x98\xe0\xab\x8b\x5f\x17\xb6\xbe\x1d\x51\xe6\xdd\x51\xde\x15\x05\xf8\xa9\xf3\xee\x28\xef\x92\xc2\x0b\xe3\x6d\x74\x0d\x10\x17\x57\x06\x48\x76\x43\x8f\x50\x9b\x46\xa2\x16\x0e\x1a\x47\xd3\x52\x8c\x29\xd1\xc3\x98\x12\x64\x67\x8a\x16\x43\xd5\xad\x7a\xdb\x88\xfc\x67\xe8\xb2\x88\xee\x96\x7b\x19\x6a\x84\xe0\x10\xf7\x19\xb9\xab\xc5\xe8\x1c\x01\xf0\x94\xdc\x04\x4a\xc8\x50\x42\x7a\xa9\xd2\xf1\x52\xce\xf1\x50\x82\x58\xf4\x34\x18\xce\xd8\x75\xa4\xee\x34\x64\x74\x27\xd3\x1c\x5f\xb1\x05\x73\x3d\x22\xfc\x4c\x9a\x07\xd4\x4b\xd4\xeb\x06\xe0\xf9\x64\x14\x8f\xd3\x51\x8a\xbe\x19\xba\x26\xa8\x37\x55\x57\x6e\x6d\x30\xac\x3e\x1c\x69\xbc\x21\x42\x5a\x68\x96\xe6\x86\x0a\x80\x16\x2c\x47\x68\x36\x6d\xd4\x79\x05\x75\xe1\xe5\x0e\x91\x15\x90\x1a\x75\x03\x65\x2b\x93\xeb\x01\xe7\xf2\xa6\xb9\x90\x9b\x3d\x1c\x85\x78\x07\x8c\xf1\xe1\xf8\xf8\x08\x2a\x08\xd1\x15\x2e\xe4\xa1\x91\xc0\xf0\x96\x85\xd1\x66\x62\xcd\xc7\x57\x37\x37\x57\x9c\xcf\x8f\x8f\x61\x86\x4e\x61\x16\x27\x6b\x1a\x00\x9a\x7e\xe3\x13\x0f\x19\x85\x9c\xf4\x80\x91\xd0\xb3\x52\x62\xd4\x2a\x98\x26\x19\x7e\x69\x8d\x91\x74\x17\x68\x60\xb5\x43\x53\xab\x25\x3e\x9d\x01\x98\xc3\xfe\xa1\xd9\xa9\x9e\x19\x39\x23\x0c\x8d\x0d\xf9\x9a\xa1\xad\x21\xdf\xe9\x0b\x30\x70\xe3\x9c\xc1\xb7\xcc\xb0\xfa\x83\x8c\x40\xfa\x6c\x5d\xc8\xe9\xa0\xf2\xde\x1e\xa1\xd9\xc9\x19\xab\xf7\xc0\x65\x43\xad\xbb\x8d\x24\x8d\x67\x1c\xa8\xe4\x8e\xe3\x74\x49\x59\xe7\x22\x16\x85\x78\x60\x96\x60\xad\x6f\x58\xd0\x10\x8c\x47\x7b\x16\x41\xd5\xde\x96\xf4\xd9\x96\x17\x2e\xcf\x1c\x49\x84\x02\x46\x91\x2f\x3b\x34\x98\x71\x38\x46\xd9\xab\x59\x01\xba\xb8\xac\xe2\x07\x90\x97\x4a\x47\x36\xb4\x80\x9c\x94\x6a\xc4\x10\xbc\x47\x6d\x03\x9b\xcc\x15\xb8\xa3\x2b\x58\x10\x69\x58\x40\x96\x9f\x14\xbe\xfd\xa6\x56\xbf\x17\x2a\x3f\xec\x3c\x19\x3b\x70\x94\x3a\x3c\x45\x01\x50\xa6\xae\x04\xed\x3e\x72\xad\xcc\x4b\x29\x62\x67\x50\x5f\x56\x4d\x81\xf7\x6b\xc6\x69\xe8\x50\x00\xbe\xc0\xf6\x20\x33\x5e\x14\x0d\x45\xf0\xf6\x1b\x59\x6a\x24\xba\x44\x80\xbb\x21\x34\x12\x3b\x11\x2c\x15\xd1\xe1\x2e\x06\x4d\x88\x9d\x52\x1a\x73\xe9\x4c\x99\x4e\x36\x74\x08\x6d\xe8\x2c\x39\x17\x5e\x31\x55\x93\x81\x19\x97\xfb\x6d\xd4\x30\xb2\xd4\x2b\x51\xd1\x29\x4a\x86\x4e\x31\xb5\x81\x71\x33\x54\x02\x91\xe9\x8c\xb7\x57\x14\x30\x6b\x05\xa4\x26\x62\x5a\x78\x83\x56\xf9\x67\xad\xe5\x10\x3d\xc0\x7b\x11\xcc\x7e\x84\x37\x8a\x87\x1e\xde\x41\xd8\xcd\x5d\x4e\x64\xb0\x4b\x6f\xef\x5d\x8a\xaa\xb6\x76\x4d\x32\xe3\xd5\x1e\xde\xef\x6b\xbc\x5f\xf5\x89\x19\x5c\xa3\xe7\x45\x44\x89\x4a\x7e\xbb\x59\x2b\x83\xcd\x86\x8d\xc2\xf2\xa0\xa8\xda\xd4\x42\x44\x6d\x99\x56\x37\xa8\x66\xb6\x9e\x5a\xf8\xea\x1b\x7d\x7b\x6f\xd2\x0c\x03\x57\x23\xd3\x43\x82\x5a\x5c\x43\xa3\xbd\x77\x87\xa9\x8d\xaa\x5c\x93\xc8\x00\x82\x0d\xc8\x90\x9e\x26\x6f\x0c\x79\xfd\xfd\xab\x8b\xd7\x8c\xa9\x05\x86\x9c\x52\x3c\x69\x1c\xf1\x5f\xee\x5f\xe2\x07\x82\x94\x2e\xf5\x32\x43\x7e\xb9\xd2\x8d\x5a\xde\x18\x43\xc1\x78\xd2\x70\xd0\x76\x3e\x1e\xe8\x39\xbe\xcc\xb7\x6c\x8e\xaf\x73\xf3\x4a\xb7\x6f\x5a\x94\xc3\x16\xe8\xa8\x13\xba\xd1\x08\x0e\x42\x21\xa9\x1c\x2c\x4a\x5e\x71\x1e\xa5\x21\x71\x37\xdf\x91\x6b\x9c\x87\x57\x85\x8f\x2a\xed\x20\xd2\x75\xb0\xae\x65\x0f\x1d\x00\xfb\x36\x93\x32\x73\xe4\x16\x29\xa0\x2f\x7c\xd1\x2e\x5a\xd8\xa3\x12\xbb\x13\x99\x02\xe5\xe8\x93\x5c\xda\x1e\x88\x71\x31\xa1\x4b\xe1\xfc\xa9\x68\x84\x8a\xf9\xb5\xb5\x94\x48\x06\x4b\x9f\xc9\x49\xe3\xcd\xb2\x7d\x6c\x4b\xd1\xc9\x26\xbd\xf7\xcf\x1e\xcc\x94\x56\xca\x24\x4b\x25\xa9\x80\x71\x27\xd4\x3d\x12\xf8\x88\x5c\xa3\x1b\x7e\x2c\x51\x53\xe8\x2a\x8f\x4d\x75\x2b\x64\x24\x2f\x18\x05\x46\x7d\x5a\x56\x03\x8d\xc6\x29\xce\x28\x9a\xc9\x49\xe1\x04\x85\x03\x88\x28\xcc\x28\x72\xe6\x50\x02\x0e\xc4\x22\x4e\x53\xb2\x1d\xc3\xa2\x78\x98\x90\xc2\xc5\x9b\xd1\x0c\x89\x6f\x63\x62\x26\x1f\xa8\x88\x7f\x97\x56\x52\x56\x58\xf4\x12\xdb\x49\x6e\x19\x56\x77\x67\x56\x6a\x4b\xe5\xbc\xf5\xd7\x86\xe9\xe1\x4f\x7b\x33\x49\x12\x66\xba\x73\xb8\x7f\xbf\x7a\xdc\x93\x74\x07\xde\x0b\x7c\x9a\x90\xad\x15\x5d\xb3\x27\x4d\x16\x6c\x38\xa1\x57\x22\xcb\x05\x79\x7c\x14\xfb\x5f\xe5\x3d\x99\x3c\x40\x71\x95\xbc\xd0\x12\x6a\x4a\x3d\x32\x2f\x07\x12\xc7\xd6\x97\xf9\xe2\x4a\xd2\xe7\x82\x3e\xef\x2d\x66\x4d\xbf\x06\xdd\xcb\x28\x17\x21\x05\x41\xa6\x90\xe0\x5e\x75\x3b\x22\x12\xfa\x64\xf2\x62\x35\x65\x72\x3f\x18\xa3\xaf\x59\x3f\xab\x11\x01\xe4\xf0\xe0\xc7\xc3\xc9\x4f\x91\xff\x0f\xfa\x8e\x66\x93\x1f\x4a\xff\xa7\x4a\xd1\x93\xca\xab\x50\x19\xb9\x96\x05\x74\x5d\x43\x02\x2f\x6b\x0c\x45\x63\x70\x91\xc6\x4a\xa7\xc8\x57\x13\x4a\x65\x41\xd5\xe3\x7d\x9f\xf3\x3a\x82\x15\xe6\x87\xf9\x99\xa7\xeb\x20\x32\x62\x09\x16\xf7\xc4\xb8\x4a\x60\x0d\x90\x17\x7e\x55\xae\x2f\x45\xa6\x82\x8e\x25\x58\x0b\x9d\xae\x83\xcd\xec\x55\x82\x91\x2e\xa8\x60\x51\x15\x7c\x83\x4a\xa7\x43\xa5\x23\xcd\xde\xda\x86\xf5\x86\xb0\xbe\x29\xa9\xeb\x61\x1c\xac\x37\x9f\xd6\x68\xa6\x1b\x45\x87\x51\xb3\xae\x4f\x2b\x2e\x74\x71\x81\xc5\x8b\x28\x7c\x9b\x1f\x9a\xb1\x3f\xe4\xb9\xd7\x79\xbe\x4d\xb3\x75\x60\x4c\xbe\x89\xe8\xbe\xd0\x98\x0f\x33\x27\xb0\xad\x0f\xd5\xf7\x97\x8a\x6a\x87\x91\xf3\x70\xbc\xe9\x66\xc7\xf7\xad\x6e\x8c\xfd\x77\xdb\x0c\xb2\xf7\x67\x74\x9f\x40\x8b\xa6\xb6\xa3\x7e\x69\x09\xe0\xc5\x98\x1a\x14\x76\xe1\x0c\x77\x8c\x1a\xff\x6a\xd6\x48\x80\x0e\x00\xce\x6f\xf2\x33\x5e\xab\x66\x64\xfe\x4d\x73\x92\xe4\x2d\x2f\x63\x65\x0c\xfa\x5a\xf5\x49\x18\x80\x18\xa5\x81\xf4\x59\xd6\x31\x44\xd0\x34\x60\xa0\x24\xe1\x12\x3c\x19\x31\x2b\x8a\x8a\x7b\x87\x9a\x10\x48\x17\xbd\xac\x8a\x86\xd5\x1d\x3c\x1a\xf3\x68\x52\x3a\xd0\x8c\xdf\x3d\xd1\x2f\x8f\x7c\x54\xd7\x93\xa8\x13\xde\x86\x36\xc3\xd6\x78\x0d\xd3\xf0\xb5\x57\xda\x4e\x49\x3a\x43\x6e\x34\x8c\xef\x94\xe2\x76\x1f\x51\xf2\x70\x86\x16\xcc\x86\x78\x78\x7f\x86\x71\x36\x75\x38\xb6\x80\xa9\x39\x30\x5d\x64\x5a\x14\x9a\xca\x21\xbd\x4e\x14\xcc\x88\x42\x69\x6b\x26\xdd\x44\x4b\x7d\x3d\x29\xeb\xe4\x1d\x34\x39\x9e\x3e\x9d\xe9\xe0\x35\xd0\xe2\x82\xb6\xd9\xeb\x4c\x2c\xa2\x6d\x4d\x11\xab\x6b\x65\xe8\x62\xcd\x4c\x5e\x09\x56\x09\xee\xa7\x4f\x66\x64\xbd\xf7\x64\xc6\x3b\xdd\x8e\xfb\x75\x64\x29\x25\x1d\xe4\x1c\xd2\xa5\x6b\xd8\x04\xef\x2c\x3a\x4c\xd4\x2d\x40\x3f\xb4\xca\xe4\xa0\x52\x5c\x54\xb5\xa0\x59\x22\x3c\xef\xd6\x97\x69\x7c\x7b\xdb\x6e\xee\x77\xe4\x24\x9e\xce\xf0\xf2\x78\x52\xe7\x54\x7a\x18\x49\x83\xf3\x0e\x93\x7d\xa2\xbe\xb8\xd0\x89\x51\x3d\xbb\xaa\x27\xa6\x85\xff\xd7\x06\x14\xf4\x0e\x6d\x9a\xc4\xd8\x32\x6e\xb7\x3f\x30\xca\xfe\xde\xa0\x88\xbe\x46\x62\x6d\x58\xe3\xfa\x04\x8d\x17\x77\xb1\xd2\x04\x5f\xe6\x96\xf0\x20\x8b\x39\xc3\x85\x9e\xe1\x42\xce\xb0\xed\x3e\x70\xad\x8e\xe8\x1c\x61\x70\x08\xd4\x7a\x39\x56\xe7\x4b\x5c\x32\x53\xe6\xf9\xaf\xc3\xf8\xa2\x16\x3f\x2a\xb7\x03\xec\x7b\x7f\x9c\x4c\xfa\x3e\xd4\xe5\xd5\xc3\xa1\x7b\x83\x30\x72\x53\x1d\xb3\xa5\xb0\x0f\x23\x05\x55\x93\x36\x3d\x52\xb5\xc8\x57\x2f\x69\x84\x58\x36\x28\x5f\x0a\x01\x53\x5d\x91\x94\xee\x21\x91\xc2\x20\x7d\x12\x1d\x54\x14\x4b\xb0\xf4\xb3\xd0\x89\x20\xbf\x29\x60\x1b\xd0\x82\x80\xca\x59\x56\xd6\x44\x31\x52\xf6\x5a\x62\x2c\x1a\x82\xdd\x69\xf7\x32\xc8\x0d\x58\x29\xee\x45\x34\xae\xa8\x6b\xce\xcc\x9a\x0a\xac\xa9\x09\x75\x35\x31\x0a\x20\x4d\x67\x65\x72\xfa\xfc\x6d\xed\xb6\x52\x55\x87\x4e\x71\xaa\xab\x40\x8d\xa5\x58\x5f\x0b\x2d\xe8\x50\x25\x00\xe7\xb2\xea\x3a\x83\x44\xfa\x8b\xa9\x48\x11\xc6\x6e\x2d\x31\x46\x14\xcb\x0d\xa8\x54\x5a\x21\x9e\x33\x5e\x7c\x39\x98\x0c\x7d\x72\x56\x8e\xf2\x6f\xa3\x24\x02\x04\x98\x7b\xb1\x34\xec\x16\xca\x3b\x22\x1f\xc7\xa3\xd8\x75\x2b\x26\x7e\x45\xb1\x00\x56\xa3\x15\x7c\x53\x77\x2c\x44\x56\x6c\x3b\x2b\x7b\x64\xbc\xaa\x23\x47\xe2\x10\xe3\x2b\xd6\x74\x9a\x8f\x8c\xca\x16\x40\x05\xad\xc6\xfd\xd1\xca\xf3\xda\xd5\x61\xa6\x18\x38\xbf\x74\x1a\xcf\x4e\x03\xea\x84\x8a\x46\xa0\x95\x4f\x90\x84\x31\x08\xc6\xe1\x28\x87\xe2\xa3\x14\xed\x00\x88\x90\x23\x45\x78\xa5\x72\x53\x33\xd8\x46\x9a\x5a\xf7\x77\xd4\x5e\x60\xad\x07\x3c\x8b\x47\xfb\x76\x6b\x93\x82\x9f\xc5\x7e\x47\xd7\x02\x07\xb2\xd8\x6d\x44\xba\x78\x20\xb1\x50\x0d\x49\xb4\x13\x45\x56\x91\xa9\x70\xb2\xbb\x03\x96\xf4\xd4\x82\x02\xb9\xa9\xfd\x43\x42\x2e\x90\x92\x18\x08\x6f\x30\xac\x05\xcc\x18\x0c\x88\x7b\xc6\x47\x5a\xd0\xfb\x18\x86\xa4\x17\x59\x21\x31\x0d\x2e\xec\x70\x20\x5f\x27\x28\xeb\xf4\xd1\x66\x07\x26\xe1\x0e\x2c\x8f\x50\x83\xd2\x90\x16\x56\xc8\x1e\xf0\x7b\xca\xcc\x63\xfc\x5d\x85\x5b\x6a\xd5\xc7\x81\x93\x2d\x91\xcc\x8f\x91\x0c\x4a\x07\xbf\x83\x9e\x21\x9c\xff\x8c\xf3\x9e\x7d\x1e\xf9\x58\x9d\x72\x71\xd7\x29\xcf\x88\xc4\xca\xda\x67\x29\x31\x49\x2c\x81\x43\x56\x79\x0e\xee\x96\x9a\xc4\x12\x4c\xd2\x63\x59\xeb\xb0\x9b\x91\x01\x55\x9f\xfe\x92\x15\x53\x66\xb1\xdd\xa4\x49\x23\x3a\x50\x7a\xcf\xb0\xe4\x4c\xe2\xad\xd2\xd5\x5c\xd6\x60\x47\x98\x43\x2b\xb0\xf2\x3b\xd6\xf7\xbb\xe6\xfa\xca\xd5\xcd\x1a\xab\xfb\x63\xf4\x31\x93\xdd\x62\x52\x43\x78\x8f\x20\xfe\x5d\xa6\xa7\x3f\x47\x7b\x21\xb3\x6a\x58\x1a\x4d\x2d\x40\xf6\x4b\x81\x88\x16\x30\xb7\xa2\x14\x49\x22\x53\x4c\x80\x1a\xc1\x04\xa6\x6e\x6c\xc7\x60\xac\xfd\x1e\xd0\x62\xde\xc0\xfe\x52\xeb\x08\x1b\x71\xa3\x1b\x51\x57\xf7\x14\x56\x77\xe8\xe0\x1e\x14\xae\x00\x3e\x53\xed\x55\x14\xc2\x57\x12\x81\xbd\x3d\x97\xdd\x0f\x20\x92\x51\x22\xcd\x9e\xd0\xff\x2a\x1e\x99\x9a\x72\xf2\x01\xc8\x6a\x49\x67\x7a\x4a\xac\xe4\x2a\xc8\xf1\xf6\x41\xe4\x15\x6f\x6e\xe4\x78\x23\x3d\xde\xa8\xa6\xa3\xc4\x14\xe6\x63\x56\x85\x8b\x2a\xba\x81\x8d\xd1\x9b\x3e\x83\x17\x8a\x80\xaf\x40\x16\xb9\xe0\x1f\x0a\x5f\x13\xe4\x81\x5f\x65\xa4\x48\x67\x51\x55\xe9\x6b\xd4\x68\x1b\xc7\x02\xfd\x8d\x3e\x1c\x34\xda\x0d\xb8\xa2\xb3\x43\xa0\x16\x29\xba\x4b\x59\x79\x25\x6b\x10\x69\x85\xdc\x0a\xdd\x18\x85\xe2\x7d\x1b\x1d\x6a\x43\xbb\x67\xd5\x62\x0a\xb7\xbe\x30\x13\x45\x21\xa1\x9b\x3b\x01\x64\xcd\xed\x76\x8f\x65\xaf\xda\xfd\xae\x3a\x4d\x9c\xc5\xff\x7a\xcf\x15\xf2\x94\xe6\x8a\x6a\x18\xf6\x5d\xe3\xb8\xe9\x37\x47\x62\x14\xa5\x41\xb9\x58\xc8\x6b\x96\x71\x72\xaa\x71\x7f\xb8\xc6\x78\xee\x1c\xf3\xd7\x41\x32\x6f\x8e\x96\x85\xf7\x8c\x77\xcf\xb8\xfa\xf4\x04\x52\x42\x1e\x68\x6b\x08\x9c\x82\xd3\x52\x5e\x85\x5b\x4e\x63\x0f\x1e\x16\xf8\xd1\x8b\x31\x48\x87\xb5\xf0\x72\x73\xc8\x81\x3b\xc4\xd8\xb3\xc6\x90\x73\x77\xe5\x84\xa8\x0d\x8b\xd1\x57\xb1\x16\xaa\xa4\x7c\x85\xde\x34\x81\x6d\x0e\x90\x3a\x7f\xff\x72\xfe\xbf\x1d\x9f\x41\x26\x1d\x1e\x6a\x6b\xac\xe6\xce\x80\xfc\xc6\xc2\x06\x48\xb2\xe0\xb2\x1e\x9a\x0a\xa3\x98\x9a\x15\x7b\x6f\xdd\xef\x9f\x1b\x4c\x3d\x00\xda\xd3\x2a\x43\x3b\xe8\x5c\x95\x05\x88\x44\x00\x1f\xd2\x5e\x4e\xdc\x85\x22\x7e\xd6\xe2\x05\x0d\x02\x9b\xa6\x14\x69\x0b\xa2\x47\x96\x66\x6c\xfa\x44\xab\x1a\xa1\xa2\x02\xad\xc0\xce\x46\x76\x30\x05\xd2\x65\x86\x24\xd1\xbb\x32\x48\x0a\xbc\x82\x32\x61\xa2\x97\x1d\xb2\x86\x4a\x4d\xd9\x0c\x19\x51\x93\x61\xdb\x84\xc2\x1a\xf5\xfd\x62\x5a\xcb\xcf\x02\xa6\xa3\x29\x56\xe2\xa8\xcf\xe3\x0e\xb4\xb0\x29\xb3\xbb\x8b\x28\x2e\x04\xd0\xc8\xb6\x74\xe9\x45\xdb\x62\x25\x79\x4a\x3f\x57\xf2\x14\x29\xc9\x53\x5a\x8d\x36\x3f\x30\xd3\x01\x66\x90\x84\x4e\x7b\xc9\x6a\x5c\x86\x44\x0c\x99\x26\xfd\xb4\xa0\x5b\xff\xc7\x62\x32\xc5\xfb\x73\xe0\x1f\x4a\xab\x81\x4d\x93\x53\xeb\x4b\xf9\xf6\xa9\x76\xb3\xc2\xcf\xf8\xd1\x90\x76\xcf\xee\x21\xfc\xd4\xba\xde\x62\xd7\x0d\xbb\x98\xf4\x5e\x4a\x4f\x4c\x0f\xd9\x14\xa6\xa6\x50\x25\x72\x28\x68\xa5\xdd\x88\x05\x59\x9a\x51\xe5\xb5\x0a\x42\x45\xb7\x4c\xab\x0f\x68\x17\xa1\x6f\x67\x18\xb5\x08\xa9\x4f\xe3\xcd\x60\xdb\x90\xc8\x07\x79\xb4\x69\x5d\xed\x4c\x4a\xd9\x64\x1c\x68\xa0\x95\x3e\x63\x71\x4d\x11\x5d\x76\xc7\xda\x99\x56\x99\xa2\x5a\x3b\x34\xb3\xe6\x48\x3b\xc1\xc2\xf9\x45\x2f\x72\x31\x2e\x3c\x2b\xdc\x41\x2f\x9a\xdd\x43\xb0\x55\x2b\xd0\x12\xba\x89\xf6\x39\x34\x29\x2b\x31\xa6\xeb\x75\x4d\x31\xb3\xb0\x67\xbe\x3c\x3f\xb7\x77\x52\x38\x1f\x39\x27\x48\x25\x24\x9f\x49\x7a\x50\xc0\x61\x3a\x0a\xe2\x73\x77\xfa\x34\xa1\x7d\x8d\x51\x1d\x71\xe7\xde\x09\xaf\x84\xde\xb9\xa6\x25\x56\xba\x6f\xe4\x21\xb3\xbb\xc9\x6d\xa5\x1e\x55\x1c\x08\x5a\x9d\xa8\xa9\x28\xda\x63\xbb\x7f\x77\x49\xb2\x1b\x57\x96\x66\xa6\xf8\x04\x99\x6d\xf1\x39\x32\xdb\xe2\xae\x31\xd3\xf8\x1a\x97\xea\x94\x69\x9d\x6a\x38\x10\x44\x69\x43\x7f\x15\x25\x89\xc8\xe4\x75\x63\x06\xb8\x6d\xe6\x49\xcb\x62\x3f\x4f\xd0\xcc\x43\x01\xb2\x9e\x35\x63\x3e\x85\xcd\x2c\x22\x99\xb7\x32\xc4\x8d\x0c\x78\xe9\xff\x26\x68\xe7\xc9\xd3\x5a\x6a\xa5\xe4\x54\x09\x3a\x6b\x15\x1e\x40\x87\xcc\x76\xa4\x58\x6a\x60\x18\x6d\xa5\xb5\x2f\xbb\x96\x56\x56\x71\x36\x49\xf9\xa5\xe2\x6f\x02\x09\x6e\x95\x93\xcc\x47\xdb\x2a\xc3\xc6\xc2\x89\x5c\x54\xe0\x63\xa8\x30\x07\x43\x42\x79\x81\x13\x21\x19\x88\x5e\x0f\x21\x05\x29\x1b\xcc\x5c\x0c\xd0\x56\xc8\x2f\x4b\x8a\xbd\xe3\x62\xec\x27\x72\x39\x07\x5a\x15\x63\x3f\x49\xab\x8f\x39\x5f\x79\x39\x5b\xf3\xa5\xb7\x60\x3b\x3e\x77\xe6\xee\xda\x59\xb3\x33\x2e\xbc\x8c\x6d\x79\xee\x2c\xbd\x95\xb3\x60\x97\xdc\xea\x8f\xd7\x13\x6f\xe0\x0f\xcc\x78\xbb\x67\xce\x99\xb3\xf3\xb6\xce\x16\x7d\xd7\xad\xad\xb3\xf6\xe6\xce\xa5\xdd\xc3\x8b\x62\x2c\xf8\x3c\xf7\xd6\xf2\xf5\x9c\x12\x5d\x95\xf8\x56\x26\xba\x2a\xf1\x05\xbf\xf0\x36\xec\x19\xbf\xf6\xae\xd8\x2b\x7e\x0e\xcf\xcf\xf9\x5b\xef\x4a\x83\xcf\x17\xce\x0b\xf7\x99\xf3\x6c\xfc\xca\x79\xe5\x3e\x77\x9e\xd3\xed\xfd\xe7\xd0\xc0\x5b\x38\x6e\xd3\x0b\x2f\x64\xd7\x48\x0b\x4d\x2f\x1c\xd1\x3b\x63\xd7\xf8\x77\x66\x5a\xc0\xb5\x4f\x95\x09\x7f\x70\xff\xc5\xf5\x6d\x9e\xb0\x89\xf1\x6a\x81\x00\x65\xd2\x3a\x44\x26\x4c\xef\x14\x69\xaf\xe9\x8c\xcc\x9b\x70\x52\xb5\xb2\x6a\xc9\x5f\x10\xc6\xdd\xe0\x6f\x86\x0a\xb7\xc5\xe9\x0a\x99\xa4\x30\x88\x63\x79\xe1\x08\xc6\x3f\x5a\x40\x49\x7b\xa2\x82\xc3\x4c\xdd\xa5\x99\x8c\xc6\x59\xee\xa6\xf5\x65\x66\xfb\x79\xed\xa6\x0c\x7d\xa4\xe6\x2b\xa2\xa3\x4e\xc3\xa4\x58\x1f\xed\xb8\x92\x16\xcb\x70\x0f\x92\xbe\x79\x86\x4a\xd3\x57\x68\x73\xf2\x0a\xe3\x8c\x2d\x51\x67\x1a\x75\xdf\x0a\x0c\x4c\xd0\x7d\x52\x5b\x5d\x6c\x3f\x1d\x95\x14\x84\x48\x8a\xee\xee\xd3\xf5\x4b\x05\x49\x28\x01\x62\x89\x45\x94\x88\x83\xfa\xac\x43\xc2\x03\x2a\x58\xde\xd2\x5d\x2d\x9f\xa9\x96\x4a\x79\x2d\xe1\xe2\x5a\xc2\x95\x4c\xe0\x9c\xf9\xc0\x5a\xbe\x88\x89\x85\x47\xbf\x83\x65\x6a\xd3\x74\x40\x4b\x29\x41\x3a\x91\x7c\xce\x0d\x62\xd4\xc5\xa0\x01\xd5\x96\x4d\x98\x22\x57\xe5\xa5\xa9\x2a\xda\x98\x39\x28\xbb\xdb\xf9\xcb\xb8\x7d\xf4\x2a\x6d\xda\xa7\xd2\x0d\xc6\xe6\xad\xf0\xa4\x11\x9a\xa2\x12\x83\xfc\x4d\x50\x89\x51\xd9\xab\x2a\x75\x6f\xe7\xfb\x0e\x23\x35\x87\x8b\x2b\x30\x2d\x66\x78\x41\x06\x9e\xf7\xce\x6f\xb2\x40\xcd\xab\xa3\xd5\x9d\x51\x4a\xea\x46\x0c\xe5\x43\xd5\xaf\xf5\xff\x46\xbf\x7e\xc3\x7e\xa9\x1e\x01\x84\xab\x5a\xac\x54\x30\x07\x1a\xde\xfd\xaf\x4d\x48\x35\x15\xfb\xf3\x70\xa8\xe1\xb3\xb4\x65\xdb\xa4\x98\xb4\x87\x13\x5a\x36\x9f\x20\xed\x05\x3c\x2a\xb9\xed\x80\xa1\x57\xde\x75\xda\xd6\x6c\x6d\xef\xa8\xe7\xa4\xaa\xa7\x4f\xf5\x58\x4a\x94\x92\xd0\x1a\x24\x54\xd5\xd4\xa0\x87\x87\xb3\x99\xbe\xd5\x23\x41\x62\x03\x86\x69\x37\x5b\xba\xfc\xc4\x96\x92\x03\xbd\xbc\x48\x2b\x99\xb2\x06\x72\xa7\x03\x8c\x2e\x25\x9f\x8f\x78\x1d\x3d\x61\xff\x9b\x3b\xb4\xcd\x1d\x5d\x7b\x71\xb6\xf2\xc1\x7a\x75\x3a\xac\x0a\x19\x4d\xf2\x7e\x19\x3a\x0e\xbd\x32\x30\x9e\xcb\x48\xde\x19\x8f\x16\x33\x9d\x9f\x3b\xae\x85\x57\x62\x7a\x43\x07\xef\xca\xec\x9d\xd8\x74\x7d\xaf\x85\xf7\x63\xd2\xb7\x41\xf5\x0d\xb3\xa9\x87\x01\xc9\xb4\xc8\xbd\x0d\x95\x9a\xba\xe9\xf1\x00\x2f\x6a\x2b\x94\x69\x36\x7a\x7a\x84\xae\x8b\x2e\x12\x9d\xe7\x50\x25\x32\xd9\x2e\x36\xa2\x9a\x40\xce\xdb\xc5\x06\xaa\x26\x31\x72\x79\x9d\x4e\x5d\x08\xaa\xf4\x46\xf3\x46\xc4\xe3\xe1\x28\xae\xa2\x4e\xa0\x0e\x00\xdb\xb4\x55\xf3\xd8\x19\xc0\x5d\xd8\x83\xf3\xcf\x6c\xe1\xb6\x56\x8a\xe6\x54\xd9\xc8\x9c\x2e\xe0\xfd\x83\xf6\x74\xd1\xb7\x7a\xba\x72\x5d\x5b\x8e\xb5\x69\x1a\xcd\xb0\x5e\x4c\xf7\xc3\x49\x90\xac\x90\xc2\x17\x90\x25\x53\x52\x93\x2b\x78\x13\x23\x6a\x6f\x6a\x81\x61\x70\x1a\x8e\xec\xda\x50\x07\xcd\x58\x98\xf2\xa2\x98\x96\x8e\x95\xea\x78\xdc\x00\x6a\xf0\x4d\x87\xe4\x9e\x1d\x32\x85\x3f\x4f\x55\x98\x82\x7a\x3b\xef\x6f\xb6\x82\xdc\xeb\xf7\xc1\x42\x26\x37\x5a\x26\x37\xda\xb4\x64\xf8\x1f\x41\x82\x01\x41\x02\xec\xfb\x14\xba\x09\xff\x11\xdc\xc0\xb0\x27\x25\x81\x91\x88\xe1\xad\xdd\xaf\x52\xeb\x79\x8c\x01\x6f\xf0\x93\x7c\x09\x6c\x15\x17\x45\x9f\x56\x24\xfa\x6d\x02\x38\xe8\xcc\x25\xa1\x0c\xf0\xad\x5a\x39\xad\x14\x43\x12\xb2\x06\xd5\xe7\x40\x7f\x46\xa3\xaa\xe7\xa9\x15\x52\xfc\xa4\x5a\xa1\x26\x7d\xb0\xc2\xfa\x02\x71\xbc\xff\xe6\x00\x94\x7a\xbb\x37\x3d\x0f\x9b\xd3\x63\x1a\x2b\x4e\xd1\xac\x0d\x3d\x88\xeb\xa9\x8a\xb8\x5c\x48\xf8\x8b\xb1\x47\x4e\x4f\xd0\x58\x91\x0c\xb1\x94\x91\x90\x54\xe6\xa6\xfa\x65\xa0\x9c\x58\x94\x57\x8b\x9c\x93\x48\x6e\x2b\x3d\x5b\x36\xc3\x28\xf6\x58\x5b\x69\xd4\xa6\x47\xde\xaa\xb7\x35\x4f\x85\x9e\x10\x41\x91\x86\x6a\xf1\xf6\xfe\xd0\x5f\xa4\x56\x3b\x66\xef\xde\xe0\x4a\xf7\xa1\x56\x32\x4e\xe5\x00\x1f\xe2\xce\x84\x2e\x7d\x59\xce\x74\x9b\x42\xad\x8d\x7a\xd1\x43\x2c\xf8\xf4\xf0\xfa\x57\xc3\x8b\x1a\x75\xb5\x46\x22\x0e\xaf\xb8\xd0\x03\x2c\x1a\x2b\x5e\x1c\x18\xe0\xb3\xb4\x69\x99\xa8\xe5\x01\xd2\x28\xc2\xf0\x78\x52\xe7\x51\x1f\x49\xe9\x81\x12\x48\x6f\x93\x2a\x0a\x3f\x79\x9e\x50\x18\x59\xf2\x4d\x8a\xab\xed\x1a\xe3\x49\x89\x7b\x82\x70\x31\x2f\x1c\x49\x39\xe0\x49\x77\xac\xc8\x2d\xd1\xba\x18\xb7\x29\xa5\x0c\xaa\x94\x14\x52\x6a\x71\x2a\x9d\x52\xc3\x4e\x36\xfd\x98\x1f\xb8\x8b\x17\xfe\x39\x68\x58\x00\x4f\x27\xf8\x74\x62\xde\xb0\x90\xd6\xee\x3e\xf2\x04\x3c\xa7\xf9\x7f\x16\xa3\xe1\x8f\x5a\x0c\x78\x11\xd5\xcb\x2b\x33\xe5\x95\x99\xf2\xdc\x4c\x79\x8e\x29\xe6\x25\x0a\x8d\x8e\xd2\xee\x53\x57\x7f\xca\x5b\x03\x08\x19\x1b\x96\xb2\xf7\x10\x23\xe4\x16\x23\x35\x2a\x0d\xf4\x46\xb3\x0a\xed\xa0\xb3\x42\xc3\xb1\x08\xa6\x10\x68\x55\x4c\x21\x48\x09\x70\xc3\x25\x73\x89\xde\xb0\x02\x83\x98\x2d\x35\xc3\x3f\xbe\xdc\xdf\xf3\xb4\xfc\x64\x54\x48\xbd\x83\x75\xf7\x4c\x70\x4c\x8b\x4d\x00\xb9\xc0\xb6\x08\x16\xc3\x1f\x6c\x8a\x4c\x34\x28\xa4\x72\x0a\x5f\x79\x4a\x5f\x79\xdf\x07\x52\x1f\x3f\xf4\xd0\x69\x56\x7e\x84\x47\xbc\xbb\x8a\x5c\x53\x58\x39\xfe\x8a\x5c\x35\x4e\x9c\xc2\xe0\x4c\xd1\xe9\x00\x6b\x29\x1d\xc1\x54\x4d\xa5\x93\xa9\x18\x3e\x01\x57\xdd\xe0\xd0\x0f\x72\x1a\xaa\xa4\x6f\x21\x83\xbc\xf6\x4c\x4e\xb6\x21\x9e\x0b\x3c\xf9\x15\x56\xe2\xb1\x63\x0d\x5c\xac\xdc\xc1\x3f\xb5\xfd\xe2\xb4\xbc\xb9\xe9\x53\xab\x0e\x3e\xd5\xe8\xc3\x30\x06\xfc\xa5\x49\x91\xdf\x49\x11\xd1\xc4\x9a\x97\x42\x1c\x9a\x68\x2e\xcd\x54\x6b\x44\x57\x22\x08\x28\xc8\x62\x95\x49\xbb\x0d\x94\x29\xe3\x26\x7a\x13\x50\x04\x06\x6e\xdc\xa4\x83\x57\x8d\xe3\x39\x32\xae\xdb\xa9\xc5\xc9\x86\xa9\xea\x37\xf7\xb1\xad\x78\xa5\xf7\x55\xcd\xb6\x06\xc0\xb6\xae\x6d\x64\x25\x73\x16\xc3\xf3\xdc\xb0\x02\xc5\xaf\xc0\x5b\xd4\x0c\xad\xba\x5b\x19\x37\xcb\x1c\xff\xac\xf1\xcf\x0e\x07\x75\x56\x93\x68\x5b\xc5\xd9\x5e\xe2\x6f\x89\xbc\xbd\xe0\x9c\x67\x93\x7d\xa1\xce\xf2\xd6\x27\xe6\x17\xf8\x71\x72\x20\x3e\x90\x65\x43\x59\x68\xdf\xef\x4e\xcf\x46\x76\x6a\xb0\xbb\x28\xa2\xd8\x41\xfb\xf6\x04\x7a\x2d\xd7\x73\xc9\xdd\xad\x99\x03\x12\xf1\x7e\xd3\xcb\xd6\xb7\x19\xdd\x22\x2d\x59\xea\x8b\x76\x7e\xf7\x7a\x2f\xb7\xed\xcf\x6b\x9e\x1a\x26\xb0\x1e\x7d\x35\xfd\x75\x06\x4c\xd7\xc1\xdb\x27\x57\x77\x33\xd6\xcf\x70\x3f\xf4\x61\x3b\x00\x87\x9d\x22\x87\x1d\x20\x87\x8d\x11\xdc\x91\xa5\x8c\x39\xc6\xe9\x46\xbc\xbd\xf8\xcf\x78\x6d\x93\x75\xde\xf6\x3f\x9f\x43\xdf\x0e\x3e\x8f\x45\xff\xff\x3e\x83\xad\x07\x78\x25\x4b\x45\x54\xe8\x13\x7b\x67\xf2\xf4\xbb\x4f\xec\x9d\xd9\xce\x67\x09\x10\x52\x59\x30\xfd\x8f\x04\x08\xe1\x61\x01\x42\x80\x02\x84\xe0\x90\x00\x01\x56\x5b\x9f\xbb\x9b\x1b\x5c\xf8\xa0\x1b\xc6\x69\x2e\xe6\x13\x38\xa3\x3e\xee\x02\xe8\x4b\xf8\xd9\x22\x86\x85\x1c\xc4\xa2\x21\x62\x78\x9d\xb6\x2c\xfc\x9b\x82\xcf\x5f\x8d\xe4\xa9\x72\x6b\x32\x83\xae\xa4\x87\x8c\x25\x6a\xaf\x8d\xc3\x17\xe6\xb6\x41\x9b\xda\xcf\xd3\x26\x70\x6b\xc0\x35\xf3\xaa\xd8\x6f\x0d\x59\xef\xe3\x87\x86\x4d\x7e\xfd\xbd\x23\x03\xa7\x1b\x82\x90\x9f\xd2\x43\xe1\x61\x92\xde\xbb\x8a\x66\xea\x9c\xf5\x81\xe8\x2c\xdc\xce\x33\xfa\x2b\x9f\x1f\xf4\x1f\x0c\xd8\xe0\x01\xa6\x78\x77\x27\x15\x4d\xa1\xcb\x0f\xf7\xcd\x0a\x13\x23\xb4\x8d\x82\x29\x99\x26\x18\x8a\x83\x0c\xf4\x8a\x6e\x00\x99\xae\x04\x7d\xf0\x3c\x14\x7c\x97\x49\x31\x51\xde\x68\x46\xba\xaf\x3f\xc9\xf2\x4c\x27\xb8\x78\xa9\xbd\xe8\xc2\xa6\x49\xf0\x7a\x00\xf9\x20\xb7\x6a\x56\x6e\x0a\x03\x86\xc9\x10\xc8\x17\xf3\xa0\x08\x2e\x2e\x98\x52\xd0\x34\xc3\x5f\xa4\x2d\x7f\xa1\x1d\xa0\x05\xf6\x3a\x26\x1f\xfc\x60\x2d\xf2\x4d\x10\x0a\xf2\x99\x8e\xe6\xe8\xe2\x64\x18\x2e\xa7\xfb\x0e\x72\xd1\x9c\x70\x5c\x55\x50\x03\xaf\x3f\x21\xeb\x81\x73\x21\x8c\x4b\x31\xe5\x95\xb1\xc9\x34\x9a\x01\x42\xec\x16\xd7\x42\x24\x64\x26\x02\x84\x04\x30\x0c\x34\x24\x8c\x06\x50\x0d\x06\xb3\xc3\x48\x90\xe0\xc8\xe8\xc2\x4e\xe3\x54\x1c\xaa\x45\x34\x1d\xc9\x7f\x6b\x1c\x05\x79\xf9\x18\x79\x4a\x74\x9a\x17\x42\xcb\x48\x47\x62\x5b\x3c\x4f\x13\x52\xe6\x24\x66\xe0\xff\x03\x95\x4c\x3a\x17\x17\x14\x00\x27\xc2\x2c\x17\x17\x70\x86\x1b\x1f\x3a\x6e\xe2\xc2\x17\x63\x07\x7d\x71\x50\xac\x2f\xd0\xc2\x17\x7f\xf8\x07\xb9\xea\x7e\x9f\xd1\x46\xf1\xfb\xb7\xa8\x39\x8c\x80\x33\x52\xd7\xb3\xa8\x3b\xd3\xca\x6e\x11\xad\xc5\x48\x26\xf1\x0f\x34\x78\x9f\x2c\x74\x18\x26\xf8\x01\x3a\x3c\x06\x3b\xbf\xec\xd2\x2f\x9b\x97\x59\x80\x1d\xc0\x0f\xea\x91\x89\x20\x17\xf0\x8e\x3f\x8c\x36\x0b\xaa\xb3\x4a\x19\x34\xd3\x75\x23\xb9\x55\xd1\xd9\x1a\x6b\x34\xae\x8e\x2f\x1b\x64\x86\x50\xa1\xdd\x65\xc7\xc7\x99\xe6\x2a\x73\x4b\xb2\xdc\x80\x04\xa6\x3a\x75\x36\x2a\xe9\x18\xe8\xba\xd5\x9e\x37\x32\xb0\x52\x6f\xf5\xf2\xf0\x56\x6f\xec\x8b\x52\x6f\x72\xa6\x2b\xe0\x80\x64\x75\x0d\xea\x41\x2a\x75\x0e\x94\xc6\x5b\x64\xd5\xb6\xd1\x8e\xa7\xb5\x7e\x0c\x77\x3a\x46\x19\x3d\x58\x0e\x0e\xf3\x95\x0e\xba\x4e\x17\xe4\xa7\x72\x16\x17\xf0\x50\x4d\xef\xfe\xc4\xd5\xe4\x4e\x37\xe4\xb1\x05\x38\x60\x60\x4f\x5e\x09\x3f\x66\x83\x5b\x06\x94\xac\xb1\x65\xe3\xd6\xbc\x52\x30\x6c\x55\x7a\x50\xf1\xea\x40\x6b\xf7\x16\x40\x50\x50\x98\xfa\xb0\xbe\x4b\x26\x1c\xf7\x47\xf6\xd5\xd4\xf3\xc2\x99\xee\x7f\xcd\x41\x96\x18\x93\xd2\xda\x9b\x25\x91\xcc\x0f\xcf\x51\x8e\x6a\x61\xa5\x62\xad\xf5\x59\xd5\x60\xaa\xd5\x9c\x54\xab\x99\x55\xd0\xec\xff\x67\xee\xcf\xbb\xdb\xc6\x91\x87\x51\xf8\xef\xf7\xf9\x14\x1d\xfd\xa6\x3d\xa4\x04\x49\xd4\x6a\x9b\x0a\xac\x93\x49\xd2\xdb\xc4\xe9\x74\x9c\x5e\x15\x8d\x0f\x4d\x51\x12\xdb\x14\xa9\x70\xb1\xad\xd8\xfa\xee\x6f\x55\x01\x20\x41\x89\x72\x9c\xb9\xbf\xfb\x9c\x3b\xd3\xb1\x48\x10\x6b\x01\x28\x54\x15\x6a\x21\x1f\x9d\x1d\x22\x87\xc8\xd1\x32\xc2\x87\xd6\xe3\x9a\x7b\x2e\x51\x98\xa3\x1c\x24\x29\x5f\x34\x1c\x60\x1a\xf8\x62\xec\x52\x64\x17\x6a\xd4\x40\x58\xb9\xa6\x84\x8f\xa6\xb7\xae\x71\x7e\x4e\x9a\xc6\xd2\xe1\x15\xea\xa5\xd6\x4a\xf8\x41\x86\x53\x31\x72\xdf\x45\x25\x97\x55\x85\x52\x70\x6c\x8e\x63\x5b\x28\xdf\xd7\x98\x65\xd6\x74\xc3\xc7\xdf\xff\x37\x1a\xb3\xd8\xa1\xe6\xca\x8d\xfd\x54\x3e\xb8\xd3\xe8\xc7\x8b\x9f\x2f\xd2\xd8\x0f\x17\xfa\x3d\xf9\xf7\x8f\x6b\x30\x84\x25\xa5\xf6\xcc\xd0\x42\xc1\x86\x82\x77\x15\x72\xaf\xb6\x27\x7c\x99\xc9\xfb\xf4\xdf\x30\x46\x59\xa1\x0e\xc4\x7f\xcb\xaf\x8e\xe0\xa4\xda\x78\x4e\x4c\x16\x19\x87\x94\x0e\xc3\x76\xaf\x33\xe8\x0d\xbd\x21\xec\x09\x0f\xcd\x59\xa6\xb6\x3f\x4e\x27\x59\xfb\xb7\x60\xe2\x37\x3b\xd3\xe7\xf8\x3b\x6d\x67\x63\x78\xb1\xfd\xa9\x3d\xf9\x57\x20\x2c\x3c\x44\xe6\xed\x13\x54\x68\xff\x1d\xfd\xef\xe8\xd0\xa6\xa4\x51\x9a\xbf\x0a\x3d\xca\x7f\x47\x55\xca\xae\x87\xb4\x11\x9e\x29\x3f\x88\x47\x47\xcf\x94\x81\xa4\xc7\xa0\x83\x0d\xaf\x81\x6e\xf7\x94\xe6\xb3\x50\xf5\xe0\xb9\xaa\x2c\x22\xf4\x77\x3e\x39\x14\x56\x91\x30\xc7\x99\x11\xb1\x8e\x65\xda\xb5\x90\x54\x7a\x35\x6a\x12\x10\x21\x69\x29\xab\x49\x71\xe8\xe0\x72\x84\xf6\x07\xc9\x7d\x73\x10\x18\xdf\xa1\x17\x83\xf4\xac\x53\x65\xb5\x48\x7a\xee\x1e\xea\x2d\x28\xa3\x45\x72\x27\xc3\xa1\xbf\x29\x70\xd0\x39\xe7\x51\x61\xc5\xa8\x15\x15\x46\x8c\x79\x49\xa0\x8f\xf4\xa2\x5b\x5b\x6a\x00\xef\xea\x1f\x17\xc2\x29\x54\xe7\xcf\x01\x41\x6e\xfb\x73\x08\x78\x07\x20\x40\x9f\x80\x07\x57\x40\x3e\x3a\x9a\xdc\xd3\x03\xa9\x26\x14\x16\xa0\x04\x18\x5f\x00\xc6\x27\xc0\xe4\xb3\x82\x89\x34\x31\x28\x50\x82\xb9\xe9\x9c\xa1\xc1\x79\x7a\x50\x0f\xba\xd0\xc1\x78\x4c\xe5\x38\xfa\xb2\xca\x71\x69\x2b\xc3\xe9\xfc\x0a\x11\x81\x9e\xe3\x17\x3d\xc7\x4f\x17\x3f\xbf\x45\xa3\xed\x04\x15\x7c\x63\xa0\xaa\xa2\x30\xf1\x3e\x00\x3d\xa2\xeb\xa9\x39\x05\xb9\x9b\x01\xfb\x10\x7b\x50\xe5\x7b\x61\x9d\x5b\xb0\x8f\x09\xa0\x5f\x37\x7d\x1b\xcd\x3c\x03\x32\x5d\x45\xb3\x0d\xde\x70\x88\xcc\x44\xdc\xdc\xa5\x99\x13\x7c\x17\x3b\x8b\x15\x85\x49\xdd\x69\x8d\xaa\x77\xf8\x3d\x72\x2a\x48\x34\xd4\x7a\xad\x41\x6b\x50\xdb\x02\xc9\x00\x28\x5b\xdc\x63\xb1\xd8\xa9\xe2\x4e\x3c\x47\x9e\x22\xa8\xd8\x23\x03\xb0\xcc\x22\x97\xf6\x21\x59\x63\x39\x66\x1a\x6f\x60\x02\xb1\x63\xea\xc3\xeb\xc0\xc3\x1f\x61\xcb\x8d\xbd\x4e\x50\xe8\x4e\x7e\xa1\x3e\xc0\x2a\xd8\xba\x0e\x7a\xb0\xf7\x81\x66\xdc\x69\xb4\x32\xb6\x6a\x11\x9c\x22\x35\x47\x29\x06\x43\xf2\x50\x3e\x86\xf2\xf6\x5c\x4c\xbc\xc5\xbb\x11\x9c\x0d\x68\xe4\x16\x88\x2f\xf5\xb8\x3f\xcf\x0d\x35\x6f\x80\xd4\x64\xe7\x73\xb8\xcb\x7e\x1b\xb5\x57\x3f\xfe\x56\x33\x81\xd0\xd8\x04\x1e\x92\xa0\xef\xe2\x68\x0d\x18\x6a\x63\xd4\x22\xa0\x8c\xfd\x74\x03\x27\x0a\x43\x91\xad\x18\x48\xe4\x48\x32\x4e\xc2\x47\x0d\x7f\x1d\x47\x69\x84\xcb\x9e\xb9\x0e\x77\x1c\xac\xe9\x05\x9c\x36\xfe\x55\x86\x2e\x23\xf7\x92\xde\x5e\xb0\x44\xd6\xf0\xf2\xe2\xe2\x02\x1b\x7f\xe5\xb9\x81\x23\xe8\x0f\xad\xb6\xb9\xc3\x13\x47\xef\xd7\x68\xa7\xa6\x9d\xad\xea\x3a\x1a\x5b\x01\x29\x0d\xec\x3a\xdb\x6b\xbd\x54\x0a\xcf\x97\x60\xa7\x1c\xf3\x44\xc9\x72\xe3\x7b\xc5\xe6\xfb\xcd\xe1\x76\xda\xc2\xb1\xe4\x24\x2e\xd0\x25\x70\xf4\xa1\x37\x04\x58\x2f\x5e\xfe\x5e\xee\xb1\xda\x62\xa8\xc2\x0f\x1b\xfb\x2c\xc4\xed\x7d\xc6\xd1\xfa\xcb\x6a\x5b\x5b\x26\x7c\x07\x55\x61\xa4\x0a\x71\x9d\xf0\xc3\xc2\xf7\x14\xe2\x05\x22\x94\xc2\x3c\xbc\x49\x11\xee\xb9\x62\x12\xeb\xa1\xef\xc5\x33\xa0\xd1\xee\x81\x04\x95\xfe\x5c\xf4\xec\xbb\x79\x81\x50\x16\xf6\xea\xc2\x88\xe8\x60\xd5\x05\xdd\x8a\xa2\xc3\xcc\x7c\x6a\x33\x15\xe5\xb4\x26\x0b\xec\x26\xbc\x3f\xfc\x7f\x08\x30\xf1\x99\xf7\x7f\x1b\x30\x5a\x93\x25\xc0\x78\xbb\x31\xae\x77\x23\x24\x90\xa7\x97\x27\x43\x87\xfc\xc0\x94\xa1\xe3\xeb\xd0\xc9\x76\x3b\x4e\x05\x76\x73\x1b\xc5\x34\xb2\x98\xdc\x48\x40\x39\xb3\x0c\xac\xbd\x96\xb4\x41\xfb\x53\xf4\x3a\xf4\xe4\x56\x2b\x4a\x1e\xea\x81\x92\xf5\xb0\x6c\x4a\xe0\x4b\xb2\x55\x35\xec\x48\x1a\xaa\x45\x02\x10\x17\x55\x95\xb0\x93\x7d\x8a\x70\x0a\x81\x0c\x40\x6f\x62\x11\x41\x21\x6e\x70\x4f\xc4\xfa\xf9\x66\x2f\x8f\xd6\xe7\x68\x8a\xd7\x8c\x79\xfe\xfc\xd6\x98\xd6\xbd\xe7\x54\x63\x04\x9f\x02\x5c\xe4\x1d\x94\xf7\x24\xd1\x97\x3a\xe9\x20\xe0\x32\x12\x51\x84\x74\xfd\x30\xf6\xa1\x51\x1b\x98\xb0\x52\x3f\xb5\x6c\x5a\x47\x9d\x29\x89\x38\x8a\x22\xb2\xab\xee\xd8\x6f\xbb\x8a\xfb\x62\x9a\x96\x79\x25\x75\xa5\xd9\x60\x98\x75\xa0\xcd\x58\x5c\x32\xc7\x46\x07\x4f\x00\x41\x0c\x25\x8e\x6e\xac\x9a\x85\xcb\xb5\x31\xfa\x0e\x32\xf0\x02\xb6\x99\x09\xd1\x2b\xc2\x67\xe6\x57\x42\xc8\xcf\xcd\x31\x15\x88\xdc\x27\xcc\x21\x39\xcf\xcc\xd0\x30\xc8\x40\x55\x04\x9c\x15\x65\x0b\x59\x9e\x48\x2d\xa3\x06\x20\x54\xc4\x30\xcb\x85\x72\xbd\x78\xe5\x0e\x48\xd3\xc1\x8f\x72\x5d\xf7\xd6\xc0\xd4\xe1\x07\x03\x80\x51\xed\x11\xf8\x72\xe6\xcb\xf3\x6e\xc1\xc0\x2c\xba\x07\x65\x89\x70\x1d\xfa\xd8\x00\x03\x7d\xfe\x03\x1a\x20\x3a\x21\x6b\x3a\xcc\x41\xb7\x2e\x8d\x46\xc2\x5c\x78\xa8\x1b\x1e\xda\x46\x94\x86\x1c\x54\xae\x89\x60\xca\x02\xf3\x4b\xd5\x28\x69\x0b\x50\xfd\x6e\xdb\x48\x60\xe2\xf5\xd1\xce\xbc\x1b\x9f\xa8\x01\xbe\x23\xad\x24\xbf\xea\x0a\x16\xd5\xd2\xdc\xfc\xc6\x69\xac\x89\x55\x51\x1f\x98\xc4\x3a\x4b\x87\xfb\x68\x60\x9f\xf3\x8e\x6f\xbc\x79\xca\x97\xa8\xa5\x3f\x27\xa1\x91\x48\x2d\x78\xcb\xf7\xfe\x62\x49\x19\x62\x7c\x28\x72\x44\x71\x15\x19\xe9\x13\xa8\xd5\x5c\x8c\x35\x85\xe2\x58\xb3\x98\x97\x7c\x1c\xf2\x1d\x02\xe5\x2c\xb3\xf9\x7c\x67\x6f\x20\x85\x01\x00\xdc\x9b\x35\x32\xa2\xd1\x74\x41\xba\xe4\x81\x27\xe5\x96\x59\xe8\x42\x48\x7f\x6f\x18\xeb\x18\xaf\x23\x4b\xde\x56\xeb\x7e\xb3\xf9\x60\x91\x0a\x89\xdf\x48\xf1\xae\x14\x7f\xf0\x18\x13\x6f\xf8\xc3\xe3\xe2\xda\x0e\xfb\x07\xf4\xcf\x6a\x9f\xdc\x2a\x3c\x26\x6a\xfa\x4f\x05\x11\x8b\x78\x0e\x89\xd8\x58\x84\x35\xc1\x08\x26\xd3\x32\x26\x5b\x3b\x7e\x9c\x54\xd3\xc5\xd2\xf3\x94\x76\xf7\x5c\x5c\x3b\xe7\x2d\x58\x67\x31\x10\x4a\x78\xc7\x78\xe6\x49\x8f\x8c\x93\x94\xdc\xe8\x84\x93\x46\x43\x6b\xce\xa7\xe6\x3e\xfb\x6b\x7d\x39\x51\xe8\xac\x78\x1f\xc0\x52\x5c\x35\x29\x14\x9d\x42\x72\x52\xcf\xa5\x23\xc7\xbc\x00\xea\x4d\xec\x50\xed\x8d\x46\xf8\x3c\x1d\xe9\xaa\x0b\x82\x14\xf1\x26\xe1\x54\xcb\x49\x0a\xb5\x19\x9a\xe1\xf8\xe8\xd0\x27\xaf\x11\x5e\xd0\x47\x6c\xe9\x34\x27\x41\xcc\x3a\x4a\x2a\xef\x76\xc4\xa8\x0a\xbf\x13\x72\x3d\x5d\x7b\x9b\x32\x5c\x95\x7f\xe6\xc2\x79\xb2\x08\x01\x95\x2a\x6b\x4e\x8d\x8f\xa6\x0d\x16\x64\xde\x57\xd5\x10\xea\xe1\xa0\x44\x25\x30\xa0\xd8\xff\xba\x5a\xee\xa1\xe3\xb6\xc7\xa8\x79\x1b\xab\xdc\xee\xd4\x49\x1e\x5c\x0f\xad\x18\xa2\xfc\x34\xdd\x18\x22\x73\x2c\x22\x0d\xb2\x91\x19\x35\x88\x14\xd1\xed\xa1\xf4\xc9\x8b\xcc\x51\xb3\x99\x91\x33\x33\xfc\x24\xe8\x3a\x98\xf4\xdc\x4c\xb4\xd9\x4c\x85\xd3\xdd\x49\xb3\x89\xc1\x9a\x4a\x5c\x19\xa1\x96\x85\xb4\x25\x77\xae\x92\x91\xb2\x78\xdd\xdb\xd2\xb0\xea\x2a\xcd\xe2\xd0\xc3\xea\x81\x40\x2c\x80\x53\x71\x77\x33\xb2\xc7\x69\xe3\x6d\x75\xa7\x6d\x99\xe9\x32\x8e\x6e\x89\x39\x7f\x1d\xc7\xd0\xe3\x9a\x1f\xce\x49\x44\xf7\x8d\x30\x28\x55\x06\xee\xd2\x2b\x93\x83\x8e\x2b\x3c\xf4\x83\x20\xcf\xbc\xb0\x8e\x4e\x13\xf1\x8f\x87\x7f\xac\x33\xa1\x71\x33\xc2\xa1\x37\xbc\x3a\x10\x26\xe6\x59\x9a\x6b\x98\xc6\xed\xd2\x69\xa7\x65\x7a\xbe\x93\x49\x49\x6b\x25\x8d\xbe\xae\x3c\xf0\x85\x4d\x2e\xf6\x02\xe6\x3f\x49\x11\x99\x47\xf3\x6f\x02\xb3\x42\xa2\x4d\xa5\x88\x3b\x15\x16\x1b\xb2\x1b\x50\x96\x26\xae\xe5\x27\x32\xa0\xa3\xf4\x2d\xf8\x74\xf2\x5f\xa7\xb3\x45\x03\x19\x51\xd7\xe5\x33\x4e\xfb\x9c\x9f\x71\x72\x75\x64\x84\xc4\xf3\xcc\xe4\x86\x49\x86\x56\xa3\xfc\x91\xf0\x47\xb5\xb3\x4c\xd6\x0e\xaf\x5d\x5e\x12\x97\x7b\x79\x59\x83\xc5\xce\x6b\x1f\xef\x2c\xab\x36\x72\x8d\x80\xdd\x2f\x9d\xc4\x5e\x32\xf4\x2b\x5c\xb5\xdd\xe9\xaa\x6c\x92\x18\x68\x64\xc7\x92\x52\x26\xdd\x1f\x8d\x96\x8d\xa3\xf5\x39\x45\x74\xb6\x17\x0c\xf1\x82\xbd\x16\xfb\x2b\xb1\xf7\x8e\x56\x6d\x5f\xa6\x14\xf3\x8d\xea\x31\xa5\x8a\x92\xac\x35\xd5\x3c\xa5\x6c\x99\xdc\xe4\x5f\x5b\x17\x6d\x74\xb2\xc1\x12\x7b\x3d\xaf\x7b\xab\x57\x9e\xf8\x9f\x3d\xfb\x86\x79\xab\x75\xba\xb1\x67\x4c\x2e\x0d\xbb\x72\xfb\x97\xda\x28\xd8\x72\x61\xe7\x95\xf7\x7c\xbb\x25\x2f\xbc\xa1\x97\x94\xa4\x66\x85\x94\x4a\x6a\xad\xd1\x36\x3d\x2b\x9c\x5f\xab\x63\x6b\x2c\xef\x55\x32\x74\x27\xe2\x8d\x73\x6a\xcd\x8e\x46\x85\x55\x85\x0c\xce\x88\xab\x70\x5d\xf8\x62\xbf\xe1\xfe\xc4\x69\x34\x50\x35\x45\xac\xfe\x46\x63\xf1\x7c\x3d\x32\x8d\x25\x9f\xd1\x85\xbb\xcb\x6f\xd0\x7d\xc6\x64\x81\x3a\x52\xe3\xa5\x00\x54\x82\xba\x1d\xb8\x96\x5c\x36\x49\x34\x0c\x3b\x86\xac\xa8\x74\x37\xe7\xe5\xab\x9f\x44\x99\xe9\x23\xc5\x41\xd6\x1e\xa6\x0d\x59\xef\xb7\xfb\x39\xe9\x58\x96\xd9\x00\x2c\xb3\x62\xeb\x99\x4c\xbb\x70\x17\xc6\x6a\xe4\x75\x64\x1f\x20\xa1\x40\x32\x42\x2d\x2c\x9a\x78\x30\xbe\x42\xc5\xb3\x62\x2b\x67\xb0\x46\xb5\x15\x10\xaa\xa5\x88\x5b\x0f\x2f\x3f\x51\x56\x05\x30\x26\xa8\x56\x2e\xed\x0c\x58\x05\x32\x69\xc0\xbf\x38\x38\x61\x91\x28\x70\x3f\x8c\x52\x6a\x8a\x15\xf7\x33\x59\x19\x07\x95\xbc\x4e\x52\x8c\x1a\x0b\x05\x7e\xfb\x87\x95\xe6\xbc\x00\xc9\x35\x42\x65\x70\xc4\xa0\xcb\x43\x2a\x00\xcd\x57\xd2\x7f\xb9\x2f\xf5\x0c\x73\xe1\x40\xfe\xbd\x7b\x18\x2b\xfa\x7f\xe2\x17\x16\x90\x68\xc6\xa8\x0a\xfc\xb6\x7f\xfa\x2a\x0c\xa2\xb2\xc5\x51\x10\x64\x95\x4e\xd0\x62\x99\x45\xd0\x95\x5e\x5a\x71\xfc\xe2\xf2\x5b\x11\xf2\x35\x0b\x12\x4e\xa7\xb6\x88\x9e\x42\x8f\xde\x69\xcb\x99\xcd\xf6\xce\x76\xd7\x58\x29\x3c\x05\x9f\x1f\xc7\x53\x18\x56\x11\x90\x10\x06\x71\xd5\xf0\x90\x9c\xf5\xf5\xff\xd6\x0e\x57\xfb\xfa\xca\x5b\x3a\x37\x7e\x44\xd1\x2e\x73\xb7\x67\x87\xa8\x56\x18\x30\x52\x95\xbb\xc7\x82\xd2\xeb\x85\x51\x6b\x84\x59\x3c\x9d\xf2\x73\x3a\xc3\x4b\x81\x2f\x25\x53\x31\x73\xf8\xa4\x76\xeb\x5d\x5d\xfb\x18\x2b\x60\x95\xe0\x9f\xe8\x33\xfc\x3d\xa7\xbf\x11\xfc\xfb\xb9\x36\x45\xa2\x60\xe6\x27\x6b\x94\xa5\x96\xb0\x4f\x4e\x66\xe2\xcc\x5c\x32\xe9\xb4\xbd\xa2\x63\xa4\x5b\x09\x4c\x77\xde\xad\x14\xba\x75\x5b\xdc\xda\x21\xd2\xbc\x2c\x04\xa8\xad\xa8\x52\x50\x80\x3a\x10\xd2\xac\xb3\xd6\xaa\x99\x64\xb4\x30\x12\xfb\xdb\x22\xb7\xed\xca\xe2\x83\xee\x83\x0a\xbf\x8c\x18\x10\x04\x0d\x37\x0e\xdc\x52\xa1\xfb\x1d\xa1\x04\xd2\x22\xef\x1c\xb6\xfe\x26\x5d\x9d\x75\x2b\x05\x4d\x52\xe4\x83\x51\x3e\x48\xf3\x5c\xcd\xb4\x49\xd3\x0d\x2b\xed\xe7\xdb\x30\x17\x4d\xa3\xd3\xee\x52\xcd\xa5\x00\xe3\xf8\x65\x2b\xc8\xcf\x1b\xd2\x84\x40\xa5\x00\x5a\x0a\x9f\xb2\xa8\x5a\x3f\x0a\x2f\x11\xd6\x81\x03\x03\x5c\x39\xac\xf6\xf1\xe3\x3f\x8e\x6a\xa6\x98\xd6\x95\xc3\xdb\x93\x8f\x1f\x3f\xfe\xe7\xe3\x3f\x3e\xd6\x3f\x36\x3e\x8e\x3f\x3e\x7c\x9c\x7c\x9c\x7e\x34\x3e\x9a\x1f\x5b\x1f\xef\x3f\x6e\xa7\xed\x05\xdb\x38\xb0\xda\x5a\xf9\x81\x3e\x2e\x03\x3c\x2c\xbe\xc0\x49\x6c\x1f\x58\x8a\x22\xc0\x6a\xa8\x02\x3d\x6e\xd9\xb9\x53\x2d\x28\x4e\x5b\x9f\x32\x2f\xde\x5c\xd0\x35\x09\x82\x0a\x70\xd1\xdd\xd3\xf2\xbe\x90\x97\x1b\x57\xbb\xd9\xd5\x9a\x58\xe1\xba\xf4\x92\x87\x87\x70\x82\x6e\x75\x6b\xf2\x5d\x95\x87\x6d\x2c\x81\x6c\xec\x55\x91\x2b\xb1\x4b\xfa\x08\xc9\x34\xf1\x33\xaa\xd0\xa8\xb9\xf0\x3f\x7f\x0e\x50\x74\x79\x68\x94\x22\x83\xf0\x2d\x88\x61\x82\x48\x35\x11\xc7\x29\x3e\xe0\x10\xc4\x53\x6b\xa7\x8f\xa6\x40\x7a\xf8\xb2\x23\x3b\x28\xf8\x25\xf1\xb9\xe2\x16\x47\x4e\xfa\xa5\xc3\xf5\x4a\x8a\xdd\x84\x87\xca\xa5\xfa\xb2\x8f\x56\x35\x55\xe5\x51\xc8\xdf\xea\xa6\x09\xd2\xe3\x8c\x88\xf6\x5f\x72\x3a\x73\xaf\x8c\x05\x50\x57\x93\x29\xcf\xc7\x78\x93\x44\x42\x4c\x5c\xe6\x40\x40\x6a\xc9\x05\x99\x81\x75\x06\xba\x17\x1b\xf7\x79\x20\x22\xd4\xa2\x94\x6a\x6c\x28\xd6\x8e\x87\x8a\x64\xc9\x0a\xf5\x08\x97\xac\x18\x60\x0e\x6a\x2a\x09\xd8\x87\x6f\xc8\xb9\x6f\x9e\x89\x17\xf9\xd1\x79\x82\x3c\xd8\x70\xb3\x29\x71\xf3\x0b\xc3\x87\x05\x95\xc3\x04\x56\x58\x35\x58\x04\x48\x5e\xea\x20\x91\x34\x7a\x19\x24\x44\x6a\x17\x40\xa3\xe1\x67\xd3\x5c\x90\xb9\x63\x7f\x23\xb5\xb8\x49\x4a\xaa\xa0\x18\x3b\x86\x1c\x2e\x45\x3a\x50\xc3\x75\x50\x60\xbe\x03\xdf\x82\xe7\x7d\x81\xda\x30\x34\xf7\xb7\xb0\x97\x93\x9b\x85\x5d\x5b\xa6\xe9\xda\x6e\xb7\x6f\x6f\x6f\x5b\xb7\xbd\x56\x14\x2f\xda\x5d\xcb\xb2\xda\xf0\xad\xc6\xee\x96\xe9\x2a\xa8\xca\xd2\x39\x3d\x3d\x6d\xd3\x57\xc8\x84\x11\x61\x0e\x67\xc2\xaf\x90\xa9\xba\x9e\x3f\xce\xdf\x60\xb6\x93\x76\xae\xa2\x46\x59\xc3\xe4\x60\xbf\xe8\x6b\xbb\xb6\xc5\x13\x26\x04\x6a\x6f\x4d\x5e\x21\xed\x5b\x87\x7d\xca\x9c\xc0\x9f\x6f\xec\x0a\x2a\xa0\x38\x04\x6c\x8a\xb0\x55\x78\xb2\x16\xe7\x80\xa7\x21\xfe\x54\x3f\x07\xf0\xf2\xdc\x64\xb7\xce\x2e\x66\xf6\xcc\xf1\x3d\x75\x17\x1a\x46\xfd\x99\x20\x82\x99\xb0\xc3\x2d\xfc\x47\xab\x04\x35\x50\x76\x36\x7c\x15\x37\xdc\xa5\xe4\x5a\x42\xaa\x23\xda\x7d\x7a\xee\xac\x17\xd7\x0c\x5e\xb1\x16\x17\xc7\x24\x15\x0c\x93\x96\x1c\x2d\x92\x5f\x40\xcb\x60\xf3\x63\x0f\x69\x6b\xed\xf2\x0f\xcd\x19\xb1\x8f\x2a\x03\x90\xf1\xa5\x1c\x74\xcb\x8d\x6a\x06\x52\x30\x81\x8d\x79\x48\xc5\x7e\x46\x5f\x5a\xc8\x43\x94\xcf\x1a\x9d\xe2\x91\xf9\x84\xe5\x21\x8e\xd8\x0d\x9c\x24\xf1\x76\x29\x90\xff\x87\x83\x86\xfd\x64\x84\xfc\x03\x32\xbc\x8a\xb7\xc8\x24\x4f\x8f\xfe\x2d\xa8\xcd\x37\x7e\x92\x6a\xd7\x5b\x31\x5d\xab\x3c\x43\x2d\xce\x30\x75\x80\xe3\x36\x88\xcf\x95\x27\xf9\xb3\x4e\xc1\xc3\x62\x0d\x25\x70\xd4\xa8\xbe\x9a\xa9\xd7\xf3\x46\x14\x6f\xa5\xc0\x46\x21\xf5\xa5\xaa\x91\x80\x79\x66\x55\x43\xf0\xfd\x13\x21\xf8\x5e\x83\x20\x5d\x4d\xeb\xf0\xd3\x54\x39\xf7\x08\x24\xe8\x5b\xef\x2c\x2b\x41\xf2\x99\x06\xc9\xae\xf0\x5e\x8e\x14\x29\xe1\xa1\x78\xb7\x83\xef\x90\x9a\x40\x63\x2e\x6f\xa7\x8b\x48\xb9\x9c\xe5\x7a\x8f\x15\x0b\x10\x6d\x00\x10\x6e\x2f\xa3\xd5\x1a\xa0\x36\xa3\x4b\x6d\xf4\x1e\x86\xe8\x12\x3f\xa8\x4d\x42\xb4\x3d\xae\x31\x24\xba\xf6\x87\xfe\x4e\x8e\x50\x0c\x7e\x5d\x75\xf3\xfc\x95\xeb\x47\x6f\x42\xf4\x19\x25\x8c\x95\xf3\xf3\xeb\x13\xe7\xe7\x57\x6d\x7e\x50\x23\xe3\x49\xca\xde\x45\xf1\x4a\xdd\xf3\xa7\xaa\x6a\x8f\xf6\x75\x5d\x05\xe5\x38\xae\xd5\x6c\x20\xb0\x94\x5a\xce\x63\xda\xb1\x00\x78\xfb\x71\xed\x59\x41\xbb\x4a\x78\xe9\xdf\x68\xcc\x88\xe1\xff\xef\x8f\x99\x5c\x85\xfc\xf0\xe1\xfc\xcd\x13\x47\x5c\xe4\xaf\x1a\xaf\x56\xdb\xce\x68\xf3\x2f\x02\x67\xaf\xd7\x5e\xb5\x93\xee\x90\xff\x8d\x78\x56\xc4\x4e\x15\x34\x55\x05\xbd\x85\x5f\x45\x1d\x2f\x51\x47\xc6\x38\x30\x44\x64\xfd\xb1\x39\x40\x4d\x65\xc7\xe5\xba\x92\x84\x6c\x10\x68\xab\xf4\x49\xed\x8a\xca\xfe\xe5\xc1\x62\xf7\x0e\x35\x8c\xfa\xea\x55\xe9\x82\xe8\x54\xdd\x12\x8c\x6b\x15\x3d\x99\xcf\xf0\x77\x22\x27\x12\x1c\x87\x75\xf0\x0a\x6d\x46\x11\x61\xa8\x90\x56\xcf\x73\x2f\x4b\x7a\x40\xa3\x08\x4d\x9c\x16\x9a\x94\x7a\x8e\xf6\x42\xa5\xd7\x9b\xb2\x0c\x1b\x0f\x01\xd1\xc4\x8c\xad\x84\xa0\x89\x6d\xca\x59\x84\x78\x9b\xec\xd5\x62\xbc\xbf\x5b\x91\xe3\xc3\x99\xba\x32\xcf\x84\x3d\xab\x46\x2c\x02\x3a\x1a\xdf\xa0\xba\x76\x66\xaf\x48\xbc\x34\x43\xc9\xe7\x06\x53\x66\xe5\xda\xe6\x44\x80\xae\x48\x9c\x95\x57\xe8\xd1\xfd\x47\x4c\x9e\x9f\xcd\x71\xf6\x8c\xf3\x67\x48\x5e\x2c\xa8\x46\xad\x1d\xee\x9b\xf6\x1a\x13\x7f\x40\x1d\x43\xd5\xd2\x33\xab\xaa\xc7\xd8\x00\x76\xc0\x54\xb5\x51\xff\x42\x0a\x84\x97\x6b\x14\xe4\x45\xd0\x71\x89\xb4\xd2\x15\x3d\xc9\xc6\x86\xde\x2e\x13\x7d\xd1\x9a\x17\x71\xec\xe6\x67\x64\x06\x6b\xca\x64\x2c\x6a\xaa\xd8\xfc\xe2\x4b\xde\xec\x76\xdd\xca\xd6\x33\xb4\xc0\x59\xb0\xb5\x4e\x66\x2e\xf4\x97\x1b\xfd\x25\xd4\x5e\x94\xf1\xec\x3a\x37\x89\x5e\x98\x4c\xba\x55\xb9\x11\x7a\x6d\x9a\xea\x86\x4e\x35\x57\xba\xc0\xa4\xe1\x87\xfa\xb4\xe7\xec\x84\x35\xcd\x3d\xdb\x2a\xa5\x09\xe2\x19\x84\x92\x06\xde\x90\xe8\x74\x7f\x21\x57\x10\xea\xfb\x7f\x19\xc8\xa7\xb8\xfc\x05\xfd\x26\xe2\x17\xfb\x50\x85\xe0\x4c\x5d\x33\xc3\x53\x1d\xf0\xa7\x4c\x92\xe8\x18\x1f\xab\x00\x41\xb1\xde\xfc\x9d\x5b\xe6\xfd\xf2\x79\xbf\x5c\x14\xdc\x79\x71\xc5\xce\x74\xb6\x0c\xbd\xa9\xfb\x55\xda\x91\x09\x7c\x53\xbb\xb5\xa4\xec\xf1\x05\x54\xbe\xce\xd5\xe3\x72\xae\x09\x15\x3c\x0f\x7d\x13\x18\x41\x78\xb1\x3b\xc4\x2f\x22\x6b\x54\xe1\xaf\x58\x98\x79\xfc\x8c\x34\x9e\x16\xac\xd5\xda\x99\xfb\xe8\xcc\x1f\xf9\x18\xe2\x2b\x3b\xcc\x45\x7a\x0a\x6a\x95\x5c\xa4\xd0\x15\xf0\x0a\xfd\x7b\x67\xe4\x40\x85\x18\xba\x4f\xb0\x56\xda\x54\x69\xdc\x94\x8f\x32\x98\xdc\x90\x20\x67\xa3\x32\x31\xe2\x28\x9e\x95\xa7\x64\xf7\x1e\xb5\xc4\xf4\x95\x2e\x4c\x91\x59\x54\x96\x44\x59\xce\xdc\x12\xab\x18\x63\xd4\x14\x75\x45\x87\x2a\x07\x42\xef\xca\xf0\x8f\x8e\x7c\xc0\x02\x5e\x0b\xc3\x65\x5d\xf8\x57\xc0\x5a\x2d\xd0\xc7\xa3\xb6\xb2\x4a\x07\x81\x87\x01\xc3\x7c\x8d\xfd\x23\x22\x87\x68\xcd\x68\x27\x66\x46\xc8\x7f\x3c\x70\x22\xcf\xcb\xf1\x15\xcb\x23\x22\x29\x1d\x8d\x22\x9d\x0a\x51\x76\x58\x6a\x4c\x00\xc8\x10\xc0\xc2\xc3\xa3\x6a\x05\xfe\x29\xa5\x9b\x9a\xe0\x1a\x29\x5f\x25\xf9\xc4\xc0\x7c\xb9\xc9\x14\xde\x42\x49\x86\xc3\xa9\xe2\xc1\x91\x2d\xae\xd0\x8f\x50\x63\x23\xab\x78\xb2\xc4\x12\xc7\xaa\xe8\x17\x8a\x64\xf7\xf7\xce\x33\x8d\x54\xa0\x7c\xf8\x58\x3d\xd7\xd6\xce\x54\xa7\x67\xe1\x28\xd4\x9c\x95\x7b\xf9\x4c\x8b\x50\x39\xf9\x2a\xcc\x00\xb9\xc6\xb8\xac\xc5\xaa\xf7\xa4\x11\x91\x6f\xe6\xb7\xf9\x9a\x35\x93\x98\x39\xff\xf3\x9e\x4f\xf7\xb0\x08\x6c\xb9\x0b\x4b\xf3\x1e\x96\xdd\x16\xc3\xe7\x10\xd7\x7f\x41\xbe\x13\x4a\x42\x1f\x81\x55\xfe\x62\xfb\x89\x9a\x3c\xe8\xc2\x61\x17\x39\x85\x94\xd3\x4a\x98\x26\x80\xa7\xa0\x88\x29\x04\x26\x09\x2e\x7c\xa7\x89\x92\x13\x86\xef\x34\x02\x39\x12\x7a\xdf\x97\x32\xed\x19\xc5\x2b\x75\x26\x92\x8e\x94\x97\x20\x09\x48\xee\x81\x51\xcc\x04\x90\x61\x2f\xcb\xf3\x29\xf7\x43\xb1\x8f\x2b\xb2\x2a\x0c\x21\xb5\x88\xb4\xb8\x70\x01\x3a\x89\x37\x7c\xf4\xd8\xaa\xc9\x99\x62\x78\xe3\x85\xb0\x49\x3f\xdb\xfc\x62\xa9\xa2\x7b\x09\x53\x93\xcc\xf0\xe2\xdb\x21\x11\x13\xda\x36\x5c\x3c\x4e\x19\x1e\xb8\x37\xff\x8d\xa6\x1d\xda\xcb\x09\xcb\xb2\xbe\xae\xd4\xbd\xd9\x81\xb4\x92\x88\x2a\x43\x98\x5d\x96\x2a\x45\x3b\xe4\xc9\xb9\x03\x7b\x30\x43\x5f\x19\x5e\x09\x84\xfb\x52\x45\x34\xfe\x43\x8f\x29\xa5\x7c\xd8\x8c\xc9\xe0\xf4\xf4\xa6\x7a\x2f\x2a\x25\x68\x87\x3a\x12\x8e\x85\xc0\xeb\x0e\x8d\x21\x33\x67\x57\xbe\x55\xd9\x95\x94\x02\x82\xea\x1d\x41\x60\x63\x47\xf0\x72\x94\x90\x77\xb8\xa7\xb2\x20\xae\xf8\xaa\xb9\xed\xf8\x11\x6e\x3b\xa6\x59\x78\xd6\x91\x0e\x55\x76\xd9\xcd\x3f\xf0\x9a\x12\xe5\x44\x69\x15\xb7\xad\xac\xc6\xe4\xb1\xaf\x78\x57\x38\x5d\xe1\x9c\x6c\x84\x22\x66\xfc\xe5\xc8\x83\xfa\xf7\x39\xd4\x3f\x64\xd7\xa5\x58\xef\x9a\x44\xba\x68\x29\x73\xbf\x8a\xb2\xc4\xa3\x8d\x6c\xd7\xe8\x19\xe8\xfa\xb8\xc6\xe8\x31\xf0\x9c\x1b\x4f\x25\x67\x69\x6d\x6b\x8e\x32\xe7\xe8\xe8\xda\xa9\xb8\xc9\x34\xef\x6b\xd4\x0f\x1c\x94\xcc\x24\x98\x04\xe4\xed\x85\xea\xc5\x6b\x87\xbd\x80\xf3\x15\x11\x0b\x55\x59\x85\xe5\x7f\x82\x8e\x5e\x1b\xaa\x9f\x6f\xa5\x8c\x38\x74\x6e\xfc\x85\x93\x46\x00\xc0\xf6\xef\xde\xd5\xbf\xfd\xb4\x2d\x65\x2d\xa5\xaf\x2d\xa8\x34\x7e\xb1\xc0\x99\x45\xed\x71\x6a\x29\x8d\xb2\xd2\x79\xf2\x25\xa5\x13\x38\x48\x38\x74\x00\x83\x62\x87\x0b\x6f\xf6\x01\x8b\x7b\xc8\x16\x95\x74\x98\x2c\x8a\xe6\xa8\xe6\xfd\x2c\x43\x61\x10\x4a\x82\x70\x72\x48\x12\xe4\xcf\xa0\x6a\x7f\xee\x03\xd2\x84\xa3\xd8\xd4\x46\x17\x8b\xf5\xad\x6e\xe6\x5a\xb3\xd8\x59\x1c\xb8\x7a\x97\xac\x29\x24\x8b\x39\x98\x45\xb7\x21\xe5\xaf\xc1\x91\x4d\xc9\x34\x3a\x61\x16\x29\xd2\x23\xdd\x03\xab\xb4\x50\x45\xb7\x3a\x15\xb6\xce\x79\x3e\x47\x1d\x10\x24\x9a\x4e\x8d\x25\xbb\x81\xf5\x47\x04\x17\xba\x32\x69\x9e\x8b\xb8\x74\xe8\x0b\x06\x9e\x3b\x53\xb6\x7e\xe0\xe1\x83\xc7\xce\x79\xcc\x16\xc6\x3d\xae\x70\xbb\x26\x9a\xbf\xb3\xc9\x97\x4c\x80\x25\x36\x36\x79\x8f\x09\xb0\x04\x06\xe3\xc3\xd0\x77\x5e\xc9\x9c\x17\x5d\x5b\x88\xe6\xa0\xb1\x15\x0e\xc8\x6f\xcc\xa4\x88\x08\x5e\x22\xf5\xc2\x36\xc6\x1a\xe8\x2b\x79\x85\x25\xe3\xfb\x03\x5c\x91\x17\xd4\xdb\x87\xc3\xa6\xb6\x95\x71\x1d\x30\x4c\xad\x38\xe4\xf8\x4e\x41\xe0\x27\x13\x1d\x1b\x2f\x80\xac\x8a\xe6\x46\x89\x09\x16\xf1\x60\x43\xf2\x1c\x51\x13\xa0\x6d\xc8\x2b\xb9\x1b\x14\x33\xd4\x9a\xb5\xc6\x0d\xf0\x64\xc5\xcd\x88\xe1\x01\xf3\x69\xaa\x31\x38\xf9\x00\x5c\xe8\x3d\xff\x1d\x19\xd3\x73\x05\x5a\x60\xb6\x02\x38\x3f\x04\xb1\x51\x6a\x36\xe0\x93\xa0\x75\x27\x00\x1e\xb4\x36\x04\xed\xa9\x69\x43\xb2\xc5\x20\xa9\x34\x58\x9a\x75\xb4\x37\x14\xcc\x10\x7f\x8d\x57\x54\x62\x16\xb4\xef\x2c\x07\x8c\xa9\x2c\x82\x81\x80\x30\xae\x98\xda\x84\x18\x01\x8b\x1e\x70\xaf\xd6\xe4\x73\xb6\xae\x91\x9f\x63\xe3\x7b\xa6\xb6\x10\xdb\x30\xb1\xda\x64\x3e\x7a\xa6\x7a\x0b\xf2\x29\x8a\xfd\xc5\x53\x0d\xf8\x32\x4e\x71\x19\x32\xed\x5e\x1a\x37\x07\x43\x2c\x22\x76\x88\x68\x61\xd7\xfa\xec\xf1\x13\x0e\x77\x6e\x9a\x6f\xd9\x71\x8c\xee\x6e\xf6\xc2\x96\x0b\x5a\xeb\x27\x11\x6e\x2a\xbf\xa9\xd3\x76\x6c\xaa\xbd\x30\x58\xb2\xf6\x64\x2a\xf0\xd1\x4b\x07\xa3\x9e\x0c\xd9\x67\x87\xbf\x74\xea\x2f\x1d\xf6\x49\x6a\xb8\xbd\xfb\x91\xbd\x71\x78\xb7\xfe\xc9\x61\x1f\x1c\xfe\xc6\x69\xc2\xb7\xf7\x0e\xff\x84\x91\x02\x5e\xd1\x6f\xe7\xc4\x62\xef\xa0\xf8\x89\xd5\x86\x4c\xbf\xca\x72\x17\xbf\xbc\xff\xd0\x65\x7f\x43\x51\xf6\x9d\xc3\xfb\x88\xb0\x34\xe7\x15\x7f\x45\xd1\xae\xe6\xbd\xbe\xb9\x73\x29\x59\x9d\x42\xca\xae\xd4\xc8\x80\xbe\xbe\x21\x63\xf3\xb6\xf1\xb7\x53\x5f\x9a\x75\xc3\xab\x67\xa9\xf1\xab\x53\x4f\x61\xd1\x36\x3d\xfc\xac\x06\x3e\x89\x1b\x51\x3d\x60\x19\xfc\x4d\x98\x5f\xf7\xda\x71\x9e\x51\x99\x71\x42\x96\x90\xb2\x84\x94\x85\xfa\xed\xdd\xad\x29\x9b\x74\x6d\x9e\xbb\x5f\x0b\x95\xbb\xbd\xae\xe6\xe7\x2f\x15\xbe\xf9\xd0\xf5\x13\xac\xf0\xa8\x19\xa3\xbf\x8c\x66\x06\x3b\x33\xa8\x07\x8d\xa4\x9e\x28\x09\x0f\x69\x26\x93\x80\xc7\x70\xeb\x6e\x13\x5d\xdf\x7e\xe7\xd4\xe7\x14\xbb\xd6\xaf\xd3\x58\xd0\xab\xad\xfc\xd6\xcc\xbf\xb9\xf2\xdb\x0d\xcf\x23\x41\x15\xf5\x2d\xea\x8b\x46\xc7\x6c\x2e\x70\x2b\x57\x7c\x5e\xd7\xd7\xf8\x79\x8d\x9b\x79\xd6\xbc\xc1\x08\xc9\xab\x87\x87\x3c\xa3\xdb\x06\xe6\xbb\xfd\xab\x53\xac\x13\x65\x16\x0e\x2b\xa1\x57\xdf\x30\xaf\x8c\xcd\x3f\x97\xa6\xac\x84\xcd\x29\xf4\x31\x24\x7e\x62\x73\xc2\x0e\x3f\x3b\x8d\x1a\xe5\xaf\xb1\x85\xc0\xe6\xb3\xab\xc0\x0d\x7c\xf7\x5a\xa6\xae\x29\xf5\x3d\x5b\x96\x71\x7a\xee\xec\x83\x1c\x47\x36\xaf\x5b\x77\x66\xfb\xba\x75\xcd\x44\x60\xf6\xeb\xd6\x86\x5e\x4b\xa1\x47\x34\x07\x21\xe8\x98\x0b\x3e\x37\xae\xd1\x53\x08\xfa\xe6\x12\x2f\x9b\x92\xf3\x73\xc8\x0f\xc9\x45\x20\xa0\xb7\x38\x91\xb9\x10\xee\x2d\xce\x67\xc9\x77\x92\x0c\xa2\x92\xa2\xda\xbb\xc9\xa0\xea\x86\xe6\xe2\x18\x2a\x6f\x14\x5e\x8e\x8b\x42\x91\x60\xe1\xf0\x70\x42\xde\x0d\x0e\xdc\x38\x05\x02\xf8\xfe\xce\xbe\xa6\x20\xae\x50\x8e\x5d\xc3\xdf\x6b\x74\x2c\x9e\xc7\x6f\xe9\xd2\x45\xad\x6f\xa0\x5f\x8b\xd8\x14\x4a\xc8\x12\x03\x43\xd3\x2f\xcf\x2c\x11\xd8\xa8\x55\x38\x6f\x00\x94\xa0\xe6\xcc\x78\x49\x44\xa1\xb8\x94\x17\x87\x82\x36\x0a\x3c\x07\xaf\x8e\x8e\xae\x94\x59\xeb\x9d\x0a\x96\x7a\xc0\x4c\xda\x08\x73\xe0\x6f\x45\x9e\x3b\x69\xd1\x8c\xb7\x81\x47\x47\xb7\xaa\xa2\xcb\xa7\x54\xb4\xd1\x2b\xba\xcc\x2b\xd2\x4f\x4b\x28\xf0\xb9\xd1\x78\x78\x08\xd5\x39\x80\xeb\x24\x3f\x07\xf2\x8c\xa8\xd6\x70\x0f\x83\x61\xa5\x7c\x35\x46\x41\xe9\x10\xa0\x2c\xb7\x65\xb7\x27\x08\x6b\x9a\x7e\x53\xf7\x09\x00\x15\x34\x9b\x9f\x77\x5a\x12\xc7\x2b\xaa\xeb\x21\x9b\x99\xe7\x9e\xef\x12\x2d\x73\xde\x81\x09\x52\x07\x0c\x7a\x34\x80\xcd\x17\x18\xba\x57\x04\x60\xf6\xef\x97\xb8\xba\xdf\x14\xc7\xfd\x07\x79\xd8\x03\x84\xaa\x0e\xfb\x08\x1d\x18\x38\x2a\x68\x13\x1d\xed\xd1\xde\xd1\xee\xf0\x57\x78\x96\x67\xfa\xa1\x3a\xe7\x18\xa5\x5e\x5b\x26\x18\x86\x48\xb6\x2d\x1b\x8e\x11\xe7\x78\x7a\x97\x11\xd1\xfc\x0e\xbf\xa3\x57\x81\x64\xe0\x4c\xe6\x96\x86\xb0\xdc\x1d\x76\x6e\x8d\x21\x0f\x20\x63\x9d\x9f\x2e\x0b\x8e\x50\xaf\x52\x00\x44\x9c\x50\x1c\x36\x48\x3c\xcf\x60\x01\xcf\x26\x7a\xea\x94\x93\x7b\x81\x6d\x29\xbc\x6d\x9a\x5f\x92\xec\xc0\x60\xa4\x6f\x08\x1c\xde\x1d\x0c\x0f\x7f\xaf\x80\x2a\x41\x65\x28\x62\x76\x0b\x89\x8d\x57\x54\x50\xa6\x79\x25\x99\xeb\xed\x92\xb9\xb3\x89\x87\x6e\x5a\xf4\xfe\xe1\xc4\xc9\x60\x35\x48\x33\x05\x5c\x59\xe1\x1a\xa6\x52\x36\x76\x75\xe5\xa6\x81\x65\x9d\x05\xcd\x73\xe5\xd1\xd4\x45\x5f\x94\x91\xb1\x66\x09\x9b\x4d\x12\xbd\xe6\xca\xe8\x97\x00\xcb\x3c\x94\x61\xd7\x44\x95\xac\x0b\xc3\xdc\x9e\xf3\x60\xab\x14\xa1\x5d\xcd\x07\x6c\xd1\x04\xac\x04\x17\x51\x17\xd0\x7f\x88\x9c\xe6\x98\xb4\xe0\xe8\x11\x15\x9e\x3b\xd3\xd1\x8a\x2f\xeb\xcb\x06\x9c\x17\xdb\xf2\x42\x15\xb4\xb1\x44\x56\x3b\x13\xac\x96\xc7\xda\xdc\x11\x21\x46\xba\x08\xb1\xd1\x70\x50\x9b\x10\x97\x37\xaa\x95\x91\x9a\x06\x24\x00\x24\xf5\xc1\x0a\x5f\xbc\x26\x19\xf1\x8d\x42\x34\x94\xe5\x31\xf2\x7e\xb1\x1a\x84\x91\x70\x2f\xf7\x51\x58\x4f\x1a\xf4\xae\xfc\x17\xd6\x91\xd4\x5d\x1d\x1d\x15\x47\x5b\xd2\x5e\x99\x18\xf3\x89\xce\x09\x8a\x33\x81\x9e\x5c\xe9\x98\x20\x03\x7a\x78\x43\x85\xfe\x09\x09\xbc\x1a\xb1\xfa\x4e\xce\x1a\x63\xf5\x3d\x33\xe6\xf5\x05\x42\x57\xd0\x8e\x84\xe8\x61\x33\xdf\xec\xe0\x4d\xec\x79\xbe\x0e\x05\x78\x4a\xb2\xf7\x9d\xa5\xba\xb3\xd2\x76\x42\xb3\x28\x6d\x4b\xe9\x7b\x64\x46\xa6\x32\x3a\xa4\x0a\xad\x19\xda\x31\x8a\xbd\x22\x7b\x29\x58\x80\x5b\x5d\x7e\x60\x5c\xd2\xea\xdf\x48\xec\x72\xab\x1f\xc1\x78\xb6\xb2\xd7\xe8\x73\x5d\x5d\x2a\x2c\x60\xdf\x13\x6e\xb9\x11\x98\x64\xad\x63\x92\x19\xaa\x51\xae\xa0\xaf\x1b\x2e\x4e\x6e\xe0\x02\x0e\x0c\x09\xad\xde\x35\x22\xf2\x8e\x6b\xc4\x73\x63\xc3\xae\x78\x41\x40\xc3\xeb\x25\xca\xad\x6e\x35\x1c\x05\xe4\xc8\x6b\xc0\x3f\xb0\xaa\x50\xa7\xd9\x45\x7a\x4e\x76\x3c\x47\x97\xef\x99\x7e\x76\x2d\x72\x04\x44\xdd\xde\x15\xcf\x6e\xc6\x2e\x30\xf3\xf1\x07\x7f\x85\x8c\xbc\xb1\x31\x6d\xe3\x06\xb0\xca\x8c\x03\xad\x93\x63\x3d\x29\x1c\x52\x4b\x9a\x5e\x19\x9e\x3a\xc8\xc2\x24\x5e\xaa\x4a\x6b\xe4\xcd\x46\x2c\x8b\x84\x14\xe9\x06\x16\xed\xc4\xf2\x69\xdd\xb2\xac\x6e\xfd\x07\x58\x22\x26\x52\x1a\x74\x72\x03\x0f\xc4\x82\x92\xf3\x84\xb5\x8e\x3e\xb5\xce\xb0\x94\x57\xef\x7a\xc0\x16\x52\x68\xe5\xd1\x15\xa8\x9a\x04\x72\xbd\xfa\x6f\x6f\x33\xd6\x22\x75\x9b\xcd\x8e\xad\xc7\xf8\x46\x8c\x41\x73\x7d\xc3\x66\x6c\x05\x7c\xcd\x39\xbb\x63\x57\xec\x92\xdd\xb2\x6b\xa4\x3e\x60\x7a\xe1\xdf\xb5\xdd\xd9\xb2\x17\x7c\x72\x3a\xb4\x60\x60\x80\x29\xde\xf2\x1f\x1d\xf6\x92\x77\x07\x16\xfb\x0c\x4b\xe0\x13\xd7\x78\x72\x71\xbe\xbe\xe1\x05\x27\x25\x93\x3e\x70\xc5\x50\xc9\x84\xf7\x5c\xe7\xd9\x45\xda\x2b\xc1\xbb\x15\x87\x39\x93\x07\x76\x7e\xea\xe6\x07\xc9\xcf\xce\xc3\x03\x10\x8e\x1c\xb8\xa4\xdb\xa5\xe7\x05\xa4\xa4\xe6\x8c\x8d\x1f\x9c\x7d\xc9\x74\x33\x87\x0a\xec\xa3\xd4\xf9\xb3\x6e\x94\x13\xce\x81\xf9\x1d\x77\xba\x96\x0d\xe0\x60\x35\x51\x9d\x69\x43\xcd\xd4\xe3\x2f\x56\xff\x4d\x5e\x1b\x65\x7d\x85\x55\x6e\x25\xff\xa8\x2a\xfb\x62\xbf\x52\xc7\x0f\xb6\xa4\x15\x7c\x8e\xe5\xde\xf9\x77\x5e\x70\xe1\xa2\x32\x37\x06\xd7\x95\x24\x5a\xf9\x0a\x42\x08\xb4\xf6\x64\xdb\x55\xcb\x1e\x45\x39\xa3\x0f\xc1\x58\x3b\x11\x71\x55\x95\x69\x43\xa1\x8e\xa0\xcf\x87\x56\xf7\x35\x97\xce\xd8\x24\x75\xfa\xf0\x50\x5e\x20\x2e\x49\xb7\x84\xef\x29\x83\xa6\xcb\xde\xab\x43\x1c\xb2\x2f\x84\x3f\xbd\x17\xc2\x5d\xf9\x6c\x3c\x83\x77\xdb\x23\xcf\xda\xf8\xd2\x99\xda\x31\xbc\xd0\xf1\xb2\xc3\x01\x1a\x13\x23\xd3\xa8\x7c\x3f\xa7\x15\x99\x47\x84\x3e\xc3\xef\x29\x7e\x4f\xc5\xf7\x14\xbf\xa7\xf4\x1d\xfe\x56\xc4\xec\x4f\x95\x08\x13\xc3\xdd\x02\xcd\x04\x5c\x1f\xf0\x66\xa3\xf2\x50\x39\x6d\x86\xac\x89\xe7\x42\xdd\x81\x21\xfb\x4d\x3c\x14\xe0\xf1\x1a\x63\x20\xd0\x06\xde\x2a\xf0\x15\xbe\xbd\xf6\x86\x9f\x08\x10\x89\x7c\xe8\x9b\xea\x40\x0e\xdb\xd8\x6d\x9f\xa0\x4b\x0d\x11\x82\xa1\x2b\x9d\xb0\x95\xd3\xae\x4f\x93\x33\xd0\x28\x1a\xa9\x10\x48\x35\x88\x15\x95\x4c\x05\x51\xc8\xa6\x46\x01\x43\xe5\x44\x22\x7f\x45\xc5\x3a\xa7\xd2\x48\xf3\x3a\xa9\x7e\x59\xdb\xe1\xe0\x4b\xfb\x75\xbe\xcd\x55\x59\x7e\x74\xec\x89\xe8\x35\xf5\x19\xf9\x2d\xfb\x2d\xd6\xe9\xee\xdc\xef\x3e\x56\xdd\x0a\x83\x8d\xef\x55\xb3\xa2\xae\x95\x2e\x88\x1e\xab\xe4\x45\x65\x25\x2f\xb0\x92\x9c\x15\x7e\x52\x45\x2f\x79\x83\x44\x3e\x2f\xb1\xe8\xdd\xd3\xca\x5c\xf1\x14\xce\xce\x54\x79\xe7\xd9\xc5\xcf\x50\xdb\x15\xd6\xb6\x79\x5a\x6d\x70\xc2\xc2\x51\xfb\x58\x6d\xb7\x65\x71\xd4\x2b\x29\x8e\x22\xda\xf6\x07\x87\xfd\xec\xb0\x1f\x1d\x14\xc6\x75\xda\x16\x5d\x90\xb9\x51\x10\xc1\x36\x4a\x59\xa4\x39\x7d\x01\x02\x48\xb8\xf9\x3a\xa4\x1f\x13\x2f\xae\x0c\xb3\x51\xab\x51\x63\xcb\x24\xe0\x4e\x4a\x2d\xfc\xe9\xc0\x93\x76\x9f\x86\xea\x0a\x51\x3a\xfa\xd3\x69\x5d\x91\xad\xb5\x57\x69\x61\x1d\x16\xe1\xe2\x5b\xc7\x7b\x26\x93\xe3\xd0\x46\x9b\x05\xa8\xc9\x91\xe2\xf2\xa5\x54\x15\x12\x3f\x41\x1b\x8f\xee\x3f\xf1\xea\x3f\xbe\xfe\x5f\x6e\x20\xac\x8b\x26\x44\x03\x30\xea\x0a\x80\xb8\xd5\xbd\x12\x22\xc0\xa5\x1b\xf0\x40\xc0\xe6\x2f\x07\x9e\xf6\x61\xf3\xd7\x17\x60\x83\xfa\x3e\xe5\x16\xdc\x42\x90\xd1\xb1\x2c\xd9\x5c\xe3\x37\xa7\xbe\x77\x23\x40\x23\x43\xb5\xbe\xbf\x1e\x85\xce\xe1\x26\xc8\xad\xb5\x68\xa0\xf9\xa5\x06\xaa\xa1\x93\xec\x56\x2c\xa1\x23\x96\x10\xc1\x28\x70\xa0\xa0\x80\xd1\x6f\x28\x5f\x64\x7f\x38\xbc\x75\x3a\xb0\xfa\xc7\xec\x1f\x18\xa7\xe1\x5f\xf0\xa7\x65\x9d\x9c\x9c\xf4\xd8\xef\x70\x1a\x57\xc0\xf0\xf7\x2f\xc3\x70\x9e\x1a\x5f\x07\x35\x91\xc3\x11\x3f\x57\xd0\xd3\xdf\xbf\x04\xc3\xbc\x89\xa7\x41\xad\xaa\x81\x6a\x18\x2e\x25\x0c\x83\xbd\x22\xa9\x28\xb2\x12\xd0\xfb\xc9\x81\xa7\x7d\xe8\xfc\x74\x00\x3a\x4f\xd8\x15\x32\x52\x85\xd8\xf3\x4a\x2b\x62\x21\x35\x3a\x5a\x57\x40\x07\xf4\xf2\x2b\xf9\xf4\xe1\xc1\x7b\x78\x88\xc7\x06\x7a\xcc\x3c\x13\xe1\xb9\x33\xb2\x48\xc8\xa4\x57\x1b\x34\xae\xc5\xb7\x98\x4c\x92\x32\xb1\xe7\x56\xda\xc4\x74\x07\x03\x96\xc2\x76\x66\xa5\x14\x6f\x2f\x25\x6e\x63\xb8\x43\x5b\x16\xa7\x10\x19\x00\x8c\x9f\xfe\x37\x50\x00\xd4\x27\x37\x7d\xac\x76\xff\x42\x3d\x5c\x89\x46\x10\xdf\xed\x4f\xd2\xa5\x9c\xa4\x98\xc9\x42\x7a\x91\xc3\xf8\xb4\xf6\x3f\xb5\xc6\x9d\x2a\x6a\xe6\x8f\x8b\xe2\xf1\x4a\x62\xef\xef\x8b\x2b\x4f\x07\x95\xf6\xaf\xd0\xca\xb6\x33\x38\x3e\xed\xf6\x60\x67\xa0\xb3\x91\x4f\x19\xd0\xad\x7e\x0a\xa9\xc3\x7e\xbf\xdf\x3b\x1e\x30\xe7\x53\xe6\xd8\xc3\xc1\xa0\x27\x1e\x57\x0e\x74\xc2\xb3\x4f\x7a\x27\x27\x83\x61\x9f\x39\x9f\xb3\x58\x54\xd1\xef\x40\xe6\x2b\xcf\x5f\x60\xd9\x4e\xe7\xb4\x0b\x3c\xc3\x95\x9f\x7c\xc2\x16\x86\xc7\xc7\x56\xb7\xdf\x67\x57\x81\xe3\x5e\xc3\x49\x03\xbf\x21\xf0\x7d\x33\x27\x58\x45\xe1\x8c\xbe\x77\xad\x3e\x14\xc7\xfe\xe0\xec\xe0\xc3\x8d\x1f\x01\xe7\x6b\x9f\x5a\x83\x41\xd7\xea\xb2\xab\x18\x98\x0c\xbb\x63\x9d\x74\xfb\xdd\x1e\x54\x95\xc5\xc1\xe6\x36\x8a\xa0\x74\x7f\x70\x3a\xec\xf6\x3a\xcc\x75\x80\x96\xa6\x2a\x86\xdd\xe1\x70\xd0\x3d\x61\x44\x45\xc5\x1e\x10\xd5\xd4\xe1\xde\xa0\x0b\x49\x91\x4b\x54\xa5\xdd\xe9\x1d\x9f\x9c\xf6\x8f\xd1\x37\x6d\xec\x04\xd8\x89\x7e\xbf\x7b\xdc\xc5\xd7\x10\xb8\xa4\x5b\x2f\x16\x75\x0d\x4e\x3b\xa7\x27\x1d\x4a\x4e\xfc\xe0\x9a\x7a\x3b\x80\xda\x98\x1b\xfb\xab\x24\x82\x3e\x41\xb9\x1e\x22\x04\x77\xe3\x84\x12\x54\xb8\x8a\x04\x74\x7b\xa7\xf4\x42\xdf\x7a\x83\xe3\x6e\x8f\x5e\x17\x51\x00\x8c\x71\x8c\xdd\xef\x5a\xa7\xdd\x53\x99\x6b\x11\x3b\x1b\xbb\x03\xff\x3b\xb5\x3a\xc7\x32\x05\x7d\xe1\x76\x07\x43\xa8\x5f\xbe\xef\xe4\xb8\x5e\x3a\xd7\x3e\x54\xd3\xef\xf5\xba\x03\x51\xcd\x0a\x6f\xbb\x52\xc7\x3e\xed\x58\xa7\xc3\xbe\x68\x31\x0a\xfc\x1b\x4f\xd4\x36\x18\x9c\x1e\x9f\x9e\x8a\xac\x91\x70\x3e\x88\xa3\x3f\x06\x38\xcb\x34\x77\xe9\x43\xcf\x2c\xab\x6f\x59\x9d\x2e\xa5\xc5\xde\x8c\xaa\x03\x9c\x4a\xef\x09\xcd\x1d\xcc\x7c\xcf\x3a\xe9\x77\x44\xb9\xc4\x73\x44\x03\xb0\x18\x4e\x01\x6a\x22\x11\x81\x4d\xa0\xe8\x1f\xf7\xfa\xbd\xfe\x71\x91\x4a\xa3\x45\xc8\xf5\x4f\x07\x7a\xaa\x57\x4e\x85\x35\xfe\x29\x8b\x7c\x98\xc4\x41\xf7\xb4\x2f\xd2\xd4\xe2\x18\x9e\x9e\x0e\x10\x76\x9e\xb7\x5e\xa3\x6d\x0d\x8c\xa3\x33\x3c\xc5\x46\x20\x25\xb9\xde\x88\x86\x4f\x3b\x83\x0e\x9b\xf9\x2b\x6a\x70\x78\x0a\x6b\x68\x38\x10\xef\x9e\xf6\x1e\xcd\x16\x72\xce\xbb\x96\xd5\x83\x11\xb0\xb9\x0f\x54\x50\xec\xc3\x9a\xed\x20\x80\x3a\xfd\x21\x83\x95\x01\xab\x45\xed\x11\x58\x09\xa7\x00\x34\x54\x21\x4b\x52\x39\x55\xdd\x61\xef\xa4\xdf\x05\xda\x1e\x18\x5c\xdf\xa1\x1e\x75\x4e\x61\x49\x2c\xd0\xc4\xe2\x2a\x8a\x23\x5c\x30\xb0\xd6\x60\x7f\x2c\x96\x51\x92\xaa\xba\x7a\x9d\x21\x64\x65\xb8\x32\xb0\x10\xbc\x40\xcd\xda\x3a\xe9\xf7\xba\xa7\x1d\x4c\xc2\x41\x40\x0b\x1d\x9c\x0a\xd1\x66\xaf\x7b\x3c\x3c\x11\xcf\x1b\x2f\x80\xb5\x0b\xfd\xed\x5b\x3d\xd8\x39\x8c\x86\xa8\x72\x2f\xa3\xd0\xdb\xcc\xbc\x5b\xb9\x61\xa1\x07\xcb\x28\x55\x70\xeb\x9d\x1c\xf7\x2d\x74\x9d\xec\x3b\x21\xce\x76\xa7\xd7\x1f\x9c\x0c\xba\x7d\x4a\x5a\x44\x04\xc5\x5e\x0f\x72\xdc\x44\xf1\x86\xc6\x0e\x1d\x04\xaa\x51\x2c\xbf\xc1\xf1\x09\x74\xd9\x62\x81\x03\xdc\xea\xcc\x8b\x21\xa5\xd3\xeb\xe2\xca\x50\x29\x00\xd9\x64\x49\xe5\x7a\x3d\x00\x77\xe0\xdc\x86\xa2\xf7\x27\xb0\x96\x4f\x8f\x87\x2c\xf0\x60\x45\xc1\xca\x9b\xcf\x71\x61\x21\x6c\x01\xc7\xb0\x00\x8f\x1d\xb1\x95\x60\x2f\xc1\x12\xef\x8b\x24\xb9\x6b\x07\xc7\x43\xf4\xd2\x2a\xd3\x70\x93\x75\x00\xb8\xb0\xc2\x4f\x45\x52\x0e\x40\x05\x18\xc0\x6b\x27\x5d\xec\x16\x7d\xa5\xfd\x06\x9b\xb9\xdb\x83\x8d\x29\x93\xc4\x0a\x3e\x3d\x81\x4d\x97\x27\xed\xe6\x52\x40\x1b\x9c\xf4\x87\xb2\x8f\x6a\x47\x40\x22\x4c\x47\x57\x26\xaa\x2d\xd1\xed\xf4\xbb\x27\xa7\xb2\x59\xb5\x30\x21\xc1\xea\xf5\x65\x2b\xc5\x96\x38\x3e\xe9\x01\xe6\xed\x95\x92\xbd\xdd\xe4\xd4\xf3\x02\x09\x16\xe8\x04\x6c\x2d\x91\x9e\x0f\x13\xa6\xa7\x73\x82\x89\x2b\xc4\x61\xdd\x13\x8b\x1e\xe5\x7a\x81\xa5\x84\x53\x19\x00\x2a\x0f\x09\x24\x83\x21\x20\x42\x85\x36\xf2\x25\x0b\xc8\x3e\x82\x21\x21\xee\x1c\x5a\x27\x0c\x7d\x68\x65\x2b\xed\x14\x80\x45\x73\xdc\xeb\x76\xe5\x07\xb9\x75\x06\xf2\x55\x61\x91\x6e\xb7\x83\x2b\x5b\xa6\xae\xb3\x78\x1d\x78\xb0\x71\x01\x47\xc3\x99\x23\x12\x73\x28\xf5\x4e\x8f\x4f\x60\x2d\xa8\xe4\x1c\x75\x9c\x58\x27\xc7\xc7\x00\x3d\x99\xbe\xc6\x83\x50\x94\x18\xf6\x3b\xb0\x22\x44\x7a\x81\x28\xfa\xb0\x36\x7b\x96\xca\x2f\x90\x85\x58\xd3\x40\x12\x76\x8e\xa1\x5d\x7f\x16\x16\x0b\x0b\x00\x00\x5b\x0b\x12\xc3\x14\x5d\x61\xae\xf0\x04\xeb\x76\x4e\x06\x50\x81\x9f\xa4\x9b\x38\x4a\xd4\x21\x86\x45\x23\xd7\x75\x12\x3f\x94\x29\xdd\x53\x16\x3a\x37\xce\xdf\x51\x8e\x13\x86\x27\x43\x58\xb7\x90\x08\x8b\x06\x0e\x21\x58\x80\x68\x47\x0c\x5f\x00\x15\x0f\x06\x98\x80\x3e\xd1\x71\x4f\xf6\x60\xd5\xd3\xdb\x2c\x76\xae\xec\x63\xab\x7f\x72\x0c\xc8\xac\x40\xc9\x80\xda\x60\xc3\x8b\x77\xea\x3e\xe0\x84\xd3\x1e\x1c\xa4\x0a\xb6\xfd\x1e\x6c\x00\x98\xfa\x35\xf0\xd8\x1a\xaa\x18\x0c\x07\xc7\x30\x54\x91\x4c\x60\x02\x74\xda\x85\xed\x24\x92\x0a\x38\xc1\xda\xe9\x9e\xc2\x5c\x50\xb2\x06\xa6\x7e\xef\x04\x50\x4d\x0f\x92\xd7\xce\xc6\x81\x91\xad\xc5\xc6\xb5\x8e\x8f\xd9\x1a\xa5\x18\xeb\x6c\x3e\xa7\xb1\xc2\xff\x21\x9b\x17\x67\x88\x2f\x86\x27\x80\xf6\x99\xda\x1b\xc3\x8e\x05\x6b\x68\x1d\x64\x2b\x3c\xa3\xbb\xfd\x61\x0f\x0a\x47\xb7\x33\x89\x64\xa1\x6d\x38\x23\x60\x27\xca\x25\x81\xab\xec\x18\x76\x32\xa0\x5c\x0f\x20\x2c\x53\x87\x43\x58\x12\x70\xfc\xca\xe1\xc3\x52\x82\x41\xc0\x84\x6c\x24\x3d\xd0\x85\x33\x75\x00\x47\x4d\x1c\x6d\x1c\xb1\x1f\x60\x9f\x0d\xf1\x98\x48\x9c\xd9\x2c\xf0\x44\x36\x98\x5d\xd8\x0d\xc7\x2c\xdf\xa3\x80\xfc\x60\x3b\xc3\x7b\x38\x53\x35\x0d\xad\x1e\x94\xec\xb3\x62\x31\x5a\x03\x48\x3a\xc6\x84\x64\x09\xdb\x8a\x40\x00\xa3\x38\x61\x89\xef\x85\x21\xec\x13\xc8\x30\x3c\x86\xe5\x0a\x74\xc1\x0d\xa2\x3c\x40\xfd\x5d\xc4\x1a\xa5\xfd\x0d\x94\x49\xb1\x90\x61\x34\x96\x35\x94\x29\x62\xb3\xf7\x60\x4e\x61\x4a\xb5\x7d\xae\x52\x42\xb9\x91\x07\xa7\x30\x97\xa5\x45\x3f\xe8\x5b\xd0\x6a\x8e\x02\xfa\x43\x20\x22\x00\x2e\x29\xa2\xbf\x1e\x6e\x16\x7c\xf1\x00\x3f\xc2\x90\x4e\x87\x44\x47\xa6\x00\x4c\xc0\x41\xb0\xc6\x80\x74\x49\xa3\x95\x93\x46\x84\xf5\x8f\xe1\x4c\x67\xda\xce\xe9\x0e\x60\xe1\x0f\x99\x3c\x60\x61\x29\xc1\x51\x7c\x32\x64\xb7\x4b\xcf\x49\x89\xb2\xeb\xe1\x88\x8a\x03\xf0\x18\x8e\x16\xf1\x9a\xac\xa2\x6b\x45\xfc\xc1\x06\xd0\x30\xd1\x10\x05\xc8\xe2\x5d\x2d\x47\x58\x11\xd6\x71\x7f\x6b\x8e\xbe\xaf\x52\xa4\xc3\x8b\xf4\xef\x1d\xe9\xde\x67\x23\x9c\x63\x93\x84\x9b\xb2\x44\x31\x7f\x4d\x3e\xd7\xee\x96\x31\x7f\x81\x92\x7c\xf2\x0e\x97\xdc\x3c\x6a\x63\xc3\x7c\xf3\xbe\x52\xdf\xcd\xe7\x1e\x93\x3a\x8f\x23\x61\x63\xfc\x96\xbc\x0a\x31\x21\x87\xf2\xc6\xb1\x9d\x51\x9c\x79\xcd\x49\x5f\xac\x3b\xd7\x7d\xc4\x42\x20\xca\x7d\x11\x4b\xcd\x29\x34\xa0\x35\xa9\xc6\x50\xc4\x27\x8f\x2a\x75\x14\xbe\xf1\xbe\xe4\x3a\x39\xab\x0a\xde\x91\xee\x95\x4f\x4b\xe5\xd1\x15\x98\xae\xb1\xa0\xfb\x05\x40\xb6\x20\x32\x45\xe8\x1f\xfd\x5e\x42\xf7\xe9\xec\x08\x8d\x43\x18\xc1\x3f\x6b\xff\x6c\x14\x3e\x12\xda\x1f\x6b\xed\x05\xfb\x67\xad\xf6\x4f\xb3\x01\x5f\x6c\x65\x19\x82\xec\xd0\x7b\x6f\xf1\xfa\x6e\x6d\xfc\x73\x82\x25\x1a\xb5\x8f\xe1\xb4\x66\x52\xa4\x2e\xa4\xce\x5f\x46\x33\x0f\x66\xd0\xd2\x74\x90\xa8\xdf\x15\xde\x08\xe2\x9d\x2c\xef\xa3\xdb\x04\xbe\xea\x56\xa0\x74\x05\x97\x47\x16\x88\x31\xa9\xd9\x51\x81\x1b\xb0\x2f\xdf\xa9\xcc\xb5\x59\x8d\xd5\x64\xbe\xfb\x5a\x63\xd7\x09\xbc\xa6\x64\x45\x6e\xac\x85\x26\xab\x30\x22\x6e\xd4\xec\x6f\x66\x13\x8a\xa6\x32\xad\x6d\x25\xc0\xa0\x36\xf8\xb0\xc5\x4b\x0a\x9e\x8e\xcb\x7d\xca\xad\x41\x71\xca\xd0\xa1\x8d\x9d\xa1\x14\x57\x1b\xc6\xe1\x75\x4b\x23\x4a\xce\x78\xa0\x06\x45\x8e\x3b\x33\xf5\x96\xf1\x67\x1d\xe6\x4b\x16\x3b\x21\xe5\xdb\x3e\x79\x1a\xd4\x60\x0b\x7b\x47\x77\xca\x37\xf2\x1a\x0d\xf4\x09\x50\x99\xd7\x33\xa9\xc1\x5e\xff\xd9\xee\x07\xb4\xee\x16\x97\xb2\x8d\x86\xb7\x4d\xb8\xd7\xe8\x4a\x2f\x3f\x7b\xf9\xd4\x3c\x75\x7a\x14\x42\xcb\xc8\xd0\xd1\x4b\xc7\xda\x6b\xab\xd1\x35\x8f\x8e\x1a\x8d\xc4\xb4\xe9\x63\x4c\xbe\x57\x9f\x59\x78\xe5\x91\x9b\x94\x03\xb8\x8a\x45\x56\x13\x8b\xec\x9f\xc2\x16\x7b\x14\x9c\x25\xa3\x3c\x0c\x80\x5e\x73\xd2\x68\xa0\x44\x5f\x38\xf1\xa4\xaa\x4d\xac\x38\x77\x11\x26\x3a\x66\x1e\xe8\x57\x82\x8a\x98\xe8\x98\xb2\xd1\x70\x0a\xb7\x62\x31\x40\xc4\x35\xd1\x52\xda\x0f\x33\xaf\x50\xf7\x93\x3d\x65\x49\xd3\xc9\xd5\xd3\xf3\xd4\x22\x08\x99\xb0\xd3\xba\x87\xed\x8e\x7f\xd0\xb4\x80\x05\x85\x9d\x5f\xc2\x2d\xd4\xd0\x40\x07\x6a\x18\xc2\x0c\x9a\x8a\x46\xc5\xa4\x2d\xc9\x71\x11\x24\xfa\x47\x47\xb1\xf8\xb6\x54\x66\x36\x8c\x4a\x8c\xd2\xa3\x23\x89\x5e\x96\xa4\x60\x39\x07\x08\x98\x0f\x0f\xd2\x7e\x6c\x99\xf7\xcc\xc1\x65\x37\xdf\x0d\x6b\x4f\x73\x5e\xf6\x9b\x46\x71\x2a\xcd\x7c\xc3\x89\x22\xb4\xe3\x52\x53\xcd\x3b\x8a\x3a\x84\xad\x52\x8e\x43\xaa\x74\x3b\x4a\xae\x7a\x42\x33\x26\xc3\xc2\x14\x7a\xa7\xfc\xc3\x91\x3b\x21\x81\xe1\x27\xd9\x0e\x1a\xca\x83\xff\xa6\x7b\x1a\x8c\x6a\x0b\x1c\x8a\xdf\x10\xc1\x20\xc2\xa9\xb9\x2d\x50\x9a\xa9\x36\xeb\x47\x52\xaf\xd4\x87\x55\xed\x02\x06\x6b\xf6\x77\x0a\x91\xc4\xcc\x85\xb3\x46\x1c\x39\xb8\xf3\x59\x0d\x8d\x81\xdb\x90\x58\xa3\x93\x28\xd5\xbe\xfe\xff\xd4\xd7\xd4\xb9\x6a\x26\xde\x1a\xfd\x99\x7b\xb3\xa6\xf0\x75\x24\xdd\xf1\xfd\xdb\x61\xbf\x38\x2c\x74\x59\xea\x32\xcf\x65\xb1\xb0\xdb\x98\xdc\x89\xab\xbc\x1a\x7a\xa9\x01\xac\xfb\x22\xf4\x57\x74\xd3\xf0\x5d\xec\xac\xbc\x9a\x39\x7d\x78\xd0\x3b\xad\xdd\x4d\x87\xac\x73\x6c\x92\xdb\x07\x0a\xd9\xf2\x54\xd5\x7d\xa5\x9b\x0f\x3b\xb0\x27\x9d\x22\x17\x2a\x2c\x0a\x8b\x7a\x8d\x14\x17\xb2\x6b\x43\x5d\x76\xc6\xe6\x36\x20\xa0\x50\x84\x89\x1b\xfd\xe2\x8c\x7f\x71\x5a\x21\xf7\xed\x7f\x3b\xdc\x87\x31\xc1\x9f\xd0\x7d\x78\x30\x52\x97\x97\xae\xde\x53\x17\x36\xb9\xcb\x81\xaa\x73\x8d\x4f\x64\x34\xae\xfa\xda\x9a\x23\x97\xa8\xcb\xb8\xde\xe0\xe5\xff\x87\x54\x0a\x7a\xe3\x28\xdb\xf3\xdd\xa4\x56\x9f\xb8\xef\xa6\x1c\x46\x58\x37\xd2\x42\x5c\xd7\x41\x5f\x15\xa6\xd9\x4e\x6d\x3d\x8b\x14\x8a\x65\x2e\x9f\xd4\x36\x78\xd1\x0c\xff\x1c\xf8\x37\x87\x7f\x6b\xf8\x17\xc2\xbf\x8f\x77\x57\x03\x54\x08\x86\x7f\xf0\xdf\x35\x3a\x6f\x82\x7f\xdf\xc3\xbf\x0f\xf0\xef\x1d\xfc\x7b\x5d\xc3\x70\x83\xac\xf6\x67\x6d\x4a\xeb\xe5\x55\x4a\x6e\x64\xc5\xd2\x7a\x47\x2e\x37\x2a\x5d\xeb\xe4\x42\x4f\xb4\xea\xb3\xce\xc8\xb6\xaf\xce\x31\x98\x76\x4a\x5a\xe7\x6a\xb0\x50\xe6\xbd\x70\x72\x88\x36\x32\xbc\xd3\xd0\xae\xf1\x3b\x70\xbc\x75\x1b\xb9\x76\x40\x98\xeb\x06\x74\x2c\xcc\x9b\x8b\x92\x9b\xc0\xc5\x17\xd2\xcf\x3e\xeb\xd5\xb5\x4a\x0c\x3c\x23\xdb\x3d\x13\xeb\xcf\xdc\xc9\x49\xc3\x6b\xf7\xa4\xaa\xaf\xef\xf2\xb6\x31\xb6\x8d\xc9\x7f\xee\xd1\xa8\x67\xf2\xfc\x8c\xff\x07\x5d\x41\x1b\x93\xc6\xc7\xe6\x37\x94\xf4\x8f\xff\xc1\x1f\x0b\xfe\x7d\x9c\x35\xe0\x2f\xc3\xa7\x56\x73\x2c\xde\x26\x4e\xf3\xf3\xb7\x90\xa1\xed\xb3\xc8\xcd\x65\x8f\x57\x55\xde\xc1\xc2\x5c\xc2\x69\x74\x61\xae\xdd\xaa\x3c\xe2\x7b\x6b\x1e\x47\xab\x97\x12\x61\x93\xd2\x45\xf4\x85\x0a\x4f\xd0\x21\xd2\x17\xf2\x74\x86\x90\xe9\x8f\x2f\x67\x82\x97\x5f\xd7\xc0\xf0\xbc\x74\x12\xb2\x76\x5b\x54\x7b\x5b\xc4\x42\x30\xfb\xae\x9f\x08\x74\x05\x98\xe3\x70\x46\xa0\x8f\xa2\x10\xf5\x64\x9c\x80\xb2\xce\x0f\x67\xfd\xce\xbf\xf3\x66\x94\x29\xae\xcc\x74\x60\xe5\xe4\x25\xb5\xeb\x85\x62\x45\x58\x94\x11\xe3\x8d\xe2\x8a\x1a\x50\x80\x75\xe1\x3e\xcd\xa1\x59\xc3\xad\x89\xe7\x96\xeb\x12\x46\x18\xfd\xad\x5f\x11\xdc\x2f\xbc\x14\x53\xed\x03\x17\x7d\x97\x68\x97\xfd\xeb\x87\x97\x14\x2d\x04\x01\x86\xd9\x37\x5f\xce\xbd\x91\x99\xbf\x03\xdc\xf2\x27\x20\x8f\x2f\x95\x50\xf9\x64\xb1\x1f\xa2\x2c\x4e\xbe\x54\x86\x32\xc9\x02\xe7\x7e\x10\xa0\x0f\xe7\x28\x9c\x7d\xb1\x9c\x9e\x37\x2f\x1e\x66\xa9\xf7\x84\x92\x94\x4d\x15\x02\x7a\x62\xf9\xc5\x22\x98\x49\x16\xb8\x78\x5a\xff\x2e\x4a\x5d\x43\xb4\xfb\x68\x09\xcc\xa0\xe5\xfd\x0c\x8b\xf1\xe7\xf9\xbc\xe4\x49\x34\x2f\x65\x6d\x85\xa3\xbe\x9f\xe7\x87\xab\x94\x19\xb0\xca\x64\x7f\x71\x04\x2e\x32\x76\x72\x45\x68\xa6\xb4\xad\x4b\x4d\x6d\x45\x96\xdc\x1c\x28\xb8\x79\xb4\x5c\xd5\x92\xc9\x0b\xab\x8f\x8f\xd6\xb0\xb7\x7a\xf2\xe2\xf4\xe5\xd1\xb2\x87\x16\x52\x5e\x85\x9e\xe1\x0b\x35\xed\xad\x29\xad\x12\xfa\xf6\x78\xf9\xdd\xe5\x55\x94\xc6\x2f\x8f\x96\xad\x58\x69\x79\xe9\x8b\x27\xf4\x7d\x77\xd1\x89\xc2\x98\x7a\xb0\x98\x38\x74\x02\x81\x64\x0a\x0c\x33\x72\x5c\x8a\xd6\xc5\xbf\x4b\x2b\xe3\x74\x71\xf8\x3e\x73\xa4\x7f\x27\x35\x6a\xc0\x6f\x78\x1d\xb7\x65\x65\x24\x49\x19\x72\x4c\x11\xb6\x34\xfc\x62\x98\x0d\xc2\xbd\x55\x07\x40\x29\x1b\xa1\x45\xea\x51\xc2\xe5\x83\xd0\x6d\xcf\x93\x5b\x19\x50\x3c\xea\x13\x3c\x17\x9f\xa1\x9f\xbb\xc3\x28\xdc\x6f\xba\xae\xd1\xf5\x7a\xcc\x2a\x85\x3e\x3a\xd8\x5b\x46\xef\x12\x39\x88\x17\x81\x62\x01\x7d\x57\x0e\x5b\x84\x6b\x2a\xf2\x3d\x3a\x5c\x91\xa5\xd9\x11\x83\x85\x6e\x27\x12\xcc\xa5\xb1\xe4\x23\xc5\x0f\xbb\x03\xfd\x79\x8e\x1d\xad\x30\x3c\x97\x90\xd1\x0c\xe0\x75\x72\x24\x6c\xa6\xcd\xa1\xd7\xaf\x8b\xae\x96\xf1\x11\xf4\x28\xad\x4a\x05\xda\xee\x64\xd8\xf7\x06\x30\xa0\x49\x2d\x81\xb3\xcf\xd9\x90\x19\x97\x7c\x48\x81\x7e\x16\x4f\xb7\xde\x2c\x54\xcf\xe9\x12\x76\xb2\x78\x9c\xc7\xbe\x78\x48\x1c\xe8\x0f\x3e\x4e\x0f\x48\xa5\x52\x7e\xdc\x14\x57\xe5\x1e\x8c\x03\x1d\xb8\x57\xae\x4a\x43\x5b\x95\x66\x15\xf0\x9b\xea\x65\x43\x13\xf1\xed\xf1\xa1\xc5\xba\x37\x6b\xc7\xf5\x92\x22\xe7\xce\x1c\xaa\x9e\x29\x08\xe7\x8d\x54\x81\x5a\x9f\x27\x94\x6c\x00\x4f\x4e\x5d\x69\x1f\x43\xff\x30\x4a\x23\x79\xd6\xc6\x61\x36\x6a\x49\x6d\xca\xbd\x7c\x7e\x65\x0a\x4d\xbf\x57\x9a\x79\xfc\x22\x6a\x84\x02\xff\x6f\xf4\x4c\x90\x25\xad\x5b\xcf\xbb\xc6\xda\xc4\x6c\xab\x94\xa4\x48\x2a\xd6\x22\x7d\x50\x2b\x55\x7e\x2c\x2d\x56\xcc\x20\x57\x6b\x9e\x43\xbc\xd3\x4c\x27\x2e\xbf\xaf\x35\x6b\x36\xb0\x00\x97\x76\xed\x9b\x1a\xb3\xec\x9a\x55\x03\xb8\x03\x79\xfc\x9f\x8f\x49\x1d\x68\xdd\x36\x5b\xe2\xcb\xb7\x6d\xa4\xfd\xc9\x85\x5c\x95\x65\xef\xbd\x08\x07\x27\x02\xb4\xd9\xef\x52\x52\xdb\x85\xa5\x2c\x13\x7e\x4e\x49\x9f\x50\xb8\x8d\x27\xc2\x4b\xd4\x64\xdc\xcf\x80\x90\x5c\x39\x81\x5d\x6b\xd5\x58\xba\x8c\x32\x94\x5b\x27\x36\xb2\x9e\x0b\x20\xf5\xd6\x40\x9a\xda\x93\xde\x94\xb9\x59\x1c\x7b\xa1\xbb\xb1\x27\xb5\x7f\x20\xc7\x32\x65\x68\xdc\x4f\x98\xb8\xf6\xad\xf3\xcd\xb7\x57\xdf\x7c\xeb\x7d\xf3\xed\x1f\xdf\x7c\xfb\x67\x8d\xbe\x40\xea\xaa\xfd\xed\xac\x8d\xef\xa9\xc8\xf5\x83\xfd\xed\xb9\xfd\xed\x45\x0d\x65\xfa\x7e\x04\x8d\x4c\x6a\x2f\x90\xe5\x79\x77\x4e\xb5\x6d\x30\xe1\x42\x6d\xb0\x73\xb5\xc1\x3e\xe4\x1b\xec\x77\x6d\x83\x7d\x28\x36\xd8\x77\x6a\x83\x5d\xe4\x1b\x8c\x25\xcb\x28\xc6\x15\x20\xab\x14\xf5\x89\xca\x44\x45\xa2\x0a\x51\x5a\x14\x85\x52\x2b\x44\x78\x58\xe4\x27\x27\xcc\x9c\x98\x2a\xf7\xae\x62\xf9\x78\xee\xc4\xee\x12\x7e\x5f\xac\x63\x3f\xa0\x77\x4c\xfd\x29\x0b\x3d\xfa\x09\xf0\xed\x45\xb6\xc8\x12\x54\x30\xbe\xf0\xd6\xa9\x47\xf1\xf9\x58\xed\x67\x37\x8d\xc4\xd3\xdb\xe8\x46\x25\xbe\xf2\x5c\xf1\x28\x3b\x7b\xae\xb5\x2d\xda\x15\x4d\x8a\x06\xf5\xe6\x44\x6b\xa2\x31\xd1\x92\x68\x43\xd4\x2f\xaa\xae\xa1\x5f\xf3\x9c\x55\xe4\x0b\xb7\xa5\x2f\x0f\xe4\x76\x17\x1e\x89\x8b\x5c\x4f\x27\xb7\x13\x1b\xb8\x59\xf8\xb7\xeb\x65\x59\xf8\x46\x25\xb7\x65\x6c\x0d\x0c\x36\xbc\xaf\x5d\xa5\x4b\x26\x7e\x94\x83\x2c\xe1\xb8\x26\x6d\x70\xc8\x90\x0a\x4f\x35\x09\x3d\xff\x1f\x74\xc7\xbc\x43\xf7\xc9\xcf\xa2\x08\xff\x32\xf9\x97\xc8\x15\xbc\x76\xc5\xa1\xe6\x8d\xc4\x48\x50\x88\xea\x39\xbb\xb6\x9c\xc0\xf7\xde\xb8\x7b\xde\x7c\x5b\x38\x54\x73\x7c\x03\xd8\x84\x1e\xa7\x94\xd9\x4e\x3c\xe9\x3f\x96\x34\xd7\x61\x57\x7e\xe7\xe1\x72\xda\xe5\xac\x12\x81\x30\xa3\x95\x97\xc6\x1b\xf2\xe8\x20\xf3\xbd\x8c\x02\xe9\xb6\xe3\x90\xcf\x5d\x0c\x28\x29\xf2\x26\x0c\x3d\x45\xe9\x1e\x48\xa4\x0b\xe8\xc4\x23\x9f\x4f\xa5\x06\xb6\x6c\x06\xbd\xb9\x58\x2f\xbd\xbd\xce\xc0\x19\x4e\xc9\x48\x0c\xbf\x8b\xfc\x70\xd7\x3b\x3f\x7a\xd0\x74\x01\xe7\xcd\xfc\x10\x76\x64\x82\x8e\x18\x30\x17\xd9\xab\x90\x71\x22\x43\x43\x52\x28\x7c\x9e\x05\xa9\x5f\x55\x83\xde\x79\xbd\xa6\x03\xfd\x0f\x85\xb7\xab\x83\xed\xbc\xf1\x43\x4f\xb0\xbb\xbb\xed\x78\xc6\x4e\x57\xc9\xeb\x39\xf5\xeb\x70\xa1\xaf\xeb\xdc\x5c\x00\x57\x56\xfd\x2e\x0a\x36\x8b\xbd\xc9\x5a\xee\xf5\xa3\x80\x4e\x55\xfe\xaf\xec\xc2\x52\x75\x01\x6a\xfd\x5e\xce\xf1\x93\x16\x8e\x5c\x10\xfe\x17\x97\x0e\xad\x18\xb5\x2b\x1c\xd8\x14\x55\xd2\xc7\x15\x46\x6b\x2a\xed\x1c\x68\xf1\x1c\xf6\xf5\xca\x95\x7e\xa8\x5d\xb6\x51\x5b\x0c\x3e\x00\x62\xd8\x59\x7e\xe6\xfd\xca\x6d\xf0\x7e\xfd\x93\xb3\x65\x34\xd7\xf6\x15\xdd\xf8\x5f\xa0\x9a\xbf\x7c\x7e\x1d\xce\xe0\x69\x2d\xe0\x26\x3e\xe8\x96\x2d\x6e\x8b\xd0\x01\xd0\x97\xe7\x6e\x2b\x2f\xcb\x17\xde\x56\x95\xc1\x0a\xf6\xec\x10\xba\xf5\x8d\x3b\xc2\xc6\xad\xb3\x70\x8c\x1d\x68\x84\x76\x58\xae\x42\xbe\x40\x71\x7c\xa4\xee\xf1\xab\x02\x2a\x57\x28\xc0\x48\x0e\x19\x11\x23\xe4\xcf\x85\xf4\xf8\x8e\x4f\x12\x1e\xb2\x25\x0f\xa7\x26\x9b\x93\xce\xe0\x9c\xa3\xcb\xa2\xb3\x05\xba\x93\xe3\xfa\x95\x99\x08\xa6\x2e\xc5\x9f\x6b\xcf\x98\xa4\xf5\x57\x0e\xf3\xe0\x8f\x70\x57\xb6\x52\x3e\x44\x67\x9e\xb1\x42\x7b\x48\x9f\x4f\x32\xdc\x19\xcd\x0c\x37\x89\x85\xe6\xdc\x33\x74\xe0\x99\x99\xa3\x73\xcf\x88\xd0\xbe\xfc\x0e\x7f\xa5\xd9\x5f\xda\x5c\xb3\x80\xbb\x67\xd6\xb8\x63\xc3\xfc\xdf\xf0\x08\xcd\x06\xde\x39\xf5\x80\xcd\xf8\xc2\x31\x5c\xf3\xac\x73\x42\x91\xb7\x66\xff\x31\x6e\xce\x82\xfa\xfa\xe8\x28\xa8\xa7\x67\x37\x32\x48\xc9\x06\x0a\x74\xb0\xc0\x68\x23\x7b\xbf\x31\x73\x73\xbe\x1b\x6e\xdc\x34\x7a\x43\xcb\xfc\x16\xfe\x34\xd1\x92\xfe\x50\x25\x4d\x55\xcb\xfc\x6c\x43\xe0\x50\xb5\xcc\x49\x89\x72\xce\x3d\x93\x79\xb2\x01\xcf\x1c\xcd\xc6\xeb\xb3\x74\xec\x18\xb8\x8f\xce\xf0\x67\x89\x17\x20\x4b\x80\x9c\x8d\xee\x6c\x96\x5a\x62\x82\x89\xcb\x33\x9e\x8c\x8d\x84\x40\x9d\x08\x50\x2f\x65\x01\xd3\x4e\xcf\xd6\x4f\xaf\x4a\xf4\x4a\x84\x5f\x18\xad\x78\x8c\x66\x67\xdb\xd2\xe5\xd7\x95\x5c\x19\x69\xd9\x18\xf1\x0e\x9d\x53\x25\xec\x0e\xc6\xc9\x97\x4c\x65\x0a\xd1\xb7\x61\xc9\x2a\x37\xcb\x2f\x05\x57\xf9\x45\x51\x73\x3d\xda\x34\x70\x36\x62\x9a\x8d\x71\xdc\x30\x62\x98\x31\x00\xaa\xdd\x44\xf0\xda\xb1\xe8\xd6\x0d\xd4\x37\xe3\xde\x48\xad\x4e\xaa\x8a\x89\x1f\xfd\x0a\x15\x56\xa2\xb6\xae\x8d\xd2\xc5\xa9\x79\x9f\x19\x37\x6c\x96\xef\x1e\x58\xed\xb0\x95\xa0\xed\x8d\x79\xf6\xd2\x21\x28\x34\x01\x3c\xd0\x0d\x60\xda\xca\x83\xda\x1d\x8a\x53\x12\xf2\xa5\x4d\x1e\x9a\xcf\xad\x71\x8a\x2b\xc2\x4e\x4b\xf6\xd1\xba\xc0\x50\xd9\x9f\x97\xec\xa2\x75\x99\x39\x7c\x7b\x4e\xbe\x09\xc6\xe2\x11\x8e\xe3\x50\x24\xd8\xe1\xf3\x94\xfc\xac\xe3\xcb\x73\x71\xa1\x2b\x63\x98\xb0\x35\x2b\x99\x8d\xf1\x7b\x81\x5e\x42\x0d\xbd\x78\x39\x7a\x89\x0f\xa2\x17\x35\x71\x19\x4c\x61\x81\x19\x7c\xf9\x86\xa8\x21\x62\x1b\xc0\x82\x34\x05\x45\x15\x78\x92\x56\x63\x9f\x22\xa3\x80\x74\xb1\x32\xf4\x06\x3c\xad\x81\x98\x59\x67\x1b\x77\xac\x4d\x04\x9b\xc3\xe3\x82\x9f\xc2\x94\xd8\x1b\x98\xa5\x31\x3e\xdb\xcd\x97\x8e\xdc\x4c\x4d\xf8\x52\x9e\x2b\xc0\x5a\xbb\xf7\xf0\x80\xc6\x17\x7c\x09\x15\x01\x0a\xa3\xb8\x4c\xec\x1c\xaf\xfc\x76\xd1\xf9\x95\xd2\x8e\x3e\xd7\xdc\x27\x11\x6e\x23\x07\x71\xae\x66\xa0\x2c\xe3\x52\x9c\x8b\x68\x67\xe8\xf5\x2e\x95\xde\x26\x3d\x48\x84\x33\x25\x10\x81\xa1\x33\xf3\xe1\x01\x1f\xd1\xc2\xca\x1c\x1b\x8e\x41\xa8\x8b\x2c\x5d\xcf\xe4\x0b\xa2\x34\xdc\x82\xf8\x4b\xb6\xb3\xc0\x4f\xc9\xc2\xd5\xd9\xac\x29\x99\xdc\x02\x40\xa4\x63\xfa\x0c\xf1\x46\xee\x92\x9d\x79\xb0\x71\x9b\x30\x4a\x0c\x55\x5d\x38\xe7\x13\xfe\xdb\x7c\x8c\x88\x95\x9e\xf1\x78\x04\x85\x98\xe8\x2f\xc6\xd4\x67\x46\xc4\x1d\xea\x02\x13\x75\x9f\x01\x1e\x33\xd6\x30\xe3\xc2\xbe\x17\x30\x3a\x75\x40\xdd\x5c\x9e\xf3\x3b\x61\x66\x09\xed\x70\xce\x93\x87\x07\xf1\x30\x1f\x4f\x26\x16\x34\x0d\xff\xa6\x2c\x7f\x9a\xda\x93\x09\x2c\x56\x48\x81\xe5\x3a\x9d\x6e\xb7\x86\xa9\x80\x8f\xb6\x43\x71\xe4\x97\xbd\xd7\xde\xb9\xfc\xca\xe5\x97\x2e\xbf\x75\xf9\x85\xcb\xaf\x5d\xfe\xda\xe5\x2f\x5c\xfe\xd6\xe5\x2f\x5d\xfe\xb9\xea\x28\xfe\xe4\xaa\xc9\x7b\xeb\x32\x0f\xb2\xc1\x80\x3f\xbb\x30\xe2\xb4\x9e\x36\xbc\xba\xd7\x88\xeb\xb9\xc6\xc2\x67\x87\x9c\x4c\xa7\x50\x31\x64\x7d\x8d\x59\x5f\xb8\x0c\x96\xd4\x95\x4b\xc9\x97\x98\x7c\x8b\xc9\x17\xae\x59\xae\x82\x61\x59\x73\x9c\x8f\xcc\x9e\x88\x68\x62\xa9\x13\x76\x31\x52\x8d\x09\x88\x9e\xa5\xa9\x11\xb7\x0b\x9b\xe7\xcc\xc4\x54\x79\x87\x73\xe7\xb2\x2b\x97\x41\x0b\x50\xff\x85\xcb\xa0\x07\xd0\x3e\xb4\x0e\xbd\x86\x3e\x43\x8f\x3f\x15\xa4\xc3\x95\xa4\x13\x2e\x3d\x6d\x27\x5f\x14\x5b\xf9\xda\x3b\xb8\x97\x3f\xe9\x87\xfb\xeb\x83\xf4\x41\x29\xdb\x85\x07\x84\xf3\x1b\x97\xbf\xf1\x8c\xb7\x1e\x7b\xe7\xb1\xbf\x3d\x36\x69\x7e\x72\x58\x13\x7d\xc6\xc0\xb2\xfc\xe0\xf2\x8e\x77\xaa\x68\x02\x37\xf0\xd7\xbb\x86\x64\x65\xc3\x74\xe1\xfe\xee\x5e\xcc\x51\xd5\x55\x0e\xc5\x77\x45\xf1\x34\xcc\xff\xb3\x0e\x82\xda\xa7\xa8\x3c\x2a\xc9\xc2\x10\x39\x22\x52\x6e\x51\xdc\x79\xc4\x9a\xca\xe7\x3f\x02\x35\xca\x1b\x18\xc2\x5e\x04\x6b\x17\x8f\xb8\xac\xf1\xb1\x33\x15\x26\x8f\xe2\x11\xb7\x5a\xb9\x0b\xd2\x1f\x91\x89\x91\xa3\x26\x13\x18\x07\x2c\x59\x18\x09\x2e\xd9\x42\xd9\x48\x74\xc8\x98\x08\x07\x48\xb9\x35\x2e\x12\xeb\x86\x82\x4d\x14\xfa\xee\x6b\xf4\x74\xff\xa2\x44\x4f\x16\x9e\x23\x3d\xe3\x2f\x8c\xa5\xd4\x8a\x9d\x5b\xfe\x97\xa7\x96\xb3\x13\x00\xc3\x99\x54\x1b\xb6\xee\xd7\x6b\x40\xf1\x28\x45\x31\x14\x74\x82\xa1\xd3\x58\x61\x89\x67\x4c\x9a\xad\x21\xeb\x9d\xb4\x8e\x85\x43\x51\x07\xa8\xe5\x20\x31\x26\xdd\xd3\xd6\x80\xf5\x07\xad\x01\x24\x93\x1d\xa0\xd1\xb1\x8e\x2d\x71\x93\x5b\xb4\xfe\x6b\xe2\x1c\xf6\x16\x23\xbc\x3d\x12\x93\x12\x91\x03\x95\x5c\x36\x2a\xd0\x01\x92\x63\x40\x88\xa5\x0f\x0f\x46\x2c\x1f\x51\xb5\x40\x3e\x6e\xcb\x41\x38\x4a\xcd\x1a\xa6\xb0\x34\x7d\x74\x98\xa8\x5c\x5a\x1a\x67\x97\x0d\x4e\x68\x3c\xda\x30\x07\x03\x36\x1c\x20\x16\x7d\x42\x75\xc7\xe5\xea\x7a\xac\x73\xda\x3a\x2d\x57\x77\xc2\x3a\x27\xe4\x4f\x57\x1e\xab\x65\x6d\xa2\x94\xc3\x32\xf1\xb4\xf5\x11\x4a\x37\x29\x15\x82\x56\x5f\x42\x1d\x2f\x83\xfd\xc2\x68\x54\x46\x0b\x40\xe2\x40\x38\x44\x48\x61\x19\x0a\xcf\x39\xc2\x25\x82\xf2\x2e\x68\x64\x67\xbc\xd5\xe9\x1e\x1d\xb5\xba\xbd\x3e\xa2\xb0\xf8\x8c\x37\x5b\xfd\xee\xe0\xe8\xa8\xd9\xea\x76\xfa\x67\xf1\x38\xb2\x29\xcf\x70\xb8\x93\x09\xbe\x62\xa6\x4e\x67\x00\x99\x1c\xdb\x37\x65\x2f\xe9\xbe\x36\xdc\x97\x05\x68\x5d\x96\x18\x16\x3b\x1d\x69\x6f\x31\x77\x8a\x37\xd9\xc1\x7d\x08\x65\xc8\x71\x2b\x82\x0d\x6d\x87\xf4\x97\x58\x7b\xd9\xb2\x7d\x7e\xa9\xe0\xd5\xa1\x5c\xfe\x18\x6b\x1c\x7c\x81\x16\x4b\xc5\x34\xfa\x0f\x4a\xea\x6f\x71\x89\x36\xcc\x31\xe9\x5e\x69\x41\xb0\x78\xda\x73\x5c\x3c\x6f\x0f\xa2\xdd\x74\x87\x32\xa2\xf1\x96\x12\xe2\x27\xd2\x4e\x69\x99\x74\xf2\xca\xaf\x71\xe9\x75\xbb\xc5\x39\x5c\xab\xeb\xed\xa7\x19\x9e\xfa\x45\x01\xb4\xb8\x8e\xca\xaf\x4e\xf9\x35\x24\x5a\x23\x4f\x31\xbf\xd2\x2e\x59\x2d\x7c\x6a\x47\x3c\xb6\x7a\x83\x3a\xb5\x93\x7f\xd1\xcc\xa8\x8d\xd2\xee\x20\x42\x47\xee\x9c\xc3\xd6\xd6\x95\x3e\xb6\x95\x33\x5a\xbd\x3a\x71\xab\xa5\x6d\xc6\x84\x0b\x4b\xe2\x39\x27\x5b\xe2\x5c\xaf\xb1\xb4\x47\x53\x53\x3b\xf0\x00\xf7\x27\xb0\xf1\x06\x03\x60\x25\xe7\xb0\xb9\x7a\x27\xf5\x00\x4e\x82\xa4\xa1\xd2\x1a\x32\x0d\x11\xad\xd8\x23\xae\x29\x16\x3b\xec\x9b\x48\xab\x16\xeb\xe9\x59\xc7\xb2\x8c\xd5\x81\x32\x15\x0d\x75\xa1\xd2\xc6\x4b\x07\xf3\x74\xba\xf4\x88\xad\xd1\xae\xae\x07\x4d\xf1\x01\x76\x3b\x3d\x57\xb5\x99\x71\x67\xa7\xcd\xae\xa5\xfa\x89\x15\x56\xb4\x49\x55\xab\x36\x87\x43\xad\x51\xc0\x21\x4f\x6a\x34\xcc\x17\x89\x3c\x66\x08\xf0\xef\x5d\xf6\xca\x65\xef\x5c\xf6\xab\xcb\xfe\x76\xd9\x77\x2e\xfb\x21\xc7\xac\x5f\x2b\x0f\x79\x85\x84\xe0\x0f\x3a\x09\xf3\xdb\x41\x4a\xa7\x94\xed\x87\x42\xda\xf1\x43\x2e\xed\x60\xef\x5d\x62\x44\x5f\xb9\xed\x2e\x8a\x10\x7f\xce\xfb\xf5\x87\xf7\x94\x8e\x5d\xe9\x2d\x5f\x6d\xd9\x8f\x79\xf9\xdf\xf5\xf2\x3f\x15\xf4\xdb\xf7\x87\xe9\xb7\x1f\xf5\xee\xfe\xfb\xe0\xa8\x7e\x54\xbd\x87\x26\x4a\x45\x7e\xca\xdf\x71\x90\xdf\x7b\x85\x28\x67\x0d\x74\xe9\xe1\xf3\x5d\x53\x82\xaa\xf0\x16\xef\x90\xcf\x6e\x6c\xf0\xbd\x33\xf3\xb3\xc4\x68\x38\x07\x42\x45\xb0\x08\x83\xa9\x13\x59\x05\xa4\x40\xc4\x81\x02\x30\xcd\x3d\xa2\x9d\xdc\xa6\xa1\x4c\x2b\x0b\x4a\xac\x7a\x5a\x10\x3e\x91\xa0\x2b\xc2\x22\x82\x24\x12\x95\x70\xb6\xf7\x5b\x03\xcd\x49\xf6\x01\xa9\xdd\xfb\x2a\x56\x21\x33\x7e\x70\xa1\xe1\xf7\xae\xf2\x5d\xb0\xc7\x7f\x28\x03\xd0\xaf\x61\x40\x32\xe3\x47\xac\xf5\xb3\x3b\x9e\xbc\x75\xdb\x9f\x91\x9c\x87\xbf\x53\xfb\x05\x24\x5c\xbb\xed\x17\x48\xe8\xc3\xdf\xa9\x7d\x01\x09\x97\x6e\xfb\x02\x59\x00\xf8\x0b\x2c\x84\x62\x26\xb0\x3f\xbb\x92\xb6\xa2\x37\x7f\xbb\xfc\x3b\x17\x78\xd8\x77\x2e\xff\xd5\x15\x5c\xec\x7e\x1f\x7e\xc6\x3e\x4c\x26\xb4\xbf\x60\xbb\xd2\x0e\x9b\x4e\xc5\xf1\x10\xfd\xbd\x1b\x72\xed\x11\x4d\x79\x60\x2a\x85\x6e\xbc\x22\x0e\x1e\x1e\x52\xbc\xfa\xb3\x37\x0c\x2f\x78\x51\x55\x3e\xa4\x48\x45\x4f\x8d\x2d\x03\xb4\xb9\xd4\x89\x8d\xa9\x5a\xef\xf6\x9b\x7f\x78\x64\xf0\xfb\x0b\xf9\xcb\xa9\x70\xb0\xbf\xb7\xdc\x1c\x53\x34\x1e\xd3\x80\x8a\x0f\x4f\x3b\x85\x1c\x5e\xb1\xa4\xd3\x71\x6a\x1b\x3b\x8b\x1a\x0e\xa3\x86\x38\xf4\x9c\x32\xe4\x8c\x5d\x42\x19\x3a\xa3\x80\x20\x5d\x62\xab\x39\x21\x74\x8b\x57\x49\x55\xf7\x8e\xbb\x1c\x51\x29\xe4\xb2\x17\xeb\xae\xd0\x64\xfc\x23\x4f\xc5\xb0\xc8\x4f\x27\x3c\xf4\x4b\x9e\xce\xf7\x89\xaf\x54\xdd\x16\x51\x73\x39\xb1\x95\x56\x13\x5b\x5a\xce\x2f\x11\x58\x5a\xd6\x2f\x92\x53\x3b\x79\xbf\x44\x40\x95\xfa\xfb\x24\x42\x69\xbf\x84\x24\x8a\xd4\x54\x68\x2b\x3f\x8b\xf7\x13\xcf\xb3\x14\x1d\x35\x73\x3f\xce\xd9\x37\xef\x53\xe6\x03\xb1\x03\x4c\xfd\x22\x0b\x9c\xaa\xc8\x15\x59\x6c\x38\xb1\xe2\xdf\x9c\x58\xd1\xfc\x4e\x5e\x3f\xb1\x18\xbb\x9b\x4d\x17\x7d\x17\xac\x1d\x3a\x1a\x47\xc9\xf4\x2b\x87\x21\xfd\x01\xbf\xb0\xcc\x31\x81\xbf\x93\x29\xf4\x90\xab\xb3\xf3\x20\x26\x6e\x01\x25\xcf\x58\x28\x14\x85\x98\xd2\x5f\x3f\xeb\x8e\xf1\xee\x08\x92\x6c\xc4\x11\x7b\xfc\x48\xa9\x69\xc5\x07\x3c\xa9\x07\xf8\x9f\x5b\x31\x58\xd7\x8f\xdd\xc0\x3b\xe8\x31\x5a\xdc\x42\x54\x6c\x3e\x0c\xd5\x5c\x79\x7e\xd8\x50\x35\x0e\x93\xdc\xca\x61\xb7\x9a\x6a\x90\x96\xe2\x5c\x4a\xaa\xee\xc2\x9c\x87\x09\x89\x14\xab\x64\xd4\xa4\x7a\x7b\xc8\x85\xcc\x18\xb6\xb7\x1a\x60\x28\x07\x88\x9a\x0c\xd2\xb5\xa4\xbc\xb9\xaa\x31\xed\x82\xca\x9e\x64\xd3\xed\x56\x8b\x97\x48\xec\x7f\xc6\x87\xff\x9d\xb3\xe1\x58\x38\x1b\x26\x54\x06\xeb\x4c\x07\x5f\xfc\x48\x31\x8f\x2f\x62\xc3\x48\x79\x23\x36\x11\x1c\x19\xcd\x15\xc6\x37\x39\xc0\x02\x7c\xb1\x2e\xba\x74\x01\x6c\x2f\x2a\x34\xa5\x03\x64\xd9\x27\xe3\x54\x13\x0f\xcc\x7c\x11\x04\xbe\x4a\x7f\x1a\x39\xd8\xb4\xf0\x03\x88\x3d\xe3\x6a\xca\x7c\x2e\x17\x15\x30\xf8\x42\x2a\xe6\x63\xbf\x98\xf4\x37\xec\x46\x09\xbe\xb9\xc5\xb7\x0c\xdd\x35\xe6\xdf\x32\xa4\xd0\xf3\x6f\x3e\x4a\x84\xf3\x6f\x7e\x59\x5b\x45\x88\xe1\x0a\xc9\x1b\x8c\x70\x5e\x8f\xcc\xba\xd7\x80\xa7\xa0\x9e\x34\xdd\xfa\xbc\xee\xc0\x3b\x34\x57\x4f\x1a\x01\xbd\xe5\xe3\x5b\xa0\xe7\x20\x37\x7b\x64\x21\x4b\xf4\x2d\xd6\xc8\xce\x45\x6b\x79\xad\x20\xc2\xaa\xa4\x67\x50\x1b\x98\x1c\xaf\x16\xde\xe0\xfc\xf6\xcc\xac\xcf\x80\xb0\x99\x09\x47\xab\x4b\x33\xb7\xb2\xd8\xcf\x1c\xb4\x57\x66\x7d\xc5\x5c\xb6\x12\x99\x17\xe6\x63\xb9\xe3\xf6\xda\xac\x63\x48\xec\xb5\x29\x63\xdc\x54\xa9\xec\x01\xd1\x1b\x7e\x3b\xc3\x3b\x10\xe9\xea\x35\x79\xb4\x52\xa7\x7d\x63\xd6\x6f\x80\x08\xbb\xf9\x62\xa5\x2b\xad\xd2\xb9\xf4\x82\xae\x11\x71\x30\x8c\x80\xe5\xb7\x18\xbc\x83\x0e\xce\xd7\x6c\xc6\xd1\xb4\x98\xf7\xd0\x48\x91\x77\x75\x32\x0f\x0f\x90\x4a\xe9\xd8\x41\x37\xb6\x72\xae\x0e\x4d\x53\xb8\x15\x0e\xbc\xa2\x2c\xc5\xba\xf7\xab\x7e\x14\x1f\x2c\xd1\x1a\x45\xc2\x69\x81\x8c\x8f\xb0\x33\xea\x98\x6c\x09\xab\x16\xe8\x5a\xc0\x53\xa8\x95\x5e\xa4\x2f\x8c\xa0\x2a\xdd\x9c\x12\x07\xef\x3d\xdd\x2d\x17\x1a\xc3\xfc\x1d\xc5\x92\x63\x43\x87\xe2\x7e\xa8\xbd\xda\x61\x29\x81\xc6\xa8\x15\x78\x22\xd7\x2e\xf8\x62\xe1\x45\x9b\x58\x63\xf2\x01\x2f\x53\xc9\x7f\xb6\x48\x45\xff\xda\x52\xa2\xee\xc3\x6e\xcf\x50\x64\x0e\x5b\xf8\x4c\x48\xd3\x03\xbc\x84\x45\x5f\xdb\xa6\x8e\xa1\x8c\x8d\x89\x22\x56\x9f\x21\xe3\x9c\x31\x49\xa4\x6a\x9d\x7e\x2a\x16\xcd\xfb\xe8\x15\x7d\x74\x8a\x3e\x46\x45\x1f\x63\xba\x6f\x4d\x79\x8c\x56\x5a\xe8\xfa\x06\x50\xd0\x59\x44\x49\x0e\x14\x89\x50\xfe\x58\xd5\xc7\x98\x39\x24\x06\x8e\x44\x1f\x93\xd4\x5b\x7f\xcd\x1c\x5d\x40\xfe\x7c\x86\xe4\x8b\x9a\x1f\x7a\x2d\x66\xe7\xe2\xa9\x55\x1b\x33\x29\xb3\x58\x89\xe1\x91\xd3\xb8\x19\x5b\x15\x40\x7c\x7a\x55\x6b\x59\xd5\x8d\x56\xd5\x9a\xdd\x4c\xff\x0b\x99\xd2\x06\xdd\xa9\x25\xfc\x06\x88\x23\xd8\xde\xa7\x74\x7b\x37\x8b\x8d\x18\x10\xd0\x06\x36\x05\x7e\x08\x60\xcf\xe3\x87\x05\x7e\xf0\x01\x11\x6c\xe8\xc8\xd9\xec\xac\x50\x63\x32\xa1\x4b\xf5\xe6\xa9\x25\x04\x0f\xf8\x72\x6a\x49\x51\x83\xbe\xb6\x55\xc6\x13\xfa\x28\x32\x9e\x50\xa1\xa9\x8e\xda\x3d\x27\x7d\x11\xbb\x4f\xc3\xec\x87\xb0\xc5\x24\x7d\x78\x38\x40\xb0\x30\x0f\x0d\xe8\x2a\x3f\x95\x88\x86\x15\x46\xea\xd8\xc4\x05\x4a\xdb\x3f\x54\x77\x65\xfe\x2a\x87\xf1\x5f\xb5\x2e\x44\x75\x51\x16\xeb\x4d\x78\x8f\xee\x28\x74\xf2\x5b\x41\xac\x79\x63\x24\xaf\x6c\x2f\xa7\x5a\xa4\x1b\xec\x27\xad\x0c\x0c\xad\xe0\x55\xf3\x5f\x54\x6b\x9a\xd3\x1d\x15\x4b\xee\x91\x2d\x66\x5b\x5b\x14\x34\x49\x50\x69\x5e\x2a\xab\x8d\xd2\xce\x05\xe5\xac\x53\xcd\xbb\x84\x6f\x5e\x99\x68\xa2\x8a\xb7\xfd\xb3\x8a\xff\xff\xcb\x35\xd9\x9f\x52\x17\xe8\x4f\x17\x5e\xf7\xae\xf1\x74\xf1\xd6\x5d\xfc\x54\x31\xd2\x6f\x2e\xbf\xaa\x3c\x60\x0b\x32\xa7\xdb\x36\x3a\x8d\x70\x57\xf5\x58\x66\xeb\x0a\xfd\x64\x74\x91\x61\x84\x28\xd9\x32\x47\x39\x1b\xfb\xd9\x5f\x65\xe9\xd2\x09\x1e\xbb\xa9\x02\x4e\xe7\x37\x57\x71\x3a\xbf\xb9\x34\xbe\x3f\xf6\xfa\x24\xef\xcd\xa9\x25\x24\xcc\xb4\x60\x6a\x47\x47\x69\x3b\x27\xdf\x90\xf7\xdc\x54\xf7\xc0\x17\x0b\xbd\x2a\x16\x20\xf4\xe1\x8f\xbc\x0f\x7f\xb8\xe5\x6b\xb6\x97\x51\x48\x2a\x9b\x55\x2e\xbc\xfe\xf4\x8c\xcb\x9c\x4d\xbb\x8c\xf7\xee\xe7\x1e\x69\x13\x8a\xde\xe6\x45\x6f\x85\xe6\xf1\x3f\x0e\xcd\x45\xa7\x0d\x8b\x30\x27\x41\x8b\xf1\x2d\xc2\x68\x85\x4d\x55\x8f\xe9\x1f\xf9\x98\xfe\xe1\xb2\x8b\x78\xff\xe2\xa8\x58\xb9\x93\x90\xa9\x89\x84\x06\x8c\x3c\xe0\x45\x6a\x9a\xcd\xf7\xce\xb4\xb8\x79\x5c\x79\xb1\x4b\xec\xec\x7e\x8b\xd7\xb1\x71\x91\x8f\xe8\x42\x8c\xe8\x5f\xe5\x11\x15\x03\x52\xc3\x81\x49\x2b\x86\x13\xc5\xe9\x32\x02\x32\x79\xbd\x3c\x34\xa4\x7f\xe5\x43\xfa\x97\x58\x2a\xbf\x1f\x06\x19\x2d\xda\x47\xd7\x2c\x0e\x35\xd4\x57\x2c\x9c\xbd\xb1\xf7\x78\x0f\x7e\xcf\x7b\xf0\xbb\xcb\x5e\x3f\x0e\xd4\x66\x5a\x0d\xd5\x70\x17\xaa\x24\xcd\x21\xaa\xed\xbc\x02\xbe\x82\xbf\x05\xf0\xbe\xa6\xe8\x0f\xca\x21\x2a\x7a\xb1\x90\x57\x8d\x05\xbe\xdf\xf5\x95\xaa\xc9\x5c\xc7\x70\x98\x35\xa5\xea\x27\x5e\x27\xdb\xc4\xac\x9a\x6c\x42\x69\x4d\x91\x88\x28\x52\xd4\x59\x5d\x87\x67\x4c\x34\x15\xd2\xb2\x44\xa0\x71\x6a\xd9\xa7\x96\xa8\xd8\x13\x15\xeb\xca\xa6\x4d\xfc\xb6\x65\x50\x03\x70\xb6\x8c\x5e\x04\x20\x5f\x2b\x46\x7f\x85\xea\xcf\xf2\xb1\xb5\xcc\x76\x02\xa1\x69\xec\x4e\x48\xf7\x31\x61\xee\xd6\x43\x5e\xc4\x00\xc3\x2e\x8e\xc2\x8c\xbf\x4e\xc9\x87\x07\xfe\xc6\xa6\x1e\x64\x97\x8c\xf1\x5d\xe4\xed\x45\xa8\x73\x6b\x14\x9d\xa5\xa3\xb4\xd1\x30\xa5\xf9\xfc\xa4\x91\xe9\x21\xe2\x30\x6c\x1b\x0a\xec\xfc\x8a\xc4\x54\x86\x82\x15\x61\x23\x8d\xcf\x34\x3d\x45\x85\x32\x8a\xeb\xc4\x81\xec\x08\x89\x26\x3d\x60\x78\x23\x79\x47\xf4\x32\x46\x91\x63\x82\xbf\x2e\xd2\x32\xe8\x42\x9d\x73\x1e\x08\x85\x98\x64\x92\xe4\xea\x35\x22\x39\x28\xde\x81\xc0\xc9\x87\x50\x24\xa3\xea\x8d\x35\x6a\x36\x53\x73\x21\xc5\x11\xd0\x78\x00\xad\x4e\x01\xfe\xb2\xb3\xc0\xdb\xcf\x47\xe9\xf3\xbc\x6e\x8a\x56\xa9\xe7\x4f\x8a\xfc\x8a\xd7\xda\x4a\x87\xce\x48\xda\xbe\xcd\xa9\x8b\xfd\x00\xa9\x28\xc0\x35\x52\xdd\xd3\xed\x63\x12\x5b\x8f\x93\x9a\x37\xda\xd8\xeb\xee\x6c\x1f\x2b\x12\x8b\x22\x40\x1f\xa4\x66\xb1\x54\xe4\x89\x56\x55\xc5\x06\x35\xe9\x7e\x72\xf3\x38\x8f\x3f\xb9\x7c\xa7\x94\x26\xe2\x04\x88\xfe\xe4\xee\x08\xfb\xb5\x68\x96\x6c\x3f\xd2\xa7\x0a\x55\xea\x35\xc9\xc7\xb5\xa5\x22\x7f\x86\xc4\x05\xc8\xf8\x9f\x2c\x13\xc1\x60\xea\xb1\x92\x60\xd4\xe3\xe2\x22\xb0\x35\xa8\x03\x61\x02\xed\x56\x5e\x15\x14\xa4\x1d\xa9\x18\xeb\x4d\x8b\x58\xb0\x16\x13\x01\xe3\x26\x19\x74\x41\xac\xc6\x1d\xa8\x3d\x3c\x18\x18\x74\xb5\x6d\x0c\x85\x53\x4a\x87\x94\x14\x4c\x53\xa9\x29\x0b\xf6\x84\xea\xc0\xb0\xf7\x14\xc2\xa8\x8e\x0a\x2c\x4d\xd4\x6d\xa9\x13\xd1\xee\x37\x84\xfc\x85\xd4\x5d\xcc\x3a\x30\x2b\x94\xd0\x99\x92\xa6\x0b\x24\xc8\xc1\x4c\xfc\x7a\xc8\xa2\x7a\x38\x15\x23\x0a\xfc\x75\x79\x0b\xef\x87\xaf\x84\xa6\x3f\xa0\xe0\x1f\xf6\x24\x8c\x30\xd0\x47\xd8\x84\x0f\xc2\x8e\x41\xd8\x23\x4c\x02\x1c\x62\xa3\xe1\xa2\x43\x93\x7b\xb1\x96\x95\xf3\x0d\x33\x47\x46\xa4\x87\x46\xd9\xdd\x29\xc9\x86\x8c\x22\xcc\x42\xd3\x31\x9b\xa4\xab\x43\x41\xa1\xbd\xe7\xf1\xc8\xc4\x90\x4d\xde\x94\x7d\x8a\x8d\x88\x25\xa4\x44\xf7\x09\x19\x87\x84\x54\xeb\x42\xb1\x2b\xde\x90\xae\x09\xa5\x11\x03\x87\x69\x11\xf0\x6e\x79\x4e\x8c\x91\xbb\x9f\xd3\xe7\xd1\xc8\xc9\x3f\x91\xe4\x0a\xa3\x68\xe6\x82\x56\xe9\xa5\xd3\x65\xff\x76\xd9\x2f\x2e\x0b\x03\x96\x06\xcc\x0b\x10\x41\xc5\xf8\x77\xf4\xb3\x26\x7f\x47\xc2\x15\x23\xb8\x1d\x5a\x99\x22\xf0\xe1\x6c\x41\xa1\x25\xf2\xb0\x12\x5e\xb3\x89\x8b\x91\x82\x49\xe0\x47\xbc\x01\xc2\x1e\x39\x0f\x0f\xa8\xfd\x40\xa0\xf3\x58\x47\x37\x41\x44\x4c\xf6\x27\x62\x32\x59\xc7\x96\xfd\x52\xba\x06\x48\x76\x65\xea\xba\x35\x08\xb6\xd1\x0a\x00\x59\x09\xb1\xb9\x9f\x7a\xe3\x22\xdd\xb1\x8b\x67\xa0\x3c\xbd\xb2\xa0\xfd\xc9\xd5\x5c\x69\xd5\x38\x28\xd8\xc8\xf4\xee\x89\x20\x9f\x76\xa5\x0c\x91\x65\xa8\x71\x29\x0e\x8f\xb4\xf5\x8e\xe2\x60\xbe\x85\x25\xf4\x16\xc0\xf2\x16\xdd\x30\xb4\xde\x42\x2a\x31\xe9\x6f\x51\x7c\xda\x7a\x9f\x47\xd1\x6e\xbd\x1f\x85\xad\x37\x08\x4b\xfc\x81\x7f\x3c\x95\xfa\xcc\xad\xf7\xe8\x65\x87\x87\xe2\x55\x98\xb9\x8e\xa1\x48\x96\x49\x9b\x57\x04\xe5\x3b\x71\xcd\x48\xcd\x41\xbd\xef\x38\xd5\x80\x27\x38\x21\x4c\x68\xb4\xf5\x56\x66\xa1\x32\xe2\x1b\xf9\xa8\xa2\x75\x8e\xb9\xa1\x21\x59\xc9\xaf\xc8\x43\xb5\x5e\xa2\x02\x5b\x88\x8d\x1f\x1d\x79\xad\x97\x23\x13\x58\xab\xd6\xaf\x50\x8e\xf3\xb8\xf5\x06\x79\xa2\xb8\xf5\x1e\x15\xd0\xb2\xd6\x4b\x40\xb6\x90\x3f\xc3\x32\x1d\x16\xab\xa2\x31\x1d\xd5\x18\x37\xf9\x3d\xfa\xff\x10\x1d\x46\xbd\xe7\x50\xf8\xc8\x6a\xfd\x8a\x9a\x21\x7a\x99\x58\xe6\xc1\x30\xee\x36\xb5\xf0\xe6\x89\x2d\xbc\x41\x17\xbe\x4f\x68\xc1\xd3\x5a\x10\x39\xa4\x93\x7e\xca\x85\x06\x4b\x18\x6b\xa2\xa4\xed\xa7\x4f\x1e\xc0\x16\xa7\xef\x1d\x25\xbc\x13\xb3\x2b\xe6\x33\x94\x93\x30\xd2\x10\x10\x56\x8f\xb1\xdb\x60\x14\x11\xcd\x31\x85\xaa\xf1\xc7\xd1\x18\x66\x2f\x32\x6d\xdf\x8e\x58\x36\xce\x00\xfa\x9c\x87\xf4\xeb\xd9\x19\xcc\x83\x67\xcb\x69\xf2\x98\x7f\x74\x14\x11\x57\xdb\x7a\x49\x23\x09\xe9\xf7\x0d\x4a\xaa\x68\x9e\xd0\xae\x32\xc2\xc9\xa0\xb9\x81\x24\x6c\x32\x44\x90\x33\xac\x2f\x84\xb4\xf7\x28\x1b\xc2\xcc\x18\x27\x16\x7e\x51\xc0\xe5\x89\x3c\x08\xe5\x98\xea\x0c\x51\x8f\x9f\xdc\x86\x60\x0e\x93\x3d\x13\x51\x57\x51\x83\xbb\xf5\x52\x8f\x06\x03\x19\x5e\x52\xc0\xd5\x59\x44\x19\xd4\x2e\xba\x94\x0e\x9d\x64\x1a\x34\x2e\xf6\x01\x3c\xbd\xc7\xd5\x84\x82\x2a\x31\x13\x59\x79\x26\x32\xa4\x6a\x20\x13\xae\xe3\x37\x18\xf3\xfb\x4d\xeb\x25\xa2\x8f\xf7\xf8\xfc\x1e\x1a\xbf\x2f\x9e\xd1\xfb\x0b\x7e\xc7\x6a\xd2\xf2\x92\x49\xb5\x6a\x68\xa1\x50\x3b\x54\x0a\x73\x6b\xad\x85\xb2\xc3\x23\xea\xf0\x36\xb7\x89\xc0\xe2\x6f\x2a\xbb\x1a\x97\xbb\xfa\xe6\xb1\xae\x16\xe9\x46\xde\x78\x5a\x1e\x71\xaa\x55\xa3\x77\x55\x0e\x2c\x3e\xd8\xd5\x7c\x53\xe2\x14\x66\xad\x5f\xb7\xb7\x4b\x3f\xf0\x8c\x67\x38\x45\x23\x31\x79\x34\x37\xdb\x6d\x41\xbc\xdc\x44\x71\x14\x46\xfe\x23\xa4\x6e\x61\x32\x2e\xbc\x35\xa9\x93\x8e\x94\xe4\x72\x09\xaa\x52\x44\xf5\xb9\xd2\x43\x8d\xb8\x54\x43\x55\xd8\xdd\xcf\x0c\xba\x0b\x77\x50\x25\x31\x08\x92\x7d\xa3\x67\x0f\xbe\xdd\x0b\xf3\x16\x4f\x9e\x26\x01\x3c\x21\x06\xc6\x43\x78\xe2\x4c\xf3\xa8\x56\x63\x77\x4f\x26\x2e\x3b\xda\x4a\xc4\x95\xaa\xa2\x09\x80\x20\x44\x0a\x6f\xba\x35\xed\xa0\x75\x77\x86\xae\xbf\xe0\xf7\x39\x3a\xb8\x0a\x5a\x9b\x33\x9e\xd1\xef\x73\xd8\x26\x28\x0c\x8d\xa6\x6c\xe2\xcb\xbf\x19\xfc\x85\x6d\x8a\x0a\xde\xd3\x51\xa2\xd4\xfb\xa1\x17\xe8\x1e\x50\xb7\x1d\xd9\x75\xe3\x54\xc5\x8e\xdd\xdf\xe9\xfe\x80\x44\x58\xa7\xf6\x4b\xc7\xc4\xa0\x96\x1b\xfd\x53\x54\xfa\xe4\xdb\x29\x4a\xf1\x85\x3d\xc9\x0b\x44\x1a\x6f\x63\x0c\x45\x0f\xe0\xcd\x80\x78\xc9\x82\x91\xc6\x60\x09\x74\x1e\xf8\xe1\x75\xa5\x8e\x85\x9c\x00\x53\x80\xf6\x91\xdb\x0d\x98\x62\xdc\xd8\xf1\x76\x3f\x94\xa7\xba\xe3\x27\x99\x9b\x8d\xd0\x0d\x5a\x3e\x1a\x1b\xa0\xb4\x8c\xde\x81\x29\x9d\xd2\xc5\x03\x86\x04\xf4\xe9\xa2\x2d\xa9\xd0\xbd\x9c\xec\xae\x8b\x47\x56\x45\x5c\x10\x1b\x42\xeb\x5a\xae\x09\x47\x2d\x93\x82\x6e\x90\x74\x9c\x53\x78\x3b\x73\x88\x70\x13\xf4\x07\x30\x39\x74\xb0\x47\xe3\xa4\x15\xdb\xf0\xac\xe8\xb9\x8c\x27\x00\xd5\x39\x65\x77\x0f\x65\x66\xf1\x73\xbf\x85\x7e\xd1\x9e\xcf\xf1\xc7\x01\x24\x0d\xbd\x99\x9b\xcf\x2d\xdc\xd4\x82\xdb\x42\x2d\x06\xe0\xd0\x7c\x04\x4a\x38\x81\x7c\xc8\xd5\x92\x93\x84\x27\x33\x26\x82\x6d\xe4\x68\xae\x2d\x78\x8d\xa7\xb2\x27\x11\x16\xcc\x64\x41\x8c\xf3\x5a\xa9\xc5\xfe\x58\x0d\x8e\xd4\x62\x81\xd3\x26\xb0\x89\xd7\x71\x10\x59\x07\x42\x8c\xe9\x60\x95\xe5\x38\x26\x8f\x54\xa6\xb7\x8e\x07\x85\xd4\x28\x0f\xa7\x3b\x95\x02\x20\x31\x4a\x65\x6e\x6a\x9b\x01\xf1\x39\x69\x76\xbc\x21\xc3\x3f\x28\xf3\x86\x47\x7c\x9a\x8e\x14\xd2\x9a\x79\x81\x93\x85\x4e\x25\x58\x76\x10\x1b\x86\xa7\x55\xab\x90\xd4\x81\xd5\xf7\x4f\x99\x33\x4b\x63\xcf\xdb\x71\x58\x86\xe7\xb2\x86\x01\xfd\x12\x3e\xf4\x8d\x92\xf2\x3f\x62\x2b\x54\xcc\xf4\x93\xb7\xce\x5b\x60\xf8\x8f\x8e\xe4\x23\x50\x0f\x52\x40\xe0\xcc\x15\x42\x0b\x01\x0d\x25\xf0\x97\x22\xc7\xe2\xc8\x9f\x71\x17\x73\xa1\xa9\x5e\xd3\x33\x1b\xf0\x9b\x34\x63\xf3\x79\xcb\xea\x98\xc1\x5e\x3b\xe4\x1a\x90\x6a\x9a\x73\xa9\x1c\x34\xc2\x98\x2e\x18\x89\x25\x54\x98\x09\xc9\x33\x2c\x3a\x67\x2e\xf2\x00\xb2\x28\xdb\xaf\x4d\xd1\x8e\x77\x78\xd0\x43\x0d\xb1\x52\x38\x52\x64\x65\x45\x91\x1c\x08\xfa\x37\xba\xe5\x14\x23\x0c\x38\xb0\x92\x46\xd6\x20\x91\x02\x3e\x46\x0d\x92\x2a\x78\x67\x3c\x60\x4b\x1e\x9f\xc1\x0e\x5b\xf0\xe5\xf3\xe7\x9d\x87\xf9\x48\x80\x06\x4f\x33\xa4\x68\x31\xb0\x7a\x32\x59\x4c\x91\x55\xcc\x5f\x78\x92\xa1\x77\x91\xf9\x38\xe3\xb0\x48\xb0\x8e\x71\xc4\x13\xdb\xc5\x8d\xba\xd7\x83\x43\x06\x63\xb8\x21\xa0\x43\x77\xf8\xeb\x9a\x05\xe4\x53\xf3\x06\x68\x5c\x8c\x68\x8a\x96\x80\x1b\x9e\xe5\xae\x17\x57\x7c\xc3\x9b\xc6\x0d\x9f\x09\x1d\xb4\x39\xb2\x43\xe8\x13\x91\xad\x0b\x21\x4e\x44\x91\xc9\x17\xc0\x6f\xaf\xcf\x16\x80\x41\x16\x26\x4c\x2c\x74\x99\x25\x70\xae\xdc\xc0\x39\x7b\x03\x98\xe3\x0e\xe0\x00\xc7\x0a\x05\x97\x84\xd7\x0d\xbe\xde\x9d\xad\x30\xee\x76\xfe\x95\xac\xbc\x36\xe2\xeb\x5c\x20\x10\xfa\xb4\x54\xcf\x1b\xe9\x13\x72\xb7\x3d\x82\xf8\x15\x6f\x9c\x1b\xb2\xe5\x85\xc9\x2e\x79\xe3\xce\x00\x18\x9b\xa3\x9b\xb3\x2b\xea\xc4\x95\xc9\x66\x67\x97\xd4\x01\x60\x03\xae\x64\xe3\x90\x7a\x29\x1b\xbe\xcc\x9b\xbd\xca\x1b\xbd\x14\xc0\xbc\xe5\xab\xe6\x0d\xbb\xe0\x9b\xe6\x6c\x74\x7b\x76\x31\xde\xf0\x59\xe3\xd6\x5e\xf1\x9b\xc6\x85\x08\x68\x4f\xf3\x83\x10\xbd\x46\x97\x8a\xa5\x9d\xe8\x1b\xd7\x2c\x64\xd0\x39\xf8\x03\x9d\x65\xd0\xaf\x10\x7b\x28\xa7\x05\x36\xe1\x75\xeb\xc6\x07\x0c\xbe\x43\x75\x60\x24\xfa\x52\xa6\xb9\x1f\x56\xaa\x2e\x2e\x33\x6c\x21\x17\xef\x15\x45\x16\x88\xfd\x65\x44\x27\x71\x66\x20\xb8\x9e\xaf\x47\x26\xf5\x09\x21\x35\xc7\x3f\x4b\xfc\xa3\x8a\x8d\x9a\xcd\x85\xda\x11\xea\xf0\xa1\x41\x15\x71\xbc\xf8\x92\x87\x3c\x11\x3b\xec\x7a\x2b\x0c\xd1\x1c\x3c\x8e\xdd\x42\x20\x85\x36\x66\xbb\x1a\xda\x88\x51\xdd\x0c\x72\x05\x19\x43\x3f\xa0\x11\xb9\x1d\xa5\xa0\xef\xc8\x27\xa3\xf7\x43\x9f\x7c\xf3\x1a\xfe\x53\x4f\x07\x40\xd1\xcc\x27\xdd\x3d\xff\xa9\xe7\x82\x2b\x8a\xb8\x58\x64\xf7\x16\xfe\xb1\x72\xea\x2c\x48\xb9\xc7\x63\x2e\x8c\x87\x6c\x94\xe0\x85\xc5\xa5\x74\x28\xe9\xbe\x18\x1f\x3b\xea\x3a\x3d\x54\x06\x48\xd0\xac\x0a\xb0\x45\xa5\x27\x13\x18\xb8\x22\xab\xb0\x3f\x4f\x3e\x4e\x0e\xf6\x46\x84\xb2\x6c\x84\x5a\xd3\x15\xed\xc6\xcd\x94\x65\x4d\x0f\xdb\x14\x87\x80\x76\x9b\xf6\x7e\x71\xc5\x17\xd9\x4e\xe2\xcf\x57\xa8\x41\xc7\xd7\xbb\xe9\x6f\xc9\x6d\x06\xbf\xd9\x4d\x97\x01\x53\x66\x99\x70\x66\x18\xf0\xf6\xa4\xd9\x98\x8e\x8d\xb1\xfd\x71\xd6\xf8\xd8\x1a\x7f\x9c\xd5\x1f\xe8\xa7\x61\x42\xda\xc4\x7b\x3d\xa5\xef\xe4\xba\xb0\xbd\x60\x51\xa0\xfb\x2f\xf6\x03\x79\xab\xc9\x6a\x8b\x9a\xb9\x13\xa4\x9c\xaf\x76\xda\x8e\xe2\x84\x4f\x2a\x44\x0e\xf9\x2d\xa4\x5a\xa1\x35\xe1\x5a\xb8\x86\x2c\xf1\xf8\x7b\x27\x77\x8e\xda\xfe\x8f\xf1\x3f\x0f\xf1\xe2\xea\xa3\xf1\xb0\x4c\x82\x8f\x86\xd9\x16\xae\x97\x53\x73\xbc\xc8\xec\x59\x66\xa3\x3b\x55\x71\x4f\x0b\xd5\x45\x29\xa6\xee\xb8\x70\x35\xc7\x9b\xcc\xae\x45\x04\x34\xaa\xff\xe8\x48\x9c\x85\xf0\x65\x9d\xd9\x37\x99\x29\x74\x33\xa7\x3b\x60\xa3\xe2\x7c\x23\xa0\x56\x79\xcb\xb5\xd9\x32\x37\xc8\xdd\x39\xe2\xbd\xa2\x13\xdb\x4e\x40\x17\x89\xf6\x75\xc6\xf0\x20\xaf\x90\xe4\x5c\x02\x01\xe4\x66\x57\xbe\x5b\xf1\xed\x16\xbe\xa1\x53\xfd\xfd\x2f\xaf\xc9\x24\x6f\x5d\xf1\xe5\x05\xd6\x47\x9a\x80\x15\x1f\xdf\x62\xb1\xc0\x49\x52\x68\xee\x65\xc6\xae\x30\xf2\xcc\x67\xf8\x05\x82\xde\xad\xca\xff\x29\x43\x75\xbc\xa0\x18\x56\xcd\x0f\x6b\xf6\x86\x45\x59\x6a\xdf\x65\x0c\xde\x9a\xf0\x58\xb3\xaf\xe0\x19\x1e\x9a\xf8\xb5\x62\x93\x5c\x65\xc6\x1d\xf9\xf6\xde\x0a\xe7\x2e\x9e\x93\x78\x15\xa4\x36\xaa\x41\xce\xbc\xbb\x9f\xe7\x46\xad\x59\x43\xb1\x06\xca\xe9\xc7\x4a\x76\x89\xee\x4a\x81\xd6\x8b\xcb\xa9\x69\xa3\x63\xda\xd8\xab\xc2\x60\xc4\x0d\xd0\x8b\x12\xd0\x39\x0f\x0f\x00\xfe\x98\x07\xe2\x3d\x86\x77\x38\x6a\x33\x23\x36\x94\xb7\x35\x61\x2c\xe7\x88\x3b\x8b\x7c\x27\xb3\x0e\x39\x7a\xdc\x59\x00\x3f\xc0\xe4\xbe\xd9\xdd\x4c\x3f\x24\x01\xff\xb0\x9b\xf8\xc6\xb9\xe2\xef\x77\x13\xdf\x93\x8f\xd6\x57\x94\x5c\xad\x95\x2c\x60\x90\x41\x6f\x50\x4d\xc2\x7b\x1d\x78\xd8\x9b\xb7\x17\x78\xfb\x15\x26\x28\xd8\x9c\xfb\x77\xad\xe4\x66\x21\xf6\x9a\x32\x7a\x3f\x54\x5d\x4e\x43\x84\x64\xc2\xe5\xa5\x2f\x52\xd8\x54\x57\x59\xea\x19\xb5\xbc\x44\x8d\x85\xa6\xf4\xdb\x95\x16\xf5\xb4\xae\x60\x7e\x7e\x73\x02\xbc\xa0\x4d\xa2\xc0\x9f\x09\x27\x95\x8a\xe9\x82\xed\xff\x0e\x58\xa1\xb1\x07\x4b\x02\xaa\xbc\xb3\x93\x00\x58\x07\x22\x5a\xdf\x65\x4f\x0a\x76\x57\x2b\xcc\x60\x6a\x0d\xe1\x43\x47\x25\x34\x6a\xa6\xb4\x0b\x94\x5f\xc4\x1b\x24\x27\xd7\xde\xed\x1f\x2a\x15\x5f\x30\x8d\x0c\x5b\x54\x1a\xbe\x40\x62\x4d\xd0\xe7\x30\x35\xf7\x8e\xdd\x61\x57\xb6\xc5\x5c\xf8\x37\x83\x67\x0f\x7e\xe7\xb6\xb5\xdd\xc1\x54\x1f\x72\x08\xfe\x90\x89\xc8\x69\x1b\x58\xcd\xf2\x9a\x4d\xbc\xb4\xae\x60\xfe\x82\x2a\x05\x91\x4a\xc9\x3d\x52\x62\x28\x3f\xc7\xe0\xce\x85\xbf\x13\x12\xa5\x4b\x0e\xec\x4f\xd8\x10\x13\x6f\x6a\x16\x42\xe5\xad\xde\x9c\xbb\x8c\xe2\xd9\xe3\xba\xbc\x2c\xc8\x75\xf6\xa0\xa7\x37\xd8\xe4\x8c\xe7\x9a\x82\xbe\x09\x34\xa3\xbc\xfc\xf2\x48\x58\x8e\x7f\x42\x0a\x79\x4e\x72\xfd\xe5\x73\x5f\xde\x0f\x04\x90\xb8\x10\x89\x0b\x4c\x0c\x1a\x3c\x9b\x2c\xa7\x40\x7b\x8c\x6e\x44\x67\x03\xa8\x4c\xc6\x07\x2f\xea\x37\x59\xd8\xe0\x01\x79\xf3\x06\x7a\x61\x26\x78\xdb\x4a\x85\x8f\xc8\xb8\x99\x84\x40\xc8\x4c\x52\x62\x32\x81\x95\x5a\x1d\xf0\x24\x17\xee\xd5\xa2\x69\xc9\x18\x19\xde\x0c\x86\x68\x85\x0f\xbf\x1e\xd6\x85\xa1\xcf\xb9\xf1\xc6\x69\x26\x75\xdf\x6c\x03\x48\xaa\xc6\x37\x07\xaa\x5c\x1f\x9f\x74\x09\x32\x83\x31\x02\xe9\xbd\x9a\x6c\x70\xa8\x40\x7c\x67\xf8\x74\x3e\x65\x57\x90\xff\x92\x03\x14\xee\xea\xe1\x68\x3d\xd9\x34\x00\x1d\x35\xce\xa7\x28\x35\x07\xf4\x04\xe8\x2f\xc9\xae\xc4\xe3\x39\x23\x21\xce\x0b\x64\xdb\xec\x2b\x94\xd5\x8b\xc7\x4b\xe1\x0f\xca\xbe\xdb\x6e\x63\xa8\x54\x2b\x59\x64\x9f\x17\xd9\x03\x99\xdd\x08\x9a\x73\x13\x95\x18\xa0\xed\x84\x00\xab\x8f\x45\x10\xd7\xcb\x9d\x71\xdc\xf2\xf5\x64\x49\x3d\x84\x31\x5c\xc0\xcb\x82\x5e\x96\xd3\x91\x71\x2b\x7c\x8e\x3e\x3c\x5c\x88\x07\x13\x25\xe0\x34\x8b\xf2\xcb\x73\xf9\x61\xac\xe4\x24\x17\x4a\x40\x72\xbb\xb5\x55\xda\xad\x4a\xbb\x00\x70\xbb\x47\x47\x7b\x36\x42\xde\x23\x33\xef\x1a\x86\x52\x7c\x12\x4d\x35\x94\xc6\x92\xec\x12\xc5\x15\x2f\xe7\x48\x77\x73\x98\xdb\x4a\x9d\x55\x5c\xf5\x49\xe1\x32\x3a\x90\xe8\xe8\xa9\xc2\x0b\x92\x40\xa0\x50\x5e\x72\x4b\x48\xad\x09\xd6\x94\x84\x12\x41\x6b\x0d\xa4\x75\x09\x7d\x3d\x56\x1f\xfa\xdb\xd1\x6b\x48\xb0\x06\x84\xcb\xf7\xe8\x8b\xae\x52\xcc\x55\x25\x18\x29\x57\x12\xa9\x4a\x2e\xb2\xab\xc5\x57\xd4\xe3\x50\x3d\xaa\x16\x47\xd5\xf2\x12\x71\xca\x13\xab\x40\x5a\xdc\xa3\xc9\xc6\x2a\x5c\xac\xc2\xdd\x29\x9e\x97\x86\x15\x86\xc1\xfd\x3d\xcc\xb4\xdb\xcd\x3c\x53\x2c\x32\xc5\x90\x49\xc7\x73\xb0\xa8\xdd\x43\xaa\xde\x55\xb1\x3c\x94\xe4\x83\xee\xa6\x48\x16\x80\x51\x19\x94\x49\x3c\xe0\xcd\xbb\x26\x4a\x30\x22\x7c\xdc\xc0\xe3\x06\x85\x8f\x4d\x0f\x58\x1b\xbf\xee\x37\xa2\x3a\x85\x8a\x70\xcf\x9c\xba\xd3\x9e\x51\x2d\xeb\xb3\x5c\x30\x40\xa1\xda\x61\xe5\xb5\x5d\x60\xfc\xd7\x77\x4d\x28\x12\xa0\xc4\x61\xd3\xe4\x51\x3d\x90\xe7\xdf\x33\x6b\x5b\xb4\x7d\x74\x04\x1b\xa2\x54\x03\x25\xbf\x7c\xac\x1a\x55\x8f\x6a\xad\xa4\xa1\x4e\xf7\x34\xeb\xbb\x22\x1e\xfe\x1d\x95\x2c\xde\x61\x3c\x64\xaa\x47\xbe\x89\x77\xad\xf1\xd0\x2d\x1e\x39\xd9\xf7\x93\xb5\x93\xe6\xd1\xab\xd1\xad\xa7\xef\xa2\x9f\x76\x0a\x19\x0e\x3b\x67\xd2\x61\xc0\x0b\x25\xbc\x75\xca\xe6\x7c\x8e\x72\x8f\x25\xa1\x48\x0c\x8f\xc4\x17\x80\x8e\x78\xab\x03\x87\x49\x6b\xd8\xa7\x43\x84\x1c\xb5\xe4\xfa\x0c\x2d\xac\x4c\x9f\x32\x80\x87\x11\xd7\xa1\xb2\x53\x14\x0b\x59\x03\x75\xcf\xe2\xb6\xa0\x3d\x43\xaa\x73\x62\xd3\xcc\x09\xd6\x4b\xc7\x8e\xb9\x05\x78\xfb\x99\x95\xdf\x31\x39\x74\x90\xad\x81\xcf\xdd\x90\xeb\x9c\x95\xda\x93\x97\x85\x13\x18\x71\x8e\x59\xa3\xcb\x33\x0f\x4f\x52\xd3\xe1\xe7\x78\x23\x3d\x47\x03\x78\xc1\x82\x2c\xd1\xbe\x96\x30\x07\xdb\xf0\x65\xeb\xae\x39\x07\xe8\xdd\xc1\xd3\x06\x9e\x36\xcc\x58\xf3\x4d\x7d\xd3\xb8\xab\xdf\x99\xe4\x54\x25\xae\xfb\x50\x41\xdd\x80\xc7\x42\x89\x6f\x6d\x9a\xcd\x0c\x8f\x96\xf6\x9a\x6d\xea\x7c\xcd\xee\xf0\x0f\x56\x06\x85\x0d\x38\x90\x5b\xb7\x1e\x86\xc8\x6a\x1b\x4b\xf9\xd4\x50\x49\x26\x8a\x26\x60\x8e\xef\xea\x33\x06\x2d\x37\x44\x81\x4e\x73\x86\xc2\x8b\x0d\x1e\x26\x33\x92\x43\x40\x62\x5c\xbf\x31\x49\xb0\x81\x3a\x2c\x80\x01\xef\xe0\xa1\x83\x0f\x44\x32\xcc\x4c\x53\x4a\x04\xbc\xe7\x57\x23\x18\xe8\x0a\x07\xea\x60\x95\xc6\xa6\x09\xbf\x68\xa7\xe0\x60\x95\xc6\x1d\xbc\x6e\xe0\x15\xeb\x5d\x50\xa9\x9f\x32\x60\x35\x77\x65\x87\xc6\x0a\x36\x1e\xfa\x7e\xc8\xaf\xf4\xa1\x5e\x43\x54\x8c\xd6\x03\x77\xde\x0c\xef\x7f\x48\xd6\x61\xa0\x6f\x0f\x53\x82\xbb\xc8\x9d\xf7\x82\x72\x03\x8a\x69\xdd\x01\xb8\xd7\x77\xd8\x11\x7c\xd8\x98\x36\xa6\x35\xb9\x81\xa9\x4d\xfa\xcb\xb1\xaf\x66\x3d\xc1\x3c\xe2\xc3\x86\x3e\x60\x81\x0d\x7e\x30\x47\x2e\x2d\x26\xb5\x46\xc4\x2a\x95\x8b\x04\x45\xf3\x8e\x10\xb3\x3d\x0d\x65\xad\x00\x65\x39\x14\xc5\xda\x39\x7c\xb7\xb0\x5f\xec\x5c\x14\x3b\xc7\x62\x4f\xe7\xf2\x03\x51\x2a\x50\x8d\xbd\xda\x37\xcb\x79\xa4\xf4\xbc\x4a\x09\x37\x1c\x87\x76\x83\x6a\x9d\x63\xad\xb9\x4e\x72\xb9\x01\xd9\x1e\x90\xd6\x07\x35\x63\xf7\xdb\x5b\x3e\xde\xde\x12\xdb\x9b\xc7\x3e\x65\x78\xea\x79\x27\x8a\x26\x58\x54\x20\xb2\xa7\x15\x5c\x3c\xde\x95\x45\x51\xdf\xd7\x81\x74\xcd\xc3\xba\x98\x48\x6d\x33\x63\x65\x8b\xd8\xb9\xf1\xd3\x27\x8a\xa0\x6e\xe4\xb0\x6e\xb0\x64\xba\xf4\xd2\x4a\x83\xe6\x2a\x4b\x80\xbd\xd6\x67\xd4\x3a\x2d\xe6\x27\x0a\x8e\xb0\xed\x78\x0c\xc7\xff\x99\x85\x3a\xd5\x36\xfc\x02\x96\x70\xe5\x45\xa1\xdc\x23\x12\xa3\x2b\x4c\x1a\x8a\x10\x60\x14\x27\xc4\x10\xa8\xd9\xc4\xab\x4b\xbc\x90\x71\x44\xc9\x83\x0e\x03\xc5\xdd\xf8\x33\x4f\x50\xc9\x9e\x76\x77\xea\xa2\x5d\x98\x35\x82\x73\x72\x84\x01\x7f\x3c\xbc\xd1\x94\xbc\x04\xa6\x27\x32\x5d\x7a\x06\x3c\x87\xcf\x23\x6f\x92\x29\x32\x8e\x88\xdd\xa9\xf4\x8a\x25\x51\x32\xe0\x9e\x89\x7a\xde\xc9\x20\x4a\xa1\xa5\x96\xe4\x9e\xe8\xe6\x0c\x35\xc2\x1c\x71\x49\x16\x15\x1c\x94\x23\xa3\x34\xc9\x0b\x0c\x9f\x47\xd0\x36\x46\xb4\xc9\x9d\x4c\x94\x4c\xd1\x80\x55\x99\x45\x2b\xc3\xac\xc7\x9a\xd3\x1b\xb7\x38\x5f\x92\xfc\x7c\x81\x73\x2f\x10\xf6\x17\x88\x8a\x73\xad\x47\xf7\x2c\x25\xc5\x3f\x23\x06\xfc\x07\xdc\x8b\xe8\x3a\x4f\x59\x2c\xb1\x3e\xe4\x51\x79\x13\x99\x37\x06\x80\x40\xe7\x6b\xc2\x71\xad\x66\x67\x29\x47\x8a\x2a\x1e\xca\x18\x60\x35\x51\x8f\x53\xb3\xaa\x84\x00\x18\x95\x90\x8a\xfe\x58\x42\x3c\x42\x89\x46\x43\x15\x97\xdd\xa1\x14\x09\x65\x91\xb2\x37\x14\x31\x12\x26\x6f\x80\x5a\x74\x1a\xc6\x78\x45\x63\xd4\xee\x6a\x6c\x8d\x1a\x59\xf2\xd3\x46\x7c\xda\xe0\xa7\x4d\x8d\xdd\x68\x9f\xd6\xb2\x18\x20\x79\xac\xa2\x48\x97\x65\x00\xc7\x63\x79\x8a\xcb\x85\x04\x44\xc5\x9e\x9f\x9b\xbb\x80\x43\xb6\x8e\xc3\x79\x5a\xa8\x90\x9e\x0b\x15\xd2\xe2\x72\x61\x2f\xfb\x1c\x9b\xf0\x0f\x34\xb1\xdc\x6b\xc2\xa7\x26\x96\x4f\x6d\x82\xb2\x93\x03\xba\xe8\x40\x13\x0b\x73\x17\xbe\x11\x35\xb1\xd0\x9a\x58\x55\x35\x51\xca\xbe\x28\x88\xab\x9c\xb8\xcb\x09\xbd\x2a\x13\x0c\x81\x57\x8c\x56\xc7\x14\xdb\x3c\x5a\x3f\x92\xcb\xa2\x4c\xb3\xd8\xa9\x10\xc5\x20\xf1\x0e\x5b\x1f\x50\xc8\x95\xb7\x04\x44\x19\xc5\x94\xd1\x30\xa5\x19\xad\xb1\x81\x27\x0c\x0d\x07\x89\x84\x4d\x04\xc5\x5e\x63\x7f\x64\xc5\x07\x95\x96\x16\x49\x40\xee\xa9\xd4\x7f\xa0\x96\xdf\x1e\xba\x43\x25\x1c\xa1\x07\x86\x45\x56\x51\x96\x78\xd1\x0d\xc6\x3a\x12\x85\xfe\x25\xab\x17\x1f\xb2\xbc\xd9\xdf\x21\x9d\x20\xeb\x09\x95\x58\x04\x12\x32\xe3\x06\xb2\x84\xb5\x08\xc3\x51\x11\x59\x39\x0f\x78\xd7\x62\xcb\x80\x77\xd8\x22\xc0\x3b\xb2\x51\xc1\x73\x2c\x7d\x2f\x46\x97\xd8\x9b\x03\x98\x31\x93\xec\x04\xa0\xa1\x49\x36\x25\x5d\x68\xda\x45\x59\x6b\xe6\xad\x51\x75\x72\x24\x24\x6b\x88\x7e\x80\xe0\x5f\x63\x20\x28\x44\x4a\x52\x35\xda\x37\x99\x81\xea\x20\xd4\xcd\x90\xa1\x8a\x13\x95\x33\x71\x6b\xb8\xb9\x1e\xb2\x16\x81\x8e\x0c\x30\x47\xcd\xa6\x8b\x7a\xc9\x66\x24\x6f\xd5\x00\x13\xb9\xa8\x0b\x89\x6e\xb0\xf0\x2e\xc4\x87\x47\xd1\x01\x59\x61\xa3\x33\xc2\x88\x54\xbe\x60\x94\xe9\x92\x06\x8e\x4e\x3f\x98\x41\x76\x1e\x88\xab\x22\x3d\x03\xa0\x86\xbd\x3e\x3d\x3c\x40\xb1\x99\x17\x78\xa9\xf7\x4d\x51\x5a\x2d\xc7\x5f\x32\x23\xdb\xf7\xa4\xcf\x32\x8c\xad\x66\x90\xeb\x60\x59\x80\x44\x0b\x24\x06\x48\x29\x18\x3d\x32\xd7\xb2\xdf\xa6\xf2\xed\x06\xac\x3d\x24\x0a\xa6\x1e\xa5\x40\x02\x25\x73\xcf\x47\x5e\xd5\x47\xc1\xae\x5f\x68\xe8\x63\x5d\x4f\x33\x95\x42\xdf\x95\xca\xf4\x3a\x1f\xfd\x93\xcc\xa1\x3c\x61\xfc\x4d\x4e\x34\x04\x84\x9e\x54\x4c\xb7\x19\x8f\xbd\x83\x05\x11\x0a\xff\x06\x6a\x9c\x95\x95\xf0\x54\x17\x49\xcd\x49\x4d\x1c\x80\xe3\x97\x52\x56\x75\x35\x32\x4a\xf3\x02\xa4\x89\xb5\x3b\x91\x29\x4b\xf5\x89\xc4\x21\x69\x60\x57\x12\x15\x9e\xe6\x60\x27\x15\x8f\x50\xe7\xc0\x21\x7b\xea\x97\x09\xbf\xd2\x6e\xc8\x59\xee\x9c\xc5\x56\x8b\x84\xf8\xe0\x3b\xd2\xb2\x04\x0e\x55\xf4\xa3\x9e\x61\x8f\xe0\x54\xc0\x9f\x0d\xcf\x50\xf3\x0f\x90\xa7\x5f\x2c\x7a\x79\x2b\x49\x12\x1c\xe0\x2f\x70\x0f\xc4\xaa\x83\xe3\xb8\x2d\x9f\x6c\x54\x12\x0f\x9e\x47\x23\x13\xf8\x11\xee\x4f\x82\x29\x43\x26\xde\x11\x5f\xeb\x31\xb9\x31\x6b\x70\x77\x97\x7b\xce\x7d\x5a\xcb\x4e\xa2\xc7\x4d\xd2\x57\x14\x37\x9a\x79\x37\x34\x3d\x1d\xc1\xe5\xf8\xa8\xe4\x1d\x17\xe1\xc1\x60\x00\x86\x37\xf1\x35\x01\x6d\xa7\x11\xeb\xca\x54\x14\x3b\x55\x84\x46\x8d\x35\x64\xef\x69\x21\x51\x43\x23\x22\x1f\xc9\x2c\xf7\x1d\xda\x4e\x29\x09\x5d\xf3\x48\x5d\xa9\x0a\xb4\x64\xa0\x0f\x46\x62\xd1\xf3\x4b\x8d\xaf\xe0\x4c\x32\x94\xdc\x90\x08\xeb\xfb\x8c\x74\x92\x4a\x93\xed\x1f\x12\xb6\x44\x62\x30\x30\x2f\x39\xbd\x45\xa4\x57\x49\xb1\x8a\x54\x9c\x44\xcb\x8d\x54\xad\x41\x6a\x83\x1c\x78\x55\x79\x2b\x7a\xc4\xbb\x04\xaa\x2d\x54\x15\x41\x5d\xd2\xea\x22\x99\xd9\x4c\x80\xcf\xcf\x83\x74\x09\xab\xa1\xab\xc4\x98\x9b\x6d\x97\x55\xb6\xef\x8f\xfd\x03\x95\xa1\x04\x7b\xc1\x97\x75\xc3\x3a\x9b\x8f\x9b\x1d\xbb\x63\x02\x11\x68\xcc\x9b\x6e\x7d\x61\xb6\x01\x64\x70\xf6\xa2\xe0\xfb\xa6\x90\xa9\x03\x59\x3c\xd3\x24\x21\xe2\x14\x80\x95\x75\x23\x50\x1f\xea\x14\xaf\x83\x71\xa5\x20\x14\xcd\x4b\x9a\x01\x50\xaa\xdb\xea\x30\x66\x1e\xac\x8b\x70\xca\x22\x29\x22\xbf\xa9\x8c\x1a\x39\xc3\xd0\x2a\xf7\x33\x27\x75\x6c\xca\x2d\x76\x8a\xc3\xb1\x5e\x5d\xb4\x9c\x14\xa2\xe5\xa4\xc1\x9d\xfa\xba\xb1\x60\x6b\x47\xa6\x2c\xf1\x4a\x6f\x26\x91\xaf\xb8\x25\x06\x04\xbc\x0e\xa4\x6f\xda\x37\xe8\x2a\xa2\x88\xc3\xb7\x8b\x18\x9f\x8a\x89\xcb\xf8\xfb\xa9\x58\xb8\x18\xc3\xd7\xa3\x62\x35\xe4\xa7\x9b\xc2\xe6\xc6\xae\xce\xd7\x94\xf4\x45\x49\x7f\xab\x8c\x65\xd6\x28\x89\xd6\xc8\x0b\x18\x44\x59\x3e\xa6\xed\x32\x52\x43\x42\xfe\xc5\x58\xe6\xba\x7f\x39\xef\xe2\x48\x83\x27\xe7\xe0\xa6\xfb\x66\x7f\xd3\x05\x87\x62\x80\xee\x06\x07\x2d\x6e\x52\x26\x7e\x71\x7c\x78\xe8\x0c\x50\x7b\x9b\xd2\x9d\xca\xbc\x20\x5f\x12\xe8\xf1\x88\x2e\x80\xd7\x5e\xbc\xc2\xeb\xc3\x80\xcd\xc9\xd6\xa4\x48\x49\x20\x85\xfa\x9e\xab\x35\xf1\x58\x2f\xcf\x56\xc4\x5c\xe9\xa2\xbc\x35\xac\xb1\xd5\xd9\x1a\x10\xef\xda\x14\xb4\x95\xcc\x8f\x19\x27\x6b\x64\xc4\x66\xf8\x93\x88\x57\x52\x96\x58\xf0\xce\x68\x29\x35\x8b\xb4\xfc\x0b\x91\xbf\xc1\x93\xc9\xa2\xd9\x91\xb9\x59\x22\xd2\xb1\x60\x4e\x5c\xcb\x45\xbf\x81\xf5\xee\x20\xc1\xe1\xfa\xb0\xe0\x23\xf2\x96\x80\xc4\x9e\xef\xef\x2c\xfb\xe4\xeb\xd7\x7d\x14\xcf\x74\xc3\xc2\xc7\x17\xfe\x01\x4f\x58\x37\xe2\xc2\x1a\x35\x1e\xa0\x9b\x6a\x6f\x44\x14\xd6\xe9\xa9\xfb\xe2\x40\xd5\xb3\xa2\x6a\xd7\xcf\xb7\xce\xdd\x57\xaf\x7c\x5d\xa5\xe7\xb1\x22\x91\x28\x12\x49\xf7\x1e\x5f\xbd\x37\x65\x54\x93\x92\x02\x42\xe2\xcf\x3c\xa1\x76\xb0\x77\x7d\x4e\x26\x60\xb9\xfe\x1b\xd2\xa0\x58\x28\xf0\x4d\x32\x5f\x20\xa7\x2a\xbe\xf4\x70\x2b\x30\x7a\x6c\x3e\x72\x79\x95\x01\x5a\x6d\x22\x97\xb9\x25\x71\x08\x43\x83\x73\xb2\x3b\x4a\x74\xc3\xc8\x58\x32\x72\x1e\x47\xe4\xcd\xdc\x33\x67\x6c\x38\x0d\x8e\xc2\x65\xbc\x44\x42\x52\xde\x43\xcd\x29\x57\xa6\x25\x79\x9a\x5a\x6d\x89\xe6\x8c\x44\x3a\x32\x41\x1f\x66\x32\xb1\x4a\xa1\x22\xef\x7f\xae\xe4\x5e\x54\xb1\x65\xb5\x99\x37\x77\xb2\x00\x00\xe4\xf8\x88\xeb\x0b\xe8\x25\x7e\xb0\x8c\x32\x2f\x4d\xbd\x6a\xd8\x11\xc8\x72\xc3\xb9\xb0\xd8\xb3\x8c\xf8\x5f\x01\x84\xfc\x52\x19\x08\x2b\x29\x8c\x97\x66\x66\x16\x51\x5b\x99\x34\xec\x8c\xd1\x9e\x8f\x2e\x6a\x49\xb9\xfe\x0c\x7d\xfb\x3b\x3c\x26\x2f\xa7\x22\x50\xf3\x76\xb7\x1e\x17\x32\x73\xc3\x69\x46\x24\x82\xef\x2a\x00\xb9\x5b\x76\xeb\x2f\x16\xc1\xc1\x5e\xeb\x8e\x6c\x8a\x11\xcc\x85\x8b\xe4\x25\x9f\xab\x94\xdc\x1c\x74\x81\x36\xa4\xc0\x8b\x41\x97\x3d\xc2\x2a\x3b\xe3\xc8\x74\x39\x43\x69\x1c\x2a\x87\x4f\x36\x85\x73\x4c\xb5\xa6\xcd\x39\xd9\x36\xc2\x53\x5e\xea\x5e\x10\xb6\x68\x7c\x68\x14\xc5\x9b\xe2\xb1\x29\xd4\xce\xda\x46\xb7\xee\x98\xb9\xd3\x7a\xb4\x16\x44\xbd\xec\x3c\x6b\xac\x65\x75\x46\x7e\x83\x47\xf5\xa2\xaa\xed\x02\x81\xe5\x36\x79\x36\xf6\xdb\x59\xdd\xb1\x2d\xe9\xec\x25\xe0\x6e\x01\x59\x35\x32\xcc\xdc\xe4\x41\x61\xab\x8a\xea\x43\x4e\x38\xfb\xfa\x75\xd0\x69\x67\x05\x4b\xfc\x95\x8b\x80\x22\xd1\xab\x8d\xa3\xb2\x14\xdf\xdb\x3c\x2e\x0b\x49\xf6\xb3\xf0\x68\x6f\xd1\x38\x08\x07\xab\x40\xf2\xec\xb3\x17\x47\xb6\xeb\x0b\x5d\xa3\x9c\xb8\x4e\x52\x34\x59\x5f\x1d\x94\x86\xfa\x05\x3f\x4e\x6b\x49\x85\x23\xc7\x8d\xe3\x31\x65\x61\xa9\x93\xfa\x01\x23\x3f\x58\xba\x21\xb4\x4c\x44\x9e\x02\xd6\x5d\x50\xac\xbb\x79\x11\x03\x60\xcd\xd3\x31\x50\x9b\xed\x25\x71\x1d\x0b\x34\xae\x74\x81\xd1\xc0\xf6\x22\x64\x9d\xe6\x13\xbf\x01\xd3\x6f\x44\x2d\x7a\x9e\xe2\x86\xd9\x08\x2e\x66\x71\x66\x11\xf8\x72\x9e\x65\x89\x37\x33\x01\x64\x62\xce\x19\x19\x46\x1f\x1d\x39\xcf\xe1\xa1\x33\x25\xb6\xcb\x9d\xa0\x60\x07\xc3\x6a\x02\x8a\x83\x41\x75\xd8\x82\x4c\x3b\x23\xbc\x3d\x5a\xab\x8d\x18\x96\xd8\x1c\x57\x9e\x92\x68\xe9\xa3\xe8\xc3\x98\xaf\xf1\xa8\x5c\xee\x1e\x90\x5f\x4f\xe1\x11\xda\x7a\xea\x21\xf6\x3a\x95\x6e\x8f\xe9\x94\xba\x02\xd4\xff\xd4\x03\x64\x4f\x94\x9a\x8e\x2b\xd0\xe8\x42\x98\xb7\x6c\xed\xbc\x21\xa2\x07\xe7\x14\x5c\x3c\x74\x37\x4f\x3d\xfe\x9f\x3d\xcb\x09\x80\x32\x67\x7d\x90\x0e\x0c\x0b\xe6\xd1\xd3\x4d\xe6\x71\xf1\x38\x14\x22\x07\x16\x60\x26\x3c\x3d\x51\x3c\x88\x84\x2b\x3d\xd1\xfc\x86\xc1\x3e\x70\xc6\xef\xcb\xf8\xd2\xed\x88\xc4\x53\x78\x23\x87\xb1\x43\x7e\xc9\x80\x10\x2d\x8b\x25\x62\xde\x48\x0c\x4d\x3a\x43\x59\xce\xa1\x37\xb1\x29\xd5\xf9\xe3\xba\x81\xeb\x36\x67\x90\x01\x75\xb5\x62\xe0\xba\xc4\x6f\x60\x22\xbe\xae\xaa\xb8\xc1\xe7\x7a\x7d\x55\x59\x9a\x98\x45\xe9\x97\x5d\xfa\x48\x25\xb7\xbb\x2c\x80\x7f\x62\xa7\x1c\x6e\x53\xb2\xd1\xa4\xa5\x5c\xc5\x48\x8b\xd3\xfd\x06\xc7\x41\x58\xbd\xc4\x55\x87\x3b\x5c\xf5\x53\xf9\x85\x78\xc7\xdd\xe9\xe3\x8b\x43\xcc\x9b\xf7\xf0\x50\xe9\xcd\xc7\xb3\x1b\x05\xf1\xb8\xa7\x71\xf2\x25\xa7\x5b\x72\x6f\x7c\x2f\x62\xfa\xe8\x6b\xaf\x6c\x32\xb2\xb3\xf6\xa4\x30\x27\xe1\x51\x69\xed\x65\xca\xbb\x02\xa0\x2e\xc0\x17\x24\xbd\x87\xe9\x5a\x22\x93\xb0\x94\x62\xa5\xd6\x8a\x37\x97\xad\xcf\xec\xdf\x98\x1e\xa3\x72\x08\x3c\xcd\x51\xe6\x91\x5b\x7e\x40\xff\x01\xc7\xcd\x81\x82\x9f\x8f\xe8\x63\x79\xb6\xef\x9e\x2f\x5a\x77\x14\x67\x89\x62\xd3\xde\x9d\xad\xe9\x75\x2d\x5e\x49\x88\x74\x76\x23\x7e\xc9\x3a\x80\x5c\x8f\x60\xbd\x33\xee\x18\xc0\x5e\xc0\x3a\x6b\x42\x0d\xc0\x53\xb8\x78\x7b\x6e\x40\xf1\x86\x63\xac\x01\xb3\xb5\xbb\x8d\x99\xc9\x36\x90\x0e\x47\x89\x21\xeb\x78\x78\xe8\x98\x95\xdd\x80\xb3\x16\x4a\xce\xd0\x8f\x9f\xb0\x4e\x11\xf2\xab\x4d\xb1\x12\x93\x1d\xd9\x92\x66\x97\xcf\xef\x5f\x90\xe2\x36\x53\x72\x26\x1b\x59\x7b\xd4\xb1\xf3\xa6\x4a\x3a\x9c\xf2\x38\x97\x0e\xeb\xe2\xa6\x42\x82\x26\x1d\x13\x28\xe1\xd8\xc8\x39\x8b\x00\xab\x47\x66\x2c\xf0\xb2\xe1\x4f\xa2\x29\xcf\xf8\xfd\xa5\x8d\x4f\x4c\xcc\x80\x9d\x16\x8d\x1a\x18\x4b\x26\x9a\xea\x62\xd8\x4c\x99\xfa\x3f\x3c\xc0\x81\x22\x7b\xe9\x88\x9f\xcf\x40\x23\xac\xa4\x3a\xa4\x88\x98\x48\xc9\x3e\xd0\xe7\x66\xcb\xe1\x99\x59\xc8\x9b\x54\x8d\xa5\x38\x49\x9e\xae\xab\x9b\x0f\xc2\xcb\x45\xbd\xba\xd4\x2d\x6c\xf9\x63\x6f\x02\x7f\x9b\x18\x36\x09\x2d\x8a\x49\x5c\x28\xc9\xd5\xfb\xb7\x68\x4f\x20\x54\xd0\x85\xcf\x84\xd6\xe7\x46\x3a\x49\x0b\xd7\x1d\xad\xcf\x44\x00\x8e\x61\x96\x3e\x03\x20\x3f\xc3\x1c\x87\xad\x4b\x16\xa3\xa5\x38\x1c\xca\x50\xff\xe7\x26\x6a\xcf\xc3\x57\xbf\x10\x75\xef\x67\x36\x47\x79\xef\x5e\x70\xdc\x27\x64\x44\x24\x13\x1e\x1e\x28\xd6\x43\x31\xc2\x58\x2c\x8e\x4b\x32\x59\xfa\xdc\xc8\x73\xe2\x1a\x59\x35\x8a\x81\xae\x8a\x22\x99\xe4\x9c\xef\x45\x98\xa2\xdc\x65\x30\xd2\x50\x48\x3c\x21\xbb\x81\xc8\x7c\x17\x46\x12\xb9\x43\xd5\x09\xac\x80\x15\x6c\xbd\x08\xfe\x2e\xb9\xdb\x5a\x8d\x22\xfe\xda\xc7\x50\x6a\x19\xbf\xf6\xd1\xf5\x66\x04\xf3\x3a\x32\x5d\x7c\x73\xc9\x5f\x8b\x8f\xb7\x0c\x7e\x0b\x15\xbd\xd0\x95\xfd\xe7\xc6\xbc\x99\x01\x40\x02\x18\x78\x04\x03\xcf\x10\x4a\x31\x5d\x1f\xbf\xf0\x8d\x97\x50\x17\xa3\x48\x5d\x21\x6d\xd9\x06\x8f\x59\xd2\x40\x4a\x7c\xde\xa0\x46\x51\xe1\x13\xdb\x6e\x60\xe3\xf8\xc9\xc7\x3e\x1c\x1d\x3d\xa3\x76\xe8\x06\x21\xe5\x11\xb4\x07\x20\x98\x37\x13\x8a\xd7\xf2\x8c\xfa\x42\xf7\xd3\x18\xac\xca\xc5\x6f\x41\x73\x49\xc6\xfa\x6a\x03\x79\x05\x94\x7c\xb9\xeb\xea\xb4\x6b\x4b\x3b\x0e\xb7\xab\xb0\x55\x79\x0c\x87\x93\x99\xbf\x38\x9f\xc4\x33\x6c\x9c\x0b\x1f\xc9\x34\xd2\x65\x0a\x84\xd5\x7a\x81\xd9\xd1\x0d\xc4\x8e\xef\xdf\xc7\xdd\x52\xa7\xb9\xab\xe9\xa7\x9f\x0a\x81\xf2\xa6\x8d\x8e\x15\xc7\xbe\xd8\x4e\x50\x8d\xb4\x19\x24\xdf\xe6\xa8\xc1\x72\xf1\x5f\xd6\x48\xb5\xf8\xa2\x46\x97\x6a\x97\xc8\x3e\x2a\x21\x7b\x37\xc8\x92\x92\x3f\xa3\x03\xb4\x06\x3a\x30\xd9\xa5\x36\x5c\x32\x89\x46\xc5\x59\x3c\xbd\xdd\xbd\xdb\x1e\x7d\xab\xe3\xb5\x4f\x5a\xe8\x2b\xc0\x26\xf9\xe4\x8b\xa0\x11\x1b\xfe\x19\x9f\xd0\x8f\x01\xa4\x46\x63\x58\x51\x1e\x75\x13\xb0\x4c\x48\x34\x47\x54\x20\xf2\x84\xbf\xf1\x85\x2b\x9f\x0f\xf4\xbb\x44\x43\xb3\xa6\x10\x23\xc1\x99\x8f\xc4\xf2\x5d\xc3\x03\x8c\x9d\x68\x3c\x20\x75\x2e\x1b\x57\x21\xf1\xa6\x8b\x3a\x51\xb1\x5a\x57\xb0\x22\x49\xf3\xcf\x24\xff\x31\x5b\xbb\xb2\xc8\x12\x98\xaf\x05\xfc\xd5\x8a\x75\x9a\x58\x72\x0c\xcf\x6d\xf8\xb5\x3b\xa6\xac\xa0\xb8\xaa\xfa\xaa\xe5\xe9\xe1\xf2\x8c\xe5\xf2\xcc\xf8\xb3\xce\x7f\xbf\x38\x4b\x22\xd2\xaf\x20\x59\x72\x57\xef\x92\xb8\x15\xeb\x29\xfe\xfa\x55\x29\xaa\x7a\xa6\x57\x15\xeb\xcb\x31\xdd\xa3\x3d\x80\x6b\x3a\xb8\x1c\xf5\x10\xa1\xc4\x6b\x02\x53\xe4\xeb\x7a\xf2\x19\x6a\x37\xc7\xe4\xfa\x7e\x92\x4d\x25\x58\x51\x4e\x9f\x8e\x2d\x1b\x55\x49\x84\xf7\x21\x65\xc4\xfa\xf0\x60\x9d\xf1\x18\x3e\xc5\xfa\x81\xed\xa9\x1b\x2b\xaf\x74\x63\xe5\xa3\x3b\x7b\x75\x0a\xe9\x77\x51\x73\x74\x85\x95\x08\x3b\x4a\x3f\xf7\x97\xb3\xc6\xbb\x63\x20\x65\x6a\x94\x80\x16\x43\x8b\x71\x00\x5c\x9a\x5d\x9b\xe9\xef\x1b\x5b\x64\x68\x16\xa9\x9d\x23\x4f\x20\x38\xf1\x9d\x0a\xe5\x17\x17\xf8\xc6\x30\x5d\x68\xda\x85\x40\x4c\x61\x52\x1d\x93\xda\xf2\xda\x0e\xaf\x7e\x69\x9c\xd6\x08\xb0\xc1\x52\x75\xfa\xcc\x1a\x99\x52\x86\x14\xf1\xe5\xc4\x6d\x76\xa6\x2a\x27\x62\x73\xfc\x65\xb5\xe4\x53\xe6\xc4\xfe\x7c\x53\x7b\x06\x5d\x79\x78\x40\xb9\x0b\x6c\xaf\x1b\xd3\x7c\xce\xd7\x63\x63\x29\xe8\x12\x18\x9c\x03\x3b\x56\x94\x6d\xf2\x44\xa4\x8a\x1a\x32\xcc\x0e\xcc\x2c\x06\x04\xbb\xe1\x15\xfd\x66\x6a\x75\x70\xd5\x4b\x01\x2b\x73\xa4\x3e\xe0\x8d\x9b\xaa\xc5\xaa\xc8\x8f\x07\x98\xba\xe5\x48\x75\x47\xcd\x9e\xba\xfe\x8c\x77\x6e\x1b\xe1\x84\x8f\x4b\x73\x87\x52\xdb\x39\x45\xca\x81\x53\x5f\x4d\x59\x2e\xa1\x42\x71\x3b\x72\xd4\xf5\x08\xa1\xaa\xee\x40\x99\xab\xa0\xea\xa3\xe2\x22\x0e\x79\xa4\x9c\x90\xf9\xea\x2b\x1e\x81\x04\x07\xb1\xee\xfd\xd6\x67\x1a\x8d\x0b\x5d\xfe\x3c\xc6\x3a\x6d\xac\x93\x45\xec\x59\x2e\xc5\x67\xca\xe5\x03\x57\x0d\x00\x39\x95\x0f\xd0\xd3\x07\x18\xef\x6d\x02\x1e\x4a\xb0\x93\x64\x09\x97\x5c\x84\xbb\xc2\xd1\x77\x45\xf4\xdc\x19\x99\xb4\x27\x80\xe2\xc3\xdc\x74\x32\x93\x3b\x5d\x5f\x84\x2f\xcd\xc4\x25\x67\xc1\xcb\xc7\x75\xbc\x88\xad\xa3\xbe\xd2\x38\x67\xa2\xd2\x7a\x56\x5f\xb7\x81\xa9\x6f\xc3\xa3\x5f\x5f\x03\xd6\x86\x06\xf7\x08\x1a\xc5\xf9\x89\x1b\xd2\xb2\x73\x38\x0f\xe8\x6f\x54\x71\xd8\xe0\x3d\xc0\xd8\x35\x44\xef\xdb\x29\xa0\x7b\x22\xf3\xd0\x95\xcd\xec\x4e\x8c\xd0\x88\x1f\x1e\x92\x33\x0f\xd7\x0c\x05\xf7\xa4\x27\x12\x5e\x44\xe8\xcf\x00\x85\x0f\x40\xaf\x00\x6b\x0a\x7f\x37\x3c\x80\xbf\xb3\x0d\x4f\x98\x83\x34\xc9\xec\xae\x58\x7a\x1e\x1e\x0a\x90\xd2\x74\x58\x02\x4d\x66\xa2\xc9\x04\x9a\x34\x47\x40\xfb\x50\x9c\x3a\xf8\xdc\xe0\x5a\x46\x0f\xe5\x1c\x09\xc3\x26\x61\x7d\x13\x99\x58\xee\xd3\x5d\xde\xa7\xbb\x2f\xf4\xe9\x0e\xea\x21\x3a\x09\x7a\xa7\xf5\x69\xd3\xa0\xca\x83\x03\x7d\xea\xd0\x70\xb0\x4f\x79\x46\xec\x9e\xe8\xd3\x1d\xf6\x49\x27\x91\x14\xc4\x79\xf4\xf0\x80\xb1\x58\xf1\x62\x02\x65\x8a\x4a\xb7\x0d\x7a\x64\x91\x39\x2d\xfe\x9d\xdd\x09\x8d\x35\x1f\x7b\x14\x90\x97\xe5\xa3\x23\x47\x69\x24\xe0\x52\x0e\x0d\x1c\x07\xe6\xac\x63\xa6\xb6\xaf\x76\x80\x11\x01\xdf\x99\x9a\x98\x67\x49\x72\x22\x20\x31\xb3\xdc\x5c\xb8\xfa\x46\x5a\x7a\x86\x27\xdf\x1f\x9a\x06\x39\x51\x3c\x73\xfe\xde\x07\xac\x09\xa3\x5d\xf0\x02\xf5\x00\x3e\x40\xfb\xfa\x4e\xa3\xd0\x89\x1c\xc0\xd2\xfc\x3f\xf9\x68\xbe\x4e\xdb\xd6\x27\x6d\x5b\xbf\xd2\x2c\x43\x43\xfb\xa9\xa6\x03\x80\x94\x8e\xaf\xe9\x48\xe8\x17\xb7\x68\x5a\xfa\x1e\x69\x16\xfb\x15\xfc\xdd\xd7\xbd\xf3\xc6\x13\x8f\xd1\xff\xa7\xb6\x1e\xdc\xd6\xd3\x0e\x4a\x2a\x09\x64\xcd\x63\x51\xaf\x12\x22\x79\xe2\xc2\x44\x5b\x1e\xca\x09\xc6\x5f\x79\xef\x97\x84\x38\x78\xbc\x4a\x85\x58\x73\x9c\xda\x45\x9f\x38\xf2\x41\x18\xe3\x8e\xfe\x3f\xc5\xfb\x7d\x8f\xf9\x08\x0d\x9a\x8f\x27\x9b\x74\x8c\x8b\x39\xb4\xa5\x68\x0f\x0d\xae\x9f\x49\x39\x1f\x19\x3a\xa3\x0a\xe9\x13\xb5\x65\x97\xc4\xdd\x08\x1e\x92\xb4\x88\xa1\x3f\x48\xd6\x3c\x59\x63\x17\x8b\xad\xb1\xd8\x0a\xc8\x91\xa7\xea\x0f\x87\x8d\x5a\x0d\x0b\x2e\x88\xf8\xf0\x99\xf4\x16\x2c\x74\x3d\xf9\x7d\x48\x6e\x68\xab\x5c\x9b\xed\xd9\xbd\xab\x49\xe9\x4a\x9f\xe4\x70\xd6\x75\xe8\x31\xc4\xd3\x49\x23\x5f\x0a\xcf\x68\xb3\x08\xea\x91\xee\x4a\x95\x76\x29\x99\xf9\xed\xa7\x01\x26\x96\x11\x4f\xa5\x7f\xa3\xec\xe1\x21\x3b\x2b\xbc\xc8\x85\x8d\xb4\xee\xd5\x8b\xcd\xd1\x94\x55\x04\xd1\x02\x78\xbe\x76\x86\xc1\x53\xe0\xf9\xed\xce\x78\x94\xa7\xd3\x7c\xc8\x2d\x31\x62\xa5\xe5\xe0\x68\x3a\x0e\xa3\x5d\xfb\x99\xb2\xdf\x62\xf2\xb2\x6a\xa0\x59\x2e\xbb\x22\xdf\xda\xfb\xc4\x7f\xd1\x8a\x1f\xdf\xfa\xe1\x0f\x74\xe9\xfa\x48\xbd\xa9\x81\x06\x6c\x30\xa5\x2a\x77\xd5\xf5\x95\x4e\x18\xe6\x16\x93\x28\x6e\xb6\x46\xe1\x99\x37\xf2\x1a\x0d\x33\x6d\xf0\x12\x3c\x35\x2b\x49\x9a\x6d\x11\xf7\xee\x5e\x46\x7d\x0f\xf8\xfd\x3c\x88\xa2\xd8\xde\x30\x0c\x8e\x60\x6f\xe8\x3e\x9e\xf2\xb4\x84\x25\x76\x85\xe6\xe3\x8f\x3e\xfa\x58\xed\x60\x84\x5c\xfc\xbb\xca\x90\xd8\x11\x15\x6e\xa0\xc2\xc4\x06\x74\x06\xff\xd6\xf0\x2f\x26\xdb\xd1\x8e\x5e\x6b\x54\xa5\x4c\xf9\x93\x6f\xec\xb4\x0b\xf4\x14\xf4\xdf\x81\xb3\x82\x5a\x81\x05\x66\x01\x35\xc4\x10\x7d\xa2\xe0\x81\x5a\x3b\xa7\x0b\x3a\x72\x9f\x9c\x1a\xb5\x96\xe5\xd5\x4c\x76\x97\x0f\x69\x1f\x7e\xcd\x22\x0a\x44\x13\xad\x6e\x69\xc8\x87\xb2\x51\x25\x94\x4f\xeb\xfd\x3a\xba\xad\xe8\xfd\xf7\x15\xbd\x67\x1d\x01\x1e\xb3\x80\x3a\xad\xd6\x8a\xe2\x7a\xed\x30\x6c\x58\x5c\x51\x88\x3e\x75\x5a\x03\xbd\xb0\x70\xe4\x5e\x65\x40\xff\x0b\xcc\xc7\x94\xdd\x03\xde\xa3\x4b\x82\x1a\x73\xec\xc9\x64\x3a\xdd\xea\xa5\x5d\x58\xa6\x8b\x28\xde\x74\xac\xc7\x3a\x20\xdb\xc0\x18\xa3\x74\x4b\x7a\x15\x54\xd5\xd1\xfd\xaa\x3a\x2e\x0f\xd4\x71\xf5\x35\x95\xdc\x1e\xa8\xa4\xca\x8b\xf2\xc1\x4a\x2e\x02\xb9\x6e\xae\xe0\x18\xee\x5a\xc3\x6e\x77\x08\x33\x34\x3c\xee\xf7\xe1\x85\x75\x4f\xbb\xfd\xc1\xc9\x09\xeb\xf4\xad\x5e\xff\xb8\x7b\xc2\x4e\x8f\xbb\xf0\x3e\x60\xa7\x9d\xd3\xe3\x4e\x0f\xd6\x5d\xff\xd4\x3a\xee\xf5\x2c\x76\xd2\x1b\x0c\x8e\x3b\x90\xd0\xed\x0d\x4f\x3b\x27\x43\xd6\x19\x0c\x86\x9d\xe3\xc1\x94\xae\xbc\xce\x81\xaa\xbe\xd4\x1b\xe8\xf4\x07\xfd\x7e\x5f\x6b\x09\x1e\x06\xa7\xc3\xe3\x6e\xd1\xa4\x65\x41\x35\xa7\x5a\xdb\x98\xc5\x3a\xee\x77\xf3\x4e\x74\xba\xa7\x83\xc1\xc9\xb0\x53\xf4\xa6\x0b\xc9\x1d\xac\x56\x75\xab\x33\xec\xf6\xfa\x9d\xd3\x7e\xd1\xbf\x9e\x75\xda\x3d\xb1\x8e\xb5\x8e\x42\x3f\x4e\x06\x27\xa7\xaa\xc7\xd0\x72\xbf\x63\x41\x13\x45\xd7\x6f\xa1\xeb\x3d\x6c\xfc\xf8\x98\x0d\x7a\xa7\x90\xed\x94\x1d\x5b\x7d\xeb\x18\x7e\x3b\x56\x77\xd8\xef\x42\x3d\xc3\x41\xe7\xd4\x3a\x3d\x66\xa7\xdd\xce\x70\x00\x2d\x76\x3a\xa7\x9d\x41\xa7\x03\xf5\x41\xd3\xc3\x61\x6f\x08\x5f\xac\xee\xe9\x69\x0f\x9a\xee\x77\x87\x27\x16\xb6\x08\x1d\x80\x0e\xe3\x03\x94\xed\x75\xd9\xc9\x70\x38\xec\x0c\xe1\x0b\x14\x1a\xc2\x20\x70\xf4\xfd\xd3\x61\xbf\x87\x59\x8e\x8f\x7b\x00\x20\xe8\xfc\xf1\xf0\x04\x12\xac\x93\x5e\xbf\xd7\xed\x63\xfd\xdd\x93\x01\x56\x07\x80\x3b\x1d\x0e\xfa\x45\xc7\x2f\xb0\xe3\xdd\x7e\x1f\x60\x01\x1d\x46\x00\x58\x38\x3c\x6b\x38\xec\x62\xbf\x2c\xf8\x86\x60\x83\xc2\x03\x6b\x00\x55\x62\xe3\xc7\xc3\x3e\x3e\x74\x07\xdd\xc1\x29\x3e\xf4\xfa\x30\x11\xac\xd7\x1d\xf4\xac\xe3\x21\x3b\x1e\x0e\xba\xfd\x63\xac\x65\x68\x1d\x5b\x16\x94\xe9\x75\x2c\xa8\xa0\x0f\x5f\x4e\xa1\x1f\x88\x8a\x7a\xa7\x50\x6b\x57\x40\x18\x7b\xdc\xe9\xf7\x00\x42\xa7\x1d\x04\x51\x0f\xa0\xc8\x4e\x4f\x86\x27\xd0\x22\x02\xa2\xd7\x3f\x01\xa0\x76\xfa\xdd\xe3\x63\xeb\xa4\x93\xf7\xbc\xc0\x2e\x40\x00\x86\xa9\x5f\x69\x2c\x1f\x46\xb8\xc7\x27\x25\x74\x22\xb2\x7f\xae\x0c\xbe\x10\x19\x56\x15\x06\x4a\x97\xb1\x97\x2c\xa3\x60\x56\xa5\xd0\x0e\x4d\xb4\x06\xd3\xfd\x42\xfe\x0c\xb0\x51\xc9\x12\xa8\xd0\xd5\x8d\x0c\x3d\xfb\xcd\x42\xda\xfe\xc3\x13\x90\xf4\x87\x03\x56\x88\x93\x38\xe7\xac\x2c\xd6\xf0\x0e\x85\x62\x0c\x4a\xd9\x0e\xe8\x44\xa2\x00\x22\xaa\xfe\xd4\x7c\xef\x90\xb1\xe3\xc1\x8f\x52\x2d\x92\xb4\x21\x51\x46\xbb\xe0\xc9\xd9\x7c\x6c\xd9\x1d\x72\x27\x75\x16\xd0\x1d\x0b\x86\x81\x01\x0a\x92\xaf\x81\xf2\x3f\xe3\x1f\x1c\x33\x3f\xb6\x03\xb6\x30\x1b\x06\x79\xe7\x63\x9d\xe6\xc2\xb4\x6b\x35\xb3\x51\xfb\xab\x26\x54\xdc\x0a\x57\x55\x68\xa0\xc9\x2e\xd9\x2d\xbb\x60\xd7\xec\x35\x9c\xda\x2f\xe0\xdf\x5b\x64\xb9\xd1\xb6\x71\xc5\x8d\x86\x5b\xdd\x47\x54\x50\x6e\x77\x4d\x72\xf3\xe4\x03\x49\x7b\x1d\x14\x57\x99\x46\x58\x0f\x1b\x41\x3d\x30\xed\xc6\x01\x6d\x4d\x86\x52\x8c\x17\x75\xe0\x44\x01\x94\x28\xd6\xe6\x69\x6a\xcc\xda\x41\x3d\x0f\x6a\xb0\x42\x57\xa8\xa8\x56\xfd\x5a\x7c\x0a\xcb\x9f\xf0\xaa\xea\x1e\x18\xa5\x7a\x1e\xb6\x2a\x69\xbc\x30\xd9\x39\xd7\xaa\xa0\x94\x3b\x3d\xcf\xbc\x09\x29\x57\x7a\x1e\x4c\x21\x98\xbc\x2c\xc1\x1b\x88\xb7\x17\xe6\x73\xfe\xc9\x51\x10\x7f\x71\x74\x94\x44\x86\x04\x98\x89\x12\xa1\xff\xbc\x14\x0b\xe6\x33\x10\xff\x0d\x94\x74\x8e\x4a\xdd\xf9\xbc\xd3\x99\xcf\xd8\x95\x2b\xa2\xae\xa5\x73\x4f\x60\x3c\x85\x1a\x00\x1c\xf1\x97\x3c\xd4\x7b\xf9\x1a\x30\x1e\x0f\xf5\x5e\x42\xca\x85\x9e\x27\x69\x40\xca\xb5\x9e\x07\x53\x68\x24\x9f\x8a\x91\x24\xcd\x79\xa3\x5b\x7f\x5d\x1a\xc9\x6b\x1a\x89\x9c\x72\x1c\x09\x2c\x8f\xff\x7c\x12\x63\x79\x93\x8f\xa5\xd4\xa1\x37\x3b\xdd\x79\x83\x9d\xb9\xd6\xc7\x72\xc9\x6f\xc5\x58\x94\xf9\x6d\x49\x9d\x37\x00\x7a\xa5\xdd\x65\x8d\x43\xe1\x54\xcc\xb3\x16\x9c\x35\xd0\x05\x1e\x9c\x85\xff\x59\x50\x4f\xb1\x3b\x1f\x24\x77\x75\x31\x9e\x40\x7f\xa7\xd2\xb7\xd2\xdd\x78\x02\xf3\x30\xb5\xdf\xc4\x06\x3d\xb0\x09\x0c\x04\xfe\xc2\xc4\xc0\x5f\xcc\x68\xb2\xf7\x7c\xd3\xfc\x80\xec\xf4\x2b\x7e\x0e\x0f\x40\x0f\xbe\xe3\x77\x22\xe5\x57\x7e\x25\x52\xfe\xe6\x9d\x22\x86\x46\x11\x65\xc3\x78\x5f\x7f\xd7\x78\x55\xff\xd5\x6c\x6b\x41\xcf\xde\xd7\xdf\x43\xda\x2b\x53\xa3\xef\xdf\x41\xb6\x5f\x21\x1b\xde\x94\x9b\xec\x3b\xcd\xea\x18\x9b\xa9\xe3\x9f\x06\xb6\x53\xff\x40\x4a\x8b\xb9\x03\x97\x3b\x01\xea\x1f\x0a\x38\xad\x19\x40\xe8\x3b\x68\xef\xef\x46\x07\x16\xf6\xcf\x7c\x1e\x19\xe5\x81\xcb\x11\xd2\x68\x03\xf6\x03\x7a\x35\xfb\x11\x73\x69\x63\x96\xe9\xa3\x35\xcc\xe8\x0f\xe3\xb7\x42\x00\x56\x3b\xaf\xb1\x9f\x71\xd0\xb5\x17\x35\xf8\x5c\x63\xf4\xf7\x1b\xeb\x1b\x0b\x9e\x6e\xe0\x09\x3f\x77\xc4\xe7\x80\x3e\x07\xf4\xb9\x86\x38\xe3\x3f\xb0\x4c\x7e\x96\xce\xb5\x7e\x96\xe1\x9e\x7e\x94\xef\x3f\x2a\x4f\x5b\x58\x66\x41\x15\xfd\xa8\x2a\xaa\x6e\xe7\x47\xbc\x99\xb3\xbf\xd4\xaf\x4e\x39\xbf\x58\x5c\x5a\xa1\x0d\xe5\x3d\xd7\xc0\x79\x21\xc0\xf9\x67\x09\x9c\xa1\x00\x67\x13\xc1\xf9\x17\x01\x4a\x5b\x28\x21\x6b\xfe\x89\x10\xfc\x8d\x3e\x10\xec\xca\x0b\x4b\x40\x55\x66\x23\x80\xfe\x99\x03\xf4\x4d\x8d\xfd\xa6\x3a\xfe\x27\x75\xe6\xcf\x9d\x81\xfe\xa6\xe0\x10\xd2\xe7\x50\x02\x94\xc0\xf9\x9b\x04\xdf\x6f\x12\x9c\x7f\xc9\xf7\xbf\x74\x70\x02\xe8\xa9\xa2\xbf\x54\x45\xd5\xed\xfc\x55\x02\xe8\x97\xfb\xf5\xd7\x3e\x40\xa1\xd0\x25\xe5\xbd\x3d\x0c\x69\x29\x32\xbd\x3b\x3a\x52\x1f\xf7\xd6\xca\x4b\x6d\x15\xdc\xd1\xf3\x95\xc9\x2a\xda\x90\x55\x5d\x94\xaa\x2a\x43\xe9\x53\x09\x02\x17\xf4\x76\x9d\x73\x8b\xaa\xd8\x5f\x35\xac\xff\xef\x08\x26\x1b\x8e\xb5\xd2\xb5\x7e\xa1\xef\x59\x3b\x87\xb1\x37\xc2\x06\x34\x82\x7f\xc5\xb3\x58\x62\x8d\x14\x9f\xe0\xb7\xf9\xf8\x67\x19\x20\x99\xfb\x11\x5e\xcb\x46\xe8\xde\x38\x62\x3e\x1c\x75\xe8\x65\x18\x65\x6b\x6e\x84\x4e\xf6\xa2\xe2\x2a\xc8\x0f\x43\x2f\xfe\x9a\xf8\xb9\x5e\xa1\x15\xe5\x49\xad\xda\xaf\xab\x60\x57\xad\xca\x8d\xe2\xaf\xec\x42\xc6\xcb\xfa\x52\x6b\x67\xf6\x35\xc5\x7d\x9e\xd2\xe9\x7f\x1d\x14\x7a\x57\xfe\x7f\xa3\xfd\x1f\x15\xfd\x88\xbe\xde\x02\xc0\x29\x4a\x3b\x5f\x6f\x05\xe0\x16\xa5\x0f\x44\xb0\x56\xd4\xa1\x71\x88\x26\x6c\x7c\x73\x90\x0c\x44\xcd\x27\x28\x78\x80\x14\x84\x82\x87\x22\x7e\xb7\xbb\x40\x0a\xca\xd5\x35\xc9\x8f\xe3\xd4\xac\x87\x4c\x8b\xfe\x44\x91\x27\xa4\x6e\xf5\x75\xc0\x6b\x4e\x96\x46\xb5\x91\xa4\x77\xab\x43\x30\x7e\xb3\x04\x62\x46\xf2\x9d\xaf\xf7\xdc\xdc\x2d\x22\x56\x13\x8f\x4d\x37\x88\x12\x6f\x56\xb3\xd7\x11\xc3\x18\x7d\xf6\x0d\x7c\xc2\x87\xe6\x95\x37\x8f\x62\xaf\x66\xaf\x54\x82\x33\x87\x95\x5b\xb3\x37\x11\xbb\x72\x12\x3f\xb1\x2f\xe0\x03\x3d\x35\xa3\xb5\x17\xd6\xec\xeb\xfc\x5d\xd5\xf9\x1a\xb2\x92\x1b\x2e\xfb\x05\xec\x23\x47\xf0\xc5\xf6\x15\xe4\x53\x2f\xb2\xe8\xb9\x9e\xa4\x4a\xdf\x45\x6c\x15\x85\x51\x1a\x85\x9e\xfd\x21\xda\x9a\xa3\xd7\xc1\x01\x2f\x54\x69\xeb\xda\xdb\x50\xdc\x03\x51\x96\xb7\x65\x25\xff\x90\x0e\x07\xf3\xab\xec\x17\x01\x46\xa0\xed\xb6\x81\xa9\x82\x7f\x80\x4e\xdf\x52\x02\xbe\x74\x45\xc2\x4b\x99\x30\x94\xb9\x86\x53\x1d\xd0\xa4\x4b\x56\x96\x86\x88\x55\x03\xe0\x7e\x1f\x15\xa2\x42\xa5\x73\x86\xbe\x6d\xa4\xb5\x66\x48\xbe\x61\x44\xd0\x5a\xf4\x73\x93\x27\x6f\x50\x0b\x71\x15\x29\x8d\x70\x0e\x00\xde\x14\x6f\x00\xfe\x9c\xb1\xa9\x0c\x35\xf6\x8a\x26\x5a\xcf\x74\xb0\x93\xaf\x9e\xd8\x49\x1d\xc9\x41\x8a\xa5\x7d\xb5\x76\x50\x18\x24\x75\xb4\xcf\x9d\x83\x43\xd4\xb1\x05\x24\x68\x75\x6e\x2c\x1d\x17\xc0\xbb\x56\x21\x3c\x87\xf9\xd8\x1e\xf3\xb1\x16\x16\x2e\xde\x53\xb1\xcb\x7c\x16\x92\x97\x62\xf5\x1e\xd1\xfb\x48\x9d\x1d\x35\xe0\x7b\xd6\x56\x23\x36\xdc\x56\xcc\xe0\xb1\x83\x37\x89\x9d\x26\xfc\xb1\x80\xaf\xf2\x0c\x17\xf8\x8f\x71\xa6\x7f\xa5\x07\x0b\x70\x68\x91\x18\xc0\x43\x80\x89\x50\x8f\x7c\xc6\x44\xa8\x27\xa0\x7a\xb2\x22\x35\x2f\x4f\x5c\xda\xce\x91\xa6\xdd\xde\xf1\x92\xc9\x10\xfa\xbd\x57\xef\x19\xa3\x98\x4f\xae\xfe\x8e\x8c\x24\xda\x14\x95\x93\xe4\x20\xef\x63\xdb\x67\x8e\x65\xc3\x41\xd6\xb1\x13\xb6\xb6\xec\x89\x5f\xd0\xfc\x11\x54\x5e\x50\xfc\x91\x39\x65\xeb\x4e\x29\x43\x52\xca\x40\x21\x19\x75\xcd\x32\xcd\xf0\x02\xe6\xdc\xe2\xd0\x71\xc7\xa2\x28\x2c\x1d\x7a\xee\xec\xdc\x9f\x16\xf6\x4c\xbb\x27\x72\x0d\x10\xa4\xe1\x9d\x7d\x72\x00\x34\xac\x03\xaf\x69\xe5\xe5\xa6\x2c\xfc\x0b\x9c\xdc\x58\x46\xb8\x88\xf0\x31\x38\x64\xc4\x37\x31\x1c\xd6\xef\xf0\xb0\x86\x63\x3b\x80\x63\x7b\x6f\x91\xff\x57\x67\xcc\x6e\x08\xc8\xc7\x8f\xc9\xf2\xe9\xf8\x35\x81\x1e\x77\x4f\xc6\xaf\x3d\x59\x77\x4f\xb7\xaf\x3b\x59\x83\xa2\x74\xb0\xd5\xf6\x1b\x20\x91\x45\xb4\x23\xfb\xad\xd2\x4b\xf5\x77\xb4\x94\x50\x01\x6e\x47\x4d\x3a\xc3\x2b\x7f\xc3\x6f\x6d\xe0\x8c\xdc\xe0\x71\xe9\xf2\x89\xcf\xee\xef\x6c\x1f\x10\xce\x06\x81\x7d\x8f\x57\xf4\xf2\x39\xca\xaf\x50\x5d\x2e\xe2\x31\xc0\xca\xa7\x2d\x8b\x3c\x57\xed\xff\x4f\xdb\xd5\x38\xb5\xad\x2b\xfb\x7f\xa5\x78\x2e\x8c\xdd\x38\x21\x90\x53\x7a\x6f\xa8\xc9\xf4\xd0\x76\xe8\xb9\xd0\xf6\x95\x94\x7e\x30\x39\x8c\x49\x1c\xe2\xd6\xb1\x53\x7f\x00\x29\xe1\x7f\x7f\xfb\x5b\x49\xb6\xec\x38\x9c\xd0\x79\x6f\xce\x29\xb1\xbe\x77\xa5\xd5\x6a\x25\xad\x76\x0f\xf1\xb1\x43\x1f\x4f\xf0\xb1\xab\x3e\x3a\x03\xa9\xf6\x33\xc5\x03\xc9\x39\xb4\xe0\x3f\x45\xfa\x0b\xf5\xf5\xdd\x79\xa6\xd2\xd3\x9a\x52\xf4\x7d\xcc\x58\x56\x05\x3e\xcd\x91\xfe\x9a\xf2\x5e\xfe\x46\x72\x69\x24\x56\x72\xf6\x4a\x3e\x13\xae\x3e\x3e\x45\x42\xd5\x33\x6f\xbf\xe8\x8b\x3a\x98\x1e\xb8\xc4\xf3\xcc\xef\x11\x34\xa3\x2d\x4d\x67\x1e\xcd\x25\xf3\xe9\x65\xb4\x9a\x3c\xf2\x39\x6b\xfe\x92\xcf\xd8\x4a\x34\x11\x5b\xd6\x62\xf1\x3e\xb2\x4c\xaf\x1a\x2d\xc7\xf1\x08\x08\xbc\xd1\x86\x90\x7d\x21\xfd\xd6\x00\xae\xaf\x85\x55\x19\x3e\x21\x41\xfd\x2a\x24\x28\x69\xab\xf7\x3d\xf1\x9a\x38\x4a\xea\xae\xe0\xb4\x53\xb2\xed\x67\x85\x46\x1c\xe8\xb7\xd9\x79\x9a\x32\xe3\x6b\xd2\xcf\x91\xf8\x39\x53\xd1\x47\xbc\x2f\x39\xcb\x13\x39\xf2\x8c\x23\xf3\x24\x95\xb1\xa9\x27\x89\xe2\xb4\xa8\xd8\x34\xfe\x24\x32\xd5\x3c\x12\x2a\x01\x65\xee\x3e\x3d\x0e\xd8\x0f\x51\x4a\x1f\xfb\xfa\x6e\x0a\xf5\x1e\x1b\x0d\x8f\x80\xe4\xad\x25\xef\x94\x28\x9a\x23\xd0\x02\x6b\x0b\xd4\xbc\xeb\xd2\x1b\xa8\xe0\x5c\x60\x7c\xcc\xf5\xc9\xc0\x13\x15\x90\x4d\xe4\x01\x34\x63\x28\xe7\x0a\xcd\x51\x74\x13\xd6\xbc\x1c\x2c\x21\xf4\x33\x10\xc8\xfc\x0c\xb4\x96\x01\xbd\xa7\xb7\xe9\xe9\xed\x20\x54\x6e\x28\x9b\xfd\x76\x33\x4d\xbd\x9d\x52\x33\xa2\x15\xf1\xb2\xa9\x98\x31\x7d\xa2\xe3\xc4\xa1\x49\x41\x62\x6b\x62\xca\x43\xbd\x40\x6b\xab\x63\xd9\xc7\x32\x0c\x17\x9b\x9d\x36\x7c\xec\xee\x5f\x48\xdb\xc1\xfe\xd2\xc4\x2d\x79\xa0\x73\xfa\xc1\x62\xd1\x68\x7c\x0a\x68\x3b\xfb\x25\x82\x67\x1c\xb6\xb7\x13\x39\x1f\x29\xfe\x0e\x96\xa7\xba\xaf\xdc\xd4\x6b\x85\xb8\xf6\xb3\x61\xdb\xb9\x7b\x9a\x41\xe4\x72\xe7\x30\xbb\x9b\x09\x4d\xc7\xee\xee\xb3\xf6\xbd\xb0\xe8\x34\xd4\xdd\xd7\xb1\x51\xa7\xe1\xbe\x75\xe7\x4b\x03\xb3\x54\xb7\x50\x8a\x93\x26\x15\xe1\xa3\xce\x85\xaa\x09\x95\x1c\xe7\x4f\xaa\xa8\x58\xf2\x62\xcc\xfa\x50\xc1\x79\x32\xb0\xb6\xb6\xfe\x15\x99\x1e\xbb\x93\x60\x4b\x77\xa9\x7a\x65\xa9\x74\x91\xbf\x46\xec\xe8\x1a\xe6\x10\x2e\xa4\xf1\xdf\x38\x9b\xd5\x5a\x98\x17\x8e\xd3\xb0\x2d\x50\xb6\xdc\x5f\x05\xdd\xb7\x91\xc9\xc8\x5b\x72\x13\xd4\x0f\xec\x8f\x81\xfd\x2a\x70\x44\x02\x91\xff\x07\x7e\x1b\xfa\x09\x9a\xb4\x1f\x84\x04\xe5\x5c\x08\x61\x8b\x92\x5a\xde\x74\x96\xce\x11\xc1\x1f\x88\x81\x0a\x26\x22\xf0\x8b\x30\xf3\x94\x0b\x61\x84\x2e\x37\x13\x5d\x1d\x1b\x5d\x4a\x82\x70\x54\x64\xea\xf5\x83\x9e\x1e\x66\x07\xe7\x5d\xd0\x09\x09\xbf\x92\x9f\xea\xc9\xd2\xc9\x48\x11\xa3\xf9\x87\xfb\xc0\x20\x8b\x82\xce\xaa\x17\x82\xdc\x4d\xfe\x08\x2f\x1a\xf0\x15\xba\x53\x2f\x99\xb9\x43\x8f\xdf\x8a\xee\x87\xce\x3b\x28\x0a\xa8\x81\x7c\x60\xe0\xa3\xdf\x1b\xf8\x58\x0d\xbc\x99\xeb\xfa\xc4\xd0\xf8\xbf\x80\x7d\x84\x8b\x0b\x22\x05\xd7\xb2\x7a\xa6\xa1\x22\x0c\x5f\xd8\x64\xf1\xf2\x2c\x4e\x91\xdb\xb2\x25\xf9\x30\x8d\x9c\xfb\x03\xe8\x9d\x16\x44\x44\x5c\x5f\x3e\x95\x83\x6a\xaf\x46\x52\x70\xac\x93\xc1\xf0\xb5\xea\xad\x97\x15\x77\xac\x95\x47\xaa\x79\xa7\xb9\xd5\x4e\x1b\x8a\x4e\x3b\xd4\x3b\x0d\x06\x52\xa4\x57\xc7\x02\xfb\xe0\x45\x52\xbc\x27\x19\x4b\x97\x8f\x03\xb6\x7a\xac\xbd\x33\x64\xa3\xc1\x57\x6c\x96\x28\x76\xc6\xe7\x93\x01\x4d\x30\x27\x86\xb1\xb4\x68\x60\xd7\x77\xd8\x84\x76\x28\xf6\xb0\x6e\x30\x66\xa8\xfb\x3a\xb7\x9e\x82\x47\xfb\x2f\xae\x69\x08\x32\xc7\x3b\x9f\xc9\xb9\x97\xd9\x33\x1b\xfe\xe6\xfd\xbc\xdb\x32\xbd\xa3\x86\x48\x14\x1d\x25\xfc\x39\xad\x24\x2b\xea\x86\x42\x27\x6a\x23\x57\x88\x62\xad\x9c\xf7\x98\x80\x39\x58\xc2\xb5\xa7\xde\x3b\xd1\x81\xbf\xef\x37\x1a\xd6\x5d\x56\x87\x86\xf0\x49\xca\x8f\x25\xf9\x21\x73\x8e\x0f\xec\xdc\xb9\x54\x0c\x0e\xea\xa8\x8b\xd8\x51\xe5\x72\xff\xb8\x36\xde\x42\xa4\xf9\xe3\xe5\x02\xb9\xcc\xae\x0c\xa6\x1c\x65\x81\x6f\x7a\xe3\x79\xd5\x29\x5c\x80\x03\x62\x88\x2b\xc4\xb0\xbf\x42\x9a\x78\xb1\x2b\x1c\x3c\x82\x63\x98\x96\x78\x29\x2c\xaa\x67\x71\x88\x44\x8c\xaf\x52\xea\x91\x6f\x05\x75\x09\x25\x2d\xe5\x17\x0e\x02\xc1\x04\x8a\x45\x8a\xc4\xef\xac\x94\x29\xf1\xc4\x01\xe9\xbd\x40\xc4\x4d\xd3\xb8\x82\x87\xb6\x81\xa3\x16\xd8\x5e\x3b\x57\x5c\x18\x9b\x77\x4b\xaf\x6b\xea\x33\xbd\x3b\x85\x73\x60\xee\x39\xb7\x15\x44\xd4\xf5\x56\x69\xc7\x56\xb0\x3c\xc9\x8f\xbd\xae\x19\x36\x1c\xc3\xa8\xea\x68\xa5\xca\xef\xec\x95\x6e\xef\xde\x2d\xde\x35\xc1\x58\x30\xab\x7a\x61\xb6\x87\x56\xe9\xb5\x83\x30\x22\x5f\x2a\x68\xa7\xec\xb5\x00\xff\x95\x5f\xb2\x54\xe0\x89\x1f\x03\x4f\x0d\xb6\xbf\x07\xdf\x72\x45\x1a\xbc\x78\xf0\xb9\x44\x3e\xf2\x8d\xf6\x13\x62\x85\xa1\x25\xdc\xdc\x52\x65\x50\x62\x84\xdd\x99\x7d\x6d\xfd\x93\x0f\x72\x34\x57\x01\xc0\xf3\x28\xeb\x4e\x33\xa1\x22\x1a\x26\xb8\xb8\x0f\xfc\xf1\x5c\xd3\x07\xfb\x16\x09\xfa\x33\x50\x6d\x8b\xf6\xe3\xb4\xd7\x96\xa0\xf5\xfc\x6e\x56\x90\x51\xbf\x66\x4e\x94\x0e\x03\x3c\x4d\x03\x5c\x13\xe6\xe5\xd4\x2a\x0d\x6f\xa6\xe9\x3b\x6f\x6d\x3d\x3c\xa2\xc4\xdc\x85\x1f\x8a\xd2\x59\xc2\xfa\x8d\x51\x97\x67\xb2\xcb\x33\x39\x76\x6b\x37\xbe\x5c\x56\x01\x23\x0f\x6a\x56\x74\xaa\x70\x90\x80\x0e\x33\x8b\x7e\x95\x35\x10\xe5\x79\x72\xf9\x49\xe7\x41\xc9\x49\x98\x70\x47\x57\xcc\x22\x05\x11\xf2\xc9\x09\xf8\x21\x8e\x66\x5e\x9c\xa2\x31\x9d\xbe\xbd\x0a\x7d\x7b\xbd\xac\x6b\x7a\x75\xf4\xcd\xcf\x19\x85\xf7\x61\x74\xd3\x61\x34\x9d\x11\xa2\xa3\x53\xb4\x51\x70\x22\x4e\x53\x6d\x9d\x89\x27\x32\x39\x76\xfe\x06\x3b\x61\xa1\xb5\x64\x0a\x65\x4e\xcf\x2a\x19\x41\xd3\x40\x4e\x8a\x3a\x70\x54\xc0\x86\xe6\x04\xa9\x0b\x52\x5d\x52\xee\xa4\x19\xd0\x39\x88\xf8\x5d\x9e\x72\x28\x53\x2c\x27\xd6\xdd\xee\x41\xc4\xb2\x83\x61\x88\x15\x22\xd6\x66\x05\xb7\x48\xdc\x9f\xbd\xe4\x79\xe5\x89\x11\x53\x89\xfb\x2a\xbd\x0b\x10\x31\x30\x1e\x3b\xee\x51\x03\xb2\x44\xe7\xd5\x51\xc9\xea\x1f\x82\x43\x58\xf8\xcd\x8e\xcd\xa1\x8d\x34\x7a\x7c\xa8\x2b\x23\xd9\x95\xf7\xab\x56\x9d\x0e\x4c\x7a\xa2\x9f\x6c\x9d\x14\x0b\x94\xe5\xbc\x4e\xbd\xdb\x5a\x71\x3a\xef\x24\x64\xc0\xcd\xdd\x99\x14\x04\x04\x11\xd6\x1c\x3e\xd4\x2e\x86\x85\x54\x0e\x5b\xe2\x9a\xdc\xba\xcc\x75\xd9\x17\xee\x79\x38\x68\x0d\xa3\x2c\x4c\x5f\xec\x32\x47\xe5\xf2\xe2\x0d\xe6\x3b\x5a\x3f\x79\x29\x17\x10\x1c\xe2\x89\x89\xe8\x6c\xb9\xd2\xad\x70\x50\xa3\xd6\x6b\x6f\xdd\xf5\x7a\xa7\xb4\x5e\x7b\x03\xe2\xb2\x5c\x77\xd7\x5c\x29\xe2\x48\xf7\x38\x75\xda\xbc\x96\x2d\x97\xf7\x1c\x32\x9c\x88\x68\xd5\xc2\x1a\xb0\x40\x80\x77\x5f\xff\x5f\x18\x88\xad\x9d\x84\xa5\xd6\x9a\x73\x01\xa0\xcd\x04\x1e\xeb\x25\x9d\x46\x9d\x74\x85\x7c\xf7\x5d\x61\x04\xb9\x0e\x3f\x51\xb4\x40\x30\xab\x3e\xa0\xfb\x3f\xc6\x51\x6d\x5b\x7f\x0b\x4d\x05\x5c\xae\xf2\x85\x7b\x8c\x7a\x9c\x05\xd2\x7a\x46\xab\x1e\x7f\x55\x67\xde\x05\x98\x0b\x8f\x13\x2b\x57\xc8\x04\x62\xf9\xa1\xdd\xac\x4f\x5b\xfd\xfd\x34\x9e\xdf\xf5\x03\xc7\x5b\x22\xb6\x54\x20\xf9\x91\xb6\x66\x42\x4a\x54\x38\xe1\x81\x45\x79\x1c\x69\x39\xc1\xd5\x5b\x30\x47\xee\xcc\xa6\xea\x7c\xa9\xf7\x53\xad\x34\x3f\xf2\x95\x92\xe7\xbe\xe9\x0b\x4f\x07\x8b\x85\xfa\xaa\xf7\x68\xc0\xfe\x04\x8c\x7c\x1f\x6f\xd0\xc6\xbc\x25\xbb\xe1\xbe\xcc\xb0\x99\x37\xd5\xec\xa5\x4b\x9e\xe1\x97\xf6\xb4\x7c\xe0\x11\x55\x77\x69\x30\x7c\x23\xed\x40\xe9\xfb\x8e\xe0\x60\xb8\x3f\xc4\xbe\x43\x9a\x80\x0d\x4b\xfb\x8e\x34\x77\xb4\x9f\x50\xc9\x71\xe1\x77\x7e\x7c\x90\xec\x27\xd8\x77\xd0\x98\xc9\xbd\x2c\x76\x20\x11\x76\x9f\x6a\x43\x8a\x1d\xa6\x38\x64\x89\xd9\xca\xb7\x38\x60\x89\x79\xbe\xcb\x43\x96\x58\x4c\x8e\x46\x9c\x13\x49\x71\xea\x52\xc4\xdd\x17\x5e\xf9\x4b\xa7\x22\x62\xd3\x56\x5c\xf8\xdd\xfa\xc9\xaa\x13\x58\xbc\x9f\xf5\x4a\xd7\xa5\xb9\x2b\x22\x27\x3f\x68\x30\x95\xa9\x1c\xe1\xf3\xf9\x02\xc6\xdc\xd3\x8b\x8b\xc5\x02\x9e\x6a\xcb\x71\x58\xf2\xa2\x19\x5e\x17\x4d\xa4\xe2\xd6\xb0\x37\x66\x1b\xe6\x89\xfa\x95\x7c\x70\xcc\x66\xf1\x95\x2a\xbd\xd5\x1d\xd2\x56\x37\xdf\xe4\x70\xce\x37\xac\x3e\x5f\x0a\xe8\x65\xe7\xdd\x14\x26\xbe\x8b\x5d\xba\x69\x70\x4e\xc3\x6a\x81\x70\xcd\x09\x8c\xda\x5d\x3b\xb3\x96\x07\x8a\x32\x61\xe8\x1b\x1e\xf2\x4d\xe3\x8a\xa8\x4c\xb6\x4b\x79\x59\x5c\x36\x86\x81\x9b\x24\xca\xab\x86\x25\xa5\x05\x23\x22\x0a\xf1\xd3\xb9\x61\x1f\xba\x96\xf0\xc4\xa4\x9d\xb6\x50\xc5\xb7\x7e\x6a\x5a\xb5\xb9\xd5\x6e\x0c\x86\xf2\xaa\xc5\xd8\xa0\x5c\x5d\xb9\x1d\xe8\x0b\xe6\x7c\x23\xb3\xdb\x56\x23\xb2\x6f\x9d\x4f\xbe\x39\x66\x95\xc5\x12\xaa\x39\x02\x8c\x2c\x14\x7b\xec\x0b\xc7\xbc\xcc\xb1\xa5\x9e\x82\xaf\x0e\x83\x26\xd9\x64\x09\x4d\x55\xb8\x7c\x5c\x64\x5e\x92\xa8\x71\x9d\x97\xc4\x6d\xb6\x01\xc3\x95\x2a\x82\x57\x7b\x71\x16\x29\x95\x45\xed\x97\xce\xb5\x22\x12\x95\xff\x9d\x33\xad\x46\x1d\xd2\x28\xa8\x28\x51\x09\x8b\x16\xe6\x95\x65\xff\xd2\x2a\x10\x49\xf6\x4f\xad\x02\x19\x75\x4c\xdb\x96\x68\xc6\xcf\xa6\x16\x0b\x23\xf0\xc6\xa9\x78\x42\x05\x1b\x9f\xe0\x81\xc6\x65\x94\xa6\xd1\x54\x65\x50\x79\xf1\xc4\xea\xcf\xc8\xbe\x71\x60\x07\xfd\x87\x03\x93\xe7\xa7\xf4\xbd\x6b\xd8\xaf\x29\x40\x3f\x87\xb2\x5f\x46\x94\xd2\x3e\x38\xee\x19\x6d\x6f\x6a\x74\x8d\xd6\xf3\x1d\xfa\xcd\x07\x08\x40\x34\xdd\x10\x97\xcb\xd4\x77\x53\x7f\x34\x0a\x80\xd5\x85\x2a\x6c\xf0\xcd\xd3\x2d\xdf\x3c\xd9\x46\xe3\xf8\xa9\xdf\x30\xce\xda\x47\x88\xc2\x1d\xd4\x19\x47\xf1\x4b\x7a\xe7\x33\x43\x33\x67\x68\x6e\x19\x9a\xb9\x80\xe6\xb6\x02\x8d\xd1\xea\xec\xae\x84\x81\x41\x05\xbb\x54\xce\x03\x96\x80\x61\x18\x6c\x05\xd4\x51\xfb\x4c\x01\x73\x24\x81\xb1\x5f\x8a\x02\xaf\xed\xe3\xa7\x19\x0d\x83\x08\xfd\xa0\xd0\x09\x14\xab\x38\x74\x4a\x14\x58\xca\xf5\x53\x84\x6e\xf2\x78\x99\x7f\x2c\xde\x31\xfc\xe9\x86\x23\xc1\x3e\xfa\xce\xd8\xfe\xe8\xf4\x8b\x68\x13\x27\xfe\xc4\x85\xea\xa4\xc9\x3e\x7d\x37\x3e\xca\xd5\x24\x29\xca\xf4\x28\x7f\x77\xa4\x2e\xae\x61\x3b\x80\x88\x33\xb7\x41\x39\x86\x03\xb3\x3c\x6d\xac\x76\x0d\xd2\x6e\x50\xe5\xc9\x4b\xec\x7c\xc7\x59\xf7\x1e\xad\x02\x7b\xb4\x04\x74\xc0\xf5\x77\xd8\x22\x53\xc5\xc6\x04\xbf\x41\x5a\xf3\x16\xa8\x78\xc1\x1f\xc5\x7e\xc9\xb5\xe9\x3f\x5c\xde\x61\x5b\xf2\x26\xe8\xa5\x0d\xc3\xe8\x7e\x0f\x72\xb5\x2d\xe6\x8e\x35\xea\x1b\x75\x97\xd0\x85\x6b\x43\x75\x11\x8d\xd2\x67\x15\x13\x97\x0f\x5f\x08\xa7\xf9\x65\x70\xc1\x60\x1f\x6f\x1e\x13\x65\x97\xcc\x0e\x3c\xfc\x38\xcf\x83\xc2\x59\x23\xc5\x92\x9c\x67\x61\xb3\x78\xb9\xfe\x19\xab\x97\xf4\xeb\x6a\x7e\x40\x85\xad\x51\xd8\x73\x62\xfd\x93\xc7\x95\xf7\x65\x79\x5f\x21\xf5\xe1\x31\xa6\x9b\x22\x59\x3a\xca\xbb\x24\xbb\x1c\xf9\xd7\xfe\xa8\xd6\xd6\x7f\xa5\xf8\xd6\x56\x98\xdf\x23\x7e\x0f\x1c\xc5\xcc\xec\x37\x81\x73\x47\xac\x0c\xaf\xd5\xe0\xf7\x01\x9e\x0f\x39\x85\x3e\xc0\x02\xd5\xeb\x35\x5a\xe2\x2f\x63\x12\x02\x56\xac\xf1\xac\xfd\x54\xb7\xc6\xa7\xd5\x15\x5e\xf1\x1a\xf6\x78\xe5\xc5\x4d\x96\xd5\xb0\x5c\xd0\x2c\x2b\x38\x51\xf3\xc6\xbb\xfc\xe1\xa7\xcd\xd4\x9d\x35\x27\x04\x57\x00\xd8\x9a\xc3\x28\x60\xee\x18\x5f\x5d\xba\x66\xdb\xe6\xff\x2c\x43\xb3\xf8\x8f\x5b\x3a\x01\x27\x9e\x7a\x72\x7c\x1a\x65\xc3\x89\x70\x41\x90\x27\xb0\x9f\x2f\x7d\x9d\x83\x47\xd3\x2b\x7e\xdf\xaa\xaf\x75\xfb\xd1\xd2\x42\x17\xc3\xff\x6b\x75\xa1\x2b\x95\x96\x08\xc0\x29\xd2\xa5\x1f\xf0\x92\x6b\x4c\x88\x9b\x7b\x61\x91\x38\xcc\xe2\x84\x11\xe1\xbb\xdb\x89\xeb\xc7\x58\x25\x4b\x10\x09\x47\xc6\x3a\x34\xeb\xc1\x92\x97\xab\x36\x05\x49\x41\xae\xab\x6e\x05\xfb\xd8\xc3\xdd\x91\x6a\xeb\x1a\x3e\xa3\x5d\x29\x77\x14\x22\x86\xbb\xd4\xfe\x55\xb5\xf1\x65\xb6\x6b\x88\xaa\x9f\x40\xc5\x75\x09\xa4\x1a\x2e\x7d\xc4\xa6\xae\x57\xa0\x78\x5b\x57\x64\xfb\xdc\xbb\x19\x14\xfa\x75\xbd\x66\x47\x18\x18\x51\x85\xe6\xb5\x85\xfe\x3e\x0f\x93\xc1\xea\x42\x37\xfe\x88\xe4\x19\x7b\x4f\x85\x27\xec\x12\x85\x23\x1e\x1a\x5e\x76\xa9\xc1\xc9\xd8\x77\x90\x68\x6d\x40\x07\x06\xf7\x76\xa6\xd5\x33\xc2\x88\xc4\x14\x6e\x47\x8c\xc2\x10\x72\xad\x5b\xbe\x79\x83\x05\xb5\x52\x54\x64\xed\x07\xec\xfe\x81\xe4\xb3\x00\xe6\xd4\xf2\xae\x18\x32\x4d\x94\xe0\x85\x36\x4a\x93\xe3\xed\x98\xa4\x39\x12\xa6\x55\xd1\xa4\x28\x3a\x2f\x17\x55\xa8\x69\x65\x33\x2e\xeb\x99\xe3\xd2\xf9\xb5\x27\xe4\xf8\x5a\xba\x11\x55\x69\xee\x61\x6b\x28\x41\xf7\xdd\x3a\x3e\x6f\x6c\x7b\xc5\xa0\x09\x89\x66\x42\x91\x7f\x27\x7a\xa4\x65\xdc\x2f\xdb\xd8\x52\x42\x5b\x31\x43\x0a\xea\x60\xf0\xc3\x9a\x79\x64\xb7\xc2\x03\xd0\x92\xdd\x4a\x0e\x4a\x34\x25\x7b\x6e\x0c\xec\xc7\x65\x9b\x5e\xd9\xc3\xed\x51\x3f\x4e\x1e\x68\xcf\x93\xed\xdd\x94\xdb\x53\xdd\x3d\x41\x83\x93\x72\x83\xbe\xce\x52\x11\xe8\xec\x3a\x85\x07\xbf\x1f\xde\xfc\x30\x1a\xe1\xc8\xf3\x90\xf6\xb8\x27\xe2\xf9\xfc\x4f\x18\x91\x75\x00\x3d\x7d\x52\x8d\x0e\xea\x25\x49\x78\xd7\xb2\x4f\xf1\x40\x3b\xaf\xee\x7a\x65\x75\x14\x79\x48\x95\xa2\xa6\x46\x51\x53\x43\xd5\xd4\xae\x54\x34\xd2\x75\x7d\x98\xe7\xc2\xb9\x7e\x0a\x3b\x45\x30\xc7\x17\x72\x35\xb7\xca\x77\x3d\x3e\xf1\xdc\x00\x20\xe7\x4d\xbb\x41\xfa\x5f\x6f\xde\x33\x4f\x18\x8f\x73\x13\xfd\xde\x18\xb3\xb5\xda\x5d\xdb\x44\xa7\x34\x26\x22\x44\x25\x01\x17\x81\xd5\xe0\x9a\x5f\x9c\xa0\xc7\x04\x84\x04\x20\x22\x77\x10\x49\x99\x07\x56\x57\xf4\x09\x09\x9d\x5b\x5b\x53\x58\xf8\xa6\xb5\x01\x3b\x63\xf3\x07\xc3\xd7\x26\x89\x53\x24\xc0\x53\x33\x9b\x65\xc9\x13\xd8\x2d\x09\x82\x37\xca\x5d\x96\x5c\x2a\x60\x5f\xa0\x7b\xd8\x13\xcc\xb3\x2b\xb9\x99\x71\xaf\x77\xc8\x54\x29\x15\x4a\xeb\x6d\x24\x70\x7c\x62\xeb\x56\x43\xc7\x17\x16\xb2\x7c\x61\x88\xf3\x27\x8e\x3e\xae\x1d\xaf\x37\xe9\x8e\x69\x9f\x77\x8d\xf1\xba\xd6\xcc\x74\x60\x14\x86\x4d\x98\x0b\x69\x3a\xa3\x46\x02\x79\xd2\xf4\x7a\xb3\xee\x95\x55\xd8\x60\x19\xda\x85\x49\x1d\x5b\xf8\x01\xee\xe2\xc7\x3e\xec\x65\x8e\x19\x37\x9c\xc4\x6a\x8c\xba\xe6\x09\x5b\x27\xa9\x2f\xb5\xfb\x14\x0e\x10\x9b\x31\x9e\xb6\xc5\x07\x09\x64\x1a\xa8\xa8\xc1\x4b\x02\xfd\xb1\x01\xd1\x06\xf6\x37\x80\x6f\xc3\xc9\x48\x06\xed\xb9\xc2\x19\xbd\x34\xd9\x80\x1c\x54\x04\xe9\x4e\x06\x13\x3d\x5d\xf6\xc9\xa3\x59\x82\x21\x76\x77\x47\x74\x62\xff\xf8\xa7\xb5\xbe\x8e\x97\xac\xc7\x41\xed\x42\xaa\x20\x49\x86\xf6\x32\x4b\xab\x8b\xc8\x76\x5c\xc8\x06\x18\x43\x25\x02\x88\x53\xf0\x3c\x29\x9b\x2d\x27\xb0\xdc\x50\x5f\x86\x93\x70\x98\xbc\x94\x42\xb3\x4a\x17\x41\x4a\x09\x95\x46\xec\x5f\x66\x95\xde\xb0\xd9\x92\x3b\x0c\x7e\xfe\xc7\xc7\x1e\xb4\xe1\xd6\x24\x28\x35\x87\x94\x77\xb4\x1b\x67\xd8\x8a\xc6\xe6\xa5\xfe\xe4\xf1\x87\x56\x80\xe6\xe6\x6b\xe7\x02\x0b\x7b\x36\xa5\xf6\x5e\x3a\x1b\xdb\x7f\x9b\xe1\x22\xb1\x14\xf7\x7d\x4d\x53\x21\xa0\xed\x34\xe2\xbd\xc5\x4d\x29\x3e\xa1\xf9\x7f\xd1\xe2\xc5\xdd\xa3\xc5\x58\x31\x40\xda\x4e\x7f\x46\xc5\x3f\x4b\x2c\xe0\x58\x07\x13\x9b\xfc\xba\x0e\xf1\x6b\x7a\xe3\x9a\x1f\x59\xe5\x98\x0d\x27\xd8\x9a\x8d\xfa\xdc\xc7\x49\xef\xb8\x7e\x30\x46\xf5\x23\x31\xb7\xba\x2b\x46\x7c\x54\x3b\xdc\x73\x10\x69\x7e\x18\x68\x96\x48\xf2\xa9\x61\xe9\x49\xf6\xa1\x25\x79\x11\xb1\x5c\x7c\x29\x2e\xc4\xc1\x9d\x81\xb0\x40\x8d\x77\x8f\x6a\x77\xda\xd8\xbe\x29\x7a\x93\x76\xaa\xb4\xbc\x85\x79\x78\xff\xd6\x39\x27\x9e\xd7\xec\xcb\xca\x88\xe3\x35\x3f\x8a\x9a\x06\x8a\xe9\xf5\xf3\x36\x3e\x0e\xc4\xc6\xb5\xc2\x43\x69\x9a\x9f\x38\x3f\x95\x05\x2b\x6b\x7f\xf5\x84\xe3\xa9\xb3\xee\x8c\x5b\x6f\x82\x5d\x54\x22\xac\x2a\x39\x8b\x53\x03\x58\x92\x97\x3e\x67\x85\x7d\xec\xd7\xc4\x30\xf5\x0c\xb6\x62\xb6\xc5\x24\xb0\xa4\x5d\xc6\xc2\x50\xd0\x79\xdb\x66\xfb\xb2\xe2\xf7\x0a\x56\x9b\x66\xf8\x73\xed\xbc\x0f\x34\x1e\x1a\xca\xa3\x5f\x5d\xfe\x58\x71\xf6\x28\x26\x4e\xf5\xb9\x70\xea\xdc\xdd\x12\x7b\x9e\x77\x27\x30\x6f\x6a\x7f\xc7\xb6\xd7\x5b\x3a\x92\x14\x37\x45\xda\x81\x64\x6a\xf7\x69\xab\x5d\xd9\xe8\x68\x62\x9c\x25\x6f\xa0\x4a\xfb\x10\x0d\x22\xdc\xe2\xf9\x6c\x20\xeb\x3b\x3b\xd1\xb8\x25\x54\x61\x26\x2b\xac\xed\x50\x92\x53\xe5\x65\x1a\x47\x77\x97\xeb\x13\x5b\xe3\x39\xcc\xd7\xa6\xf0\xb3\x17\xe3\x7b\x02\x87\x4b\xc5\x35\x9f\xe3\xca\xce\xd5\xce\xd4\x71\xc8\x7c\xeb\xe0\x6e\x1c\x92\x68\x6b\xee\xc4\xf8\x0c\xeb\x56\xc5\x62\x31\xbc\xbf\xb7\xb4\x0b\xb6\x3a\xe4\x52\x46\x2e\x25\xe4\xfe\xa1\xaa\x4a\xba\x64\x88\x38\xd4\xaa\xa7\xac\xdf\xa9\x8e\x2f\xeb\xd6\x76\x5e\x11\xd0\xd8\x32\x91\x6d\x04\x2f\x5e\xec\x2c\x36\x92\x81\xd2\x4f\x5f\xd7\x97\x45\x52\x5b\x43\xc2\xaf\xbf\x02\x77\x3a\x5b\x13\x0e\x62\xc7\xb0\x62\xb4\xb1\x01\xab\xb7\x20\x7e\xfa\x20\xb9\xa7\x1b\xf4\x38\xb2\x9b\xf0\x43\x7d\xfa\x12\x0a\xf4\xc8\x7e\x7e\x65\xcf\x06\xc8\xd0\x4d\x48\x8e\x10\x76\x17\x43\x29\xa1\x2e\x9f\xa4\x48\x5d\xb3\xe1\xaa\xfb\x2e\x86\x81\xaf\x1c\xa8\xfd\xd8\x49\x59\xaa\xe1\x18\x4f\xc4\xc4\x2c\x0e\x47\xce\x39\x55\x05\x1f\x16\x7e\x78\xed\xc5\xc2\xe3\x1b\xfc\xee\x51\x8e\xc0\x8c\xb1\xb3\x38\x88\x79\x5f\xe2\xc1\x69\x39\xdc\xa9\xc0\x01\xd9\x06\x33\xd6\xc5\x22\xde\x60\x21\x14\x02\xda\x58\xd4\x24\xf7\x31\x99\x68\xd8\x17\x0d\x07\x1c\xc3\x26\xce\x7d\x16\xb0\xa0\xd8\x7f\x4e\xf0\xc3\x51\x46\xde\x30\x49\x34\xa0\x5f\x9f\x7e\x70\x1a\x99\x1d\xf8\xdc\x70\x66\x67\x0e\xbc\xb7\xa0\xe1\x6c\x83\x59\xf8\x62\xe1\x6f\xb0\xc8\x8b\x86\x27\xa2\x26\x8b\x7b\x92\xb1\x8e\x70\x14\x17\x09\x34\x23\xee\x76\x0a\x8f\x45\x98\x65\xe6\x32\xb6\x32\x20\x91\x56\xa1\x7a\xdc\x25\x7a\x2e\x04\x31\x57\x60\xe8\x8a\x16\x32\x86\x8c\xc2\x2c\x8a\x97\xd1\x52\x75\x0a\xec\x54\xa8\x1e\x49\x8b\x4d\x1f\x10\x39\x50\x77\x66\x03\xfb\x3c\x26\xdc\x40\x16\xdc\xbb\xa0\x1b\x81\xad\x20\xc8\x7a\x9b\x47\xb9\x10\x46\x22\x7b\x95\x19\x2b\x46\x62\x41\x23\x5f\x66\x5c\xae\x62\x63\x83\x60\x40\x8f\x39\xdc\x61\x8b\xc5\xc6\x06\xb5\x3c\xe1\x08\xe0\xa7\xfb\x64\x0c\xcb\x3e\x19\x8f\x02\xe7\x2e\xec\x1a\x61\xd2\x94\x13\xdb\x86\x5f\xf0\x9b\x3c\x94\x94\xd2\x6e\x4a\x69\x21\x05\xc3\x9b\xc4\x2b\x22\xa8\x6c\xe8\x25\x5a\x69\xaf\x92\x23\xb9\x29\xe7\xb8\xb7\xdf\x07\xce\xf9\xb9\x11\xe2\x74\x85\xfe\x61\x39\xbd\xc1\x92\xca\x7f\x38\x86\xff\xdc\x18\xd4\xb7\x9c\x43\x7c\x85\x9c\x17\x56\x4b\x06\xf6\xdb\xc0\x71\x87\xd2\x54\x93\x73\x35\xe4\x1b\x39\x71\x16\x6a\x7f\x0d\x9c\xb7\x41\x2b\x4b\x87\xf6\xb7\xc0\xf9\x4a\x0b\xf3\xe6\xd7\xe6\xe6\xb4\xb9\x39\xea\x6f\x1e\x75\x37\x4f\xba\x9b\xa7\xad\xcd\xe3\x6f\x86\xb5\x4f\xb9\xfc\x24\x72\x58\x67\x3a\x57\xb9\x6d\xa5\xd1\xdb\xd3\xf7\xa7\xac\xa6\xb2\xb5\xd5\x80\x2b\xde\x57\xbc\xc7\xde\x6d\xb7\xdb\xcd\xf6\x0e\xfd\xdf\x6f\xb7\xbb\xfc\x7f\x8b\xa2\xa8\xa2\xde\x5f\x51\xf7\x5b\x60\xff\x15\x41\xab\xa1\x56\x5f\x21\xaf\x45\x53\xb7\x61\x9b\xa9\xca\xb4\x70\x7a\x8f\xe2\x69\x24\xda\x75\xbe\x05\xf9\xb7\x4d\x68\x26\xde\x30\x0a\x47\xce\x9b\xd4\xac\x39\xe1\x41\xdd\xc3\xa1\xb9\xe3\x75\x9e\x6a\x76\xa6\xc2\x6d\x8a\xc0\xfd\x74\xf9\x5e\x9a\x55\x09\xfb\xd4\x57\x26\x6b\x2a\xf2\x97\xd5\xa8\x94\x4d\xcb\xe5\x34\x9a\xa5\x22\xa7\x0c\x4b\x62\xb2\xe7\x48\x05\x5a\xe2\xe4\x9f\xe2\x22\x40\x4b\xc2\x48\x68\xc9\x14\x2a\xb2\xd0\x06\x2a\x4b\xbd\x87\x11\xdb\xf3\xfe\x28\x23\x46\x11\xeb\x22\x56\x29\xfb\x20\x62\x27\x0c\x4b\x8e\x98\x00\x8d\x11\x13\x9f\x55\xa8\x73\xc4\x64\x72\x09\xb1\x49\x94\xc5\x55\xb4\x94\x11\x67\x09\xde\x2f\x12\x20\xdf\xb3\x2b\x29\xd3\xda\xde\x2b\x1c\xbd\x09\xac\x3b\x7b\xde\xb3\xa7\x66\x09\x6f\x44\x35\x53\xab\x91\xae\x8b\x3d\xd7\xb1\x2e\xfa\x47\x04\x71\x8e\x3c\xc0\x67\xd4\xf1\x51\xc6\x2a\x47\x9b\x93\xca\xa3\x19\x85\xe9\x64\xd5\x60\xa2\xc8\xc8\x85\x86\x1b\x9f\xef\xa4\x3c\x1d\x76\x98\xc5\xd5\xe0\x72\x82\xaa\x04\x32\xe2\x13\x68\x3f\x30\x76\x22\x8f\x1c\x39\x04\xc4\xc0\xe1\xab\x02\x5f\x31\x6c\x9c\x98\x23\xc0\x8c\xf1\x0c\xf6\x34\xbd\x8e\xfd\xcc\x83\xd1\x28\xfa\xd3\xf1\xfe\xb0\x89\x88\xe8\xf7\x99\xfd\x1f\xfa\xb7\xf3\x6f\xfa\x83\x7e\x85\x09\x29\xfa\xbb\xbb\x83\xef\x3f\x3a\xbb\xf4\xf7\xdf\x7b\x7f\x20\xfe\xf9\x2e\x12\xf6\xda\x7f\x70\xfa\xb3\xff\xec\x7a\x7b\xf6\xf3\xe7\xcf\xf7\xe8\xa7\xb3\xf3\x8c\xca\xee\x0d\xec\x2f\xe0\x7f\xf9\x9c\x60\xd3\x77\x45\xe8\x59\x29\xb4\x53\x0e\x76\xda\x22\x28\x88\x4e\x95\x94\xa1\x67\xe5\xb4\x72\x50\x95\xc4\xb8\xa9\x72\xfc\xdd\xd1\xbe\xf7\xf4\x3c\xbb\x22\x40\xa3\xa6\xf2\xe3\x53\xc6\x92\xb8\xfc\x23\x6f\x1e\x5d\x59\x0e\xc8\x4a\xe7\xb4\xfa\xd9\xd8\x80\xfd\x8b\x99\xf2\x34\x0b\x52\xdf\x24\xd6\x4f\x1c\xb8\xf6\xb8\x5a\xce\xc4\x20\xf0\x93\x9c\xcf\x80\xf5\x13\xd3\x5e\x9d\xff\xb4\x94\x75\xf3\x2d\x31\xf9\x87\x2a\x57\xd3\x5c\x64\x7e\xb2\x39\x5b\x9d\x59\x4d\x0a\xce\xea\x3e\xd9\x1c\xad\xce\xfa\x8a\x68\x9b\x44\x9d\x9d\x0d\x47\x06\x53\x4f\x15\xbc\x5c\x55\xb0\x2e\xf3\x9f\x0f\x80\x2e\xa9\x9c\xf3\x7d\x35\xec\x77\xde\x80\xa4\xb4\x3f\x69\x31\x67\x0a\x2e\x59\xda\x2c\x1e\xe5\x16\x3e\xca\x0a\x6b\x85\xe1\xb6\x67\x3d\xf5\xec\x06\xb2\xf1\xeb\xb7\xff\x42\x13\xb0\x6a\xb9\xf1\x4b\xc0\xe3\xe7\xa8\x71\x04\x15\x96\x6f\x5a\x0b\x8b\x85\x51\x8d\xc5\xc2\x2f\x01\x0d\xbb\x14\x39\x3e\x07\xce\x97\x8a\x87\xc4\x1c\xbb\x73\xf6\x6b\x85\x05\x1b\xa7\x8f\xb0\xf3\xfe\x17\x16\xee\x35\xa9\xe5\x53\xff\xf0\xb1\x04\x43\x45\x1e\x45\x33\xdc\xc4\x23\xc8\x86\xf2\x3f\x82\x72\x28\x77\x85\x78\x38\xe6\x11\xf4\x53\xc9\xff\x00\x09\x01\x93\x3a\x2a\xda\xff\x5c\x1e\x6b\x1e\x0d\x35\xde\xcc\x31\xd7\x1c\xf3\xcf\x24\x07\x49\xdb\x8a\xac\x86\xfa\xb2\x7e\x35\xc0\x59\xc9\x2c\x0a\x13\xaf\x4f\x99\xee\xf9\x6c\xe4\x7b\xb2\xea\x7d\xd5\x3b\x3c\x7e\x30\xa0\x43\xe4\x0f\x59\x83\x6a\x1b\x79\x0d\xfb\x7f\x22\x65\xef\x7e\x92\x4e\x83\x87\xca\x02\x94\x6d\x64\x22\x71\xd5\x55\x85\x6e\xa9\xcc\x3f\x81\xf7\xe5\xe4\x98\xa0\xab\xd1\x39\x1c\x79\x63\x42\x79\x6b\x4b\xfc\xb6\xdc\xe9\xa8\x27\x3e\xa9\x4f\xac\xae\x11\x5d\xe2\x19\x6e\x91\x9d\xb6\xd1\x59\x40\xd9\xc5\x2f\x9b\xe4\x8c\x53\xec\x52\xca\x11\x0e\x15\x16\xba\xbd\xa3\x0e\x7d\xdf\x9b\xd6\xfe\xff\x06\x00\x00\xff\xff\x3b\xc1\xeb\x31\x55\x4e\x02\x00") + +func uiJsLibsD3335D3MinJsBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsD3335D3MinJs, + "ui/js/libs/d3/3.3.5/d3.min.js", + ) +} + +func uiJsLibsD3335D3MinJs() (*asset, error) { + bytes, err := uiJsLibsD3335D3MinJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/d3/3.3.5/d3.min.js", size: 151125, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsMithriljs020MithrilMinJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x7c\x79\x77\xdb\xb6\xd2\xf7\xff\xf9\x14\x32\xeb\xe3\x97\xac\x60\x5a\x4e\x9e\xf7\x9e\xe7\x52\x41\x78\x9c\xc4\x59\xda\x38\x8b\xe3\xb4\x4d\x14\x35\xe5\x02\x89\x94\xb9\xa8\x22\xe5\x25\x26\xbf\xfb\x33\x33\x00\xb8\x48\x72\x7a\xef\xe9\xa9\x45\x62\x1d\x0c\x66\xf9\xcd\x00\xcc\xd1\xcf\x0f\xce\xe2\x32\x5a\xc5\xc9\xe0\x6a\x64\x3f\xb4\x47\x0f\xa2\xb2\x5c\x3a\x47\x47\x73\x28\x5d\xfb\x76\x90\xa7\x47\x49\x94\xaf\x62\x71\x94\xca\x76\xf6\xa2\x78\x60\x06\xd6\xe0\x8d\xc8\x07\xaf\xb0\xe2\xc1\x9b\x38\x10\x59\x21\x9c\xc1\xd9\xeb\x8b\x07\x3f\x1f\x3d\xb8\xf2\x56\x83\x94\xcf\xd6\x59\x50\xc6\x79\x36\xf0\x4c\x9f\x05\xd6\x5d\xf3\x1e\x9a\x9e\x75\xf7\x9c\x7b\x76\x98\x07\xeb\x54\x64\x25\x3b\x85\x97\x24\x0f\x3c\xac\x66\x2f\xe1\x25\xf0\xb2\x40\x24\x27\x59\x9c\x52\xd9\x8b\x95\x97\x8a\xaa\x82\xf2\x44\x78\xab\x8b\x38\x15\xf9\xba\x64\x2f\xa0\xe1\x4a\xfc\xbd\x16\x45\xb9\xdd\xb2\x10\xa5\x6a\x57\x37\x13\x0b\xd3\xba\x43\xda\x3c\xe6\xf3\xc9\xd4\x2e\x12\xa0\x1b\xa6\x4a\x12\xd3\x5b\xcd\x89\x92\xc2\x62\x01\xdf\x33\xb3\x75\x92\x70\xee\x4f\x8e\xa7\x55\xf5\x46\xb6\xc0\x17\x6b\x8f\xf3\x57\x55\x65\x94\xde\xdc\x88\xb3\x81\xac\x37\xae\x62\x71\xdd\x79\x2d\xd6\x7e\xb9\x12\x42\x97\x58\x2c\xe4\x81\x8b\x4f\xce\x5d\xcd\x04\x37\x82\xc4\x2b\x0a\xac\x0d\x5d\xf5\xec\xc8\xdf\xb7\x40\xb9\xc1\x66\xfc\x0e\x86\x77\x8c\x30\xbe\x32\x98\x57\x96\xab\x02\xfa\xd5\x6c\x0e\x04\x8f\xe3\x99\xd9\x50\x33\x42\x6a\x7e\xb1\x60\x47\xf2\xeb\x41\x26\xae\x07\xa7\xab\x55\xbe\x32\x8d\x42\x24\x22\x28\xf3\xd5\x00\x66\x48\x4d\xfd\xc6\x06\x34\x14\x1b\x04\x51\x9c\x84\x2b\x91\x59\x83\x22\xca\xd7\x49\x38\xf0\xc5\xc0\x1b\x14\xe5\x2a\xce\xe6\x86\x35\x9e\xc1\x10\x63\x8f\x9f\xd9\xe2\x46\x04\x72\x96\xb1\x05\xd3\x1a\x06\xe7\xdc\x83\x45\x1c\x1c\x78\x93\x87\x53\x6b\x66\x03\x91\x1c\x1f\xc7\x22\x29\xc4\x00\x9b\xfc\xa4\xdb\x40\x2d\xcd\x66\xc7\xe1\x46\x13\xbb\x69\x32\xb7\x97\xeb\x22\x32\x69\xb0\xb6\x7e\x22\xeb\x1f\x4d\x71\x62\xda\xaa\x88\xbf\x95\xb4\x60\x29\xd0\x27\x47\x9e\x44\x30\xc6\x94\x47\x50\x56\x55\x66\x04\x83\xb8\x86\xe1\xec\x8d\xac\x1a\xfb\xc4\xdc\x97\x7b\x6b\x06\xee\x43\xe7\x18\x7b\xe9\x65\xf3\x63\x98\x20\xb6\x13\x91\xcd\xcb\xe8\xe0\x40\x71\x33\xc6\xe9\xa0\xe2\xb5\x8b\x4f\x4e\x4c\x6c\xc0\x91\x16\xc8\xc5\xd0\x0a\xed\xc8\x2b\xde\x5d\x67\xef\x57\xf9\x52\xac\xca\x5b\x73\x61\x1d\x1c\x98\x0b\xe8\x21\x0e\x0e\x50\x56\xf6\x78\x38\x59\x00\x6f\x0c\x03\x24\x04\x1f\x5d\x53\x2d\x10\x5f\x2c\xa6\xc9\x5e\x4c\xb9\x61\x58\x4e\xe7\x95\xea\xc7\x2b\x51\xae\x57\xd9\x60\xae\x08\x7b\x32\x82\xe1\x75\x23\x31\xe5\x73\x7b\x91\xc7\x99\x69\x0c\x0c\x0b\xc6\x6a\xe5\x79\x66\x82\x24\xb3\x90\x2d\x58\xc2\x52\x96\xb1\x9c\x2d\xd9\xdf\x6c\x65\xdd\x95\xab\xdb\x3b\x25\xc4\x49\x55\xa9\x07\xbb\xcc\x3f\xd2\x3e\x9b\x16\x92\x9f\x20\x29\x35\xe8\x5c\x10\x99\x85\x75\x87\xaf\x35\xee\x01\xd0\xe2\xc5\x19\x6e\x44\x62\x2b\x59\xb6\x14\x7d\xe9\x18\x99\x52\x72\xc5\xb6\xd4\x62\x6b\xfd\x9c\x58\x28\x9d\x72\xa6\xb4\xaa\x4a\xe0\xc3\xda\xba\x53\x45\x7b\x3c\x45\x21\x0a\x0f\x0e\x42\x3b\xcb\x43\x51\xc8\xbd\xbd\xe2\xf9\xe1\x82\x5d\xf3\xab\xa1\xb9\x26\xee\x27\x4e\xaa\xea\x15\x23\xc6\xb1\xa9\x7a\xa8\x0d\xbd\x62\xd7\xa0\x50\x9d\x17\xab\x26\xe1\x51\xfd\x0e\x0e\x62\x53\x3d\xb2\xd4\x1a\xa7\x1c\x15\x23\x01\x1b\x96\x81\x84\xaf\x49\x11\x52\x94\x5c\x58\x7e\xca\xef\x6a\x8b\xa9\xc6\xa0\x5c\xb8\x76\xa2\x02\x0c\x95\xda\xfd\x1b\x3e\x62\xb7\xc0\x05\x45\xcb\xed\x93\x9b\xf1\xcd\x70\x68\xe9\x15\x4f\x6e\xa4\xd0\x10\x2f\x69\x12\x60\xa6\xed\x2d\x97\xc9\xad\x39\x99\xb2\xc4\x62\x37\x87\x87\x9d\x01\xac\x46\xac\xbe\xc3\x7c\xec\x84\xa7\xaa\x82\x58\x2d\x1f\xd9\x53\x98\xf3\x19\x3f\x06\x8b\xf8\x10\xec\xdb\x23\x30\x86\x60\x35\xce\xf8\xde\x31\x03\x6a\xc6\x37\x8f\x75\x1f\xa2\x24\x05\x12\x0e\x0e\xf0\xaf\x94\x15\x2d\x8c\x6d\x89\x7d\x29\x6e\x81\x3e\x18\x60\xc4\x5e\x4e\xfa\xe5\x53\x7e\xe7\x91\x1c\x39\xcf\x58\x9c\x85\xe2\xc6\xb9\xa9\x5b\x1a\xdf\x02\x21\xf7\x30\x00\x38\x95\xd0\xcc\xc9\xd6\xcc\x49\x6f\x86\x96\x95\x1f\x36\x47\xfa\x30\xfe\x00\x23\x25\x93\x0f\x34\xcc\x87\xde\x30\xc0\x8e\xa6\x44\x2d\xa0\x5f\xc0\x8d\x6f\xdf\x94\x33\xfa\xf6\xcd\x18\xbe\x85\x91\xc6\xfe\x4a\x78\x97\xb8\x89\x67\x52\xb8\xce\x81\x67\x28\x92\x7a\xce\xbd\x86\xdd\x16\x54\x8d\xa4\xcd\xd1\xe4\x7d\x64\x17\xc4\xdf\x8f\xc4\x3a\x76\x41\xeb\xd0\x6b\xfd\xa8\x69\xbb\xd0\x0f\x1f\x5b\x52\xf6\xf8\x45\x77\xbd\x34\x74\x43\xca\xf9\x3f\xca\xd2\x7f\xc1\x4a\x1c\xe5\xd3\x46\xe9\xf8\xe5\xe4\xd3\x94\xe3\x1f\x57\xef\xe5\x0b\xbd\x97\x6c\xb6\xca\x53\x07\xeb\x6c\x2a\x61\xe0\x0a\xd0\xc5\x69\x1d\x9b\xb4\x55\x60\x44\x9f\xdb\x01\x50\x5d\x8a\x53\xd9\xc8\x24\xff\x63\xd5\x8e\x1e\xf6\xb4\x11\x11\x32\xb1\xbf\xa1\x3b\xd2\x6b\xfb\x1d\xad\xe4\x4b\xeb\x37\x69\xf1\x5e\x4e\x7e\x07\x8b\x86\xe5\x7f\xf0\xdf\xec\x22\x5f\x95\xe6\xdc\x62\x9f\x49\x15\x4f\x56\x2b\xef\xd6\x6c\x36\x62\xfc\x59\xa9\x5f\xda\x53\xf2\x56\x08\xbf\xd0\xae\x7c\xe1\x7f\xe8\xed\x40\x8b\xf2\xc5\x96\x34\x81\xda\x3c\x03\xd1\x00\x8d\x9f\x7c\x51\xeb\xd0\xaa\xdf\x14\xc0\xc4\x76\xb1\xa4\x51\x55\x11\x3b\x06\x1b\xda\x19\xe2\x54\x72\x76\x9f\xef\xe6\xc0\x78\x9f\x04\x2e\x69\xa7\x68\x98\xcf\x3c\x28\x2a\xc0\x1f\x3c\x15\x40\xaf\x30\xf7\xa1\x80\xfc\xcc\x5b\x62\xef\x97\x86\xb7\xb8\x9f\x3b\x08\x19\xb1\x3b\xe5\xdf\x61\x30\x67\xd7\x0c\x35\xa3\xf5\x38\x93\xfd\x69\x8d\x03\x64\xbd\x81\xf9\x7e\xdd\x59\xc7\x0b\x60\xc5\xce\xf9\xc1\x12\x7f\xb1\xd5\xde\x6b\xd9\xea\x96\x6c\xac\xa2\xa9\xf9\x87\xd5\xb4\x64\x20\xb7\x51\xd6\xa6\xdb\x14\x36\x83\x59\x75\xca\x3f\xd7\x75\x57\x1b\xbe\xed\xd6\x08\xda\x0d\xdf\xe7\xd2\xb7\xa5\xe0\xd3\x50\xe4\x61\x4b\xbf\x4d\xd1\xc3\x0d\x9f\x56\xd5\x53\xe5\xe6\xc6\xbe\x0f\x4b\x09\x60\xe1\xbe\xaf\x04\x28\xce\x4a\xe0\x08\x60\x82\x13\x50\x7f\x8b\x3d\x1d\x72\xa8\xda\x07\xdb\x5f\x94\x22\x74\xb1\x5d\x4a\x0e\xef\xe8\xf1\xe4\xcf\xaf\x47\xd3\xea\xeb\x93\xaf\xc5\xcf\x93\x3f\x1f\x4f\x8f\xe6\x56\x55\x21\x0c\x50\xf4\x38\x1a\x68\xf9\x12\x18\x40\x4f\x55\x71\x8c\xb4\x0c\x87\x53\x18\xd9\x42\x25\xdf\x3b\xf9\x47\x2d\x6f\xad\xf2\xc1\xc1\x77\xd2\x12\xe5\x26\xbe\x33\x32\xc9\xd2\xe7\x35\x52\x1f\xf8\x24\xf6\x81\xaf\xf5\x42\x4b\xbf\x1c\x27\xf0\xed\xa5\x07\x58\xa6\xc4\x9d\xc1\x01\x89\xd9\xef\x66\x66\xe0\x5b\x8f\x47\xe8\x02\x27\x81\x3f\x65\x64\xed\x41\x13\x35\x35\x8d\xeb\x40\xe7\xa7\x3d\x4f\xe3\x9b\x1a\x4f\xf8\xbd\xae\x35\x1c\x53\x76\xe8\xe0\x00\xfd\xe2\xab\x76\x95\x02\xd1\x33\x9b\xe1\x5f\x18\x1d\xe1\xef\x58\x6e\xdb\xdc\xe7\xf2\xdd\xde\x87\xb8\x60\x1e\x67\x1e\xa0\x0f\x59\xc2\x22\x9f\x83\x46\xcd\x66\x00\x2c\x04\xa0\xf6\x70\xe5\x5d\xdb\xe0\x94\x41\xe1\xe6\xb7\x26\xe0\x91\x94\x9a\x15\xae\xfa\x6d\x16\x35\xf7\x2d\xe7\xf0\x98\xc5\x3e\x8f\xfc\x27\x87\xc7\x50\x0f\x8e\xb6\x5c\xe5\x49\x22\x10\x07\xfa\x53\x07\x0c\x8b\x99\x74\x4a\xab\xea\xbd\xc5\x3e\x21\xdd\x89\xb6\xa8\x49\xc7\x64\xa2\xc9\xe5\x23\x80\x69\x7e\x55\xa5\x38\x6f\x67\xbc\x8d\xd7\x86\x88\xd8\xb7\x70\x6e\xb9\x14\x7c\x73\x24\x48\x5f\x26\x5e\x20\xa2\x3c\x09\xc5\xca\xa8\xd9\x8f\xa1\xd3\x27\x74\x63\x92\x0e\x90\x4f\xf5\x44\x20\xa4\x43\x1d\xff\x64\xc1\x52\xed\x3c\x5b\x67\x49\xee\x01\x60\xf2\x7c\x69\x55\xef\x5a\xb2\x9c\xd8\x67\x91\x97\x85\xf2\xb1\x69\x0b\x03\x09\xd5\x18\x78\x06\xdb\x23\x9f\x63\x25\xa5\x89\xc4\x3d\x33\x2d\xc7\xdb\x91\xc3\xb3\x3c\x5d\xe6\x19\xc8\xd5\xa0\x14\x29\xac\xac\x04\x58\x05\x7a\x33\x50\x2b\xf0\x06\x57\xf1\xaa\x5c\x7b\xc9\x40\x1b\x88\x41\x96\x97\x03\x0f\x6a\xd0\xaa\x33\x15\x44\xb0\x81\x28\x03\xdb\x40\xb9\xdb\xb5\xd6\xb4\x29\x4d\xdb\x52\xf2\x16\x0b\x9f\xbf\xf3\x17\x10\xad\x20\x1f\x0a\xdd\xc9\x62\x97\x3e\x5f\x68\xa2\x9f\x98\x06\x54\x62\xf0\xa4\xaa\xdd\x63\x67\x44\xc8\xd3\xa4\xf5\xa1\x93\x87\x9f\xaa\x82\x1e\xe4\x79\x2c\x89\x9c\x21\x54\xea\x8e\xad\xa6\xb6\xfa\x6d\x50\x54\x75\xdc\x82\x03\xe9\xe7\xb6\x9c\xfc\x7d\xda\xbe\x40\xb4\x07\x36\xe2\x3e\x89\x36\xf7\x48\x98\x66\xf1\xfc\x19\xec\x9d\xb8\x01\xb3\xb4\x51\x60\x4b\x81\x01\x23\x06\xa1\x0b\x0c\xf6\x63\xfd\xe8\x75\xdd\x2a\x50\x63\x81\xec\x81\xe1\x23\x15\x97\x16\x51\xeb\x7c\x03\x8c\x71\x0f\x36\x86\x2a\x6f\x97\x22\x9f\x0d\x36\x47\xd4\x92\x05\x63\xfe\xba\x3d\x9f\xae\x35\xd5\x80\x5a\x69\x2c\x4b\xdb\x89\x58\xda\xb1\x18\xed\x58\x57\x69\x95\x35\x53\xb3\x76\x44\x58\x4e\xd4\x29\x30\xef\x96\x2b\x71\x05\xb2\xf6\x5c\xcc\xbc\x75\x52\x3a\xef\x6b\xab\x13\x05\xd3\x9e\x53\x18\x2c\x65\x74\xac\xac\x67\xe2\xa3\x82\xf3\x3e\x0b\x24\x18\x94\x7b\x77\x93\x26\x59\xe1\xfe\xcd\x7b\xef\x8e\x51\x5c\xcd\xa5\xf2\xc2\xb0\x50\x6b\xa8\x4c\xc8\xf5\xf5\xb5\x7d\xfd\xc8\xce\x57\xf3\xa3\x87\xa3\xd1\xe8\x08\x9b\x39\x06\x38\x92\xa8\x69\x0d\x0c\xdf\xd9\xfe\xf8\xdf\xff\xfe\xdf\xa3\x33\x68\x49\x7f\xce\xde\x18\xa0\xed\x3e\xa1\x98\xc0\x6f\x66\x8f\x91\x14\x70\x64\xee\x26\x04\xa1\xa1\x59\xdb\xcc\x72\x36\x5a\xbc\xfd\x68\xfe\xcd\xb6\x5b\xfd\x60\xb4\x1f\x0c\x01\xfb\x28\x73\x0f\x72\x40\x89\x4d\x2e\x7d\x37\x32\x91\xa5\xdd\x49\x18\xc4\x24\x7f\x5b\x8e\x7e\xd3\xc1\xb5\xa3\x1c\x46\x13\x6d\xa3\xe1\xd5\xcf\x4d\x68\xeb\xce\xda\xf1\x02\xf8\xaf\x6d\x82\x72\xa4\x1f\x21\x5e\x19\x35\x6b\x42\xe1\x01\x52\x45\x18\x97\x9e\x9f\x08\x37\xf0\x1d\x89\x00\x9c\x4e\x67\x05\x95\xc0\xf5\xd5\xac\xb5\x72\x77\xca\x9f\x70\xe1\xf7\xc5\x94\xcf\xfc\xf1\xb6\xa0\xce\xfc\x0e\xf0\xef\x19\xe2\xce\x0b\x78\xb7\x24\x44\xe4\xd9\x91\xdc\xcd\x6a\x88\x52\xfd\x5e\x27\xe9\x21\x53\xbf\xdb\x72\xdc\x1d\xe1\x3d\xdb\x1c\x83\xa7\x7e\x5d\xa7\x1d\x6e\xee\xb5\x2f\x3a\xde\x35\x37\x8b\xc0\x29\x5b\x4c\x65\x81\x3a\xe2\x69\x5c\x79\xc9\x5a\x74\x2c\xe7\xc1\x41\x67\x5f\xef\xa8\x56\x6f\xa8\x4d\x6f\xb5\xdc\xe5\x4d\x94\x0b\x7d\x7a\xc0\x30\xd7\x90\x50\xc2\x86\x0e\x68\x19\x4d\xc1\x76\xf7\xa6\xd1\x02\xa3\x4c\x28\x8e\xde\x92\xcf\xff\x33\xb9\x38\xfe\x4f\xe4\x42\xa3\x19\x85\x07\x31\xfa\x6d\x44\x82\x78\x76\xaf\x4c\x58\x8c\x4c\xe8\x48\x23\xe5\xc0\xdf\x42\xc8\xf7\x72\x00\x2d\x8c\x32\x6a\x1d\x0a\xc1\x64\xa2\x5d\x93\xfb\x9f\x29\x5b\xd8\xda\xd1\xcd\xf7\xaa\x02\xb6\xe7\x7e\x93\x3d\x45\x18\x6c\xdd\x29\x1f\xdc\x14\x36\x25\x5e\x6f\x22\x05\x2b\xb1\x4b\x5d\x8f\x57\x12\x01\xe4\xbe\x99\x30\xd0\x0b\xb6\x97\xf8\x2c\x83\x25\x4f\x2d\xab\x05\x79\x9a\xe0\x3d\x4d\xe2\xf7\xf1\xb6\xed\x74\xc1\x78\x34\x28\xfa\x3b\xbf\x84\x19\x00\x97\x5b\x8e\xf9\x9d\x4f\xb4\x3d\xb9\x00\xe2\x91\x21\x66\x62\x4d\x81\x41\xd8\x1d\x33\x9a\x0a\x70\xbf\xb3\x30\x29\xdb\xe3\xe3\x77\x94\x90\xdd\x9c\x44\x53\x64\x48\x3c\x31\xc8\xd6\xa9\x2f\x20\x24\xc8\xf3\x44\x78\x99\xd1\x60\x32\x4d\x38\x21\xb3\xad\x3c\x0f\x50\xe1\x24\x2d\xa8\xb5\x20\xea\x25\xa9\x86\x8e\x98\xc5\x4d\xda\x37\x98\x92\x76\xdc\x85\xc5\xe8\xdc\xd1\xf2\xe0\x60\x09\x85\xcf\x29\xbc\xba\xd2\xa6\x92\xa0\x4c\x1b\x4c\xc4\x08\xdf\x2d\xd6\xb2\xc3\x72\x0c\xdc\x41\xc0\xe6\x1e\x6a\x9e\xef\x7a\x72\x16\x9e\x38\x4b\x77\x09\x84\x67\x62\xf5\xea\xe2\xec\x0d\xbc\x9b\x26\x26\x22\x91\x03\x34\xe3\x05\xac\xa5\xaa\xbe\x6b\x1b\x49\x0e\xbc\x9b\xc9\x62\xf7\xf0\x79\x4b\x3b\x7f\xc0\x53\xd6\xcc\xf6\x9b\x24\x8a\xb8\xbc\x8b\x71\x7d\xb6\x6d\x28\x52\xad\x01\x6d\x9b\x86\x9c\xf7\x64\xd4\x53\x31\xe9\xa1\xaf\x1e\xe4\xc6\xc3\xa6\x41\x09\xfd\xb6\x3d\x23\x0a\xf2\x02\x16\x32\xd1\x86\x17\x33\x4c\x27\x04\x2a\xa2\xe0\xc1\x64\x36\x65\x11\x0f\xe1\x07\xf5\x8b\x2a\xc1\xf8\x62\xd2\x6c\x6e\x29\xab\x06\xcf\x33\x30\x71\x71\xb6\x5c\x93\xcd\x23\x9d\xa5\xaa\x3d\x3e\xa7\xb8\x58\xee\xc3\x5c\xa6\x9a\xef\x70\x30\x3e\x1f\x63\x96\x14\x33\x9e\x52\x77\x68\x14\x00\x61\x08\x30\xe1\xc9\x42\xbb\x10\x67\x6b\xd1\xd1\xea\xb9\x04\x28\xa8\x1f\xb3\x46\x0e\x8d\x3c\x33\x2c\xcb\xc3\x21\x13\x13\xdc\x66\x27\x9d\x5d\x94\xb7\x89\xa6\x4e\x9a\x93\x79\x93\x73\x9e\x5b\xfd\xa0\x2a\xc6\x85\xcd\x2d\x95\x42\x8d\xaa\x2a\x9a\xc4\x18\xbb\xcf\xe1\xc7\xa2\x35\xd0\x68\xf0\x26\x8b\xc6\xbd\x8e\x91\x25\xfb\x83\x88\x76\x1a\x62\x82\x97\x88\x91\x93\x0b\xd7\x88\x56\x62\x46\x04\xb9\x74\x42\x72\x02\xb6\x23\xf6\xd7\xa5\x00\x14\xb0\x1b\xbd\xfc\xfb\xe8\x26\x89\xb3\x4b\x83\xc9\xae\x0c\x00\x44\xe7\xb4\x62\xc7\x48\xa6\x3a\xd4\xc0\x96\x1b\x35\x33\x2c\xa3\x0d\xf4\x60\xb7\x92\xb8\x28\x31\x5d\x8e\x3b\x27\x19\xa5\x5e\x60\x61\xa9\x7e\x46\xc6\xeb\xe7\xeb\x38\x04\xc4\xa5\x5e\x22\x11\xcf\x23\xd9\xdf\x35\xd5\xce\xc3\x0b\xc4\x74\xb8\x13\xc8\x37\x62\x1a\x6d\xf4\x4e\x42\x54\xe6\x7b\x41\x60\x6c\x61\xa7\xa2\x28\xbc\xb9\x68\x77\xf5\x75\x06\x32\x13\x87\x03\x7d\x32\x64\x40\x6c\xad\x62\xa6\x45\x5d\x6b\x2d\x08\x5b\x59\x8e\xa5\x16\x34\x41\x3c\x1e\x69\x91\x3a\x1f\x1e\x8f\x83\x27\xf8\xe7\xf0\x10\x51\x85\x37\x09\xe8\x14\x25\x98\x76\xc2\x78\x99\xb2\xdf\x28\x04\x48\x9f\xe6\x57\xe2\x19\x2a\x33\x75\xd3\x44\x03\x98\xa8\xe9\x04\x4b\xe6\x9c\x4d\xf0\x5a\x3e\x8d\xba\x30\x7d\x6a\x36\xda\x6b\x66\x27\xd1\x51\xd1\xfe\xc8\x6a\xc9\x5d\xe0\x21\x1c\x92\x73\x4f\x30\xe0\xfd\x30\x18\xd8\xec\xd6\x8d\x06\xee\xed\x29\xcd\x90\xd7\x0b\x16\x34\xbb\xc0\x0a\x00\x02\xf3\x79\xaf\x16\xd6\x32\x0e\xda\x48\x61\x33\x50\xf8\xe7\x38\xc1\x6b\x80\x83\xd5\x46\x0d\x9d\x42\xca\xf7\x6b\x12\x42\x22\x21\xe4\x6d\xbd\x9e\x7f\x01\x1c\x97\x5a\xdd\xd6\x49\x58\xb5\xe8\x8e\xd6\x32\xf7\x52\xda\x35\x69\xc3\x9a\x11\xa5\x41\xf6\xc9\x8e\x29\x3c\x28\xf8\xf1\x1e\x0f\x1b\x1f\xc0\x66\xdb\x69\xc8\x62\x09\x5e\x0f\xa6\x77\xcd\x0d\x5b\x3f\x63\xa1\x36\xed\x33\x55\x73\x12\x2e\xbc\x00\x7a\xa1\x97\x31\x0d\x9f\xda\xf9\x62\x1e\x67\x06\x10\xc3\xbc\x9e\x40\xcd\xc0\x5f\x85\xff\x49\xbf\x5a\xad\xfc\xfe\xa6\x22\x0b\xb1\x61\x63\x92\xe8\xb0\x72\x63\xd1\x78\x30\x36\x6e\x8e\xfd\xfa\x75\x20\xbe\xc3\x61\x73\x08\xd6\xb2\x31\xd9\x0d\x7e\x80\xaf\x01\x0f\xaa\x8a\x76\x9c\x6d\x47\xcb\x32\x8e\xb6\xa0\xa6\x00\x67\x5c\x62\x5e\x63\x5d\x7a\x12\x37\x91\xd1\x6f\x3c\x95\x4c\xf1\xe1\x1a\x67\x98\xac\x4a\x6e\xef\x84\x6f\x02\x38\x6a\x49\x48\x51\x4d\x48\x40\xf9\xc7\xc6\x38\x78\xcd\x89\xdd\xe8\x89\xef\x7e\x54\x6b\xb2\x0e\x8f\x1d\xbf\xed\x99\xb5\x3d\x77\xc0\x36\x7d\xde\xdc\xd1\x52\xde\x14\x62\x1e\x92\x79\xb5\x9e\xc4\xb7\xcb\xfc\x97\x8f\xef\xde\xee\x1a\xa7\x66\x9d\x29\x73\xc9\x2f\x69\x7e\xb6\x1a\x9b\xde\x46\x92\x4c\xa1\xc5\x32\x8a\x0b\xe8\x56\x55\xf8\x50\xb3\x90\x77\x19\x7d\x0f\xbd\x4f\x8e\x31\xeb\xca\x7d\x6d\x81\xee\x39\x4d\xc7\x64\x3b\xca\x1d\xe5\x04\x1b\x6c\xea\xa2\x99\x6b\x4c\x97\x43\x16\x6b\x1c\xb6\x39\x43\x2e\x3b\x8c\xa5\x82\x74\x33\x5f\x01\xc3\x0a\x27\x6c\x59\x03\xac\xd2\xbe\x15\x9f\xd5\x71\x91\xd0\xb9\x25\xcc\xac\xeb\x72\x4c\x90\xb5\xbc\x5a\x02\x5f\xf6\xa1\xe9\x3e\x58\xac\x7d\x69\x9a\x1a\xf9\xc5\xfb\x01\xa3\xb1\xc7\x7f\x43\x65\xf5\x65\x30\xf8\x07\xca\xa9\x62\xed\xef\xf0\xdc\xe1\xe5\xc1\xc1\x46\x81\xbd\xbf\x0f\x2c\x28\xdc\x09\x76\x6a\x96\xba\xbb\x11\xac\x9f\x5a\x8d\x51\x8e\x41\xbe\x56\xc0\x21\x6a\x89\x2b\x75\x9b\x27\x9a\x1f\x04\xd5\x41\x9f\xfe\x0d\xe8\xfe\x06\x74\x7f\x53\x26\xf5\x33\xfd\xb2\x2f\x84\xe6\x9e\x83\x12\xdc\xaf\x14\x2d\x03\xfe\x46\xf9\x6c\x34\x41\x9e\xbc\x44\xfe\x04\x7a\xe6\xe0\x23\xed\x14\x74\x73\xaa\xa3\xe8\xb6\xd7\x4a\x5b\xb6\x99\xcf\xef\xea\xb1\xb4\x6f\x41\xeb\x36\x5d\x30\x55\x87\xc7\xa8\xec\x78\x84\xed\xf3\x2b\x33\xc0\x54\x28\x90\x61\x86\xc3\x63\x16\xe8\x11\xf1\x9e\x45\x53\x33\x62\xa1\x25\x93\x80\xb3\x5e\x9e\x0e\xfc\xda\xbc\x83\xb4\x02\xb2\xe9\x34\xfa\x5c\xe7\x55\x91\xd0\x35\x98\x49\xa0\x6a\x32\x9b\xcc\xa7\xa0\x38\x7b\xa3\x66\x23\x23\x04\x1b\x32\xdf\x82\x80\x31\xd8\xd5\x2b\x92\x5d\xe4\xc5\x01\x64\xe0\xb9\x98\x9f\xde\x2c\x4d\xe3\x4f\x63\x18\x01\x1b\x29\xc7\x6b\x1e\x39\x74\x60\x30\x74\xbf\xda\x77\x8f\xea\xa3\x39\x33\x4c\xfb\x67\xd7\x32\xac\xad\x16\x54\x07\x8f\xf8\x0c\xf5\x43\xe3\xc8\xdd\x37\x88\xf2\xd8\x2e\x45\x51\xc2\x32\x34\x19\x41\xd3\x39\x66\x1d\x75\x6d\x21\x44\xa4\x8f\x2b\x9a\xb1\xf1\x94\x62\x0a\x3a\x7a\xaf\xc2\xb1\xc3\x87\xe0\x0f\xf8\x08\x38\xa7\x99\x3d\x9e\x3f\x99\x8d\x67\x20\xc6\x33\x40\x07\x80\x88\x3a\x24\x57\x5f\x6d\xa4\xd7\xb0\xa6\x3c\x14\x01\x6c\xf9\xa7\xf3\xd7\x4d\x1e\xd8\x44\x9c\x0c\x9e\xa7\xcf\xac\x1a\xd9\xd5\xb1\x90\x85\x06\x12\xdc\xd3\x26\x79\x0f\x2c\x4d\xb9\x4a\x7e\x45\x5d\x84\xe7\x54\x94\x1e\x3d\x3f\x84\x9d\xf3\xec\xeb\x28\x0e\x22\xeb\xce\xb3\xfb\x3e\xdb\xdd\x2c\x30\x11\xb7\x49\x4e\xc9\x88\x65\xef\xb8\xd9\x58\x02\x0a\xeb\x15\x22\xa5\x0b\x58\xbc\x28\xe9\xca\xcf\x2a\x50\x5e\x13\x84\xcb\x58\x7a\x65\x94\x29\x90\xda\x15\x6a\xc4\x0d\x85\xf0\x56\x41\xe4\x5e\x99\xfa\x51\xc9\x3f\x98\x2b\x07\xa4\x1a\xe2\x07\xe3\x04\xe0\xa4\xdf\x46\xb1\x65\xfe\x69\xb9\x14\xab\x67\x5e\x81\xe7\x93\x16\x9a\xbe\x16\xa8\x8d\xd5\xf8\xe6\xa6\xfa\xfc\x58\xab\xd0\xef\xb4\x7c\x84\xf5\xde\x19\x91\x57\x20\xc4\xed\xd3\x7b\x8a\xd7\x4f\x22\x57\xfe\x70\xf9\xe3\x00\xe5\x01\x1a\x92\x8b\x1c\xd4\xa7\x0b\xec\xd6\xad\x13\x08\x39\x5d\x39\xea\x1c\xd5\x4a\xf4\xad\x63\x2b\xdf\xf5\x87\xc6\xc4\x18\xce\x86\xc6\xd4\x70\x66\x10\x66\x21\x60\x66\xb1\xbe\xd4\x01\x24\x2e\xb8\x0c\x48\x78\xe4\x8a\x6c\x4b\x40\x00\x5a\xc7\x18\xc6\xb8\x6b\x33\x62\xea\xe5\xb5\x8b\x5a\x13\xae\x61\xe1\x3b\x73\x18\x21\x68\x29\x84\x29\xf8\x43\x27\x02\xf8\x00\xb6\xcd\xf5\x1c\x53\x3d\x62\xba\xc6\xd3\x56\x73\xe7\xac\x43\x83\x1b\xc3\x1d\x35\x3e\xb8\x9b\x9a\x4d\xa6\x2a\xa5\x6f\x1c\x18\x96\xf3\x5f\x0d\x10\x59\xe3\x48\x9e\x29\x0a\xe9\xd5\x17\x56\xdd\xd8\x8c\x66\xcc\x96\xd9\x57\x28\xfc\x60\xf4\xf0\xda\x12\x60\x1a\x6f\x75\x52\x9a\x23\x4b\x7a\x73\x65\xdd\xf0\xc2\x0d\xc8\x55\x4f\x74\xf1\x24\xb8\xa4\xa1\x40\x52\xef\xd0\xe7\x8e\x60\x9f\x74\x86\x6a\x2c\x9e\x84\xe3\x50\x9f\x85\xce\xc0\xb1\x85\x53\xdd\x85\x1b\x68\x13\x77\xe8\xea\x8c\x40\x43\xc4\x1f\x62\x6c\xaa\xb2\x36\x3b\x9b\x1d\x4f\x2d\x4a\xd4\x8e\x55\x82\x0b\x78\xee\x6a\x68\x8c\x2f\x98\x1e\xc1\x3b\x2d\xf8\xcc\x27\x81\xb4\xa9\xf8\x23\x19\x02\xa6\xdb\xa1\xaa\x48\x33\x26\x68\xd9\x71\xdd\x62\x1e\x04\x4e\xe3\xb8\x87\xf4\xd8\x05\x61\x3d\xfc\xcb\x3b\x9d\x6e\xba\xa8\x05\xd8\xbe\xca\x97\xb0\x91\xe3\xc6\x35\x95\x91\x40\x28\x02\xbe\x03\x9f\x3a\xe8\x04\xbc\x86\x16\x2a\x18\x43\xb5\x83\x42\xcc\x7e\xb1\xce\x04\xb7\x2a\x32\xd3\xef\x01\x52\x99\xa0\xb9\x5a\xb0\x0c\x2c\xec\xb2\x23\xa8\x58\xc1\x79\x8c\x09\x84\x95\x28\xf2\xe4\x4a\x98\x29\xa5\xae\x56\x02\xfd\x12\xbc\xd4\x9d\xed\x0f\x75\xfe\x82\x2c\xa0\xbe\xeb\xd4\xc4\xf8\x29\xc5\xf8\x00\xac\xd4\xf9\x0a\xe5\x01\xdb\x08\x8b\x5e\x11\x8f\xca\x6d\x1e\x8d\x15\x20\x4d\x59\x97\x1e\x30\xdc\x78\x5a\xc6\x61\x26\x13\xa5\x7b\x77\x5d\x80\x75\x3a\x3e\x9c\x5b\x77\xc2\x0e\xc5\x4c\x80\x81\x0c\x21\x48\x12\x74\xc0\x47\x09\xfe\x39\xb6\x94\x88\x1e\x62\xb5\xee\x55\x32\xb9\x03\x0b\x02\xc8\x0b\x4e\x27\xa3\xc8\x51\x35\x64\xd6\xb0\x7a\xc7\xc8\x19\x65\x92\x58\xc2\x23\x06\xe3\xd4\xa1\xb9\xe8\xba\xb3\x04\x26\xc5\xe2\x7e\x59\xb4\x55\x86\x13\x23\xf3\xe7\x7d\x0e\xb9\xb0\x3c\xe0\xa4\x43\x46\x08\xd3\x03\xaa\x07\xe8\x9c\x8e\x0b\xe9\x3a\x97\x8f\xf7\xd1\x60\x2e\xcd\x84\xd9\x8f\x28\x9e\x21\xc5\x33\xe2\x05\xee\xca\xa5\x0b\x03\x60\x00\x26\x8f\x42\x2d\x62\xa7\xb3\xb1\x8e\xc0\x8c\x51\xae\xfa\x45\x8a\xe0\x18\x99\x2f\x6f\x1f\xce\xf9\x31\xaa\x21\x58\xd1\x47\x60\x3d\xff\x87\x5d\x72\x02\xd8\x09\xa8\x78\x0a\xff\x67\x68\x8e\x2f\x51\xca\xd3\xb8\x10\xa8\xfc\x97\x5a\xd2\x78\x77\x6b\x15\xed\x89\xda\x5f\xc5\x44\x8b\x49\x90\x7e\xa9\xe4\xf1\xc7\x5d\xa2\x7e\x17\x35\xe7\x86\x1a\x75\x94\x0f\xd1\x8f\x54\x16\xad\x7d\xa4\x0c\x6e\xd0\xd1\x05\xda\x87\x05\x15\x29\x85\x70\x32\x69\x19\x48\x45\xd5\x1c\x1d\xbf\xf6\xbd\x8b\x33\xdb\xe2\x13\x05\x1b\x00\x1f\x84\x5e\xe9\xc9\x0c\xa8\xb1\x28\xf2\x6c\x69\x10\x4c\xd0\xa5\xe0\x7a\xdf\xe4\xd7\xda\xf5\x6a\xc7\x86\xa4\xfa\xf6\x1f\x67\x6f\x5e\x95\xe5\xf2\x5c\x5e\x02\xa6\xb8\xda\xce\x97\x02\x43\x1d\x00\x1d\x51\x1e\x82\x1f\x59\xaf\x12\x46\x0e\x65\x0d\xe1\x2b\xfc\x2c\xbd\xa2\xb8\xce\x57\x78\x42\x03\xe2\x00\xb1\x76\x78\x0b\x61\x62\x29\xc0\x7a\x67\x73\xd1\x0d\x9b\xfe\x07\x56\x1a\xda\xd4\xe2\x23\xb6\x00\x31\x0b\x31\xa4\x2c\xd7\xc5\x13\xfe\x70\x34\xc2\xeb\x8c\xf2\xf5\xf1\xa3\xd1\x08\xf0\x4b\xae\x92\x11\x28\x97\x8e\x81\xcf\x06\x2b\x09\x9e\x40\xc8\x82\x68\x46\x8b\x9f\x6a\x41\x2f\xdd\x26\x20\x5f\x98\xaa\x5a\xc5\x5e\x12\x7f\x17\x30\x3d\x86\x7d\xb6\x74\x22\xf1\xec\x16\xad\x12\xb2\x05\xb4\xe0\xe5\xe9\x85\x64\x93\x5c\x27\x91\x22\x4a\xc5\x88\x57\x40\xb2\xa0\x13\x7d\x3a\x1f\x39\x44\x36\x1a\xcc\xc0\x00\x2c\x96\x97\xac\x8f\x90\xd1\xe3\x01\x7a\x2c\xe8\xc6\xd7\xe5\xec\xf0\x7f\x0d\x8c\xd4\xc0\x4c\x6f\x4e\xbf\xc4\x36\xbb\x27\x38\x09\x02\xb1\x2c\x77\x0c\xcd\x06\x98\xfa\x39\xfa\x19\xc6\xdc\xc8\x27\xb5\x67\x21\x82\xeb\x32\x33\xc4\xb4\xa9\x4a\x52\x22\x97\xb9\x90\xba\x34\xe3\xdb\x0b\x95\x2c\x70\xe5\x0f\x84\x43\x94\x15\x6e\x4c\xee\x0c\x8f\x83\x0f\x0e\x66\xdd\x94\x36\x02\xb9\x17\xf9\x2a\x85\xc8\xc8\x93\x29\x3c\x43\xad\x63\x80\x63\x74\x6e\x42\x8b\x18\x74\x63\xd5\xbd\x13\x3d\xc8\x57\x03\xdd\xd7\x1e\x3c\x8b\x44\x70\x39\x80\x36\x83\xbf\x1a\x36\xfd\x35\xc8\x97\x32\x01\x98\x0d\xfe\x4a\xf5\x85\xf4\xbf\x0c\xad\x42\xc8\xb7\x0c\xd3\x2d\x2c\x54\xf6\xc1\xd0\x77\x17\x91\x62\xdf\x0b\x2e\xbf\x19\x43\x53\x87\x6e\x96\x3d\x97\x37\xd7\x4d\x00\x29\x50\x81\xe7\xc6\x88\x06\x61\x88\x63\x71\xfc\xaf\x9f\xe5\xbb\x97\x85\x79\x0a\xda\xd0\xde\xe9\x7d\xf4\x2f\xf4\xfe\xdb\xd9\xa3\x60\x15\xc3\x0e\x59\x63\x1f\x7d\x76\x23\xdc\xe0\xb0\xa2\xfb\x32\x8d\x11\xca\xc1\x0f\x44\x19\x94\xb9\x00\x34\x51\xd0\x49\x04\x48\x6d\x8d\xd9\xc7\x39\xba\x74\x16\x69\x09\xdf\x91\xaa\xf8\xa7\xf9\x7e\xa0\x19\x77\x52\xcb\x9c\xff\x3f\x1a\xb1\xde\xe4\x7d\xf5\x30\xef\xa8\x9b\x63\x90\x15\x1f\xa4\xde\x25\x6e\x20\x99\x94\x81\xda\x16\x03\x8c\x74\x43\x2f\xdb\x3b\x96\x24\x53\x4a\x71\x8b\x62\x59\x0b\x41\x05\x27\x23\x32\x34\xe9\xa7\x17\xea\x3e\x19\xb9\x00\xe2\x1c\x7c\xc4\x6a\xbd\x9f\x10\xec\xb8\xbd\x37\xc7\xd0\x2f\x86\x84\x9e\xf3\x21\xf4\x1b\x02\x54\x27\x29\xc6\x33\x3f\x8b\x3d\xb7\xfd\x3c\xbc\xc5\x34\x09\xc8\x8b\x66\x4d\x6b\x30\x9f\xea\xc8\x1b\x4f\x16\x50\x2b\x78\x57\x2b\x1a\xcb\xd9\x1a\xce\x36\xfb\xb8\x49\xf6\x63\x20\xdb\x05\xb2\x0f\x0c\x40\x9d\x6b\x04\x5b\xd4\x46\xaf\x53\xb8\xe1\x50\x38\xcd\xe1\x81\x1c\x91\x07\x5d\x50\xd6\x92\xf5\xac\xeb\x40\xbc\x36\x5e\xf5\x0e\xbf\x4f\xbf\x5e\x43\xc4\x1a\x53\xec\x0b\x88\xda\x6f\x33\xad\x98\x67\x7d\xdc\x84\xa7\x0d\xd4\x15\x80\x46\xc3\x69\x13\x8b\x8d\x3d\xfa\xc0\x43\xc6\xaa\x58\x03\xfb\x26\xf0\x83\x0a\x91\x88\x52\x0c\xf0\xa5\x6e\x08\xc2\xfe\xcf\xd9\x29\x7b\xc1\x5e\xb2\x57\xdc\x98\xe4\x94\x47\x18\xc8\x74\xc2\xd4\x60\xaf\xdb\x32\xba\x85\x0a\x45\xbf\xb4\x45\x52\x89\xa0\xec\x57\xde\x02\x0c\xf6\x06\xdc\x73\xa3\x61\xec\x8c\x1f\x99\xae\x63\xfe\x59\xfd\x04\x51\xb3\x05\x21\xfe\x4f\x5f\xed\xaf\x93\xaf\x53\x08\xf3\xad\xca\xfc\x3a\xb1\x87\xee\xd7\xa9\x05\xe1\xf4\x5b\x7e\xf4\x75\x62\xc2\xab\x05\xed\xb9\x69\x54\xff\xaf\xb2\x28\x5b\xf0\xf5\xa1\x05\x4d\x8e\xd8\x3b\x7e\xf4\xa7\x79\x72\x7e\x7a\x52\x3d\x3d\xf9\x78\x5a\x3d\x3d\xaf\x9e\xbd\x7b\x03\xff\x9f\x9d\x9d\xbc\x7d\x5e\x9d\x9e\x3d\x3d\x7d\x5e\xbd\x3a\xaf\x5e\x9f\xbd\xac\x5e\xbf\x7d\xff\xe9\xa2\xfa\xf5\xf4\xf3\xcb\xd3\xb7\xd5\x9b\xd7\x6f\x7f\xad\xce\x4e\x2f\x4e\xaa\xf7\x27\xe7\x27\x67\xd5\xc7\x77\x9f\xce\x9f\x9d\x56\x17\xe7\x27\xcf\x7e\xad\x7e\x7f\x7a\x6e\xed\x1f\xb1\xf7\x5d\x41\xae\xc7\x21\xee\x1a\xdd\xc0\x66\xe7\xfc\xae\x23\x5b\x4e\x17\x39\x7c\xe0\xf2\x1e\xe5\x87\x6d\x03\x12\x95\x69\x82\x9f\x1d\x3c\x6f\xbe\xd6\x39\xd5\x37\x47\xb7\x8a\xd0\x4e\xbb\xcf\xf5\x96\xa9\x73\x8b\xed\x9e\x78\x07\xa5\x2b\xe5\x9e\x84\x28\x9d\x48\x01\xc9\x68\x5e\x6a\xd6\x4d\x7b\xf7\xe8\xa6\x6e\xfd\xa1\x6a\xd6\xf6\x74\x26\xd3\x9a\x7d\xc4\xcb\x8a\x17\x98\xac\xd2\x19\xb6\x1e\xf6\x61\x4d\x26\x5e\x7e\x60\xb3\xe7\x6d\xdf\x8c\x3b\xcd\x8a\xf5\x4a\x90\xdd\x7f\xfe\xee\x4c\xdf\x7f\x03\x37\x81\xf6\x05\xf1\x84\x08\x07\x65\x3e\x48\x65\xd4\x7e\x94\xca\x84\xc9\x51\xaa\xe6\x1b\xc4\x05\x5d\x95\x03\x1b\x2e\x66\x71\x06\x30\xd4\x90\x7b\x32\xa7\x28\x09\xc3\x6e\x3c\x6c\x06\xb4\x18\x41\xa4\x41\xe7\xce\x1b\x1c\x73\xcf\x1d\x6f\x8c\xe0\x97\x76\x03\xfd\x99\xbc\x73\xe4\xab\x8f\x85\xa8\xb8\xf9\x5a\xa8\xbd\x90\xe3\xd7\x18\x6e\x81\xad\xa3\xed\x8d\xcd\x45\x87\xad\xf8\x61\x92\xbc\xe9\x80\x51\x9b\x6c\x36\x03\xc4\x4b\xa9\x44\xbc\x80\xe1\x53\x99\xbc\x71\xa1\x0a\x45\x1b\xc6\x5e\x02\x96\x4d\x20\x5c\x53\x3a\x9c\x3c\xb9\x1c\x5f\x82\x1e\x8b\xc9\xe5\x14\x71\x3d\xc0\x36\x3c\x27\xdf\x85\x4f\x3d\x02\x6f\xca\x6d\x79\x68\xfc\xf5\x99\x3a\x05\xfe\xd8\x17\x63\xc0\x1d\x5d\x55\x80\xe5\x35\xde\xde\xeb\x07\x58\xde\x46\x80\x25\x91\x2e\xc6\x10\x10\x1f\x02\x4e\x45\xf1\x20\xc6\x7f\x62\x78\x81\x9d\xfd\x8e\x7f\xfe\xc0\x3f\x4d\x06\x75\xa4\x92\xc1\x2a\xb7\xca\x3c\xba\xeb\xea\xfb\xfc\xf8\x5f\x20\x3f\x81\x8e\xa3\x77\xad\x0b\xb3\xef\x3f\xc8\x83\xe3\xba\x48\x2e\x38\xe5\x75\xd6\x89\xd8\xc0\xe0\xf7\x08\xdf\xfb\x44\x00\xf2\x1d\x88\xdd\x32\x28\x6e\xe2\xa2\x2c\x06\xf2\x1c\x66\x20\xe5\x0d\xa5\xd2\x6b\x2f\x71\xc6\x19\xc8\x66\x5c\x6a\xa1\x0b\xf8\x6f\xdd\x83\x8c\xd1\x13\x54\x7c\x2c\xdc\xfc\x4a\x25\x64\x33\xfc\xee\x64\xce\x37\x0f\xd7\xba\xa9\x4a\xdc\xb2\x7d\x2e\x99\x55\x83\xbf\x94\x27\x68\x98\x28\x1c\x47\x20\x0e\xf8\xe5\x14\xdd\x54\x95\x0c\x09\x3b\xf9\x6f\x36\x47\x04\xde\xc9\x87\xf7\xce\x09\x09\xd5\x75\x8e\xe6\xb6\x07\xde\xd5\xb3\x99\x4e\x9d\xd6\xf9\x4a\xa9\xff\xa0\xd3\x51\x25\x16\xf8\xb2\x71\x92\xd8\x2b\xc2\x40\x79\x6f\x86\x21\xf4\x56\x0e\x1d\x6f\x7b\xee\x3e\x57\x62\xbf\xc1\x10\x10\x74\x6d\x1d\x94\x3c\x24\x35\x2d\xd6\x7e\xd0\x66\xa9\xee\x15\x93\x87\x96\xca\x83\xc7\xfc\x13\xf7\xf1\x34\xbb\x7b\xfa\xd1\x35\xec\x35\x58\x0b\xbf\x7f\x9e\x03\x91\x26\x8a\xcd\x42\x3b\x69\x4c\xc6\xe1\xa5\x63\x5c\x1c\xbf\x64\xbf\xe3\x8f\x8f\x97\x84\x81\x5a\x2c\xab\x6b\x75\x5f\x12\x13\xab\x7a\xb1\x3d\xc1\x0e\x80\x00\xbc\xa8\x08\x7b\xfc\x19\x80\xf7\x9e\xbc\x26\xf3\x02\x6f\x58\xdc\xf7\xe1\xa5\x86\xb1\x87\x5f\x9e\xf8\x3e\x26\xc2\x3e\xe3\xc7\x6c\x2f\xcd\xcf\x78\x4a\xf1\xc2\x5c\x82\x2a\x41\x64\x6d\x2e\x4d\xf9\xde\x59\x92\x54\xc1\x9a\x1a\x30\x22\x8a\x54\x66\x63\x0f\x74\x82\x48\xb2\x29\xc4\x73\x9a\xed\xed\xe8\xba\xc0\xd0\x1f\x0e\x71\x1c\x74\x11\xf7\xb5\xe0\x04\xaa\x53\xef\xc6\x0c\xfd\x43\x30\x77\x16\xc3\x2b\x1e\x78\x81\x4f\xcf\x6f\x2a\xc3\x21\x7a\x87\x79\x46\x06\x1b\xba\xfb\xc2\xae\x8b\x43\x1d\xde\x7f\x0e\x63\x39\x9b\x24\xe1\x14\xc2\xbe\x86\xd0\x00\x2f\x2a\xfc\xc3\xfd\xaf\xde\x11\x68\x73\x0a\xb3\x91\x11\x47\xef\x38\xf6\x4d\x8f\xae\xcc\xb8\xe1\xc4\x9b\x3a\x21\x46\x17\xed\x45\x08\x0f\x6f\x82\xc9\x83\x17\x9f\xcd\x7d\xbc\xa4\x7f\xa7\xf3\xe6\x00\x00\x19\x65\x9a\x8d\x9f\x0c\x26\xb3\xe4\x08\x74\x6b\xbc\x8a\xff\x9e\x2d\x48\x6a\x9a\x04\x0b\x39\xbe\x2e\x6b\x40\xe9\x90\x87\x9b\xea\xa0\x4f\x3e\xe6\x3e\xaa\xe5\xa3\x1d\x2d\x5a\xdb\xde\x9c\x86\x1e\xd3\x77\x76\xbf\xa8\x6f\x77\x7b\xc7\xa4\x2c\xe0\xdd\x76\xe0\xd2\xda\xd7\x87\x53\xba\xd1\xa9\x69\xf2\x75\x3a\x75\xee\xf3\xbf\x11\x15\xa1\xbd\xc5\xe3\x2c\xb0\x73\x96\xbc\x05\xe2\xff\xd0\xf5\x87\xd2\xfc\x0d\x68\xad\x03\x02\xba\xa2\x18\x80\x04\x0c\xc0\xa8\x60\x03\xaa\x28\x06\xca\xc9\xd3\x07\xb8\x92\x31\x60\x79\x17\xa4\x45\xfa\x9c\x00\x42\x0f\x10\x32\xe2\xa1\xe6\x3f\x97\xb9\xff\x8d\xc3\x0a\xd7\xc8\x33\x2c\x97\xc9\x09\x80\xec\x00\xf2\xf3\x25\xe5\x2b\x0c\x08\xe9\x66\xd3\x2e\xcf\x25\x7b\x4e\xfb\x87\x0d\xe3\x1f\x1c\x84\x98\xde\x90\x9f\xaa\x13\x10\x0b\xf6\x7f\x8f\xe3\xa1\x20\x5e\x5b\x25\x20\xb5\xcf\x4b\x3c\x55\x9b\xea\x84\x21\x1e\xf2\x74\x78\x6f\x7b\x61\x78\x8a\xf2\xf7\x06\x5c\x90\xc8\xd0\x06\xf5\xab\xcb\xd2\x0b\x22\x6a\xa1\x0f\x1c\x7a\x5b\x17\xf1\xde\x1e\xb3\xee\xce\x75\x5e\xf0\xb3\xdf\xb9\x8d\xb7\x8f\x00\x4a\x37\x6b\xd9\xdb\xe0\xd3\xa9\xdd\x91\x5b\x6b\xb8\x79\xe4\x32\x8c\xd4\x3d\x49\x1c\x87\xcd\xb7\x48\xc7\xef\x75\x65\x4c\xda\x2b\xc6\xcb\x4c\x31\x04\x6d\x0c\xd0\xd2\x76\xa7\x4e\x2d\x98\xb4\xb9\x1d\x8a\x66\xc1\x78\x2b\xac\xd7\xb5\xdc\x5d\xd5\x72\x76\x4b\xea\x47\x5d\xa9\x8f\x41\x6a\xc7\x20\xb8\xdd\x6a\xf9\xd5\x44\x4f\xfe\xe9\xf2\xe8\x25\xb4\xed\x85\x7b\x80\xd3\x2e\xf1\x92\xe4\x95\x39\xd7\x1f\x46\x5f\x0e\xd5\x51\x97\xf6\xb0\x29\x8a\xeb\xc2\x4a\x26\xe9\x94\x2f\xe0\x0f\x0d\x9e\x41\x70\x98\x58\x2c\x97\xdd\x9b\xce\x23\x76\x69\x39\x40\x4f\x06\x12\x04\x34\xe5\x43\xf3\x10\x6f\x33\xe6\xbd\x49\x75\x84\x69\x0d\x33\x69\xab\x97\x7c\xa7\xbe\xbb\xdd\x6d\x77\x36\x95\x7e\x6f\x54\x55\x71\xb7\x17\xae\xdb\xb7\xc1\xb0\x95\xf9\xea\x96\xf2\x8e\x94\x9a\x73\x4d\x14\xd6\x6f\x5d\x6d\x68\x5a\x4d\x96\xae\xa1\x42\x12\x6a\x0b\x64\x35\xfd\x8c\x29\x61\x4a\x88\x51\xca\xb8\x4c\x04\xdb\x92\x9b\x39\x9e\x25\x80\x3e\xec\xaa\x80\x4d\xdf\x50\x36\xe0\xfc\xbd\x8d\xeb\x5a\xab\x3f\x26\x42\xbc\xb4\xe7\x69\xd1\x16\xcd\x76\x98\x9f\xcf\xf9\x5a\x7e\x84\x83\xc2\xa1\xcd\x89\xd9\x7c\x80\xa3\x4c\xd2\x39\x96\x32\x65\x7f\x2c\x0d\x06\xb1\x0b\x42\xc1\xb4\x3b\xab\x69\x19\x4d\x14\x3f\xf3\xc1\x25\xb4\x54\x21\xa9\xdc\x90\xd6\xc0\x68\x4a\xfd\x35\x04\x0c\x1f\xd6\x62\x75\x2b\x11\x3b\x5f\x77\x97\x51\x88\x6e\xd5\x15\x6b\x53\xed\xdb\x86\x89\xb2\xcb\xed\xb1\x8e\xce\x80\xe3\xd1\x8d\x7a\xb6\x24\xfa\xdf\xcc\xd6\x6f\x72\xaa\x89\xda\x89\x49\x53\xb4\x6b\x4d\x3c\x40\x07\xce\x9d\xdc\x5f\xe7\xa3\x77\x9d\x9b\x90\xdd\x8e\x2c\xc5\x6d\x9a\xb2\xb8\xcd\x82\xde\x34\x4d\x7e\xc3\xdf\xed\x80\x45\x53\x34\x07\x26\x72\xc1\x08\x2a\x71\x43\x66\xc5\x0d\x89\x20\x0e\x0f\x67\x94\x33\x56\xcb\x43\x60\x19\x02\xf0\x82\x5f\xbc\x8a\x52\x4b\x34\x6e\xa8\xdc\xba\x01\xce\xab\x5d\xbb\x89\x87\xf8\xfa\xe2\x1e\x60\xf0\xf6\xeb\xd9\x99\xba\xd9\xa6\xbf\xa7\x68\x40\x32\x42\xe4\xe8\xb1\xae\x20\x94\xec\x01\x5c\x96\xe7\x62\x20\x94\xe4\x73\xe8\x17\x8f\x23\xe5\x11\x50\x93\xd8\x9f\xb4\xff\x0a\x41\x43\xaf\x84\x5f\x04\xf3\x7a\xbc\xf1\x6c\xcc\x64\xcd\x29\x29\xb9\x27\x43\xc8\x9d\x57\xad\xe4\x41\x20\x6d\x3b\xfa\xe9\x26\x31\xd5\x64\xab\xf8\xfd\x79\x7e\xf4\xe4\x9d\x4c\x78\xe0\x7e\x77\x3a\xef\x55\xd5\xcf\xfc\x11\xaf\xba\xa9\x6b\xd9\xbe\x53\xa2\x7a\x90\xc8\xe2\xd5\x08\x77\x57\x60\x6a\x77\x93\x8b\x35\x0c\x00\x3f\x2b\xfa\x9e\x74\x47\x6b\x82\x37\xbd\x1e\x0d\x82\x99\xf5\x52\xe7\x2e\x5a\x18\x67\x63\xf0\x56\x0f\x64\x06\x8f\x37\x47\x16\x55\x45\xd9\x3d\xab\x7f\xe5\x40\x1e\x64\xf0\x67\x32\x09\xc9\x24\xdb\xa0\x94\x63\x5a\x50\xbe\xe1\xc9\xa7\x4e\xdc\x72\x6f\x5b\x79\x02\x79\xc4\xb6\x85\x1b\x4d\x99\xde\xc5\x1c\x81\x8d\x21\x92\x0b\x53\x64\xd7\x2b\x6f\xf9\x71\x1d\x04\xa2\x28\x1c\xfd\x4e\x7a\x63\x55\xd5\x77\xbc\x8f\x6d\xce\xcc\xb9\x09\x1d\x08\x6b\x32\xcf\xa2\xf3\x59\x7a\x21\xf9\xdc\x18\xb3\x73\xfd\x32\x52\xff\x68\x82\x27\x2b\x9a\x6b\xcc\xf8\x01\xce\xe3\xa8\xf9\x58\x0b\xa4\x17\x6f\x40\x93\xf8\xc8\xa6\x66\x44\xf7\x9e\x55\x4e\xb2\x24\x41\x32\xa3\x5e\x03\x0b\xf3\xdc\x9b\xcb\x69\x14\xcc\xd1\xda\x39\xc5\xc4\xaa\x3c\x25\x0c\x76\x1e\x95\x06\xa0\x28\xfa\x80\x2b\xb0\xea\x9d\x02\xbf\x85\xde\x19\x1e\x69\x41\xbf\xd6\xb0\x35\xcf\x74\x4d\x3f\x2e\x41\x14\xe9\x26\x4b\xa7\x95\xb4\x77\xcb\x62\x57\x42\x21\x84\xc0\xd1\xab\x2a\xbc\xdd\xab\x9b\xd9\x33\x0f\xad\xda\x2d\x44\x9a\xa2\x36\x8d\x26\xa3\x04\x78\x48\x45\xb7\xd7\xe0\x84\xf3\x6b\x57\xfe\x38\xf8\x71\xe5\xae\x56\x32\x01\xd1\x7c\x0e\xae\x5f\xe5\x2f\x88\xfd\x32\x5f\x95\x85\xdb\x7f\xe5\xa9\xb3\xe3\xf0\x55\x0e\x7d\x70\x20\x7f\x6d\x2f\x0d\xf5\xb3\xb9\x7d\x06\x90\x02\x39\x0f\x8e\x8e\x7e\x1a\x14\xf9\x7a\x15\x88\x33\x6f\xb9\x04\x05\xfe\x74\xfe\x86\xeb\x7f\x5b\x28\x8d\x33\x7b\x51\xe0\xa1\xfc\x83\xff\x0b\x00\x00\xff\xff\x5e\x87\x38\xfe\x9a\x48\x00\x00") + +func uiJsLibsMithriljs020MithrilMinJsBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsMithriljs020MithrilMinJs, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js", + ) +} + +func uiJsLibsMithriljs020MithrilMinJs() (*asset, error) { + bytes, err := uiJsLibsMithriljs020MithrilMinJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/mithriljs/0.2.0/mithril.min.js", size: 18586, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsMithriljs020MithrilMinJsMap = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\xbc\x5b\x53\xea\x4e\xdb\x27\xfc\x5d\x56\xdd\x67\x5a\x8f\xa2\xe2\xe6\x7e\x8f\x92\x4e\x08\x31\x46\x84\x88\xc8\x7a\x6b\x6a\x0a\x21\x42\xd8\x04\x0c\x01\xd1\xa9\xf9\xee\xd3\xd7\xef\xd7\x21\x41\x5d\xff\x7b\x3d\x53\xb3\x0e\x96\x49\x77\xa7\x37\xd7\x7e\xd7\xfc\xaf\x5f\xdb\x38\x5b\x27\xcb\xf4\xd7\xbf\xcf\x8f\x7f\xbd\x26\xf3\xf8\xd7\xbf\x7f\x2d\x92\x7c\x92\x25\xf3\xff\x5a\x24\xe9\x7f\x4d\xd7\xbf\x8e\x7f\xad\x97\x9b\x6c\x18\xaf\x7f\xfd\xfb\xff\xdf\xf7\xe9\xf6\xff\x71\xfc\x2b\x1d\x2c\x4c\xb3\x1e\x35\x58\xad\xf4\xff\xef\x49\x3a\x5a\xbe\xeb\x87\x4d\x3a\x8a\x5f\x93\x34\x1e\xe9\xe7\x24\x4d\xf2\x64\x30\x4f\x3e\x63\xfd\xf2\xaf\xd1\x72\xb8\x59\xc4\x69\xae\x9f\x2b\x8f\xff\x9a\x2f\x87\x83\x5c\xb6\x72\xfc\xab\xf2\xf8\xaf\xe1\x20\x1d\xc6\x73\x2b\x4d\x16\x68\x6a\x64\x7a\x4d\xdd\xfe\xa7\xe6\x79\x3c\xc8\x1e\x93\x45\xbc\xdc\x60\xd2\x2c\x7e\xdb\xc4\xeb\xfc\xdb\xb8\x3f\xb5\xaf\xe3\xbc\xfc\x5a\x77\x0d\x27\x72\xb2\x6c\x0c\x30\xcc\x93\x21\x97\x9e\xcf\xd9\x8a\xbd\x4b\xd7\x64\xb0\xb6\xf2\x3c\x93\xc7\xfc\x63\x25\x83\x5a\xf6\xad\xab\x1e\x65\x98\x69\x1f\xce\x07\x6b\x0c\xba\x37\x3b\x8d\x31\x4b\x3e\x18\x17\x9d\xb1\x0c\x8b\x1e\x3b\xfe\xbd\xa7\x1f\xdc\x2c\x5b\x66\xfa\xef\x6a\x90\xad\x63\x79\x88\x77\xf1\x50\x60\x29\x00\x5d\x6d\xd6\x13\xf4\x25\x99\x59\xe2\xa1\x18\x36\x9c\x24\xf3\x51\x16\x03\x8c\x71\x3a\xce\x65\x9c\xd5\xe9\x58\x7d\x33\xd0\x2c\xaf\x77\xdc\x7a\x4f\x1f\xb2\xe5\x2a\xce\xf2\x0f\xdd\x30\x5d\x26\xf2\xcd\xcb\x46\x7f\xce\x65\xf5\xd9\xdc\x79\x6c\xd0\xc3\xf7\x47\xec\x96\xcf\x6a\x30\x9c\xc4\xfb\x37\x5f\xa3\x7b\x27\x18\x1d\xe4\x03\xc0\x48\x77\xca\x3c\xeb\xc9\x72\x33\x1f\x75\x62\xbd\xf4\x00\xc0\x4c\xcc\xc0\x78\x94\xe4\x83\x97\xb9\xcc\x00\x32\x5a\x0d\x08\xdc\x65\xfa\x9a\x00\xdc\xf9\x32\xca\xb3\x24\x95\x05\x81\x99\xcd\x4b\x9e\xc5\xf1\x7e\xee\x47\xc2\x59\xd6\x33\x8f\xe9\x72\x04\x10\x2e\x5f\x5f\x35\x1a\xe5\xb3\x74\x54\x90\x04\x67\x5e\xe7\xd9\x66\x98\x03\xac\x09\xe1\xc3\x76\x4d\x6d\x24\xe0\xf9\x07\x76\xa8\xb7\x9a\x73\x49\x2b\xcb\x06\x1f\x6a\xb9\x01\x0c\x1c\xf7\xce\x7d\xf4\x5b\xf7\xfa\xd1\xbf\x8f\xdc\x8e\x79\x0e\x5b\x4f\x2e\xf0\x93\xac\x73\xee\x97\x87\x0e\x07\x32\x53\x92\xfa\x23\x0d\x1f\xcd\x00\xd8\xdc\x2c\x96\x25\xf4\xfc\x24\xef\xf1\x06\xf8\x9c\xb2\x67\xed\x24\xaf\xaf\xc4\x22\xce\xa8\x48\x23\x72\x46\xf3\xf8\x9a\x2d\x85\xd7\xe2\x3d\x5e\x86\x99\x06\x6d\x5c\xe2\x89\x33\xcb\x4a\x2b\x8d\x5b\xd0\xc3\x20\x1d\xc7\x64\xe3\x2c\x37\x7f\xd4\xbe\x31\x8d\xdf\x55\x81\x2b\x1c\x76\xff\x89\x0c\x5d\x19\x92\x1f\x6d\x16\x0b\x82\x46\x13\x59\x6e\xc7\xaf\xcb\x2c\x2e\x68\xed\xde\x80\x1d\x5b\x2e\x40\x95\xe4\xb1\xec\xf3\x5f\x1a\xe0\xeb\x1c\x93\x0b\x76\xf6\xd4\x72\xcf\x17\xd0\x42\xeb\x55\x3f\x6d\x93\xf8\x7d\x4d\x64\xe4\xd9\x72\x3e\x8f\xc1\x33\xd2\x2a\xb3\x2c\xb3\x64\x9c\xa4\x83\xf9\xc1\x80\x82\xe2\xb2\x78\x94\x0d\x64\x98\xc6\xae\x06\xc5\xf8\xe3\x60\x14\x56\x06\x20\x56\x9a\x1c\x34\x7a\x3a\xe4\x7c\x10\x4a\xba\x49\xe7\xcb\xc1\x08\xd2\x4a\x1e\xb8\xaa\x3e\xfd\x88\x5f\x0a\xe0\x85\x65\x03\x8d\x1a\xe1\xe9\x97\x69\x0c\xc2\x98\xf1\x5d\xf3\x90\xe9\x21\xd5\x2a\xbd\x6a\xbc\xcb\xb1\x27\x41\xbc\x7e\x68\x74\xef\x95\x21\x93\x55\x16\x6f\xf5\xd1\x9d\xf8\x75\xb0\x99\x03\x46\xeb\x7b\x1c\x6f\xb7\x98\x03\x61\xc9\xfa\x2b\x3e\xef\x23\x8a\x24\xd9\x43\xf2\xb2\xc9\xe3\x02\x44\xba\xaf\xc2\x3f\xff\x5a\x82\x65\xb7\x83\xf9\x26\x2e\x06\x60\x1b\x22\xa9\x5e\x06\xc3\x19\x40\x2d\x7b\x6f\x3e\x86\x77\xfb\x45\x1e\xf5\x20\x83\x08\x41\x8e\x11\x0c\xdb\x65\x32\x32\xcb\xaf\x8b\x49\x81\x22\xa1\xac\x6d\x85\xd2\x92\x34\x8d\x33\x33\xa1\x7c\x5f\xe1\xc2\x27\xb3\x13\x91\x04\x2f\x15\x38\xee\xc9\x64\x54\xbc\x15\x3d\x07\x1d\xf2\xe5\x46\xb3\x69\x81\xd8\x6c\x83\x63\xae\xf3\x8f\x79\xfc\x05\x20\xdf\x20\xa4\x5f\xb5\x30\x59\x0f\xc6\x94\xf2\x8b\xe5\x36\x56\x13\x8a\xb4\x3d\xb2\x87\xa6\x21\xd5\x00\x88\x92\x97\x39\x99\x36\x59\x57\xa4\xdd\x5c\x4b\xa3\x89\x06\x2b\xc8\x80\x54\x6f\x8d\xa6\xba\x31\x2d\x60\xb8\x2c\x88\x01\x58\xc5\xf6\x06\x9a\xb1\x96\x8b\xd5\x26\x2f\x94\x97\xa6\xb8\x46\x92\xad\xbf\xb4\x8e\xe3\x5c\xb8\x19\x6c\x17\x40\x1c\x08\xcc\x0a\x71\xaa\x7b\x73\x4d\x87\xf8\x1f\xb3\x92\xd5\xf2\xe5\x6d\x44\x32\x1a\x88\xaa\xd2\x9d\xd4\xa6\x43\x3d\xf5\x32\xe5\x0e\xf2\x09\x49\x28\xcf\x84\x53\xb4\x0e\x5b\x41\x8d\x0d\xb1\x7a\xfc\x90\xc5\x1d\x40\xb4\xb9\x5c\x0a\x45\x64\xcb\x65\x6e\xfe\xac\xab\x13\xc9\xcb\xbf\xfe\x65\x74\x9e\x66\x56\xc2\xa0\x98\x64\xb9\xce\x0f\x66\xd1\x8a\xcb\x34\xf8\xa3\x83\x57\xa5\x69\x4f\x54\xa9\xc8\xcd\x41\x4e\xca\xc8\x16\x30\x02\x3a\x4b\x22\x2a\x33\x7f\x17\x46\x82\x2c\x48\x8c\x68\xb6\x3f\x0a\x22\xc2\x2b\x35\x21\x94\x19\xde\x1f\x04\x0a\xf2\x8d\x66\xe6\xec\x23\x12\xd0\xff\x32\xba\xb2\xcd\x16\xa3\x3a\xb4\x0c\x5f\x83\xa2\x16\x46\x32\x41\xa9\x63\xbe\x4e\x3c\x76\x77\x2b\x1c\x12\xf8\x16\x08\x6a\xc9\x50\x10\x3d\xc8\x33\x1e\xea\x3d\x75\x3b\xbe\xaa\x80\x19\x1b\xe8\xa6\xcb\x17\x11\x6e\x9a\x25\x0c\xc8\x89\x4a\x8d\x9a\x01\x9f\xde\x27\x09\x14\x9e\x96\x05\x9b\x2c\x2d\x4e\x33\xdc\x64\x54\xa4\xd9\x18\x3a\x6a\x9d\x0d\x4b\xb2\x5b\x6b\x4d\x85\x6f\xf2\x65\x77\xa5\x15\xb3\x1a\xac\x0d\xc1\x47\x43\x11\x67\x94\x39\x32\x60\x8d\xf7\xc7\xe5\x2f\xa3\xb1\x0f\x0f\xad\x45\xcd\x6b\x02\x6d\xbc\x11\x09\x3e\xa0\xe0\x20\x1c\x70\x36\xc3\xab\x71\xfa\xd3\xf1\xe2\xd1\x66\x48\x3e\x5a\x2c\xc1\x2d\x83\xcc\xca\xf7\xa0\x34\x2b\x68\xcb\x03\x73\xea\xf9\xf3\x82\x2a\x49\x30\xd4\xbd\xc3\x92\xba\x87\x05\xb1\xff\xa2\x52\x4a\x5e\x3f\xf8\xb4\x48\xd6\xd4\x02\xb0\x0e\x0b\x08\xe5\x13\xa8\x65\x3d\xd1\x72\xbe\x25\x17\x1b\x4e\xd3\xa2\x33\xd6\xd0\x83\x59\xb1\x19\x6a\x8b\x74\xad\x4a\x01\xf7\x3a\x48\xe6\x9b\x2c\xae\xb6\xe8\x89\x09\xac\x9c\x04\xd8\x71\xc5\x26\x73\x1d\xc3\xfa\x20\x86\x15\xb0\xbc\x9f\xb7\xe3\x46\xad\xbb\x27\x0c\x31\x1b\xac\x6e\x2b\x2d\x0c\x96\x65\xfe\x58\xbc\x56\x16\x1c\x1a\x12\xd3\x90\x34\xc6\xdb\x6b\x92\x95\x0b\xd3\xae\xe3\x0a\x7c\x5e\xc7\x73\x91\xac\x82\x8d\xc2\xdc\x4b\x68\x2c\xc0\x48\x98\x0e\x04\x87\xcb\x55\xa1\xd1\xf3\xe5\xdd\xf2\x7d\x4f\x15\xbb\x89\x8c\x7f\x0e\xef\x9a\x79\xbe\x32\x5a\x0d\xc3\x01\x3e\x4d\x87\x93\x25\xa4\x1e\x84\xc1\x66\x6d\x58\x68\xbd\x7e\x5f\x66\x23\x6c\x52\x2b\x81\xd1\x07\x60\xb3\x57\xf8\x68\x8a\x0c\xb8\xa4\x6b\x43\x3d\x69\x04\x67\xbe\xa7\x5a\x2d\x7e\x0a\x7b\xde\xc8\x25\x92\x06\x71\xab\x49\xc0\x6c\xa8\x19\x0f\x28\x3f\x34\x87\x57\xbe\x01\xa3\xfe\x2a\xf4\x26\x10\xf1\xf1\x12\x3f\xe3\x44\x0d\x2d\x26\x1c\x5a\x91\x6b\x63\xc1\x19\x10\x93\x9c\xc6\x34\xd1\xf5\x53\xb8\x17\x08\x18\x96\x69\xbd\x0d\xeb\x48\x33\x47\xb2\x22\x29\xaf\x57\xe6\x8f\x86\x20\x14\x9e\x50\xbd\x01\xb5\x66\x3d\x61\x9f\xe5\x08\xc0\x5e\x89\x7d\x50\xa8\x8a\x17\x6d\x99\x98\x3d\x68\x30\xb7\xf6\x18\x80\xb4\xa9\x30\x41\x29\x8a\xbb\x00\x73\xbe\x9c\xc5\x18\x38\xc9\x17\xb0\xdc\x8c\x7f\x63\xd4\x6c\xf1\x5a\x72\xbc\x11\x3d\xc5\xba\xda\xae\x1a\x6a\x29\x0d\xfd\x4c\x65\x91\xac\x1d\xf3\x51\x87\xf2\x1a\x16\x95\xfe\xbb\x67\xf6\x7c\xb9\xaa\xb2\x6f\xa3\x63\x85\xee\xff\xb4\xbb\x8e\xe7\x3e\x52\xa6\x52\x7b\x16\x16\x0e\xe6\x7c\xa0\x2d\x62\x58\xe9\xa5\xaa\x44\x8c\x80\xfa\x22\x11\xb4\x40\xe7\x6a\xd8\x21\x44\xc7\xe8\x50\xab\x2d\x40\xac\xef\xda\x3f\x34\x2a\xbc\x78\xac\x30\xc8\xf8\x50\x51\x9b\xa5\x0a\x75\x20\xf2\x3d\x2d\xdc\xb3\x91\xe6\x9c\x21\xad\x24\x63\x31\x15\xc3\x46\x87\xaf\x74\x4e\xf5\xc3\x5c\x9b\xdf\x71\x8a\x03\x0e\x46\x23\x57\xce\x77\x57\x69\x82\xff\xe1\x1a\x5d\xbd\x25\xa1\x4c\xb4\x9c\xfc\x55\x98\x09\x5f\xbf\x18\xc5\xd5\x2f\xb4\x2d\x50\xac\x08\x22\x28\xac\x4f\x73\x86\x07\x92\x62\xe1\xed\x00\xa9\xcd\x44\x94\xf7\x87\xab\x4d\x51\xa1\xb0\x09\x5f\x7f\xd1\x7b\x2b\x98\x4c\xf3\xfa\x3c\x2e\x68\x49\x66\xf8\x48\x87\xe6\xcf\x24\x5b\xa6\x9a\xb2\xc0\xb7\xcb\x75\x29\x12\x47\x7c\xd4\x30\x00\x73\x6e\x72\xcd\xa8\x30\x6d\x7f\xed\xfd\x5a\x21\x61\x0d\xf2\x71\xc1\x1a\xc9\x5a\xb8\xf4\x41\xf0\xb6\xd3\x56\x32\x00\x3b\x5d\x2f\xd3\x15\x08\xe3\x3d\x1b\x94\x0f\x11\x25\xeb\xfe\xbd\x10\x4c\x05\x13\x01\x32\x2b\xaa\x6b\x23\x78\x87\xe6\x5c\xf1\x6e\xa5\x7d\x0b\xea\x4d\x71\xfd\x05\xec\x8b\x91\x04\x0a\xb4\x9c\x5d\xe9\x0d\xae\x7f\xfd\xfb\xd7\xff\x87\x7f\x96\xfe\x77\xec\x59\x96\xcf\xff\x8f\xdb\x96\xd5\x55\x78\x54\xc7\xae\x65\xb5\xe5\xb9\x77\x65\x4b\x7b\x84\xf6\x5e\x43\xff\xaf\x52\xdb\x93\xee\x7e\x53\xfe\x6f\xf9\xc7\x91\x34\xe1\x8b\xfe\x1d\x9a\xc2\x4a\xd3\xbb\xfd\x80\xb6\xf6\xf1\xda\x96\xb7\x0e\xde\xa2\xe3\x81\xa5\x6e\x1c\x8c\xf8\xb0\x9f\xd0\xd6\x3b\xde\xd8\xf2\xf6\x8c\xb7\xfe\x71\xcf\x5a\xd8\x53\x17\x8b\x8f\x8e\x03\x4b\x75\xf4\xda\x81\x1f\xeb\xff\xef\x2c\xa5\x1b\x64\xaf\xa1\x65\x85\x78\x0e\x94\x1e\xaf\x32\xbd\xa6\x6f\x59\x6b\x5b\x3a\x9e\x6f\x65\xa2\x40\x1a\x86\x01\x1e\x9b\x18\xd9\x60\xb3\x1e\xd1\x0e\xe5\x50\xfd\xe3\x96\x5e\xe2\x5e\x1e\x31\x38\x04\x1c\xac\xfd\x7b\xa4\x67\xb6\x06\xfb\x77\x75\xd2\x6c\x01\x3a\x38\x7e\xef\xb6\x98\x4d\xed\xec\xb6\x3c\x8f\x6d\x7d\x7a\xab\xe7\xc8\xf8\x36\xa6\x3a\xee\x5b\xea\x4a\xb9\x68\xc0\xfe\xb0\x78\xab\x79\xdc\xb5\xd4\x8b\x2f\x53\x3e\x4b\xab\x7f\xff\x7d\x93\x01\x20\x21\xab\xc9\x63\x88\x61\x4a\xf6\x1b\x1e\x5f\x3b\x96\x9a\x3b\x98\x69\x84\x11\x31\xe0\x46\x68\xbc\x16\x9f\xab\x13\x5b\xd6\x4d\x6c\x69\x7e\x71\xa4\x19\xb3\xe8\xf3\xe0\x51\x90\xdd\xc5\x60\xec\x2c\x7c\x66\x73\x4b\x76\x2c\x0d\x09\x40\xf9\x52\x8e\xee\x73\x74\x03\xa0\x8f\x00\x94\xa9\xbd\xff\xa8\xfe\x87\x8f\x78\x86\x10\x7b\x9b\x9b\xe1\x6d\x4b\x7d\x62\xf8\x12\xc3\x27\x76\x39\xde\x23\x5e\x94\xde\x05\xb6\xef\x2f\xf0\xa7\xa5\x0c\xc8\x65\x9a\x89\x5d\x0c\x57\x53\xd5\xc5\x46\xb8\xa9\xde\x1e\xed\xa1\x55\x42\xd1\x3c\x16\x48\xf5\xf5\x93\x3f\x07\x92\x7c\x60\x66\x6d\xaf\x6c\x03\x07\x6c\x06\x24\xbe\xb6\x0d\x46\x5d\xcb\x5d\x39\xfc\xba\xa7\xd1\xeb\xcc\x6c\x99\x64\xc5\x2d\x6b\xde\x68\xcb\x28\xee\xc8\x20\x70\x86\x97\x08\x64\xe6\xea\x47\xb5\x55\x0d\xb6\x78\x96\xf7\x68\xe9\xb3\x79\x53\x20\x05\xb3\xfa\x9e\x3c\xf6\x27\x72\x4c\x55\x40\x42\x83\x31\xb6\xac\xd8\x11\x34\xca\x52\x82\xb6\x57\x19\xbd\xc4\x1e\x53\x9b\xe8\x1c\x63\x2f\x1f\x40\xfc\xca\x6c\x82\x8d\x6a\xee\xfe\xae\x00\xfe\xa9\xd2\x93\xda\xa3\x0a\x1e\xc7\x36\x01\xee\x5b\xee\x8f\x1d\xe5\xa4\x9a\x05\x57\x42\x80\x0d\xff\x37\xe8\xb9\x0b\xe6\x91\x0d\x78\xbf\x2b\xdf\x29\x12\x1d\x80\xd8\x1e\xf2\x98\xa1\xe5\xd6\x1c\xcc\xe4\x76\xc0\xd5\x09\x26\x0f\x81\xd4\x98\xa8\xc5\xff\x83\xca\xff\x61\x21\x89\x80\x07\x65\x48\xdc\x05\xf3\xf3\x03\xcf\x3a\xb3\xeb\x80\x39\xc9\xae\x03\x4e\x5e\x18\x10\x11\xed\xad\xe3\xa1\x90\x19\x25\x51\xc9\x81\x6d\x80\x9e\x12\x09\x80\x17\xf1\x66\xbd\xd9\xc2\xf0\x53\xf3\x69\x24\x5b\xa5\x40\x69\xc9\x48\x95\x83\x66\x7d\x90\xfe\x60\xa5\x2a\x28\xbf\xc6\x79\x22\x30\x48\x2f\xab\xf6\x5c\xca\xa9\xd5\xa7\x03\x59\x24\x53\x3d\x01\x40\x33\x1b\x90\xe3\xd9\xbb\x42\xee\x37\x68\xe7\x10\x41\x97\x6a\x62\x8b\xf8\x3f\xc6\x86\xfa\xe8\x6c\xc9\xe0\xac\x90\xd5\xb2\x2a\x90\xdb\x16\x69\xa4\xa6\x36\x44\x41\x08\xea\xee\x36\x40\x37\x24\xee\x76\x54\x02\x50\xcb\x5b\x8d\xba\x56\x2e\x47\xd3\xa2\xf8\x83\xc8\x20\x2f\x73\x91\xb0\x46\x01\x7b\x56\x6a\x03\x2b\x24\x29\xf4\xeb\xf6\x61\x57\xdb\x72\x6f\x9c\x17\x30\x29\xe7\x05\xea\xc3\x91\x59\x49\xb6\x2c\xa2\xc5\xad\x2b\x08\x52\x40\xcf\xc7\x06\x03\x4d\x55\x5a\x40\x8e\x20\xb2\xb8\x1d\x2b\x00\xc0\x0b\x46\x68\x09\xcb\x79\x1d\xf3\x49\x79\x1a\x01\x82\xbb\xb5\x89\x4f\xe9\x3c\xa5\xb0\x90\x3e\x8f\xd4\x43\x59\xa3\x29\x5f\x6f\xa9\x7f\x81\x97\x5b\x70\x4d\x24\xec\xa4\x79\xf2\xfc\x1b\x9a\xac\x80\x74\xd4\xae\x81\x51\x6a\x36\x61\x46\x6a\xd0\x72\xa8\x05\x00\x6a\x11\xdf\x5d\x81\x5b\xaf\xec\x04\x03\xad\x6f\x2b\x0e\x5e\x0a\xfe\x7e\x74\x48\x41\x7d\xcc\x15\x99\xed\x3f\x43\x51\x74\xcb\x1d\xb6\xc7\x6a\x2f\x6f\x5a\x2b\x97\x14\x5e\x9e\x06\x42\x94\xaa\x59\x34\x90\xc6\x3f\x78\x3e\x06\x62\xce\x6c\x36\x81\x0e\x08\x02\x6c\xd9\x9f\x14\x8b\xc9\x02\x67\xd8\xea\x8d\x91\x12\x2d\x8a\x8e\xb0\x7c\x13\xd9\xfb\x09\x05\x33\x06\xee\xb7\xf6\xc7\xd7\x3e\x41\xfb\x52\xf4\x8e\x4a\x1d\xa7\x5c\xf9\x9c\xd2\x28\xfa\xfc\xe3\x78\x21\x13\xd9\x03\xd4\x9c\x00\x4f\x88\x62\x28\x12\xa5\xee\x14\x80\x72\x9c\x01\x68\x48\x66\x6c\xbc\x94\x47\xf9\x2b\x6c\x9e\x93\x1f\xa6\x7b\x2c\xfa\x7b\x82\x0e\x92\xea\xd9\xae\xb1\x76\x66\xbf\x7f\xed\x33\x7b\x15\x12\x13\x06\xab\x39\x25\x6d\x79\x25\x69\xbd\xfc\x71\x33\x83\x2a\x69\x9d\x70\xc0\x11\xf7\x51\xbe\xc9\x5a\x5b\xe7\x87\x7d\x94\x7d\x25\xcc\x06\xf5\x3f\xf4\xc1\x50\x19\x0a\xb1\xb8\x22\xb6\x27\x9e\x9e\xd0\x6f\x18\x69\xa1\xbf\xd0\xbc\x50\xaa\xcf\x60\x7f\xa4\x29\x76\xe3\x4f\x94\xd9\xbc\xd8\x27\xbd\x0a\x81\x9c\x02\x86\x03\x41\x6f\x4d\xed\xd5\x13\xc4\xac\xd5\xc7\x47\xa9\x4d\x90\x02\x16\x1f\x36\x88\xd5\x1a\x70\x42\x83\x76\x3f\x41\x63\x6f\xae\x2a\xf0\xf5\x01\x96\x9c\x5b\xe4\x57\xbd\x4f\x80\x21\x3a\x25\x12\x6b\x7c\xfb\x70\x8a\x3e\x73\xd4\x00\x26\xa5\x19\x51\x1e\x3f\x80\x0c\x6c\xf8\xdc\xb0\x7e\x7e\x29\x41\x40\x51\x29\x8d\xaf\x25\x0a\x5f\xff\x9b\xd2\xe1\x6f\xe9\x49\x79\x7f\x47\x4e\x37\x76\x69\x6c\x87\xf5\x3f\x0c\xf6\x44\x05\xe3\x10\x91\xd8\x25\xce\x23\xad\x06\x20\xf9\x85\x0c\x04\x21\xdf\xc9\x0b\x06\xd2\x2f\x0f\x33\x98\x12\xe1\xa3\x19\x2b\x62\xf5\x13\x22\x74\x65\x27\xb0\x4e\xa2\x54\x95\xa2\x38\x1c\x1e\x8e\x13\x22\xb8\xa2\x12\x3a\x72\x85\xa8\x86\x5a\x32\xdd\xcd\xb5\xc5\x2d\xcb\xdd\x51\x9f\x95\xfc\xda\x9d\xe3\x4b\xff\x4d\x16\x55\xb7\xa5\x11\x03\x82\x69\x43\x0b\x74\x69\xf1\xad\xc8\xd9\xef\x98\x3c\x1a\xc0\x58\x73\x8c\x15\x4b\xe5\x24\xa3\x3c\x63\xc1\xeb\xde\xad\x71\x24\xcc\x7c\x62\xe9\x52\x44\x83\x3e\xb5\xa5\xf7\x46\xad\x76\x42\x19\xfd\x5c\x39\x54\x4d\x86\xbb\x27\xa5\x51\xd5\x3b\xc3\x3e\x1f\xea\x25\xbd\xf6\x88\xe5\x08\x67\x6a\x6f\x4b\xc2\x04\x35\x05\x53\x99\xfc\xd6\xe7\xa0\xd6\x84\x96\xfc\xbd\xd0\x42\x46\xc7\xc5\x28\xb4\x0b\x6e\x09\x2b\x8a\x33\x53\xa8\xb7\x6a\x8f\x36\x6f\x27\x0e\x0f\xde\xf5\x30\xce\x29\xba\x42\x5a\x21\x6e\xdd\x3e\x55\xd5\x95\x08\x69\x21\x95\x09\x49\x6f\x83\x0d\xb6\x3f\x1b\x07\xb8\x11\xb4\xd2\xe2\x0d\x53\x12\xa5\x21\xa6\xcb\x83\x6d\x9d\xdb\x25\x01\x6a\xc5\x40\x0e\x1d\xea\xd7\x81\xa6\x47\xee\x25\xc5\x9f\xa1\x86\x69\xaf\x70\x65\xb8\x75\x6d\x8d\xe8\x55\xea\xee\x3f\xec\x5f\xf6\x77\x0e\x75\xd8\x36\xfc\xf8\x1f\x76\x11\x50\xd3\xc8\x07\x0b\xa1\x14\xb5\x6d\x60\x45\x83\xcb\x30\xa9\x7e\x17\x01\x90\xde\x95\xdd\xa8\x02\xe8\x56\x8e\x32\xb5\xaf\xec\x1f\xb7\x2d\x23\x0c\x40\x1f\xe5\xe5\x1a\x8b\xa5\x46\x81\x4b\x93\xda\xba\xbb\x03\x30\x34\x4d\x97\x70\x88\xe9\xf9\x03\x30\xdc\xbc\x61\x80\xe1\x56\xb7\xd9\xa8\x62\xfd\x09\x6e\xa0\x6a\xff\xf9\x54\x95\xed\x69\x9e\x27\x4f\x46\x90\xb9\xc1\x73\x29\xa8\x6a\x15\x3b\x86\xdf\x43\xb1\x78\x93\xbf\x11\x5b\xa0\x64\x77\x42\x16\x9d\xc1\x58\x6d\xed\xe8\x29\x54\x2d\x6d\xcc\xde\xe6\x59\x9a\x55\x31\x6d\x8c\x81\x04\x7c\x36\x98\xe0\x4b\x63\x79\xb7\x17\xc6\x99\x84\x78\x8d\xb9\x8f\x6e\x69\xb9\xab\x89\x20\x5f\x9f\x3a\x3a\x11\xab\x53\x75\x8e\x20\xc8\x82\xad\x32\xde\xa2\x46\x4a\x7b\x6f\xff\x05\x13\x25\x07\xbf\xf5\x2e\x31\xab\xe6\xff\xae\xf6\x45\x69\x13\xa6\x74\x23\x4c\x44\x00\x02\x63\x2d\xd8\x74\x35\x1d\x57\xbd\xac\x31\xc6\x75\xeb\xd8\x65\xfb\x82\x1f\x5f\x51\x8f\x60\x43\x6e\xaf\x38\x4d\xc0\x63\x68\xb6\xdb\xd1\x64\xbc\xa1\x49\xac\xa1\xa5\x7d\x99\x3d\xec\x6f\xff\x9b\x4a\xa2\x46\x5f\xf7\xc0\xa0\x62\x18\x24\xac\x51\x14\xcd\x78\xfa\x8e\x91\x62\xa5\x9a\xf4\xee\x74\x87\x5f\x73\x4a\x81\xf5\x01\x74\x3d\xd0\xab\xc0\x26\xa2\x25\x24\x41\x6b\xe5\x54\x24\x5d\x50\xd1\xa7\x36\xfd\x1c\x0e\xd3\x30\xec\x8b\xb7\x52\xe3\xd6\xcf\x40\xbd\x6d\x78\x00\xf0\x75\xbc\x9c\xb3\xad\x29\xa9\xcd\xa4\xd8\xb4\x7b\xee\x4e\x89\x07\x9c\x34\x2a\x8c\x02\x41\x59\xc5\x40\x88\xba\x7b\xc3\x41\xe5\x4e\xaf\xdc\x94\xc6\x6b\x4b\x7c\x40\x39\x3e\xdc\x30\xf8\x87\x63\xbb\x47\x83\x5d\x15\xb0\x76\x11\x57\x70\x18\x71\x4a\x1a\x80\xaa\x00\x48\x3d\x7e\x62\x37\xc1\x29\x75\xbc\x31\x56\xf6\xf2\xb9\x55\xdb\x77\x17\xe1\x1e\x6b\x70\x5e\x69\xd3\xdc\x04\x9a\xff\xc0\xa1\xb7\xf6\x39\x3c\x10\xf7\xc2\x33\x16\x7b\x5f\xa2\x4f\x57\x3c\xf1\x86\xf6\xe8\xb6\xfa\xa6\xdd\xa5\x36\x74\x91\x01\x96\x3a\x69\x00\xce\x83\x26\x5d\x35\xc0\x86\x0b\xb6\xde\x1d\x99\xae\x8f\xb1\x0b\x52\x13\x49\x30\x38\x42\xcf\x10\xba\x6c\xee\xf1\xd8\x22\x9e\x3d\x40\x48\x46\xec\x20\x95\x22\x63\x2c\xec\xec\x8a\xe2\x3f\x27\x68\x28\x47\xe9\xcc\xa4\x76\xe2\xc2\xbd\xb7\xc9\xd1\x5d\xab\xd8\x80\x16\x5f\xf1\xee\x60\x3b\x0d\x1c\xa0\x4d\x27\x53\xb4\xc3\xc9\x01\xc8\x10\x07\x89\x57\x0d\xd2\x7a\xac\x25\x55\x93\x8e\xee\x1b\xb7\xf2\xcd\xd3\x9d\xab\x33\x68\x78\xb7\xbe\xdf\x6b\x5b\x56\xdb\xbf\x75\x85\xfe\xbe\x1d\x84\x81\x17\x7d\x9c\xd1\x82\x41\x43\x4f\x0f\x34\x81\xc5\xee\x94\x8c\x7d\xe9\xca\xd2\x7d\x50\x41\x3f\x80\xf8\xbd\x33\x63\x25\x8c\xd7\x78\xc2\xfe\x73\x97\xd6\x83\x8b\x18\x19\x98\xbb\xbf\x65\xdb\x25\x0c\xa2\x39\x61\x6f\xce\x99\x81\xdf\x5a\xd7\x00\x54\x3f\x75\xa1\x6a\xca\xb8\x59\x87\x71\xb3\x23\x11\x0b\x8e\xc1\xe7\x4f\x47\x9a\x16\x3e\x0f\x2d\xa3\x56\xf9\x16\x59\x6e\x8d\xc2\xe8\xb2\x61\x1c\xf7\xd6\x3e\xe4\xb6\x75\x4b\xf4\x6a\x65\x3b\x86\xc3\xd0\x05\xf1\x0c\x4e\x5c\xaa\x11\x32\x90\xb7\x07\x57\xbb\xe0\x73\xf7\x04\x38\xf2\xcd\x46\xcc\x49\x18\x7e\x12\x9f\x58\xde\x4e\x21\x4c\xc5\x21\x90\x45\x4f\xa8\x99\x2e\xdc\xca\x16\x72\xb7\xd8\xa9\xb4\x25\x6e\x75\x60\x58\xc5\x12\xc2\x0e\xe1\x78\x7f\xb0\xb2\x2d\xfe\x82\xcc\x80\x2a\xbc\x32\x8e\x8d\x47\x58\x43\x73\x99\x7b\xc8\x65\x43\x21\x55\xc3\x65\x1a\x6f\xb1\x68\x8b\x9d\x5b\xbc\x0e\xc1\x1a\x5d\x31\x72\xf4\x62\x33\xc3\xa9\x9f\xcd\x3f\x73\xea\x3f\xce\xa1\x69\xf3\xbc\xf7\xe9\x56\x24\x63\x0e\x94\xb5\x89\xb2\x7d\xf4\xa1\x25\xb4\xfc\x5c\x4c\xf0\x86\x38\xf4\x0e\x54\x52\x4c\xf8\x00\x71\x82\xa8\x44\xb7\x76\xb0\x94\xf4\xa8\x89\x37\x75\x4b\xbe\xd3\x3e\x76\xa1\x2e\x7a\x20\xad\x87\x9b\x52\x60\xc7\xd7\xf4\xa0\x6e\x0e\x58\x73\xa7\x8c\x24\xd3\xf4\xb5\x72\xae\x21\xe6\x41\xeb\xc5\xa2\xbf\x2b\x9c\xd2\x95\x23\x8f\x6d\x69\xf2\x33\x10\x9a\x5f\x6b\x54\x94\xde\xe5\x9e\x48\x8a\xe0\xa2\x26\x24\x6d\xa1\xa4\x8c\x4c\x81\x5d\xac\xf0\x1d\x14\x3e\x46\xdb\xce\xae\x7f\x81\x52\xa8\xb9\x46\x48\xf9\xd6\x44\x7f\x0d\xc6\xd7\x70\x65\x5a\x84\x29\xd5\xd8\x41\x97\xb6\xcf\x05\xc0\x2f\x37\x6e\xb1\x05\x61\x83\x53\xc6\x84\x8e\x2f\x6d\x09\x2c\x8a\xca\x78\xb9\xab\x6c\x71\x6c\x17\x03\xd6\x5a\xfe\xe7\xea\x9d\xa0\xd7\x12\xbe\x2f\x7c\xfe\xbc\xb0\x77\xd8\xeb\x6b\xe6\x54\x17\xdc\x80\x83\x7a\x35\x1c\x67\x38\x45\x5f\x1f\xeb\x16\x96\xb0\x89\xb1\x71\x17\xc1\x9b\xfd\xe5\x6b\x81\x02\x69\xab\x7b\xda\x3c\x1e\xdb\xb2\x13\xd2\x6b\xef\xee\x3f\x7c\xa8\xb2\xdb\xbf\x5a\x57\xd8\x23\xb3\xff\x79\x09\x89\xde\x36\xd7\x88\x15\x89\xba\xae\xac\x88\xf5\xdd\xa7\x26\x60\x6e\x04\x06\x8c\xd5\x21\x35\x46\x98\x39\x3f\xef\x53\x2c\x5d\x5a\x4d\x83\x0a\x8e\xd4\xb4\x31\x90\xae\x33\x1c\x64\x6a\x33\x10\xfe\x2c\x34\xb5\xdc\xbf\x44\x88\x57\x17\xf6\xd1\xa7\x83\xcc\x48\x78\xea\xfc\xb0\xde\x96\x4e\x3a\x34\x4e\x8f\x26\x2e\x27\xa0\x73\xd7\xfa\x0d\x6a\xc5\xf7\xb0\x97\x7a\x55\x30\x9e\x7a\x00\xc7\xcc\x66\x08\xa2\x45\x38\x56\xa2\xb6\xea\xc6\x24\x3c\x64\x4a\x75\xbf\xa1\x67\x80\x30\xb6\x7b\xe7\x1f\x88\x70\x25\x74\xd7\xab\x6a\x6e\x51\x1c\xea\x75\x5b\xe5\xb1\xa1\xec\x53\x65\x15\xf7\xef\x8f\xbc\x89\x08\x71\xc9\x93\x62\x12\xca\xf9\x1d\xff\xba\xa2\xb0\xfa\x4d\xf3\x1c\x31\x54\x2d\xca\x03\x11\x3f\xd3\xd6\xfb\xd2\xaf\xe1\x7f\xde\xa0\x42\x5a\xd0\x81\x67\x1f\xe2\xba\xe7\xe5\x5a\xe5\x87\x6d\xb1\x1e\x9b\x46\x14\x44\xc8\xae\x49\x7c\xd9\x76\x0e\x27\x16\x1a\x43\xd8\x26\xa8\xd9\x46\x0c\xfd\x86\xe4\x28\xb0\x20\xe3\x36\xd4\x55\xcf\x87\x4d\x5d\xcb\xbd\x81\xa5\xf4\xf2\xbb\x42\xb1\x4b\x12\xd0\xdb\x5e\x05\x8a\xd8\xfd\xf0\x7e\x26\x3c\x51\x9f\x1f\x94\x0a\xab\x46\x15\xc1\x17\x84\xd2\x89\x0b\xa7\xbe\x89\xd0\x43\xe1\x56\x01\xfe\xe1\xe7\x81\x77\x79\x03\x49\xd4\xd5\x1f\x79\x2b\x77\x06\x33\xe1\xd0\xaa\x3d\x46\xea\xe3\x02\x3d\xd1\x5f\xb1\x41\x78\xa0\x9d\xe5\x0d\x4c\xa1\x32\xf7\xb6\x84\x43\x2f\xfc\x7f\x41\xe1\xad\xff\x1b\x0a\x9f\x06\x77\x95\xf3\xc1\xbe\x02\xd7\xcd\x8d\xb9\x2e\x04\xae\x69\xff\xf5\x2f\x48\x1b\xc6\xce\x16\xaa\x97\x4e\xd8\x98\xc9\x8e\x05\x73\x0a\x06\xd4\x7f\x01\xfe\xc0\xf2\xe6\x4d\xa8\xcf\x66\xc5\x10\x91\x80\x8f\x15\x2e\x40\x03\x20\xd8\x2b\x12\x6c\x17\x1f\x11\xf1\x46\x23\x8e\x2b\xba\x78\x66\x5b\xde\x4e\x21\x64\xdb\x03\xcd\xe5\x18\x19\x9e\x98\xc8\x38\x23\x05\x7d\xcd\xde\x78\x3a\xb2\x0f\x96\x6c\x89\xd2\xa7\x73\xc4\x88\x78\x08\x95\xe4\xd5\xd4\x1b\x56\x6f\xaf\xc8\xcc\x4b\x48\xc6\x88\xa1\xc3\xd6\x1b\x49\x87\xea\x8d\x29\x9c\x48\x6f\x50\x93\x95\x46\x40\x17\x99\x57\xb1\xe0\xcf\xdc\xe2\x2c\xee\x94\x67\x81\x95\xa8\xde\x31\xe7\xce\x7e\xfe\x6a\x35\xa8\xdf\xd4\x84\x1a\x86\x1a\x27\x1d\x46\x03\xcc\x34\xbd\x73\x9c\x2b\x06\x15\xb4\x84\x65\xb5\xf7\xde\xe7\xae\x88\xf5\x99\x8f\x5c\xdd\x0e\x7e\xef\x95\x0d\xfa\x1b\x6a\x2b\x51\x80\xf2\xd9\x24\xbd\x80\xd5\xe3\x9b\x46\x15\x55\xc6\x43\xa8\x78\xde\x5f\x11\xa6\x9d\xde\x5a\xd3\xa4\x0e\xdf\x61\xba\xac\x1d\xc1\x43\xbc\x75\xf6\x7e\x5d\xe1\x10\xca\x23\xd2\x29\x26\x95\x48\x9f\x43\xd5\x1a\x95\xe0\x1f\x08\xcc\x7d\xe0\xf9\xb5\x4d\x29\xf4\xc5\xe3\x05\x67\x0d\xc8\x95\xcf\xc6\x9e\xcc\xd4\xdc\x05\x54\x2a\x81\x36\xf5\x84\x4c\x4c\x9f\xf9\x48\x4a\xd7\xee\xda\x17\x5e\xd0\x2e\x58\xbd\x51\x00\x51\x5b\x3a\x1d\x2a\xca\x90\x51\x96\x67\x99\xef\xa5\xf7\x8f\x60\x15\x8e\xd4\x60\x19\x99\x10\x36\x29\xf8\x1d\x3e\x43\x1b\x54\xa8\x25\x29\x44\x39\xfd\xa0\xe8\xa3\x01\x21\x74\xd5\x40\x78\x54\x76\x94\xdb\xfd\x3d\x44\xbd\x19\xba\x67\xf6\x9c\x64\x99\xd3\xf5\x12\x8d\x7c\xa5\xbe\xd8\x88\x61\xb1\xc3\x95\xd6\x34\x3f\x22\x36\x10\x0b\xeb\xf6\xbf\x87\x3c\x89\x07\xb9\x51\xb9\xa1\x05\xf7\x8b\xf0\x88\xbf\x63\x54\xe5\x5b\x2e\xac\xc8\x03\xdf\xd8\xdf\xd0\xf6\xfc\xfc\x93\x40\xf1\x98\x8d\x6b\x41\x3d\x99\xe4\xea\x07\x25\xcc\x1a\xa7\xf0\xc8\x01\x18\x84\x85\x5c\xaa\xd6\x68\x49\xf3\x7d\x45\xff\x64\xc1\xb7\x2b\xc2\xfb\x1a\x40\x73\x6f\xe4\x4d\xe5\x2c\xc4\xa0\x6f\x35\xa4\x43\x18\xd2\x52\x0e\x36\x4d\x23\xf2\x5c\x21\x08\x94\x88\x7c\x56\x32\x27\xc8\x82\xf5\x4f\x69\xcd\x89\x6c\x61\x49\x02\xd3\xee\x3d\x86\x36\x6b\x1e\xe4\xb6\x7d\x09\x09\x34\x40\x63\x1f\x1e\xbc\x48\x11\x7a\x94\x12\x59\x38\x83\x55\x97\x20\xe7\x21\x99\x71\xd7\xda\xa8\xba\xe8\x39\xeb\xa5\xee\x19\x7b\x57\xbf\x74\x10\x83\x5e\xd8\xa7\xdc\x20\x9d\x95\x88\x99\xef\xa9\x7b\xa2\x8a\x56\x39\xe6\x58\x3a\x77\xea\x48\xc9\xd6\xea\x8e\x53\x2c\x2d\xd0\xd3\x3a\x4e\x49\x61\x87\xe0\xde\xa4\xb4\xa1\x4d\xb9\xd6\x1b\xec\xa8\xdf\xa0\xc4\x85\x88\x10\x71\xe0\x45\x02\x5d\x20\xa0\x3d\xf8\xc4\x39\x37\x20\x85\x73\x3b\x25\x0f\x1f\x31\xcc\x20\x30\xfd\x74\xc8\x2c\x57\xf4\x6c\xaf\x71\x76\x03\x90\x13\x99\xdb\x9b\x17\xe5\x14\x72\x40\x0e\x63\xee\xff\xf7\x05\x76\xb0\xb4\x6f\x18\xbb\xa3\x63\x90\xf8\xf2\x67\x78\x85\x36\x98\x4d\x85\xb7\x2f\xf0\x1e\xa3\xb7\x2d\x6c\xa6\x5c\x99\x64\x84\x23\xad\x19\xcd\xeb\xc1\xaf\xee\xe2\xd3\x88\xfa\x7e\x4e\x5d\xb9\x28\xc2\x23\x5e\x51\xf4\x12\xc9\xe2\x6e\xbd\x51\x46\xfe\x2d\x4c\x0d\xd4\x3f\x01\x37\x6d\xec\xa8\x67\x40\x7d\x30\x85\x3e\xbf\x4f\xa3\xe3\x65\x0e\x0c\x23\x2e\xf8\x82\xac\xda\x9b\x7d\xe9\x14\x02\x44\xd8\xee\xf8\xc8\x06\x4e\x99\x87\x90\xa0\x0c\x64\x9f\x20\x00\x02\xc2\x8c\x7e\x23\x3f\x82\x44\xef\x49\x7f\x66\x65\xd3\x33\xa7\x1b\x00\xa8\x05\x9f\x76\x1d\x64\xd4\xbf\x04\x95\x6e\xe8\xb1\xec\xc1\xdb\x45\xe9\x0a\xf1\x1b\x15\xcf\xcb\xc3\xe7\xea\x98\x9e\x79\x76\xb7\xfe\x0f\xb4\x77\x05\x9d\x3d\x24\x49\x74\xcd\xae\x0c\xc6\xb1\x1d\x77\x4f\x90\x3f\xec\xd5\x9d\x33\xda\x5e\x17\xd0\xba\xf7\x06\xd6\xc2\x96\x0b\x0f\x74\xb4\x32\xe4\xb4\xb4\x8b\x6a\x15\x2c\x14\x9e\x88\x1d\xdd\xde\xb1\x3e\xe8\xac\x51\xca\x85\x15\xb4\x68\x55\x24\x67\x95\x0c\xba\xc9\xdf\xdd\x1d\x88\x4b\x99\xf4\xcc\xe4\x50\xca\xc0\xa3\xaa\x8c\x64\xb5\x4d\xf1\x2c\x82\x8e\x70\x41\x06\x6e\xc5\x9a\x27\x13\x93\xac\x76\xf7\xd6\xf4\x8e\x27\xde\x7e\x16\xb1\x94\x43\x44\xc8\xf5\xf3\xc3\x03\x44\xc7\x8c\x16\xea\x1c\x42\xf1\x95\x01\x30\x06\x5a\xfd\x0b\x5a\x26\x24\x07\x36\x7a\x72\x28\x6b\x62\xef\xcf\xa0\xf1\x36\x20\x68\xf6\x27\x12\x64\x31\x2d\xb6\x81\x15\xd4\x02\x43\x07\x92\x20\xbc\xf5\xad\xc2\xba\xf9\xa7\x40\x81\xde\xdd\xca\xfd\x21\x52\x90\x15\x26\xfa\xbe\x51\x4c\x50\xf1\xce\xaf\xec\x32\x86\xd0\xff\x12\x43\xf0\xbe\xfb\x29\xee\x7f\x8e\x21\x78\xdf\x62\x08\xee\x4f\x31\x04\x8f\x42\x80\xf6\x0f\x8d\x62\x85\xf8\x9a\xff\x5a\x91\x1d\xd7\xb6\xe9\x15\x7b\x00\x05\x4b\x73\x55\x6e\x91\x60\x7a\xb8\x6a\xec\xf7\xd8\xbd\x64\xee\xee\xca\xdb\xcf\x6a\x45\x17\xd5\x84\x9a\xc1\x0d\xb2\x72\x5b\xe7\x0a\x02\xcb\x8c\x7b\x62\x60\xdc\xaf\x22\x4f\x6c\x6d\xef\x86\x58\x99\x51\x59\x7c\x31\x0f\x3c\x14\x8c\xc9\x02\x47\xe8\x1f\xa6\xcd\x2f\x3a\x17\xf6\x01\x09\x83\x8a\x04\xb9\x34\x6e\x4a\x19\xd6\xf5\xc4\xfa\xa3\x94\x9f\x0a\x71\x68\xf1\xbe\xa0\xee\x3e\x67\x3a\xaa\x48\xb3\xb5\x84\xc8\xcf\x10\x7b\x6c\xae\x9a\x55\xbd\x9f\xb8\x46\x4b\x79\x22\xa2\x24\x2a\xe2\x30\x60\xa2\x8e\x17\x36\x74\x81\xd8\x67\x73\xec\xf8\xc6\x98\x0c\xe3\x26\x90\x28\x34\xee\xe6\xcc\x6a\xf5\xbd\x2f\xc3\x25\x7d\xa9\x90\x80\x18\xae\x9b\x45\x5f\xbf\x10\x09\x6e\x2a\xa2\xc4\x44\xce\x25\xc6\xae\xbc\x6f\x46\x47\x40\xed\xe3\x49\xf6\x3e\x25\x57\x99\x2c\x44\xf7\x9b\x79\xa2\x19\x13\x62\xcb\x31\x49\xcc\xbd\x88\x60\xa0\xb1\xc7\xc9\xbb\x97\x07\xb6\xbc\xa6\xad\x08\xca\xd1\x30\xa2\x31\x3a\x2f\x10\x1c\x7a\x4c\x11\x4d\x28\x23\x79\x82\x6b\x31\xad\xe7\x36\xc9\xc4\x5d\x06\xe2\x33\xa8\x46\x51\x11\x66\xb5\x68\x0c\x44\xa9\xc9\xe7\x00\x58\x6d\xae\x30\x47\x12\x55\x5d\xcb\x6c\x89\x6a\x96\x65\xa8\x63\x51\xa6\x1e\x14\xb3\xc0\x82\xf6\x7d\xfb\x8d\x72\x93\x25\xa3\xed\x14\x55\x29\x37\x60\x78\xa9\x19\xb5\x3a\x53\x66\x96\xcd\xb0\xdc\x27\x0d\xd2\xd9\xc6\x51\x30\x20\x9a\x43\xa2\x46\x6b\x46\x6e\x95\x91\x90\xb2\x4e\x4a\x07\x44\x43\xd0\x95\x4c\x9f\xe3\xa7\x88\x62\x77\x67\x90\x31\xed\x25\x53\x6a\xf9\x2d\x9d\x46\x31\x35\xd4\x5a\xce\xd3\x92\xc8\xf3\xad\xc5\xcf\x83\x65\x83\x32\xa8\x27\x05\x0b\x34\xc8\xb4\xd0\x72\x60\x1e\x0c\x89\x80\xb7\x86\x59\x5b\xf8\xb9\x2e\x04\x51\x24\x84\xaf\xd9\x83\x98\x24\x03\x26\xd7\x34\x53\x6f\xca\xbc\x83\x15\xd6\x55\xe1\xa0\x8a\x2a\xb8\xba\x85\x47\x7d\x79\x2b\x52\x68\xe7\xac\x28\x85\x80\x9b\x37\x91\x6d\x6e\x6a\xe3\x34\x9a\xfc\xcd\x69\xf6\x25\x7d\x0c\x6d\x99\xda\xa7\x19\xdc\xab\xee\x94\xba\xbc\xa8\xba\x2d\x02\xb1\x27\xce\x07\xd9\x27\x65\x80\x3e\xe7\x1e\x18\x56\xe0\x21\xf4\x66\x6f\xb9\x3f\xd2\xc7\x9c\xae\xfe\xf5\x2d\x78\xc2\xcd\x58\x8f\x80\x29\xfb\x33\xb7\x98\x4c\x74\x82\xc9\x00\xc2\xb2\x10\x04\x33\x77\xe0\x22\x44\x19\x58\xac\xf3\x74\xeb\x22\x69\x1c\xff\x93\x60\x96\xa1\x6f\x20\xda\xd7\xb2\xf4\xd3\x3b\x63\x51\xcd\x92\x22\x67\x77\x4b\x23\x98\xc6\xaa\x49\x26\x95\xe3\x54\xcd\xc1\xc0\x85\xe1\x0b\x9c\x4c\xdd\x2e\x29\x12\xa0\x05\x2d\xcc\xbd\x81\x81\xb8\xb3\xbf\xd4\xcb\x3c\x4c\x9b\x7b\x71\x19\x25\x4d\x23\x0d\x85\x27\xe7\xcd\x6f\x8a\x94\xc9\xe5\x42\xc8\x8b\xdc\x4a\x4d\x3e\x16\x14\xda\x5a\x80\xb5\x7a\x29\xbe\xf4\xae\x11\x25\x1f\xbe\xb9\x5f\x1a\xa1\x54\x69\xcc\x33\xe2\x2b\x13\xfa\x30\xb6\x91\x12\x68\xfe\x3c\x5e\x74\x54\x39\x5e\x22\x17\xb7\x4c\x37\xb9\x6f\x77\xf8\x10\xa8\x0d\x0f\x56\x63\xc1\x69\xeb\xf4\x87\xc6\xc0\xa9\x9e\x65\x62\xcc\x3e\xed\xf1\x5c\xb9\xeb\xe0\x2b\xf0\xde\x05\x49\xee\x27\x7d\x9d\x58\x20\xfc\xaa\x68\x0a\x1a\xb1\x2d\x96\xb2\xfd\x79\xf7\xa3\x64\x59\x7b\x29\xcb\xd3\x2f\xb1\xdd\xd8\xd4\x90\x80\xaf\x58\x67\x53\x83\x98\x09\xcf\x18\x13\xa9\x73\x9a\xb3\x3b\x34\xc2\x0a\x0e\x35\x15\x68\xd3\x7d\x47\xcd\xf3\x01\x0a\x1d\xb0\xc4\x0b\x65\x32\xa8\x7b\xd4\x9e\x2d\x02\x93\xd0\x6c\x54\x25\x74\x52\x82\x1a\xb3\x6e\xc8\x50\x81\xda\x2e\x10\x02\x68\xe2\xd0\x50\xa4\xda\x7e\xa7\x91\xee\x63\xef\x0d\x2a\x26\x31\xaa\x38\x83\xe6\xbb\x48\x32\xd5\x67\xb7\x15\x66\xe3\x58\x33\xca\x83\x5f\x2c\x2b\xd7\x69\x8c\x38\x95\xa4\xcf\x07\x02\x70\xa9\x7d\x45\xf1\x43\x8f\x4e\xaa\xa3\x65\x5b\xa7\xf0\x99\x3f\xf1\xf1\x40\x86\x3f\xdd\x20\xdd\x24\x3e\x9d\x63\xb1\xfe\xd9\x7d\x0b\xab\x31\x18\x1c\xda\x64\x00\xc2\x95\xcb\x22\x22\x29\x57\xee\x94\xe6\xfe\x07\x84\x67\xe4\x13\xb1\x0a\x2b\x78\x48\x9e\x0b\x83\x0a\xa5\xba\x2f\x58\x61\x12\xfe\x71\x05\xa9\x1b\x52\x23\x4e\x2c\x47\x83\xd7\xdd\x35\x38\x97\x58\x26\x6c\x4a\xd8\x34\xe1\x80\x30\x4e\x10\x6e\x03\xee\x2d\xb6\xc0\xc6\x1c\x50\x0b\xbb\xe7\xb0\xea\xfd\x6a\x4d\xd1\xa3\x9e\x4f\x8a\x47\x42\xeb\x9e\x57\x1d\x82\xb6\x49\x89\xbb\x94\xc1\x5e\x69\xfd\x36\x9c\x89\x89\x30\xf1\xec\x75\x52\x0e\x03\x1b\xf6\x19\x24\x4d\xff\xf3\xee\xbb\xf4\x83\xd1\xed\x8b\x8c\xbe\x2c\x6d\x38\x53\x3d\xf0\x46\xa1\x32\x6d\xfc\xa9\x58\x23\x61\xa8\x9b\x49\x83\x20\x07\x46\xbc\x77\x9f\xc7\x6b\x33\x5a\x21\xd5\xb4\xb4\x06\x4c\x09\x8e\x0f\x32\x6f\x16\x3c\xfa\x23\x74\xb5\x31\x21\xf6\xac\xff\x54\xa9\xb5\x4e\xec\x4c\xe8\xdb\x05\xba\x1c\xeb\x8b\x06\xd7\x06\xcf\x1d\x8d\x31\x77\x0d\x25\xd6\xcb\x41\x92\xee\x46\x28\x54\xa4\x9c\xde\xf0\xef\x2d\xdb\xde\x45\x9d\x58\x13\x78\xcd\xfe\x8e\x6d\x4b\x97\x56\x27\x55\x8c\xbc\x26\x80\x9d\x79\xd7\xbc\x35\x10\xc3\x4a\x01\xea\x81\xd5\xb0\x4a\xc3\x6c\x6c\xd7\x38\xc7\xe9\x2d\x13\x7e\xe6\xf5\xec\x16\x56\xb5\x9a\x87\x46\x56\x0c\x24\xb3\x41\xd3\xe4\x80\x8d\x37\xf6\x92\xc6\x10\x03\x1b\x1c\x91\xd8\xc3\xb2\xad\x35\x27\x9c\x60\xd8\x79\x63\x50\xe6\x07\xbc\xb3\x9d\x02\x24\x86\x9f\x2e\xad\x58\x1c\x63\x4d\xae\x1d\xd3\x3d\x1e\xd6\xc5\xae\xd6\x36\x55\x06\xd3\xb3\x58\x9a\x7e\xc5\x70\x7a\xff\x5d\xac\xd4\xff\x4e\xf0\x58\x11\xb3\x40\x3b\x06\x58\xde\xa4\x54\x5f\xf5\xe5\x79\x62\x67\xdf\xa7\x9d\xd9\xf9\x1d\xad\xd4\x90\x7e\x5e\x58\x79\x6b\x55\xdf\xb4\x7f\xb2\xc2\xf7\xad\xb7\x7b\x8a\x4b\x97\x17\x2b\xdc\xcf\xca\x8d\x9e\xc4\x66\x9c\xab\xbd\x71\x20\xf7\x55\x29\x74\x2d\x18\x89\x95\xf2\xbe\x8c\x01\x84\x0b\x77\xcf\xf6\xc6\x00\xdb\xd2\xa7\xbc\xf6\x0d\x5d\xbb\xc6\x7e\x08\x53\x5a\xf8\x26\x80\x03\xeb\x9c\x2c\xd2\x3e\xa2\x65\x01\x79\xa6\x5e\xd7\x18\xd7\xdf\x32\x49\x6d\x82\x19\x30\x9f\x73\x7b\x0a\x8a\xa4\x55\xf2\x94\x98\x17\x2d\xd7\xc8\x10\x73\x5a\x47\x4e\x02\xd1\x33\xcc\x59\x27\x3a\x0b\x89\xfd\x8c\x2e\x08\xb2\x3b\xea\x44\x15\x83\x58\xfd\x47\x07\x26\x3c\x6b\x50\xd4\x32\x31\x26\x2d\x57\xb2\xb2\x0b\x3b\xc7\x09\xde\x99\xad\x39\xc1\xd9\xc3\x23\x56\x11\x9e\xf8\xb8\xec\x62\x97\xaf\xc2\x42\xa8\xd6\xf3\x47\x97\xf2\x45\xf3\xfe\xee\x4b\x97\xcf\x74\xbf\x9a\xda\x97\x54\x07\x57\xb0\x3e\x5a\x9a\xc2\x2b\x47\x31\xc0\x9a\x15\x8d\xe7\x4d\x44\xb6\xdd\x4f\x53\x25\xa4\xf1\xfa\x7b\x79\xf7\x4f\x5f\x20\x55\xac\x21\x82\x90\x4c\x77\x82\xf5\x7b\xef\xa0\x04\xbf\x76\xb7\xaf\xb4\x94\x6c\x31\xf2\x27\xa8\xbb\xf0\xe7\x77\xc5\xfc\x52\x06\x04\x2f\xe0\x96\xf4\x81\x40\xbb\x42\x08\x7b\x4e\x5e\xf0\x03\x42\x2c\xd8\x57\x3a\xb1\x39\xa4\xe1\xab\x3d\xce\x13\x55\x16\x74\xd3\x38\xc7\xd5\x0b\xbf\x4d\x06\x0c\x8c\x04\x15\xd1\x10\x7c\x95\x98\x09\x33\x92\x57\x77\xff\x50\xde\xa6\xa6\xbc\xb9\xc3\x8a\xda\xd6\x98\x29\x9e\x39\x6d\xb7\x45\x50\xac\xa2\xa9\x87\x92\x29\x1c\xfb\x06\x3a\x9f\xbc\x09\x76\x8c\x2a\x78\x52\x13\x8b\x2c\x5f\x49\x67\x01\x0c\x8c\xa1\x36\x53\xbe\x8e\x47\x15\x89\x62\x1d\xdf\x2b\x09\xac\xf5\x89\x82\xc4\x7b\xb2\x50\x71\xf1\xe7\xbe\xe8\x92\xca\xb4\x8c\x05\x78\xd7\x77\xe5\x78\xab\x4d\x4b\x59\xde\x02\x09\x39\x96\xaf\x1e\xe3\x24\x98\xc6\x43\x48\x9b\x5b\x34\x7d\x12\x09\x90\x9b\x48\xb4\x6f\x12\xc4\x2c\x3a\x25\x2f\x87\x2b\xd0\xf9\x08\xa0\x61\x9d\x6c\x6f\xe2\x52\x88\x89\x96\x52\x27\x36\xcd\xb4\x70\xd1\x2c\xb4\x92\x28\xd0\x0d\x1d\x7a\x87\x2e\x8b\x32\x2f\xa2\x95\x52\xb1\x40\xda\xcc\xf9\x47\x6f\xa8\xf9\xe4\x55\x1c\x2c\x58\x68\xfd\x15\x37\xc7\xdc\x8f\xbb\xa6\x73\xb7\x94\x43\xc9\x5d\x2f\x71\x7d\x68\x01\xd2\x31\x80\x06\x52\xbc\x1c\x16\xbc\x41\xbc\x54\x98\x8f\x13\x1b\x6f\xf3\xae\x5c\xd0\x7c\x5c\x8e\xb1\xa2\x26\xc4\xa6\x5a\xc9\x42\x21\xc1\xf0\x8e\x9d\x70\xa6\xc4\x96\x61\xef\xf4\x22\xcd\x37\xad\x3a\xa2\x83\xaf\x97\xc0\x51\xfb\xea\x9e\x5e\xc9\x3d\x38\x86\x16\x28\xef\xc1\xf9\x66\x47\x22\x12\xed\xc2\xaa\x11\x88\x90\x10\xa1\x53\xdb\x7d\x06\x67\x69\x4b\x3c\x82\x27\xc4\x15\xf2\x6b\x6e\xb9\x62\x17\xf9\x85\xd0\x2f\x76\x84\x3f\xc2\x23\xe6\x72\xc1\xda\xdc\x7d\x83\x04\x7d\xb7\x01\xf0\x82\x92\xd6\x60\xb1\x99\x3d\x07\x7c\x66\xf6\x0c\xef\x89\xc4\x7c\x91\xd2\x4f\x30\x2c\x82\x97\xa1\x3e\x01\x0e\x8a\xef\xa4\x34\xcc\x7e\x33\xfa\x11\x7c\xde\x17\x53\xba\x26\xdb\x17\x65\x10\xb0\x75\xfb\x5d\x78\x5b\xdd\x82\x24\xe2\x0c\x93\xbd\xd2\x9f\x87\x3a\xec\x22\x36\xa6\x3a\x3f\x0d\xbb\x14\x6e\xf1\x1a\xac\x19\x41\x7c\xf6\x9e\x89\x4b\x77\x8d\xc0\x57\x84\xbb\x94\xed\x2c\xa4\x89\x9a\x80\x6b\xe2\x69\x88\x8f\xb5\xe4\x69\x6b\xc7\x57\x52\x92\x3e\x8c\xe8\x48\x6c\x36\x97\xf7\x7c\x50\x75\x09\xe5\xa3\xa8\x9c\x5b\x03\x9a\x09\x78\xc1\xcd\x1a\x37\xa3\x04\x5b\xc9\xc2\xbe\x64\x18\x9b\xd6\x96\x16\xed\x5f\xac\x7e\x46\x25\x20\xc9\x22\xe5\x08\x2a\xdc\x0e\xfd\x57\x22\x4c\xac\x8e\x57\xde\xf3\x14\x5b\x5d\x75\x1a\xa8\x84\x93\xe6\xc6\x73\xf9\x65\xc7\x29\x9b\x85\x7d\x58\xc5\xdb\x45\x19\xc6\x52\xcc\x14\xa4\xdb\x09\xad\xcc\xb9\x26\xf0\x1e\xc9\x92\x0c\x43\xda\xf7\xf8\x02\xc9\x44\xed\x03\xce\x6c\xb9\xc4\x87\xfb\xae\x39\x0b\x89\xe3\x0e\x87\xb3\x26\xd1\xbe\x37\x7b\xd2\x52\xf6\x09\xc7\xdf\xc9\xf1\x3c\x39\x7e\xe3\xef\x8f\xdf\x39\xbd\x93\xa8\xc3\x6d\x8b\x24\x8c\xb9\x57\x2c\x71\x8f\x23\x09\x4f\xbe\x62\xef\x1e\x2b\xd4\xaa\x30\xa1\xe0\x83\x2c\xbc\xe3\x5e\xa4\xf9\x89\x38\x52\xe6\xf4\xe2\x1e\x49\xd0\x63\xda\x9c\x93\x22\x91\xa5\x44\x62\xce\xa3\x6f\x88\x47\x28\x05\xda\xcf\xb7\xc5\xa3\xda\x3a\x70\x8e\x5a\x29\xe4\x48\xf8\x66\xea\x9b\x64\x10\x4f\x60\xc6\xfb\x52\xdb\x00\xb0\x0d\x25\x22\x33\xa2\x99\x26\x47\x26\xf3\x42\x8b\xb7\x50\x9e\x7b\x1f\x1c\x79\x70\xdd\xc3\x2a\xf1\x1e\x79\x7b\xf4\xba\x40\xaf\x1b\x4e\x84\x94\xbd\xce\xc2\xf8\x68\xad\xc3\xb9\x3e\xff\xe3\x5c\x7d\xcc\xe5\x7c\x9f\x2b\xa0\x0c\xc5\x4d\x48\xdf\x20\x67\x2f\xa3\x14\x3d\x64\x1f\x16\x29\xdc\x20\xbf\x73\x28\xc7\x5c\xdc\xcf\x68\x59\x8f\x3e\xb3\x34\xa2\x94\xd4\xcb\xa1\x2c\xd2\xc4\xf4\x48\x5a\x42\x1c\x74\xce\xcb\x97\x7b\xb9\xa4\x69\x64\xc2\xb4\x74\x90\x52\x16\xbc\x89\xf4\x73\x6f\x69\xae\xbd\xe8\x4d\x25\xcd\x39\x25\x3d\xef\x02\x46\x27\x4d\x8a\x91\xc2\x99\x96\x44\xba\x74\x8f\x69\xd3\x60\xeb\xc8\xb9\x32\x64\xde\xae\xc1\x00\x38\x82\x57\x94\xaa\xd3\xb0\x68\x94\xe3\x9e\xc9\x65\xa5\x0f\xc9\x05\x28\x8b\x21\x4e\xda\xfd\x4c\x9e\xae\xda\x74\xbc\xda\x7a\xd0\x10\xf6\xf0\x8b\x85\xd3\xf1\xbc\x01\xa3\x82\x41\x79\x1d\xc5\xdc\x68\x05\x59\x92\x0a\x21\x1b\x43\x50\x54\xbb\x2d\xa6\xfa\xdc\xa5\xcd\xd3\x82\x26\xc7\xa5\x4e\x05\x91\x9b\xda\x85\x31\x32\xd0\x76\x0d\x68\xde\x8f\x58\x9f\x19\x20\xf3\xc0\x86\x22\x08\x16\x14\xec\x2e\x60\x3e\x7f\x60\x3d\xa9\x6c\xe4\xe2\x01\x7f\x84\xe3\x55\xdd\xa5\xd7\xd9\xc1\x61\xb7\xdc\x0c\x80\xb5\x1f\xa5\x89\xe1\x9c\x57\x80\xdb\x43\x13\xab\x2b\x0b\x99\xe9\xae\xb4\x33\xd4\x49\x9c\x01\x0b\xa9\xfd\x76\x6f\x8e\xdd\xd6\xfc\xeb\x32\x96\x14\xc3\x09\xe6\xcd\xe0\xb1\x7d\xbc\x50\x92\x22\xe2\x9d\xa4\xf6\xcc\x66\x7d\x06\xb5\x87\xcf\x3a\x54\x73\x59\x6b\xff\x1d\x2a\x92\x66\xfa\xb3\xcc\x66\x79\x75\xdb\x94\x03\xdd\x50\xfc\xa1\xd8\xca\x44\xd9\x81\xa7\x1e\x83\x80\x32\xcc\x64\x61\x84\x86\x60\x64\xa6\x68\xfa\xfd\x06\xe3\x76\x66\xa7\x74\x40\x51\x38\xe0\x99\x9b\x67\x35\x18\x0d\xa7\xdf\x4f\xa4\x31\x72\x57\x9c\x59\x0c\x49\xd3\xc5\xb7\x17\x0a\x02\x43\x5b\x42\x8b\xb5\x6a\xd5\xff\x25\x16\x8c\x18\x20\xeb\x32\x7a\x2f\xa9\x73\x09\x04\x14\x75\xa3\x82\x09\xed\x02\x11\x11\x4b\x4f\x84\x4d\x4b\xbb\xbc\xac\xe0\xe2\xd5\x25\x2b\xa8\xe3\xda\x6f\x63\x23\x6b\x4f\xdd\x07\x74\xa1\x52\x4f\x73\xea\x1b\x33\x6a\x08\xfc\x32\xea\xb4\x64\xc5\x13\x0c\xba\x02\x79\x21\x06\x05\xa2\xc2\x69\xa1\xbb\xac\x38\xa8\xd1\xa6\x41\x35\x88\x77\x06\x45\x12\xd5\x41\x6b\x95\x2b\x56\x5a\x83\xcd\x19\x72\x38\x05\xc3\xc7\x46\x32\x20\xf7\xcf\x73\x68\xbf\xb1\x92\x28\x5b\xfb\xec\xe3\x05\x18\xd0\xa4\x7a\x28\x69\x52\xdd\x6b\x6a\x93\x90\xf9\x0c\xb0\x18\xca\x8e\x34\xd7\x4f\x78\x01\xc6\xac\xf1\x29\x7f\xbc\xad\x7d\xcd\x0b\x09\x99\xb9\xe1\xd2\x43\xd5\x41\x68\x3d\x5b\x6f\xc6\x54\xfa\xbe\xb2\xbb\x5f\x19\xd0\x7d\x28\xe9\x7c\xbf\x72\x83\x15\x7b\x72\xf9\x63\xc9\x4d\x50\x09\x92\xce\x7b\x63\x93\x46\xd0\x04\xe8\x6d\xd5\xfc\xfb\xc6\x10\xb3\xf0\x3a\x66\x73\x53\x7b\x1f\x2b\x7f\xa5\xcf\x21\x9d\xbc\x5d\xd8\xf2\x61\x94\x33\xaa\x0f\x79\xa0\x69\xfd\xde\xbc\x08\xe1\xac\x02\x06\x51\x02\x13\x48\xe3\x78\x31\x62\x32\x75\x4d\x89\xf2\x8e\xf4\xca\x70\x67\x57\xdf\xf8\x73\x0d\xa5\xcf\x0a\xa1\x1a\xae\x4c\x28\x8f\x55\x62\x42\xa7\x22\x63\x14\xb3\x9a\xdd\x24\x32\x87\x14\x58\x89\x5c\xbd\xb6\xcd\xef\x66\xb4\x4a\x49\xde\xaf\x3d\x90\x41\x40\x75\xa9\x2a\x39\x23\xb7\x37\xac\x44\x9b\x00\x1b\x67\x88\x6f\x6e\x6d\x5e\x07\xee\x9d\x80\x96\xde\x70\xa1\xd3\x5c\xbd\x23\x6b\x46\xe3\x06\x07\xd8\xff\x74\x60\xb1\xea\x9d\x25\xa4\xf1\x90\x85\x30\x09\xdd\x1a\xbd\x85\xd3\x07\x7a\xb7\xac\xb1\xa0\x53\xde\xe3\x15\xba\x16\x57\x1f\x4e\x69\xdf\x26\x8d\x42\xbf\xba\x2b\x97\xbe\x45\x0d\x84\xd7\x5a\x60\xb1\x2e\x4c\x57\x09\x20\x08\x9e\x30\xaf\x09\x9b\xbb\x34\xdc\x88\xa8\xe0\xfc\xde\x18\xf8\x72\x8c\x4b\x2c\x1f\xf1\x9e\xa8\xaf\x09\x19\x8e\xdb\x10\x21\x5c\x94\xd9\x83\x32\xba\x57\x0f\xd0\x77\x65\x9a\x3a\xa9\x5c\x90\xa2\xef\x79\xc1\x24\xe1\xb6\x5d\x5e\x73\xa6\xa7\x68\x64\x19\xd4\x6a\x98\x70\x14\xd8\x1e\x5e\x6a\xc8\xda\x55\x55\xb3\x3f\xb0\x15\xe3\xc9\xce\x99\x43\x32\x69\x02\x0e\x2f\xee\x81\x5e\xe0\x92\xc0\xb9\xcd\xda\xc4\x00\x29\x4f\x6f\xc4\xfa\x36\xb1\x44\xe7\x73\xfc\x52\x49\xcb\xcf\xa0\xd4\x7a\x8c\x8f\x43\x55\xbd\x23\xa4\xf4\x70\xa3\x78\x4f\x18\xc6\xde\xc2\xdc\xa0\x2d\xa2\x9b\x4f\xd5\x2e\x96\xe0\xf4\x84\xfe\xaf\x1a\x19\x4b\x08\x12\x85\x04\x2e\x69\x36\x3a\xde\x28\xb1\x1b\x03\x1a\x2c\x47\xb6\x5c\xe5\x5f\x7b\xb4\x93\x4e\x1b\x9a\x6d\x6a\xe6\xaa\x7c\xdf\x1a\x3c\xb3\xaa\x05\x15\x26\xeb\x11\x7f\x73\xe4\x4c\xac\x50\x09\xf5\x88\x8f\xff\x80\x64\x23\x84\x50\xca\x1f\xd6\xb0\x3f\xc0\x4b\x51\x0d\xaa\xb0\x77\x4a\x86\xdd\x45\x5f\x04\x99\x4a\x9d\x13\x26\x6c\xf4\x88\x84\x61\x88\xa8\x78\x97\xa3\x2c\xed\x73\xc0\xf9\xc6\x39\x61\x7d\xcb\x59\x84\x4c\x6a\x9d\x9e\xbb\x69\xe4\xc7\x6e\xaa\xcc\xc7\xb3\x08\xfc\xc4\xbd\x9c\xdb\x1f\x34\x06\xae\x5c\xde\xfd\x31\x13\x49\x05\x9b\x7b\x65\x3b\x8c\x2d\xca\xde\x85\x46\xb4\xeb\x6f\x86\x9f\x36\x8b\x49\x50\x43\x29\xe1\x45\xd7\xdb\xa0\x6f\x6c\x8f\x91\xcb\x59\xd9\x5b\xa0\xd8\x64\x3b\x50\x8f\x12\x31\x70\x60\xe2\x07\xef\x1d\x5a\xdf\x20\x84\xfa\xc3\xf1\xfe\xde\xeb\x05\xd4\x32\x43\x1a\x64\xc2\x5b\x5e\x33\x59\x36\xf6\x79\x2b\x40\x3d\x60\x8c\x6b\x8c\xea\x32\x95\xd9\x89\x71\x09\xa7\xe0\xd2\xa8\x1e\x90\x0c\x8f\x18\xb1\xba\x86\x5d\x34\x3b\xe8\x05\x7c\x58\x71\x0a\xdd\x10\x6b\xab\x54\x2a\x35\xdd\x04\x83\xae\x21\x49\x7e\x7f\x42\x72\x52\x33\xc5\x8e\x71\xa0\xc1\x0c\x2d\x54\xe5\x88\xaa\x07\x8a\xbb\x30\x5c\x26\x8d\x6b\xc6\x0c\xb7\x38\x43\x9b\x8c\xd9\x3b\xe3\x85\xc1\x35\x79\xf6\x56\x44\xe2\x4e\x25\xf7\x74\x67\xc0\x28\x75\x93\x20\x40\xc8\x61\xa5\x58\x67\x26\xb3\x48\x27\x8b\xc2\x4f\x9d\x12\x36\x8c\xae\x98\x4a\x5b\x53\x8d\x51\xae\xec\x1b\x5b\x8e\x09\x0f\x66\x2d\x29\x8b\x66\x28\xda\xdc\x79\x65\x14\xb2\x57\xb2\x3e\x03\x46\xfc\x89\x13\xa6\x43\x7f\x8a\x17\xd1\x7e\x93\x1a\x8c\xd6\x95\xc3\x78\x88\xbb\x78\x44\xed\x17\x10\x3d\x11\xae\xf5\xe6\x36\x3c\x28\x8b\x26\x2f\x84\xcc\x1d\xd2\x10\xd3\x3b\xfa\x4f\xfc\x4d\x96\xc9\x3e\xe6\xaf\x9e\xc6\xc2\x35\x63\xbb\xc3\x28\xa7\x09\x7c\x40\x56\x77\x17\xa8\xb8\x99\x9b\xec\xb3\x5e\xea\x11\x13\x27\xf6\xea\xb6\x62\xc7\x6c\x40\x43\xbd\xf4\x96\xfe\xfd\xe2\xb6\xa8\x11\x82\x7b\x7f\x44\x03\x79\xc6\x80\x36\xbd\xfc\xd4\x63\x95\x58\xfb\x44\xe0\xee\x3d\xe2\x9c\x48\x52\x9b\x44\xc6\x75\x70\x01\xeb\xbc\x16\xa4\x88\x58\xf6\x15\x63\x06\xe7\x2e\x63\x09\x47\x2e\x65\x03\x43\x70\x2e\xd4\x8a\x80\x12\x54\xb3\x61\xb9\x77\x11\x6a\x0f\xa4\x78\x8d\x19\xa0\xdd\xdd\x32\xa4\x85\xe2\x5a\xc3\xd4\xce\x1f\xc1\x2e\x17\x01\x0d\x22\x26\x64\xbc\xe2\x36\x22\x4b\x0c\x07\x58\x59\x8a\x2a\x7e\x48\x17\xbb\x9f\x0e\xad\x45\x93\xbc\x10\x2f\x55\xde\x36\x8f\x25\x03\xe6\x00\x6b\x78\x67\x94\xa5\xa0\x32\xf8\x03\xb3\x5d\xb8\x7b\x66\x63\xda\xb0\x3d\xe6\xc7\x75\x0a\x72\x94\x9b\x32\x30\xd6\x39\x61\xc5\x3d\x5d\x16\x33\xec\x4a\x8c\xe5\xd6\x55\x25\x81\xbb\x10\x86\xbf\xfb\x6d\x7e\x8e\x45\x3e\xce\xa9\x72\x77\xca\x98\xde\x3d\x89\x9d\x5c\xdf\x95\x03\x3e\x7d\xc2\xb0\x00\x9f\x94\xbd\xa8\xbc\x4c\x01\x0f\xde\xe9\xef\xe6\x80\x64\xd7\xfc\xf8\x10\x32\xa1\x73\x87\x7d\x51\x46\x9f\x7d\x4a\x7a\x5f\xf3\xe7\x42\x6a\x21\xc2\x74\x88\xe8\xa9\x73\xf5\x76\x5b\x69\x35\x37\x07\x44\xb6\x4d\xcc\xf5\x1f\x08\xda\x66\x59\xbb\x83\x75\x1e\x76\x0f\x7f\xb1\x11\x2b\x30\xfb\x38\x98\x7c\x13\x16\x7b\xeb\x4b\xd5\x9f\xc4\xc5\x43\x09\x1f\xdc\xfa\x50\x56\xfd\x1c\x85\x01\x89\xd4\x25\x7b\x7c\x15\xfb\xf1\xc8\xd9\x97\x26\xa9\x89\x4b\xb7\xa1\xd2\x27\x18\xc6\x2d\x00\x6f\x67\xa3\x4a\xa2\xf8\x7d\x8a\x4f\x38\x60\x5f\x32\xbd\xad\xc3\x1a\x92\x85\xd4\x90\x0c\xc9\x90\x20\xf7\xe8\x08\xec\xf1\x7c\xc3\xe2\x8b\x6a\x0d\x03\xa3\x9b\xfd\x6b\x1f\x0a\xe7\xc6\xff\x23\x55\xca\x8f\x76\xb0\x52\xea\x1d\xf5\x54\x0b\x5a\x93\x31\xf1\xca\x7a\xe7\xe1\x8d\xc3\x9c\xe3\x50\x0a\x7b\x59\xb7\x37\x64\xd1\x6a\x59\x82\x81\x1f\x09\x22\x67\x02\xb2\x18\xd6\xce\x64\x4f\x77\xfe\x05\x8c\xa6\x37\x84\x7d\xd4\xce\xbe\x0a\x2b\x70\x89\x2e\x20\xed\x32\xdb\xe4\xf5\xa7\x3c\xdb\x29\xf2\x11\x99\x0d\xb5\xd3\xa2\x83\x23\x5f\xf8\x05\xd3\xfb\xa7\x30\xfa\xfa\xac\x76\xaa\x1b\xe6\xf4\x4a\x56\x4a\x18\xf6\x44\xb0\xea\x96\x95\xb4\x7a\x12\xaf\x93\xf9\xb4\xcd\xd6\x80\x0a\x42\xf7\x9f\xf6\x54\x6a\xef\xb4\x13\x7a\xf8\xab\x6c\x38\xc9\x45\x60\xf8\x1b\x82\xe3\x1a\x11\xc1\x5a\xe3\x84\x61\x2d\xd8\x54\x37\x60\xd1\xb5\x7d\x0d\x25\x5c\x67\xec\x2e\x3e\x0f\xc8\x1a\x63\x0a\xaf\x53\xe1\x79\x0d\x96\x1a\x8c\x53\x8b\xc5\xe0\xfb\x41\x00\xf0\x59\xc0\x39\x61\x56\x35\x21\x31\xdc\x90\x1b\x97\xb0\x78\xfd\x3b\x91\xf4\x0c\x79\xac\x25\xee\xb2\xb6\x73\x03\x19\xe3\x9b\x0a\x68\x72\x7b\x82\x88\x86\x50\x10\x8d\x14\x2c\xb5\x42\xad\xc7\x54\x4d\x78\x0d\xf1\xfa\x91\x09\x48\x61\xf0\xb9\x7d\x63\x14\xf1\x75\xc0\xa4\x14\x79\xec\xc4\xb4\x52\x5d\xb1\x12\xc9\xe7\xef\x81\xa1\xa0\x74\xb2\xbf\xd1\x18\x89\xd3\x84\x6f\x3e\x8a\x78\x6f\x4f\x02\x86\xb8\xf8\x98\x7d\x29\x97\xd2\x5a\xf6\x37\x82\x4b\xd6\xa4\xf9\x03\x13\xe8\xb9\x46\xe6\x90\x7a\x93\xfa\x04\x5e\xe7\x86\xb8\x1e\x77\x29\x05\x64\x58\x0d\x4a\x34\x3c\x6b\xd1\x68\x2a\xcb\xb6\x6a\x88\xf2\x7d\x2d\xdb\xd2\xab\x01\xdf\xe6\xee\xd3\xb7\x3c\x2c\xaa\x37\xb5\x15\xbd\x34\xe9\xa0\x73\x84\x0c\xdb\x67\xcd\xe3\x32\x1c\x3b\x3c\x67\xa4\xe8\x8c\x55\x72\x49\x93\xb6\x9d\x78\x87\x41\x1d\x71\xd1\x37\x9b\x95\xdb\x83\x99\x50\x9c\x73\x63\x6f\x69\xd8\xbc\xfb\x0c\x48\x08\x71\xdd\x78\x7b\xc1\x1e\x34\x8b\xbb\xbb\xda\xc1\x9a\x31\x03\x97\x83\x1b\x13\xb5\xb9\x67\xcc\x52\x63\x74\x1c\x4f\x45\x39\x9e\x8c\xac\x1c\x53\x98\x4c\xa9\x44\x24\x5d\x00\x86\x3f\x1d\x90\xd9\xbb\xa0\x22\x16\xf8\x03\x5a\xd7\x1d\x3a\xb4\x32\xa0\x18\x36\x79\x2c\x86\x7d\xff\x3d\x37\xc5\xe4\x96\x4c\x0f\xa9\x8c\xe8\x7a\x6e\x7e\x08\x85\x09\x10\x23\x7c\xd0\xb4\x04\x81\xc6\xab\xc7\xb2\xe9\x02\xd8\x16\x5b\xce\x5c\x2a\x52\x9f\xee\x0c\xb0\x27\xe2\x3c\xda\x19\x18\xbb\x03\x63\xb6\x16\x3e\x3d\x63\x53\x15\xea\xe3\x23\x0a\xad\x1a\x45\xf9\xd7\x42\x15\xfe\x32\x98\xa9\x29\x5a\x1b\xf6\x2e\x15\xe6\x67\x44\x85\xf9\xee\x8a\xd1\xf6\x11\xd1\x38\x38\x46\x5a\x32\x87\xd5\x56\x64\x9b\x69\x46\x0c\xa9\xd5\x1d\x03\x72\x2d\x1f\xd2\x8a\x4d\x7b\x81\xc8\x91\x16\xd9\x07\x5f\x1a\x4b\xc3\x70\x51\x5f\x32\x1d\xe7\x50\x93\xad\x0d\x00\xd1\x27\x67\x61\x87\x9f\x3c\x27\xab\x7b\xba\x0f\x5f\xa7\xd1\x9e\xd4\x50\x16\xb8\xfa\x92\x3d\x6f\x89\xf8\xc1\x16\xda\xe6\xd3\x0b\x44\x21\x4e\xd4\x18\x8a\x6f\x6c\x1b\x90\x41\xc0\xcc\xd5\x1b\x05\x69\x26\x44\xe7\x3d\x13\xaf\x1b\xfb\x0d\xa2\x7a\x6b\xa7\xcc\xd8\x6d\x84\x89\x3c\x7c\xef\xe7\x25\xde\x3c\x6d\x93\xd0\x85\xd9\x56\x1a\xdf\x1f\xe9\x2b\x49\x9d\x16\x89\x60\x07\x07\xb2\x3b\x71\xf7\x59\xd0\x95\xfd\x21\x54\xd8\x18\x8b\x4e\x33\x8d\xf8\x4d\xb3\xe2\xf9\xa5\x7c\xcc\xc4\x15\x91\xf3\x9c\xc2\x09\xfe\x30\x85\x0e\x57\xdf\x21\xbb\x2e\x2a\x00\x2e\x1f\x0b\xd5\xaf\xdd\x14\x9f\x46\xf9\xf7\x2a\x83\x36\x73\xd4\x41\xf6\xc8\x82\x85\x47\xa4\x16\x3c\x86\x22\xda\x9b\x07\xd4\x63\x3e\x6f\xf9\x7a\xf6\x80\x42\xf2\x25\x43\x17\x73\x44\x9b\x32\xc5\x3b\xb4\x32\xd6\xc4\x10\xa5\xf3\x46\xd8\xc2\x9b\x17\x9d\x17\xf0\x1d\xfb\xd0\xa4\xa9\x4f\x67\xc9\x74\xbd\x57\xba\x4e\xa4\x8a\xd3\xaf\x93\x86\xb6\x77\xff\x89\xbf\xea\xaa\x60\x26\x91\x00\x88\x0a\xbe\x42\xc4\xc6\x86\x55\x8f\xf7\xd5\x4d\xfc\x8d\xbc\x16\xab\x9f\xc5\x5e\x98\xda\xd7\xe0\xc1\x01\xcc\xbe\xc1\xd5\x7d\x11\x1c\xd1\xf4\xc0\x44\x4c\x64\x6e\x9b\x40\x14\xde\x18\x7f\x8c\xc1\xed\xc1\x9c\xe0\x1a\x77\x39\x22\xc4\x8f\x03\xee\x7d\x90\x29\x6b\xa1\x18\xb7\x0f\x97\xa4\x9f\x15\x7f\x1f\x92\xbf\x98\x12\x8c\xa9\xca\xa9\x2f\x4e\xe1\x5e\xee\xa3\x2f\x7d\xc2\x87\xa6\xfc\xb0\xb4\x14\x82\x51\x75\x6d\x28\x97\x31\xc8\x6d\x28\x09\x18\x6d\x8a\x7f\x82\x95\x07\xd4\xc6\x31\x34\xee\x05\xc4\xc1\x15\x05\x71\x5f\xcb\xdc\x22\x04\x34\x64\xf4\x47\x5c\x12\x04\x7f\xe4\x22\x0f\xf4\x10\xb6\xc4\x0b\x98\x5a\xe4\x75\x2b\x92\x51\x7e\xd1\xa5\xa0\xf0\xc0\x2a\x20\x49\x77\xa8\x7d\x09\x51\x35\xb8\xda\x03\xde\xcd\x9b\x8c\x20\xb7\x66\xcc\x41\x28\x32\x76\x16\x1c\xb2\x17\x7f\xf9\xec\x1d\x8a\x6f\x6b\xaf\x98\x09\x37\x9f\xe0\xec\x17\x85\xac\x18\x98\x22\xb5\xf0\x06\x60\xef\x26\xcc\x70\xd5\x6e\xff\x48\xdc\x30\x5c\xdc\x6d\x13\xbc\x13\x7d\xfe\x99\x0b\xd6\x72\xf9\xc9\x3b\xb1\x69\x38\x7c\x95\x34\x66\x84\x64\x65\xed\xbf\x99\xaa\x65\xf9\x73\x95\x1e\xca\xcb\xdb\xd2\xa3\xac\xb7\x4b\x9b\x20\x30\x85\xc4\x15\xa7\x25\xa0\x0c\x5e\x37\x50\xe2\x8c\xc8\x32\x0a\x0c\xfa\x39\x72\xb8\xab\xe2\x47\x15\xaa\x5c\x2f\x6e\xe5\x65\xe3\xf5\x50\x10\x5e\xda\xc6\x8e\x61\x6d\x8d\xbd\x3b\xa8\x17\x6a\x57\x3a\xdb\xe7\x76\x4a\x0f\x6b\x6d\x6e\x24\x68\x64\xfc\x36\x76\xbf\x57\x66\x9d\x5c\x54\x03\x4b\xa0\x9c\x17\x2b\x5f\x10\x1c\x66\x85\x10\x7f\x34\x4c\x12\x45\xea\xca\x16\x7a\x5d\xfb\x9d\xfc\xa1\x32\x29\x13\x8e\x5d\x26\x97\x11\xb3\x61\x34\x41\xbb\x64\x92\x82\x99\xda\xf3\xea\x8f\x2d\xbe\x81\x70\x2f\x48\xb8\x6e\x1b\x32\xe2\x11\x5e\x87\xf9\xb9\xa0\xc2\x57\xb4\xc2\x77\x21\x59\xef\xbc\x61\x72\xcb\xef\x4f\x65\xd1\xc0\x4e\x88\xb5\x28\x59\xf9\xe8\x1a\xc7\xd3\x2d\xd2\x53\xb5\x8a\xfd\xb3\x13\x23\xb8\xf5\x8a\x5a\xc0\x0f\x66\xfe\x19\x7c\xdf\x22\xff\xff\xf4\xce\xec\xd9\xdc\xd4\x06\x76\x25\xa5\x8b\xdc\xfc\x12\x26\xcc\xdd\xd6\x33\x00\x10\xc2\x5d\x20\x79\xae\x95\x26\x1b\x79\x27\xb7\xbd\xc0\x3d\xc4\xe7\x4f\x99\xfd\xf1\xb1\xa2\x83\x65\xba\xc1\x23\x5d\xde\x5e\x09\x34\xa9\x01\xdf\x50\x0a\x50\xd2\xcb\xe5\xe6\x96\x58\x01\x1b\xd2\x29\xa5\x0d\x82\x9a\xe1\x0c\xe5\x43\xa4\x2a\xbf\x3a\x9c\x97\x8a\xa7\x95\x6b\x3c\x67\xdf\xe2\xa3\x46\x2a\x71\xbc\xf9\x19\xc8\x89\x2a\x65\x95\xe8\xb4\x33\xda\xb8\x14\x4b\x03\x84\xe3\xf9\x4b\xbc\xad\x8f\xce\x41\x53\x5b\xee\xda\xae\xa1\xd3\xa3\x27\x24\x5f\x41\xc5\x5d\x43\x32\x91\x75\xd4\xd0\x46\x41\x8b\x96\xea\x53\x85\x28\x9c\xe3\xf2\xe7\x6d\x7b\xe6\x1a\x2b\xf8\xec\x04\xce\x46\x71\x3d\xc0\xfc\xc4\xea\xac\x51\x25\x4d\xb1\x5d\x67\xac\xdd\x27\x1d\x48\x5c\xbc\x0b\x49\xa6\xff\xcf\xd5\x51\xab\x68\xdc\xe7\x1b\x55\xc6\x5c\x72\xdf\x44\xd7\xb7\x10\x6f\xfd\x6b\x86\x2a\x79\x11\xb7\xb7\x51\x45\x5f\xaf\x08\x5a\x40\x19\xa9\xac\x81\x71\x43\xe6\x97\x7a\x29\xb3\x03\xa7\x3f\x7d\x9c\x32\xf7\x54\x24\xde\xf0\x53\x00\x66\x20\xe3\x62\xd8\x93\xa9\x9b\x2b\x6b\x93\x79\x99\x6d\xcc\x88\x41\xef\xdd\x29\x8d\xf8\x73\xdc\x6f\x58\xe1\x1e\x1e\x7e\x2c\xcd\xaa\x9b\xda\xab\x4b\x8a\xc9\x9b\x07\xda\xa8\xc9\x03\xed\x9d\x72\x69\x93\x00\x30\x79\x3f\x0c\x3f\xb5\x51\x7f\xba\xb3\x99\x6e\x35\x59\x86\xae\x49\x2f\x98\x37\xa0\x30\x93\x1d\xa9\xa9\xf3\x56\x4d\x2c\x98\xdf\x30\x1b\xdb\xd5\xc6\xc0\x24\x0b\x6a\x62\xaf\xa8\xba\x73\x0a\xa2\xe6\xef\xca\x99\x74\x87\x55\x0c\x08\xca\xa4\x87\x63\x50\xc1\xdf\xa8\x89\x78\x09\xb7\x77\xa5\xbe\x4a\x0e\xfc\x4a\xa0\x29\xfd\xf8\xc1\x59\x19\x43\x94\xbe\xc1\xfe\x7c\xae\xc3\x60\x90\xab\x72\x30\x3c\x97\x20\x56\x09\x61\x02\xb8\x2c\xeb\xef\x5d\x98\x57\xdc\x8a\x51\xab\x06\x63\xfb\x3d\x56\xe5\x5f\xb1\xf6\x9d\x8e\x68\x9b\xd1\x67\xf7\xf4\x1e\xbc\xf2\x8e\xe3\x0e\xe7\x0f\x65\xa3\x04\xc5\x7c\x93\xae\x7b\xae\xdd\x97\xab\xab\x3b\x23\x52\x4b\x31\xb7\x84\xb0\x1a\x4e\xc8\x1c\x0b\x14\x32\xf4\x56\x62\x3f\x68\x6b\xb5\xc2\xb1\xea\x2b\xc7\x9a\xe0\xcf\xb4\x5b\xcd\x68\x98\xc6\x9c\x3f\xbc\x8d\x4f\x3e\x60\x5b\x70\x4a\xed\xa0\x3e\x15\x03\xda\x96\x7b\xe5\x96\x9d\x22\x41\xd8\x49\x86\xe2\x15\xc4\xca\x67\x1e\x7e\x9e\x19\xca\x8a\x19\xe1\xe7\x93\xbb\x03\xb8\x32\xd6\xd7\xa5\x5e\xf6\xe4\x07\xb1\x41\xca\x27\x88\xf0\xfc\x63\xdd\xcf\x11\x26\x32\xa5\x08\xb9\xc0\xc8\x7d\x99\x3d\xfc\x49\x08\x5c\xc3\xde\x76\xb7\xca\x5c\xc8\x58\x43\x92\xdf\xf1\xb7\x0a\x7f\xd4\x48\x28\x4a\x60\xc8\xe4\xc4\x10\x70\x7f\xaf\xac\xfc\xbd\x28\xda\xf4\x8e\x2b\xc5\x66\x54\x1b\x52\xa4\xbe\x02\x44\x78\xf1\x36\x5a\xe3\xa5\x9d\x9b\x30\xbd\x90\x9e\xd7\x69\x54\xbe\x0f\x78\xbd\x62\x27\x31\x60\xf7\x09\x12\xad\x0f\xfd\xf6\x84\x8e\x77\xd8\xf7\xee\x0b\x0c\xe9\xa7\x37\xd8\xe8\x4b\x68\xf9\x67\xd4\xac\x8b\x3e\x16\x30\x2c\x78\xcd\x28\x75\x2a\x6f\xdd\x1a\x02\xcb\x1a\x35\xe2\x70\x3c\x9f\x41\x16\x7c\x98\x0f\x8a\x9b\x15\x48\x83\xf6\xcc\xaf\xac\xb5\xce\x7b\xbf\xfe\xf7\xff\x09\x00\x00\xff\xff\x2a\x55\x00\x86\x40\x70\x00\x00") + +func uiJsLibsMithriljs020MithrilMinJsMapBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsMithriljs020MithrilMinJsMap, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js.map", + ) +} + +func uiJsLibsMithriljs020MithrilMinJsMap() (*asset, error) { + bytes, err := uiJsLibsMithriljs020MithrilMinJsMapBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/mithriljs/0.2.0/mithril.min.js.map", size: 28736, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsNvd3171NvD3MinJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xf7\x76\xe3\x48\x92\x2f\xfc\xff\x3e\x85\xc4\x99\xd5\x02\xc5\x24\x8b\x54\x55\xf5\xcc\x90\x0d\xf1\xc8\x95\x77\xd3\xd5\x76\x74\x74\xfa\x02\x20\xe8\x49\x50\xf4\x54\x89\x0f\xf5\xbd\xc2\xf7\x64\x37\x22\x0d\x90\x09\x64\x02\xa0\x4a\xea\xde\xdd\x3b\xa7\x4f\x97\x88\x44\x7a\xa4\x09\xf3\x8b\x88\xa7\x4f\x0e\x26\xab\xf6\xb3\x83\x55\x30\x9b\xf7\xc3\xc9\x41\xbd\xfa\xf7\x6a\xfd\xc0\xea\x2d\x16\xd3\x79\xe3\xe9\xd3\x6e\x7f\xd1\x5b\x7a\x55\x3f\x1c\x3f\x9d\x84\xab\xe5\xfc\x29\x66\xb6\x0f\x8e\x6b\xf5\x17\x95\xda\xb3\xca\xf1\xb3\x83\x27\x4f\xff\xe3\xb0\xb3\x9c\xf8\x0b\x28\x6d\xd9\x5f\x57\xee\xec\xc0\x75\xbe\xee\x9a\x6e\xb5\x1d\xac\x9c\xc3\x3a\x71\xab\x8b\x30\x1c\x2d\xfa\x53\x27\xfa\x75\x77\xf7\x75\x07\xe9\xcb\x45\x7f\x34\x77\xf8\x5f\x9e\x36\x0e\xdb\x01\x4d\x64\x3f\x78\xaa\xdf\x73\x67\x8b\xb9\x43\x7f\x77\x67\xee\xb4\x37\x77\xae\xae\xe1\xf7\x28\xec\xf2\xd4\x76\x38\xe6\x3f\xfa\xf3\xa9\xbb\xf0\x7b\x4e\xfb\x59\xf4\xdb\x2a\xcd\x82\x49\x3b\x98\xfd\x3e\x5f\x40\x3d\x25\x22\x1e\xe1\xdf\x92\x4d\x5e\xf2\xde\x57\xa7\xb3\x70\x11\x2e\xb6\xd3\xa0\xea\xf5\x27\xed\xbb\x3b\xcb\xf0\xc6\x89\xc6\xeb\xda\x5f\xfb\x1d\xab\x24\x9e\x4b\x87\x0e\x66\x0a\x3b\x07\x8b\x5e\x7f\x6e\x2f\x7a\xb3\x70\x7d\x30\x09\xd6\x07\x3f\x42\xea\xe5\x6c\x16\xce\xac\x92\xa1\xce\x83\xca\xc1\xba\xe7\x2e\x0e\xfa\xf3\x83\xc5\x6c\xdb\x9f\x74\x0f\x16\xe1\x81\x17\x1c\x78\xe1\x12\x5e\x42\xea\x24\x5c\x1c\xf8\xee\x68\xe4\x7a\xa3\xa0\x64\x37\x71\x9e\x3d\xe7\x74\x36\x73\xb7\x52\x4d\xf3\x51\xdf\x0f\xaa\x98\xcd\x72\x67\xdd\xe5\x38\x98\x2c\xe6\xa4\x6e\x13\xdf\xc1\x0e\x11\xa9\xe7\x36\x4c\x56\x20\x3f\xce\x82\xc5\x72\x36\x39\xf0\xab\xee\x74\x3a\xda\x5a\x98\xff\xa0\x3f\x81\x09\x9b\xf8\x38\xa0\xf6\xd1\x91\xdb\xc2\xc4\x86\x4b\x70\x3d\x4c\x7c\x77\x61\x15\x69\xde\xb6\xed\x5d\x93\x57\xde\x8e\xf3\xd2\x0e\xc5\x8f\x24\x90\x5e\xe1\x8c\xb5\x49\xb0\xb3\x09\x5d\x44\x47\x47\x56\xfc\x59\xab\xd0\xd9\xc4\xd7\x94\x06\xc1\x56\x44\x95\xbe\xf8\xb1\x3f\x0e\x9c\x32\xd6\x75\xe1\x2e\x78\x65\x9a\x4a\x70\x0d\x68\xaa\x80\x64\xb5\x02\xbe\xda\x60\x09\x2f\xdc\x11\x7d\xa5\xe6\xac\x24\xdb\x66\x05\xac\x12\x2d\x50\x4a\x15\xb7\x77\xb6\xcd\x12\xe5\xaf\x00\xab\x89\x8f\x79\x0d\x8b\x22\x5c\xe3\x4c\xcf\xc3\x51\x70\x74\xc4\x7f\x60\x01\xe5\x81\x7d\x2f\x3b\x95\x62\xf1\x14\x12\x7f\x89\x26\x6c\xa8\xe0\xc0\xdc\x44\xbc\x8e\x1d\xb1\x8e\x95\x56\x0d\x4b\x97\x6d\x7a\xcf\x31\xbc\x66\xeb\x41\xaa\x88\xf0\xdf\x76\xd3\x33\x76\x75\xc7\x57\x4c\x94\x72\x15\xfd\xaa\x8e\x82\x49\x77\xd1\xab\xd4\xaf\xe9\x76\x0f\xa6\xb3\x00\xd6\x62\x20\xef\x4a\xe2\xd9\x5f\x53\x13\xb7\x76\x67\x13\xf5\xc9\x2a\xd1\xa3\x0f\x7f\xc2\x86\x6b\x1c\xfc\x9f\x52\xd9\x2d\x97\xfe\xcf\x41\xcf\x9d\xc3\xd6\x0b\x60\xbd\x46\x95\x57\x0f\x4a\xc4\xbb\xbb\x2b\x95\x6c\x6c\x94\x2d\x9d\xb8\x41\x68\xce\x73\xe0\x75\x3d\x7a\x57\x75\xe1\xcd\x2a\x70\x0e\x6b\xf2\xb2\x93\xd7\xad\xc5\xf6\xb0\x2f\x7f\xfd\x0e\x1c\x10\x98\x08\x8b\x9f\x74\x9c\x5a\xd3\x3b\xe9\xc0\xe2\xc7\x95\xc6\x6b\xbd\x59\x06\xcb\xe0\xaa\x73\x6d\x37\x3b\xe5\xb2\xdd\x76\x82\x6a\x37\x98\x04\x33\xe8\xa1\x65\x13\xfe\xc9\xd8\x06\xf4\x5c\x7f\x18\x7d\x45\xf1\x65\x8e\x8e\xe2\x97\x56\xdb\x8e\x0e\xd3\xea\x74\x39\xef\x41\x42\x53\x6d\xa8\x3a\x9f\xe2\x86\xb6\x6a\xa4\x63\x93\xc4\x2b\xf6\x11\x5a\xf3\x80\xae\xf5\x70\xb9\xb0\x7c\xbb\x61\xa5\xc7\x0a\xff\x5a\x76\x7a\x5a\xea\x70\x28\x28\x65\x77\x9a\x3c\x89\x36\xd9\x91\xef\xb6\xdb\xaf\xb0\xd3\xca\xec\xf3\x71\xc6\xab\xa5\x76\xad\x19\xbc\xe5\x39\x5f\xc5\x7c\x35\xe4\xbc\x44\x4c\x8a\x94\x0a\xcb\x2b\x35\x68\x3a\x4d\x5e\x6a\x38\x77\x77\x22\xc1\x82\x71\x94\xe0\xc0\x0e\x3a\xfd\x49\xd0\x8e\xaf\x03\xb8\xcc\x96\x74\x87\x69\xde\x05\x9b\x69\x08\x97\x1b\x74\x8f\xe5\xaa\xf2\x04\xc7\xb5\xb5\x75\xb1\x5d\x0b\xd9\xf9\xf6\x9d\xac\x30\x27\xbd\x01\xab\xeb\x59\x7f\x11\x28\xd7\x13\xdf\x47\xab\xb0\xdf\x3e\xa8\x1d\x3a\x0e\x2f\xd4\x71\xe7\x0b\x28\xd0\xe2\x7f\x59\x41\xc8\xdf\x70\x2d\x9b\x5f\xa7\x30\x24\xb7\x7d\x9f\xba\xb0\x9c\x54\x55\x7f\xb2\x80\x19\xa7\x13\xf5\x6a\xd9\x87\x4b\x1d\x86\x23\x2f\xfa\xd2\x12\x0e\xa5\xf9\x62\xd6\xf7\x17\xa5\xa6\x48\x3f\xf0\xac\x91\xfd\x75\x54\x0d\x5c\xb8\xbd\xa3\xcc\x90\x14\x65\x18\x47\xc4\x06\x5c\xf4\xe3\x10\x2a\xa1\x77\x96\x0d\x97\x9c\x8b\x9f\x14\x76\x0d\x7c\x43\xd2\xc7\x2d\x38\x80\xc5\xd4\x84\x73\x6f\x08\xb3\xd6\xc6\xfc\xc1\x0a\xbe\x71\x35\xec\x74\x60\x0d\xfe\x0a\x59\x13\x49\xbf\x91\xd2\x7c\xd5\x85\x29\x8f\x5f\xc0\x96\xed\x06\xf8\xa7\xfb\xd1\x1d\xc3\x97\xb4\xfa\xb8\x88\x49\xf2\xbd\x3f\x72\xe7\x73\xcc\x51\xf5\xdc\x79\xf0\xb3\x3b\xaa\x8e\x19\x01\x32\x59\x55\x46\x41\x97\x12\x1c\x50\x18\x3a\x54\x83\xe3\xbf\x8f\xfd\xa9\x38\x1d\xd8\x4d\x9d\x05\x09\xf0\xd7\x22\x9c\xda\xa4\x76\x02\xd4\x47\xed\x04\x16\x56\xfb\x24\xbc\xbb\x0b\x4e\x80\x62\x8a\x5a\x9a\x05\x23\x3c\x91\x7e\xa4\x0d\x1e\x1d\xb1\xaf\xe1\x48\x5d\x55\x32\x54\xc3\x35\x2c\xf8\x2f\x3f\xbf\xba\x1c\x05\xb8\xb0\xef\xee\x06\xf4\x96\x81\xa9\x78\xa0\x1a\x61\x0c\x79\x25\xa2\x59\x31\x0d\x43\x9a\x37\x36\x5f\x3e\x2c\xeb\xcf\x21\x5d\x3a\x97\x98\x7d\x7e\x8e\x19\x80\x96\x60\x6b\x50\x10\x14\xbd\x6a\xc0\x3a\xf1\x01\x17\x00\x9e\x24\x5f\xe9\x52\xf8\xb5\xd1\x26\xf4\xc7\x6f\x0d\xbc\xf9\x3d\xbe\x3d\xe9\xfa\x7b\x0f\xeb\xcf\x9a\x2c\x47\x23\x9b\xd0\x7e\xfb\xd5\x5e\xbf\xdd\x0e\x26\x16\x7c\x92\x5d\xfc\x50\x67\xe7\xf3\xc8\xe9\xc2\x0a\x06\xea\x78\x81\xe7\xa3\xda\xde\x38\x5c\x05\x9a\x06\xc9\x14\x3b\xfe\x2b\x7c\xfc\x65\xd0\x18\x41\xf3\xa5\xb6\x37\xf2\xe1\x24\x1d\x96\xe4\x29\xc2\xed\x7c\x74\x14\xd5\x78\xc1\xf3\x14\xaa\x30\xb7\xb6\xf3\x82\x55\xed\x70\x8c\x13\xac\x66\x0e\x25\xfd\x05\xdf\x43\xa1\x03\x0b\xf0\x1f\xdf\xd5\xc8\xd4\x81\x6f\xf6\xbc\x56\x23\x37\xce\x84\x67\x39\x85\xdb\xbc\xd4\x85\xef\x53\x59\xc3\x39\x8c\x7f\xa5\x1d\x8e\x93\xfb\xde\xdd\x06\xb3\x92\x5d\x6d\xbb\x0b\xd7\xba\x1a\x5d\xdb\x64\xe6\xdc\x00\x99\xb4\xc0\xf3\x11\x6f\x7c\xbc\x13\x4a\x5d\xc8\xe1\x2e\x16\x40\x11\xd3\x6f\x0f\x44\xf9\x01\xaf\xf2\xc0\x58\x65\x73\x96\x51\x5c\x2d\x15\x7d\x6a\x20\xf0\x07\xb8\xe3\x28\xcd\xb7\x08\x97\x7e\x0f\x3f\x5b\x89\x8c\x6d\x9a\x32\x16\x1f\x12\x52\x08\xac\x80\x38\x11\x56\x93\x9c\x16\x7d\x43\x51\x32\x7a\x82\xe5\xd5\x15\xad\x39\xb8\xb0\xd2\xeb\x2d\x3e\xef\x7c\xd8\x7d\x78\x13\xc5\x45\x8e\x8e\xa4\x07\x3e\xa6\x4d\xbd\x64\xc3\xd7\xf5\xf1\x66\x89\x8f\xe7\x04\x9b\xe5\xc1\xac\xf2\xaf\x56\xaa\x1a\x47\x2f\x7f\xb5\x11\x4b\xa1\x1f\x06\x3b\x7a\xe8\xf8\xad\x2b\xce\x7f\x55\x3f\xba\x1f\x17\xe1\xbf\x82\x59\x08\x7d\xbc\x6e\xc0\x5d\xfb\x05\xce\xe4\x49\x17\xa9\xb4\xe4\xb7\xe3\xf5\xa4\xe6\xbf\x2b\xce\xf7\xe8\x25\x0c\x84\x68\xae\x10\x77\x17\x65\x38\xce\xc9\xb0\x85\x1a\xa6\xd1\x03\xe4\xae\xe1\x84\x07\x9b\x3e\x50\x50\x30\xcd\x74\x0f\x22\x2d\xbd\xb3\xf9\x6a\xf6\x23\xe6\x51\xb0\x9b\x40\x6a\xf9\xd5\xf6\x12\xae\x7d\x6c\x04\xbe\x27\xec\xf1\xe0\x02\xce\x9f\x2d\x3e\xfc\xde\x9f\xbf\x91\x56\x1b\xae\x34\x3c\x0a\x92\x07\x41\x9b\x7d\x5a\xfe\x85\x3b\xce\x57\x3c\xb3\x1b\x35\x02\x07\x76\xa3\xb6\x23\x5d\xba\x87\x80\x8e\x00\xd2\x08\x26\xc0\x85\xe9\x22\x09\x1e\x34\x79\x74\xc0\x9c\x25\x4e\xaf\x38\xe5\x9c\x2d\xae\x52\xe2\x70\x80\xc5\xcc\x2f\x34\xda\x8b\xa1\x53\x3a\xa5\xbd\xfe\xf5\x93\x37\x80\x8f\x5c\xea\x4f\x38\x79\x20\x0e\x48\x2f\xe6\x87\x7b\x30\x6d\x82\x13\xf7\xe1\xf7\x18\x4e\xde\xfe\x44\x77\xc1\x27\x49\xed\x96\x45\xef\x25\x47\x47\x8d\x20\x4f\x3f\x6d\xd1\x7f\x1b\x34\x17\x61\xb7\x99\x21\x33\xbe\x6a\xb1\x3f\x0d\x7e\xed\x79\x76\xa3\xb3\x83\xfe\xac\xfb\xed\x45\xaf\x58\x77\xe0\x8a\xc7\x62\x6d\x2c\xd6\x0b\xfa\xdd\xde\xa2\x58\xb9\x80\x95\x0b\xb0\xdc\xe6\x0b\x7e\xac\x62\xe5\xba\xac\x5c\x17\xcb\xcd\x7b\xe1\x5a\xb3\xaf\xb3\x8a\xf7\x59\xf1\x3e\x2d\xbe\xea\x9e\x87\x93\x85\x0b\x85\x67\xc5\x4a\x0f\x58\xe9\x01\x94\x4e\x90\x53\x67\xfd\x39\x7c\x74\x85\xef\x21\x7e\x82\xa0\x82\xab\xfe\xd0\x72\x65\x4e\x9e\x32\xed\xe2\x22\x3d\xc0\x75\xc4\xd6\x77\xb3\xed\x68\x04\x19\x7e\x4b\xd7\xc9\xea\x66\xd7\xf0\x69\xb1\x20\xc1\x76\x09\x4e\x1f\x72\x57\xa0\xbf\x1d\xdc\x02\x1e\xed\x27\xf0\x36\x81\xcd\x3e\x39\xdd\x2c\x63\x77\x63\x5d\x01\x6b\x41\xcb\x01\x37\x47\xf7\x8b\xe5\x5e\x75\x81\xbb\x41\xa1\x4a\xbc\x7e\x22\x52\xbe\x07\x27\x67\xcf\xe9\x62\x4e\xc7\xf1\xc4\x10\xba\xb4\x23\x7d\x5a\x67\x7f\x62\x5d\x75\xcb\xc8\x39\x44\x5c\x22\x9c\xff\xb4\xde\x3e\xd4\xcb\x4a\xe8\xaa\xa6\x77\x84\xd3\xb7\xc9\x07\x77\xd1\xab\xba\xde\xdc\x1a\x54\x3c\xfb\xc4\x89\x1e\x7b\xf0\xd8\xea\xe2\x47\x74\xab\xb8\xbf\x83\xf9\x82\xde\xa2\x6f\xa0\xae\x4d\xf6\x37\x60\xc7\x47\xfd\x69\x8d\x9f\x1e\xcd\x68\x1a\x81\xe1\xbb\x54\x28\x5c\x17\x58\x2d\x7a\xb8\x77\xe3\x96\xbd\x8a\x6b\x37\xdb\x27\x0e\xf2\xfd\x27\x5d\x4a\xc2\x76\x51\x76\x03\x07\x1e\x81\xa5\x6c\x22\xa5\x93\xa7\xa0\xc2\x68\xc6\x64\x36\xa3\x06\x25\x5a\x9a\x5f\x29\x43\xbb\x29\x88\x60\x18\x30\xd4\x04\xc7\x6d\x4c\xfd\xba\x90\x28\xee\x1e\xcc\x65\x0b\x89\x94\xc8\x0b\x9b\x9c\x1d\xd9\xab\x7e\xb0\x3e\x0b\x37\x25\xbb\x41\x87\x0e\x8d\x31\x6e\x99\x32\x97\x50\xfa\xa0\x24\x18\xe1\xa9\x3b\x9b\xc3\x74\x2e\x80\x8b\x9c\x2f\xb6\xa3\xc0\x2a\xd1\x23\x01\xce\xbc\x7a\xcd\x7e\xea\x5d\x1d\x5f\x37\xa7\xec\x6c\x61\x7f\x9e\xf8\x64\x4a\xcf\x25\xfa\xef\x13\x7f\xb7\xdb\x45\xe3\xf2\xd9\xb8\x0e\x27\x7c\x60\x4d\xd7\x19\xb6\x86\x8d\x76\xe8\xd3\xdd\x55\xf5\xc2\xf6\x96\xc8\x74\x8f\x1b\xdf\x6e\xed\xfe\x4a\x73\xb9\xf1\x59\x3c\x28\x95\xad\x41\x6b\xd0\x28\x6d\xb6\x15\x9e\x04\x83\xe7\xb9\xfb\xed\x12\x59\xd9\x64\x22\xfa\x0f\xdd\xc2\xfb\x4a\x3c\x62\xa7\xe9\xfd\x15\x65\x08\xa7\xae\xdf\x5f\x6c\x45\x62\x7c\x53\x43\x1f\xc8\xc1\x02\x65\x7d\xf0\xa7\x0d\xff\x23\x41\x45\x3b\x13\xb4\xad\x35\x12\x25\x90\x5f\x7d\x0e\x81\x42\x63\x73\x2f\xcd\x43\x9b\xcd\xc3\xec\xe8\xe8\x0c\x76\x1f\x4c\x3c\x17\x3b\x74\xf8\x1c\xc2\x56\x64\x84\x80\xd3\x6f\xf5\x1b\x74\x22\xe3\xd5\xa9\xa5\x3c\x7c\x2b\x12\x3e\x5a\x28\xc2\x81\xc5\x10\xc2\xa1\x04\xc7\xd9\xeb\x1f\x3f\xbc\x87\x5d\x49\x80\xb5\x58\xb6\x62\x16\x32\x49\xb6\xc0\x97\xa8\x02\xc9\xcf\xb9\x87\xf9\xd9\xf6\x47\xb6\xaa\xf8\x42\x42\xde\xcd\x4b\xdc\xae\xb8\x6a\x5c\x56\x1a\x6f\x77\x28\x7d\x86\x62\x51\xa0\x4e\xe0\x9e\x84\x4a\x7e\xc0\x2f\x88\x9c\xdf\xd0\xf8\x2e\x70\x7c\x3a\x38\xa8\x09\x18\x2b\x56\x57\xdf\x9c\xbf\x19\xc4\xfb\x2f\xb0\x4f\xfa\xfc\x9a\x69\xd5\xe0\xf2\xf0\xe8\xa2\x8b\x5f\x57\xda\x8c\x6b\xf3\xd8\xe2\x8c\x5e\xf8\xf4\x19\xde\xe2\x1f\x7b\xd7\x29\x43\x73\x8c\xbf\x7c\x0f\x09\x65\x96\xbd\x72\xfc\x64\x08\x74\xc3\x2c\x1c\x8d\xde\xd3\xef\x11\xe7\xfa\x31\x9c\x96\x69\x5b\x52\x1e\x48\x23\x70\x0a\xf6\x4e\x6a\x30\xef\xfc\x8c\xe8\x8c\x42\x38\x5b\xbb\x4f\x7b\xf6\x93\x9e\x4d\xce\xad\xab\x0e\x81\x33\x74\x67\x37\xe2\x9f\xa4\xbd\xdb\xb1\xd3\x9a\x53\x2f\xa5\x75\x09\x3e\xfd\xf1\x0b\x38\x49\x6b\x40\x52\xd0\xd4\x88\xa8\xa0\x7f\x46\x48\x67\x8c\x1d\xa4\xfd\x27\x2c\x25\x64\x7f\xa6\xfc\xe3\xd0\x07\xfc\x3e\xf8\x63\x07\x0c\x42\x82\x22\x9a\x61\x05\x73\xa7\x0e\x15\x2c\xf0\xe7\x12\x25\x3a\x2b\x27\xde\x4a\x95\x52\x59\xea\x7f\x3d\x78\xf1\x84\x3e\xce\x5c\x20\x60\x80\xbb\xb7\xc9\x1a\x33\x57\xa6\x8c\x0d\xac\x50\x3e\x67\x5e\x99\x84\x40\x5e\x92\x8d\xf6\xee\xdc\x91\xad\x21\xfd\xd6\x90\x7e\x9a\x94\xe5\xe3\x60\xe0\x72\x71\xf9\xe5\x52\x2a\xf1\xc5\x1e\x9f\x14\xd1\x19\xe2\xc3\xea\x5e\x04\x7c\x1d\xc3\x66\x67\x92\x79\x7a\x79\x2d\xc4\x62\xf5\xe4\x4d\xbd\xe8\xc1\x76\x88\x18\x23\xf7\xda\x4e\x11\xd6\x3c\x47\xd3\x8f\x53\x70\xe3\x47\x0f\xed\xf8\x60\x0a\x47\x40\xd7\x4d\x4a\xe4\x59\xfc\x1a\x4e\xfe\x70\xd2\x95\x0e\x8a\xd2\xa6\xb2\xc2\x3b\xaa\x44\xb9\x98\xde\x62\x3c\xb2\xb6\x70\xba\xd2\x34\x9b\x51\xcb\xed\x44\x17\xf1\x60\xcc\xee\x22\xcb\x81\x42\x13\xa5\x60\xc4\xf1\x69\xe9\x85\x79\x30\xeb\x07\xf3\x9d\xa6\x3a\xf9\x60\x2b\xf5\x60\x93\x8d\x70\xa3\xe9\x99\x82\x6a\xf4\x7e\x07\x3b\x54\x9d\x96\xa8\x0e\x26\x66\xa9\xc0\x04\x85\x33\xc6\x91\xb0\xe1\xab\xc7\x3b\x3f\x80\x51\xe8\xd7\x9d\xe1\x01\xc0\x0a\x18\xda\xa5\xef\xf0\xba\x35\xb4\x39\x0c\xb6\xd2\x1c\x6b\x29\xa2\x5b\x98\x78\xc8\x06\x29\x19\xf5\x24\xbf\x96\xb6\xa6\x8d\xf8\x84\xa2\x2e\xf9\x33\x60\x75\xaa\xd0\xcc\xe5\x5a\x85\x68\xee\x04\xf7\x98\x62\x58\xf0\xc8\x76\x91\x82\xaa\x11\x20\x9b\x70\x23\x76\x03\xeb\xaa\xf4\x97\x4e\xa7\x83\xfa\x0b\x3a\x09\xd7\xa8\x4c\xaa\x7e\xd7\x4c\x48\x0c\xa2\xf9\x0c\x67\xc0\xf7\x56\xbc\x70\xb1\x08\xc7\x62\x4a\x3d\xe0\x28\x93\x39\xf0\x58\x93\x5f\xef\x76\xe2\x62\xf2\x04\xb5\x01\x0c\x11\xbb\x54\x9a\x49\xc1\x23\x12\x4e\x21\xbc\x84\x33\x10\x4e\xd5\xd2\xf7\xf0\x49\x0f\xe8\x1c\x3a\xff\xc5\x5e\xfc\xd7\x49\xa9\x2c\x32\x95\x4b\xdf\x3f\x85\x0c\x27\xb0\x66\x81\xcf\x38\x4b\x6e\x78\xf7\xe8\x48\x2c\x4f\x3e\x51\xec\x21\x4d\x32\xb3\x5e\x1c\x1e\x8a\x1c\x9c\xc4\x6c\x1a\x0a\x31\x96\xcc\x4e\x6c\x01\xe7\x4a\xfc\xba\x86\xcf\xcc\xd5\x1c\x87\xf5\x1d\x39\x57\x04\xda\x21\xf6\xca\x74\x83\xfa\xa4\x0d\xdb\x2f\x22\x97\x42\x7e\x5f\xbc\xa6\x57\x14\x12\x4b\x70\xaa\xa7\xde\xfe\x82\xb4\x14\x7d\xd9\x17\x2a\xd7\x2a\xe3\x15\xbf\xf4\x6f\x71\xba\x29\xb1\x05\x97\x80\xf6\x25\xbb\xfe\xe0\x6e\xe0\x32\xdf\xa9\xdb\x0d\x7e\xfb\x44\x2b\x86\x0b\x41\x4a\xfc\x95\x25\x36\x07\x22\x91\x92\x06\xb4\xf1\x13\x47\x21\xbf\xf8\x8d\x46\x5f\x01\x41\x35\xa8\xd4\xbf\x83\xae\xc9\xa5\xd8\x80\xf4\xc5\xd8\x3b\xa0\x59\xfa\x50\x8e\xae\x9c\x19\x59\xc0\x1d\x23\x7f\x5d\xbe\xcc\x9b\xed\xf0\xa0\x3f\xff\xe8\x7e\x84\xcf\x14\xdd\xac\xf6\xdd\x9d\xe5\x95\x1d\x39\x85\xb8\xd1\xe3\x67\xa0\xef\x27\x8b\xe6\xba\xd7\x1f\xa1\x54\x3c\xe2\xa6\x77\x70\x81\xa5\x5b\xf0\xd3\x2d\xe0\x5d\x9e\x68\x82\x26\x15\x69\xa3\x39\x5f\xf7\x51\x60\x00\x9c\x80\xef\xce\x83\x52\x50\x6a\xc0\x45\x02\x74\x51\xa5\x57\xe9\x02\x91\xe3\x5d\xd5\xaf\x2b\xc1\xd3\x63\xb8\x61\x57\x56\x68\xc3\xed\xba\xc4\x3f\xd3\x13\xdc\x0f\x2c\x67\xb9\x7b\x32\x6d\xb1\x1f\x8d\x69\x65\x56\xf6\x81\x2a\x3b\x59\x50\xd6\x61\x58\x59\x94\xdb\x50\xa8\x1c\x9c\x0c\xcb\x03\x96\x54\x1e\x60\x62\x05\xc9\x39\x58\x6f\xc3\x26\x6d\x76\x2d\x9a\x2d\x67\x34\x3a\x2b\xf7\x4e\xfa\x51\xb3\xd8\x41\xa9\xa5\xf2\x8b\x22\xed\x4c\xe2\xe1\x3d\x3d\xae\xbc\xe0\x6d\x41\xa3\xfa\xe1\x4d\xb1\xd6\xb8\x59\x1f\x4b\x15\x6b\x68\x2e\x37\x14\x0d\xa9\xb2\x6f\x43\xd1\xf0\xd4\x51\x20\x59\xc2\xeb\x17\x75\x27\x6a\xde\xf9\x15\xe7\x86\x51\xdd\x6d\xfc\x85\xe4\x28\x2e\xa0\xb5\x13\x1a\xc9\x56\xdd\x86\xbb\xbb\x8b\x36\x84\xf8\xc1\x89\x10\x89\x48\xd4\x6d\xca\xdc\x82\x94\x02\xdd\x38\x70\x29\xbb\x93\x39\x8a\xe7\x2d\xe0\x76\xd6\xb4\xcb\xe5\xa9\x5d\x2e\x4d\x37\xe4\x80\xa6\x40\xd7\xcb\x43\x9a\x60\x97\x80\xe6\x52\x0a\xf8\x22\x5f\x9b\xbf\xbf\xc5\x9b\x86\xd2\x70\xd3\x10\xf3\x30\xb9\xa2\xb5\x21\x5b\x1b\xe8\xaf\x14\x2f\x64\x7f\x5f\xad\x37\x47\xad\x49\x95\x56\xda\x67\xe7\x5e\xb5\x4d\xc5\x75\x63\x5b\x91\xe3\xa5\xb9\xa8\xc6\x84\xb5\x34\x5b\x4e\x51\x3e\xa8\x56\x21\x4a\x9e\x02\x19\x2f\xae\xac\x1f\xd7\x41\x80\x82\x61\xcc\x08\xdc\xf8\x58\xc1\x02\x88\xab\x7b\x47\x4a\xfd\x31\x2a\xe5\xdc\xc9\x22\xa6\x1d\x2a\xeb\xc0\x1b\xf6\x17\x15\xa9\xec\x36\xdd\xa7\x3a\xca\x25\x63\x00\x84\x4e\xad\xe1\xac\x49\xbb\x1a\x4e\xb1\xd1\x08\x0e\x23\x9e\x51\x7b\x49\xd5\xe8\xa8\xaf\x6d\x57\x7f\x17\xd9\xd8\xed\xc2\x69\x50\xeb\xeb\x8e\x7c\x15\xc3\x6b\x7c\x85\xc5\xd4\x48\x8f\x62\xbe\x23\x73\xf9\x05\x1c\x5f\xd0\xda\x6e\x47\xba\x33\x77\x05\x5d\x35\x95\xeb\xa4\xcb\x75\x68\xb9\x76\x9f\xdd\x75\xa6\x82\xdd\x74\xc1\x2e\x2d\x38\x9f\xb8\xd3\x8b\x9c\xc2\xbd\x74\xe1\x1e\x2d\xcc\x68\xa5\xb9\xa9\xdc\x20\x5d\x6e\xc0\xca\x21\x84\x28\x12\xbd\x99\x8a\x0f\xd3\xc5\x87\xb4\x78\xa7\xbf\x09\xda\xb0\xb1\x4c\x05\xfb\xe9\x82\x7d\x5a\x30\x98\x20\x5f\xd0\x36\x95\x9b\xa5\xcb\xcd\x68\xb9\x48\x46\x6d\x2a\x39\x4e\x97\x1c\xb3\x91\xc2\x20\x61\x6d\xbd\x62\x9a\xee\xd0\x38\xd6\xd3\x74\x05\xa7\xb4\x02\x4a\x5c\xbe\x84\x05\x0d\xac\x86\x79\xaa\x36\xe9\xe2\x1b\xd6\x73\x20\x59\x82\x59\x6e\xf9\x6d\xba\xfc\x96\x96\x07\x2a\x39\xb7\xf0\x6d\xba\xf0\xad\xd4\xf8\x65\xf6\xa4\x2f\xd2\xa5\x17\xb4\xb4\x46\x17\x60\xaa\x63\x99\xae\x03\x38\xdc\x43\xac\x65\x1a\xb2\x33\xc7\x54\x74\x9a\x2e\xca\x05\x5b\x12\x85\x2b\x4b\xca\xb9\xac\x86\x49\xbb\xa4\x3c\xb1\xe8\x9d\xbe\x82\xa6\x19\x69\x61\x6a\xf8\x26\xdd\xf0\x4d\x66\xc3\xfc\xba\xba\x31\x37\x7c\xc3\x1b\x66\xda\x12\x53\xc3\xa3\x74\xc3\xa3\x43\x07\x48\x6f\x6b\x84\x73\x46\xda\x16\x72\x00\x04\xf9\x47\x53\x15\x41\xba\x0a\xb7\x4a\x65\x03\x14\x1f\x46\xd7\xac\xc3\x53\xaa\x1b\x12\xd1\xdb\xe2\x07\x47\x12\x72\xd2\x5d\xcd\xbe\x8d\x5f\x50\x9e\x24\x7a\x41\x9f\x50\x09\x27\xbf\x45\xde\x17\x3f\x33\x17\x63\xe0\x15\x6a\xea\x74\x98\xe8\xb4\xfd\x15\xca\xf5\x8d\xeb\x72\xa5\xc9\x4e\x51\x28\xec\x4a\xe8\x4f\xfa\x8b\x4f\xec\xfc\xa7\xb7\xc1\x6e\x67\xc5\x2f\x63\x72\xdd\x49\xc3\x31\x29\x6d\xdf\xf8\xee\x79\x8d\x30\x42\xbe\xf1\xfc\xef\xb5\xe8\x52\x4a\x11\xea\x11\x32\x4c\xa2\xc2\x5b\x30\xc7\x4c\x43\x93\xca\x0e\x5d\xe0\x4a\x98\x74\x31\xe2\xda\x8d\xd2\xf9\x97\x2f\xf5\xf3\x70\x3c\x75\x17\x25\x27\x26\xe6\x7d\x9a\xf2\x01\x78\xbd\xa3\x23\x13\x5d\x62\x7e\x23\x73\x35\x71\xdf\x8a\xe4\x8e\xbb\x9b\x93\x3b\x1e\x81\xc2\x80\x48\x7d\xa2\xfc\x48\x76\x47\x92\x59\x34\xad\x4b\x59\xe2\x26\xdd\x5d\xe2\xcb\xfe\x10\xcc\x95\x6f\x1b\xcb\x03\xf8\xac\xbb\xed\x36\xa5\x29\xde\xc3\xcd\x8a\x47\x7f\xcb\x90\x8e\xc8\x47\xac\xaa\x84\x5a\x25\x8e\x51\xbc\xfc\xe1\x87\x4f\x3f\x34\x0e\x5e\xba\xc0\x8b\xb4\x29\xf2\x14\x21\xa9\xf0\x97\xd7\xc1\x4a\xc0\x13\xac\x22\x44\xc2\xd9\xe4\x6b\x04\x99\xf2\xe0\x4a\x0e\xdc\x99\xbc\x6a\xa3\x52\xa8\xe6\x34\x36\x0e\x6b\x3b\x1a\x23\xec\x87\x73\xba\xf3\xe4\xf1\x01\x63\x1d\x21\x4b\xbc\x98\x91\x66\x25\xda\x41\xc7\x5d\x8e\x58\x29\x8b\x0a\xdd\x18\x1a\xb5\x3f\xa7\x7f\xa1\xbc\x90\xc1\x45\x72\x8e\x70\x06\xf4\xb5\x3b\xb2\x84\x68\xc3\x8b\x98\x2e\x55\xce\xc2\xe4\x62\x71\xd3\x2d\xb7\xe1\x35\x55\x59\xd0\xdd\x9d\x0f\x5b\x70\xb7\x8b\x19\x43\x5d\xbf\x34\xf8\xda\xe4\x80\xad\xa8\x77\x88\x33\xec\x86\xb3\xed\x71\x2d\xea\xa0\x6d\xc7\xf5\xfa\xcb\xf9\x22\x1c\xff\xd8\x83\x15\x9a\xd2\x36\x51\xf0\xa1\x56\x70\x05\x77\x29\x10\x04\x08\x24\xc8\x6c\x87\xab\xa8\x7c\x21\xd2\x48\x4e\x0b\x17\x98\x77\x1c\x0f\x65\xfe\x5c\x34\x9a\x46\x8b\xba\x57\x9d\xeb\x16\xfe\x63\xd9\x8d\xf8\xb6\x10\x89\x0d\x0b\x31\xd5\x71\x2b\x36\xb2\x41\x75\xe2\x5f\xb5\xaf\x6d\x69\x29\x4c\x07\xae\x24\xdd\xa5\xe3\x63\xbd\x8b\xd2\xda\xf6\x57\x18\x0d\x15\x90\xb5\x89\x9c\xca\x44\xdc\xb1\x68\xca\xb7\xb9\x2c\xa9\x19\x00\x1f\x84\xec\xf6\x47\x78\x84\x75\x39\x1d\xb9\x7e\x70\x0e\x9c\x77\xdb\x92\x04\xbb\x76\xaa\x1c\x09\x6c\xa5\x5f\xb4\x3b\x48\xcf\x47\xa5\x50\xea\xe6\x29\x80\x10\xe9\x9b\xf7\x60\xd5\xc3\x4c\x53\xdc\xe0\x97\x05\x12\xea\x14\xf5\xdc\x9b\x05\x1d\x42\x7f\x2d\x82\x0d\xa5\x49\xa1\x67\x24\x7a\x05\xf3\x62\xc9\x0f\x02\xe2\x33\x9d\xd1\xbf\x17\x6c\x81\x59\x54\xac\x1f\x75\x9e\x6d\x39\xd6\x91\x69\x38\x9d\x63\x6b\x4a\x5f\xa2\x6a\xe8\x2b\x38\xc4\x2c\x35\x05\x87\x15\x2f\x36\x77\xe4\x9f\x4e\xa7\xb3\x70\xf3\x23\xf4\xf0\x97\x94\x66\x5e\x01\xbd\xc7\x9f\x9f\x31\x3f\x5a\x20\xb1\x4b\xc7\x2a\x24\x26\x69\x55\x5f\x07\x66\xa1\x42\x4f\x06\x5b\x7c\x1f\x18\xc8\xa6\x44\x4a\x4c\xff\x47\x50\xf1\x83\x55\x58\x76\x62\x91\xfa\x4f\xbc\x27\xd5\x17\x62\x27\xd6\xe2\x41\x44\x80\x16\x8d\xec\xbf\x34\x59\x8e\xbd\x60\x26\x41\x13\xee\xee\xb8\x04\xc7\xbe\xbb\x13\x4a\x80\xbb\xbb\xfa\xd3\x1a\xfb\xe1\xc2\x9f\x0a\x3c\x01\xeb\x08\x47\x73\x34\xef\x2a\xdc\x79\x8d\x40\x8b\x1f\x23\x9e\x53\x23\x2a\xba\xc2\x0f\x7b\x2d\xf0\xf3\x57\xd7\x26\xc4\xbe\x1d\x9f\x37\x31\x0f\xcb\xd1\xd2\x78\x46\xc5\xa3\x64\x48\xa3\x5f\x28\xc4\x43\xdd\x35\x54\xf5\x9f\xc4\xf1\x6b\x8a\xc5\x58\x80\x60\xad\x7b\x4f\x6b\x6b\xca\x87\x22\xec\x6a\xbf\xe5\x37\x8e\x5f\xa0\x46\xfb\xea\x9a\x74\x28\x9a\xbf\x49\x17\x2d\x37\xe0\xd0\x9d\x46\x8e\x69\xbc\x35\xdc\x65\x69\x5d\x38\x52\x78\xbf\xff\xce\x7a\x12\xb4\x51\x7d\xa4\xbe\xd3\xc0\xf9\x2f\x53\x68\x7e\xb9\x82\x1a\xe9\x54\xa3\x7c\x08\xf3\x82\xae\x96\x70\xe1\x43\x7d\x24\x00\xba\xa5\x1d\x6c\x3e\xa1\xaa\xf1\xfb\x1a\x42\xa5\x29\xdc\xd7\xc5\x7d\x86\x23\xdb\xb1\x1d\x0a\xf7\x57\xa0\xc2\x4d\xe2\x93\x8e\xca\x85\xb0\x2a\x18\x29\xcf\xbe\xd0\xad\x06\x22\xbe\x8f\xe7\x24\xf1\x1e\x27\xf5\x96\x79\x55\x20\x2a\x0b\x75\x4a\x51\x56\x0f\xe8\xd4\xa9\x7c\xd8\xb6\x5b\x6d\xfa\x59\x92\x13\x67\x1c\x1c\xc1\xf5\xed\xc7\x97\xab\x3a\x5d\x2e\x93\xbb\x68\xee\x31\x36\x23\x6e\x24\x54\x31\x67\x69\x2a\x95\xd2\xed\x24\xb0\x2d\x87\xb0\x99\xf0\x0c\x9a\x6d\x35\x5a\xa3\x43\x91\x6d\x67\x63\xc6\xc3\x7a\x93\xe1\x22\x6a\xba\xad\x21\x8b\x77\xfc\xa4\x06\xc4\xfe\x5a\x2e\x77\x77\x3c\xb5\x94\x34\xf8\xc0\x1e\x55\x2a\x5d\xca\x45\x18\x17\x8b\x64\x15\x03\xbb\x8f\x9e\x95\x7c\x35\xf0\x0c\xf2\xf8\x03\xe3\x98\x94\x09\xde\x21\x12\x38\x28\xb2\xee\x25\x08\x6b\xa2\x2f\x92\x99\xcd\x4e\xa6\x41\x82\xe9\xe5\x06\x6e\x95\xb6\x42\x4f\x71\xfd\xf9\x9e\x2b\xae\xe9\xa7\xbb\xe8\x4b\xb6\x0a\x70\xba\x1c\xf8\xe2\xee\xf5\xe0\x32\x4f\x2a\x4e\x50\xdd\x1c\x32\x7c\x5a\x74\x1d\x60\x3e\xd2\x4d\xa7\x23\x31\xd0\xec\x1c\x1d\x1d\xc2\x2d\xd2\x6d\xa5\xc7\x63\xd1\x82\x94\x64\x68\xe0\x4f\x07\x7f\xee\xe4\xab\x8b\x5e\x66\x09\x93\x1a\xf3\x31\xc8\xae\x3e\xdd\x01\x48\xdf\x70\xe5\xef\x57\xa4\xa1\x64\xae\x4c\xb5\xa4\x62\xa5\x91\xb5\x8b\xf4\xeb\x14\xeb\x42\x57\x88\xde\x1e\xcd\xef\x21\xe1\x05\xb7\x1b\x1c\x26\x25\x76\xbe\xa8\xc7\x19\xa6\x2b\xc7\x9d\x0f\xc7\x06\x22\x94\x79\x66\xa0\x1f\x17\x7a\x04\x19\x82\xe3\xa4\xf3\x6a\x9e\xcc\x28\x69\x12\x3d\xd4\x50\x28\x03\xb3\xe5\x81\xfa\x04\x68\x2a\x17\x3e\x36\x69\x1f\x1d\x79\x16\x5f\xf3\xbc\x5e\x64\x46\x95\xd5\x15\x20\x54\xf8\xab\x6e\x11\x5a\x54\x53\xc9\xb7\x6f\x8a\x39\x6d\x33\xea\xfd\xed\x97\x4f\x1f\xab\x73\x2a\x1a\xee\x77\xe0\x92\x43\xfc\x6b\x22\xcd\x13\x1f\x0a\xce\x02\xb1\xfc\x7c\x5c\x7e\xae\x1d\x13\xeb\x57\xfe\x35\xe2\x6b\xe1\x8f\x83\xc3\xa1\x3f\x5c\xf8\x07\x3e\xca\xa1\x38\x3a\x0e\x81\xf9\xa5\x83\x58\x4e\xdb\x89\xd5\x82\xe0\x26\x1f\x3a\x8c\xe0\x7e\xf6\x35\x6d\xd2\x65\xfb\x82\x2a\x3a\x8f\x8e\xd4\x6f\xc5\x3e\xa4\xe5\xc9\xdb\x4f\x12\xdd\x6a\xef\x41\x0a\xbd\x1f\xbb\x53\x04\x1d\x69\x10\x60\x30\x97\x1a\x02\x0a\x9b\xbd\x72\xaf\x59\xfb\xf0\x03\x9b\x64\x82\x61\xda\x2f\x71\x47\xc9\x14\xdc\x8f\x40\x8f\xce\x7f\xd5\xd2\xd2\x70\x23\xc0\x41\x8a\x93\x18\x34\x83\xef\x23\xba\x3f\x28\x3b\x75\x41\xea\xfb\x57\x01\xb4\x86\xff\x32\x69\xc9\xbc\x25\xfd\xe6\x05\x1a\xb5\x26\xec\x84\x93\x76\xab\xd3\x68\x47\x26\x5b\x8c\xa5\xfc\x21\xb8\x81\x7c\x0b\x60\x27\x19\xa9\x75\x80\x63\xc0\x0e\x71\x06\x92\x67\x3b\x87\x7e\x2e\xa9\x25\xc0\xc1\xd8\xdd\x1c\xb0\xda\x99\xed\x23\x66\x6c\xc3\x17\x74\x3c\x68\xc0\x73\xda\x95\x3a\xf0\x9a\x9e\x53\x3f\xf1\x5a\xec\x97\x84\x1e\x49\x57\x48\x4d\x28\xa1\xbd\x03\x3f\x5c\x4e\x16\x07\xae\x68\xd7\xd3\xcc\xd1\x6f\x89\x39\x4a\xf0\x6a\xf1\x5c\x32\xfa\x5f\x23\x90\x49\xec\x2f\xf7\xca\x83\x55\x57\xfd\x1d\xd7\xcd\x1c\x55\xb9\xec\x17\xa4\xb6\xa4\xdf\x0d\xf9\x3c\x35\xe2\x3f\xdd\x48\xe8\x8f\x95\xfa\x54\x38\x20\x27\xed\x74\xfd\x99\x6b\x0e\x7e\xae\x32\x80\x93\xe3\xd3\x7a\xf2\x79\x16\x4e\x83\xd9\x62\x8b\xc8\xab\xb9\xe5\x45\x15\xe2\x16\x46\x24\x55\x76\x66\x3a\x02\x9a\xb5\x09\xcc\xa5\x20\x67\xdb\x76\xb4\x2d\x03\x76\x2b\xa4\x3b\x86\x33\x08\xcb\x48\x99\xc4\x5e\x30\x8b\xfa\x7d\xf1\x2c\x45\x27\xc1\x68\xdb\xcf\x84\xde\x23\x6a\x4c\x4e\xbd\xbb\xbb\x42\x5c\x42\x75\x39\x99\xf7\xfa\x9d\x05\xae\x86\xf8\xc1\xa5\x6c\xd2\x2c\xa0\xb6\x88\xd2\xd5\x29\x7f\x48\x17\xef\xa9\x9f\x26\x7d\x58\xb2\xda\x1d\x5b\x9d\x87\x68\xb1\x57\xed\xf4\x47\x08\x5f\xd1\xad\x96\x43\xe0\xb1\xbd\x43\x3c\x6a\xd0\x32\x51\xbe\x90\xb6\x63\x2f\x1c\x7d\x70\xa7\x0e\xdf\xf5\x76\xe2\x95\x01\x98\xe9\x91\x88\xeb\xf6\xe3\x03\x88\x60\x32\x02\x68\x13\x49\xfc\x64\xab\xd4\x99\xd1\xd2\x7c\xd5\xe5\xb5\xa3\xe9\xf1\x3c\xa2\xfe\x3a\x76\x4b\x79\x8b\x3a\x32\xc8\x00\xe9\x55\x64\xbe\xac\xae\x6d\xe1\xf2\x4a\xf4\x1c\x97\x01\x64\x81\xb7\x3b\x8e\x3f\x70\xbe\x7b\x1e\x43\xcc\xa9\xd1\xae\x6e\xda\x52\x6b\x99\x0a\x63\x68\x4e\x58\x27\xf0\x61\x3c\xbb\xe1\x53\x54\xb4\x22\xda\xca\x86\x7e\xa7\x6a\x68\xef\xe4\x4d\xad\x2e\x27\xed\xe1\x97\xb1\xb6\xfd\xc4\x46\x08\x72\x32\xc7\x1b\x81\xe0\x67\xfa\x9d\xb7\x1e\xb4\x71\x49\xc2\x67\xf2\x13\xab\x14\x31\xce\x62\x05\x07\xb6\xf8\xd5\x89\x7e\x75\xd1\xc6\x48\xac\x5c\xb8\x78\x7b\xf2\x9a\xd6\x2e\xe3\x1e\xd2\x86\x71\xbb\x8e\x66\x49\x5b\x99\x4d\xb6\xa3\x5f\x5e\xa2\xff\x36\xad\x3a\xde\x7b\xba\xaa\xbb\x52\x61\x75\x3f\x26\xce\xc9\x2f\x3f\xbf\x72\x54\x12\x57\xa0\x9e\xbe\x52\x33\xdc\x0a\xa2\x3f\x1b\x70\x33\xcb\x5b\xc7\x85\x82\xb0\x34\x5e\x27\x31\xfe\x12\x0d\x03\xbc\x79\x24\x4d\xf0\x84\x34\x81\x89\x58\x4b\xb6\x4d\x8d\x97\xd2\x15\x26\x25\x1a\x79\xf5\x71\x20\xb2\x4d\x8d\xa2\xa4\x63\x63\xe5\xf6\xa9\x41\x7e\xb2\x83\xb0\xd8\x90\x76\x4a\xdc\x23\xea\x70\xe8\x8a\x64\xd8\x51\xf8\x97\x21\xa6\x34\x55\x27\xba\x9a\x5d\x33\xcd\x2c\x2a\xe6\xe8\xd3\x19\xc5\xcb\x45\x15\x4f\xc2\x0b\x77\xe1\x6a\xf7\x85\x27\x28\x17\x8b\xc1\xfb\x98\x85\x88\x85\x4b\xbb\xcd\xcb\x59\x36\x47\x0c\x3b\x4e\xa7\x75\x55\xfa\x18\xa2\x6d\xbc\x7b\x70\x2a\x7a\x5b\x2d\x5d\x37\xae\x3a\xb8\xcc\x0d\x73\x04\x6b\x91\x7d\x1c\xa8\xc9\xc7\xa3\xac\x9f\xce\xc9\x46\xd1\x66\xa2\x74\x91\x6f\xe0\x04\x0c\x88\xd0\x7f\x7a\x4c\x86\xf0\x80\x18\x84\xde\xd3\x63\x60\x4f\x64\xbb\xb4\x52\x6c\x14\xc4\xed\xf7\x94\xf7\x68\x27\xc5\x46\x22\xe0\x8a\xb0\xe3\x46\x69\x54\x62\xb0\x59\x68\x30\xe0\xed\x67\x07\x72\x79\xf6\xba\xbd\x85\x77\x95\xea\xdf\x82\x71\x0c\x0d\xc0\xf2\x15\x60\x35\x7a\x88\x6f\x2b\x8d\xfb\xed\x36\x42\x43\xc9\x48\x18\x3d\x95\xc8\x20\x32\x69\x2a\x91\xa1\xcd\x24\x5b\xba\x03\x90\x6d\x07\x8e\xe4\x77\x37\xfd\x79\x11\xd3\xd9\x6e\xac\xf4\x67\xf2\x0a\xfc\x6c\x09\xa6\xd8\x13\x76\x06\x09\x24\x5f\x33\xb1\x69\x71\x82\x30\xe3\xd4\xe9\x1a\x0d\x00\xb1\x5f\x11\x68\xd4\x83\xab\xf8\xc6\x99\x16\x30\xf8\x13\x13\x2a\x8c\xfe\x58\x35\x64\xe1\x58\x37\x72\x29\x32\x8d\x4c\x0d\xa8\xa1\x01\x07\xac\x4f\x5a\x7e\x95\x12\x94\xd6\xc4\x6e\x30\xac\xbd\x03\x1f\x3b\x9c\x21\x7c\xc6\x82\xad\x5a\x62\x7b\x4a\x49\x05\xfa\x5d\x94\x8a\x70\xda\x6d\x21\x05\x47\xcc\x4e\xfc\x50\xbb\xb6\x9f\xd6\x6b\x35\xe8\x4f\x52\xae\x67\xcd\x49\x89\x0f\x99\xf9\x36\x40\x0b\x47\x54\x09\x30\x09\x3b\x5f\x79\x4b\x87\xb5\xc4\x74\xd9\x16\xeb\xb7\xe3\x2c\x81\xc1\x58\x3a\x33\xe5\x15\x2b\xb0\x72\x16\x0a\x94\x13\x96\x84\x98\x5c\xd8\x16\x28\xa9\xe2\x33\xdc\x63\x12\xca\x6b\x28\x96\x34\x84\x63\x80\x22\xb2\x21\x5b\x81\x22\x93\xc6\xce\xe0\x64\x38\x51\x8d\x55\xd1\x25\x2f\x37\x4f\xb6\x4e\x34\x3d\xfc\x42\xfe\xfe\xb8\x55\x6b\x1c\xa3\x21\x6a\xe2\x45\x4b\x9e\xd5\x46\xfc\x90\xcc\x07\xc4\x52\x39\xe3\x0b\x90\x15\xef\x91\x7e\x47\xc5\x7b\xa8\x66\xc7\x7b\x6b\xfb\xf4\x98\xd9\x56\x6f\x9c\x69\x6a\xcd\xe2\x78\x3e\xb8\x9b\x0f\xfd\x89\x98\xcf\xb6\xc0\xbd\xc2\x7d\xb7\x29\xb4\x6c\xd5\x4a\xd4\x19\xc4\x2a\xd4\x6f\x02\x29\x7c\x0c\x1a\x90\x51\x74\xf1\x28\x18\xaa\xb4\x4d\x66\x1b\xb9\xdf\x32\x8e\xb3\xb4\x8b\xf4\x14\xea\x47\x63\x07\x51\xad\xfa\x82\x9e\x44\xd1\xcc\x54\xd8\x32\xfc\xec\xb6\x11\x5d\x66\x45\xc6\x2a\x86\x19\x4d\x9d\x44\x4c\x04\xb2\x8c\x21\x8a\x56\xa9\x54\xf6\x6c\x61\xd8\x0e\x5d\x2c\xd9\xad\x52\xa9\xe1\xed\x70\xa4\x9a\xad\x32\xee\x4f\x2a\xc8\xdb\xe1\xc2\xb3\xb3\xa6\x22\x26\xa6\xf3\x26\x23\x5a\x22\xfe\x75\x34\x29\x0a\x1c\x8f\x6f\xfd\xc6\xda\x09\xcb\xcf\x18\x3e\xf4\xd6\x79\x56\x23\xa7\x4e\x8d\x9c\xa9\xfb\xac\x5b\x4a\xce\x27\x39\x77\x4a\xd4\x72\x6e\xf0\x9f\xcf\xbe\xab\xd9\x5f\xcf\x52\xf2\x44\x26\xb9\x10\x82\x18\x2d\x72\x0f\x4d\xa1\xe8\x05\xd6\x3c\x75\x84\xce\x97\x78\x27\xb7\xb0\x2c\x6f\x1d\x0a\xdc\x86\x56\x66\xe1\x82\x8d\x71\x50\x2e\x1d\xd4\x48\xa9\x6c\x9d\x3e\x3d\x2e\x27\x3f\x58\xb9\x64\x33\x33\x84\x8b\xd8\xb8\x84\xfe\x98\xc3\xa2\x1d\x30\xab\x89\xcf\x6f\x9e\xd6\xff\x5e\x83\x49\x58\x3b\xd6\x45\xeb\xe2\xc9\x6d\xe3\xd6\x2e\xc3\x80\xcf\xd2\x13\x7e\xae\xbf\xa6\xe8\x60\x4f\x6a\xad\x12\x73\xab\xd3\xa0\x82\x52\x20\xf8\xff\xb7\x9d\x14\xeb\xfb\x9f\x14\x57\xf1\x51\x41\x61\x9e\xf1\x53\xfc\x33\xee\xed\xf5\x7f\xf3\xe3\xa4\x6c\x8d\xc5\xdc\x9f\xb9\xe8\xa6\xe5\xe9\x71\xa3\x56\xe8\x90\xa9\xfe\xad\xae\x9e\x31\xa6\x23\x26\x7f\xd1\xb5\xb4\xcb\xae\xf1\x47\x9c\x47\xfc\x8c\xc8\x3c\x92\x1e\x6e\x3a\x81\xfa\x3b\x3a\xd2\xec\x46\x1d\x13\x22\xb5\x46\x0f\x05\xef\x3f\x61\xe3\xc0\x14\xd5\x60\x62\xea\xc7\x25\x7a\x20\xec\x94\xf3\x8e\x12\xf9\xf7\xbd\xd6\x57\xda\x4f\x33\x6c\x89\x8f\xd0\x28\x79\x41\x97\xad\xcd\x64\xef\x21\x13\x3f\xc3\xfe\x01\xa3\x6c\x94\xe4\x45\x31\x6c\x55\xe8\xd1\x84\x86\xbe\x01\x63\x43\x48\xc7\x2e\xd7\x8f\x1b\x95\xba\x7c\x5d\x0f\x5b\xdc\x1a\x38\xda\xcf\x38\x75\xc9\x25\xf5\xa7\x5d\xe8\x3a\x5b\xcd\x6f\xdf\x94\xf8\x5d\x8d\xb7\x7c\xde\xf6\x7b\x76\xac\x6e\x3f\x79\x36\x53\x5b\x51\xcb\x92\xb0\xcd\xf6\x98\xbb\x8b\xad\xc8\xfd\xef\x7b\xc3\xc4\xa8\x37\xbe\x6e\x82\xd2\xc0\x6b\x65\x87\x50\xe3\xdb\x47\xdb\x20\xf4\xae\xcc\xda\x1e\x95\xbc\xfd\x41\x81\x96\xb0\x3d\x8e\x5f\x54\xac\xf0\xee\xae\x66\xa7\x76\x49\x45\xb7\x4d\x52\xd4\xdd\xff\x13\xfb\x64\xf6\xed\xfb\xa4\x18\x59\xcc\xbe\xeb\xff\xee\x5d\xb2\x43\x9c\x5d\x96\x04\x82\x1c\xf6\x81\x9b\xa6\x1b\xe8\x50\x66\xa6\x8f\x8e\xf8\xbd\x73\xa8\x32\xde\x56\x8a\xbe\x4e\x59\x24\xa6\xcc\x07\x75\x1f\x51\xea\x24\xb1\xd0\xa3\xc4\xf7\x32\xf9\x57\xae\xd7\xee\xee\x30\xf5\x44\xa6\x03\x71\xd3\xc0\x06\xb0\xdc\x93\x7a\x50\xc1\x1c\x15\xfa\xf7\xc4\xb5\xa9\xd6\x4d\x69\x34\xd1\x4a\x4d\xc6\x53\x15\xe9\x56\xcd\xa6\x18\x2c\x99\x26\x44\xf2\x36\x7a\xac\x5f\x1f\x1d\xd5\x94\x94\x1a\xa4\xe4\xec\xcc\xe4\x07\xd2\x2b\x6e\x81\x96\xae\xef\xf8\x66\xe7\xa2\x0f\x83\xec\x43\x16\x7e\xb0\x85\x7b\xe9\x5c\xa1\x27\x85\xcc\x5e\x04\x69\x9d\xe4\x62\xb6\xfd\x7a\xc9\x5d\xe0\xb5\xa8\x7f\x8f\x2c\xfe\x87\xf1\x3e\x95\xe7\x0d\xcc\x59\xce\xcf\x59\x7e\x6e\xef\x7c\xe6\xfa\xcb\x4e\x34\xc3\xeb\x78\x8e\x36\xa2\x24\x7f\x69\xb1\x95\x72\x09\x73\xcd\x97\xc7\x25\x7c\x08\x5c\x13\xa9\x25\xd1\x4a\x7e\x6e\x71\x4a\x35\x72\xd6\x81\xc8\x87\x38\x10\xa5\x43\xf4\x48\x29\xa5\xf5\x44\x31\xa8\x85\xca\x96\x5f\x8e\x42\x77\xc1\x58\x38\x6a\x7b\x4c\x8d\xdf\x5d\xfb\x69\x3d\xf8\xce\x16\xfe\xd7\x10\x4f\xb4\x93\x4c\x83\x6f\x61\x83\x53\xcb\x60\x32\xa3\x2a\x84\xe9\x96\x22\x00\xe7\x32\xa0\x09\x3f\xe1\x41\x7f\x3c\x0e\xda\x7d\x84\xff\xa1\xb2\x33\x86\xc0\xae\xba\x54\x7e\x48\xfd\x24\xa4\x7d\x15\x05\xce\x57\x6a\xb7\x4f\xe8\x8e\x86\xbf\x6c\x01\xc1\x0f\x66\xd5\x8f\xae\x5c\xfe\xf6\x82\x74\x9d\xef\x6a\xa4\xc7\x50\x0e\xdc\x13\x51\x8d\x0c\xf1\xc7\x08\x61\x46\x63\xfc\x27\x72\x17\x80\xee\xc3\x10\x8c\x74\xa3\xf3\xc5\x8b\x48\x2d\x34\x74\x67\x22\xb3\xb6\x2d\x56\x69\x29\x22\xcb\x25\x09\x99\xfe\x5c\xe2\x66\x9f\xb1\x62\x42\x06\xad\xdd\x90\x69\x6c\x53\xc9\x24\xa7\xe8\xf5\x28\x82\x63\xdc\x10\x2f\xdf\xe6\xca\xa3\x1a\x10\xb3\xcd\x15\x56\xfb\x1e\x89\x84\x3c\x73\xa6\xa4\x21\x00\x8c\x23\x64\xb6\x50\x0b\xb7\xdb\x0d\x66\xb4\x12\xa3\x51\x93\xce\x7c\x82\x96\x66\xc4\x45\x76\x61\xa3\x45\x14\x2b\xfc\x1b\x2d\xbd\xb7\x3d\x14\xba\x41\x62\xa7\xc5\xde\x16\x51\xd1\xa4\xed\x6d\xfb\xc5\x8d\x17\xf6\xb5\x37\x63\xb0\x03\x43\xa9\x49\xba\xd4\x84\x96\x62\x36\x13\xfb\x1a\xc5\x31\x9d\xc9\x1e\x46\x2c\x81\xd9\xb6\x86\xbe\x22\x9c\x75\x92\xb3\xd0\x84\x16\xff\xdb\x10\xbc\x55\xc0\x95\x48\x72\x4e\x96\xd2\x12\x3f\x1a\x22\x0f\x09\x32\xed\x7e\xd8\x5b\xb4\xc8\xc9\x31\x2a\xd4\x99\x32\x39\x2e\x11\x6a\x87\x29\xc2\x62\xe8\x0e\x37\x55\xd0\x4e\x54\x10\x00\x6d\xe0\x04\x24\x3e\x17\xe0\x4c\xd1\xa0\x61\x24\x46\x7b\x6e\x44\x12\x00\xed\xd4\x26\x57\x25\x76\xfb\xa2\xd7\x6f\x8e\xb9\x8a\x8a\xca\xbf\xe7\x25\x44\xa1\x1b\xac\x6d\x3c\x3b\xab\x11\x1f\x1a\x61\xa7\x17\x54\x88\x8b\x8d\x3a\x86\x9a\xf3\x87\x2f\x4b\xaf\xdd\x5f\x51\x37\x14\xec\x99\x9a\x3f\x94\x24\xe2\x93\x3f\xb1\xb3\x0e\xba\xf1\x70\x03\x62\x8a\x71\xae\x3d\xf2\xe0\x54\x96\xa1\xab\x66\xfd\x51\xac\x60\x6c\x27\xb5\x46\x84\xc3\xec\x43\x67\x5c\xe1\x0e\x6e\x7c\xbe\xfe\x66\xce\xa4\x42\x9d\xec\xc0\xbf\x7c\x95\xcd\x73\xb5\x4b\x90\x44\xeb\x83\x7e\x29\x88\x06\x04\xe3\x53\xe7\xc3\x36\xc3\x5e\xe0\x0d\x12\xcc\xfd\x80\x92\x0f\x36\x59\x3a\xdd\x7d\xb2\xaf\x9c\xde\x3e\xd9\xd7\x4e\xdf\x90\x9d\x6c\x9c\x81\xe9\xd5\xd6\x19\x9a\x5e\xdd\x9a\x9d\x6d\x20\x0a\x1f\x51\x72\xb4\x13\xe3\x60\x86\x2e\x37\x46\x64\x71\x0d\xd4\x1a\x27\x6b\x83\xd6\x55\x48\x6a\xd7\x8d\xab\x1a\x09\xaf\x6d\x06\x5c\xfb\xfd\x77\x6a\xcf\xfa\xfb\xef\x92\x61\x87\xce\x8d\xc7\xd3\x5a\xe4\xc8\xe3\x36\x36\x2a\x51\xab\x70\x6e\xe9\x45\x7a\x2a\x1c\xa8\x2d\x6c\x72\x26\x1c\xb4\x2d\x50\x4c\xbd\x40\x47\xba\x17\xce\xdc\xa8\xff\x63\x2b\x4b\xd1\x00\x5e\x3a\x17\xf7\xd0\x00\x8a\x8a\xc8\x4b\xe7\x52\x51\x01\xbe\x82\xea\x24\x25\x60\xf3\x65\xf4\x76\x86\xf8\x51\x0d\xa7\x4a\x07\x7b\x20\x7e\xc0\x55\x85\xb5\xee\x59\xea\x14\x1d\x52\xed\x5d\x8a\x52\xd0\x05\x4a\x8d\x03\x77\xbe\x9c\x05\x4a\x5e\xa0\x4d\x7a\xda\xbc\xee\x6c\x18\xcc\x7e\x9c\xf5\xa1\x01\xaa\x4a\xbe\x48\xb3\x8c\xaa\x15\x3e\x53\x96\x43\x6a\x99\xee\x49\xe4\x06\x19\xc1\xf4\x5a\x07\xb4\x89\xf4\x0a\xb7\x48\x71\xdf\x5a\xc8\xda\x90\x37\xba\x9c\xf0\x0e\x28\x67\xb7\x51\xb3\x77\xcd\x57\xd1\x37\xc1\x31\x56\x95\xc9\xe6\xfd\xe3\x48\x0c\x32\x13\x09\x0c\x4a\x41\x5e\x5b\x67\x27\xb5\xd6\x59\xe3\xd4\x96\x78\xf2\x37\x52\x22\x2c\xa5\xe5\x38\x7a\x26\x86\xa6\xe8\x17\xca\x6d\xea\x5c\x6d\xe4\x3c\xaa\xfe\xdc\x58\xf1\x07\x49\xde\x99\x31\x86\x44\xef\x6d\xed\x28\x4f\x1b\xc9\x7c\x51\x62\x3c\x4a\x7c\xd6\x74\x26\x5a\x24\x91\xa1\x4c\x7f\x34\x92\x3c\xa2\x46\x7d\x7b\xfa\x4c\x12\x74\x48\x4f\xbc\x27\xb5\x93\x55\x0b\x3f\x2b\x7c\xdb\x15\xaa\x4b\x1a\xfc\x2f\xfb\xd6\x72\xe7\x56\xb6\xec\x04\x77\x15\xcc\x14\xb4\xfc\x8d\xea\x71\x19\x5e\x5b\x5f\x29\x68\xb3\x81\xd5\x11\x2a\x31\x6b\x6c\x29\xf3\x55\x3a\x5f\xce\x66\xf4\x52\xa4\x26\x73\x69\xa6\x4a\x1a\x10\x75\xdf\x9a\x74\xc8\x6b\x6c\x96\x39\x5e\x7e\xf8\x66\xa9\x0b\x56\xf3\x60\xd1\xbd\xf4\x43\x35\x4a\xb7\xe2\x5b\x67\xf6\xf4\xbb\xe6\x12\x6a\x68\xbd\x92\x0f\x57\x3c\x05\xaa\x9a\x5d\x9f\x21\x26\xd2\x2a\x2a\x6e\x2d\xac\xdb\xa6\xa7\xc0\xec\xe9\x31\x97\x08\x71\x09\x19\x24\x7e\x40\x31\xd2\xdb\x72\xe9\x3d\xfd\x17\x7e\x57\xe0\xcf\x01\xfb\xc3\x9f\xfe\x55\xba\xdf\x6a\x58\xc6\x33\xb4\x61\x33\xf4\x79\x16\xac\xfa\x90\xed\x8f\x5e\x0e\xdf\xd0\x6e\xe1\xf5\xf0\x00\xa3\x6d\x14\x5b\x01\x91\x20\xf5\x22\x09\x6b\x62\xc4\xa0\xf9\x6b\x45\xa6\xad\xbe\xb3\x86\x2b\x1a\xa1\xff\xad\x3a\x5a\xb7\x96\x3e\x04\xee\xa4\xd4\x28\xc1\x91\xd7\x1f\x2f\xc7\xf8\x0b\x58\x34\xfc\x65\x37\xcd\x1f\xd8\xe5\xe3\xf5\xff\xa7\x7e\xce\x87\x98\x8f\x78\x05\xec\x3d\x1d\xbb\x58\x3a\x93\x27\x79\x69\x3b\xdc\x75\x28\x0d\x8a\xd1\xd1\x23\x94\xe9\xe7\x9f\xa3\x23\x6a\xed\x6b\xb6\x90\xe6\xad\xe8\x17\x90\x93\xd7\xc0\x51\x1b\x72\xb3\x5b\x07\xaa\xeb\x67\xb4\xc6\xe4\x0e\x2d\xe5\xa9\x81\x96\x6f\x83\xac\x3e\x44\xa5\xe4\x47\x5a\x6c\x98\xd9\x99\xb8\x9c\xfc\x4c\x0b\x8e\x1c\x5c\x26\x63\xe7\xd9\xdf\xd1\x59\xe5\xb3\x5a\xec\xaa\x32\x65\x6e\x7d\x55\xfa\x4b\xbd\xf3\xb7\xbf\x79\xcf\x4b\x14\xa6\x66\x74\xd0\xcd\x36\x8f\xd9\x41\x77\xec\xc5\xdb\xd6\xf8\xda\x7e\x10\xe1\x12\xfb\xa2\xf7\x91\x40\xd0\xef\xbb\xaf\x94\x44\x7c\xf3\xbd\xa5\x32\x70\x13\xf9\xc1\xaf\x7b\xcb\xae\x32\xe5\x2b\x46\xe7\x36\xd9\x22\x20\xa3\x30\x27\xe6\xaf\xf7\x96\xd0\x65\x4b\x74\xfc\x74\x31\xdf\x2c\xd1\xa1\xaf\x88\x9f\x27\xd1\x11\x1c\xb5\x5f\x40\xa2\x13\xf1\xda\x7e\xa6\x44\xc7\x17\x12\x1d\x26\xa8\x28\x2a\x8e\x41\x55\x8d\xe3\xc2\xc1\xc3\x35\x3d\x0e\x06\x86\x88\x95\x0b\x6d\xea\x6e\x68\x64\xf6\x31\x94\x94\x0f\x79\x54\x3e\x94\xdc\x94\x5e\xa6\xe4\x25\x2d\xc3\x38\x47\xc6\xf5\xdb\x04\x19\x01\x99\x08\x41\x46\x9e\x88\x22\x14\x00\x58\x03\x50\x79\x48\x42\xd2\xc5\xc3\x64\x54\xe9\x52\xf1\x47\x97\x7f\x12\xea\xec\x5a\x63\x63\x86\xfd\xda\xb1\x28\x6a\xdc\x11\x3c\x95\x18\x1c\x06\x77\x77\x87\xb2\x9c\x02\xfb\x98\x74\x7b\xc1\x61\xd8\x1e\x09\x61\x62\x9a\xa1\x11\xdb\xac\x00\x42\x67\x4e\xb2\xda\x4c\xf1\xc7\x5c\x11\x7f\xe4\x66\x5f\x28\x22\x91\xdc\xec\x4b\x27\xcc\x11\x24\xd0\xcf\x1b\x49\x13\x02\xc4\x76\x39\xcb\x7b\x4b\x13\x78\x6d\x64\xed\xac\x14\x91\xc2\x06\xea\x94\x45\x0a\xeb\x6c\xcd\x37\xab\xec\x17\xa8\x1a\xeb\xca\xce\xbb\xe8\x2f\x46\x01\x42\x99\x97\x39\x5c\x7a\x37\xe6\xd2\xbb\x2a\x97\xbe\xcd\x74\xcf\x1a\xe1\x06\x66\x78\xf1\xd1\x10\x56\x0b\xa4\xf4\x23\x61\x4f\xa7\x75\x35\xe5\x32\xa3\xe9\x35\xca\x9f\xee\x2b\x35\xda\x46\x52\xa3\x84\xe0\xc9\xd9\x72\xa9\xd1\x5a\x09\x42\x22\x86\xae\x99\x20\x9d\x66\x3d\x6b\x7a\x2a\xdf\x21\xf6\x29\xb9\xa9\x6c\xc6\xc7\xd8\xcd\xd3\x5c\x08\x07\xed\x8b\x4e\x7d\x1f\x1b\x90\x63\x0e\x38\x79\xf2\xeb\x9a\x2f\x3d\x51\x9d\x84\x30\x60\x30\x38\x73\xfd\xa2\x14\xda\xd5\x72\x73\x86\xa9\x70\xa6\x6a\xdd\xb0\x2f\x7d\xe6\x6c\x94\x19\x94\x17\x1a\xfa\x19\x91\x8c\xdc\xcf\x22\xc0\x39\x2d\x79\xee\x8c\xef\xee\xb6\xb2\x9e\x6c\xca\x10\xeb\x17\x51\x95\xf1\x16\xe3\x9a\x49\xba\xa7\xb6\x1c\x02\x3f\x7d\xfa\x02\x72\x6b\x7a\x9e\x74\x4e\x72\x77\x77\xce\x1c\x21\x14\x15\xeb\x89\xe6\x32\xe0\x6e\x06\x8e\xd5\x95\x00\x88\x49\xac\x42\x50\xf9\xce\x6e\x5e\xea\xc3\xd0\x60\x9c\x98\x1b\x39\x4e\xcc\xdf\x9e\xdc\x3c\xfd\x0e\x7a\xac\xff\xb4\x99\x28\x51\xe9\xdb\x46\x22\x15\x56\x1d\xfb\xd6\xe7\x6c\xfe\x5f\x3a\xea\xe7\xb9\xd8\x7f\xbc\xdb\xcc\xf1\xa2\x9c\x53\x2c\x8d\x42\x83\x7d\xa9\x47\x2c\x44\xdd\x27\x89\x0e\x73\x78\xce\x43\xf7\x1b\xbf\x93\x14\x9b\x87\xb6\xda\x1f\x07\xb3\x6a\x67\x84\x7a\xfd\x98\xf3\x49\xdc\xeb\x54\x37\x9d\x8e\xde\x83\xe4\x07\x63\x80\x3a\xc8\x00\x75\x19\xc3\xf4\x82\x33\x4c\xcf\x23\x8e\xe9\x98\xb3\x4c\xf5\xe3\x9a\x91\xb3\x11\x6c\x92\x81\xaf\x31\xb0\x49\x26\x86\x26\x62\x93\x22\xa7\xf9\x2f\x5e\x00\x1f\x42\x7f\x47\x6a\x70\x85\xc7\xe0\x83\xfa\xd2\x0b\xd7\x78\xd8\xb1\xa7\xd7\xa8\x1d\xb2\x63\x27\xa1\x4a\xac\x22\xd9\xa1\x21\x46\x23\x82\x93\x44\xf1\x14\x90\xe4\x5a\xc4\xbc\x95\x12\xde\x52\xb8\x3f\xbc\xaf\xc3\x60\x8b\x6e\xbf\x90\x7b\x22\x9c\x77\xe5\xee\xc4\x19\x25\x27\xbc\x9d\x23\xb0\x05\x0f\x0b\x57\x0e\x85\xb4\xcb\x6e\x7e\xb9\xd0\xb4\x0e\x24\xa4\x1c\x62\x2d\xb3\x06\x5c\x32\x86\x2a\x84\x57\x45\x8b\x7e\xfd\xd8\x2b\x12\x3a\xc6\x65\xdf\x5d\x49\xfb\x75\x67\xd3\xb5\xe7\x09\xbd\x97\xa2\xfd\x0f\xa5\x60\x48\xed\xc7\x67\xd6\x8c\xbc\x53\x0e\xb3\x66\xd4\xa1\xe7\x31\x6b\x46\xa5\x7f\x26\xd7\x65\xd4\xf6\x67\x73\x5d\x46\x16\x2f\x9f\xeb\x32\xf2\x79\x8c\x90\xdd\x9f\xcf\x63\xdf\xd4\x38\x2f\xc0\x06\xf0\x9d\x64\xa7\x39\x13\x39\x9a\x6c\xb4\x53\xf1\x3e\x43\xee\x82\x92\x3d\x62\xcd\xc4\xb5\x50\xa7\x22\x34\x68\x03\x89\xeb\x3e\x3c\xa4\xfe\x20\x78\x66\x7e\x87\x9a\xbb\x94\x74\xd8\x5a\xb8\x6f\xbc\x66\x6d\x0f\xd3\x95\x2a\x5d\x4d\xbd\xa6\x3d\xce\xe6\x75\x75\xa2\x03\x33\xaf\x4b\x5f\x91\x6e\x1e\xaf\xcb\x33\x90\x6e\x01\x5e\x57\xe4\x21\xdd\x4c\x5e\xb7\x5b\x8c\xd7\xd5\x81\x31\x80\xd7\xed\xc4\xbc\x6e\x20\xf3\xba\x41\x82\x47\x95\x55\xf3\x14\xa5\x69\xe4\x5f\xff\x43\x62\x60\xfd\xe5\x98\x7a\xa7\x60\x71\x0d\x0b\x33\xb2\xa3\xa8\xd7\xaf\x23\x8b\xce\xd7\xbc\x4e\xab\x63\x93\xd9\xd1\x51\xf4\x88\x1c\x9c\xf4\xd8\x43\xbb\x53\x73\x1c\xd5\x53\x4b\x46\x63\x4a\x4c\x69\x74\xaf\xfb\xcb\xd9\x9c\x91\xec\xeb\x0a\xf7\xde\x68\xc7\x11\x86\x2e\xa1\xfc\xab\xea\x26\x8e\x44\xb9\x21\xaf\xaa\x7d\x47\x02\xb7\xbd\x14\x01\x34\x21\x9b\x6d\x93\x77\x96\x54\xfa\x75\xf1\xd6\xdd\xe5\x22\x44\xcb\x22\xe6\xcb\xc0\x81\x46\xc8\x39\xf3\xd2\x73\xce\x7c\xb0\x6c\xa5\x7a\xdf\x21\x9b\xed\x71\x0e\xf2\xd5\x35\xa3\xd7\x5c\xc7\x8b\xaf\x56\x8c\x6b\x28\xdd\xb3\x44\x30\xea\x48\x9d\xc4\x2f\x5c\xe6\xf1\xe0\x7d\xae\x90\xe0\xbd\x4d\xde\xc7\x60\x3d\x20\x80\xe9\x6e\xac\x94\xca\x1b\xc4\xec\xd1\xe6\x3f\x30\x36\xff\xa3\x49\x8e\x10\x92\xf7\x18\x4d\xf2\x93\xd1\x74\x7a\x4a\x33\x98\xa4\x0a\xe8\xfd\xe6\xa2\xf5\x9e\x71\x08\x9e\xdd\x78\x6f\x70\x8f\x75\x61\x8b\x2c\x1a\x19\xc4\x96\xfb\x0b\xb2\xde\xc2\x22\x89\xe6\xc4\xe6\xee\x86\xac\x37\x90\x6a\xc7\x13\xb5\xc5\x0b\x95\x1e\x79\xce\x88\xba\xb6\xd0\x00\x1e\x0f\xdd\x28\x13\x22\x89\x6f\x99\xd4\xe5\x73\xf3\xd6\xf9\xba\xa3\xee\x42\x3e\xa3\xab\x90\xad\x7d\x7b\xf5\xf9\xda\xd9\xc2\x3f\x49\xf7\x51\x2d\x4c\xe4\x12\x85\x9a\xdd\xc0\x27\xfa\x4d\xfe\x49\x43\xcb\x05\x3d\x77\xd5\x0f\x67\xd5\xf6\xcc\xed\x5a\x3c\x52\x27\xfc\xe4\xa1\xe1\x4f\xe3\x94\x12\xb9\x8c\x1f\xa8\x0f\xb0\xd7\x36\x8b\x8e\x37\x3a\x3a\x1a\x71\xab\x2d\xfc\x65\xc4\x6e\x1e\xb8\xaa\xf3\x9b\x9d\xb0\xf5\x32\x0b\x69\xde\xa3\x90\x06\x1a\x79\x9f\x2b\xa7\x41\x8f\x52\x3c\x26\x21\x25\x78\x3b\xd5\xad\x78\x58\xdb\xf0\x70\xc1\xb8\x73\xea\x90\x88\xc6\x71\xa7\xd3\xf8\x83\x93\xd1\x5f\x65\xe6\x53\x9f\x27\x8a\x01\xc3\xd1\x27\x62\x70\x04\x1a\xb3\x62\xff\x83\x18\xcf\xe0\xfb\x4a\xf5\x1f\x2f\xa8\x53\xa5\xda\xb5\x83\xbf\x6d\x72\x45\x1f\x2a\x18\xe6\xc0\x7e\x6a\xd5\xcb\xf4\x07\xb1\x68\xd8\x03\x8f\x9a\x4e\xd3\x44\x14\x49\xc0\x57\xff\xe2\x5c\x71\x6c\xc9\x0f\xda\xf8\x3a\x48\x63\x53\x2e\x01\x45\x1a\x86\x2c\xe8\x54\xe5\xba\x19\xcf\xc4\x17\x7b\xf7\x52\x92\x59\x8c\xa0\x0e\xf5\xf3\x54\xa4\x18\x36\x35\xf2\xf1\x9a\x62\x69\xc7\x53\x4b\x6c\xc7\x91\xe3\x5b\x78\x88\xc0\x3a\xff\xd1\x59\xb5\x78\x04\x87\x92\x8b\xea\xf5\x9f\x9c\xf7\x46\x19\x95\x7a\x82\x2b\x71\x6e\x7f\x76\x7e\xba\x87\x98\x2a\x55\xa1\x2c\xa5\xfa\x05\xaa\x94\xa5\x54\xb0\x98\x7e\x2e\x1c\x04\x17\xca\xe7\x64\xde\xc4\x76\xf7\xe2\xc0\x55\xe3\x6d\x61\xb6\x70\x52\xa0\xa6\xad\x64\xc1\x9f\x93\x35\x0e\xba\x94\x9f\x17\xd9\xde\x39\x13\x86\x98\x3a\xf8\x63\x6e\x25\xee\xaa\xfb\x3e\xbf\x9e\x82\x03\x65\xf1\xa5\xb8\x20\x30\x27\x2f\x9e\xae\xb3\x70\xc4\x1b\x26\x37\x18\x37\x9c\xcb\x81\x3e\xc2\xb7\x55\xe4\x3e\x72\xbd\x1c\x17\x32\xe2\x47\x75\xdf\x26\x63\xa4\xa6\x0e\x9d\x7e\xe4\x3d\x03\xe3\xc5\x53\xe2\x2b\x4e\xca\xbd\x3a\x32\x9b\xcc\x12\xc5\x21\x4e\xa0\x32\x8e\x24\x94\x36\x59\xb2\x03\xe4\x57\xe7\x8a\xf2\x93\xa5\x1f\x82\x0a\x15\x27\x1e\x6c\xd9\x1a\x20\xe2\xe4\x69\x1c\xae\x77\xd7\xcd\x01\x1f\x74\xfd\x79\xcd\x66\xec\x25\x2a\xe2\x9e\x3f\x7f\x0e\xad\xc8\x7f\x70\xc7\x62\x7f\x4f\x47\xfd\x2e\xe5\x37\x85\x0f\x12\x85\xe3\x8f\x18\xfe\x17\x8c\xef\x03\x76\x3f\x39\x32\x75\xe2\xf9\x74\xfe\xba\xd7\x20\xd9\xd4\x0f\xec\xdd\x4f\x39\x42\xdc\x71\x2c\xc4\x8d\x4b\x93\xc5\xd1\x91\xda\xa5\xad\xe4\x29\x23\xbb\xc2\x8f\x4c\xb2\xc2\x8e\xa9\xdf\xb2\x8e\x78\xea\x56\x77\x8c\xc1\x34\xf8\x31\xdf\x8c\x4f\x0b\xe5\x8d\x7c\xd3\xfc\x16\x5d\x76\x3f\x65\x8b\x3d\x13\x15\x44\x18\xa1\x8f\x4f\x8f\x25\xc9\x12\xfa\x3e\xa9\x9b\x9d\x9f\x48\x16\x54\xbf\x19\x68\x04\xee\xa7\xda\xae\x0e\x60\x47\x5a\x25\x72\x80\x16\xae\xc2\x15\x9c\xef\x4e\x26\xe1\xe2\xc0\x03\xfe\x26\x76\x15\x07\x93\x46\x65\x94\x07\x28\x56\x3a\x98\x02\x25\x1e\xb6\xab\x68\xa8\x07\xbb\x62\x18\x6d\x30\xb1\x31\x3e\xc5\xcb\x88\xae\x17\xf6\xc1\x68\x9c\x42\xfa\xc1\x50\x84\x25\x85\xe5\x05\x5a\x4e\xdc\xc4\x6d\x9b\xfc\x64\x8a\xb1\x2d\x56\xc8\xd0\xc6\x63\x40\x91\xe0\x4a\xe7\x5b\x02\x05\x98\x58\xa6\x71\xce\x03\x05\x25\xc8\x41\x5b\x1f\x93\x28\xaf\x4f\x36\xbd\x9e\xb5\x53\x88\xb2\x8d\x91\xbb\xad\xe2\x44\x6a\x66\x80\xed\xba\x24\x99\x26\x3b\x3e\x12\x9e\xcd\x59\xf2\x4e\x63\xc5\x12\xe7\x3e\x1c\x5d\x79\xd7\x11\x79\x71\x74\xc4\x9e\xd5\xb5\xc8\xd6\xef\xbf\x9c\xc4\x99\x23\x1d\xc4\xfc\x94\x2b\x44\xc2\x40\x1b\xc9\xc5\x6e\x37\xff\xc5\x3e\x41\x07\x59\x1c\xbd\x27\x45\x21\xf7\x62\x61\x7a\x3d\x0e\xbc\xfa\x6b\x41\xba\x09\x1a\x3d\x3c\x63\x92\xef\xdf\x13\xe3\x48\xde\x29\xfa\x28\xeb\x7f\xd5\xc7\x13\xa4\xcb\x9d\xb8\x9e\xc6\x43\x74\x60\x61\x83\x11\xfd\x55\x3b\x41\x5b\x2f\xef\xe4\x53\xeb\x53\xc3\xdb\x35\x7f\x37\xc5\x62\xe7\x7b\x0f\x43\x40\x0e\x83\x0a\x5f\x3f\xc7\xc9\xf4\xb6\x3b\xef\x51\xef\x5d\x28\xdf\xae\x91\x7a\x2d\x59\x52\x1b\xff\xb0\xc3\x17\x8f\x0d\x53\xaa\xcc\xa7\x1d\x87\x71\xaf\xcb\xd6\x95\xc7\xd2\xd2\x45\x51\xb5\xeb\xc9\xb2\x6a\x78\x22\xbf\x27\x3a\xa6\x31\x77\x33\x4f\xc8\xdd\x1d\xce\x07\xb5\x80\xbb\x77\xf3\x3a\xbf\x39\x9e\xe7\xfc\x2b\x49\xa8\x53\x66\x53\x21\xf4\x90\x9b\xf4\xd2\x31\xf1\x4d\x28\x5f\xb9\x02\x65\x73\x3f\x93\x8d\x51\xa3\x03\x95\xc1\x3b\xa1\xb6\xf8\xc4\xc5\xa4\x78\x82\xaa\x2f\xcc\x04\x0c\xd2\xae\xfc\x54\xfa\x27\x70\x1e\xde\xde\x62\xfd\x97\xc0\x06\xf4\x63\xc1\x7e\xea\xf0\xc1\xc8\x68\xdd\xd8\x64\x8b\x69\x91\xba\xfc\xaf\xdd\x8a\x7e\x35\x34\xae\x33\x3f\x3e\xfd\x1b\x90\xe9\x36\x2b\x45\xc3\x0a\x56\x3e\xa1\xcd\xa5\xba\xad\x36\x05\x6f\x49\xbc\xac\x03\xc9\xee\x93\x5d\xba\xe6\xba\xe8\xa4\x74\x6d\x2a\x1a\xb1\x7a\x7c\x08\x81\x18\x42\x2f\x1a\x42\xcf\x3c\x84\xdf\xac\x4f\x4f\x9f\x7d\x97\x18\xc2\xc7\xf4\x10\xb6\xc9\x66\x7b\x29\xc2\x2b\x7d\xee\x87\xda\x00\x02\x5c\xb0\x42\xd1\x6b\x4c\xf0\x80\xaa\xde\x6c\xf9\x4a\x96\x80\x84\x0a\x5f\xf0\x0e\xd1\x09\xe0\xcf\x13\xcd\xbb\xd8\x7e\x5f\xc4\xc2\xa1\x1b\x9e\x60\x87\x5e\x22\xdb\x54\xa8\x9d\x81\xda\x0e\x23\x37\x35\xcd\xc4\x07\xae\x23\x1d\xbe\x64\xad\x3c\x6d\x51\xf0\x85\x9f\xed\x37\x67\x9d\x6e\x30\x16\xdf\x40\xbb\xfd\x84\x2f\xe5\x38\xab\xda\x6e\xc2\x89\xf0\x56\xf8\x0a\x6e\x66\x57\x3f\xcc\xd6\x5f\x48\x6d\xa0\x9f\xec\x2a\x0d\x8f\xf2\x5a\x44\x5f\x9d\x8b\x68\x1b\x24\x20\x7d\x32\x40\x5b\x5c\xe0\xe9\x34\xd7\x91\x72\x35\x2b\x97\x18\x51\x39\xfb\xd4\xc5\xd7\x25\x3d\x2a\xca\xac\x4a\xd4\xca\x19\x8d\xc1\x0f\x7b\x95\x73\xf9\x3e\xfb\xaa\xbf\xfe\xcc\x02\xc9\x56\x37\xe8\x04\xa0\x13\x07\x89\xa5\x51\xea\xac\x1e\x74\x52\xf0\xcb\x43\x47\x14\xbe\x0a\xae\x9b\x52\x0c\xfd\x28\x86\xc2\x10\x8d\x91\x35\xb1\xf5\xdb\x3c\x5e\x22\xd1\xbd\x44\x0b\xe6\xbe\xe3\x45\xb2\x0f\x8b\xf6\xc5\x1a\x92\xc0\xb6\x71\x05\x51\x4b\x60\xca\x64\x74\x69\xfc\x5c\xa6\xb2\xf2\x50\x48\x41\x33\x71\xad\x15\x8e\xba\x9b\xb8\x9b\xd8\x12\xe4\x5e\xce\x8f\x05\xdc\xc7\x8b\x24\x2b\x62\xdf\xf8\x6c\x83\xfd\x66\x13\x29\xac\xb7\x94\x4d\x32\xdf\xae\xe8\x92\xeb\x14\x4a\x58\xad\x3d\x7b\x32\x25\x18\x3b\x0a\x01\x15\xc1\x7c\x41\xa7\x96\xf6\xc5\x1a\x98\x29\x5f\x3a\x1e\xe8\x68\x48\x6e\x22\xd7\x76\x78\xcc\x0e\xae\x66\xd7\xf1\xe7\x70\x50\x73\x86\xfd\x9f\x3b\x5d\xc5\x75\x1c\x9f\xae\x36\xce\x44\x60\x37\x87\x91\xfc\x3f\x56\x97\x51\x9a\xb7\x5f\x96\xa8\x5e\x31\xe0\xb2\x20\x7f\xd5\xe0\x78\xd6\x07\x29\x5a\x8a\x5d\x55\xc3\xc1\xe9\x46\xd1\x53\xbb\x84\xf4\x12\xbb\x2c\x39\x38\x76\x4e\xd8\x87\x69\x0c\x50\x29\x07\xfb\x87\x19\xea\xbe\xc2\xe0\xcc\x78\x35\x02\x83\x9b\xbd\xad\x92\x40\x6c\xcd\xa6\x42\x87\x5a\xec\x14\xa5\x9b\xf6\x4b\x22\x00\x8a\x8b\xb2\xf5\xf4\x92\x95\x49\x3d\x4b\x43\x43\xb2\xf0\x3a\xf1\xf1\x14\xe7\x87\x63\x62\xa7\x48\x40\xe3\x57\xca\x42\x97\x9a\xa2\xe7\x25\xb4\xc3\x4e\xd5\xbe\xe9\x40\x15\xaf\x64\xf9\xb5\xa9\x4a\x71\x24\x42\xad\x6b\x27\x7e\x54\x0f\xac\x1d\xea\x0a\x24\x33\x71\x8d\x0e\x22\x61\x35\x1e\xc9\xd1\x7d\xe5\x1c\x7a\x77\x77\x67\xbd\x73\x98\x80\x10\x5a\x50\xd6\x34\x8b\xd7\x74\xe8\xf1\x33\x42\x88\x44\xbd\xa6\x08\x84\xce\xcf\x0e\x97\x9e\x77\xcc\x17\xa2\xaf\xe6\x6a\x3b\xef\x2c\xf4\x6f\x2d\x7c\x19\x57\xff\xf1\xe2\x04\x49\xf0\xcb\x16\xac\x72\x99\xf4\x47\x7b\x73\xcf\x6e\xa4\x52\xeb\x44\x34\x13\xb5\x97\xc5\xef\x70\x8e\xc9\xf9\xba\x6d\x58\xef\xe8\xbb\x4a\x9b\x0a\x2e\x11\x9e\x87\x7e\x2f\x90\x0b\xda\x89\xc3\xba\x13\x23\x13\x90\xe6\xa6\x9e\x50\x15\xcf\x9c\x96\x4d\xdd\x9e\xaa\x29\x7d\xa9\x14\xbd\xfe\x2c\x9b\xc6\x58\x4e\xa6\x0d\xd5\xe3\x9a\x6e\x0d\xde\xcc\x48\x07\x89\x18\x33\x10\xc4\x33\x01\x1b\x7f\x16\x0b\x45\x38\x0a\x02\x1d\xd5\x4e\x1c\x7d\xb8\xac\x18\x20\x4d\xff\xdc\xe0\x84\xf2\x78\xfd\x87\x34\x5c\x7f\x1d\xc3\xf5\xd7\xc8\x0a\x7f\xad\xf1\xd7\x06\x3e\x7b\xbf\x4d\xad\x1c\x95\x08\x09\xd4\xb8\x91\x56\x72\xca\xfe\x9c\xe9\xa1\x12\x2e\x9c\xb4\x6e\x37\xc0\x38\xd7\x0a\x1e\x42\xb9\x9b\xd5\xbd\x2b\x3b\x0a\x20\x17\xd4\x93\xc0\x25\xf4\xa7\x29\xf6\x49\x4d\x25\x09\xba\x7a\x0f\x02\xc2\xc1\xcb\xdf\xd0\x99\x32\xcf\xb1\x68\x09\x87\x59\x0c\x57\x82\xec\xa3\xf1\x94\x93\x96\x4c\xf2\x9c\x63\x6c\x72\x22\xde\xa5\xbe\x68\x57\x57\x14\x6e\x27\xb6\x4b\x59\x70\xa8\xc3\xba\x84\x2b\x4a\xf8\x67\x78\xe5\x7c\xed\x37\xe0\x33\xa0\x3d\xc0\x6b\xad\xc3\x83\x73\x72\x61\xeb\x4d\xf6\x52\xaa\xcf\xaf\x6c\x91\x35\x5c\x93\xd2\x46\xd1\xd9\xd0\xd9\x6e\x20\x99\x27\x66\xbb\xb1\xc6\xd8\x6d\x6f\x33\xdb\xf2\xa4\xc0\x38\x9e\x72\xf4\xf1\x27\x9b\x48\xef\x95\x73\xcc\x93\xce\x31\x29\x0f\xeb\x34\x7a\xd3\xd7\xb0\xfa\xbe\x4a\x45\x8a\xdc\xf4\x94\xde\xed\x9a\x7a\x8a\x37\x07\x33\xc3\xad\x33\x36\x0d\x76\xc7\x72\x42\x18\xb6\x00\x27\x3f\xa2\x04\x01\x9c\x91\x82\x46\xee\x9a\xfc\xd1\xf1\x61\x71\x09\x20\x4d\x74\x29\xe3\xcb\x79\x02\x58\x93\xd5\x47\x03\xb0\x66\xa4\x00\x6b\xe8\xe2\x79\xc7\x62\x8f\xa4\x6d\x12\xce\xe1\x70\xa4\xc2\x17\xa7\x83\xbf\xe8\xc1\xe3\xf4\xb9\x0a\x10\x65\xa5\xce\x00\xe9\xc0\x53\xf4\x94\xd1\x85\x5f\x5b\xfa\xab\x47\x3c\xf9\x5c\xa2\x21\x51\x9d\x21\xba\x6c\xa7\x71\x56\xb6\x12\x8e\x66\xf4\x10\x38\x9a\x4c\x7c\x8a\x11\xa3\x9f\x8d\x4f\xd1\x3b\x29\x40\x0f\x18\x62\x3d\x1b\x0a\xae\xd3\x05\xd7\x91\xf7\x8b\x73\x3e\x6d\x7b\x05\x88\x15\x85\xdf\xd3\xe9\xdf\x27\x4e\x2b\x73\x9d\xc1\x4e\x51\x53\xb9\xb3\x74\xb9\x33\x16\xaa\x99\x9d\xfe\xf4\x98\xd9\x3b\xa4\x6e\x36\x14\xc7\x18\x45\x18\x87\xf9\x2b\xae\xa1\xbd\x43\x1f\x63\xc9\xdf\xb2\x4a\x1a\x43\x59\x4f\xc2\xcb\xd9\x2c\x9c\x9d\xf7\x02\x7f\x68\x2a\x7c\x99\x2e\x7c\x59\x08\x3b\x34\x7a\x44\xec\xd0\xe8\x7e\xd8\xa1\xd1\x9f\x80\x1d\xd2\xb4\x59\x00\x3b\xa4\x03\x7a\x99\xb1\x43\xf4\x15\x19\xe7\x61\x87\x78\x06\xc8\x98\x8f\x1d\x12\x79\xc8\x38\x13\x3b\x34\x16\xd8\xa1\x4c\xb3\x96\x24\xfe\xcc\xa3\xf8\xb3\xb4\x59\x0b\xe9\x73\xd1\xe9\x04\x67\x68\x49\xa3\x0a\xa4\x48\xbc\xa2\xd1\x80\xf1\x46\x72\x5c\x82\x91\x08\x0f\x6b\xa8\x8e\x97\x0f\x66\x8a\x0c\x05\xa2\x7f\x1e\xfc\x1c\xce\xc2\x49\xd8\xc7\x04\x6c\x34\xd6\xa7\x65\x6e\x29\x7d\x48\xec\x98\x64\x72\x93\x24\x53\x01\xe7\x30\x17\xe9\x3a\x2f\x10\x60\x25\x63\x51\x80\x6c\x93\x9f\x7a\xca\x93\xc0\x3a\x5d\x24\xed\x83\x12\xd8\xab\x4e\x21\xdb\x21\xb8\x09\xe1\xa2\x59\x04\x67\xee\x6c\x3f\xc8\xd5\x26\x82\x5c\x25\x81\x54\xdc\x82\x74\xe4\x0c\x2a\x7d\xe6\x0c\xa5\xcf\x97\xe4\xda\x19\xc2\x6f\x34\x5c\xe8\x8b\x85\xb7\xcd\x05\x11\x51\x41\x93\x49\x8f\xc1\xf9\x19\x7d\xb8\x38\x0e\xee\xf5\x22\xd3\xf2\x5b\xc7\x3f\x3a\x6a\xb7\xae\xae\x1b\x5e\x8e\xec\xc1\xcc\x22\x01\xe5\x13\xd2\x67\xa0\x78\xa6\xfc\x07\x46\xec\xdb\xd6\x76\xb4\x9d\xb1\x10\x81\xb0\xf0\xb2\xcc\x79\xc9\x6d\x1a\x6a\x12\xb5\xb7\xd9\x09\xa7\x26\xd4\x41\x8d\x15\xdc\xdd\x21\x74\xe3\x9a\x54\x61\xf1\x4e\x22\x8f\x28\xb4\xb6\xa4\x53\x94\xac\x7a\x51\xe5\xc5\xc3\x90\xdc\xa0\xd4\x68\xc2\x05\xc3\xf3\x56\x07\x5a\x58\x57\xac\x89\x2c\xc3\xf9\xbe\xd6\xaa\xa3\x6b\x5e\x32\x91\x45\x38\x27\x2c\xf5\xba\x41\x8b\x10\xf4\x28\xdd\x75\xba\x77\x77\x63\x60\xea\xd0\xe1\x3e\x77\xb9\x26\x10\x25\x14\x33\x86\xff\x5c\x73\x07\x36\xa7\xce\xd6\x08\x19\x11\x2b\xcf\x73\x67\x8a\x93\x94\x33\xe7\xf4\x1e\x78\x11\xa5\x36\xe0\xa7\xce\xe4\xb2\xcd\x53\x19\x2e\xb2\x3b\xcf\xc6\x27\xa0\x0c\x7a\x8a\x88\x8d\xd3\x1c\x95\x74\x3f\xd6\x71\xf7\x55\x43\xa5\x0b\xe7\x54\x11\x6d\x8b\x2a\x93\x8a\x14\x9a\x2e\x46\xaf\xfb\x8a\xbb\x0c\x55\x59\x53\x6f\x75\x62\xd0\x21\x31\xfb\x03\xc9\xe2\x3a\xf1\x8a\x08\xbb\x87\x94\x67\xce\x0d\x29\x49\xa7\x44\xe3\x00\xb3\x1d\xc4\x23\xba\x5f\x73\xb2\xcd\xbe\xf2\x05\x74\x7b\x2e\xfa\x2a\xf8\xa5\xd9\xae\xae\x94\xca\x9e\xec\x09\xb0\x97\x34\xec\x97\x66\x8b\xbe\xdb\x61\x4b\x79\x43\xcb\x1d\x95\x61\x48\xd5\xbf\xbd\x60\x1f\xfe\xd2\xb9\x48\x2d\x78\x69\x81\x67\x1c\x38\x3b\x34\xe2\xd1\x29\xe0\xd0\xeb\x8f\x79\x3f\x14\x77\x9a\x5d\x2a\x5b\x63\x8b\x1d\x5d\x76\xb9\x5a\x7b\xf1\x64\x2c\xfb\xe5\x46\xfd\xd6\x41\xa9\x8c\x9b\x97\x7b\xc4\x08\xb3\x5c\x26\x24\x2d\xf9\x93\xdf\x01\x5d\x32\x2e\x35\x6e\x12\x70\x16\x1a\x2e\xe7\x9e\xbd\x07\xf1\x56\x90\xdb\x95\x7a\xaa\x2b\xe8\xa1\xe0\x5b\x7b\x92\x50\x6a\xd0\xae\x2c\x35\x2e\x1b\xbe\xa1\x9d\xa4\xea\x4b\x6d\x83\xaa\x8c\xee\x57\x3f\x91\xa2\x5c\x87\x53\x8c\xdf\xe5\x76\x39\x00\x98\x37\xdd\xf6\x46\xd9\xad\x5f\x78\xa3\xc7\xea\x80\xc9\x8f\x95\x50\xb9\xd6\x12\x3a\xe3\xea\x3f\xd4\xa5\xfc\xd4\x8b\x62\xa9\xcf\x5b\xd6\xcb\x7d\x4c\xdd\xc8\x65\xd2\x56\x2c\x61\xc6\x28\x09\xaf\x16\x16\xbb\xfe\x71\xca\xf2\xce\x15\x38\x02\xe6\x07\x4a\xfb\x1b\x4d\xbf\x65\x00\x91\xb6\x49\xd6\x20\x5c\xd5\x13\xd1\x76\x85\x6e\x58\xf4\x1e\xff\x1c\xc8\x88\xc6\x65\x32\x56\x8e\x0c\x71\xba\xcc\x3f\x68\xe3\x16\x18\x24\x71\x76\x30\x09\xba\x54\x28\x0e\x24\x2e\x4f\x61\xe2\x1a\x48\xd9\x25\xdc\x2f\x65\x03\x68\x66\x42\x32\x68\x84\x56\x64\x97\x92\x5c\x40\x25\x2f\xed\x55\xc1\x0f\xa0\x43\x13\x65\x2c\x9e\xcb\x42\xb5\xe6\x9f\xc4\x4c\x62\x96\x71\xf6\x92\xb6\x23\x7d\xd9\x9a\xdd\xc0\x7f\x2a\xd1\x37\xfe\xbe\x4e\x53\x2b\xf5\x46\x94\xd4\xd4\x9c\xee\x3e\x3b\xc1\xdb\x09\x17\xd7\xda\x2d\xa4\x9d\xf4\xc8\x7e\x3a\x52\xf7\xc9\xcb\xac\x0d\x94\x33\x75\x36\x53\xc3\x88\x6f\x54\x36\xd7\x75\xc6\x9c\x00\x44\xef\xb7\xb1\xfb\xdd\x8d\xac\x57\x91\x26\x4c\xe7\x85\x97\x50\x2d\x02\xe9\x92\x1e\xe9\xe7\xfa\x7c\x19\x38\xff\xf8\x0e\x3d\xeb\xbe\xa8\xa1\x6b\x5d\x29\xd2\x69\x3d\x78\xce\x22\xbe\xc0\x7c\x00\xf9\x8a\x9a\x98\x71\x2c\x2f\x0e\x67\xed\xfe\xc4\x1d\x41\x37\x27\x1a\x21\xb2\x2e\x12\x3e\x25\xcb\xc9\x54\xff\x66\xbb\x23\x37\xd4\xb7\xca\xcc\xa4\x48\x98\xa3\x86\x60\x41\x83\x32\x32\xd9\x36\xac\xb3\xe3\x0e\x9a\xbe\xa7\x02\x1e\xcf\x04\xc2\x20\x01\x38\x28\x25\xce\xd9\xa4\xdb\x95\xc2\x9e\x58\x54\x8d\xc1\xca\x91\x3f\x48\x09\x38\x32\xd4\x20\x6c\xb4\xb2\xf3\x25\x59\xeb\xdc\xb8\x2c\x1f\x5d\xa2\x69\xb4\xd3\xcb\x96\x68\x1a\x0d\xf5\xa8\x2f\x16\xa3\x3c\xd3\x28\x57\x44\x89\x1b\x73\x5a\xba\xb7\xc8\x6d\xb3\xb7\xb0\x76\xbb\xb7\x9c\x96\x61\x03\xf6\xb6\x21\xdc\x66\x16\x33\xda\x10\x6e\x98\x85\xc1\x3e\x1e\x5f\x58\x73\xd9\xe5\xf4\xae\x55\xb0\xbd\x1f\xf0\x7c\xdc\xcf\x4a\x0d\x9b\xcb\x2c\x66\x74\x0f\x24\xe9\xb9\xf6\x93\x05\x41\xd9\xbe\x51\x62\x6d\xf6\x50\x0d\xbb\xe1\x1c\xef\xae\xfd\xa4\x5c\xb9\xf2\x44\x9d\x65\xac\x59\x9e\x48\x5f\x91\x7e\x9e\x3c\x51\x08\x6f\xfa\x05\xe4\x89\x91\x58\xa7\x9f\x29\x4f\xec\x17\x92\x27\x26\x45\xe1\x1e\x15\x85\xeb\xdc\xe4\xe4\x0a\xdd\xf4\x3a\x0b\x22\x64\x58\xeb\xc2\xae\x76\xa4\xc3\xb3\xb0\x99\x62\x2f\x5e\x43\x91\xcc\x6c\x21\x0c\x11\x03\xb8\xa9\x8e\x8e\x16\x92\xd5\xe2\x44\x7a\xec\xa2\xf0\x4f\x95\xae\xf5\x84\x74\x2d\x4f\x6e\x36\x62\xec\xe3\x8d\xc9\xb2\x6e\x40\x46\xa4\x8f\x8e\x6a\x4c\xe6\x11\x43\x9a\xc1\x64\x59\x37\xab\x7a\x01\x1c\xac\xc1\x4f\xc2\xee\x6d\x64\x30\xad\x9b\x67\x99\xd6\x1d\x5a\xbd\xa3\xa3\x5e\x84\xbd\xef\x3d\xa8\xa1\x19\x1a\xeb\x35\x47\xf9\x56\x66\xbe\x13\xc4\x56\x66\x6d\x78\x88\xd0\x4c\xaa\x71\xd4\xd2\x19\xe5\x4a\xb3\x60\x61\xfc\xd2\x5f\xf4\x4e\x37\x41\x1c\xfc\xb3\x77\x6f\x67\x3d\xfa\x5a\x65\x53\x28\xd9\x81\x0f\x50\x21\x73\x8d\x0f\x9f\x55\x61\x6b\x27\x92\x93\x55\x32\x67\xca\xce\x88\x71\x19\x12\x76\x5b\x0c\x92\x9d\xd7\x02\x52\xd4\xdc\x2e\x48\x13\x14\x27\x5f\xfa\x46\xc2\xa3\xa3\xcd\x3d\x2d\x4c\x6e\xb8\x85\x09\x09\xb8\xa9\xc0\x4d\x64\x2a\xb0\x10\xfe\x87\x12\x5e\x69\xa2\xde\x72\xd4\x7e\xc6\xfa\x55\xe0\x03\x74\x57\x6d\xd5\x0d\x43\x37\x49\x20\xbb\x51\x02\x0e\x7c\xfa\x59\xf6\x7d\xdc\x6f\xf3\x4f\x56\xa1\x9e\x2a\x2a\x98\xa1\x82\x90\x5f\x04\xa1\xa4\xac\x2a\xe2\xbe\xfe\xc5\x54\xa6\x5c\xd2\x32\x45\xbe\xcc\x9d\x3c\xb1\xa6\xad\xe3\x46\xdd\x4e\xf2\x10\xf5\xef\xd4\xc0\x41\x32\x13\x05\x45\xea\x8d\x63\xa4\xc2\x11\x96\xc6\x70\xc5\xbe\xc0\x15\x77\x22\x5c\x71\x27\x0b\x1a\x7d\x83\x6e\x7b\x48\x4f\x01\x16\x2f\x58\xfc\xa4\xfb\x62\xa3\x2d\x39\x28\x4e\xd9\x0a\xaa\x31\x89\x87\xb6\x63\xed\xa4\x40\xfc\x3b\x16\xab\xce\x2e\x65\x35\xca\x8d\x2d\xb8\x82\xc1\x9c\x4f\x0d\xd1\xd2\x9c\x1e\x1d\xdd\x6a\xb8\xf5\x4c\x5e\xd2\x18\xf5\xc8\xf2\x79\x30\xbc\x17\x18\x0c\xef\x6f\x22\x18\xde\x6e\x72\x6f\x68\xfa\x6f\xd6\x02\x71\xdd\xea\xf4\xdf\xa4\xa7\x3f\x85\xeb\xee\xda\xc9\x2c\xe2\x30\x38\x50\xbc\xf5\xa4\xac\x13\x6e\x64\xeb\x84\xb6\xe4\x80\x19\xed\x13\xe8\x33\x8d\x74\x63\x60\x2d\x7d\x0d\x60\x2f\x62\x30\x1d\xdd\xfd\x4d\x43\x78\x27\x91\x69\x99\xe8\xb5\x18\x68\xc6\x59\xd5\xba\x30\xbe\xab\x6b\x81\x66\x03\x06\xfe\x8a\xdc\xe0\xa4\x68\x17\xe4\x52\x0f\xd1\x3b\xe7\x21\x7a\xe7\x04\x9e\x71\x8a\xff\xdc\xb0\xfc\x33\x95\x57\x94\x6f\xdb\x04\x53\x37\x47\x26\xae\xd9\x49\x43\xbd\xe2\x78\x24\xd4\x6c\x30\x37\x76\x4c\x0c\x17\x0b\x93\x9a\x4d\xb9\xb0\xc2\xd7\xd6\x3b\x68\xfa\xd8\xcb\x76\xcf\x53\x08\x48\xa6\x45\x83\xa1\xaa\x23\xa7\x5c\x47\x57\xae\xc9\xe2\x27\xe8\xf8\xda\x19\x99\x47\x7c\x6d\xf0\xed\x6e\x83\x04\x0e\x0a\xef\x7a\x5b\x41\x62\x8b\xb4\x84\x0b\xa1\x9e\xde\x85\x50\x56\x57\x0c\x48\xa7\x9e\xea\x42\x28\xa3\x06\xa3\x0b\xa1\xde\xfd\x5d\x08\x45\x12\x81\x19\x7b\x10\xfa\x37\x27\x88\x20\x53\x9d\x08\x32\xd5\x95\x30\x51\xbd\xff\x71\x12\x84\x42\x01\x89\x8c\x9c\x7a\x2e\xe8\xc7\xc8\xac\xe7\x82\x7e\x8c\xfc\x7a\x36\x3e\xc9\x28\xf3\xc8\x83\xfb\xf4\x1e\x11\xee\xd3\xbb\x1f\xdc\xa7\xf7\x27\xc0\x7d\x34\x6d\x16\x80\xfb\xfc\x8f\x63\xcf\xf3\xd8\x6a\xbd\xfc\x8b\x08\x36\x77\x4e\x8f\xa4\x98\x0f\x94\x41\x2e\x73\x05\xe4\x32\xb7\xf3\x84\x01\x49\x59\x8a\x47\x65\x29\x1a\x70\x51\x20\x8c\x7a\xf7\xc0\xf9\xe8\xa5\x72\xf1\x6d\xa8\xc1\xf9\x64\x21\x6f\x82\xa2\xa2\x84\xc5\xac\xef\x2d\xf1\x65\x11\x31\xc2\x30\x3e\x2e\x22\x31\xc2\x50\x0f\xbd\x19\x3a\x56\x50\x41\xba\xdc\x71\x9c\x6e\xab\xcd\x18\xa5\x36\x5f\x30\x6d\xca\x2c\xb5\x85\xe7\x50\x42\xb3\x75\x5b\xa5\x2d\x8c\x0e\xe3\xc1\x14\x91\x2c\x00\xcb\xec\xdf\xdd\x0d\xe8\x25\x3b\xd1\x70\xc5\xf2\xd8\x14\x70\x47\xe8\x4c\xf6\x60\x83\xd5\x6a\x80\x3a\xb2\x42\x85\xf9\x9d\xc8\x7c\xae\xdd\x9c\xe4\x30\x78\xed\x98\x63\x6c\xab\x78\x8d\x1b\x4d\x68\x58\x6c\xfc\xde\xd0\x8c\x1b\xdd\x28\xc9\x4d\x31\xa8\x03\xb6\x9c\x42\x3a\x14\x51\x9b\xf5\x65\xe2\x67\xe6\xdc\x24\x0d\xb0\xa3\x61\x95\xbb\x85\x00\x09\x33\x93\x61\x35\x1d\x46\xb7\x5c\xaa\x1b\x3a\xe2\x5b\xbd\x48\x37\x2a\xf2\x1e\xe7\xe7\x45\x87\x1e\x31\x4b\x7c\x23\xe0\x10\x19\xa3\xa0\x0a\xb9\x05\x85\xa4\x14\xe8\xd6\x60\x8f\x6e\xc9\x79\x0d\x68\x90\x9a\x24\x43\x9a\x15\xff\xb4\xd0\x6f\xe0\xbb\xe5\x07\xfe\x89\x69\x0d\x43\xda\xfd\x5a\xfc\x84\x1d\x4c\xcc\xcc\x8c\x0d\xfb\xf1\x46\x0c\xfb\x7b\x10\xeb\xf3\xc6\x09\xa6\x2b\xda\x93\x7a\x7e\x2b\x57\x8d\x17\x38\xcf\x81\xb3\xef\x38\x7f\x07\x76\x0b\x85\x07\x7a\xaf\xa4\x57\xdd\xeb\x1d\xb5\x14\xd2\xaa\xd8\x06\x1a\x4d\xde\x90\x2a\xb3\x46\xc6\xc0\x9a\xc0\x6d\xe9\xf8\x01\xe0\xd0\x24\x3d\x57\x31\xc2\x34\xa2\x7d\x47\xd4\xe4\x0b\x6f\x7d\xed\x20\x66\xdd\x25\xd2\xe0\x42\x68\xd9\xb2\xe8\xc1\xe3\xe8\xed\xd6\xe2\xbb\x9f\xe6\x22\xfc\xc4\x36\xe4\x56\xc9\x00\x9e\x97\x88\x73\xdd\x50\x28\x49\x11\x88\xec\x84\x9d\x8d\x86\x52\x32\x71\xc0\x32\xa2\xa5\x59\x1b\xe5\xb9\x94\x0c\x2f\x36\x74\xf4\x23\x08\xc5\x02\x2c\x46\x43\x8f\x16\x2a\xd5\x65\xa5\xba\x58\x0a\xdd\xec\x15\x2b\xd5\x61\xa5\x3a\x58\x0a\xee\x7c\xa4\x85\x8b\x15\xec\x51\xad\x2d\xe6\x84\x65\xe6\xa2\xb5\x5b\xa3\x47\x9b\xc6\xa5\x56\xac\x8a\x01\x6b\x7b\xc0\xc4\xdd\xb0\x5c\xe3\x62\x7e\x46\xb1\x7e\x9a\x9c\xf1\x69\xfb\xfd\x9d\xe4\x7c\xaf\x58\x17\x80\x6b\x21\x82\x4a\x18\xd2\x4a\x80\xb5\x91\x89\x0f\xb8\xd7\x61\x80\x7d\x18\x54\x41\xe0\xef\x3a\xd6\xa5\x68\x68\x0e\x41\x90\xd0\x8b\x67\x9d\x24\x20\x24\xfd\x72\x42\x07\xd1\x23\x6b\x8c\x12\xb0\x35\xea\x20\xfa\x34\x43\x8a\x02\x59\x53\xc3\x58\x19\x67\xcb\x91\xb1\x9e\xe4\xf1\x0c\x91\xb1\xe3\x08\x03\x1b\x22\x06\x76\xc8\xe5\x7f\x37\x2d\x44\xd9\x56\x5f\x3c\xd9\x3c\xf5\x52\x3e\xd2\xc8\xe6\x89\x95\x4e\xad\x54\x5f\xd8\x9a\xcc\xd7\x0d\x86\xd7\xdd\x5c\xa3\x06\x44\x07\xd6\x4d\x76\x69\x12\x75\x69\x1a\x87\x33\x44\x7c\xed\x96\xe2\x6b\x87\x6a\xe4\x6c\x67\xa8\x86\xce\x8e\x1e\x95\x7c\xad\x2b\xe5\xb1\x52\xad\xd5\x9f\x28\x29\x44\xa9\xa6\x9c\x78\x5f\xbf\xbe\x6e\x5c\x55\xea\xa4\x2e\x0f\x82\xb7\x3f\x52\xdb\x8f\x1e\x47\x6a\xfb\xca\x23\xad\x5f\x49\x21\x4a\x35\x95\xc4\x7b\xa9\x7d\x2e\x46\x5d\x1b\x15\x2d\xca\xca\x85\x8b\x73\x10\x91\x97\xf1\x3c\xc3\x30\x4e\x9d\xdb\x7b\xe8\x5b\xd2\x95\x53\x38\x72\x42\xc1\x72\x2e\x25\x75\xa9\x19\xe6\xad\xa2\x70\xc9\xc1\x17\x33\xd4\x10\xb9\xbd\x4f\x18\x04\xb2\x36\x23\x03\x17\xd5\x18\x4f\x92\x82\xe5\x4d\xc3\x79\x24\xc7\x41\x95\xf5\x80\x5a\x40\x9f\xe5\xeb\x1a\x98\xcb\x4e\xaa\x35\xc0\xf8\x5b\x6c\xc6\x13\x9a\x86\x5b\x45\xd3\xa0\x29\x61\xd0\x33\x6c\x92\x3a\x85\xad\x0c\x07\xe6\xe5\x4b\x64\xd6\x2a\x2d\x67\x23\xcb\x58\xb7\x0d\x9c\x4b\x49\xe0\x6f\x6f\x53\x1a\x9a\x34\xec\x3a\x07\x91\xbb\xd3\xd3\x47\x63\x41\x5d\xa7\x70\xba\x24\x8d\xd0\x55\x86\xbb\x91\x44\xdd\x32\xb6\x4f\x12\xe8\x47\xda\xcb\x8f\xee\xc7\x45\xf8\xaf\x60\x16\x5a\x23\x2b\x42\x64\xd5\x08\xcb\x6c\xc7\x84\x5c\x1a\xcb\x95\x5d\x5b\x04\xea\x1a\x59\xbc\xae\xca\x08\x85\xea\x71\x85\x7a\xa5\x83\x4e\xe5\x50\x2a\x5b\x43\x6b\x4c\x5f\xda\x15\xdd\x11\xfa\xa4\xfa\xfc\x45\xec\x31\x27\xcc\x42\x12\x2f\xd1\x0f\x46\x01\x34\xf1\xe2\x81\xd0\xc4\x79\x70\xe2\x42\xfd\xa9\xa7\xfa\x73\x5f\x48\x71\x3e\xa6\x18\xe1\x00\x7f\x00\xac\x18\x86\xbd\x78\x5c\x68\x71\x2e\xb6\x58\xee\xc2\xa3\xe1\x8b\x69\xc0\x0e\xc5\xaf\x94\x76\xb3\xcf\x85\xfe\xc1\xc8\xd6\xc5\x3b\xc3\x9a\xec\x81\x9a\xb5\x19\xef\xe7\xd1\xfb\xc5\x8f\x78\xbf\x24\xd4\x74\x45\x4a\x05\xd0\xa5\x0f\xb0\x39\xd5\x03\x59\x9b\xfd\x1f\x3a\x2c\x6c\xb2\x83\xa9\x73\x8d\x39\xaf\x60\x0f\x30\x35\x78\xd8\x34\xf0\x9f\x4a\x74\x00\x7d\x5f\xa7\xa9\x95\x7a\x23\x4a\x6a\x1a\xcf\xaf\xf6\xb7\x9d\x7c\x0a\xae\x35\x71\x04\x12\x34\x0a\xc4\x75\xb1\x92\x19\x5d\x85\x16\xc8\x82\xae\xe6\xf2\xbb\x3d\xa6\xd0\xeb\xb3\x3f\x83\x1c\xe0\xea\x50\xc3\xd9\x8e\x34\x69\x63\x23\x6e\x55\xcf\x24\x20\x6e\x35\x74\xae\xae\xc9\x94\x82\x57\x6f\x50\xd5\xc8\xdd\x5b\x18\x78\xec\xc5\x9f\x8d\x56\xe5\xee\x36\x74\x4c\x3b\x22\x01\x62\xa6\x5d\xf5\xd0\xe4\xa8\x3b\x3a\x3e\x2b\x4a\x06\x02\x32\x49\x31\x1c\xf0\x1f\x95\x1a\xbc\x77\xd3\xe7\x3f\x87\x32\xa9\xde\x76\x64\x2e\xea\xfe\x4d\x32\x63\xa5\x92\xf6\xce\xd9\xc9\x82\x87\xc5\xa3\x2b\xd1\x8c\xf1\x39\xb2\x95\x68\xc6\xf0\x1c\xd9\x21\x11\x8d\xc8\xd8\x6c\xf4\xae\x51\xe9\x36\x75\xdb\xf7\xd2\x80\x19\xa1\xbb\x66\x44\xed\xfe\x60\xda\x4c\x0c\xae\x51\x0b\x99\x0d\xdd\x35\xa2\x4d\xff\x77\x43\x77\x91\x17\xb8\x6c\x9b\x0b\x1a\x1d\x2a\x98\x71\xbb\x46\xed\xb1\x64\x5a\xbe\xb7\x83\x8b\xff\x65\x51\x44\x32\x95\x75\x49\xbd\xa0\x47\xf5\x82\xf7\x0f\x70\xa9\x9c\x9f\x09\xdc\xad\x67\x92\x59\xf9\x56\x4c\xcd\x79\x09\x99\xd5\xd0\xfe\x7a\x1b\x29\xd1\x6e\x25\xf0\xed\x0d\xa2\xb2\x62\xf0\xed\x4c\x7a\xec\x99\xa4\x5b\xa7\x14\xca\xaa\x91\x51\xf1\x48\x76\x06\xd9\xd7\x84\xac\x11\xa1\x7a\x6e\x94\x7d\x85\x34\x03\x22\x05\x7d\x0d\xfe\x76\x6d\x80\xdb\x6e\xa3\x70\x78\xf0\x91\x92\x70\xdb\x65\xec\x0d\x68\x58\x30\x36\xc5\x8a\x51\x72\x17\xcd\x95\x88\x4d\x71\x81\x8e\x21\x97\xf6\xea\xea\xe2\xda\x59\xc2\x3f\xa9\xd8\x14\x98\x18\xc7\xa6\xc0\xa7\x1d\x8d\x29\x31\x44\xf1\x95\x80\xfa\x0e\x1f\x10\xea\xeb\x93\xb5\x4d\xfc\xe6\xfa\x1b\x02\x4a\x70\xe9\x41\x41\xb9\x93\x1a\x8c\x73\x78\x6d\x93\x6c\x2b\xdd\x42\xf2\x26\x51\xa9\x2c\x5a\x7a\xe5\x5c\x2a\xa2\xa5\x97\xc5\xb1\xbc\x39\x59\xb7\xc5\xb3\x4a\xa0\xdc\x9c\x9c\x4a\x18\x80\x9c\xbc\x6a\x48\x86\xa9\x14\x05\xe0\x0c\xc6\x9d\x17\x05\x60\x18\x47\x01\x18\x69\xa2\x00\x8c\x92\x51\x00\xf2\xb6\x99\x6c\xfa\xb9\x7f\x14\x80\x91\x14\x05\xe0\x32\x47\xae\x37\x8a\xe5\x7a\x71\x31\xf4\xc0\xfb\xea\x9e\xb8\xe5\x33\x81\x5b\x5e\xa0\x87\xcc\x68\x0e\xc5\xd8\xcf\x13\x8e\xde\x47\xb1\xcb\xcb\x91\xce\xd1\xfb\x5a\x76\xf4\x7e\x99\xe7\xe8\x7d\x40\x3d\xa4\x6a\xda\x64\x28\x8c\xe4\x29\xa3\xb3\xf1\x1c\x17\x71\xad\x3e\x94\x5d\xab\x0b\x37\xea\xaf\x9d\x57\xd9\x78\xec\x8c\x43\x26\x81\xc7\x7e\xad\x01\x63\xb3\xfb\xe0\xde\xbe\x9d\xcf\x28\x80\x79\xa8\x20\x68\xcf\x11\x41\xfb\xea\x01\x9d\x3b\x9b\xeb\x4a\x8f\x07\xa1\xb9\xb3\x6f\xf0\xf4\x7c\x8e\x88\x60\x75\x3c\x67\xe9\xf1\x6c\x33\xfb\xd0\xb3\x53\x1e\x90\x33\x5c\x05\x7b\x79\xae\x82\x27\xe8\x2a\x58\xf3\x95\xbf\xc1\x4f\x70\xae\x97\x60\x4f\xf1\x12\xec\x1b\xbc\x04\xc7\x3e\x82\x7b\x8a\x8f\xe0\x88\xb0\x82\x3b\xd0\x62\x0f\x8e\xe3\x30\x6f\xc0\x3d\xe1\xda\x0f\x52\x98\x0b\x60\x3f\x76\x01\x4c\x1b\x42\xe7\xc3\xcc\x99\x8b\xde\x05\xb0\x4f\x81\xa7\xbd\xd8\x05\xf0\x38\xe5\x02\x98\x50\x81\x9a\xd4\x25\x2a\x84\x6c\x32\x3f\xc0\x09\x0c\xae\x1f\xf9\xd1\xb5\x9b\x03\xb3\x17\x5d\xe9\x48\xf1\x84\x17\xdd\x91\xde\x8b\xee\xe9\x03\x7b\xd1\x0d\x85\x17\xdd\x09\xf5\xa2\x3b\xd0\x7b\xd1\xcd\x58\x71\x49\x2f\xba\x9b\xaa\x14\x7f\x14\x31\xe2\x5a\xaf\xba\xfd\x6f\x73\xe2\x5d\xf4\x5c\xe2\x74\xcf\xdd\x9d\x89\x5a\x3b\x90\x1b\xa8\x93\xcb\x24\x05\xc4\x26\x47\x16\x27\x88\xec\x4c\x8a\x8d\xa0\xef\xfd\x89\xc2\x8d\xe2\x09\x7c\x89\x42\x86\xf4\x4e\xf7\x8d\xf3\x74\xa1\x11\x00\x03\x8f\x6b\xf0\xe2\x14\x8f\xaf\x46\xb9\x05\x79\xbc\x0f\xd0\x75\x5f\x76\x62\xbe\xf9\x46\x67\xc9\x9a\x31\xe4\x39\x4b\x5e\xea\x9d\x25\xfb\xaa\xab\xe2\x5b\xa3\x64\x32\xed\xa9\xd8\x97\xbc\xf3\x7a\x77\x77\x7a\x2e\xea\x1b\x3d\xf5\x1a\xbc\xf2\x0e\x75\xc6\x12\xa3\x84\x57\xde\x7f\xa4\x8c\x25\xfe\x51\xdb\x49\xd8\x9c\x84\x14\x32\x0a\x19\xcc\x9d\xf3\x52\x0b\x09\xc9\x35\x6f\x5d\xb8\xe6\xfd\xba\x23\x2b\x96\x69\xcd\xfe\x6c\xee\xe7\x55\x77\x4b\xcd\x29\xf6\xf0\x9c\x3b\x4f\x79\xce\x1d\x3e\x80\x39\xc4\x43\xfb\xd5\xe5\x9a\x75\x9d\x30\x75\x23\x09\x53\xef\xe5\x14\x56\xb5\x88\xf0\x35\x16\x11\x7e\x96\x45\xc4\x50\x6f\x11\x71\x0f\xdf\xaf\x43\xd5\x22\x22\xa3\x06\xa3\x45\xc4\xf0\xbe\x16\x11\x71\x04\x67\x67\x03\x0f\x48\x8c\x3a\x1d\xf8\x11\x79\x95\xf5\x23\x47\xb2\x7e\xe4\x48\xd6\x4f\x3b\x92\x1d\x40\xa2\x30\x95\x18\xc2\xef\x5c\x29\xaf\x8f\x6d\xdf\x57\xca\x6b\x14\x52\x66\x4b\x79\x8d\xe2\xda\x7c\x47\xae\xf7\xb7\x93\xc8\x74\xd5\x90\x89\xf0\x36\x4a\x01\x8b\x38\x81\x35\x5a\xe3\x67\x1b\x59\x18\x1d\xe5\xe6\x19\x59\x0c\x1f\xd1\xc8\x62\x78\x3f\x23\x8b\xe1\x9f\x60\x64\xa1\x69\xb3\x80\x91\x85\x4e\x0c\x6e\x96\xa4\xd2\x57\x64\x94\x27\x49\xe5\x19\x20\x63\xbe\x24\x55\xe4\x21\xa3\x4c\x49\xea\xa8\x90\x24\x35\xa9\x74\xf0\xa8\xd2\x21\xc3\xa7\xea\x98\x52\xac\xfc\x67\x01\x13\x8e\x6d\x7a\xba\xb6\x8e\x4b\x84\x74\x74\xab\x98\xf6\x6d\x15\xa3\x8d\xed\x1e\x16\x16\x06\x4b\x91\x4c\x4f\xaa\x7b\x7a\x86\x35\x38\x6b\x15\x9e\x61\xfd\xa4\x63\xd8\x2c\x1b\x0e\xdf\xe4\x3d\x15\x8f\x5a\x49\x30\x1d\xf6\x46\xbe\xce\x15\x04\x0b\xd2\x95\x21\xbf\xb6\x92\x55\xc8\xd1\x65\xab\x86\x91\xe3\xa5\xa6\xf1\x3c\x6e\xde\x4d\xca\x89\x45\xbd\x50\x89\x8b\x1a\xb5\xfc\x78\xe7\x92\xb6\x83\x17\x4c\x30\xf9\xde\x07\x16\x21\x9c\x07\xad\xd2\xb1\xef\xd6\x8e\x7d\xf8\x10\xed\xef\x8e\xff\x76\xfc\xf7\x12\xef\xd6\x7f\x7d\xdf\x7b\x76\x40\x61\x16\x4e\x89\x2d\xd9\x83\xbf\xfc\x57\xb9\x5d\xfe\xaf\xd2\xc9\x7f\x95\xb9\xc0\xb6\x5c\xfa\xfe\x69\xef\xd9\xc9\xf7\x0b\x3c\x61\xe0\xcf\x0c\xfe\x6f\x9f\x60\xf5\x8d\xef\x9f\xc2\x2f\x7c\x2a\x95\xb9\x49\x60\x92\xd3\xc4\x6c\x36\xd6\x80\x19\x9f\xd2\xb2\xac\x3c\xed\x57\x81\x0a\x68\x3e\x6d\x0d\xc8\x9a\xe7\x97\xc7\x5c\xda\xe2\xa3\x70\x5d\xa0\x79\xc8\xa5\x96\x7e\xca\xa6\xa1\xb4\x53\x95\x19\x9c\x1c\x30\x61\x6e\xff\x43\x02\xdd\x4e\xe2\x5b\x5a\x6f\xe8\x33\x71\xda\x15\x9f\xf9\xd8\xf5\xf9\x11\x15\xe6\x9a\xef\x84\x8c\x14\x9c\x3a\x61\x4a\xd8\xcd\xfa\xa6\x58\xec\xdc\x38\xd6\x74\x0f\xc9\x76\x54\x83\x2c\xc5\x9e\xaa\x76\x3a\xd3\x1c\x81\xa6\x1f\x4b\x48\x7d\xd5\x4e\x27\x61\xd3\xa2\x70\xb8\x66\x38\x1f\x5a\x48\xa7\x4d\x59\xb4\x42\x69\x51\x1b\x6a\x5d\xe6\x31\x38\xb2\x3f\xf3\x47\x59\x01\x05\x0d\x82\xf0\xca\x7c\x3b\xf6\xc2\x51\xd4\xd0\xac\x44\x5e\x40\x67\x8a\x78\x24\x64\xb1\xba\xcd\x35\x2b\x45\xdb\x18\xba\xb0\xfa\xec\x98\x06\x1c\xe5\x49\x1b\x48\xfa\x7b\x09\x0d\x53\xc2\x2c\xf8\xdd\x98\xaf\xc7\x18\x55\xc7\x19\x8d\x30\x03\x23\xa7\x16\x5a\x2e\xe4\x32\x5a\x68\x97\x28\xc0\x20\x5d\x98\xc4\x23\xe0\xcc\xd8\x67\xb3\x9b\x18\x26\x6b\xd4\x82\x6d\xb4\xb7\x10\xc0\x6e\x58\x06\x29\x8b\x8f\x44\xfa\xcc\x1c\x19\x94\xcb\x04\xf0\x6e\xc8\x6b\xb5\xbe\x43\x67\x16\x8a\xec\xe0\x6b\x14\xcd\xd7\x2f\x24\x7a\xd8\xe5\x02\xe0\x60\xcd\x89\x89\x12\x22\x12\xe6\x60\x7a\x28\x8e\xef\x68\xba\xee\x31\x4f\xdf\xdc\x7d\xbc\x2f\x67\xb1\x20\x89\x19\x30\x71\x59\x52\xce\x14\x43\xb9\x24\x64\x76\x16\x9d\x09\xc9\xdd\x55\xc4\x9b\x64\xf7\x5e\xde\x24\x45\x29\xa9\x71\xc5\xcd\xa7\x4d\xb8\x77\xa5\x05\x8a\x95\x67\x89\x33\x97\x5f\xeb\xc4\x4f\x9e\xb0\x89\xca\x9a\x8b\xd9\x16\xbf\xa5\x07\x57\xeb\x24\x44\x21\x22\xa3\xd4\xc6\xd3\x25\xd0\xc5\x3f\x42\x9e\xf7\x54\xaa\x07\x93\x50\x3b\x71\x3c\x7b\xd1\x9b\x85\xeb\x03\x1a\xa3\x01\x88\x6a\x9f\x72\xe4\x6d\xfb\xab\xe7\xc8\x22\xf8\xd3\xe9\x74\x16\x6e\xb0\x30\xd3\x1e\xfb\xf6\x6e\xc1\x64\xc0\x5e\x19\x45\x9c\x4d\x11\xb6\x6f\xe9\x20\x64\xaa\x46\xd6\x38\x84\xc9\xc9\xea\xe8\x68\xf9\xfd\x82\xcb\x11\x9b\xf6\xfa\x6a\x79\xed\x2c\xe0\x1f\xb2\x2a\xe3\xdf\x72\xf9\x9a\x96\x44\x89\x33\xe2\x2f\x97\x0e\x86\xdb\x39\x99\x40\xa9\x93\x7a\x13\x19\x96\xab\x6b\xb2\xac\x54\xa2\xea\x37\x4e\xad\xb9\x89\x2b\xdc\x94\xcb\xf6\xe2\x6a\x73\x7d\x62\xad\xaf\x36\xff\xb9\xa4\xee\x21\x31\x5c\x0d\x7d\x70\xf0\x0d\x54\xe7\xac\xe1\xb3\xb7\x97\x7e\x60\x10\xd0\x23\x00\x72\x27\x1a\xd8\x62\x8b\xb7\x30\x80\x53\x68\x69\x79\x72\xdb\xbc\x85\x26\xb6\x57\xb7\xd7\xce\x29\x39\x2d\x3b\x6b\xf8\xd5\x9c\xdd\xc3\xf9\xf1\xf6\xca\x83\x2e\xd1\x4b\xc5\x7a\x51\x3e\xae\x3d\x91\x50\x78\xde\xd3\xa5\xcd\x5d\xa6\x90\x41\xeb\x26\xe7\x7a\xb2\xda\xe2\xb2\xad\xac\xec\xc4\x2d\xd5\xc8\x2e\x5c\x53\x32\x93\xc0\x61\x0f\x3e\x67\x19\xa2\x6e\xf9\x41\x7f\x64\x89\x49\x86\xce\xed\x80\x70\x08\xe8\xf2\x3b\x23\xe7\xce\x0b\x72\x01\xff\x5f\xc2\xfc\x64\x4d\x04\x5b\xae\x6e\xce\x62\xcd\x59\xa1\xe5\xbe\xa0\x4a\xcf\x9c\x0b\xd2\xfe\x9e\x5f\xcd\x7c\xfc\xe5\xb3\xb2\x0b\x5f\xfb\xc2\x39\x83\xfe\x9c\x97\x9d\x63\xa0\x4f\x2f\xca\x40\x74\x5f\x9c\x5c\x42\xfa\xa5\x73\x61\xa7\x55\x95\xa5\xf2\x39\x9f\xea\x3d\x26\xfa\x32\x39\xd1\xe9\xb9\x3b\x2f\xd7\x5f\xec\x76\x11\x3a\xd3\xc9\x8c\x8e\x5e\x03\xce\x88\x5a\x21\x06\xd0\x69\xd2\xd1\x03\x26\xd1\x94\x97\x4a\x49\xb5\x72\xc9\x1e\xca\x1f\xfb\xce\xf1\xdf\xc9\x00\x7f\x0d\xf1\x9f\x11\x3d\x67\x55\xb1\xa3\xa2\x1b\x48\x49\xc0\x4b\x89\xeb\x37\x91\x42\x51\x92\xb2\xe0\x52\xe7\x91\x73\xfc\xe8\x50\x40\x23\xd6\x2b\x5b\x48\x64\xc4\x7a\xa1\x94\x70\x5f\xa0\x97\x8b\x4c\xe6\xde\x58\xc5\x98\x3f\xdd\x1b\xed\x35\x65\xa2\xde\xbd\x71\x8e\x52\xf4\xb2\xbd\x21\x7e\x33\xb7\xdd\x0f\xcf\x96\xb0\x54\x27\x1f\x60\x63\xee\x8d\xf5\xcb\x96\x8d\xe8\xa0\x7e\x66\xd9\x08\x7d\x45\xfc\x3c\xd9\x88\x60\x3c\xfc\x02\xb2\x11\x91\x87\xf8\x99\xb2\x11\xbf\x90\x6c\x24\x89\x99\x83\x73\xbf\xfb\x2d\x28\x33\x64\xb1\x8b\x98\x42\xde\xc4\x60\xbf\x08\x43\xb6\x94\xfc\x39\xde\xe8\x79\xb5\x1b\xa7\x5b\xe9\x30\x5e\xad\xc3\xa7\x6c\xe6\xf4\xe0\x37\xc6\x43\xe9\x88\x89\x59\xe5\xb2\x6f\xab\x0c\x87\x85\xc0\xe8\xcc\xef\xee\x7c\xb2\x70\x16\x77\x77\x6d\x8e\x57\x5b\x19\x31\x4d\x72\x50\x76\xca\xec\x6d\xe0\xaa\xde\x1f\xc5\xc4\x5d\xfb\xa1\x77\xbc\x84\xa5\xdc\xad\x94\x84\x8c\xe0\x69\x04\xb0\x62\x70\xa6\xdb\x82\x91\x38\x72\xf2\xcd\x7d\xaa\x0c\xe1\xb8\xa3\x75\xce\xb5\xd2\x89\xd9\xcb\x8e\x74\x9f\xa4\x9c\xfe\xcd\x04\x80\x6f\xad\xe0\x1b\x94\xc6\x9a\x67\x91\xdf\xbe\x6d\xbe\x2d\x5d\xd0\xee\x06\x39\x4e\xfb\xd6\x8a\x29\x5d\xba\x80\xc1\x92\xee\x26\x69\x1b\x31\x3b\xa9\xb5\x66\x18\xcf\xe5\x34\x6d\x4f\x17\xc6\xf6\x74\xba\x06\x98\x39\x1d\xda\x06\xde\xab\x20\x9d\xb4\xf3\xc4\xa4\x3d\x4e\x00\x94\xf3\x7b\x07\x40\x51\x39\x78\x6d\x13\x2c\x0b\xa5\xb6\xef\xee\xfa\xbb\xcc\xd8\x29\xe7\x29\xf6\xe6\x3c\xdf\x1f\x04\xb0\xad\x9c\x99\xba\xbb\x2b\x09\xbb\xa0\x6f\x0f\x73\x52\x80\x8d\x1a\xec\xc3\x3d\x89\xcc\x30\xa4\xa4\x0d\xd0\x92\x50\x87\x1c\xf7\x8f\x9b\xa2\x1d\x07\x66\xf9\xc4\x72\xdc\xdd\x55\x5f\xec\x44\x48\x9d\x73\x79\xf1\xe0\x82\xa4\x40\x23\xa0\x60\x32\xd6\x0f\xfe\x6e\x5d\xb9\xd7\x8d\xab\x6b\x6d\xc0\x9c\xa9\xbc\x4d\xa5\x13\x85\x57\xcb\x65\x29\x2a\x22\x49\xd0\x44\xcf\x10\x37\x57\xc5\x9c\x34\x6a\x36\x54\x3c\x0d\xe9\x11\x33\xb5\xab\x1c\x26\x80\xf6\xe7\x9b\x04\x16\xc0\x68\xa7\x34\xb7\x86\xdc\xc8\x13\xbe\xcc\xb6\x56\xb4\xd8\xc2\x1a\x49\xc5\xea\x96\x46\x32\x6e\xa9\x9e\x2d\x9d\x5a\xab\xad\x44\x79\x82\x84\x5a\x43\x49\x6a\x28\x25\xa8\xe9\xd5\x74\x3a\xda\xd2\x2b\x89\x5c\x79\x91\x9d\xf5\x4e\x5a\xfb\xe6\xaf\x23\xc5\xfa\x31\x2e\x21\xcc\x8a\x87\xe6\xfc\x31\xa6\xbd\x9d\x31\x7f\x3e\x9d\xf6\xf6\xbe\xd3\xde\xce\x9d\xf6\xf6\x63\x4e\x3b\xc7\x2b\x6b\xf7\x84\x7c\xad\xa7\xf7\xc4\x95\x40\x57\x5f\x33\x53\xe6\x82\x3b\x42\x71\xde\x09\x9f\x86\x7f\x07\x06\xfc\x78\xf8\xe5\x7f\x9f\xd5\xaf\x33\x53\x8c\xd6\x17\xfe\x9b\x5a\x5f\xf7\x1a\x44\xf1\xc5\x74\x9f\xb5\x84\x34\x9c\x2f\xc2\x6a\x2c\x9c\x76\xec\x86\x67\x29\x63\x80\xb0\xcb\xf9\xee\x4e\x39\xad\x42\x5d\x9d\xe6\x59\x29\x76\x69\x70\x8d\x1e\x0d\xae\xd1\x77\xea\xd5\x17\x14\xe8\xa3\x65\x7d\x87\x46\xd3\xc3\x91\xd1\xf4\x70\xec\x68\x71\xbd\xfd\x39\x4c\x03\x0c\x9f\x3a\x1e\x3a\x3a\xe2\xb1\xfe\xd9\xb3\xd1\x92\x11\x37\xff\x4e\x78\x4c\x2d\x31\x8b\x48\xa0\x81\xa8\xfb\x9f\x84\xdb\x54\xbd\x9d\x62\xb6\x55\xa2\x04\x06\x6a\x06\x0c\xec\x49\xd1\xae\xe8\xf1\x98\x3e\x31\xc3\x28\xeb\xaa\xfe\x1d\x39\x7e\xf1\x1d\x77\x5a\x31\x27\x0b\xb2\x34\x38\x1c\xbd\xd1\xb1\xed\x33\xe6\x56\x06\x3f\x90\x13\x18\x9c\x77\x26\x21\x85\x30\x09\x8a\x91\xb6\x7c\x3e\x44\x6e\x60\xf2\xbc\x89\xaa\x24\x84\x54\x65\x8c\xf2\xb9\x4f\xb5\x09\x20\xe5\x2c\x69\x20\x6f\xac\xf4\xb1\xa5\x17\x3a\xe3\xaa\x02\xd2\x0b\xa3\x4c\x81\x1f\x0c\x7b\x1b\x0a\x4a\xe7\xcb\xde\xd8\x98\x3c\x33\x37\x23\x1e\x27\x5b\x22\xa0\x93\xb6\x98\x25\x02\xf4\x15\xe9\xe4\x49\x04\x04\x7b\xdb\x29\x20\x11\x88\x18\xdf\x4e\xa6\x44\xa0\x53\xd4\x25\xa5\x1e\x22\x44\x04\xa7\x7e\xa3\xb8\xa4\xbc\x41\x98\x41\x7f\x7e\x0a\xeb\x68\x2f\x78\x94\xe2\x22\x2a\xcb\x66\x54\x2f\xe7\x81\x2e\x6c\x58\x41\xa3\x14\x4c\x2f\xe0\x81\x82\x5b\x56\x30\x53\x30\x92\x94\x68\x79\x54\xa2\x95\xe1\x2b\x73\xf0\x20\x0e\x2d\xf1\x1c\x2e\x1c\x14\x63\x10\x23\x50\x22\x21\xca\x56\x12\xa2\x4c\x8f\x8e\xb6\xaa\x5d\xde\x56\xb2\xcb\x1b\x24\x44\x2c\x03\x26\x62\x49\x09\x4f\xc8\x56\x6f\x9b\xb7\xca\xb1\xcd\x1b\x93\x15\x19\x66\x19\x0d\x4d\x68\x06\x53\x6c\x0c\xd4\xa6\x6c\x5a\x2b\x11\xf7\xa2\xb1\x32\xd8\xea\x6d\xb2\x42\x63\x2c\x60\x24\xf4\xf2\x3e\x85\xe1\x11\xd1\x0c\x95\xd4\x63\xea\x2d\x9a\xde\x44\x20\x61\xc8\x1d\xa9\xfa\x06\x05\x2d\xfb\x96\xc2\xb2\x6f\xa9\x58\xf6\x2d\x6c\xb4\xd8\x73\x16\x3a\xcb\xbe\x85\x62\xd9\xb7\x88\x2c\xfb\x06\x47\x47\x83\xc8\xb2\x6f\xf0\xa0\x41\x3c\x56\x18\xc4\x63\xf5\x0d\x41\x3c\x38\xa5\x9c\x2d\x05\x53\x0d\xfa\x06\xf7\x36\xe8\x93\xeb\x2a\x66\xc7\xc7\xa5\x39\x9c\x3d\x96\x7c\x4b\xe6\xd9\xcf\x3d\x8e\xad\x1f\x0e\xe0\xd1\x8d\xfd\x5e\xe9\xa3\xd3\x71\x69\xcc\x59\x52\x96\x75\x7e\x52\x6b\x9d\xa3\x2c\x2b\xa4\xc6\x4b\xc5\x8d\x04\x07\x91\xd1\x11\x19\x32\x23\xc1\x9e\x6c\x24\x48\xd3\xa4\xa4\xdc\xfd\xfe\x6d\x46\x82\xc3\x3d\x8c\x04\x87\xb1\x8c\x32\x2e\x86\xc6\x5b\xdf\x6c\x24\x38\x57\x0c\x2d\x4d\x46\x82\xc3\xd8\xa2\x67\xa8\x33\x12\x5c\x45\x46\x82\x7e\x01\x23\xc1\xbe\x1d\xcb\x57\x35\x46\x82\xc9\x03\x4b\xa7\xba\x1f\x15\x31\x12\x1c\x14\x31\x12\x94\x56\xb8\x58\x26\x7b\x58\x09\x0a\x69\x2f\xda\xab\xde\x37\xb2\x09\x33\x0c\x1c\x3c\xa4\x61\x60\x7b\x0f\xc3\x40\x6e\xdb\xf8\x2d\xc6\x8d\xdc\x16\x70\xb0\x8f\x2d\x60\x64\x82\xd8\x53\x79\x08\xc5\x2c\x43\x21\x44\x39\x22\xc0\xc7\x5b\xc9\xb5\x17\x57\xfe\xb5\xe3\xc2\x3f\x68\xe7\x2d\x01\x59\x16\xf1\xe5\xa8\x33\xcd\xca\xb0\x2e\x04\x96\x3c\x30\x5a\x17\xf6\xc8\x98\x59\x17\xc2\x05\xa7\x59\x20\xf7\x37\x30\xec\x90\x2e\x65\x24\x34\x26\x86\x1d\x61\x62\xe8\x2b\x26\x86\x1e\x33\x31\x0c\x92\x26\x86\x18\x34\x53\x18\x19\xf6\x1d\x51\xf8\xaa\x27\x19\x19\xf6\xd3\x46\x86\x7d\xc9\xc8\x70\x0c\x29\x63\xc7\x8b\x8d\x0c\x59\x30\x8b\x3e\xc6\x7d\x51\x8d\x0c\x3b\x92\x91\x21\x8b\x6e\x81\x99\x38\x1d\x0a\xcb\x09\xe8\x77\xd9\xc8\x90\x82\x9d\xa0\x02\x76\xbb\x9f\x1c\x33\x52\x23\x84\xa6\xa2\xd8\x5a\xfd\x09\x30\x9a\x0b\xcb\xe7\x06\x83\xe8\xde\x3b\x72\xd0\x24\x65\x93\xdd\x5a\xea\x92\xeb\x14\xa3\x58\xad\x3d\x7b\x32\xa5\x01\x39\x51\x16\x10\xcc\x17\x74\xe6\x68\x5f\xac\x49\x4e\xac\x7f\xe8\x68\x88\x1c\x3a\x97\x3d\xa0\x85\xec\xe4\x6a\x76\x1d\xcf\xb6\x83\xc6\x24\x94\xc5\x77\x12\xb1\x46\x3c\x6e\x1f\xd9\xc3\x88\x4e\x26\xfb\x48\x3e\xc2\x5f\xcb\xd2\xa1\x2a\x46\x5d\x1e\xea\xcd\x24\xb7\x7b\x9a\x49\x26\x2d\x7e\x92\x66\x92\x73\xd5\x4c\xb2\x9f\x32\x93\x1c\x9b\xb7\x4e\x52\x06\x21\x7c\x7b\x91\x0e\x6e\x8f\x07\xdd\x1b\x01\xab\xba\xab\xdd\x1d\x41\xe6\xee\xe8\x39\xe2\xfd\x55\x97\x6e\x5a\x9d\xb1\x5e\x4f\xb1\xe1\x73\x44\x32\xdb\x18\xa9\x6d\xd0\x83\x9d\x6a\x8b\xed\x15\xaf\x3d\xcb\xe3\x46\xb6\xf0\xb6\xd9\xe1\x7b\x84\xf6\xa8\xd1\x23\xf4\x2f\x1d\x6d\xa3\x4b\x9d\x6e\x5e\xb5\x49\xff\x9a\x48\xb3\xd0\x08\xe4\x39\x11\xdf\x25\x60\xf8\x3a\x49\xbe\xa2\xf8\xe2\xeb\xe4\x9c\x6c\x49\xe1\x8b\xe6\x5c\xdb\x45\xce\x43\xef\x6b\xde\x28\x48\x7c\xc7\x91\x4c\x15\x23\xb2\x1f\x4f\xc9\x7d\x8d\x1f\x17\x7a\xe3\x47\x4f\x35\x7e\xdc\x26\x05\x9f\x69\x9b\x47\xad\xf4\x93\x1b\x25\xee\x19\xe5\x29\xb2\x73\xec\x9b\xed\x1c\x07\x3a\x3b\xc7\x61\xc2\xce\xf1\x58\x1b\x14\x6a\x64\x12\xaa\x8e\x99\xd1\x62\x64\xee\x78\x58\x43\x63\xc7\x5a\x64\xec\x58\x17\xc6\x8e\xa2\x3c\xbd\x04\x11\x7b\xc0\x4a\x44\xb6\x8f\x8a\xfc\x93\x77\xef\x4b\x2f\x5c\x23\xd1\x10\x9b\x36\x27\x70\x45\x59\x06\x91\x1b\x53\x7c\xa9\x84\x41\x64\x64\x32\x39\x4b\x19\x44\x0e\xbe\x21\x02\x54\x21\x93\x47\x73\x10\xa8\xad\x56\x26\xbb\x26\x1b\x84\x27\x68\x8e\xd2\x94\x3c\xe5\x2b\xf7\xf8\xe4\x9a\xf8\x6a\x05\x26\xbb\xdb\x91\xd3\xcc\x6a\x11\x0e\x22\xae\x67\xaf\xca\xea\x3e\x3a\x72\x35\x80\x5e\xdc\x3c\x32\x84\x57\xe4\xa6\x7b\x67\xb7\x13\x22\xe5\x7b\xc5\xb0\x1a\x44\x26\x97\xd1\x6d\xe5\xe2\xcf\x6f\x0f\x4a\x35\x50\x4d\x30\x25\x81\xf7\x1a\x1e\x28\xf5\x4d\x23\x44\x71\x3b\x88\x9e\x21\x58\x54\xca\x2c\xb2\x2f\x45\x90\x1a\x24\xab\x7d\x5c\x01\xb2\x51\xa2\x9b\x2d\x40\x36\x9a\x56\xe6\xdb\x48\x66\x9a\x57\x66\xda\x48\x66\x5a\x57\x66\xda\x68\x19\xad\x2b\x8b\xd8\x48\x1a\xfd\x9e\x65\xdb\x48\x1a\x4d\x2b\xf3\x6c\x24\x07\x8f\x68\x23\x39\xb8\x9f\x8d\xe4\xe0\x4f\xb0\x91\xd4\xb4\x59\xc0\x46\x52\x27\x96\x36\x4b\xfd\xe9\x2b\x74\x9d\x9f\x2d\xf5\xe7\x19\x20\x63\xbe\xd4\x5f\xe4\x21\xc3\x4c\xa9\xff\xb0\xa8\xd4\x7f\x93\x1e\xd0\xc6\x71\x89\x10\x2d\x6f\x14\xa9\xff\x46\x09\x44\xb5\x51\x6c\x1a\x37\x0f\x17\x88\xaa\x17\x05\xa2\xba\x57\x4c\x2a\xbd\xc5\x72\xc6\x1d\xbb\xbf\xc5\xa4\xc1\x28\x13\x25\x44\x41\xd2\x5a\x12\xc6\x00\xb5\xff\x1c\xce\xc2\x49\xd8\xc7\x84\x07\x53\x19\x7c\x1e\x2d\xe7\xfb\x84\xd3\x5e\xc5\x87\x47\x42\x0b\x00\x6f\xa2\x7c\x6f\x85\xcd\xa3\xe7\x94\xe1\xde\x02\x5a\x1f\xdd\x0e\x38\x5e\xab\xde\xa8\xd4\x49\xdb\xf9\xf5\xe9\x33\x7e\x7f\x96\x3e\x94\xca\xd5\x17\x4f\x7c\x16\x17\xaa\x5c\x3a\xfd\x8e\x7c\x77\x50\x83\xff\x4a\x65\xaf\x5c\x82\x7f\xbf\x8b\xde\x5a\xed\xf2\x77\x76\xb9\xf4\x33\xfc\x3a\x7e\xd2\xae\xe0\xef\x54\xee\x28\x33\xe4\x28\x97\xfe\x05\x95\x1f\xcb\xe5\xff\x2e\x95\xc7\xdf\xf0\xfe\xb9\xf9\xfd\x2e\x1a\xcf\x17\x98\x91\x65\x35\x18\x4f\x17\xc0\x7b\xdc\xdd\x2d\x45\x74\x89\x37\x40\x77\x7a\x5c\x6c\x1d\xbd\x6f\x05\x11\x7f\xdc\x78\x73\x6d\x27\xa6\x29\x9a\x98\xc0\x72\x11\x65\x52\x91\xbd\x4a\x51\x39\xba\x78\xac\x5f\x57\x30\x0f\x86\x65\x30\x59\x11\x54\x79\x78\x50\x45\x82\x5b\x3b\xf1\x5a\xb5\x86\x47\xdd\x70\xeb\x4b\xb1\xa5\x2b\xf9\xc7\xe7\xed\xa4\x2a\xf2\xa1\x22\xf4\x24\x13\xcf\xc4\x8f\x30\x13\x6f\x9c\x78\xac\x48\xf5\x36\xa2\xf9\xc0\x8f\xac\x9d\x07\x29\xc7\xbb\xaa\x37\xa3\x4c\x1b\x4b\x69\xf8\x84\x3e\x37\x96\xb0\xa0\xbf\xd0\x48\xe6\x4c\x54\xf9\x73\x24\xaa\xfc\x45\x88\x2a\x57\x05\x44\x95\xe7\x45\x44\x95\x2b\x59\x54\x79\x74\x44\x1f\x3d\x77\xb6\xa3\xee\xb1\xfe\xf0\xe6\x0f\xa5\xf6\x9b\x6c\x71\xb4\x3d\x45\x92\xd7\x09\xfd\x65\xe4\xa4\x58\x15\x9f\xfe\x4b\x84\x9d\xf9\x97\x81\x40\xa6\x02\x24\x37\x16\x20\xcd\x1b\x91\x1a\x28\x4b\x76\x30\x62\x6e\x44\x20\xe5\xc4\xf1\x61\x69\x62\xf0\x11\x91\xf2\x3d\xa4\xd4\x29\x15\x6c\x37\xae\xbe\xf2\x5a\xaf\xae\x77\xd7\xc8\xca\x19\xbb\x9e\x16\xfd\xfe\x95\x1a\x42\xf3\x79\x68\x29\x35\x35\xfe\x6a\x1a\x0e\xc2\x4f\x1a\x0c\x85\x42\x24\xb0\x62\x43\x81\x2e\x92\xfb\x0d\x7a\x90\x1a\xf4\x40\x37\x68\xd8\x90\x4e\x34\xef\xa3\x48\x70\xd1\x18\xc4\x3a\xb0\x49\x52\xb2\x3b\x89\x24\xbb\x93\x2c\xe9\xf4\xcf\x54\x3a\xbd\x52\x44\xbb\xbf\xa0\x68\x77\x22\x36\xd3\x55\x6c\xa3\x84\x5d\xb4\x89\x64\x4a\x85\x3d\xb4\x21\x29\xf1\x0d\x8c\x8e\xe9\xa2\x9b\xf7\x3d\x97\x10\x4f\x52\xde\xa4\x52\x59\x46\x78\xb9\x66\x67\x19\xa4\x7a\x10\xaf\x82\x7d\xe4\xea\x9d\x94\x5c\x7d\xca\xa7\xb5\x23\xa6\x75\x1a\x4d\xeb\x34\x4b\x60\xfe\x0b\x0a\xcc\xd5\x59\xfd\x19\x67\xf5\x86\xd7\xd7\x15\xf5\xdd\x44\xf5\xdd\xec\x57\x5f\xb4\x1e\x6a\x0d\x56\xb5\x71\x06\xb6\x75\x39\x2e\x79\x42\xf3\x18\x55\x53\x6f\x64\xd6\x71\x9c\x51\xc7\x5f\x23\xa9\xd0\xa1\xba\xc3\xb0\xce\xdc\x28\x8d\xf1\xf5\x23\x94\x56\xc5\x46\x92\xbd\x24\xa6\x45\x07\x93\x5d\xcd\x0d\x13\x05\xff\x94\x6b\xa7\xf1\x13\x3b\x49\x7f\x36\x61\x0c\xb6\xe4\x27\x74\x5b\xfb\x8b\x51\xe7\x78\x4b\x33\x54\xac\xcb\xd6\x6b\xfc\x12\xbf\x3a\xaf\x2b\x1b\x6a\x2c\xb2\xe1\xd4\xb3\x09\x7e\xf0\x53\xce\x10\xb4\x70\x83\x0f\x02\x6e\xf0\x03\x5a\x98\xa4\xe0\x06\xff\xb4\x56\x32\xdc\xe0\x43\x2c\x96\x48\xde\x49\x26\xb8\xc1\x47\x46\x76\xfc\xd6\xfc\x28\xe0\x06\xbf\xa1\x62\xe7\x83\xfd\xf1\xea\xb7\x6b\xe7\x03\xfc\x93\x82\x1b\x60\x62\x0c\x37\xc0\x27\x06\x37\x58\xc1\x85\x19\xad\xb0\xd5\x83\xc2\x0d\x7e\x42\xb8\xc1\x4f\xb9\x70\x03\xfa\x69\xff\xe5\x64\xb4\x7d\x28\x4b\x4e\x5d\x76\xb7\x92\xbf\xe6\x94\xa0\xb9\xe0\x68\x1f\xc9\x4e\x8a\x43\x7e\x42\xa0\x24\x73\x14\x9b\xfa\x74\x9d\x41\xfc\xd0\x73\xc6\xf1\x43\xdf\x19\xaa\xe8\x87\xdf\xf7\xed\x68\x8e\xc6\x64\x6e\x24\x43\xbe\x6e\x1a\xa7\xcc\x66\x7d\xdb\x38\x63\x84\x08\x15\xe1\xba\x5e\xe1\x2e\x1c\x3e\x52\x1f\x9a\xe2\x60\xb9\xaa\x91\x9f\xaf\x29\x47\xc8\xa3\xb5\x45\xa1\xda\xe0\xd7\x38\x98\x41\x96\xdf\x45\x88\x36\xd7\x43\xdf\x9e\x7a\xb0\x6b\x14\xbc\x8d\x55\xc8\xe8\x26\xcf\xf9\x29\x13\x68\xc2\xb9\x9d\x08\x6a\xb2\x82\x9e\xf8\x9e\xe3\x79\xf7\x04\x9b\xc4\xf5\xc9\x70\x93\x36\xad\x51\x06\x9c\xf8\x5e\x71\x30\x07\x1d\x49\xe0\x39\x79\x65\xe8\xf9\x89\x18\xd9\x9c\x7c\x32\x52\x25\x2f\xef\xb6\xbe\x4f\xe6\xe3\x3d\x32\x4b\x5e\xac\xf3\xb2\x4a\x74\x22\x9d\x8b\x4e\xfe\x5c\x50\x31\x0c\xb5\xfe\x87\x13\xaa\xb3\xc7\x84\xe4\xe5\x55\x26\x24\x37\xf3\xf1\x1e\x99\xa5\x09\xc9\xcb\x2a\xa3\x82\x72\xab\x45\x5e\xea\xcc\xf5\x87\x68\x14\x44\xf5\x07\x85\xa6\x83\x16\xc3\x60\x7a\x5c\x05\xe8\x39\x8b\x2a\x35\xf9\x05\x42\xe8\xe7\xa7\xc7\x8d\x9f\x49\x4f\x4e\xea\x7a\x8d\x5a\x73\xc1\x39\xa5\xae\x97\xba\xdb\x35\x68\x20\xd3\x45\x05\x9b\x39\x04\x7e\xb4\x3f\x71\x47\xef\x82\xad\x13\x29\xc7\x95\xe4\x16\x25\xe5\x1b\x4a\x1a\xa1\x69\x6a\xbe\xb2\x45\x8f\xaf\xd6\xa7\xc6\x67\xea\x5d\x95\x5f\xb9\x0b\x54\xbe\x51\x04\xd2\x42\x46\x20\xd1\x34\x29\x29\x9f\x1a\x78\x9d\x3d\xd2\x6c\xd2\xaa\xe7\x51\x31\x43\x65\x1d\x41\x8a\x76\x70\x4c\x64\x97\x59\xc7\x48\xa4\xb8\x58\xb2\x0f\xd1\xea\x17\x94\x20\x0a\xe7\x47\x2e\x50\x82\x97\xad\x12\x12\x44\x7d\x77\x84\xb1\xb0\x42\x6a\x28\x3a\x4e\x31\xb8\xbf\xfe\x91\xfc\xf5\xf0\x8f\x6f\x3e\xc5\x5f\xf7\x53\x0c\x36\x9f\xc2\x3c\x16\x3b\xc9\xed\x0e\x32\x2b\xda\x93\xe1\x85\x3b\xd2\xf4\x5d\xf3\x18\x25\xeb\x17\x58\x1e\xdc\x13\x03\xa5\x52\x6d\xb6\x50\xfa\x3a\xd7\xc0\x63\xec\xb7\x26\x7d\x68\x93\x57\xb0\x2b\x42\xce\xf7\x84\x11\x27\x14\xee\xcb\xb0\xfe\xaa\xe1\x7f\xe4\x89\xd9\x87\x07\xec\xa5\x78\xc0\x82\x15\xa7\x07\x18\xc2\xf2\x7b\x09\x23\x9c\x71\x92\xae\x27\x98\xbe\x59\x34\xd4\xe8\x57\xe3\x57\xe0\xf0\x52\xec\xe2\x9c\x97\xec\x8b\x92\xf3\xa8\xe4\xdc\x54\x32\x8f\x31\x94\xfb\xbf\x7d\x56\x94\x35\xbc\x87\xb3\xfa\xac\x76\x8b\xb0\x93\x45\xd8\xc7\x20\x9f\x7d\x54\xda\x35\x32\x90\xf4\x83\xcd\x8a\x77\x3a\x5d\x78\x6e\xa3\xd1\xd6\x06\xfd\xec\xa3\xf2\x94\xdd\x70\xe4\x47\x9b\xbc\x39\x3a\x92\x04\xb8\xf4\x40\x18\xa6\xf6\x71\xea\x1e\x55\xe8\xca\x88\x80\x7c\x23\x09\x83\x51\xf0\x32\xf2\x9c\xa1\x96\x98\x6c\x8e\x3c\x7d\x74\x52\x71\x13\x2b\x92\xdc\x44\xc8\xd2\x5a\x12\x93\xfb\x2b\xb6\x94\x5d\x5f\x4a\xc6\x9b\x53\x21\x9d\x87\x71\x6a\x1e\x36\xd5\x98\x3a\x60\xf3\xba\xb4\x9b\x63\x4f\x9e\x0d\xa5\x79\xa9\x87\x6a\x2e\x54\x06\xc1\x76\x28\x19\x6c\x1d\xdb\x25\xf2\x96\x23\x52\xf6\x07\x27\x7e\x88\xc0\x89\xef\x14\x70\xe2\x87\x04\x38\xf1\xdd\x37\x3a\x18\x5f\xed\x8f\xb1\xf9\x90\x8f\xb1\x21\x3f\xd2\x7f\x13\x71\x0d\x49\x8f\xf4\x65\xa4\x4b\xda\xc7\x37\x4f\x19\x19\x3c\x5d\x5a\x2c\xe2\xbe\xe1\xd5\x24\x05\xc2\x09\x53\x29\xd3\x54\xca\x4d\x2a\x65\x96\x4a\x99\xa7\x52\x16\x1a\x78\xcf\xd2\xe1\xd6\x9f\x4c\x19\x60\xd3\x40\x83\x29\x50\xcf\x3a\x01\xea\x79\x16\x81\x7a\x9e\x49\xa0\x9e\x8d\x6a\x5d\x19\x67\x3a\x96\x32\x6d\x19\x40\xe7\x96\xfd\xd1\x82\x44\xa8\x0d\xe5\x99\xd1\x86\xf2\xdc\x84\x1d\xba\x40\x8c\xd0\x25\xfe\xf3\x12\x31\x42\xaf\xf0\xd7\x6b\xe7\x45\x8d\xbc\x61\x8d\xbd\x65\x7f\xde\xa9\xd8\x20\x7e\x20\x65\xe0\x80\x6c\xf2\xde\xa9\x91\x0f\x29\xc8\xd1\x47\x56\xdf\x27\xa7\x74\x60\xe1\xf8\x0e\x70\x9e\xed\x12\xf9\x8c\x09\x74\x0e\x78\x4a\x73\x50\x15\x96\x6b\xd4\x7b\xe9\x30\xa5\x57\x9c\x64\xc3\x8a\x5e\xa0\xc4\x55\xe4\xe0\x60\xa2\x9b\x28\x81\x1f\x31\x24\xcc\xad\x64\x96\xac\x64\x9e\xaa\x64\x95\x74\xd4\x5e\x2b\x88\x3d\x9a\x18\xb1\x47\xff\x7c\x1c\x80\xd1\x0f\x7f\x2c\xc0\x28\x2b\x7a\x86\x11\x60\xb4\x8a\xe5\x8e\x40\x9e\x15\x73\x79\x7f\xa3\xc5\x7f\x15\x02\x2a\x65\x47\xf8\xd0\x02\x95\x56\x2a\x50\x69\x74\x3f\xc7\xf7\x74\x5c\x8e\xa7\xb8\xbc\x8f\xdd\xe1\xcb\x80\x69\x83\xf3\xfb\x95\x12\x2b\xa0\xc8\x34\x4d\x33\xa7\x49\x99\x96\xac\x41\x7d\xf3\xb4\x18\x5d\xe8\xaf\xee\xeb\x42\x5f\x42\x75\xbd\x8b\x21\x62\x8b\x08\x37\x36\x10\xbf\x8e\x9d\x21\xfc\xa4\x2e\xf6\x47\xfc\xc7\x31\xf5\x83\xc6\xa0\x64\x13\xfc\x75\x4c\x7f\x86\x88\x2a\xab\xd3\x9f\x53\xfc\xc9\x52\x6f\xf0\xe7\x33\xfa\x13\xcd\xb0\xb7\xcf\xe9\xcf\xb9\x04\x31\x5b\x3d\x3a\xaa\x4c\xef\x7a\x3b\x17\x55\x76\x9b\x2e\x76\x5b\x10\x55\x76\x91\x2e\x7a\x41\x8b\xd2\x9b\xe0\x72\x93\x85\x6e\x7a\x93\x2e\xfb\xa6\x00\xc0\xeb\x6d\xba\xd8\x5b\x1e\xd6\xd5\x5f\xce\xd9\x51\x6b\x2a\x7b\x99\x2e\x7b\x19\x97\x7d\x9d\x39\x4b\xaf\xd3\x65\x5f\xc7\x65\x11\x0e\x8b\x5f\xdc\x18\x8d\xf6\x55\xba\xf8\xab\x74\x71\x63\x54\xda\x97\xe9\xe2\x2f\x69\x71\xb6\xa2\xdf\xc3\x06\xc0\xf2\xaf\xfb\xe6\xf9\xfe\x94\xae\xe2\x93\x54\xc5\x0f\x14\x45\x94\x53\xc7\xe7\x74\x1d\x9f\x0b\xa1\xeb\x56\x8f\x88\xae\x5b\xdd\x0f\x5d\xb7\xfa\x13\xd0\x75\x9a\x36\x0b\xa0\xeb\x74\x71\x1f\xcc\xe8\x3a\xfa\x8a\xac\xf3\xd0\x75\x3c\x03\x59\x17\x40\xd7\x89\x3c\x64\x9d\x89\xae\x5b\x17\x45\xd7\xbd\x4f\x0f\xe8\x3d\x73\x4a\x90\x05\x94\x3b\x4f\x7f\x9d\x73\x2d\x50\x6e\xc1\x85\x6f\xe7\x99\xa6\xf4\xa7\xe9\x4e\x9c\x3a\x2e\x19\x50\x53\x7a\xa0\x2b\xe9\x9f\x11\xfb\x33\xce\xb5\xaf\x3f\x4b\xd7\x76\x46\x6b\xdb\xb2\xda\xb6\xac\xb6\x2d\xab\x8d\x19\xdd\x67\xc1\xdd\x06\x85\xe1\x6e\xbf\xf4\x17\xbd\x97\x78\x88\x14\x06\xbc\x85\x31\x2a\x38\x81\xe4\x0a\x25\xc0\xdb\x26\x07\xf0\xf6\xf6\x7f\x18\xe0\xed\x12\x66\x64\x12\x03\xde\x26\x42\xc6\xb1\xb6\xc9\x0f\x5c\xf4\x31\xd1\xe1\xbc\xd6\xf9\x78\x37\x5f\xc6\xbb\xb5\x9d\xd7\x7f\x3a\xc8\xad\x8d\x7e\xa0\x14\x90\xdb\x4b\x8c\xf0\xeb\x4c\x54\x90\x5b\x34\x07\x8c\xb9\x70\x1d\xed\x04\x48\xb9\xa8\xb2\x3c\x32\xaa\xc3\xc1\x57\x68\x07\xbe\x77\xea\x36\x10\x1b\x09\x18\x9c\xcb\x61\x70\x13\x58\xe8\x97\x96\xc0\x81\x7d\x2c\x8c\xa5\x0a\x8b\x06\xb5\x53\xb8\x1c\x4f\x41\x89\x79\x14\x30\x45\x01\x56\x1e\x03\x58\x71\x01\xb5\x67\x02\x4f\xc9\x9e\x95\xba\x94\x0a\xc7\x94\x13\xc7\xa5\xe0\xa9\x38\xe5\x7b\xc7\x8d\xc1\x53\x26\x84\xd1\x6d\x64\xa6\x4a\x4c\xe3\xce\x47\x32\xdd\xc6\xa1\x69\x4d\x95\x18\x63\x64\xa6\x2a\x41\xd7\x1c\xf8\x21\x5e\xe5\xe2\x4d\x5e\x09\x73\x67\x03\xde\x64\x4e\x5e\x91\xa9\x4d\xde\x18\x35\x4c\x0b\x9a\xa1\xb2\x24\x6f\x9d\x65\xe5\x86\x22\x4d\x6e\x72\x90\x26\xaf\x72\x7a\xaf\x45\x9a\x9c\x0a\xa4\xc9\x05\x1c\x60\x69\xa4\xc9\x39\x4a\xc9\x63\xa4\xc9\x69\xcc\x9f\x86\x05\x91\x26\x67\x6c\xc3\xbf\x6b\x9e\x09\xa4\xc9\x3b\x94\xd2\x9d\xda\x67\x57\xef\xae\x9d\x53\xf8\x27\x85\x34\xc1\xc4\x18\x69\x82\x4f\x0c\x69\x12\x1e\x1d\x85\x11\xd2\x24\x63\x81\xdf\x03\x69\xf2\x0a\x91\x26\xaf\x8a\x38\xb6\xe8\xca\x8e\x2d\xba\x31\xce\x23\x70\x7a\xf1\x9b\x0e\x3c\x28\xa0\x8f\xf7\xce\xab\x4c\x24\x82\x7a\x11\x45\xf2\xe4\x10\xf1\x7c\xce\xfb\x7b\xc2\x11\x52\x95\xca\xa8\x84\x8f\x50\xad\x8c\x49\xf8\xb0\x27\x24\xe1\x93\x93\x53\x42\x00\x12\x3e\x15\x57\xbf\xe7\x64\xdd\x16\xcf\x9a\x04\x0d\x7c\xce\xeb\x6d\x0c\x19\xf8\x5c\xbc\xbf\x39\x59\xb7\xc5\xb3\xca\x3a\xfd\x9c\xac\x69\x95\x7e\x91\x1e\x0b\x8d\xfe\x0a\x8d\xcc\xb9\xce\xf5\x75\xf2\x4c\xd4\xe8\xe9\xc3\x58\x4b\x38\x65\x3a\xf3\xb1\xac\x33\xa7\x69\x52\x52\x81\x13\x2d\xb3\xd1\x5c\xbf\x1d\x53\xc9\x6f\xc7\xfb\x1c\xed\xd3\x34\xd6\x96\xc7\xc5\x48\x37\x1a\xbd\xe8\xf5\x1b\xa1\x71\x4e\x9e\x69\x3a\x8d\xf3\xac\x88\xc6\x39\x4c\xf8\xbe\x40\x37\x0b\xdc\x81\x61\x37\xfa\x05\x07\x6b\xb2\x27\x6f\x1f\xbf\x27\x1f\xef\xab\x53\x7e\x03\x93\xc8\x75\xca\x37\xb1\x4e\x99\x4b\x56\xb5\xb5\x7e\x23\x69\x42\x49\x40\xe9\x4a\xfb\x67\xec\x40\xa6\x9f\x74\xf6\xd1\x8f\x14\xaf\xfd\x2c\xed\xf4\x6b\xaa\x9d\x0e\x15\xed\xf4\x1b\x54\xc2\x0e\x92\xf8\xec\x41\x54\xe1\x20\x0b\xf8\xfb\x06\x81\xbf\x6a\x7d\xaf\xb1\xbe\x22\x04\x4b\xde\x8c\xbf\x61\xeb\x75\x92\x52\x5a\x4a\x77\xfe\x4b\x66\x4a\x7e\x74\x24\x91\xe4\xf4\x93\xfc\x90\xf8\x24\x05\x15\x98\x6b\x89\xb8\x47\x05\xe6\x17\xe7\x07\xad\xfa\xf2\xcb\x03\x6a\x2f\xdf\x42\x33\x0f\xa9\xbc\x7c\xcb\x66\xe0\xc7\xc4\x0c\xa4\x55\x97\x13\xbb\xf9\x63\xae\xe6\x12\x7a\xf7\xe3\x7e\x8a\xcb\x8d\x4d\x5e\xa2\x6a\x2e\x19\xd8\x7d\x18\x2d\xa9\xe1\xbe\x6b\xf4\x6d\x7a\x4d\xdd\x17\x40\x91\x06\xd1\xab\xbb\xac\x50\x2b\x31\x44\x64\x94\x44\xe0\x8f\xa2\x51\x8e\xb2\x36\xce\x5b\xc3\xc6\x29\xda\x99\x6d\xaa\x33\xa3\xc7\x9b\xa1\xf1\xfd\xf4\xd0\xa7\x91\x1e\x7a\xab\xe8\xa1\x4f\x13\x0a\xdf\xed\xb7\xe9\xa1\xc3\xfd\xd5\xd0\x09\x9f\x0e\x09\x5d\x73\x4a\xa7\xdc\x4b\xa5\xf4\x53\x5a\xdd\x41\x2a\x65\x98\x4a\x19\xa5\x52\xc6\x1a\x5d\xf0\x24\xa9\x0b\x0e\x75\xba\xe0\x69\x21\x5d\xf0\x4d\x11\x5d\xf0\xcc\xa4\xc9\x9d\x33\xcd\xea\x82\xfd\x59\xa2\x0e\x77\x85\xda\xdc\x28\xa4\x35\xfd\xb3\xdd\x5f\x91\x7b\x4b\xbd\xe3\x9e\xa6\x54\xb9\x67\xb4\xc6\x66\x57\xd1\xd3\xca\x2a\x29\x20\x24\x92\x3a\xdb\x7e\xae\xba\x75\x90\x54\xb7\x0e\x73\x8b\x8c\x92\x45\xc2\x42\xca\xb0\xc1\xfd\x7d\x46\xf4\x8d\x7a\xdb\xf3\xc7\xd1\xdb\x5e\xfc\xb1\x7a\xdb\xee\x7d\x34\x9a\x61\x31\x7d\x6b\x56\xdd\x06\xc5\x62\x68\x74\x0c\xb1\x8d\x75\x7d\xe3\x48\xd7\xd7\x8d\x75\x7d\xb1\x8f\x88\x7e\xe4\x23\x62\x10\xab\xf8\x86\xb1\x5e\x6f\x24\x69\xf0\xc2\x47\xd7\xe0\xe9\x0d\xa8\x73\x35\x78\xfa\x48\xb5\xc5\xf4\x5a\x46\x3f\x0b\xf9\xda\x3f\xa3\xaf\x85\x02\xda\x3f\x63\x2c\xeb\x22\xbe\x21\xf4\xc2\xf6\x5c\xd5\xa1\xde\xa8\xbf\x80\xf6\x2a\x7c\x44\xed\x55\x78\x3f\xed\x55\xf8\x27\x68\xaf\x34\x6d\x16\xd0\x5e\xe9\xfc\x87\x98\xb5\x57\xf4\x15\xb0\xe9\x39\xda\x2b\x9e\x81\x4c\x0b\x68\xaf\x44\x1e\x32\xcd\xd4\x5e\x4d\x0b\xc5\x88\x4a\x7a\x51\xf0\xa8\x17\x05\x8d\x12\x6a\xcc\xb9\xe0\x99\x5d\xcc\x51\x77\x57\x89\x16\x90\xfc\x96\xe8\x61\x5c\xc9\xe0\x46\xd7\x68\x94\x80\xca\xae\x1f\xa3\xfb\xc7\x18\x65\xac\x2a\x65\xd2\xb5\xa3\x66\x60\xaa\x30\x25\x01\xd5\x60\xf9\xed\x0c\xaa\xdb\xec\x76\xd4\x0c\x4c\x3b\x96\x6c\x27\x4f\x91\xa8\x87\x2e\x20\x76\x27\x16\x1c\xa3\x97\xb3\xf8\x29\x4b\x23\x48\x65\xfb\xba\x89\xdf\xb0\xe9\xce\xd3\x01\x76\x11\x95\xa3\x2b\xbf\x65\xe5\xf3\xb5\x7e\xdd\x42\x5a\xbf\x31\x9c\x8f\xfd\x33\x77\x56\x44\xd7\x77\x11\x1f\x9a\x91\x5b\xec\x0b\x7d\x3c\xb1\x0b\x67\x58\x19\xb0\x78\x62\x03\xbe\xbd\x2e\x9d\x11\xfc\x46\xc1\xfd\x40\x6c\xa2\x97\xb9\x7a\x83\x97\x76\x13\x98\x79\x2f\xf6\xe3\xb6\x76\x22\xb3\x00\x0f\xad\x05\xb4\xe6\x76\x92\xb1\x9d\x5b\xdd\xc0\x24\xd7\x84\x27\x3b\x01\x7e\x22\xc8\xb3\x36\xaa\xb5\x3a\x5a\xdf\x01\x5f\xbf\x80\xaa\x3d\xec\xcd\xc8\xdd\x22\x89\x00\x04\xa8\x3f\x04\x1e\x3f\xec\x74\x70\x9c\x4b\x8e\x7d\x9a\x67\x49\xd7\x69\x50\x8d\x1b\xdb\x3a\x8c\xbb\xbb\x6e\xad\x1b\x68\xa4\xe7\xe9\xe8\x24\x2f\x42\x68\xcd\xd3\xaf\x7d\x8c\x7e\xc7\x81\x5a\xc0\xbd\x70\x5b\x1e\x1a\x59\x6a\x47\xbb\x6b\x1e\x3d\x11\x3e\x10\x1d\x8c\x20\x59\x6b\x7a\xa9\xd9\x11\x11\xe0\xb9\x4b\x42\x60\xc8\xbc\x2a\x4e\x88\xe2\xe3\x12\x7b\xbd\xfd\xbe\xd6\xc2\xdf\x75\x8c\x01\x51\x71\x58\x2e\xbb\xc1\x92\xd8\x53\xb9\x4d\xda\x65\xf1\x66\x27\x68\xd4\x57\xe8\xcf\x33\x68\x5d\x5d\x37\xd2\xad\xef\x61\x2a\x39\x15\xa6\x92\x37\xfc\x47\x0d\xbe\xe0\xb6\x46\xb6\x75\xfc\x5b\x67\xa6\x93\xe3\xc8\x56\xf2\xee\x2e\x32\x92\x7c\x95\x61\xa2\x19\x5b\x47\x9e\xb9\x93\x36\x7c\xd3\xbb\xbb\xab\x1a\xb9\xb8\x26\xb7\x92\x1f\x81\x80\x56\x96\xb4\xbd\x34\x57\x8b\x67\xff\xf6\xa4\x86\xff\xb2\xce\x95\xe1\x1f\xfc\xf1\x1f\xe8\x40\x93\x19\x6c\xce\xec\xc8\x2c\xb3\x0b\x6d\x5e\x12\xf4\x4f\x30\x96\xbd\x88\xa2\xdb\x53\xd9\x7d\xe8\xd1\x51\xf4\xa8\xe4\x6b\x5d\x29\x8f\x15\x58\xc9\x4f\x94\x14\xa2\x54\x53\x4e\xbc\xaf\x5f\x5f\x37\xae\x2a\x75\x82\xfe\x49\x27\x89\xf6\x27\x6a\xfb\xd1\xe3\x44\x6d\x5f\x79\xa4\xf5\x2b\x29\x44\xa9\xa6\x92\x78\x2f\xb7\xdf\x73\x7a\x77\x77\x63\xe0\xa0\xfb\x77\x77\x13\xae\x25\x7c\x69\x54\x0e\xd1\xf3\xca\x93\x6c\x54\x31\x32\xe0\x1b\xe7\xf5\x3d\x54\x42\x71\x55\xe4\xad\xf3\x26\x19\x1d\xf0\x9d\x94\xd4\xa5\x58\xe3\xd7\x8a\x7e\xe8\x5d\xc1\xe8\x80\xaf\x73\x84\xf2\x83\x58\x28\x3f\x88\x85\xf2\x6f\xf7\x8b\xd7\x17\xa6\x42\xf5\xbd\x36\x86\xea\x0b\x0d\x51\xfa\x2e\x92\x92\xbe\xcb\x58\xa3\x20\x85\xd9\x9b\xeb\xc3\xec\x85\x4a\x84\xbd\x0f\xd2\x64\x3d\x58\x84\x3d\x89\x39\xf6\x76\xa8\xa0\xbb\x6f\x7c\x3d\x4d\x90\x3c\xda\xeb\x8f\xce\x99\x2c\x6c\xfb\xa0\x89\x1d\x86\x13\xc7\x8d\xe0\x60\x92\x4b\x62\x09\x5d\x42\xc6\x12\xf3\x34\x32\xee\x53\x4c\x31\xd9\xda\x92\x4c\x56\x33\xb4\xbe\x45\x4f\x8c\x5a\xa3\x66\xdf\xdd\xd5\x76\xc9\xc9\xaf\x49\xe6\xfc\x1f\x81\xf2\x86\x7b\xe9\xe8\x88\xff\x48\x9c\x96\x2c\xa2\xb0\xf7\xc4\xda\x3e\xb5\xce\xcb\x75\xdb\xae\x78\x82\xc9\xf6\xa9\x89\x45\x6e\xb0\xbf\x68\xc1\x3e\x76\x6c\xbf\xd5\x3e\xb1\xfd\x44\x66\xf4\xfe\xb0\x5f\xe4\xbe\xea\xdf\x5e\xc4\x4a\x59\xd3\xd7\x33\x2e\x3a\x20\x38\xa2\x2b\xbc\xb5\xae\x26\x1c\xe4\xec\x50\x83\x9b\x08\xa8\x88\x29\x89\xb5\xa8\x93\xdb\x6b\x47\xc9\x6e\x36\xb8\x67\xb9\xd5\xf3\xc1\x24\xe8\xba\xd4\x3f\x7d\x43\xa4\x30\x59\x07\xa4\xec\x24\x91\xbf\x7c\xdf\x4b\x51\xbf\x16\x88\xd6\x81\xa3\x3e\xba\xde\x2c\xfb\xa9\x17\xeb\xfd\xbf\x6d\x45\x2a\xe7\x85\xda\x06\x94\xad\x37\xbc\x08\x57\x70\x8f\x18\xe8\x63\x8b\xdd\xf6\x36\x33\x8c\xa3\xf3\x6c\x5c\x51\x12\xae\x66\x45\x67\x20\x6f\x55\xe9\x0b\xa0\x74\x68\xac\x09\x3b\x45\xfb\x98\x84\x4e\x25\xf7\xc2\x21\x0d\x60\x9a\x14\x5c\x59\x5f\x71\x5d\x35\x5c\xe0\xd3\xd0\x9f\xb2\xc7\x59\xc0\x14\x0e\x4b\x1a\x19\x25\x9b\xa4\xbe\x28\xee\x92\x8b\x75\xa5\x9e\xea\xca\x72\xf1\xed\x3d\x49\xb8\xa4\xa7\x5d\x51\x9b\xa1\xeb\xff\x5b\xda\xf1\x13\xfe\xbb\xd5\x36\x98\x7f\xe9\x7b\xd5\x4f\x22\x0c\xff\x1c\x6e\xd5\xcf\x33\x38\x1c\xba\x8c\x71\x13\x4d\xb7\xa3\x38\xe7\x86\xd6\x2f\xbc\xd1\x63\x75\x00\xf1\x1a\x8f\x73\x34\x7c\xd3\x96\x23\x1b\xe0\x83\xfc\xbb\x3b\x0b\xee\x13\x95\xd0\x8d\xc4\xc6\x35\x54\x9a\x67\xed\xcc\xf8\x2c\x82\x09\x98\x75\x3d\x6b\xc3\xda\x80\xf3\x76\x36\x84\xfd\xe1\x9b\x55\xf9\x5e\x8e\xf2\xde\x07\x6a\x6f\x67\x5f\xb5\xaf\x6d\xa0\x94\xbe\x00\x83\x3a\xe9\x5a\x79\xfb\xfe\x8f\xef\x8e\x40\xd8\x7c\x4a\xc5\x7b\x3c\x8b\x29\x06\x89\x5a\x40\xd5\x07\x52\x0b\xa9\xbb\x3d\x3e\xb2\xfc\x27\xdb\xa7\x32\xc3\x27\xce\xf3\xe6\xa2\xf5\x39\xf3\x4c\x47\xf9\xf8\xb6\x6e\xa7\x0e\x73\x4d\x56\xd6\x1f\x77\x13\x63\x32\x69\x61\x64\x63\x6a\x76\x85\xfe\xae\xc1\xa7\x97\x2a\xdb\xa8\x21\xf5\x58\x35\xf1\xc5\xa1\xbb\x27\xec\xc6\x67\xdd\x15\x26\x11\x13\x8c\xfc\xc8\xbb\xc1\xb4\x77\x50\x74\xfd\xe8\xa6\x44\xb7\xaf\x50\x83\xd4\xc0\x7f\x60\x78\x2c\xd1\xfe\xbe\x4e\x53\x2b\xf5\x46\x94\xa4\xbb\x0c\xb5\xf5\xea\x66\x90\xd7\x51\xc1\x4a\x71\xf2\x68\x65\xd4\x23\x12\x8f\xa2\xd9\x07\x86\x8b\xff\xf4\x28\x2a\x54\xfa\xce\xb0\x19\xcf\x9d\xf4\x77\xc7\xf3\xe3\x4c\x76\x3b\x2f\x16\x95\xc9\xeb\xbc\x64\x30\x9b\x17\x68\x73\x48\x03\x6d\x8e\x68\xa0\xcd\x31\x15\xcf\xa0\x3a\xbb\x1a\xce\xda\xe8\x43\x24\xd2\x46\xd2\x44\x16\xdb\x92\x2a\x24\x25\x27\x7b\xf5\xe0\xf9\x13\xfa\x08\x9f\x06\x18\x3e\x0c\x7f\x30\x35\x9a\x93\xde\x18\xcd\x49\x67\x0e\x72\x91\x73\x54\x2f\x2e\xd0\x6c\x74\xe9\x94\x6e\x83\x59\x58\xa2\x96\xb0\x5a\xed\xe4\x1a\xb3\x45\x3a\x48\x1c\xc0\xad\x53\xad\x93\x53\x55\x1d\xc9\x62\x59\xa8\x11\x37\x13\x8f\xe2\xdc\x2f\x1a\x92\x33\x1d\xc5\x45\xf1\x50\x7f\xa6\xf5\xf1\x7e\x0a\x7b\x9e\x9c\x3b\x35\x41\xaa\x4b\x1a\xa7\xd3\x47\xd7\x0d\xe9\x43\xff\xe5\xea\x86\xf4\x81\xff\xb2\xc4\xa0\x46\x87\xdf\x46\xc1\xa7\xd1\xd1\x37\x03\x93\xee\xed\x05\x7d\x9b\x59\xcc\xe8\x05\x7d\xc3\xc2\xa8\x9a\xca\xb5\xd3\xe5\xda\xac\xb9\xec\x72\x41\xba\x5c\xc0\xda\xfb\x01\x0f\xb2\x7d\x22\x61\xb2\xe6\x32\x8b\x19\x63\x8b\x02\x7d\xe0\x07\x46\x03\x31\xbd\x77\x67\x54\xe3\xa1\x54\xd4\x1c\x5b\xd4\xa8\x3a\xa4\xe5\x3e\x51\x51\xea\xde\xaa\xc3\xbc\xd8\xa2\x46\x35\xa7\xd0\x40\x9b\x0a\xfa\xe9\x82\x3e\x8b\x84\xba\xbf\xe3\xfb\x5e\xbf\x1d\x64\x19\x0b\x1a\x35\x94\x94\xeb\xfe\x82\x7c\xeb\xa4\xbb\xb7\x4d\x65\xb6\xae\x2c\x19\x68\x93\xaa\x49\x8c\xba\x32\xfa\x8a\x0c\xf2\x74\x65\x42\x98\x3f\x28\xa0\x2b\x8b\xc4\xfc\x83\x4c\x5d\xd9\xa0\xa8\xa5\x97\xde\x24\x95\x08\x5d\xc4\x36\xd7\x3b\x7a\x52\xc7\xec\x51\x1d\x73\x5a\xdf\x86\x5a\x67\x77\x76\x9e\x55\x55\x52\xfd\xeb\xa1\xfa\xd7\x6b\x69\x2a\x6b\xe0\x7d\x94\xd0\xd4\xe4\x6a\x63\xee\x11\xa9\xf4\x42\x52\xc9\xc4\x91\x4a\x67\x47\x47\x17\x52\xa4\xd2\xb9\xf4\x68\x8e\x54\x7a\x9b\xab\x96\xb9\x65\x34\xee\x85\xc9\x9c\x63\x44\x6e\x31\x44\xa9\xc6\xdc\x83\x83\x9f\xc7\x34\x43\x56\x88\xd2\xf3\xd6\x6d\x14\xa2\xf4\xd6\x60\xc9\x71\x9e\x65\xc9\xb1\x11\x96\x1c\xaf\xb4\x21\x4a\x5f\xaa\x21\x4a\x37\xfb\x87\x28\xdd\xb2\xd9\x7a\xd3\xdc\x0a\x4b\x8e\x37\x88\x73\xdb\xd8\xdb\xab\x37\xd7\xce\x06\xfe\x49\x59\x72\x60\x62\x6c\xc9\x81\x4f\x8f\x1e\xa2\xf4\x16\x2d\x39\x6e\xbf\x35\x44\xe9\x5b\xe7\x36\x5b\x24\x0f\x8b\x16\xcd\x2b\x18\xc8\x43\x89\x55\xfa\xce\x79\x7b\x5f\xe1\x7c\xb2\x52\x55\x1e\xff\x56\x91\xc7\xc3\x3c\xe6\x88\xe4\x65\x4b\x85\x9c\xac\xdb\xe2\x59\x25\x47\x85\x39\x39\x95\x90\xa4\x39\x79\x71\x2d\xcf\xc2\x91\xa8\xf9\x46\x8a\x2d\x7a\x51\x39\xb3\x28\xd8\xff\x81\xe3\x8b\xe6\x6d\xd6\xcc\x26\x73\xe2\x7b\x5a\x36\xf3\xed\x27\x47\x19\x0d\xd9\xf6\xf9\xe0\x5c\x51\xe3\xba\x69\x95\xde\x85\x41\xfb\xee\xae\xf4\x8a\xfd\x2a\xc5\x77\x78\x50\xe5\xb4\x07\x2a\xc5\x79\x7e\x9e\x02\xf9\xbf\xb0\x5f\x52\xfe\x43\xb9\xc0\x75\x33\x8a\x29\x8a\x46\x06\x0c\x4b\x71\x55\xfa\xcb\xf3\xe7\xcf\xa1\x57\xf2\x9f\xeb\xe4\x20\xd5\xef\xc0\x67\xf6\xc3\x5e\xf1\x54\x85\xbd\xdd\xee\xed\xbd\xc2\xaa\x2e\x8e\x8e\xde\xdf\x33\xac\xea\x85\x70\x31\x16\x44\xe7\x56\x2a\x9c\xa9\x74\xb2\x48\x96\x06\x62\xa9\x45\x86\x18\xaf\xf7\x09\x87\x3a\xb9\x77\x38\x54\xd9\x08\x4b\xeb\x6b\xb0\x78\x34\x54\x38\x0f\x3e\x46\x01\x51\x67\x18\x39\xfe\x7e\xf1\x50\x2f\x34\xf1\x50\x29\x32\xfb\xfd\x03\xc6\x43\x35\xd7\xc5\xe3\xa1\x72\x6d\x86\x21\xdf\xc1\xc9\x41\x37\x65\xc1\x80\x33\xf0\x49\x4e\x43\x76\x9d\x1c\xa8\xae\x30\x25\x55\x0a\x59\xb1\x0d\xf9\xd9\xc9\x95\x1b\xba\x74\x91\x7a\xd8\xf7\x1d\xf9\xa7\xf3\x82\xfc\xe0\xd4\xff\xd6\x54\x1a\x33\x59\xd1\x18\x64\xf2\x9f\x61\x62\xfc\xff\x3c\x76\x9c\x5a\xeb\x9f\x8d\x1f\x04\x8a\xe0\x4b\x4c\x88\x44\x37\x57\x3c\x68\x71\x07\x1d\x74\xe1\x3f\xd6\x1e\x8a\x4a\xd8\x85\xd8\x7c\x9f\x5d\x10\x7f\x7c\x70\x37\x1f\x30\xa6\x78\x81\xae\x2a\x1d\x45\xf2\xc4\xbb\xbb\xfb\xf2\x9f\xc7\x87\xd8\xe1\x1f\x1a\xff\x44\x79\xf6\xf2\xe8\xe8\x53\x66\xf4\x04\xef\x3f\xe3\xd0\x04\x83\x94\x50\xe7\x29\x5b\x69\xb6\x8d\x75\xee\xec\xe4\x5c\x92\x03\xfc\x7c\x9a\x0f\x57\xa3\xe6\x2e\xca\xdc\xd3\x95\x6a\x1c\x56\x69\x16\x2e\xb8\xf7\xd4\x72\xe9\xa0\x46\x4f\x08\x51\x2b\x96\xa9\x00\xc5\xd2\x0b\x67\x25\xb2\x3e\xa9\xb5\x10\xb5\x3d\xc3\x30\x3e\xf4\x02\xce\x58\xa7\x49\xe2\x20\x3d\xbf\xe9\x15\xb7\x9b\x7f\x43\x8c\xdf\xd7\xe9\x18\xbf\x17\xe9\x6d\xf9\x90\x31\x7e\x37\x91\xf9\xc2\xa9\x62\xbe\xb0\xc9\x8e\xf1\xcb\xee\xc9\x64\x9c\x52\x04\xc7\x75\x2c\xc9\xe7\xdd\xd7\xf9\xba\x8f\x72\xa1\x0f\xce\x87\xfc\x23\x1a\xa5\x62\x2e\x65\x29\xe2\x94\x3a\xf3\xf8\x0b\x5c\xac\x3b\x0f\xa2\x2b\xb4\x81\x4f\x07\xd1\xe5\x2a\x5d\xa4\x87\x75\xbb\xe9\xcd\x02\x77\xd8\xa4\x05\xc4\x1d\x2a\x0a\x08\x5e\x5f\x2a\x50\xb3\x77\x1b\xf1\xe4\x48\x17\x2c\xc9\x9a\x8f\x1d\xbe\x0e\xbf\xc9\xaf\xe0\x3d\x62\x77\x6e\xf4\x7e\x05\xf5\x4d\xf1\x81\xd0\xc8\x52\x62\x50\x51\x2a\xd6\x25\xc6\x1c\x25\x92\x4b\x47\xca\x90\xb0\x1e\xb9\xd0\x89\x66\xfd\x62\x51\x41\x05\xd9\xfb\x8d\x91\x41\x93\x69\xdf\x14\x12\x94\x0a\x54\xa3\x00\xa0\x06\xe1\x2b\x0f\x09\xfa\x75\x17\x85\x04\xad\x29\xc2\xdb\x43\x6a\x2a\x52\x27\x6b\xa7\x46\x36\x29\x3b\x8f\xa4\xf7\x41\x45\x62\x5b\x34\x12\xe8\x99\xa3\x91\xd8\xb4\xea\x7f\xaf\xa1\x5c\xfb\x9c\x86\x09\x8d\x3f\x25\x74\x45\xd9\x0a\x24\x37\x82\x68\x15\x41\xec\xec\x48\xc3\x02\xb2\x79\x86\x16\xb9\x22\x85\x1c\x5d\x24\xc3\xa1\xc9\x85\x61\xac\x1d\xf6\xab\x44\xaa\xf5\x4e\x89\x06\x59\xda\xd7\xeb\xda\x43\x07\x27\x85\x43\x8c\xad\x69\x3a\xd1\xf4\xac\x50\x19\x7e\x45\x94\x6d\xa3\x7b\xc7\x3a\x79\xf9\xf0\x86\x29\x91\xc8\xf1\x12\x4d\x54\x5e\xed\x61\xa2\x12\x6f\xea\xcb\xf8\x49\x44\x17\xff\x53\xa3\x9b\xe6\xb9\xe5\x63\xae\xdc\x31\x35\x15\xd6\xdc\xe0\xa5\x6f\xa0\xf7\xaf\xf7\xed\xf1\x51\x33\x6a\x30\xfa\xd7\x1b\x3c\x80\x7f\x3d\xd4\x80\x88\x93\x33\x19\x8f\x55\xb0\x64\xd4\xdc\x46\x17\x9c\x95\x9e\x17\xce\x26\x11\x91\xf5\x71\x15\x2a\x46\xcd\x48\xb6\x42\xc5\xa8\xb5\xc8\x37\x98\x31\xea\x49\xb0\xe8\x39\x9f\xa3\xbd\x05\xd9\x7c\x72\xdf\xbb\x5e\x60\x2e\x9d\x19\xc5\x35\x33\xfe\xab\x59\xb3\x90\x17\xff\xd5\x2c\xe6\x2f\x60\xe3\x63\x74\x66\x98\x6d\xe3\x63\x14\xbc\xcf\x82\xf6\xd2\x0f\x7e\xa5\x94\xe8\xde\x0a\x0d\x46\x7e\x67\xcf\xb0\x51\x5f\x00\x6b\xbb\xdb\x0d\x66\xd9\xa5\xff\x1d\xb7\xf6\xdf\x71\x6b\x1f\x20\x6e\x6d\xd2\x47\x9e\x4b\x7d\xe4\xc9\xc1\x6a\xcf\x95\x60\xb5\xe7\x4a\xb0\xda\x73\x46\x08\xa3\x4a\xe2\x3c\x57\x33\x93\x54\xc3\x7a\x54\x0d\x9b\x11\xb7\x76\xb2\x47\xb0\x5a\xbd\x5a\x32\x83\x3a\x2b\xa0\xff\x09\xaa\x22\x87\x46\xa1\x1b\xbd\x63\xa6\x3a\xac\xc7\x5a\xda\x8b\x43\x92\x4a\x7f\xf1\x7d\xbf\x14\x41\x92\xea\xd5\x17\x4f\x3c\x15\x53\xf4\x10\xf1\x6c\x05\x6f\xf1\x1a\xc6\x7d\x8b\xba\x92\x51\x11\x0d\xd3\x58\xa3\x61\x1a\xeb\x8d\x7e\xc6\x69\xa3\x9f\xb3\xb4\xd1\xcf\x65\xae\x76\xe9\x92\xb9\xe5\xc9\xb0\xc7\x61\x50\x90\x7d\x8c\x72\x1e\xc3\x0a\x67\xf5\xc7\x5b\xe1\x54\x58\x96\xb4\x31\x8e\xd6\x0a\xe7\xe5\x1f\x68\x85\x33\xd1\x59\xe1\xbc\xdc\xdb\x0a\xe7\x8c\x5a\xe1\x84\xd9\x56\x38\xe6\x6a\x57\x92\x15\x8e\x30\xc0\xa1\xbd\x8c\x8d\x70\xe6\x36\x2a\x1f\xb8\x08\x16\xb1\xde\xab\x16\x1a\xe3\x84\xb2\xf5\x0a\x4c\x38\x1a\x8d\x8d\x2b\x56\x28\x1b\xad\x9c\xd0\x64\xfb\xba\xd1\xa5\x7d\x1d\x0b\xeb\x95\x09\xb3\x5e\x49\x01\xa3\x44\xd9\xb8\x92\x28\x2a\x5b\x88\xce\x0b\xf0\x9f\x6b\xbb\xf9\x55\xeb\x43\x2f\xd7\x04\x26\xde\xc7\x8a\x31\xcc\x6b\xe7\xd5\x37\x18\xc3\xc8\x95\x92\x37\x8e\xf5\x3a\x69\x17\xf3\x5a\xae\xd4\x8e\x7c\xc4\xd1\xc7\xdd\x9b\x82\x46\x31\xaf\xee\x63\x14\xc3\x15\x91\xaf\x1e\xdd\xb2\x44\xaf\xaf\xbc\xa7\x65\x09\x79\x2b\xac\x05\x92\x68\xd0\x8b\x18\x0d\xda\x8b\x66\xbd\x71\x80\xb9\x0f\xe2\x61\xdd\xaf\xd5\x58\xaf\xfb\xf6\xbf\x91\xf9\xc7\x62\x1f\xf3\x0f\x91\x19\x46\x50\x70\xe6\x72\x27\x2d\xcf\x5c\xe4\x5d\xa4\x53\x8e\x77\x5d\xb6\xad\x88\x64\x15\xf2\x2e\x65\x15\xc2\x1c\x1d\xbe\xcb\xd8\x8d\x7a\x6d\x83\x64\xcf\xa1\xec\x8a\xbe\xb5\x12\x06\x1a\xcc\x41\xed\x8a\x1a\x7b\x4c\xb4\x20\xd8\xf2\x84\x82\xbb\x7d\xdb\xa6\x8e\xc9\xa0\x83\xef\xf5\xc6\x29\xc2\xd1\x6b\x12\xe2\xaa\x56\x0b\x6d\xc9\xf6\x1d\x3c\x56\xcc\x37\xd9\x4e\x9c\xff\xf7\xb1\x9d\x38\x7f\x78\xdb\x09\x4d\x4f\x1e\xa1\x15\x9d\x85\xc6\xf9\x1f\x60\xa1\x71\xfe\xa7\x5a\x68\x9c\xff\x11\x16\x1a\xc0\x6f\x20\x02\xb9\x86\x60\x89\x78\xeb\x4c\xc3\xd1\x96\x69\xe2\x60\x0b\x88\x8b\x28\x4e\xe4\x7b\x88\x9d\x81\x3c\xa4\x20\x4f\x9b\x86\xfd\xc9\x42\x3d\x81\x23\x12\x71\x46\x1f\x80\x4e\xac\xfe\x3d\xb1\x9d\xad\xe3\x27\x89\xad\xd7\x6c\x3b\x6d\x61\x9d\xd6\x6e\x5c\x55\x22\x6a\xb1\xcd\x63\x9d\xb3\xdf\xe8\x3c\xba\x6d\x22\x93\x42\xf8\x5d\x41\xea\x83\x13\x8a\x1d\xe7\xea\xaa\x8d\xa3\xad\x04\xd7\x84\xfd\x8a\x7e\xd4\xe8\x8f\xba\xf4\x83\x67\xaa\x63\xa6\xeb\x66\x24\x46\x36\x52\x7a\x03\x18\xb9\x05\xd3\x81\x9f\x95\xfd\x3e\x28\xd9\x39\x06\x2b\xd1\xd4\xe4\x4e\x87\xe6\xa0\xa4\xa8\x7b\x1f\x11\xfe\xb5\x46\xc8\x1f\xd8\x78\xf1\xe0\x3c\xa0\x8e\xc5\xf1\x48\xa4\x06\xae\xfc\xc3\x32\x2d\x25\x61\x04\xa1\x15\x7f\x5b\x55\x8d\x2a\xeb\x47\xb5\xb7\x56\x6c\xb3\x83\x1a\xd3\x06\xd7\x9f\xca\x96\x77\xa9\x01\xa5\xac\xe6\xda\x90\xab\x54\x7d\x76\x1c\x50\x25\x04\x34\xa9\x35\xf8\x3c\x15\xb6\x05\x84\xad\x1f\x4f\x4c\xc5\x41\x14\x24\xb4\xdd\xf2\x1b\xd1\x5a\xf1\xcb\x25\xf8\xef\x34\x36\x4e\x68\x53\x77\xdf\xe5\x52\x25\x91\x5a\x83\xd4\x06\xe4\xfe\xff\xff\x3f\xf5\x85\xcd\x62\x84\x15\xbc\x8c\x11\xba\x51\xb2\xf5\xd3\xb8\xc9\x9b\xbc\xca\x73\xfe\xdd\x3c\xfe\xdd\xca\xcf\xe1\x6b\x35\xde\x69\x10\x06\x74\x7e\x4a\x25\x6a\xba\x84\x5f\x2e\xf9\x45\xe3\xf3\x9e\x5d\xe6\x95\x11\xca\xce\xd8\x0d\xa4\x7e\xe5\xaa\x92\xe1\x3e\x9f\x5c\x56\x96\x3f\xec\x27\x17\x92\x57\x41\x13\x7d\xcb\x67\xd0\x8f\x33\xf7\x9b\xe0\x67\xa8\x44\x5f\xa5\xfc\xbc\x51\xd1\x7f\x93\x64\xf5\xd1\x07\x7a\xf7\xe0\x26\x6f\x64\x59\xcc\x5c\xed\xdd\x3e\xe6\x6a\xcb\xff\x5e\xe6\x6a\x8f\xde\x1d\x9b\xac\x5a\xfb\x2e\xa7\xfd\x4d\x0d\x43\x66\x88\x46\xe9\xd6\x49\x6c\x76\x88\xa7\x70\xb4\x38\x75\x64\xa9\x76\xa4\xd1\x99\x24\x96\x23\x37\x52\x0b\xb9\x91\x5a\xca\x5c\x6b\xa2\xda\xa0\x3d\xe4\x70\x7d\xc3\x70\xa3\x2b\x88\xfd\x88\x68\xf6\xc8\xc2\xad\x20\xd9\xae\x9f\x1d\x3d\x91\x9e\x34\x80\xcb\x9d\x43\xc5\x58\x4d\x3d\x71\x99\xa5\x1f\xe9\xc5\xe6\x69\x7d\x27\xe4\x3f\x4d\x20\x87\x58\x78\xf0\xe0\x96\x68\xd9\x06\x66\x13\x9d\xa5\x5a\xa8\xb1\x54\xbb\x9f\x25\x9a\xfe\xcd\xe5\x0c\x85\xbf\xd4\x4c\x6d\x61\x82\x45\x2c\x19\xa2\x81\x43\x1f\xa8\x7d\x1a\xfc\xb3\x75\xbe\x93\x8d\xd3\x62\xf5\xff\x71\x87\xe2\x18\xd0\x22\xf4\xfc\xcf\x36\x5b\xd3\xeb\xfa\xcf\xc9\x99\xad\x31\x59\x3b\xff\xb7\xc9\x9a\x46\x15\x8b\x4b\x64\x6f\x55\x68\xb6\x9d\x9b\xd1\x60\x2d\xdb\xce\xcd\xa8\xf0\xfd\x7f\xd9\xce\xcd\xa8\x53\xce\xb1\x73\x33\xea\x57\x51\x8b\xfd\x33\x73\x17\xb2\xb7\xab\xca\x87\xb7\x56\x33\x82\x0b\x24\x40\xd1\x7e\x01\xad\x44\x59\x0e\x8a\xda\x5b\xdd\xfe\x6f\x6b\xb7\xe2\xd6\x6e\x86\x20\x60\x42\x09\x77\x96\xab\x53\x4d\xaa\x3d\x3d\xaa\xf6\xbc\x97\xb5\x5b\x12\xcb\xe0\x21\x96\xe1\xe1\xac\xdd\x62\xb2\xe1\x1e\x76\x6f\xe7\x91\x56\xf2\x5c\xb5\x7b\x3b\x57\xed\xde\xce\xf3\xed\xde\xd6\xb9\x9a\xc9\xb5\xf0\xc0\x6c\xb4\x7b\x5b\xa3\xdd\x9b\xc6\x2e\x2e\x32\xa5\x59\x67\xd8\xbd\xad\xef\x13\xb1\x68\xa1\x40\x71\x97\xc2\xea\xed\x4c\x6b\xf5\x76\xaa\x5a\xbd\x2d\xf7\xb7\x7a\xe3\x56\x02\x97\xcd\x95\xb0\x7a\xbb\x44\x78\xf4\xd2\x5e\x5d\x5d\x5e\x3b\x4b\xf8\x27\x65\xf5\x86\x89\xb1\xd5\x1b\x3e\x3d\xba\xd5\xdb\x1a\xad\xde\xd6\xdf\x6a\xf5\xf6\xd2\x59\xe7\x5a\xbd\x25\x16\xaf\x62\xfa\xf6\xca\x79\xf9\x0d\xa6\x6f\xe9\x9a\x65\xfb\xb7\xd8\x49\x5e\x64\xed\xf1\xaa\xb8\xfd\x5b\x4e\x56\xc9\xfe\x2d\x3b\x23\xea\xe1\xdf\x73\xc9\x27\xcf\xc7\xa5\xa3\x39\x2d\x48\x66\x73\x39\x39\x15\xb3\xb9\x9c\xbc\x19\x66\x73\xe7\x95\x2d\x72\x0a\xaf\x1f\xda\x6c\x2e\x6f\xaf\x67\x36\x99\xad\x05\xdd\x66\x98\xcd\xbd\xf9\x23\xcd\xe6\xb6\xf9\x66\x73\xaf\xf3\xcd\xe6\xde\xdc\xcf\x6c\xee\xe5\xbd\xcc\xe6\xee\x6b\xf2\x76\x1e\x99\xbc\x5d\xfc\x31\x26\x6f\x6f\x13\xae\x12\xbf\xcd\xe4\xed\xad\x7a\x83\x7c\xb3\xfd\xdb\x6f\xd6\xc5\xd3\xe3\xe7\x09\x3b\x9b\x73\xb4\xb3\x79\x5d\xc8\x64\xed\x9d\x63\xce\x97\x30\x57\x7b\x67\xb2\x55\xfb\x06\x33\xa1\x5f\xad\x73\x8d\xf9\xde\x45\xba\xff\x45\x8d\x2a\x71\x91\x5e\xb0\x15\x66\xae\x20\x32\x34\x52\xb3\x88\xb3\xf2\x40\x51\x15\x6d\xea\xb0\xff\x50\xde\x22\x9e\x8f\xd5\xe7\x6d\x5d\x0e\xef\x03\x2f\x2b\x17\xf7\xb6\x60\x5a\x46\x16\x4c\x1b\xc5\x62\x67\xf9\xa0\x16\x4c\x6f\x9c\x37\x0f\x6a\xc1\x94\x6f\xb2\xa4\xda\x28\x2d\xb5\x36\x4a\xa9\x11\xab\x74\x93\x6a\xb1\xb4\xf9\xe3\x2d\x96\x96\x0f\x68\xb1\xb4\xd4\x58\x2c\x2d\x32\x2c\x96\xce\xb5\xce\xa4\x62\x41\xe8\xc1\x9e\xd6\x4b\x31\xe5\x72\x7f\x3b\x26\x71\x0c\x3f\xab\x69\x4d\x9a\xe4\xd7\x7f\xbe\x75\x53\xd2\x9e\x69\xc5\xea\x8b\xe2\xe2\xdc\xcb\x9e\x69\x9b\x65\xcf\x44\x23\xe6\x34\x97\x7a\x7b\xa6\x85\x6c\xce\x24\x59\x1c\xc5\x01\x6d\xbe\xc1\x98\x49\xb5\x8f\xfa\x1f\x68\xc4\x74\xfa\x88\x66\x4a\x0b\x34\x53\x3a\xbb\x97\x99\xd2\xe2\xe1\xcd\x94\xc8\xb9\x56\x86\xbb\x21\xb7\xf6\xbf\x2d\x98\x1e\xd7\x82\x69\xf3\xed\x16\x4c\xcb\x7f\x5b\x30\xfd\xdb\x82\x29\x4f\xe4\x9c\x6d\xc1\x64\x14\x37\xff\xdb\x12\xe8\xdf\x96\x40\xc5\x2d\x81\x0c\xa1\x71\x84\xe8\xf5\xd6\x96\x8d\x82\x6e\x15\xa3\xa0\x5b\xc5\x28\xe8\xf6\x91\x2c\x81\xfe\xd7\x9a\xeb\xdc\x43\x20\xae\x11\x6e\x47\xf9\x86\xb1\xdd\xc9\xb1\xe3\x38\x83\x2b\x71\x67\xbf\x41\xdc\xe4\x35\xbb\x82\x5a\xb7\x8d\x6d\x53\x5c\xf1\x18\x5e\xaf\x0f\xd7\xdc\x46\xba\xde\xd9\x7d\x2e\xde\x6c\xa3\xbb\x9c\x3d\xf3\x1b\xfd\x2c\xfe\xea\xe8\xd6\x24\x83\x00\x8c\xbd\xc0\x78\x49\x2a\xce\x47\x02\xb0\x40\xc8\xbf\x68\x80\xa3\x3d\x06\xc8\x07\xe6\xac\x38\x15\x43\x9f\xf1\xd3\xf0\x71\xc1\x8b\xad\xfc\xe2\xcf\x19\xd1\x24\x3d\x22\x4a\x58\xb1\x61\xe9\x3e\xd9\xc2\x40\x95\xb1\xcf\xb6\xc8\x22\xc3\xce\x0a\xd2\xec\x45\x07\x28\x0d\x88\xe9\x4d\xf2\x14\x2c\xe7\x31\x6f\x2a\xaf\xfa\x73\x8d\x58\x4b\xa7\x0c\xc9\xf6\x4a\xd8\x25\xe7\xb8\xf7\x2e\x8d\x12\xdb\x1e\xcb\xf0\xd2\xc9\x90\xb9\x31\xf9\x36\x3d\xc2\x81\x1b\x3f\x3a\xaa\xe3\x4f\xfa\x11\x76\x28\xf0\xdf\xa3\xe4\xb1\x5c\xf2\x75\x66\x49\x34\x42\x30\x34\xf9\x66\x8f\x82\x4a\x8b\x6f\x33\x0b\xba\x40\x36\x9a\x9a\x7c\xb7\x4f\x49\xb9\xcd\xe6\x63\xab\x7d\x70\xf9\x34\xcf\x73\xd5\x3e\xdc\x32\xa3\x98\x64\x55\x1d\xfc\x9e\x76\x74\x92\x15\x1d\x8b\x44\x86\x88\x22\x2a\x73\xf9\x50\xb8\xf9\xe3\x47\x68\xbe\x19\x99\xa4\x69\xcc\xeb\xde\x0b\x53\xb9\x0f\xc0\xc6\x6b\x1b\x8b\x6d\xf7\x2c\x1a\x39\x4b\x78\x6f\x3b\x57\xd5\x65\x54\x57\x16\xdf\x63\x8a\x6e\xec\x93\xf3\xb1\x80\x6e\x8c\xeb\xc4\xda\xcf\x0e\x94\x6a\xe4\xd0\xeb\x9f\x8a\x6b\xbd\x72\xb2\x6e\xeb\x7b\xe4\x3d\x2e\x98\x97\x46\x89\xad\x73\x85\x54\x6e\xc6\xe3\x02\x19\x51\x43\x50\xa4\x42\xcc\x57\xa4\x3e\x2a\x74\x28\x52\x21\xcd\x58\xa4\x46\x59\xc7\xc5\x83\x21\x7c\x94\x95\x95\xe4\x9f\x29\x75\xb3\x1c\x34\x19\xd5\x24\x5c\xaf\xd2\xe1\xa2\x1c\x3c\x39\xfa\xec\x1e\xfc\xc1\x39\xad\xba\x68\xf4\x6d\xd9\xad\x8b\xa7\xc7\x8d\x0b\xf2\x45\x4a\xf9\xa1\x51\x6b\x9e\x72\x5d\xce\x0f\xe8\x7a\x8a\x91\x73\xff\xb4\xc9\xe7\x58\x18\xaf\x53\xfb\x99\x77\x56\x08\x84\x37\x42\x0a\xdf\x05\x5b\x27\x82\xd6\x2b\xc9\x2d\x2a\xe7\x68\x28\x69\x4c\x96\xad\xe6\x2b\x5b\xf1\x51\xd2\x2a\x95\x1a\xa5\x03\x8b\x12\xf5\x07\xb8\x8e\x50\xa7\xe0\xee\x44\xf4\xf6\x53\xa4\xa9\xa9\xfa\xf1\x54\x56\x3f\xd2\x34\x29\x29\xf7\x32\x33\x8f\x3b\x5b\xab\xf6\x85\x69\x1e\x83\x48\xa3\xb6\x9b\xa5\x9c\x42\x5e\xda\x4a\xd4\xd0\xb1\x50\x98\xfd\xb3\xb8\x16\x8c\x1e\xae\x34\x85\x4e\xca\xd1\x91\xb8\x24\x69\x1a\xde\x20\x08\x50\x9e\x3f\x4e\xd3\xc7\x05\x9a\x5e\xe8\x9a\x7e\x80\x61\xb2\x8b\x59\x69\x6a\xf9\x40\x4d\x25\x87\xa5\x69\x6a\xf5\x48\xa3\xe2\x77\xbf\xd2\xd6\xfa\x91\x86\xa5\x6b\xeb\x73\xce\xaa\x0e\x62\x5d\x71\xa0\xda\x15\xff\xe8\xc8\xfb\x44\x3a\xb3\xf9\xf9\xf0\xb2\xa8\x16\x96\xfc\x24\xd7\x24\x9d\xd5\xbc\xa2\xd7\x85\x2b\xfa\x59\xae\x48\x3e\xa4\x79\x4d\x6f\x0b\xd7\xf4\x4b\x6a\x70\xc7\x4a\x4d\xaf\x0a\xd7\xf4\x6b\x72\x70\x6a\x45\x6f\x0a\x57\xf4\x5b\x6a\x70\x6a\x4d\xef\x0a\xd7\xf4\x2f\xe7\xad\x30\x71\x7a\x9b\x47\x1e\xed\x90\x06\x44\xdf\x3d\x26\x75\x7e\xda\x87\x43\x9a\x80\x2a\x7b\x57\xfe\x35\xa7\xa3\x04\xa5\x74\x05\x19\x6a\x18\x68\x76\x77\x6d\x37\xae\xae\xc9\x5f\x9d\x77\xa2\x53\xef\xfe\xbb\x74\xaa\x39\x15\x34\x9f\xaf\xf5\xaa\xf0\x3e\x2a\xf8\x2f\x03\xd9\xb7\x55\xc8\xbe\x4b\xa0\xe2\x6e\x54\xaf\x0f\xc9\x2a\x3f\x44\x55\xfe\xb5\x70\x95\xb3\x2a\xc7\x16\x5b\xd3\xd8\x6d\x02\x9c\xc3\xba\xd4\x95\x36\x75\x1e\xa5\xde\x48\xa9\x4b\x6d\xea\x5a\x9b\xfa\x36\xe2\x4f\x60\x28\x12\xeb\xf9\x33\xbf\x9d\x57\x68\x53\xa4\xcf\xf2\x1b\xcf\xb2\x46\xf5\xbf\x3e\xcb\x4f\x3c\xcb\x02\xb8\x37\x43\x96\x5f\x79\x96\x25\x70\xa3\x86\x2c\x3f\xf2\x2c\x33\x44\x45\xe9\xb3\xfc\xc2\xb3\xcc\x51\xa3\xcd\x40\x12\x05\x3d\x1c\x5f\x22\x44\xe2\xf3\xbd\x3d\x1c\x5f\x32\x88\x84\xda\x1b\x63\x75\xbc\x97\x1b\x9b\x6c\x4d\xbd\xfc\xcd\xba\x34\xf8\x7b\xcd\x6a\x63\x5b\x4f\x35\xb2\xb5\xc9\xed\x03\x37\x72\x9c\x6a\xe4\x36\x39\x77\x72\x47\x14\x83\x44\x71\x90\x95\xc8\x7b\x71\x5e\x1c\xd6\x1b\x87\xb5\x3c\xf2\x2c\x54\x5c\x48\x33\x2f\xdf\xe6\x6e\x19\x9a\xfc\x70\xcf\x26\xeb\x51\x93\xa7\x45\x70\x28\x08\x7b\x90\xc0\x25\xb3\xa2\x1a\xc7\x21\xee\xe4\xe2\x79\xb3\xea\x35\xe8\x0a\xcf\x54\x5d\x61\x56\x6b\xc5\x6a\x58\x15\xed\xef\x08\x4f\x9e\xe2\x79\xb3\xea\x2d\xd6\xb3\xac\xd6\x8a\xd5\xb0\x28\xda\xdf\x09\x07\xb3\x14\xcc\x9b\x55\x6f\xb1\x9e\x65\xb5\xf6\xcd\x63\x33\x6a\x89\xcf\xee\xab\x25\xce\xe8\xee\x83\x37\xb6\x53\x91\x3a\x45\x20\x31\x1d\x13\x08\xa6\xcb\xd0\x2c\x3d\xf6\xa7\x8f\xf0\x97\x01\xfb\x3d\x34\x5a\xd5\x8d\x0c\xb6\x73\xff\xb1\x23\x63\xa7\x34\x0e\x27\xe1\x02\x7d\x24\x90\x09\xd6\xa6\x37\xd8\x4b\xa7\xdd\x68\xd2\x66\x12\x44\x08\xd2\x2c\x5b\x20\xb9\xa7\xb0\xaf\x4d\xef\x6e\x6c\x0a\x8b\x4a\xf9\x5e\x96\x01\x67\x52\x3d\xcb\xa2\x79\x6f\x6c\x1a\xa5\x8e\xe7\xe5\x19\x4e\x81\x5f\x51\xba\xb5\xce\xc9\x02\xb5\x6c\x92\x48\x29\x8e\x82\x0c\xed\x6c\x6f\xc5\x2f\x10\x3d\xa4\x2f\x3a\xb5\x13\xc8\x20\x72\x6b\xc8\x79\x13\xe7\x64\xfe\xf1\xe0\xbc\xcf\x06\x62\x9d\xe9\x80\x58\xaa\x21\xa3\xc9\x78\x90\xb1\x5c\xce\x4c\xfc\x3c\x76\xe6\xf0\x93\xb2\x4f\xce\x82\xff\x3a\xa6\x90\x08\xc6\x09\x39\x2b\xf1\xf3\xd8\x59\x47\x30\x8a\x8d\x80\x51\xd4\x9d\xad\xf8\x79\xec\xdc\x4a\x40\x8a\xb3\x47\x07\x52\x18\x8d\xd1\xb2\x81\x14\xbd\x74\xb1\x5e\x41\x20\x45\x3f\x5d\xb4\x2f\x1b\xe9\xd5\xf7\x36\x2a\xe3\x05\x8f\xf7\x36\x0b\xcc\x86\x23\xe8\x8c\xb4\x98\x11\x5b\x2c\xcb\xd9\x1b\x68\x92\x07\x65\x38\x7b\x44\x28\xc3\xd9\xfd\xa0\x0c\x67\x7f\x02\x94\x41\xd3\x66\x01\x28\x83\xce\x8e\xd3\x0c\x65\xa0\xaf\x48\x90\x07\x65\xe0\x19\x20\x63\x3e\x94\x41\xe4\x21\x41\x26\x94\x21\x10\x50\x86\x4c\x70\x41\xd2\xbc\xd4\xa3\xe6\xa5\x5a\x93\x38\xa3\x79\xb0\xde\x0e\x19\xa8\xcf\x0d\xc2\x07\xe6\xec\xcf\x82\xfd\x59\xb2\x3f\x2b\xf6\x67\x4d\xff\x64\x19\x12\xeb\x31\x58\xc8\x11\xb3\xba\xb7\xac\xb6\x2d\xab\x6d\xcb\x5a\xda\xb2\x96\xb6\xac\x6e\x58\x15\x3f\x87\x33\xb8\x57\xfb\xfb\x59\x10\x43\x23\x71\x51\xd6\x9a\xfa\xbc\x4a\x3c\xaf\xd5\xe7\xa2\x36\x7f\x61\x6f\xe4\xc3\xbd\x59\x04\xd2\xb0\x89\xba\xbc\xd1\xfb\x1b\xdd\x24\xd5\xc9\xf4\x2a\xd3\xaa\x7e\x7b\x64\x43\xba\xec\xfe\xd2\x4b\xcb\xfb\x34\x43\x4a\x1f\xbd\x41\x2b\x20\x9d\xd4\x24\xe9\xf8\x73\xac\xfa\x97\x1c\x72\x66\x69\xd9\x0a\xee\xee\xae\xaa\x2f\x9e\xdc\x6a\xe2\x37\x93\xdb\x27\x56\x3a\xb5\x52\x7d\x61\x6b\x32\x5f\x37\x02\xea\x74\xf2\xf6\xda\x26\x23\x49\xea\x72\x85\xc2\x16\xf8\x99\xec\xd0\x2c\xea\xd0\xc2\xa6\x0c\x2c\xfa\x7a\x48\x66\xba\x91\x33\x5d\x0b\x41\x0c\x7a\xe2\x3c\x25\xb5\x6b\x69\xec\xc8\x67\x3a\x8e\x33\x94\xbd\x61\x1e\x1d\x45\x8f\x4a\xbe\xd6\x95\xf2\x58\xa9\xd6\xea\x4f\x94\x14\xa2\x54\x53\x4e\xbc\xaf\x5f\x5f\x37\xae\x2a\x75\x52\x97\x07\xca\xdb\x1f\xa9\xed\x47\x8f\x23\xb5\x7d\xe5\x91\xd6\xaf\xa4\x10\xa5\x9a\x4a\xe2\xbd\xd4\x3e\x95\x0c\x9f\x15\x76\xcc\xc9\xd7\x76\xec\x8d\x33\x9e\xed\x6b\xa4\x83\xce\xee\x61\x0c\x18\xd5\x49\x2e\x9c\xf3\xa4\x2f\xce\x4b\x29\x09\xd5\x6a\x2f\xa1\x09\xd9\x26\xf0\x32\x5b\x87\x49\xc5\x20\xf4\x6a\xc8\xe6\xfc\xbb\xb1\xd4\xbc\x1b\x5b\x58\x6d\xcc\xde\xe1\xb6\xd5\xd8\x5d\x45\xca\x35\x1b\x30\x32\x11\xab\x82\xd6\xeb\x03\x1e\x34\x45\x74\x15\x03\xbe\x7e\x76\x17\xbd\xa8\xc7\xfd\x36\x37\xee\xc3\x3a\x2b\xf8\xba\x02\x74\x63\xaf\x52\x2a\x0f\xec\x84\x4b\x43\x12\x8f\xff\x2f\xfa\x12\xe5\xd2\x81\xce\xcd\xcc\x6d\xd2\xb1\xca\x29\x0a\xde\xc4\x8c\xf1\xf2\x25\xb2\x6a\x95\x96\xb3\x91\x65\xac\xfb\xff\x92\xf7\xa5\xdd\x6d\xdb\x5a\xbb\xdf\xef\xaf\xb0\x75\xfa\x7a\x91\x31\xe4\x48\x6e\xd3\xd3\x4a\x65\xbc\x1c\xcf\x89\x9d\xa4\x49\xda\x93\xd4\x4b\x2b\x4b\x03\x25\x51\xa2\x06\x6b\xb0\x25\xc7\xfa\xef\x17\x7b\x63\x20\x40\x02\x24\x25\x3b\xed\x7d\xcf\xfd\x60\x4b\x22\x01\x10\x04\x41\x60\x8f\xcf\xe3\x16\x2a\x05\xee\x50\x38\x53\x9e\xc5\x5e\x34\xd8\xf1\xd8\x04\x38\x9c\x0a\x53\x0a\x10\xab\x31\x60\x49\x92\x04\x78\x1d\xab\x03\x66\x00\x58\x8a\x8c\xc6\xce\x08\x9f\xd1\x4b\x06\xc1\x73\x20\xe6\x41\x0c\x68\x09\x0f\x49\xa4\x25\x97\x8e\x1a\x3f\x48\xef\xb3\x89\x90\x61\x0d\x09\xb2\xd3\x32\x03\xb7\x99\x56\xbc\x67\x7b\xbf\x72\xf9\xbf\x30\x28\x91\x52\x08\xb6\x42\x27\xc4\x2e\x01\x42\x5b\x28\xb0\xda\xe8\x05\xc3\xc2\x6e\xb1\xf5\x7c\x1f\x2c\x4d\xf4\xab\xf8\xc6\x2b\x4c\x64\x85\x51\x54\x81\x9f\x1b\xcb\x73\x13\xb5\xb1\xa8\x2d\xd1\xec\x7d\x21\x03\x83\xce\x8c\x64\xd4\x77\x06\x02\xbd\x88\x5e\x30\x94\x80\x58\x0c\xad\x47\xc5\xff\x33\xc4\xe3\xd2\x11\x91\x85\x12\xf8\x4f\xe6\x62\x0b\x35\xff\xcb\x02\xe6\x13\x3a\x12\xce\xa7\x44\xd8\x29\x03\x0a\x92\xb1\xaa\x84\xff\x09\x1d\x5e\x91\x8e\x1c\x62\x28\x49\x94\xde\xbf\x6b\x3e\xc5\xcc\xac\x67\xdf\xeb\xe9\xfc\x6f\x9e\xb0\xab\x04\x9c\x52\x26\x90\x92\x34\xd8\xe0\x47\x2f\x03\x4a\xa9\x6f\x30\xae\x84\x86\x63\x03\xab\xcd\x67\x68\x45\x52\x1a\x99\xcf\x8c\xe8\x1a\xb6\xb2\x41\x33\x35\xc3\xd1\xd4\xb7\xc2\x33\x75\xe9\x4d\x5b\x11\x9a\xc2\xd1\x1d\x02\x34\x01\x3e\x13\xfd\x37\x87\x24\xa9\x5b\x30\x34\xdd\xd9\x4c\x5c\x1c\x9d\x49\x4b\xd7\xe2\xda\xd5\x47\xaa\x86\xc3\xbe\xc8\x7e\x9d\x07\x2d\x9f\x45\xc4\xe4\x48\xe5\x22\x7f\x0b\x7a\x93\x62\x59\x81\x51\x09\x61\x3a\xbc\x87\xc8\x55\x4f\x9f\xec\x0d\x3a\xa4\xf4\x11\x9e\x8b\x32\x90\x7f\x17\x49\x38\x05\x45\x90\xd9\x12\x1b\x54\xb1\x44\x5f\xd0\x7a\x12\x3a\xb7\xc9\x42\x30\xf5\xe6\x54\xd1\x3e\xa3\x5d\x06\x1d\x5d\x30\x62\xf2\xae\xd4\x6c\x9a\xe5\x77\xb7\xda\x58\xcd\x2f\xe9\x56\x1b\xab\xe9\x25\x1d\xc5\xc9\x0a\x66\x95\x8e\xe2\x64\x07\xb3\x4a\x47\x63\xca\xb2\xf3\xac\x6d\xe6\x49\x47\x71\xb2\x82\x3f\xa5\xa3\x38\x59\xc1\x9f\x10\xc5\xe9\xf3\xda\x79\x35\xe9\xe0\x4f\x66\x56\x10\x5a\x6d\x5c\x6f\xa5\xd9\xb0\xac\xbc\x3e\x20\x0a\x9e\xb4\xec\xb7\x67\x4d\xe1\xb1\x23\x38\xa5\xdb\xcb\x78\x82\x62\x4e\x86\xfa\x3a\x30\xd4\xa7\x02\x9f\x59\x2d\x6c\x56\x7b\x85\x15\x8c\x0c\x56\x74\x6b\xe6\x56\xc2\xd6\x15\xe5\x6e\xc1\x5a\x6f\xcd\xd9\x32\xd5\x63\x59\x5b\xb0\xde\xad\x9d\x65\x46\x77\x87\xb5\x93\xbc\xd2\x8d\x65\x26\xcb\xaf\x66\x2c\x53\x6d\x65\x78\x86\x74\x62\xb6\xb2\xb8\xa9\x8c\x9f\xa7\xe5\x62\xa6\xb2\xa4\xa5\x4c\x14\x21\x1d\xdd\x52\xa6\x1b\xca\x3a\xb9\x0c\x65\xf1\xbc\xb1\x06\xe6\x8d\x99\x0c\x65\xf9\xac\x3e\xe3\xfa\xa4\x1e\x86\x7e\x78\x34\x62\xf0\x8c\x33\x7f\x9a\xc7\x02\x34\x8e\x1e\x7e\xd2\x02\x24\xcb\x8d\x95\x4d\xff\xd4\xe9\xea\xe1\x32\x0d\x44\x29\x08\xa6\x6f\xeb\x6f\x9d\x3a\xf0\x63\x3c\x3c\xb0\x1f\xb4\x4b\x53\xff\x34\x1c\xd5\x67\xec\xb8\x2b\x70\x95\x3b\x18\x76\xc6\xad\x01\xa4\xc5\x7e\x73\xd7\x37\xf1\xbd\x26\x98\x34\x9c\x26\x18\x0e\xe0\xab\xfb\xfc\x57\x86\xbb\x81\xea\xed\xbb\xb6\x03\xe8\xb5\xac\xa9\x6e\x52\x6a\x12\xed\x5e\xfb\x04\x5a\x90\x16\x97\xeb\x45\xb1\xbc\x4f\x5a\x78\xa8\x8a\x17\x6c\x4c\xe6\xd3\xee\xde\x12\x60\x68\x5e\xef\x8d\xe9\x77\x18\x6d\x76\x93\xd7\x70\x11\x02\xa5\x1c\xdf\xad\xf1\x83\x5b\x22\x64\xe5\x65\xe9\xc0\x39\x16\x10\xb3\xb0\x81\x86\x75\xc0\x16\x0e\x86\x1c\x97\xe7\xc4\x7e\xce\xad\x98\x6a\x32\x10\x73\x53\x3d\x76\xc6\x25\x4a\x87\x70\x28\xa9\xee\xa2\x24\xb0\xdc\x38\x6c\x38\xea\x5e\x37\x25\xa6\xab\x73\x5d\x17\x37\xed\x0f\xc6\x33\x06\x32\x0a\xec\x38\x96\xe0\x29\xb5\x3c\xb3\xc8\x41\x94\x70\x1f\xe4\x3c\x5b\xa2\x74\x1f\xd0\x2f\xbe\xb5\x02\x2a\x36\x4d\xe9\xc1\x4a\x9d\xb0\x9a\x15\x08\x9d\x82\x89\x1c\x42\xed\xab\xc4\x7d\xca\x56\xa4\xa6\x50\x07\xeb\xc5\x64\xa9\xb6\x1f\xe1\xf6\xb2\xe9\xd5\xa4\xfd\x73\x81\x1f\xa8\x55\x43\xd3\x95\xd2\xdf\x65\x34\x0f\xd0\x5c\xb5\x5d\xaa\xf0\x62\xbf\x79\x50\x6d\x67\x07\xfe\xff\xe6\xe1\xc1\x32\x1d\x4c\x21\xd8\xb5\xc0\xe2\x85\x73\xa1\x49\x27\xe6\x01\x88\xf3\x15\xf6\x10\x56\xc0\x68\x83\xad\x3b\xdf\xd8\x18\x4f\x2b\x7d\xc2\x37\x88\x70\xa5\x3c\x8d\x09\x2e\xeb\xb4\x7d\xcc\x97\x81\x17\x93\x8e\xc0\x5b\xfa\x96\xee\x7d\xfd\xca\x22\x95\xbf\x7e\xf5\xda\x60\xe0\xbd\xe4\xda\xd2\x6d\x30\x0d\x1a\x41\x88\x4c\x19\x05\xe6\x35\x2f\x28\x0d\x4e\x65\x83\x4c\x05\xa5\x77\x75\x47\x14\x6d\xd4\x7e\x99\x5d\x4f\x7a\xac\x17\x74\x16\x5d\x45\xda\xd9\x18\xf2\xf0\xa6\xa3\x89\x05\x05\x7b\x4e\x2f\x59\x9c\x3b\x98\xe2\xdf\x16\x43\x49\x5f\x94\xb7\x69\xfa\xa2\x51\x5b\x84\x96\x98\x6a\x18\xdd\xd0\x0c\xc5\x1c\x2a\xb5\xce\xfc\x2d\x7b\xe7\x09\x2f\x01\x77\x4e\x74\x03\xa1\x52\x21\x2b\xa6\xa6\xcd\xaf\x1f\xbf\xfb\x4b\xf5\x97\xe1\x39\xc0\xa3\x57\xba\x3c\x8f\x72\xc4\xa0\x3f\x62\xbe\x40\x29\xcf\x6b\x1c\xc0\x55\x2a\x4c\x6b\xbc\x4d\x98\xcc\xef\x6c\x26\xf3\x16\xb9\x05\x4e\x82\x85\xd5\x64\xee\x63\x81\x84\xc9\xfc\x16\x5e\xa4\x06\x7d\x30\xb8\xb4\xa1\x06\x32\x85\xd8\xbe\xbb\x1a\x10\xb0\xc8\xa7\x85\x46\xb2\x25\x60\xc8\x75\x0d\xef\xab\x58\x8c\x15\x83\x3b\x51\xd7\x74\x76\x87\xbb\x0d\x7a\xb7\xd1\xfb\xb1\x84\x59\x08\x3a\x9e\x08\xd2\x87\x05\x7a\x67\xc7\x61\xc7\x4b\x04\x7e\x7a\x25\x5c\x79\xbd\x92\xcb\x7e\x42\x21\x30\x25\x3b\xf8\x0b\x17\xf7\x32\x2b\x01\xff\x76\xcb\xb0\xae\xd1\xda\xd6\x95\xbc\x29\x97\xf0\xbd\x5f\x9f\x39\xb0\x8c\xbb\x68\x39\x8f\xde\x77\xac\x7b\xdb\xe1\xaf\x27\xd0\x91\xc1\x39\x46\x70\x81\xc7\x0a\xe4\xc6\xa5\x8b\x69\x7d\xe0\x17\xe8\x6e\xcd\x19\x19\xee\xbd\x5b\xab\x9d\xd9\xb0\x9b\x6a\x0c\x50\x87\xde\xfd\x06\x96\x66\x63\xab\xe4\x15\xe4\x56\x28\x26\xe6\x23\xda\xb6\x6a\x62\x7e\x95\x6e\x62\x36\x34\xba\xd5\xa8\x37\xfb\x00\x5a\xc6\x48\x9b\xd7\xaf\x4f\x67\x8b\xff\x98\xfa\x83\x60\x3a\x0d\x86\x1d\x06\xd4\xca\x77\xc5\xfb\x8c\x17\xb5\x19\x99\xc0\x9b\x7a\xe0\xf8\x31\x39\x21\xa7\xe2\x19\xf3\xf0\x12\x35\x35\xa1\xd0\xac\x33\x44\x6a\x84\xc2\xc7\x9d\xc7\x19\x42\xa6\x20\xaf\xc2\x43\x2e\x62\x31\x19\xe7\x70\xba\xe1\x77\xeb\xb7\xc1\x68\xb2\xd7\x9a\xd4\x3b\x0e\xa7\x44\xa1\x5f\x19\xcd\x00\x99\x44\x47\x0a\x64\x1a\xfd\x00\xf6\x01\x02\xb1\xa5\x5e\x5b\x09\xd9\x2b\xb6\x95\x90\x41\xf2\x1a\xb6\xba\x37\xde\x75\x69\xf7\xe2\xf9\x3e\x41\xe9\xe3\xae\x28\xbe\xd6\xaa\xc7\xca\x53\xde\x33\x8c\x57\x1c\xaa\x4b\x4e\xbf\x37\x35\x30\xe5\xc7\x27\x1f\x1f\xe4\xe3\x84\x21\xfb\x58\x01\xc1\x32\x99\x70\x54\x3b\xe8\xd2\x56\xa6\xac\xd8\x4a\xf7\x2d\x65\xf6\x95\x76\x6c\x65\x7e\x04\x18\xa6\x93\x35\xee\x9c\x13\x4c\xb0\x3b\x8f\x80\x9a\xb6\x98\x05\x11\x50\xf1\x4e\xe2\x64\x14\xa9\x65\xe3\xc3\xc6\x29\x49\x4e\x12\xc3\x76\x12\x99\x83\x17\x8a\x99\xf8\xae\xf8\xeb\x3e\x3c\xc4\x04\x83\x84\xe6\x4e\x60\xb9\x8f\xf7\x6a\x18\x7f\xf4\x3e\xaa\xb7\xc7\x7d\x0a\xd8\xe5\x06\xd0\x47\x99\x9d\x0e\x74\xb3\x8a\xf7\x4f\xdb\xbe\xf0\x82\x57\xea\x05\xd5\x17\x38\xe5\x82\x57\xb6\x0b\x5e\x25\x2e\x78\x65\xd8\x2f\x85\x79\xbd\x07\xa7\x47\x8f\x25\xab\x1a\x19\xc8\xaa\x90\xe1\xa2\x52\xdf\x83\xa5\x9b\x30\x2f\x17\x76\x5e\x73\x75\xa1\x7f\x16\xea\x24\x64\x03\x78\x0f\xed\x27\xa9\x2a\xc0\xf2\x44\x1f\x4d\x6e\x35\x4a\xd2\x4e\x65\xf5\x5c\x32\x48\xc6\x52\x3a\xf7\xa4\xf4\x2c\x9e\x53\x37\x6f\x26\xa7\x65\x31\x56\x1a\xcc\xca\xe4\x34\x55\xcf\x9d\xaf\x69\xa8\x5c\x64\xbb\xaf\x5a\x55\x63\xa9\xc9\xbe\x34\xa7\x38\xd9\x40\xf0\x64\x82\x1f\x04\x51\xaf\xa0\x7a\x7c\x3e\xbf\xd5\x21\x43\x39\x93\x0a\x57\x4c\x9a\xf3\xc9\x14\xc8\x68\x0a\xcc\xec\xab\x32\xc8\x14\xcb\x48\x20\x63\x60\xae\x29\x0c\xa8\xe4\x1e\xfa\x82\x8f\x85\x41\x55\xb8\xf6\xf7\xc2\xfd\x66\x9a\xf1\xf4\x69\x51\xb5\x29\x75\x5a\xe7\x9d\xe1\xa6\xc9\x6e\x9d\xea\x89\xde\x20\x77\x1a\x74\x86\xe5\xbb\x40\xd0\xfd\x79\x7c\xd8\x78\xec\xbb\x9f\x24\x7c\x4d\xbc\x35\x50\xff\x8c\x87\x3d\x32\xe9\xcc\x88\x6d\x16\x30\x43\xc1\x2a\x7e\xa5\x94\xc9\x15\xbf\xbc\xe5\xe2\x91\xb8\xe8\xae\xb4\x35\x51\x73\x56\xd3\x35\xbe\xf8\x4b\xcc\x73\x5d\xfe\x59\xf1\x09\xc5\x02\x7c\xa5\x33\xa8\x1c\x79\x83\x5a\xcc\x0d\xe4\xb3\x8f\xb6\x89\x38\xa3\x03\x40\x77\x5d\x90\x10\x02\xf8\xd7\xb3\x79\x4b\x50\xdb\x46\xa5\x79\x00\xff\x86\x5e\x99\x85\xf0\x46\xbe\x13\x2e\xdf\xe6\xf1\x68\x98\x02\x43\x47\xdf\xdd\xec\x6f\xb5\x70\xa7\x9b\xfd\xad\x16\x6e\xb9\x9c\xbd\xa5\x2b\xab\x35\x24\xd1\xea\x6c\x90\xd5\xd9\xd4\xb3\x36\x60\x75\x3b\x80\x90\xf2\x89\xdb\x37\xd6\x35\xda\xca\x8b\xe7\xee\x77\x22\x48\x31\x6a\x82\x07\x28\xea\xe3\xa1\x84\x23\x76\xbd\x46\xa6\x3d\xd5\xe4\xb6\xb0\x07\x1f\xe2\x29\xd2\xcc\x0a\x3e\xe4\x05\x68\xc1\xec\xe0\x43\x51\x86\x34\x53\x83\x0f\x9b\xb9\x6c\xaa\x71\x63\x7e\x03\x8d\xf9\x8f\xb0\xa9\x06\x7e\x1e\x1b\xea\xb1\xec\x40\x84\x94\x7f\x9c\x62\x4d\x3d\x16\x9c\xd8\x74\x43\x3c\x1c\x76\x42\xdf\xe3\xc6\x53\x79\xc0\x3d\x00\xfe\x67\xf1\x8b\x20\xac\xe8\x64\xa6\x97\x8d\x0e\xb1\xd2\xd1\x6f\x32\x7a\x78\xa0\x05\x82\xe1\xd0\x9f\x7c\xa8\xb7\x82\xf9\x94\xea\xe2\x55\xa9\xed\xab\xaa\x13\xee\x18\x5f\xe9\x76\x07\x1b\x05\xa9\xcb\x15\x42\x3b\xee\x35\x81\x49\xd9\x20\xeb\x1e\x82\x3d\xb2\x49\x0f\xd0\x11\x45\xc4\x7a\xaf\x55\x64\x4f\xaa\x28\xe6\xc0\xa9\xe7\x17\x71\xda\x14\xe5\x93\x3e\x8b\xcc\x58\x54\xaf\x73\xa9\x46\x74\x0e\x6b\xdb\x05\xfc\x7b\x9d\x80\xaf\x09\xda\x0e\xd8\x19\x96\x02\x98\x44\xe0\xed\xbe\xf1\xce\x8a\x67\xcf\x5f\x90\x4b\x6f\xf1\xec\x8c\x5c\x79\xa5\xea\xd5\x6f\x18\x5c\xc0\xca\x55\xaf\x76\x77\xdd\x73\x66\xca\x7b\x03\x49\x80\xf8\xed\xd2\xad\xd2\xe7\xea\x6f\x9d\xd3\xf6\xcc\x56\x4f\x3a\x6e\x74\xa9\xf4\x27\x45\xfe\xf9\xfc\x85\xfb\xec\x0c\x31\x60\x52\x6a\xe0\x48\x17\xf9\xa7\xa8\x81\xa1\x93\x70\x93\xb6\x8a\x5b\x89\x8a\x80\x30\x1d\xb7\xf5\xbc\x16\x52\xe2\xeb\x78\x5c\x93\xb4\x55\x04\x7e\x24\xd2\xe7\x16\x15\x63\x96\x89\xc0\xdf\x92\x11\x57\x85\x5d\x2a\x72\xbe\xf7\x34\x71\x8f\xfc\x1e\xc3\x97\xf8\xe0\xbd\xcf\x10\x07\xa1\x5b\xd5\xec\x42\x0c\x46\xd0\x2c\xe2\x65\x1b\x08\xc8\xef\xba\x98\x10\xf8\x99\xb8\x0b\x27\x18\xea\x51\xd8\x3d\x85\x4f\x63\x13\xa2\x4b\xeb\x36\xf4\xda\x1e\xaf\x77\xbf\x4e\xbc\x5e\x17\xd5\x92\x43\x78\x21\x5e\xd1\x7f\x55\x31\xe7\xcd\xb3\x1c\xed\x78\x1f\xa5\xb1\x63\xd2\x04\x3b\x06\xcc\x5d\xf6\xee\x3b\xe7\xd7\x57\x54\xf7\xfd\x94\x5e\x60\xf7\x85\x5b\x9d\xd1\x65\x77\xbb\xbc\xb3\xe3\x7c\x54\x16\x13\x48\xa1\xfd\xa4\xff\x76\xc9\x6d\x54\x52\x2c\x52\x60\x94\xfc\xa4\xfe\xa2\x5a\x11\x16\x50\x96\x21\xe7\x82\x75\x25\x79\xcc\x25\x1f\xf7\x9a\xa3\x89\x3c\xba\xb3\x73\x87\x95\xd5\x63\x90\xef\xfb\x29\x7e\x04\x12\x24\xf1\xd5\xfe\x08\x86\x2a\xfc\xf6\x89\x21\x61\xfd\x01\x37\x1c\xd6\x97\x90\x9f\x46\x9f\x29\xe4\xdc\x80\xb9\x1b\xed\xba\x2c\x02\x29\x1d\x3e\x9b\x2e\xaa\x1d\x88\xba\x76\xab\x7f\x50\x41\x9a\xdd\xd6\xce\xce\x7c\x67\x27\xfa\x09\xb9\xc3\xf4\x26\xc7\xb4\xab\x1f\xb2\x15\x9c\xc0\x2f\xce\x82\x19\x28\x08\x71\xd9\x36\x3a\x23\x14\x90\x34\xc5\xc2\xe0\xb7\x55\xa8\xc1\x47\xc3\x59\x71\x1a\xdc\x53\xad\x5c\x5b\x65\x9f\x2d\x9e\xed\x3f\x77\xc6\x82\x02\x6f\x9f\xaa\x46\xe3\x85\xae\xd9\x94\xf6\x7e\x7c\xa1\xea\x36\x06\x4d\xcb\xa0\x68\x95\x80\xec\x75\xc2\xc9\x5e\x71\xa9\xfa\xd3\x4b\xdc\x5e\x32\x28\x13\xb9\x4a\xc4\xb2\xf5\x07\xe0\x27\x24\x2a\xc9\xb7\x30\x56\x55\xe8\x6a\xbc\x6a\xf5\xcf\x84\x6e\xf7\x1f\x23\x4f\xf8\x67\xef\x4f\xd3\xca\x58\xfd\x9c\x7c\x56\xbc\x77\xe4\xf3\xe3\xad\x1a\x37\x98\x31\x6e\x08\x6e\x96\xc6\x18\x33\x21\xcd\xbf\x4b\x4a\x2c\xdd\x2b\x34\x3a\xdf\x5b\xd9\xbc\x75\x9b\x48\x4e\xea\x69\xed\xee\x36\xb3\x7b\x6c\x7a\x73\x2f\xd4\x9b\x3b\x34\xdd\x5c\xc4\xdc\x9d\xb0\x9a\xa8\xfd\x36\x91\x73\xdf\x5b\xc9\xb9\x6d\x4d\x59\x56\x6c\xdf\xc0\xbf\xfd\x98\x91\xb6\x71\x6d\xdf\xdb\xb8\xb6\x37\xbb\xd8\x9f\xe6\x08\x59\xd5\xbd\x17\x70\x74\x42\x86\xe1\xfd\xa7\x2d\x5a\xd6\x5a\x05\xde\x19\x3d\x2c\x3a\xa1\x83\xeb\x12\x64\x9d\xe1\x4b\xfd\x99\x3a\x3d\x4c\xa1\xa3\x0d\x5d\xd8\xac\x8b\x90\xdb\x4f\x77\xbe\x3f\xc4\xc2\xc7\x54\x4b\x8e\x68\x18\xbe\xa0\x83\xd9\xb8\x4f\x7e\x61\xdb\x83\xb6\x0d\xaa\x1b\x11\x10\x72\x86\x74\x29\x1f\x1d\x38\x5f\xe8\x9e\x64\xdf\x2f\x0f\xe9\x59\xed\x00\x80\x67\xf0\x1d\x11\x6a\xc6\x76\xcf\x5b\xf5\x94\xba\x41\x56\xf0\x32\xd0\x9a\x5b\xfd\x8f\x51\x68\x53\x41\x05\x22\x52\xe5\xe4\x60\x33\xc7\x64\x5c\x74\x6e\x64\x05\xf7\xd2\x27\x32\x05\x3d\x44\xb9\x17\xef\x9c\x0e\xf3\x6e\xb9\x44\x74\xfd\x81\x1d\x7d\xc1\x95\x08\x4d\xfb\xd8\x55\xd4\x96\xe7\xfb\xcf\x9c\xf2\x2f\xa5\xe7\xb8\xf5\xbc\xbf\x10\xea\x44\x4a\xf9\xdf\x78\xd1\x83\x66\xd1\xfb\xb5\x54\x69\xee\xd2\xff\xba\x94\xf5\x05\xb1\xca\x7c\x80\x9c\x0e\x5a\xcc\x99\xbb\x35\x19\xcd\xb8\x4c\x88\x1b\x4f\x14\xe6\xaa\xdc\xc8\x59\xf2\x2e\xe8\xa1\x17\x99\x8d\x17\x10\x65\x5c\x4f\x7a\x88\xf3\x09\x17\xfe\xd5\x6e\xb7\x0b\xfa\xcb\x27\x0f\xb2\x41\x9f\x2c\x0a\xe4\x47\xf9\x63\x09\x3f\x94\x66\xb9\x90\x60\xda\xed\xa7\x07\x79\x86\x4b\x23\xc2\xae\x44\x12\x42\xac\x47\xa5\x52\xa9\x20\x0c\xcd\x7f\x81\xcd\xe9\x07\xaf\xfc\x13\xf9\x4a\xff\xd1\xb1\x69\x98\x62\x7a\x95\xd0\x65\xf0\x0d\x3d\xff\xea\x3e\xfb\x8a\x52\xae\x76\xa2\x5c\x7b\xfe\x83\xfb\xec\x87\x15\x9d\xb7\x71\x9e\xdf\x23\x52\x00\x6d\x22\xb4\xca\xd0\xff\x9d\x73\x30\xd7\xe4\xab\xb2\xe0\x96\x78\x73\x55\x64\x79\x41\x99\x94\xbd\xcb\xbe\x57\x6f\x38\x2d\xb7\xfa\xd7\xb5\x0f\x8e\x73\x88\x5a\x2a\x7a\x3f\xb8\xe4\xaf\x6b\x3c\x0e\xae\xf6\x95\xc1\xe4\xcd\x39\xf7\xa9\xfc\x93\xb0\x6d\x6f\xa5\xcc\x38\xc3\x2c\x78\xcc\x24\x5c\x19\x9c\x63\x6c\x81\x52\x2c\x1c\x45\xcd\x80\x01\x84\xed\xe2\x79\x91\xa6\x57\x28\x20\x8c\x29\x1f\x92\x87\x87\xe1\xcb\x06\xc7\x23\xa5\x67\x38\x05\xce\x80\x73\xd8\xf4\xfd\x65\xa1\xd2\xf4\xda\x02\x6f\x57\x65\xaf\xc1\xea\x70\xb6\xe7\x74\xc4\x79\xad\xc0\xd8\x9f\xc0\x63\x60\x45\x64\xf4\xd7\x56\x73\x85\x14\x35\x1a\x67\x0b\xcc\x69\x03\x3b\x4b\x66\x6a\x40\x0b\xd9\x95\x7d\xfc\xdf\xb6\x06\xf4\x77\xac\x01\xfd\xdd\x8c\x64\x82\xc0\x66\x3a\xee\x19\x78\x8f\xfb\x10\xa3\x11\x42\x00\xc7\xc0\xc3\x91\x23\x43\x6f\xaf\xb4\x0f\xe4\x2b\x65\x32\x86\x7f\x9c\x7c\x05\xb9\x57\xca\x82\x7b\x85\x05\xf5\x03\xbd\x72\x89\x2c\xbc\xbd\x17\x64\x09\xbb\xec\xfd\x3f\x4d\x9f\x2c\x15\x64\x0b\x09\xc7\xbd\xc9\xe0\x7d\xff\x14\x06\x6f\x2a\x13\x4c\xd9\x6b\xbd\x36\x41\xeb\xdf\x6a\x2b\x47\x60\x83\x54\x9a\x06\x6b\x98\x3c\x2a\xa4\x6b\x93\x3b\x60\xad\x77\xed\x36\x9c\x5d\x37\xf2\x17\xd7\xa9\x4f\xdd\x89\x4f\x7b\x1d\x5a\x03\xb6\xad\xb6\xf5\x1c\x94\xbb\xd6\x60\x6f\x6b\xc0\xb6\x35\x60\xde\x1e\x51\x6e\xf5\x3c\x88\xa5\x6f\x7d\xce\x63\xb9\x50\x6e\x12\x69\x9f\x5a\xd1\x1e\x6a\xaf\x98\x59\xd6\x67\x5a\x1e\x0d\xe7\xb3\x0f\xa0\xea\xad\x1d\x3a\xcf\xc4\x86\x77\xf3\xd9\x34\x68\xad\x9f\xa4\x81\xb5\x3f\xce\x87\x0d\xbf\x3e\xb8\x44\xd3\xcf\xfa\x54\x21\xd0\xf7\xb5\x29\x51\x3a\x93\xd1\xdd\xbb\xe1\x39\xac\x64\x6b\x47\xc9\x4b\x53\xc7\x9a\x77\xdd\x80\xbb\x6e\x10\xdd\x3d\x14\x6f\x8c\x3b\x89\xb4\x61\x8d\x7c\x44\xe2\x7e\x9f\xee\xfa\xc9\xe6\x32\x7b\x80\x67\xd6\x7b\x71\xd1\xb1\x13\xbf\xb4\xd2\x0e\xbf\xa6\xb2\x24\x68\x57\xdc\xd0\x27\x66\x26\x8a\xb3\xb9\xc7\xcc\xa5\x33\x3c\x65\xe6\x4a\x59\x4e\x33\x73\x2d\xa3\xff\xcc\x9a\x68\x62\xc4\xd4\x01\x09\x02\x0e\x20\x71\x47\x96\xf7\x2d\xee\x31\x6d\xa0\xc7\xd4\x08\xfd\xc1\x96\x7a\xda\xd1\xf5\x12\x65\x1e\x1e\x50\x68\x59\xc3\x7d\x97\x9b\xdc\xc3\x8f\xde\x53\xe9\xc3\xbb\x11\x7c\xd6\x4d\x40\x8a\xd6\x95\x6e\x2e\xa8\xf7\x33\xe9\x16\xfa\x4c\xf9\x1a\xda\x19\x13\xfa\xa4\x0d\xf4\x77\x76\x90\x69\x28\x60\xe3\xb3\xee\xe7\xa4\x6d\x20\xa1\x60\xad\x46\xf2\xee\x04\x6b\xf5\x84\x1e\x55\x58\xab\xc3\x88\xf1\xcc\xcf\xc9\x5a\x3d\x60\x23\x72\x53\x1d\x08\xd6\xea\x1b\xa0\xc4\x0c\xdd\xc1\xf5\x4d\xcd\x0b\xe9\xbf\x04\x6b\x35\x1c\x8c\x58\xab\xe1\x17\xb2\x56\x53\x89\x7f\xdb\x17\xfe\x3e\x29\x0b\xc7\x78\x08\xfa\xc0\x43\xd0\xcf\xc7\x43\x30\xf3\xfa\xf6\x48\x5f\x3e\x49\x64\xe4\xa0\x5f\x03\x18\xb2\xd9\x66\x4e\x34\x13\x8d\xf4\x2d\x6d\x4c\x8d\xe7\x9d\x67\xba\xc4\x38\xfe\x7b\x46\x41\x8d\xb5\x39\xa0\x6a\x62\x81\x2e\x3f\x05\x20\x30\x39\x70\x5a\x1c\x11\x7a\xe8\x02\x44\xba\xd3\x04\xbe\x12\x40\xb2\xc9\x60\x66\xf6\xf9\x0c\x6a\x41\xd4\x3f\x42\xa3\xb7\x54\x68\x74\x3c\xa6\x1c\xca\x9c\xb5\xa9\x97\xcc\x64\x2a\x6e\x47\x9c\xcc\x15\x8e\x8f\x06\x77\x07\x0a\xb1\xe8\xc2\x48\xbb\xbf\x36\x5b\x4e\xa1\xd7\xec\xf6\x5d\x2c\xcb\xbf\xbf\x1c\x3e\xdf\x57\x7e\xd3\x5f\x2e\x19\x16\xa3\xb2\xb2\xbe\x7a\x68\x8d\x21\xcb\xf0\x16\x0e\x39\xa2\x27\x36\x9a\x91\xb3\x10\x79\x3a\xa3\x31\xa0\x8b\xbd\x7c\xa6\xf2\xee\xab\x8c\x54\xff\x36\xee\x3b\xd1\xba\x08\x53\xba\xaa\x27\xfe\xdf\xf1\x5e\x43\x96\xcb\x66\x44\xb7\xa1\x24\xba\x1d\x6b\xb4\xaf\x61\x8c\xe8\x76\xfc\x48\x9e\x57\x7f\x7d\x9e\xd7\xd0\xcc\xf3\x1a\x63\x64\xbd\x89\x69\xf7\x47\x36\x02\x56\x4f\xdd\x50\x30\x5f\x2d\x81\xd0\xa7\x32\xb4\x46\xb0\x7c\x6d\x2b\x18\xe4\x3e\xb7\x0f\xec\x97\x56\x66\xcc\x47\x7c\x95\xa9\xba\x6e\xd1\xed\xc3\x04\x1d\xaa\xa4\x57\xc5\x8f\x11\x50\x97\x32\x60\xc7\xa7\xcc\xb2\x77\xab\x3e\xe7\x0a\x3d\x11\x98\x6c\x65\x77\x6d\x0e\xd2\xa6\x5a\x4a\x32\x89\xe2\x4c\xbe\x31\xea\xf1\x63\xd7\x0c\x3f\x90\x10\x1b\xd6\x22\x14\x05\x1a\xd1\xe9\x1a\x34\xa2\x8f\x20\x09\xad\xca\x3b\xdf\x88\x09\x54\xe5\xfc\xd4\xf9\x40\x73\xd0\x7e\xfa\x66\xda\xcf\xb4\xae\x58\x00\x5d\x7d\x1d\xd0\x35\xa5\x05\x2b\xc6\xaa\xbf\x39\xed\x27\x27\xf7\x6c\xa9\x98\x05\x63\xfa\x03\x62\xb4\x9a\x0a\xfa\xa4\xff\x14\xf6\x9d\x74\x8c\x45\xab\x09\xe2\x11\x38\x92\xec\xf6\xde\xf3\xd1\x59\xdb\x80\x91\x87\xe0\x72\x63\x78\x47\xff\x3b\xc2\x3b\xfa\x9b\xc1\x3b\xfa\xff\x00\xbc\xa3\xe1\x9a\x8d\x4c\xa5\xc8\x82\x65\xd8\xe2\xf4\x1c\x7d\x78\x8f\xc4\xd7\x1c\x34\x91\x66\x03\x04\x11\x3a\xcb\x28\x5b\xbb\x35\x59\xb4\xec\x11\x9f\x78\x4a\xca\x45\xd6\x88\x4f\x5e\x80\x16\xcc\x8e\xf8\x14\x65\x48\x3b\x35\xe2\xb3\xcd\x35\xd6\x34\x96\xc7\x66\x2e\x35\x70\xda\xc4\xcd\x28\x8f\x16\x78\x25\x87\xe9\x9d\xd4\x02\xaf\x52\x22\x39\xaf\x1c\x74\x60\xbd\x05\xe3\xf8\xf6\x2d\xd7\x55\xb6\xcb\x55\x96\x8c\x2d\x39\x1a\x1a\x76\x26\x26\x0b\xab\x58\x04\x99\xc4\xc0\x8c\xa8\x80\xc1\x30\x8c\xf8\x56\x72\x0d\x02\xe7\x6e\xd9\x2f\xc6\xfc\x01\x04\x04\x52\xd3\x71\x3a\x58\x04\x12\x39\xd3\xe8\x60\xb6\xee\x9c\xfa\xf5\x4f\x35\xdc\x8e\x21\x98\x87\xde\xd9\x25\x15\xb8\xe9\x72\xff\x8d\x45\x61\xd6\x75\xa5\x8c\xde\xa8\x38\xf2\xdb\x8f\x54\x54\xab\x33\x07\xfb\x75\xa8\xa4\xc1\x15\xa9\xa8\x33\x88\xfd\x66\x92\x0a\xfd\x57\x43\x2a\xc8\x58\x9d\x72\x6d\x57\xab\xc3\x7e\xa7\xd7\x49\x5e\x27\xbb\x4e\xf2\x3a\xb1\xbe\x29\x21\xb3\x1d\x7f\x34\xa0\x5b\x57\xb8\xec\xd0\x11\xbb\xbe\x2e\x96\x4b\x84\xfe\xd5\x08\x7e\x0b\x76\xf1\x6b\x77\x37\xf6\x1d\x4a\xd4\x40\x5c\x14\x0d\xdc\x4a\x28\xcf\x18\x80\x42\x94\xda\xce\x02\x3f\xe8\x92\x10\x52\x09\x92\xce\x63\xb6\xf5\x57\xea\x90\xa7\xbe\x5f\x23\x48\x93\xc9\x7e\xfd\x08\xf9\xf4\xd5\x3f\x74\xc1\x1f\x4e\x23\x56\xde\xd4\x98\xf6\xa5\x29\xc5\xbe\xb7\x5e\x65\x14\x23\x40\x31\xf4\xfc\x84\x6e\x3c\xbd\xed\x54\x34\x7c\xbc\x96\x39\x01\x10\xa4\x27\x68\x67\x67\x87\xbd\xf0\x48\xb3\xc9\x19\x12\x0a\x57\x85\x5d\x7e\xa4\x47\xbb\xe2\xd0\x05\xda\xdd\x2d\xfc\x55\xa8\x14\xae\xb6\x4a\x5b\xa5\x08\x5b\x2c\xb0\x44\x88\xb0\x2c\x22\xc4\x09\x8c\x90\xf3\x14\x64\x41\x63\x1d\x89\x35\x08\xe5\x68\x45\xe6\x41\x85\xa9\xff\x6a\x67\xa7\xad\xbb\xd3\x39\x37\xed\x3e\x15\xe8\xf9\x9f\xab\x39\xdc\x8b\xa3\x71\xbd\x89\xc9\xe3\x7b\x3f\xc5\x42\x06\xa2\x53\xe5\x44\x30\x81\x68\xb6\x44\x9b\x64\x7f\x10\xd5\xe8\x7e\xfb\x43\x03\x5a\x64\x8f\x07\xba\x39\x8d\x3f\xc9\x3e\x7d\x92\xea\x93\xe8\x24\x70\x1d\xb5\xca\xba\xd5\x44\xc1\x82\x14\x82\xa2\xe9\xe9\x1a\x21\x23\x6d\x4f\x41\x0c\xe6\x2a\xd6\x46\x30\x69\x86\x51\x7c\x6e\x73\x91\x9d\x91\xda\x5c\x66\x67\xa4\x4e\x0a\xe4\x88\x85\x7c\x0e\x63\x38\x5c\xb0\x34\x0b\x03\x52\x89\xfb\xde\x1b\x92\xaf\xb6\x06\x4f\x59\xee\x3e\x2d\xe1\x79\x6f\xf1\x15\xf9\x9a\xb3\xd2\xd6\xaa\x3e\xdb\xa1\xbd\x9e\xd3\x92\x5c\xaf\x20\x0e\x2c\xe8\xe2\xec\xc3\x97\x25\x5d\x9c\x7d\xf6\x2c\xda\xde\xef\x7b\x43\xba\xef\x38\x68\x59\x7b\x05\x19\x98\xc1\xb0\x73\x14\x42\xea\xf1\x07\x78\x98\x90\x97\x71\x47\x65\xd0\xd1\x1d\x13\x7a\x99\xb3\xec\xe1\xa1\x35\x6a\xce\x41\x80\xde\x13\x5f\x4e\x98\x40\x4d\xb7\xaf\xc9\x28\x0c\x3f\xd1\x6d\x38\x50\x2b\x7e\xce\x59\xf1\x92\xee\xa2\x54\x91\xfc\x86\x9b\x2a\x60\xe3\xf9\x82\x7e\xd7\x75\x85\xa1\x21\x10\xf8\xa3\x74\xd5\x82\x5d\x7f\xe0\x8c\x63\xc5\xc0\x08\xd1\xe5\xd0\xa4\xe5\xd2\xaa\xda\x74\xbe\xb1\xb5\xc8\x17\x4b\x54\x0b\xa3\x98\xfb\x44\xe1\x02\xae\x88\xc1\x62\xeb\x96\x38\x86\x3f\x50\x2d\xf2\xcd\xd1\x77\x54\x9c\xa6\xcf\xef\x8d\x16\x7f\x27\x52\xd7\x4c\x31\x74\xb1\xf2\xc2\xcb\xac\x67\xbb\x25\x92\xef\xb4\x3a\x52\x07\x4b\x4f\x91\x33\xd4\x99\xcf\x60\xb7\xc4\xac\x02\x7d\x3d\x85\xf4\xdb\xb1\x21\x7c\x15\x8f\x27\x0f\xe3\xa8\x14\x5c\x4b\x3c\x22\x9f\xcc\x0f\x0f\xdb\xca\xfc\x4d\x99\xda\x44\x99\xc7\xcd\x5a\xf5\x4d\x2c\x96\xd1\xf8\xec\xae\xd9\xec\x68\xd2\x07\xce\xa6\x03\x61\xf3\x80\x1d\xa0\x4f\xbe\x96\xf9\x70\x9b\xab\xb4\xe7\xf4\x64\x77\x11\xc5\x49\x7e\xff\x1b\x31\x07\xff\x3e\xd5\x9d\x28\x91\xbc\xdf\xed\x56\xb8\x82\xd2\xe3\xcc\xd1\x29\x13\xfc\x89\x6f\x0b\x62\x78\x13\x77\xb5\x7e\x77\x71\x69\xff\x3d\x81\xaa\xf2\xc1\x0e\x44\xfe\x3b\x00\x91\x7f\x4c\x01\x22\xff\xdd\x04\x44\xfe\x3b\x18\x05\x0c\xb6\x1d\x54\x24\xb9\x94\x6e\x82\x51\x91\x06\x9a\x28\xa7\xfb\x93\x77\xbc\xb3\x73\xb2\xb3\x73\x7e\x70\x5d\xab\x58\xd5\x80\x4c\x25\x40\x6e\xaa\xdf\x16\x15\x86\x01\x4b\x96\x15\x86\x02\x4b\x20\xc6\xbf\xc2\xa0\x57\x57\x4c\x5c\x97\x00\xdb\xc7\x2a\x8a\xfa\x27\xfb\x45\x17\x2b\x1d\x51\x5d\xc8\xc6\x0b\x00\x55\x2a\xd5\x0e\x4e\x1f\x1e\xae\x9d\x0f\xcf\x96\xbb\x1f\x30\x40\x2b\x09\xdd\x4a\x1f\x42\xf1\xc3\x33\xa7\xbc\xbb\xb4\x15\xa8\x55\x4e\x11\x52\xfd\x03\x15\x84\x07\xa2\x7f\x27\x39\xfb\xb7\x5c\xa9\xd8\xe9\x02\x05\xe6\x8c\x36\xf8\x11\x01\x60\x86\xa2\xc1\xf3\x9c\x0d\xc2\x98\x45\x6d\xce\xa3\x36\x2f\x1e\x1e\xde\x03\x5d\x77\x2a\x18\xfa\xc3\xc3\x20\x76\x7a\xa0\x9e\x7e\x12\x24\xf5\x38\x52\x7a\x1c\x49\x3d\x8e\xb4\xae\x22\xb9\xa7\xf6\x6e\x67\x47\xfe\x1c\xe8\xd7\x1f\x24\xae\xaf\x1d\x21\x83\xc4\xf5\x07\xe6\xeb\xb3\xc4\x44\xad\xf3\xae\x72\xdb\x7a\xb1\x41\xac\xd8\x20\x5e\xac\xe9\x35\x1f\x1e\x42\xd0\x9e\xe8\xb8\xd3\x75\x06\xc2\x00\xab\x2c\xaf\xe7\x77\xab\x33\x8f\xab\xfa\x1a\x54\xcf\x9f\x54\x3a\x5e\xdf\x97\xc7\x5b\x52\x93\xe2\xfa\x90\xa5\xf2\x67\x1c\x20\xfe\xb3\x72\x08\xbc\x7d\x5f\x14\xb5\x0a\xbc\x7d\x7f\x68\x41\xdc\x80\x75\x12\xfa\x7c\xb3\x27\xaf\x21\x33\x20\xd5\xc7\x27\x84\x88\xac\x72\x9a\xf2\x46\xfe\xd8\x08\x6d\xfe\x3f\xd9\xf8\xf0\x7e\xab\xe3\x0b\xe9\xbe\x9f\x40\x86\xd7\x15\x16\xad\xac\x05\x13\xfe\x43\x1c\x3f\xfb\xe3\xcb\xd2\xc1\xc7\x4a\x89\x0e\x63\x52\x7f\xbb\x8f\x90\xe1\x63\x6d\x33\x4c\x78\xf2\xd6\xdb\x2e\xf1\x48\xe7\xf5\x44\x31\x3b\x34\xbc\x99\x51\xb3\xef\xd3\xa5\xa9\xfa\x97\x71\x5a\xd9\xd4\x3e\xbf\xf8\xb3\x45\x59\xc4\x53\xe4\xaf\x44\x16\xd3\x5f\x76\x6c\x70\x55\xd9\xc2\x9b\xc0\x29\x8b\xbb\x10\xd7\xbb\xe2\xd9\x3a\xc6\xfb\xc0\x73\x2b\xb8\x52\x3c\x88\xfb\x1d\x29\xf0\x37\xa0\xb2\x15\x8d\x9e\xaa\x0c\x1b\x0d\x48\x3d\xee\xcc\x89\xab\xb8\x6b\x14\x36\x69\xca\x31\xe5\xfa\x05\xdb\x64\x7f\xf0\xfe\x8a\x9b\x29\x54\x41\xda\xfa\x50\xb3\x36\xdb\x6b\xfa\x3d\x8f\xa5\xac\x24\x2c\x65\xd5\x1f\x6c\x64\x01\x96\x11\x53\xfa\xc2\xbc\x34\x29\x03\x66\x28\xbb\x2e\x12\x4a\x13\x10\xd1\xa1\xbb\xa0\x36\x73\xd8\xf6\x16\x60\xa2\xab\xc7\x74\xf0\x76\xe9\x5e\x5c\x0e\x1a\xa3\x90\xde\x18\xb8\x66\x4d\xa3\xc9\xb2\x04\xf0\x29\x02\x97\xa7\xa1\xc4\x10\x00\xdc\xa3\x2b\x01\x9f\xf0\x0f\x86\xb9\xce\x8f\xa4\x3c\x50\xfb\x1c\xdd\x82\xca\xe9\xa9\x06\xc6\x81\x09\x0d\x03\x33\x30\x0e\x8c\xec\xe8\x0f\x39\xd0\x46\x94\xf5\x9e\x2f\xf4\x90\xb4\x93\x38\x0c\x80\xdf\x20\x37\xc4\x4f\x0e\x47\x43\x05\x7c\xb8\x00\x86\x65\x23\x7a\x37\x74\x26\x65\x4c\xf0\x1a\x19\x09\x18\x8f\x1c\x95\xbf\x69\xba\x20\xfa\xf9\xa7\x60\x80\x1a\x45\x1b\x2c\x90\x53\x7f\x26\x7e\x5f\x91\x1f\x4b\x80\x34\x48\xc5\xad\xe6\x68\xbc\x44\xff\xfc\x40\x7c\xf5\xbd\x21\xff\xba\x02\x0c\x22\xc5\xe1\x2f\x46\xc9\xe0\xef\xdf\x18\xf5\xdf\x8a\xe1\xa2\x45\xf0\xbf\x88\x47\xf0\x9b\xa1\xff\x93\xc7\x86\x86\x63\x16\xb8\xff\x85\x15\xeb\x7f\x69\xc5\xf9\x87\x07\xf2\xf0\x50\xb6\x42\xfd\x4f\xbb\xf5\x31\x2d\x50\xe0\x56\x3c\x1d\xf6\x9f\xfe\xe3\xb0\xff\x46\xaf\xfb\x70\x34\x3b\xc4\xd9\xbc\x12\xf8\xff\x7b\x65\x72\x0f\xdf\x0e\xa1\xd6\x2b\xf8\x76\xe4\x25\x9d\x55\xfb\x2f\x56\xe4\x98\x0d\xef\x09\xfb\x38\x65\x1f\x67\xec\xe3\x9c\x7d\x5c\xb0\x8f\xd7\xd0\xcc\x1b\x3d\xe8\xe1\x69\x12\x11\xd4\xac\x83\x4b\xe8\xf1\x15\x06\x58\xa0\xdf\xe7\x9d\x31\x66\xe1\x0d\xb9\x02\x0c\x85\xeb\xf2\xcf\x64\xff\xc5\xcf\x35\x43\x22\xc2\x9b\xfc\x8e\x6a\x08\xd5\x99\x7a\x43\xff\x4e\x0d\x79\xc0\x04\xcb\x14\x62\x80\x28\xa1\x7d\x34\xd8\xbb\x9b\x04\x33\x5f\xcd\x1c\x97\x8b\x96\x14\x86\xa4\x98\x4b\x65\x35\xb9\xec\xa6\xd2\x07\xb8\xe8\x28\x59\x31\xfc\x59\x1b\x21\x02\x38\x9e\x5a\xe8\x8a\x35\x75\x83\x3b\xca\x84\x09\xf3\x66\xee\x4f\x96\x1f\xb1\x5f\xf4\x5d\x31\x76\x2b\x92\x72\xd4\x7e\x02\xc7\x09\xc6\x38\xf1\x95\xd8\xc0\xa4\xd0\x82\xbd\x7a\x45\xde\x98\x43\x2f\xf8\x42\xad\xce\xde\x5b\xaa\x06\xf3\xb1\x8f\xdd\x9d\x23\x54\x7e\x34\x59\x08\x43\x29\xfb\xc1\x82\x23\x0c\x57\x01\x18\x82\x27\xbb\x48\x99\x05\x45\xfc\xef\xa0\x62\xb0\x86\xeb\xa7\x53\x31\x58\xe3\x15\x70\x20\x52\xab\x5a\x23\x34\x32\x58\x1c\x8e\x93\xf5\x8e\xf3\xb0\x38\x9c\x24\xeb\x9d\x44\x5d\x4d\xaf\x7b\x9e\xac\x7b\x9e\x83\x01\xe2\x34\x59\xed\x34\x07\x03\xc4\x59\xb2\xda\x59\xd4\xd3\xd4\xaa\x17\xc9\xaa\x17\xff\x00\x79\x04\x56\xc3\x37\x64\xed\xa4\x96\x1c\x9c\x0e\xd6\x24\x1c\x1c\x9f\xc3\xd4\xba\xd6\x7c\x18\xce\x77\xf1\x0e\x12\x44\xd7\x4e\x18\xcb\x20\xcb\xb0\x66\xd2\x64\x91\x65\xdc\x27\x2b\xde\xcb\x8a\x19\x04\x97\x87\xc9\xba\x87\xb2\x6e\x7a\xd2\xd0\x51\xb2\xea\x91\x0c\x9e\xca\xb8\xec\xab\x64\xdd\x57\x19\xd9\x58\xd6\xfc\x36\x6b\xca\x97\x31\xc4\x26\x9e\x08\x61\x4d\xa3\x30\x66\xc6\xc5\x6b\xb3\x05\x0c\x0c\xb8\xeb\xe4\x0a\x99\x5b\x01\xa9\x6c\xad\x54\xbb\x78\x33\x8f\x24\xdc\xc8\xc1\xb8\x91\x9f\x72\x63\x0d\xce\x0d\x1b\xe9\x46\x56\x04\xd5\xd5\xff\x49\xde\xd1\x95\x57\x27\x22\xe0\xe7\x2a\x33\xa4\x2b\x3f\xca\x5c\x0e\xaa\xd8\xcb\x64\x6f\x2e\x69\x6f\x30\xee\x06\x00\x96\xa8\x7c\x5c\xce\x8d\x57\xc7\x95\x9a\xdc\x49\x2f\xcb\xe8\xad\x94\xe1\x4e\x47\x4a\xd2\xcb\x74\x67\x47\xfe\x6c\xb9\x64\xa6\xfc\xf4\x5d\x32\x56\x7e\x76\x10\x0b\x46\xfe\xec\xba\x64\x19\x53\x94\x97\x4c\xd8\x3b\xcd\x4c\x98\x39\x15\xe4\x8e\x16\xf7\x4e\x9f\x9c\x02\xe0\xf0\xb9\xd5\xbd\x13\x62\x01\x5b\xc2\x0c\x80\xc9\xdd\x1f\x9c\x8a\x4c\x99\xca\xa9\x05\xa2\xe6\x3e\x2d\x99\xe6\x56\x24\xd3\x9c\xd0\xfb\x4a\x26\xd3\x1c\xd3\xa3\x4a\x32\xcd\x6d\x14\x19\x6c\xc3\x82\x8b\x27\xd3\xdc\xb1\xd1\xba\xa8\xde\x89\x64\x9a\x0b\x08\xbb\xbf\x75\xef\xae\x2f\x6a\xde\x2d\xfd\x97\x48\xa6\x81\x83\x51\x32\x0d\xfc\xc2\x64\x1a\x67\xb9\xb3\x23\xc0\xf3\xe0\x9b\x95\x1f\x24\x32\x8c\xb1\xc2\x54\x47\xe7\x4e\x1c\x6b\x0e\xce\x69\x2c\x47\xde\xa8\x54\x57\x4f\x33\x93\x74\xa8\x6a\xdb\xdc\x63\x32\x24\xea\xb4\x4d\xc1\xcf\xcf\xa6\xc2\x6b\xef\x34\xcb\xe2\xaf\xa7\xf0\x2c\x6b\x54\x02\xf7\x5e\x6f\x6e\xf6\x67\xb9\x00\x8a\xf6\xd1\xdc\x0b\x5a\xa0\xab\x5f\x7a\x6f\x34\x6b\xff\x95\x84\xe5\x63\xd6\x7e\x08\x99\x8b\x63\x87\x98\xaf\xa8\x43\x82\x33\xeb\x1f\xae\xe8\xfe\xa4\x88\xf1\xcf\xd3\x88\x18\xe6\x32\xdd\xf8\xbf\x50\x30\x9a\x33\x8a\x2e\xf3\x17\xe5\x43\xc1\xf3\x8b\x32\x0a\x03\xda\xb8\x3f\x05\x14\xd2\x4b\xfa\x96\x4c\xf3\x55\xa2\x13\x7e\x96\xaf\xa4\x96\xea\x34\xdf\xd9\xb9\xd2\xcc\xfb\x4b\x05\x8a\x38\xdd\xf1\x71\xc6\x73\x70\xc8\x84\xbd\x5f\x6f\xbd\xb3\x6a\x9b\xa7\xd5\xbc\x05\xfc\xbe\x8c\x64\x9f\x25\x5f\x14\xda\x2e\xe9\xb1\xfc\xa8\xb6\x9a\x1f\x85\xc7\x94\x43\x99\x8b\x54\xea\x25\x33\xf3\xa3\x7a\xd2\x77\xb3\x7a\x9d\x71\xe3\xbd\xc8\xe3\xd3\x4b\x66\x14\x9d\xc9\x8c\xa2\x73\x97\x47\x23\xc7\x17\x2a\x2d\x64\x15\x8b\x3c\x3c\x0c\x84\x01\x3f\xc5\x52\xbe\xbd\x44\xae\x27\xb9\xb4\xc5\xef\x58\x9b\x65\x62\x94\x53\x48\x8c\xd4\x65\x32\xca\x61\xd2\xdb\x34\x4e\xc6\xa4\x3f\xc9\xe8\x4d\x62\x2f\x7a\xc4\x3d\xf1\xce\xcb\xd3\x76\x6c\x81\xa3\x85\xf0\x6c\x06\xeb\xf0\xbb\x7c\x98\xee\x51\x6b\xd8\x23\x00\xe6\x34\x5f\xcf\x7e\x39\xc6\xe1\xf2\xde\xc2\x1a\x61\xbd\xa4\xdd\x9d\x55\x72\xc9\xfb\xd4\xad\x04\x17\xb2\xa6\x3f\x9e\x41\xc8\xe7\x34\x1c\x8d\xc1\xf1\x6e\x80\x0a\xe2\xcf\xff\x7d\x38\x9f\xc2\x15\x71\xe1\xad\x6c\xd1\xeb\x6b\x5d\x03\xf2\x8a\xa1\x12\xdd\xab\x92\x51\x0c\x95\x08\xde\x0c\x22\x8b\x91\x33\x54\xdd\xce\xcf\x78\xcf\x76\x95\xee\xba\x59\x24\x16\x5a\x1b\x65\x6b\x1b\x29\x0e\xb0\x88\xd8\x77\x6b\xc0\x83\x5c\x6c\xc3\x6c\x1c\x5a\xf1\x02\x3c\x3c\x28\xc9\x73\x5e\x94\x3c\x87\xfd\xb1\x9d\x94\x9d\x3c\x28\x55\xca\x2b\x14\xf1\x9c\x16\x87\x65\x1f\x32\x4c\x76\x2a\xeb\xf1\x4f\xf7\x40\x7e\xab\x88\x85\x8c\x96\x6c\x7e\x82\x63\x9f\x9d\xb3\xe7\xe5\x52\x89\x80\xa8\x03\x85\x40\x9f\x71\x8a\xe7\x30\x35\xf4\xe5\x79\x91\x73\x79\x86\x35\x6d\xa4\x86\x70\xc3\x4b\x28\x92\x2b\x51\xfa\x74\x7c\xde\xd3\x91\xe8\xa9\x2f\x7b\xea\xdb\x7b\xfa\xc5\x39\x7f\xfe\xe3\xcf\xb1\x8e\x9e\x25\x3b\xaa\xee\x23\x78\x59\xdf\x45\x29\xd7\xe9\x80\x60\x87\x32\x0f\x4b\x34\x8d\xc6\x4b\xae\x9f\xdf\x7b\xd5\xbc\xd4\x7a\x1a\xed\x9c\xd9\x3b\xec\x24\x68\xcc\xa1\xfd\xcf\x85\xf8\xfd\xc6\xce\x6e\xf0\x70\x36\x5a\xaf\x3b\x2e\x2a\x0b\x4e\x57\x19\xd5\x65\x34\xaa\x23\x31\xaa\x7f\xc3\x5e\xf4\xf8\x51\xfd\x92\x3a\xaa\x5f\x32\x25\x12\x67\x7e\x70\x56\x29\x76\x99\x3b\xcc\xe5\x84\x15\x1b\x0e\x6c\x17\x53\x98\x37\xca\xe6\xbd\x95\xd9\xbc\x0b\x2d\x9b\xf7\x36\x96\xcd\xbb\x78\x64\x36\xef\x72\xfd\x6c\xde\xdb\xec\x6c\xde\xf5\xb3\x19\xc1\x72\xad\xa4\x33\xc6\xd9\x99\x75\xb1\x3f\xee\x79\xd0\x0c\xf3\xfc\x24\x3c\xf5\x05\x9e\x8b\xcc\xf4\xea\x6e\xf4\x54\xd7\x58\x5a\xae\x01\x3b\xa1\x9c\x45\x19\x23\x62\x4d\x35\xfd\xee\xa3\x00\xc7\xa7\x88\x06\x7f\xce\xa4\xd7\xbf\x61\x54\xd8\x35\x51\xfc\xed\xf0\x01\x2a\x32\x71\xd8\x25\x41\x94\x8f\x8a\xc5\x5c\x73\xb2\xec\xa1\x74\x23\x93\x57\xde\x28\xf2\x28\x1b\x95\xdf\xbb\x60\xd6\xdd\x02\xe9\x25\x3d\x97\x9c\x17\xd7\xf3\xc9\x19\x53\x99\x9a\x4d\xce\x8f\xb4\x0d\x39\xe7\x9d\xe8\x98\xba\xe6\x60\x86\x81\xed\x4c\x60\xca\x53\xef\x59\xf3\xd4\x5f\x70\x67\xf7\xbf\x5f\xac\x48\x9f\x39\x59\x43\xf6\x31\xb0\x79\xbb\xad\xaa\xbc\xc4\x97\x2b\x93\x09\xb8\x50\xa7\xf0\x6f\x06\xff\x38\xc0\x5c\x3c\xa5\xfd\x8e\x5d\x69\xa1\x3b\x74\x73\x66\xaa\x93\x25\xab\x7d\x0f\x8e\xda\xaa\xec\x12\xdd\xb2\x79\x7f\x46\x80\x7c\x20\x28\xe1\xd8\xed\x16\x98\x7c\xf0\xbe\xde\x82\x9c\x0d\xa7\x5c\x82\xdc\x0e\x5e\x64\x7e\xc0\x11\x28\x2a\x9c\x3f\x2e\x51\x94\xf3\xcc\x15\x16\x40\xbd\xc1\xbf\x2f\x01\x99\x83\xa7\xcc\x67\x64\xc5\xb7\x54\x3e\x1c\x91\x14\x9f\x2b\x9f\xde\x37\xd5\x44\x55\xe1\x90\xbc\xb2\x40\xe3\x2d\xc8\xbd\x4b\x8e\xbf\x4f\x52\xfd\xc9\xdf\x9b\x54\xaf\xb8\xd4\x17\x74\x57\x10\xd9\x9e\xcd\x28\x67\xbc\x4d\xbf\x2e\x0e\xe9\x03\xc1\xec\xf1\x25\x7e\xf3\x59\x1e\xf9\xec\xb3\xd7\xe1\xdf\xbe\x78\x5d\x25\x8d\x3c\xf8\xee\xbc\x38\x56\xcf\x44\xba\x0f\xd6\xea\x4c\x05\xff\xc9\x31\xdc\xd1\xda\xa0\x7d\xa2\xa6\xd5\x17\x67\x85\x2e\xcb\x4e\x78\xb7\xa2\xfd\x41\xd5\xcf\xf0\x28\xd6\xf6\x1b\x42\xcd\x2f\x69\x35\xad\xae\xc3\x3c\x59\xf2\x56\x27\x5e\x3a\x26\x80\xd5\x7d\x97\xe5\x8f\xb0\xba\xe1\xb2\xb2\xf2\x83\xef\x98\x95\x1f\x6c\x96\x95\x1f\xfc\x03\x59\xf9\x86\x6b\xaa\x3d\xfe\xfc\xf8\x2e\x67\xf6\xf8\x53\x37\x98\x6e\xb1\x55\x60\x8b\x7e\x63\x56\xed\x16\xd9\x1a\xcf\x67\x9c\x7c\x92\xf6\x77\x36\xda\x02\xa3\xc1\x96\xb8\xa9\x82\xd2\xc9\x2f\xff\x4f\x77\x32\xdd\x41\x68\x82\xa4\xb0\x3b\x08\xf1\x14\xe9\x65\x39\x08\x79\x01\x5a\x30\xdb\x41\x28\xca\x90\x5e\xaa\x83\xb0\x27\x1c\x84\xd8\xf2\x61\x18\x74\x86\xa9\x8b\x88\x39\x88\x20\x12\x08\xea\x71\x81\x20\xcb\x6d\x18\x0f\x67\x69\x60\x38\x4b\xd2\x6d\x48\x55\x38\xa6\xf6\x0e\x40\xa6\x90\x5f\xbb\xf2\xeb\x93\x60\x22\x8c\xeb\x93\x3e\x08\xa9\x79\xdc\x84\xbd\xe8\x61\x27\xb1\x10\x40\xce\xe8\x79\xdd\x22\x73\xc0\x16\x85\x6b\x97\xee\xa0\x45\xf4\x06\x17\xa5\x03\xf7\x26\xd3\xf5\x77\xe3\x92\xbe\x64\x7d\x56\x73\x7a\x1a\x64\x20\x73\x75\x7c\x4c\x28\xea\xd5\xdc\x28\x33\xa6\xa5\x97\x1d\xca\xb2\x6d\x5a\x76\x0c\xb9\x42\x55\xec\xe7\xc4\xbb\xb1\x3b\x92\xc4\x88\x68\xc9\x23\x53\x6f\xb2\x89\x17\x29\x6a\xab\x3a\xd5\xfc\x45\x13\xd5\x5b\xb4\x9a\x6c\x92\xa7\xc1\x11\xed\x26\xb6\x14\x7d\x9b\xf5\x37\x89\x68\xc7\xb9\x5e\x67\x89\x68\xec\x59\xae\xf8\x7d\x69\x7b\x19\x09\x69\x55\xc6\x03\xeb\x5c\xcd\x0b\xb3\xdc\xda\x77\x98\xd1\x06\x6a\x2e\xcd\x45\x42\x67\x28\x8a\xb0\xfb\x9e\xeb\xf7\xcd\x62\x51\x53\xa3\xfe\x95\x79\xcc\xd0\xe6\x8b\xe5\x6d\xaf\x21\xc8\xcf\xeb\xf4\x29\x0b\x41\xb2\xa9\x28\x90\x1e\x7d\x91\x04\x1a\x38\x06\x39\x4a\xed\xcd\x66\x89\x1a\xf2\x41\xa0\xea\x5c\xc3\x69\xee\xd1\x99\xc1\x5a\x7a\xd7\x76\xb4\x7c\x2d\x17\xd4\x3b\x28\x11\x24\xcf\x96\xe0\x6c\x9b\xd5\x47\xd7\x6b\xb1\x2c\x01\x3f\x7c\xd2\x22\xed\x5a\x8a\xcd\x1d\xba\x89\xe4\xe6\x2b\x80\x18\x8c\x3f\x6b\x91\x7b\x4f\xe6\x89\xa7\x3d\x4f\xcf\xc7\x67\x8f\x49\xd3\xae\xdd\xac\xfc\x7c\xf6\xdc\x2c\x75\x26\x05\xb2\xef\xda\x72\x5b\x34\xd3\xb8\xd6\x80\xe7\xf5\xd5\x71\x3c\x90\x71\xf4\xe8\xa7\x65\x3c\x23\x7f\x32\xc0\xf7\xc4\xc5\x3d\x3d\xb3\x4f\xaf\x3b\x08\x86\xbc\x9e\x7e\xb8\xbe\x60\x87\x57\x0a\xfb\xa7\x1e\x1b\xbe\x1f\x8f\x0d\xdf\x57\x62\xc3\x7f\x2a\x95\xa8\xba\xfd\xe3\x3e\x55\xaf\xa9\x8e\xdb\x37\x04\x6f\x9b\x03\xbf\x8d\x36\xff\x05\x95\x3f\xad\x01\xdd\xa3\xe4\x36\x72\xcd\xa8\x1f\x6a\x0a\x02\xfa\xf7\xd5\x66\x9e\x3c\xa2\x34\x3d\x68\xd2\x84\xd1\x9b\x27\x50\xd3\x0a\xb0\x9e\x1e\x6c\x69\x05\x58\x4f\x0f\xb6\xb4\xa2\x87\xa7\xc7\xcb\x5a\x35\xc3\xf4\x78\x59\xab\x66\x58\x1f\x06\x83\x14\x8d\x67\x7d\x54\x74\x63\x64\x6e\xee\x10\x39\x63\x70\xee\x7f\x79\x54\x5a\xaa\x64\x18\x8f\x38\x6c\x20\xa8\xd7\xe6\xb4\xa5\x52\xfc\x00\xaf\x6a\x1e\x01\x6f\x1c\xd9\x08\x62\x02\xde\x8d\xb2\x81\x4e\x18\xd8\xd5\x76\x4f\x84\xed\x1f\xc6\xfd\xd0\x18\x69\xcf\x16\x4d\xbe\x13\x07\xb4\x67\x5e\x3d\x9f\x9f\x5b\xab\x6d\xf5\x3b\x9b\x73\x02\x4b\x20\x4c\xf2\x8d\xcd\x1c\xcf\xb5\xff\xa2\xb4\x41\xab\xd1\x2e\x59\xdf\x20\xed\xce\x47\xb0\xc6\x1b\x2a\x7f\x91\xba\x2b\xc9\xc8\x37\xe8\xa0\x2d\x15\xb2\x0c\xfa\xaf\x88\xed\x72\x1a\x66\xbf\xfe\x02\xdd\x0f\x8a\x15\x9e\x01\xeb\xaa\x36\xf2\x92\xea\xf4\xbe\x35\x10\x15\x25\x63\x8e\xc4\x83\x8a\x68\xb3\x7f\x96\x8d\xc4\x2f\xa1\xb3\x19\xfa\x18\xf2\xa4\x10\x0f\xee\xfd\x0a\xb4\x83\xe4\x50\x73\x04\x44\xb3\x01\xad\xfc\xf2\x7a\x48\x2d\xd3\x97\x43\x1b\xd0\xed\xbc\x46\x02\x14\x9d\xf2\xf4\x7b\x99\xe8\x77\xde\x6e\x33\xae\x9b\xb5\x3b\xbe\xd4\x3a\x1e\xd2\x8e\x2f\x93\x1d\xa7\xaf\xb6\x7c\xcd\xa6\x8e\xf2\xce\xd5\x99\x8c\x29\xbd\x75\x2c\x95\xac\xde\x98\xf2\x01\xc0\x4c\xb9\x92\x5b\x6c\x80\xdc\x09\x04\x33\xa5\x6a\xfb\x37\x01\xa9\x55\x6d\xef\xee\xba\x89\x0a\xed\x1a\x69\x43\x85\xdf\x9a\x74\xca\x18\x1a\x14\xe7\x69\x83\x6d\x29\x3e\xb4\x56\xca\x9b\x8f\x4c\x63\x11\xe3\x3c\xe2\x06\x30\x24\xa1\x6a\xe0\x5d\xd7\x9d\x1b\x46\x3d\x89\xc1\x6d\x28\xe8\xd2\x01\xa1\x7a\x19\xbd\xcd\x1a\x01\xcb\xc5\x8a\x69\x30\x59\xda\xe0\x4c\x88\xfc\x56\xe4\xf4\x19\x20\xa7\xdf\xa6\x60\x50\xcf\x52\x90\xd3\x61\xd9\x33\x84\x76\x6e\xdf\x3c\x3c\x6c\xdf\x64\xa1\x8f\xcf\x20\xb0\x71\x96\x0f\x7d\xfc\xce\x13\xcf\xfc\x46\x8a\xf5\x35\x72\xa3\x88\xf8\x4d\x5a\x42\xfa\x4c\x00\x71\x5d\x0b\x7f\x5c\x78\xb3\x6c\xad\x75\x4c\x97\x7a\xa9\xb9\xde\xd4\xc0\xff\xb1\x78\x8c\xe6\xca\xda\x23\xf7\xde\x52\xd3\x5f\x0f\x69\xab\x6a\xbc\xe3\x7d\x46\x0c\xa1\x68\x8e\x87\xee\x65\x14\x47\x3b\x54\xbe\xa2\xf8\x96\x1d\x52\xe1\xb4\x00\x4e\xe9\x0d\xe0\xb4\x71\x68\x5f\x79\xfa\xbb\x1b\xeb\x2f\x4c\x1d\x9f\x47\x23\xcc\x65\x8c\xdc\x2d\x30\xcd\xf2\xf8\x10\xc2\x51\xef\x8f\x62\x0d\xa9\x77\x72\xec\x1d\x25\x72\xed\x54\x75\x45\x3c\xb5\x3b\x2a\xad\x1f\x27\x9e\x99\x6d\x21\x8b\x35\xc1\x57\x25\xba\x9e\x8d\x0e\x8a\xbf\x54\x7e\x31\xac\x53\x46\xee\xaf\xd1\x01\x27\xef\xe2\xcb\x1b\x39\x8e\x56\xc6\xf9\xae\x33\x3a\xe0\xd0\x9e\x15\xc0\xba\x93\xeb\xe4\xf0\xc0\xa0\x8b\x00\x93\xd9\xaa\x52\x8a\x65\xbd\x73\xf0\xb4\xb4\xf9\x2f\xd7\xc6\x3b\xba\x10\xde\x27\x17\x53\xf6\x98\xe3\x61\xb5\x23\x9d\x03\x74\x6a\x86\xce\x02\x59\x76\xbb\x67\xc7\x3c\x02\x7d\xe3\x9a\x2d\x4b\xc6\x85\x1c\xae\xad\x43\x57\xe4\xe4\xc5\x45\xfc\x7a\x39\xef\x22\x2c\xfb\x55\x0c\x02\x63\x2e\xa6\x27\x1f\xe8\x38\x22\xc6\x2d\x9b\xb3\x31\x1d\xd4\x4b\x0a\x7b\x11\xe0\x78\xf9\x05\xd7\x4b\x21\x3c\x8b\x0b\xac\x65\xee\xc9\x7d\x61\x40\x1c\xa7\xf7\xdf\x03\x17\x6c\x5f\x63\x0c\x9b\x14\xb8\x86\x1a\xe3\x10\x1b\x80\x3a\x3b\x84\x7f\x9c\x35\x0c\x5a\x89\xd4\xcc\xc8\xb2\xf8\x24\x48\xcc\xa9\x4a\xa7\x91\xb3\x24\x5b\xe9\xb4\xea\xaa\x8b\x4f\xd2\x91\xba\xbe\x6e\x96\x5d\x37\xd5\x75\x77\x59\x9f\xb2\x97\x79\xed\x74\xc8\x3a\xd8\xb2\x53\xab\x5a\xd3\x21\x23\x5b\x78\x6a\x7d\x2b\xed\x51\xba\x4f\xcc\xea\x70\xfc\xff\x07\xa1\xd8\xcf\xa7\xb0\xcd\xea\xcd\xbe\xdf\x82\xb5\x26\x8f\xba\x16\x46\x9e\x4e\x99\xb6\x33\x13\xa9\x37\x37\x60\x17\xd7\x95\xb8\xd0\xe5\xd6\xef\x76\xd1\x67\x56\x7a\x9f\x8f\xc6\xdc\xeb\x14\x7d\xb4\xd2\xfb\xe2\x9e\x6f\x33\xe5\xb2\x5b\x40\x5b\xb8\x51\x05\x96\x1b\x5d\x60\xb9\xf3\xc2\x6a\x68\x45\x52\x53\x22\x78\x90\xc2\x89\x39\x9f\xbc\x14\x20\x64\x25\xa8\x18\x2a\x35\x49\xa2\x11\x09\xbc\xb6\xf0\xc2\x9c\x31\x73\xd5\x50\xe1\x87\xc7\x07\x00\x2c\xbf\x93\x16\xad\x39\xa4\x5f\x10\x5c\xd3\x19\xf0\x08\x8c\x69\x5a\xbe\xcc\x0a\x2c\xdc\x3d\xb0\x61\xf7\x91\x27\x58\xbb\xe3\x08\xc8\x19\x12\x8f\xfa\xb4\xfa\x41\xa9\xd2\xac\x62\x4f\xc6\xf4\xea\xde\xb7\x65\xa5\x45\x96\xa5\x4a\x83\xce\x23\x67\xc1\xee\x62\x29\x09\x3d\x0c\x12\x1f\x9b\x2b\x75\xb6\x27\x32\xc9\x01\x00\x8e\x41\x52\xdb\x40\xde\x53\x5b\xa3\xd2\xdd\x7d\x1c\xde\xea\x95\xa7\x09\x62\xe4\x88\x5e\x46\x15\x00\x5f\xa5\x8b\x69\xd0\x30\x17\x83\x32\x4a\xea\xe9\x26\xcb\x0c\x91\xce\x8f\xb6\x56\x3f\xca\x67\xb8\xe1\xb2\xda\x44\xca\x6a\x73\xf9\x6c\x8c\x0f\x90\x3f\x84\xbd\xe5\xae\xf2\xbd\x04\x51\xa4\x98\x9b\xec\x60\xa8\x39\x93\x5f\x42\x3b\xac\x1c\x77\x83\x74\xd1\xea\xac\xcc\x4c\xe9\xb5\x88\x24\x40\x7b\xd2\x43\x08\xc2\x1f\x4a\x95\x37\x20\x88\xac\x05\xc5\x15\x24\xa0\xb8\x96\x56\x28\xae\xc0\x02\xc5\x35\x89\x0b\x1e\x73\x88\x6f\x4b\x24\x4d\x8c\xcd\x20\x5c\x81\x00\xe1\xc2\xfb\x3d\x89\xb8\xb3\xfd\xba\xdd\x01\xd4\x74\x7a\x91\x03\xa8\x64\x1a\xdb\x96\xa3\x3e\x17\x2c\x57\xce\x2c\xb7\x1b\xaf\x83\x31\xef\xe3\x11\x4e\x9d\x91\x4b\x4e\xff\xd1\xde\x21\x3c\xc4\x59\x6c\x42\x44\xaf\x89\x09\x00\x49\x7d\xd7\x4d\x13\x90\x2e\x66\x67\x36\x04\xaa\x5c\x10\x62\x70\x81\x2d\xfe\xa9\xa1\x67\x9b\x61\xbc\x4f\x05\x59\xf1\x34\x31\xdf\xd3\x00\x77\xad\x38\x49\x02\x52\xa4\xe4\x92\x29\x3e\x94\x04\x2a\x6a\x5d\x02\xa1\x03\xf6\x1a\x43\x46\xd5\x79\x42\x88\x4e\x25\x62\x86\x45\xc5\x5f\xa9\x08\xa8\x39\x7a\x59\xd6\x7b\x19\x81\x9c\x7e\x97\x4e\x1a\xc0\x8e\xf3\xf7\x50\x03\xc9\x7d\xea\xee\x91\xb3\x84\x27\xf1\x2c\x2f\xe0\x99\x79\xb1\xcc\x0f\x82\x66\xae\x4f\xaf\x1f\xcf\x30\x9a\xa1\xdd\x4e\x08\x57\x5b\x76\x8c\x7a\xe5\xc5\x3f\x89\xa6\x77\x83\x11\x45\xa5\x87\x52\xe3\xeb\xa9\x75\xf6\xc8\x18\xd2\x1c\xf0\x80\x65\xfe\x96\xe9\xbd\x37\xbd\x0d\x19\xd7\xa6\x72\xcb\x77\xba\x34\x47\x97\x69\xfd\xf8\x95\x0f\x1e\xc3\x1a\x67\xbf\xde\x33\xce\x6c\xcd\x1b\x89\x56\x41\x22\x34\x53\xa6\xd8\x43\xcc\x32\x00\xc2\xf2\x5f\x1d\xaf\xfc\xdc\xa7\x3a\xe7\x75\x0d\xd3\x99\x9b\x60\xa9\x7c\xd9\xac\xee\xee\x36\x99\x79\xb3\xe1\x95\xc0\x84\x59\x6d\xfc\x76\x27\xcc\x97\x8d\xdd\x5d\xb7\xb5\x4b\x85\xa6\x3b\xc8\xdb\x90\x30\xc3\x68\x96\x69\xb9\xbc\x52\xd5\x7f\xd9\xc0\x92\xe0\xca\xa7\x67\x81\x9a\xde\x6b\x55\x11\x90\xdb\x5e\xc4\xeb\xac\xe2\xbd\xe8\x42\x0a\x44\xa9\x2a\x75\xc4\x15\x08\xd5\x6a\x7c\xb7\x32\x8f\x2c\xa8\x61\x99\x88\x61\x6d\xef\xd7\x9f\x4b\x74\x28\x80\x0c\xbc\x6b\x8b\xa0\x0e\x32\xf0\xc2\x7a\x56\x17\x71\xdf\xea\x22\x0e\x3d\xd6\xff\x02\x10\x7f\xdf\xfb\x93\x11\x30\x7f\x17\xf8\x85\x0b\x54\x93\x2f\x30\x0f\x74\x41\x44\x69\x1b\xe2\xd4\x27\x88\x79\x35\xd5\xc3\xb1\xe5\x32\x43\xa5\x12\x6d\xe9\xd6\x7e\xc7\x40\xb4\x6c\xfc\xe0\x69\x20\x5c\x6e\xf5\x66\x4f\xe2\x66\x38\xfb\x7b\xfb\xee\x9e\x02\xae\xe3\x5c\xd3\x23\x84\xfe\xd5\x44\x7c\x8c\x29\xea\x79\x4a\xa5\x1c\x43\xd8\xf0\x54\x09\x1b\xbe\xb1\xbc\x72\x47\x09\xbb\xd2\x54\xc3\x54\x87\x7d\x37\x5c\xe2\x8a\x4c\xa8\x76\x8b\x70\x56\xd3\x1c\xab\x87\xb9\x49\x65\x71\xd9\xa0\xd9\x98\x81\x6b\x1a\x47\xe5\xb6\x36\xda\x50\x45\x25\xe3\x5c\x12\xa5\x05\x69\x87\x03\xec\x43\x0d\xb7\x32\x02\x4b\xba\x70\x65\xe5\xab\x39\xa1\x35\x85\xfe\x3a\xc1\x1b\x12\x9e\x30\xfa\x8b\x36\x39\x59\x11\xeb\x33\xfa\xde\x86\x25\xab\xe3\x3e\xdd\xb0\x64\xb5\x47\x65\x61\xf1\x58\x2d\x25\xa3\x54\x2a\x75\xab\x49\x08\xf5\xd8\xb5\xad\x41\xca\xc3\x5f\xdb\x12\x64\x8d\x15\x30\x46\x17\xe4\x8e\x15\x30\x9a\xdb\xd6\x8b\x15\x30\xc5\x6e\xd8\xcd\x49\x78\x8a\xf8\x59\xe6\x24\x61\x40\xf1\x73\x98\x93\xa4\x69\xc5\x4f\x35\x27\xf9\xb9\x62\x05\xe2\xb6\xcb\x06\xda\x2e\x8d\xe0\x33\x28\x4d\xad\x61\x8b\x9c\xde\x05\xb0\x48\x86\x1e\x04\xd3\xd4\xa7\x3e\xdf\x31\x2a\x0d\x61\x0d\x61\x1b\x07\xbc\x57\xcc\x4e\x22\xf7\x0f\xb7\xda\xa0\x2f\x56\xbf\xca\x6b\xd1\xef\x03\xb5\xda\x5d\xd0\xe9\x60\xec\x99\xac\x18\x0c\x81\x05\xbc\xc8\xd6\xf5\x44\xdd\x62\x13\x95\x19\xb5\x89\x69\x10\x76\x47\x73\x40\x57\xc9\xd3\x8c\xbf\x18\xd7\xc1\xa9\x11\xd5\xe7\x47\xb2\xfb\x4e\xef\xf8\xeb\x98\x49\x38\x4a\xfd\x0c\x59\xc8\xd4\xec\x2a\x47\xec\xbf\x39\x39\xc2\xba\x2a\xa6\x9b\x1a\x6f\xd6\x35\x35\xe6\x86\x09\xea\x47\xa2\xb1\xb4\x37\x9e\x28\x40\x40\x93\x9d\x1d\xf9\xb3\x8d\x29\xe5\x27\x0a\x2e\x50\x3f\x66\x8d\xec\x33\x71\x71\x91\x20\x74\x38\x41\x07\x6c\xc2\xdc\xc8\x6d\x62\x17\x36\x37\xf0\x80\x2c\x48\x08\xe0\xfd\x36\x37\xf0\x10\x0b\xd8\xdc\xc0\x0b\x4b\x38\xc6\x51\x2e\xfc\x9f\x73\x60\xf0\x4b\xe0\xff\x00\xeb\xb7\x19\xff\xa7\xbf\x1e\xfe\xcf\x9b\x08\xff\xe7\x8d\xc0\xff\x79\x03\xf8\x3f\x6f\x4c\xf8\x3f\x6f\x34\xfc\x9f\x37\x1c\xff\xa7\xbf\xb3\xd3\x97\x31\x22\xfd\x27\xc5\xff\x59\x80\x17\x7c\x91\x0d\xef\x93\xee\xdf\xbe\xf4\x16\x59\xd6\x4e\x39\x5d\xa5\xc9\xb3\x5f\x03\xf0\x9d\xcb\xcd\x4d\x9e\x6a\x93\xaa\x81\xf3\xad\x77\x19\x47\xf4\xb9\x8a\xbb\x1e\xb9\x9e\xaa\xa2\x61\x5c\xe5\x87\xe8\xc9\x28\xba\xcc\x5f\x94\xdf\x0a\xb7\x99\x66\x14\xd6\x30\x74\x32\xca\xc2\x74\x9f\x8c\xc2\x69\xbe\xd2\x2a\x5a\x35\x1d\x40\x39\x7c\x26\x33\xe3\x45\xdc\xcc\xf8\x9a\x2e\x72\x6c\xb2\xbf\xf3\xc6\x07\x17\xc5\xfb\xca\x45\xb5\xcb\xed\xb8\xef\xd4\xd6\x2c\x90\x3c\x7d\x99\xfc\x4e\x42\x06\xc9\xd3\x55\x21\x79\xf0\x98\x72\x28\x73\x9d\x48\xbd\x64\x46\x2e\xff\x45\xf1\x1d\x83\xcb\x2e\x86\x11\x34\x0f\x9d\x40\x63\x76\x83\xef\xbd\x6b\xe4\xf0\x7d\x25\x56\xe1\x87\x87\xc2\x47\xf6\x8d\xea\x65\xfe\xac\xfe\x86\x9e\x8c\x8e\x88\xf5\xa0\xc2\x37\xe2\x6d\xfa\xe2\xb0\x99\xe7\xf2\xbd\x9d\x9f\xa0\xd2\xac\x68\x16\xb6\x4f\x6c\x15\xf7\x60\xb5\x51\x76\x40\x6d\x13\x8f\x18\x1b\xc5\x33\xb2\x55\xb6\x77\x62\x6f\x4f\xf8\x57\xa5\xe5\xe8\x50\xd4\x36\xdf\x6d\x0d\x6d\xf3\x33\x4a\x8f\x95\x0d\x57\x0c\xc7\xd6\xff\xc4\x87\xe3\x2b\xdf\x68\x13\x83\x22\xf7\x6a\xdb\xe0\xc8\x02\xab\x5a\xf5\xde\x3b\xe4\x4b\xda\xf3\x1f\x9f\xed\x53\x45\xfc\xbd\x97\x02\x62\x03\x79\x02\xb4\x82\x08\xd3\xa7\x3b\x28\xeb\x12\x28\x4a\x01\x9f\xa0\xf7\xc2\x3b\x70\x5d\xf8\xd7\x4f\x3f\xfd\x44\x1f\xbd\xfa\x51\x8b\xcf\x25\xfd\xb5\xe2\x13\xf8\x3d\x9f\xc0\x81\x9c\xc0\xa8\xef\x0f\xea\x0b\x27\x88\xa6\x6d\x34\x83\xa3\x59\x9d\x51\x6e\xed\xa9\x1e\xeb\x5e\x26\xfe\x94\x32\xc9\x2f\x33\x5e\x8d\x30\xf2\xd7\x44\xb5\x00\xd2\xe5\xed\x86\x48\x5e\x17\x02\xc9\x6b\x8e\xb8\x5b\xec\x71\x5c\x48\xbf\xcf\x6b\xa0\xd8\x04\xad\xc0\xe1\xc4\x77\x8c\x3c\x0b\x24\x7c\xbc\x3e\x18\x1b\x6f\x3b\x47\x62\x57\xa7\x42\x86\xd8\xa0\x9a\x71\x54\x10\x6d\x75\x63\x8f\x0a\x80\xbb\x7c\xc3\x35\xab\x8c\xa9\x4a\xbf\x27\x6d\x91\x96\x8b\x16\xec\x2b\xbf\xeb\xa2\x87\x08\x29\xa2\xe2\x94\xd3\xe6\x60\x28\x4d\x01\x74\xd3\x96\x40\x37\xed\x34\x48\x9e\x0b\x84\xe4\xe9\x6b\x48\x37\xaf\x61\x7f\x7a\xbb\x31\x24\xcf\x6b\xf6\xac\xec\x0d\x98\xe5\xa7\x92\x84\x4a\xa3\x2f\x24\x5b\xff\x3e\x54\x3f\x78\x42\x19\xf0\x3c\xfa\xc2\x72\xe9\x1a\x5c\xa2\x1d\x79\x7f\x9d\x34\x20\x9f\xd7\x00\xe4\xd3\x87\xc4\x38\x36\x3e\x2d\x31\x3e\x1f\xd4\x3b\xbe\x80\x3b\x16\x6b\x0d\x5e\x89\x2f\x0d\x74\x85\xd1\x57\x05\xf5\xe4\x81\x73\xec\x75\xb4\x5c\x7a\xa2\xfd\x54\x42\x61\xfe\xa7\xe0\xba\x6e\xe5\x78\x67\x47\x2b\x70\x1c\x1f\xa5\x65\xee\x51\xea\xb8\x2b\x5f\xb7\xe8\x48\xc3\x1a\x9d\xae\x38\x62\x9a\x99\xb7\x2f\xdd\xeb\x65\x70\x2b\xe7\xf4\x79\x0b\xdb\x8b\x5a\x4c\xcd\xb0\x2f\xaf\x14\xc5\x32\x06\xcb\xd2\xdc\xf6\x62\x2e\x80\x0d\xe4\xda\x65\x2a\xb8\x4c\xf7\xb1\xd8\x35\xe9\xcd\x07\x7a\xf3\x6c\x63\x8f\xdb\xf5\xb4\x11\xa1\x2f\x22\x6c\x11\x56\xc7\x6f\x34\x72\x25\x88\x41\x20\xda\x58\x12\x31\xb1\xea\xec\x13\xc6\x0b\xbf\x28\x3b\x55\x4a\x87\xa1\xc7\xbd\x74\x8a\x7d\xa5\xdb\x4d\x30\x6a\xc4\xc8\x00\xb8\x78\xdd\x22\x5d\x12\x90\x01\x18\xde\xe9\x9a\x63\x98\x2a\x5a\x4a\x9f\x1e\x58\xa1\xcf\x9e\x44\x44\x47\x9b\x74\x98\xf9\x41\x59\x23\x5f\x05\x53\x98\xff\x6d\xe1\x42\xe1\x59\x75\x9f\x31\xc0\x08\x80\x18\x1c\x5c\x3c\x63\x58\xf7\x1d\xda\xc9\xed\x12\xeb\x70\xcf\x13\x95\xaf\xbb\xd8\x67\x13\xaa\x50\x4f\x03\x1b\x92\x00\x67\xf0\xc8\x5a\x5e\x8f\xbe\xfd\x86\x93\x01\x3d\x19\x78\x0d\xa9\x8a\x38\xd8\x1b\xa7\x47\xa8\x8a\x23\x98\x74\xa3\x55\x23\x5a\x17\x7a\x91\xf7\xb6\xd2\xc0\x50\x5e\xa8\x52\x1d\x30\x4a\x69\x94\x64\xda\xe8\x53\xc3\x5e\x57\xfa\xdc\x82\x33\xa2\xe3\xd3\xd6\x3c\x2d\x84\xef\x05\x2c\xd8\x4a\x36\x0b\x68\x16\x40\xdf\x36\xf1\x6f\xfd\xc9\x14\xe6\xc5\x80\xbf\xa9\x2f\xf7\xd9\xca\x39\xa4\xbd\x16\x3a\x93\x88\xa7\x6e\xb2\x10\xec\x2f\xae\x08\xc1\x1b\x58\x42\x6e\x86\x51\x8c\xf7\x50\x70\x5a\xcb\x23\xf5\x3d\xb5\x4f\xe0\x9e\xa6\x0a\x9a\xf5\xac\xb4\x9e\x0f\x5f\x7a\xcd\x9d\x9d\xd6\x6e\xf3\xa5\x37\x3c\x00\x83\x96\x33\xf6\x1a\x54\xeb\x44\xd3\x16\x27\x86\xd8\xf6\x00\x3b\x6d\x70\x3d\xae\x45\x4f\x1b\xc8\xc4\xd1\x5f\x72\xe3\xb5\x75\xd8\x12\xf6\x2c\x5a\xf0\x2c\xc8\xc4\xf8\x18\x4c\x9e\xf5\x68\x49\xde\x2b\xd3\x45\x19\x23\x50\x0d\xe5\x3a\x31\x88\x14\x77\x55\xed\x49\x78\x01\x09\x01\xc4\x44\x85\x60\x57\x11\x16\xc4\x20\xef\x0a\xa9\x01\x3d\x6a\x91\xdc\x70\xb2\x37\xae\x43\x18\xee\xdb\x51\xcb\x4f\xa0\xb5\x4c\xb8\xb2\xfa\x8d\xcd\x8b\x1b\xe1\x80\x1d\xac\x5c\x40\xdd\xe1\xae\x89\xb3\x79\xd0\xf2\x01\xfb\x90\x4a\x80\xe9\xef\x7c\xdc\xb0\x6f\x78\xe3\x71\x8d\x1d\x3d\x06\xa2\x4b\xd8\x0a\x3c\x4f\x81\xdb\x8a\x72\x4c\xfa\x4f\x06\xe0\x65\xee\x08\x3e\x6c\x86\xf4\xa7\x2f\x9e\xa7\x9e\xfc\xaa\xae\xea\x2b\x30\x45\x25\xbd\x74\x5b\xe8\xa6\xc3\x87\x65\x75\xd6\x99\x6c\x62\x3a\xd4\x12\x07\x5f\xea\x24\x8e\x74\x0d\x70\x4c\x81\xe1\x58\x4f\x5f\x1b\xf1\x51\xf3\x58\xdd\xbe\x09\x89\x29\x8c\x23\x31\xbd\x88\x23\x31\xfd\x5c\x5a\xd1\xb5\x9c\xb1\xd4\xb3\x8f\x91\xcd\x8f\x38\x86\x6d\xe9\x06\xfe\x69\x78\x4b\xe5\x4c\xbc\x25\xfc\x58\x6e\x06\xbb\x84\x78\x4b\xe4\xd0\xbb\x8e\xf4\x58\xa9\x7c\x46\xba\x62\x8d\xbc\xf2\xbe\xad\xc8\x11\x82\x33\x25\xb7\xc5\x76\x3a\x30\xd3\xbf\x41\x30\xe3\x25\x66\x71\x18\x06\xd2\xcf\x87\xb7\xd4\xde\x18\x6f\x29\xbe\x98\x44\x78\x4b\x8c\xaa\xa8\x1a\xf0\xf9\x89\xe3\x03\x10\x62\x3c\x28\xca\xe4\x92\x5c\xc2\xcc\x8e\xee\xfc\xec\xe9\x21\x99\xb8\x3a\x2c\xaf\x01\x86\xe9\xf3\x35\x20\x9a\xc4\x1b\x79\x2a\xbe\xd3\x37\xfa\x49\x01\x9c\xfc\x4d\xa0\xea\x78\x7a\xf7\xde\xc2\xe3\x79\x4b\x9c\xac\x5c\xe4\x7d\xef\x2d\x79\xd6\x8d\x3c\xd1\x97\xd8\x6e\x71\xcc\x37\x0d\xeb\x2d\xad\x37\x46\x28\x41\x10\xc6\x23\x24\x41\x16\x38\x21\xbc\x96\x4b\xf0\x5a\xb2\xf7\x00\xc3\xe1\x39\x20\x55\x97\x5b\x94\x41\xd9\x46\xa4\x29\x86\x4e\xd5\x96\xe8\x54\x1d\xe1\x8a\x65\x03\x76\x59\x5f\xfa\x13\xaf\xa7\xc0\x53\xf5\xe3\x57\xf9\xbe\xfe\x50\xab\xa3\x31\xdd\x1f\x6a\xf5\x34\x66\xe3\x46\xa5\x42\x4e\xa5\xe2\x46\xa5\x22\x4e\xa5\x42\xbe\x58\x11\xa7\xbe\x23\x6e\x94\x95\xbe\x05\x7a\x7b\xc4\xe7\xc8\xda\x6e\x63\x3e\xb9\x2e\xeb\x0d\xdf\x5e\xdb\xca\xa6\x92\x85\x3c\xd5\xff\x8e\xc8\x53\xfd\xcd\x90\xa7\xfa\xff\x00\xf2\x94\xe1\x9a\x8d\x6c\x77\xb4\x29\x09\xc4\xee\x8e\xc6\x53\x40\xcc\x9d\xee\x8e\xe6\x05\x68\xc1\x6c\x77\xb4\x28\x43\xc2\x54\x77\x74\x98\x97\x50\xc5\x4c\xe8\x43\x84\xab\xf0\x08\x97\xd4\xc8\xab\x06\x08\xb5\xca\xaf\x8e\xfa\xeb\xa9\x12\xe5\x25\x58\xd2\xc8\x95\xf9\x67\x23\x37\x3f\xf6\x93\x19\x40\x2e\x45\xe8\x60\x54\x2f\x17\x06\x49\x6f\x2d\x78\xa9\xed\xed\xba\xbe\xf0\x3b\xdb\x75\x14\x77\x25\x8d\x0c\x1e\xf0\x45\x24\x4c\xbc\xe8\x93\xe4\xa2\xcc\x87\x8d\xf9\x64\x9a\xcb\x31\x1c\xe1\x06\x8c\xa4\x63\x38\x8e\x20\xd0\x50\xb2\x99\x47\x6c\xe7\x5e\x94\xe8\x43\x03\x46\xbb\x16\x7e\x6b\x2d\xa2\xe4\xe7\xb1\x8c\x26\x04\xf1\x53\x0d\xdc\x8e\xc0\x5f\xc8\x35\xab\xbd\x80\x40\xef\x05\x52\x85\xc7\xca\x86\x5a\xd9\x25\xf2\x89\xb7\x92\x85\x38\x9a\x35\x96\x39\xd8\x2f\x55\x4a\x64\x1e\x01\xa6\x28\x62\x8c\x1f\xc5\x92\x1c\x18\x36\x39\x5d\xe9\xf4\x95\x35\x89\xf7\xa2\x81\x40\xe2\xb2\x53\x4d\xf8\xc9\x2f\xde\xc2\x53\xd8\x04\x4b\x8b\xbe\x21\x93\x84\x63\x7c\x6a\x73\x7d\xfb\x64\x42\x80\x97\xc7\x6a\xe7\x6f\xb3\x02\x73\xee\x2a\xa0\x17\x9f\x92\x99\xfb\x7c\x3f\xe1\x64\x9f\x30\x19\xf5\x56\x87\x57\xd2\x3c\xb1\x7c\x5e\x08\x0f\x6c\x03\x14\x86\xdb\x4d\xfc\xaf\xbc\x21\x95\x5e\xa5\xe3\x52\xb5\xe3\x4e\xbd\xb4\x76\x45\xaa\x22\xa4\x7b\x03\xa6\xcf\xf7\xd1\xb7\x30\x83\x4f\xe4\xf7\x30\x07\x4f\x83\x14\xdf\xe3\x3a\x3c\x8b\x8d\x86\x7b\xa9\xd4\x09\x7a\x79\x2a\x0d\x8c\x8a\x16\x51\xd0\xc0\x2a\xd6\x41\x0d\x53\x4c\x95\x6b\x9c\x21\x8c\x9a\xbe\x41\x55\xab\x05\x1b\x8a\xc1\xde\x90\xbe\x3b\x54\x90\x4c\x8d\xc1\xa7\x9a\xd0\x30\x9b\x11\xba\xeb\x50\xa9\xb4\xd9\x0d\xc2\x16\xd5\x12\x0e\x68\xd7\xb8\x81\xc1\xdd\x1b\xd6\x07\xbe\x21\x48\xba\xf0\xaf\xd3\xd3\xd3\x82\x35\x58\xbc\x49\xd7\xad\x1b\x8b\xf1\x39\x60\x5d\xfb\x74\xe7\x53\xd9\x15\xfa\x07\x6f\x1f\x5c\x02\xdf\xe0\xd1\x63\x83\xf9\x13\x6e\xf2\xbd\x5f\xc0\xbc\x11\x97\xef\xe5\x33\x60\x4b\x7f\xbc\x61\x75\xc0\xdc\xc7\xc7\xee\x27\x3a\x55\x4e\xf4\x09\x22\xfa\x59\x97\xf4\xcb\xc5\x4c\xae\x08\x74\x18\x37\xc9\xaa\x35\xe9\xc4\x19\x69\xa6\x09\x31\xf1\x8d\x06\x89\xcc\xd8\x61\x9f\xe9\xe5\x6d\xf6\xd1\xd1\x83\x84\x7f\x8a\x07\x09\xa7\x44\x17\x43\xf0\x71\x4f\xd7\xee\xa3\x37\xc2\x1a\x9b\x6b\xa1\xcc\x65\x83\xb2\x3e\x8b\xae\x01\x0f\x2b\x7a\xc9\xf6\xd9\xdd\xbc\xbf\xa8\x69\x20\x59\xd3\x9b\xc9\x4c\x70\x23\xf3\xc4\x3d\xfa\x72\xcc\xc4\xbc\x9e\x8e\xe8\x69\x18\x1c\xae\xc6\x3b\xc9\xb5\x1a\x18\x2f\x86\x51\xfa\x4f\x13\x6a\x41\xde\xfb\xe1\xb0\x13\x1a\xd9\xa8\xa5\x8b\xb5\x44\xe4\x12\x2a\x7b\x47\xfa\xf4\x5d\x5d\xb8\xec\x95\x19\xb6\x1e\xd3\x08\x6e\x65\xac\xa5\x60\x48\xa5\x49\xc6\xa1\x98\xd1\x58\x48\x6b\x2e\xb1\xce\x08\x98\x25\xf3\xd7\x81\xab\x61\x45\xc5\x78\xa4\x1a\x25\x7a\xa6\x28\xe9\xde\x77\xd7\x32\xad\x28\x5b\xe9\x5a\xa6\x35\x58\xd7\xce\x0a\x69\x0d\xd4\xcd\x12\x76\xad\x78\x65\xe9\x42\xbf\x09\x76\x4c\x13\xfa\x55\x99\x1f\xcf\x90\x56\x4c\xe6\x8f\x8b\xfc\xfc\x3c\x2d\x17\x13\xf9\x93\x12\xbf\x28\x42\x5a\xba\xc4\xaf\x0b\xfc\xad\x27\x8e\x3f\xcd\x89\x55\xc5\x17\xc5\xdc\xc1\x88\xad\xc8\x28\x21\x65\xce\x81\xc2\x59\xd8\x8a\xc9\x9f\x2d\x26\x4f\x76\x33\xd3\x9a\xbb\x4c\x04\x0a\x6c\xc2\x56\x9b\x74\x41\x84\xee\x59\x85\xad\x0e\x16\x48\xe3\x1d\xec\x1f\x74\x25\xef\x60\xd7\xb2\x29\xf7\xd3\xe2\x0e\xb7\x5b\x0f\x0f\xdb\xad\x2c\x70\x9a\x2e\x84\xe5\x75\xf3\x81\xd3\x84\x5e\xd7\x1e\x7c\xa7\x3e\x1b\x21\xf7\xb5\x60\x01\x0e\x1f\x21\xf7\x99\x82\xee\x86\xb4\x45\x35\xe8\x6e\x90\x11\xf7\xc6\x9b\xe2\xe1\x69\xe1\x46\xc9\xc2\x82\xfc\x2c\x90\x01\x1c\x3d\x36\x24\x23\x6f\xa8\x07\x70\x68\x57\xe3\x11\x1c\x2d\x64\x1b\x57\x1e\xe1\x48\xb2\x91\x71\x5f\x5e\x62\xdf\x3f\xb2\x79\x23\xbc\xc4\xdb\xa0\xb3\x42\x44\xfe\x01\xdf\xca\xd4\xb0\xcf\x05\x85\x7d\xcc\x32\xe2\x22\x02\x87\xf9\xb0\x4a\x02\x8e\x82\xd3\x64\x48\x34\xc2\xbd\x94\x4e\x78\x6c\xa6\x8f\x86\xfd\x50\x97\x1b\x78\xcf\x3e\x76\x47\x77\x30\xe6\xec\xd7\x39\x55\x7d\x19\x5e\x56\x2e\x8f\xc1\xc0\xb8\x05\x85\x11\xf4\x14\xb7\xe7\x9f\x08\xbb\x50\x59\x8f\x9f\xb0\x9a\xec\xd5\x04\xd9\xcd\xf8\x50\x84\x3b\xdc\x43\x1f\x6f\x1d\x5f\x00\x94\xc3\xb9\xa7\x97\x1f\x01\x52\x11\xbe\x6a\xf2\xfc\x44\xba\x91\x98\x99\x44\xd6\x26\xaa\x81\x8d\x42\xb3\x2e\xa7\xb4\x00\xaf\xb5\xa5\x89\xc8\xc7\x89\x3b\x8c\x96\xe7\xc9\x26\x8e\x9e\x0a\x0a\x1e\x4a\xdd\x94\x1d\x82\x29\x5b\xd8\x06\x9a\x4f\x21\x0b\xa4\x1b\x46\xad\xa8\x94\x79\x8c\xb1\xd6\x6d\x7a\xad\xbd\x8d\xe1\xc2\xd0\x11\x67\x16\xa4\xae\x9b\x43\x40\x30\xe3\xc3\x10\xb1\x57\xf5\xff\xfb\xf2\x55\x1e\x01\x46\x0e\xe1\x0e\xf4\x80\x57\x28\xef\xfd\xb2\x57\x2e\xac\xe8\x9e\xf4\x7f\x03\x00\x00\xff\xff\xdc\x02\x04\xb3\x7b\xeb\x02\x00") + +func uiJsLibsNvd3171NvD3MinJsBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsNvd3171NvD3MinJs, + "ui/js/libs/nvd3/1.7.1/nv.d3.min.js", + ) +} + +func uiJsLibsNvd3171NvD3MinJs() (*asset, error) { + bytes, err := uiJsLibsNvd3171NvD3MinJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/nvd3/1.7.1/nv.d3.min.js", size: 191355, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsAppTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x92\xcf\x6e\xe2\x30\x10\xc6\xef\x79\x8a\x91\x4f\x41\x62\xe3\x7b\x58\x56\x0b\x12\x42\x7b\xd8\xaa\x6a\xa5\x5e\x91\x89\xa7\x89\x2b\x6c\x47\x63\xa7\x14\x55\x7d\xf7\x1a\x43\xda\xa4\x29\x28\xcd\xc1\xff\xf2\xfb\x3c\x9e\x6f\x86\x73\x70\xb6\xa1\x02\x73\x10\x75\x9d\x79\x97\xf0\x70\xf4\x9b\xf0\x11\x09\x4d\x81\x50\x0b\x5f\xcd\x99\x3f\xd4\xca\x94\x8e\x6b\xe5\x2b\x52\xbb\xa7\x8f\x55\x26\x83\x86\x01\xff\x93\x7c\x2f\xac\x45\x89\x8e\x97\x24\xea\xaa\x05\xaf\x70\xda\x1a\xe5\x2d\x8d\x20\x8d\x95\xe8\x46\x70\x84\xce\x6f\xf0\xa5\xde\x59\xc2\x31\xf7\xba\x10\xfe\xf3\xe2\x40\xc2\xa2\xf1\x95\xa5\x1c\x16\x46\x12\xee\x61\x69\xcd\x33\x1a\x4f\x08\xa9\x30\xf2\xb0\xb5\xc6\xfd\x2d\xb5\x08\x4e\x14\x56\x4f\xba\x82\x25\x09\x0d\x6b\x6a\x0c\x2a\x82\x74\x1b\x76\xe5\x69\xd3\xe5\x13\x9d\x91\x6d\x3c\x66\x3a\x24\x04\x73\x60\x95\x70\x15\x9b\xb5\xc7\xa9\xb4\x45\xa3\x43\xbc\xac\x44\xbf\xda\xe1\x71\xb9\x3c\xfc\x93\x29\x23\x6b\x3d\x9b\x4c\x81\xc5\x14\x7f\xb5\x29\xb2\x29\xbc\x26\x10\x3e\x76\x32\x9d\x85\x87\x4b\xad\xcc\x83\xc2\xbd\xcb\xd6\xb1\x0e\xb7\x21\xd3\xe9\x19\x3a\x3b\xde\xc7\xfe\x9f\xcb\xd0\x05\x8f\x86\xf7\xa9\x9b\x58\x82\x38\x7e\x05\xdd\x68\x92\xe7\xc7\x71\xa3\xe4\x25\xc5\xe0\xea\x1f\x29\xfa\xde\xf4\x04\x77\xe1\xd7\xaa\x6d\x8c\xae\x26\xb6\x40\x9f\xbd\x3f\x75\x45\x9c\x06\xa8\xbb\xcc\xba\x01\xcc\xf3\x38\x0d\x9e\x7f\x3d\xc2\x58\x55\xf2\x36\x99\x25\xef\x01\x00\x00\xff\xff\x27\x3f\x35\x45\xd3\x03\x00\x00") + +func uiTsAppTsBytes() ([]byte, error) { + return bindataRead( + _uiTsAppTs, + "ui/ts/app.ts", + ) +} + +func uiTsAppTs() (*asset, error) { + bytes, err := uiTsAppTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/app.ts", size: 979, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsComponentsMetricsTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xa4\x58\x6b\x8f\xdb\xb8\x15\xfd\xee\x5f\xc1\x1a\x08\x56\x0e\x66\xe9\x09\x06\xed\x07\xa5\x93\xb6\x48\xb6\x8b\x00\x3b\xbb\x68\x53\xa4\x2d\x8a\xa2\xa0\x25\xda\x66\x86\x12\x55\x92\xf2\xa3\x03\xff\xf7\x9e\x4b\x4a\xf2\x43\xb2\x3c\x45\x89\x20\x63\x49\x97\xe7\x92\xf7\x79\xc8\xf9\x9c\x39\x53\xdb\x4c\xa6\x2c\x33\x45\x65\x4a\x59\x7a\x37\x2f\xa4\xb7\x2a\x73\xdc\xbb\xc9\x1c\x12\xbf\xb5\x72\x29\xad\x2c\x33\xc9\x2a\xe1\xd7\x8f\x53\xce\xe7\x7e\x5f\xa9\x72\x05\x51\xe5\xd7\x56\xe9\x6f\xdd\x2f\x9e\x63\xda\x94\xcd\x3f\xdc\x9c\x9a\x3f\xe0\xdf\x6d\xf1\xc2\xe4\x52\xbb\xb9\x57\x85\x74\xd2\x2a\xe9\xda\x09\x93\xc9\xfc\xed\x5b\x36\x61\x6f\xd9\xc7\x6e\xe9\x2c\x97\x4b\x55\x4a\xc7\xac\xac\x9d\x58\x68\x79\xb2\x2d\xb6\x5d\xab\x6c\xcd\x0a\xb1\x67\x0b\xc9\x6a\x27\x73\x66\x4a\x56\xd4\xda\xab\x4a\x93\xc2\x95\x74\x77\x04\x67\xec\xf1\x6d\x50\x4b\x72\x7e\x2d\x99\x13\x45\x94\xe3\x10\x9b\x4f\xb0\xb2\x1a\x22\x27\xda\x5f\x26\x0c\x03\xcb\x0a\x7f\x01\x55\x6e\x58\xb6\x16\x16\x9f\x1a\xe1\xdc\x00\xae\x34\x9e\x65\xb5\xc5\x46\xbd\xde\xb3\xb5\xd8\x48\x26\x18\xcc\x22\x5d\x66\x55\xe5\xe3\x26\x94\x57\xa6\xe4\x0d\xd0\x3c\xfc\xcd\x65\xa6\x85\x95\x6c\x23\x2c\x90\x53\x51\xee\xdf\x4f\x2e\x35\x3e\x45\xdf\x61\xdf\xa5\x17\xaa\x74\xa7\x06\x08\x7b\xf6\x86\xe5\xca\x55\x1a\x66\x68\xfc\xcc\x72\xe1\xc5\xb9\x26\xb9\xab\x8c\xf5\xed\xa2\x5b\xcc\xb8\xbd\x33\x85\x51\xe9\x4f\xb0\xf9\x8f\x56\x54\xeb\x16\xda\x61\x43\x1a\x2f\xd9\x2a\xbc\x35\xcb\x60\x3f\xd2\x03\xcf\xf8\xda\x96\x58\xc8\xd2\x9a\x82\xf6\x0d\x0b\x9f\x62\x45\x27\xb3\x7f\xd7\xd2\xee\xf9\xc9\x87\x79\xf7\xfb\x7c\x71\x47\xdd\xc7\xe5\xf5\x96\x18\xa1\xbf\x2a\xb9\x7d\xa2\x70\x62\xca\x85\x05\x85\xd8\x62\x4b\x38\x5c\x30\x57\xc9\x4c\x2d\x55\x76\x02\xf8\x3d\x53\x25\x13\x79\x1e\x5c\x01\xc3\x5d\xe2\x11\xc4\x42\x64\xcf\x08\x67\xf6\x27\x5a\x2f\x33\x8b\x6f\x32\xf3\x77\x4c\x79\x26\xb4\x33\x08\x36\xd5\xb8\xc1\x40\xd8\xb2\x4a\xda\xef\x3b\x87\x5c\xc2\xb5\x6e\x31\x15\xe9\x73\xfc\xe2\xfb\xfc\xec\x19\xb8\xd2\x2e\x05\x32\xe5\xb8\xab\x73\x03\xd0\x08\x56\x4c\xc3\x57\xc7\x1b\x37\xf2\xb0\xd4\x27\x51\x22\x90\xed\xfb\xde\x14\x2d\x9c\xff\xa1\x32\xd9\x3a\x2d\xeb\x62\x31\x24\xf1\x2c\xf7\xbf\x1b\xfc\x78\x98\xdc\xf2\xc0\x47\x44\xa5\x35\x5a\xc3\x14\x5d\x80\x06\x2b\xd6\xfa\x99\xa2\x64\x59\x97\x19\x6d\x5e\x68\xe5\xf7\xac\x94\x32\x8f\x11\x8b\x54\xc9\x31\x47\x5c\xe2\x75\xbe\x1a\x37\x16\xd2\xc6\xb9\x53\xe5\x7d\x4b\xa1\xfa\x94\x9b\xfc\x21\xa6\x2b\xef\x7d\x0e\xaf\xd9\x23\x64\x78\x2c\x48\x9c\xc2\xfb\x23\xbd\x4d\x66\x3d\x69\x1a\x7c\x97\x24\xf9\x8c\x3d\x7e\xc0\x36\xb6\xec\x93\xf0\x32\x41\xad\xa3\x72\xe2\x45\x51\xfd\xab\x14\xa5\x71\xf3\x77\xfc\x5e\xfe\x66\x76\x05\x60\xdf\x02\xe4\x7c\x23\x74\x2d\x87\xc5\xe6\x73\x1e\x62\x41\xc0\x70\x1b\x99\x78\x7b\x4d\x90\x23\xfd\x3f\x1f\x25\x7f\xac\x15\xf6\x81\x4d\xc4\x29\x6c\x78\x8e\x5b\x9b\xed\x4f\x72\x05\xf3\x8f\x21\x93\xd4\xdf\xff\xb0\x53\xee\x96\xd0\xdf\x6e\x09\xed\xbe\x64\x42\xc3\x52\x0f\xc1\x54\xdc\x85\xa7\xd9\xec\xfd\xa4\x27\x0e\x33\x7a\x64\x6b\x66\xb4\xb1\x0e\x9e\xc1\x94\x20\xcd\x33\x98\x7a\x65\xec\xfe\xdd\x7d\x32\x34\x0f\x71\xe7\xb0\x80\xcc\x1b\x9b\x54\xf5\x42\x03\x63\x53\xa4\x5d\x12\xcd\x06\x62\x83\x06\xe2\xe3\x8b\xf4\x6c\x47\x1b\x40\xcd\xca\x9e\x1d\xc5\x65\x65\x0d\x52\x1a\x45\x1c\x35\xa4\x10\x03\x71\x43\xc3\xaf\x95\xe3\x31\xae\xc2\xf4\x41\xa1\xb0\x7b\xc2\xfd\x63\x40\xea\x2c\x10\x81\x93\xef\xde\x7c\x4e\xdf\x3c\xa5\x6f\xbe\x7c\x77\x25\x5a\x3a\x13\x3f\x89\xdd\x93\x2a\x93\x25\xea\x8f\x9c\xf5\x93\xf7\xd0\xb7\x48\x2f\x4f\x69\xa0\x10\xaf\x4d\xad\xf3\x3f\x87\xcc\xfb\x74\xac\xdc\xd8\x37\xdc\xc7\x54\x28\xe9\x68\x46\x30\x07\x05\x78\xa8\xed\x5d\xa6\x0e\x18\xe2\x22\x25\x69\x5c\x6a\x48\x66\xe9\xc2\x18\x2d\x45\x79\xc5\x09\xd4\xf8\x24\xd5\x26\xf8\x3b\x58\x75\x53\xf0\xd8\x28\xc2\xdb\x2b\x99\x88\xa5\x26\x71\xd6\x87\x6e\x56\x57\xe5\xae\xf9\x9b\x46\x4f\x18\x6a\x03\xd0\xd5\x19\xd1\x44\xc1\x42\x7d\xd3\xd3\x38\x0c\xbe\x6d\xa6\x05\x9f\xbd\xd6\x65\x03\x09\xfb\x16\x5c\xc2\x0d\xba\x2a\xb6\xe1\xe0\x23\xf8\x4b\x6c\x84\xd2\x81\x1d\xfd\x8f\x0e\x6b\xe0\x6f\xfa\xa9\x35\xc3\x90\x8b\xe0\x84\xfb\xff\x67\x8b\xb9\x15\xdb\xd8\x9e\x57\x92\x08\x9f\xb2\xe8\xb8\x4c\x64\x99\x74\x21\x25\x03\x51\xdb\xac\x98\xd4\xb2\x40\x93\x6d\xb9\x47\xb0\xc0\x10\x9e\x58\xa2\x24\x52\xc3\x26\xc3\xe4\x4d\xbf\xf9\xf4\xcb\x13\x67\x7f\x0d\x2c\x91\xfd\xfc\xf5\xd3\x43\x60\x4d\x50\x7c\xa4\x31\xc4\x5e\x86\xe0\x48\xe0\x92\xbb\x8c\x58\xf4\xb8\x9b\x47\x04\x69\x5c\x72\xfa\x43\xfc\x0b\x1a\xe1\x3e\x13\x0f\x44\x37\xfc\x8f\xcc\x5b\x9b\xdf\x85\xd6\x29\x77\x9e\x08\x60\xe8\x0f\xc3\x4e\xa0\xb0\xff\xd5\x19\xc2\x58\xac\xa3\xb1\x61\xf7\x61\x29\xc9\xb1\x60\x0d\x14\x10\x1a\x07\xd6\xf7\x57\xab\x32\x4c\xee\x67\xf6\x98\x6e\x4a\xeb\x58\xe7\xbc\xcc\x43\xfc\x3e\xb2\x7f\xfc\xf3\xaa\x38\x4a\xf1\x5f\x60\x65\x2b\x1d\x58\x3a\x02\x2a\x16\x61\xf0\x85\xad\xd2\x9a\xb8\xbd\x2c\x2a\x3c\x61\x31\x08\x50\x69\xad\xb1\x63\x50\x26\x03\x15\x97\x39\x67\x28\xbc\x60\xe6\xdb\x3b\xb6\x95\x11\xe9\x5b\xed\x7c\x47\xca\xc8\xaf\xd3\x9f\x0d\x35\x72\x31\x1d\xc3\x43\x83\x77\x60\x56\xac\x2e\xbd\xd2\x84\x05\xd6\xae\xf2\x78\xd8\x20\x90\xb8\x5a\xb6\x25\xcc\x8e\x8a\x8f\x01\x86\x1d\xb4\xb0\x97\xac\xf0\x64\x74\xc6\xef\x32\xae\xb5\xd0\x98\xed\x69\x5c\xda\x7e\x18\xa5\xf9\xe1\x78\x21\xaa\x96\x99\x8c\xe3\xd2\x68\x4a\xc1\x6d\x41\x1a\x81\xe6\xb8\x14\x84\x87\x72\xac\x32\x20\x36\x74\x24\x7b\xc5\x00\x27\xa5\x69\x25\x4e\x68\xaf\x9b\x10\x78\x43\x7a\xc2\x09\x79\x64\x12\x49\x04\x99\xbd\x0e\x05\xa7\x31\x91\x52\x91\x7d\x9d\xf8\x12\x61\xf5\x4b\x25\x32\x90\xdb\x94\xbf\xbb\x3d\xe7\x30\x9c\x7e\xdd\xe7\x2b\xe9\x19\xbe\x5d\xfd\x42\x44\x09\x95\x26\xf3\x6d\xbd\xb9\x4e\x28\x68\x90\x2b\xea\x22\x39\x8b\x91\x11\x0a\xe2\xad\x28\x5d\x38\x30\x21\x62\xf2\xda\x8a\xf0\xf3\xd7\xf7\xf7\x37\xb4\x80\xba\xe9\x57\x14\x9e\x81\xce\x71\xfe\x74\xf6\xd8\x9c\x14\xdb\x53\x45\x28\x9c\xd1\xdb\x49\x60\xf1\xe3\xb4\xaf\x09\x5d\x62\x37\x1f\x2f\x26\xce\x46\x0f\x3e\x97\x6a\x37\xd0\x92\x64\xde\xea\xf4\x88\x33\xa4\x90\x32\x98\xc4\x78\xd7\x67\xaf\x65\x6e\xb3\xb4\x22\x99\x86\x73\x48\x68\x6e\xd3\xbb\x61\x0e\xdf\x8e\x17\xe7\xf7\x5a\xa6\xd3\xad\xca\xfd\x3a\x85\x47\xaa\xdd\xfb\xb5\x54\xab\xb5\x4f\x1f\xc2\xc3\xf4\x30\x1e\x91\xd0\x86\xc6\xca\x5b\x65\x2f\xb0\xe6\x52\xad\x52\x16\x96\xdc\x35\xb2\xc3\xb8\xa3\x87\x28\x29\x7a\x35\xfa\xec\xad\x9d\x42\xe5\x54\x1b\x91\xe3\xb4\xcd\x39\x9f\x0e\x72\xdb\xf3\xa7\x5b\xa7\xd1\x0c\xd9\xeb\xc1\x8f\x70\x20\x10\xa8\xd6\xf8\x4d\xf7\x16\x0e\x0a\x74\xfb\x16\xe7\xeb\x86\x40\x1c\xaf\x05\xae\x1e\xe0\xe3\x05\x53\x77\x05\xd2\xf1\x84\xc8\x49\xea\xaa\xd2\x0a\x7d\xe0\xec\x18\xde\xdc\x18\x5c\x1e\x5f\x2f\x91\x7f\x5f\x09\x2b\x0a\xaa\x72\xa1\xf5\xd1\xdf\xf8\x46\x35\xb7\x3a\x8b\x3d\x6b\x2e\xe0\x02\x07\xc2\x19\xef\xb9\x81\x76\x74\x89\xa1\x95\xeb\x2e\xc0\x32\x74\xc5\x05\xb5\x4f\x61\x91\xab\x2b\xb4\xbe\xd1\xb3\x73\x2f\x87\x82\xd1\x92\x9b\x37\x0b\x77\xa7\xf7\x04\xb3\xbe\x73\xa9\xe9\x9f\x1e\xbc\xd0\x77\x5e\x8e\x77\x0f\xf7\x77\xcd\xdd\x45\xf8\xbf\x9f\xf6\x94\x2a\xc0\xbf\x96\x1f\x68\x5e\x64\xa3\x47\x5a\xc3\xad\x38\xa1\xd1\x46\x19\xef\x7c\x9b\x74\xfe\xbe\x03\xda\x6c\x32\x3c\x3f\xfe\x3a\x4c\x0e\x93\xff\x06\x00\x00\xff\xff\x8c\xe7\x71\x33\x4a\x15\x00\x00") + +func uiTsComponentsMetricsTsBytes() ([]byte, error) { + return bindataRead( + _uiTsComponentsMetricsTs, + "ui/ts/components/metrics.ts", + ) +} + +func uiTsComponentsMetricsTs() (*asset, error) { + bytes, err := uiTsComponentsMetricsTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/components/metrics.ts", size: 5450, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsHeaderTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x6c\x53\x41\x6f\x9b\x4c\x10\x3d\xc7\xbf\x62\x3e\x5f\xe2\x48\xfe\x20\x8d\xd4\x4b\xa2\x4a\x21\xb1\x9b\xa2\xa6\x58\x32\xa4\x51\x8e\xcb\x32\x86\x6d\x61\x97\xce\x2e\x21\xfc\xfb\xce\x02\x4e\x13\xb5\x3e\x79\x66\xdf\xbc\x79\x6f\x66\x08\x43\xb8\x43\x8d\x24\x1c\x16\x90\x0f\xe0\xac\x0c\x16\x9c\xb4\xa6\x23\x89\x97\x20\x8d\xfc\x49\x46\xc8\x2a\x24\x9c\x72\x61\x67\x43\x67\xc3\x20\x18\x71\x9b\x1d\x24\xbb\x0c\xb6\x9b\x38\xfb\x8f\x63\x9f\xba\x35\xed\x40\xaa\xac\x1c\x5c\x9c\x7f\xf8\x08\x59\x85\x9c\x9a\x59\x20\xea\x5c\x65\xc8\x06\x33\xf6\x5e\x49\xd4\x96\x5b\x77\xba\x40\x02\xc7\xd8\xa8\x65\x1c\x1e\x5f\xd6\xf0\x1d\xc9\x2a\xa3\xe1\x22\x38\x87\x95\x07\x2c\xe7\xa7\xe5\xd9\x95\xa7\x18\x4c\x07\x8d\x18\x40\x1b\x07\x9d\x45\xe6\x50\x16\x0e\xaa\x46\xc0\x17\x89\xad\x03\xa5\xd9\x45\xd3\xd6\x4a\x68\x89\xd0\x2b\x57\x8d\x7d\x66\x96\xd1\xc5\xd3\xcc\x61\x72\x27\x18\x2e\xb8\xa0\xe5\xe8\xf0\x16\x08\xc2\xcd\xa2\xfd\xaf\x72\xae\xbd\x0c\xc3\xbe\xef\x03\x31\x0a\x0e\x0c\x95\x61\x3d\x41\x6d\x78\x1f\xdf\x6e\x93\x74\xfb\x3f\x8b\x9e\x8b\x1e\x74\x8d\xd6\x02\xe1\xaf\x4e\xd1\x34\x6b\xd1\xb2\x28\x29\x72\x96\x5a\x8b\x1e\x0c\x81\x28\x09\xf9\xcd\x19\x2f\xba\x27\xe5\x94\x2e\xd7\xbc\x8b\x83\xeb\x05\xa1\xa7\x29\x94\x75\xa4\xf2\xce\xbd\x9b\xd9\x51\x22\x3b\x7f\x0b\xe0\xa9\x09\x0d\xcb\x28\x85\x38\x5d\xc2\x4d\x94\xc6\xe9\xda\x93\x3c\xc6\xd9\x97\xdd\x43\x06\x8f\xd1\x7e\x1f\x25\x59\xbc\x4d\x61\xb7\x87\xdb\x5d\xc2\x5b\x8c\x77\x09\x47\x9f\x21\x4a\x9e\xe0\x6b\x9c\x6c\xd6\x80\x3c\x31\xee\x83\x2f\x2d\x79\x07\x86\x3c\x85\xf2\x03\xc5\x22\x80\x14\xf1\x9d\x84\x83\x99\x24\xd9\x16\xa5\x3a\x28\xc9\xd6\x74\xd9\x89\x12\xa1\x34\xcf\x48\x9a\x1d\xf9\xfa\x16\xa9\x51\xd6\x2f\xd6\xb2\xc6\x02\x6a\xd5\x28\x27\xdc\x18\xff\xe5\xeb\x4f\x97\xe8\x81\x95\xef\xd3\x71\xbf\x9e\xc6\x77\xd3\xa2\x41\xeb\x97\x25\x8d\x9e\xac\xbf\x39\xb0\xf9\xde\x2e\xe1\x86\x44\x03\x77\xd4\x69\x54\x04\xab\x9c\xa3\xa0\x9c\xa2\xeb\xb2\x11\xaa\x0e\xf8\x46\xce\xb8\xe2\xe4\xc4\xaf\x37\xd2\x05\x61\x0f\x37\x46\x3f\x23\x93\x22\xac\x58\xe4\x90\xb3\xba\x7f\xa1\xbf\x09\xe7\x20\x23\x21\x07\x58\x35\xfc\xff\xfa\xf5\xab\xa9\x45\x6e\x8f\xd8\xc5\xe2\x59\x10\x54\x28\xd8\xdd\x06\xad\x24\xd5\x7a\xbf\xf0\x09\x4e\xb3\xd7\x9b\xf5\x1b\x44\xab\x4a\x3d\x9d\x81\x28\x8a\xd1\xf7\x54\xe5\x33\x3e\x72\xa6\x3d\x1e\x27\x73\xe7\xca\x83\x7f\x4c\x04\xc1\xe9\xd5\xe2\x77\x00\x00\x00\xff\xff\x05\xd5\x4c\x27\xd4\x03\x00\x00") + +func uiTsHeaderTsBytes() ([]byte, error) { + return bindataRead( + _uiTsHeaderTs, + "ui/ts/header.ts", + ) +} + +func uiTsHeaderTs() (*asset, error) { + bytes, err := uiTsHeaderTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/header.ts", size: 980, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsNode_statusTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xdc\x19\xe9\x6e\xdb\x36\xf8\x7f\x9e\x82\x10\x60\x40\xca\x12\x39\xd9\x80\x01\x53\x8e\xad\x6b\xd2\x0b\x39\xba\xb8\x2b\x3a\x18\x46\xc0\x58\x74\xcc\x4d\xa2\x34\x92\x72\xeb\xa5\x7e\xf7\x7d\xa4\x28\x4b\x96\x68\xc9\x0a\x36\x60\x18\x7f\xd4\x0a\xf9\xdd\x37\xd9\xe1\x10\x89\x24\xe3\x53\x12\xa0\x38\x09\x49\x24\x86\x0c\x7e\xee\x85\xc4\x32\x13\xbe\x14\x7b\x43\x80\x38\xe5\x64\x46\x38\x61\x53\x82\x52\x2c\xe7\x67\x8e\xef\x0f\xe5\x32\xa5\xec\x51\x0c\x63\x2a\xe7\x9c\x46\xbf\xaf\xbf\xfc\x10\xd0\x1c\x34\x3c\xb7\xa3\x2a\xca\xa2\x84\x40\x2f\x32\x39\x4f\x78\x80\x7e\xe6\x38\x46\xaf\x79\xc6\x08\xe5\xc8\x7d\x80\xbf\xfc\xc7\xfc\xaf\x9f\x1e\x63\x0c\x64\xa7\x49\xec\xed\xed\x81\x90\x59\x44\xd0\xb5\x96\x15\x3d\xed\x21\x58\xe4\x4b\x9a\x70\x89\xcc\xd1\x0d\x1c\x8d\xb4\xf8\xe6\x58\x2d\x1a\x6b\x90\x94\x27\x31\x15\x04\x9d\xa1\xfb\x42\xda\xeb\xfc\xf7\x7d\x7e\x72\xb2\xb7\x46\x31\x54\x29\x93\x84\xcf\x30\xc8\xff\x22\x0c\x39\x11\x55\xaa\x6a\x31\x22\x3f\x27\xfc\x8f\x00\x09\xc9\xc1\x20\x27\x1b\x87\x38\x47\x69\x1e\xae\x5a\xf8\x28\x05\x2e\x88\x98\x72\x9a\x4a\x9a\xb0\x3a\x3f\xe5\x1e\x1a\x06\x88\x65\xf1\x03\xe1\x5b\xf8\x19\x59\x6b\xa7\x52\x72\x38\xc3\x6c\xb9\xbb\x20\x0d\x4b\xaa\x15\x82\x74\x41\x5d\xce\x4d\x5e\x42\x26\x5c\xc9\x29\x0a\x41\xc7\x93\x4d\x00\x8e\xd9\x23\xb9\x9f\x26\x19\x93\x76\x5d\x20\x50\xb8\x24\xe1\x3d\xde\x72\x9e\xa5\x21\x6e\x3b\xd7\x81\x16\x98\x48\xf1\x47\x3a\xec\xae\x3f\xbe\x7c\xa9\xbf\x36\x41\x23\x82\x43\xc2\xef\x3b\x45\xe2\x24\x8d\xe8\x54\x73\xed\x84\xc5\x0b\x08\x5a\xfc\x10\x91\x76\xd0\xdd\xec\x7f\x47\x44\x9a\x30\x41\x46\x44\xd6\x5d\x11\x54\xc0\xc6\x93\x9e\x74\xaf\xa8\x90\xd7\x38\xad\xd1\x1c\xab\x18\x7b\xbb\x0e\xb1\xc9\x33\x59\x54\x62\x63\x57\x1e\x15\x94\x9e\x9a\xf4\xd3\xa2\x85\xf8\x34\xc2\x90\xe3\x0a\xb4\x1e\xf5\x29\xa7\x0b\xf0\xbd\x0e\x2c\x3a\x45\xf7\x10\x7e\xf8\x8a\x42\x1d\x81\x72\x72\x7c\xa4\xd6\x49\x27\xfc\x7b\x55\xd2\xc2\x11\xfd\x4b\xd5\xa0\x1f\xb6\xe3\x68\xe0\xc0\x56\xa5\x52\xc2\xe5\xf2\xb4\xe1\xc2\x73\xa0\x17\xfb\x50\xdf\x52\xd7\x76\xf8\xb4\xf2\x2a\xa5\x4d\x73\xca\x1e\x20\x96\x4d\x2a\xb7\xf2\xd9\xf4\x63\x9d\x51\xfd\x54\x73\xb2\x30\xca\x3b\x0a\x11\x3b\x29\xb5\x55\xa1\x2d\xca\xfc\x92\x11\xbe\x74\x3d\x2b\x6d\x55\xd6\x4f\xad\xa9\x74\x5e\x73\xb0\x5a\x0b\xcc\x51\xc6\x23\x60\xee\x0c\x4d\x17\xd4\x1d\x51\x0c\x9d\x93\x06\x30\x27\x32\xe3\x0c\xc4\xe4\xe4\xcf\x8c\x08\xe9\x3e\x29\xdc\x40\xfd\x73\x80\x62\x02\x8d\x0d\xc2\xcf\x79\x7d\xf9\xc1\x39\x80\xf0\x92\x1c\x4f\x55\x05\x48\xd8\x3b\x91\xb0\x4b\xce\x13\x2e\xd0\xca\x6b\x50\x55\xcb\x97\x73\xc2\x5c\x17\x6a\x78\x16\xa9\x2a\x66\x95\xdf\x43\x67\x36\x15\x4a\xe9\x34\x32\xf4\xe3\x59\xc2\x2f\xf1\x74\xee\xba\xb9\x42\x1d\x78\x85\x19\xf2\xfc\x01\x4b\x98\x61\x40\x85\x8a\x6f\xda\x4f\xd3\x16\xd5\x45\x67\xc8\x95\x73\x2a\x7c\x1d\xc6\xae\x67\x52\x71\x82\xce\xce\x20\x1b\xa3\xc8\xeb\xe0\xae\x96\x1d\x1f\xd5\xdb\x48\x7d\xad\x3a\xd5\x12\xeb\xcc\x00\x72\x36\x2e\xdd\xba\xb9\x25\x0d\x3f\x22\xec\x51\xce\x95\x66\x47\x1e\xfa\xfa\xb5\x53\xaf\x0a\xee\xb8\x49\xe6\x10\x1d\x4f\xfc\xb2\xb3\xa1\xd3\xc2\xf8\xe5\x9e\xf7\x5c\xeb\xf9\x69\x26\xe6\x45\x08\xb4\x2b\xb9\x26\x51\x64\xed\x86\x0f\xf2\xcd\xe7\xfa\xa1\x5e\x1f\x9a\x62\xa7\xaa\x48\xde\x46\xe1\x25\x83\xa9\x49\xf1\xee\x42\xc8\x8d\x53\xa9\x44\xad\x38\x26\x6b\x4d\x7a\xd8\xe1\xea\x42\xae\xf6\xec\x65\xda\xc6\x39\x40\x8b\x84\x86\x16\x27\x69\x61\x55\x16\xed\x58\x39\xd5\x2a\x13\xd1\x3e\x61\xaa\x05\xe9\x8d\x5c\x93\xad\x94\x6d\xf8\x7e\x5b\xac\x94\xa2\x54\x1d\x6b\x8b\x9a\xb1\x35\x94\xaa\xe1\xaa\xc8\x34\x85\x5a\xed\x64\xbf\x86\xab\xb7\x1a\xef\x5f\x32\x44\x59\x11\x7a\x55\x03\x55\x05\x4c\x66\x1a\x53\x9c\xe7\x33\x83\x5f\x8e\x05\x6d\x79\xba\x66\x69\x88\x88\x29\xf4\x48\x52\x23\x79\x58\x25\x59\x4e\x0e\x07\x75\xa8\x63\x7b\x0f\x69\xa6\x60\xab\x4f\xe0\x2e\xf6\xe1\xf6\xe2\xd6\x55\x17\x31\x4f\xcd\xcd\x0b\x82\x64\x82\x32\x49\x23\x2a\x97\xf9\x5c\xe4\xdb\xbd\x68\x66\x5d\x0d\xe8\x6e\x3a\xc9\x2b\x3e\x5a\x5c\x5a\x58\xbe\x59\x6c\x9a\xc6\x57\x86\x57\x87\x7e\x73\x66\x37\x35\xd8\x6e\x74\x93\xf4\x0e\x0c\x6a\x03\x4b\x27\x6f\xda\xca\x20\xe4\xcc\xac\xc3\x3c\x1a\xa2\x6d\x92\xec\xab\x81\xd0\xf3\x65\x32\xd2\xba\xbb\x1e\xfa\x06\x39\x75\xbe\xff\x9c\xfd\xcb\x7b\xc9\xff\xd2\xfa\xf6\x6b\xd7\x7f\xc6\xfc\x95\xf9\x9e\x48\x1a\x93\x57\x09\x8f\xe1\x93\x83\x61\xc3\xef\x7c\xb5\xa3\x06\x30\xd8\x72\x9d\xc1\x6f\x87\x83\xf8\x70\x10\xa2\xc1\x9b\x60\x70\x1d\x0c\x46\x8e\xd7\x4a\x32\xc7\xbb\x80\x2d\x97\x61\x96\xac\x2f\xd3\x5d\x7e\x2d\x44\x01\x11\x18\xf9\x8c\x4a\x02\x60\xb4\x63\xff\x88\x7c\x6f\xe9\x34\xc6\xe4\x65\xc9\xd9\x50\xc6\x2d\x36\x3a\x1a\x63\x3e\xec\x5f\x10\x09\x09\x23\x9a\xd1\x58\x9f\xcf\x3f\x52\x2e\x33\x1c\x5d\x46\x24\x26\xac\x7e\xb7\x2d\xb4\x79\x6e\x94\x76\x8d\x9b\xc5\xf8\xee\x3a\x21\x5d\xc0\x88\xee\xdc\x24\xca\x72\x18\xdc\x40\x84\x12\x67\x49\xa4\xef\x34\x8b\x6b\x4d\x67\x1b\xa9\xb1\x95\x21\x1c\x4b\x55\x45\xb6\x02\x14\x40\x5c\x41\xa8\x8f\x50\x89\x35\x52\x6f\x29\x02\xb9\x0e\x84\xb1\x0e\xf9\xf5\xe3\x4a\xd1\x03\x20\xbc\xbd\xc0\xf1\x0e\x5a\x47\xb2\x82\xde\xb8\x46\x23\xc6\xa9\x3b\xcb\xd8\x54\x0d\x22\xae\xde\x7e\x1b\xee\x32\x63\xee\xa6\xb3\x45\x0a\x3c\x9e\x73\x32\x3b\x1b\x6a\x5e\x70\xb1\x02\xf1\x0d\x5b\xa5\xc8\x04\x48\x3d\xa1\x69\xc2\x66\xf4\x31\x50\x77\xab\x24\x83\x8c\x58\x1d\x14\x30\x1d\x5a\x16\xcb\x01\x4a\x1d\x53\xee\xca\x9b\xd8\x3b\xa7\x5a\x93\x16\x3e\x4d\x17\xdd\x98\x57\x40\xf0\xc1\xda\xce\xda\xcc\xfa\xd2\x64\x9e\xe5\x7c\xf3\x56\xe8\xf5\xa3\x6d\xde\xf2\x3a\x68\x9b\xdf\x9e\xb4\x47\xf9\x23\x1b\xc2\x72\x83\xbc\x29\x02\xd5\xf2\x93\xc7\x4c\xf1\x24\xe7\xf5\xe4\xf3\x6b\x7e\x7d\xd9\x91\x4f\xf5\xb2\xd3\x8f\xcf\x9d\xea\x02\x16\x53\x55\xba\x43\x4f\x8a\x57\xba\xbd\xa0\x6d\x84\x9b\xdd\xa7\xaf\x77\x8b\xd1\x62\x2b\x0b\xeb\xf0\xf1\x4c\x2e\xba\x99\x6d\xb0\xc8\x67\x5e\xcb\x04\xd7\xdb\xc5\x0c\x0c\x71\x78\xb7\xee\xd5\x3d\x4c\x06\x33\x6c\x4b\xa3\xef\x29\xc7\x2b\xa8\xf8\x4b\x54\xca\x61\xd1\xb6\x31\x2f\x79\xdb\x2a\x81\x65\xbb\x5e\x55\x56\xb6\xc7\xc4\xe1\xfe\x7e\x09\xb4\x5f\x7b\xf3\x21\x4c\x64\xaa\xa0\xcb\x39\xdc\xf0\x89\xda\x43\x31\xa4\x2e\x06\x6b\x99\xa2\x0a\xd6\x9b\xf1\x24\x06\x08\x98\x05\x08\x5f\x10\x5e\xa5\x86\xb9\xfa\xcf\x14\x2e\x88\x0e\x1b\x2c\xd0\xbb\xd1\xed\x8d\xe9\xb1\xd5\x19\x65\x7f\xb8\xfe\x2e\xea\xfb\xa6\x24\xee\x97\x39\x0f\xd0\xa7\xeb\xab\x37\x52\xa6\x77\xf9\x1b\xd6\x01\x4a\x52\x69\x79\xa5\xfb\xf4\xe6\xee\x36\xbf\xe1\x6e\x1b\x3e\x4c\x3f\x00\x9a\xa6\x4b\xc3\x9d\xe8\xdb\xa3\x23\xf4\xa3\x96\xcf\xcf\x71\xe8\x6c\xa9\xb8\x82\xab\xf3\x67\xac\x0f\xe4\x0b\x5c\x94\x02\x54\xdf\xab\xbe\x90\xe7\xff\xae\xf6\xfe\x0e\x00\x00\xff\xff\x68\xfa\x72\xbe\xac\x1a\x00\x00") + +func uiTsModelsNode_statusTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsNode_statusTs, + "ui/ts/models/node_status.ts", + ) +} + +func uiTsModelsNode_statusTs() (*asset, error) { + bytes, err := uiTsModelsNode_statusTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/node_status.ts", size: 6828, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsStatsTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x84\x92\x3f\x4f\xc3\x30\x10\xc5\x77\x7f\x8a\x53\x27\xe8\x10\xef\xe5\x8f\x80\x0e\x4c\x9d\x90\x58\xab\xab\x73\x4d\x42\xfd\x27\x3a\x9f\x2b\x22\xd4\xef\x8e\xd3\x06\x04\xa8\x35\x37\x58\x3e\xfd\xde\xf3\xbb\x93\xac\x35\xc4\x90\xd8\xd0\x02\x5c\xa8\xc9\x46\x1d\x05\x25\x56\x12\x95\xce\xec\x96\x69\x4b\x4c\xde\x10\xf4\x28\xed\xdd\xac\xaa\xb4\x0c\x7d\xe7\x9b\xa8\x5d\x27\x2d\x77\xf6\xed\xfb\x56\xd5\xd9\x36\x03\x7d\x9f\xad\xf0\x98\xa4\x0d\xbc\x80\x27\x46\x07\xcf\x9c\x3c\x75\x0c\x57\x9b\xdc\x55\xcd\xa9\x7b\x68\x1c\x66\x93\x09\xee\x5a\x29\x3d\x9f\x2b\x98\xc3\xea\x38\x03\x98\xe0\x05\x3b\x1f\xa1\x46\xc1\x69\x30\xe8\x93\xb5\x54\xc3\x96\x83\xcb\x02\xb3\xe3\x80\xa6\xad\xb2\x4b\xab\xac\x48\x96\xbe\xdc\x1f\x0a\x72\xd1\x7b\x1f\x58\x60\x42\x2f\xe3\x56\x13\xf9\x41\x3b\x2f\xc4\x5b\xcc\xeb\xad\x5e\x97\xcb\xbf\xa2\xb1\x6c\xb7\xa7\xf5\x66\x10\x8a\x0b\xf0\xc9\x6d\x88\x6f\x7e\xf1\x1d\x0d\x25\xbc\x47\x5b\xc2\x63\xbe\x97\x92\xe2\x98\x6f\x42\xf2\x72\x39\xbf\x80\xc7\xfc\x02\x9e\xf2\xff\x57\x60\x43\xe7\x79\x63\x4e\xd3\x5f\x56\xc4\x21\x96\x16\x1c\x71\x21\xdf\x62\x94\x75\xea\xf3\x47\xa0\xb5\x47\x1f\xce\xbc\x72\x50\xa7\xf3\xa0\x3e\x03\x00\x00\xff\xff\xf7\xb6\xa5\x6d\xce\x02\x00\x00") + +func uiTsModelsStatsTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsStatsTs, + "ui/ts/models/stats.ts", + ) +} + +func uiTsModelsStatsTs() (*asset, error) { + bytes, err := uiTsModelsStatsTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/stats.ts", size: 718, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsStore_statusTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xdc\x19\x69\x6f\xdb\x36\xfb\xbb\x7f\x05\x21\xc0\x80\x94\xd7\x91\x93\xb7\xc0\x80\x29\xc7\xd6\x25\x69\xbb\x22\x47\x17\x77\x45\x07\xc3\x08\x18\x89\xb6\xb5\xe9\x1a\x49\xb9\xf1\x52\xff\xf7\x3d\x3c\x64\x5d\x94\x8f\x6c\x03\x86\x09\x85\xa5\x92\xcf\x7d\x93\x19\x0e\x11\x4b\x73\xea\x13\x0f\xc5\x69\x40\x22\x36\x64\x3c\xa5\xe4\x81\x71\xcc\x73\xe6\x72\xd6\x1b\x02\xc8\x29\x25\x53\x42\x49\xe2\x13\x94\x61\x3e\x3f\xb3\x5c\x77\xc8\x97\x59\x98\xcc\xd8\x30\x0e\xf9\x9c\x86\xd1\xaf\xeb\x2f\x37\x00\x34\x0b\x0d\xcf\xb7\xa2\x06\xaf\xe0\xdf\x16\xf0\x04\xa4\x2a\xa5\xe9\x86\x13\x20\x15\x08\xf4\x3a\xe7\xf3\x94\x7a\xe8\x07\x8a\x63\xf4\x96\xe6\x09\x09\x29\xb2\x1f\xe1\x7f\xee\x4c\xfd\xef\xfb\x59\x8c\x41\x5a\x3f\x8d\x9d\x5e\x0f\x94\xcf\x23\x82\x6e\xa4\x0d\xd0\x73\x0f\xc1\x43\x9e\xb2\x94\x72\xa4\xb7\x46\xc2\x2e\x23\x29\x88\xde\x17\x4f\x18\x4b\x98\x8c\xa6\x71\xc8\x08\x3a\x43\x0f\x85\x15\x6e\xd4\xfb\x83\xda\x39\xe9\xad\x51\x34\xd9\x30\xe1\x84\x4e\xb1\xaf\x29\x5f\x12\xe6\xd3\x30\xe3\x61\x9a\x54\xc8\x8b\x47\x39\x24\x0c\x3c\x94\xe4\xf1\x23\xa1\x27\xb5\x5d\x61\x1f\x4f\xcb\xed\xde\xc2\x4b\x89\x28\x3f\x2b\x34\xeb\x48\x98\x73\xca\x3c\x84\x93\x65\xb9\xbe\xda\x20\xe1\x05\xce\xb0\x1f\xf2\x65\x43\xb2\x62\xd9\x2c\xd9\xeb\x05\x98\x17\x3f\x46\xc4\xbc\x7d\x8f\x93\x19\xb9\x48\xf3\x84\xb7\xf7\x37\xc9\x62\xf6\x83\x78\x02\x50\xd7\x6b\x59\xb3\xce\x95\x0a\xae\x0f\xbe\x99\xad\xb2\x36\xa6\x9c\x04\x0f\xb8\x63\x3f\xcf\x02\xbc\x69\x5f\xc6\xe1\xda\x21\x23\x19\x95\x37\x9f\x2e\x2e\xe4\x57\x1d\x34\x22\x38\x20\xf4\x61\xab\x48\x94\x64\x51\xe8\x4b\xae\x5b\x61\x71\x61\xf4\xcd\xa0\x3b\x1a\xf8\x9e\xb0\x2c\x4d\x18\x19\x11\xde\xb4\xb5\x57\x85\x1b\x4f\xf6\xa5\x7c\x1d\x32\x7e\x83\xb3\x06\xd5\xb1\x8c\xf5\x1f\xd7\xa1\x3e\x79\x31\x97\x4a\x00\xec\xce\xa6\x82\xb4\xaf\x3e\xfb\xea\xb2\x81\xbe\x1f\x61\xc6\x14\x6c\x33\xc2\x33\x1a\x2e\x20\x0e\x64\x90\x85\x3e\x7a\x80\x50\xc4\xd7\x21\x54\x1c\x28\x3c\xc7\x47\xe2\x39\xd9\x0a\xff\x41\x54\xbf\x60\x14\xfe\x21\xaa\xd5\xb7\xdd\x38\x12\xd8\x33\xd5\xb3\x8c\x50\xbe\x3c\x6d\x3b\xf3\x1c\x08\xc6\x2e\x94\xc2\xcc\x36\xee\x3e\xaf\x9c\x4a\x19\x94\xbc\xf2\x47\x88\x6c\x9d\xb8\x9b\x39\xd5\x1d\xda\x62\xd5\xdc\x96\xbc\x0c\xac\x54\x27\x21\x6c\x37\xc5\xba\x95\xea\x50\xe8\xa7\x9c\xd0\xa5\xed\x18\xa9\x8b\x36\x70\x6a\x4e\xae\xf3\x86\x9f\xc5\xb3\xc0\x14\xe5\x34\x02\xf6\xd6\x50\x37\x40\xd5\x9b\xd9\xd0\x3a\x69\x41\x53\xc2\x73\x9a\x80\xa4\x94\xfc\x9e\x13\xc6\xed\x67\x81\xec\x89\x9f\x01\x8a\x09\xf4\x42\x08\x44\xeb\xed\xd5\x47\x6b\x00\x71\xc6\x29\xf6\x45\x55\x48\x93\xf7\x2c\x4d\xae\x28\x4d\x29\x43\x2b\xa7\x45\x55\x3c\x2e\x9f\x93\xc4\xb6\x81\x6f\x1e\x89\xca\x66\xd6\xc0\x41\x67\x26\x25\x4a\xf1\x24\x36\xf4\xfa\x69\x4a\xaf\xb0\x3f\xb7\x6d\xa5\xd2\x16\xbc\xc2\x10\x3a\x97\xc0\x18\x7a\x14\x10\x21\xe3\x16\x9d\xb1\x6d\x8e\xea\x13\x4e\x91\xcd\xe7\x21\x73\x65\x44\xdb\x4e\x91\x98\x13\x74\x76\x06\xb9\x19\x45\xce\x16\x01\xc4\xd3\x41\x00\x8d\x27\x9b\x99\xaf\x76\x50\xad\x48\x12\x20\x67\x64\xb3\x5d\x3d\xbb\x24\xe2\x46\x24\x99\xf1\xb9\xd0\xed\xc8\x41\x5f\xbf\x6e\xd5\xac\x82\x3b\x6e\x93\x39\x44\xc7\x13\xb7\xec\x79\xe8\xb4\x70\x40\xb9\xe6\xbc\xd8\x7e\x6e\x96\xb3\x79\x11\x08\x9b\xb5\x5c\xd3\x28\x12\xb8\xee\x06\xb5\xfa\x52\x57\x34\x6b\x45\x5b\xf0\x4c\x14\xcd\xbb\x28\xb8\x4a\x38\x0d\x05\xf3\x6d\x08\xca\x3c\x95\xaa\xb4\x11\x47\x67\xaf\xce\x12\x33\x5c\x53\xc8\x55\xcf\x5c\xb6\x4d\x9c\x3d\xb4\x48\xc3\xc0\xe0\x26\x29\xac\xc8\xa5\x5d\xcb\xa8\x78\x44\xd4\x8a\xb1\x53\xf4\x36\x06\xf6\x48\x66\x6d\x18\x48\x73\x64\x2b\x20\x68\x98\x35\xf7\x77\x85\x4b\x29\x8b\x33\x56\x98\x93\x66\x46\xe8\xe5\xb1\x69\xb1\x16\xb1\x82\x4c\x5b\xa8\xd5\x4e\x06\x6c\xf9\xba\xd3\x7a\xff\x90\x21\xca\xaa\xd0\xa1\xbf\x39\x40\x44\x21\xd0\xc9\xa9\x4d\x71\xae\xa7\x08\xb7\x1c\x14\x36\xe5\xea\x9a\xa7\xa6\xc2\x7c\xe8\x98\xa4\x41\xf3\xb0\x46\xb3\x1c\x26\x06\xa8\x09\x77\x6c\xee\x27\xed\x34\xdc\xe8\x16\x38\xca\x7d\xbc\xbb\xbc\xb3\xc5\x39\xce\x11\x73\xf5\x82\x20\x9e\xa2\x9c\x87\x91\x38\x90\xc8\x61\xc9\x35\x3b\x52\xcf\xc2\x12\xd0\x2e\xa6\x31\xe5\x27\x47\xbf\x3b\x9c\x2a\x81\x0b\xe3\x1b\x2a\x4e\xdb\x01\xca\xf8\xb0\xeb\xb6\xa7\x7a\x5d\x8b\xcd\x86\xd7\xa9\x6f\xc1\xf8\xd6\x37\xf4\xf5\xb6\xb5\x34\x82\xe6\x66\x9c\xf7\xd1\x10\x75\xca\x72\x20\x06\x45\xc7\xe5\xe9\x48\x1a\xc0\x76\xd0\xff\x90\xd5\xe4\xfc\xf7\xf9\xa0\x3c\xbb\xac\x3d\x80\x0a\x17\xa0\xff\x88\x0f\xcc\xe7\xb3\x7f\x8f\x13\x2a\xd3\x3f\xe1\x61\x4c\xde\xa4\x34\x86\x4f\x0a\xc6\x0d\x5e\xb9\x62\x45\x4c\x65\xb0\x64\x5b\xfd\x5f\x0e\xfb\xf1\x61\x3f\x40\xfd\x77\x5e\xff\xc6\xeb\x8f\x2c\x67\x23\x49\x85\x77\x09\x4b\x76\x82\x93\x94\x15\x87\x9d\x6d\xce\x2d\x44\x01\x11\x12\xf2\x05\x95\x04\xc0\x6a\xc7\xee\x11\xf9\xc6\xd0\x76\xb4\xd1\x2b\xe5\xa7\xa6\x8d\x5d\x2c\x6c\xe9\x93\xea\x1c\x70\x49\x38\x24\x0e\x6b\x95\x85\xe6\xdc\xfe\x29\xa4\x3c\xc7\xd1\x55\x44\x62\x92\x34\x0f\xc1\x85\x36\x7f\x21\x54\xb7\xcd\xa0\xc5\x5c\x6f\x5b\x41\xb8\x80\xd9\xdd\xba\x4d\x85\xf1\x30\x78\x82\x30\x21\xd1\x92\x70\xd7\x6a\x57\xda\xce\x98\x2d\x28\x8d\x8d\xec\x60\x97\x8b\x6a\x02\x9c\xcc\x00\x0a\x84\x8a\x7d\xf1\x11\x28\x91\x02\x82\xc0\x86\x96\x33\x40\xc5\x22\xbc\xf1\x78\x4e\xc9\xf4\x6c\x28\x9a\x16\x9c\x59\x20\xc4\x55\x3e\xc8\xd1\x5d\x2c\xca\x1f\x18\xdf\x45\xf0\x4f\x00\xe7\x19\xf9\x69\x32\x0d\x67\x9e\x38\xc6\xa4\x39\x84\xd9\x6a\xd0\x85\xe3\x38\x13\x67\xb0\x9f\x84\xb7\x84\x7f\x49\xe9\x6f\x35\x31\x9b\xd4\x71\x10\x80\x5d\x99\x9b\x28\xd8\xfd\x99\xbc\x56\x04\x76\x62\xa2\xdf\x7b\x31\x19\xa9\xeb\x29\x84\x79\x8d\x45\x91\x14\x95\x7c\x54\x5c\xcb\xeb\xac\xfd\x2c\xf6\xb3\x1a\xef\x77\xe6\x53\x3d\x0e\xec\xc3\x47\xde\x02\x9a\xcc\x55\x29\x97\x7b\x11\xbc\x96\xd5\x16\x75\xd2\x6d\x57\xe3\xbd\xc8\xaf\x2f\x35\xbb\x39\x18\x5b\xf2\x8b\x98\xc8\xca\x5e\xe3\xa0\xa6\x41\xd3\x60\xb3\xa7\x7b\x13\x30\xc2\xe1\xfd\xba\x71\xed\x63\x2f\x18\xed\x36\xf5\xbd\xbd\xe4\x78\x03\xa5\x6f\x89\x4a\x39\x0c\xca\xb6\x27\x08\xa1\xaa\x91\x83\x61\x79\xd2\xea\x06\xe5\xd7\xfa\x73\x78\x70\x50\x02\x1d\x34\xae\x45\x48\xc2\x72\x71\x13\xc7\xe7\x70\xfc\x25\x62\x0d\xc5\x90\xb5\x18\xcc\xa5\x6b\x2a\x98\x6f\x4a\xd3\x18\x20\xa0\x31\x12\xba\x20\xb4\x4a\x0d\x53\xf1\x27\x0a\xca\x88\x8c\x1a\xcc\xd0\xfb\xd1\xdd\xad\xee\x8e\xd5\x86\x7d\x30\x5c\x7f\x4f\xf3\xc4\x97\x7f\x08\xa8\x49\x62\x3f\xcd\xa9\x87\x3e\xdf\x5c\xbf\xe3\x3c\xbb\x57\xd7\x3c\x03\x94\x66\xdc\x70\x99\xf5\xf9\xdd\xfd\x9d\x3a\xfc\x75\x75\x62\xdd\x0e\x80\xa6\xee\x58\x70\x5a\xf8\xff\xd1\x11\xfa\x4e\xca\xe7\x2a\x9c\x70\xba\x14\x5c\xc1\xd3\xea\xa2\xe7\x23\x79\x82\x13\x84\x87\x9a\x6b\xd5\x8b\x65\xf5\xbb\xea\xfd\x19\x00\x00\xff\xff\xdb\xd1\xe8\xc5\x5a\x1a\x00\x00") + +func uiTsModelsStore_statusTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsStore_statusTs, + "ui/ts/models/store_status.ts", + ) +} + +func uiTsModelsStore_statusTs() (*asset, error) { + bytes, err := uiTsModelsStore_statusTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/store_status.ts", size: 6746, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsTimeseriesTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x59\xdf\x6f\xdc\xb8\x11\x7e\xf7\x5f\xc1\xf3\x93\x94\xdb\x68\x93\x7b\xe8\x83\x1c\xa7\x0d\xee\x82\x1e\x0e\x75\x93\x3a\x46\x7b\x40\x10\x18\x5c\x89\xbb\xab\x46\xa2\x14\x92\xb2\xb3\xbd\xdb\xff\xbd\xdf\x90\xd4\x6f\x69\xb3\x06\x0e\x38\x01\x71\x64\x89\x1c\xce\x7c\xf3\xf1\x9b\xa1\xbc\x5e\x33\x5d\xd6\x2a\x11\x31\x2b\xca\x54\xe4\x7a\x6d\xb2\x42\x68\xa1\x32\xa1\x23\xa3\x2f\xd6\x18\xf0\x4a\x89\xad\x50\x42\x26\x82\x55\xdc\xec\xaf\x2f\xa3\x68\x6d\x0e\x55\x26\x77\x7a\x5d\x64\x66\xaf\xb2\xfc\xbf\xed\x5d\x94\x62\xda\x25\x5b\xbf\xc6\x54\xf6\xa6\x36\xfb\x52\xc5\xec\x86\x1b\xc3\xee\x14\x4f\x0e\x2c\x28\x70\xff\xb7\xa4\x4c\x3e\xab\x92\x27\xfb\x9c\x6f\x74\x94\x94\x45\x78\x71\xb1\x7e\xf6\xec\x82\x3d\x63\x37\xd6\x0d\x96\x94\xd2\xf0\x4c\x6a\x96\x72\xc3\xbd\x6f\xac\xaa\xf3\x5c\xa4\x6c\xab\xca\x82\xb5\x26\x22\xcc\x5a\x5f\x60\x44\x9d\x8b\x66\xf6\x6f\x17\x0c\x97\xf8\x5a\x95\xca\xb0\xe6\x95\x30\x2a\x4b\x9a\x77\x74\x65\x85\x7d\x5f\xc1\x5c\xa6\x05\xbb\x66\xf7\x4d\x10\x37\xee\xff\xf7\xee\xcd\xd5\x45\x3b\x05\x4e\xb2\xf6\x17\x78\xfb\xaf\x5a\xa8\xc3\x9b\xdd\x4e\x89\x1d\x37\xa5\x62\x99\x66\x5c\x32\x21\xeb\x42\x28\x6e\xb2\x52\xb2\x72\xcb\xcc\x5e\x30\xfe\xc0\x33\x04\x0b\x3f\x78\x3b\xba\x6f\x68\x5b\xcb\x84\xc6\x6b\xb6\x85\x19\x4a\x02\x73\x59\x60\x5f\x6a\x97\x0d\x76\xb7\x87\x75\x29\x44\xaa\x99\x29\xd9\x46\xb0\xcf\xa2\x32\x2c\x93\x4c\x1f\x64\xc2\x1e\xe1\x72\xdf\x20\x2d\x7a\x07\x33\x1f\xec\xec\xb1\x9f\x03\x0f\xa5\x1d\x8c\xe5\x1e\x84\x8a\xfa\x36\x82\x35\xb0\x31\xe5\x80\x14\xf6\x49\xd8\x1b\xb5\x6e\xef\x3d\xde\x64\x7b\x02\x4c\x87\x3a\x5d\x6f\xfe\xfd\x77\xc0\xfd\x72\x35\x7e\x78\x7f\xfb\xe6\xee\x2d\xde\xfc\xd0\xbd\x39\x0e\xc0\xef\x7b\xf7\x13\x98\x51\x95\x99\x34\x16\x75\xa6\x41\x48\xc0\x9b\x76\x4f\x25\x9e\x12\x7a\x07\xa6\x84\xae\x80\xad\x98\x82\xd8\x37\x38\xc1\x73\x04\x62\xb7\xa0\x05\x61\x53\x6f\xb1\x2f\x18\x90\xd1\x7c\x27\x3c\x8c\x7d\x7b\x1e\xd1\x13\x30\x46\xa7\x70\xc4\x42\x42\x6d\x39\xb6\x5d\xb7\xf0\x10\x46\x6b\xcf\xf0\xa2\xba\x97\x5c\x96\x3a\x66\x40\x7e\x23\xd4\xd5\x60\xd0\x03\xcf\x6b\x31\x7d\xb5\x8c\xab\x4d\xdd\xad\xd0\x75\x3e\x44\xb6\x85\x12\x2f\xbe\xc1\xc6\xbe\xb9\x19\x20\x7b\x2b\x44\xf6\xfe\x04\xa0\x4f\xe3\xe5\x99\x80\xf6\x43\x1c\x42\x2a\x79\x21\x62\x0d\xa5\x90\xbb\x21\x8c\x2d\xaf\x00\x73\x9b\x8f\x8f\x9f\x9e\x86\xe7\x07\x01\x39\xe2\x26\xd9\x63\x5f\xdb\xd8\xea\x24\x41\xb4\xdb\x3a\x67\x65\x6d\xaa\xda\x34\x72\xb1\x36\x7a\x6d\xf1\xee\x1b\x12\x32\xb5\xab\x9e\x23\x05\x63\x2e\xce\x82\xff\x27\xc2\x4e\x48\x0c\x91\x77\xc4\x02\xba\xbd\x51\x1f\x3f\x9d\x4d\x58\x47\x55\x94\x92\x02\x01\x74\x4b\x42\xe3\x73\x51\x08\xfc\x9e\xb2\xcd\xc1\x46\xe6\x78\x8c\x0a\x86\x24\x00\x32\x92\x4a\xcc\x75\x55\xe2\x29\x81\x8c\xfc\xb7\x66\xe3\x20\xbc\x7e\xed\x0b\xca\xab\x61\xb8\xaf\xcf\x0f\x25\xcd\x74\xe5\x59\xd2\xee\xbe\x71\x49\x38\x50\xe6\xe7\x13\xd5\x39\xde\x54\x15\x37\x23\x80\x56\x28\x13\x83\xbd\x62\x45\x64\xf2\x77\x28\x48\xf1\x48\xae\x57\x7e\x25\xbf\x13\x3e\x7e\x0a\xe3\x85\xa0\x46\x20\x3c\x70\xc5\x6a\x95\x43\xc2\x2f\x5b\x0a\x5f\x8e\xf5\x48\xb9\xa2\x7e\x3d\x9a\x4b\x97\xf5\xb0\x51\x33\xfb\x4b\xb4\x13\x86\xc8\x1b\x84\x80\xe7\x65\xf4\x42\xfc\x65\x35\x99\x85\x58\x9a\x39\xb8\x3d\x67\x86\x2f\xaa\xb1\x8f\x33\x2a\x78\x15\x04\x2a\x64\xd7\x08\x48\x09\x53\x2b\x39\xe3\x1c\x5d\x56\x1f\x98\x9a\x5a\xa4\xab\x2b\xed\x31\xdd\x4f\x07\x1d\xaf\x8e\xe1\xf0\xe9\xb1\xfd\x6d\xb4\x19\xac\x0f\x45\xa4\x04\x5c\xd5\x26\xf8\x0d\xa8\xc6\xf8\xb7\xc2\x3e\x45\x53\x95\xc6\x97\xef\xdf\x7d\xb8\xbb\x44\x1e\xbf\x1a\x34\x56\x26\x96\xa5\xfc\x45\x97\xf2\xad\x52\xa5\xd2\x2b\x8b\x70\x4c\x3f\x8e\xe1\xc4\x8b\x08\xb4\x91\x41\x90\xc6\xc3\x5c\xba\xe8\x67\x03\x43\x2f\xf7\xbe\x44\xf7\x05\xbe\x30\xb0\x80\x28\x89\xad\x86\x66\xcc\xb1\x6b\x9b\x89\x1c\x52\x64\x75\x47\x14\x95\x39\x30\xae\x14\x3f\xe8\x68\xd6\x58\xb6\x65\xc1\x77\x69\xe4\xf7\x7b\xb8\xb0\x24\x5d\xed\x20\x70\xa5\x2f\x05\xf3\x00\xce\xce\x8c\xd0\x4e\xbd\x45\x97\xd8\x66\x77\x71\x31\xeb\x96\x8a\x3a\x9d\x3f\xe5\x19\x5d\xfd\xb1\xd6\xc1\xc5\xd1\xf3\x3e\x1e\xc3\xf9\x88\x7c\xee\xd3\xe9\xdb\xfe\x8c\xe3\x72\x53\x7a\x2b\x12\x08\x5e\x4f\x15\x9d\x5e\x3c\xee\xb3\x64\x0f\x9d\x93\x19\x08\x4a\x8f\xd3\xba\xeb\x51\xd1\x6f\x63\xbb\xa1\xc3\xd0\xd9\xff\x06\x85\x03\xfc\xc2\x9e\xa2\x84\x6f\x78\xf2\xf9\x91\x2b\x24\xda\x36\xe0\xa4\x3d\x49\xad\x70\x30\x30\x56\x9c\x22\xf6\x1f\xd0\x0a\xde\x6f\x01\xfd\x5e\xa4\xab\x4e\x6c\x87\xed\x40\x9e\x53\xc5\x52\xe2\x39\x88\x54\x43\x96\xa1\x63\x6e\x91\x46\xd1\x06\x56\x4f\x09\x72\x92\x73\xad\x07\xe1\x0e\x33\x56\xa9\xec\x81\x28\x7b\x3f\x52\xb3\x21\xb2\x36\x74\x55\x27\x40\x25\xa8\xea\x4d\x9e\x51\x05\x95\x69\xf9\xf8\x93\xc7\x27\x76\xbd\xd3\xaa\xb3\x37\x2b\x99\x51\x14\x8d\x55\x73\x86\x41\x54\x6c\x22\xef\x10\x58\xe3\x6e\xae\x46\x9a\x30\x2d\x2c\xc1\xb9\x0a\x4c\x17\x49\x2c\xf0\x24\x11\xc4\x12\x52\x3c\x52\xc7\x02\x3d\x9c\x32\x8a\x46\x5a\x99\x1d\x8f\xf5\xd3\x7b\x5a\xfa\xdc\xb9\x3e\x84\x66\xc6\xa4\xa7\x6f\xaf\xe2\x90\x81\x55\xe3\xd0\xca\x23\x40\xfa\x38\x00\x23\x1c\x83\x30\x03\xc7\x5c\xb5\xbc\xe1\x12\x6d\x0b\xc2\xa8\x2b\x22\x85\x6f\xac\xf6\x9c\x52\x40\xcc\xee\xb7\xad\xae\xf0\x6c\x84\x79\x14\x42\xf6\x2d\x15\x78\x99\xa1\x53\xa0\x06\x02\x27\x05\xf0\x49\x9f\xc1\xbc\xc1\xfa\x0b\xd4\x73\x0b\x8f\xa4\x96\x90\xc6\x59\xf6\x6a\x7e\x8a\x20\x0d\x8f\xad\x92\x9f\x1e\xe8\x6c\xbf\xad\xca\x64\xef\x39\x8a\xf1\x2f\xae\x86\xf4\x81\x76\xdb\x76\xd1\x71\xbc\x56\xa2\xdd\x82\x28\x19\xcf\xc9\x3a\x94\x41\x74\x67\xa5\x8c\xba\xa2\xe7\xdb\x3c\xdb\xed\xcd\x8a\xc1\x85\x3d\xd7\x63\x83\x84\x52\x2e\x6c\x4f\x85\x9e\x55\x96\x06\xe6\x60\x02\x0c\xa5\x76\x56\xa4\x5e\x0b\xb8\xec\x4c\x8d\x95\x60\x68\x08\x15\xab\x94\xf9\x01\x3f\x84\x6f\x81\x71\x20\x6f\xcb\x0a\x5c\xf4\xdf\x03\xe0\xa5\x3d\xcf\x44\xf3\x80\xa0\x89\x26\x15\x23\xb9\x8a\xa7\xdb\xc2\xa7\xe2\x9b\xed\x59\x9b\x6b\x9b\x87\x99\x8f\x02\x95\x50\xe6\xf0\xca\x26\x68\x34\xed\xe8\x13\x36\x4a\x41\x9f\xb6\x74\x3d\x63\x3f\x36\xa2\x83\x88\x68\xd3\x0d\xa8\xe4\x94\xba\xdc\xb8\x2f\x20\x4d\x0d\x6c\x54\x77\x6c\x8a\x88\x9f\x67\xc8\x85\x45\x78\x54\x73\x7b\xd4\xa5\x6b\xa0\x75\x0d\x6a\xae\x73\xb5\x1e\x40\xb1\x46\xea\xd3\x8c\xf2\xb9\x7d\xd7\x21\x1c\x84\x53\x88\xa9\x88\xba\x4d\xdd\x4b\xc5\x52\x21\x25\xf1\xe9\x98\x74\xcd\x16\xeb\xe7\xd4\x64\x64\x73\x03\x55\xfa\xce\xe1\xcd\x7e\xff\x9d\x4d\x07\x39\xe4\xba\x51\xe1\x68\x6b\xf4\xbd\x6e\x1d\x39\x55\xf6\xdd\x12\x5e\x4b\xae\x4f\xac\x38\x5f\xd9\x3b\x13\xc2\x6f\xee\xc5\xc0\xbe\x65\xa0\x37\xa5\xa1\xdc\x39\x4e\x5b\xad\xf8\xfe\xfb\x73\x5b\xa9\xe3\xa9\xba\x34\xc3\x6a\x2d\x7c\x1d\x4e\xf6\x5c\xee\xfc\x21\xd7\xc9\x4a\x2d\x53\xa1\xf2\x03\xf9\xeb\xce\x5b\x8e\xeb\xa7\xe9\xda\xd8\x0b\xbe\x78\x7a\x2e\xd5\x53\xb7\xc6\x35\xfb\x72\xb2\x92\xce\x78\xec\x73\xe9\x8a\x96\xf3\xb7\x28\x35\x3d\xa0\xa6\xa2\x79\xed\x4f\xe5\x76\x95\x15\xd1\x85\x4b\x12\xca\xb1\xb1\x0a\xc3\x31\xeb\x74\x4c\x0d\x45\xc6\x25\x61\x21\xb4\xb9\x7d\xb7\x58\x74\xfb\xa9\x7e\x2a\x12\x82\xa8\x31\x00\xc2\x3d\xf1\xb1\x37\x4d\x59\xbf\x9c\x5e\xb9\x54\x52\x8f\x39\xb6\x86\x36\xb3\x34\x68\x35\x13\x9e\x43\xd6\x33\x99\x28\xc1\xfd\xb1\xa1\xa6\x63\xb4\xd7\x38\x5b\x6c\xf0\xce\x9f\xd0\xdd\x09\x02\xed\xfa\xd8\x9c\x5b\x35\x40\xa1\x82\x2f\x6a\xf0\xdd\x44\x51\xfd\x09\xe9\x9b\x08\x55\x0c\xa5\x87\x2e\x52\xf5\x42\xb6\xe6\x83\x45\x68\x2f\x4f\x27\xcb\x8e\x43\xae\x7c\x75\xfd\xa3\x73\x64\xb7\xe3\x93\x13\x65\xb5\x63\x90\x28\xff\x84\x4c\x12\xc6\x6d\x7f\xde\xa7\x32\x65\x02\x1d\xf6\x74\x03\xd8\x7e\x3d\x08\x5b\x5e\x97\x09\x72\x8d\x1a\x7e\x1a\x18\x27\x53\xbe\x4b\xf9\xe3\x70\xb1\x76\x4f\x22\xd2\x3a\xfc\x84\x86\x18\x9d\xc6\x8f\xb9\x40\xb9\xe9\xcb\xa6\x3f\x5a\x53\xd8\x99\xe7\x49\x0e\x96\xa6\x07\xef\xd1\x04\x82\x26\xac\x65\x91\xb7\x67\xc8\xb3\xeb\xdf\x9c\x92\x2f\xd7\x1e\xdf\xbd\xf4\xf4\x2e\xf2\x27\x83\xf9\x8f\x11\x74\xb9\x0e\xa6\xa0\x44\x54\x81\x6f\x58\x5c\x25\x5c\xcd\x57\xdb\xf9\x93\xea\x52\x9d\x73\x1f\x12\xc8\xde\x6a\xa9\x92\xcd\x80\x34\x5d\x63\xc0\x80\xe9\x32\x4f\x3f\x18\x0c\x3e\x86\xe0\xe4\xa1\x41\x68\xda\x2a\xdc\xf8\xbd\xe2\x3f\x76\xea\x36\xd5\xdd\x9e\x71\xdf\xd3\xfa\xd6\xb8\xa2\xbf\x7c\x29\x2d\xdc\xdf\x6f\x34\xfb\xe5\xc3\xbb\x7f\x32\x77\xc8\x5b\x38\x26\xb4\x1f\xde\x06\x9e\x04\x5f\xf7\x2a\x66\xbf\xde\xfc\xe3\x67\x63\xaa\x5b\x47\x3f\x34\xbe\x15\x7d\xf5\x1c\xb7\x99\xbf\xfe\x7c\xfb\xae\xb2\x7f\x11\x0a\xfd\x79\x72\xf2\xbd\xd4\x82\x06\x93\x11\xf0\x32\xb5\x66\xaf\xd9\x0f\x2f\x5e\xb0\xbf\x5a\xf7\x22\x37\x27\xdb\x1e\x68\xd1\xa8\xf9\x03\xc8\x1d\x4e\xda\x21\x8b\xd9\xf8\x59\xff\xbb\x82\xfb\x79\xbc\xf8\x7f\x00\x00\x00\xff\xff\x24\x88\x6a\xd1\x1c\x1c\x00\x00") + +func uiTsModelsTimeseriesTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsTimeseriesTs, + "ui/ts/models/timeseries.ts", + ) +} + +func uiTsModelsTimeseriesTs() (*asset, error) { + bytes, err := uiTsModelsTimeseriesTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/timeseries.ts", size: 7196, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesGraphTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x56\x51\x8f\xe2\x36\x10\x7e\xe7\x57\x4c\xf3\x14\x4e\xc8\x61\x75\x52\x1f\xb8\x72\x3a\xba\xad\xb6\x95\x8a\xd4\x6e\x57\xf7\x72\x3a\x9d\x8c\x19\x12\xf7\x1c\x9b\xda\x0e\x1c\xaa\xf8\xef\x1d\x3b\x21\x1b\x42\x58\xaa\x95\x6a\x21\x48\xf0\xcc\x37\x9f\xe7\x1b\x8f\x9d\x65\xe0\x4c\x65\x05\xce\x60\xcb\x73\x74\x59\x6e\xf9\xb6\x60\xde\x8d\x32\x9a\xfa\xc1\xe2\x06\x2d\x6a\x81\x34\xeb\x8b\x79\xc2\x58\xe6\x0f\x5b\xa9\x73\x97\x95\xd2\x17\x56\xaa\xbf\xda\x27\xb6\x26\xb7\x04\xb2\xf7\x37\x5d\xd7\x6f\xe9\x73\xdb\xbc\x34\x6b\x54\x2e\xf3\xb2\x44\x87\x56\xa2\xbb\xe5\x20\x4c\xb9\x35\x1a\xb5\x27\x4e\xe8\xad\x14\xad\x07\xb9\xc0\xa2\xf2\x85\xb1\x33\xf8\xd1\xf2\x12\x1e\x6c\xa5\x51\x5a\x48\x57\xf4\xc6\xf2\xfa\xed\x43\x5e\x72\x5a\x07\xc1\x8c\xbb\x0e\x4b\xee\x3d\x3c\x59\x2e\x0e\x90\x96\xf4\xfc\x41\x18\xf1\xd5\x1a\x2e\x0a\xc5\x57\xae\x36\x1f\x65\x6f\xde\x8c\xe0\x0d\x2c\xd6\xa5\xd4\x1f\x25\xee\x1d\x48\x07\xbe\x20\x76\x56\x96\xdc\x1e\x80\x56\x53\x29\x84\x8d\xb1\x70\x7f\xf2\x47\x07\x3c\x38\x48\xe7\x2d\xf7\x72\x87\xb0\xc7\x55\x80\x91\xda\xa3\xdd\x70\x81\x8c\xde\xb2\x51\xe3\xdb\x01\xff\x67\x04\x10\x43\x02\x59\x3f\x04\xcd\x42\x3c\x4e\xd1\x8c\xd9\x00\x7d\x84\xa1\xd4\x6c\x7d\x8c\x17\x32\x08\x75\x0a\x21\xea\xeb\x58\x74\xcc\xe8\x1b\xbf\x6d\x8d\xf5\x27\x76\x35\x52\x00\x0f\xa3\x09\x00\x31\xc8\x02\x5c\xc9\x95\x82\x35\x96\x46\xd7\x7c\x8d\x0e\x91\x38\x88\x82\x5b\x3f\x81\x7d\x21\x45\x01\x6b\xe9\xb6\x8a\x1f\x02\x19\xbf\x37\xf5\x9c\x7b\x86\x69\xa6\xa9\x0e\x62\x76\x1c\x27\x6a\x6b\xee\x39\xf1\xf3\xc0\x1d\xd8\x20\x1c\xee\x70\x0d\xab\x03\x41\xfc\x51\xa1\x3d\x2c\xb9\xa6\xda\xb4\xac\x45\xc9\x9a\xa7\x73\xf2\xbf\x93\x51\xcb\x3d\x0c\xa1\xb8\x73\x94\x6d\xed\xad\x51\x0a\x2d\xc8\x72\xab\xb0\x0c\x05\x02\x5f\x4e\x55\xbb\xac\x7f\x3b\x56\x5d\x88\x30\xca\x3a\xfc\x6c\x19\xeb\x91\x2d\x9b\xd2\xea\x52\x7b\xd7\x73\x71\x85\xd9\x3f\x72\x8f\x6e\xb6\x32\x46\x21\xd7\x7d\x83\x28\xf0\x8e\xab\x99\xae\xca\x55\xf0\xef\x03\x54\xe5\xdf\x01\x1f\xe6\xa0\x71\x0f\xbd\xd0\x8f\x28\x68\x11\x91\x40\x7a\x37\xa5\xac\x7e\x1f\xbe\xee\xa6\xd3\xe9\x04\x7a\x40\xf5\x18\xa2\xbe\xc8\x73\x8b\x39\xf7\xc6\xb2\xc5\xc7\x87\x09\x24\xc2\x32\x4d\x76\x4c\x90\xcc\x8e\xb9\x4a\x08\x74\x8e\xdd\x25\xe3\x3e\x79\xd2\x1e\x5f\xc7\x6e\x80\xdc\x6d\x6a\x5f\x1e\x17\x4f\x3f\xbf\xcc\xaf\x87\x2b\x62\x85\x56\x82\x00\xd2\x71\x5f\xce\x30\x7c\x21\x1d\x6b\x74\x1d\x5e\x44\x57\xdd\x34\x9a\x9f\x24\xb9\x48\x47\x1f\x90\x51\x6b\xb2\xe8\x8a\xf4\xba\xe5\x49\x7e\x8a\x4d\x75\xff\x6b\xf3\x96\xa6\x63\x98\xbf\xbf\x82\x35\x89\x19\x9c\x5e\x60\x1e\xfb\x8b\x37\xba\xd2\xca\xf0\x35\x81\x0d\x2d\x5d\x50\x39\xda\x36\xe2\x19\x9b\xdb\xd8\xde\xe4\xb9\xc2\xba\x4b\xcc\xa1\xa6\x7b\x35\xbf\xed\x26\x20\xd3\xef\xce\xff\x19\x4a\x8c\xdc\x40\x7a\x6e\x35\xbc\x80\x16\xff\x94\x22\xca\x60\x5d\x6c\xf1\xdf\xb6\x38\x07\xb3\x7f\x04\x12\x19\x5f\x83\xfb\xa2\xfc\xc7\x57\x97\x44\xd7\xf3\x2c\xdd\x4d\x6f\xdb\x54\x5a\xc4\x4e\x2b\xda\x06\x95\x8e\x67\x2f\x74\x2b\x6a\xa0\x95\xd5\xb1\xa4\xef\x3b\x2e\xef\xfe\x6b\x9c\x1d\x9d\x2f\xa9\xf0\x56\x75\x82\x5c\x0a\xb1\xe3\x16\x56\x95\xf7\x46\x3f\xe1\x37\x3f\xa3\xdd\x46\x1d\xfd\xa2\xc9\x91\xa2\x01\xe9\x96\xa2\xcf\x40\x54\x29\xc9\x9f\x64\x0c\x4f\xc6\x73\xe5\x92\x8b\x6c\x5d\x97\x6f\x00\x24\x86\xbc\xc4\x18\x4e\x58\x99\x26\x2c\x1e\x8e\xe1\x18\x49\x26\xf0\xe9\x4a\x89\x90\xdd\x2f\x6f\x69\x3e\xa9\x77\xc1\x4f\x74\x1c\x26\xe3\xa1\xc6\x16\xc6\x7d\x7b\x23\x69\x1b\xcb\x6f\x52\xd7\x1b\x88\x09\x8b\x44\xb0\xce\x50\x53\x27\xff\x3f\x10\xd1\x4f\xae\x1c\x12\xad\x81\xd4\xdb\xca\x7f\xa2\xdb\x1a\xce\xeb\xac\x7e\x26\x97\x6b\x5b\xe6\x34\xa8\x7f\x54\x74\x8b\x7c\x96\xe1\x1a\x83\xd3\xa0\x0b\x8a\x92\xe2\xeb\x0c\x22\xef\x4e\x67\x79\xc9\xf1\x38\xbe\x58\xd9\xe7\x5e\x6d\x3f\xff\x1e\x47\xc7\xd1\xbf\x01\x00\x00\xff\xff\x47\xd6\x5d\x9c\xe1\x0a\x00\x00") + +func uiTsPagesGraphTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesGraphTs, + "ui/ts/pages/graph.ts", + ) +} + +func uiTsPagesGraphTs() (*asset, error) { + bytes, err := uiTsPagesGraphTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/graph.ts", size: 2785, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesMonitorTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x91\xbb\xce\xdb\x30\x0c\x85\x77\x3d\x05\xe1\xc9\x09\x0a\x6b\xe8\x96\x5e\x90\xb4\x43\xa7\x00\x19\x8a\xee\x8a\x4c\xdb\x6a\x75\x09\x28\x2a\x69\x10\xe4\xdd\x4b\x25\x75\xe0\x7f\xf9\x35\xd8\x22\xce\xf9\x0e\x09\x4a\x6b\xc8\xa9\x90\xc5\x0d\x9c\xcc\x88\x59\x87\x14\x1d\x27\xea\x38\x2b\x2d\xe2\x67\xc2\x01\x09\xa3\x45\xd1\x79\xfa\xd2\x74\x9d\xe6\xeb\xc9\xc5\x51\xac\x8e\x27\x72\xfe\xf7\xeb\xd6\xf5\x82\x35\xa0\xbf\x2a\x61\x61\x57\x78\x4a\xb4\x81\x6f\x64\x02\xfc\xa0\x12\xd1\x11\xb4\x47\xa9\xba\xf1\x59\x6d\xc7\x60\x84\xb2\x29\xac\x96\xc0\xde\x30\xc3\x4f\x32\xf6\x0a\x6d\x90\xfb\xd6\x26\xfb\x87\x92\xb1\x93\x37\xc7\xfc\xb4\x2b\xbd\x5e\x2b\x58\xc3\xae\x0f\x2e\xfe\x72\x78\xc9\xe0\x32\xf0\x24\x63\x92\x0b\x86\xae\x10\x52\x5f\x3c\xc2\x90\x08\xbe\xcf\x3c\x66\x30\x15\x70\x99\xc9\xb0\x3b\x23\x5c\xf0\x58\x63\x5c\x64\xa4\xc1\x58\xec\xa4\xd2\xea\x3f\xbb\x08\xbf\x29\x80\x47\x4b\x10\xf7\xfe\xb9\xa3\xb9\xe3\x59\x1c\x8f\x3e\xf8\xf7\xe4\x13\xc9\x6e\xc0\xfa\x92\x25\x11\x32\x1b\x2e\xb9\x7b\x60\x5a\xbe\xe2\x48\xc4\xf3\x6c\x73\x4e\x0d\xaf\xe7\xad\x7a\x90\xf7\x78\x49\x0b\x79\x28\xd1\xb2\x4b\x11\x6c\x8a\x4c\xc9\x7b\xa4\x76\x05\xb7\xfb\x3b\xce\x3a\x61\xf5\x2c\x2c\xf5\x10\x72\xa1\x08\xa1\x6d\xa6\x8f\xcd\x07\x68\xe6\x79\x0e\x5e\x36\x31\x25\xdf\x23\x35\xab\x4f\x0b\x68\xee\x51\xff\x77\x75\x57\xff\x02\x00\x00\xff\xff\xd6\xb1\x96\xcc\x3e\x02\x00\x00") + +func uiTsPagesMonitorTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesMonitorTs, + "ui/ts/pages/monitor.ts", + ) +} + +func uiTsPagesMonitorTs() (*asset, error) { + bytes, err := uiTsPagesMonitorTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/monitor.ts", size: 574, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesNodesTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x55\x5d\x6f\xa3\x38\x14\x7d\xcf\xaf\xb8\xe2\xa1\x82\x36\x6b\xf6\xe3\x8d\x6c\xaa\xed\x76\x57\xab\x4a\xdb\xce\x8c\x2a\xcd\x4b\x15\x45\x06\x9c\xe0\xd6\xd8\x19\xdb\x90\x89\xaa\xfc\xf7\xb9\xc6\x40\x20\x49\x67\xfa\x36\x48\x0d\xd8\xd7\xe7\xdc\xaf\x73\xdd\x38\x06\xa3\x2a\x9d\xb1\x04\x36\x74\xcd\x4c\x2c\x55\xce\x0c\xb1\x66\x12\xa3\xe9\x4f\xcd\x56\x4c\x33\x99\x31\xb4\xda\x62\x1e\x10\x12\xdb\xdd\x86\xcb\xb5\x89\x4b\x6e\x0b\xcd\xc5\x73\xff\x45\x72\x84\x05\x10\x5f\xbf\x09\x2d\x91\x5b\x78\x17\x4b\x63\xa9\xad\x4c\x87\x40\x08\xdc\x54\xb6\x50\x3a\x81\xbf\x35\x2d\xe1\x3f\x5d\x49\xc6\x35\x84\x29\xae\xc8\xda\xaf\xfe\x5a\x97\x14\xfd\x64\xaa\x8c\x10\x71\x79\x39\x81\x4b\xb8\xc9\x4b\x2e\x3f\x73\xb6\x35\xc0\x0d\xd8\x02\xdd\x69\x5e\x52\xbd\x03\xf4\x56\x09\x06\x2b\xa5\xe1\x56\x65\x2f\x5a\xd1\xac\x60\x06\xa8\x03\x70\x63\x35\xb5\xbc\x66\xb0\x65\xa9\xa3\xe1\xd2\x32\xbd\xa2\x19\x23\xb8\x8a\x27\x2d\x76\x40\xfe\x3a\x01\x68\x5c\x02\x9e\x7e\x70\x45\xea\xfc\xd5\x68\x6f\xbc\xb0\xaf\x1b\xa1\x34\x16\xa7\xd9\xf6\x09\x82\x5a\x01\x15\x02\x7c\x59\x1b\x74\x8c\xbf\x78\x54\x69\xdb\x85\xe8\xe9\x9c\x87\xde\x52\x53\xdd\x60\x1e\x1b\x16\x66\x12\xb8\x6f\x8a\x47\x1e\xfa\x4d\xe2\x61\x73\x90\xe8\xff\x0d\x6b\x18\xcd\x86\xac\x99\xa0\xc6\x60\x35\xa4\xd5\x4a\x08\xa6\x81\x97\x1b\xc1\x4a\x26\xad\x81\x65\xd7\xc6\x7b\xff\x1e\x9c\xf2\x91\x81\xab\x6c\x4d\xad\x4f\x8d\x67\xb0\xfc\x52\x31\xbd\xfb\xb7\xc6\x9f\xfb\x47\x8c\xe3\xb7\x5f\xf1\x99\x1d\x9d\x5d\x36\x95\xad\xa9\x48\x40\x56\x65\xca\xf4\x6c\xd2\x9d\xa8\x52\x81\x2c\x99\x92\xd8\x8c\x2a\xb3\x4a\x87\x51\xef\x0a\x46\xd9\x93\x4f\xce\x53\x97\x8c\x7b\x6c\xc1\x0d\xe9\xb9\xd1\xb9\x61\xf6\xae\x5d\x85\xc8\x33\xbf\x3e\x4b\x30\x1d\x24\x4f\x46\xf1\xf7\xdc\xfb\xa3\xf8\x94\xac\xa4\x50\x34\x1f\x05\x97\x09\x46\x75\xef\x6f\x1c\xcc\x80\x69\xc0\xd7\x6a\xa7\x57\xcf\x47\x9c\x36\x30\x85\xda\x02\x05\x81\x72\xec\x84\xe2\xa4\x43\x6b\x94\x39\x4d\x51\x19\x07\xd9\xb4\xc2\x39\x2b\x9d\x86\xab\x0b\xae\xb5\xaf\x2a\x99\x59\xae\xa4\xab\x6f\x9b\xf0\x28\x03\xcd\x6c\xa5\x65\xa3\x9d\xdb\xc1\x89\x71\xec\xa7\x6c\x4e\xec\xe7\x78\xca\x30\xc8\x79\x1d\x4c\xe1\xa9\xb7\x80\xdb\x2c\x7e\xc7\xbd\xc0\x2b\xf5\x7f\x4c\x33\x88\xa6\xe3\x03\x95\x38\x02\x01\x7c\x48\x9f\x59\x66\xc9\x0b\xdb\x99\x70\xd4\x44\x24\xc9\xc2\x28\x22\x06\x43\x0a\x23\x52\xd2\x4d\xd8\x05\xd6\x1c\xbc\xcb\x87\x91\xf9\xc7\x0d\x92\xc3\xb9\x39\x39\xe5\x7a\xf2\xb0\xc5\xec\x08\x75\xc8\x4a\x70\x8c\xef\x15\x30\x98\xa4\xe1\x21\xcd\xed\xc5\x73\xd8\x4f\x8f\x30\x70\xbe\x08\xbd\x91\xa0\xca\x8d\x0d\x83\x0b\x99\x9a\xcd\xec\x22\xad\x84\x98\xf9\xef\x71\x51\x06\x6c\xf4\xa9\xc0\x6b\x74\xee\x2f\xe5\x38\x80\xab\x71\x08\x57\x10\x2c\x9a\xe8\xb0\xc7\x2b\xbe\x4e\xd0\x87\x56\x15\x0e\xdd\xbe\xad\x79\x72\x0c\x39\xeb\x28\x80\x2d\x8e\x3c\x5e\x76\xb9\x66\xc6\x1c\x30\xd4\x6f\x10\xc9\xec\x56\xe9\x17\xe7\xee\x97\x13\x63\xfb\x3e\xa1\x5d\x44\xd1\xb8\xa8\xfb\x91\xef\xc5\x60\xb5\x78\xd7\xc4\x1c\x06\xc6\x8d\x48\xce\x2c\xce\x88\xbf\x5e\xc1\xe0\x9d\xdb\x0e\xcb\x8f\x66\xe5\x67\x8e\x4a\x77\xa7\xdf\xe5\x28\xc6\xb6\x55\x64\x43\xf1\x1f\x5c\x18\xb4\xfd\x09\x06\x45\x7b\xf7\x64\x81\x17\xf5\xc9\x68\x9d\xd3\xa2\x03\xfe\xd1\x01\x13\x70\xed\x6c\x27\x67\xac\x8c\xd1\xac\xfc\xe3\x8b\xdd\xcd\xd8\xa8\x8d\xdf\xe9\xa2\xfb\xdb\x4f\xbe\x05\x00\x00\xff\xff\xec\xae\xf6\xff\x62\x08\x00\x00") + +func uiTsPagesNodesTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesNodesTs, + "ui/ts/pages/nodes.ts", + ) +} + +func uiTsPagesNodesTs() (*asset, error) { + bytes, err := uiTsPagesNodesTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/nodes.ts", size: 2146, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesRest_explorerTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\x5a\x5f\x6f\xdb\x38\x12\x7f\xcf\xa7\x98\xd5\xc3\x46\xea\x26\xf2\x02\xf7\x72\x70\xea\xec\xf5\xd2\x74\x7b\xb7\xed\x35\x48\xbd\xc5\x02\x41\xb0\xa0\x25\xda\x52\x23\x8b\x3a\x92\xb2\xeb\x2b\xf2\xdd\x6f\x86\xa4\x24\x4a\x76\xfe\x15\x49\x6f\xb1\xd7\x87\x36\x92\x38\xff\x38\xfc\xcd\x6f\x48\x26\xa3\x11\x28\x51\xcb\x84\x8f\xa1\x62\x0b\xae\x46\x92\x2b\xfd\x3b\xff\x54\x15\x42\x72\x19\x6b\xb5\x37\x42\x91\xe7\x92\xcf\xb9\xe4\x65\xc2\x51\x4a\x67\x93\x20\x8e\x47\x7a\x53\xe5\xe5\x42\x8d\x96\xb9\xce\x64\x5e\x7c\x6c\x9f\xe2\x14\xd5\x02\x18\x1d\xef\xa1\x2e\xbc\xa8\x75\x26\xe4\x18\xde\x32\xad\x61\x2a\x59\xb2\x81\x70\x89\xcf\x7f\x4b\x44\x72\x25\x05\x4b\xb2\x82\xcd\x54\x9c\x88\x65\x84\xf2\xcf\x9e\xed\xc1\x33\x78\x91\x2e\xf3\xf2\x43\xce\xd7\x0a\x72\x05\x3a\x43\xaf\x32\x5f\x32\xb9\x81\xa5\x48\xeb\x82\xc3\x5c\x48\x38\x69\xf4\xb9\x02\x46\x0a\xb9\xd2\x92\xe9\x7c\xc5\x61\xcd\x67\x64\x26\x2f\x35\x97\x73\x96\xf0\x18\xdf\x46\x7b\x4e\xd7\x33\xfe\x79\x0f\xc0\xb8\x04\x94\x3e\xc7\x89\x9f\xba\x79\x93\x5b\x06\x2b\x8e\x1e\x55\xbe\xac\x50\xab\xb5\x65\x7c\xdb\xfc\xe0\xf4\x81\xd2\x05\x2b\x56\xd4\x5c\xc5\x30\xcd\x72\x8a\xd8\xda\x63\xa8\x5a\x2e\x0a\xae\x45\x09\x67\xac\xe4\x45\x6c\xbe\x8f\xf0\x7f\x54\x17\x52\x37\x93\xe9\x39\xa6\x90\xda\xa0\xc8\xcc\x5b\x91\xf2\x02\x12\x51\x6a\x96\x97\x36\x19\x4a\xe3\x34\x13\x52\xc7\x11\x0a\x87\x3e\xf6\xac\x54\xad\x3f\xe7\x11\x1a\x67\xd6\x9c\xf5\xe2\xf9\x21\x4f\x67\x52\x54\x5c\xea\x1c\xf3\xd9\x18\x35\x2e\xe2\x56\x64\xe4\x9e\x5c\xfc\x2b\x26\xdd\x1c\x7f\xe1\x1b\x98\xc0\x32\xae\xd0\x44\x18\x04\xd1\xd1\x4d\x82\x1f\x28\x53\xf7\x13\x3d\x11\x35\xe5\xbc\x13\xfe\x71\x97\xac\x64\xe5\x82\xbf\xd7\x0c\x5f\xef\xb0\x6a\x24\x4f\xcb\xf4\x4e\x39\xae\x2a\x51\x2a\xfe\x46\x2c\x3a\xd1\x8b\x4b\x14\xdd\x95\xb4\x42\x2c\xce\x9d\x82\x05\x0d\x86\x8c\x8f\xf3\xba\x4c\x74\x8e\x2b\xbf\xce\xf2\x24\x83\x94\x27\x98\x49\xbb\x7a\x8d\x7d\xd0\x02\x58\xd9\x59\xfa\xed\xed\x9b\xd7\x5a\x57\xe7\xfc\xdf\x35\x61\x8a\x61\xa4\x0b\x5e\x72\x84\x34\x01\x9c\x1c\xc1\x92\x2b\x85\x45\x9a\x6e\xaf\x48\xeb\xcf\x8b\x27\xfc\x94\x61\xdd\xf5\xcd\x1e\x80\xa8\xb4\x1a\xc3\xef\x4d\xad\xbe\xb5\x3f\x7f\x7b\x7d\xfe\xae\x22\x03\x2a\x1a\x63\x19\x11\xb2\x1b\x8c\x80\xc9\x4a\xca\x34\x73\x23\x47\xed\x40\x3e\x07\x72\x12\x37\x53\x9a\x6e\x2a\x5c\xdc\xc9\x04\x82\x8f\x4a\x94\x41\xe4\xd9\x00\x63\x01\x13\xfa\xcf\xf7\xef\xfe\x15\x5b\x43\xf9\x7c\xd3\x53\x8f\x3a\xcb\xd7\xc0\x0b\x4c\xd1\x0e\xfd\x9e\x3f\xfe\x49\x7b\x3a\x7b\x03\x51\xfa\x11\x17\xbc\x5c\xe8\x0c\x8e\xe1\x47\xf8\xc9\x0e\x8c\x21\x08\x4b\xd1\xad\xc3\x4c\xa4\x9b\x28\x38\x1a\x6a\x5f\xec\x5f\xec\xdb\x74\xc5\x4b\x8e\x1c\x96\x1e\xc0\xfe\x25\xe0\x27\x8a\x80\x4a\xb0\x56\xf8\x05\x1a\x99\x5a\x16\xf8\x3a\xa6\x77\x32\x70\x19\x7f\x14\x79\x19\xee\xef\x7b\x93\xf2\x90\x15\x46\x71\x55\xab\x2c\x24\xd1\xc8\x13\xd0\xb5\x2c\x87\x29\xf2\x65\xae\x77\x82\x50\x25\xac\x84\x34\x57\xc8\xcd\x96\x0e\xed\x17\xe9\xa0\x84\x40\x33\xb4\xc1\x25\x32\x1a\xcc\x98\xe2\x29\x20\x54\xe8\x5b\x52\x4b\xa4\x75\xdd\x99\xb2\x54\x06\x62\xee\x57\x16\x61\xb1\x29\x1f\x62\x39\xde\x9a\x5e\xe7\x45\x01\x35\x81\x99\x1c\xd4\x55\x55\xe4\x3c\xed\xac\x65\x88\x3c\xb0\xd9\x6b\xf4\x5c\xd2\x8d\xe2\x8c\x13\x5e\x11\xd0\x4d\x88\xed\x30\x7e\xbe\x91\x76\x5a\xac\xd3\x24\x43\x6b\x7d\x0c\x36\x5f\xd1\x78\x88\x6c\x64\xb5\x65\xae\xf8\x73\x56\x6e\x8e\x07\x98\xe6\x65\x5a\xe1\x22\x11\x73\x04\xa3\xab\x95\x69\x7d\x23\x33\xcf\x9f\x14\xcd\x7b\x12\xc0\x0f\x28\x44\xa5\xfb\xeb\xf9\x3f\x4e\xc4\x12\x63\xc3\x64\x85\x5d\x66\xc2\x28\xea\x57\xc3\x77\xdf\x35\x79\xc2\xa1\x1e\x7c\x5b\x67\x3f\x4c\x60\xff\x7b\x7c\x9b\xec\xdf\x62\xdd\x1a\xd8\x85\x6d\x87\x91\x65\xec\x96\x20\xf4\x9d\x34\xc9\x70\x80\xf5\x46\x10\x9e\xe3\x36\x06\x7f\x00\x4b\x08\x9b\xb2\x1e\xfb\xcc\xd1\x8d\x5f\xb7\x31\xec\x46\x1e\x06\x8c\x3d\xb2\x07\xbd\x16\x75\x4c\x2e\xb8\x26\x26\x69\x3a\xa1\x93\xee\xc1\xf1\xc0\xe2\xb1\xb3\xd8\x07\xa6\x87\xc7\xae\xd3\x10\x1c\xbd\x76\xb2\x8d\xc8\xce\xda\x10\x9a\x0f\x45\x64\x67\xe9\x61\xd0\x34\x33\x7d\x74\x6c\x1a\xab\x23\x42\x65\x9b\x8c\xd0\x03\x89\xed\x5e\x26\x0d\x5b\xae\x3a\x82\x47\x8b\x4f\x0a\x19\xa0\x95\xcd\x59\x91\xff\x07\xf7\x94\x4d\x42\x2c\x89\xc1\xe7\x06\xbe\x86\x63\xaf\x3d\x9c\xf5\xcb\xc8\x06\x63\x5b\xc9\xd9\xbb\xf7\xd3\x41\x2b\x71\x93\xc4\x4d\x63\x39\xcf\xa9\x4b\xb7\x6e\x90\x9b\x2d\x1f\xf7\x15\xc0\x92\x36\xd7\xae\x0d\xbe\xe6\x2c\xe5\x32\x0c\x4e\x70\x5b\x85\x49\x3d\xa4\xc6\x15\x1c\x40\xa0\x71\x6a\xa3\xaa\xc0\x9d\xd6\x11\x24\x19\xc3\x4e\xae\x27\xbf\x4e\x5f\x1d\xfe\x15\x03\x38\xea\xd9\x73\xf3\x40\xb3\xfe\xf7\xeb\x1d\x41\xba\x76\xe2\x01\x36\xec\x15\xf6\xcd\x95\xed\x7e\xde\x51\x82\x89\xdb\x27\xfd\xcf\x8a\xd0\x6d\xd4\xfe\x88\x65\xe8\x72\xf3\xe8\x85\xe8\xec\x7e\x2b\xc5\xa7\x2b\x45\x46\x48\x49\x18\x99\x1a\x7d\x3a\x5c\xaf\xd7\x87\x78\x28\x59\x1e\x62\x26\x6c\xcf\x4c\x9f\xa8\x42\x1d\x9a\x1f\xb9\x46\x0b\xce\x24\x1d\x28\xcc\x83\xfa\x82\xbd\x4e\x63\x21\xf4\xb3\xe9\x6f\x28\xcd\x09\xa5\x5d\xc1\x3d\x2f\x16\xef\x30\x39\xab\x35\x1d\x47\xcd\x41\x25\xe3\x05\x1e\xf7\x3a\x0f\x3a\x63\xba\x77\xe2\x48\x30\xff\x57\x6c\x86\x94\xe1\xd4\xdc\xa9\xb0\x31\x36\x38\x71\x2e\x78\xff\xc0\xd9\x1a\xb6\xda\x21\x71\xab\x3b\x41\x20\x2e\x4a\x63\x7d\x1c\x46\x93\x63\x2c\xba\x03\x62\x2f\x72\x95\x9a\x2f\x33\x21\x70\xba\x65\x37\xd5\x26\xed\x61\x90\x97\x55\xad\x2f\x34\x82\x64\x62\xed\x5e\x22\x58\xfc\x8a\x45\xa6\x1a\x03\xf9\xea\x10\xdd\xda\x6e\x9f\xc2\xa8\x1b\x6d\x42\x69\x1e\x9a\x91\x66\xeb\xb3\x9d\x45\x3b\x89\x57\x39\x2f\xd2\xfb\xa5\x12\x33\x4e\x61\xc3\xdc\xa8\x7c\x61\x1a\x8d\xf2\xf3\xe9\x71\x3f\x91\x76\xc2\x94\xb4\xe9\x17\x25\x91\x8c\xf5\x53\x88\xed\x2f\xe1\x99\x28\xb0\x2a\x1f\x96\x48\x97\xfb\x95\x6d\x71\xbd\x04\x67\xb4\xa7\x45\x62\x8b\xd7\x48\x81\x2f\xb4\xc6\x7a\x37\x62\x81\x9b\x40\x74\x43\xd2\xdd\xa5\xc5\x29\xb5\xac\x76\x87\xdc\xc6\x9a\x14\x4c\x29\x20\xe2\x90\xa2\x28\xda\xcb\x13\xb3\x5a\x23\xef\x3a\x23\xde\x2a\x98\x33\xe4\x52\x6a\x8a\xed\xf9\x7e\xce\x8a\xde\xf9\xf3\xca\x5c\x68\x98\xcb\x92\xb8\x25\x78\x9f\xde\x8b\xc1\xb0\x69\xec\x47\x7b\x7e\x00\xaf\xdc\xca\xf5\xfc\x5b\xd6\x70\x4c\xef\xda\x51\x8f\x1f\x75\x96\xab\x78\x10\x67\xa8\x65\xed\x47\x07\xce\xb5\xbf\xcb\x8c\x62\xc4\x14\x56\x19\xa9\x27\x82\xee\xac\x34\x3f\x80\xde\xeb\x6e\x4a\xc3\x48\xff\x8e\x9c\x97\xb6\x48\x53\xee\xd2\x82\x49\x4e\x8d\x1b\x31\x8e\xf4\xc3\x8a\x62\xc6\x92\x2b\x6f\x2e\x95\xcc\x57\x08\x6f\x68\xac\x63\x42\x90\x9c\x26\xc7\xbb\x67\x30\x4c\x30\xee\x4a\x86\x0a\x36\x35\xc1\xcf\xa7\xd3\xc0\x13\xac\x84\xba\x49\xd2\xb6\xa3\x4e\x34\xc3\x56\x72\x83\xe8\xeb\xd3\x17\x2f\x7d\x51\xcc\xde\x8e\x90\x9d\xf0\xcb\xd3\x37\xa7\xd3\xd3\x60\x9b\xd3\xb7\xb7\x17\x0d\xf4\xc2\x68\xbc\x13\x87\xae\xe6\x4a\xbe\xf6\x70\x1a\xde\x6d\x79\x95\xf3\x75\x98\x68\x6c\xfb\x9d\x5a\xb4\x6d\x17\x6b\x59\x71\xa3\x41\x09\x6f\x69\xc4\xe9\xa8\x43\x17\x20\x96\xd9\x45\xaf\x37\xa2\x5e\xf6\x17\xea\xb2\xbf\x8c\x3e\xc0\x19\xcb\x65\x10\x1d\x0c\x05\xa8\xdd\x6e\x29\x82\xa5\xa1\x30\xc0\x72\xc0\x41\x8a\x30\xc6\x5a\x71\x4f\x83\x45\x1f\xd8\x44\xab\x31\x02\x99\x32\xfc\xbd\x64\x52\x1e\x0d\x9d\xb6\xc6\x3f\x38\x6e\x30\x46\xb1\xd6\xee\x69\xde\x35\x9a\xe0\x67\xae\x1b\x65\x84\xd9\x03\x95\x69\x3f\xd2\x68\x13\xa0\x1e\xa8\x7e\x56\xb7\xbe\x09\xb9\x0f\xd4\x7e\x69\x60\xd9\x18\xb0\x20\xbd\x97\x89\xcb\xee\x12\xc9\xdb\x07\xec\xa0\xd2\x73\x62\xe2\xaf\x4a\xa5\xbd\x1b\x5a\xcb\x5b\xdd\xa7\x81\x98\xbd\x9e\xf5\x84\xf0\xc3\xd7\x26\x55\xef\x56\xe9\xcf\xca\xa9\xdf\xd8\xcf\xb2\x9f\x29\x86\x07\x53\x9f\x01\x6e\x53\xa3\x1d\x94\x1f\x99\x03\x11\xf9\x3d\x1f\xf8\xfe\x35\x69\xf0\xe9\x99\xc8\x1d\xb4\xfe\xd8\xdb\x3a\x17\xe4\x9d\x1c\xd4\x14\xee\x23\x73\x51\xff\xfe\xe2\xcf\x4a\x47\xdf\xb6\x78\x4f\x49\x72\x0e\xc2\xdf\x76\x78\xff\x27\x3b\xbc\x37\x62\xb1\xcd\xa9\xdd\x9f\x2f\xec\xc4\x70\x21\x16\xdb\xbf\x13\x76\x4c\xbb\x79\x6e\x59\xec\xe2\xf2\xb8\x2b\x2e\x73\x1d\x35\x06\xba\x67\x58\x89\x3c\x7d\xbc\x32\xf2\x99\xd2\x44\xe5\x36\x83\xdd\x4d\x97\x9f\x16\x17\x86\x23\x4b\x77\x45\xe6\x5d\x65\x3e\x5e\x0d\xf6\x8a\x0f\x9d\xdc\x56\x6f\xa5\x12\xc5\xd6\xb6\xa2\x01\xc0\x09\x45\xd9\xac\xbf\x09\xf9\xc0\x31\x94\xe5\xcf\xbe\x96\x91\x2a\xcc\xef\x8b\x97\x0c\xfb\x59\x13\x78\x88\x6b\x32\xbc\x57\xf5\xc3\x45\x07\x24\xd1\x1b\xbf\xf6\x11\xb4\x0b\x40\xfd\x3f\x4b\x39\x63\x8b\xee\x17\xf0\xb7\xad\x27\x7c\xbe\xbe\x2d\xbd\xf7\xc8\xe7\xae\x64\xee\x64\xbb\x1d\x6c\xd5\xbf\x1b\x1a\x96\x5d\xff\xb8\x33\x1c\x1d\x6e\x41\x86\x15\xd7\x7f\xf7\x0b\xeb\xe0\x96\x62\xa4\x7f\xd7\x7b\xff\x0d\x00\x00\xff\xff\x29\xf7\x5b\xb6\x59\x25\x00\x00") + +func uiTsPagesRest_explorerTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesRest_explorerTs, + "ui/ts/pages/rest_explorer.ts", + ) +} + +func uiTsPagesRest_explorerTs() (*asset, error) { + bytes, err := uiTsPagesRest_explorerTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/rest_explorer.ts", size: 9561, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesStoresTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x55\x4b\x6f\xdb\x38\x10\xbe\xfb\x57\x0c\x74\x08\xa4\xac\x97\xda\xc7\x4d\x5e\x07\x9b\xa6\x45\x11\xa0\xe9\x03\x06\x7a\x09\x0c\x83\x96\x68\x8b\x09\x45\xba\x24\x65\xd7\x08\xfc\xdf\x3b\xa4\x1e\x96\x1c\x39\xc9\xad\x02\x2c\x8b\xe4\x7c\xdf\x7c\x33\x9c\x21\xe3\x18\x8c\x2a\x75\xca\x12\xd8\xd0\x35\x33\xb1\xb1\x4a\x33\x43\xac\x19\xc5\xb8\xf6\x9f\x66\x2b\xa6\x99\x4c\x19\x2e\xdb\x7c\x1a\x10\x12\xdb\xfd\x86\xcb\xb5\x89\x0b\x6e\x73\xcd\xc5\x43\xfb\x45\x32\x84\x05\x10\x5f\x9d\x85\x16\x2a\x63\xa2\xf6\xb1\x30\x96\xda\xd2\x34\x10\xc4\xc0\x75\x69\x73\xa5\x13\x78\xa7\x69\x01\x1f\x75\x29\x19\xd7\x10\x2e\x71\x44\xd6\xd5\xe8\xff\x75\x41\xd1\x51\xaa\x8a\x08\x11\x97\x97\x23\xb8\x84\xeb\xac\xe0\xf2\x3b\x67\x3b\x03\xdc\x80\xcd\xd1\x9f\xe6\x05\xd5\x7b\x40\x77\xa5\x60\xb0\x52\x1a\x6e\x54\xfa\xa8\x15\x4d\x73\x66\x80\x3a\x00\x37\x56\x53\xcb\xb7\x0c\x76\x6c\xe9\x68\xb8\xb4\x4c\xaf\x68\xca\x08\x8e\xe2\x51\x8d\xed\x90\x3f\x8d\x00\xbc\x4b\x40\xeb\x99\x4f\x53\xe3\x70\x8b\x06\xde\x0d\xfb\xb9\x11\x4a\x63\x7a\xfc\x74\x15\x21\xa8\x15\x50\x21\x6a\x08\xf1\xf8\x18\xdf\x68\xab\xb4\x6d\x44\xd6\x84\xce\x49\xbb\xb4\xa5\x1a\x7c\xae\x66\x9e\x88\x99\x04\xee\x7c\x06\xc9\xec\x38\x4b\x6a\xe4\x14\x24\x8a\x38\xbb\x1e\x46\x93\x2e\x75\x2a\xa8\x31\x98\x15\x69\xb5\x12\x82\x69\xe0\xc5\x46\xb0\x82\x49\x6b\x60\xd1\xec\xe7\x5d\xf5\xdf\xb1\xaa\xe4\x81\xcb\xf0\x96\xda\x2a\x42\x9e\xc2\xe2\x47\xc9\xf4\xfe\xc3\x16\x5f\x77\x33\x54\xf2\xf7\x5f\xf8\x4c\x4e\x6c\x17\x3e\xc3\x5b\x2a\x12\x90\x65\xb1\x64\x7a\x32\x6a\x2c\xca\xa5\x40\x96\x54\x49\xdc\x94\x32\x45\xbd\x61\xd4\xba\x82\x7e\x0a\xc8\x37\xe7\xaa\x89\xc6\x3d\x36\xe7\x86\xb4\xe4\xe8\xdd\x30\x7b\x5b\x8f\x42\x24\x9a\x5e\x0d\x33\x8c\x3b\xe1\x93\x5e\x04\x2d\xf9\xe1\x44\xa1\x92\xa5\x14\x8a\x66\x3d\x79\xa9\x60\x54\xb7\x0e\xfb\x6a\x3a\x4c\x1d\xbe\xba\x8a\x8e\x75\xf4\x15\x5b\x0f\x4c\xae\x76\x40\x41\x60\x65\x36\x25\x43\x53\x5f\xa1\xe6\x58\x39\x75\xed\x0c\x57\x8f\xa7\x69\x84\xd5\x06\xab\x52\x22\x89\x92\x2e\xbb\x75\xb0\x3d\xf5\x9a\xd9\x52\x4b\x5f\x3b\x37\x1d\x8b\xbe\xee\xe7\x6c\xae\xe2\x87\x78\x8a\x30\xc8\xf8\x36\x18\xc3\x7d\xbb\x02\x6e\x32\xff\x07\xe7\x82\xba\x54\x3f\x61\x88\x41\x34\xee\x5b\x94\xe2\x04\x05\xf0\x65\xf9\xc0\x52\x4b\x1e\xd9\xde\x84\xfd\x2d\xcc\x98\x49\xc3\x28\x22\x06\x45\x85\x11\x29\xe8\x26\x6c\xa4\x55\x96\xb7\x59\x57\x5c\xf5\xb8\x76\x72\x40\x57\x22\x03\x6c\xf7\x35\x70\x3e\x39\xc1\x1d\x43\x13\x1c\x35\x3e\x01\x0a\x4a\x3c\x13\xa9\x4e\x32\x9e\xc1\x61\x7c\x02\x82\xe1\x54\xb4\x8b\x04\x2b\xdd\xd8\x30\xb8\x90\x4b\xb3\x99\x5c\x2c\x4b\x21\x26\xd5\x77\x3f\x33\x1d\x36\x7a\x9f\xe3\x99\x3a\xad\x8f\xe8\x38\x80\x3f\xa0\x96\x8c\x5f\xc1\xdc\x4b\xc3\x5d\x5e\xf1\x75\x82\xfc\x5a\x95\xd8\x74\x87\x26\xeb\x49\xc7\x7c\xd0\x41\x80\xd5\x0d\xc1\x2b\xae\x25\x1e\x2f\x95\x67\x1f\xbe\x1b\xfa\x97\x4b\xc1\x0b\x1a\x82\xcf\x68\x93\x0c\xc2\xce\x68\xd9\xe1\xd1\x83\x87\x6f\x86\x81\x9a\x13\x20\xad\x66\x89\x64\x76\xa7\xf4\xa3\xf3\xfb\xe7\xb0\x45\xfd\xff\xcc\xc1\x3c\x8a\xfa\x7b\x7c\xe8\xa9\x98\x77\x46\xf3\xb7\x75\xf0\xb1\x81\xdd\xb9\x9f\x31\x8b\xb7\x54\x75\xf0\x83\xc1\xdb\x00\x3b\xd4\x0b\x7b\xad\x83\x7f\x67\x03\xb7\x97\x0d\x96\xd3\xb4\xd9\x3b\xb2\xa1\x78\xfb\x86\x41\x53\xe7\x41\x27\x71\x6f\xef\x78\xa8\x3a\xed\x59\xcb\x0f\xb5\x87\x43\xfe\xdb\x22\x13\x38\x5f\xb6\xfd\x1e\x7e\x5f\xe5\xbc\xed\xfe\xde\x7e\xbe\xb0\x9d\xee\x77\x18\xfd\x0a\x00\x00\xff\xff\x2a\xcc\x4b\x96\x07\x09\x00\x00") + +func uiTsPagesStoresTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesStoresTs, + "ui/ts/pages/stores.ts", + ) +} + +func uiTsPagesStoresTs() (*asset, error) { + bytes, err := uiTsPagesStoresTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/stores.ts", size: 2311, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTsconfigJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x84\x92\x41\x4b\x3b\x31\x10\xc5\xef\xfd\x14\x65\xcf\x7f\x12\x0a\x7f\x2f\xde\x44\x7a\x10\x94\x7e\x00\x91\x12\xb7\xd3\x36\x25\xc9\x84\x99\x49\x51\xa4\xdf\xdd\x49\x5a\xb1\x75\xbb\xba\x97\x85\xfc\xde\x7b\x93\x79\xbb\x1f\x93\xa9\x3e\xdd\x1e\x88\x3d\xa6\xee\x76\xda\xcd\xcc\x7f\x33\xeb\xfe\x1d\xcf\x7b\x8c\xd9\x07\xa0\x45\x16\xc5\xac\xfc\x68\x68\x50\x1c\x6d\x40\xaa\x07\xf8\xe6\xe4\x68\x20\xe2\xaa\x04\xa8\x40\xfd\x11\xd3\x8e\xcf\xe9\x0a\xfa\xe0\xc8\xc9\x71\xde\xda\x05\x86\x33\x9a\xf0\x21\xe6\xe0\x7b\x2f\x77\xe9\xfd\x2a\x9f\x47\x2f\x8b\x34\x27\x42\x52\x2e\x54\xce\x31\x41\xc4\x3d\xdc\xeb\x58\x48\xc2\x43\x9e\xf0\xd1\xbf\x5e\x89\xc5\xd2\x16\x31\xb6\x78\xbb\x63\xeb\x72\x36\x97\xb7\x66\x2c\xd4\xc3\x93\xcb\x5f\xe6\x86\x0e\xa7\x9e\xd6\x5a\x52\x9d\xf6\xfc\x6d\x30\x76\x0b\x6e\x05\x64\xe4\x22\xc7\xb4\xec\x9f\x67\xda\x18\x04\xb6\x49\x5f\x4b\x16\x27\x85\xc7\x24\x95\xfe\x02\x91\xfe\x0a\x10\x1f\x81\x81\x3c\x0c\x15\xf5\x6b\x63\xaa\xc5\xd9\x08\x42\xbe\x1f\x4a\xb2\xdb\x00\xdb\x0d\xb9\xbc\x1d\x61\x75\x87\x31\x5f\xbb\xdf\x18\xd4\x1f\xc5\x2b\x1f\xa1\xea\x93\x25\xbc\xe5\xa0\x09\x4d\xd3\x24\x2f\x93\xc3\xe4\x33\x00\x00\xff\xff\x2f\x17\x33\x4e\xc3\x02\x00\x00") + +func uiTsTsconfigJsonBytes() ([]byte, error) { + return bindataRead( + _uiTsTsconfigJson, + "ui/ts/tsconfig.json", + ) +} + +func uiTsTsconfigJson() (*asset, error) { + bytes, err := uiTsTsconfigJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/tsconfig.json", size: 707, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTypingsD3D3DTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xeb\x72\xdc\xb6\xb2\x28\xfc\x3f\x4f\xc1\x4a\x55\x6a\x8d\x52\xb2\x9c\x4b\x7d\x5f\x9d\x92\xb3\xa3\xe3\xf8\x96\xec\x6d\x27\xde\x1e\x39\x95\xac\xd4\xaa\x55\x18\x12\x33\xc3\x98\x43\x4e\x40\x52\xd2\x24\xdb\x0f\x74\x9e\xe3\xbc\xd8\x41\x37\x00\x12\x04\x01\x10\xe4\x8c\x2c\x59\x91\xaa\x6c\xcd\x08\x40\xdf\x70\xeb\x6e\x34\x1a\x0f\x1f\x46\xe7\xbb\x2d\x8d\x12\xba\x4c\xf3\xb4\x4a\x8b\xbc\x8c\x96\x05\x8b\x92\xaf\xff\x73\xfe\x09\x2f\x7c\xcd\x8a\xdf\x69\x5c\x9d\x46\xeb\xaa\xda\x9e\x3e\x7c\x98\x7c\xfd\x7b\x79\x52\xb0\xd5\x43\x28\x7c\xaa\x35\x5a\xec\x4e\xa3\xef\x0a\x96\x96\xd1\xaf\x24\x7f\x57\x5c\x44\xdf\x40\x8b\x92\x37\x59\xa5\xd5\xba\x5e\x9c\xc4\xc5\xe6\xe1\x02\x2a\xec\xb0\xfc\x5b\x03\x80\xc0\xe0\xae\xff\x50\xd6\xa5\xd9\x0e\x08\x4e\x3e\xf9\x24\xa1\x71\x46\x18\x8d\x36\x45\x52\x67\x34\x7a\xfa\x75\xf4\xd7\x27\x11\xff\xa1\x57\xdb\x82\x55\x51\x9a\x57\x94\x2d\x49\x4c\xa3\x39\xcd\x38\x0b\x05\x2b\x65\x05\xf8\x79\xf8\xf9\xe7\xcd\xe7\xcf\x65\x8d\x88\xe4\x11\xff\xb0\xa1\x79\x15\x2d\x59\xb1\x89\xaa\x35\x8d\xe2\x9a\x31\xf8\x43\x52\xc4\x35\x94\xb4\xad\x1e\x36\x1f\x4b\x6c\x7e\xaa\x81\x37\x51\x08\x34\x6f\x68\x55\x33\x2e\x2b\x80\x4b\x37\xdb\x6a\x27\x5b\x72\xfe\xbb\x35\x1f\x76\xbe\xce\x8e\x4e\xa3\x7f\xcf\x55\xcd\x6f\x48\xbe\xfb\xf6\xd1\x00\x26\x51\x5b\x60\x5a\xa6\xac\xac\x1a\xc6\xaa\x35\xa9\xa2\x0d\xa9\xe2\x35\x15\xc5\xe5\x96\xc6\xe9\x32\xa5\x89\x24\x86\x77\x7e\x59\xb1\x34\x5f\x75\x41\x1a\x08\xfe\xf7\x96\x30\xb2\x69\x9b\x34\xe4\x45\x73\x6c\x1c\x55\x85\xc0\xe2\x65\x4c\x35\x3f\x95\x28\xf7\x63\xb4\xe5\x24\x2f\x12\x1a\x42\xbe\x12\xca\x8f\xbc\x7e\x2b\xa1\x42\xb2\xe5\x25\x5d\xd6\x3e\x8d\x9e\x5d\xf0\x5f\xe7\x84\xad\x68\xe5\x23\xff\xfd\xa3\x4f\xfc\x83\x6f\x53\x67\x55\xba\xcd\x1a\x3a\xca\x29\x63\xf0\x71\x96\x0d\x0f\x43\x25\x33\x92\x65\x2d\xb2\x76\x5c\x38\x46\xc5\x47\x3c\x1c\x08\x63\x64\x17\x15\xcb\x86\xdb\x11\x63\xa3\x8c\x1e\xab\xd6\xb9\x36\x4a\xca\x71\xc3\xa4\xec\x8c\x93\xdf\xfe\x35\x30\x52\xf0\xd7\x27\xf6\xd5\xec\xe9\xd7\x08\x89\x17\x54\x34\x4f\x4a\x01\x57\xeb\xf3\xe4\xea\x34\xca\xeb\xcd\x82\xb2\x16\x64\xb2\xeb\xff\x2d\xce\x52\xde\xf0\x17\x57\xc1\xaf\xfd\x82\x8a\x91\xbc\xcc\x48\x45\x55\xd1\x6f\xff\x6a\x0b\xcb\x98\x64\xb4\xdf\xa6\x2c\x6a\x16\x53\xa4\xf1\x54\x91\xde\x96\x5a\x48\xb5\x50\xfa\x8e\xee\x9e\x70\xd1\xf7\x0b\x48\x56\xfd\x17\xdd\x9d\x9d\x46\x8b\xa2\xc8\x28\xc9\x35\x1e\x2a\x96\x39\x8a\x36\xb4\x22\x8e\xa2\x72\x9d\x2e\x5d\x10\x2b\xbe\xe9\xa8\x71\xe9\xef\xa0\xef\x48\x49\x9b\xde\x19\xde\x7b\x9e\x30\xca\x45\x1a\x91\x68\x41\xd7\xe4\x22\xd5\x26\x9a\x36\x96\x54\x19\xdf\x63\xe5\xa7\x13\xf5\xe1\x91\x03\xee\xe3\x38\xa6\x65\xd9\x59\x3f\xea\x92\xb2\x88\xe2\x78\x81\x3d\x1e\x49\x26\xdd\xed\x47\xc3\x49\x8d\x4e\x73\xd1\x5f\x6c\xb6\xb0\x0d\x57\x97\x45\x74\x41\xb2\x9a\x0a\x05\xa2\xe4\x42\xe1\xa2\x3a\xd1\x6a\xaa\xed\xef\xc1\x97\x51\xba\xe4\x0c\x73\x5d\x21\x13\x24\xf2\x8d\x77\x71\x1c\xf1\x56\x6d\xc9\x0a\xc5\xc2\xf4\xc2\x2f\x5a\x58\x1a\x54\x39\x5d\x49\xf4\x1c\xf7\x39\x24\xa1\x5f\xbc\xe0\x3d\x11\x17\x79\x62\x96\xb7\xec\x92\x32\xe6\x3d\xc6\x49\xfe\xe6\xfc\xdb\x19\x39\x8d\xce\x8f\xa3\x05\xff\xff\xa8\x3f\xec\x0e\xc8\xbf\x85\x4b\xb7\x70\xae\x97\xff\x84\x4e\x14\xc0\xf3\x94\x83\x85\x61\xb6\xe1\xfa\xd9\xa6\xde\x08\x14\x7c\x74\x81\x3e\x85\x4b\xaf\x97\x6e\xc6\xe4\x0a\x8b\x0b\x2a\x61\xda\x1e\xd1\x54\xda\x90\x2d\x8c\xe7\x92\x0b\x84\xcb\x61\x59\xe7\xce\x41\xcb\x69\xf8\x86\x13\xfe\x96\x73\xc0\xf8\x6c\x39\xff\xed\x5f\xc7\xd0\xfa\x34\x9a\x5d\x9c\x21\x4b\xe9\x99\xe2\xe7\x28\xfa\x8f\x6f\xa3\xb7\x9c\xbd\xb7\x37\xc0\x99\x41\x71\x4b\x2e\xa7\xe7\x7c\x98\x1e\x72\x75\xf3\x92\x26\x57\xd7\x21\xe9\x83\x73\x66\x50\x3c\x56\xd2\xb2\xe7\x09\xff\x7e\x1b\xa4\x8e\xfb\x4a\xe5\x12\x3c\x4c\xd7\x46\xd6\xfa\xee\x7c\x23\xdc\xf5\xa9\xee\x0a\xdf\x4d\x20\xac\xa9\x35\xdf\x14\x51\x8d\xe3\x34\x71\xe5\x4b\x51\x83\x8a\x18\x8e\xaa\xf2\x03\x8a\x9d\x13\xa1\x53\xdf\x13\xb8\x1c\xe7\x21\x7b\xc5\x35\xf2\xd5\xa1\x57\x10\xab\x14\xb5\x51\xa4\x11\xc6\x4d\x70\xae\x27\xa5\x31\xd7\x96\x38\x81\x37\x2e\x7e\xa0\xe2\xd0\xf2\xbf\x66\x26\xbb\xc4\xef\xd1\x19\x1b\x9a\xa4\x4e\xf2\xa2\x19\x54\xf9\xe2\xe4\xff\x7b\xf0\x47\x4d\xf2\x2a\xcd\xe8\xd1\xc9\x07\xed\x17\xa0\xed\xd0\x3d\xf3\xe1\x38\x36\x39\x99\xd8\x4d\x24\x52\xb4\xa0\xea\x47\x50\xf9\xd3\xed\x4e\x49\xfb\xfe\x5d\xb3\x8d\xce\x39\xf7\x0d\x36\x5e\x93\xa1\x52\x69\x63\x49\xd5\xe2\xbd\xd1\x61\xeb\x38\xda\x76\x36\x66\x3f\x8f\x2f\x8b\x98\xc8\x7e\x49\x73\x6e\x3f\xa0\x51\xbf\x2d\x52\x69\x43\x5c\xe1\x4e\xa1\xc8\xde\x10\xfe\x77\xfe\x4f\x09\xa0\x60\x09\x65\x7b\x33\x7d\x15\xfd\x8c\x7b\x52\x53\x45\x5a\x2f\x1d\x6a\xfa\xcd\xb2\xe2\x32\x7a\xd5\x51\xdc\x60\x44\x21\xb2\xb2\x5e\x94\xd4\xd2\x64\x9d\xae\x57\xd1\xab\xce\x46\xe8\x6c\xa3\x19\x67\x69\xc9\x6d\xbc\xee\x2c\xb8\x42\x15\x88\x93\xd0\x28\x41\xc7\x1c\xfa\x6a\xdd\xea\x44\x43\x83\xeb\xb6\x09\xfe\x7a\xe5\xbe\x5a\x4f\x95\xfb\x4b\xba\xbc\x97\xfd\x0d\xc9\xfe\x0d\x6f\x7b\x70\xe1\x7f\x87\xa0\xa3\xba\x04\xbf\x21\xec\x00\xe8\xc8\x28\x98\x7f\xf5\x94\x95\xa4\xdb\x63\x60\xdf\x12\xd4\x17\x6c\xa6\x9a\xf1\x35\x32\x21\x15\x37\x7a\x49\xbe\xe3\x96\x4b\x9e\xd0\xab\xce\x1a\xc9\xff\x7c\x84\x85\x2e\xa2\xdf\x70\x15\xba\xd8\xa4\x7f\x8a\x41\x83\x43\x40\xdf\xc0\xc2\x57\x7e\xa6\x00\x59\xd5\xba\x75\xbd\x5c\x66\x34\x5c\x91\x7e\x43\x05\x29\xfa\x46\xda\x78\x30\x39\xf3\xbc\x54\x7a\x67\xf5\x1a\xc8\x3f\x0d\xd7\x7d\x18\x35\xc6\xbc\xaa\x25\x01\xc9\x9a\x71\x81\xf3\x04\x11\x36\x42\xc2\xb3\x10\x45\x51\xb9\x2e\xea\x2c\x89\x16\x54\x6e\x6b\x7c\x36\xa5\xd6\x0e\xdc\x52\xb6\xe1\x3b\xaf\x90\x02\xef\x16\x18\x79\x12\x99\xfc\x7e\x24\x7f\xbb\x24\x73\x0e\xce\xcc\x6d\x51\xc2\xee\x7d\xc1\x75\x41\xb2\xe0\xfb\xa9\xe8\xf1\x66\xfc\x0f\x6e\xd8\x92\x33\x74\x06\x57\x0a\xa0\x8d\xde\x3f\xd3\xed\xec\xe4\xe4\x04\x9a\x04\xd2\xf7\x9a\xb0\x52\x0c\xa6\x55\x7a\x41\xf3\xe8\xab\xa7\x11\x59\x2e\xd3\x9c\x0a\x44\x7c\x35\xd8\x48\x6f\xe4\x71\x44\x4a\x71\x7e\xc7\xc5\xb5\xd8\x45\xf3\x9f\x5f\xfc\xa3\xd4\x6a\x91\x8a\x57\x5b\x70\x69\x79\xb9\x69\x0f\x00\x3d\xa8\x6c\xac\x35\x75\x66\x2d\x08\xcd\x81\xef\x99\x33\x5a\x17\x68\x83\x2f\x40\xf2\x1b\xc2\xa1\x5f\x45\xe7\x97\x45\x94\xa4\x7c\xe4\x94\x1c\x25\xc9\xda\x15\xd9\xdb\x15\x4d\xe1\x4c\x80\x09\xec\x0f\xe1\xa6\x2d\x5b\x52\xf5\xd1\x5c\x6f\x33\x5e\x04\xc4\x27\xbf\x93\x18\xfc\xab\x5b\x92\x06\x18\x0f\x16\x58\xbc\x31\x4b\x29\x8e\x28\x80\xa1\x37\x64\xd2\x7f\x88\x74\xfe\xf6\xaf\xb6\x39\x47\xfc\xd5\x83\xe6\xf8\x4a\x10\x03\xdb\x05\x25\x7c\xdf\xe8\x42\xd1\xa6\x10\x50\xa8\x4d\x20\x25\x00\xb7\x08\x5e\xa6\x65\x85\x23\xf2\x1d\xdd\x95\x6a\x75\xe3\xab\x67\x9c\x92\x8a\x8f\xd1\x80\x95\x0e\x2d\x0b\x45\x72\xb1\xf8\x5d\x9c\xd5\x14\xd1\x8a\x36\x80\x1b\x1f\x2a\x2b\x36\x36\xb2\x01\xf7\x0c\x6d\x0c\xb1\x26\x8b\x81\x16\x40\xb4\x84\x7b\x1d\x64\x0f\x90\x2c\x8a\x75\xa2\xbd\x23\x4d\x17\xf3\x03\xb1\x21\xab\x41\x71\x4d\x32\x97\x58\x70\x44\x38\xb9\x90\x34\x04\xb3\xb1\xa1\x6c\x45\xdb\x53\x4d\x31\xad\xe1\xcc\xa1\x88\x8a\x9c\x0e\xbb\x96\x1a\xba\x91\x5a\x84\x66\x37\xdc\x78\x01\xac\xad\x8a\xae\xe1\xa9\xfc\x82\xe6\x94\x89\x33\x17\xbe\x16\xac\xa8\xb4\xd0\x28\x4b\x63\xd9\x57\x27\x36\x4c\x58\x77\xf8\x74\x75\x18\xba\x38\xd8\xfd\xe2\xa4\xdb\xd0\x00\xa3\x4e\x54\xab\x62\xdb\x6a\x82\x2b\x05\x1b\x3a\x4e\x40\xaf\x0a\x57\x43\xba\x8d\xe6\xf0\xdf\x82\x56\x97\x94\xef\x20\xb8\x1a\x74\xdd\xff\x06\x87\xf0\x33\x03\x8c\xad\xea\x06\x60\xfa\xaa\x9b\x2e\xdb\xa9\x52\x08\x64\x9f\xb0\x4a\xd3\x84\xe1\xeb\xed\x11\x14\x27\x46\x97\x54\xb1\x3d\x1b\x23\xb8\xf7\xfe\xad\x26\xca\xe9\x25\xff\xc7\xd7\x82\x62\x0b\xbc\xd8\x0f\x06\xa1\x02\xc4\x87\xfc\xc8\x7f\xbb\x95\xc0\x3f\x6a\x80\xc3\xbb\x82\x8a\xf3\x58\xa9\x5c\xff\xf2\xea\xe5\xf7\x55\xb5\x95\xe5\xd6\x41\x7f\xb5\x66\xc3\x43\x5e\xdf\x1b\xcb\x5d\x1e\xaf\x59\x91\x17\x75\xc9\xd1\x09\xc4\x78\x1e\xd6\x9c\xc6\xd7\x2c\x0b\xe9\x7a\x5e\x2d\x7a\xcb\xff\xa1\x7e\x89\x70\xec\xf5\x62\x92\x65\x0b\x12\xbf\x8b\x9e\x4b\x85\x1f\x5a\xa4\xf9\x45\xf1\x8e\x46\x97\x6b\xde\x9d\x0d\xd3\x70\xa4\x56\x90\x04\x4d\x34\x31\x30\x14\x7d\x24\xcd\x4a\x6f\x5f\x73\x62\x4e\x1b\x75\x4b\x61\xe4\xdd\x3b\x43\xf9\x74\xe5\x88\x06\xc3\x45\x91\x26\xbc\x5b\x7e\x59\xb3\xa1\x99\x72\xa3\xc2\xdb\x70\xf5\x29\x7a\xf5\xc3\xab\x67\x78\xbe\x7d\x0b\x65\x0d\x04\xee\x2f\x79\xe7\x54\x6b\xa7\x46\x45\xaf\x38\x71\x69\x66\xd7\x19\x79\x61\x48\x78\x97\x1b\xd8\x01\xfa\xea\x66\x07\x3a\x07\xbe\x2d\xf2\xb2\xe9\x8c\x91\xa3\xfc\x9a\x65\xf3\x11\x8f\xe3\x60\xc1\x06\x0c\xe2\xff\x9c\xff\xf4\x63\xb4\xc8\x8a\x85\x4f\xb1\xf2\xc8\xf4\xfa\x04\xa4\x09\xe7\xf7\x12\x0c\x44\xf7\x48\xa3\x8c\x15\x4c\x7a\x62\x1a\xa7\x4c\x2b\x15\xf8\xd0\x91\x8b\x43\x18\x79\xf4\xfd\xf9\xab\x97\x4d\xcc\x1c\x57\xba\xc8\x0a\x3e\xd8\xb7\xb9\x4d\x40\xdc\xdc\x08\xd0\x5d\xd1\x87\x8a\xff\x7a\xbb\xc0\x60\x19\x7e\x42\xa6\xfb\x53\xc9\xe5\xd4\x09\xff\x41\x84\x75\x27\xe6\xff\xa0\xa4\x87\x57\x80\x1c\x76\x44\xef\x98\xbf\x7d\xeb\xc1\xba\x82\xc9\x37\x66\x28\x3e\x97\x6c\x8d\x5f\x14\xa2\xb8\xd8\x6c\xc8\x83\x92\x02\x5b\xe0\xac\x97\x16\xd9\xec\xc9\xfc\xe7\x23\xdc\x95\xac\xcb\x43\x5c\x5e\x70\xec\xe5\x85\x33\x08\x4e\xeb\x00\xc2\x16\x69\xc5\x08\xdb\x45\xf1\x9a\xb0\x3e\x2a\x40\xc2\x4d\x6d\x56\x82\x95\x90\xa5\x5c\x80\x25\xdd\xa4\x71\x91\x71\xa1\x72\x91\x5d\x42\x1c\x2e\xbd\xa0\x56\x6d\x3f\x09\xa6\x23\xaa\xc8\xc2\xc2\xe6\xb9\x62\xd3\xaa\xe5\x34\xd0\xed\xc0\xcf\x61\x92\xa9\x01\x60\xed\xca\x0a\x47\x39\xd4\x3b\x81\xff\x5c\x80\xe6\x10\x2b\x6a\x05\x20\xa3\x48\xb1\xc2\x09\xfe\x0f\xd1\x94\x3a\x1c\x0d\xcc\x0f\x10\xbf\xb8\x2d\x32\xb4\xf3\x9a\xe8\x3b\x1b\xd8\xb4\xad\x79\x2a\xdc\x8e\xe8\xa6\x3c\x01\xe0\x1a\x94\x40\x3c\xbd\xd0\x00\x2b\xa2\x1f\xb1\xd6\x01\xd0\x01\xcc\xd5\x30\xbe\x37\x45\x9d\x27\x07\x40\x27\xa6\xe0\x10\x36\x11\xd6\x7d\x00\x74\x6f\x5e\x7c\x17\xc1\xe0\x1f\xe6\x6f\xb5\x38\x00\xba\xef\xe7\x2f\xc3\xd0\x7d\x5f\x66\x87\x40\xf7\x24\x14\x5d\x7c\x08\x74\x2f\x3f\x27\x9f\x2f\x3e\x0f\xc3\xf8\x92\x1c\x42\x9e\xd2\xad\x57\x2c\xc3\x66\x1f\x3a\xf4\x0e\x82\x96\x2f\xb2\xb0\xc6\x4a\x87\xe6\x00\xda\x9f\x16\xe2\x12\xd3\xde\x78\xbf\x7a\xaa\x0e\x1f\x9a\x63\x8f\x21\xdc\xe7\xaa\xe2\x04\xf4\xe7\x6b\xda\xba\xf8\x17\x75\x9a\x55\x0f\xd2\x5c\x03\x0e\xc7\x9c\x04\x0e\x32\xd3\x21\xc9\x17\x70\xf0\xa4\xe1\xd7\x70\x3f\x47\x08\x3e\x87\x34\xd9\x15\xb5\x5d\xc6\x19\x16\x9d\xca\x2a\x27\xe2\x97\x73\xd9\xbf\x58\xfd\xc3\xbe\xea\x5f\xf0\x95\x84\x97\x9e\xf0\x7f\xfe\x03\x56\x75\x42\x27\xfd\x7b\x8e\x51\x2e\xce\x50\x4f\x65\x9b\x01\x37\x1b\x69\x4e\x8a\x41\xa7\x81\x8e\x22\xb0\x7f\x4a\x44\xa4\x84\x70\x1e\xe3\xf0\xab\xaf\x1f\x29\x07\x0d\xc3\x2e\x93\x40\xda\x3f\x72\xc0\xb5\xfd\x34\x4a\x54\x9d\x35\x55\xb5\x93\xb3\x19\xce\xa8\xce\x31\xb4\x7e\xfd\xc0\x22\x22\xed\x7a\xd9\xfc\x87\x68\xcb\xe8\x92\x0f\xd4\xa5\xd4\xc3\x5a\x1f\x92\xf0\xf6\x93\xca\xf8\x33\xaf\x1f\xa7\xa5\xe3\xc4\x5c\xd0\xf9\x1a\x41\x76\x09\x3b\x6e\x1b\xea\xfe\xce\x57\x94\xd3\x1a\x8b\x06\x4e\x85\x02\xce\x4e\xf8\xce\x06\xb2\xe7\x03\x1c\xc8\x49\xbe\xe6\x3a\xd1\x02\xd4\x27\x1b\x15\xb2\xf2\xe9\x08\x41\xb0\xa2\xa8\x2c\xd7\xec\x7a\x37\xa7\x78\xa1\xf7\x9e\x1d\xdc\x50\x1c\x32\x10\xcf\x31\x80\x79\x0b\xbc\x30\xba\x4a\x4b\x3e\xc5\xe0\x32\x1a\xd9\x70\x0d\x16\x6e\x86\x88\x1e\xa1\x5e\xb3\x41\xd4\x31\x71\x21\x9d\x30\x4b\x4c\xc6\xd5\xcf\x95\xd0\xa2\x9d\xc5\x59\x9a\xbf\xf3\x14\x7b\xdb\x6e\x32\x60\xde\x56\xfc\x7e\xc8\x0a\xfc\xef\x9a\x64\x30\xba\x7a\x17\xf4\xb8\x4c\x7c\x52\xf8\x03\xdb\xed\x66\x50\x4f\x9b\x12\x7f\x45\x28\xc8\x86\x18\x6e\x6a\x70\x1d\xb1\xfd\xfa\x3e\xc8\x56\x92\xa7\xa8\xed\x82\x4a\x09\xba\xc3\x9b\x75\x40\x8e\xc5\x96\x5c\x30\x2a\x6d\x43\x87\x37\x84\xf0\x3a\xfd\x6e\xd0\x71\x64\x9c\xf3\xc3\xbc\x7d\xfa\xf5\x89\xb6\xf6\xb6\x1f\xdd\x81\x85\x39\x87\x56\xe3\x25\x3d\x3c\x07\x68\xb4\x24\xfb\xc9\x14\xa8\x46\x83\x4e\x7a\x27\xcc\xe8\x32\xad\xcc\x5b\x7f\x7c\x5a\xaf\x30\x2c\x7c\x01\x66\x4c\x9e\xd3\xcc\xdc\xe0\x2d\xbd\x36\x63\xed\xa2\xb0\x6a\x3f\x2e\xb4\x65\x81\x4b\xe2\x09\xf2\xc1\xb1\xe3\x87\x41\xf7\xb8\x9b\xec\xc5\x0e\xed\x28\x15\x4f\xd2\x12\x2f\x8a\x6d\xb7\x58\x0d\x7a\xb1\xa2\x36\xbe\x3c\xd4\xb9\x4f\x6b\x4c\x02\x1b\x9d\xcf\xda\x57\xeb\x38\xc0\xd3\x14\x02\xd3\xc6\xcf\xba\x15\x7a\xdc\x7e\xcc\x34\xf9\x0b\xf6\x38\xb8\x69\xc2\x6f\xe8\xb8\x06\xe1\xbb\x48\x1b\x21\xf9\xb9\x57\xf2\xe5\x24\xc9\x2b\x98\xb6\x59\xb2\xe6\xfb\xe8\xfa\x38\x2a\x09\x5f\x52\x08\x2e\x1d\x25\x4e\x9a\x0c\xe2\xe2\x72\xb8\xbe\x95\x85\xf6\x57\xe9\xed\xaf\xf9\xd4\xfe\x9a\x5f\x7b\x7f\xf5\x48\x0b\xef\x2f\xff\xaa\x96\x91\x29\xab\xda\xcb\xc7\x3d\x98\x36\x66\xb2\x56\xdc\xc4\xbe\x52\x09\xf6\x38\xb8\x69\x92\x6f\xe8\xb8\x36\xc9\xf7\x49\xd3\x24\xbf\xa2\xc5\x69\xf4\x82\x16\x27\xfc\x5f\xe7\xaf\x1b\xfc\xf3\x06\xfe\xee\xd4\x8c\x57\x54\x5e\xa1\xde\x14\x5c\x6d\x8d\xb6\x85\xd8\xad\xb8\x52\x93\x89\xa8\x13\x88\x17\xec\x30\x82\xe1\x4b\xd4\xde\x8f\x08\x64\xd6\xd4\x51\xc1\x23\xfd\x03\x71\x07\x11\x55\x51\x43\x18\x93\x24\xa2\x9c\x48\x05\x42\xa1\xa5\x9b\x0e\xa0\xc4\x41\xca\x0f\xa6\x3e\x20\xef\x48\x95\x9a\xf1\x70\x1c\x31\x4d\xeb\x34\xaa\xea\xb7\x40\x7f\xe2\xe5\xec\x32\x2d\x69\xdb\x42\x37\x41\xc0\xfd\x17\x06\x49\x53\xce\xa1\x75\xc1\xbe\x79\x73\x1c\x9d\x7f\xab\xb4\xf3\xd9\x96\x1b\x40\xa8\x7d\xc0\x15\x4e\xed\xdb\xa3\x5e\xbb\xb6\x91\xaa\xaa\x4e\x5c\xce\x35\x99\x60\x80\x4d\x77\x3e\x82\xc6\xfc\x8a\x6c\x2d\x57\xf3\x01\x66\x21\xad\xee\xbf\xa2\xdf\xde\xd1\x9d\x1a\xbf\xff\x82\x6b\x77\xd1\x7b\xd9\xf2\xdc\xd2\x0e\x11\x89\x42\x4f\x2d\x22\x5d\x09\x18\xef\x33\x5c\xe9\x18\x02\x9d\x9e\xc3\xc1\x93\x22\xeb\x5c\x86\x8c\x9e\x59\x4c\x2c\x0b\x48\x6d\x72\x95\xb4\x77\x1a\x0c\x92\x98\xd3\xca\x21\x89\x0e\xad\x50\xcd\x01\x38\x49\xb9\x7e\x5b\xc5\x6b\x88\x67\x02\xa5\xb2\x6c\xe3\xdb\x40\x3b\x91\xa5\x6d\x7d\x46\x17\x9c\x85\x59\x85\x59\x05\xe4\x91\x99\xf0\xc3\xcb\x2f\x1c\x0e\x9a\x1f\x9d\xc8\x28\xbd\xfd\x1f\x75\x51\xd1\x19\x47\xa2\x2d\x2f\xa6\xa6\x0f\x5e\xdd\x5e\x14\xc8\x0c\x07\x0f\x17\x27\x4a\x4d\x5e\x97\x3f\x8e\x12\x3e\x39\x77\x5a\x18\xcc\x86\xb0\x77\xba\x59\x08\xde\xfa\xae\x7c\x96\x59\x5d\xae\x67\xbd\xa2\xf7\x2d\xfa\x46\x5d\x86\x5a\x0e\x3d\xba\x65\x09\xdc\xa0\xb3\xab\x96\x82\xdc\x11\x78\xee\xcc\xaf\x20\xa5\xac\xf1\xfb\x9b\xbc\x0a\xdf\x0c\xe0\x8e\x10\xc1\x1e\x35\x64\xa3\x1b\x04\xa6\xcc\x7b\x15\xe0\x14\x80\x9b\x8a\xda\x92\xd4\xa9\xff\xde\x4b\xad\x6e\x66\x3b\x53\x0c\xe0\x3a\x02\xce\x74\x6d\xb5\x02\xb7\x00\x5f\x0b\x2f\x28\x5e\x53\x6f\x6e\x57\x41\xf4\x2c\x38\x9d\xb6\x5b\x56\x6c\x59\x0a\x0e\x12\x69\xb5\x26\x02\x84\x75\x01\x92\x6e\xfb\x59\x32\xe2\x62\x11\xa0\x91\x2e\x8a\x72\xb7\x59\x14\x99\x15\x30\x96\x84\xe5\x5d\xf8\x65\xcd\x9c\x12\x78\x41\x2b\x38\x5c\xe1\x13\xb7\x39\x8f\x5a\x53\x92\xd8\x4f\x59\x44\x49\x48\xa4\x9f\x16\xfe\x09\x46\xa3\x66\x3e\xd9\x91\x60\x3b\x03\x8a\xf4\x20\xc1\x34\x8d\x7e\x84\xff\x38\x20\xd1\xac\x17\x62\x0a\x9d\xe6\x55\x14\x0c\x73\xd9\x66\xb2\xdb\x72\xa6\x5c\x3f\x1b\xa5\x9f\x0d\xd5\x5a\x14\x6b\x17\x5f\x44\xab\x06\x4e\x30\xf3\xc7\x91\xdc\xd0\x1a\x59\x84\x1d\xa4\x6a\xe3\x04\x4f\x93\xcf\x1d\x86\x3f\x1c\xe7\x9e\xe3\x1c\x0e\x1d\x24\x2a\x07\x47\x1f\xac\x8d\x97\xd1\x9d\xd7\x80\x6d\xfc\x7d\xd6\x03\x70\xbb\xd8\xf1\xcc\xfc\x7c\xad\x9f\xa0\x7b\xa1\x3c\xf4\xae\x76\x6e\x49\xf7\x05\xad\xc8\x6f\xf4\x1f\xae\x2a\x26\xe2\x52\xd5\x56\xe2\x17\x87\xbf\xcd\xc2\x24\x63\x9f\x79\x2d\x88\x0d\x71\xa7\xb3\x68\x4f\x8d\x43\x7a\xe8\x40\xf8\x6d\xd2\x39\xf2\xc4\xaa\xf5\x36\x06\x7b\x07\x1f\x92\x3a\xdf\xc4\x3b\x0f\xed\x09\x12\xca\xbc\xd2\x45\x3d\x02\x08\x9e\x9b\x3f\x94\x65\x4d\x3b\x21\x05\x75\x63\x54\xbd\x78\x76\x0e\x89\x7d\xd6\x45\xf2\x49\x9f\xd3\xa0\x28\x06\xfe\x25\x2e\x36\xdb\x8c\x2a\x0f\x60\x2f\x16\xe2\xa1\x66\x46\x55\xb3\xa9\xa1\x88\xe1\x3c\xbd\xfe\x69\xde\x67\x4a\xbb\xbf\x51\x94\x01\x31\x89\x63\x11\x78\xc6\xc8\x5e\xd2\xb3\x0d\x8e\xc3\xc6\xd1\x1e\x90\x53\x1c\xdc\x4f\xe1\x3f\xb8\x85\xc3\xe5\x1c\x21\xdf\x69\xee\x5e\x12\xaf\x4d\x48\xda\xb5\xc4\x83\x47\xbf\xa2\xc8\xc0\xcc\x4c\x4b\x8b\xd0\x5a\x35\xc0\x3d\x08\x4b\x0a\x31\x07\x41\x83\x70\x3c\x1e\x4f\x0f\x89\x9a\xa0\xfd\xc2\x2f\x71\xbc\x26\x16\xab\x77\xf4\x06\x3a\x49\x90\x73\x5d\x11\xe2\xb7\x4d\x7c\xb7\x69\x7a\x98\x92\xbf\xce\xe9\xf2\x78\xc1\x0d\x8e\x6e\x3f\x1c\x43\xb2\xae\xb4\x02\x57\x90\x54\xf0\xb2\x1d\xe7\xe7\xc1\x12\x3d\xc0\xb6\x19\x43\x00\xc8\xcc\xbf\x2b\xbc\x91\x87\x87\xe0\x19\x52\xb6\xa1\x08\xcf\x8b\x29\x38\xbe\xd0\x1c\xf5\xde\x2e\x44\x1d\xee\x59\x0e\x0a\x27\x6a\xe4\xb0\x67\x57\x15\x91\xc9\x1d\x35\x98\xfd\xa6\x4d\xa1\xde\x45\xaa\x71\x21\x70\xdb\x18\xc3\xa0\x5e\x97\x5d\xdb\xbb\x5d\x7d\xd6\xbb\x5e\xdd\x09\xe1\x73\x1a\xe7\xe5\x85\xd3\xc6\x6b\x63\xdf\x12\x9a\xa5\x9b\xd4\x88\xb9\xf3\x89\xeb\xa6\x43\x20\xc3\x82\xa1\x5b\x95\xb6\x3d\x59\x1c\x56\x31\x1e\x37\xf1\x88\x4f\xa5\x58\x58\x79\xaa\x95\xf7\x3c\xd7\x22\x36\xb1\xb1\x00\xc4\xf5\x63\x25\x52\x26\x72\x45\x41\x24\x20\xf4\xf5\x49\xf4\x1c\xee\x99\x5e\x11\x98\xb7\xc7\xe2\xd2\x2a\xdc\x5b\x96\x72\x6f\x03\x10\x17\xbb\xe8\xd3\xff\xf9\xf4\x58\x18\x81\xe0\x73\xe0\x4c\xf2\x65\x83\x61\x90\x24\x89\x2b\xf0\xd4\xf0\x45\x48\x27\xec\x82\x97\x26\xbc\xbf\xff\x23\x4a\xbe\x3e\xe1\x1f\x66\x08\xe0\x53\xb8\x3f\xf0\x70\x9b\x91\x34\xff\xf4\xe8\x91\xb5\x53\x75\xf7\x69\xcb\x90\xaf\xff\x25\x9d\x68\xf9\xc9\xcb\x56\x2d\x61\x96\xa1\x50\xe4\x90\xcf\xca\x65\x1c\xce\x1a\x70\x5a\x9f\xb6\x4d\xf4\x10\x8f\xfd\xfa\x7d\x20\xea\x55\x5c\x21\xd7\xa7\x83\xc0\x24\x2f\x61\xca\xab\xa0\xed\x4e\x22\xcd\x6c\x56\x5c\x7a\xe3\x85\x25\x90\x16\xaa\x88\x0d\xd1\xe0\xab\x61\xd0\x6f\xdb\xa4\x69\x80\xcd\xa6\x48\xd2\xe5\x2e\x02\x47\x13\x0c\x08\x71\xbd\x15\xef\xde\x71\x0a\xac\x1a\x2f\xc0\x9c\x95\x32\xf2\xb0\xb9\xfc\x2e\x41\x62\xa8\x70\x71\xe9\x5f\x64\x82\x2e\xdd\xbb\x24\x26\x6e\x56\x73\xd8\xab\xbc\x60\x1f\x40\x68\x06\xe7\x6f\x8a\xcb\xd2\xc9\xbd\xc6\x7c\x93\x0b\x61\x5c\x06\x8b\xe7\x32\xf2\x49\xbb\x54\x2e\xaf\x92\x23\xf3\x7d\xa1\x78\xf9\xe5\xc4\x94\x6d\x82\x08\xe9\x68\x8c\xac\x70\x6c\x0c\xcb\xb0\x28\x80\xd2\xba\xae\x43\x9c\x80\x5a\xfc\xce\xf9\xb7\xfd\x2c\xac\xc7\x82\x26\x74\xd3\x6b\x1b\x09\xa4\x48\xe8\x39\x71\x03\x9c\x69\x76\x9f\x93\x10\x75\x87\x92\xe1\x66\x6a\x57\x69\xf6\xca\x73\x77\x2f\xfa\x40\x03\x2b\xe8\x40\x7b\x05\xa7\x28\x22\xf0\xd1\xdd\x44\xcf\x4a\x1d\x67\xa4\xe4\x36\xff\x90\x1c\x7a\x99\x71\x6f\xa9\x20\x90\x9d\x69\x92\x28\xab\x5d\xd6\x73\x1c\xed\x35\x1e\x20\x48\x2e\xe5\x8b\x46\x05\x67\x23\xb6\xe4\xd6\x07\x95\xcc\x78\x6c\xc8\xf1\x34\x61\xc9\xf5\x7b\x37\x24\xaf\xfe\xc9\xcf\x2d\x1c\x34\x8a\x99\x69\xa2\xb0\x5d\x13\x75\xb9\x72\x67\xc1\xec\x1e\x8a\x41\x9d\x52\x11\x2d\xf8\x31\x50\x4a\xb6\x5b\x8b\x8f\xc1\x1c\x5c\x3e\xaa\x64\x62\x94\x43\xd0\xd5\x92\x25\x32\x71\x79\xc9\x3a\x8e\x16\x94\xef\x63\xa1\x64\x0a\x88\xcf\x46\x12\x3b\x12\x89\x8d\xbe\xb1\x28\xaf\x95\x8f\xc3\x11\xa3\x75\x16\xa3\x9b\xe2\x82\xaa\xb3\x6a\x47\x7d\x7c\x90\xc3\x38\xcf\xd6\xc6\xa1\x20\xa3\xdb\xdd\xdf\xbc\x95\x81\x13\x65\x8f\x4e\x23\xf7\xb1\x8c\x3f\x38\x6b\xea\xbd\xf5\xa8\xa8\xff\x7e\xbb\x4d\xe0\x8a\x4d\x43\xe6\x5b\x33\xa4\x40\xc3\x7b\x60\xd0\x33\x33\x9f\xd8\xfb\xae\x0c\xea\xcd\x90\xbb\x4f\x9c\x59\x94\x7a\x62\xaf\x7f\x94\x5c\xa0\x75\x2e\x0f\x25\xe4\x59\x85\xb0\xd2\xda\x53\xc7\xae\x2f\xab\x39\x86\xa0\x50\x01\x4c\x48\x13\x49\x93\xe0\x48\xc4\x6f\xf3\x36\x12\xdb\x89\x59\xf3\x6d\x8e\xd7\xec\x00\xc1\xd3\xaf\x4f\x1a\xde\x4f\x90\x1a\xe1\x40\x3a\x16\x5e\x1d\xe9\x17\x4b\x0a\xae\xf5\xe6\x45\x85\xfe\x28\x91\xe0\xf3\xf7\x22\xcd\xb9\x72\x85\x79\x93\xeb\xd2\xc4\xd0\x6b\x40\x73\x65\x2a\xd3\xab\x54\x8b\x3f\x2f\x8f\x7a\xd4\xe9\x27\x30\x65\xf7\x08\x86\x4b\x6a\x41\x5b\x09\xb8\x59\x86\xd9\x03\x36\xc4\x16\x35\x38\xe0\xd4\xc4\xb2\x65\xf4\x22\x85\xb4\x12\xd8\x87\x51\x12\x11\x99\x02\x5a\x9d\x4b\xe2\x90\x89\xd2\xe3\x36\xcc\x11\x25\x82\x76\xeb\x55\x05\xf7\x20\xf4\xda\x4f\x7f\x7a\x65\x62\x50\xd2\xef\xb2\x90\x62\xbb\xf6\x34\x09\x4e\x56\x91\x85\x76\x68\x40\x37\x9c\x44\x8f\xf9\x60\xcd\x64\x90\x31\xa7\x21\xcb\x7a\x32\xe6\x2d\x64\x42\x97\x76\x30\x01\x36\x8e\x42\x65\x48\x89\xd6\x04\xfa\x21\xa2\xcb\x25\xa4\x10\x2c\x72\x99\xc2\x91\xb3\x66\xca\xfd\xe1\xd0\x4c\x7e\xeb\x59\x71\x86\x66\xd1\xd4\x39\x61\x46\x98\x71\x06\xe0\x91\x16\xb3\xbb\xcb\x8f\x7e\x88\x97\xe0\x94\x54\x9c\x2f\x94\x93\x09\xcc\x43\xed\x4d\x9a\xf0\x2e\x7b\x3b\xb1\x53\xf4\x8b\x22\x4d\x6f\xf0\xe9\xa1\x7c\x5f\xe2\xe9\xa4\xbc\xc8\x1f\xe0\xe0\x54\x29\xd6\xa4\xa7\xbb\x61\xb9\xc7\x30\x0e\x4a\x78\xde\x01\xaf\x29\x65\xd9\x0e\xc6\xff\xb2\xce\x78\x87\x82\x7f\x78\x19\xed\x8a\x3a\x7a\x97\x17\x97\x5d\x38\x2a\x84\xb1\x04\x8f\x5a\x0c\xae\x64\xc8\x94\xe5\x58\xd6\xfa\xc7\xcc\xe7\xf6\x55\x7b\x99\x66\x95\x2d\x7e\x4b\xfe\xd9\xb7\xc1\x36\x61\x5d\x30\x74\x1e\xb3\xd5\xd9\xa9\x6b\x06\xf4\xd4\x00\x05\xbe\x55\x4b\x7c\x4d\x3a\x76\x28\x17\x58\x73\x36\x78\xaa\x5e\x05\x42\x65\xa0\xb3\x75\xcb\x9b\x16\xab\xd2\xf4\x8b\xf5\x0a\x9c\x3a\x02\xac\x44\x33\xf8\xef\x00\xfa\xc6\x70\x18\xd8\x60\x8a\xd1\xc0\x20\xb1\x41\x38\xe0\x4a\xdc\xf2\x91\x4d\xdb\x87\x6c\xc2\x94\x6d\xf7\x35\xaa\xaa\xa8\x48\xa6\xe5\xc7\x6c\x52\x76\xca\xb9\xa0\x36\x06\xcb\x9c\xd0\x8f\x0b\xd3\x3f\xe9\x4c\x8b\xc3\x73\x20\x9e\x43\x66\x2d\x70\x47\xb7\xa1\x7f\xcd\x94\xec\x23\xd2\x42\x02\x4b\xf1\x50\x0e\xa4\x9d\xe3\x5b\x8c\xbc\x5c\xaf\xd6\xa5\x63\x0d\x03\xbd\x8a\xe9\xb6\xcd\xac\x05\x51\xfb\xe9\x06\x82\xdd\xca\x4d\x51\x54\x6b\x98\x79\x17\x70\x3e\x02\x7e\x6e\x5e\x63\xad\x9e\x68\xe1\xd6\x48\xb6\x13\x0e\xc1\xb2\x22\x7c\xb2\xe6\x94\x6f\xaa\xd9\xce\x1e\x72\x3c\x2a\x70\xd1\x10\x81\x3c\x6a\xa2\xc3\x92\xee\xe6\x71\x35\x43\xcc\x37\xd2\x15\xad\xc1\x56\x9b\xb3\xd7\x81\xd7\xb6\x14\x59\x13\xf8\x97\xb4\x84\x7e\x68\x22\x08\x2f\xd7\x29\x17\x32\x6c\xd5\xb0\x82\x2b\xd5\x03\x72\x72\xc2\xba\xde\x66\x99\x15\xd7\x88\x34\x0c\xe8\x10\xc4\x47\x73\x8e\xb1\x4c\x66\x7d\x95\x0a\x21\x4d\x51\xdc\x70\x16\xb1\xc2\x38\xef\x63\x19\xfb\x0d\x9f\x38\x35\x7f\x52\x26\xaf\xfa\x8b\x03\x98\x24\x85\x5c\xcd\x3a\xf8\x35\x4d\x59\x1b\x25\x8e\x69\x66\xed\xa3\x11\x4e\xe2\x5a\x3e\x41\x83\xd6\x9e\xbd\xe9\x24\xaf\x37\xe6\x8e\x73\xc2\x3c\x10\xd6\x4f\xa9\xf7\x9a\xec\x94\x26\x29\x47\x59\xe3\x31\x9c\xbc\x7f\xd9\xfc\x59\xa4\xc3\xed\xbc\xcc\xd7\xbf\xb5\x28\xb9\x69\x36\x18\xfa\x47\x9d\x72\x59\xc8\x67\xeb\x60\xd1\x84\x61\x80\x8c\x1d\xc1\x3e\x83\x18\xa0\x3b\x20\x56\x3d\x63\x94\x24\x3b\x99\xa6\x9a\x73\x59\x57\x38\x4f\xf4\x91\x41\xe0\xd8\xd1\x2a\x2c\x44\xec\x30\xa1\x02\xd6\x0f\xff\x4e\x6a\x99\xd4\x2a\xe6\xbe\x19\xe5\xc0\x2d\x98\x68\xfa\x34\x56\x27\x3d\x00\xd3\x4a\x75\x8e\xef\x86\x7d\xf3\xac\x7d\x2d\x4d\x20\xfe\x56\xf0\xf1\xcc\xef\x4c\x6e\x5f\xb1\x53\xcd\x8d\xeb\xa1\xd1\x5f\x6e\x47\xf4\x33\xf8\xd8\xf1\x46\xff\x75\x87\x9c\x1a\xa1\x8e\xc5\xfd\xbc\x01\xd3\x9c\xa5\x56\x4f\xc2\xd9\xad\xf2\x6b\xec\x43\x8d\xd6\x61\xea\xe1\xd1\xfe\xcb\x89\xa3\x1d\x1d\xdd\x19\x23\xa7\x87\x20\xfa\x51\x47\x35\x3b\x8d\x5c\xca\x59\x6f\xc4\x77\x4f\x2a\xfb\xe5\x8f\x3a\x8a\x81\xc2\x1a\x12\xa4\xdf\x05\xd5\x4e\x4f\x03\xc5\xd0\x1c\xed\xab\xa4\xb6\x99\xde\x99\xba\x68\xf6\x34\xeb\xa0\x87\xa5\x1a\x61\x0f\x39\x9d\xb8\xe9\xe4\xa9\xe2\x22\xdc\xa0\xbb\x25\xda\x64\x68\x40\x00\x90\x35\xf4\xbf\xa8\xf0\x76\x6b\x3c\x6a\xb7\x75\x5a\x52\x95\xad\xd5\xe8\xa9\x3e\xa0\x5d\x60\x33\xb8\x7a\x63\xce\x18\x87\xfa\xda\xcc\xf7\x6e\x46\x53\xd8\xb4\xfe\x0b\x52\x3f\xb7\xfb\x35\x40\xfa\x52\xe5\x89\xfb\xaa\xbd\xb3\xd4\x6c\xda\x7d\x08\x3f\x8b\x4c\xcc\x93\x61\xb0\x22\xcb\xea\xed\x4c\xfc\x0a\xe5\x48\x4c\xe6\x2e\xa0\x0d\xd9\xce\x34\x81\xca\x77\x73\x20\x3a\xe0\xcc\x7a\x09\x44\x25\x5f\xee\xb4\x91\x50\x55\x07\x2a\xaf\x9d\xf3\xaa\x08\xd9\xaa\xaa\xdd\x21\xed\xee\xee\xc6\xa6\xf4\xc0\xec\xc2\x5a\x93\x72\xa6\xc1\xb3\x9d\x17\x42\xf4\x6c\xb7\x8a\x66\xb8\x96\xdd\xc2\xe6\x54\xe8\xbc\x5b\x4d\x78\x74\x87\x30\x61\xae\x70\x6b\x8e\x70\x99\x92\xdb\x74\x76\x2a\x31\x8b\xeb\x5f\x9a\xb4\xf4\x4a\x7c\x39\x7f\x06\x76\x23\x68\xc2\xbc\xef\xed\xd4\x6a\xb1\x39\xdd\x83\x2f\x5c\x7d\x67\x36\x6a\x4d\xe3\xc8\x27\x77\x71\x87\xcc\x90\xbb\x26\xaa\x1e\x70\x92\x24\x33\xaf\x28\x7d\x8d\x5b\x69\xf5\x25\x69\x48\xa3\x7b\xed\xe2\x9a\xa5\x20\x73\xc2\xb8\x03\xc2\x7a\xd7\x2b\xc1\x8a\x94\xb9\x63\x40\x51\x66\x7a\x52\x99\x52\xb8\x3e\xb9\xe1\x01\xc1\x07\x19\x5c\xc6\x13\x0f\x27\x74\x34\xf0\xbe\xa5\x84\xaf\x87\x81\x53\x8b\xd3\x27\xdc\x74\x1d\x9f\xb6\x4a\x45\x9d\x44\xdb\x92\xd6\x49\xd1\xc5\xd9\x07\x97\xd0\x8b\x54\xdc\x25\x3f\x6f\xa2\xaf\xc0\xd6\x4c\x08\x4b\xda\x42\xbb\xb2\x0b\x74\xcf\x80\x1e\xed\x06\x5e\xd3\x44\xbf\x86\xd7\xdf\x69\x0f\x27\xbe\xac\x58\x3d\xf8\x58\x45\xc8\x69\xff\xf1\x56\x48\x31\x8f\x7e\x60\x97\x69\xfe\xe0\x7b\x70\x88\x86\x8a\x31\x2e\x6a\x6e\x44\x01\xcf\xad\xa3\x06\xf6\x23\x30\x36\xc0\xbc\x52\xef\x9c\xd8\x73\x45\x01\xbe\xef\xd1\xf7\x06\x60\xbc\x6c\xca\x09\xf9\xf0\xa1\xee\x7b\xd1\xe7\xa8\x7c\x93\xbf\x2d\xd5\x35\x28\x73\x1a\x5b\x6b\xc1\x4f\x22\xb3\x2a\xd8\xb2\xe1\xcc\xda\xc2\x86\x50\x5b\x62\x15\x4b\xfd\x90\xed\xda\x05\xca\xc8\x78\x83\xd7\x5d\xed\xe4\x89\x92\x40\xda\x44\xe5\x03\x12\x66\x8b\x68\x42\x54\x01\x51\x2c\xbd\x7a\x46\x6c\x86\x97\x95\x90\xe0\x8c\x49\x0c\x22\xf4\x6e\x74\xd3\x28\x89\x58\x83\x7a\x0e\x22\x12\x7b\xb8\xcd\x35\x4a\x69\x1c\x42\x43\x0e\xa6\x7b\xbd\xf5\x52\xea\x20\xc6\x38\xd7\x5d\x88\x5d\xcf\xf3\xc3\xea\xa6\x1c\x40\xf8\x14\x86\xee\x02\x52\xfe\xb0\x6e\xcb\xee\x61\x87\x32\x7b\xfb\x7d\xd9\x3b\xe3\xd1\xd0\xea\x8e\xa8\xe6\xb1\x1c\x70\xc3\x75\x7c\x6e\x8d\xeb\x54\x99\xd4\xb6\x04\x1d\x08\xd6\x82\xa8\x09\x27\x96\x4d\x5b\x0b\x6d\xde\x04\x79\x22\xb6\x7e\xdb\x87\xfd\x41\xd2\x33\xea\xfd\x83\x6a\x98\x77\x2d\xff\x16\xb7\xf2\xc7\x70\xa4\xe4\xf5\x23\x6f\xd7\x0a\xaf\x90\x9c\x06\x71\x23\x5b\x9d\x46\xf8\x9c\xfc\x39\xa6\x2c\xf0\x8f\xda\xb0\xc1\xd4\xbc\x30\xd3\xb8\x5c\xf7\x18\x53\x8f\xb3\x5e\x58\x94\x0d\xb9\x4e\x40\xd9\x39\xb3\xd4\x46\x94\x63\x3c\xdd\xad\x81\xd4\x7b\x55\x6e\xc2\xa8\x2a\xdb\xf7\x89\x72\x6d\x7c\x95\xd3\x06\x58\xd9\x19\x61\xde\x05\xea\x7d\xe7\x1b\x9c\x03\x86\x76\x3e\xdc\xca\xda\xe0\x9b\xb1\x15\xc5\x1b\x3f\x70\x0d\xc4\x94\x4d\x47\xe1\xd3\x83\x1e\x0c\xb7\xb7\x0d\x7a\xa5\xad\xc4\x70\xb4\x22\xce\x9c\xba\xa3\x1a\x8f\xaa\xe1\x00\x05\x37\x09\x47\xe4\x86\x0d\xb8\x54\xab\xb5\x60\x8e\x36\x7a\x63\x9e\x6e\xd2\x8c\x60\x80\x7e\x27\x92\x00\xe8\x3f\xb1\x00\xb3\xc1\x57\xdd\xab\x1d\xac\xda\x02\x5b\x84\xd4\x12\x97\x78\x6c\x90\x15\xc9\x7b\x8b\xc7\x0a\x5c\xc6\xba\x78\xc4\x63\x69\x66\x1b\x89\xb6\x13\xe5\xc9\x4a\x8f\x63\xfc\x3d\x4e\x92\xce\xfd\x30\x3c\x20\x6d\x35\x69\x71\x47\xec\x38\x2a\xeb\x2d\xa8\xdb\x20\xa0\x4f\xf1\xc5\x22\xb8\x43\xc3\xed\x81\x4f\x41\x34\x36\xb8\x9f\xa2\x62\xce\xea\x6d\xf5\xa9\x04\x22\x42\x7a\x1a\x44\xea\xc4\xaf\xd7\x7d\x70\x16\x77\x91\x26\x35\xc9\x6c\x70\x8d\xb1\xdf\x92\x3a\x72\x54\x89\x64\x05\xf0\x1f\xf4\x93\xc1\x30\x1f\xbf\x82\xdf\xf6\xee\x17\x61\xd4\xe0\xdc\x06\x1c\xc6\x89\xc6\xb9\x8d\xa6\xde\x05\xb9\xf3\xee\x55\xba\x01\x99\x68\x02\xb0\x4e\xf8\x41\x99\x58\x06\xda\xe4\x08\x81\xe0\x45\x51\xd7\x0e\x85\x1d\xe8\x6a\x27\x73\x61\x76\x1c\x40\xd6\x64\x98\x2e\x00\xa0\xdb\x9f\xc3\x03\x5c\x86\x76\x8c\x8f\x72\x89\xe4\x32\x82\xa1\x4e\xea\x36\xe5\xb1\x35\x12\x2a\x7b\x18\x44\x43\xe0\x60\x88\xc6\xe9\xe2\xb6\x08\x71\xd1\x93\x58\x10\x66\x3c\x88\xba\x7d\x32\xbb\xfe\xf3\xc0\xfe\xb5\xc8\x41\xa4\x94\xe6\xf6\x68\x3f\x49\xb4\x07\xae\x3d\xcc\x08\x09\x1e\xa9\x7f\x68\xf5\xfd\x03\xb9\x8d\x6d\x09\xb4\x7d\xa4\xaf\xd3\xd1\x40\x3b\x58\xeb\xf9\x28\xfa\xa2\x30\x4f\x49\xc9\x99\xa4\x73\xd1\xb8\xf0\x9d\x49\xbe\x7d\x98\x8c\x46\x3d\x34\x3d\x2c\x46\xb6\xa8\x20\x1e\x7a\x91\x4a\xc3\xa9\xa7\x1e\x3e\x84\x27\x1d\x6c\x4e\x1e\x08\x92\xf1\xb9\x77\xba\xe5\xf0\x53\x52\xbe\xd7\x26\x72\x80\xf1\x15\xa3\xdb\x4b\x9b\x34\xaf\xe1\xe4\xcc\x5e\xba\x2e\x6a\xe6\x2a\x4b\xc8\xce\x55\xc4\xc7\xf9\x3b\x57\x59\x59\xe7\x9e\x96\x9b\xc2\x57\x5a\xf1\x3d\xc6\x8b\x36\xc9\xbd\x15\xaa\x75\xcd\x7c\xe5\x4b\x96\x7a\x4a\x31\xf3\xa8\x9f\xf6\x6a\xed\x2a\xdc\x51\xd2\x91\xa4\xa5\x8b\x4a\x4c\xa2\xbe\xa2\xb6\x0e\xb2\x97\x41\xf7\xd8\x4b\x38\x99\xf6\x02\xe8\x1a\x07\x22\x20\xdf\x5e\x04\xc4\xb7\x25\x96\xee\x74\x42\x74\x96\xc9\xae\x74\x11\x29\x3b\xd2\xd1\x56\x76\xa3\xbd\x54\x74\xa2\xbd\x4c\x75\xa1\xa3\x25\x5e\x84\x1c\x61\x96\xf4\xae\x73\x63\x8a\x6c\x11\xc9\xa6\xee\x9c\x32\xed\xd2\xaf\xf4\x8e\xab\xfc\xf3\x81\x8a\x87\x2d\x5f\x3d\xcc\x73\x71\x89\x34\x58\x87\x6d\x9d\xe3\x40\x29\x5a\xf2\x0f\xe0\x1a\x7d\x56\x0b\x33\xa1\x25\x5a\x45\x08\xdb\x8d\xcf\x2d\xa3\x22\x0c\x4c\xdd\xab\x35\x63\x87\x1d\x7c\x20\x46\xbe\xcb\xc8\x46\xcd\x0b\xc8\x42\x4f\xd1\xf8\xe9\xb5\xac\xab\xd8\xd6\x29\x4e\x5e\x05\xbf\x87\xef\x1c\x07\x63\xf0\x33\xba\x93\x06\x88\x1f\xe8\xac\xb7\xe7\x4f\x0e\xdc\x61\x1e\xde\x82\x3b\xce\x6c\x68\xba\x95\x9c\x3c\x7f\x2e\x2d\x56\x6e\xeb\xfc\x30\xff\x29\xfa\x5f\xff\xff\x17\x5f\x9a\x2c\x9e\x46\x9f\x7e\xf6\xeb\x83\xcf\x36\x0f\x3e\x4b\xce\x3f\xfb\xfe\xf4\xb3\x57\xa7\x9f\xcd\x4f\x3e\x7b\xf9\x4f\xab\xf5\xd0\xe7\x23\x2d\x0b\x77\x7f\x98\x74\xca\x0c\x8b\xa1\xae\xa9\xde\x40\x43\xb2\x45\x0e\xc8\xc6\x0e\x4e\xe8\x92\x70\x39\x46\x49\xb1\x21\xdc\x2a\x03\x13\x88\xf5\x57\x20\x01\x10\xcd\x93\x34\x7e\x27\xf2\x5b\xc3\xa7\xe6\xa9\x0c\x6e\x5f\xf1\xad\x62\x99\xae\x6a\x26\x2d\x9f\x76\x54\xf7\x25\x61\x5b\x4d\x8e\xd4\x8b\x4f\x20\x0d\xfc\x14\xea\x94\xba\x59\x3e\xd5\x78\x08\xe2\x92\xaf\x18\x83\x8c\xbe\x0f\x53\xe4\x70\x9f\x30\x55\x38\xf9\x1c\xf1\x53\xb4\x49\x30\xba\x50\x7c\x34\x1f\x22\x86\xbf\x76\x2e\x78\x0d\x69\x8c\x5c\x37\x30\x71\x89\xc8\xa6\xa7\xc2\xce\x7a\xda\x51\x6d\xe1\x67\x99\x15\x4a\x79\x57\xd5\xf0\x15\x84\x5e\x45\x26\xde\xac\x1a\xae\x18\xd3\x34\x0b\x02\x28\xde\xe8\xb6\x6c\xa4\xc5\x72\x89\x69\x7b\x35\x18\x42\x36\x1d\x8b\xa2\x0f\x91\x77\xdb\x99\x4d\x81\xf2\x89\xad\x9d\xd4\x5e\xc1\xd9\x0e\x9a\x30\xd3\x03\xc4\xd5\x75\xf2\x3c\x58\x68\x33\x74\x73\xf9\x02\x8f\x45\x3d\x17\x05\x3e\x05\xbd\x57\x03\x41\xba\x1f\x2a\xc6\x89\x36\xaf\x20\x17\x4e\xd6\x62\x6d\x2a\x1a\x7e\x75\xa8\x87\x03\x1f\x3e\x98\x0f\x04\x85\x60\xda\xa6\x34\x00\x0f\xaf\x05\x58\x5e\xa7\x74\x0a\x0e\x3e\x9b\xe3\x10\x2c\x58\x0f\xf0\x3c\x87\x0f\x53\x30\x55\x8c\x86\x20\x82\x6a\xc2\x4e\xa5\x56\x34\x0b\x3e\x71\x32\xac\xf1\x1d\x7e\xb2\xd5\x89\xd7\x05\x4b\xa0\xca\x13\xf8\x60\xad\x91\xd5\x10\xf0\x8d\x75\xc4\x47\x5b\xad\x35\x57\x21\x08\x8b\xd7\x18\xb0\xf3\xbd\xfa\x62\xaf\x59\x56\xc5\x8a\x91\x8d\xa8\x29\xbf\xd8\x6a\x6e\xe5\xa8\x78\xed\x18\x14\x7c\x1e\x54\xcd\xd5\x89\xd7\xea\x8b\xad\x26\x48\x0a\xc2\xe9\xa4\xb0\x5e\x91\xad\x59\xcb\x37\x55\xb5\x51\x69\x5e\xee\x3d\xff\x76\xc6\xfb\x89\xe2\xc3\x59\x4d\x4e\x15\x7d\x25\x3d\x37\x9f\xc1\x97\x71\x52\x7a\x46\x9a\xa4\x75\x1c\x09\x03\xdb\x39\x0d\xc4\x02\x35\x53\xeb\x54\xa3\xb1\x39\x1b\x5c\xcd\xb4\xe4\x2f\x76\x67\xd0\x00\xca\xdd\xde\x10\xf8\x1f\x66\x9c\x5c\x79\x91\x4c\x42\xd8\x7d\xd1\x3a\xce\x76\x1d\x68\x32\x16\xcc\x0a\xce\xbb\xa0\x36\xb3\x20\x24\x9b\x6b\x29\x53\xf8\xca\xf3\x18\x00\x25\x2e\x57\x40\x6e\xe3\x74\x81\x57\x24\xe0\xa0\xa9\x6c\x2e\x15\x89\xf9\x68\x4d\xaa\xa7\xdd\x83\x51\xc7\x17\xde\xe5\xae\xe8\x07\xd0\xdb\x08\xd5\x88\x35\x88\xd4\x5f\x21\xf2\x51\x1b\xaa\x59\xf9\x02\x5c\xc3\xcf\xfe\x3e\x8c\x30\x5d\x6c\x8c\x08\xd8\x75\x2d\x98\x83\x4f\x55\xf5\x07\x4e\x4b\xf6\x3a\xcd\x12\x46\xf3\x36\x7d\x55\xc8\x50\x50\xad\x26\x0c\x87\x40\x84\x2e\x71\x1d\xf5\x16\x9e\xf1\x1d\x3d\x96\x79\x17\x2d\xad\x14\xfa\x6b\xe1\xe4\xbe\x7a\x53\xab\x6b\x89\x61\xbb\x29\x0e\xd0\x19\x3c\x05\x77\x1a\xbd\x60\x64\xbb\x86\x38\x86\x23\xed\xb3\xb9\x92\x5b\x86\x87\xcf\x9c\x45\xf8\xc7\xe2\x66\x17\xde\x94\x2f\x4a\x95\xe0\x40\xe4\xbe\x93\x15\x9a\x07\x3f\xb4\x24\x5b\x2a\x0f\x1b\xa3\xdc\x28\x2e\x69\x5e\xa9\x69\x03\x4f\xb6\xc9\x60\x06\xb8\x2b\x27\xaf\x78\x81\x38\xdb\xe3\xa5\x5e\x1c\x87\xc1\x38\xc2\x98\x21\xf6\x0e\xb7\x8a\xf7\x97\xbc\x7c\x98\xf7\x1f\x96\x2a\x43\x9e\xbc\x88\xd5\x88\x00\x93\xf6\x39\xcf\xbd\xe5\x45\x3f\xb8\x2d\xae\xb5\x5f\x50\x3c\x74\xe0\xda\x50\xba\x5a\x2f\x44\x26\x35\xa4\xf0\xa4\x8f\x08\x2e\x9c\x6b\xc8\xf4\xcc\x7e\xed\x9d\xb1\xa6\x41\xd0\x02\xdd\x54\x9f\x32\x2f\x03\x71\x5a\xf0\xc2\x0f\x4e\x4c\xa2\x75\x04\x5e\x35\x6c\x07\xe4\x3e\x0b\xf3\xde\xd2\x0f\x62\x40\x97\x5e\x18\x27\x07\x5d\x92\xc9\x05\x49\x33\x88\x60\x55\x9b\x0c\x44\x8b\x7b\x7b\x1b\xef\x15\x8d\xee\xe7\x61\x3c\x2e\x01\x1d\xd9\x1e\x36\xf2\x63\x9d\xef\x8f\x55\xb0\xa9\x10\x5f\x93\xc8\x31\x36\x67\x48\xe0\x50\x69\xbe\xaf\xd0\xed\x98\x5c\xcc\x1f\x46\xe4\xe3\x70\x4e\x11\xb8\x4f\xc1\x6d\xcc\x56\xd3\x61\x60\x5c\x12\xea\xd9\x20\x8f\x59\xfc\x94\x96\x31\x4b\xb7\x5c\x39\xb2\xda\x23\xd6\x13\xd9\x23\x5d\xe1\xef\x9d\xab\xba\xd6\x20\xab\xb9\xe0\x68\xed\xb6\xc5\xcd\xb8\x5c\x87\xc6\x3c\x5e\x77\x1d\xa3\x26\x06\xd2\x06\x3e\xb5\xc7\xf9\xca\x11\x38\x6c\x5c\x53\xe9\x8a\x4a\xb4\x1a\x42\xa8\xd7\x9d\x05\x91\xd8\x69\x91\x84\xb3\x66\x69\x67\x1a\x7b\x23\xa5\x43\xf3\xe4\xa3\x95\xcd\x35\x8b\x66\x4b\xee\x45\x63\x11\x8d\x6f\x09\xec\xac\x64\x86\xd8\xda\x58\x7b\xf3\x48\x59\x46\x87\xb8\xa7\xad\x4d\xd2\xed\xc0\xb5\x95\x76\x56\xb4\x30\xda\x1b\xc5\xc7\xa0\x3b\x4d\xce\x3c\x38\x1c\x65\x10\x8c\x73\xe6\xf0\x0e\xbb\xda\x6c\x77\x8e\x02\xd8\xa8\x1c\x45\x97\xa0\x01\x56\x8e\x42\x17\x22\x27\x9e\x7a\xe1\xe3\xa9\xed\x11\x47\x05\xd5\x25\x8e\x62\x1c\x00\x8e\x32\x7c\x9c\xec\xcc\x91\x98\x56\x99\x9f\x67\x1e\x63\xef\xdf\x21\x95\x84\x09\xa6\xd7\x30\x86\x22\xdd\x56\x6b\x0b\x85\x83\xc3\x06\x4c\x30\x33\x3c\x46\x3e\xe1\xe7\x40\xa5\x9e\xfb\xb3\x14\x07\x0d\x52\xf4\x5d\x9b\x23\xd5\xd3\x79\x63\xc7\xc2\xf8\x51\xea\xed\x42\xe7\x38\x0d\x12\xad\x8d\xd9\x9e\x7c\xb1\xd2\x80\x90\x8d\x3a\x3e\xe4\xda\xe1\x80\x25\xc7\xaa\xf3\xe8\xc0\x65\xac\xf8\x35\xdc\xd9\x66\xd7\xd3\x46\x9d\x28\x8c\x6d\x0a\xdc\x03\x4f\x53\xb8\x1a\x19\x8f\xdf\xaa\x44\x81\xb6\x57\x39\xb1\x62\xf5\x71\xba\xe3\x18\x0e\xe6\x15\x9f\x9a\xab\x6a\x7d\xda\x29\xf9\x18\xb9\x59\xb2\x54\x04\x8d\x7f\xf4\x9c\x90\x6c\xbb\xee\xe5\x4b\xfd\x38\x48\x87\x87\x1f\x56\x1f\xe9\x74\xb0\xe4\x38\xfc\x61\x89\xf7\x87\x61\x8a\x1b\xae\xbb\xc6\xc6\xdf\x90\xab\x74\x03\x59\x41\x55\x3d\x4c\x7e\x86\xf9\xbd\x4c\x68\x42\x38\xe2\x1c\x54\xc4\xd6\x43\x4a\x34\x0e\xee\xc4\x44\x64\x77\xdd\x99\xf0\x74\xaf\x9a\x22\x43\xe2\x50\xc0\x54\xa6\x31\x19\xc6\x51\x8a\xb4\x5f\xcb\x34\x4f\xab\x5d\x2f\xf3\xe2\x1c\x31\x62\x8a\x36\x12\x61\x1d\x6a\xc2\x8b\xd2\xcd\x96\x71\x0e\x05\xef\x5b\xbe\x66\xc3\x51\x3d\xb2\xbd\xb4\x91\xa7\x9f\x0d\x63\x54\x08\x6f\x9d\xd4\xc8\x7e\xb4\x29\xb8\x04\x30\xdc\x85\x2f\xc1\x89\xac\xf4\xc8\x84\xa2\x30\x3f\x50\x0f\x1f\xf4\xa5\x48\x51\x54\x7a\xaa\x48\xf3\x9a\x00\xde\x4f\xf9\x5d\x39\xf7\x30\xb8\x25\xae\xcb\xaa\xd8\x44\x2b\x46\x2e\x2c\xb2\x30\x4f\x23\x00\xe5\xe4\xc5\x3e\x69\x1a\xde\xe8\xf8\xe6\xfd\xd1\x4f\xc3\x3c\x48\xfc\x8d\x4d\xcd\xce\x77\xd9\x4d\x1f\x29\xf5\x78\x92\xe0\xa2\xbd\xab\x6d\x59\xb5\x14\xc2\x5e\x0a\x08\x66\x5d\x93\x08\x5f\xf7\x8b\x83\x8c\x80\xcd\xb1\xab\xb5\x39\x08\xfa\xd1\x38\x16\x99\x40\x10\xda\x35\x5e\xa5\x8e\xd1\xb2\xde\xf8\x43\x46\xf8\x24\xde\x7a\x2b\x40\x18\x9a\xb7\x42\x91\xbb\xaf\x02\xe9\x07\xef\x4e\x00\x09\x23\x2b\x27\x06\xef\x6d\x05\x2d\xfa\xc4\xd4\x75\x33\xa3\xc3\xdb\x63\x27\x61\x60\x85\x46\xa1\x69\xe1\x2b\x06\x8a\x0d\xe1\xfc\x5e\x0d\xe9\xcc\x76\xad\x59\x36\x6d\x2b\xf9\x02\x65\xde\x1b\xb6\x60\x92\x60\x74\xd6\xc8\x99\xdc\xb4\x6b\xa6\x5f\x20\x42\xf0\x91\xbe\x60\x45\xbd\x75\xce\x40\x38\x8c\x51\x31\x17\x8b\x30\x67\x6e\xc7\x5b\x3a\xd0\x7c\x1c\xa9\xf3\x7a\xb1\xfa\x78\xa8\xc5\xaa\xb7\x9f\x54\x8c\xe6\x2a\x67\xbe\x93\x5b\x21\xf4\x99\xef\x58\xc0\x3b\xcf\xf4\x10\xb0\x9e\xc9\xec\xf1\xd2\x4f\x3c\xd2\xec\x09\x2a\xe8\x34\xd1\x13\xa8\x66\x0a\xcc\x1d\x7f\xd1\x3d\x00\xe9\xbe\x94\xe0\x74\x01\x09\x9a\xcd\x78\x06\x5f\xfb\x31\xe4\x8e\x8e\x51\x98\x72\xb6\xef\x3f\xfd\xde\xab\x33\x27\x1d\x0d\x07\x4b\x67\xa2\x6f\xa4\xe7\x19\x09\x46\xe8\x3f\x3b\x13\x59\x32\x03\x25\xa3\x1e\xc1\x76\x37\x0a\x25\xcc\x37\x7b\x8d\xc0\xcc\x5b\x3b\x7f\xbd\x01\xa4\xb7\x71\x06\x8f\x20\xf8\x83\xcc\xe1\x0f\x3d\x32\x47\xf0\xcf\xc4\x1b\x62\x16\x09\x38\x81\x78\x95\xcb\xb4\x4d\x6d\x6a\x7d\xb7\x0f\x7e\x2c\x47\x35\xf0\x93\x38\xfe\xbe\x1b\xe7\x47\x36\x82\x98\xc7\x1e\xcf\x73\x0e\xc6\x75\x9f\x96\x68\xcb\x19\xba\xa7\x9b\x78\xfd\xfa\xfd\xc8\x6b\x5f\x87\x89\xfb\x12\x83\xc4\xb8\x6d\x48\xeb\x14\x93\x60\x03\x01\x0c\xc5\x8a\xeb\x20\x43\xdb\x74\xd9\x5c\xa4\xb9\x5b\xc1\x93\x90\x89\xeb\xe5\x4c\x0f\x9f\x02\x6e\x30\x84\x20\x46\x05\x4c\x6d\xf6\x8d\x69\x30\x56\x30\x4b\x7c\x9a\x38\x8f\x9d\x5e\x09\xeb\x89\x0c\x16\x6a\x4d\xdb\x7b\xf8\x81\xa8\xbd\xa1\x30\xae\x80\xfc\xdb\xb3\x85\xb9\x2e\x2d\xdc\xc6\xdd\x2b\x8c\xd6\x3b\xb9\x71\x85\xb1\x7e\x28\xcd\x32\x0c\xdb\xe1\x5c\x07\xc3\xf8\xfc\xb3\xac\x73\xa5\xe6\x7e\xaa\xdd\x4f\xb5\xbb\x34\xd5\x86\x2e\x13\x35\xb7\xc4\x6e\xed\xc0\x77\xdc\x65\xeb\x0b\xf5\x76\x8c\xfd\x60\x72\xef\xe4\xf0\x0f\xe6\xfe\x50\x33\x20\x18\xe1\xe1\xf6\x9b\x60\x94\xf2\x52\xf7\x58\x7d\x52\x36\xd3\x73\x3a\x85\x0a\x15\xce\x47\x26\x68\xb0\xaa\xdd\x04\x94\x1b\x1c\x0d\x76\x84\xce\xfc\xc1\xa2\x91\x96\x02\x2b\x00\x99\x79\xcd\xfb\x49\x91\xc9\x14\xa2\xdd\x5b\xde\xf8\x77\xdf\x25\x6f\xb3\x02\xc2\xeb\x85\xff\xa7\x79\xcc\x20\x91\x1b\x9f\x75\xab\x75\x95\x73\x2b\x13\x6e\x2f\x95\xc5\x06\x53\xb3\x17\x39\x5c\x4f\x22\x99\xcc\x10\x16\xcd\x56\x64\xb3\x21\x47\x5d\x18\xdd\x63\xe7\x05\x03\x40\x94\xcd\xde\xe9\x66\x31\x12\xf3\x68\x80\x96\x84\x1e\x98\x96\x84\xb0\x77\x93\x28\x89\x8b\xfc\x82\x32\xf1\x5e\x57\x8c\x72\x84\x97\x2a\x65\x4f\x9e\xf8\x50\x56\x85\xc8\xd7\x6a\x1b\x17\xde\x0c\x0f\x2f\xbe\x13\x1d\xa6\xdc\x1f\x61\xdd\x27\xde\xd5\x4d\x24\x91\xf1\x9a\xe4\x39\xcd\xbc\x04\x32\xfb\x1a\x60\x07\xbd\x62\x70\x73\x28\x1c\xf8\x6a\x0c\xf0\x05\x24\xfc\x0f\x87\xbd\x08\x85\xad\x3a\x0f\x2f\xd2\x71\xb9\x42\xdf\x7d\x3f\x7f\xe9\x05\xbe\x2e\x33\xbc\xc1\x3e\x7f\x69\x8c\x0f\xaf\xab\x48\xd6\x1e\xd9\x67\xeb\xda\x7b\xa1\x66\x1d\xca\x27\xe6\x91\x22\x83\xd7\xdf\x42\xc1\x35\x93\xce\x07\x2d\x9b\xd4\x09\x5c\x50\xd0\x09\xbc\x2f\xfc\x43\x73\xb5\x80\x4e\x50\x53\x21\xac\x13\x5e\x3e\x9e\x34\x71\x0e\xcb\x2d\x79\x90\xa4\x1b\x9a\x97\x03\x7d\x41\x42\xe1\x2d\xc2\xe0\x4d\x9b\x12\x5c\x62\xd7\xd6\x1b\xdf\x3f\xb9\xd1\x29\x11\xaf\x39\x83\xc4\x07\x2a\x0e\x9e\x0e\xf5\x26\xcd\x21\x00\xea\x1a\xa6\xc3\x93\x7d\xa7\x83\xf8\x5f\xa9\x08\xf3\x9f\x5f\x58\x14\x84\xf9\xc5\xca\xa7\x1e\x74\x8b\xed\x54\x8b\x44\x26\x32\x8f\x49\xb9\xdb\x2c\x8a\x4c\xbd\x63\x62\xa4\x35\x37\x17\x1d\xac\x8b\x49\x60\xf0\xd3\x90\x78\x3a\x88\xc8\x55\xf3\x90\xf2\x00\x1a\xa8\x89\x87\xdf\xfc\xf7\x38\x14\x2c\x0e\xc4\xc0\x62\x79\xba\x3e\x0a\x3e\x37\x61\x68\x18\x02\xa8\xe9\xd2\x2b\xb9\xa1\x63\x49\x59\xc5\x48\xc2\xb5\x20\x55\xfe\x06\xbf\xf9\x34\xd7\x41\x51\x50\x12\x2a\x0b\xea\x8c\xc4\x7b\xcc\xcb\x7c\xa4\x42\xf9\xde\xa4\x2e\x58\x5d\xae\xc3\x68\xc5\xaa\x98\x2c\x07\x3e\x8c\xea\x3b\x0c\xbb\x08\xc3\xd2\xcd\xb7\x33\x0a\x0b\x17\xc5\xaa\xc8\x49\xe0\x7c\x52\xb5\x5d\xe2\x7f\x2a\xcb\x7d\x5d\x60\xaf\x33\xd4\x01\x90\x13\xaf\xc9\x5c\x50\x36\xa9\xb6\xe5\x62\x00\x31\x68\xa5\x77\x11\x13\x15\x21\x7b\x77\x69\x7b\x4c\xcc\x9b\xa9\x47\xe0\xe8\x72\x2c\xa2\xde\x66\x2d\x58\x05\x35\xfa\x9f\x68\x36\xc3\x14\xf0\x43\x2f\x0d\xe2\x67\xdb\xba\x24\xdf\xa4\xd4\x6d\xef\x00\xa8\xf2\xa3\x13\xaa\x68\x7e\xa6\xb7\xd7\xed\x91\x31\x46\x02\x0e\xe6\xc1\x55\xfb\x29\x23\x97\x78\xa5\x9b\x1b\x06\xf8\x11\x5f\x07\x10\x93\xa7\x79\x9c\xd8\x7c\xa6\x42\xe6\x9f\xb1\x3e\xea\x60\xbe\x3c\x6f\x7f\x9f\x1d\x4e\x6a\x8f\xcc\x67\xdf\xec\x14\xf6\xee\x9c\x5f\x3d\x10\x19\xfc\x48\x59\x16\x71\x8a\x59\x22\x9b\x64\x7e\x48\xb8\x8f\x1e\x6b\x38\xa0\xe7\xea\xf9\x04\x8c\x16\xac\x28\x09\x98\x56\x5f\x9f\x88\x0c\x7f\xa3\xd2\x18\xce\xa7\x71\x8e\x8d\x2d\xe0\x64\xa2\xfa\x26\x61\x0b\xbe\x08\x06\x39\xdb\x00\x76\x10\x27\x32\xdd\x64\x97\x1b\xfb\xfa\x39\x3e\xa5\xc0\x5e\xdd\x6b\xf5\xf3\xdc\x77\xef\x2d\xea\x5e\x75\x9d\x43\x2c\x31\xa8\xf9\x7b\x93\xf3\x88\x1a\x7b\x64\x63\x71\x22\x72\xb1\x7f\x24\xcf\xea\x47\xf7\xdf\x64\x8c\xe6\xbb\xad\x53\x04\xfd\x24\x83\x94\xd7\x48\x87\xc0\x0c\x6f\xc6\xbe\x53\xd9\x82\x74\x92\xc4\xf3\x9a\xde\x8d\x38\x06\x60\xc1\x1a\x51\xf3\x92\x3b\xab\x29\x3c\x2b\x0f\xb7\x60\x8a\x1c\x1e\xbe\x59\xf6\x91\xab\x87\xda\xbd\x7d\xee\x7c\xff\xd3\x4e\x40\x6f\x90\x75\x9f\x3d\xe9\xec\x60\xf8\x10\x08\x6a\x06\x3e\x0a\x26\xe5\xff\x19\x8f\xd5\x82\x19\x7e\x3a\xe1\xfa\x47\x01\x0f\x76\x8c\x1e\xaa\xd7\x43\xea\xa8\x47\x46\x8e\xa3\x98\x6c\xf9\xc0\xa1\x67\xba\x8f\xdd\x3f\xf4\xbd\x19\x02\xc0\x12\xfc\x6b\x2f\xe5\xc3\xf1\xda\xdd\x49\xfb\xb1\x69\xd6\xd5\x05\x5d\xe9\x97\xe5\x5a\x62\x3b\x5d\x10\x4d\x44\x44\x56\xdf\x24\x35\xef\xd7\x14\x2c\x75\xac\x82\xde\x33\x05\xd1\x4c\x86\xdd\x36\xc3\x69\x18\x1d\xe6\x38\xf6\x30\x64\x3d\x86\x12\x2f\xff\xd5\xf2\x95\x2d\xb5\x96\x85\x21\x7b\x7d\xb0\x83\xa8\x30\x7c\x3f\xcb\x15\x77\x1c\x87\xe6\x3a\x6d\xc5\x65\xa2\x9a\xd7\x0b\x7c\xe4\x87\xf6\x5e\x4e\xed\x37\xc7\xfa\x83\x87\x80\x16\xca\xd2\x3c\x6f\x2f\x81\x1d\x43\xe2\x4d\xca\xce\xfc\x52\xe9\x7c\xc3\xf6\xe7\x53\xb1\xcb\x53\xd0\x60\x6c\x48\xde\x07\xc3\x06\x42\x15\xf9\x96\x67\x4d\x16\x7d\x5b\xf4\xe1\x99\xcd\xfe\xb3\x81\xcf\xd3\x58\x76\xa6\x5b\xc4\x03\xb9\x4c\x06\xed\xb2\x37\x5a\x2e\xbb\x2d\xe1\x4a\x20\x2c\xa7\xb6\xc7\x26\xcd\x86\xea\x91\x63\xa8\xde\x3c\x9c\x87\xdf\xec\xe6\x9a\x6a\x80\x22\x88\x7e\xda\xc2\x5a\x41\x32\xf1\xd5\x6b\xd8\x99\xeb\xbb\xcf\x4e\x85\x1f\x1c\x62\xe0\xd6\xa9\xdd\xc1\x96\x6e\x98\xde\x53\x78\x26\xa1\xb6\x7d\x61\xba\xe0\x3a\xd5\x8c\x94\x38\x03\x95\x1b\x9a\xa6\xb5\xf2\xde\xaf\xec\x01\x31\xd6\x0f\x9c\x28\xf7\x32\x1b\x25\xb3\xe1\xac\x5c\x53\x45\x66\x66\x5f\xb2\xb3\x63\xcf\xbb\xe4\xaf\x3b\x4a\x5e\xbd\x46\x7b\x89\x6b\x28\x4d\xd7\xbd\xb0\xb4\x9f\x98\xaf\x9f\x8c\xeb\x7f\xde\xc5\xaf\x1f\xa9\xe3\x3d\x92\x04\xef\xff\x1d\xda\x0d\xac\x17\x1d\x6c\xfb\x81\xd5\x8c\x93\x56\x9c\x74\x87\xc4\x45\xc1\xb8\x7a\x87\x8e\x70\xe9\xce\xf0\x9a\xad\xe3\x9c\x7b\xa1\x48\x2c\x88\x90\xe5\xe9\x93\xc3\x69\x9c\x8d\x22\xc9\x02\xc2\xe5\xfb\x99\x96\x9c\x59\xcf\x15\x60\x9f\x73\xf6\x43\x27\x6b\x43\xef\xbc\xb3\xc3\xf1\x8b\xa9\x2b\x27\x0c\xb9\x89\xe1\xbd\x17\x62\x7b\x88\xd5\x23\xac\x98\xb7\x69\x04\xa5\x20\x88\x18\xc1\xb0\x71\x00\x00\x4e\x7d\xbc\x84\x38\xc9\xf4\x81\xbf\x1b\x3d\xf0\xc7\xb9\x3d\x43\x91\xb8\x18\xbe\xae\x81\x1f\x4a\xd2\xdf\x7d\xe0\xef\xee\xea\xc0\x4f\x9b\x27\x28\xe1\x84\x09\x02\x22\xbd\xa3\xbe\xad\x3e\x2e\xa1\xb0\x05\xd7\xe8\x09\xa0\x9d\x23\x6e\x8b\x14\x3d\x1e\x6a\xdf\x97\xef\x8c\x49\x03\x72\x6c\xef\x06\xd3\xe5\xee\x58\x4d\x2e\xd8\xbf\x7d\xb1\x06\x71\xd9\x11\x6f\x30\xbf\x07\x19\x08\x31\xc1\xe1\x9d\x45\xe5\x16\xa3\x23\x2a\x11\xde\xe4\x0f\xa6\x14\x75\xc6\x8f\x04\x13\xd9\xe8\xb1\x30\x6d\xb5\x1b\x81\xd6\xdd\xd5\x92\x69\xec\xe6\x27\x06\xc0\x6e\xb7\x57\x96\x08\x31\x17\x4f\x8d\x28\xf7\x99\xdb\x4f\x0a\xd0\x95\xb3\xe8\x72\x4d\x39\xbb\x4c\x3d\x5a\x80\xd9\xbf\x12\xba\x4c\xe1\xed\x03\x78\x38\x4d\x3e\x05\x88\xa3\xca\xdb\xc1\xb2\xd1\xf8\x0e\xee\x6d\x02\xfc\xaf\x1c\x73\x2c\x08\x2c\x81\x42\x46\x6d\xf4\x1d\x6a\x3b\x74\x06\x99\xfb\x47\x48\x38\xdd\x18\x97\xe3\xa5\xdb\x3d\x84\x54\x5f\xec\xb7\x65\x36\x9d\x13\x26\x8a\xa1\x21\x35\x64\x31\x89\xf0\xa0\x7b\xbb\x29\xba\xb7\x9b\x3e\x56\xbb\xc9\x16\xe1\xe6\x6c\x3e\xa8\x44\x2a\x68\x77\xc8\x88\xb2\x86\x00\xde\x9b\x52\x5e\x92\x3e\x52\x53\xea\x7a\xe6\xc2\x38\x91\xdd\x66\xb3\xea\x10\x53\xe1\xa3\x33\xae\xee\x94\xe5\x74\xc0\x8e\xbc\x37\x8e\x3a\x6d\x6e\x87\x71\x34\xa9\x63\xff\x9e\x26\xd2\x84\xa0\xa5\xbb\x60\x0e\x69\x19\x98\x02\x07\x0c\x1b\x38\xf8\xb5\xdf\xbc\x0f\x3f\xf1\xf5\xee\xbc\xed\xa9\xec\xd8\x3d\xdb\x68\xe9\x7c\x10\x26\xec\x46\x0a\xf1\x1f\x4e\x6a\x32\x18\x7c\x00\xca\x3c\x92\xf4\x6b\x1e\x9e\xc7\x70\x46\x34\x44\xee\x83\x01\x84\xa5\xa8\x80\xfb\x31\x01\x2f\xdd\xe2\x55\x11\xb8\x42\xb2\x4d\x69\x4c\x2f\xd3\x52\x4c\x5e\xc2\x70\x7e\x1c\xc3\x53\x94\xf8\xde\xbd\x98\x2e\x90\x01\xdc\xbf\xb8\xdc\xdb\xaa\x7f\x4b\x5b\xd5\x7e\x5b\x6b\xbc\x66\x6e\x87\xf3\x71\x9a\xa7\x7d\x5e\xc6\x2a\x71\x57\x5f\xe8\x9c\xcd\x16\xa4\xa4\x30\x39\x8f\x02\x27\xc1\x17\xe3\x67\xc1\x58\x94\x2e\x51\x5c\xd7\x94\x98\x44\xdf\xdf\x7e\x7e\xb8\x64\x76\xa7\xe6\xca\x97\x1d\x26\xab\x62\x3b\x66\xaa\x7c\x39\x65\xaa\x8c\xc2\xe8\x12\xc4\xf5\xcd\x94\xf1\xe4\xfd\xed\x27\x8a\x43\x64\x77\x69\x9e\xdc\x3b\x3b\xef\x95\xa9\x50\x31\x1d\x60\xdc\x77\xc7\xfc\x0d\x0d\xf9\xbd\xd4\xa8\xdd\x04\x35\x6a\x24\x46\x97\x24\xae\x6d\x2e\xdc\x2b\x51\x07\x13\xd9\x5d\x99\x23\xfb\xa8\x4f\xbb\x09\xea\xd3\x38\x84\x2e\x39\x5c\xdb\x0c\xb9\x57\x9e\xf6\x93\xd8\x9d\x9b\x20\x1f\xdd\xc9\xd8\x7d\xd8\xa1\x2d\xec\x70\xff\x81\x70\x7f\xb2\xd6\x69\xe3\xee\xea\x0f\x75\xb2\x36\xa1\x4b\x6d\x67\x6a\xc6\x79\xd0\xad\x3b\x53\x1b\x3e\xaf\x9a\xb4\x3f\xfe\xfd\xce\xd8\x5c\x62\x18\x1a\x4a\x43\xa7\x2d\x81\xe1\x86\xf7\x67\x2e\xf7\x67\x2e\x01\x0c\x86\x69\x7b\x87\x8b\x89\xf2\x41\xfb\x78\xcf\x5f\x0e\x11\x4a\x73\x7f\x0a\xa3\xe8\xbb\x0b\xa7\x30\xb7\x63\xc6\x7c\x71\xc7\xa7\xcc\xfd\x61\x4c\x74\x47\x0e\x63\x6e\xc7\x7c\xf9\xf2\x6e\xcf\x97\xfb\x43\x99\x7b\x6d\x6b\x8a\xc8\xee\xe0\x4c\xb8\x3f\xab\x11\xe4\xdd\x81\xb3\x9a\xdb\x30\x5d\x0c\xf9\xdd\xc1\x09\x73\x7f\x70\x73\x37\x0e\x6e\x6e\xc7\x6c\xb9\xe3\x8a\xd6\x47\x77\x8a\x73\xa7\x8e\x68\x0e\xd8\x91\xf7\xa7\x30\x9d\x36\xee\xde\xfc\x90\xa7\x30\x07\xbb\xdf\x74\xf7\xcf\x62\xfe\xa6\x67\x2f\xc6\x59\xcb\xde\xf7\x9b\xc2\xef\x31\x79\xb7\x58\x67\x02\xcb\x90\x36\x53\xf6\xf4\xd1\xe9\x2c\x83\x64\x15\x90\x3d\xf5\x5e\x60\xfa\xd7\x80\xd4\xa9\xf7\x02\xd3\xbf\x7a\x2f\xda\x05\xdf\xa9\xf3\xab\xbb\x8e\x6c\x9f\x01\x4d\x26\x69\xd7\x23\x73\x7f\x06\x89\x69\x38\xbd\xec\xbd\xac\xd4\xcf\x50\x6e\xd9\x7b\x49\xe1\x47\x4f\xf0\x01\xbe\x15\x66\xbe\x6a\xd0\x7b\x62\x6a\x28\x24\xe0\x50\x1b\xad\xe5\xe5\xb2\x4e\x45\xa3\x0b\x2c\xd5\xaf\x6f\x32\xb9\x68\xb3\x8f\x8e\x61\xd2\x0e\x36\x76\x0f\x4d\x58\x59\xd4\x2c\x1e\xf9\xda\x84\xc4\x25\xb4\xb3\x21\x82\x1c\xf7\xca\x9d\x8d\xcd\x37\x0f\x08\x5b\x51\xe7\x53\x15\x37\x4b\x9f\x6f\xaa\xa9\x27\xef\xf6\x9e\x6d\x5b\x56\xfc\xae\x5e\x1d\xb1\x0b\xc1\x07\xb3\x1d\x0d\xd6\x27\x28\x00\x78\x07\x40\xa7\xc1\x91\xef\x75\xbf\x7e\x5b\xf7\xca\xe5\x01\x35\x6a\x38\x0e\x71\xea\x78\x1c\x85\xc5\x7d\x1e\x45\xff\x7a\xd8\x33\x5b\x39\xde\x9d\x09\x00\xe2\xab\x35\x6a\xb4\x4f\x63\x5f\xc1\xd4\x73\x0f\x0c\x12\x6e\x34\x32\xb3\x2e\x04\xb7\x0f\xe4\xbd\xf7\xac\x2c\xbc\x67\x23\x92\xe2\x19\x2f\xcb\xe2\x93\x66\x7f\xb9\xe7\x1d\x56\xf8\x0e\x5e\x72\xff\x6b\xd8\x9d\xc0\xe7\x5b\x1d\x83\xc7\x40\x46\xd5\xfd\x51\x93\xbc\x4a\xe1\x85\x9b\x0b\x2a\x9e\xe1\xf1\xfa\x0f\x44\x2b\xf5\x1c\x2a\x61\x96\x77\xda\x1e\x7a\xb0\xe6\x51\xa1\xbc\x2c\x83\xa8\x64\x4d\xc0\xf5\x93\xf8\x68\x45\x36\x89\x47\xf1\x2c\x1c\x89\x92\xb4\x8c\x19\xad\x28\x18\x3b\xdb\xba\xe2\xfb\x7c\xbe\xf2\x53\x25\x60\xfd\x49\x81\xac\xff\x96\x9f\xf7\x13\x82\x7c\xa2\x0e\x5e\x7e\x27\x15\x5d\x15\x2c\xe5\x7f\x15\x2f\xb5\xfb\x1f\xfb\x94\xd5\x77\x5f\x7e\x31\x24\xa3\xb1\xb4\x5c\xd2\xbc\xda\x59\xc8\x09\xa1\xe6\xab\x5b\x46\xcd\xe2\x76\x91\x13\x4f\x27\x47\x0d\xe7\x34\xa1\x30\x9c\x77\x01\x73\x48\x55\x05\xa4\x3f\xc8\xcf\x63\xb1\x3a\x67\x4f\x1e\x65\xc5\x8a\x30\xfe\x79\x93\xc6\x11\xbe\xfc\x05\xcf\x03\xf9\xd7\x8f\x62\x85\x8b\x47\xb1\x3a\x20\x19\xb0\x22\xe6\xc0\x1c\xef\x8b\x30\x32\xb6\xc5\x25\x90\xf1\xba\xb8\x3c\x00\x19\x1b\xb2\xdd\xe2\x33\x81\x85\x2c\xcd\x06\x5e\xe9\x55\xb5\xda\x35\x24\x1b\xbb\x86\x78\xd6\xb4\x92\x17\x31\x1a\xb1\xa2\xa8\x02\xa5\x51\xfe\xc1\x2a\x7c\x3d\x9c\xff\x1e\x4b\x47\xb5\x66\xb4\x5c\x17\x59\xb2\xef\xc2\xda\x00\x02\x4a\xce\xd5\x17\x83\x1c\x9f\xfa\x89\xb1\xe3\x69\x8c\x2d\xbe\x99\x7f\x6b\x6a\xa1\xed\x6b\x55\x36\x25\x3a\x29\x36\x24\xb5\xab\x9b\xe6\x9b\x65\x73\xcb\xde\x7f\x64\x7d\xf2\xac\xe7\xad\xe5\x32\xb8\x5e\x14\x29\xbe\x7b\xff\x0c\x1f\x8a\x3c\x9b\xed\x34\x76\xcd\x86\x71\xb1\xc5\x55\x61\x1e\x26\x5c\xa1\x84\xe0\x0b\x94\x49\x69\x88\x1a\xfe\xe7\xe2\x0e\xe9\x9c\xff\xd6\x46\x6d\xd3\x51\x76\xa8\x66\x07\xda\x4f\xbd\xc0\x99\x8f\x72\x15\xe7\xa7\x9c\x2d\xc6\x47\x0e\x5f\x0e\x12\x39\x23\xd5\xd1\x88\xe8\x60\xdb\x29\xab\x09\x56\xba\xf9\x05\xbc\xa7\xa2\xd9\xcf\xbd\xbb\x75\xe6\x35\x03\xf3\x4d\x35\x9b\x75\xeb\x66\x41\xa7\xce\xcd\x83\xc6\xe8\x08\x16\xde\x60\xab\x41\x0e\xc4\xd0\x99\xc8\x87\x3a\x81\xc1\x35\xe0\x1f\x65\x67\xd6\x1f\x47\xf0\x9c\x29\xcd\xc9\x22\x83\x55\xa9\x46\xb6\x46\xd0\x0f\xe7\x2c\xc1\xab\x08\xd6\x78\x03\x48\x4e\xcd\x69\x85\x2f\x86\x0f\x31\xb2\xea\x9e\xa4\x1a\xfc\xb4\x67\x82\x03\xb1\x23\x03\x67\xe3\xf2\xa9\x63\xed\x81\xcc\x1f\xda\x06\x96\xb9\xcf\xa7\x10\xc7\xb8\xf3\x34\xea\x2f\x1a\x83\x67\x8b\xb2\x47\x38\xb7\x7c\xb1\xc6\x8f\x71\x46\x36\xb8\x93\x15\xe2\xd9\x59\x8f\xd4\xed\x1d\x86\x00\xa2\x67\x26\x60\xaf\x66\x04\x4d\x5c\x32\x72\xa6\x7d\x9f\xc9\x66\x6d\x32\x74\x93\xfb\x21\xe6\x71\xcd\x69\xfb\x58\xcd\x40\x3e\xdb\xe0\x71\x42\x31\x4e\xe5\xe0\x37\x37\x73\x07\xef\xf0\x9c\x61\x9b\xb8\x5c\x34\x45\x49\xc2\x53\xa0\x00\x98\x5e\xf1\x6e\xcc\x76\xd1\x32\xd5\x27\xbd\x4f\x38\xf6\x77\x12\x83\x06\x31\xa3\x5b\xbe\x88\x88\xb7\x4b\x2f\xe4\xa2\x51\x46\x4b\x56\x6c\x64\x28\x04\xf4\xac\xa0\x60\x04\x7b\x8f\xb7\xac\xb8\x4a\x37\x10\xfd\x60\x47\xc0\xd9\x64\x98\x32\xde\xbf\xd7\x83\x48\x7a\xaf\x79\x5a\x76\x29\x3b\x6f\x24\x6a\x9e\xa1\xc4\xe7\x77\xf9\x30\xdb\x66\x64\x87\xab\x25\x87\x2c\x69\xb9\x0e\xae\x86\x98\x92\xaf\x64\x76\x38\x3b\x96\xd4\x9e\xe9\xef\x11\xe7\x1d\xdf\x82\xe9\x04\xf3\xed\xa4\xbd\x2d\xd4\xdc\x3f\xfb\x7b\x6c\xef\x2f\x43\xbb\xb5\x66\xdb\x0f\x43\xd7\x2a\x0f\xc1\xed\x98\x20\xf6\x7d\xbf\x53\xe5\x5e\x07\xf8\x88\x74\x80\xfb\x55\xe7\x36\xad\x3a\xfb\x2d\x32\x8d\x25\x38\x3c\xfd\x9b\xaa\x43\x93\x5f\x19\xdb\xc3\x20\x55\xcd\xc1\x65\x4a\x7a\x11\x02\xd6\x28\x59\x73\x08\xa2\xee\x98\xb1\xaf\x4f\x7a\x0d\x73\x79\xc2\xb9\xf9\x1a\xb3\x2c\x88\x08\x3f\xde\x91\xcd\xd5\x63\xf9\xd0\xb6\xbe\x91\xbb\xdd\x40\x08\xe9\x3b\xae\x37\x07\x00\x92\x8f\x55\xbf\x1e\x0d\x1f\xd5\xe4\xeb\x46\x02\xf0\x5d\xa7\x7d\x58\x41\x18\xab\x16\xf3\x76\x78\x13\xfc\xd3\xbe\x01\xea\x9b\xde\x9f\x61\x1b\x5e\xd7\xdf\x60\x07\xd8\xad\x33\x04\xb1\xe3\xd7\xf1\x51\x98\x51\xeb\x58\x6a\x3c\x49\x23\x25\x73\x9e\x6e\x7c\x38\x9b\x62\x97\x7f\xe4\xa9\x30\x26\x6c\xdd\xe5\xd8\x1d\x9e\xf6\x6c\x96\x01\x23\xac\xa1\xc1\x04\xff\x81\x6d\xa6\xe7\xa2\x06\xb8\x9b\xec\x14\x99\x6f\xd7\x82\xcd\xd1\xb7\x3c\x1c\x8d\x71\xb7\xb1\x32\x12\xb0\x03\x61\x3d\xe9\x2f\x02\xfa\x39\x8a\x93\x37\xc2\x98\x0e\x68\x6d\x79\x43\x7f\xda\x16\x01\x3f\x76\x1b\xc4\xc2\xb4\x79\xa0\xf5\x1d\x5d\x93\x8b\xb4\xa8\x19\xfe\xa1\x7b\xa6\x25\xcb\x98\xef\x58\xcb\x52\x07\x21\xbb\x4f\x7c\x4a\xbe\x47\x43\x44\x66\xc2\xc8\x2a\x5a\x74\xd0\x37\xb5\x8d\x70\x58\x5e\x13\x07\x16\xff\x1d\x7c\xb0\xa4\xd0\xfc\x59\x70\xb5\x26\x08\x0d\xd4\x04\x34\xff\xe4\xbf\xc3\xa6\x31\xd4\x1c\x64\xfc\xf1\x76\x9b\xa5\x54\x3c\xce\xa5\x13\xc3\x40\x75\x40\xd3\x76\x4b\xe3\x74\x99\xd2\x24\x2a\x69\x26\x4e\xd4\x8f\x0d\x18\x8c\xae\xd2\x92\x63\x45\x35\x06\x23\x5a\x21\x9a\x95\xb0\x5d\x44\xb9\xba\x59\x45\x19\x94\xf2\x05\x04\xd5\x91\xb2\xde\x02\x9d\x06\x88\x2d\xc9\x73\x68\x0e\x6e\x1e\x20\xa3\xef\xde\x31\xf4\xe4\x86\x98\xd3\xe8\xdf\x73\xf5\xf9\x1b\x3e\x90\xbf\xe5\x32\xba\x28\xd2\xc4\x78\x85\xc9\xf6\x2c\x99\xa0\xba\xc4\x53\x11\x41\xa1\xd0\x97\x62\x0a\x1a\x14\xd2\x1e\xa4\x8b\x55\xbb\x2d\x8d\x9e\xc1\xe9\x41\x94\x93\x8d\xb8\xd6\x51\x55\x24\x5e\xcb\xb7\x1a\x1a\xd8\xf6\xe6\x4d\x85\xe7\x4d\xc8\x71\x0b\xa0\x10\x74\xf8\x64\x01\x32\x98\x01\x0d\xca\x38\x3c\x6e\x40\x06\xa5\x65\x81\xdf\x62\x54\x0d\x5b\x19\x65\xe7\x8e\x40\xcd\x0d\x0c\xce\x34\x8e\x1b\x74\x81\xf8\xc8\xc4\x0a\x13\xee\x06\x48\x24\x03\xc8\x2c\x08\xe1\x67\x8f\xcb\x01\x23\xf0\x5a\xc0\xc8\xbe\x2d\x58\xba\xe2\x06\xd9\x3f\xc7\x11\x2d\x45\xd5\xac\x94\xdd\x39\x0f\x3f\xef\xf7\xeb\x2c\x3c\xd3\x91\xd7\x12\x2e\x28\x6c\x61\x5e\xfb\x40\xd6\xde\xa3\xf7\x42\xb0\xba\xa4\x71\x74\xea\x89\xc5\x09\xeb\xc4\x60\xf4\xee\x9e\x6c\x84\x10\x81\x26\x30\x9e\x0b\x4d\x88\x5a\x74\xcf\x21\x7a\x96\x64\x59\x71\x49\xd5\xe1\x19\xee\xf8\x83\xf3\x50\x68\xcc\xd3\xfb\x53\xe1\x44\xc1\xf6\x51\xba\x84\xb0\x47\x57\x22\x46\x74\x0a\xfb\x70\xba\xfb\x0f\x55\x59\x6e\x31\x4f\x23\x9c\x4a\x79\x1d\xb8\xeb\x7e\x79\x20\xf4\x6c\xbc\x63\xc2\x0d\x83\x3a\x4b\xf8\x06\x1c\x91\xe4\xf7\x9a\x2f\xe0\x09\xdc\x36\xc9\xd5\x7e\xe8\xeb\xd3\x09\xb9\xa1\x24\xea\xd0\x6e\xe3\x1a\x24\xd6\x3f\xb1\xa8\xa9\x6e\x64\x73\x93\xcf\x42\x67\x6f\x4c\xf7\x5d\xe1\x19\xce\x2f\x51\x38\xd1\x57\x26\xd1\x4d\x9f\xed\xd9\x69\xbf\x1e\xa8\xd3\x26\xa4\x98\xf8\xf5\x43\x76\xda\xaf\x7b\x77\xda\x0e\x3b\xed\xd7\x11\x9d\xb6\x73\x76\x9a\x5e\x2d\x34\x98\x14\x74\xf8\x21\x05\xf8\xd9\x15\x8d\x6b\xbe\xaa\xa3\xc2\xbf\xa1\xd5\xba\x48\xbc\x8a\xa7\x3a\xf9\xbf\xd7\x2e\xc3\xb5\x4b\x61\x1a\x4d\x54\x58\xa4\x0a\xe5\xbf\x22\xd7\x8b\xfb\x83\x36\xd3\xb7\xb7\x20\x9c\x16\xbc\xf0\xe3\x0c\xb0\xf6\xcf\xb6\x70\x94\x83\xda\xe6\xe3\x49\x64\x8b\xc6\x67\x4d\xf0\x69\xcf\x9c\xf5\x04\x9e\xbe\xa0\xc5\x8a\x91\xed\x7a\x87\x7f\xe8\xda\xe9\xbc\xcc\x67\xa2\x77\x8b\x6d\x72\xfa\x3c\x8a\x19\x15\x09\x1d\xc1\x64\x5e\x49\x5c\x69\x2c\x5e\x93\x5e\x89\x7c\x8f\x7e\x15\x16\x6a\x62\xb4\x16\xff\x3d\x64\xa4\x37\xd8\xe2\x94\xc5\x9c\x81\x06\x81\x3f\x92\x12\x2b\x03\x8e\x27\xf8\x69\x10\x4b\xb1\xd9\xc2\xba\x23\x6c\xec\x35\x15\x61\x80\x78\xa9\xb4\x58\x36\x47\x35\x4b\x4e\x4a\xcd\xfc\xf1\x0a\xd0\x66\x26\x2b\xaa\xde\x0b\x3b\x6e\xd1\x69\x00\x8d\xb6\xaa\x13\xfa\x20\x2b\xf2\x15\x7e\x8a\x16\x32\xd0\x82\x7f\xb8\xc2\xe3\x8a\x31\x54\x61\xe3\xd2\x4e\x17\xe4\x0d\x9e\x26\x9f\x98\xc2\x3d\xdc\x34\x19\x2b\x23\xd5\xce\x45\xcf\x18\x6a\x56\x30\x3e\x1e\x10\x16\xc3\xf1\x4d\x45\x72\x3e\x88\x17\xb4\xba\xa4\x9c\x94\xea\xb2\x10\x17\xa8\xfd\xc1\x7b\xaa\xdd\x8c\xb4\x14\x1c\x47\x8b\x8e\x7a\x19\xd6\x83\x7a\x2e\x81\x3e\x11\x5c\x69\x2e\xc0\xa9\x22\x48\xe6\x03\x25\x0e\x8d\x38\xf1\x51\x36\xab\x02\xee\x49\x0c\x0c\x36\x9a\xaf\xf8\xd4\xc5\x4e\xc4\x9b\xf2\x32\xc5\x74\x21\xae\xa7\xc3\x5c\xaa\x37\x4b\xca\xd7\x62\x2e\x5c\xac\xc5\xc9\xda\xad\x06\xf2\x0f\x08\xa8\x13\xa7\x82\x9a\xf4\xd0\x33\x09\x61\x89\x76\x83\x44\x1c\x3e\x12\x6e\x2e\x5c\x6a\x7f\xf5\x07\x87\x36\xd5\x66\xbc\xd5\x69\xf4\x86\x5c\xbe\x6e\xfe\x04\xeb\x50\xf3\xe5\x10\x84\x6d\xea\x4a\x44\x46\x4d\x21\xf0\x15\x6f\xcc\x17\x37\xa0\xf3\xb9\xf2\x77\xbb\xc9\x95\xb5\x87\xa8\x86\x5e\x7c\x9c\x41\xe0\x4b\x44\xff\xa8\x49\xf6\x40\xa4\xda\x2d\x72\x58\xb5\xc3\x28\x24\xd8\x7c\x36\x4a\x58\x04\x47\x59\x51\xa6\x55\x83\x5e\x97\x96\x1c\x5e\x6f\xf3\x14\xf4\xf4\x39\xe7\x64\x20\xca\x56\xd0\xf0\xb6\x24\xe3\xc8\x40\x7b\xf5\xcf\x94\x77\xcb\x9a\xaf\x59\x9a\x00\x42\x59\x57\x6d\x9f\x41\x53\xb8\xbd\xe8\x3a\xcd\x70\xd1\x04\x3f\xfd\x81\x37\x2e\xbe\xa9\xc7\x45\x2a\xd6\xad\x6a\x0a\x1b\xaa\xed\x4d\x31\x22\x86\x1e\xff\x1f\x0f\xe0\xb3\x50\x16\xb0\xd9\x13\xd5\x6a\x22\xf1\x33\xae\xac\x7c\xd9\x9e\x82\xf2\x6f\x5f\x69\xce\xbd\x83\x30\x36\xa1\x77\xb0\xe1\xfe\x3d\xf3\x61\x98\x53\x13\x68\x46\x4e\xde\x9d\x90\x13\x39\xb9\x8f\xc6\xf2\xba\xd7\x64\xba\x56\x4e\xa1\x03\xb9\x6d\xc8\x3b\x62\x55\x67\x84\x45\xb3\x2d\xee\xe9\x31\xe1\x06\xc9\xff\xfd\x3f\xc1\x8c\x1a\x60\x6e\x6a\xb6\xad\xf2\x62\x33\x66\xad\x57\xf5\x6f\x8a\xde\x56\xc1\x7c\x45\x59\x0c\x1b\x5c\x28\xe5\x1b\x59\xff\xe6\x17\x68\x6e\x56\xad\x5b\xcb\x28\x8c\x7a\xbd\xcd\xcd\x73\x00\xfe\x12\x3a\x96\x85\x4e\xa3\x9b\xe2\x01\x9d\xfb\x17\x7c\x45\xa2\xa3\x07\x50\xdb\xf4\xd5\x0d\x0e\x25\xbe\x40\x42\x60\x06\x57\xa0\xb8\x3d\xfe\x9f\xf3\x9f\x7e\x8c\x8a\x05\x00\x92\x61\x83\xb4\xd8\xd0\x8a\xed\x40\x4d\xa7\x64\xe0\x22\x10\x56\x99\x89\xe6\xa7\x0a\x9c\xee\x34\x9a\x63\x8d\xe6\x98\xd6\x4b\x98\x77\xd1\xe0\x46\x79\x1a\xd7\xc2\xe8\x7e\xa1\xbe\xec\x05\x90\xab\xda\x8f\x59\x2c\xe0\x89\xcf\x7b\x80\x63\x45\x45\x84\x05\x20\x3f\x74\xac\xa8\x37\xf2\x8f\x61\xae\x4c\xf0\x5b\x0c\xba\x49\xde\x60\xa4\x9f\x38\xcb\x47\xd7\x08\x78\xe7\x94\x69\xa5\x94\xdf\x8e\xcd\xec\x23\xbf\x63\x47\xb5\xee\x3d\x61\x54\x85\xbd\x79\x61\xdc\x84\x58\x8d\x9e\xdc\xfe\x5b\xfc\x76\x87\xda\x2a\x1c\x9b\x05\x23\x72\x3e\x30\xd9\xec\x78\x47\x70\xe9\xc2\xab\xb3\xdb\xb5\xbf\x7a\x6e\xab\xa1\x09\x6d\x88\x9e\x5b\xd2\x09\x65\x98\xc6\x8c\x5e\xf9\xd3\xbb\xc9\x3a\xe1\x02\x17\x01\xa6\x70\x89\x72\xfe\xf3\x0b\x31\xf0\xe4\x98\x4b\xf3\x8b\xe2\x1d\xb7\xb4\x30\x8b\x1a\xf5\xb9\x6b\x5c\x12\x71\x0c\x35\x37\x31\x25\x78\x91\xfb\x1c\x63\x60\x09\x33\xe7\x87\xdd\x75\xe8\xa2\xa5\x11\xcc\x13\xf1\x61\x52\xbf\x3c\x11\x5e\x10\x49\x84\xe8\x63\x48\xc0\xc7\x97\x1b\xaf\x29\x65\xf1\xf1\xf5\x9c\xcc\xc1\xd8\x94\x37\xcc\x3b\x0c\x1c\x1e\xb3\xe9\x58\x75\x77\xa2\x0f\xb3\xdd\x73\x18\x80\xd7\x1c\xf3\x98\x10\x07\x76\x30\x19\x66\x2d\xbc\x62\x6a\x00\xfa\x2d\x7f\xac\xea\xce\x5c\xe6\x9b\x09\x65\xe7\x28\x41\x50\x11\x3a\xd8\xc7\xc5\xaa\xb4\x83\x5d\xb0\x5a\x97\x5c\xcc\x1a\xbf\x18\x47\x8c\x43\xff\x55\x9d\x55\xe9\xeb\x0e\xfb\xfd\x00\x2f\x81\x3c\x88\xd4\x5e\x56\xa2\xfe\x4c\xb8\xcd\x64\xdb\xf6\x36\x7b\xea\x28\xdf\x0c\xf7\xe6\x8c\x92\xeb\x4e\x77\xe8\x2c\xe8\x2a\xcd\x5f\xcb\xb3\x88\xde\x88\xde\x14\x17\xf4\xbc\x98\x5d\xb5\x36\xe6\xae\x1b\xa4\xd9\xad\x0e\x8e\xd3\x11\xd5\x09\x57\x6c\x6c\x75\x8f\xa3\x6e\x67\x1e\x77\x12\x42\xa9\xbf\xb5\x99\x98\xdc\x18\xe2\xac\x28\xa9\x95\x3b\xaf\xa4\xc4\x29\x8b\x11\x4a\x7c\x72\x72\x42\xd8\x4a\xbb\xcf\x2c\x15\xc9\x47\x86\xfd\xe2\x3a\xe7\xf3\x87\x9a\xcc\x54\x43\x4d\x21\xb3\x1d\xdb\x74\xea\x9a\x34\x19\x89\x7a\x6c\xed\xbb\xbb\xc1\x61\x92\xfb\x0d\xe3\xd9\x32\x3e\x35\x5c\x99\x78\xbd\xb8\xb4\x96\x81\xf8\xbc\x17\xb6\x95\x4e\x6e\x76\xae\xab\x3b\x61\x44\x97\x5a\xa9\xd9\x75\x45\x5d\x41\x15\x67\x7b\xea\x8c\x6a\x9a\x79\xce\x9e\xb0\xdc\x0c\xf0\x11\x63\xce\x6e\x54\x74\xa5\xbd\x49\xf3\x82\xb9\xe3\xa9\xae\x13\x33\xf9\xfd\x86\x30\x73\x53\xce\x79\xe1\xf6\x3a\xc5\x3c\xbf\x01\xbc\x20\xe4\x1b\xc0\x7b\xd8\x49\x3c\x88\xd2\x3f\x8f\x85\x2d\x1c\x3a\x8d\x9b\xe3\x4d\x07\x95\x53\x92\xe7\xa9\x36\x42\x19\xb4\x5b\xe7\x5d\x01\x4e\x49\x81\xd7\xcd\xbf\x15\x82\xe5\xd0\xdd\xe4\xc7\xe8\x4f\x8f\x21\x1c\x37\x7f\x19\xd6\x9c\x7a\x6d\xa0\x74\x0f\x55\x3d\xbc\x27\x6c\xd3\xee\xb8\x9a\xcc\x71\x91\x91\xcd\x22\x21\x1d\x4f\x79\xef\x26\xa8\x49\x82\xb8\x18\x74\xe6\xd2\x66\xfa\x8d\xbc\xde\x12\x27\x69\x56\x71\x0c\x12\x85\xc6\x40\x40\x7d\x74\xf4\x0c\xec\xf0\xf6\x6b\x3a\x36\x0f\x91\xd3\x97\xf7\xa8\x67\xa8\x51\xa7\xd3\xd0\x83\x34\x2b\xe2\xc9\x48\x21\xde\x28\xcb\x68\x36\x90\xcf\xf4\xe0\x78\xbd\xa1\xe8\x03\x78\xfb\xbd\x18\x88\xd4\x79\x73\xc1\x3b\xbf\xcd\x20\xfe\xd0\xee\xcc\xd2\xed\x61\x72\x9e\x8e\x40\x78\x68\x25\x22\x74\x14\x1d\x74\xf1\x0c\xed\x4d\xe1\xa0\x56\xfe\xe8\x33\xcd\x21\x2d\x3e\x84\xad\x31\xa2\xae\x41\x37\x0e\x31\x87\x95\xf5\xa7\x7e\xf7\xad\xef\xfa\x06\xc5\x76\x0e\x86\xd7\xcc\x59\xfc\x4c\x5c\x83\xed\x17\xca\xe0\x18\x4f\x73\x59\xc3\x09\x01\x0f\xc0\x68\xbf\xcc\xbb\x07\xc8\x45\xab\xb9\x25\xfa\x98\x31\xb2\xc3\x3b\x58\xbd\x1d\xc1\x36\xe5\xfb\x1e\x70\xf8\x91\x37\x44\x03\x5b\x84\xed\x02\x32\x68\x65\xdc\x3e\x65\x1b\x4e\x96\xb8\x47\x3c\x18\xf9\x44\x23\xa0\x0d\x7b\xdc\x0c\xc4\x3d\x9a\xa3\xe7\xa2\x60\x45\x5e\xa4\xdf\x9c\x7f\x0b\x1d\xf1\x73\xf3\x6d\xc8\xef\xa5\x47\x56\xc9\x56\x5c\x07\x23\x2b\x08\x09\x55\x6e\xff\xd6\x5d\x12\x10\x9f\x26\x09\x99\x41\x4f\xa4\x31\x6c\x95\x3f\x8b\x4f\x62\x72\x8b\xb1\x34\x2e\xe2\xeb\x29\xcd\x48\x9d\x93\x1d\x5f\xc1\x53\x71\x38\xdd\x09\xc9\x19\x45\x5e\x22\x61\x35\xf4\x9d\x4d\x26\x50\xbb\x8e\xf9\x47\x4d\x12\x3e\xa7\xa9\x88\x74\x84\xc7\xc1\xf9\x68\x86\xe0\xb3\x00\x8a\x54\x5b\x99\x8d\x0f\x3f\xcb\x60\xaa\x61\x67\xa9\x71\x25\xb4\x43\x47\x57\x36\x93\x48\x12\x75\x4f\x85\x57\x0d\xa2\xf9\xae\xb4\x20\x86\x9d\xf6\xf9\xea\x2b\xed\xef\x7a\x68\x83\xe2\xe8\xf6\xb1\x72\x99\x26\xd5\xba\xa5\x7a\x4d\xd3\xd5\xba\x9a\x40\xb9\x7e\x72\x26\x12\x8c\x34\xf4\xa9\x31\x26\xb3\x12\x26\x49\x2a\xb3\x33\x89\xbb\x02\xa5\x8c\xa5\xa7\x5e\x67\xba\x5c\x7e\xfd\x13\x6a\x70\xb4\x62\x24\xa0\x92\xed\xba\xce\xb2\x28\x23\xbb\x82\x13\x2b\x92\x8a\x42\xfe\x17\xba\x24\x75\x56\x81\x87\xb5\xe2\xba\xbc\x5f\xac\x00\x01\x06\xec\xf7\xfc\xb7\x11\x9d\x8f\x45\x76\x62\x9b\xcf\x61\x8b\xb0\xac\x6e\xec\x11\xa2\x83\x86\x53\xf3\xe8\xfd\x82\xea\x8d\x4a\x2b\x26\x69\xf3\xb1\x87\xf5\xcf\xfa\x3a\x84\x3f\xbf\x08\xf6\x84\x41\xad\xe4\x61\x1c\xb9\x65\xba\xca\xe5\xc1\x8e\x20\x3a\x2d\xd5\x30\xf0\x52\x0d\x07\x3d\xc1\x51\xab\x0a\x21\x81\xa0\xdf\x07\x34\xa3\x1b\xbc\x9c\x87\x63\xb7\x49\x08\xa3\xae\x65\xeb\xb1\xd3\x3a\x39\x61\x81\xd3\x23\x82\xa5\x9f\x70\x8d\x52\x0a\xa1\x16\x51\x04\x12\x53\x44\x56\x24\x85\x97\xeb\x42\xa5\x01\xba\xe9\x4c\x02\x69\xe6\x89\x6d\xc6\x0c\xa4\xd1\xd0\x17\xe4\xf1\xb9\x00\x0e\xb4\x8c\xcd\x6e\xc1\x52\x7a\x07\x76\x83\x7d\x76\x81\x0e\x20\xeb\xa5\x49\x91\x30\x7e\xe0\x09\x31\xf1\x64\xa4\x78\x31\xd2\xcc\x0e\xdf\xdb\xfe\xbb\xb6\x48\xe7\x9b\xf5\x06\xe0\x07\xa5\xa0\x94\x69\xc8\xed\x53\x1b\x4b\xe1\xbf\x8e\x16\xee\x55\x70\x68\x93\x8a\xc7\x65\x35\xca\x1a\xaa\x17\x3b\x76\xa3\x13\x74\xc8\xfc\x1e\xce\x75\x91\x24\x6a\x2c\x8a\x93\x60\x79\x94\xa8\x06\xa6\x3f\x98\x39\x49\x94\x07\x01\x07\x9e\xd5\x8c\xba\xe0\x36\x69\x35\xe3\x86\x7f\xb6\x20\xf1\x3b\xe5\x47\x0c\x37\xa9\xc4\x51\xe7\x5f\xe6\x30\xb5\x6d\x06\xbb\x71\x3b\x5b\x6b\x4d\x04\xac\x7f\x63\xcc\x09\x88\x31\xf2\xcf\x57\x71\x47\xf0\x7c\x9c\x6a\xfe\xa4\x73\xe1\x86\x6c\xd7\x60\x01\xbf\x2b\x1b\x02\x0e\x40\x18\x02\xec\x50\xf7\x12\xd5\xa9\x93\x17\x80\xef\x25\x2f\x1d\x47\xa6\xb0\x6c\x32\x7a\x50\x22\x1b\xa0\x1d\x42\x5d\x73\x6b\xc2\x3d\xf0\xab\x43\xbc\x5a\x7f\xee\x7d\x61\x38\x90\xa2\xf9\x48\x8a\x2c\x20\xae\xf9\x5d\xe1\x73\x6f\xa8\x80\x6e\xb0\xef\xc3\xf2\x1e\xaf\x02\xab\x87\x80\xf7\x7a\x19\x58\xb6\x39\xb5\x73\xa6\xd7\x0d\xd8\xcd\x06\xde\xba\xbe\x75\x83\x2f\x94\xa2\x3b\x34\xf8\x76\x77\x61\xf0\xf9\xbd\xd8\x03\xb7\xbe\x79\x5b\xa9\x96\x8c\x7c\x71\xd8\xee\x13\x1f\xc8\x49\xe3\xc5\xe6\x96\xaf\x4c\x60\xd2\x48\x77\x2c\xd1\x56\x47\x7d\x98\x70\x85\x0a\x38\x56\xac\xd0\x6a\xb4\x3c\xc7\x4a\x13\x90\x1c\xe3\xb5\x17\x3e\xca\x68\x2e\x03\xd6\x35\xe1\x88\x68\x26\x8c\x80\x86\xcb\x92\xb3\x2f\x8e\xbf\x38\x1a\x25\x77\xc0\xd0\x48\x3d\x9c\xa7\x9e\xda\x3c\x2c\x6a\x9f\xfe\x06\x4e\x9a\x5e\xba\xc5\x50\x07\x0d\xfc\x5c\x8f\xb5\xd3\x6b\xf0\x21\x0c\x1c\x0f\x52\xe5\xa0\xe7\xa2\x4c\x68\x9c\xc1\x23\x26\x17\x84\x45\xc9\xd7\x98\x57\x04\x1e\xb8\x7a\xd4\x96\x48\x4f\xfd\xa7\xc9\xd7\x9f\x4a\x32\xa5\xd8\xff\x83\x37\x78\xc4\x61\xfc\xbf\x00\x00\x00\xff\xff\x4e\xc4\xb8\x78\x7a\xc5\x01\x00") + +func uiTsTypingsD3D3DTsBytes() ([]byte, error) { + return bindataRead( + _uiTsTypingsD3D3DTs, + "ui/ts/typings/d3/d3.d.ts", + ) +} + +func uiTsTypingsD3D3DTs() (*asset, error) { + bytes, err := uiTsTypingsD3D3DTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/typings/d3/d3.d.ts", size: 116090, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTypingsJqueryJqueryDTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x6b\x73\xdc\xc6\xb1\x30\xfc\x5d\xbf\x02\xc5\x4a\x95\x96\x7e\x96\x54\x7c\xce\x79\xea\xe4\x50\x8e\xf5\xd0\x14\x6d\x33\x91\x44\x1d\x91\x8a\x9d\x72\xb9\xde\x02\x17\xb3\x24\x2c\x2c\xb0\x01\xb0\xa4\x18\xdb\xff\xfd\xed\xdb\xdc\x70\x5b\xec\x95\x5c\x59\xf9\x10\x53\x0b\x60\xa6\x6f\xd3\xd3\xdd\xd3\xd3\xfd\xec\x59\x70\x79\x3f\x55\x41\xa4\xc6\x71\x1a\x97\x71\x96\x16\xc1\x38\xcb\x83\x5f\xfe\x77\xa6\xf2\xfb\xe0\xcb\xc3\x2f\xff\x7c\xf8\x31\x78\x16\xfc\xc7\x21\xfc\xf7\x09\xbc\xfd\x36\xcf\x7e\x51\xa3\xf2\x28\xb8\x29\xcb\xe9\xd1\xb3\x67\xbf\xfc\x0b\x5f\x3c\x1c\x65\x93\x67\xf8\xf8\xa5\x33\xce\xd5\xfd\x51\xf0\x4d\x96\xc7\x45\xf0\xcf\x30\xfd\x90\xdd\x06\x5f\xe1\x37\x05\x7c\x74\x1d\x97\x37\xb3\x2b\xfa\xe8\x0a\x5f\xb8\xa7\xe7\xcf\xbe\x1e\x06\x27\x37\xf0\xcf\x32\x0e\xd3\xe0\xfb\x6c\x3c\x9e\x28\xf8\x87\xca\x1b\x3f\x1c\xdd\xd8\x17\xe0\xc3\x8b\x52\xdd\xaa\xe0\x5b\x95\x96\x59\xda\xf8\x3e\xbd\x70\xc0\x2f\xc0\xfb\x2f\xe3\x59\x92\xa8\x38\xf8\x2e\x9b\xa8\xa2\xf1\x03\x79\x03\xde\xbd\x0c\x8b\x22\x38\x4b\xe2\x6c\x9a\xcd\x92\xac\xf9\xed\x32\x2c\xb2\x38\xc1\xb7\xff\x06\x7f\xa5\xc1\xc5\x9d\x0a\xf3\x38\xbd\x56\xcd\xd0\xfc\x82\x2f\x15\x07\x69\x76\x1b\x26\x2a\x1c\x23\x02\x0a\x91\x8e\x93\xa4\xf1\xfd\x02\x9e\x16\x1f\x70\xf8\xef\x66\xb3\x02\xa0\xce\x8a\x42\xa5\xcd\xa0\xc0\x1b\xff\x86\x17\xff\xae\x92\xe4\x3e\xb8\x98\x4d\x26\x2a\x4f\xe2\x66\x30\x3e\x14\xfa\x31\x7c\xf0\x4d\x58\x84\x79\x58\x06\xc7\x49\x1c\x5c\xdc\xab\xa8\x99\x5f\xfc\x12\xbc\xfe\x26\x06\x16\x24\x61\x11\xfc\x90\x25\xb7\x2a\x2f\x5a\xe8\x9e\xde\xe9\xc7\x48\x75\x95\xab\x0f\xc1\x49\x3c\x52\x79\x96\xaa\xc6\xf7\x23\x7c\x65\x24\x6f\xc0\x27\xc7\x69\x94\xab\xbb\xe0\xbb\xb0\x98\x86\xcd\x92\xc0\x6f\xf0\x0b\x44\x7f\xe4\xe8\xf7\x61\x0e\x92\x04\x30\x7d\x1b\x17\x37\x2d\x22\xf4\x0b\xbe\x79\x33\xa6\x17\x88\x03\xf1\x07\xc0\x29\x0e\xfe\x9e\xa5\x51\xd6\xc2\x06\x7e\x05\xa9\xa5\x52\xf8\x1e\xe8\xfa\xb7\x70\xf4\x61\x12\x36\x23\x7f\x25\x2f\xfd\xc2\xef\xc0\x67\x6f\x41\x84\x82\x8b\x2c\x07\xe6\xb5\x88\x46\xf1\xe7\xff\xf9\xcf\xff\xf8\x9f\xff\x42\x4c\xb2\xe2\x06\x04\x3b\xcf\xae\x9a\x85\x02\x9f\xf3\x63\x7a\xf9\x26\x0d\xde\xa9\x18\x99\xde\x88\x2c\x3c\x4f\xef\x73\x7a\xe1\x19\x2d\x80\xd1\x87\xe0\x16\xe0\x8e\x00\x8e\x6f\x40\x54\x3f\xb4\xac\x82\xd1\x87\xdb\x88\x9e\x7f\x5d\x59\xe0\xac\x03\x3a\xd6\xb3\xbc\xab\x92\x7b\xd4\x31\xd1\x93\x27\xcf\xbe\x08\xbe\x58\xe7\xff\x9e\x9c\x64\xd3\xfb\x3c\xbe\xbe\x29\x83\xc1\x68\x3f\x78\x1d\x8f\xf2\xac\xc8\xc6\x65\x70\x92\xe5\xd3\x0c\xc4\x14\xc0\x3c\x04\x79\x4e\x02\x7a\xa9\x08\x72\x55\xa8\xfc\x56\x45\x87\x4f\x5e\x81\x84\x01\x0b\xa2\x60\x96\x82\xc4\x05\xe5\x8d\x0a\x8e\xa7\xe1\x08\xfe\x23\x4f\x86\xc1\x3f\x40\x6a\x61\x00\xd4\x7d\xc1\x00\x5f\xd8\x93\x47\x7b\xfb\xcf\x83\xfb\x6c\x16\x4c\xc2\xfb\x20\xcd\xca\x60\x56\xa8\x27\xe5\x0d\xe8\xb9\x71\x9c\xa8\x40\x7d\x1c\xa9\x69\x19\x80\x64\x00\x3d\xa6\x09\xe8\xb2\x91\x0a\xee\x80\x42\x34\x89\x0c\x71\x18\xfc\x53\x06\xc8\xae\xca\x10\xde\x0d\xe1\xed\x29\xfc\x6b\x8c\x6f\x69\xe8\x02\x58\x8d\xa2\x67\xef\xee\xee\x0e\x43\x02\xf0\x30\xcb\xaf\x9f\x25\xfc\x42\xf1\xec\xd5\xd9\xc9\xe9\x9b\x8b\xd3\x03\x00\xf2\xc9\x93\xcb\xef\xcf\x2e\x82\x93\xf3\x97\xa7\x01\xfc\xf7\xed\xbb\xf3\x7f\x9c\xbd\x3c\x7d\x19\x7c\x71\x7c\x01\xff\xfe\x22\xf8\xe6\xf8\xe2\xec\x62\x18\xfc\x70\x76\xf9\xfd\xf9\xfb\xcb\xe0\x87\xe3\x77\xef\x8e\xdf\x5c\x9e\x9d\x5e\x04\xe7\xef\xe0\xab\x37\x2f\xcf\x2e\xcf\xce\xdf\xc0\xbf\xbe\x0d\x8e\xdf\xfc\xf3\xc9\xdf\xcf\xde\xbc\x1c\x06\xa7\xf0\xf6\xe9\xbb\xe0\xf4\xc7\xb7\xef\x4e\x2f\xe8\xcd\xb3\xd7\x6f\x5f\x9d\x9d\xc2\xa3\xb3\x37\x27\xaf\xde\xbf\x3c\x7b\xf3\x9d\x19\xf2\xd5\xd9\xeb\xb3\xcb\x63\x1c\x05\x47\xd0\x6f\x3e\xe9\x9a\xe9\xf2\xec\xf2\xd5\xe9\x30\xf8\xf6\xec\xf2\x0d\x8e\xff\x2d\xbc\x70\x1c\xbc\x3d\x7e\x77\x79\x76\xf2\xfe\xd5\xf1\xbb\xe0\xed\xfb\x77\x6f\xcf\x2f\x4e\x87\x4f\x5e\x9f\xbe\x3b\xf9\x1e\x46\x39\xfe\xe6\xd5\xd9\xe5\x3f\x71\xa0\x37\xe7\x6f\x0e\xce\xde\x7c\xfb\x0e\x20\x38\x7d\x7d\xfa\xe6\xf2\xf0\xc9\x93\x0b\xa5\x5c\x56\xba\x1c\xd4\x24\xc5\xdd\xad\x98\xaa\x51\x3c\x8e\x47\x41\x12\xa6\xd7\xb3\xf0\x5a\x05\xd7\x19\xe8\xa8\x14\xf4\x75\x30\x55\xf9\x24\x2e\xf0\xb3\xe2\x49\x98\x46\x41\x12\x4f\xe2\x32\xe4\x1d\xcd\xca\x8a\x66\xe3\x93\xb5\xca\x73\xf0\xc5\xb3\x27\xb8\x4a\xbe\x78\x12\x7c\x11\x9c\xa5\xb0\xb3\x8d\xc3\x11\x83\x4c\x58\xfd\xed\xf8\xc7\xa0\x50\x65\x89\x70\x96\x37\x20\x1c\x77\xb8\x5f\x8c\xb2\x74\x1c\x5f\xcf\x72\x65\x5f\xca\x15\x6c\xcb\x45\xf9\x04\x07\x8c\xcd\x38\x7f\xa3\x4d\xfd\xf8\x97\xf0\xe3\x05\x0f\x52\x04\xbf\x3e\x09\xe0\x7f\x34\x23\xfe\xef\x8b\xe0\x12\x86\x80\x01\x4b\xd8\x27\x83\x12\x2d\x83\x02\xff\x02\x01\xc5\xb1\x65\xd8\xe0\x46\x85\x4c\x08\x00\x01\x96\x77\x52\xd0\x53\x5a\x5a\x79\x70\x87\xbf\x7e\x88\x81\x74\x20\xcc\xb0\xe0\xa6\x19\x92\x3d\x16\x60\xc3\x91\x5e\x1d\xb9\x2a\x67\x39\x2c\xcf\x33\x12\x79\x79\x50\x18\xfc\x52\xa5\xa2\x22\x98\x64\x11\x32\x8a\xe8\x3f\xc4\x41\x62\x5c\xc4\xb0\xb0\x26\x0a\x78\x11\x05\x65\x16\x80\xaa\x2e\xb2\x20\xc3\x55\x26\x60\xfe\xe9\x30\x64\x1c\x67\xd3\xc1\x7e\x30\x51\xe5\x4d\x06\x2b\x9e\x11\x7c\x46\xff\x95\xc9\x5e\x1c\x05\x61\x7a\xff\xbc\x4a\x83\x6f\xee\xd1\x1e\x0a\x67\x49\x39\x0c\x42\x54\x1e\x8c\x76\x11\x84\xb9\xd0\x23\x2c\xee\xd3\xd1\x0d\xec\x50\xd9\xac\x00\x7d\x3b\x88\x0f\x61\x45\x93\x0a\x88\x09\x03\x84\xab\xcc\x67\x0a\x6c\x20\x3d\xd4\x3e\x61\x8a\x6a\x03\x31\x0b\x9c\x01\xcc\xf8\x43\xfe\x14\x87\xc9\xa6\x88\x31\x0e\x33\x0e\x13\x54\x17\x27\xa0\xd9\x8a\x83\x28\x9b\x84\x44\x3a\x0d\x10\x50\x39\x0a\xcb\x10\xf5\xeb\x51\xb0\xf7\x0b\x6c\x78\xd3\x3d\xfb\x18\x48\x83\xfa\xa9\x98\x4d\x41\x1b\x96\xde\x9c\x19\xc8\xb9\xe8\xc7\x37\x59\xa9\x98\x97\x4d\x40\x91\x92\x2a\xd5\x04\xf5\x69\x1e\x03\xb2\x49\x06\x1b\x07\x92\xf9\x2a\xcf\xee\x80\xe7\xc3\x20\x8a\x8b\xf0\x2a\x41\xa6\x01\x35\x81\xb6\xbc\x58\xee\x6e\x50\x1b\xba\x62\x03\x78\xe1\xc3\x5b\x40\xe7\xb8\x40\xe9\x30\x56\xe6\x5f\x86\xf4\x22\x28\x52\xfc\x99\xa8\x7b\xc4\x98\xb3\xe6\xfc\xe5\x5f\x3f\x7e\xff\x2e\x18\xfc\xe9\x10\xb6\x14\x95\xe7\x2a\xda\xc7\xc1\x22\x35\x05\x59\x08\x4b\x15\x89\x3e\x9e\x15\xa4\x8c\x59\x1a\x67\xc0\xe3\xa2\x78\x06\xaf\x67\xf9\x33\x52\xc5\x0a\xf0\x1c\x01\x43\xaf\x60\x37\x16\x0a\x03\xc3\x52\xb0\x20\xc3\x48\x34\x2f\xc8\x7e\xce\x32\x1b\x21\x3e\x2c\x3b\x85\x7e\xc8\x60\x64\x57\x68\x01\xe3\x04\x37\x00\x2a\xff\x78\x18\x81\xb5\x02\xc2\x26\x2b\xd5\x42\x26\x8f\x05\x9a\xc1\x7e\x45\x0e\x11\x53\x90\xc2\xab\x2c\x03\x33\x30\xad\x49\xe2\x71\x00\xe3\x1c\x68\xfa\x19\xd8\xc7\xb3\x74\xc4\xf2\x81\x5c\x1b\xc1\x26\x7e\x45\xc4\xa3\xf5\x40\x4b\xe6\xde\x81\x77\x00\x12\x63\x28\xfd\x5f\x87\x1f\x87\xc1\x8f\xaf\x5f\x7d\x7f\x79\xf9\xf6\x1d\x8f\xbb\xaf\x31\xba\x52\xa0\x69\x94\xac\x32\x94\xf3\xc3\xe0\x3d\x51\x13\xfe\x09\x03\xa3\x70\x8e\x80\xc4\xd9\x44\x14\x00\x08\xac\x2a\x47\x87\xa4\x33\x78\x2a\x94\xc7\x42\xeb\x16\x1e\x95\x57\xcd\x14\x4c\x68\x00\x2f\xc4\x7f\x5d\xcf\x60\xf1\x96\x05\x7e\xc7\x0b\x06\xe0\x47\xa5\x14\x9c\xde\xd2\x9c\xef\x48\x31\x20\xf9\x59\x02\x64\x55\x33\x74\x17\xb0\xee\x2d\xfe\xac\xff\x70\x87\x4d\x5c\x49\xab\xc9\xd7\xff\x1d\x56\x87\x90\x05\x46\x03\x5c\xb1\x58\x00\x7c\xb9\xba\x0e\xf3\x28\x01\x4e\x69\x96\x93\x0e\x24\x45\xc6\x23\x7b\xec\xb3\xe3\xbd\x08\x06\x44\x81\x23\x51\xb2\xf0\xe7\xd0\x50\xe2\xa8\x41\xf3\xee\x37\xab\x1e\x50\x11\xa2\x3e\x08\xf7\xa1\xd1\x9b\x30\xd1\xc8\xe0\x07\x90\x4e\x61\xd7\x2a\x68\x75\xc3\xbb\x84\x00\x6c\x78\x11\xea\x1b\x67\x69\xf2\xda\x3e\x0a\x64\x52\x7e\xc9\x0c\xce\x03\x67\x29\xac\xe9\xbb\x2c\xff\xc0\xa2\x3f\x2a\xf1\x9f\xb8\xe6\xbe\x3f\x3d\x7e\x49\x0c\xfd\xee\xf4\xd2\x68\x03\x50\x62\x25\xbd\x8d\xee\x5d\x10\x4e\xa7\x8a\x17\xca\xde\xff\xf7\xd7\x5f\xcb\x18\xcc\xe9\x32\x9c\x4c\x7f\xdf\x23\xfd\x07\x53\xe1\xa7\x60\x95\x83\x9d\x0d\x7b\x50\xc1\x92\x62\xfe\x8d\xac\x47\x04\x50\x1f\x02\xe8\xb8\xcb\x65\x25\xda\xea\x48\xf3\xc2\x21\x3a\xca\x99\x31\xaa\xce\x4e\xff\x02\xaa\x45\xa1\xc5\x04\x86\xc1\x25\x0e\x32\x01\x61\xc4\x19\xc3\xe0\xfd\xbb\x57\xbc\x26\x6e\x50\xd2\x92\x1c\xc4\xf4\x1e\xa8\xa3\x52\x87\x72\x08\x37\x02\xe6\xb3\x92\x48\xd3\xb9\x12\xed\xa2\xcb\x1c\x89\x21\x50\x5c\x25\x87\x26\x2f\x38\x14\x45\x30\x08\xc7\x88\xa4\xac\x7c\xa2\x24\xe9\x22\xb3\x8c\x79\x65\xa8\x8f\x6a\x34\x03\xb8\xf6\x99\x3a\x66\x96\x6b\x05\x4b\x47\x96\x4d\x79\x97\xd9\x75\x73\xe4\xac\xb7\xde\x4b\x1b\x67\x0f\x83\xa2\xcc\x59\x0c\x4a\x75\x0d\x76\xfa\xbf\xd9\x8e\x00\x5d\x09\x06\xce\xcc\x88\xbc\xc6\x64\xb0\x27\xb0\xef\x0d\x83\x3d\x60\x14\xef\xc5\x2a\xc2\x7f\x12\x26\xf8\x07\x32\x3d\x9b\x95\xf8\x67\x08\xb6\x3f\xfe\x01\x28\xee\x01\x93\x41\xfe\xf8\xad\xfd\xb6\xe5\x68\x94\x72\x61\xe4\x33\xd5\x06\x02\xfe\x95\xe7\x21\x59\xc4\x9a\x26\x20\x40\xa7\xc0\xa6\xca\xf2\xb7\xbc\x40\x45\x41\x26\x45\xb3\x62\xf1\xf9\x2d\x73\x37\x2e\xdc\x52\x7d\x2c\x2f\x88\x26\x47\x42\xb3\x96\xe5\x7a\x9c\x6a\x02\x03\x98\xfc\xe6\x33\xd0\x21\xb3\x24\xcc\x0f\xd4\x47\xd0\xdd\x64\x48\x02\x1b\xe3\xbc\x60\xc1\x8c\x50\xf2\xc1\x23\x54\xc1\x4d\x76\xa7\x29\x42\x78\x10\xc9\x84\x01\x6c\x34\x0d\x83\x6b\xd8\x2c\x53\xd0\x01\x85\x67\x93\x1d\x06\x83\x5b\xb1\x6c\xc3\x08\x96\xce\x11\x92\x74\xbf\x82\x1e\xbd\x8e\x16\xce\xaf\xc1\x4f\x1f\xd4\xbd\x46\xe4\x67\x46\x24\xf8\x5d\x70\x79\x76\x3c\x82\x75\x4f\x6b\x18\xe4\x9a\xe1\x21\xf3\x09\x8c\xaa\x19\xaa\x9c\x51\x16\x01\x20\xf8\xcb\x53\x63\x96\xc0\x2e\x3e\x0b\xd1\xd1\x84\xff\x03\x45\xa3\x67\xa3\x48\x92\x6c\x14\xf0\x9f\x3d\xd2\x32\x7b\x32\xcf\x82\xce\xe2\x33\xb0\xc1\x41\x0a\x9f\xfd\xf7\x7f\xfd\x47\x95\xe8\x3f\xe0\x92\x2b\x44\xf1\xa0\xf5\xa3\xb5\x0d\x1b\xa0\x43\x31\x01\xe2\x2a\xd1\x5e\xb2\x21\x86\x82\xb1\x07\x9a\x2b\x11\xb3\xf2\xd9\xc7\x03\x70\xae\x0e\x40\xfd\x4c\x0e\x66\x79\xa2\x52\xc4\x18\x2c\x8a\xd1\x0d\x32\xa4\xfc\xeb\xfb\xcb\x6f\x0f\xfe\x02\x62\x0d\xf6\x0c\xc8\x1e\x79\x79\x29\xdb\xe4\x93\x8c\x36\x65\x70\xc3\x8c\x6d\x07\x4c\x87\x71\x63\x54\xa2\xb8\x76\x03\xf1\xec\x08\x8c\x83\x52\xe8\xc3\xf6\xe9\x60\x9f\x56\x41\x2a\xfb\x6d\x98\xdc\x85\xf7\xbc\xed\xfa\xf8\x04\x03\x45\x42\x30\x06\x65\xc9\xe8\xca\xee\x2c\x1a\xe3\x87\xff\x3c\xa1\x55\x0f\xe4\x95\x55\x6f\xfc\x1b\xc2\x0f\xcc\xb3\x11\xc8\xb2\x12\x01\xa4\x85\xc7\xa8\x39\xd3\x12\x92\xcf\xe5\xc3\x7b\x36\xe5\x58\x19\xeb\x77\x49\x46\x51\x5d\xf3\x4e\xe4\xec\x32\x08\x2e\xbc\x95\x5e\xf3\xaf\x44\x40\x18\xa1\xba\xde\x8c\x88\xb4\x58\xdd\xb4\x68\x65\x35\xe9\x85\xcd\x9a\x5d\xbb\x24\x1f\x69\x99\xa1\x45\x8e\xab\x1a\xcc\xa2\x84\x2c\x2c\xa3\x4f\x0f\x3d\xcb\xdd\xfd\x8c\x75\x81\x0c\x4e\x64\xc8\xd1\x42\x43\x2a\xb2\xef\xc2\x12\xaf\x2d\x17\x32\xa5\xc4\xec\xc0\xd1\xd1\xf2\x0c\x5d\xb7\x69\xa2\xf2\x6b\x54\xfe\xda\xab\x37\x5f\x6a\x85\xad\x99\xbc\xdf\x40\x85\x8f\x65\x0b\x05\xac\x36\xc1\xf7\xc0\xd0\xd7\x02\x8e\x54\x3b\x28\xb3\x03\xfd\x37\x3e\x07\xc9\xe0\x3d\x95\x54\xa2\xf9\x01\x16\xe9\x6d\x98\x80\xe7\x81\x28\x57\x0c\x45\xf6\xb8\x18\xe1\x32\x0f\xd3\x02\x65\x1e\xa0\xe5\x0f\x8c\xf6\x67\xe5\xd3\x4f\xc9\x08\x14\x73\xd5\x8c\x67\xe1\xe0\x42\xb9\x83\x4d\x92\x2c\x11\x92\x26\x58\x23\xe8\xdf\xbc\xf4\xdc\x9b\x60\xa0\x4d\xec\xbf\x5d\x9c\xbf\x79\x0b\x7b\x19\x73\xa4\x00\xf3\x21\x60\x4f\x48\x7b\x4c\xca\xe2\xe0\x0e\x24\x5e\x98\x6c\x08\xac\xac\x86\xb4\x74\xd5\xc7\x10\xf5\xff\x50\xd6\xd8\x41\x11\x47\x88\x7a\x14\xa3\x05\x24\x9b\xbc\x5e\x01\x3c\x55\x1f\x7a\xd8\xa9\x3b\x2c\x89\x97\xa2\xb1\xae\x54\xc3\x62\x27\xfb\x8a\x35\x17\x91\x36\x62\xbb\x86\x82\xec\x42\xda\x21\xab\x82\xd2\xd8\x37\x7a\x5f\xc7\x6f\x81\xfd\x6c\x94\xf1\x97\xe4\x54\xe5\x64\x3d\xa2\xc9\x73\x60\xcd\x38\x8c\x94\x4c\xf3\x0c\xb7\x77\x02\xc8\x3a\x9c\xb0\x2e\x6e\x09\x2e\xa2\xd9\x0c\xcc\x7d\x50\x23\x23\xfd\x32\xcd\x73\xce\x52\x4a\xfe\x16\xa0\xf1\x77\x75\xff\xec\x1f\x44\x7f\xda\xe8\x48\x19\x5a\x21\x84\x3d\x18\x37\xf2\xa1\xde\xec\x00\xd1\x38\x4c\xe2\x7f\x83\x42\x9a\xc0\x42\x8d\x81\x0d\xfc\x76\xc1\xeb\x89\xd8\x0b\xa2\x14\x5c\x85\xb8\x94\x84\xe9\x9e\x8c\x82\xf0\x46\x14\x83\x0c\x13\x63\x3b\x0c\x22\x55\x8c\xf2\xf8\x0a\x2d\x3c\x05\x8c\xae\xac\x3c\x5c\x3a\x6d\xcb\xae\x6a\xda\x69\x4f\x0a\x74\x5a\xa4\x5d\xd8\xf0\xce\xc6\x32\x48\x09\x03\x28\xbe\xd6\x3d\x34\x56\x07\x39\x6d\xe3\x38\x81\x95\x41\x5e\x8c\x33\x7a\x11\x62\xf0\xf4\xdf\xaa\xb2\xd4\x30\x18\x58\xdc\x64\xb3\x24\x92\x45\x2a\x82\xce\x2f\xb3\x8f\x5f\xb1\x0f\x75\xbc\xa4\xc1\x36\x44\x60\x09\x46\x1e\x0b\x6d\xeb\x1c\x9c\x36\x67\x4b\x41\x73\x10\xff\xf9\x54\x6b\x94\xa7\xd6\x2c\xaf\xd3\xed\x5b\x42\x05\x2c\x25\xfc\x07\xd1\x10\xb4\xeb\x3d\xfd\xd1\x62\x17\x5d\x3a\x9e\x13\xef\xd0\xa8\x7f\x60\xdd\x3f\x25\x8b\x77\x8a\x8b\x0c\x28\xc3\xce\xac\x0f\x1b\x49\x4f\x8a\xa7\x03\xb8\xcd\xf1\x46\xa6\xa2\xa1\x67\x2a\x95\xf0\x07\x10\x33\x4e\xc7\xe8\x45\x94\xbe\xa4\xbc\x3e\x7b\x7d\x6a\x26\x77\xc9\x0c\x16\x79\x8a\x3c\x73\xde\xa0\xd1\xee\x63\x05\x74\x87\x07\x43\xd4\xf9\x60\x47\x93\xbe\x71\x9f\x85\xc1\xdf\xc2\xdb\xf0\x02\xc4\x0b\x2c\x53\x56\xd1\xe6\xdd\x82\x7f\xa5\xb7\xc5\x96\x67\x6c\xe8\xf7\x21\x5b\xde\xe9\x3d\xac\x26\x40\x58\x19\xb7\xeb\x4a\x59\xee\xa0\xaf\xa2\xed\xcc\xc3\xa0\x46\x7e\xd9\x33\xf9\x85\xde\x8e\x49\xec\x1b\xf3\xe3\x30\x4e\x8a\x8a\x08\x81\xae\x53\x60\x60\xe2\x86\x90\x83\x3a\x58\xc0\xc3\xb0\x52\xbf\x6f\xe8\x61\xdc\x0b\x59\x88\xda\xb9\xd0\xac\x60\xe7\x87\x04\x21\x1b\x8d\x66\x18\xc5\x11\xe2\x88\xf2\x09\x13\x71\xf3\x10\x36\x43\xe5\x71\x80\xb2\xa0\xbf\x38\x0c\xde\x82\x8e\x8d\xaf\xac\xce\xd0\xc1\xd1\x42\x81\xce\x8c\x0c\x12\xc1\xe0\x4a\xa1\x52\x07\x17\x73\x96\x24\xfb\xe4\x6a\xb9\xce\x8a\x71\x60\xb4\xd7\x82\xa0\x78\x6e\xcb\x21\x1b\x9a\x78\x2a\x07\x0e\x95\x80\x4f\x70\xa0\x3f\x8a\xff\xba\xbc\x01\x03\xc8\x23\xa3\x22\xd7\x01\x6c\xe3\x00\x03\x6e\x84\x07\xb3\x81\x86\x60\x37\x6b\x68\x22\x47\x7b\xe0\x9d\x07\xdf\x66\xb3\x34\xda\x23\xa7\x89\x22\xbe\x48\x86\x0b\x5e\xa5\xa7\x38\xc9\xe1\x5e\x8b\xf7\xc4\x00\xad\xdb\x75\xe2\x80\x01\xa9\x32\x56\x7f\xc6\x4d\x97\x37\x91\xde\x23\x37\x18\x29\x0b\x00\xe9\xe7\xfd\x4e\x9b\xb6\x13\x38\xe8\xe1\x94\x11\x4a\x3d\x3d\x32\x8f\x07\x73\xdc\x34\x60\x24\x07\x16\xd0\x1e\x88\xaf\xaf\xe1\xcf\xeb\x24\xbb\x0a\xd9\x90\x0c\x78\xbf\x13\x74\xb5\x44\xc5\x85\x8d\x26\x5d\x52\x48\xcf\x78\x0f\x6c\x53\x5c\x38\x71\x1a\x7f\xdf\x54\x7a\x74\x33\x64\x12\x7f\x60\x1b\x13\x70\xc8\x4b\x64\x36\xff\x23\x9b\xb2\xfa\xbb\x52\xb4\x5a\x18\x36\x94\x72\x22\x56\x25\xb0\x87\x46\x61\x9e\x25\x20\xf8\x79\x8c\x11\x5a\x4b\xc5\xc2\x27\x23\xcf\xde\x15\xcc\x70\xdd\x56\xb0\x66\xf4\x5e\x2a\x71\x7d\xd8\x7c\x9f\xdd\xda\xfd\x9c\x5d\x3a\x5c\x5b\x49\x06\x50\xd2\x26\x6d\xa2\xc3\xb3\x42\xaf\xf3\x8a\x0f\x42\x06\x26\xae\x02\x26\x9f\x0c\xfd\xe3\xc1\x3b\x1d\x88\x39\xf8\x01\x06\x3a\xaa\x7e\x66\x5d\x12\xb2\xb2\x86\xc1\xd5\xac\x24\x07\x58\xd3\xbf\xf2\x3e\xc3\x29\x94\x62\x2f\x24\x82\xc9\x72\x60\xd0\x3f\x58\x41\x88\x1d\x2f\x21\x4b\x7f\xc1\x24\x05\xa9\x4c\x3c\xfc\xb9\xcb\xe3\x12\x3c\x14\xe6\x07\xe2\xd8\x1e\x76\xec\x61\x0a\xca\x6c\x0b\xd8\xc5\xc7\x68\x9d\x7a\x2a\x5b\x6c\x44\x8e\xc1\x8c\x67\x12\xaa\x8b\x2b\x9b\x1a\x46\xba\x34\xde\xc0\x0b\x71\xcd\x92\xb0\x28\x5d\xf9\xe5\xa5\x87\x41\x6a\x8c\x7f\x8d\x6e\xd4\xe8\x83\xe6\xdb\x2b\x78\xf5\xe0\xb5\xc4\x76\x04\x70\xeb\x2c\x1b\x3b\x4e\xc7\x23\xaf\xd3\x2c\xd7\x9f\xea\x97\xcf\xdc\x3d\x42\xe2\xc5\x6a\x74\x93\xc6\x30\x3f\x13\x99\x66\x64\x0d\xf9\x54\x95\xe1\xf5\x53\xbb\xb5\xeb\x98\xa5\x98\x26\x28\xe8\x61\x09\xaa\x6a\x96\xea\x80\x13\x9b\x3f\x1e\x7d\xe3\xb1\x86\xb8\x4b\xcc\x0d\x49\x69\xf3\x80\xb5\xa9\xd2\xdb\x38\xcf\xd2\x89\xd8\xdd\xb4\x09\x8f\xb2\xeb\x94\x8c\x2c\xd4\xc8\x49\x06\x6a\x6e\xb8\x07\x3e\xf7\xe1\xf5\x21\x7d\x8a\x67\xba\xc5\x3d\x08\xec\x04\xfc\x75\xed\x89\x0b\xb6\x51\x26\x31\x58\x33\x0a\x5a\x23\x30\x0e\x69\x78\x7b\xf6\x23\xfb\x6e\x86\xf0\xd0\x19\x63\x9e\x95\xd9\x28\x4b\x38\x02\x28\xc0\x01\x6f\x7d\x60\x08\x96\x23\x02\x60\x18\x7c\x71\x00\x1a\x50\xa5\x05\x9d\x83\xa1\xae\xbd\x8b\xa3\x6b\x55\x9a\xe3\xb3\xb8\x78\x85\xaf\x6f\xec\xf8\xac\x49\xe4\x0f\xbf\xf4\x85\x5e\x60\xe8\xe0\xc8\x39\x0c\x92\xc7\xda\xa7\xaf\x1d\x67\xa4\x68\xfa\x53\xc8\x84\x4e\xb2\x2a\x02\xcc\xa2\xa8\x37\x2e\xf1\xd1\xcd\xe1\xcd\x53\x3d\xdc\x53\x8d\x87\xf9\xe5\xaf\x2f\xc8\xbc\x2d\xf5\x66\xec\x7a\x53\xfa\x65\xf0\x92\x40\xa5\x67\xc1\xaf\x34\xf3\xd1\xd3\x2c\xa5\xfd\xeb\x55\x16\x46\x4f\x7f\x0f\xee\xc4\x34\x2f\x68\x07\x48\x03\xf7\x31\x8f\xae\xdd\x7e\xd7\x90\xad\xef\xdb\xf6\xf0\x56\x09\x8a\x95\x83\x3e\xbd\x8b\x14\xfa\x33\x52\x47\xa8\xa2\xe5\xab\xbd\x17\x1a\xab\x3d\x8d\x81\xcc\x8a\xb1\x6f\xdc\x58\x4a\x3c\xac\x2b\xe5\x01\x86\xc2\xf6\xfe\xfa\x62\x8f\x37\x35\xed\xf3\xcb\xc1\xdf\x59\x2a\x61\xb2\x10\x57\xf6\xbd\xf5\x41\x68\xc9\x3a\xa1\x2c\xed\x64\x13\xc8\x27\x9a\x6d\x82\xcc\x21\x98\x30\x8e\x43\xfd\x2b\xbf\x75\xa4\x15\x86\xf7\xcd\x51\xb0\xa7\xc1\x7f\x03\xbc\xde\x0b\x7e\xf7\x04\x88\xde\x6d\xf1\xd2\x2e\x38\x34\xd5\x25\x39\x88\x63\xe8\xdb\x1d\xbd\x44\x87\x1d\xbc\x14\xec\x16\x1e\xc7\x38\xbd\x14\xe3\xbc\x56\x29\x1e\x95\xb2\xa2\x92\x00\xa9\x78\xe9\xc0\x2c\xf0\x40\x42\xb4\x46\x81\xd6\x09\x50\x49\xb8\xa6\xbf\x01\x70\x66\xac\x05\x79\x60\xd0\xc2\xe5\x53\x00\x62\x12\x7e\x20\x55\xa1\xc2\x22\x66\x9d\x37\x09\xd3\xf0\xda\x3b\x2e\xe5\x23\x03\x50\x15\xb7\xb8\x60\x9c\x43\x03\x73\x90\x40\xe6\x05\x71\x40\x27\x93\xdc\x85\xac\xd8\x8a\x26\x62\xd1\x51\x05\xc5\x5e\xe4\x2d\x95\x12\xe8\x57\xc0\x47\x00\x42\x47\xf3\xf0\x24\x04\xa5\x07\x08\xe3\x9f\xfc\xd4\xc5\x19\x07\x33\xfb\x28\x8a\x9a\x13\x71\x32\x56\x94\x88\x09\x39\x4c\x1c\x43\x45\x79\xf3\x9d\x7a\x5f\xb0\x9c\x33\xf4\x1b\xed\x26\xb9\x01\x00\xf0\x20\xcc\x56\x5c\x97\x1f\x3d\x4c\xab\xb7\x3f\x01\x2f\x20\xd0\xb1\xd8\xcc\xd5\x48\xe8\xf0\x98\xa7\xbd\x54\x1e\xbe\x3d\xcf\x3f\x43\xe5\x70\x97\xe5\x91\x1b\x5d\x20\x23\xaa\x6a\xfa\xa4\x76\x57\xa7\xf0\x13\x7b\x0d\xa1\x9c\x1f\xcd\x30\x58\x5c\xea\xa0\x6e\xe3\x79\xa4\x9e\xa9\x1d\x1a\x37\x40\x4a\x8e\xb9\x68\x2e\x09\x96\xdd\xe8\xe0\x86\xc4\xf9\xdd\xb0\xe9\x80\xb7\x74\x5a\x14\x43\xeb\xd2\xca\x91\xdd\x0d\x8a\x81\xb6\xc2\xcd\x4a\x93\xa0\x91\x78\x7a\x6e\xcc\x31\x4e\x1b\x02\x5b\xe3\xb8\x2c\x1d\x8d\xa6\x4d\x3e\x2f\x7e\x3e\x3f\x74\xbf\x67\xa2\xf1\x66\x39\x90\xf5\x1a\xbc\x3c\x7f\xfd\x32\x1b\x91\x7b\x48\xa7\x54\x0c\x7a\x9a\xa5\x07\x16\x4e\x44\xbf\x23\x0f\xc3\x27\xb7\x8d\x9f\x75\xed\x79\x68\xb5\x11\xd0\x18\xe1\xd2\xc7\x85\x7b\xec\x36\xed\x59\x3b\x19\xc5\x9e\x64\x83\x6c\x8f\xa1\xef\x4c\x19\x9d\x40\x82\xa3\x13\x3d\xd0\x69\xd4\xe3\x98\xd8\x30\x39\xb2\xb0\x72\xf7\x48\x8a\xf7\xc9\x51\x29\xbc\xb0\x3f\x6c\x11\xe0\x9f\x63\xa0\x42\x47\x54\xd9\x85\x03\xbb\xcc\x0b\x7d\x1b\x1d\xfa\xbe\x70\x4f\x3a\x71\x98\x70\x44\x67\x9b\x30\x98\x0c\x41\xc6\x0a\x9d\x4a\x6b\x7f\xd1\x84\x6a\x43\x9e\x9d\xdc\x78\x3d\xf0\x04\x73\x4e\x78\x5a\x9f\xa6\xfc\xdb\x09\x43\xda\xb1\xaa\x5c\x0f\x26\x05\x96\xe6\xf1\x88\x97\x0b\x8a\x00\x2b\x49\xe3\xfb\xb6\x9e\xd8\x3a\x26\x74\x3d\xf7\x03\x07\x3a\x0c\xc6\xd5\x0c\x16\x6b\x8f\x0f\xdd\xb3\x53\x7c\xdb\x9d\x11\x15\xbc\xa1\x80\x3d\x02\xd7\xc4\xd0\xa7\xc2\x5a\x39\x3f\x47\xab\x32\x2e\xc5\xc4\xe0\x73\xa3\x54\xd4\xfc\x00\xac\xfa\x64\x46\x30\xfd\xe7\xc7\x8f\x26\x4a\xcd\xc7\x47\xf7\x73\xa7\xf2\x0f\x9d\x7b\xf8\x2e\x8c\xd1\x09\x20\xb4\x88\xfb\xd2\x2f\x0c\x45\x78\x83\x65\xda\x75\xd8\xdd\x14\x8c\xea\x0c\x67\x52\x48\x7f\x82\x86\x4f\x84\xda\xd2\x1e\x67\x6a\x7d\x46\xeb\xc2\x50\xe6\x79\x6b\xa8\x8a\x31\x7f\x6e\xc2\xa3\x8b\x85\xc0\xda\x8e\xb9\x35\xaf\x1f\xe0\x94\x5b\xa6\xae\x84\x6e\x1b\x62\x29\xd5\x88\x4b\x4b\x20\x05\x63\x1e\x61\x20\x61\x34\x22\xcc\x04\x80\x8b\x39\xf6\x56\xec\x9b\x60\x9c\x6f\x7d\x71\x9e\x89\xde\x68\x31\x47\x4c\xe2\x23\x7a\x20\x3e\x5f\x04\xc5\xe6\xb9\x1e\x2c\x23\xfa\x9d\x29\x2c\xf1\x2c\x42\x16\xe5\x68\x1a\xb1\x7e\x99\x66\xb1\x44\x5c\xf8\x4b\x3e\xad\x93\x94\x10\x5a\x53\x05\x98\xd3\x39\x4c\xc5\xba\xde\xcb\xe4\x03\xe8\x41\x83\x5f\xe7\x3a\x3b\xc3\x3d\xd2\x44\x95\x90\x52\xc8\x25\x55\xb2\xa4\xc3\xdb\x30\x4e\xd0\x60\xd2\x8e\xd4\x54\x47\x22\xd9\xee\x74\xdc\x76\x84\x39\x40\xa0\x6d\x46\x95\x44\x28\x38\xab\xea\xcc\x17\x28\x9a\x9d\x0e\x2d\x86\x4d\x91\x94\xca\x99\x28\xab\x86\x38\x05\x83\x28\x26\x7a\x80\x26\xad\xac\x32\xca\xc4\x41\x00\x9e\x8b\xf5\xa0\x73\xf3\x64\xa8\x89\x9a\x5c\xa1\x86\xa0\xd4\x3e\x0c\xa0\x91\xb2\xd1\xb1\x57\x82\xef\x5b\xd0\x31\xe3\xec\x63\xf0\x9f\x87\x7f\xfe\x3f\x14\x78\x18\xba\x81\x3e\x3f\xb6\x87\xc8\xa1\xc6\x27\x19\xc5\x5c\xac\x44\xa7\xd9\x08\xf3\x9e\xbb\xbb\x0c\xe1\x91\xcf\x52\xe3\x4c\xa3\xcb\x0c\xa2\x81\x11\x54\x4e\x99\x29\x6b\x6c\xf7\xa5\x5a\x9e\x81\x76\x02\xcd\x0f\x88\x34\x8a\xa9\xce\x5a\xa3\x34\xcc\xd8\x3f\x74\xd4\x39\x82\xde\x39\x52\x79\x9f\x90\x7d\x49\x7a\xc2\x9c\x52\x85\x75\x2b\xd3\xf9\xaa\x63\xdb\xbf\xac\x27\x8f\xb1\x9d\x0f\xda\x7a\xb0\x87\xa9\x4b\xbc\x7f\xe3\x4e\x0d\xaa\xdc\x09\x2f\xd2\x4f\x3a\x12\x7b\x4e\x72\x4b\x3b\x9b\x1e\x45\x92\x12\x6d\x1c\xf9\xed\xfb\x4b\xe2\xca\xcb\xd3\x57\xa7\x97\xa7\x43\x2f\xb4\x45\xfb\x39\xc6\xc3\x38\x92\x46\x3b\x06\x0a\xbf\x93\x17\x2a\xcc\x42\xe9\x62\xe9\xaf\x84\x13\xcb\x39\xf6\xad\xce\x2a\xb2\x67\xd6\xda\x1d\x05\x7c\xd9\xe2\xaf\xee\xa1\x35\x45\x05\xd6\x5b\xd7\x14\x80\x45\x4e\x1e\xd4\xc6\x4d\x68\x3d\x53\x3b\x34\xc6\x4d\xe1\x48\xb8\x0a\xcb\x96\x08\xa8\xde\x15\x24\x94\x56\xe8\x1d\xe9\x98\x72\x60\x7f\x94\x43\x54\xce\x65\xd3\xba\x25\x18\x9c\x9d\xee\x37\x6b\x01\x14\x04\x10\x60\xb0\x49\x6c\x14\x25\x33\xfe\x21\x88\x37\x18\xb4\x77\xb0\xa0\xd0\x0d\xc7\x9d\x33\x34\x6e\x58\x75\x24\xf0\xd6\xd3\x1b\x5c\xa8\x13\xce\x7f\x60\xb0\xc6\x60\xd3\x65\xe0\xdb\x7a\xe4\xf8\x78\x93\xcf\x4d\x56\xc0\xbd\x0b\x8f\xc9\xd0\xa3\x3f\xa0\xbf\xfe\x51\x0d\x1e\x1b\x33\x31\x0d\x11\xf7\xc0\xa6\xd1\x56\xa2\x07\xda\xa3\x9c\x71\xca\xb8\x7c\x8c\xac\x3e\x01\xbb\x07\x99\x17\x26\x76\x59\xd7\xce\x22\x8c\x46\xc2\x23\x72\x4a\x2b\xf4\x95\xad\xec\xc8\xd5\xf1\x80\x88\xa0\x67\x4a\xf4\x9f\xd9\x76\xc5\x1f\xc2\xeb\xb0\xb4\x31\x1d\x07\x70\xde\x2b\xc0\xe6\x3b\x39\x7f\x77\x61\xa7\xc4\x3f\x62\x0e\x29\x95\x12\x30\xa2\x60\xa9\xe4\x22\x8d\x93\x50\x42\x25\x72\xb6\x80\x37\xc0\x86\xc1\x9d\xb2\x01\x39\x09\xa6\x5b\x68\x0f\xbf\xfc\x3f\x3a\x24\x83\x84\xe1\x19\x58\x75\x49\xaa\x74\x5c\xf6\x72\x53\x81\x8d\xdf\x22\x63\x3a\x03\xd2\xbf\x77\x5c\x3d\x70\x33\x9f\x1b\x6f\x15\xe0\x63\x8a\x50\x46\x45\x45\xde\x86\xf2\xc6\x5b\x30\xda\x40\x7c\xbf\x82\xe9\xbe\x6e\xbe\x77\x70\xa8\x6d\x84\xd7\xe2\x55\x9b\xf0\x23\xed\x54\x36\x72\x53\x09\xcc\xc3\x6b\xb5\x88\x50\x25\xcd\xc3\xcf\x8b\x36\x3a\xc2\xf3\x2c\x75\x34\xbb\x6a\xc5\x1d\x7e\x39\xac\xd1\x40\xa2\xda\xac\xf2\xc4\xbf\x69\x05\x7e\x80\x02\x11\x3a\x16\x44\x50\xb3\x28\xe1\xe9\x1d\xec\x9b\xac\xa4\xf1\x5d\x37\xe3\x1e\xdd\xa5\x5b\x46\xdc\x42\x55\x3d\x29\xae\x4d\xaf\x43\x13\x73\xce\xc6\x4e\x1a\xb2\xa7\xe5\x99\x7e\xe5\xff\xc9\x96\x48\x36\xe3\x25\xe6\x53\x19\xa5\x6f\xf3\xba\xf5\xe1\x27\x5b\x96\x4e\x96\xaf\x16\x21\x3a\x7c\xb0\x6e\x88\x77\xc0\x40\x71\x41\x84\x03\xbc\x77\x0f\x2b\x3a\x9d\x1d\xd8\x99\x5f\x38\xd8\xdc\x66\x71\x54\x4f\x2f\x4a\x47\x72\xf7\x4b\x0e\x64\xb5\x40\xc0\x66\x5e\xea\xfb\x55\x81\x4e\xd7\xc7\xa5\x7c\x88\x47\xe3\x86\x59\xc5\x90\xf3\x84\x28\xa5\x24\xac\xdc\x52\xd8\xe7\xa5\x87\xb7\x80\x12\x4a\x92\x13\x99\x96\x6d\x69\x12\xa6\xf1\x74\x46\x49\x69\x98\xc5\x3e\xe6\xc8\x5e\x24\x57\x16\x0e\x71\xf3\x19\xb0\x8d\x5c\x51\xd2\x91\x2a\xe9\x78\xde\xdf\x76\xf1\x75\x84\xd3\x06\x4f\x17\xb6\xe2\x83\xbf\x7e\x4d\x64\x1a\xd2\xf9\xbf\x13\x19\x5b\xe6\x88\x15\xd3\x3d\xf4\x80\xfb\x47\x0d\xab\xba\xc6\x8c\xb7\x5a\xaf\x56\x6c\x03\x3a\x66\x8f\x9c\xcb\x41\x95\x33\xad\x13\x59\x96\xe4\xb7\x81\xb2\xc4\x70\x87\x47\x1b\xfd\x26\xda\xa1\x7a\x7f\xea\x52\x5f\x0c\xab\x91\xbe\x46\x0d\x66\xf6\xf5\x9a\x6e\x3a\x8e\x30\x7a\x64\x6f\x8e\xe4\x94\xd3\x09\x56\xee\x48\x1f\xf1\xdb\xe8\x2c\x45\xb5\xcc\xab\xe0\x1a\x19\xfb\x22\xa8\x2c\x27\xfb\xcd\xb1\xa3\xb5\x70\xf0\x9a\x47\x38\xe4\xa0\x27\xda\x6d\x2c\x69\xa4\xe9\xf5\xd6\xd4\x38\x9b\x2c\x9f\x28\x1a\x98\x79\x8e\x82\x6f\x65\x40\xc3\x3d\x8d\x73\x7d\x77\xff\xd4\x50\xfe\xe9\xe7\x06\xa4\x6b\xa9\x79\x74\x91\x49\x55\xd1\xe1\x78\x43\x94\x89\x17\xc5\x71\xcf\x09\x6c\x3e\x95\x54\x29\xfe\x7a\xd0\x67\x22\x93\x05\x2e\xa2\x6f\x29\x43\x13\xa2\xfb\x49\xd7\x16\x64\xcc\xa8\x71\xa6\x08\xa7\x32\xfe\x47\x75\x8e\x77\xb4\x6b\x90\x5d\x9f\x55\x27\xe1\x53\xa5\x06\xea\xe1\xd1\xd1\x7d\x1f\x0c\xf0\x49\xf3\xd8\x26\x29\x96\x93\xd7\x4d\x20\xa7\x45\x26\xcc\x73\x32\x01\x4c\xfa\x0e\x08\x05\x51\x02\x13\x14\xcc\x1b\x68\xef\x62\x56\x35\x71\x66\xbe\x28\x8c\xc1\x58\x1a\x1c\x1e\x1e\x3a\xb1\x24\x60\x5f\x3f\x49\x68\x67\xd0\x4d\x48\x54\x75\xee\x96\x48\x60\x06\xc4\x15\x38\x81\x30\xc3\x4e\x56\x87\xa4\x9b\x5b\x86\x9e\x76\x22\x3a\x08\x25\x22\x54\x48\xaa\xb3\x9a\x43\x27\xdf\xa9\x68\x5d\x73\xf2\xf2\x71\x40\x87\x55\x8a\x32\x04\x84\x74\x3a\x3b\x3a\x75\xdc\x34\x6f\x7e\x8a\xec\x22\x04\x62\x85\x5e\x29\x46\xe5\xb0\x95\x89\xc7\x96\xe3\xfe\xca\x36\xaf\x0c\x0d\x1b\x2b\x1c\xf4\x66\xac\xd3\x0f\xd3\x45\x06\x5e\x02\xf5\x30\x60\xe6\x2e\xc5\xd7\x3b\xc9\x09\x0a\xc9\x0d\x4e\x62\x27\x91\x1c\xb7\x1c\x43\xfc\x39\xaa\x8c\x2f\xcc\xea\x7f\x90\xbf\x12\xe6\x18\xbd\xcb\x2a\x89\x94\xb0\xa4\x8d\x5e\xf2\x34\x71\xab\x48\xbc\xc2\x8b\x96\x55\x55\x14\xcb\x75\x10\x49\x68\xa0\xf0\x8f\x3f\x11\xde\xcf\x5c\xab\x0e\xc2\x01\xab\x1a\x88\x7f\xeb\xa5\x7f\x7a\xee\x22\xa2\x92\x36\xbe\x8f\x68\x63\xda\xc4\x90\x3b\x14\x08\xbf\xbb\xdc\x0e\xfa\x49\xa3\xdf\xb8\xd6\xac\x01\x76\xcc\xd7\x82\xc4\x70\x16\x13\xb1\xe0\x94\x5d\x10\xba\x6c\xca\x1a\x0d\x4f\xde\xe4\x9d\xa9\xbc\xd3\x68\x99\x7d\x87\xa7\xe9\xf1\x48\x9b\x9a\x97\x0d\xee\x23\xda\x2b\x26\xdb\xae\xf9\xb8\x47\x5f\x1d\xd6\x1e\x1c\x39\xe1\x05\x16\x27\x01\xf3\x38\x57\xf8\x1b\xfe\x85\x39\x95\x25\x86\x28\x9d\xf0\x70\x1b\x23\xd0\x3a\xe7\xe4\x68\xef\xfc\x03\x29\x1e\x17\xed\x00\x38\x33\x57\x15\x29\x9a\xe9\x7a\x44\x27\x2f\x76\xc1\xb1\x19\x97\xba\x3b\xf1\xd5\xfb\xaf\x07\x16\x66\xf0\x02\xc8\xf9\x02\x65\x7a\x49\xaa\x94\x33\x6a\xb5\x32\x45\x53\xff\xfd\x6f\xbe\x95\xff\xfe\xeb\xa1\x03\x22\xfa\x11\xf0\x19\x87\x32\xbc\xef\x48\x39\x6b\xea\x79\x2f\xeb\x1f\x01\x99\xca\x07\x35\x97\xe2\xfd\xd7\x75\xa5\xf2\x99\xcf\x7d\xf8\xbc\x18\x93\xad\x83\xb8\x15\xb6\xe2\x74\x5f\xf7\x72\xd7\x44\x29\x3c\xd3\x1e\xb4\x55\x7c\x8d\x6a\x42\x26\xd0\x0a\xc9\xea\x89\x0a\x05\x7c\x8b\x81\xa3\x08\x00\x4d\xcb\x70\xe7\x54\x28\x21\xcb\xbf\x82\x8f\xdf\x9b\x11\x35\x24\x5f\x1e\xb5\x4e\xfe\x5b\xdb\x83\x9f\x7e\x26\x30\x0c\x32\x6f\x8e\xf8\x86\xcc\x57\xcd\x1f\xa0\x67\xdd\x32\x16\x3e\xfa\xe9\xe7\xaf\x1b\x57\x4e\x7f\xfa\x0e\x4d\x72\x5c\x2f\xfa\x22\x5d\x75\xa4\xaf\xb7\x7e\xb6\xc6\x86\x9b\x8e\xc9\x87\x57\x68\x1c\x56\x57\x6d\xe5\x18\x13\xdf\x43\x63\xa3\xed\x80\x60\x29\xad\xa0\x62\x39\x13\xe4\x25\x8a\x1a\xa1\xba\xa4\x6a\xce\x0a\xa5\x26\x6b\xfa\x17\x5f\xf6\xde\x80\x7b\xaa\x89\x46\x18\x9a\xe7\xfe\x8f\xe0\x5c\x6b\x0d\x27\x83\xdb\x99\x57\x83\x53\xb4\x19\x04\xcb\x02\x24\x7e\x36\x81\x33\xf0\xa1\xfa\xf2\x45\xdb\x7a\x98\x2b\xc5\xbc\x34\x7d\x1c\xd7\xbf\x32\x2e\xeb\x41\xaa\xd5\xb6\x94\xae\x2d\x63\x09\x39\xe9\xcb\x97\xaa\x70\x78\xd3\x6d\x47\x34\x2a\x21\x09\x0c\xa8\xba\x50\xb4\x8b\xc2\x7c\xd5\xe8\x8e\x33\x47\x06\x3a\x07\xdb\x28\xff\xbb\x35\x85\x1b\x6f\x5d\x2b\xff\x9b\x95\x83\x37\xdd\xa6\xf9\xdf\xa4\x0e\x28\x88\xee\x42\xb1\xaa\x2a\xf0\x30\x7a\xac\x8a\x40\xe7\xf9\x16\x36\x93\x24\xcd\x4a\x93\x72\xdf\x6a\x50\xea\xb7\x4f\x16\xf2\xe4\xba\x41\xea\x0b\x8b\xc9\x5d\xa4\x77\x06\x55\x50\x56\xe5\x5b\x75\xbc\xcd\xb0\x8e\x79\x87\xe5\x08\x4d\xa1\xa5\x03\x89\x8e\xa5\x19\x66\x2c\xe0\x6d\x7c\x46\x34\x9e\x2a\xc7\x1e\x46\x7b\xf5\xa3\x3d\xcb\x20\x8b\xd6\x37\x7d\xab\x4f\xeb\xf6\xae\xff\x46\xcb\x51\x48\x0f\xfb\x4b\xdb\xb5\x7d\x0d\x30\xcd\xea\xcf\x16\xd8\x67\x0b\x6c\xe7\x2c\x30\x47\x78\x3f\x9b\x60\x7f\x44\x13\x6c\x13\x02\xf0\xd9\x06\xdb\x45\x1b\x6c\xcd\x92\xf0\xd9\x08\xdb\xa2\x11\xe6\xf1\xae\xf1\x10\x93\x12\x3c\x6a\xa4\xc5\xf4\xb4\x1a\xe7\xea\x47\xc5\xad\xcc\xc2\x67\xce\x92\xb2\x47\xc2\x7a\xb9\xf8\x57\x30\x6b\x00\xf8\x84\x27\x9e\xdc\x9b\xb8\x60\xd7\x59\xe2\x26\x11\xae\x1c\xe4\xce\x3d\xc3\x3d\x91\xff\xce\xc1\xd5\xa4\x63\xd9\x8a\x5a\x0d\x07\xb6\x6b\x27\xa7\x7b\x40\x2b\x34\x5d\x99\xc0\xef\x14\x67\xdb\xd5\x28\x49\xe5\x26\x90\xfa\x98\xd6\xee\xe9\xa9\x0d\x4a\x95\x37\x4f\xf5\xac\x0c\xc1\x5a\x5c\xa2\xd6\x8f\xef\x7a\x84\xca\x9f\xa2\xa7\x40\xb9\x47\x19\xf5\x83\xff\xa5\xa9\xba\x19\xc1\x22\x13\x6a\x1e\xa5\x3d\xa3\x6e\x11\xc9\xe2\xeb\xaa\xdf\xc6\x79\x51\xda\xa4\x16\x8b\xb7\x37\x6e\xf7\xe2\x2c\x66\x57\x05\x26\x66\xa6\xe5\x7c\x52\x36\x0e\x6b\x52\xe6\x10\xe1\xce\xb3\x90\x2d\xd1\x6d\x3d\x12\xea\x4f\xb1\x51\x09\x9d\x4f\xd6\x0e\x11\x5d\x9a\xd0\x74\xed\xd9\xd2\xf9\x69\x61\xd2\x4d\x2b\x08\x56\x10\x2d\x61\x2e\x55\xea\x22\x6d\x59\xea\xdd\xc2\x90\x33\x1f\x53\xd9\x9a\xb2\x99\x24\xc3\xae\x2c\xa9\x88\x70\xd5\x44\xc1\xf7\x07\x3c\xe8\x8b\xa3\xc6\x88\xc7\xee\x46\x64\x24\x7b\x4d\x02\x32\xa6\xc4\x86\xfe\x1d\x6b\x6b\x72\x55\x9f\xc6\xd4\xf7\x6f\xc2\x42\xf1\xa7\x74\xf7\x4e\x28\xae\x43\x33\xf4\x9b\x04\x62\x4c\xe2\x2e\x6b\xfc\x48\x25\x0a\xaf\x17\x5c\x12\x55\x8f\x82\x53\xce\x06\xe6\x87\x71\x21\xb9\xd1\x6f\xb9\x16\x44\x25\xcf\x86\x5f\x39\x9b\x4c\x54\x14\xc3\x10\x6f\xe5\xaa\x02\x40\x8d\xf5\x84\xa6\x8d\x6f\xf7\x78\x09\x2f\xbd\x14\x53\xc0\xca\x8f\xf1\x64\x79\x7c\x1d\xc3\x6a\x21\x64\x8e\x18\xa7\xe7\x22\x19\x04\x9d\xc0\x3a\x70\xd3\xcb\xa5\x32\x67\x23\x76\x7c\xc3\xd5\x79\xb9\x00\x80\x9a\xb0\x19\x78\x29\xde\xf8\x56\xeb\xc3\xb2\x69\x22\xbc\x8b\xfc\xa3\x7f\x45\x0c\x7f\xfa\xa7\xff\x13\xad\x0c\xff\x27\x58\x1a\xe1\xdf\xf1\x86\x84\xa1\x4f\xc3\xe9\xf0\x59\x3a\x9d\x95\x4d\x5c\x6f\x96\x89\x5f\x25\x62\x53\xfa\x03\xe3\x8f\xa3\x32\x4f\xea\xbf\xd6\x81\x20\x2a\xdc\xc4\xe3\x72\x2e\x6c\xaf\xb3\x59\xa1\x9a\x60\x6b\x01\x9d\x81\xbb\x9a\x95\x25\x9e\xde\xbb\xa4\x18\x25\x31\xbc\xf6\x63\xd3\x8f\x15\x3a\x66\xe3\x71\xa1\xaa\x6f\xf2\x8f\xff\xac\x33\x61\x3e\x5f\x8a\x51\xae\x54\xfa\x63\xd3\x8f\xce\x9b\x0d\xc8\x03\x75\x16\x46\x1d\x6f\xb4\x3b\x12\x89\xff\xc4\xeb\xcf\xfe\xe4\x74\x69\xc6\xbc\x03\xff\xf2\x5f\x69\x00\xa5\xb7\x78\x0c\x5b\xc0\x1b\xb6\x30\x74\xd8\x88\xeb\xaf\xac\xe1\x08\xbc\x13\x2f\xcd\x4c\xee\x37\xc5\xca\xd4\xf8\xd6\xf1\x5f\xb9\xf1\xf7\x04\x1b\x8f\x54\xc1\xbf\x90\xb6\x11\x22\xbb\xbf\x84\x1f\xab\xd7\x1d\xaf\xb2\x8f\xaf\x81\x08\xb5\x6b\x90\x5c\x8f\xea\x9b\xd9\xd5\x55\xa2\x8a\xfa\x43\x35\xfa\x70\x92\x80\xfe\x6f\x7c\x72\x5e\xab\x9d\x3a\xca\xf2\xfa\x20\xa0\xfd\x93\x2c\x2c\xab\xbf\xdf\xe4\x6a\xfc\x06\x2f\x83\x63\x81\xd1\x5a\x6d\xa8\x9b\x72\x92\x5c\xe8\xf2\xa3\xd5\x87\xf0\x17\xde\x1b\xff\xe1\x26\x2e\x59\x11\x56\x5f\x48\x33\x82\xfa\x04\xa1\xac\x8f\x2d\x4f\x89\x1f\xd5\x67\xa0\xb6\x46\x71\x79\x5f\xff\xb9\x94\x8c\xf3\xda\x68\xf0\xe8\x42\x25\x14\xe3\xa9\x3e\xe2\x6b\xb4\xa7\x60\x5e\xbc\x08\x6a\x5a\x9c\x6e\xb1\xd6\xbe\x98\x5d\x4d\xe2\xb2\x85\x1d\xe5\x55\x16\x79\x90\x35\xa5\xc2\x90\x5d\x51\x3b\x52\x38\xc1\xcb\x8f\x68\x0a\x9a\x92\xae\x91\xad\xab\x1c\x6a\xe1\xb3\x77\xdc\x73\x53\xd5\xb1\x98\xc5\x65\xa8\xaf\x4e\xcf\x0a\x29\xfa\x84\x57\x46\xff\xe5\xd6\x66\x82\x87\x74\xb3\xbd\x72\x53\xb3\x6a\xf0\xc0\xa8\x9c\x77\xec\xcd\xc2\xc9\xb8\x02\x98\x6f\xb4\x0d\xe0\x0d\x6d\xc9\xe8\xcd\xee\x13\x40\xce\x18\x80\xce\xb5\xe6\xe3\xe0\x1b\x66\x2c\x40\x11\x51\x14\x0a\x4b\xf8\xd9\x7a\x88\xa0\x17\xb0\x78\x02\xde\xd5\x76\xbe\xda\x2b\x6e\x42\xcc\xe1\xdc\xeb\xba\x07\x6d\xa8\x38\x74\xbf\x35\x92\xe4\xd0\xd6\x5a\x5e\x98\x2d\x6d\xa5\xcb\xa9\x6c\x08\xaf\xce\x46\xa6\x7e\x92\xd4\xc0\x1a\x48\x51\x00\x5a\x54\xfb\x52\x75\x09\x87\xa1\x76\x85\x58\xf0\x4e\x21\xc6\x58\x34\xde\xad\xe7\x14\xa7\x09\xa5\x35\xa7\x5a\x91\x95\x54\xc1\x18\xef\xa9\x20\x52\x38\x80\xdc\x96\xd3\x17\x92\x0c\x00\x74\x65\xd6\x16\x5e\xc0\x72\xc4\xba\x57\x14\x23\x43\xd3\xe7\xa6\x43\x89\x79\xea\x5a\x89\xe8\x22\x34\x1c\xdf\x11\x16\x27\x7a\x26\x60\xa5\xe4\x92\xa1\xe5\xe5\x5c\xb9\xc2\xb7\xde\x1a\x85\x5d\xb1\xb8\x1d\x75\x2f\x6a\x47\xdd\xad\x30\xc2\x3c\xc6\xe8\x3a\x52\xa3\x8c\x8a\x6a\x60\x60\xb3\x19\xb7\x13\xfb\x82\xa0\x95\xa8\x71\xe9\x6f\xa0\x60\xc1\x79\xdb\xa5\xcc\x2c\x46\x9b\xc9\xfe\x67\x49\x37\xb5\x3e\xae\x9c\x8a\xd1\x14\xc3\x1c\xec\x37\x42\x70\xe1\xbd\x24\x83\x0a\x2c\x2e\x7d\x18\x16\xb9\x75\xe8\x08\x68\xad\x4d\x56\x1a\x73\x9d\xb4\x73\x69\x14\xf4\x6b\x50\x8b\x55\x3b\x4b\x99\xf1\x32\xed\x1d\xf0\x57\x6c\xf0\x40\x15\x33\x09\x2b\x3d\x9c\xa9\x7f\x50\x39\xbc\x99\x71\x3b\x26\xb9\xcd\xd6\x3e\x97\xb7\x8c\xd1\xab\xc3\x1a\x62\x95\x2a\xd3\xb3\xc2\x9e\x35\x53\x7d\xa1\xb8\xbe\x7a\xf9\x33\x7b\xcd\xbd\x61\x46\x77\x48\xf2\xec\x33\x5d\x5e\xd2\x62\x43\xb5\xca\xb9\x95\x46\x4b\x83\x0d\x9b\x35\x3e\x6f\x0e\x1b\x58\xa7\xbb\xbb\x58\x04\x85\x27\x52\x91\xbd\xa2\x8d\x95\x84\xbd\x27\x8a\x59\x2d\xb5\x46\xcc\x78\x72\x31\x9e\x2b\x58\x91\x21\x33\x4b\xf1\x06\xa8\x7f\x13\xf8\xf2\x0e\x6f\x38\x58\x9d\xea\xf4\x31\xf0\x2a\x8e\x9b\xe9\x2b\x3d\x92\x6a\xc7\xe4\x0a\xeb\xd7\x0d\xd2\xec\x4e\x8b\x3a\x28\x47\x9c\xc3\x73\x50\xfb\x13\x82\x0b\x62\x10\xc2\x38\xb6\x06\xc7\xd0\x7f\xc8\x45\x41\x89\x31\x53\x2a\xec\xed\x53\xa5\xa1\xa3\x91\x48\x2a\x6d\x5e\x3e\x71\x63\x6c\x64\x51\xbf\x4d\xfe\x97\xfd\x6a\x44\x80\xbc\x6f\xc4\xd3\xc0\xd1\xe4\x71\x5b\x47\xdd\xd2\x22\x57\x13\xbe\x07\xfa\xda\xfc\xd8\x97\x28\x24\x81\xe6\xc4\xc5\x4a\xe0\x95\x02\x07\xb5\x0f\xe0\x54\x3a\x66\x2e\xd4\x8b\xf3\xa8\x01\x26\x2d\xfc\x05\xde\xfd\xae\xc6\x6d\xdc\x13\xdc\xfd\x1e\x70\x47\x6c\x2a\xcf\x23\xf6\x2f\xb3\x09\xf8\xf5\x97\xd9\x69\x1a\xd9\x3d\x78\x1d\xc8\x50\xe9\x70\xde\xa6\xa5\x5f\x4f\x2b\x52\x7c\x2a\xd9\x07\x29\x1c\xf4\x21\x91\xb2\x1c\xa2\x8b\x00\xd9\x94\xa3\x94\x58\x72\x46\x1e\xd1\x0d\xf0\x66\x44\x3b\xf2\x56\xfa\xe0\xce\x39\x16\x1b\xc0\x7e\x8e\xa9\x97\x84\x75\xf5\xcd\x74\x51\xe3\x31\xb5\x6a\x03\x4b\x14\x4b\x5b\x9f\x8d\x75\xf5\xce\x86\xad\x8b\xd6\x5b\x10\xeb\x88\x4d\x72\x5f\xab\x98\xf0\xdf\xfc\x1d\x0d\xa6\x2b\xe8\x99\x9a\x34\xba\xf2\x95\xed\x66\x51\x2b\x0b\xe9\xed\x2e\xde\xbd\x5f\x1e\xd2\x98\xe1\x4a\x8a\x07\x63\xeb\x42\x69\x81\xc1\x35\xdb\x75\x9f\x3a\x7e\x9f\xcb\xca\x4a\x75\x3d\x7f\x02\x53\xc1\xd7\xaf\xf9\x49\xaa\xc2\x69\x2a\x48\xba\xe7\x30\x52\x34\xde\x60\x8f\xfe\x83\xa3\xee\xed\x93\x95\x44\x45\xbd\xe3\xca\x5e\x40\x2f\xb5\x6f\xe7\x93\x90\xb4\x39\x55\xc5\xcb\xe9\x36\xb1\x56\xd0\x27\x17\x17\xae\xc7\xae\x6d\x5d\x29\x93\xec\x3c\x31\xe7\x0a\x52\xbd\x2a\xce\x2b\x25\xec\x2a\xa6\x41\xa3\x92\xfc\xaf\x8a\x92\x44\x8b\x2f\x4c\x4e\xb5\x75\x50\xb7\x14\xc5\x9a\xd6\x35\xa4\x2c\xe3\x07\xb0\x7c\x0a\xaa\xf1\xf7\x27\x82\x48\x7e\x06\xc0\x26\x85\x82\x75\x52\xb4\x18\x6e\x3c\xde\xaf\x35\x0f\xec\xad\x76\x4d\x52\xaf\xdf\x26\x97\xf4\x19\xa0\xef\xb4\x5f\x75\x9e\x2a\x8e\x90\x69\xcb\x73\xcc\x35\x68\xc6\xf5\xd2\xe6\xd4\x40\xd1\x6f\xa0\xea\x3a\x65\xd4\x3c\xd8\x0c\x83\x27\x03\xfa\xf8\x00\x1e\xd9\x02\x95\xba\xb8\x57\xc9\xb5\xc0\xb0\xd2\xd6\xd4\xba\x10\x7e\x55\x33\x5f\x15\x60\x23\xa8\x39\x7d\x02\x4d\x8d\x86\x7a\x7d\x85\x95\x29\x84\xcd\x61\x56\xad\xe0\xb4\x63\xd4\x06\x94\xad\xaf\xa4\x27\x7b\x31\x9f\xf6\x55\xe2\x7f\xcf\xdd\x61\x44\xd3\x10\x1e\xba\xa7\x28\x2d\x68\xb2\x31\xd5\x47\x6c\x67\x8f\x2e\x82\x3c\x12\xfb\x91\x2c\xba\x0a\x3d\xa5\x0c\xdc\x98\x4b\x06\x49\x9d\x2e\x5b\x99\x14\xd6\xbf\x6e\x1c\xd6\xc2\x4c\x5d\xea\xd0\x3f\xe6\xaa\x33\xd7\xd5\x39\x14\xe9\x3a\xd0\x7e\xb4\xed\x26\x5b\x54\xc6\xd6\xcd\x20\x8e\xcd\x5f\x52\x9b\x29\x72\xeb\xb8\x70\xf3\x84\xf1\xac\x44\xf6\xba\xac\x2d\xea\x8c\x78\x9b\x2b\xee\x91\x33\x30\x73\x5a\xbe\xc8\x24\xb0\x45\x02\x1e\x85\x44\x19\xf4\x59\xc4\x39\xfd\x54\xe7\x57\x4b\x01\x14\xf6\x7e\x1b\xab\xc5\x3c\x3e\x1e\x6e\x92\xce\x9b\x22\xaa\x99\xea\xa2\x43\x91\xc9\x6b\x96\xfa\x01\xd7\xe9\xeb\x8b\x57\x70\x46\xdd\x26\x4c\x79\x59\xa7\x8c\xfd\xa1\x1e\xd0\x0c\xac\x63\x67\xc2\xb0\x45\x14\x92\x86\xa7\xae\x98\xf4\x68\x9e\x5e\xd2\x53\x3e\x73\x89\x00\x9a\x47\x5e\x6e\x51\x2b\x0e\xdd\xbc\x0b\xff\x21\x2f\xc0\x5a\xbf\x26\x2e\x0c\x16\xb2\x62\x77\xaa\x72\x6f\x43\xab\x4b\xf5\xd2\xe3\xb6\xf6\xc3\x68\x0f\x4b\x0f\xd3\xd6\x6a\xaf\x2d\x8a\xaa\xde\x27\x8a\x7b\x43\xd5\x4b\xbc\x9a\x7a\x51\x47\x74\x78\x9b\x24\xf1\x35\xae\xb6\xef\x66\x08\xda\xe0\xe3\x24\xe1\x42\xf3\x43\xd3\x76\x09\xcb\xa3\x97\x93\xa4\xb2\x01\x5c\xab\xb2\xa2\xff\xa5\x40\xea\x92\xb5\x95\xe8\xed\x5a\x8f\xa6\xce\x3d\xfb\x51\x32\x99\xe0\x39\x46\x0f\x21\xb6\x65\xfd\x72\xd3\x60\x40\xd8\xdc\xd0\x9b\xd2\x64\x76\x54\xa3\xd8\x7f\x08\xe9\x91\xa6\x72\x6c\x23\xff\xf6\xc0\x32\x85\xb5\xb0\x0e\xa4\x04\x7a\xb7\x80\xa1\x6c\xb9\x15\x45\x77\x4c\x8b\x18\x66\x20\xc6\xeb\x5e\xce\x3b\x4e\xe7\x9d\x58\xc8\x1d\x0c\xdc\xd4\x8a\x9a\xcf\x56\xaf\xc7\x1f\xf6\xdc\xe9\xcd\x56\x69\xe3\xab\x9b\xff\xc5\x3b\xbb\x9e\x18\xf9\xd6\x15\xc5\xca\xd1\x3e\x5a\x9e\xfe\x55\x06\x3c\xd4\x59\xab\xee\x9a\x01\x14\x3d\x72\x8f\xba\x97\x36\xcd\xa8\x23\xfd\x8e\x69\xd5\xe0\x1d\x97\x95\xa5\x37\xcc\xde\x4a\xdd\x6d\xe8\x04\x45\x7a\xb0\x89\xd7\x8d\xdd\x14\x39\x6a\x18\x72\xef\xeb\x07\xd8\x9d\x51\xf0\x86\x4d\x1b\xf4\x34\x2b\x76\xc5\xbe\xdb\xb2\xa4\x3c\xee\x7d\xe1\x93\x16\xc1\x07\x33\x12\x1b\x62\xce\xd8\x6f\xf9\x60\x3a\xcb\xa7\x18\xa8\x35\x97\x8d\xa5\xd2\xa2\xd3\x1d\xdd\x1e\x9e\x02\x42\x77\x2a\xc7\xee\x83\x77\xe1\xbd\xd3\xa8\xca\x70\x1b\xbf\x2d\x5a\x24\x18\x6b\x5e\xfb\xc1\x28\x5d\xd3\xb1\x1a\x76\xe2\x37\x99\xa3\x7c\x04\x7b\xa3\x5b\xf7\xb9\x13\x01\xfb\x31\x61\xb9\xb2\x75\x99\xd4\xec\x01\x0d\x53\x27\x87\x7e\xa1\x21\x88\x97\x25\x51\xc1\xe7\x37\x58\xbb\x51\x6a\x06\xb3\xc0\xca\xb6\xc3\x61\xec\xa7\x54\xb2\x3b\x92\xd4\x94\xb6\xe0\x0d\x8c\x06\x02\x44\x87\x2f\xdc\xec\x87\xcf\x5e\x48\xe6\xf1\x63\x7a\x21\x2e\xa4\xdf\x67\xae\x5b\x61\x3a\x00\xf8\xd9\xd7\xf8\xfe\x3b\xfc\x72\x80\x7f\xb9\xa9\x35\xcd\x11\x84\x63\x69\x0a\x1d\x36\xa8\x8d\x90\x0e\x16\x0a\xca\x2a\x83\xf9\x58\x75\xc4\x05\x1b\x2f\x3a\xe1\x63\x42\xad\x17\x43\x1d\x2f\x91\x53\xe4\x36\xfe\x9a\xc1\x9a\xd4\x54\x68\x1f\xc3\xb2\x93\xe2\x50\x95\x01\x6c\x71\xca\x97\xe7\xaf\x75\x26\xc8\x30\xf0\xba\x34\xe9\x63\x04\xe9\x30\x56\xe8\x8f\x3c\x42\x0d\xf4\x5c\x76\xdd\xd8\x52\x91\x32\xae\xdc\x70\x33\x52\xf1\xe0\xe4\xd3\x67\xf4\x8c\xbd\xfe\x17\xaa\xf5\x3c\x9c\x4a\x1f\x44\x46\xbe\xe9\x4a\xfe\x40\x3e\x30\xf8\x3d\x3a\xc4\x28\x13\xc7\x26\xaf\x55\x64\x83\x06\x72\x10\x2f\x16\xc6\x9c\xc6\x37\xe8\x3b\x17\x2b\xea\x04\xf8\x26\xc6\xe4\xdb\xb0\x7a\x3e\x6c\x76\x26\x7b\x93\x13\x00\xc2\xca\x97\x63\x00\xb4\xb8\x81\x27\x49\x46\x69\xa1\x2d\x98\x1a\xed\xe4\x1f\x3d\x6b\x5f\xc0\xf6\x33\xc1\x71\x63\xd1\x21\x15\x6c\xf4\x18\x58\x95\x9b\x83\x85\x49\x1c\xda\x13\x09\x3e\x1f\xab\x19\xd2\x0f\xce\x64\xd9\x2f\x2a\x46\x45\x6f\x1e\xf2\x8f\x47\xc1\xaf\xbf\x3f\x3e\x94\x52\x1b\xf3\xf7\x50\xa0\x24\x08\xcc\xf2\x6d\xc1\x65\xae\x82\xd1\x4d\x2c\xc3\x46\x69\xf1\x84\x90\x72\x99\xf0\x2c\x1a\x05\xb0\x7a\xd3\x7b\xd0\x31\x07\x3b\x53\x85\xbf\xb4\xa4\xfd\xc6\x38\xb9\xb7\xa6\x8f\x36\xae\x8c\x93\x34\x0e\xf2\xf0\x0e\xcc\xd3\xd7\xaf\xda\xf6\x37\xb0\x77\x9c\xac\xb7\x31\xbd\x4b\x44\x61\x07\xce\xce\xc2\xed\x6b\x78\x43\xa7\x3b\x59\x54\xf2\xbd\xa0\x0f\x86\x14\xbf\xff\xd1\xce\x62\xc8\x7f\x97\xaa\x5c\xeb\x7e\x3c\xf0\xd3\x7f\x7a\x05\x8a\x31\xe3\xd1\xe0\x65\x7a\x63\x11\x00\x55\x2a\x21\xbc\x76\x43\xf0\x86\x87\xe5\xa5\xff\x7c\x0c\xb4\xa4\x43\x7e\xd1\x8c\xf0\x1f\x6c\x59\x51\x94\x61\x1a\x61\xcb\x6d\xf8\x9b\xe8\xac\x37\x08\xee\x4d\xfc\x55\x14\xdf\x3e\xfb\x1a\x37\x48\xfc\xeb\xeb\xaf\x9e\xe1\xff\xef\xd7\x2e\xbd\xe9\x56\x7f\x45\xa5\xe9\xb7\xf9\x5d\xf2\x45\x0b\xee\x2a\xac\xaf\x85\xd9\x8c\x3f\x4d\xf3\xe4\xfe\x40\x88\x6c\x32\xee\xba\x88\x6d\x27\xd0\xa6\x6f\x07\x99\xdf\xa9\x24\x4e\xc1\x03\x28\x6e\xac\xb5\xa5\xbb\x9d\x4b\x52\xc4\x9f\xa8\xed\x39\xba\xfa\x2d\xf4\xe4\x62\xb5\x78\x4e\x33\x2f\x0f\x26\xb7\x85\xd1\x65\x75\xeb\xa1\x0b\xcb\x50\xe9\x50\x56\x8c\xb2\xa9\x72\x3b\xf0\xc9\x17\x71\x09\x8a\x67\xbc\x5f\xbd\x06\x7d\x92\xa5\xe3\x24\x1e\x95\x03\x03\xcd\x0b\xd7\x68\xd3\xc9\x14\x55\xfc\xdf\x5a\x73\x5b\xac\x6c\xad\x12\x6a\x4e\x15\x16\x3f\x47\xdd\x86\xb6\xa9\x9b\x3a\xc2\x89\xc7\x43\x50\x7c\x33\xca\x60\xa9\xdc\xce\x14\xdb\xda\x04\x55\xfc\x7c\x01\x75\xdb\xa1\x14\x75\x95\xa2\x22\x38\x77\x26\xac\x8e\x4f\xa6\x1a\xef\x04\x4e\x1c\xcd\xe6\x43\x3b\x64\x42\x35\xf7\xd5\xe5\xd7\x58\x36\xd4\x8c\xad\xeb\x13\x5c\xfe\x56\xbd\x59\xf8\xec\x0b\xb4\xf9\xea\x05\x90\xbe\x78\xd6\x55\x19\xca\xb5\xf0\xb3\x0f\x01\x77\x4c\xa4\x2c\x71\x20\xae\xb5\x28\x4d\x53\x3a\xf4\x36\xb0\x08\x53\x3c\x9a\x25\x61\x5e\x4d\xc1\xc1\x13\xbf\x5c\x81\x40\x2b\xc9\xf6\x82\xed\x04\xb5\x98\xdc\x33\x71\x5f\xbf\xc7\x6c\x23\x56\x37\xb9\x56\x8b\x72\xbc\xec\x64\x59\x7a\xf4\x18\x15\x05\x02\x59\xcc\x69\xb6\x08\xaf\xbd\xa1\x84\x49\xb9\x85\x54\xdb\x5b\x4a\xe4\x4b\x98\x5f\xc5\x65\x1e\x62\x75\x29\x74\x78\xc3\xa2\xc8\x46\x31\xad\x5a\xe3\xc9\xdb\xce\xeb\x26\x75\x96\x2f\x9b\x16\x4e\xde\x2b\x89\x0b\x36\xa2\x71\x72\x5c\x5b\xcc\xd7\x4b\xd9\xb1\x1c\x03\xd6\x4c\x6b\x67\x75\x7b\xb8\xeb\x11\x00\x59\xab\x02\x99\x6e\xac\x4d\x63\x35\xb2\x4e\x3b\x1f\x80\x57\xbf\x65\x30\x2f\x65\x43\xa0\x17\xe9\xa7\x4a\x5a\x35\xfc\x8e\xb2\x56\xb5\x95\x87\x81\x43\xe8\xa1\x4e\x07\xbf\x04\x89\xba\x6c\xb8\x93\xcf\xc4\xe1\x19\x81\x2c\x98\xf9\x25\x31\x9e\x82\x88\xae\x73\xad\x95\x1e\x9c\xe9\xe6\x34\x8c\xc6\x97\x07\xe6\x31\x0e\x20\x93\xee\x93\xa0\xd0\x7e\x82\x61\x8d\xf6\x41\x1f\x15\x13\x2c\x71\xbb\x29\xdb\xd2\x73\xe8\x13\xa5\x68\x07\x55\xf6\x5b\x16\xed\xa9\xe8\x79\xde\x64\x3f\xda\xc6\xd6\x7a\xe7\xe5\x0c\x46\x0d\x39\x99\xb3\xf5\x1d\xb8\x97\x5f\x49\x5b\x9b\x98\x51\x76\x13\xc4\x66\xe2\xda\x59\xe1\xc9\xa2\x5a\x73\x6d\x3d\x2e\x3d\xc6\x2e\x6f\xad\x61\x49\xca\xb4\xb4\x5d\xf6\x31\x97\xd4\xed\x7e\x37\xfe\x68\x7a\xe6\x82\x69\x93\x47\x95\xbc\x53\x9f\x8c\x92\x6c\x59\x97\x2f\x03\x46\xbd\x19\x54\x95\xbc\x0d\xed\x1e\x52\x43\x90\x1b\x6a\x6f\xad\x05\xaa\x59\x5f\xb6\x1e\xe6\xb4\xfa\xee\x68\x8c\xf2\x0d\x41\xe2\x5a\x5d\x3e\x60\xda\x97\x2d\x22\xd2\xda\x4b\xe1\x42\x47\xc3\x24\xa7\x76\x5c\x6b\x6e\x6c\x3c\x59\x91\x9b\x55\x24\x85\xea\xf4\xe3\x2e\xa1\x13\xec\x4c\x69\x00\x9f\x51\x0f\x22\x17\x0b\x49\x05\xd5\x5b\xa8\xa9\x9f\xd7\xa6\x4f\xd7\xf6\x68\x7a\x87\x3d\x38\x39\xf9\x58\x97\x9d\xa8\xac\x36\xee\xe5\x2b\x84\x7e\x20\x12\xeb\xe9\x60\x4b\xfd\x5f\xa2\xca\x71\x53\x83\x62\xd6\x1f\x36\x9d\x5c\x5f\x26\x66\x42\x4a\x4f\xbd\x62\x41\xb6\xd9\xcd\x58\x4f\xde\xd8\x6e\xe2\x51\x30\x33\x4b\xad\x22\x0d\xa9\x53\xd6\xe3\xd0\x9c\x8d\xcd\x69\xd0\x3c\x72\xa3\x0d\x08\xb0\x9b\x4e\xbf\x34\x9f\x6c\xdc\xaa\xd6\x15\xa5\xa3\x1b\x0c\x96\x8d\x88\xc1\xe9\x00\x7f\x92\x76\xe5\xc8\x37\x34\x56\xdf\xd2\x9a\x6c\x9c\xd4\x23\x7d\x97\x91\xc3\x83\x54\x6b\xbc\xe0\x6f\x8d\x4a\x9b\x2d\x8f\xfa\x89\x43\xd3\xe9\xcb\xc8\xb9\xfa\xe9\x9f\x91\xe5\x62\x0f\x85\x78\xf8\x11\xa7\x74\xa0\x3d\x2b\x63\xee\x58\xe8\x54\x0e\x73\xbc\xf3\x5c\x5d\xc7\x05\x06\x17\xe9\x4c\x67\x9a\xf8\x6d\x94\xc4\x7d\x27\x19\x20\xce\x15\x78\xcf\xe2\x36\xfb\xa0\xea\xbf\xa3\x09\x80\x05\x3b\xf8\x7a\x81\x3e\xcf\x43\x18\xc3\x38\xc1\xac\x48\x5b\x23\x16\x36\x4b\xd7\x6d\xc4\xbd\xc1\xfd\x77\x55\xfa\x2b\x4c\x90\x86\x9d\x74\x59\xa2\xbd\x8d\xc6\x2f\xb3\xa2\x74\x32\x68\x3d\xaa\x09\x9d\x7c\xee\x38\x4e\xe1\xc0\x99\x82\x4e\xd6\xe4\x51\x43\xc1\x9d\x5a\x3c\xb5\xb3\x18\xcf\x29\xaf\x36\x6f\xde\xf1\xc7\x23\xb9\x5e\x8a\xff\x03\xcf\x11\x03\xb8\xa6\xa1\xc6\x73\xf3\xc4\x26\xbc\xd2\x50\xb8\x24\xf1\xcc\xab\xa1\x7b\x3a\x7a\x5c\x24\xcc\xe6\x7e\x4a\x41\x9d\xaf\x0e\x9d\xef\x9f\x99\xbf\xe9\x1e\xc5\x2d\x5e\xb8\x76\x2f\xd9\xe2\xff\x0a\xba\x69\xdb\x04\x0b\x6c\xea\xe4\x6c\xff\x1a\x14\x89\xbd\xa2\xf8\x1c\x58\x5d\xd8\xcb\xba\xda\xe1\x6c\x00\xfe\x3b\x8a\x8a\x80\x1f\x1d\xe9\x4e\x79\x54\xef\x49\x43\xdb\x0c\x68\x36\x1e\x57\x6a\x0e\x30\x90\x6a\xea\x78\x07\xbf\xd7\x89\x7e\x19\x7e\x50\x5e\xcc\x9e\x25\x55\x2f\x15\xd4\x6b\x59\xaa\x3d\xd5\x98\xda\xa7\xe1\xbd\x2a\x69\xd0\xe6\xba\xf3\x72\x14\xd4\x76\x4a\x29\xc3\x5f\xde\x28\xe7\xee\x37\xdd\x65\xd1\xe7\x53\x26\xcc\x48\x67\x93\xb5\xdd\x59\xbf\x86\x23\x38\x71\x70\xdb\x53\x4d\x9e\x0f\x30\x14\xba\xaf\xd5\xbc\x99\xcb\x36\x57\x6b\xf0\x73\x6d\xf5\xd0\x63\xa7\xc9\xda\xbd\x7b\x8d\xd3\xed\x8f\x77\x55\xab\xae\xa6\x67\x31\xed\xdf\x4c\x07\x5d\x4b\x58\x19\xa1\x72\x94\x9d\x67\x1f\xef\x07\x42\x1d\x6e\xf3\xe2\x56\xb1\x32\xc7\xd0\xa6\xec\x95\x2e\x4e\x82\x2f\xd6\xa1\xb6\xd5\xaf\x9a\x5c\xc2\x6d\x31\x7b\x93\xac\xa2\x5d\xe6\xb2\xb2\x99\xf7\x93\xa8\x60\x60\x47\x0e\xbd\xcb\xce\x2e\x50\x0c\x70\x3d\xc8\xbb\x2e\x11\x61\x37\x3c\x4e\xad\x45\xd2\x25\x19\x35\xbe\xfb\x65\x08\x7a\x49\x01\x0d\x27\xb5\xa5\x9a\xab\x24\xb4\xeb\x05\xd9\xcd\xf9\xf2\x1b\xd6\xb1\x21\xe7\xee\x23\x9e\x18\xf1\x0d\x4f\x63\x60\xb5\x7a\x71\x13\xd8\xea\x30\x9b\x01\x99\xa6\xff\xa6\x48\x07\x8c\x99\xcd\xaa\xbd\x31\xb1\x19\xee\x40\x5e\x3b\x6a\x3a\x8c\xc3\x73\x6e\x47\xbc\xc7\xa9\x44\xf0\x82\x67\xcf\x2e\xcf\x5f\x9e\x1f\xc1\x5e\x35\xd2\xd1\xc6\x3b\xf0\x49\x43\x49\xb7\xc1\x14\x15\x94\x37\x1e\x25\x2e\xe8\xc8\xbf\xe6\x0e\x3e\x0b\x6c\x51\x07\xfa\x45\xfa\xf7\x1f\xf9\xf5\x7a\x1a\x4e\x31\xd0\x1f\x65\xbc\xa8\xd9\x5f\xe8\x19\x51\xe8\x75\x80\xb7\x5d\x8c\x00\x69\x04\x88\x36\x7a\xea\x36\xef\xbe\xd6\x55\xa3\x0f\xa8\x0c\x2f\xd7\xe2\x25\xb8\x54\x27\xf6\xdc\x97\x84\x8a\xc7\xad\x8e\x59\x19\x2b\x6a\x1f\xeb\x4a\x39\x6f\x5d\xdd\x07\x83\x0a\xe8\xfb\xed\xb3\xe8\xb2\x04\xdc\xb2\x7b\x60\x00\x77\x6c\x39\x33\x74\x2f\xa7\xfc\x98\xab\xfd\xc6\x23\x90\x2f\xee\x11\xe5\x94\x0f\xd6\x57\x5a\x53\xd3\xb6\x9c\x7b\x43\x4e\xf0\x2a\x3e\x06\xa2\xe9\x13\xee\x1a\x0e\x53\x80\x71\xa7\x03\xf5\x5c\x15\x11\x2b\x43\x1f\x72\x50\xdc\xf9\xe9\x20\x89\x3f\x98\x60\x3f\xdb\x84\x61\x90\xa8\xf4\x1a\xfe\x30\x4a\x63\x00\x36\xdc\x0d\x06\xcc\xac\x36\x7d\x5a\x38\x2a\x40\xb4\x08\x45\xb5\x05\x0c\xa2\x25\xa8\x0b\xc6\x26\x8d\x14\xb8\x1b\x64\x5c\xff\x19\xc1\xe6\x09\x0e\xbe\x3c\x0c\xce\x89\xb0\x06\x52\x77\x80\xdb\x38\x44\xda\xc7\xb9\x68\x91\x7a\xb4\xbb\x2e\x3a\xa6\x46\x95\xa3\x8d\x4d\xdd\x65\x8c\x42\x38\x44\xea\xf4\x71\x7c\x63\x52\xeb\x56\xd7\xe5\x53\xb7\x6d\x27\xd1\x78\x8d\x0b\x6d\x47\x63\x99\x58\xb8\x8e\x82\xcb\x9f\x7e\x1e\xda\x07\xf6\xa0\x9e\x68\x74\x96\x4a\x06\x82\xae\x6e\x40\xf1\xc7\xf3\xf1\xa9\x76\x12\x2e\xf5\x26\x69\x86\x68\x8b\x03\x7e\x96\xa5\x4f\x46\x96\x9a\x05\x09\x2d\xa5\xf9\x82\x64\x0b\x87\x3a\x52\xe4\x14\x0e\x99\x2b\x47\xaf\x55\x7e\xad\xac\xcd\x40\x2c\x02\x1b\xe2\x2e\xab\x9e\x14\x02\x49\xae\x39\x22\x4a\xde\x22\x99\x01\x54\xac\xd6\x47\xab\x42\x28\x29\x2d\x6a\x8f\x92\x2d\x8d\x72\x70\xa4\xe3\x5b\x65\x8e\xe8\x9d\xe3\x33\xdc\x72\x6c\x0d\x7c\x97\xe3\x62\x87\x60\xfa\x48\xee\x8c\xc5\xc5\xf2\x68\x28\x09\xce\x9a\xea\x94\x38\x18\x17\x5f\x21\x6f\x35\x4b\xea\x36\x8a\x9f\xcd\xf1\xa5\x03\xad\x9b\x3d\x62\x01\x72\x20\xc5\x8c\x11\xa2\x60\x5c\x0b\xe1\xf0\x10\x6f\xb0\x40\x7d\x15\x13\x67\xd8\xee\xb1\x44\x48\x08\xbb\x81\x2e\x5a\xc9\xb7\x30\x19\x56\xa7\xa2\xb1\xcc\xd7\x6d\x35\x6f\x98\xdd\x91\x52\x53\x2c\x06\x01\xa6\x98\xd4\x82\x60\x8c\xae\xf0\xee\xa5\xc2\x6c\xa6\xd1\x2c\x2f\x90\xeb\x83\xf0\x43\x78\xc8\xef\x8f\xb2\xe9\x7d\xcd\x44\x15\xc1\xf1\xad\x6e\x26\x04\x95\xf5\x9a\x23\x42\x3b\xc6\x5a\xa4\x83\x31\x1c\x86\xc1\x52\x9c\xae\x85\x20\xe4\x94\xa6\x00\xca\xbb\x47\xec\x78\x0f\x49\xb2\x15\x92\xfb\x56\xa7\x27\x62\x1b\xb7\xfa\x9d\xcd\x34\xa8\x5c\x06\xa1\xf1\xb0\xc6\xe0\x60\x44\x55\x2e\xfd\xe3\xbc\x2a\x6c\xdf\x52\x76\x9d\x73\xb4\x56\x78\xf7\x35\x78\xff\x2a\xc2\x32\x2e\x38\xf7\x89\x1b\x9f\x9a\x70\x11\x8b\x85\xdc\x43\x96\x6f\xe4\x96\x6f\x48\x81\x17\xeb\x71\x57\x3d\x1f\x7a\xf7\xd2\x44\xd5\x6d\xff\x6d\xf4\x08\x66\xd7\x37\x55\x56\xe3\x9c\x15\x2d\x9f\xe9\xfb\xd9\x7c\xa1\x1b\xf6\x09\x18\xf7\x1a\x6d\xc4\x92\x21\x1b\xfb\x45\xbc\xab\x4e\x93\xa8\x22\xfc\x6e\xa8\x2b\x71\x04\x1c\xd3\xb1\x1f\xe9\x97\x50\xdb\x1f\xfa\x00\x88\xe3\x97\xeb\x7a\xcf\x3a\x79\x85\x4f\xb3\x03\x4e\x9f\xd2\xdb\x90\x93\x9a\x72\x07\x83\x81\x1f\xd1\x5c\xec\x3a\x4e\x61\x8f\x2a\x71\xed\xee\xf1\x9f\x7b\x94\x50\xc6\x45\x5d\xb0\x5c\x59\x56\x3a\xc9\xf5\xa5\x4e\x3c\x73\x82\x05\xe2\x79\x3b\xc9\x9b\x85\xbe\x06\x3f\xa6\xb0\x8f\x61\xf5\xd8\x64\xdf\xed\xe9\x8d\x6d\xcf\x0c\x80\xaa\xe3\xb0\x0a\x87\xd1\x27\x9b\x9a\x95\x10\xad\x88\x74\xae\xa6\x68\xe6\x85\xbc\xd3\xa2\x61\x47\x13\x1f\x99\x74\xd2\xf3\xb1\xec\xc2\x97\xc3\xa0\xc9\xbe\xa3\x4d\xd8\x2c\x6a\x46\xc7\x4b\xef\xb9\xc4\xb3\xa6\xea\xda\xb8\x30\xfd\xe0\xd1\x65\x35\xa9\x17\x7c\xf4\x8d\x56\x17\x66\x4a\x6a\x7c\x6d\xd0\x83\xba\xbc\x13\x14\xc1\x00\x3e\x3d\xf8\x12\x37\x3e\xe4\xda\x38\x9b\xa5\x51\x5b\xf5\x00\x9b\x14\x21\x59\x1c\x4d\xfd\xe8\xfd\xc5\x63\x4e\x78\x64\xc5\xd8\x78\x3a\x7f\x59\x5b\x41\x60\xca\x9d\x11\x5c\x5a\x9e\x4d\x51\x32\x46\xa1\xb4\x23\x70\xa9\x20\x5e\x0f\x34\x16\x81\xa6\x6f\xd8\x83\x20\xfc\x59\x1b\xb7\x24\xdf\x66\xe9\xe2\x71\x2d\xef\xec\x30\xa2\xcf\xc6\x38\x95\x44\xa1\xaf\x07\x3a\x69\x63\x18\x78\x3c\xd5\xf0\xbd\x30\x7c\xb3\x11\xd2\x2a\x73\xea\xe7\xc3\x8c\x88\x5d\xb5\x9a\x35\xed\x19\xa3\xba\xd0\x3a\xea\x05\xbc\xd5\xa2\x47\x92\x55\x16\x37\x0e\x23\xc8\x14\x5c\xd1\xd0\x29\x47\xea\xc5\x49\xbb\x7c\xf8\xd4\xad\x47\x35\x99\xa2\xad\xae\x7d\x5b\x2c\xb8\xae\xc8\x02\xa7\x18\xad\xdd\xb8\xda\xc4\x06\xb1\x70\xb7\x66\xd7\xf0\xd5\x87\xd9\x76\xea\xb8\x7c\x2a\x53\x56\xb1\x39\xc5\x1f\x99\x1c\x7d\x70\xb2\xd4\x8f\xc7\x3e\xe1\xb5\x5d\x58\xc8\xb5\xcc\x42\xae\x65\x9a\xe4\x88\x2e\xab\xa5\x37\x4f\x6a\x07\x16\x1a\x0f\x7d\x9e\xb5\x10\x12\xf6\xbe\x47\x5c\x16\xbe\x0c\x89\xfc\xcd\xa1\xbe\x59\xb2\xa8\xe7\xe9\x5e\x48\x15\xae\x37\xec\x55\x69\xc9\x5f\x41\x62\x42\x3f\x6b\x7b\xa0\x53\x3b\xf9\x8e\xda\xde\xaf\xbf\xef\x21\xad\xf6\xd0\x0a\x63\x52\xee\xad\x51\x76\xfc\xc9\xab\x48\xbe\xc5\x67\xcb\x08\x51\xeb\x12\x96\xad\x72\x65\x71\xf1\x87\xd1\xf0\xfe\x40\xbf\x2e\xb5\x86\x29\xc6\x95\xa2\x21\x16\x17\xce\x5e\xf0\xe3\xeb\x57\x36\xf7\x19\xb5\x3f\x2b\x10\xf7\xe7\x36\x6e\xd0\x60\x12\x3c\xa3\xbf\xfb\xf0\xa3\x3e\x6b\x15\x47\x78\xf6\x32\x1b\x0d\x52\xb2\x05\xdf\xc0\xff\x77\xc5\xc5\x4e\x32\x36\x3e\xb4\xce\x73\x03\x0d\xec\x7e\x84\x64\x01\xb8\xd6\xa8\xa7\x1c\x9b\x4b\x20\xbb\x49\xf8\xbc\x43\xf2\x50\x29\xd8\x95\xe0\x34\x1c\xd7\xd5\xeb\x24\xfc\xa0\x6a\x0a\x56\x52\x42\x6a\x41\x65\x2c\x93\x4a\x59\x04\x68\x65\xa0\x31\xa7\xe9\xd2\x50\x79\x19\x97\x85\x49\x8b\xa0\x77\xdb\x40\xb7\x06\xea\xb1\x36\x50\x4b\x3d\x53\xcf\x28\xc4\x9a\xec\x53\x31\xab\xc9\x4a\x9d\x67\xa1\x12\xe6\x06\x72\x33\x12\x46\xa0\xb4\x99\x9a\xde\x6b\x03\xf5\x07\x96\x5b\x77\xce\x21\x1b\xad\x74\xe2\x54\x68\x80\xc4\x6c\x1d\xf0\x2a\xda\x6f\x5c\xfd\x93\x70\xca\x7d\xf6\x3d\x33\xcd\x09\x97\x2c\x62\xaa\xbd\x07\x6e\xbf\x6f\x48\xff\xd9\x24\xab\xcf\x73\x51\x25\x96\xe5\x30\x9c\xa3\x5e\x1e\x86\xf9\xc4\xaa\xe7\xf3\xf9\x0e\xb0\x62\x3a\xa8\x67\xd0\x59\x72\xe8\xa8\xe0\xe1\x7c\xb1\xa8\x24\x9a\xf0\xf2\x0e\x8e\x6d\x59\x67\xf1\x0c\x45\x31\x8d\x81\x24\xe0\x39\x53\x28\x48\x3e\xe1\x3e\x21\xe4\xcf\xf3\xc7\x6b\x96\xb3\x81\xc7\x2f\xf1\xc6\x1d\x49\xb3\x7b\xac\x88\xd8\x79\xfe\x77\xe9\x00\xe1\xe4\x0e\x2c\x18\x84\x93\x8e\x8f\x6d\xc1\x98\x4e\x2d\xc8\xaf\x5c\xfa\x2f\x9b\x50\xc4\xb0\xe6\x7e\x6b\x46\x47\x51\xfd\xc0\x5a\x9e\x5d\xba\xf2\xe0\x8e\x56\x01\x6c\x18\xcc\xc0\x33\x87\x7d\xb6\x6a\x92\xd0\xcb\x68\x8b\xd3\x6b\xb2\x5c\x79\x44\xfa\x47\x9b\x53\x84\x37\xac\xc8\x66\x6d\xb6\xc0\xd2\x2c\x9b\x0e\xda\xa8\x6b\x1a\x23\xc9\xf1\xa6\xb9\xd3\xa0\x73\x7a\x74\x3a\x5a\x19\x4f\x54\x75\xdc\xbb\x41\x87\x37\xa0\x0f\x16\xef\x54\x92\x1c\x60\x61\x45\xc5\xd5\x5e\xdc\x93\xc6\xdc\xc9\x94\xb7\x22\x5a\xbb\xf2\xd0\xc6\x44\xbc\x45\xce\x91\x18\x67\x5c\x5c\xe5\x78\x3d\xaa\x72\xc8\x8a\x3f\x51\x85\x14\xfc\x68\x5e\x08\xe6\x2d\xdf\xaf\x0a\x6d\x99\x70\x5c\x81\xcd\xbb\x7a\x35\xca\x47\x89\xaf\x1e\xd6\xf8\x95\x05\x8e\x0e\x8c\xf3\xea\xdd\x64\xfa\x09\x5e\x94\xfb\xeb\x06\x3c\xb6\x15\x66\xdc\x88\xa7\xce\x3c\xca\xd1\x62\x17\x4f\x37\xda\xb0\xb7\x6e\xc8\x61\x4c\x35\xad\xe9\x14\x76\x6c\x70\x6a\xa3\x29\x3c\x5d\xcb\xb8\x8c\x16\xfc\x34\x19\xc0\x03\x07\xa3\xb6\x16\x11\x7e\x4b\x6d\xca\xc7\xc1\x00\x96\x23\x0c\x3f\xfd\x74\x92\x80\x2b\xf3\xf3\xcf\x12\x0f\xeb\x16\x0e\xdf\x12\xc5\x78\x69\x9f\x71\x2b\xe0\xdf\x4f\x55\x9f\xf6\x16\x17\x59\x5e\x3a\x81\x96\xca\x55\x5c\xaa\xca\x4b\x09\x9e\x43\x27\xd5\x7d\x36\x4d\xe4\x66\x3b\x67\xc4\x45\xb5\x5b\x7e\x54\x8c\xfc\x2e\xcb\xa5\xff\xa5\xe9\x6f\xeb\x8f\x8d\x36\xb5\x74\x53\xb0\xa5\xf3\x7b\x9b\x50\x95\xe1\x7c\xf4\x67\x69\xfc\xaf\x99\xd2\xd6\x83\x7b\x33\xd8\xfc\xdd\x7f\xed\x78\xa4\x41\xdb\xb7\xf5\x8a\x14\xae\x20\xba\xa3\xd7\xbe\x68\xaa\x09\x28\x95\x84\x6b\xaa\x43\xa1\xbb\xd8\xe9\x77\xbc\x7b\x8f\x34\xfe\x38\x0f\xaf\x39\x9f\xd8\xbf\xf8\x58\x99\xe4\x83\x52\x53\x16\x95\x62\xee\x75\x38\xbe\xdb\xa6\xa4\xb4\x45\xe1\x9c\xc9\x98\x59\x19\xab\xfa\xea\xc7\x87\xde\xf2\x77\x6f\xdd\xe3\x43\xe7\x4e\x88\x01\xc8\x0b\x99\xb5\x58\xe3\x9f\x39\xb2\x09\x8e\xd8\xb2\x0a\x73\xd8\xe1\xb7\x05\xd1\x57\x1e\x53\x4c\x3e\x1e\x29\x5d\xf9\xb9\xb1\x98\x73\xbd\x49\xd0\x3b\x9d\xa8\x1a\xba\x15\x4d\x2b\xb5\xd9\xbd\x52\x9f\xb6\xa1\x04\xb7\x74\x60\xef\x17\x5f\x39\xed\xaa\xbd\x21\x83\x57\xed\xe7\x2b\x25\x99\xaf\xd5\xee\xf9\x30\xde\x89\x4c\xe4\x54\x46\x55\xb5\x5c\x24\x9d\xdd\x04\xfb\xda\xf7\x65\x39\x7d\xc7\x50\x1e\x55\xfe\x3d\xa4\x01\xcf\x75\xd5\xcf\xa6\x6e\x84\x0d\xd7\xa0\x96\x26\x8d\x9c\xd7\xa7\x9c\x94\x54\x23\x54\xb0\x6e\x4a\x9d\x52\xee\x53\x1f\x32\x55\xcb\xd5\x0c\xe7\x56\x86\x1d\x72\xfa\x56\x4a\x73\xf4\x24\xdd\x31\xdd\x93\xe8\x28\xe8\x20\x19\xc4\xa1\x4f\x40\x53\x1e\x69\xe3\x04\xbb\xc0\x73\xc0\xe5\xe9\x75\xde\x51\x3e\x76\x3d\x72\x65\xbd\x0e\x8f\x40\xba\x9b\xc6\xc6\xe9\x83\x39\xda\x0e\x81\xd6\x84\x15\x7a\xf4\xfe\x8a\xa1\x04\x51\xbd\x6c\xa2\x6d\x20\x06\xbe\xcb\x22\x78\xcd\x15\x65\x44\x0c\x53\x4e\x6a\xc2\x6c\x7b\x58\x48\xd6\x3e\x15\x8c\xd8\x02\x8a\x3c\xdb\xfa\xb5\x66\x2f\x61\xaf\xd2\xaf\xbd\xe0\x1a\xda\xfa\xf6\x96\x92\x09\x3d\xd0\x06\x6a\x1c\xdc\x7e\xf7\x80\x76\xa2\x16\x9b\xd9\x1c\x7a\x15\x63\x33\x5a\xa0\x26\x4e\x3e\xc7\xb1\xfe\x48\x63\x45\x33\xfe\xe7\x6f\x9a\xd3\x4e\xc3\xa7\x01\xf7\xa0\x28\xd4\x25\xe5\x07\x77\x15\x8c\xec\x96\x8f\x1e\xec\x3f\xa5\x4a\xac\xb6\xc4\x0b\x35\x44\x30\x71\x90\xd0\x31\x22\xf1\x08\x96\x5a\x21\x52\x25\x2a\x1f\x49\x53\x78\x72\xb0\xef\x37\x0a\x5b\x68\x26\xc7\x40\xa5\x84\x25\x92\x40\x2e\x6c\xde\x32\x9d\x74\x34\x3b\xea\x6a\x62\xd6\x18\x40\x89\x24\xe1\xc2\x9e\x28\x8f\xd0\x23\x1c\xa8\x82\x5a\x92\x50\xb4\x50\xc2\x78\x02\x6e\x45\xd0\xdb\x2c\x67\x1a\x86\xae\xaa\x9d\x77\xb4\x09\xa0\xb7\x94\x4e\x27\xf7\x7a\xb4\xd0\x23\x5b\xff\xc3\x34\xec\x6a\x59\x68\xa2\x56\xa2\x88\x3c\xda\x81\x99\xbe\xe1\x4a\xd5\xd6\x68\x60\x16\xcd\x71\x35\x37\x21\x9e\xd3\x3e\x81\x91\x67\xe6\x37\xd0\xc6\x94\x15\xb2\xef\x0d\x8a\x7d\xac\xbf\x40\x99\x4f\x6e\x28\x76\x9a\x71\xd7\x36\x8d\x81\x49\xd7\x4e\x0d\x42\x3a\xd9\xa4\x79\x54\x92\x48\x9d\xa8\xd9\x3f\x7c\xaa\xa3\x67\xf5\xf9\x5a\x38\x26\x49\x14\x04\xb5\x4d\x85\xad\xf3\x11\x97\xf2\xfc\x5b\x72\x11\xa3\xa4\x6f\x09\x56\x0b\x37\xe9\xdb\x9b\xe0\x8a\xf0\x51\x9a\x0b\x32\x55\xe5\xd0\xa5\x06\xb1\x3a\x4f\xcc\x31\x4b\x4c\x48\xb5\xd5\xe8\x6a\x68\x7c\x03\x43\x99\xfa\x71\x7d\xae\xf2\x7d\x27\x91\x19\xd3\x21\x8e\x6f\x48\x8b\xbc\xeb\xbb\xfa\x6c\x5c\x35\xb0\xad\xbf\x1c\x9a\x41\xdf\x34\xdd\x2c\xb1\x53\x72\xb4\xa8\x82\x18\x3c\x1d\x78\x03\x34\x44\xb4\x2a\x88\x61\x3f\x06\x57\xba\x9d\xea\x41\x1a\xab\x8d\x21\xd0\x5a\xe2\xe3\xd8\xcd\x65\x29\x0d\x20\xe6\xe3\xbe\x68\x0f\xfd\xa6\x8f\xbf\x99\xe4\x90\x16\xf5\xf2\xc8\x88\x41\x99\x6b\x8d\xfa\xa8\xf4\xd3\x7d\xc0\xb9\x29\xc5\x00\x6c\x58\xcf\xab\xea\x1a\x2c\x60\x69\x41\x95\x02\x1e\xae\xa2\xe9\xcd\x8d\x66\xbd\x81\x2f\x37\xa8\x8c\x07\xe4\x56\x5b\xe5\xac\x03\xaf\x91\x48\x43\x79\x14\x1f\xf9\xa6\x3a\x58\xf8\x56\x7b\x50\xd9\x96\xac\x30\x27\x72\x55\xd8\x29\x89\x1a\x14\x6d\x7c\x9d\x4a\x6b\xb3\x6b\x60\x6d\xca\xda\x77\xee\x06\x7f\x69\x76\x6b\x12\xc4\xc6\x64\x31\x53\xb3\xa2\x7d\x7b\x6e\x4d\x04\xd0\x7a\x92\x0c\x6e\xef\x28\x6c\x49\xf5\x28\xc0\x94\x93\xa4\xc3\x4c\xbb\x68\x9b\x95\xec\x81\x95\xf4\x31\xf5\x0f\x67\x63\xb2\xa9\x0a\x1e\xad\x93\xc2\x3d\xf8\xeb\x67\xfc\x10\x42\x76\xec\xf9\x96\xcf\x06\x51\xec\x56\x33\xee\x84\x46\xdb\xac\xae\x50\x68\xd8\x06\x5d\x62\xda\x41\x4f\xa6\x9c\x77\xed\x0c\x25\x01\x1e\x74\x74\x34\x74\x63\xd3\x67\x76\x26\x9d\x04\x61\x70\xaa\xb3\xe7\x9e\x8f\x9b\x7b\xb0\xbe\xa1\x21\x58\xad\xdf\x50\x22\xee\x36\x2b\x3b\x01\xaf\xdb\x44\xfa\xcc\xfb\xdd\xe4\xfd\x7c\xab\xd1\x5e\xb3\x5a\xa3\xcd\xa8\xc7\x6c\x34\x32\xcc\x84\x4d\x16\x23\x3e\x1c\xb8\x9f\xcf\xa9\xe2\x55\xdd\x72\x9d\x0b\x12\xcb\x6d\xb9\xbd\x41\x5f\xd4\x56\x34\x89\x2b\xfd\xf0\x6d\xb6\x14\x7f\xb3\xc7\x24\x3d\x6d\x90\x75\x11\x24\xae\xda\x20\x1a\xe8\xb9\x26\x88\x8b\x62\xdc\x6a\x82\x3c\x56\x9e\x2e\x62\xf2\xae\xae\x88\x0c\x30\x4d\xca\xa8\x45\x31\x28\x4c\x97\xba\xcb\xf2\xa8\x87\x92\xe8\x2d\x7c\xad\x7b\x85\x5c\xff\xbe\xff\x87\x4d\xff\x9d\x1f\x1f\xd3\x85\x77\x3c\x17\x15\x03\xa5\xab\xef\x17\xbe\x43\x73\x9c\xfa\x3e\x0c\xe7\x08\x3c\x47\x42\xc2\x90\xba\xef\x2c\x75\x07\x8e\x4d\x2f\x87\xb0\x16\x41\xd1\x1d\x02\xac\xe1\xec\x13\x4e\x2a\xab\x76\x79\xb7\x73\x6b\x10\x71\x89\x5d\xb6\x7d\x87\x4e\x05\x1d\x0e\x6a\xd1\x05\x19\x3c\x48\xd0\x41\xae\x35\x91\x6b\x99\xc8\x9a\x24\x5a\xd8\xd0\xf6\x52\xd1\x35\x1e\xa5\x62\xc1\x37\x45\x3a\x1e\x17\xc1\xd6\x19\x86\x33\x19\x2b\xab\x2b\x0a\x1e\x7c\x9e\xeb\xeb\xd2\x7c\xad\x21\x32\xa7\x92\x56\xc5\x7a\xd8\x90\x66\x6e\x2f\x89\xf5\xb6\xc3\x62\xe8\x8a\xf0\x51\x29\x27\xc2\xc2\x65\xe2\xb2\xd2\x33\x0c\x22\x35\x55\xdc\xf1\x1a\x6f\x67\x73\x73\x76\xb3\x58\x9e\x62\x1b\x19\x4c\x10\x1c\x29\x5d\x18\xd4\x98\x60\x34\xea\x5d\x4c\x35\xe2\x2b\xb7\x88\x7b\x2d\x5e\x57\xce\x06\x56\xfc\xae\xee\x59\x22\x39\x0e\x8d\xd7\x39\xb2\xeb\xeb\x44\x2a\x42\x36\x61\xa6\x51\x6a\xd8\x04\x8b\x3b\x84\xce\xa6\x8c\x0c\x30\x7b\x8a\x8a\x64\x95\xf9\xac\xbc\xb9\x7f\x86\x77\xdd\x60\x23\x30\xdb\x61\xd4\x78\x21\x82\x21\x75\x8a\xcc\x50\x58\xda\x30\xa2\x72\xca\xc7\xf0\xb6\xb8\xfc\x43\x86\xc9\x4b\x1c\x69\x0f\xd1\xef\x22\xb3\x35\xcd\xaf\xdc\xab\x98\x9b\xa0\xed\xa7\x4e\xc8\xaa\x05\xe7\x55\xbb\xab\x2b\x69\xbd\x4c\x04\xf2\xb6\xbd\xae\x63\xf1\x2c\xa7\xde\x87\x4d\xba\xdd\xb9\xcc\x2b\xb8\x36\xe8\xfa\xad\x4b\x4c\xcf\xad\x44\xd6\xa8\x95\x2c\xbb\xb5\x74\x2d\xdf\x36\x9f\x55\x9b\xb2\x9e\x08\x2c\x1f\xc1\xc3\x7b\xe5\x1d\x4e\xa5\x27\x6c\xab\x9b\x11\xda\x35\xb4\x01\x3b\x2e\xa6\x95\x7b\x07\xb6\x3a\x21\x75\x94\xe5\x7c\x7a\x1d\x49\xda\x60\x1d\x9a\xca\xbc\x4e\xe8\x8f\x4f\x91\x54\xf4\x4c\x6e\x5a\xd5\xd1\xf6\x3d\x4b\xfe\x4f\x57\x79\xd3\x0d\xd0\xe3\x11\x9d\x24\xcc\x33\xa2\x90\x62\xcd\x12\xef\xd1\xb1\xc5\x70\x9a\x1b\x81\x29\xca\xfb\xa4\xd1\xc7\x5d\x77\x1c\xe6\xd8\x6b\x11\xe0\xe3\x38\x82\x55\xdd\x62\x43\xf5\x3c\xa6\xab\x74\x2b\x58\x83\x39\x78\x5c\x6b\x69\x50\xbb\xb0\xb4\x44\xc0\xa5\x0d\xd3\x55\x4f\xe6\x1e\x14\xff\x5d\x58\x46\x73\x09\xdf\x77\x75\x3d\x28\x6b\x96\x0f\x83\x39\xf8\x37\x47\xc1\xe6\xed\x7b\x98\xdb\x44\x49\x53\x37\x2a\xbe\xbe\x29\x57\xd2\x13\x72\x2a\x40\x03\xb9\xb7\x91\x5a\x14\x3f\x52\x50\x66\x45\xed\x4f\xa5\xa7\xfa\xe5\xac\x89\x84\xd2\x45\x59\x75\xdd\x74\x53\xca\x16\x88\x9c\xc6\x1f\x55\x22\x8e\xbc\xfd\x40\x27\x19\x9b\xf6\x8d\xb3\x34\x66\xdc\x54\x58\x60\x69\xe0\x70\x8a\x26\x24\x96\xaf\x74\x12\xad\xf6\x1b\x31\x15\x91\x92\x58\x6a\xdf\x53\x8e\xe5\xb1\xef\xde\xe5\x64\xcc\xf5\x45\x0f\x65\xc0\xcd\xe6\xdc\x08\x29\x9b\x77\x44\x7e\xe8\xdd\x80\x6d\x23\xf6\x36\xc4\x7d\x18\xd8\xa6\x49\x53\x2c\xc9\x04\xff\xc5\x26\xae\xe8\xbe\x5e\x65\x79\xa4\xf2\x6a\x61\x8f\x54\xe5\xdf\xd7\x56\x45\x83\x60\x68\x2e\x61\xd1\x49\x2d\x1b\xa9\x3d\x12\x5f\x17\x58\x6b\x5f\x4d\xd8\xcb\xeb\x7a\x3d\x6b\xca\x25\x96\xcf\xf7\xe6\x95\xd5\x9b\xe1\x77\x71\x54\xde\x6c\x8f\xdf\x3f\xe0\x74\x0b\xb0\x9b\xc1\xfb\x43\x72\x9b\x49\x45\x04\x58\x95\xd7\x80\x78\x9c\xd2\x3d\xbe\x25\x3c\xb9\x21\x15\x8b\xa7\x92\x0b\xa2\xbd\x9a\x8b\x46\x64\xe3\x31\x8c\x60\x53\x5b\x4f\xec\xb4\xf5\xe8\x46\x53\x19\x37\xc7\x8e\xe4\x9a\x6b\x53\x52\xb8\x89\x1a\x97\xba\x6a\x10\x15\x8d\x64\x7a\x17\xee\x5d\x2a\xe2\x8f\xba\xf3\xbe\xf1\xf0\xae\x74\x02\x6a\x8d\xd8\x3b\x9f\x3c\x1a\x18\x3d\xf2\x3a\x1f\x34\x10\xba\x23\x9e\xf4\x58\xb0\x99\x17\x30\xca\x74\x69\x01\x12\x61\x67\xc0\x8e\xad\xbb\x79\xc7\x76\x4a\x84\x4a\x92\x4e\xa5\x76\x82\xde\xce\x9b\x16\x8a\x7c\x51\x29\x9e\xd0\x5d\xc9\x2d\xf5\x7a\x37\x34\x52\xa8\xad\x25\x9c\x70\xb7\x25\xd8\x83\x70\x35\xb2\x1b\xf7\xfc\x2e\x21\x78\xa0\x7d\x7f\x28\xba\x96\x23\x6a\x4e\x82\xee\x04\x08\x19\xa7\xb6\xfd\x9c\xa3\x3e\x07\x48\xb4\x0c\x54\xf5\xde\xf4\xe3\xde\xbe\x55\xbf\xa1\x6b\x93\x89\x23\x9f\x4b\x4b\xf8\xb1\xbe\x0a\x44\xe5\xe3\xa5\xc2\x40\xbf\xce\xaf\x72\xe5\xf2\x35\x01\xd4\xfb\x82\xa6\x23\x65\x4f\x0b\xc1\xc6\x88\x5b\x98\x60\x3d\xfa\x7a\x71\x03\x40\xca\xec\xdd\xde\xb4\x5e\x44\x6e\xee\x86\x48\xc3\xac\xc7\xfe\x41\xae\xec\xce\x6e\xe8\xd2\x6f\x9e\xed\xf3\x40\x76\xcf\x5c\x82\x6e\x5b\xdc\xd8\x78\x58\x59\xda\xd6\x61\x7e\xed\xa0\xb0\xf5\x32\xbd\xb6\x6e\x76\xf1\x1e\x81\xd7\xbe\xeb\xc9\x25\xe2\xbb\xb6\x58\x5f\xf3\x40\xbd\xc9\xf2\xf8\xdf\x68\x16\x24\x35\x2f\xb8\x18\xe5\x19\x5e\x73\x0f\xf3\xa5\x16\x8b\xf4\x4e\x65\x17\xbc\xf7\x2c\x9d\x6e\xbf\x5c\xa8\xa2\x2f\x5e\xc1\x9e\xda\x23\xa4\xb2\x38\x9e\xcb\x5f\x25\xaa\x49\x73\x83\xd1\x64\x26\x97\x28\x6a\x05\x80\x32\x6b\xc5\xd5\x0b\xaa\x2c\x72\x8e\x83\x46\xc7\x68\xb3\xfc\xed\x3b\x47\x6f\xee\x5e\x72\x51\xa0\x9e\xcc\xed\x3d\xfd\xe3\x63\x2d\x22\xba\x2c\x67\xd7\xb0\xa3\xf9\x20\xdd\x55\x5d\xf4\x16\xba\x63\xa4\x4e\xf6\x87\x35\x1e\xda\x3d\x8e\x5d\x80\x69\xb0\x7c\x04\x73\x8d\x74\xe9\x0e\x6b\xf2\x44\xeb\x8b\x6a\xf2\x78\x9b\x0d\x6a\x32\x71\x9b\x5d\x1d\x6f\xcf\x5d\x28\xa4\x29\x59\x52\x26\x6f\x8e\xfb\x42\xda\x82\x7f\x94\x89\x40\xb5\x01\x30\x16\x74\x8f\xad\x85\x95\x02\x72\xce\xda\xba\xd7\x6d\xb5\xc9\xe9\x08\xec\xb2\x9c\x9a\x60\x0e\x1a\xfb\x9a\xb6\x61\xdd\xbb\x07\x78\x4f\x69\xdb\x44\x83\xee\xe7\x6e\xfa\x67\x7a\xef\xd6\xf7\xa5\x46\x48\xd6\x64\xac\xd4\x4f\xf4\x49\x44\x6d\x96\x9b\x9a\x78\x77\x16\x5b\x58\x37\x81\xb8\x34\xa9\x73\x26\x05\x10\x79\xc7\x51\x0e\x8d\x66\xd3\x28\xac\x5e\x57\x24\x2c\xa8\x5c\x57\x4b\xef\xf7\xae\xe4\x4c\x13\x17\x31\x7d\xb4\xb5\x18\x36\xf6\xd2\x6e\xdc\x03\xe4\x96\x85\x0d\x8e\xb8\xad\xb6\x09\x3a\xb7\xb5\x36\x32\x03\x2f\xd3\xa6\x74\x6d\xe3\xff\xd2\x0b\x07\x5f\xd4\xef\x62\x36\x88\xd1\x1b\x67\x75\x58\xe0\xa2\x6e\xa6\x76\xf6\x0f\x7f\x9c\xa8\x3b\x88\x6c\xa6\xe9\x77\x9b\x28\x6e\x55\x41\xe9\xee\xdc\x0b\x69\xa7\x15\x7b\xc0\xf6\x6f\xe2\x1a\x29\x2a\x83\x81\xc6\x68\x25\x31\xb8\xe5\xe3\xa2\xfe\x75\x53\xbe\xeb\x4b\x2d\x14\x0b\xa4\x4e\x2f\x87\x2b\x65\xc1\x1f\x37\xa4\x27\xad\x02\x39\x0e\xaa\x21\xf7\x72\x8e\x5a\xd6\x57\x88\x0d\xe7\x26\x71\xe1\xf6\x6c\xc9\xae\xb8\x2e\x9a\xa9\xb6\x13\x4a\x97\x65\xba\xd0\x34\x02\xa3\x9b\x5a\xbd\xa1\x22\xbf\xc2\x4e\x05\xc6\x1a\x70\x56\x99\x34\x4b\xe6\xea\xda\x43\xde\x85\xc7\x20\xa6\xc5\x4d\x6b\xa3\x0f\x1a\x10\xf7\x12\xfa\x23\x93\xe6\xd9\xbc\x8b\xa7\xd8\xd3\x54\x32\x08\x05\xbc\xe8\x90\x9a\xbf\xa2\x68\x1f\x81\x5c\xef\x57\x47\xe3\x6e\x34\x52\x6b\x31\x4b\xbd\xea\x2d\x53\xc1\x59\x37\xdb\x25\xf0\xa4\x96\x83\x74\xe7\xf6\x9d\x6d\x7e\x7f\x80\x90\xbd\x70\x8a\x9d\xd0\x1c\x2f\x6a\xc9\x06\x42\xd2\xaf\x40\x33\x34\x34\x9a\x7d\xab\x72\x2a\x2b\x02\xa4\x9c\x81\xb8\xc0\x1f\xba\xb9\x2a\x13\x58\x8c\x45\x3f\xad\x62\xc1\xb4\x89\x4a\x4e\x86\xad\x51\x12\x48\x21\x47\xe5\xcc\x4a\x55\xed\xb8\xb6\x66\x76\x07\x4a\xa1\x56\xcc\x66\x96\x87\x92\xa3\xaf\xf3\xeb\x74\x45\x47\x93\xfb\x88\xbf\x62\xcb\x43\x32\xc8\x1b\x86\x77\x8c\xae\x86\x52\x36\xee\x59\x00\xc6\x77\x81\x5f\x72\x7f\xcf\x0e\x13\x3b\x45\xe3\x3c\xe6\xf0\x2b\xaa\x21\xfb\x63\x68\x40\x7f\x51\x49\x3c\xf2\x4a\xd9\x34\xb4\xb6\xfe\xcc\xb2\x46\x96\x81\x3f\xe5\x5d\x8c\xf6\x62\x99\xb8\xb8\xe4\x05\x97\x9f\x78\x57\x53\x6f\x73\x54\x1a\x3b\xe6\x86\x40\x76\xf1\x16\x77\xa8\x66\x1f\x95\x74\x30\x1e\x2f\xdc\x0a\x8b\x9f\xb2\xb8\xb0\xe7\x8c\x55\x2b\x27\xe1\x94\x60\x74\xda\x64\xc9\x33\xaa\x60\x5c\x18\xd7\x8f\x55\x67\x7f\x5a\x67\x95\x02\x60\x1a\x36\x29\x0c\xd6\xe5\xf0\xa0\xc3\x4a\x95\x9e\x73\xd9\x00\x61\xbb\xe4\x12\x57\x42\xd1\x62\x06\x5b\x02\xec\x16\x68\xf7\xe9\x52\xef\xd6\x00\x6a\xa6\xab\x5d\x21\xed\xc1\x1d\x13\x7d\x70\x7b\x78\xb7\xc0\x60\x0c\x3d\xaa\xdf\xde\x04\xc0\x03\x19\x71\x00\xe9\x40\x23\x6b\xbd\xee\x85\x8c\xba\x97\x71\x31\xd5\xcd\xe3\x6b\xe1\x40\x30\x98\xc7\x61\x24\xa0\x4f\xc8\x7e\x98\x86\xff\xea\x41\xf7\x47\xb9\x99\x00\x2a\xea\x2c\x1d\x38\x9a\xc1\x8b\x46\x2c\xa8\x08\x76\x80\x70\x6b\x54\xe9\x0f\xc5\x92\xd5\x94\xf5\x3a\x79\xb4\x26\x3d\x2a\x18\x2f\xaf\x32\xbf\x8f\xe5\x28\xb1\x07\x42\xc4\x40\xff\x84\x69\xf7\x96\xec\xf9\xac\x5c\xd7\x9a\xdd\x09\xda\xed\xc6\xaa\xed\xe6\xca\x6a\xcb\x76\xbd\x6c\x5a\xe3\xc2\x45\xa4\x97\x5f\xb9\xc7\x11\xdf\xfb\xc4\xe0\xfc\x34\x1c\xc5\x65\x6b\x5d\xa8\xed\x0a\x9c\x06\xe6\x58\x8f\x75\xa5\xca\x3b\x8c\xa6\xff\x99\x4c\xcf\x2f\x61\x6c\x70\xf4\xb5\x01\x23\xce\xb7\x7c\xb4\x49\x11\xbb\xcc\x1c\xe3\xa6\x62\xc4\xcb\xf4\x6e\x56\xd5\x02\x02\xf6\x47\xe0\xc4\x6e\xa8\x91\x85\x78\xbc\xa0\x56\x69\xb3\x06\x00\xc1\x9b\x2e\x0d\x23\xa0\x33\x95\xe3\xbc\x4a\xe0\xdd\xdb\x41\x2f\xe9\x02\xea\xba\x0d\xdf\x9d\x20\xe3\xae\xac\x82\x39\x0c\x5a\x8f\x19\xbc\x5e\x8e\xad\x71\x5f\x15\xfc\x57\x88\x23\x60\x5a\xae\x73\x6a\x9d\xdc\x1f\x80\x30\x48\xc7\x20\x19\x65\xa8\xaf\xdf\x23\x87\x24\x86\x6d\x1e\x16\x9c\xdc\x6a\x98\x4a\xa1\x71\xf3\x70\xa9\xb3\x9c\x5a\x51\x0e\xfe\xd5\xb6\x20\xc9\xf0\x94\x6b\xea\x4c\x53\x21\x0c\x85\xd4\xf9\x88\xa6\x8f\x27\xdf\x6a\x35\xed\xa6\xe2\x42\x49\xdd\xb8\xdd\xff\x59\x19\x2d\x44\xf4\x0d\x99\xf5\x9b\x55\x30\x84\xd3\xf2\xaa\xa5\x2b\x86\xb0\x9b\x2b\xab\x80\x79\xb7\x11\x05\xfb\xbc\xb8\x16\xa2\xfb\xe6\x42\x5d\x9b\x5d\x5f\x84\xd6\x66\xd6\x97\xa4\xff\x05\x45\x12\x93\xd3\x3f\xc9\x5c\xfe\xec\xd8\xaa\x03\x1c\xd4\xcb\xec\x6e\x3b\x01\xe8\x47\x40\xb8\x1d\x58\x90\x3d\x58\xb2\xc1\x00\xf4\x22\x3c\x5a\xd7\x5a\x35\x18\xaf\xbe\x60\x3b\xbd\x89\x47\x20\x7f\x6b\x95\x92\x07\x70\xa1\x1f\x01\x09\x77\x64\x09\x3f\x06\xf7\xf9\xa1\x16\xf3\xca\xae\x73\x7b\xb0\xfd\x11\x08\xe0\x5a\xc5\xe4\xfd\x74\xf3\xe7\x48\x8f\x80\x66\x3b\xb2\x68\x3b\xb9\xb1\xa9\xf3\xa3\x87\x5a\xa5\x80\xec\x66\x83\x5b\x3a\xf5\xb8\xa7\xe9\x6f\x2f\x28\xcc\xbd\xbd\x2a\x41\xb3\x6a\xc0\x0c\x73\xad\xb1\xe5\x78\x25\x7d\x25\x4c\x8a\x5a\x52\xcc\x2f\xb3\xc9\xf4\x32\x3b\x4d\xa3\xb9\x73\x19\x01\x73\xb0\x75\x05\x6a\x32\x51\x11\x26\xfa\x63\x97\xc4\xd6\x69\x85\xec\xd8\xc7\xd1\xa2\x69\xaf\xcb\x0e\x2d\x3c\x7d\x2a\x77\x6e\x80\xf8\x2b\x46\x07\xff\x60\x3c\xf4\xe3\x9f\xc3\x60\x19\x9e\x2e\xb3\xa3\xef\xe6\x46\x57\x6e\xdd\x4e\xfd\xbc\xb9\x2d\xc8\x81\xcd\x1b\xa3\x9b\xdd\xd0\xca\x45\x2d\xce\xf5\x61\x80\xa1\xa6\xf3\x9c\xb6\xf7\x79\x6a\x08\x5f\xf5\xa6\x68\xbe\x1e\x2b\xc8\xd8\x81\xfb\xa8\x0f\xd3\xf2\xd7\x69\x64\x8c\x05\x4b\xb0\x71\x6e\x6b\xa5\x9c\xa0\x2a\xc9\xf8\xf6\x25\x5e\x87\x68\x4a\x15\x75\x8b\x30\x52\x63\x7b\x1a\x1b\xef\x28\x14\x43\x6c\x17\x4c\xb7\x3a\xf7\x46\x49\x3c\xfa\xb0\x87\x2f\xee\x51\x67\xd4\x72\x48\xff\x90\xcc\x64\xfe\x86\x0a\x34\xd7\x96\x11\x3e\x7a\x49\x8d\x6c\x9b\x2a\x09\xf1\x85\x14\xcc\x35\xd6\x5d\xf1\xa5\x87\xbd\x88\x05\x8f\x2c\xd8\x57\xc7\xd6\x44\xf1\xd7\x91\xf4\xad\xe5\x2b\xb4\x98\xf0\xeb\x0c\x84\x95\x35\xf3\xf8\xfa\x5a\xd5\x2e\x94\x5d\x01\x73\x07\x86\x52\x76\xc9\x18\xf8\xe9\x8a\xd6\x30\xa8\xb4\x32\xe6\xc4\xe4\x86\x86\xc6\x0b\xb4\x73\xde\x59\xde\x6e\x83\xfe\x9f\xe9\xbd\x9d\xb5\x84\xb7\xcf\xe0\xf1\x37\xb3\xab\xab\x44\x61\xb6\xbc\x4d\xfe\xb9\x89\xf3\xc8\x6b\x8e\x45\x06\x14\x4f\x12\xd6\x7b\x92\x23\x00\x32\x1a\x5f\x28\x97\x2b\x1a\x72\x01\x8c\x6f\x5a\x67\x23\x34\xd8\xd8\xb6\x8d\xc8\xfc\x2a\x1c\x18\xe9\x95\x2b\x04\x05\xde\xe0\xda\x59\x7a\x10\x92\xa0\x6a\x7e\x7a\xdf\xc5\xeb\x21\xd9\xa7\x98\xfe\xce\x8b\xcc\x27\xc9\xd6\x87\x63\x63\x4b\x75\xbf\x0e\x26\x12\x21\x34\x15\x0b\x57\x3f\xca\xc4\x93\x36\x9c\x8b\xea\x0d\xf5\x2a\x5a\x97\xac\x49\x09\xfa\xbd\xab\x64\x96\xef\xc9\xc4\x19\x57\x35\x63\x84\xfc\xd1\xe1\xad\x41\x3b\xa1\xbe\x89\xb1\x66\x5d\xea\x6b\x0a\xad\x3e\x64\x0a\xbc\x85\x7f\xc1\xb7\xf0\xe9\xb5\x66\xfb\x69\xad\x5b\x03\x02\xbd\xbe\x7d\x60\x7d\x48\xee\x8c\x6d\x83\x04\x34\xc0\xbe\xf0\x2d\x99\x17\xcb\x90\xb4\x53\x14\x47\x30\xf2\xb5\x6a\x14\x46\x1f\x2e\x7e\x71\x69\x79\xd4\xf3\x6c\x5f\x22\x05\xf0\x6d\xc9\xe4\x62\x88\xee\x8a\x54\x0a\x11\xb7\x28\x97\xbc\x89\xce\x17\x4b\x7c\x6f\x79\xa9\xe4\x59\x1e\x8e\x57\x2e\x12\x5b\x93\xd0\x87\x46\x7a\x23\x02\x4a\x24\xdc\x9e\x7c\x46\x57\x49\x5f\x11\xd5\xaf\x2e\x2d\xa5\x76\xae\xed\x6b\x4f\x03\xfc\xb6\xa4\x73\x51\x64\x77\x45\x40\x0d\x21\xd7\x2f\xa3\x58\x20\xe4\x1a\x6f\x61\x73\xa3\xa2\x2c\x97\x81\xd7\xef\xa1\x2f\x30\xd3\x1a\x63\x31\x9d\x0b\x71\x9c\x81\x63\xd5\x63\x15\xd2\x7b\x4b\x2f\x41\x99\x65\xfb\xeb\x8f\xc1\xde\xd6\xe2\x5b\x08\xcd\x5d\x59\x79\x4c\xc2\x8d\x6e\x0d\x3d\xa8\x1a\xa7\x0f\x26\x3e\x71\xba\x5d\x01\xea\x8f\xea\x4e\x89\x10\x90\xd1\x51\x6a\xba\xca\xc5\x1a\xf5\x5a\x0f\xd2\x66\xb3\xf2\xc1\xc4\x08\xe6\xde\xae\x1c\x2d\x80\xec\x4e\x09\x12\x12\x72\x0b\x92\x54\xde\x65\x7a\x4c\x7b\x72\x57\x2b\x40\xcd\x35\xb0\x04\x9b\x88\x2b\x80\xd1\x9b\x19\x1e\x90\x4e\x33\xac\x94\x92\x07\x0a\xff\x9f\xe3\x63\x89\x0a\x75\xf5\xd1\x39\xe7\x72\x32\xf9\x59\xda\x42\xba\xee\xb9\x9c\x09\x5a\x38\x72\x3e\x2b\x17\x1b\xb9\x0e\x7a\xe5\x4e\x48\x76\xab\x4c\xf4\xea\x2c\xed\xcd\x89\xa1\x03\xd1\xda\x96\x86\x6e\xcf\x5d\x59\x1a\x2b\x72\x30\x6b\xa2\xc2\x5c\x06\x2e\x4c\xe9\xae\xd9\x3a\x69\xbe\x24\x05\x3b\x4d\xc4\x0f\xea\x3e\xca\xee\xd2\x1e\x46\xa2\xbc\xb9\xb4\x99\x68\x66\xda\xbe\x8a\xd6\xa0\x77\x6a\x91\xbf\xab\x75\x2a\xe9\x05\xb1\xdd\x15\x1d\xad\x29\xb9\xa0\xc5\x38\x97\xb6\xf3\x64\x14\x2b\x61\xf7\xf1\x64\xf4\xab\xab\x48\xa9\xcc\xf5\x20\x62\xca\xc0\x6f\x57\x4e\x17\xc2\x77\x87\x04\x95\x69\xb9\x6d\x49\x9d\x4d\xfb\x89\xe9\x6c\xba\x8a\x8c\xe2\x2c\x0f\x22\xa0\x00\xf6\x76\xa5\xb3\x3f\xa6\x3b\x24\x9a\x40\xc5\x4d\xcb\x65\x37\x61\x93\x2c\x8c\xea\x74\xed\x36\x75\xe6\x59\x39\xf3\xf0\xc6\x39\xb7\xe6\x24\x2d\x84\xe0\xc3\x49\xce\x62\xc4\xdb\x5e\x08\x9f\x2c\xd6\x9e\x86\xa1\x79\x77\x69\x85\xe6\xcc\xb6\x5d\x91\xb4\xa0\x77\xca\xe5\x6b\x7c\x6d\x8d\xc2\xb9\x38\xbe\x3b\x20\xa1\x96\x96\x8b\xfa\xef\x3d\xc8\x3b\x5f\x58\xc9\xab\xea\x2b\xad\xf4\xf2\x32\xe2\x7a\x45\x95\xf5\xeb\x9e\xa4\x89\x01\xcc\xe9\xd1\xbc\x4e\x5a\x33\x12\xdb\x12\xdc\x55\x31\xdf\x15\x09\x66\xaa\x3e\x88\x08\x53\x38\xa0\xaf\x08\xd3\xcb\xeb\x14\x61\x09\x46\x6c\x55\x84\x19\x89\x87\x16\xe1\xbe\x98\xef\x8a\x08\x33\x55\x1f\x44\x84\xf1\xd2\x54\x5f\x09\xc6\x77\x57\x33\x19\x78\xb6\x07\x30\x19\x08\xf4\xed\x9b\x0c\x0b\xe1\xbb\x2b\xd2\x4a\xb4\x7c\x10\x61\xa5\x33\x94\x7e\xb2\x8a\xc7\x12\x2b\xb1\xae\xf1\xbc\x66\x0b\x92\x3a\xf7\x60\x6a\x23\x82\xba\x08\xb6\xbb\x22\xa7\xcb\x9c\x4c\xad\x47\x4c\x6f\xfb\x1b\xb6\x74\x60\xb0\x1a\xeb\x68\xb6\x87\x90\xd4\xdb\x2d\x5a\xb3\x4b\xe2\xbb\x33\xb2\x7a\xfb\x50\x36\x6c\xaf\xf0\xa7\xbc\xb9\x9a\xa0\x36\x05\x06\xb7\x20\xa6\xf3\x02\xa0\x1b\x11\xd2\x05\x70\xdd\x15\x11\x75\x43\xa0\x9b\x13\x50\xdd\x94\x2c\x6d\x46\x4c\x5a\x5e\x8f\xc7\x1d\xa2\x38\x67\x88\x26\xf2\x17\xc1\xb9\x73\x91\xa6\xda\x91\x8d\x87\xb1\x97\x6a\x4c\xa3\x56\xba\xf8\x84\x2f\x73\x67\x57\x2a\xb8\xed\xfe\x56\xb9\x45\x35\x34\xa7\x8c\x87\x93\xfb\xb7\xc9\xec\x3a\x4e\xf7\xe8\xc3\x3d\xfb\xef\x2a\x07\x75\x6e\x22\x5e\xe1\xd2\x7f\xf2\x2d\xf0\xe2\x26\x9b\x25\x11\x1f\xa1\x13\x17\xf9\x2e\x50\x0c\xa3\x84\x49\x72\xef\x88\xc9\x21\xb6\xd9\x96\x76\x68\x74\x21\x09\xe5\xca\xa3\x4d\xc7\x05\x4b\xfd\x97\x11\x20\xdb\x2d\xce\x34\x1b\xb3\x57\x99\x70\xd0\x41\xb1\x4f\x58\xe1\x0f\xc5\x54\x8d\x62\xa0\x14\xf7\x40\x6c\xa8\x7f\x80\xac\x64\x16\xd8\x6c\x4b\x8d\xe8\x8b\x5a\xaa\xe7\x52\x71\xd3\x4f\x59\x3c\x1e\x94\x4f\xeb\x3b\x1a\x58\x8a\x27\x56\x5d\x82\x68\xe7\x7c\x94\x23\xd7\x1c\x81\x8e\x85\x6d\xc7\xec\xdd\x92\x5b\x8a\x7b\xa1\x34\x1c\x96\x16\x55\x76\xe4\x2a\xd5\x8b\x5e\x64\x7f\xe0\x45\x5e\xe7\x68\x4b\x67\xd7\x86\xa5\xd8\xa3\x64\x40\x75\x63\x34\x12\x89\x64\x70\x59\x21\x7c\x94\x8d\x8c\xa7\x9a\x5f\x20\x61\x5d\x2b\xb2\xe9\x8a\x6b\x6d\xfd\xad\x6f\x43\xa5\x4b\xa7\xce\xf2\xc2\xa7\xf0\xdf\x0c\xcb\x70\x67\x77\x58\xb2\x86\x7a\x7b\xdf\x64\x79\x89\x93\x10\xb1\xaa\xb7\x60\x8b\x78\x32\x05\xa6\x47\x19\xc9\x20\x35\xc0\xe4\xa5\x0a\x0b\x08\x74\x0b\x81\x88\x75\x47\xf0\x72\x6d\x81\x13\x10\xc5\x35\xf2\xe6\x71\xe1\x88\xcd\x2f\xc4\xcc\x43\x81\x73\xb0\x7f\x18\xbc\xc9\x4a\xe9\x5a\x89\x98\x84\xa3\x72\xe6\x7f\x9b\xa5\x75\xbb\xc3\xc2\x39\x41\x25\x77\x85\x99\x5d\xf9\x07\x46\xca\xcc\x3f\x78\x11\x14\xf7\x60\xd7\x7c\xac\xb4\x2e\xcf\xd2\xa5\x35\xcb\x30\x38\x3c\x3c\x44\x64\x49\x62\x7f\xfa\xb9\xff\x5d\xfc\x4f\x59\x48\xc9\x64\x7c\x29\x0d\x57\x6b\x06\xa3\xc6\x38\x16\x12\x1c\xd2\xeb\xac\x38\xd2\x0e\x53\xf0\x91\x2f\x81\x27\xdd\x12\x45\x48\x2e\x78\x7b\xe3\xb3\x74\xf5\xb5\x48\x65\xdb\xc5\xab\xfc\x71\x52\x8a\x7f\x19\xa9\x62\xa4\xd2\x28\x44\x50\xa5\x00\x58\x0d\x41\x51\x34\x8e\x57\xca\x32\x19\x9c\xb9\x1f\xc0\x0c\x20\x2a\xe9\x0c\xcb\x14\x01\xfd\x26\x71\x09\x63\x0c\x7d\x31\x0b\x93\xbb\xf0\xde\x91\x36\x96\xc4\xb8\x04\x29\xc1\x4d\xb8\x68\x9c\x7f\x97\x64\xbb\x43\xb8\xed\x05\xa6\xa5\x14\xa8\xe3\xd6\x7d\x96\xf3\x3f\x84\x9c\xff\x71\x77\x88\x85\x56\x51\xb4\xf8\x8d\xbf\x9d\x58\x50\xd6\x73\xb2\xb5\x18\x1f\xc0\x79\x0a\xeb\x68\xb2\x38\x62\x41\xba\x25\xdd\xa6\x15\x57\x28\xc5\xd8\xa8\x1e\x9e\xb3\x10\xfa\xaf\x52\xb3\x72\xcc\x3a\x15\x54\x1e\x66\x91\x52\x51\x9c\xaa\xdb\x97\x2e\xe1\xf5\xf1\x52\x78\x51\xad\x0b\xf3\x59\x88\x57\x17\xe2\x87\xe3\x72\x23\x4b\xdb\x78\xea\x86\xb9\xdb\x2b\x18\x91\xfe\x76\x16\x81\xb9\xc7\x03\x4b\x6b\x92\x15\x25\x57\x99\x9c\xe2\x9d\x1a\xfe\x84\xff\x36\x0c\x98\xc3\xf1\x39\x55\xac\xaa\x01\xf7\x6d\xd5\x9b\x13\x57\xb9\x77\x3e\x31\xc0\xbc\xc1\x58\xda\x67\x8e\x99\x65\xb5\xed\x03\x95\x75\x08\x42\xb4\xa9\x6b\x94\x8f\x49\x2e\x3e\x5b\xf4\x7f\x4c\xcf\xb5\x2e\xee\xcb\xbb\xae\xbb\xa5\x09\x3f\x4b\xfc\x67\x1f\xf6\x61\xd6\xd3\x12\x4e\xec\x8e\xed\x26\x9f\x88\x27\xf0\xd9\x9d\x5d\xca\xd1\x51\xeb\xf3\x67\x3f\x0b\xf9\xce\xba\xbb\x3d\xa4\xa0\x99\xe5\x55\x9e\x5f\x60\x26\xc4\xf8\xde\x53\xc9\x0d\x8a\x1f\x8b\xed\xe2\x01\xeb\x0c\x4f\xe1\xf1\xae\x9f\xdd\x42\x16\x73\x19\xc6\x7a\x55\xcb\x88\xb0\xa4\xa2\x7b\x1f\x3b\xfa\xc9\x49\x62\xe3\x33\xdb\xe3\x24\x0e\x8b\x17\x1a\x93\x8b\x32\x2c\xe3\xd1\xa2\x19\x80\xc0\xd4\xf8\xdf\x7d\xf2\xff\xf9\xc5\xa5\xf3\xff\xf4\x3c\x6b\x49\xff\x5b\xec\xf2\xae\x40\xbe\xad\x6b\xac\x0b\x62\x6a\x22\xc5\x8f\xfc\x0a\xb4\x50\xd1\x09\x6c\x6f\xc0\x43\xf5\x44\xb3\x18\xe5\x59\x92\xf4\x10\x4d\x7e\x71\x69\xd1\xd4\xf3\x3c\x80\x68\x0a\xe4\xdb\x12\xcd\x05\x31\xdd\x15\xd1\x14\x2a\x6e\x53\x34\xc9\x9c\xe8\x23\x9a\xf4\xe2\xf2\xa2\x29\xf3\x3c\x84\x68\x32\xe4\x5b\x13\xcd\xc5\x30\xdd\x19\xd1\x64\x2a\x6e\x53\x34\x29\x48\xda\x47\x34\xe9\xc5\xe5\x45\x53\xe6\xd9\x7e\x49\x13\x01\x7c\x6b\x92\xb9\x10\xa2\x3b\x23\x98\x4c\x44\x03\xee\x26\xca\x53\x9c\x6a\x0b\x17\x30\xd5\x19\xa8\xe4\x57\x5c\xa9\x9b\xf0\x36\xce\xf0\x5f\x3a\x41\xb6\xa5\x1c\x9c\xf1\x26\xae\x63\x98\xba\xc1\x55\x5a\xac\xe3\x49\xd8\x7c\xde\x60\x63\x6b\x14\x5a\x43\xc7\x89\xe9\x53\xe5\x80\xfa\x58\xe6\xe1\x5b\x9b\x09\x79\x6c\x7b\x8b\x39\xf9\x91\xa5\xb4\x17\x0b\xb9\xe5\xdb\xdc\x7a\xe9\x3a\xf5\xd2\xc0\xee\x94\x1d\xf6\x27\x7c\x21\xe9\x04\xbf\x09\x0f\x5a\x45\xfa\xc1\x48\x0f\x64\x97\x84\xd2\x53\x56\x40\x04\xe8\x03\xd0\xb1\x31\x33\xa3\x37\x39\xfb\xd1\xd3\xa1\xa0\xd5\xb2\x1c\xce\x4b\xfd\xed\xeb\x81\xc5\x14\x76\x81\x3c\xc7\x6e\x74\x5e\x3b\xbc\xd5\x49\xfd\x3d\x3f\x6b\x92\x5c\x4c\x82\xf1\xc1\xd0\xa9\x30\x7a\x0f\x6c\xbf\xfa\xe3\xa4\xd0\x1f\x18\x22\xfb\xda\x99\xfa\xf9\x78\xc1\x97\x07\xa1\xb4\x06\x07\x03\x3f\x7e\x00\x37\x2e\x24\xbe\x91\x66\xd4\xfa\x11\x03\x3d\x12\x0e\xf2\x49\x39\x4b\xfd\x5e\x43\x9b\xbd\xf3\xb2\x3b\xa4\x1d\x27\x45\xf0\x9e\x68\xc3\xd1\xc5\x51\x96\x83\x0f\x3a\xcd\x52\x6a\x6a\xfc\xd4\x0d\x8a\x3f\xad\xd0\xfe\x0e\x46\xbf\xca\x66\xa0\xee\x66\xd4\x27\xf3\x90\x28\x6c\xe1\x1d\x4a\x5c\x7e\xbf\x9b\x13\x96\x11\x00\x4b\x8f\x5e\x4f\x9b\xa1\x31\xaa\xd4\x1a\x25\xc5\xb2\x08\xdd\x44\xfe\xee\x1b\x73\x06\xb9\x72\x5e\xcc\xd3\xa0\x51\x07\xd6\x84\x3d\x51\x0f\x9a\x8d\x82\x63\x91\xf6\x86\x8a\xee\x87\xab\x83\xae\xc3\xe0\x2a\x44\x18\x67\x53\x34\x47\xf9\xa6\xd1\x38\x1e\xc1\xf3\x12\x35\x52\x9e\x65\x65\x4b\xe3\x4a\x60\xa1\x2e\xd1\xdf\x83\xec\x0f\x09\x6f\x95\x6f\xed\x17\x7a\xb4\xe1\x37\x13\xb6\x39\x61\x7d\x86\x17\xa4\x1c\xdb\x05\xd7\x94\xfa\x6a\xab\xad\xe1\xd4\x70\x6f\xb1\x38\xe5\x82\xa9\x0d\x0e\xef\xea\x47\x52\x0d\x6b\x6c\x13\xca\xee\x0f\x20\x11\xee\xb9\x00\x80\x52\x4b\xae\x73\xe2\xfc\xce\xc5\x34\xd6\x8e\x5e\x6f\x38\x56\x10\x86\x54\x93\x45\xb9\x59\xe8\x7d\x7d\xc7\xf8\x62\x0e\x3d\x5a\xd6\x95\x7d\x6e\x89\x44\x40\x32\xf5\x11\x85\x56\x52\x99\x6f\x7b\x5c\x9e\xeb\xf6\x42\x67\x69\x4b\x79\xc4\x60\xf0\xf2\xf4\xed\xbb\xd3\x93\xe3\xcb\xd3\x97\x4c\xcf\xdb\x2f\x0f\xff\xb2\xdf\x82\xec\x9a\xae\x83\x33\x34\x5b\x73\xc1\xd7\x84\xbc\xe3\x9b\x07\xd3\x04\x18\xec\xac\x9b\xc7\x70\xc9\x5e\xa8\xba\x51\x9f\xfc\x52\xce\x99\xd2\x2c\x52\x24\xe7\x60\xa4\x37\x5f\x27\x65\x37\x6e\xb0\xff\x3c\x88\xc7\xf0\x3a\xe8\x95\x3b\xc7\xdc\x40\x9c\xf4\xe7\x44\xb1\x24\xfe\xa0\x50\xb1\xf0\xe6\x10\x65\x23\xea\xed\xd9\xcc\xa1\x2f\xff\xbc\xef\x21\x2e\x03\x1d\x05\xa7\xbc\x56\x05\xec\x5f\xfe\x85\x10\xe8\xa5\xb3\xe8\x8a\x51\x79\x9e\x35\x95\x09\x79\x90\x05\x43\xc0\x6c\x6d\xbd\xac\x07\xf5\xc7\xbe\x5c\x98\xa6\x4e\x68\x75\xed\x19\x2e\x11\xf6\x2d\x18\x65\x09\x6e\x36\x08\x25\x20\x4e\x2d\x56\xf5\xf6\x04\x62\xcb\xe8\xf2\x5a\x01\x41\x0d\x47\x1f\x5a\x2d\x79\xfd\x95\xeb\x8d\xdb\x64\x0d\x70\xc0\x67\xc5\x8d\x1d\x92\xc6\xa2\x6d\x7b\x12\x7e\x50\x41\x8c\xbf\xc3\x66\xa4\xee\xf4\x64\x7e\x64\x85\x49\x82\x43\x5c\xe0\x87\x03\x3d\xb0\x75\xba\xdb\x52\xe4\x76\x08\x49\x77\xcb\x26\x4d\x46\x7f\x60\x50\x43\xbf\xcf\xad\xfc\x59\x32\xaf\x55\xaa\x38\xe1\x01\xa7\xaa\x41\x53\x1d\x54\xb7\x23\x2e\x68\x64\xfb\x2f\x96\x72\x2c\x2f\x20\x22\x1e\xa7\x81\x4f\x11\x99\x74\x80\xe6\x4b\xa1\xf2\x38\x4c\xe2\x7f\x87\x48\xcb\xfd\x9e\xdc\x19\x12\x22\xd6\x9e\x32\x93\xd7\xb9\x57\x65\xdf\x59\x0a\x33\x72\x88\x19\x3e\x18\x6a\x13\x08\xc0\xbc\xba\x27\x18\x4d\x90\x67\x28\x99\x06\x14\x27\xd6\xb1\xaa\x38\x95\xcc\x1d\x5a\xd5\xd5\x10\x60\x8d\xcb\x4c\x29\x99\xec\xcb\xe0\xfb\xcb\xd7\xaf\x0c\xd0\x8e\xd0\x0c\xeb\xd4\xe6\xfa\x17\x2e\x53\x91\x88\x31\x43\xbf\x3c\x60\x1e\x40\xff\xe1\xe5\x58\x3a\x81\x2e\x57\x9e\x05\xb6\xc2\x07\xce\xc1\xa4\x01\xd4\x62\x1d\xb0\xb2\x0c\xd0\xe7\x03\x4d\x41\xcd\xd7\xdf\x38\x0c\x29\xdb\xdf\x6f\x97\xb0\x19\xfe\xe6\x04\xd2\x34\x7e\x73\x17\xf3\x43\x48\x03\xea\x70\x4f\x95\xe3\x7a\xe1\xe8\x0c\x15\xe8\x6c\x13\x12\x5d\x7c\x64\x7d\x42\x01\xfe\xc5\x48\xc5\xba\x3d\x0b\xec\x90\xea\x63\x30\xcd\x8a\x58\xab\x35\x27\xde\xe2\x0e\x15\x12\x98\x7a\xcd\x1d\x06\x3f\xc4\xe5\x8d\x3c\xd6\x48\x61\x32\x1c\x65\xe6\x8c\x9d\xe6\x43\xda\x19\xa9\x0f\xd9\xc4\x72\x1c\x0a\x36\x25\x82\xea\x28\x48\x67\x93\x2b\x64\xc2\x4d\x39\x49\x8c\x6f\x80\x3b\x12\xff\x69\x24\x81\xf9\xbc\xa6\xf5\xaf\xf7\x66\x4c\xf9\x1a\xaf\x53\x0f\xcc\x5b\xfa\x9e\x08\x74\xb1\xbc\x5c\x15\xc0\x07\xd0\x07\xab\xc2\x2c\x42\x32\x9d\xc2\x10\x8f\x42\x31\xac\x5b\x4c\x36\xa6\x20\x96\xa6\xfc\xb2\x8a\x42\x52\x22\xb3\x24\x62\xa0\x39\xc7\xbb\xf2\x01\xaa\x13\xbd\x7f\x6f\x40\x99\xb0\x9c\x6c\x56\x9b\x80\xe5\x0c\x04\xef\x47\xcc\x8a\xb8\x50\x88\x10\xf0\x57\xad\x47\x5f\xfc\xd4\x89\x82\x0d\xad\xee\xf0\x44\xa1\x87\x0d\xf1\xdc\x3b\xb9\x14\x08\x6d\xf4\x48\x5c\x13\x96\x17\x4e\xc3\xad\x80\x6a\x45\xad\xba\x24\xe2\xc2\xae\x89\x26\x16\x5c\x66\x03\xc6\xa4\x65\xa9\xce\x8d\xf7\x2c\xb2\x24\xaf\xd4\x98\x02\x7a\x8f\xcf\x74\x5b\x01\xb2\xed\xeb\xea\xe5\x81\x65\xce\xf3\xf7\x8f\x42\x49\xaf\x4d\x22\x36\xa5\x9d\x97\x00\xf0\x91\xda\x6f\xc2\xf5\x0d\xa9\xdc\x93\x5c\x85\x78\xba\x12\x44\x4a\x4d\x81\xf7\xd3\x7b\x7b\xa3\x63\x11\x3e\xde\x01\xd6\x18\x06\x39\x4e\xa3\x53\x39\x17\x08\xbe\xe1\x13\x4b\x24\x65\x3c\x02\x8f\x34\xbd\xc6\xe8\x0a\x8c\x9d\xfb\x01\x1a\x3e\x1e\xa0\x98\x8e\x94\x9b\xc3\x74\xfe\x6c\x8a\xa2\xc7\x19\x01\x38\xba\x7f\x5e\x49\x5e\x72\xa4\xc6\xe1\x2c\x29\x65\x23\xc4\x6c\x78\xf7\x8e\x92\x40\x86\x88\xfd\xb0\x1e\xe8\xf4\x01\xc1\xe8\x26\x4e\x22\x60\x9e\x26\xd5\x08\x80\xb4\x24\xaa\x21\x71\x18\x7c\x73\x6f\x60\x8d\x61\x72\x86\x97\x29\xcb\xd2\x36\x8e\xf3\xa2\x34\x42\xf4\x54\xbf\x32\xe0\x13\x08\xf9\x96\x44\x87\x50\xac\x78\xf6\x34\xff\xa0\xc6\x82\x17\xe6\xd0\x78\xd8\x4c\x85\x17\x4d\xa7\xca\x2d\xa7\x26\x5d\x7b\xb0\x39\x47\x81\x05\xda\x22\x1f\x4d\xc7\x4f\xea\x23\x35\x5c\x33\xcb\x9e\x0f\x9e\x8a\x79\xdb\x3d\xd0\x35\x27\x98\xaa\x3d\xe1\x15\x9e\x75\x0f\x16\xa9\x18\xa8\x4f\x84\x34\x4f\x29\x2e\x5d\xcc\x59\x01\x8d\xe8\x4a\x4c\x70\x32\x2d\xef\x07\x6b\xb6\x70\xec\x0d\x8d\x16\xcb\x66\xbe\x61\xb3\xa8\x53\xb4\xa8\x61\x63\x20\x5c\xc6\xa0\xe1\x61\x8e\xc9\x4d\xed\xb4\x69\x9c\x9d\x6d\xcd\x24\x96\xdd\xe2\x31\xd3\xd8\x01\x71\x79\x22\x7f\xc3\x7b\xc9\xfa\xa8\xbc\x88\x47\x77\xa5\xae\xe3\x94\x2b\x30\x3c\x66\xf7\x7f\x65\x30\x1f\x2c\x08\xb0\x2a\xe4\x12\x26\xce\xd5\x63\x8b\x05\xac\x59\x72\x36\x1c\x11\x58\x1a\xda\x1d\x8e\x0b\x68\xa1\x79\x7c\x81\x01\x8f\x1b\xbb\x10\x1e\xa8\x01\xbc\x8c\xba\x17\x7e\xac\x1c\x25\x58\xd5\xf8\xeb\x48\x3e\x5a\xb3\xf5\xc7\x3f\x2e\x68\xfd\x4d\x13\x4c\xac\xe1\xab\x0b\xcc\x78\x2d\x5c\xc6\xe3\xe8\xab\x5a\xda\xe4\xc7\x08\x8c\x27\x1a\x95\xa0\x07\xfa\x15\xb5\xe3\x4a\xcf\x31\x89\xad\x1a\x41\x41\x00\x42\xe4\x0c\x7d\x95\x0a\xf4\xe3\x71\x92\xac\xcc\x78\x87\x36\x3d\x57\x9c\xa1\xd9\x34\xcf\x6e\xe3\x08\x1e\xe1\x51\xaa\x28\x7a\x52\x53\x92\x35\xeb\x0c\x62\x59\xab\x33\x67\x2b\xdc\xad\xe8\x6e\x18\xf1\x44\x06\x44\x0f\x50\x0f\x6e\x94\xf0\x61\xf0\x3a\xa4\x34\x90\x0e\x3d\xee\x2c\x5e\x7f\x17\xae\x2e\xe0\x46\xda\xa2\xea\x1c\x58\x30\x16\xb2\xa2\x76\x84\xc8\x9d\x1b\xa4\x9e\x8a\x00\x91\x3a\x00\x46\x1a\xfb\x9b\x19\x2e\x35\x65\xd7\xa0\xad\xa1\xf7\x9e\xf0\x9d\x62\x7d\x39\xca\x26\x57\x31\xba\xdf\x94\x0c\x24\xd0\x15\x0b\xee\xbd\x43\x78\x3e\x4a\x66\x94\xdb\x0d\xaf\xc5\xb9\x5b\xe3\xa2\x72\xf7\x00\xa6\x41\x17\x4f\xa7\x05\x55\xc0\xba\x30\x60\x31\x99\x16\x83\xc3\x94\x22\x34\x8a\x1e\xa7\x6b\x55\x36\x88\x31\x2e\x03\xfa\x03\x3e\x95\x78\x54\xd3\xfc\x95\x99\xc0\x04\xc0\x44\x97\x37\xb4\x43\xa3\xe0\x9b\x70\x48\x11\x14\xb3\xe9\x34\x89\xb1\x06\x47\x6c\x13\x6c\x60\xbc\x5b\xde\xa7\x28\x49\xe2\x82\x53\x15\x4d\x5d\x06\x4a\x38\x68\x20\x14\x27\x56\xc9\x7e\xcf\xf6\xc0\x6f\x73\x33\xd9\xb7\x49\xc3\xaa\xac\xb3\x98\x8b\x1c\x78\x32\x25\x04\x5e\x87\x99\x46\xc3\xb2\x99\xe6\xd9\x65\x75\xfa\x35\x1b\x54\x2e\x55\x1d\x83\xaa\x53\x9f\xc3\x1b\x4a\x62\x1d\x6e\x24\x4d\x67\x9b\x4a\x66\x89\x4d\x2b\x01\x98\x87\x26\xb8\x09\xea\xb2\x02\x5c\x76\x8c\x3f\xe2\x42\x20\xc5\xd7\x69\x3a\x00\xa5\x95\x57\x2b\x66\xbe\x25\x31\xa4\x1e\x9b\x9a\x0d\xb5\x57\x19\x54\x58\xa6\x0d\x7b\xe0\x2c\xbd\xcb\xc3\x69\x57\x14\xe6\x07\x78\xee\x6e\x10\xb3\x11\xf0\x1c\x93\x6e\x28\x2d\x79\x15\x07\x43\x84\x0a\x01\x98\x02\xf0\xa2\xcc\x7a\x98\x93\x35\xb7\x82\xa5\xf7\x5e\x53\xc0\x42\x09\x52\x78\x47\xf0\x33\xb4\x4d\xe4\xf1\xe9\x41\xd4\xa8\x40\x64\x76\xad\x56\x83\x60\xdb\x24\x93\x75\x88\x55\x5c\xae\x30\x2b\xab\x65\x41\xd2\xfc\x46\x2f\x34\xf8\x62\x73\x69\xf3\x48\xc3\xfc\xc4\xa5\xa6\xd5\xee\x3a\x4c\x73\x37\xc5\x6e\x36\x79\xc9\xed\x9f\x88\x64\xa3\xa9\xbb\x94\x70\xeb\x8f\xe7\xd0\x7c\x69\x62\x2f\xbf\x81\xf5\xa6\xbd\x9e\x3a\x8d\xa7\x53\xd4\xd6\x0d\xbe\x55\xcd\xef\x80\xa7\x8e\xd1\xbb\x10\x33\x1c\x6c\xfa\xf1\xe6\x2c\x4d\x55\xbe\x61\xd5\xb3\x7e\x32\xb7\x6a\x22\x36\x76\x75\x5e\x27\x15\xd1\x5b\x85\x5c\x8f\x58\x11\x31\xe3\x96\x5f\x19\x67\x25\x91\x28\xc0\xae\x92\x36\x3b\x36\x33\xd7\xa0\x31\xd5\x9a\xaf\xb7\x78\xa5\xb9\x1b\x0d\xd5\x9e\x76\x9b\x93\xc2\x3d\x6f\x28\x39\xab\xc1\xc3\xa2\x66\xf3\x0a\xdf\x37\xb7\x01\x7a\xf5\x0c\x14\xe3\x8a\xae\x3f\x8d\x7d\xfb\x4a\x03\x21\xd1\xcd\xe6\xcc\xe2\x0a\x72\x2c\x0c\xc7\xc1\xbf\x55\x9e\x1d\xf0\x1d\xa3\x18\x84\xe9\x9a\x2a\x93\x35\x47\x05\xd8\x09\x63\x38\x7c\x44\xaf\x55\x59\xe1\xe1\x11\xad\x25\xc1\xaf\xc1\x2b\x15\x6c\x16\x46\xc3\xce\xd7\x6e\x16\x5e\xa8\x30\x07\xa8\xb9\xe8\xa4\xdc\xed\x17\x0c\xc8\xfe\x0b\x27\x59\x8b\xd1\x57\x3d\xd0\x00\x8c\x70\x1e\xc6\xa9\xc1\x87\x58\x75\x9e\x3e\x41\x2c\xe3\xff\xb0\x34\x0b\x55\x9c\x74\x76\x5b\x2b\x0f\xef\x61\x67\x1f\xcc\xf5\xfc\x26\x91\x64\x9c\xaa\x17\xdc\x7e\xf3\xf5\xa5\x83\x72\x15\x67\x74\x05\x53\xf1\xe8\xc6\xb5\x9d\xbe\x83\x65\x89\x4a\xaf\xcb\x9b\x56\x5a\xb6\x21\x6c\x7e\xad\x5f\xdb\x19\xe2\xb5\x1d\xba\x11\x41\x17\x2a\x46\x98\x66\xa0\x37\x19\x7d\xdf\xc7\xd5\x3d\x01\x68\x0a\x8a\x05\x46\x38\xc1\x08\xf3\xe6\x8f\x82\x2f\x0f\xff\x7b\xa8\x43\x15\xf8\xaf\xff\xf1\x80\xae\xd2\x89\xc1\xfe\x49\x44\xdd\xab\xbe\xe7\x3d\x61\x24\x7f\xae\x2c\x82\x1a\xce\x51\x83\x47\xb9\xd8\x46\xe2\x0a\x4c\xc5\x5d\x66\x71\x69\x8c\x85\xe2\x05\x4c\xb4\xd5\xec\x51\x91\x0b\x06\xfc\xdc\x17\x9a\xff\xe7\x1c\x44\x49\x9c\x60\x9a\xc5\x56\xf3\xeb\x4b\x52\x18\x78\x76\xea\x39\x9a\xb8\xa5\xce\x62\x00\x5e\xf1\x24\x48\x63\xac\x0c\x1b\x27\xa1\xb9\xec\xa3\x47\xd7\xfb\x91\x56\x7f\x7f\x1a\x58\xbb\x50\xde\xd9\x97\x9b\x0a\x95\x74\xb6\x28\x6a\xb8\xd2\x29\x9f\xbc\xb0\x5a\xb8\xf3\x06\xc9\x8a\x8c\x32\x9f\xbb\x67\x75\xcb\x51\xdd\x22\x85\x15\x28\xe4\xa1\xc1\x62\xde\x4d\x98\x15\xf1\xc0\x73\x16\x63\x15\x8e\xf3\xf0\x5a\x6f\x0c\xcb\xc0\xef\x1d\xda\x6c\x12\x6a\x50\x48\x08\xb4\xfa\x18\x17\xb4\x2e\x6a\x2e\xdd\x32\xd0\xc3\xd7\x1a\xe6\x3e\x31\x44\x27\xa1\x67\xa1\xa8\xa1\xae\x5d\x9a\xdc\xcb\xf9\x05\xef\x90\x76\x69\xf7\xd7\x0d\xde\xad\xdf\x16\xcd\xc0\x57\x91\x0d\xbd\xc3\x6b\xf8\xa0\xa8\xe8\x72\x8d\xcb\x42\x47\x21\xdf\x66\xad\x77\x1d\x86\xb8\xa1\xb3\x79\x49\x49\x4a\xc6\xde\xc0\xa0\xb0\x9b\xc3\x64\x60\x46\x13\x41\x15\x46\xdd\x9b\x21\x4b\x78\x63\xcc\x71\xb0\x3c\x24\x7d\x0f\x6f\xcc\xa6\xf0\x12\x18\xcd\xd7\x37\x94\x1a\x15\xa6\x23\xf8\x14\x0b\x04\xc5\xb6\xce\x69\x99\xab\xd6\xb2\x3f\x1b\x24\x64\x92\x15\x00\x4b\x4d\x3b\xb5\x2f\x86\xcf\x54\x74\xa9\x58\xdd\x80\x8e\x3d\xc7\xf3\x8e\xdd\x16\xde\x78\x42\xb3\xc1\x98\xe7\x13\x3e\xc6\x19\xa3\x3b\x45\x05\xa3\xd3\xcc\x8c\x14\x17\xee\x65\x38\x7d\x61\xd3\x5c\x27\x1e\x57\xc2\x98\x7e\x85\x03\x04\x51\x85\x51\x3f\x5e\x2f\xb4\x13\xed\x2e\xfb\x49\x05\xd7\x15\xef\x22\xab\xa4\x59\xe1\x7e\x32\x14\x52\x36\xe6\xe2\x38\x5c\x8b\x10\x48\xe9\xf0\x47\x5d\x8e\x9a\xb6\xa5\xd0\x2d\x9a\x55\x8d\xd9\x23\x72\x9a\x0e\xd6\x35\x93\xe9\x1b\xbd\x7d\x07\xff\x45\xf4\x81\x7b\x93\x36\x5f\x5d\x35\x04\x83\x11\xe2\x85\xcd\x08\xf0\x88\xd6\x97\xb8\x5a\xa9\xee\x5d\x54\x1c\x85\xdc\x03\x6f\x52\x1b\x2d\x1e\xf1\xca\x46\x88\x73\x74\x49\xa6\x38\x08\xc7\x28\x9b\xd0\xa7\x94\xcf\x5a\x81\x58\x4e\x48\xbb\x0e\x48\x4e\x75\xf8\x15\xab\xc6\x83\x3b\x46\x5e\x33\xd9\x37\x94\x97\x32\xc5\xe8\x8e\x78\xb7\xae\xb0\x8d\x6e\xf0\x9a\x7e\xf3\x19\x74\xd3\x29\x1d\xae\x44\x5d\x15\x06\x2f\x63\x97\x95\xc8\x05\x66\x14\x75\x86\x5d\xa2\x59\xf7\x91\xb3\x36\x1b\x31\x2e\x23\xe9\x35\xf6\x54\x90\xdc\xc1\x39\x11\x98\xb4\x29\xee\x82\xc3\xfc\x59\xc2\x32\x2d\x01\xbb\xc3\xe0\xfc\x5d\xc7\xd7\x2d\x5f\xa1\xd8\xcc\xd8\x39\xc4\xc8\xe3\x5d\x98\x47\xce\xa9\x58\x12\x16\x5d\xd1\xbb\x20\xf0\x69\xf7\xaf\x5a\xd0\x67\x55\x3a\x82\xa4\x3b\xea\xd8\x57\xc6\x12\x04\xf0\xc2\x90\x4f\x0b\x52\xd0\x9b\xb0\x39\x5c\xa9\xab\x26\x39\x34\x6a\x61\x96\xde\x05\x6c\xb9\x07\x22\x4a\x35\xac\x49\x9a\x87\x1a\xb6\xe0\x57\x36\xb4\xd9\x20\x07\x1c\xf4\x8d\x0b\x8f\x38\x8e\xe6\x6c\x24\x48\x7b\x00\xd4\xdb\xab\x7a\xd4\xbc\x7a\x10\x72\x75\x6d\xcb\xcb\xca\x48\xc7\x46\xfd\x38\x90\x9e\xeb\x30\xaf\x86\xff\x62\xae\x73\xa5\x17\x4c\x93\x70\x56\x80\xa8\x6f\x60\xcd\xae\x73\xd3\xd1\xd5\x9c\x43\x81\xcd\x39\x83\x18\x93\x5b\x40\x7b\x3c\x4a\xea\x2c\x6f\xc3\x12\xf6\xfd\xd7\xc5\xa3\xc4\x7e\x05\x1f\x87\xd0\xef\xb7\x2c\xfa\xdb\x24\xec\xe6\xb4\x9d\xc2\xd1\xd3\x75\x18\x3f\x46\xf7\xdc\x84\xb7\x7c\xcf\x4f\xf3\xa4\xc3\xb5\xf2\x0f\x89\xb7\xbf\xda\x6e\xc2\x62\x93\x5b\xf5\xfa\x49\x61\x93\xa8\x7c\x67\x65\x01\x7c\xcd\x10\x7d\x3c\xc4\x93\x1b\x35\xfa\xe0\x2d\xa0\xb6\x34\x73\xed\x79\x85\x4d\x89\x1a\xb5\xdc\x0c\xd7\x76\xcf\xf1\x4e\xe5\x18\xed\xe6\x44\x85\x45\xe9\x1c\x6e\x16\xb5\x73\x41\x26\x1a\x1f\xb3\xd5\xd2\xd9\xb6\x27\x37\x71\xa3\xd8\x48\xbe\x61\x4d\x6e\x76\x9a\x88\x3d\x0c\x45\x67\x41\x98\x40\x79\x70\x06\xf0\x8d\x46\x6a\x4a\xa5\xb5\x6c\xa1\xa9\x21\x7b\x3c\x43\xf1\xab\xc5\x8a\x94\xcf\x9e\x16\xe2\x0f\xf9\x27\x89\xf6\x98\xf3\x70\xd1\x24\x84\x56\xb3\x14\x38\xb8\x80\x49\x6a\x33\x49\x3f\x49\x1e\x6f\xca\xd0\x03\x22\xfb\xbb\xd9\x27\x49\x3d\x35\xef\x54\x6f\x79\xea\x29\x73\xb0\xc7\x4e\x91\xa1\xdf\x2a\xe6\x00\x1e\xf5\x22\xf2\x6d\x26\x01\xfa\xff\x5d\x16\xc1\x5b\x74\x23\xba\x6c\x2c\x97\x77\x3a\x18\x18\x3a\xeb\x75\x9a\x67\x00\x2d\x2b\xe1\x5a\x11\x3c\x57\x47\xe3\xa0\xc2\x3e\xee\xcf\xd7\xba\x2d\xea\x1c\x2a\x47\x51\x69\xe9\x75\xab\x37\xc6\xe9\x6d\xf6\x41\x45\xad\xee\xad\xc3\x1f\x9f\x26\x93\x70\x3a\xd0\x93\xd4\x75\x46\x94\x4d\x4e\xe7\x7b\xb2\x6d\xd6\x6b\x3c\x99\xa8\x28\x0e\x4b\xac\x2b\x3a\xce\xb0\x77\x2a\xe5\x3c\xc4\x57\xc9\x32\x77\xfb\xce\xc6\xee\xd6\x86\x81\x48\xb9\xbf\x31\xe4\x3e\x96\x9c\x73\xc3\x02\x9e\x62\x18\xcf\x4c\x94\xc2\xfc\xb0\x40\x62\xd7\x40\x09\xcb\x07\x3c\x61\x44\xf0\x16\x3a\x5d\xa4\x78\x36\x70\xba\x46\xc5\xc5\xaf\x69\x3c\xc2\x03\x57\x24\x07\x26\x92\x6e\x88\x22\x18\xb9\xcf\x82\xab\x19\x06\x73\x4b\xff\x9a\x8a\x13\xf3\xf6\x92\xb3\xac\x0a\xd6\xb5\x76\x1b\x74\x30\x07\xc2\xd7\x4b\x2e\x09\x73\x52\x15\x55\x4e\x8a\x2c\xca\x6c\x6a\x63\xf4\xf5\x65\xa4\xaa\xc9\x01\xda\xbc\xe1\x22\xe4\x1b\x61\xd6\xfb\xb4\x8c\x1b\xd8\xa5\x7d\xcd\x26\xfe\xed\x1a\xfb\x8c\xab\x6f\xab\x2d\xd7\x46\xf0\x0b\x9f\x3c\x76\x76\xc9\x7b\xf6\x40\xe5\x53\x62\x17\xc7\x26\x3e\x15\x56\x01\xd0\xa6\x2d\x6c\x17\x97\xea\xc6\x12\xdd\x18\x32\xd3\x98\x93\x8f\x95\xf3\xee\xd6\x86\x63\xb6\x48\x3a\xc8\xba\xf0\xd9\xda\x99\x00\xa2\xb7\x94\xf7\xb5\x61\x02\x34\x5a\xf2\x5e\x95\x68\x4a\x7e\xa6\xc9\xcc\x1c\x8e\xb5\x5b\xc7\x72\xd1\xe4\xbc\x75\x61\xb2\x29\x8f\x0e\x71\x5a\x30\xe5\x8d\x0f\xae\x4d\x26\x84\x9f\x70\x81\xf6\xa9\x9c\x51\x56\x2f\xda\x67\xe3\x31\x80\xf4\x96\xae\xf4\x75\xb9\x23\x7a\x22\xbe\xfc\xb7\x74\xfc\xf7\x11\x1a\x7c\x8c\xd1\xc2\xf6\x1e\xa2\x6b\xf3\x4e\x3e\x39\x7a\x14\x0f\x44\x90\x0d\xed\xd8\xdb\x35\x8c\xab\xab\x70\x6b\xbb\xb6\xf0\x6e\x3d\x26\xf1\x4e\x32\x74\x3d\xa6\xf2\xe3\x60\xe0\xaa\x46\xf2\x4e\x32\x70\x75\xe3\xf9\x71\x30\x6f\x59\xb3\xb9\x29\x5e\x85\x77\x68\x54\xb4\x7c\xbc\xea\x71\xee\x33\xb9\xba\x5d\x2a\xca\x52\xa3\xc6\x27\x11\x77\x42\x72\x2c\x1b\x77\xea\x41\x91\x4f\x62\x5f\xad\xaf\x83\xad\x2f\x71\xe0\xd2\xfa\x02\x4e\x8f\x8f\x6f\xeb\xd9\x3e\x1f\x13\x9f\xd6\x11\x69\x7a\x7c\x7c\x5a\x7d\x97\x7c\x4c\x3c\x5a\x75\xaf\xfc\x94\xf6\x01\x8d\xcb\x82\xb5\xef\xfa\x1c\x4c\x86\xd8\x1c\x19\x9f\x7b\x85\x07\xc3\x20\x0f\xd3\x6b\x3a\xa5\x25\xa9\x69\x3f\xff\x2b\xca\x30\x2f\x17\xc9\xa2\xf6\xae\xa2\x1a\x48\xf8\x0e\x2a\x17\xff\x63\x24\x95\xa4\xf6\x63\x9f\xcb\xf8\x56\xd1\x19\x9a\xde\x0b\xa8\x3e\x02\x47\x29\x9c\x0e\x9f\xb6\xe9\x82\x9b\x33\xad\x95\x18\x3c\x5d\x19\x4a\x5a\x2d\x57\x8a\x16\xc8\x5a\x80\xc4\x8f\xb3\x49\x5c\x96\x78\x48\x48\x67\xae\x44\x76\x94\x9b\x38\x9d\xc1\x10\x98\x2b\x9e\x74\xa0\x27\xf2\x91\x00\x8b\x06\xc4\x0a\x27\xa0\x97\x46\x2f\x7a\xa4\x86\x5f\xdc\x64\x77\x34\xea\xbf\x66\x8a\x6b\x8a\x7a\x4d\x5b\x81\x1f\xba\xab\x78\x90\xa5\x5e\xd8\x6d\x5e\x24\x8c\x06\x7c\x83\x0d\xd4\x9a\x16\x04\x9d\x82\x4a\x77\x35\x33\xfd\x61\xf0\xd2\x2d\x84\xfe\x91\x89\x02\x88\xa5\x51\x98\xc3\x8c\xe3\xb1\xc2\xba\xb8\xfc\xae\x47\x02\xfa\x69\x60\xa6\x74\x17\x88\x5c\xca\xa8\xe0\xfd\x3a\x4c\xe3\xe9\x2c\x41\xcb\xa2\x17\xf6\xa0\x18\xc0\x87\x58\xb8\x88\x45\xaa\xee\xfe\x97\x86\x76\xfb\xd5\x79\x73\xb8\x75\xf5\xb4\xe3\xc5\xd0\xe8\x7b\x1c\x4d\x98\xea\x71\x8f\x82\x6f\x65\xb0\xae\xe0\xe6\x96\x90\x35\xc9\x00\x97\x74\xc4\x7d\xe7\xd5\xee\x70\xee\xf8\xd2\xfc\x43\xae\x2f\x18\x7a\x2f\x8d\xf8\x22\x94\x4e\x1c\x88\x14\x83\x6a\x8e\xcc\xe3\xb2\xda\x37\x98\xc9\x61\x33\x04\x34\x39\x1e\x9c\x18\x5b\x12\xff\x4d\x0b\x9a\x41\xc3\xda\xb4\x8f\x52\xf6\xb6\x4c\xee\x87\x13\xf5\x06\x86\x74\x4a\xff\xef\x4f\x22\x35\x4a\xc2\x1c\xef\x7a\x45\xb3\x44\x05\x7b\xdc\xf6\x76\x2f\xf8\x95\x46\x05\x73\x24\x83\x2d\xfc\xaf\xc1\x9f\xdc\x77\x6f\x43\x6d\x3e\xea\x91\x2e\xb0\x02\xe4\xe8\xb9\xf7\xc6\x9f\xaa\x0f\xff\xff\x00\x00\x00\xff\xff\xa3\x3d\x8d\x7a\x4a\x45\x02\x00") + +func uiTsTypingsJqueryJqueryDTsBytes() ([]byte, error) { + return bindataRead( + _uiTsTypingsJqueryJqueryDTs, + "ui/ts/typings/jquery/jquery.d.ts", + ) +} + +func uiTsTypingsJqueryJqueryDTs() (*asset, error) { + bytes, err := uiTsTypingsJqueryJqueryDTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/typings/jquery/jquery.d.ts", size: 148810, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTypingsMithriljsMithrilDTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x58\x5b\x4f\xdb\xc8\x17\x7f\x0e\x9f\x62\xd4\x27\x47\x8a\x42\xf5\x7f\x74\xda\x44\x55\xa1\xe2\xbf\x2a\xd0\x25\x09\x5b\x09\xa1\xd5\xc4\x3e\x49\xbc\xd8\x1e\xef\xcc\x38\x21\x5b\xf8\xee\x7b\xe6\xe6\x4b\x6c\x07\xc2\x0a\x04\xd8\x9e\x99\x73\xbf\xfd\xec\xd3\xd3\xcb\x48\xae\x79\x14\x93\x8f\xc3\xff\x0d\x3f\x12\xb9\xcb\x80\x84\xb0\x8c\xd2\x48\x46\x2c\x15\x64\xc9\x38\x99\xe1\xa2\x08\x78\x94\xc9\x93\x10\x82\x98\x72\x20\x09\x0b\xf3\x18\xc8\x9f\x89\xa5\xfe\x75\xd2\x8b\x52\x09\x7c\x49\x03\x20\x96\xe5\x54\x52\x19\x05\xb8\x75\xd2\xeb\x7d\x9a\x11\x78\x94\x90\x86\xc2\xed\x7e\x65\xa9\xe4\x2c\x8e\x81\x8f\x3d\x01\x31\x04\x92\x71\x9f\x08\xc9\xa3\x74\x35\x20\x54\xe2\xcd\x22\x97\x20\x7c\x47\xf0\xa5\x58\x1a\x90\xe1\x70\x18\xac\xa3\x38\xe4\x90\xfa\xe4\x0b\xe7\x74\xf7\xc9\x50\x3e\xd9\xc3\xb7\x11\x97\x39\x8d\xcf\x63\x48\x20\x95\x4f\x85\xcc\x24\x63\x29\x2e\x7c\x9a\x8d\xc7\xfd\x82\x73\xfd\xf0\xe8\x0d\xea\xbe\xaf\x3e\xa8\x50\xc6\x59\x86\x87\x3c\xbc\x26\x91\x80\xe2\xe8\x0f\xf3\x8c\x5b\x7d\xb2\xbf\x88\x97\x0c\xb8\xdc\xe1\xe6\xa8\xc2\x62\x43\xe3\x1c\x19\xcc\xfa\xd5\xf3\xfb\x07\xbd\x96\xdd\xeb\xc5\x5f\x68\xf6\x78\x44\x4e\x4f\x49\x12\xad\xd6\x92\x2c\x80\xc8\x35\x95\xf8\x2f\x12\x44\xac\x59\x1e\x87\x6a\xad\xa0\xa0\xe9\x6e\xac\xb4\xdf\x22\x27\x15\x3e\xa5\xbe\xde\x29\x3d\x17\xd0\x38\x5e\xd0\xe0\xc1\x27\x4e\x31\x24\xea\x93\xcf\x63\xb2\x61\x51\x88\x5a\x78\xa5\xb1\xe7\x1b\x74\x87\xde\xc3\x33\xda\x2d\x26\x0d\x0f\x47\x8b\x33\x26\xad\x2b\x7d\x72\xc5\x42\x40\xa1\xce\xef\x3e\x69\x89\x04\x0a\x9d\x8d\xde\xca\xbc\x24\xce\x15\xb3\x77\x52\xec\x78\xde\x86\x16\x89\x83\x92\x61\x37\x83\x01\x99\x51\xbe\x1a\x7b\x15\x7d\x7e\x50\x4e\x13\xc0\x12\x8f\xfe\x81\xb0\xa9\x9c\xa5\x18\x90\xc7\x89\xaf\xee\xfa\xad\x16\xa0\x7c\xfc\x95\x3c\x17\xd2\x5b\xcb\x24\x76\x79\xd0\x77\x37\x5a\x45\xac\xa2\x10\x78\xdd\x06\x57\x39\x17\xb3\xcb\xef\x67\x2c\xc8\xd5\x03\x52\xa9\x24\x19\x1d\x41\x82\x2e\x2e\xea\xb4\xb5\xda\x06\xaa\xe3\x05\x70\x03\x01\x07\xaa\x5a\xe0\xc4\x27\x0b\xc6\x62\xa0\xe9\x7b\x88\xbb\xbb\x7f\x8d\x40\x2d\x31\xe4\x74\xeb\xab\x46\xdb\xeb\x79\x9a\xa4\x55\xb3\x1e\xfa\x91\x4a\x58\xed\x9a\xf5\x6b\x3c\xac\x4b\xfc\x59\xb3\x64\xd8\x4c\x2d\xc7\x23\xb2\xa9\x6e\x1f\xce\x0a\x9a\xc7\xf2\xc6\xf0\x72\x55\xad\x59\x97\xad\x5b\xef\x0a\x93\xc1\x85\xa2\x47\x88\x2c\x62\xf3\x46\x69\xda\x67\xd0\xe0\x16\x89\xff\xab\x31\x47\x63\x95\xd2\x85\x33\x55\x15\xe2\x28\x7b\xc4\x93\xa6\xe3\x0d\xc8\x26\x64\x89\x7b\xaa\x9a\xe0\x65\x54\xae\x4b\x3d\x32\x55\x22\x62\xa2\x5b\xd8\xc0\xf6\xc3\x1b\xc8\x62\x9c\x89\x17\x91\xc0\x81\xb1\x6b\x0f\x99\x57\x4f\xff\x9e\xe6\xe3\x3d\xc0\xae\xa5\x3c\x7a\xba\x2f\x41\x6d\x61\x91\x63\x8e\xfd\x9e\x03\xdf\x4d\xf5\xa2\x17\x52\x49\x2b\xfa\x9a\x55\xcb\x59\x40\xf3\xe4\xd4\x49\x31\x24\x45\x82\xc0\xdf\x39\x08\x55\xb7\x1e\xcb\x34\x1c\x28\x7c\xfc\xf3\xe2\xe6\xda\x2c\xf5\x5b\x66\x91\x36\x03\x63\x05\x9c\x2b\xc7\xea\x0c\xc3\x16\xc0\x39\xe3\xaa\x9d\x9f\xab\x9b\x7a\x2a\x8c\x2b\x03\xe7\xcc\x12\xda\x71\xa4\x55\x11\xbb\x34\xa8\xcc\x3f\xd1\x22\xf4\xee\xbe\x45\x95\xbb\x7b\xa3\x8c\x90\x94\x4b\xd5\x89\x72\xa9\x8b\xcc\xab\x88\xc7\x14\x6c\xdd\xc1\x2d\x9c\x74\xdf\x10\x00\x61\x3a\x49\x22\xf2\x48\x82\xb6\x2b\x13\xae\x0e\x13\x16\x3c\xfc\x11\xa5\x21\xc3\xca\x34\xd7\xbe\xbb\xd1\x86\x21\x1c\x52\x61\x77\x8e\x75\xe6\xa8\xbf\x06\x5c\xaa\x37\x06\x2d\x00\x53\x00\x33\x26\xcd\x93\x05\x70\x45\x2b\xe9\x6a\x52\x8d\xbc\x42\x49\x2a\xdf\x1a\x08\x49\x6d\xba\xce\x63\xf2\xf1\xee\x7e\x64\xe4\xa2\x49\x58\x67\xcb\x68\x95\x73\x6d\x2f\x59\xe6\x69\x60\x6e\xd0\x52\x9a\x12\x5b\x27\x2d\x1a\x5a\xd5\x0c\xb9\x56\xf0\xf8\xa2\x72\xd5\xa1\x4a\x6a\xd2\xd1\x14\xcb\xd8\x58\x85\x4b\xc3\x08\xea\x49\xc9\xc6\x1c\x3f\xa0\x6a\x85\x42\xe9\x29\x23\x19\x43\xcd\x75\x08\x63\x85\xb8\xc2\x89\xd6\x5c\xad\xaf\x68\x63\x4b\x4d\x6b\x3e\x28\x35\x3c\x53\x90\x19\x85\xc9\x35\x60\xa2\x2c\x04\x48\xc2\x96\x44\x03\x16\x03\x91\x1c\xcc\x4e\x01\x42\xd1\xe6\xdb\x8d\x0b\x7a\x90\x63\xf2\xa7\x52\x0d\x51\x28\x1d\x3b\xea\xc8\x9a\xb2\x67\x6a\x62\x96\xe6\x69\xcc\x68\x38\xf1\x60\xa3\x88\x37\xc6\x9d\x1a\x2f\xbd\xc4\xe0\x9b\x4b\x84\xce\xb6\x6c\x62\x7e\x98\xdf\x6d\x04\xdb\x83\xad\xdd\x30\x09\x24\x8f\x0d\x08\x3d\x04\x94\xbb\x95\x7e\x05\x88\x31\x92\x82\xe2\xd9\xef\x36\xf9\xe9\x17\x06\x66\xab\x2c\x9b\x91\x67\x15\xf6\x0d\x5a\xe1\xd7\x4d\x1a\x37\x94\x79\x01\x12\xbd\x08\xaf\x50\x3f\x62\x7f\xaa\x5a\x7a\x0e\x42\x7d\x1e\xcf\x5e\xab\x4a\x13\xc9\x17\xb1\xd2\x90\xb1\x8a\xfa\xf5\x82\x64\xbf\x4d\xaf\xaf\xdc\x7e\x17\xb3\xbd\xd7\x88\x7d\x8b\xca\xe6\xfb\xdf\xa5\xb9\xa9\xfd\x52\x3c\xef\x2a\x73\xf1\xbe\x15\x64\x1a\x09\x2d\x22\x2a\x83\x45\xb3\xe2\x20\x58\xbc\x01\xa3\xed\xc4\xa8\x5b\x22\x3c\xd5\xb0\x8b\x2d\xf5\x52\x52\x6e\x76\xbf\x85\x75\x59\x37\xcd\x83\x00\x84\xf8\x6a\xdf\x76\x14\x5e\x9e\x5b\xa7\x55\x7c\x35\xdf\x77\xde\x1e\xff\x79\x27\x7f\x3d\x52\x0b\xee\x7b\xac\xdd\xbc\xad\xb1\x2f\x90\xc5\xfc\x85\xf8\xbf\x22\xba\x6b\x48\x51\xa6\x27\x8c\x91\xe5\xab\xdc\x4c\xbf\xac\xcd\x3b\x0c\x79\x2f\xba\x06\xcd\x41\x3e\xb7\x25\x1f\x15\xde\x01\xd1\x30\xa5\xe4\x69\x9c\xa7\xf8\xde\xb6\x43\x1d\xa7\xcf\xe0\xb6\xdb\x92\xe3\xb8\xce\x5f\xc7\xb5\x41\xf5\x06\x29\xcf\x2d\x71\x2f\xb1\x9d\x8e\x3b\x76\xb8\x35\x0b\x6b\x43\x31\xe7\x71\xed\x51\x00\xaf\xed\x67\x38\x45\xb7\x8c\xd7\x89\x14\xd4\x9c\xb8\xd1\xd1\x53\x79\xba\x42\xe0\x9e\x86\x25\x26\xd6\xbc\xd2\x2d\xa7\x99\x2d\x97\x89\xc5\xa7\xa6\xfa\x2c\xa5\x39\xa1\x4d\x6b\xdd\x47\x65\x0c\xfa\x30\xbb\x33\x36\x75\x0b\xee\x60\x45\x27\x68\x9c\x3e\x2b\x97\x2a\x45\x62\x79\x63\x6f\xe2\x08\xe9\x26\xde\xe3\x1a\xdd\xfc\xf3\xf2\xfb\x85\x94\xd9\x8d\x81\xc9\x03\x72\x10\x24\x97\x42\xd5\x37\xb6\xc9\x3e\x46\x77\xad\xc5\xe2\x8d\x37\x08\xa8\x1f\x76\x1e\x57\xdf\xee\xaa\x61\x78\x3e\xc1\x5a\x77\x5f\xf1\x36\x94\x3b\x56\x7e\xf1\x2d\x6f\x58\xfb\x7c\x37\xaa\x1d\x4e\xba\x8f\xed\x7f\x1a\xfc\x60\xcf\x7d\xb0\x53\x0e\x1e\x33\xc6\x25\xf9\x4c\x92\x11\xaa\xf0\x6f\x00\x00\x00\xff\xff\x3a\xb5\x30\x94\x78\x14\x00\x00") + +func uiTsTypingsMithriljsMithrilDTsBytes() ([]byte, error) { + return bindataRead( + _uiTsTypingsMithriljsMithrilDTs, + "ui/ts/typings/mithriljs/mithril.d.ts", + ) +} + +func uiTsTypingsMithriljsMithrilDTs() (*asset, error) { + bytes, err := uiTsTypingsMithriljsMithrilDTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/typings/mithriljs/mithril.d.ts", size: 5240, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "ui/css/app.css": uiCssAppCss, + "ui/css/graph.css": uiCssGraphCss, + "ui/css/libs/nvd3/1.7.1/nv.d3.min.css": uiCssLibsNvd3171NvD3MinCss, + "ui/css/rest_explorer.css": uiCssRest_explorerCss, + "ui/index.html": uiIndexHtml, + "ui/js/app.js": uiJsAppJs, + "ui/js/libs/d3/3.3.5/d3.min.js": uiJsLibsD3335D3MinJs, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js": uiJsLibsMithriljs020MithrilMinJs, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js.map": uiJsLibsMithriljs020MithrilMinJsMap, + "ui/js/libs/nvd3/1.7.1/nv.d3.min.js": uiJsLibsNvd3171NvD3MinJs, + "ui/ts/app.ts": uiTsAppTs, + "ui/ts/components/metrics.ts": uiTsComponentsMetricsTs, + "ui/ts/header.ts": uiTsHeaderTs, + "ui/ts/models/node_status.ts": uiTsModelsNode_statusTs, + "ui/ts/models/stats.ts": uiTsModelsStatsTs, + "ui/ts/models/store_status.ts": uiTsModelsStore_statusTs, + "ui/ts/models/timeseries.ts": uiTsModelsTimeseriesTs, + "ui/ts/pages/graph.ts": uiTsPagesGraphTs, + "ui/ts/pages/monitor.ts": uiTsPagesMonitorTs, + "ui/ts/pages/nodes.ts": uiTsPagesNodesTs, + "ui/ts/pages/rest_explorer.ts": uiTsPagesRest_explorerTs, + "ui/ts/pages/stores.ts": uiTsPagesStoresTs, + "ui/ts/tsconfig.json": uiTsTsconfigJson, + "ui/ts/typings/d3/d3.d.ts": uiTsTypingsD3D3DTs, + "ui/ts/typings/jquery/jquery.d.ts": uiTsTypingsJqueryJqueryDTs, + "ui/ts/typings/mithriljs/mithril.d.ts": uiTsTypingsMithriljsMithrilDTs, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "ui": {nil, map[string]*bintree{ + "css": {nil, map[string]*bintree{ + "app.css": {uiCssAppCss, map[string]*bintree{}}, + "graph.css": {uiCssGraphCss, map[string]*bintree{}}, + "libs": {nil, map[string]*bintree{ + "nvd3": {nil, map[string]*bintree{ + "1.7.1": {nil, map[string]*bintree{ + "nv.d3.min.css": {uiCssLibsNvd3171NvD3MinCss, map[string]*bintree{}}, + }}, + }}, + }}, + "rest_explorer.css": {uiCssRest_explorerCss, map[string]*bintree{}}, + }}, + "index.html": {uiIndexHtml, map[string]*bintree{}}, + "js": {nil, map[string]*bintree{ + "app.js": {uiJsAppJs, map[string]*bintree{}}, + "libs": {nil, map[string]*bintree{ + "d3": {nil, map[string]*bintree{ + "3.3.5": {nil, map[string]*bintree{ + "d3.min.js": {uiJsLibsD3335D3MinJs, map[string]*bintree{}}, + }}, + }}, + "mithriljs": {nil, map[string]*bintree{ + "0.2.0": {nil, map[string]*bintree{ + "mithril.min.js": {uiJsLibsMithriljs020MithrilMinJs, map[string]*bintree{}}, + "mithril.min.js.map": {uiJsLibsMithriljs020MithrilMinJsMap, map[string]*bintree{}}, + }}, + }}, + "nvd3": {nil, map[string]*bintree{ + "1.7.1": {nil, map[string]*bintree{ + "nv.d3.min.js": {uiJsLibsNvd3171NvD3MinJs, map[string]*bintree{}}, + }}, + }}, + }}, + }}, + "ts": {nil, map[string]*bintree{ + "app.ts": {uiTsAppTs, map[string]*bintree{}}, + "components": {nil, map[string]*bintree{ + "metrics.ts": {uiTsComponentsMetricsTs, map[string]*bintree{}}, + }}, + "header.ts": {uiTsHeaderTs, map[string]*bintree{}}, + "models": {nil, map[string]*bintree{ + "node_status.ts": {uiTsModelsNode_statusTs, map[string]*bintree{}}, + "stats.ts": {uiTsModelsStatsTs, map[string]*bintree{}}, + "store_status.ts": {uiTsModelsStore_statusTs, map[string]*bintree{}}, + "timeseries.ts": {uiTsModelsTimeseriesTs, map[string]*bintree{}}, + }}, + "pages": {nil, map[string]*bintree{ + "graph.ts": {uiTsPagesGraphTs, map[string]*bintree{}}, + "monitor.ts": {uiTsPagesMonitorTs, map[string]*bintree{}}, + "nodes.ts": {uiTsPagesNodesTs, map[string]*bintree{}}, + "rest_explorer.ts": {uiTsPagesRest_explorerTs, map[string]*bintree{}}, + "stores.ts": {uiTsPagesStoresTs, map[string]*bintree{}}, + }}, + "tsconfig.json": {uiTsTsconfigJson, map[string]*bintree{}}, + "typings": {nil, map[string]*bintree{ + "d3": {nil, map[string]*bintree{ + "d3.d.ts": {uiTsTypingsD3D3DTs, map[string]*bintree{}}, + }}, + "jquery": {nil, map[string]*bintree{ + "jquery.d.ts": {uiTsTypingsJqueryJqueryDTs, map[string]*bintree{}}, + }}, + "mithriljs": {nil, map[string]*bintree{ + "mithril.d.ts": {uiTsTypingsMithriljsMithrilDTs, map[string]*bintree{}}, + }}, + }}, + }}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, path.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, path.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} diff --git a/samples/Go/gen-go-linguist-thrift.go b/samples/Go/gen-go-linguist-thrift.go new file mode 100644 index 00000000..3f972e99 --- /dev/null +++ b/samples/Go/gen-go-linguist-thrift.go @@ -0,0 +1,18 @@ +// Autogenerated by Thrift Compiler (1.0.0-dev) +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + +package linguist + +import ( + "bytes" + "fmt" + "git.apache.org/thrift.git/lib/go/thrift" +) + +// (needed to ensure safety because of naive import list construction.) +var _ = thrift.ZERO +var _ = fmt.Printf +var _ = bytes.Equal + +func init() { +} diff --git a/samples/Groff/Tcl.n b/samples/Groff/Tcl.n new file mode 100644 index 00000000..c7fa9f6f --- /dev/null +++ b/samples/Groff/Tcl.n @@ -0,0 +1,275 @@ +'\" +'\" Copyright (c) 1993 The Regents of the University of California. +'\" Copyright (c) 1994-1996 Sun Microsystems, Inc. +'\" +'\" See the file "license.terms" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +.TH Tcl n "8.6" Tcl "Tcl Built-In Commands" +.so man.macros +.BS +.SH NAME +Tcl \- Tool Command Language +.SH SYNOPSIS +Summary of Tcl language syntax. +.BE +.SH DESCRIPTION +.PP +The following rules define the syntax and semantics of the Tcl language: +.IP "[1] \fBCommands.\fR" +A Tcl script is a string containing one or more commands. +Semi-colons and newlines are command separators unless quoted as +described below. +Close brackets are command terminators during command substitution +(see below) unless quoted. +.IP "[2] \fBEvaluation.\fR" +A command is evaluated in two steps. +First, the Tcl interpreter breaks the command into \fIwords\fR +and performs substitutions as described below. +These substitutions are performed in the same way for all +commands. +Secondly, the first word is used to locate a command procedure to +carry out the command, then all of the words of the command are +passed to the command procedure. +The command procedure is free to interpret each of its words +in any way it likes, such as an integer, variable name, list, +or Tcl script. +Different commands interpret their words differently. +.IP "[3] \fBWords.\fR" +Words of a command are separated by white space (except for +newlines, which are command separators). +.IP "[4] \fBDouble quotes.\fR" +If the first character of a word is double-quote +.PQ \N'34' +then the word is terminated by the next double-quote character. +If semi-colons, close brackets, or white space characters +(including newlines) appear between the quotes then they are treated +as ordinary characters and included in the word. +Command substitution, variable substitution, and backslash substitution +are performed on the characters between the quotes as described below. +The double-quotes are not retained as part of the word. +.IP "[5] \fBArgument expansion.\fR" +If a word starts with the string +.QW {*} +followed by a non-whitespace character, then the leading +.QW {*} +is removed and the rest of the word is parsed and substituted as any other +word. After substitution, the word is parsed as a list (without command or +variable substitutions; backslash substitutions are performed as is normal for +a list and individual internal words may be surrounded by either braces or +double-quote characters), and its words are added to the command being +substituted. For instance, +.QW "cmd a {*}{b [c]} d {*}{$e f {g h}}" +is equivalent to +.QW "cmd a b {[c]} d {$e} f {g h}" . +.IP "[6] \fBBraces.\fR" +If the first character of a word is an open brace +.PQ { +and rule [5] does not apply, then +the word is terminated by the matching close brace +.PQ } "" . +Braces nest within the word: for each additional open +brace there must be an additional close brace (however, +if an open brace or close brace within the word is +quoted with a backslash then it is not counted in locating the +matching close brace). +No substitutions are performed on the characters between the +braces except for backslash-newline substitutions described +below, nor do semi-colons, newlines, close brackets, +or white space receive any special interpretation. +The word will consist of exactly the characters between the +outer braces, not including the braces themselves. +.IP "[7] \fBCommand substitution.\fR" +If a word contains an open bracket +.PQ [ +then Tcl performs \fIcommand substitution\fR. +To do this it invokes the Tcl interpreter recursively to process +the characters following the open bracket as a Tcl script. +The script may contain any number of commands and must be terminated +by a close bracket +.PQ ] "" . +The result of the script (i.e. the result of its last command) is +substituted into the word in place of the brackets and all of the +characters between them. +There may be any number of command substitutions in a single word. +Command substitution is not performed on words enclosed in braces. +.IP "[8] \fBVariable substitution.\fR" +If a word contains a dollar-sign +.PQ $ +followed by one of the forms +described below, then Tcl performs \fIvariable +substitution\fR: the dollar-sign and the following characters are +replaced in the word by the value of a variable. +Variable substitution may take any of the following forms: +.RS +.TP 15 +\fB$\fIname\fR +. +\fIName\fR is the name of a scalar variable; the name is a sequence +of one or more characters that are a letter, digit, underscore, +or namespace separators (two or more colons). +Letters and digits are \fIonly\fR the standard ASCII ones (\fB0\fR\(en\fB9\fR, +\fBA\fR\(en\fBZ\fR and \fBa\fR\(en\fBz\fR). +.TP 15 +\fB$\fIname\fB(\fIindex\fB)\fR +. +\fIName\fR gives the name of an array variable and \fIindex\fR gives +the name of an element within that array. +\fIName\fR must contain only letters, digits, underscores, and +namespace separators, and may be an empty string. +Letters and digits are \fIonly\fR the standard ASCII ones (\fB0\fR\(en\fB9\fR, +\fBA\fR\(en\fBZ\fR and \fBa\fR\(en\fBz\fR). +Command substitutions, variable substitutions, and backslash +substitutions are performed on the characters of \fIindex\fR. +.TP 15 +\fB${\fIname\fB}\fR +. +\fIName\fR is the name of a scalar variable or array element. It may contain +any characters whatsoever except for close braces. It indicates an array +element if \fIname\fR is in the form +.QW \fIarrayName\fB(\fIindex\fB)\fR +where \fIarrayName\fR does not contain any open parenthesis characters, +.QW \fB(\fR , +or close brace characters, +.QW \fB}\fR , +and \fIindex\fR can be any sequence of characters except for close brace +characters. No further +substitutions are performed during the parsing of \fIname\fR. +.PP +There may be any number of variable substitutions in a single word. +Variable substitution is not performed on words enclosed in braces. +.PP +Note that variables may contain character sequences other than those listed +above, but in that case other mechanisms must be used to access them (e.g., +via the \fBset\fR command's single-argument form). +.RE +.IP "[9] \fBBackslash substitution.\fR" +If a backslash +.PQ \e +appears within a word then \fIbackslash substitution\fR occurs. +In all cases but those described below the backslash is dropped and +the following character is treated as an ordinary +character and included in the word. +This allows characters such as double quotes, close brackets, +and dollar signs to be included in words without triggering +special processing. +The following table lists the backslash sequences that are +handled specially, along with the value that replaces each sequence. +.RS +.TP 7 +\e\fBa\fR +Audible alert (bell) (Unicode U+000007). +.TP 7 +\e\fBb\fR +Backspace (Unicode U+000008). +.TP 7 +\e\fBf\fR +Form feed (Unicode U+00000C). +.TP 7 +\e\fBn\fR +Newline (Unicode U+00000A). +.TP 7 +\e\fBr\fR +Carriage-return (Unicode U+00000D). +.TP 7 +\e\fBt\fR +Tab (Unicode U+000009). +.TP 7 +\e\fBv\fR +Vertical tab (Unicode U+00000B). +.TP 7 +\e\fB\fIwhiteSpace\fR +. +A single space character replaces the backslash, newline, and all spaces +and tabs after the newline. This backslash sequence is unique in that it +is replaced in a separate pre-pass before the command is actually parsed. +This means that it will be replaced even when it occurs between braces, +and the resulting space will be treated as a word separator if it is not +in braces or quotes. +.TP 7 +\e\e +Backslash +.PQ \e "" . +.TP 7 +\e\fIooo\fR +. +The digits \fIooo\fR (one, two, or three of them) give a eight-bit octal +value for the Unicode character that will be inserted, in the range +\fI000\fR\(en\fI377\fR (i.e., the range U+000000\(enU+0000FF). +The parser will stop just before this range overflows, or when +the maximum of three digits is reached. The upper bits of the Unicode +character will be 0. +.TP 7 +\e\fBx\fIhh\fR +. +The hexadecimal digits \fIhh\fR (one or two of them) give an eight-bit +hexadecimal value for the Unicode character that will be inserted. The upper +bits of the Unicode character will be 0 (i.e., the character will be in the +range U+000000\(enU+0000FF). +.TP 7 +\e\fBu\fIhhhh\fR +. +The hexadecimal digits \fIhhhh\fR (one, two, three, or four of them) give a +sixteen-bit hexadecimal value for the Unicode character that will be +inserted. The upper bits of the Unicode character will be 0 (i.e., the +character will be in the range U+000000\(enU+00FFFF). +.TP 7 +\e\fBU\fIhhhhhhhh\fR +. +The hexadecimal digits \fIhhhhhhhh\fR (one up to eight of them) give a +twenty-one-bit hexadecimal value for the Unicode character that will be +inserted, in the range U+000000\(enU+10FFFF. The parser will stop just +before this range overflows, or when the maximum of eight digits +is reached. The upper bits of the Unicode character will be 0. +.RS +.PP +The range U+010000\(enU+10FFFD is reserved for the future. +.RE +.PP +Backslash substitution is not performed on words enclosed in braces, +except for backslash-newline as described above. +.RE +.IP "[10] \fBComments.\fR" +If a hash character +.PQ # +appears at a point where Tcl is +expecting the first character of the first word of a command, +then the hash character and the characters that follow it, up +through the next newline, are treated as a comment and ignored. +The comment character only has significance when it appears +at the beginning of a command. +.IP "[11] \fBOrder of substitution.\fR" +Each character is processed exactly once by the Tcl interpreter +as part of creating the words of a command. +For example, if variable substitution occurs then no further +substitutions are performed on the value of the variable; the +value is inserted into the word verbatim. +If command substitution occurs then the nested command is +processed entirely by the recursive call to the Tcl interpreter; +no substitutions are performed before making the recursive +call and no additional substitutions are performed on the result +of the nested script. +.RS +.PP +Substitutions take place from left to right, and each substitution is +evaluated completely before attempting to evaluate the next. Thus, a +sequence like +.PP +.CS +set y [set x 0][incr x][incr x] +.CE +.PP +will always set the variable \fIy\fR to the value, \fI012\fR. +.RE +.IP "[12] \fBSubstitution and word boundaries.\fR" +Substitutions do not affect the word boundaries of a command, +except for argument expansion as specified in rule [5]. +For example, during variable substitution the entire value of +the variable becomes part of a single word, even if the variable's +value contains spaces. +.SH KEYWORDS +backslash, command, comment, script, substitution, variable +'\" Local Variables: +'\" mode: nroff +'\" fill-column: 78 +'\" End: diff --git a/samples/Groff/create_view.l b/samples/Groff/create_view.l new file mode 100644 index 00000000..ad083c2d --- /dev/null +++ b/samples/Groff/create_view.l @@ -0,0 +1,135 @@ +.\\" auto-generated by docbook2man-spec $Revision: 1.1.1.1 $ +.TH "CREATE VIEW" "" "2005-11-05" "SQL - Language Statements" "SQL Commands" +.SH NAME +CREATE VIEW \- define a new view + +.SH SYNOPSIS +.sp +.nf +CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW \fIname\fR [ ( \fIcolumn_name\fR [, ...] ) ] + AS \fIquery\fR +.sp +.fi +.SH "DESCRIPTION" +.PP +\fBCREATE VIEW\fR defines a view of a query. The view +is not physically materialized. Instead, the query is run every time +the view is referenced in a query. +.PP +\fBCREATE OR REPLACE VIEW\fR is similar, but if a view +of the same name already exists, it is replaced. You can only replace +a view with a new query that generates the identical set of columns +(i.e., same column names and data types). +.PP +If a schema name is given (for example, CREATE VIEW +myschema.myview ...) then the view is created in the specified +schema. Otherwise it is created in the current schema. Temporary +views exist in a special schema, so a schema name may not be given +when creating a temporary view. The name of the view must be +distinct from the name of any other view, table, sequence, or index +in the same schema. +.SH "PARAMETERS" +.TP +\fBTEMPORARY or TEMP\fR +If specified, the view is created as a temporary view. +Temporary views are automatically dropped at the end of the +current session. Existing +permanent relations with the same name are not visible to the +current session while the temporary view exists, unless they are +referenced with schema-qualified names. + +If any of the tables referenced by the view are temporary, +the view is created as a temporary view (whether +TEMPORARY is specified or not). +.TP +\fB\fIname\fB\fR +The name (optionally schema-qualified) of a view to be created. +.TP +\fB\fIcolumn_name\fB\fR +An optional list of names to be used for columns of the view. +If not given, the column names are deduced from the query. +.TP +\fB\fIquery\fB\fR +A query (that is, a \fBSELECT\fR statement) which will +provide the columns and rows of the view. + +Refer to SELECT [\fBselect\fR(l)] +for more information about valid queries. +.SH "NOTES" +.PP +Currently, views are read only: the system will not allow an insert, +update, or delete on a view. You can get the effect of an updatable +view by creating rules that rewrite inserts, etc. on the view into +appropriate actions on other tables. For more information see +CREATE RULE [\fBcreate_rule\fR(l)]. +.PP +Use the DROP VIEW [\fBdrop_view\fR(l)] +statement to drop views. +.PP +Be careful that the names and types of the view's columns will be +assigned the way you want. For example, +.sp +.nf +CREATE VIEW vista AS SELECT 'Hello World'; +.sp +.fi +is bad form in two ways: the column name defaults to ?column?, +and the column data type defaults to \fBunknown\fR. If you want a +string literal in a view's result, use something like +.sp +.nf +CREATE VIEW vista AS SELECT text 'Hello World' AS hello; +.sp +.fi +.PP +Access to tables referenced in the view is determined by permissions of +the view owner. However, functions called in the view are treated the +same as if they had been called directly from the query using the view. +Therefore the user of a view must have permissions to call all functions +used by the view. +.SH "EXAMPLES" +.PP +Create a view consisting of all comedy films: +.sp +.nf +CREATE VIEW comedies AS + SELECT * + FROM films + WHERE kind = 'Comedy'; +.sp +.fi +.SH "COMPATIBILITY" +.PP +The SQL standard specifies some additional capabilities for the +\fBCREATE VIEW\fR statement: +.sp +.nf +CREATE VIEW \fIname\fR [ ( \fIcolumn_name\fR [, ...] ) ] + AS \fIquery\fR + [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] +.sp +.fi +.PP +The optional clauses for the full SQL command are: +.TP +\fBCHECK OPTION\fR +This option has to do with updatable views. All +\fBINSERT\fR and \fBUPDATE\fR commands on the view +will be checked to ensure data satisfy the view-defining +condition (that is, the new data would be visible through the +view). If they do not, the update will be rejected. +.TP +\fBLOCAL\fR +Check for integrity on this view. +.TP +\fBCASCADED\fR +Check for integrity on this view and on any dependent +view. CASCADED is assumed if neither +CASCADED nor LOCAL is specified. +.PP +.PP +\fBCREATE OR REPLACE VIEW\fR is a +PostgreSQL language extension. +So is the concept of a temporary view. +.SH "SEE ALSO" +DROP VIEW [\fBdrop_view\fR(l)] diff --git a/samples/Groff/fsinterface.ms b/samples/Groff/fsinterface.ms new file mode 100644 index 00000000..1b35e732 --- /dev/null +++ b/samples/Groff/fsinterface.ms @@ -0,0 +1,1174 @@ +.\" $NetBSD: fsinterface.ms,v 1.4 2003/08/07 10:30:42 agc Exp $ +.\" +.\" Copyright (c) 1986 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)fsinterface.ms 1.4 (Berkeley) 4/16/91 +.\" +.if \nv .rm CM +.de UX +.ie \\n(UX \s-1UNIX\s0\\$1 +.el \{\ +\s-1UNIX\s0\\$1\(dg +.FS +\(dg \s-1UNIX\s0 is a registered trademark of AT&T. +.FE +.nr UX 1 +.\} +.. +.TL +Toward a Compatible Filesystem Interface +.AU +Michael J. Karels +Marshall Kirk McKusick +.AI +Computer Systems Research Group +Computer Science Division +Department of Electrical Engineering and Computer Science +University of California, Berkeley +Berkeley, California 94720 +.AB +.LP +As network or remote filesystems have been implemented for +.UX , +several stylized interfaces between the filesystem implementation +and the rest of the kernel have been developed. +.FS +This is an update of a paper originally presented +at the September 1986 conference of the European +.UX +Users' Group. +Last modified April 16, 1991. +.FE +Notable among these are Sun Microsystems' Virtual Filesystem interface (VFS) +using vnodes, Digital Equipment's Generic File System (GFS) architecture, +and AT&T's File System Switch (FSS). +Each design attempts to isolate filesystem-dependent details +below a generic interface and to provide a framework within which +new filesystems may be incorporated. +However, each of these interfaces is different from +and incompatible with the others. +Each of them addresses somewhat different design goals. +Each was based on a different starting version of +.UX , +targetted a different set of filesystems with varying characteristics, +and uses a different set of primitive operations provided by the filesystem. +The current study compares the various filesystem interfaces. +Criteria for comparison include generality, completeness, robustness, +efficiency and esthetics. +Several of the underlying design issues are examined in detail. +As a result of this comparison, a proposal for a new filesystem interface +is advanced that includes the best features of the existing implementations. +The proposal adopts the calling convention for name lookup introduced +in 4.3BSD, but is otherwise closely related to Sun's VFS. +A prototype implementation is now being developed at Berkeley. +This proposal and the rationale underlying its development +have been presented to major software vendors +as an early step toward convergence on a compatible filesystem interface. +.AE +.SH +Introduction +.PP +As network communications and workstation environments +became common elements in +.UX +systems, several vendors of +.UX +systems have designed and built network file systems +that allow client process on one +.UX +machine to access files on a server machine. +Examples include Sun's Network File System, NFS [Sandberg85], +AT&T's recently-announced Remote File Sharing, RFS [Rifkin86], +the LOCUS distributed filesystem [Walker85], +and Masscomp's extended filesystem [Cole85]. +Other remote filesystems have been implemented in research or university groups +for internal use, notably the network filesystem in the Eighth Edition +.UX +system [Weinberger84] and two different filesystems used at Carnegie-Mellon +University [Satyanarayanan85]. +Numerous other remote file access methods have been devised for use +within individual +.UX +processes, +many of them by modifications to the C I/O library +similar to those in the Newcastle Connection [Brownbridge82]. +.PP +Multiple network filesystems may frequently +be found in use within a single organization. +These circumstances make it highly desirable to be able to transport filesystem +implementations from one system to another. +Such portability is considerably enhanced by the use of a stylized interface +with carefully-defined entry points to separate the filesystem from the rest +of the operating system. +This interface should be similar to the interface between device drivers +and the kernel. +Although varying somewhat among the common versions of +.UX , +the device driver interfaces are sufficiently similar that device drivers +may be moved from one system to another without major problems. +A clean, well-defined interface to the filesystem also allows a single +system to support multiple local filesystem types. +.PP +For reasons such as these, several filesystem interfaces have been used +when integrating new filesystems into the system. +The best-known of these are Sun Microsystems' Virtual File System interface, +VFS [Kleiman86], and AT&T's File System Switch, FSS. +Another interface, known as the Generic File System, GFS, +has been implemented for the ULTRIX\(dd +.FS +\(dd ULTRIX is a trademark of Digital Equipment Corp. +.FE +system by Digital [Rodriguez86]. +There are numerous differences among these designs. +The differences may be understood from the varying philosophies +and design goals of the groups involved, from the systems under which +the implementations were done, and from the filesystems originally targetted +by the designs. +These differences are summarized in the following sections +within the limitations of the published specifications. +.SH +Design goals +.PP +There are several design goals which, in varying degrees, +have driven the various designs. +Each attempts to divide the filesystem into a filesystem-type-independent +layer and individual filesystem implementations. +The division between these layers occurs at somewhat different places +in these systems, reflecting different views of the diversity and types +of the filesystems that may be accommodated. +Compatibility with existing local filesystems has varying importance; +at the user-process level, each attempts to be completely transparent +except for a few filesystem-related system management programs. +The AT&T interface also makes a major effort to retain familiar internal +system interfaces, and even to retain object-file-level binary compatibility +with operating system modules such as device drivers. +Both Sun and DEC were willing to change internal data structures and interfaces +so that other operating system modules might require recompilation +or source-code modification. +.PP +AT&T's interface both allows and requires filesystems to support the full +and exact semantics of their previous filesystem, +including interruptions of system calls on slow operations. +System calls that deal with remote files are encapsulated +with their environment and sent to a server where execution continues. +The system call may be aborted by either client or server, returning +control to the client. +Most system calls that descend into the file-system dependent layer +of a filesystem other than the standard local filesystem do not return +to the higher-level kernel calling routines. +Instead, the filesystem-dependent code completes the requested +operation and then executes a non-local goto (\fIlongjmp\fP) to exit the +system call. +These efforts to avoid modification of main-line kernel code +indicate a far greater emphasis on internal compatibility than on modularity, +clean design, or efficiency. +.PP +In contrast, the Sun VFS interface makes major modifications to the internal +interfaces in the kernel, with a very clear separation +of filesystem-independent and -dependent data structures and operations. +The semantics of the filesystem are largely retained for local operations, +although this is achieved at some expense where it does not fit the internal +structuring well. +The filesystem implementations are not required to support the same +semantics as local +.UX +filesystems. +Several historical features of +.UX +filesystem behavior are difficult to achieve using the VFS interface, +including the atomicity of file and link creation and the use of open files +whose names have been removed. +.PP +A major design objective of Sun's network filesystem, +statelessness, +permeates the VFS interface. +No locking may be done in the filesystem-independent layer, +and locking in the filesystem-dependent layer may occur only during +a single call into that layer. +.PP +A final design goal of most implementors is performance. +For remote filesystems, +this goal tends to be in conflict with the goals of complete semantic +consistency, compatibility and modularity. +Sun has chosen performance over modularity in some areas, +but has emphasized clean separation of the layers within the filesystem +at the expense of performance. +Although the performance of RFS is yet to be seen, +AT&T seems to have considered compatibility far more important than modularity +or performance. +.SH +Differences among filesystem interfaces +.PP +The existing filesystem interfaces may be characterized +in several ways. +Each system is centered around a few data structures or objects, +along with a set of primitives for performing operations upon these objects. +In the original +.UX +filesystem [Ritchie74], +the basic object used by the filesystem is the inode, or index node. +The inode contains all of the information about a file except its name: +its type, identification, ownership, permissions, timestamps and location. +Inodes are identified by the filesystem device number and the index within +the filesystem. +The major entry points to the filesystem are \fInamei\fP, +which translates a filesystem pathname into the underlying inode, +and \fIiget\fP, which locates an inode by number and installs it in the in-core +inode table. +\fINamei\fP performs name translation by iterative lookup +of each component name in its directory to find its inumber, +then using \fIiget\fP to return the actual inode. +If the last component has been reached, this inode is returned; +otherwise, the inode describes the next directory to be searched. +The inode returned may be used in various ways by the caller; +it may be examined, the file may be read or written, +types and access may be checked, and fields may be modified. +Modified inodes are automatically written back the filesystem +on disk when the last reference is released with \fIiput\fP. +Although the details are considerably different, +the same general scheme is used in the faster filesystem in 4.2BSD +.UX +[Mckusick85]. +.PP +Both the AT&T interface and, to a lesser extent, the DEC interface +attempt to preserve the inode-oriented interface. +Each modify the inode to allow different varieties of the structure +for different filesystem types by separating the filesystem-dependent +parts of the inode into a separate structure or one arm of a union. +Both interfaces allow operations +equivalent to the \fInamei\fP and \fIiget\fP operations +of the old filesystem to be performed in the filesystem-independent +layer, with entry points to the individual filesystem implementations to support +the type-specific parts of these operations. Implicit in this interface +is that files may be conveniently be named by and located using a single +index within a filesystem. +The GFS provides specific entry points to the filesystems +to change most file properties rather than allowing arbitrary changes +to be made to the generic part of the inode. +.PP +In contrast, the Sun VFS interface replaces the inode as the primary object +with the vnode. +The vnode contains no filesystem-dependent fields except the pointer +to the set of operations implemented by the filesystem. +Properties of a vnode that might be transient, such as the ownership, +permissions, size and timestamps, are maintained by the lower layer. +These properties may be presented in a generic format upon request; +callers are expected not to hold this information for any length of time, +as they may not be up-to-date later on. +The vnode operations do not include a corollary for \fIiget\fP; +the only external interface for obtaining vnodes for specific files +is the name lookup operation. +(Separate procedures are provided outside of this interface +that obtain a ``file handle'' for a vnode which may be given +to a client by a server, such that the vnode may be retrieved +upon later presentation of the file handle.) +.SH +Name translation issues +.PP +Each of the systems described include a mechanism for performing +pathname-to-internal-representation translation. +The style of the name translation function is very different in all +three systems. +As described above, the AT&T and DEC systems retain the \fInamei\fP function. +The two are quite different, however, as the ULTRIX interface uses +the \fInamei\fP calling convention introduced in 4.3BSD. +The parameters and context for the name lookup operation +are collected in a \fInameidata\fP structure which is passed to \fInamei\fP +for operation. +Intent to create or delete the named file is declared in advance, +so that the final directory scan in \fInamei\fP may retain information +such as the offset in the directory at which the modification will be made. +Filesystems that use such mechanisms to avoid redundant work +must therefore lock the directory to be modified so that it may not +be modified by another process before completion. +In the System V filesystem, as in previous versions of +.UX , +this information is stored in the per-process \fIuser\fP structure +by \fInamei\fP for use by a low-level routine called after performing +the actual creation or deletion of the file itself. +In 4.3BSD and in the GFS interface, these side effects of \fInamei\fP +are stored in the \fInameidata\fP structure given as argument to \fInamei\fP, +which is also presented to the routine implementing file creation or deletion. +.PP +The ULTRIX \fInamei\fP routine is responsible for the generic +parts of the name translation process, such as copying the name into +an internal buffer, validating it, interpolating +the contents of symbolic links, and indirecting at mount points. +As in 4.3BSD, the name is copied into the buffer in a single call, +according to the location of the name. +After determining the type of the filesystem at the start of translation +(the current directory or root directory), it calls the filesystem's +\fInamei\fP entry with the same structure it received from its caller. +The filesystem-specific routine translates the name, component by component, +as long as no mount points are reached. +It may return after any number of components have been processed. +\fINamei\fP performs any processing at mount points, then calls +the correct translation routine for the next filesystem. +Network filesystems may pass the remaining pathname to a server for translation, +or they may look up the pathname components one at a time. +The former strategy would be more efficient, +but the latter scheme allows mount points within a remote filesystem +without server knowledge of all client mounts. +.PP +The AT&T \fInamei\fP interface is presumably the same as that in previous +.UX +systems, accepting the name of a routine to fetch pathname characters +and an operation (one of: lookup, lookup for creation, or lookup for deletion). +It translates, component by component, as before. +If it detects that a mount point crosses to a remote filesystem, +it passes the remainder of the pathname to the remote server. +A pathname-oriented request other than open may be completed +within the \fInamei\fP call, +avoiding return to the (unmodified) system call handler +that called \fInamei\fP. +.PP +In contrast to the first two systems, Sun's VFS interface has replaced +\fInamei\fP with \fIlookupname\fP. +This routine simply calls a new pathname-handling module to allocate +a pathname buffer and copy in the pathname (copying a character per call), +then calls \fIlookuppn\fP. +\fILookuppn\fP performs the iteration over the directories leading +to the destination file; it copies each pathname component to a local buffer, +then calls the filesystem \fIlookup\fP entry to locate the vnode +for that file in the current directory. +Per-filesystem \fIlookup\fP routines may translate only one component +per call. +For creation and deletion of new files, the lookup operation is unmodified; +the lookup of the final component only serves to check for the existence +of the file. +The subsequent creation or deletion call, if any, must repeat the final +name translation and associated directory scan. +For new file creation in particular, this is rather inefficient, +as file creation requires two complete scans of the directory. +.PP +Several of the important performance improvements in 4.3BSD +were related to the name translation process [McKusick85][Leffler84]. +The following changes were made: +.IP 1. 4 +A system-wide cache of recent translations is maintained. +The cache is separate from the inode cache, so that multiple names +for a file may be present in the cache. +The cache does not hold ``hard'' references to the inodes, +so that the normal reference pattern is not disturbed. +.IP 2. +A per-process cache is kept of the directory and offset +at which the last successful name lookup was done. +This allows sequential lookups of all the entries in a directory to be done +in linear time. +.IP 3. +The entire pathname is copied into a kernel buffer in a single operation, +rather than using two subroutine calls per character. +.IP 4. +A pool of pathname buffers are held by \fInamei\fP, avoiding allocation +overhead. +.LP +All of these performance improvements from 4.3BSD are well worth using +within a more generalized filesystem framework. +The generalization of the structure may otherwise make an already-expensive +function even more costly. +Most of these improvements are present in the GFS system, as it derives +from the beta-test version of 4.3BSD. +The Sun system uses a name-translation cache generally like that in 4.3BSD. +The name cache is a filesystem-independent facility provided for the use +of the filesystem-specific lookup routines. +The Sun cache, like that first used at Berkeley but unlike that in 4.3, +holds a ``hard'' reference to the vnode (increments the reference count). +The ``soft'' reference scheme in 4.3BSD cannot be used with the current +NFS implementation, as NFS allocates vnodes dynamically and frees them +when the reference count returns to zero rather than caching them. +As a result, fewer names may be held in the cache +than (local filesystem) vnodes, and the cache distorts the normal reference +patterns otherwise seen by the LRU cache. +As the name cache references overflow the local filesystem inode table, +the name cache must be purged to make room in the inode table. +Also, to determine whether a vnode is in use (for example, +before mounting upon it), the cache must be flushed to free any +cache reference. +These problems should be corrected +by the use of the soft cache reference scheme. +.PP +A final observation on the efficiency of name translation in the current +Sun VFS architecture is that the number of subroutine calls used +by a multi-component name lookup is dramatically larger +than in the other systems. +The name lookup scheme in GFS suffers from this problem much less, +at no expense in violation of layering. +.PP +A final problem to be considered is synchronization and consistency. +As the filesystem operations are more stylized and broken into separate +entry points for parts of operations, it is more difficult to guarantee +consistency throughout an operation and/or to synchronize with other +processes using the same filesystem objects. +The Sun interface suffers most severely from this, +as it forbids the filesystems from locking objects across calls +to the filesystem. +It is possible that a file may be created between the time that a lookup +is performed and a subsequent creation is requested. +Perhaps more strangely, after a lookup fails to find the target +of a creation attempt, the actual creation might find that the target +now exists and is a symbolic link. +The call will either fail unexpectedly, as the target is of the wrong type, +or the generic creation routine will have to note the error +and restart the operation from the lookup. +This problem will always exist in a stateless filesystem, +but the VFS interface forces all filesystems to share the problem. +This restriction against locking between calls also +forces duplication of work during file creation and deletion. +This is considered unacceptable. +.SH +Support facilities and other interactions +.PP +Several support facilities are used by the current +.UX +filesystem and require generalization for use by other filesystem types. +For filesystem implementations to be portable, +it is desirable that these modified support facilities +should also have a uniform interface and +behave in a consistent manner in target systems. +A prominent example is the filesystem buffer cache. +The buffer cache in a standard (System V or 4.3BSD) +.UX +system contains physical disk blocks with no reference to the files containing +them. +This works well for the local filesystem, but has obvious problems +for remote filesystems. +Sun has modified the buffer cache routines to describe buffers by vnode +rather than by device. +For remote files, the vnode used is that of the file, and the block +numbers are virtual data blocks. +For local filesystems, a vnode for the block device is used for cache reference, +and the block numbers are filesystem physical blocks. +Use of per-file cache description does not easily accommodate +caching of indirect blocks, inode blocks, superblocks or cylinder group blocks. +However, the vnode describing the block device for the cache +is one created internally, +rather than the vnode for the device looked up when mounting, +and it is located by searching a private list of vnodes +rather than by holding it in the mount structure. +Although the Sun modification makes it possible to use the buffer +cache for data blocks of remote files, a better generalization +of the buffer cache is needed. +.PP +The RFS filesystem used by AT&T does not currently cache data blocks +on client systems, thus the buffer cache is probably unmodified. +The form of the buffer cache in ULTRIX is unknown to us. +.PP +Another subsystem that has a large interaction with the filesystem +is the virtual memory system. +The virtual memory system must read data from the filesystem +to satisfy fill-on-demand page faults. +For efficiency, this read call is arranged to place the data directly +into the physical pages assigned to the process (a ``raw'' read) to avoid +copying the data. +Although the read operation normally bypasses the filesystem buffer cache, +consistency must be maintained by checking the buffer cache and copying +or flushing modified data not yet stored on disk. +The 4.2BSD virtual memory system, like that of Sun and ULTRIX, +maintains its own cache of reusable text pages. +This creates additional complications. +As the virtual memory systems are redesigned, these problems should be +resolved by reading through the buffer cache, then mapping the cached +data into the user address space. +If the buffer cache or the process pages are changed while the other reference +remains, the data would have to be copied (``copy-on-write''). +.PP +In the meantime, the current virtual memory systems must be used +with the new filesystem framework. +Both the Sun and AT&T filesystem interfaces +provide entry points to the filesystem for optimization of the virtual +memory system by performing logical-to-physical block number translation +when setting up a fill-on-demand image for a process. +The VFS provides a vnode operation analogous to the \fIbmap\fP function of the +.UX +filesystem. +Given a vnode and logical block number, it returns a vnode and block number +which may be read to obtain the data. +If the filesystem is local, it returns the private vnode for the block device +and the physical block number. +As the \fIbmap\fP operations are all performed at one time, during process +startup, any indirect blocks for the file will remain in the cache +after they are once read. +In addition, the interface provides a \fIstrategy\fP entry that may be used +for ``raw'' reads from a filesystem device, +used to read data blocks into an address space without copying. +This entry uses a buffer header (\fIbuf\fP structure) +to describe the I/O operation +instead of a \fIuio\fP structure. +The buffer-style interface is the same as that used by disk drivers internally. +This difference allows the current \fIuio\fP primitives to be avoided, +as they copy all data to/from the current user process address space. +Instead, for local filesystems these operations could be done internally +with the standard raw disk read routines, +which use a \fIuio\fP interface. +When loading from a remote filesystems, +the data will be received in a network buffer. +If network buffers are suitably aligned, +the data may be mapped into the process address space by a page swap +without copying. +In either case, it should be possible to use the standard filesystem +read entry from the virtual memory system. +.PP +Other issues that must be considered in devising a portable +filesystem implementation include kernel memory allocation, +the implicit use of user-structure global context, +which may create problems with reentrancy, +the style of the system call interface, +and the conventions for synchronization +(sleep/wakeup, handling of interrupted system calls, semaphores). +.SH +The Berkeley Proposal +.PP +The Sun VFS interface has been most widely used of the three described here. +It is also the most general of the three, in that filesystem-specific +data and operations are best separated from the generic layer. +Although it has several disadvantages which were described above, +most of them may be corrected with minor changes to the interface +(and, in a few areas, philosophical changes). +The DEC GFS has other advantages, in particular the use of the 4.3BSD +\fInamei\fP interface and optimizations. +It allows single or multiple components of a pathname +to be translated in a single call to the specific filesystem +and thus accommodates filesystems with either preference. +The FSS is least well understood, as there is little public information +about the interface. +However, the design goals are the least consistent with those of the Berkeley +research groups. +Accordingly, a new filesystem interface has been devised to avoid +some of the problems in the other systems. +The proposed interface derives directly from Sun's VFS, +but, like GFS, uses a 4.3BSD-style name lookup interface. +Additional context information has been moved from the \fIuser\fP structure +to the \fInameidata\fP structure so that name translation may be independent +of the global context of a user process. +This is especially desired in any system where kernel-mode servers +operate as light-weight or interrupt-level processes, +or where a server may store or cache context for several clients. +This calling interface has the additional advantage +that the call parameters need not all be pushed onto the stack for each call +through the filesystem interface, +and they may be accessed using short offsets from a base pointer +(unlike global variables in the \fIuser\fP structure). +.PP +The proposed filesystem interface is described very tersely here. +For the most part, data structures and procedures are analogous +to those used by VFS, and only the changes will be be treated here. +See [Kleiman86] for complete descriptions of the vfs and vnode operations +in Sun's interface. +.PP +The central data structure for name translation is the \fInameidata\fP +structure. +The same structure is used to pass parameters to \fInamei\fP, +to pass these same parameters to filesystem-specific lookup routines, +to communicate completion status from the lookup routines back to \fInamei\fP, +and to return completion status to the calling routine. +For creation or deletion requests, the parameters to the filesystem operation +to complete the request are also passed in this same structure. +The form of the \fInameidata\fP structure is: +.br +.ne 2i +.ID +.nf +.ta .5i +\w'caddr_t\0\0\0'u +\w'struct\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Encapsulation of namei parameters. + * One of these is located in the u. area to + * minimize space allocated on the kernel stack + * and to retain per-process context. + */ +struct nameidata { + /* arguments to namei and related context: */ + caddr_t ni_dirp; /* pathname pointer */ + enum uio_seg ni_seg; /* location of pathname */ + short ni_nameiop; /* see below */ + struct vnode *ni_cdir; /* current directory */ + struct vnode *ni_rdir; /* root directory, if not normal root */ + struct ucred *ni_cred; /* credentials */ + + /* shared between namei, lookup routines and commit routines: */ + caddr_t ni_pnbuf; /* pathname buffer */ + char *ni_ptr; /* current location in pathname */ + int ni_pathlen; /* remaining chars in path */ + short ni_more; /* more left to translate in pathname */ + short ni_loopcnt; /* count of symlinks encountered */ + + /* results: */ + struct vnode *ni_vp; /* vnode of result */ + struct vnode *ni_dvp; /* vnode of intermediate directory */ + +/* BEGIN UFS SPECIFIC */ + struct diroffcache { /* last successful directory search */ + struct vnode *nc_prevdir; /* terminal directory */ + long nc_id; /* directory's unique id */ + off_t nc_prevoffset; /* where last entry found */ + } ni_nc; +/* END UFS SPECIFIC */ +}; +.DE +.DS +.ta \w'#define\0\0'u +\w'WANTPARENT\0\0'u +\w'0x40\0\0\0\0\0\0\0'u +/* + * namei operations and modifiers + */ +#define LOOKUP 0 /* perform name lookup only */ +#define CREATE 1 /* setup for file creation */ +#define DELETE 2 /* setup for file deletion */ +#define WANTPARENT 0x10 /* return parent directory vnode also */ +#define NOCACHE 0x20 /* name must not be left in cache */ +#define FOLLOW 0x40 /* follow symbolic links */ +#define NOFOLLOW 0x0 /* don't follow symbolic links (pseudo) */ +.DE +As in current systems other than Sun's VFS, \fInamei\fP is called +with an operation request, one of LOOKUP, CREATE or DELETE. +For a LOOKUP, the operation is exactly like the lookup in VFS. +CREATE and DELETE allow the filesystem to ensure consistency +by locking the parent inode (private to the filesystem), +and (for the local filesystem) to avoid duplicate directory scans +by storing the new directory entry and its offset in the directory +in the \fIndirinfo\fP structure. +This is intended to be opaque to the filesystem-independent levels. +Not all lookups for creation or deletion are actually followed +by the intended operation; permission may be denied, the filesystem +may be read-only, etc. +Therefore, an entry point to the filesystem is provided +to abort a creation or deletion operation +and allow release of any locked internal data. +After a \fInamei\fP with a CREATE or DELETE flag, the pathname pointer +is set to point to the last filename component. +Filesystems that choose to implement creation or deletion entirely +within the subsequent call to a create or delete entry +are thus free to do so. +.PP +The \fInameidata\fP is used to store context used during name translation. +The current and root directories for the translation are stored here. +For the local filesystem, the per-process directory offset cache +is also kept here. +A file server could leave the directory offset cache empty, +could use a single cache for all clients, +or could hold caches for several recent clients. +.PP +Several other data structures are used in the filesystem operations. +One is the \fIucred\fP structure which describes a client's credentials +to the filesystem. +This is modified slightly from the Sun structure; +the ``accounting'' group ID has been merged into the groups array. +The actual number of groups in the array is given explicitly +to avoid use of a reserved group ID as a terminator. +Also, typedefs introduced in 4.3BSD for user and group ID's have been used. +The \fIucred\fP structure is thus: +.DS +.ta .5i +\w'caddr_t\0\0\0'u +\w'struct\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Credentials. + */ +struct ucred { + u_short cr_ref; /* reference count */ + uid_t cr_uid; /* effective user id */ + short cr_ngroups; /* number of groups */ + gid_t cr_groups[NGROUPS]; /* groups */ + /* + * The following either should not be here, + * or should be treated as opaque. + */ + uid_t cr_ruid; /* real user id */ + gid_t cr_svgid; /* saved set-group id */ +}; +.DE +.PP +A final structure used by the filesystem interface is the \fIuio\fP +structure mentioned earlier. +This structure describes the source or destination of an I/O +operation, with provision for scatter/gather I/O. +It is used in the read and write entries to the filesystem. +The \fIuio\fP structure presented here is modified from the one +used in 4.2BSD to specify the location of each vector of the operation +(user or kernel space) +and to allow an alternate function to be used to implement the data movement. +The alternate function might perform page remapping rather than a copy, +for example. +.DS +.ta .5i +\w'caddr_t\0\0\0'u +\w'struct\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Description of an I/O operation which potentially + * involves scatter-gather, with individual sections + * described by iovec, below. uio_resid is initially + * set to the total size of the operation, and is + * decremented as the operation proceeds. uio_offset + * is incremented by the amount of each operation. + * uio_iov is incremented and uio_iovcnt is decremented + * after each vector is processed. + */ +struct uio { + struct iovec *uio_iov; + int uio_iovcnt; + off_t uio_offset; + int uio_resid; + enum uio_rw uio_rw; +}; + +enum uio_rw { UIO_READ, UIO_WRITE }; +.DE +.DS +.ta .5i +\w'caddr_t\0\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Description of a contiguous section of an I/O operation. + * If iov_op is non-null, it is called to implement the copy + * operation, possibly by remapping, with the call + * (*iov_op)(from, to, count); + * where from and to are caddr_t and count is int. + * Otherwise, the copy is done in the normal way, + * treating base as a user or kernel virtual address + * according to iov_segflg. + */ +struct iovec { + caddr_t iov_base; + int iov_len; + enum uio_seg iov_segflg; + int (*iov_op)(); +}; +.DE +.DS +.ta .5i +\w'UIO_USERISPACE\0\0\0\0\0'u +/* + * Segment flag values. + */ +enum uio_seg { + UIO_USERSPACE, /* from user data space */ + UIO_SYSSPACE, /* from system space */ + UIO_USERISPACE /* from user I space */ +}; +.DE +.SH +File and filesystem operations +.PP +With the introduction of the data structures used by the filesystem +operations, the complete list of filesystem entry points may be listed. +As noted, they derive mostly from the Sun VFS interface. +Lines marked with \fB+\fP are additions to the Sun definitions; +lines marked with \fB!\fP are modified from VFS. +.PP +The structure describing the externally-visible features of a mounted +filesystem, \fIvfs\fP, is: +.DS +.ta .5i +\w'struct vfsops\0\0\0'u +\w'*vfs_vnodecovered;\0\0\0\0\0'u +/* + * Structure per mounted file system. + * Each mounted file system has an array of + * operations and an instance record. + * The file systems are put on a doubly linked list. + */ +struct vfs { + struct vfs *vfs_next; /* next vfs in vfs list */ +\fB+\fP struct vfs *vfs_prev; /* prev vfs in vfs list */ + struct vfsops *vfs_op; /* operations on vfs */ + struct vnode *vfs_vnodecovered; /* vnode we mounted on */ + int vfs_flag; /* flags */ +\fB!\fP int vfs_fsize; /* fundamental block size */ +\fB+\fP int vfs_bsize; /* optimal transfer size */ +\fB!\fP uid_t vfs_exroot; /* exported fs uid 0 mapping */ + short vfs_exflags; /* exported fs flags */ + caddr_t vfs_data; /* private data */ +}; +.DE +.DS +.ta \w'\fB+\fP 'u +\w'#define\0\0'u +\w'VFS_EXPORTED\0\0'u +\w'0x40\0\0\0\0\0'u + /* + * vfs flags. + * VFS_MLOCK lock the vfs so that name lookup cannot proceed past the vfs. + * This keeps the subtree stable during mounts and unmounts. + */ + #define VFS_RDONLY 0x01 /* read only vfs */ +\fB+\fP #define VFS_NOEXEC 0x02 /* can't exec from filesystem */ + #define VFS_MLOCK 0x04 /* lock vfs so that subtree is stable */ + #define VFS_MWAIT 0x08 /* someone is waiting for lock */ + #define VFS_NOSUID 0x10 /* don't honor setuid bits on vfs */ + #define VFS_EXPORTED 0x20 /* file system is exported (NFS) */ + + /* + * exported vfs flags. + */ + #define EX_RDONLY 0x01 /* exported read only */ +.DE +.LP +The operations supported by the filesystem-specific layer +on an individual filesystem are: +.DS +.ta .5i +\w'struct vfsops\0\0\0'u +\w'*vfs_vnodecovered;\0\0\0\0\0'u +/* + * Operations supported on virtual file system. + */ +struct vfsops { +\fB!\fP int (*vfs_mount)( /* vfs, path, data, datalen */ ); +\fB!\fP int (*vfs_unmount)( /* vfs, forcibly */ ); +\fB+\fP int (*vfs_mountroot)(); + int (*vfs_root)( /* vfs, vpp */ ); +\fB!\fP int (*vfs_statfs)( /* vfs, vp, sbp */ ); +\fB!\fP int (*vfs_sync)( /* vfs, waitfor */ ); +\fB+\fP int (*vfs_fhtovp)( /* vfs, fhp, vpp */ ); +\fB+\fP int (*vfs_vptofh)( /* vp, fhp */ ); +}; +.DE +.LP +The \fIvfs_statfs\fP entry returns a structure of the form: +.DS +.ta .5i +\w'struct vfsops\0\0\0'u +\w'*vfs_vnodecovered;\0\0\0\0\0'u +/* + * file system statistics + */ +struct statfs { +\fB!\fP short f_type; /* type of filesystem */ +\fB+\fP short f_flags; /* copy of vfs (mount) flags */ +\fB!\fP long f_fsize; /* fundamental file system block size */ +\fB+\fP long f_bsize; /* optimal transfer block size */ + long f_blocks; /* total data blocks in file system */ + long f_bfree; /* free blocks in fs */ + long f_bavail; /* free blocks avail to non-superuser */ + long f_files; /* total file nodes in file system */ + long f_ffree; /* free file nodes in fs */ + fsid_t f_fsid; /* file system id */ +\fB+\fP char *f_mntonname; /* directory on which mounted */ +\fB+\fP char *f_mntfromname; /* mounted filesystem */ + long f_spare[7]; /* spare for later */ +}; + +typedef long fsid_t[2]; /* file system id type */ +.DE +.LP +The modifications to Sun's interface at this level are minor. +Additional arguments are present for the \fIvfs_mount\fP and \fIvfs_umount\fP +entries. +\fIvfs_statfs\fP accepts a vnode as well as filesystem identifier, +as the information may not be uniform throughout a filesystem. +For example, +if a client may mount a file tree that spans multiple physical +filesystems on a server, different sections may have different amounts +of free space. +(NFS does not allow remotely-mounted file trees to span physical filesystems +on the server.) +The final additions are the entries that support file handles. +\fIvfs_vptofh\fP is provided for the use of file servers, +which need to obtain an opaque +file handle to represent the current vnode for transmission to clients. +This file handle may later be used to relocate the vnode using \fIvfs_fhtovp\fP +without requiring the vnode to remain in memory. +.PP +Finally, the external form of a filesystem object, the \fIvnode\fP, is: +.DS +.ta .5i +\w'struct vnodeops\0\0'u +\w'*v_vfsmountedhere;\0\0\0'u +/* + * vnode types. VNON means no type. + */ +enum vtype { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VSOCK }; + +struct vnode { + u_short v_flag; /* vnode flags (see below) */ + u_short v_count; /* reference count */ + u_short v_shlockc; /* count of shared locks */ + u_short v_exlockc; /* count of exclusive locks */ + struct vfs *v_vfsmountedhere; /* ptr to vfs mounted here */ + struct vfs *v_vfsp; /* ptr to vfs we are in */ + struct vnodeops *v_op; /* vnode operations */ +\fB+\fP struct text *v_text; /* text/mapped region */ + enum vtype v_type; /* vnode type */ + caddr_t v_data; /* private data for fs */ +}; +.DE +.DS +.ta \w'#define\0\0'u +\w'NOFOLLOW\0\0'u +\w'0x40\0\0\0\0\0\0\0'u +/* + * vnode flags. + */ +#define VROOT 0x01 /* root of its file system */ +#define VTEXT 0x02 /* vnode is a pure text prototype */ +#define VEXLOCK 0x10 /* exclusive lock */ +#define VSHLOCK 0x20 /* shared lock */ +#define VLWAIT 0x40 /* proc is waiting on shared or excl. lock */ +.DE +.LP +The operations supported by the filesystems on individual \fIvnode\fP\^s +are: +.DS +.ta .5i +\w'int\0\0\0\0\0'u +\w'(*vn_getattr)(\0\0\0\0\0'u +/* + * Operations on vnodes. + */ +struct vnodeops { +\fB!\fP int (*vn_lookup)( /* ndp */ ); +\fB!\fP int (*vn_create)( /* ndp, vap, fflags */ ); +\fB+\fP int (*vn_mknod)( /* ndp, vap, fflags */ ); +\fB!\fP int (*vn_open)( /* vp, fflags, cred */ ); + int (*vn_close)( /* vp, fflags, cred */ ); + int (*vn_access)( /* vp, fflags, cred */ ); + int (*vn_getattr)( /* vp, vap, cred */ ); + int (*vn_setattr)( /* vp, vap, cred */ ); + +\fB+\fP int (*vn_read)( /* vp, uiop, offp, ioflag, cred */ ); +\fB+\fP int (*vn_write)( /* vp, uiop, offp, ioflag, cred */ ); +\fB!\fP int (*vn_ioctl)( /* vp, com, data, fflag, cred */ ); + int (*vn_select)( /* vp, which, cred */ ); +\fB+\fP int (*vn_mmap)( /* vp, ..., cred */ ); + int (*vn_fsync)( /* vp, cred */ ); +\fB+\fP int (*vn_seek)( /* vp, offp, off, whence */ ); + +\fB!\fP int (*vn_remove)( /* ndp */ ); +\fB!\fP int (*vn_link)( /* vp, ndp */ ); +\fB!\fP int (*vn_rename)( /* src ndp, target ndp */ ); +\fB!\fP int (*vn_mkdir)( /* ndp, vap */ ); +\fB!\fP int (*vn_rmdir)( /* ndp */ ); +\fB!\fP int (*vn_symlink)( /* ndp, vap, nm */ ); + int (*vn_readdir)( /* vp, uiop, offp, ioflag, cred */ ); + int (*vn_readlink)( /* vp, uiop, ioflag, cred */ ); + +\fB+\fP int (*vn_abortop)( /* ndp */ ); +\fB+\fP int (*vn_lock)( /* vp */ ); +\fB+\fP int (*vn_unlock)( /* vp */ ); +\fB!\fP int (*vn_inactive)( /* vp */ ); +}; +.DE +.DS +.ta \w'#define\0\0'u +\w'NOFOLLOW\0\0'u +\w'0x40\0\0\0\0\0'u +/* + * flags for ioflag + */ +#define IO_UNIT 0x01 /* do io as atomic unit for VOP_RDWR */ +#define IO_APPEND 0x02 /* append write for VOP_RDWR */ +#define IO_SYNC 0x04 /* sync io for VOP_RDWR */ +.DE +.LP +The argument types listed in the comments following each operation are: +.sp +.IP ndp 10 +A pointer to a \fInameidata\fP structure. +.IP vap +A pointer to a \fIvattr\fP structure (vnode attributes; see below). +.IP fflags +File open flags, possibly including O_APPEND, O_CREAT, O_TRUNC and O_EXCL. +.IP vp +A pointer to a \fIvnode\fP previously obtained with \fIvn_lookup\fP. +.IP cred +A pointer to a \fIucred\fP credentials structure. +.IP uiop +A pointer to a \fIuio\fP structure. +.IP ioflag +Any of the IO flags defined above. +.IP com +An \fIioctl\fP command, with type \fIunsigned long\fP. +.IP data +A pointer to a character buffer used to pass data to or from an \fIioctl\fP. +.IP which +One of FREAD, FWRITE or 0 (select for exceptional conditions). +.IP off +A file offset of type \fIoff_t\fP. +.IP offp +A pointer to file offset of type \fIoff_t\fP. +.IP whence +One of L_SET, L_INCR, or L_XTND. +.IP fhp +A pointer to a file handle buffer. +.sp +.PP +Several changes have been made to Sun's set of vnode operations. +Most obviously, the \fIvn_lookup\fP receives a \fInameidata\fP structure +containing its arguments and context as described. +The same structure is also passed to one of the creation or deletion +entries if the lookup operation is for CREATE or DELETE to complete +an operation, or to the \fIvn_abortop\fP entry if no operation +is undertaken. +For filesystems that perform no locking between lookup for creation +or deletion and the call to implement that action, +the final pathname component may be left untranslated by the lookup +routine. +In any case, the pathname pointer points at the final name component, +and the \fInameidata\fP contains a reference to the vnode of the parent +directory. +The interface is thus flexible enough to accommodate filesystems +that are fully stateful or fully stateless, while avoiding redundant +operations whenever possible. +One operation remains problematical, the \fIvn_rename\fP call. +It is tempting to look up the source of the rename for deletion +and the target for creation. +However, filesystems that lock directories during such lookups must avoid +deadlock if the two paths cross. +For that reason, the source is translated for LOOKUP only, +with the WANTPARENT flag set; +the target is then translated with an operation of CREATE. +.PP +In addition to the changes concerned with the \fInameidata\fP interface, +several other changes were made in the vnode operations. +The \fIvn_rdrw\fP entry was split into \fIvn_read\fP and \fIvn_write\fP; +frequently, the read/write entry amounts to a routine that checks +the direction flag, then calls either a read routine or a write routine. +The two entries may be identical for any given filesystem; +the direction flag is contained in the \fIuio\fP given as an argument. +.PP +All of the read and write operations use a \fIuio\fP to describe +the file offset and buffer locations. +All of these fields must be updated before return. +In particular, the \fIvn_readdir\fP entry uses this +to return a new file offset token for its current location. +.PP +Several new operations have been added. +The first, \fIvn_seek\fP, is a concession to record-oriented files +such as directories. +It allows the filesystem to verify that a seek leaves a file at a sensible +offset, or to return a new offset token relative to an earlier one. +For most filesystems and files, this operation amounts to performing +simple arithmetic. +Another new entry point is \fIvn_mmap\fP, for use in mapping device memory +into a user process address space. +Its semantics are not yet decided. +The final additions are the \fIvn_lock\fP and \fIvn_unlock\fP entries. +These are used to request that the underlying file be locked against +changes for short periods of time if the filesystem implementation allows it. +They are used to maintain consistency +during internal operations such as \fIexec\fP, +and may not be used to construct atomic operations from other filesystem +operations. +.PP +The attributes of a vnode are not stored in the vnode, +as they might change with time and may need to be read from a remote +source. +Attributes have the form: +.DS +.ta .5i +\w'struct vnodeops\0\0'u +\w'*v_vfsmountedhere;\0\0\0'u +/* + * Vnode attributes. A field value of -1 + * represents a field whose value is unavailable + * (getattr) or which is not to be changed (setattr). + */ +struct vattr { + enum vtype va_type; /* vnode type (for create) */ + u_short va_mode; /* files access mode and type */ +\fB!\fP uid_t va_uid; /* owner user id */ +\fB!\fP gid_t va_gid; /* owner group id */ + long va_fsid; /* file system id (dev for now) */ +\fB!\fP long va_fileid; /* file id */ + short va_nlink; /* number of references to file */ + u_long va_size; /* file size in bytes (quad?) */ +\fB+\fP u_long va_size1; /* reserved if not quad */ + long va_blocksize; /* blocksize preferred for i/o */ + struct timeval va_atime; /* time of last access */ + struct timeval va_mtime; /* time of last modification */ + struct timeval va_ctime; /* time file changed */ + dev_t va_rdev; /* device the file represents */ + u_long va_bytes; /* bytes of disk space held by file */ +\fB+\fP u_long va_bytes1; /* reserved if va_bytes not a quad */ +}; +.DE +.SH +Conclusions +.PP +The Sun VFS filesystem interface is the most widely used generic +filesystem interface. +Of the interfaces examined, it creates the cleanest separation +between the filesystem-independent and -dependent layers and data structures. +It has several flaws, but it is felt that certain changes in the interface +can ameliorate most of them. +The interface proposed here includes those changes. +The proposed interface is now being implemented by the Computer Systems +Research Group at Berkeley. +If the design succeeds in improving the flexibility and performance +of the filesystem layering, it will be advanced as a model interface. +.SH +Acknowledgements +.PP +The filesystem interface described here is derived from Sun's VFS interface. +It also includes features similar to those of DEC's GFS interface. +We are indebted to members of the Sun and DEC system groups +for long discussions of the issues involved. +.br +.ne 2i +.SH +References + +.IP Brownbridge82 \w'Satyanarayanan85\0\0'u +Brownbridge, D.R., L.F. Marshall, B. Randell, +``The Newcastle Connection, or UNIXes of the World Unite!,'' +\fISoftware\- Practice and Experience\fP, Vol. 12, pp. 1147-1162, 1982. + +.IP Cole85 +Cole, C.T., P.B. Flinn, A.B. Atlas, +``An Implementation of an Extended File System for UNIX,'' +\fIUsenix Conference Proceedings\fP, +pp. 131-150, June, 1985. + +.IP Kleiman86 +``Vnodes: An Architecture for Multiple File System Types in Sun UNIX,'' +\fIUsenix Conference Proceedings\fP, +pp. 238-247, June, 1986. + +.IP Leffler84 +Leffler, S., M.K. McKusick, M. Karels, +``Measuring and Improving the Performance of 4.2BSD,'' +\fIUsenix Conference Proceedings\fP, pp. 237-252, June, 1984. + +.IP McKusick84 +McKusick, M.K., W.N. Joy, S.J. Leffler, R.S. Fabry, +``A Fast File System for UNIX,'' \fITransactions on Computer Systems\fP, +Vol. 2, pp. 181-197, +ACM, August, 1984. + +.IP McKusick85 +McKusick, M.K., M. Karels, S. Leffler, +``Performance Improvements and Functional Enhancements in 4.3BSD,'' +\fIUsenix Conference Proceedings\fP, pp. 519-531, June, 1985. + +.IP Rifkin86 +Rifkin, A.P., M.P. Forbes, R.L. Hamilton, M. Sabrio, S. Shah, and K. Yueh, +``RFS Architectural Overview,'' \fIUsenix Conference Proceedings\fP, +pp. 248-259, June, 1986. + +.IP Ritchie74 +Ritchie, D.M. and K. Thompson, ``The Unix Time-Sharing System,'' +\fICommunications of the ACM\fP, Vol. 17, pp. 365-375, July, 1974. + +.IP Rodriguez86 +Rodriguez, R., M. Koehler, R. Hyde, +``The Generic File System,'' \fIUsenix Conference Proceedings\fP, +pp. 260-269, June, 1986. + +.IP Sandberg85 +Sandberg, R., D. Goldberg, S. Kleiman, D. Walsh, B. Lyon, +``Design and Implementation of the Sun Network Filesystem,'' +\fIUsenix Conference Proceedings\fP, +pp. 119-130, June, 1985. + +.IP Satyanarayanan85 +Satyanarayanan, M., \fIet al.\fP, +``The ITC Distributed File System: Principles and Design,'' +\fIProc. 10th Symposium on Operating Systems Principles\fP, pp. 35-50, +ACM, December, 1985. + +.IP Walker85 +Walker, B.J. and S.H. Kiser, ``The LOCUS Distributed Filesystem,'' +\fIThe LOCUS Distributed System Architecture\fP, +G.J. Popek and B.J. Walker, ed., The MIT Press, Cambridge, MA, 1985. + +.IP Weinberger84 +Weinberger, P.J., ``The Version 8 Network File System,'' +\fIUsenix Conference presentation\fP, +June, 1984. diff --git a/samples/Groovy/build.script! b/samples/Groovy/build.gvy similarity index 100% rename from samples/Groovy/build.script! rename to samples/Groovy/build.gvy diff --git a/samples/Groovy/filenames/Jenkinsfile b/samples/Groovy/filenames/Jenkinsfile new file mode 100644 index 00000000..582306c4 --- /dev/null +++ b/samples/Groovy/filenames/Jenkinsfile @@ -0,0 +1,46 @@ +jettyUrl = 'http://localhost:8081/' + +def servers + +stage 'Dev' +node { + checkout scm + servers = load 'servers.groovy' + mvn '-o clean package' + dir('target') {stash name: 'war', includes: 'x.war'} +} + +stage 'QA' +parallel(longerTests: { + runTests(servers, 30) +}, quickerTests: { + runTests(servers, 20) +}) + +stage name: 'Staging', concurrency: 1 +node { + servers.deploy 'staging' +} + +input message: "Does ${jettyUrl}staging/ look good?" + +stage name: 'Production', concurrency: 1 +node { + sh "wget -O - -S ${jettyUrl}staging/" + echo 'Production server looks to be alive' + servers.deploy 'production' + echo "Deployed to ${jettyUrl}production/" +} + +def mvn(args) { + sh "${tool 'Maven 3.x'}/bin/mvn ${args}" +} + +def runTests(servers, duration) { + node { + checkout scm + servers.runWithServer {id -> + mvn "-o -f sometests test -Durl=${jettyUrl}${id}/ -Dduration=${duration}" + } + } +} diff --git a/samples/Groovy/groovy.script! b/samples/Groovy/groovy similarity index 100% rename from samples/Groovy/groovy.script! rename to samples/Groovy/groovy diff --git a/samples/HCL/example.hcl b/samples/HCL/example.hcl new file mode 100644 index 00000000..276b171e --- /dev/null +++ b/samples/HCL/example.hcl @@ -0,0 +1,6 @@ +consul = "1.2.3.4" + +// This is a comment +template "foo" { + bar = "zip" +} diff --git a/samples/HCL/example.tf b/samples/HCL/example.tf new file mode 100644 index 00000000..976c2e07 --- /dev/null +++ b/samples/HCL/example.tf @@ -0,0 +1,13 @@ +resource "aws_instance" "web" { + // Copies the myapp.conf file to /etc/myapp.conf + provisioner "file" { + source = "conf/myapp.conf" + destination = "/etc/myapp.conf" + } + + // Copies the configs.d folder to /etc/configs.d + provisioner "file" { + source = "conf/configs.d" + destination = "/etc" + } +} diff --git a/samples/HLSL/accelerated_surface_win.hlsl b/samples/HLSL/accelerated_surface_win.hlsl new file mode 100644 index 00000000..74d28b8f --- /dev/null +++ b/samples/HLSL/accelerated_surface_win.hlsl @@ -0,0 +1,27 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// To compile these two shaders: +// fxc /E pixelMain /T ps_2_0 accelerated_surface_win.hlsl +// fxc /E vertexMain /T vs_2_0 accelerated_surface_win.hlsl +// +// fxc is in the DirectX SDK. + +struct Vertex { + float4 position : POSITION; + float2 texCoord : TEXCOORD0; +}; + +texture t; +sampler s; + +// Passes a position and texture coordinate to the pixel shader. +Vertex vertexMain(Vertex input) { + return input; +}; + +// Samples a texture at the given texture coordinate and returns the result. +float4 pixelMain(float2 texCoord : TEXCOORD0) : COLOR0 { + return tex2D(s, texCoord); +}; diff --git a/samples/HLSL/corridor.fx b/samples/HLSL/corridor.fx new file mode 100644 index 00000000..476ea4cc --- /dev/null +++ b/samples/HLSL/corridor.fx @@ -0,0 +1,105 @@ +float4x4 matWorldView : WORLDVIEW; +float4x4 matWorldViewProjection : WORLDVIEWPROJECTION; + +struct VS_INPUT { + float4 Position : POSITION0; + float3 Normal : NORMAL; + float3 Tangent : TANGENT; + float3 Binormal : BINORMAL; + float2 TexCoord0 : TEXCOORD0; + float2 TexCoord1 : TEXCOORD1; +}; + +struct VS_OUTPUT { + float4 Position : POSITION0; + float2 TexCoord0 : TEXCOORD0; + float2 TexCoord1 : TEXCOORD1; + float3x3 TangentToView : TEXCOORD2; +}; + +VS_OUTPUT vs_main(VS_INPUT input) +{ + VS_OUTPUT output; + output.Position = mul(input.Position, matWorldViewProjection); + output.TexCoord0 = input.TexCoord0 * 5; + output.TexCoord1 = input.TexCoord1; + output.TangentToView[0] = mul(float4(input.Tangent, 0), matWorldView).xyz; + output.TangentToView[1] = mul(float4(input.Binormal, 0), matWorldView).xyz; + output.TangentToView[2] = mul(float4(input.Normal, 0), matWorldView).xyz; + return output; +} + +struct PS_OUTPUT { + float4 gbuffer0 : COLOR0; + float4 gbuffer1 : COLOR1; +}; + +texture albedo_tex; +sampler albedo_samp = sampler_state { + Texture = (albedo_tex); + MipFilter = Linear; + MinFilter = Linear; + MagFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; + sRGBTexture = True; +}; + +texture normal_tex; +sampler normal_samp = sampler_state { + Texture = (normal_tex); + MipFilter = Linear; + MinFilter = Linear; + MagFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; + sRGBTexture = False; +}; + +texture specular_tex; +sampler specular_samp = sampler_state { + Texture = (specular_tex); + MipFilter = Linear; + MinFilter = Linear; + MagFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; + sRGBTexture = True; +}; + +texture ao_tex; +sampler ao_samp = sampler_state { + Texture = (ao_tex); + MipFilter = Linear; + MinFilter = Linear; + MagFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; + sRGBTexture = True; +}; + +PS_OUTPUT ps_main(VS_OUTPUT Input) +{ + PS_OUTPUT o; + + float3 tangentNormal = normalize(tex2D(normal_samp, Input.TexCoord0).xyz * 2 - 1); + float3 eyeNormal = normalize(mul(tangentNormal, Input.TangentToView)); + + float3 albedo = tex2D(albedo_samp, Input.TexCoord0).rgb; + float ao = tex2D(ao_samp, Input.TexCoord1).r * 0.75; + float spec = tex2D(specular_samp, Input.TexCoord0).r; + + o.gbuffer0 = float4(eyeNormal, spec * ao); + o.gbuffer1 = float4(albedo, 1 - ao); + return o; +} + +technique mesh { + pass Geometry { + VertexShader = compile vs_3_0 vs_main(); + PixelShader = compile ps_3_0 ps_main(); + + AlphaBlendEnable = False; + ZWriteEnable = True; + } +} diff --git a/samples/HLSL/jellyfish.fx b/samples/HLSL/jellyfish.fx new file mode 100644 index 00000000..c1c8359e --- /dev/null +++ b/samples/HLSL/jellyfish.fx @@ -0,0 +1,119 @@ +float4x4 matWorldViewProjection : WORLDVIEWPROJECTION; +float4x4 matWorldView : WORLDVIEW; +float4x4 matWorld : WORLD; +float4x4 matView : VIEW; + +uniform float4 vViewPosition; + +struct VS_INPUT +{ + float3 Pos: POSITION; + float3 Normal: NORMAL; + float3 Tangent: TANGENT; + float3 Binormal: BINORMAL; +}; + +struct VS_OUTPUT +{ + float4 Pos : POSITION; + float3 reflection : TEXCOORD1; + float3 refraction : TEXCOORD2; + float fresnel : TEXCOORD3; +}; + +uniform float3 amt; +uniform float3 scale; +uniform float3 phase; + +float3 deform(float3 p) +{ + float s = 3; + float3 p2 = p * scale + phase; + s += sin(p2.x) * amt.x; + s += sin(p2.y) * amt.y; + s += sin(p2.z) * amt.z; + return p * s / 3; +} + +VS_OUTPUT vs_main( VS_INPUT In ) +{ + VS_OUTPUT Out; + + float3 pos = In.Pos; + float3 norm = In.Normal; + + float3 p1 = pos + In.Tangent * 0.05; + float3 p2 = pos + In.Binormal * 0.05; + pos = deform(pos); + p1 = deform(p1); + p2 = deform(p2); + + p1 -= pos; + p2 -= pos; + norm = normalize(cross(p1, p2)); + + float3 view = normalize(pos - vViewPosition.xyz); + + Out.Pos = mul(float4(pos, 1.0), matWorldViewProjection); + Out.reflection = reflect(view, norm); + Out.refraction = reflect(view, norm * 0.4f); /* fake, but who cares? */ + Out.fresnel = dot(view, norm); + norm = mul(float4(norm, 0.0), matWorldViewProjection); + + return Out; +} + +#define PS_INPUT VS_OUTPUT + +#if 0 +textureCUBE reflectionMap; +samplerCUBE reflectionMapSampler = sampler_state +{ + Texture = (reflectionMap); + MipFilter = LINEAR; + MinFilter = LINEAR; + MagFilter = LINEAR; +}; +#else +// textures +texture reflectionMap +< + string type = "CUBE"; + string name = "test_cube.dds"; +>; + +samplerCUBE reflectionMapSampler = sampler_state +{ + Texture = (reflectionMap); + MipFilter = LINEAR; + MinFilter = LINEAR; + MagFilter = LINEAR; +}; +#endif + +struct PS_OUTPUT +{ + float4 color : COLOR0; +}; + +PS_OUTPUT ps_main( PS_INPUT In ) +{ + PS_OUTPUT Out; + + float4 reflection = texCUBE(reflectionMapSampler, normalize(In.reflection)) * 1.5; + float4 refraction = texCUBE(reflectionMapSampler, normalize(In.refraction)); + float fresnel = In.fresnel; +// float fresnel = abs(normalize(In.normal).z); + Out.color = lerp(reflection, refraction, fresnel) * pow(1.0 - fresnel * 0.75, 1.0); + + return Out; +} + +technique blur_ps_vs_2_0 +{ + pass P0 + { + VertexShader = compile vs_2_0 vs_main(); + PixelShader = compile ps_2_0 ps_main(); + } +} diff --git a/samples/HLSL/noise.fx b/samples/HLSL/noise.fx new file mode 100644 index 00000000..be0303c1 --- /dev/null +++ b/samples/HLSL/noise.fx @@ -0,0 +1,41 @@ +float alpha = 1.f; + +texture tex; +sampler tex_sampler = sampler_state +{ + Texture = (tex); + MipFilter = LINEAR; + MinFilter = LINEAR; + MagFilter = LINEAR; + + AddressU = WRAP; + AddressV = WRAP; +}; + +struct VS_OUTPUT +{ + float4 pos : POSITION; + float2 tex : TEXCOORD1; +}; + +VS_OUTPUT vertex(float4 ipos : POSITION, float2 tex : TEXCOORD0) +{ + VS_OUTPUT Out; + Out.pos = ipos; + Out.tex = tex * 2; + return Out; +} + +float4 pixel(VS_OUTPUT In) : COLOR +{ + return tex2D(tex_sampler, In.tex) * alpha; +} + +technique blur_ps_vs_2_0 +{ + pass P0 + { + VertexShader = compile vs_2_0 vertex(); + PixelShader = compile ps_2_0 pixel(); + } +} diff --git a/samples/HTML+EEX/index.html.eex b/samples/HTML+EEX/index.html.eex new file mode 100644 index 00000000..5960a441 --- /dev/null +++ b/samples/HTML+EEX/index.html.eex @@ -0,0 +1,26 @@ +

Listing Books

+ + + + + + + + + + +<%= for book <- @books do %> + + <%# comment %> + + + + + + +<% end %> +
TitleSummary
<%= book.title %><%= book.content %><%= link "Show", to: book_path(@conn, :show, book) %><%= link "Edit", to: book_path(@conn, :edit, book) %><%= link "Delete", to: book_path(@conn, :delete, book), method: :delete, data: [confirm: "Are you sure?"] %>
+ +
+ +<%= link "New book", to: book_path(@conn, :new) %> diff --git a/samples/HTML/index.html.hl b/samples/HTML/index.html.hl new file mode 100644 index 00000000..65491957 --- /dev/null +++ b/samples/HTML/index.html.hl @@ -0,0 +1,328 @@ + + + + + + + + +
+

Example 1

+ + + + + +
+ + +
+ +

~{x}

+
+
+
+
+ + +
+

Example 2

+ + + + + +
+ + +
+ +

~{x}

+
+
+
+
+ + +
+

Example 3

+ + + + + +
+ + + +
+ +

~{x}

+
+
+
+
+ + +
+

Example 4

+ + + + + +
+ + +
+
+
+ + +
+

Example 5

+ + + + + +
+ + +
+
+
+ + +
+

Example 6

+ + + + + +
+ + +
+
+ +

~{x}

+
+
+
+
+
+ + +
+

Example 7

+ + + + + +
+ + +
+
+ +

~{x}

+
+
+
+
+
+ + +
+

Example 8

+ + + + + +
+ + +
+
+ +

~{x}

+
+
+
+
+
+ + +
+

Example 9

+ + + + + +
+ + +
+
+ + +
+

Example 10

+ + + + + +
+ + + +
+
+ + diff --git a/samples/HTML/rpanel.inc b/samples/HTML/rpanel.inc new file mode 100644 index 00000000..95ceb913 --- /dev/null +++ b/samples/HTML/rpanel.inc @@ -0,0 +1,31 @@ + + + + + + + +
+

Поддержка:

+
+ + + + + + + + + + + +
+

Москва:

+
+

+7-902-7-800-807

+
+

Регионы:

+
+

+7-902-7-800-807

+
+ diff --git a/samples/HTML/tailDel.inc b/samples/HTML/tailDel.inc new file mode 100644 index 00000000..9ee2aa05 --- /dev/null +++ b/samples/HTML/tailDel.inc @@ -0,0 +1,5 @@ + +

Supported Targets

+ + + diff --git a/samples/Haskell/HsColour.hs b/samples/Haskell/HsColour.hs new file mode 100644 index 00000000..64588a6d --- /dev/null +++ b/samples/Haskell/HsColour.hs @@ -0,0 +1,114 @@ +-- | This is a library which colourises Haskell code. +-- It currently has six output formats: +-- +-- * ANSI terminal codes +-- +-- * LaTeX macros +-- +-- * HTML 3.2 with font tags +-- +-- * HTML 4.01 with external CSS. +-- +-- * XHTML 1.0 with internal CSS. +-- +-- * mIRC chat client colour codes. +-- +module Language.Haskell.HsColour (Output(..), ColourPrefs(..), + hscolour) where + +import Language.Haskell.HsColour.Colourise (ColourPrefs(..)) +import qualified Language.Haskell.HsColour.TTY as TTY +import qualified Language.Haskell.HsColour.HTML as HTML +import qualified Language.Haskell.HsColour.CSS as CSS +import qualified Language.Haskell.HsColour.ACSS as ACSS +import qualified Language.Haskell.HsColour.InlineCSS as ICSS +import qualified Language.Haskell.HsColour.LaTeX as LaTeX +import qualified Language.Haskell.HsColour.MIRC as MIRC +import Data.List(mapAccumL, isPrefixOf) +import Data.Maybe +import Language.Haskell.HsColour.Output +--import Debug.Trace + +-- | Colourise Haskell source code with the given output format. +hscolour :: Output -- ^ Output format. + -> ColourPrefs -- ^ Colour preferences (for formats that support them). + -> Bool -- ^ Whether to include anchors. + -> Bool -- ^ Whether output document is partial or complete. + -> String -- ^ Title for output. + -> Bool -- ^ Whether input document is literate haskell or not + -> String -- ^ Haskell source code. + -> String -- ^ Coloured Haskell source code. +hscolour output pref anchor partial title False = + (if partial then id else top'n'tail output title) . + hscolour' output pref anchor +hscolour output pref anchor partial title True = + (if partial then id else top'n'tail output title) . + concatMap chunk . joinL . classify . inlines + where + chunk (Code c) = hscolour' output pref anchor c + chunk (Lit c) = c + +-- | The actual colourising worker, despatched on the chosen output format. +hscolour' :: Output -- ^ Output format. + -> ColourPrefs -- ^ Colour preferences (for formats that support them) + -> Bool -- ^ Whether to include anchors. + -> String -- ^ Haskell source code. + -> String -- ^ Coloured Haskell source code. +hscolour' TTY pref _ = TTY.hscolour pref +hscolour' (TTYg tt) pref _ = TTY.hscolourG tt pref +hscolour' MIRC pref _ = MIRC.hscolour pref +hscolour' LaTeX pref _ = LaTeX.hscolour pref +hscolour' HTML pref anchor = HTML.hscolour pref anchor +hscolour' CSS _ anchor = CSS.hscolour anchor +hscolour' ICSS pref anchor = ICSS.hscolour pref anchor +hscolour' ACSS _ anchor = ACSS.hscolour anchor + +-- | Choose the right headers\/footers, depending on the output format. +top'n'tail :: Output -- ^ Output format + -> String -- ^ Title for output + -> (String->String) -- ^ Output transformer +top'n'tail TTY _ = id +top'n'tail (TTYg _) _ = id +top'n'tail MIRC _ = id +top'n'tail LaTeX title = LaTeX.top'n'tail title +top'n'tail HTML title = HTML.top'n'tail title +top'n'tail CSS title = CSS.top'n'tail title +top'n'tail ICSS title = ICSS.top'n'tail title +top'n'tail ACSS title = CSS.top'n'tail title + +-- | Separating literate files into code\/comment chunks. +data Lit = Code {unL :: String} | Lit {unL :: String} deriving (Show) + +-- Re-implementation of 'lines', for better efficiency (but decreased laziness). +-- Also, importantly, accepts non-standard DOS and Mac line ending characters. +-- And retains the trailing '\n' character in each resultant string. +inlines :: String -> [String] +inlines s = lines' s id + where + lines' [] acc = [acc []] + lines' ('\^M':'\n':s) acc = acc ['\n'] : lines' s id -- DOS +--lines' ('\^M':s) acc = acc ['\n'] : lines' s id -- MacOS + lines' ('\n':s) acc = acc ['\n'] : lines' s id -- Unix + lines' (c:s) acc = lines' s (acc . (c:)) + + +-- | The code for classify is largely stolen from Language.Preprocessor.Unlit. +classify :: [String] -> [Lit] +classify [] = [] +classify (x:xs) | "\\begin{code}"`isPrefixOf`x + = Lit x: allProg xs + where allProg [] = [] -- Should give an error message, + -- but I have no good position information. + allProg (x:xs) | "\\end{code}"`isPrefixOf`x + = Lit x: classify xs + allProg (x:xs) = Code x: allProg xs +classify (('>':x):xs) = Code ('>':x) : classify xs +classify (x:xs) = Lit x: classify xs + +-- | Join up chunks of code\/comment that are next to each other. +joinL :: [Lit] -> [Lit] +joinL [] = [] +joinL (Code c:Code c2:xs) = joinL (Code (c++c2):xs) +joinL (Lit c :Lit c2 :xs) = joinL (Lit (c++c2):xs) +joinL (any:xs) = any: joinL xs + diff --git a/samples/HyPhy/AAModelComparison.bf b/samples/HyPhy/AAModelComparison.bf new file mode 100644 index 00000000..602a9e56 --- /dev/null +++ b/samples/HyPhy/AAModelComparison.bf @@ -0,0 +1,252 @@ +if (Rows (modelMatrixList) == 0) +{ + modelMatrixList = + { + {"Equal Input", "EIAA.mdl", "19"} + {"Dayhoff","Dayhoff.mdl","0"} + {"Dayhoff+F","Dayhoff_F.mdl","19"} + {"JTT", "Jones.mdl", "0"} + {"JTT+F", "Jones_F.mdl", "19"} + {"WAG", "WAG.mdl", "0"} + {"WAG+F", "WAG_F.mdl", "19"} + {"rtREV", "rtREV.mdl", "0"} + {"rtREV+F", "rtREV_F.mdl", "19"} + {"mtMAM", "mtMAM.mdl", "0"} + {"mtMAM+F", "mtMAM_F.mdl", "19"} + {"mtREV 24", "mtREV_24.mdl", "0"} + {"mtREV 24+F", "mtREV_24_F.mdl", "19"} + {"HIV within", "HIVwithin.mdl", "0"} + {"HIV within+F", "HIVwithin+F.mdl", "19"} + {"HIV between", "HIVbetween.mdl", "0"} + {"HIV between+F", "HIVbetween+F.mdl", "19"} + {"REV-1 step", "reducedREV.mdl", "19"} + {"REV", "mtREV.mdl", "19"} + }; +} + +/*___________________________________________________________________________________________________________*/ + +function runAModel (modelID, fileName, xtraP, midx) +{ + ExecuteCommands ("#include \"TemplateModels/"+fileName+"\";"); + Tree givenTree = treeString; + LikelihoodFunction lf = (filteredData,givenTree); + + GetString (lf_info, lf, -1); + locals = lf_info["Local Independent"]; + + if (Columns (branchLengthStash)) + { + USE_LAST_RESULTS = 1; + for (_iv = 0; _iv < Columns (locals); _iv = _iv+1) + { + ExecuteCommands (locals[_iv] + "=1;\n"); + } + currentBL = BranchLength (givenTree,0); + currentBN = BranchName (givenTree,-1); + for (_iv = 0; _iv < Columns (currentBN); _iv = _iv+1) + { + ExecuteCommands ("givenTree."+currentBN[_iv]+".t="+branchLengthStash[_iv]/currentBL+";"); + + } + } + else + { + for (_iv = 0; _iv < Columns (locals); _iv = _iv+1) + { + ExecuteCommands (locals[_iv] + "=0.1;\n"); + } + USE_LAST_RESULTS = 1; + } + + Optimize (res,lf); + + fprintf (stdout, "| ", modelID); + for (k=0; k1) + { + cAIC = 2(-res[1][0]+params*(filteredData.sites/(filteredData.sites-params-1))); + } + else + { + cAIC = 0; + } + + branchLengths = BranchLength (givenTree,-1); + TL = 0; + for (k=Rows(branchLengths)*Columns(branchLengths)-1; k>=0; k=k-1) + { + TL = TL + branchLengths[k]; + } + + fprintf (stdout, "| ", Format (res[1][0],14,3), " | ", Format (params,5,0), " | ", + Format (AIC, 9,3), " | ",); + + if (cAIC > 0) + { + fprintf (stdout, Format (cAIC,11,3), " | "); + } + else + { + fprintf (stdout, " N/A | "); + } + + fprintf (stdout, Format (TL,11,3), " |\n", sepString); + + resultMatrix[midx][0] = res[1][0]; + resultMatrix[midx][1] = params; + resultMatrix[midx][2] = AIC; + resultMatrix[midx][3] = cAIC; + resultMatrix[midx][4] = TL; + + if (AIC < bestAIC) + { + bestAIC = AIC; + bestAICidx = midx; + branchLengthStash = BranchLength (givenTree,-1); + } + + if (cAIC > 0) + { + if (bestCAIC > cAIC) + { + bestCAIC = cAIC; + bestCAICidx = midx; + + } + } + + return 0; +} + + +/*___________________________________________________________________________________________________________*/ + + + +maxModelWidth = 7; +skipCodeSelectionStep = 0; + +ChoiceList (doREV, "Include REV?", 1, SKIP_NONE, "Yes", "Include REV and reduced REV models. CAUTION: these models take a long time to fit.", + "No", "Only use empirical models"); + +if (doREV < 0) +{ + return 0; +} + +if (doREV == 0) +{ + #include "TemplateModels/chooseGeneticCode.def"; + skipCodeSelectionStep = 1; +} + +modelCount = Rows (modelMatrixList) - 2*doREV; + +for (k=0; k=0) +{ + fprintf (stdout, "\n\nBest c-AIC model:\n\t", modelMatrixList[bestCAICidx][0], " with the score of ", bestCAIC); +} + +labelMatrix = {{"Log-likelihood","Parameters","AIC","c-AIC","Total tree length",""}}; + +aaString = "Model"; + +for (fC = 0; fC < modelCount; fC = fC+1) +{ + aaString = aaString + ";" + modelMatrixList[fC][0]; +} + +USE_LAST_RESULTS = 0; + +labelMatrix[5] = aaString; +skipCodeSelectionStep = 0; +OpenWindow (CHARTWINDOW,{{"Model Fits"} + {"labelMatrix"}, + {"resultMatrix"}, + {"Bar Chart"}, + {"Index"}, + {"c-AIC"}, + {"Model Index"}, + {""}, + {"AIC"} + }, + "SCREEN_WIDTH-60;SCREEN_HEIGHT-60;30;30"); diff --git a/samples/HyPhy/CodonModelCompare.bf b/samples/HyPhy/CodonModelCompare.bf new file mode 100644 index 00000000..e24b730d --- /dev/null +++ b/samples/HyPhy/CodonModelCompare.bf @@ -0,0 +1,1046 @@ +/* + This file takes a nucleotide data set and a tree (either from the data file or from a separate file) and computes maximum likelihood estimates for every possible 4x4 reversible model on that data and tree. + + We use the string (v1,v2,v3,v4,v5,v6), where and v1..6 = 0..5 + to encode a 4x4 symmetric transition matrix with entries + [* v1 v2 v3] + [- * v4 v5] + [- - * v6] + [- - - * ] + + For instance: (010010) encodes HKY85. + + For each model the following information is reported: + - Model string. (e.g. (012345) for the GRM) + - Number of model parameters + - Max ln-likelihood for the model + - Likelihood ratio statistic (as a sub-model of the GRM) + - AIC + - P-Value for the Likelihood Ratio Test. + + + Sergei L. Kosakovsky Pond, Summer 2002. + +*/ + +function ReceiveJobs (sendOrNot) +{ + if (MPI_NODE_COUNT>1) + { + MPIReceive (-1, fromNode, result_String); + jobModelNum = MPINodeState[fromNode-1][1]; + vv1 = MPINodeState[fromNode-1][2]; + vv2 = MPINodeState[fromNode-1][3]; + vv3 = MPINodeState[fromNode-1][4]; + vv4 = MPINodeState[fromNode-1][5]; + vv5 = MPINodeState[fromNode-1][6]; + vv6 = MPINodeState[fromNode-1][7]; + if (sendOrNot) + { + MPISend (fromNode,lf); + MPINodeState[fromNode-1][1] = modelNum; + MPINodeState[fromNode-1][2] = v1; + MPINodeState[fromNode-1][3] = v2; + MPINodeState[fromNode-1][4] = v3; + MPINodeState[fromNode-1][5] = v4; + MPINodeState[fromNode-1][6] = v5; + MPINodeState[fromNode-1][7] = v6; + } + else + { + MPINodeState[fromNode-1][0] = 0; + MPINodeState[fromNode-1][1] = -1; + } + + ExecuteCommands (result_String); + } + else + { + jobModelNum = modelNum; + } + + if (jobModelNum == 0) + { + stdl = lf_MLES[1][0]; + fullnp = lf_MLES[1][1]+addOn; + fprintf(stdout,"\n(012345) Full Model ln-lik = ",stdl,". Parameter Count=",Format(fullnp,0,0)," AIC = ", 2*(fullnp-stdl),"\n\n"); + + + resultCache [0][0] = 1; + resultCache [0][1] = 2; + resultCache [0][2] = 3; + resultCache [0][3] = 4; + resultCache [0][4] = 5; + resultCache [0][5] = lf_MLES[1][0]; + resultCache [0][6] = lf_MLES[1][1]+addOn; + resultCache [0][7] = 0; + resultCache [0][8] = 0; + + fprintf (stdout,"\n# | Model | # prm | lnL | LRT | AIC | P-Value |"); + fprintf (stdout,"\n----|----------|-------|-----------|----------------|------------|------------------|"); + + if (MPI_NODE_COUNT>1) + { + for (h=1; h<203; h=h+1) + { + lnL = resultCache[h][5]; + + if (lnL<0) + { + np = resultCache[h][6]; + LRT = -2*(lnL-stdl); + if (LRT<0) + { + LRT = 0; + } + AIC = -2*lnL+2*np; + PRINT_DIGITS = 3; + fprintf (stdout,"\n",h); + PRINT_DIGITS = 1; + fprintf (stdout," | (",0, resultCache[h][0], resultCache[h][1], resultCache[h][2], resultCache[h][3], resultCache[h][4],") | "); + fprintf (stdout,Format (np,5,0)); + PRINT_DIGITS = 8; + fprintf (stdout, " | ",lnL," | ",Format(LRT,14,3), " | ", AIC, " | ", ); + + PRINT_DIGITS = 15; + if (LRT==0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,fullnp-np); + } + fprintf (stdout,pValue," |"); + resultCache [jobModelNum][7] = pValue; + if (pValue1)&&(resultCache[0][5]>=0)) + { + resultCache [jobModelNum][0] = vv2; + resultCache [jobModelNum][1] = vv3; + resultCache [jobModelNum][2] = vv4; + resultCache [jobModelNum][3] = vv5; + resultCache [jobModelNum][4] = vv6; + resultCache [jobModelNum][5] = lf_MLES[1][0]; + resultCache [jobModelNum][6] = lf_MLES[1][1]+addOn; + return fromNode - 1; + } + } + + np = lf_MLES[1][1]+addOn; + lnL = lf_MLES[1][0]; + LRT = -2*(lnL-stdl); + if (LRT<0) + { + LRT = 0; + } + AIC = -2*lnL+2*np; + PRINT_DIGITS = 3; + fprintf (stdout,"\n",jobModelNum); + PRINT_DIGITS = 1; + fprintf (stdout," | (",vv1,vv2,vv3,vv4,vv5,vv6,") | "); + fprintf (stdout,Format (np,5,0)); + PRINT_DIGITS = 8; + fprintf (stdout, " | ",lnL," | ",Format(LRT,14,3), " | ", AIC, " | ", ); + + + PRINT_DIGITS = 15; + if (LRT==0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,fullnp-np); + } + fprintf (stdout,pValue," |"); + + resultCache [jobModelNum][0] = vv2; + resultCache [jobModelNum][1] = vv3; + resultCache [jobModelNum][2] = vv4; + resultCache [jobModelNum][3] = vv5; + resultCache [jobModelNum][4] = vv6; + resultCache [jobModelNum][5] = lf_MLES[1][0]; + resultCache [jobModelNum][6] = lf_MLES[1][1]+addOn; + resultCache [jobModelNum][7] = pValue; + if (pValue 0) +{ + #include "TemplateModels/defineGamma.mdl"; +} + +ChoiceList (branchLengths,"Estimate Branch Lengths",1,SKIP_NONE, + "Every Time","Branch lengths are reestimated for every model.", + "Once","Branch lenghts obtained from the nucleotide GTR model and reused for subsequent models." + ); + +if (branchLengths<0) +{ + return; +} + +rejectAt = 0; + +while ((rejectAt<=0)||(rejectAt>=1)) +{ + fprintf (stdout, "\nModel rejection level (e.g. 0.05):"); + fscanf (stdin,"Number", rejectAt); +} + +SetDialogPrompt ("Save results to:"); + +fprintf (PROMPT_FOR_FILE, CLEAR_FILE); +BASE_PATH = LAST_FILE_PATH; + +KEEP_OPTIMAL_ORDER = 1; +MESSAGE_LOGGING = 0; + +global AC=1; +global AT=1; +global CG=1; +global CT=1; +global GT=1; +global R=1; + + +r = setElement (0,2,1); +r = setElement (0,3,2); +r = setElement (1,2,3); +r = setElement (1,3,4); +r = setElement (2,3,5); + +MG94custom = 0; +MULTIPLY_BY_FREQS = PopulateModelMatrix ("MG94custom", observedFreq); +vectorOfFrequencies = BuildCodonFrequencies (observedFreq); +Model MG94customModel = (MG94custom,vectorOfFrequencies,0); + +USE_POSITION_SPECIFIC_FREQS = 1; +Tree tr = treeString; + +addOn = 0; + +if (branchLengths) +{ + global TreeScaler = 1; + GTRMatrix = {{*,AC*nt,nt,AT*nt}{AC*nt,*,CG*nt,CT*nt}{nt,CG*nt,*,GT*nt}{AT*nt,CT*nt,GT*nt,*}}; + DataSetFilter nucFilter = CreateFilter (filteredData,1); + HarvestFrequencies (nucFreq,nucFilter,1,1,1); + Model GTRModel = (GTRMatrix,nucFreq,1); + givenTreeString = Format (tr,0,0); + Tree nucTree = givenTreeString; + LikelihoodFunction lfn = (nucFilter, nucTree); + Optimize (nres,lfn); + ReplicateConstraint ("this1.?.synRate:=this2.?.nt__/TreeScaler",tr,nucTree); + addOn = nres[1][1]-nres[1][2]-1; +} + +LikelihoodFunction lf = (filteredData, tr); + +resultCache = {203,9}; + +modelNum = 0; +rejectCount = 0; + +if (MPI_NODE_COUNT>1) +{ + MPINodeState = {MPI_NODE_COUNT-1,8}; + OPTIMIZE_SUMMATION_ORDER = 0; + MPISend (1,lf); + MPINodeState[0][0] = 1; + MPINodeState[0][1] = modelNum; +} +else +{ + Optimize (lf_MLES,lf); + vv1 = 0; + vv2 = 0; + vv3 = 0; + vv4 = 0; + vv5 = 0; + vv6 = 0; + dummy = ReceiveJobs (0); +} + +rateBiasTerms = {{"AC","1","AT","CG","CT","GT"}}; + +for (v2=0; v2<=1; v2=v2+1) +{ + for (v3=0; v3<=v2+1; v3=v3+1) + { + if (v3>v2) + { + ub4 = v3; + } + else + { + ub4 = v2; + } + for (v4=0; v4<=ub4+1; v4=v4+1) + { + if (v4>=ub4) + { + ub5 = v4; + } + else + { + ub5 = ub4; + } + for (v5=0; v5<=ub5+1; v5=v5+1) + { + if (v5>ub5) + { + ub6 = v5; + } + else + { + ub6 = ub5; + } + for (v6=0; v6<=ub6+1; v6=v6+1) + { + if (v6==5) + { + break; + } + + R = 1; + + paramCount = 0; + + modelDesc = "0"+Format(v2,1,0); + modelDesc = modelDesc+Format(v3,1,0); + modelDesc = modelDesc+Format(v4,1,0); + modelDesc = modelDesc+Format(v5,1,0); + modelDesc = modelDesc+Format(v6,1,0); + + modelConstraintString = ""; + + AC = 1; + AT = 1; + CG = 1; + CT = 1; + GT = 1; + + for (customLoopCounter2=1; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + for (customLoopCounter=0; customLoopCounter1) + { + for (mpiNode = 0; mpiNode < MPI_NODE_COUNT-1; mpiNode = mpiNode+1) + { + if (MPINodeState[mpiNode][0]==0) + { + break; + } + } + + if (mpiNode==MPI_NODE_COUNT-1) + /* all nodes busy */ + { + mpiNode = ReceiveJobs (1); + } + else + { + MPISend (mpiNode+1,lf); + MPINodeState[mpiNode][0] = 1; + MPINodeState[mpiNode][1] = modelNum; + MPINodeState[mpiNode][2] = v1; + MPINodeState[mpiNode][3] = v2; + MPINodeState[mpiNode][4] = v3; + MPINodeState[mpiNode][5] = v4; + MPINodeState[mpiNode][6] = v5; + MPINodeState[mpiNode][7] = v6; + } + } + else + { + Optimize (lf_MLES,lf); + vv1 = v1; + vv2 = v2; + vv3 = v3; + vv4 = v4; + vv5 = v5; + vv6 = v6; + dummy = ReceiveJobs (0); + } + } + } + } + } + +} + +if (MPI_NODE_COUNT>1) +{ + while (1) + { + for (nodeCounter = 0; nodeCounter < MPI_NODE_COUNT-1; nodeCounter = nodeCounter+1) + { + if (MPINodeState[nodeCounter][0]==1) + { + fromNode = ReceiveJobs (0); + break; + } + } + if (nodeCounter == MPI_NODE_COUNT-1) + { + break; + } + } + OPTIMIZE_SUMMATION_ORDER = 1; +} + +function checkEmbedding (_m1, _m2) +{ + for (r=0; r<6; r=r+1) + { + if (_m2[r]<_m1[r]) + { + /*fprintf (stdout,_m1," ", _m2, " Reject 1 at position ",r,"\n");*/ + return 0; + } + if (_m2[r]>_m1[r]) + { + for (r2 = 0; r2 < 6; r2 = r2+1) + { + if ((_m2[r2]==_m2[r])&&(_m1[r2]!=_m1[r])) + { + /*fprintf (stdout,_m1," ", _m2, " Reject 2 at positions ",r,r2,"\n");*/ + return 0; + } + } + } + } + return 1; +} + +PRINT_DIGITS = 0; + +fprintf (stdout, "\n\n--------------------------\n (*) => p-Value < ", rejectAt, "\nRejected ", rejectCount, " models.\n"); + + +if (rejectCount<202) +{ + + fprintf (stdout, "\nPerforming nested tests on the remaining models...\n"); + + done = 0; + while (!done) + { + done = 1; + for (v2=1; v2<203; v2=v2+1) + { + if (resultCache[v2][8]) + { + modelString = "0"; + for (v3 = 0; v3<5; v3=v3+1) + { + modelString = modelString + resultCache [v2][v3]; + } + for (v3 = v2+1; v3<203; v3 = v3+1) + { + if (resultCache[v3][8]) + { + modelString2 = "0"; + for (v4 = 0; v4<5; v4=v4+1) + { + modelString2 = modelString2 + resultCache [v3][v4]; + } + if (checkEmbedding (modelString, modelString2)) + { + fprintf (stdout,"H: (", modelString,") A: (", modelString2, "). "); + done = 0; + LRT = 2*(resultCache[v3][5]-resultCache[v2][5]); + npd = resultCache[v3][6]-resultCache[v2][6]; + if (LRT<0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,npd); + } + fprintf (stdout," P-Value=", Format (pValue,10,3)); + if (pValue1)", + "0 & 2 (Normal>1)", + "3 Normal", + "RE: Lognormal", + "RE: Gamma", + "RE: Discrete"}}; + +ParameterCount = {{0, + 1, + 3, + 4, + 2, + 4, + 2, + 4, + 5, + 5, + 5, + 5, + 6, + 1, + 2, + 4 + }}; + +MAXIMUM_ITERATIONS_PER_VARIABLE = 2000; +OPTIMIZATION_PRECISION = 0.001; + +function SetWDistribution (resp) +{ + if (rateType == 0) + { + global P = .5; + P:<1; + categFreqMatrix = {{P,1-P}}; + categRateMatrix = {{0,1}}; + category c = (2, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 1) + { + global P1 = 1/3; + global P2 = 0; + + P1:<1; + P2:<1; + + global W = 1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{0,1,W}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 2) + { + global P1 = 1/3; + global P2 = .5; + P1:<1; + P2:<1; + global W1 = .25; + global R1 = 4; + global R2 = 3; + R1:>1; + R2:>1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{W1,W1*R1,W1*R1*R2}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 3) + { + global P1 = 1/5; + global P2 = 1/4; + global P3 = 1/3; + global P4 = 1/2; + + P1:<1; + P2:<1; + P3:<1; + P4:<1; + + categFreqMatrix = {{P1, + (1-P1)P2, + (1-P1)(1-P2)*P3, + (1-P1)(1-P2)(1-P3)P4, + (1-P1)(1-P2)(1-P3)(1-P4)}} ; + categRateMatrix = {{0,1/3,2/3,1,3}}; + category c = (5, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 4) + { + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , + 1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta); + } + else + { + if (rateType == 5) + { + global alpha = .5; + global beta = 1; + global alpha2= .75; + global P = .5; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + P:<1; + alpha2:>0.01;alpha2:<100; + category c = (resp, EQUAL, MEAN, P*GammaDist(_x_,alpha,beta) + (1-P)*GammaDist(_x_,alpha2,alpha2) + , P*CGammaDist(_x_,alpha,beta) + (1-P)*CGammaDist(_x_,alpha2,alpha2), + 0 , 1e25, + P*CGammaDist(_x_,alpha+1,beta)*alpha/beta + (1-P)*CGammaDist(_x_,alpha2+1,alpha2)); + } + else + { + if (rateType == 6) + { + global betaP = 1; + global betaQ = 1; + betaP:>0.05;betaP:<85; + betaQ:>0.05;betaQ:<85; + category c = (resp, EQUAL, MEAN, _x_^(betaP-1)*(1-_x_)^(betaQ-1)/Beta(betaP,betaQ), IBeta(_x_,betaP,betaQ), 0 , + 1,IBeta(_x_,betaP+1,betaQ)*betaP/(betaP+betaQ)); + } + else + { + if (rateType == 7) + { + global W = 2; + /*W:>1;*/ + global P = 1-1/(resp+1); + global betaP = 1; + global betaQ = 2; + betaP:>0.05; + betaQ:>0.05; + betaP:<85; + betaQ:<85; + P:>0.0000001; + P:<0.9999999; + categFreqMatrix = {resp+1,1}; + for (k=0; k=W), + 0,1e25, + P*IBeta(Min(_x_,1),betaP+1,betaQ)*betaP/(betaP+betaQ)+(1-P)*W*(_x_>=W)); + } + else + { + if (rateType == 8) + { + global P = .5; + global betaP = 1; + global betaQ = 2; + betaP:>0.05;betaP:<85; + betaQ:>0.05;betaQ:<85; + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + P:<1; + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*GammaDist(_x_,alpha,beta), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(_x_,alpha,beta), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+(1-P)*alpha/beta*CGammaDist(_x_,alpha+1,beta)); + } + else + { + if (rateType == 9) + { + global P = .5; + P:<1; + global betaP = 1; + betaP:>0.05;betaP:<85; + global betaQ = 2; + betaQ:>0.05;betaQ:<85; + global alpha = .5; + alpha:>0.01;alpha:<100; + global beta = 1; + beta:>0.01;beta:<500; + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*(_x_>1)*GammaDist(Max(1e-20,_x_-1),alpha,beta), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(Max(_x_-1,0),alpha,beta), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+ + (1-P)*(alpha/beta*CGammaDist(Max(0,_x_-1),alpha+1,beta)+CGammaDist(Max(0,_x_-1),alpha,beta))); + } + else + { + if (rateType == 10) + { + global P = .5; + global betaP = 1; + global betaQ = 2; + betaP:>0.05; + betaQ:>0.05; + betaP:<85; + betaQ:<85; + global mu = 3; + global sigma = .01; + sigma:>0.0001; + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+ + (1-P)*(_x_>=1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF((mu-1)/sigma), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*(_x_>=1)*(1-ZCDF((mu-_x_)/sigma)/ZCDF((mu-1)/sigma)), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+ + (1-P)*(_x_>=1)*(mu*(1-ZCDF((1-mu)/sigma)-ZCDF((mu-_x_)/sigma))+ + sigma*(Exp((mu-1)(1-mu)/(2*sigma*sigma))-Exp((_x_-mu)(mu-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF((mu-1)/sigma)); + } + else + { + if (rateType == 11) + { + global P = 1/3; + global P1 = .5; + + global mu = 3; + global sigma = .5; + sigma:>0.0001; + global sigma1 = 1; + sigma1:>0.0001; + + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + P1:<1; + + categFreqMatrix = {resp+1,1}; + for (k=1; k<=resp; k=k+1) + { + categFreqMatrix[k]:=(1-P)/resp__; + } + categFreqMatrix[0]:=P; + + category c = (resp+1, categFreqMatrix, MEAN, + (1-P)((1-P1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(mu/sigma1)+ + P1*Exp(-(_x_-1)(_x_-1)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF(1/sigma)), + P+(1-P)(_x_>1e-20)((1-P1)(1-ZCDF((mu-_x_)/sigma1)/ZCDF(mu/sigma1))+ + P1*(1-ZCDF((1-_x_)/sigma)/ZCDF(1/sigma))), + 0,1e25, + (1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma1)-ZCDF((mu-_x_)/sigma1))+ + sigma1*(Exp(-mu*mu/(2*sigma1*sigma1))-Exp((_x_-mu)(mu-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1)+ + P(1-ZCDF(-1/sigma)-ZCDF((1-_x_)/sigma)+ + sigma*(Exp(-1/(2*sigma*sigma))-Exp((_x_-1)(1-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF(1/sigma)) + ); + } + else + { + if (rateType == 12) + { + global P = 1/3; + global P1 = .5; + + global mu = 3; + global sigma = .25; + global sigma1 = .5; + global sigma2 = 1; + sigma:>0.0001; + sigma1:>0.0001; + sigma2:>0.0001; + + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + P1:<1; + + category c = (resp, EQUAL , MEAN, + 2*P*Exp(-_x_^2/(2*sigma*sigma))+ + (1-P)((1-P1)*Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2))/(sqrt2pi__*sigma2)/ZCDF(mu/sigma2)+ + P1*Exp((1-_x_)(_x_-1)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(1/sigma1)), + P*(1-2*ZCDF(-_x_/sigma))+ + (1-P)((1-P1)(1-ZCDF((mu-_x_)/sigma2)/ZCDF(mu/sigma2))+ + P1*(1-ZCDF((1-_x_)/sigma1)/ZCDF(1/sigma1))), + 0,1e25, + 2*P*sigma*(1-Exp(-_x_*_x_/(2*sigma*sigma)))/sqrt2pi__+ + (1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma2)-ZCDF((mu-_x_)/sigma2))+ + sigma2*(Exp(-mu*mu/(2*sigma2*sigma2))-Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2)))/sqrt2pi__)/ZCDF(mu/sigma2)+ + P1(1-ZCDF(-1/sigma1)-ZCDF((1-_x_)/sigma1)+ + sigma1*(Exp(-1/(2*sigma1*sigma1))-Exp((_x_-1)(1-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1)) + ); + } + else + { + if (rateType == 13) + { + global sigma = .1; + sigma:>0.0001;sigma:<10; + sqrt2pi = Sqrt(8*Arctan(1)); + global _x_:<1e200; + category c = (resp, EQUAL, MEAN, + Exp (-Log(_x_)*Log(_x_) / (2*sigma*sigma)) / (_x_*sigma*sqrt2pi__), /*density*/ + ZCDF (Log(_x_)/sigma), /*CDF*/ + 1e-200, /*left bound*/ + 1e200, /*right bound*/ + Exp (.5*sigma^2)*ZCDF (Log(_x_)/sigma-sigma), + CONSTANT_ON_PARTITION + ); + } + else + { + if (rateType == 14) + { + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , + 1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta,CONSTANT_ON_PARTITION); + } + else + { + global P1 = 1/3; + global P2 = .5; + P1:<1; + P2:<1; + global W1 = .25; + global R1 = 4; + global R2 = 3; + R1:>1; + R2:>1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{W1,W1*R1,W1*R1*R2}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25, ,CONSTANT_ON_PARTITION); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return 0; +} + +/* ____________________________________________________________________________________________________________________*/ + +function FrameText (frameChar,vertChar,parOff,theText) +{ + h = Abs (theText)+4; + fprintf (stdout,"\n"); + for (k=0; k1) break; + } + if (k 1 */ + { + ConstructCategoryMatrix(marginals,lf,COMPLETE); + + CC = Columns (marginals); + if (rateType>=13) + /* subset rate variation */ + { + CC = CC/numberOfSubsets; + + subsetMarginals = {D,numberOfSubsets}; + for (v=0; v1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v=sigLevel) + { + fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n"); + } + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Subsets with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v=sigLevel) + { + fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n"); + } + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Sites with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v1."); + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n"); + return E; +} + +/* ____________________________________________________________________________________________________________________*/ + +function PopulateModelMatrix (ModelMatrixName&, EFV) +{ + ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; + + hshift = 0; + + if (modelType==0) + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__]; + ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__]; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__]; + ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__]; + } + } + } + } + } + else + { + if (modelType==1) + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + nucPosInCodon = 2; + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + nucPosInCodon = 0; + } + else + { + transition = v%16$4; + transition2= h%16$4; + nucPosInCodon = 1; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__][nucPosInCodon__]; + ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__][nucPosInCodon__]; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__][nucPosInCodon__]; + ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__][nucPosInCodon__]; + } + } + } + } + } + else + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + if (Abs(transition-transition2)%2) + { + ModelMatrixName[h-hshift][v-vshift] := kappa*t; + ModelMatrixName[v-vshift][h-hshift] := kappa*t; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := t; + ModelMatrixName[v-vshift][h-hshift] := t; + } + + } + else + { + if (Abs(transition-transition2)%2) + { + ModelMatrixName[h-hshift][v-vshift] := kappa*c*t; + ModelMatrixName[v-vshift][h-hshift] := kappa*c*t; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t; + ModelMatrixName[v-vshift][h-hshift] := c*t; + } + } + } + } + } + } + } + return (modelType>1); +} + +/* ____________________________________________________________________________________________________________________*/ + +function PopulateModelMatrix2 (ModelMatrixName&, EFV) +{ + ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; + + hshift = 0; + + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + if (Abs(transition-transition2)%2) + { + ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := kappa"+l+"*t;"); + } + else + { + ModelMatrixName[h-hshift][v-vshift] := t; + ModelMatrixName[v-vshift][h-hshift] := t; + } + + } + else + { + if (Abs(transition-transition2)%2) + { + ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := c*kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := c*kappa"+l+"*t;"); + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t; + ModelMatrixName[v-vshift][h-hshift] := c*t; + } + } + } + } + } + return 1; +} +/* ____________________________________________________________________________________________________________________*/ + +function spawnLikelihood (kappaSharedOrNot) +{ + if (kappaSharedOrNot) + { + for (l=0; l=lowerSeqBound)&&(speciesIndex1)","Beta & (Normal>1)", + "0 & 2 (Normal>1)","0 & 2 (Normal>1)", + "3 Normal","3 Normal", + "RE:Log normal","Random Effects: Log normal", + "RE:Gamma","Random Effects: Gamma", + "RE:Discrete","Random Effects: 3 bin Discrete"); + + if (modelTypes[0]<0) + { + return; + } + for (rateType = 0; rateType < Rows(modelTypes)*Columns(modelTypes); rateType = rateType + 1) + { + modelType = modelTypes[rateType]; + chosenModelList[modelType] = 1; + } +} + +ChoiceList (shareType,"Choose parameter sharing mode",1,SKIP_NONE, + "All","Share dN/dS, transversion/transition ratio (if applicable) and base frequencies for all subsets.", + "dN/dS Only","Share only dN/dS. Transversion/transition ratio (if applicable) and base frequencies are separate for each subset." +); + +if (shareType<0) +{ + return; +} + +ChoiceList (modelType,"Choose a model",1,SKIP_NONE, + "MG94 1x4","Muse-Gaut 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).", + "MG94 3x4","Muse-Gaut 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific).", + "GY94 1x4","Goldman-Yang 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).", + "GY94 3x4","Goldman-Yang 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific)." +); + +if (modelType<0) +{ + return; +} + +if ((modelType==0)||(modelType==2)) +{ + if (shareType==0) + { + HarvestFrequencies (observedFreq,filteredData,1,1,0); + vectorOfFrequencies = BuildCodonFrequencies4 (observedFreq); + } + else + { + for (v=0; v1) +{ + global kappa = 2.; +} + +fprintf (stdout, "\n\n\nChoose the cutoff (0 to 1) for posterior of dN/dS>1 for a site to be considered under selective pressure:"); +fscanf (stdin, "Number",psigLevel); +if ((psigLevel <= 0)||(psigLevel>1)) +{ + psigLevel = .95; +} +fprintf (stdout, "\n>Using ", psigLevel , " cutoff\n"); + +fprintf (stdout, "\nChoose the number of categories in discretized distributions:"); +fscanf (stdin, "Number",categCount); +categCount = categCount$1; +if (categCount<=0) +{ + categCount = 8; +} + +fprintf (stdout, "\n>Using ", Format (categCount,0,0), " categories.\n"); + +SetDialogPrompt ("Write detailed results to:"); + +fprintf (PROMPT_FOR_FILE,CLEAR_FILE); + +global c = 1.; + +dummyVar = FrameText ("-","|",2,"SUMMARY TABLE"); +tableSeparator = "+-------------------------+----------------+---------------+-----+\n"; +fprintf (stdout, "\n\"p\" is the number of parameters in addition to the branch lengths.\nDetailed results including sites with dN/dS>1 will be written to\n",LAST_FILE_PATH,"\n\n"); +fprintf (stdout, tableSeparator, + "| MODEL (Number & Desc) | Log likelihood | dN/dS | p |\n", + tableSeparator); + +cachedBranchLengths = {{-1,-1}}; + +if (chosenModelList[0]>0) +{ + timer = Time(1); + fprintf (LAST_FILE_PATH,"\n*** RUNNING SINGLE RATE MODEL ***\n#################################\n"); + dummy = spawnLikelihood (shareType); + Optimize (res,lf); + fprintf (LAST_FILE_PATH,"\n>Done in ", Time(1)-timer, " seconds \n\n"); + fprintf (LAST_FILE_PATH,lf,"\n\n-----------------------------------\n\ndN/dS = ",c,"\n\n"); + + fprintf (stdout, "| 0. Single Rate Model | ",Format (res[1][0],14,6)," | ",Format (c,13,8)," | 0 |\n", + tableSeparator); + + timer = res[1][1]-res[1][2]; + cachedBranchLengths = {timer,1}; + + for (rateType = timer; rateType < Columns(cachedBranchLengths); rateType = rateType+1) + { + cachedBranchLengths[rateType-timer][0] = res [0][rateType]; + } +} + +for (rateType = 0; rateType < 16; rateType = rateType + 1) +{ + if (chosenModelList[rateType+1]==0) + { + continue; + } + timer = Time(1); + dummy = SetWDistribution (categCount); + dummy = spawnLikelihood (shareType); + + fprintf (LAST_FILE_PATH,"\n*** RUNNING MODEL ", Format(rateType+1,0,0), " (",ModelNames[rateType],") ***\n######################################\n"); + /*if (cachedBranchLengths[0][0]>=0.0) + { + v = ParameterCount[rateType]; + if (modelType>1) + { + v=v+1; + } + for (h=0; hDone in ",Time(1)-timer, " seconds \n\n", lf); + fprintf (stdout, "| "); + if (rateType<9) + { + fprintf (stdout," "); + } + fprintf (stdout, Format (rateType+1,0,0), ". ", ModelNames[rateType]); + for (dummy = Abs(ModelNames[rateType])+5; dummy<25; dummy = dummy+1) + { + fprintf (stdout," "); + } + dummy = GetDistributionParameters(psigLevel); + fprintf (stdout,"| ",Format (res[1][0],14,6)," | ",Format (dummy,13,8)," | ", + Format(ParameterCount[rateType],0,0)," |\n",tableSeparator); + + if (modelType>1) + { + kappa = 2.; + } +} diff --git a/samples/HyPhy/MatrixIndexing.bf b/samples/HyPhy/MatrixIndexing.bf new file mode 100755 index 00000000..aa1344d4 --- /dev/null +++ b/samples/HyPhy/MatrixIndexing.bf @@ -0,0 +1 @@ +fprintf (stdout, "\n1). Spawning a zero-populated 5x6 matrix and setting it's values to random numbers in [0,1].\n"); aMatrix = {5,6}; aMatrix = aMatrix ["Random(0,1)"]; fprintf (stdout, aMatrix, "\n"); fprintf (stdout, "\n2). Accessing a second-row third-column element and a random element.\n\n"); r = Random (0, Rows(aMatrix))$1; c = Random (0, Columns(aMatrix))$1; fprintf (stdout, "matrix[1][2]=", aMatrix[1][2], "\nmatrix[", r , "][" , c, "]=", aMatrix[r][c], "\n"); fprintf (stdout, "\n3). Accessing the fourth row.\n\n"); fprintf (stdout, "matrix[3][-1]=\n", aMatrix[3][-1],"\n"); fprintf (stdout, "\n4). Accessing the first column.\n\n"); fprintf (stdout, "matrix[-1][0]=\n", aMatrix[-1][0],"\n"); fprintf (stdout, "\n5). Populating a matrix template (below the diagonal).\n\n"); template={5,6}; template=template["_MATRIX_ELEMENT_ROW_>_MATRIX_ELEMENT_COLUMN_"]; fprintf (stdout, template ,"\n"); fprintf (stdout, "\n6). Extracting (by row) matrix elements using the template.\n\n"); fprintf (stdout, aMatrix[template] ,"\n"); fprintf (stdout, "\n7). Extracting a submatrix: top left corner at (1,1) - bottom right corner at (3,2).\n\n"); fprintf (stdout, "matrix[{{1,1}}][{{3,2}}]=\n", aMatrix[{{1,1}}][{{3,2}}],"\n"); fprintf (stdout, "\n8). Returning a matrix in which all elements are squared and above diagonal elements are further increased by 1.\n\n"); fprintf (stdout, "\n", aMatrix["_MATRIX_ELEMENT_VALUE_^2+(_MATRIX_ELEMENT_ROW_<_MATRIX_ELEMENT_COLUMN_)"],"\n"); \ No newline at end of file diff --git a/samples/HyPhy/MolecularClock.bf b/samples/HyPhy/MolecularClock.bf new file mode 100644 index 00000000..92606d2d --- /dev/null +++ b/samples/HyPhy/MolecularClock.bf @@ -0,0 +1,147 @@ +#include "molclockBootstrap.bf"; + +RESTORE_GLOBALS = 1; +_DO_TREE_REBALANCE_ = 0; +VERBOSITY_LEVEL = -1; + +function RestoreGlobalValues (lfIndex) +{ + if (lfIndex==0) + { + for (i=0;i1) +{ + ChoiceList (parameter2Constrain, "Parameter(s) to constrain:",1,SKIP_NONE,LAST_MODEL_PARAMETER_LIST); + + if (parameter2Constrain<0) + { + return; + } + if (parameter2Constrain==0) + { + parameter2ConstrainString = ""; + for (parameter2Constrain=Rows("LAST_MODEL_PARAMETER_LIST")-1; parameter2Constrain; parameter2Constrain = parameter2Constrain-1) + { + GetString (funnyString,LAST_MODEL_PARAMETER_LIST,parameter2Constrain); + parameter2ConstrainString = parameter2ConstrainString + funnyString + ","; + } + GetString (funnyString,LAST_MODEL_PARAMETER_LIST,0); + parameter2ConstrainString = parameter2ConstrainString + funnyString; + } + else + { + GetString (parameter2ConstrainString,LAST_MODEL_PARAMETER_LIST,parameter2Constrain-1); + } +} +else +{ + GetString (parameter2ConstrainString,LAST_MODEL_PARAMETER_LIST,0); +} + +timer = Time(0); + +LikelihoodFunction lf = (filteredData,givenTree); + +Optimize (res,lf); + +separator = "*-----------------------------------------------------------*"; + +fprintf (stdout, "\n", separator, "\nRESULTS WITHOUT THE CLOCK:\n",lf); + +fullModelLik = res[1][0]; + +fullVars = res[1][1]; + +/* now specify the constraint */ + +Tree clockTree = treeString; + +ExecuteCommands ("MolecularClock (clockTree,"+parameter2ConstrainString+");"); + +LikelihoodFunction lfConstrained = (filteredData, clockTree); + +USE_LAST_RESULTS = 1; +Optimize (res1,lfConstrained); +USE_LAST_RESULTS = 0; + +SAVE_GLOBALS = res1[1][2]; + +if (SAVE_GLOBALS) +{ + globalSpoolMatrix = {1,SAVE_GLOBALS}; + + for (i=0;idS in the data sets? + - Do the sites under positive selection share the same dN/dS? + - Two previous tests combined +*/ + +RequireVersion ("0.9920061001"); + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function BuildCodonFrequencies (obsF) +{ + PIStop = 1.0; + result = {ModelMatrixDimension,1}; + hshift = 0; + + for (h=0; h<64; h=h+1) + { + first = h$16; + second = h%16$4; + third = h%4; + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + PIStop = PIStop-obsF[first][0]*obsF[second][1]*obsF[third][2]; + continue; + } + result[h-hshift][0]=obsF[first][0]*obsF[second][1]*obsF[third][2]; + } + return result*(1.0/PIStop); +} + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function ReportDistributionString (rc,freqStrMx,infix, skip0) +{ + distroString = ""; + distroString * 1024; + + reportMx = {rc,4}; + + distroString * (" dN/dS dS dN Prob\n"); + for (mi=0; mi 0) + { + distroString * (Format(reportMx[mi][2],8,3)+Format(reportMx[mi][0],8,3)+Format(reportMx[mi][1],8,3)+Format(reportMx[mi][3],10,3)+"\n"); + } + } + + distroString * 0; + return distroString; +} + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function DefineNucleotideBiases (dummy) +{ + ModelTitle = "MG94x"+modelDesc[0]; + modelConstraintString = ""; + + for (customLoopCounter2=0; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + if (rateBiasTerms[customLoopCounter2] != "1") + { + ExecuteCommands ("global " + rateBiasTerms[customLoopCounter2] + "=1;"); + } + } + + for (customLoopCounter2=1; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + for (customLoopCounter=0; customLoopCounter0.0000001;global NS_"+infix+"0 = 0.1;"); + + for (mi=1; mi0.0000001;\nglobal NS_"+infix+mi+";\n"); + if (randomizeInitValues) + { + categDef1*("global P_"+infix+mi+" = Random(0.05,0.95);\nP_"+infix+mi+":<1;\n"); + categDef1*("global S_"+infix+mi+" = Random(0.05,1);"); + } + else + { + categDef1*("global P_"+infix+mi+" = 1/"+(resp+1-mi)+";\nP_"+infix+mi+":<1;\n"); + } + } + + freqStrMx = {resp,1}; + if (resp>1) + { + freqStrMx[0] = "P_"+infix+"1"; + + for (mi=1; mi1;R_"+infix+mi+"="+Random(1.05,10)+";"); + } + } + else + { + for (mi=respN+respP; mi1;R_"+infix+mi+"=2+"+mi+";"); + } + } + } + else + { + if (randomizeInitValues) + { + for (mi=0; mi 1) + { + lfParts = lfParts + ",filteredData_" + fileID + "," + treeID; + } + } +} + +lfParts * 0; +ExecuteCommands (lfParts + "," + lfDef1 + ");"); + +sumPath = resToPath + ".summary"; + +treeBranchParameters = 0; +for (fileID = 1; fileID <= fileCount; fileID = fileID + 1) +{ + ExecuteCommands ("treeBranchParameters = treeBranchParameters + BranchCount(tree_" + fileID + "_0) + TipCount(tree_" + fileID + "_0);"); +} + +/*-------------- INDEPENDENT DISTRIBUTIONS ------------------*/ + +sop = Max(OPTIMIZATION_PRECISION,0.001); + +fprintf (stdout, "Running simpler distribution approximations to ensure good convergence...\n"); + +OPTIMIZATION_PRECISION = 0.1; + +P_1_1 := 0;P_1_2 := 0;P_1_3 := 0; +P_2_1 := 0;P_2_2 := 0;P_2_3 := 0; + +S_1_0 := 1;S_1_1 := 1;S_1_2 := 1;S_1_3 := 1; +S_2_0 := 1;S_2_1 := 1;S_2_2 := 1;S_2_3 := 1; +R_1_0 := 1;R_1_1 := 1;R_1_2 := 1; +R_2_0 := 1;R_2_1 := 1;R_2_2 := 1; + +Optimize (res,lf); +USE_LAST_RESULTS = 1; +SKIP_CONJUGATE_GRADIENT = 1; + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 1. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + +codonFactor_1 := codonFactor_1__; +codonFactor_2 := codonFactor_2__; + +AC_1 := AC_1__; AT_1 := AT_1__; CG_1 := CG_1__; CT_1 := CT_1__; GT_1 := GT_1__; +AC_2 := AC_2__; AT_2 := AT_2__; CG_2 := CG_2__; CT_2 := CT_2__; GT_2 := GT_2__; + + + +fprintf (stdout, "\nGateaux sampling positively selected directions\n"); + +P_1_1 = 2/filteredData_1.sites; +S_1_3 = 1; + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); +bestDiff = -1e100; +bestAlpha = 1; +bestBeta = 1; +bestLL = -1e100; + +step = 0.1; +step2 = 0.25; +v1 = 0.05; + +for (v1c = 0; v1c < 10; v1c = v1c + 1) +{ + v2 = v1+step; + for (v2c = 0; v2c < 20; v2c = v2c+1) + { + checkASample ("1_0"); + v2 = v2 + step2; + } + v1 = v1+step; +} + +S_1_0 = bestAlpha; +R_1_0 = bestBeta; +bestAlpha = 1; +bestBeta = 1; + +if (bestDiff <= 0) +{ + P_1_1 = 0; +} +saveBD = bestDiff; + +P_2_1 = 1/filteredData_2.sites; +S_2_3 = 1; + +v1 = 0.05; +for (v1c = 0; v1c < 10; v1c = v1c + 1) +{ + v2 = v1+step; + for (v2c = 0; v2c < 20; v2c = v2c+1) + { + checkASample ("2_0"); + v2 = v2 + step2; + } + v1 = v1+step; +} + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_0 = bestAlpha; +R_2_0 = bestBeta; + +if (bestDiff <= saveBD) +{ + P_2_1 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_0, ",", S_1_0*R_1_0, "), (", S_2_0, ",", S_2_0*R_2_0, "), ",bestDiff," likelihood points\n"); +} + + +Optimize (res,lf); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 2. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + + +fprintf (stdout, "\nGateaux sampling neutral directions\n"); + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); + +P_1_2 = 1/(filteredData_1.sites*(1-P_1_1)); +bestDiff = -1e100; +bestAlpha = 1; +step = 0.02; +v1 = 0; +for (v1c = 0; v1c < 50; v1c = v1c + 1) +{ + v1 = v1 + step; + v2 = v1; + + checkASample ("1_1"); +} + + +S_1_1 = bestAlpha; +bestAlpha = 1; + +if (bestDiff <= 0) +{ + P_1_2 = 0; +} +saveBD = bestDiff; +R_1_1 := 1; + +P_2_2 = 1/(filteredData_2.sites*(1-P_2_1)); + +v1 = 0; +for (v1c = 0; v1c < 50; v1c = v1c + 1) +{ + v1 = v1 + step; + v2 = v1; + + checkASample ("2_1"); +} + + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_1 = bestAlpha; +R_2_1 := 1; + +if (bestDiff <= saveBD) +{ + P_2_2 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_1, ",", S_1_1, "), (", S_2_1, ",", S_2_1, "), ",bestDiff," likelihood points\n"); +} + +Optimize (res,lf); +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 3. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + +fprintf (stdout, "\nGateaux sampling negative selected directions\n"); + + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); +bestDiff = -1e100; +bestAlpha = 1; +bestBeta = 1; + + +step = 1/16; +v1 = 0; +P_1_3 = 2/(filteredData_1.sites*(1-P_1_1)*(1-P_1_2)); +S_1_2 = 1; +for (v1c = 0; v1c < 15; v1c = v1c + 1) +{ + v1 = v1+step; + v2 = step/2; + for (v2c = 0; v2c < v1c; v2c = v2c+1) + { + checkASample ("1_2"); + v2 = v2 + step; + } +} + + +S_1_2 = bestAlpha; +R_1_2 = bestBeta; +bestAlpha = 1; +bestBeta = 1; + +if (bestDiff <= 0) +{ + P_1_3 = 0; +} +saveBD = bestDiff; + + +v1 = 0; +P_2_3 = 2/(filteredData_2.sites*(1-P_2_1)*(1-P_2_2)); +S_2_2 = 1; +for (v1c = 0; v1c < 15; v1c = v1c + 1) +{ + v1 = v1+step; + v2 = step/2; + for (v2c = 0; v2c < v1c; v2c = v2c+1) + { + checkASample ("2_2"); + v2 = v2 + step; + } +} + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_2 = bestAlpha; +R_2_2 = bestBeta; + +if (bestDiff <= saveBD) +{ + P_2_2 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_2, ",", S_1_2*R_1_2, "), (", S_2_2, ",", S_2_2*R_2_2, "), ",bestDiff," likelihood points\n"); +} + +AC_1 = AC_1; AT_1 = AT_1; CG_1 = CG_1; CT_1 = CT_1; GT_1 = GT_1; +AC_2 = AC_2; AT_2 = AT_2; CG_2 = CG_2; CT_2 = CT_2; GT_2 = GT_2; + +if (Abs(modelConstraintString_1)) +{ + ExecuteCommands (modelConstraintString_1); +} +if (Abs(modelConstraintString_2)) +{ + ExecuteCommands (modelConstraintString_2); +} + +codonFactor_1 = codonFactor_1; +codonFactor_2 = codonFactor_2; + + +GetString (paramList, lf, -1); +degF = Columns(paramList["Global Independent"]) + 14 - 2*branchLengths + treeBranchParameters; + +OPTIMIZATION_PRECISION = sop; +fprintf (stdout, "Running an independent distributions model fit (", degF, " parameters)...\n"); +Optimize (res,lf); +LogL = res[1][0]; + +AIC = 2*(degF-LogL); +AICc = 2*(degF*totalCodonCount/(totalCodonCount-degF-1) - LogL); + +fprintf (stdout, "\n\nIndependent distributions model fit summary\n", + "\nLog likelihood:", Format (LogL, 15, 5), + "\nParameters :", Format (degF, 15, 0), + "\nAIC :", Format (AIC, 15, 5), + "\nc-AIC :", Format (AICc, 15, 5),"\n" +); + +fprintf (sumPath,CLEAR_FILE,"Independent distributions model fit summary\n", + "\nLog likelihood:", Format (LogL, 15, 5), + "\nParameters :", Format (degF, 15, 0), + "\nAIC :", Format (AIC, 15, 5), + "\nc-AIC :", Format (AICc, 15, 5),"\n"); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",0); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",0); + +fprintf (stdout, "Inferred rates for data set 1:\n", d1); +fprintf (sumPath, "Inferred rates for data set 1:\n", d1); +fprintf (stdout, "Inferred rates for data set 2:\n", d2); +fprintf (sumPath, "Inferred rates for data set 2:\n", d2); + +LIKELIHOOD_FUNCTION_OUTPUT = 6; +fprintf (resToPath,CLEAR_FILE,lf); + + +/*-------------- SHARED POSITIVE SELECTION STRENGTHS ------------------*/ + +for (k=0; k=respP+respN) + { + ExecuteCommands ("R_1_"+k+"=0.5(R_1_"+k+"+R_2_"+k+");"); + } + ExecuteCommands ("S_2_"+k+":=S_1_"+k+";R_2_"+k+":=R_1_"+k+";"); +} +for (k=1; k<=resp; k=k+1) +{ + ExecuteCommands ("P_1_"+k+"=0.5(P_1_"+k+"+P_2_"+k+");"); + ExecuteCommands ("P_2_"+k+":=P_1_"+k+";"); +} + +GetString (paramList, lf, -1); +degFJ = Columns(paramList["Global Independent"]) + 14 - 2*branchLengths + treeBranchParameters; +fprintf (stdout, "\nRunning a shared distributions model fit (", degFJ, " parameters)...\n"); + +Optimize (res_J,lf); +LogLJ = res_J[1][0]; + +AICJ = 2*(degFJ-LogLJ); +AICcJ = 2*(degFJ*totalCodonCount/(totalCodonCount-degFJ-1) - LogLJ); + +fprintf (stdout, "\n\nShared distributions model fit summary\n", + "\nLog likelihood:", Format (LogLJ, 15, 5), + "\nParameters :", Format (degFJ, 15, 0), + "\nAIC :", Format (AICJ, 15, 5), + "\nc-AIC :", Format (AICcJ, 15, 5),"\n" +); + +fprintf (sumPath, "\n\nShared distributions model fit summary\n", + "\nLog likelihood:", Format (LogLJ, 15, 5), + "\nParameters :", Format (degFJ, 15, 0), + "\nAIC :", Format (AICJ, 15, 5), + "\nc-AIC :", Format (AICcJ, 15, 5),"\n" +); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",0); + +fprintf (stdout, "Inferred joint rates:\n", d1); +fprintf (sumPath, "Inferred joint rates:\n", d1); + +fpath = resToPath + ".JointAll"; +LIKELIHOOD_FUNCTION_OUTPUT = 6; +fprintf (fpath,CLEAR_FILE,lf); + +USE_LAST_RESULTS = 0; +SKIP_CONJUGATE_GRADIENT = 0; +LIKELIHOOD_FUNCTION_OUTPUT = 2; + +fprintf (stdout, "\nDistribution comparison tests\n", + "\n\tAre the distributions different?", + "\n\t\tLR = ", Format (2*(LogL-LogLJ),10,3), + " DF = ", degF-degFJ, + " p = ", Format(1-CChi2(2*(LogL-LogLJ), degF-degFJ),8,3), "\n"); + +fprintf (stdout, "\n\tAre selective regimes (dN/dS and proportions) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSH),10,3), + " DF = ", degF-degFPSH, + " p = ", Format(1-CChi2(2*(LogL-LogLPSH), degF-degFPSH),8,3), "\n"); + +fprintf (stdout, "\n\tAre selection strengths (dN/dS) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSS),10,3), + " DF = ", degF-degFPSS, + " p = ", Format(1-CChi2(2*(LogL-LogLPSS), degF-degFPSH),8,3), "\n"); + +fprintf (stdout, "\n\tAre the proportions of codons under selection different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSP),10,3), + " DF = ", degF-degFPSP, + " p = ", Format(1-CChi2(2*(LogL-LogLPSP), degF-degFPSP),8,3), "\n"); + +fprintf (sumPath, "\n\nDistribution comparison tests\n", + "\n\tAre the distributions different?", + "\n\t\tLR = ", Format (2*(LogL-LogLJ),10,3), + " DF = ", degF-degFJ, + " p = ", Format(1-CChi2(2*(LogL-LogLJ), degF-degFJ),8,3), "\n"); + +fprintf (sumPath, "\n\tAre selective regimes (dN/dS and proportions) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSH),10,3), + " DF = ", degF-degFPSH, + " p = ", Format(1-CChi2(2*(LogL-LogLPSH), degF-degFPSH),8,3), "\n"); + +fprintf (sumPath, "\n\tAre selection strengths (dN/dS) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSS),10,3), + " DF = ", degF-degFPSS, + " p = ", Format(1-CChi2(2*(LogL-LogLPSS), degF-degFPSH),8,3), "\n"); + +fprintf (sumPath, "\n\tAre the proportions of codons under selection different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSP),10,3), + " DF = ", degF-degFPSP, + " p = ", Format(1-CChi2(2*(LogL-LogLPSP), degF-degFPSP),8,3), "\n"); +/*------------------------------------------------------------------------------------------------------------*/ + +function checkASample (whichRate) +{ + ExecuteCommands ("S_"+whichRate+"=v1;R_"+whichRate+"=v2/v1;"); + LFCompute (lf,res_n); + localDiff = res_n-baseLineLL; + if (localDiff > bestDiff) + { + bestDiff = localDiff; + bestAlpha = v1; + bestBeta = v2/v1; + } + return 0; +} diff --git a/samples/HyPhy/hyphy_cmds.bf b/samples/HyPhy/hyphy_cmds.bf new file mode 100644 index 00000000..7a2189f9 --- /dev/null +++ b/samples/HyPhy/hyphy_cmds.bf @@ -0,0 +1,11003 @@ +INTEGRATION_PRECISION_FACTOR = 5.0e-6; +END_OF_FILE = 0; +LIKELIHOOD_FUNCTION_OUTPUT = 5; +ACCEPT_BRANCH_LENGTHS = 1; +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//NTsCodonsAAs.ibf"; +fprintf(stdout, "Running HYPHY script hyphy_cmds.bf...\n"); +DataSet data = ReadDataFile("_codenames_Aligned_NPs_Swine.fasta"); +assert(data.sites % 3 == 0, "Sequence lengths not multiples of 3"); +totalcodons = data.sites $ 3; +fprintf(stdout, "Read from _codenames_Aligned_NPs_Swine.fasta a set of ", data.species, " sequences consisting of ", data.sites, " nucleotides corresponding to ", totalcodons, " codons each.\n"); +fprintf(stdout, "The analysis will include the following 498 codon positions (sequential numbering starting with 1):\n1, 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, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498\n"); +assert(totalcodons >= 498, "Largest included site exceeds sequence length"); +DataSetFilter codonfilter = CreateFilter(data, 3, "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,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493", "", "TAA,TAG,TGA"); +assert(data.species == codonfilter.species, "species number mismatch"); +assert(codonfilter.sites == 498, "Codon filtered data does not contain the right number of sites"); +fprintf(stdout, "Created a codon filter of ", codonfilter.sites, " sites.\n"); +assert(totalcodons - (totalcodons - 498) - 0 == codonfilter.sites, "Codon filtered data is not the expected length. Do sequences contain stop codons?"); +CheckCodonFilter("codonfilter"); +fprintf(stdout, "Reading tree string from _codenames_codonphyml_Swine_tree.newick.\n"); +fscanf("_codenames_codonphyml_Swine_tree.newick", String, treestring); +fprintf(stdout, "Using the Goldman Yang 1994 (GY94) codon model...\n"); +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//CF3x4.ibf"; +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//GY94.ibf"; +CreateGY94Model("CF3x4", "global", "global", 4, 4, 1); +UseModel(model); +ExecuteCommands("Tree tree = treestring;") +assert(codonfilter.species == TipCount(tree), "Number of species and number of tips differ"); +LikelihoodFunction likelihood = (codonfilter, tree); +fprintf(stdout, "\nNow optimizing the likelihood function...\n"); +Optimize(mlestimates, likelihood) +fprintf(stdout, "Completed likelihood optimization. Optimized ", mlestimates[1][1], " indpendent parameters and ", mlestimates[1][2], " shared parameters to obtain a log likelihood of ", mlestimates[1][0], ".\n"); +fprintf(stdout, "Writing the results to hyphy_output.txt.\n"); +fprintf("hyphy_output.txt", "Log likelihood: ", mlestimates[1][0], "\nindependent parameters (includes branch lengths): ", mlestimates[1][1], "\nshared parameters: ", mlestimates[1][2], "\nnumber of branch lengths: ", TipCount(tree) + BranchCount(tree), "\nnumber of tip nodes: ", TipCount(tree), "\nnumber of internal branches: ", BranchCount(tree), "\n",likelihood); +fprintf(stdout, "\nNow computing per-site likelihoods.\n"); +fprintf(stdout, "\nFirst fixing all global variables to the maximum-likelihood values estimated on the entire tree.\n"); +GetString(associativearray, likelihood, -1); +globalindependentvariables = associativearray["Global Independent"]; +for (ivariable=0; ivariable./ hoursworked) { empno +) + +NB. Returns the employees, in descending order of the profit brought in by each. +producers=: 3 : 'empno \: empprofit 0' + +NB. Returns the clients, in descending order of the profit generated by each. +custbyprofit=: 3 : 0 +clientlist \: +/ (clientlist ="1 0 emp_client) * empprofit 0 +) + +NB. Calculates withholding tax on each employee's earnings. +renderuntocaesar=: 3 : 0 +bktmin=. 0 6000 10000 20000 NB. Four brackets, 0..6000..10000..20000.._ +bktrate=. 0.05 0.10 0.20 0.30 +bktearns=. 0 >. ((1 |.!._ bktmin) <."1 0 empearnings'') -"1 bktmin ++/"1 bktrate *"1 bktearns +) + +NB. Main + +echo 'Problem 1' +echo emphours'' + +echo 'Problem 2' +echo empearnings'' + +echo 'Problem 3' +echo empprofit'' + +echo 'Problem 4' +echo billclient 10025 + +echo 'Problem 5' +echo dailydrudge'' + +echo 'Problem 6' +echo producers'' + +echo 'Problem 7' +echo custbyprofit'' + +echo 'Problem 8' +echo 0j2 ": renderuntocaesar'' diff --git a/samples/JFlex/LexScan.flex b/samples/JFlex/LexScan.flex new file mode 100644 index 00000000..f8d877f1 --- /dev/null +++ b/samples/JFlex/LexScan.flex @@ -0,0 +1,742 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * JFlex 1.7.0-SNAPSHOT * + * Copyright (C) 1998-2015 Gerwin Klein * + * All rights reserved. * + * * + * License: BSD * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +package jflex; + +import java_cup.runtime.Symbol; +import java.io.*; +import java.util.Stack; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import jflex.unicode.UnicodeProperties; + +%% + +%final +%public +%class LexScan +%implements sym, java_cup.runtime.Scanner +%function next_token + +%type Symbol +%unicode + +%column +%line + +%eofclose + +%state COMMENT, STATELIST, MACROS, REGEXPSTART +%state REGEXP, JAVA_CODE, STATES, STRING_CONTENT +%state CHARCLASS, COPY, REPEATEXP, EATWSPNL +%state CTOR_ARG, REGEXP_CODEPOINT_SEQUENCE +%state STRING_CODEPOINT_SEQUENCE, CHARCLASS_CODEPOINT + +%inputstreamctor false + +%cupdebug + +%{ + int balance = 0; + int commentbalance = 0; + int action_line = 0; + int bufferSize = 16384; + + File file; + Stack files = new Stack(); + + StringBuilder userCode = new StringBuilder(); + + String classCode; + String initCode; + String initThrow; + String eofCode; + String eofThrow; + String lexThrow; + String eofVal; + String scanErrorException; + String cupSymbol = "sym"; + + StringBuilder actionText = new StringBuilder(); + StringBuilder string = new StringBuilder(); + + private UnicodeProperties unicodeProperties; + + boolean charCount; + boolean lineCount; + boolean columnCount; + boolean cupCompatible; + boolean cup2Compatible; + boolean cupDebug; + boolean isInteger; + boolean isIntWrap; + boolean isYYEOF; + boolean notUnix; + boolean isPublic; + boolean isFinal; + boolean isAbstract; + boolean bolUsed; + boolean standalone; + boolean debugOption; + boolean caseless; + boolean inclusive_states; + boolean eofclose; + boolean isASCII; + // TODO: In the version of JFlex after 1.6, the InputStream ctor + // TODO: will never be emitted, and this option will cease to exist. + boolean emitInputStreamCtor = Options.emitInputStreamCtor; + + String isImplementing; + String isExtending; + String className = "Yylex"; + String functionName; + String tokenType; + String visibility = "public"; + + List ctorArgs = new ArrayList(); + List ctorTypes = new ArrayList(); + + LexicalStates states = new LexicalStates(); + + List actions = new ArrayList(); + + private int nextState; + + boolean macroDefinition; + + Timer t = new Timer(); + + // CharClasses.init() is delayed until UnicodeProperties.init() has been called, + // since the max char code won't be known until then. + private CharClasses charClasses = new CharClasses(); + + public CharClasses getCharClasses() { + return charClasses; + } + + public int currentLine() { + return yyline; + } + + public void setFile(File file) { + this.file = file; + } + + private Symbol symbol(int type, Object value) { + return new Symbol(type, yyline, yycolumn, value); + } + + private Symbol symbol(int type) { + return new Symbol(type, yyline, yycolumn); + } + + // updates line and column count to the beginning of the first + // non whitespace character in yytext, but leaves yyline+yycolumn + // untouched + private Symbol symbol_countUpdate(int type, Object value) { + int lc = yyline; + int cc = yycolumn; + String text = yytext(); + + for (int i=0; i < text.length(); i++) { + char c = text.charAt(i); + + if (c != '\n' && c != '\r' && c != ' ' && c != '\t' ) + return new Symbol(type, lc, cc, value); + + if (c == '\n') { + lc++; + cc = 0; + } + else + cc++; + } + + return new Symbol(type, yyline, yycolumn, value); + } + + private String makeMacroIdent() { + String matched = yytext().trim(); + return matched.substring(1, matched.length()-1).trim(); + } + + public static String conc(Object a, Object b) { + if (a == null && b == null) return null; + if (a == null) return b.toString(); + if (b == null) return a.toString(); + + return a.toString()+b.toString(); + } + + public static String concExc(Object a, Object b) { + if (a == null && b == null) return null; + if (a == null) return b.toString(); + if (b == null) return a.toString(); + + return a.toString()+", "+b.toString(); + } + + public UnicodeProperties getUnicodeProperties() { + return unicodeProperties; + } + + private void populateDefaultVersionUnicodeProperties() { + try { + unicodeProperties = new UnicodeProperties(); + } catch (UnicodeProperties.UnsupportedUnicodeVersionException e) { + throw new ScannerException + (file, ErrorMessages.UNSUPPORTED_UNICODE_VERSION, yyline); + } + charClasses.init + (Options.jlex ? 127 : unicodeProperties.getMaximumCodePoint(), this); + } + + private void includeFile(String filePath) { + File f = new File(file.getParentFile(), filePath); + if ( !f.canRead() ) + throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); + // check for cycle + if (files.search(f) > 0) + throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline); + try { + yypushStream( new FileReader(f) ); + files.push(file); + file = f; + Out.println("Including \""+file+"\""); + } + catch (FileNotFoundException e) { + throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); + } + } +%} + +%init{ + states.insert("YYINITIAL", true); +%init} + + +Digit = [0-9] +HexDigit = [0-9a-fA-F] +OctDigit = [0-7] + +Number = {Digit}+ +HexNumber = \\ x {HexDigit} {2} +OctNumber = \\ [0-3]? {OctDigit} {1, 2} + +// Unicode4 can encode chars only in the BMP with the 16 bits provided by its +// 4 hex digits. +Unicode4 = \\ u {HexDigit} {4} + +// Unicode6 can encode all Unicode chars, both in the BMP and in the +// supplementary planes -- only 21 bits are required as of Unicode 5.0, +// but its six hex digits provide 24 bits. +Unicode6 = \\ U {HexDigit} {6} + +// see http://www.unicode.org/unicode/reports/tr18/ +WSP = [ \t\b] +WSPNL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085\t\b\ ] +NWSPNL = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\t\b\ ] +NL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085] | \u000D\u000A +NNL = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085] + +Ident = {IdentStart} {IdentPart}* +QualIdent = {Ident} ( {WSP}* "." {WSP}* {Ident} )* +QUIL = {QualIdent} ( {WSP}* "," {WSP}* {QualIdent} )* +Array = "[" {WSP}* "]" +ParamPart = {IdentStart}|{IdentPart}|"<"|">"|","|{WSP}|"&"|"?"|"." +GenParam = "<" {ParamPart}+ ">" +ClassT = {Ident} ({WSP}* {GenParam})? +QClassT = {QualIdent} ({WSP}* {GenParam})? +ArrType = ({GenParam} {WSP}*)? {QClassT} ({WSP}* {Array})* + +IdentStart = [:jletter:] +IdentPart = [:jletterdigit:] + +JFlexCommentChar = [^*/]|"/"+[^*/]|"*"+[^*/] +JFlexComment = {JFlexCommentChar}+ + +/* Java comments */ +JavaComment = {TraditionalComment}|{EndOfLineComment} +TraditionalComment = "/*"{CommentContent}\*+"/" +EndOfLineComment = "//".*{NL} + +CommentContent = ([^*]|\*+[^*/])* + +StringCharacter = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\"\\] + +CharLiteral = \'([^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\'\\]|{EscapeSequence})\' +StringLiteral = \"({StringCharacter}|{EscapeSequence})*\" + +EscapeSequence = \\[^\u2028\u2029\u000A\u000B\u000C\u000D\u0085]|\\+u{HexDigit}{4}|\\[0-3]?{OctDigit}{1,2} + +/* \\(b|t|n|f|r|\"|\'|\\|[0-3]?{OctDigit}{1,2}|u{HexDigit}{4}) */ + +JavaRest = [^\{\}\"\'/]|"/"[^*/] +JavaCode = ({JavaRest}|{StringLiteral}|{CharLiteral}|{JavaComment})+ + +DottedVersion = [1-9][0-9]*(\.[0-9]+){0,2} + +%% + + { + "%%".*{NL}? { + t.start(); + yybegin(MACROS); + macroDefinition = true; + return symbol(USERCODE,userCode); + } + .*{NL} | .+ { userCode.append(yytext()); } + <> { return symbol(EOF); } +} + + ("%{"|"%init{"|"%initthrow{"|"%eof{"|"%eofthrow{"|"%yylexthrow{"|"%eofval{").*{NL} + { string.setLength(0); yybegin(COPY); } + { + "%}".*{NL} { classCode = conc(classCode,string); yybegin(MACROS); } + "%init}".*{NL} { initCode = conc(initCode,string); yybegin(MACROS); } + "%initthrow}".*{NL} { initThrow = concExc(initThrow,string); yybegin(MACROS); } + "%eof}".*{NL} { eofCode = conc(eofCode,string); yybegin(MACROS); } + "%eofthrow}".*{NL} { eofThrow = concExc(eofThrow,string); yybegin(MACROS); } + "%yylexthrow}".*{NL} { lexThrow = concExc(lexThrow,string); yybegin(MACROS); } + "%eofval}".*{NL} { eofVal = string.toString(); yybegin(MACROS); } + + .*{NL} { string.append(yytext()); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } +} + + + ^"%s" ("tate" "s"?)? {WSP}+ { inclusive_states = true; yybegin(STATELIST); } + ^"%x" ("state" "s"?)? {WSP}+ { inclusive_states = false; yybegin(STATELIST); } + { + {Ident} { states.insert(yytext(),inclusive_states); } + ([\ \t]*","[\ \t]*)|([\ \t]+) { } + {NL} { yybegin(MACROS); } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } +} + + { + "%char" { charCount = true; } + "%line" { lineCount = true; } + "%column" { columnCount = true; } + "%byaccj" { isInteger = true; + if (eofVal == null) + eofVal = "return 0;"; + eofclose = true; + } + "%cup2" { cup2Compatible = true; + isImplementing = concExc(isImplementing, "Scanner"); + lineCount = true; + columnCount = true; + if (functionName == null) + functionName = "readNextTerminal"; + if (tokenType == null) + tokenType = "ScannerToken"; + if (eofVal == null) + eofVal = "return token(SpecialTerminals.EndOfInputStream);"; + if (!Options.jlex) eofclose = true; + return symbol(UNICODE); // %unicode + } + "%cup" { cupCompatible = true; + isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner"); + if (functionName == null) + functionName = "next_token"; + if (tokenType == null) + tokenType = "java_cup.runtime.Symbol"; + if (eofVal == null) + eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);"; + if (!Options.jlex) eofclose = true; + } + "%cupsym"{WSP}+{QualIdent} {WSP}* { cupSymbol = yytext().substring(8).trim(); + if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline); } + "%cupsym"{WSP}+{NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline); } + "%cupdebug" { cupDebug = true; } + "%eofclose"({WSP}+"true")? { eofclose = true; } + "%eofclose"({WSP}+"false") { eofclose = false; } + "%class"{WSP}+{ClassT} {WSP}* { className = yytext().substring(7).trim(); } + "%ctorarg"{WSP}+{ArrType}{WSP}+ { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim()); } + "%function"{WSP}+{Ident} {WSP}* { functionName = yytext().substring(10).trim(); } + "%type"{WSP}+{ArrType} {WSP}* { tokenType = yytext().substring(6).trim(); } + "%integer"|"%int" { isInteger = true; } + "%intwrap" { isIntWrap = true; } + "%yyeof" { isYYEOF = true; } + "%notunix" { notUnix = true; } + "%7bit" { isASCII = true; return symbol(ASCII); } + "%full"|"%8bit" { return symbol(FULL); } + "%16bit" { populateDefaultVersionUnicodeProperties(); + return symbol(UNICODE); + } + "%unicode"({WSP}+{DottedVersion})? { String v = yytext().substring(8).trim(); + if (v.length() == 0) { + populateDefaultVersionUnicodeProperties(); + } else { + try { + unicodeProperties = new UnicodeProperties(v); + } catch (UnicodeProperties.UnsupportedUnicodeVersionException e) { + throw new ScannerException + (file, ErrorMessages.UNSUPPORTED_UNICODE_VERSION, yyline); + } + charClasses.init + (Options.jlex ? 127 : unicodeProperties.getMaximumCodePoint(), this); + } + return symbol(UNICODE); + } + + "%caseless"|"%ignorecase" { caseless = true; } + "%implements"{WSP}+.* { isImplementing = concExc(isImplementing, yytext().substring(12).trim()); } + "%extends"{WSP}+{QClassT}{WSP}* { isExtending = yytext().substring(9).trim(); } + "%public" { isPublic = true; } + "%apiprivate" { visibility = "private"; Skeleton.makePrivate(); } + "%final" { isFinal = true; } + "%abstract" { isAbstract = true; } + "%debug" { debugOption = true; } + "%standalone" { standalone = true; isInteger = true; } + "%pack" { /* no-op - this is the only generation method */ } + "%include" {WSP}+ .* { includeFile(yytext().substring(9).trim()); } + "%buffer" {WSP}+ {Number} {WSP}* { bufferSize = Integer.parseInt(yytext().substring(8).trim()); } + "%buffer" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline); } + "%initthrow" {WSP}+ {QUIL} {WSP}* { initThrow = concExc(initThrow,yytext().substring(11).trim()); } + "%initthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline); } + "%eofthrow" {WSP}+ {QUIL} {WSP}* { eofThrow = concExc(eofThrow,yytext().substring(10).trim()); } + "%eofthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline); } + "%yylexthrow"{WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(12).trim()); } + "%throws" {WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(8).trim()); } + "%yylexthrow"{WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline); } + "%throws" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline); } + "%scanerror" {WSP}+ {QualIdent} {WSP}* { scanErrorException = yytext().substring(11).trim(); } + "%scanerror" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline); } +// TODO: In the version of JFlex after 1.6, the %inputstreamctor directive will become a no-op: the InputStream ctor will never be emitted. + "%inputstreamctor"({WSP}+"true")? { emitInputStreamCtor = true; } + "%inputstreamctor"{WSP}+"false" { emitInputStreamCtor = false; } + + {Ident} { return symbol(IDENT, yytext()); } + "="{WSP}* { if (null == unicodeProperties && ! isASCII) { + populateDefaultVersionUnicodeProperties(); + } + yybegin(REGEXP); + return symbol(EQUALS); + } + + "/*" { nextState = MACROS; yybegin(COMMENT); } + + {EndOfLineComment} { } + + ^"%%" {NNL}* { if (null == unicodeProperties && ! isASCII) { + populateDefaultVersionUnicodeProperties(); + } + macroDefinition = false; + yybegin(REGEXPSTART); + return symbol(DELIMITER); + } + "%"{Ident} { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } + "%" { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } + ^{WSP}+"%" { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1); } + + {WSP}+ { } + {NL}+ { } + <> { if ( yymoreStreams() ) { + file = (File) files.pop(); + yypopStream(); + } + else + throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); + } +} + + { + {Ident} {WSP}* { yybegin(MACROS); ctorArgs.add(yytext().trim()); } + [^] { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn); } +} + + { + ^ {WSP}* "%include" {WSP}+ .* { includeFile(yytext().trim().substring(9).trim()); } + {WSP}* "/*" { nextState = REGEXPSTART; yybegin(COMMENT); } + {WSP}* "<" { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null); } + {WSP}* "}" { return symbol_countUpdate(RBRACE, null); } + {WSP}* "//" {NNL}* { } + {WSP}* "<>" {WSPNL}* "{" { actionText.setLength(0); yybegin(JAVA_CODE); + Symbol s = symbol_countUpdate(EOFRULE, null); + action_line = s.left+1; + return s; + } + ^ {WSP}* {NWSPNL} { yypushback(yylength()); yybegin(REGEXP); } + {WSP} | {NL} { } +} + + { + {Ident} { return symbol(IDENT, yytext()); } + "," { return symbol(COMMA); } + {WSPNL}+ { } + + // "{" will be caught in REGEXP + ">"{WSPNL}* { yybegin(REGEXP); return symbol(MORETHAN); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STATES); } +} + + + { + "<>" {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE); } + "<>" { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION); } + + {WSPNL}*"|"{WSP}*$ { if (macroDefinition) { + yybegin(EATWSPNL); + return symbol(BAR); + } + else { + yybegin(REGEXPSTART); + return symbol(NOACTION); + } + } + + // stategroup + "{" { yybegin(REGEXPSTART); return symbol(LBRACE); } + + {WSPNL}*"|" { return symbol(BAR); } + + {WSPNL}*\" { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT); } + {WSPNL}*"\\u{" { string.setLength(0); yybegin(REGEXP_CODEPOINT_SEQUENCE); } + {WSPNL}*"!" { return symbol(BANG); } + {WSPNL}*"~" { return symbol(TILDE); } + {WSPNL}*"(" { return symbol(OPENBRACKET); } + {WSPNL}*")" { return symbol(CLOSEBRACKET); } + {WSPNL}*"*" { return symbol(STAR); } + {WSPNL}*"+" { return symbol(PLUS); } + {WSPNL}*"?" { return symbol(QUESTION); } + {WSPNL}*"$" { return symbol(DOLLAR); } + {WSPNL}*"^" { bolUsed = true; return symbol(HAT); } + {WSPNL}*"." { return symbol(POINT); } + {WSPNL}*"\\R" { return symbol(NEWLINE); } + {WSPNL}*"[" { yybegin(CHARCLASS); return symbol(OPENCLASS); } + {WSPNL}*"/" { return symbol(LOOKAHEAD); } + + {WSPNL}* "{" {WSP}* {Ident} {WSP}* "}" { return symbol_countUpdate(MACROUSE, makeMacroIdent()); } + {WSPNL}* "{" {WSP}* {Number} { yybegin(REPEATEXP); + return symbol(REPEAT, + new Integer(yytext().trim().substring(1).trim())); + } + + {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND); } + {NL} { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND); } + + {WSPNL}*"/*" { nextState = REGEXP; yybegin(COMMENT); } + + {WSPNL}*"//"{NNL}* { } + + {WSP}+ { } + + { + {WSPNL}*"[:jletter:]" { return symbol(JLETTERCLASS); } + {WSPNL}*"[:jletterdigit:]" { return symbol(JLETTERDIGITCLASS); } + {WSPNL}*"[:letter:]" { return symbol(LETTERCLASS); } + {WSPNL}*"[:uppercase:]" { return symbol(UPPERCLASS); } + {WSPNL}*"[:lowercase:]" { return symbol(LOWERCLASS); } + {WSPNL}*"[:digit:]" { return symbol(DIGITCLASS); } + {WSPNL}*"\\d" { return symbol(DIGITCLASS); } + {WSPNL}*"\\D" { return symbol(DIGITCLASSNOT); } + {WSPNL}*"\\s" { return symbol(WHITESPACECLASS); } + {WSPNL}*"\\S" { return symbol(WHITESPACECLASSNOT); } + {WSPNL}*"\\w" { return symbol(WORDCLASS); } + {WSPNL}*"\\W" { return symbol(WORDCLASSNOT); } + {WSPNL}*"\\p{"[^}]*"}" { String trimmedText = yytext().trim(); + String propertyValue = trimmedText.substring(3,trimmedText.length()-1); + IntCharSet set = unicodeProperties.getIntCharSet(propertyValue); + if (null == set) { + throw new ScannerException(file,ErrorMessages.INVALID_UNICODE_PROPERTY, yyline, yycolumn + 3); + } + return symbol(UNIPROPCCLASS, set); + } + {WSPNL}*"\\P{"[^}]*"}" { String trimmedText = yytext().trim(); + String propertyValue = trimmedText.substring(3,trimmedText.length()-1); + IntCharSet set = unicodeProperties.getIntCharSet(propertyValue); + if (null == set) { + throw new ScannerException(file,ErrorMessages.INVALID_UNICODE_PROPERTY, yyline, yycolumn + 3); + } + return symbol(UNIPROPCCLASSNOT, set); + } + } + + . { return symbol(CHAR, yytext().codePointAt(0)); } +} + + {WSPNL}+ { yybegin(REGEXP); } + + + { + "}" { yybegin(REGEXP); return symbol(RBRACE); } + "," {WSP}* {Number} { return symbol(REPEAT, new Integer(yytext().substring(1).trim())); } + {WSP}+ { } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { + "{"{Ident}"}" { return symbol(MACROUSE, yytext().substring(1,yylength()-1)); } + "[" { balance++; return symbol(OPENCLASS); } + "]" { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS); } + "^" { return symbol(HAT); } + "-" { return symbol(DASH); } + "--" { return symbol(DIFFERENCE); } + "&&" { return symbol(INTERSECTION); } + "||" { /* union is the default operation - '||' can be ignored */ } + "~~" { return symbol(SYMMETRICDIFFERENCE); } + "\\u{" { yybegin(CHARCLASS_CODEPOINT); } + + // this is a hack to keep JLex compatibilty with char class + // expressions like [+-] + "-]" { yypushback(1); yycolumn--; return symbol(CHAR, (int)'-'); } + + \" { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT); } + + . { return symbol(CHAR, yytext().codePointAt(0)); } + + \n { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { + \" { yybegin(nextState); return symbol(STRING, string.toString()); } + \\\" { string.append('\"'); } + [^\"\\\u2028\u2029\u000A\u000B\u000C\u000D\u0085]+ { string.append(yytext()); } + + {NL} { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } + + {HexNumber} { string.append( (char) Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {OctNumber} { string.append( (char) Integer.parseInt(yytext().substring(1,yylength()), 8)); } + {Unicode4} { string.append( (char) Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {Unicode6} { int codePoint = Integer.parseInt(yytext().substring(2,yylength()), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn+2); + } + } + + "\\u{" { yybegin(STRING_CODEPOINT_SEQUENCE); } + + \\b { string.append('\b'); } + \\n { string.append('\n'); } + \\t { string.append('\t'); } + \\f { string.append('\f'); } + \\r { string.append('\r'); } + + \\. { string.append(yytext().substring(1, yytext().offsetByCodePoints(1, 1))); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } +} + + + { + {HexNumber} { return symbol(CHAR, Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {OctNumber} { return symbol(CHAR, Integer.parseInt(yytext().substring(1,yylength()), 8)); } + {Unicode4} { return symbol(CHAR, Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {Unicode6} { int codePoint = Integer.parseInt(yytext().substring(2,yylength()), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + return symbol(CHAR, codePoint); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn+2); + } + } + + \\b { return symbol(CHAR, (int)'\b'); } + \\n { return symbol(CHAR, (int)'\n'); } + \\t { return symbol(CHAR, (int)'\t'); } + \\f { return symbol(CHAR, (int)'\f'); } + \\r { return symbol(CHAR, (int)'\r'); } + + \\. { return symbol(CHAR, yytext().codePointAt(1)); } +} + + + { + "{" { balance++; actionText.append('{'); } + "}" { if (balance > 0) { + balance--; + actionText.append('}'); + } + else { + yybegin(REGEXPSTART); + Action a = new Action(actionText.toString(), action_line); + actions.add(a); + return symbol(ACTION, a); + } + } + + {JavaCode} { actionText.append(yytext()); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1); } +} + + { + + "/"+ "*" { commentbalance++; } + "*"+ "/" { if (commentbalance > 0) + commentbalance--; + else + yybegin(nextState); + } + + {JFlexComment} { /* ignore */ } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT); } +} + + { + "}" { yybegin(REGEXP); return symbol(STRING, string.toString()); } + {HexDigit}{1,6} { int codePoint = Integer.parseInt(yytext(), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + {WSPNL}+ { } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { // Specialized form: newlines disallowed, and doesn't return a symbol + "}" { yybegin(STRING_CONTENT); } + {HexDigit}{1,6} { int codePoint = Integer.parseInt(yytext(), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file, ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + {NL} { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } + {WSP}+ { } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } +} + + { // Specialized form: only one codepoint allowed, no whitespace allowed + {HexDigit}{1,6} "}" { int codePoint = Integer.parseInt(yytext().substring(0, yylength() - 1), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + yybegin(CHARCLASS); + return symbol(CHAR, codePoint); + } else { + throw new ScannerException(file, ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + +. { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn); } +\R { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn); } + +<> { if ( yymoreStreams() ) { + file = (File) files.pop(); + yypopStream(); + } + else { + return symbol(EOF); + } + } diff --git a/samples/JFlex/java.jflex b/samples/JFlex/java.jflex new file mode 100644 index 00000000..b12f15d2 --- /dev/null +++ b/samples/JFlex/java.jflex @@ -0,0 +1,305 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright (C) 1998-2015 Gerwin Klein * + * All rights reserved. * + * * + * License: BSD * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Java 1.2 language lexer specification */ + +/* Use together with unicode.flex for Unicode preprocesssing */ +/* and java12.cup for a Java 1.2 parser */ + +/* Note that this lexer specification is not tuned for speed. + It is in fact quite slow on integer and floating point literals, + because the input is read twice and the methods used to parse + the numbers are not very fast. + For a production quality application (e.g. a Java compiler) + this could be optimized */ + + +import java_cup.runtime.*; + +%% + +%public +%class Scanner +%implements sym + +%unicode + +%line +%column + +%cup +%cupdebug + +%{ + StringBuilder string = new StringBuilder(); + + private Symbol symbol(int type) { + return new JavaSymbol(type, yyline+1, yycolumn+1); + } + + private Symbol symbol(int type, Object value) { + return new JavaSymbol(type, yyline+1, yycolumn+1, value); + } + + /** + * assumes correct representation of a long value for + * specified radix in scanner buffer from start + * to end + */ + private long parseLong(int start, int end, int radix) { + long result = 0; + long digit; + + for (int i = start; i < end; i++) { + digit = Character.digit(yycharat(i),radix); + result*= radix; + result+= digit; + } + + return result; + } +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n +InputCharacter = [^\r\n] + +WhiteSpace = {LineTerminator} | [ \t\f] + +/* comments */ +Comment = {TraditionalComment} | {EndOfLineComment} | + {DocumentationComment} + +TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" +EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? +DocumentationComment = "/*" "*"+ [^/*] ~"*/" + +/* identifiers */ +Identifier = [:jletter:][:jletterdigit:]* + +/* integer literals */ +DecIntegerLiteral = 0 | [1-9][0-9]* +DecLongLiteral = {DecIntegerLiteral} [lL] + +HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} +HexLongLiteral = 0 [xX] 0* {HexDigit} {1,16} [lL] +HexDigit = [0-9a-fA-F] + +OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} +OctLongLiteral = 0+ 1? {OctDigit} {1,21} [lL] +OctDigit = [0-7] + +/* floating point literals */ +FloatLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? [fF] +DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] +SingleCharacter = [^\r\n\'\\] + +%state STRING, CHARLITERAL + +%% + + { + + /* keywords */ + "abstract" { return symbol(ABSTRACT); } + "boolean" { return symbol(BOOLEAN); } + "break" { return symbol(BREAK); } + "byte" { return symbol(BYTE); } + "case" { return symbol(CASE); } + "catch" { return symbol(CATCH); } + "char" { return symbol(CHAR); } + "class" { return symbol(CLASS); } + "const" { return symbol(CONST); } + "continue" { return symbol(CONTINUE); } + "do" { return symbol(DO); } + "double" { return symbol(DOUBLE); } + "else" { return symbol(ELSE); } + "extends" { return symbol(EXTENDS); } + "final" { return symbol(FINAL); } + "finally" { return symbol(FINALLY); } + "float" { return symbol(FLOAT); } + "for" { return symbol(FOR); } + "default" { return symbol(DEFAULT); } + "implements" { return symbol(IMPLEMENTS); } + "import" { return symbol(IMPORT); } + "instanceof" { return symbol(INSTANCEOF); } + "int" { return symbol(INT); } + "interface" { return symbol(INTERFACE); } + "long" { return symbol(LONG); } + "native" { return symbol(NATIVE); } + "new" { return symbol(NEW); } + "goto" { return symbol(GOTO); } + "if" { return symbol(IF); } + "public" { return symbol(PUBLIC); } + "short" { return symbol(SHORT); } + "super" { return symbol(SUPER); } + "switch" { return symbol(SWITCH); } + "synchronized" { return symbol(SYNCHRONIZED); } + "package" { return symbol(PACKAGE); } + "private" { return symbol(PRIVATE); } + "protected" { return symbol(PROTECTED); } + "transient" { return symbol(TRANSIENT); } + "return" { return symbol(RETURN); } + "void" { return symbol(VOID); } + "static" { return symbol(STATIC); } + "while" { return symbol(WHILE); } + "this" { return symbol(THIS); } + "throw" { return symbol(THROW); } + "throws" { return symbol(THROWS); } + "try" { return symbol(TRY); } + "volatile" { return symbol(VOLATILE); } + "strictfp" { return symbol(STRICTFP); } + + /* boolean literals */ + "true" { return symbol(BOOLEAN_LITERAL, true); } + "false" { return symbol(BOOLEAN_LITERAL, false); } + + /* null literal */ + "null" { return symbol(NULL_LITERAL); } + + + /* separators */ + "(" { return symbol(LPAREN); } + ")" { return symbol(RPAREN); } + "{" { return symbol(LBRACE); } + "}" { return symbol(RBRACE); } + "[" { return symbol(LBRACK); } + "]" { return symbol(RBRACK); } + ";" { return symbol(SEMICOLON); } + "," { return symbol(COMMA); } + "." { return symbol(DOT); } + + /* operators */ + "=" { return symbol(EQ); } + ">" { return symbol(GT); } + "<" { return symbol(LT); } + "!" { return symbol(NOT); } + "~" { return symbol(COMP); } + "?" { return symbol(QUESTION); } + ":" { return symbol(COLON); } + "==" { return symbol(EQEQ); } + "<=" { return symbol(LTEQ); } + ">=" { return symbol(GTEQ); } + "!=" { return symbol(NOTEQ); } + "&&" { return symbol(ANDAND); } + "||" { return symbol(OROR); } + "++" { return symbol(PLUSPLUS); } + "--" { return symbol(MINUSMINUS); } + "+" { return symbol(PLUS); } + "-" { return symbol(MINUS); } + "*" { return symbol(MULT); } + "/" { return symbol(DIV); } + "&" { return symbol(AND); } + "|" { return symbol(OR); } + "^" { return symbol(XOR); } + "%" { return symbol(MOD); } + "<<" { return symbol(LSHIFT); } + ">>" { return symbol(RSHIFT); } + ">>>" { return symbol(URSHIFT); } + "+=" { return symbol(PLUSEQ); } + "-=" { return symbol(MINUSEQ); } + "*=" { return symbol(MULTEQ); } + "/=" { return symbol(DIVEQ); } + "&=" { return symbol(ANDEQ); } + "|=" { return symbol(OREQ); } + "^=" { return symbol(XOREQ); } + "%=" { return symbol(MODEQ); } + "<<=" { return symbol(LSHIFTEQ); } + ">>=" { return symbol(RSHIFTEQ); } + ">>>=" { return symbol(URSHIFTEQ); } + + /* string literal */ + \" { yybegin(STRING); string.setLength(0); } + + /* character literal */ + \' { yybegin(CHARLITERAL); } + + /* numeric literals */ + + /* This is matched together with the minus, because the number is too big to + be represented by a positive integer. */ + "-2147483648" { return symbol(INTEGER_LITERAL, new Integer(Integer.MIN_VALUE)); } + + {DecIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer(yytext())); } + {DecLongLiteral} { return symbol(INTEGER_LITERAL, new Long(yytext().substring(0,yylength()-1))); } + + {HexIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(2, yylength(), 16))); } + {HexLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(2, yylength()-1, 16))); } + + {OctIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(0, yylength(), 8))); } + {OctLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(0, yylength()-1, 8))); } + + {FloatLiteral} { return symbol(FLOATING_POINT_LITERAL, new Float(yytext().substring(0,yylength()-1))); } + {DoubleLiteral} { return symbol(FLOATING_POINT_LITERAL, new Double(yytext())); } + {DoubleLiteral}[dD] { return symbol(FLOATING_POINT_LITERAL, new Double(yytext().substring(0,yylength()-1))); } + + /* comments */ + {Comment} { /* ignore */ } + + /* whitespace */ + {WhiteSpace} { /* ignore */ } + + /* identifiers */ + {Identifier} { return symbol(IDENTIFIER, yytext()); } +} + + { + \" { yybegin(YYINITIAL); return symbol(STRING_LITERAL, string.toString()); } + + {StringCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* error cases */ + \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } + {LineTerminator} { throw new RuntimeException("Unterminated string at end of line"); } +} + + { + {SingleCharacter}\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, yytext().charAt(0)); } + + /* escape sequences */ + "\\b"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\b');} + "\\t"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\t');} + "\\n"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\n');} + "\\f"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\f');} + "\\r"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\r');} + "\\\""\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\"');} + "\\'"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\'');} + "\\\\"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\\'); } + \\[0-3]?{OctDigit}?{OctDigit}\' { yybegin(YYINITIAL); + int val = Integer.parseInt(yytext().substring(1,yylength()-1),8); + return symbol(CHARACTER_LITERAL, (char)val); } + + /* error cases */ + \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } + {LineTerminator} { throw new RuntimeException("Unterminated character literal at end of line"); } +} + +/* error fallback */ +[^] { throw new RuntimeException("Illegal character \""+yytext()+ + "\" at line "+yyline+", column "+yycolumn); } +<> { return symbol(EOF); } \ No newline at end of file diff --git a/samples/JSON/geo.geojson b/samples/JSON/geo.geojson new file mode 100644 index 00000000..1c77693e --- /dev/null +++ b/samples/JSON/geo.geojson @@ -0,0 +1,82 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "Australia Post - North Ryde BC", + "geo": [-33.787792, 151.13288], + "streetAddress": "11 Waterloo Road", + "addressLocality": "Macquarie Park", + "addressRegion": "New South Wales", + "addressCountry": "Australia", + "postalCode": "2113" + }, + "geometry": { + "type": "Point", + "coordinates": [151.13288, -33.787792, 0] + } + }, + + + { + "type": "Feature", + "properties": { + "name": "George Weston Foods Limited", + "geo": [-37.8263884, 144.9105381], + "streetAddress": "Level 3, 187 Todd Road", + "addressLocality": "Port Melbourne", + "addressRegion": "Victoria", + "addressCountry": "Australia", + "postalCode": "3207" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [144.9097088901841, -37.82622654171794, 0], + [144.9099724266943, -37.82679388891783, 0], + [144.9110127325916, -37.82651526396403, 0], + [144.9112227645738, -37.82655667152123, 0], + [144.9113739439796, -37.82618552508767, 0], + [144.9112740633105, -37.82615750100924, 0], + [144.9111355846674, -37.82584493693527, 0], + [144.9097088901841, -37.82622654171794, 0] + ] + ] + } + }, + + + { + "type": "Feature", + "properties": { + "name": "George Weston Foods Limited", + "geo": [-37.05202791502396, 144.2085614999388], + "streetAddress": "67 Richards Road", + "addressLocality": "Castlemaine", + "addressRegion": "Victoria", + "addressCountry": "Australia", + "postalCode": "3450" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [144.2052428913937, -37.04906391287216, 0], + [144.205540392692, -37.05049727485623, 0], + [144.2059800881858, -37.05066835966983, 0], + [144.206490656024, -37.05279538900776, 0], + [144.2064525845008, -37.05366195881602, 0], + [144.2084322301922, -37.0538920493147, 0], + [144.2084811895712, -37.05266519735124, 0], + [144.2079784002005, -37.05041270555773, 0], + [144.2074017905817, -37.04817406993293, 0], + [144.2061363939852, -37.04834972871226, 0], + [144.2052428913937, -37.04906391287216, 0] + ] + ] + } + } + ] +} diff --git a/samples/JSON/switzerland.topojson b/samples/JSON/switzerland.topojson new file mode 100644 index 00000000..18ded47d --- /dev/null +++ b/samples/JSON/switzerland.topojson @@ -0,0 +1 @@ +{"type":"Topology","transform":{"scale":[0.00045364536453645373,0.00019901990199019923],"translate":[5.956,45.818]},"objects":{"cantons":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[0,1,2,3,4,5,6,7,8,9]],"id":"ZH","properties":{"name":"Zürich"}},{"type":"MultiPolygon","arcs":[[[10,11,12,13,14,15,16,17,18,19,20,21,22],[23],[24]],[[25,26]],[[27]],[[28,29]]],"id":"BE","properties":{"name":"Bern/Berne"}},{"type":"Polygon","arcs":[[-12,30,31,32,33,34]],"id":"LU","properties":{"name":"Luzern"}},{"type":"Polygon","arcs":[[35,36,37,38,-16,39,40,41]],"id":"UR","properties":{"name":"Uri"}},{"type":"Polygon","arcs":[[42,-33,43,-1,44,45,46,-42]],"id":"SZ","properties":{"name":"Schwyz"}},{"type":"MultiPolygon","arcs":[[[-13,-35,47]],[[-15,48,-40]]],"id":"OW","properties":{"name":"Obwalden"}},{"type":"Polygon","arcs":[[-34,-43,-41,-49,-14,-48]],"id":"NW","properties":{"name":"Nidwalden"}},{"type":"Polygon","arcs":[[49,-36,-47,50,51]],"id":"GL","properties":{"name":"Glarus"}},{"type":"Polygon","arcs":[[-32,52,-2,-44]],"id":"ZG","properties":{"name":"Zug"}},{"type":"MultiPolygon","arcs":[[[53,54,55,-27,56,-19],[57]],[[58]],[[59,60]],[[61]],[[62]]],"id":"FR","properties":{"name":"Fribourg"}},{"type":"MultiPolygon","arcs":[[[-30,63,64,65,-23]],[[66]],[[67,68,69]],[[70,71]]],"id":"SO","properties":{"name":"Solothurn"}},{"type":"Polygon","arcs":[[72,73]],"id":"BS","properties":{"name":"Basel-Stadt"}},{"type":"MultiPolygon","arcs":[[[74,-70,75,-71,76,-73,77,78,-65]],[[79,80,-68]]],"id":"BL","properties":{"name":"Basel-Landschaft"}},{"type":"MultiPolygon","arcs":[[[-7,81,82,83]],[[84,85]],[[-5,86]]],"id":"SH","properties":{"name":"Schaffhausen"}},{"type":"Polygon","arcs":[[87,88,89,90,91,92]],"id":"AR","properties":{"name":"Appenzell Ausserrhoden"}},{"type":"MultiPolygon","arcs":[[[93,-92]],[[94,-90]],[[-88,95]]],"id":"AI","properties":{"name":"Appenzell Innerrhoden"}},{"type":"MultiPolygon","arcs":[[[-51,-45,-10,96,97,98,-52],[99],[-94,-91,-95,-89,-96,-93]],[[100]]],"id":"SG","properties":{"name":"St. Gallen"}},{"type":"Polygon","arcs":[[101,-37,-50,-99,102]],"id":"GR","properties":{"name":"Graubünden/Grigioni"}},{"type":"Polygon","arcs":[[-53,-31,-11,-66,-79,103,-3]],"id":"AG","properties":{"name":"Aargau"}},{"type":"MultiPolygon","arcs":[[[-9,104,-83,105,-85,106,-97],[-101]],[[107]]],"id":"TG","properties":{"name":"Thurgau"}},{"type":"Polygon","arcs":[[108,-38,-102,109],[110]],"id":"TI","properties":{"name":"Ticino"}},{"type":"MultiPolygon","arcs":[[[111,112,113,114,115,-61,116,-54,-18,117,118],[-62],[119],[120]],[[-26,-56,121,-20,-57]]],"id":"VD","properties":{"name":"Vaud"}},{"type":"Polygon","arcs":[[-118,-17,-39,-109,122]],"id":"VS","properties":{"name":"Valais/Wallis"}},{"type":"Polygon","arcs":[[-122,-55,-117,-60,-116,123,124,-21]],"id":"NE","properties":{"name":"Neuchâtel"}},{"type":"MultiPolygon","arcs":[[[-114,125]],[[126]],[[127]]],"id":"GE","properties":{"name":"Genève"}},{"type":"Polygon","arcs":[[-64,-29,-22,-125,128,-80,-75]],"id":"JU","properties":{"name":"Jura"}}]}},"arcs":[[[6286,7049],[-33,10],[-114,-55],[-60,-45],[-9,-15],[-13,10],[-2,-5],[0,-5],[0,-5],[0,-6],[-2,0],[-5,-5],[-4,0],[-5,0],[-2,0],[-2,0],[0,-5],[-20,-45],[-6,-10],[-3,-5],[-2,-25],[2,-10],[3,-15],[8,-10],[9,-10],[5,-15],[0,-15]],[[6031,6763],[-9,-5],[-9,0],[-13,-10],[-7,-10],[-20,5],[-8,5],[-3,25],[0,25],[-2,0],[-2,0],[-2,0],[-5,-5],[-2,0],[-2,0],[-2,5],[-3,0],[-4,-5],[-9,0],[-2,0],[-2,-5],[-2,0],[-5,0],[-2,5],[0,5],[-2,5],[-7,0],[-2,0],[-4,0],[-3,0],[-4,0],[-2,0],[-2,0],[-5,0],[-2,5],[-2,0],[0,10],[2,5],[0,5],[2,0],[2,5],[3,5],[0,5],[-5,5],[0,5],[-2,10],[-4,10],[-5,5],[0,5],[0,5],[0,5],[0,5],[-4,5],[-2,0],[0,5],[0,5],[0,5],[-3,5],[0,5],[-2,11],[-2,5],[-2,5],[-3,5],[-2,0],[-2,5],[-2,0],[0,5],[-5,5],[-4,0],[-2,0],[-2,-5],[-3,-5],[-2,0],[-2,-5],[-2,0],[-2,0],[-3,5],[-2,5],[0,5],[2,5],[-2,5],[2,5],[0,5],[-4,5],[0,5],[-2,5],[-2,0],[-3,0],[-2,0],[-2,0],[-4,5],[-3,0],[-2,-5],[-2,-5],[-2,0],[-2,0],[-3,0],[-2,10],[0,5],[0,5],[2,10],[0,5],[-2,0],[-2,0],[-2,0],[-5,0],[0,5],[-2,0],[0,-5],[-6,-5],[-3,5],[-26,10],[-7,5],[-9,10],[-2,-5],[-15,-5],[-7,5],[-9,5],[-6,-10],[-9,5],[-2,-20],[-2,0],[-7,5],[-7,0],[-2,0],[-2,5],[-2,0],[-3,-5],[-15,0],[-2,-20],[-5,5],[-4,-10],[-7,5],[3,-5],[-9,-10],[-9,0],[-2,0],[-16,-5],[-13,-15],[-9,5],[-8,5],[-7,-5],[2,10],[-7,5],[0,5],[-6,0],[-2,5],[-14,0],[-8,25],[-9,-5],[-2,10],[-5,0],[-4,0],[0,5],[-2,5],[-3,5],[-4,0],[-7,10],[-8,-5],[-18,5],[-16,-10],[0,5],[0,5],[-2,5],[-2,0],[-2,0],[0,5],[0,5],[-2,10],[0,15],[0,5],[-3,10],[0,5],[0,5],[-2,0],[-2,5],[0,6],[4,0],[0,5],[-2,5],[-2,5],[-2,5],[-2,15],[-3,5],[-2,0]],[[5411,7185],[-2,5],[-4,10],[-11,15],[0,5],[0,5],[0,5],[0,5],[2,0],[0,5],[2,0],[0,5],[-2,5],[0,5],[-2,5],[-3,0],[-2,5],[0,5],[-2,0],[2,5],[0,5],[0,5],[2,5],[3,10],[0,5],[-3,5],[0,5],[-11,10],[-2,5],[-2,5],[0,5],[-2,0],[0,5],[-2,21],[-3,10],[-4,10],[-2,10],[6,5],[11,-15],[16,15],[0,5],[24,5],[9,10],[6,15],[16,15],[-2,0],[6,25],[-2,0],[-2,5],[7,5],[0,20],[8,10],[0,5],[11,5],[0,10],[11,10],[7,16],[2,15],[-2,0],[9,15],[-2,0],[6,25],[-2,5],[-2,-10],[-5,5],[-2,-20],[-13,-5],[-4,-10],[-11,0],[-5,-10],[-4,5],[-9,5],[-29,-15],[-2,10],[-4,5],[0,10],[8,25],[-2,10],[0,5],[-2,0],[-2,5],[-5,5],[-4,5],[-7,10],[0,10],[-6,15],[6,25],[5,15],[-5,5],[3,20],[-7,21],[7,15],[-3,15],[-15,5],[2,15],[-2,5],[-7,5],[0,5],[-2,0],[2,5],[0,5],[0,5],[-2,0],[-4,5],[0,5],[2,10],[0,15],[0,15],[0,5],[2,5],[2,0],[0,10],[-2,0],[-2,-5],[0,5],[-7,10],[-4,-5],[-2,0],[-11,0],[-3,-5],[-6,30],[-5,0],[-8,-5],[-18,0],[-7,10],[-2,6],[9,0],[2,-6],[5,11],[15,10],[2,-5],[2,-5],[3,-5],[6,10],[7,10],[-7,10],[-2,15],[9,15],[-7,10],[5,10],[6,-10],[11,20],[0,10],[-2,10],[-2,5],[-4,10],[0,5],[-7,0],[-2,0],[-5,5],[-6,0],[-5,0],[-4,5],[0,5],[0,5],[4,10],[5,-5],[2,0],[6,0],[3,10],[2,10],[-2,15],[-5,5],[-2,31],[2,0],[0,5],[5,5],[6,0],[-9,35],[-6,0],[-2,15],[-14,0],[-8,30],[-7,5],[0,5],[4,5],[0,5],[-4,5],[4,0],[9,0],[7,5],[-2,20],[-3,30],[-19,0],[-5,26],[2,25],[-4,25],[-7,5],[9,10],[2,10],[-8,0],[-3,5],[3,10],[0,10],[6,10],[-2,10],[4,5],[5,0],[2,0],[2,5],[2,-5],[0,5],[-2,0],[5,0],[4,-5],[2,5],[5,-5],[2,5],[4,0],[7,15],[-2,5],[2,0],[2,46],[7,15],[6,5],[7,-10],[-2,-5],[6,-5],[3,5],[6,10],[-2,15],[2,5],[16,5],[2,10],[-7,25],[7,-10],[4,10],[-2,10],[4,0],[3,10],[6,10],[16,0],[-7,10],[4,10],[-4,10],[-2,10],[9,20],[0,15],[-3,0],[3,15],[17,21]],[[5444,8793],[2,-5],[3,0],[2,0],[2,0],[5,0],[2,0],[6,0],[3,0],[2,0],[2,0],[2,5],[2,0],[5,5],[4,0],[2,5],[3,0],[8,5],[5,5],[2,0],[2,0],[2,0],[3,0],[4,0],[4,0],[3,0],[2,0],[2,0],[2,0],[2,5],[3,0],[2,0],[2,5],[2,0],[2,5],[3,0],[0,5],[4,0],[0,5],[2,0],[3,0],[0,5],[2,0],[2,0],[2,0],[2,0],[3,0],[2,-5],[2,0],[2,0],[2,0],[3,0],[2,5],[2,0],[2,5],[2,5],[5,0],[0,5],[2,0],[4,0],[-2,10],[-11,25],[-4,-5],[-9,0],[-2,0],[0,-5],[-2,-5],[-3,0],[-2,0],[-2,0],[-2,0],[-5,0],[-2,0],[-2,-5],[-2,5],[-3,0],[-2,0],[0,-5],[-2,0],[-2,0],[-2,0],[-5,20],[-4,0],[-7,0],[2,15],[0,10],[-4,15],[-4,5],[-3,15],[3,10],[6,0],[7,0],[6,5],[5,5],[0,6],[4,0],[2,10],[-2,5],[9,0],[2,0],[7,15],[0,5],[2,5],[-2,5],[2,5],[2,0],[3,-5],[4,0],[2,0],[2,5],[3,0],[0,-5],[2,0],[2,5],[2,0],[2,0],[5,0],[2,0],[0,-5],[2,0],[0,5],[2,0],[3,0],[2,0],[2,5],[2,0],[7,5],[2,0],[2,0],[5,0],[4,5],[-2,0],[2,0],[0,20],[-2,10],[9,-5],[4,0],[4,0],[0,10],[-4,0],[0,5],[0,5],[2,-5],[2,5],[0,5],[3,0],[-3,5],[0,10],[3,5],[0,10],[2,0],[9,0],[11,-10],[9,0],[4,0],[4,-5],[5,0],[4,0],[2,0],[0,-15],[0,-10],[9,5],[2,-10],[7,5],[4,-5],[5,0],[4,0],[9,0],[2,-5],[2,-5],[0,-5],[5,-5],[0,-5],[2,-5],[0,-5],[2,-5],[11,0],[3,0],[2,-5],[0,-5],[0,-5],[2,0],[0,-5],[0,-5],[7,0],[-3,-5],[-6,0],[-9,-5],[0,-15],[0,-10],[-5,-11],[-6,-10],[4,-5],[0,-5]],[[5746,8948],[-13,-10],[-2,-5],[0,-10],[-13,-10],[-5,5],[-6,-5],[-16,-20],[-6,-5],[4,-20],[-7,0],[0,-10],[5,0],[0,-10],[9,-5],[-5,0],[-6,-15],[11,-5],[11,5],[2,-5],[0,-15],[-9,-5],[2,-5],[5,-5],[6,-15],[2,-6],[3,-10],[0,-10],[2,-5],[0,-5],[0,-5],[4,-10],[5,-10],[2,-5],[4,0],[2,5],[3,0],[2,5],[2,10],[4,10],[0,5],[3,5],[2,5],[2,5],[2,5],[0,5],[3,6],[0,5],[2,5],[0,5],[0,15],[0,5],[4,10],[0,5],[2,0],[3,5],[4,0],[2,0],[5,0],[2,0],[0,5],[2,5],[-2,0],[0,5],[-2,10],[-5,15],[0,5],[0,10],[2,5],[0,5],[3,5],[4,5],[2,5],[2,5],[5,5],[4,0],[5,5],[4,0],[4,5],[3,0],[2,5],[0,5],[-2,10],[0,10],[2,0],[0,10],[2,11]],[[5819,8984],[0,5],[2,0],[2,0],[3,5],[2,0],[0,5],[2,0],[2,5],[2,5],[3,5],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[-2,0],[0,5],[-3,5],[-2,5],[0,5],[-2,0],[0,5],[-2,5],[0,5],[-2,5],[0,5],[-3,5],[-2,10],[0,5],[0,5],[0,5],[0,5],[0,15],[-2,5],[0,5],[0,5],[-2,0],[0,5],[0,5],[0,5],[0,5],[2,0],[0,5],[2,0],[7,5],[2,0],[0,6],[2,0],[0,5],[2,0],[0,5],[0,5],[0,5],[3,5],[2,5],[2,0],[2,5],[0,-5],[2,0],[3,0],[2,-5],[2,0],[2,-5],[2,-5],[0,-5],[3,0],[0,-5],[0,-5],[0,-6],[0,-5],[-3,-5],[-2,0],[0,-5],[-2,0],[-2,0],[-2,0],[-3,0],[-2,0],[-2,0],[-2,0],[-2,0],[0,-5],[-3,0],[0,-5],[0,-5],[3,-5],[2,0],[0,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,5],[2,0],[2,0],[2,0],[3,0],[2,5],[2,0],[2,0],[2,5],[3,5],[2,0],[0,5],[2,5],[0,5],[2,0],[0,5],[2,6],[0,5],[3,5],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[-2,0],[-3,5],[-4,10],[-2,0],[-2,5],[-3,5],[-2,5],[-4,0],[-2,5],[-3,0],[-2,5],[-4,5],[-3,-5],[-4,5],[-2,5],[-2,0],[0,5],[-3,0],[0,5],[-2,5],[0,5],[-2,10]],[[5841,9300],[2,0],[2,15],[5,0],[0,5],[2,10],[0,5],[4,5],[3,0],[0,5],[2,0],[4,-5],[0,-5],[3,0],[0,-5],[2,0],[4,0],[7,5],[2,0],[2,5],[2,5],[0,5],[0,5],[0,10],[-2,15],[-2,11],[-2,5],[0,15],[2,0],[0,5],[2,0],[5,0],[4,5],[2,0],[2,0],[5,0],[6,0],[3,0],[4,5],[7,5],[2,0],[2,-5],[2,0],[2,-5],[5,-5],[4,0],[2,-5],[9,-15],[5,-5],[6,-6],[5,0]],[[5967,9385],[2,0],[2,-5],[2,5],[3,-5],[2,0],[2,0],[2,0]],[[5982,9380],[-4,-35],[0,-10],[4,-5],[16,-15],[2,-15],[2,-10],[-2,-5],[0,-10],[4,-20],[2,-15],[9,-10],[5,-15],[4,-15],[11,-5],[13,-5],[7,-11],[13,-15],[5,10],[6,0],[2,-5],[3,0],[2,-5],[6,-5],[5,0],[9,10],[13,-5],[4,0],[9,0],[11,5],[2,-15],[7,-5],[4,10],[20,10],[5,16],[4,0],[7,15],[8,5],[9,0],[5,-5],[2,0],[4,10],[9,5],[9,15],[0,15],[2,15],[4,20],[9,0],[14,0],[8,0],[5,0],[-2,-5],[0,-15],[2,-5],[-2,-25],[2,-15],[11,0],[11,-10],[15,-5],[9,-10],[0,-16],[2,-10],[2,-10],[-6,-15],[-2,-15],[2,0],[-7,-10],[-4,-15],[-5,5],[0,-10],[-4,5],[-2,-5],[-5,-5],[3,-10],[-5,-10],[7,-10],[-7,-10],[5,-10],[-11,-10],[0,-5],[-9,0],[-2,-30],[-5,-26],[2,-5],[0,-5],[-4,5],[-7,0],[-6,0],[-14,5],[0,21],[3,5],[-5,10],[-20,15],[-6,0],[-2,10],[-11,0],[-18,15],[-9,0],[-2,-5],[-13,15],[-5,5],[-2,10],[-4,-5],[0,-45],[-5,0],[-4,-5],[-5,0],[-2,-20],[7,-5],[4,-21],[5,-15],[6,0],[-6,-15],[2,-5],[2,-20],[2,0],[5,5],[6,0],[3,0],[4,0],[9,0],[2,0],[4,0],[9,-5],[2,0],[3,0],[6,-5],[7,-5],[4,0],[0,-5],[2,0],[3,0],[2,0],[4,-5],[5,0],[19,-10],[9,-5],[18,-10],[0,-5],[-9,5],[-2,-10],[11,-5],[-2,-25],[6,-5],[-2,-10],[7,-5],[15,-5],[2,10],[5,-5],[0,5],[4,0],[0,5],[18,-10],[0,10],[2,5],[18,-15],[-3,-10],[3,0],[0,-20],[13,5],[-2,-16],[15,5],[0,-15],[-13,0],[-7,-5],[-6,-15],[-22,5],[2,-10],[-5,0],[5,-15],[2,-5],[-2,0],[2,-10],[2,-5],[0,-5],[5,-25],[4,0],[11,-30],[0,-20],[18,-10],[11,5],[4,-5],[13,0],[14,-5],[6,0],[7,-5],[6,-5],[7,-5],[0,5],[7,5],[6,-5],[5,0],[4,-5],[13,-5],[7,-10],[-4,-16],[-5,-10],[5,-5],[-3,-25],[5,-10],[-2,-30],[-5,-10],[-4,-10],[0,-30],[0,-5],[0,-5],[0,-5],[0,-20],[9,0],[0,-15],[-14,-11],[-13,-5],[0,-25],[-9,-10],[7,-5],[0,-20],[15,-5],[0,-5],[3,-10],[2,-5],[-2,0],[0,-5],[2,0],[6,-5],[0,-10],[0,-5],[0,-5],[5,-5],[4,-20],[9,-5],[11,-25],[-13,-20],[9,-26],[8,-10],[16,-5],[9,-5],[8,0],[3,0],[13,5],[0,-10],[-5,-10],[-8,-5],[-11,10],[-7,0],[-2,-5],[-2,5],[-9,-5],[-2,10],[-3,0],[-6,-15],[0,-5],[2,0],[9,-10],[0,-5],[-2,-5],[0,-5],[-3,-10],[9,-20],[-4,-10],[-2,-10],[2,-10],[-18,-40],[-2,-15],[2,0],[2,-6],[5,0],[4,6],[2,0],[3,-6],[2,0],[2,0],[4,-5],[5,0],[4,0],[5,-5],[4,-5],[2,-5],[2,0],[3,-5],[2,-5],[2,-5],[4,-10],[3,-5],[4,0],[5,-5],[4,-5],[9,-10],[2,-5],[2,-5],[0,-5],[-2,-5],[-4,-10],[-3,-5],[3,-5],[2,-5],[4,-10]],[[6586,7828],[2,-5],[5,0],[2,0],[0,-5],[2,-5],[2,0],[3,-5],[2,-5],[0,-15],[2,-5],[4,-10],[0,-10],[5,-11],[2,-10],[2,-5],[2,-5],[3,-5],[-3,-5],[0,-5],[3,0],[2,0],[2,0],[2,0],[5,0],[2,0],[6,-10],[5,0],[4,-20],[-2,-40],[13,-10],[-4,-30],[0,-25],[18,-41],[-23,-60],[-11,-5],[-6,0],[-7,0],[-15,-5],[-9,-30],[-2,-5],[0,-5],[-7,-15],[0,-10],[-4,0],[-2,-5],[-3,0],[-2,0],[-2,5],[-2,-5],[-2,0],[0,-5],[-5,0],[-2,-5],[-2,5],[-2,-5],[-3,0],[-2,0],[0,-5],[16,-20],[2,-10],[-2,-11],[6,0],[5,11],[4,0],[0,-16],[0,-5],[0,-10],[-2,-5],[-5,-5],[-2,-5],[-2,0],[-2,0],[-2,-5],[6,-15],[-2,-10],[-7,0],[3,-5],[-7,-10],[-4,-15],[-5,-5],[-2,-5],[-9,5],[-2,-5],[-35,-20],[-9,-5],[0,15],[-7,-10],[-13,0],[-4,-5],[-27,-5],[-26,-5],[2,-20],[-9,-5],[0,-10],[-7,-5],[-2,5],[-11,-10],[-2,5],[-2,0],[-2,0],[-3,5],[-2,0],[0,-5],[-2,5],[-2,0],[0,5],[-2,5],[0,5],[0,5],[-3,0],[0,10],[-15,-10],[0,-10],[-16,0],[-4,10],[-7,5],[-6,0],[-2,0],[-3,0],[-4,5],[-37,-15],[-14,-5],[-2,-10],[-6,-10],[0,-5],[-5,0],[-2,-16],[26,-90]],[[4119,7275],[0,-5],[7,-5],[-2,-5],[2,0],[-2,-5],[0,-5],[4,0],[2,-5],[-4,-5],[2,-15],[-2,-5],[2,0],[-2,-5],[-4,-5],[-3,-5],[5,-5],[2,0],[-2,-5],[-2,-5],[0,-5],[0,-5],[0,-5],[2,-5],[2,0],[0,-5],[0,-5],[4,0],[0,-5],[3,-5],[2,-5],[2,0],[2,-11],[5,-5],[6,-15]],[[4150,7114],[-4,-5],[0,-5],[0,-10],[-2,0],[2,-5],[0,-10],[0,-5],[0,-10],[7,-5],[2,-5],[4,-10],[2,-10],[3,0],[2,-5],[2,0],[0,-5],[0,-5],[0,-5],[2,-5],[2,-10],[0,-5],[3,-5],[2,-5],[2,-5],[2,-5],[2,-5],[-2,-5],[2,-5],[3,-5],[2,-5],[2,-5],[7,-5],[-3,-6],[3,-15],[0,-5],[-3,-5],[3,-5],[4,0],[2,0],[0,-10],[5,0],[0,-5],[0,-5],[4,0],[4,-10],[14,-10],[2,-5],[0,-5],[4,-10],[2,-5],[3,-5],[-3,-5],[3,-5],[0,-5],[4,-5],[2,-5],[-2,-5],[-4,-10],[-3,0],[-2,-10],[-2,-5],[-2,-5],[-2,-20],[2,-10],[0,-16],[2,-10],[0,-10],[2,-10],[5,-10],[2,-10],[4,0],[9,-15],[7,-15],[0,-10],[0,-20],[-5,-5],[5,-10],[-9,0],[0,-15],[0,-5],[-7,0],[-22,-15],[2,-10],[-6,-5],[-5,-5],[-2,-5],[0,-10],[0,-6],[7,0],[-5,-25],[14,-10],[-5,-25],[0,-10],[5,5],[2,-10],[-5,-20],[11,-10],[3,-10],[-5,-5],[5,-10],[2,-5],[2,-5],[-2,-15],[-5,-20],[5,0],[-5,-10],[-4,0],[4,-5],[-2,-26],[-4,-5],[2,-10],[-9,-25],[-4,-10],[0,-5],[2,0],[2,0],[2,-5],[-2,-5],[-2,-5],[-7,-10],[-2,-10],[-4,-15],[4,-5],[-2,-10],[2,-5],[0,-5],[2,-5],[-2,0],[7,-5],[2,-5],[7,-20],[4,0],[7,-5],[4,5],[5,-20],[-3,-11],[5,-10],[15,-15],[5,-10],[-3,-15],[5,-15],[11,-20],[0,-5],[-5,-15],[-2,-5],[5,-20],[6,-15],[7,5],[6,0],[5,5],[9,5],[4,0],[9,10],[6,0],[5,-5],[7,-20],[4,-5],[7,-5],[15,5],[2,0],[9,0],[7,5],[8,0],[9,-15],[-4,-5],[-5,-25],[-8,-16],[4,-35],[4,-30],[-17,-20],[2,-35],[2,-5],[-13,-20],[-9,-5],[-9,-10],[0,-56],[-6,-15],[-7,0],[-9,-5],[-2,-25],[-13,-35],[-7,-10],[-9,0],[-22,10],[-6,-5],[-5,-5],[-4,-5],[-2,0],[-5,-5],[-4,-5],[-11,-5],[0,-5],[-7,0],[-4,-5],[-2,-5],[-3,0],[-2,-5],[0,-5],[-2,0],[-2,-10],[-2,-10],[0,-5],[0,-5],[-3,0],[-2,-5],[0,-5],[-2,0],[0,-5],[0,-6],[2,0],[11,-5],[2,-5],[0,-5],[3,0],[2,0],[4,0],[2,0],[3,0],[4,-15],[2,0],[0,-5],[0,-15],[-6,-15],[0,-5],[4,0],[-9,-5],[-6,-15],[-5,-20],[0,-10],[-6,-5],[-5,-10],[-20,-10],[-6,-20],[4,-30],[0,-11],[-2,-10],[15,-10],[3,-15],[11,-10],[-7,-25],[2,-20],[-2,-20],[7,-20],[0,-15],[15,-35],[42,-31],[57,-55],[55,-75],[9,-25],[2,-10],[5,-10],[0,-5],[-2,-5],[2,-11],[4,-5],[2,-5],[3,0],[4,-5],[2,0],[2,-5],[3,-5],[2,0],[2,0],[2,-5],[2,0],[3,-5],[2,0],[0,-5],[0,-5],[2,-5],[2,-5],[7,-15],[13,-5],[9,-10],[20,20],[11,15],[15,10],[36,25],[22,5],[17,-10],[18,-5],[4,5]],[[4613,4873],[5,0],[8,0],[5,0],[6,-10],[20,15],[14,-10],[8,0],[7,0],[18,5],[2,-20],[13,-25],[7,-5],[4,-20],[7,-5],[20,0],[11,-10],[6,-5],[53,-75],[29,20],[20,35],[8,-10],[40,30],[13,-10],[27,5],[9,-15],[15,-15],[7,-10],[26,5],[11,40],[44,-30],[11,-20],[11,-30],[16,5],[15,-10],[18,25],[11,5],[4,15],[9,0],[31,40],[13,20],[24,35],[60,10],[9,5],[0,10],[11,10]],[[5319,4873],[4,0],[13,-10],[7,-15],[15,-25],[11,0],[7,-30]],[[5376,4793],[2,-35],[11,10],[16,15],[13,20],[9,0],[6,-5],[5,-10],[8,0],[0,5],[12,0],[11,0],[13,-10],[9,0],[0,-5],[-3,-10],[5,-10],[2,0]],[[5495,4758],[-7,-40],[-4,-15],[-7,5],[-4,-10],[7,-16],[2,-15],[-5,-20],[0,-30],[20,-35],[-6,-15],[2,-45],[-2,-15],[4,-15],[11,-6],[0,-15],[-4,-20],[6,-25],[0,-5],[-4,-20],[-2,-25],[-14,-10],[-11,-5],[-17,5],[-11,-5],[-18,5],[-4,0],[-7,0],[0,10],[-7,10],[-8,-5],[-18,15],[-2,-15],[2,-10],[-7,-20],[5,-20],[-2,-25],[0,-5],[6,-5],[2,-21],[14,-10],[4,-70]],[[5409,4195],[-24,5],[-9,-40],[-9,-10],[-24,-50],[-13,-5],[-3,0],[-8,-21],[-3,-20],[0,-25],[7,-5],[0,-25],[-7,-25],[-6,-25],[-7,-15],[-2,-15],[7,-30],[-7,-31],[9,-15],[-9,-25],[-20,-30],[-4,-15],[-16,-25],[-13,-15],[-44,-10],[-9,-25],[0,-10],[-22,-31],[-20,-5],[-15,-10],[-9,-25],[-9,-5],[-11,-5],[-11,-5],[-11,-10],[-13,-20],[-13,0],[-25,-10],[-8,0],[-14,0],[-11,0],[-15,-5],[-18,-5],[-13,-5],[-11,0],[-18,-5],[-15,-10],[-9,0],[-4,10],[-9,5],[-4,15],[4,15],[-2,5],[-11,0],[-13,5],[-9,-5],[-9,0],[-11,5],[-35,20],[-18,5],[-9,20],[-9,10],[-8,20],[-20,5],[-9,0],[-11,5],[-5,11],[-19,5],[-14,10],[-6,10],[-11,-10],[-18,-5],[-4,-10],[-16,25],[-24,5],[-18,15],[-2,10],[-9,0],[-11,0],[-20,5],[-33,-25],[-8,0],[-9,-10],[0,-10],[-16,-31],[-11,0],[-2,0],[-4,-5],[-5,0],[-13,-10],[-4,-20],[-11,-10],[0,-10],[4,-10],[4,-15],[-2,-5],[7,-10],[0,-10],[9,-15],[-7,-15],[2,-20],[-6,-20],[-7,0],[-24,-26],[-7,6],[-20,-6],[-15,-25],[-4,-25],[-11,-5],[-9,-10],[2,-10],[-5,-5],[-17,-5],[-9,-20],[-11,0],[-2,-5],[-9,-5],[-7,-10],[-6,-5],[-9,5],[-9,-10],[-22,-10],[-18,-5],[-13,0],[-28,0],[-7,5],[-9,-5],[-35,-40],[-7,-16],[-26,-20],[-7,-5],[-6,-5],[-18,-15],[-11,-20],[-11,-10],[-7,-15],[-11,-10],[-4,-20],[-13,-5],[-9,-10],[-5,0],[-11,-20],[-11,-5],[-2,-10],[-24,-25],[-5,-11],[-13,-10],[-9,-10],[-17,-5],[-9,-5],[-9,-25],[-9,-5],[-6,0],[-9,10],[-4,10],[-11,10],[-12,25],[-6,0],[-27,21],[-33,20],[-50,35],[-31,25],[-5,-10],[-2,-15],[-4,-10],[-9,0],[-15,-5],[-3,-10],[0,-15],[3,-15],[-9,-26],[-7,-5],[-7,0],[-4,-10],[4,-20],[0,-10],[-6,-5],[-7,-15],[-17,15],[-7,15],[-13,0],[-11,-10],[-13,-5],[-7,-5],[-2,-5],[-5,10],[-11,0],[-13,-10],[-20,0],[-13,-10],[-2,-15],[-9,-35],[26,-25],[14,-5],[17,-25],[-31,-26],[-6,-35],[-27,-15],[-42,10],[-11,-30],[-6,0],[-11,10],[-9,-10],[-7,5],[-4,5],[2,15],[-4,35],[-11,15],[-11,-5],[-2,-15],[-7,-15],[-13,0],[-5,-10],[-6,15],[0,5],[-5,10],[-31,5],[-11,15],[-8,-5],[-14,-20],[-24,-5],[-4,-5],[-25,-15],[-4,-10],[-4,15],[-16,-20],[-11,-20],[-4,0],[-9,-20],[-2,-5],[-7,5],[-9,-20],[-13,-15],[-11,-5],[-9,-20],[-11,-15],[-13,5],[-24,-20],[-29,-16],[-20,0],[-9,21],[-6,20],[0,10],[4,10],[-4,10],[2,5],[2,5],[5,15],[2,35],[-7,25],[-24,-40],[-9,-5],[-9,5],[-15,-10],[-49,-35],[0,-15],[0,-35],[-4,-21],[4,-30],[-4,-5],[-9,-20],[-6,-10],[-7,-5],[-7,-5],[-6,-5],[-22,-5],[-29,10]],[[2788,2567],[4,101],[-8,40],[2,0],[2,5],[4,5],[3,0],[2,0],[2,0],[2,0],[0,5],[2,5],[5,5],[-5,0],[-4,15],[-15,-15],[-7,0],[-13,40],[0,5],[-2,5],[-5,10],[0,5],[0,10],[0,5],[2,0],[0,5],[-4,0],[-9,0],[-17,0],[2,25],[6,26],[3,10],[4,10],[4,20],[5,15],[6,15],[-2,25],[7,40],[-7,25],[-9,10],[-6,10],[-2,21],[-14,25],[5,35],[15,0],[7,-10],[17,5],[22,10],[5,10],[2,10],[0,20],[0,10],[13,10],[-11,15],[7,15],[-2,5],[4,25],[-9,31],[0,10],[-4,15],[-2,50],[6,-5],[2,0],[5,5],[13,5],[0,25],[-7,10],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[2,0],[2,5],[0,5],[2,5],[3,5],[2,0],[0,5],[0,5],[0,5],[0,5],[0,5],[2,0],[2,5],[2,5],[-2,0],[0,5],[0,6],[2,0],[0,5],[3,5],[0,5],[-3,5],[0,5],[0,5],[3,5],[2,10],[0,20],[-2,0],[0,5],[0,5],[0,10],[0,5],[-3,5],[0,5],[0,5],[0,5],[-2,0],[0,5],[-2,0],[0,5],[0,5],[2,10],[0,5],[0,5],[-2,5],[-2,5],[-2,5],[-3,5],[-6,15],[-5,5],[0,41]],[[2823,3698],[7,0],[13,10],[11,15],[9,5],[11,15],[18,55],[11,20],[8,15],[3,5],[6,5],[2,10],[9,-15],[9,-5],[5,0],[4,-5],[2,0],[2,0],[0,-5],[3,0],[4,0],[20,10],[11,40],[17,16],[-13,40],[7,80],[0,15],[-13,15],[2,76],[20,0],[8,10],[9,15],[-4,20],[-16,45],[3,0],[50,0],[11,-20],[-2,-10],[7,-10],[6,0],[3,-10],[-3,-15],[3,-15],[2,0],[4,25],[9,15],[7,10],[22,35],[-18,-5],[4,15],[3,20],[0,10],[2,15],[0,10],[9,31],[0,5],[-7,20],[11,20],[-4,20],[9,10],[-7,15],[-18,0],[-9,10],[-4,20],[-7,-5],[-33,5],[0,5],[0,5],[3,5],[2,5],[2,0],[0,10],[2,0],[0,5],[0,5],[2,5],[0,5],[-2,10],[0,6],[-2,5],[-4,0],[-3,0],[-2,0],[-4,5],[-7,0],[-2,0],[-4,0],[-7,5],[-2,0],[-2,0],[-3,5],[-4,0],[-2,5],[-3,0],[-2,0],[-4,0],[-2,0],[-5,0],[-2,0],[-2,0],[-9,0],[-7,5],[-2,0],[-2,0],[0,-5],[-2,0],[-5,5],[-2,0],[0,5],[-2,0],[0,5],[-4,5],[-3,5],[-2,0],[-4,5],[0,5],[0,5],[-2,10],[-3,10],[0,5],[0,5],[0,10],[0,20],[16,50],[2,15],[-2,5],[0,11],[0,5],[0,25],[0,5],[-5,5],[0,15],[-2,0],[-2,0],[-2,0],[2,5],[-2,5],[-7,0],[0,5],[-2,0],[0,5],[-2,5],[0,5],[0,5],[-2,5],[-3,0],[-2,0],[0,5],[5,5],[4,5],[2,5],[2,0],[0,5],[3,5],[2,0],[2,5],[4,5],[-2,0],[0,5],[2,5],[3,0],[2,5],[2,0],[0,5],[0,5],[-2,0],[-2,0],[0,5],[0,5],[0,5],[2,5],[0,5],[-2,5],[0,5],[0,6],[0,5],[2,5],[4,5],[2,0],[0,5],[0,5],[3,0],[0,5],[0,5],[2,5],[0,5],[2,5],[0,5],[0,5],[0,5],[2,5],[2,0],[0,10],[0,5],[3,0],[2,0],[2,5],[4,5],[0,5],[3,0],[2,5],[2,0],[2,5],[2,0],[0,5],[-4,5],[0,5],[4,5],[0,5],[0,10],[0,5],[-2,5],[0,5],[0,5],[2,0],[0,5],[5,5],[11,5],[2,0],[0,5],[5,10],[0,11],[-3,0],[0,5],[-15,30],[-33,30],[-5,15],[-8,10],[22,20],[0,15],[4,0],[-2,10],[2,0],[4,10],[5,-5],[-2,-5],[6,0],[9,0],[16,-15],[-7,-10],[-5,5],[-6,-10],[6,-15],[12,-5],[6,5],[2,-10],[5,5],[0,-5],[2,0],[0,5],[2,0],[2,0],[3,0],[2,5],[2,0],[2,0],[2,5],[3,0],[2,5],[2,0],[4,0],[3,0],[2,0],[0,5],[0,5],[2,5],[2,0],[0,5],[0,5],[2,5],[3,0],[4,5],[2,5],[0,5],[0,5],[-2,10],[0,5],[0,10],[0,5],[-2,0],[-2,5],[-3,0],[-2,5],[-2,5],[0,6],[-2,10],[0,5],[2,5],[0,10],[0,5],[0,5],[0,15],[2,5],[-2,5],[-2,5],[-7,5],[-17,10],[-7,0],[-7,5],[-2,0],[-2,0],[-2,5],[-5,0],[-4,5],[-2,0],[-3,0],[-2,0],[-4,0],[-2,0],[-3,0],[-4,-5],[-9,0],[-2,0],[-11,0],[-4,0],[-3,0],[-11,0],[-4,0],[-2,5],[-5,0],[-2,0],[-11,0],[-2,0],[-2,-5],[-2,0],[-3,0],[-4,-10],[-2,-5],[-5,0],[-2,0],[-4,0],[-3,5],[-4,0],[-2,5],[-5,5],[-2,0],[-2,0],[-2,0],[-2,0],[-3,5],[-2,0],[-6,10],[-3,5],[-2,0],[-2,5],[-4,0],[-3,0],[-2,0],[-4,5],[-2,0],[-3,0],[-2,0],[-4,0],[-2,0],[-5,5],[-2,0],[-2,0],[-2,-10],[-14,0],[-4,5],[-5,0],[-6,25],[-11,-5],[-5,0],[-4,-10],[-9,-15],[-11,20],[-9,5],[-17,-5],[-11,-15],[-16,5],[9,10],[2,5],[14,5],[19,25],[-4,20],[0,11],[2,5],[0,5],[0,10],[-2,5],[0,5],[-2,5],[2,0],[0,15],[11,0],[0,10],[4,5],[-2,15],[-4,0],[-2,10],[-14,20],[3,5],[-3,10],[16,15],[0,10],[0,5],[0,15],[-5,0],[0,10],[3,10],[0,5],[2,5],[2,6],[0,5],[-4,5],[-5,15],[-15,-5],[-7,5],[-4,5],[0,10],[4,0],[5,0],[17,0],[2,20],[14,-5],[2,20],[4,0],[0,10],[13,10],[-4,5],[13,15],[7,10],[4,10],[5,5],[4,5],[-2,10],[-13,15],[0,5],[-9,10],[-5,0],[3,5],[6,16],[-2,10],[-7,-5],[-2,20],[-11,25],[-4,-10],[-5,10],[-6,-15],[-11,10],[-11,-20],[-9,0],[2,-10],[-22,-15],[-18,-16],[-17,-15],[-22,-15],[-16,-10],[-15,-5],[-20,-10],[-97,-35],[-4,5],[-5,0],[-70,0],[-14,0]],[[2415,5823],[-26,15]],[[2389,5838],[-33,131],[2,0],[2,10],[5,10],[2,0],[4,15],[0,5],[5,15],[0,5],[0,10],[-2,20],[0,25],[0,10],[2,5],[6,15],[5,11],[26,30],[7,0],[2,5],[18,0],[6,5],[7,10],[2,5],[2,0],[3,5],[2,0],[2,5],[2,0],[5,5],[22,30],[4,10],[-4,10],[0,5],[-5,5],[-2,5],[-4,5],[0,5],[0,5],[-3,0],[-2,0],[0,10],[2,5],[0,10],[0,5],[-2,5],[-2,0],[-2,5],[-2,5],[22,31],[0,20],[-7,10],[-18,40],[-28,20],[-13,0],[-18,25],[-18,20],[-26,-25],[-13,40],[19,41],[18,20],[-4,15],[-18,0],[-9,-15],[-33,-5],[-7,5],[-24,-25],[-28,-11],[-27,-10],[-44,-10],[-9,-5],[-17,-15],[-3,5],[-6,-5],[-13,20],[-7,-20],[-20,-20],[-35,-35],[-35,-30],[-42,-35],[8,85],[23,30],[11,81],[6,35],[-62,176]],[[1994,6773],[5,10],[20,30],[11,-65],[4,-10],[2,-11],[-2,-5],[2,-10],[5,-5],[4,-15],[20,20],[29,15],[6,11],[16,20],[37,40],[11,20],[5,25],[2,25],[9,0],[15,10],[9,-15],[-7,-5],[7,-10],[11,5],[20,-5],[15,-30],[7,-5],[9,10],[6,10],[7,30],[11,15],[0,10],[2,20],[44,10],[16,5],[6,10],[9,21],[9,30],[2,10],[4,15],[16,45],[0,5],[6,20],[11,5],[16,15],[-7,30],[3,21],[2,5],[13,10],[9,0],[24,20],[2,-25],[11,10],[5,-5],[4,-10],[-7,-10],[5,-16],[17,0],[5,16],[9,15],[4,0],[5,0],[6,-5],[5,0],[4,0],[13,10],[22,5],[24,-10],[3,10],[11,0],[11,5],[4,5],[7,5],[-7,15],[-9,15],[7,5],[0,5],[-9,0],[-11,0],[0,20],[7,0],[2,5],[4,5],[0,5],[-4,0],[-2,10],[6,20],[5,5],[22,10],[17,15],[-2,31],[0,10],[5,0],[-3,15],[-8,0],[0,10],[8,15],[-13,10],[2,5],[11,5],[11,-5],[45,10],[26,0],[7,-5],[-7,-15],[9,-15],[6,5],[5,0],[20,-10],[17,0],[25,-15],[33,5],[0,5],[8,0],[7,0],[7,-5],[13,-10],[13,0],[13,5],[0,5],[14,0],[22,10],[11,0],[22,10],[13,30],[20,20],[11,25],[24,0],[4,0],[11,5],[22,15],[22,25],[7,5],[5,-5],[22,-5],[4,0],[31,0],[13,0],[2,-15],[16,-5],[2,-10],[11,5],[9,-5],[22,5],[4,5],[40,-10],[31,0],[4,0],[5,-10],[17,-15],[9,0],[15,5],[7,0],[2,5],[20,15],[27,35],[17,10],[42,20],[20,11]],[[3531,7557],[-22,-31],[0,-10],[-2,-40],[-18,-20],[2,-15],[-4,-10],[-13,-15],[-25,0],[-13,-5],[-44,-25],[0,-5],[-18,-15],[-4,0],[-15,-31],[-14,-40],[-9,-25],[-4,0],[-4,0],[-14,-5],[-13,-5],[-13,0],[-13,0],[-11,-15],[-18,-20],[-18,-5],[-6,-15],[2,-15],[2,-20],[7,-10],[-13,-15],[-7,5],[-7,-5],[-15,-26],[-9,-5],[-35,-25],[-11,-10],[-31,-35],[-4,0],[-5,0],[-2,0],[-2,5],[-5,0],[-33,-15],[11,-55],[5,0],[15,-76],[27,10],[4,-15],[15,-10],[7,-10],[7,-15],[24,-90],[-4,0],[-11,0],[-7,-5],[0,-5],[2,-15],[0,-5],[5,0],[4,0],[2,0],[2,0],[0,5],[3,0],[4,0],[2,-5],[2,5],[3,0],[8,10],[3,0],[2,0],[4,0],[5,0],[11,-5],[2,0],[4,5],[5,5],[2,5],[0,10],[2,10],[2,10],[2,0],[3,5],[2,0],[2,0],[5,5],[4,0],[4,5],[5,5],[4,5],[0,5],[0,5],[-2,15],[0,10],[2,5],[5,5],[4,0],[2,0],[2,0],[5,-15],[4,-5],[2,0],[7,0],[4,10],[5,5],[0,5],[-2,5],[-3,15],[3,0],[0,5],[2,0],[2,-5],[2,0],[5,0],[6,0],[5,0],[11,5],[13,5],[11,0],[4,-15],[-8,-10],[4,-15],[-9,-10],[7,-10],[2,0],[4,-10],[5,0],[4,-25],[11,10],[18,-15],[4,5],[2,-10],[-15,-20],[7,-15],[-11,-10],[-7,-5],[-7,-11],[-4,-15],[-2,-5],[-5,0],[-4,0],[-7,-10],[-9,-5],[-11,15],[-6,-5],[-2,10],[-9,5],[-11,0],[-22,-30],[2,-20],[-2,-10],[-7,0],[-6,0],[-7,-5],[-9,-10],[-2,-10],[-9,-15],[9,-25],[9,5],[2,-15],[9,10],[2,-10],[-2,-10],[-5,5],[0,-10],[16,-5],[0,-5],[-7,-5],[-4,5],[-11,0],[-2,0],[-3,0],[-13,-10],[-11,0],[-15,-10],[-9,-10],[-5,0],[-19,20],[-11,-10],[-3,10],[0,5],[-4,15],[-9,-15],[-4,0],[-5,5],[-9,-5],[-2,-5],[-6,5],[-3,-10],[5,-21],[-7,-5],[11,-20],[5,-20],[6,-10],[0,-5],[7,-30],[0,-15],[9,0],[6,-5],[3,-10],[13,0],[11,5],[9,5],[8,5],[7,5],[4,5],[14,10],[6,-10],[5,0],[17,10],[9,-30],[-4,0],[2,-10],[-4,-5],[0,-10],[-3,0],[5,-40],[4,-15],[7,-11],[2,-10],[4,0],[25,10],[0,-5],[4,0],[2,11],[2,0],[0,5],[3,0],[2,0],[4,5],[2,0],[5,0],[2,0],[4,0],[0,5],[5,10],[0,5],[2,5],[5,5],[2,5],[2,5],[0,5],[-2,5],[-2,0],[-5,10],[-9,25],[-11,35],[2,5],[-4,20],[31,20],[11,5],[26,20],[3,6],[11,15],[2,5],[2,0],[7,5],[2,0],[4,5],[5,5],[2,0],[2,5],[2,5],[2,5],[3,10],[2,5],[0,10],[0,5],[2,5],[2,5],[0,5],[3,5],[0,5],[2,0],[0,5],[4,5],[7,5],[0,5],[0,5],[0,5],[2,5],[0,5],[2,0],[2,5],[5,5],[2,0],[0,10],[-7,15],[-2,0],[-2,0],[-4,26],[-5,0],[0,5],[7,5],[9,0],[0,5],[11,5],[4,5],[2,-10],[9,5],[4,5],[9,-20],[9,10],[7,15],[15,15],[13,0],[-2,-10],[2,0],[0,-10],[3,0],[6,-5],[13,5],[11,-20],[3,0],[2,-5],[-2,-6],[2,0],[-2,-10],[4,0],[4,-35],[3,-5],[4,15],[2,0],[9,10],[11,-5],[15,5],[23,10],[2,5],[6,-10],[7,-5],[15,0],[5,5],[2,-5],[7,0],[2,-5],[2,5],[7,5],[2,-10],[9,-15],[2,5],[2,0],[7,0],[2,0],[0,5],[2,0],[2,5],[-2,20],[-2,0],[0,5],[4,21],[-2,5],[2,0],[16,30],[2,0],[9,5],[2,-5],[15,0],[0,20],[0,10],[7,10],[4,35],[-4,0],[0,5],[-7,0],[-2,0],[-2,5],[4,15],[3,5],[2,10],[-9,10],[2,10],[-6,-5],[0,10],[-7,0],[0,10],[-4,0],[-3,6],[-2,10],[-33,5],[9,25],[-5,15],[-2,5],[-4,20],[2,15],[2,5],[-17,15],[-3,10],[11,10],[-8,20],[-11,-15],[-3,10],[-6,-10],[-5,5],[-6,-10],[-7,20],[-4,-5],[-5,0],[-6,25],[-2,0],[-9,20],[-5,0],[0,11],[-6,-6],[-3,11],[-2,10],[-4,-5],[-7,15],[-4,0],[-2,5],[2,25],[2,15],[-9,50],[0,10],[-9,10],[-2,5],[-11,15],[-9,20],[60,20],[13,6],[31,5],[48,0],[7,5],[9,10],[9,10],[15,5],[5,5],[4,-5],[13,5],[18,25],[9,-20],[22,-20],[4,5],[11,-36],[2,6],[5,-11],[-2,-5],[6,-5],[-4,-5],[6,-10],[7,15],[22,-35],[0,-20],[18,-35],[11,5],[13,-15],[13,10],[16,-5],[11,25],[6,20],[20,0],[4,-30],[20,-25],[2,5],[12,15],[4,5],[11,25],[4,5],[3,5],[2,0],[2,0],[2,0],[2,0],[0,-5],[0,-5],[0,-5],[3,-5],[6,-5],[5,-5],[2,0],[2,0],[2,0],[5,0],[2,0],[2,0],[7,10],[4,5],[2,0],[0,5],[2,0]],[[3800,6758],[-5,-5],[0,-10],[-8,-26],[4,-5],[13,5],[18,-10],[9,31],[4,-6],[5,11],[4,5],[0,5],[-11,0],[-7,10],[-2,5],[-7,0],[3,10],[-9,-5],[0,-5],[-5,-5],[-4,-10],[-2,5]],[[2779,5577],[5,-20],[11,15],[2,-5],[9,10],[4,10],[9,-5],[0,20],[0,25],[-11,10],[-5,-5],[3,-10],[-27,-20],[5,-5],[-3,-5],[-2,5],[-2,-5],[2,-15]],[[2484,5416],[9,5],[0,10],[4,5],[-4,10],[8,5]],[[2501,5451],[5,-5],[4,5],[5,-15],[13,5],[2,-5],[-20,-20],[-9,-20],[-15,5],[-2,5],[0,10]],[[2601,5522],[0,-26],[6,-20],[-2,0],[-7,0],[-2,-5],[-13,-10],[-4,-10],[-5,-5],[-2,-10],[-7,5],[-2,5],[-2,15],[2,5],[-13,25],[2,10],[2,16],[22,15],[5,0],[-2,-5],[2,-5],[6,10],[11,0],[3,-10]],[[3531,7557],[-9,5],[-13,-5],[-35,-5],[-9,10],[13,50],[0,5],[35,35],[0,10],[5,10]],[[3518,7672],[11,-5],[0,-10],[6,0],[5,-5],[24,-60],[-4,-15],[-5,-10],[-15,-15],[-9,5]],[[4150,7114],[3,10],[4,0],[2,-10],[24,-10],[31,25],[58,26],[2,5],[33,5],[15,-20],[11,-11],[25,-10],[15,26],[13,10],[13,30],[5,5],[6,10],[9,10],[-4,10],[0,5],[0,5],[-2,0],[0,5],[-3,5],[-2,0],[-2,0],[0,5],[0,5],[0,5],[-2,5],[-2,5],[-3,5],[0,10],[-4,5],[0,5],[0,5],[-2,10],[4,0],[0,10],[11,10],[33,-5],[2,0],[3,-10],[4,5],[27,5],[17,31],[7,-11],[13,-25],[0,-10],[2,-10],[0,-10],[7,-10],[4,-10],[9,-15],[4,-10],[0,-5],[0,-5],[3,-5],[0,-5],[-3,-5],[0,-10],[0,-5],[0,-10],[0,-10],[-2,-15],[0,-5],[11,0],[5,-10],[9,0],[6,-5],[2,5],[44,15],[3,-5],[26,15],[-11,20],[-2,5],[0,10],[-2,10],[6,0],[0,5],[9,0],[7,-10],[2,0],[4,0],[9,0],[2,10],[7,5],[4,5],[-2,5],[9,5],[13,10],[24,-15],[16,-40],[0,-15],[6,-20],[25,-5],[11,-15],[11,10],[4,15],[9,5],[15,0],[16,5],[13,5],[5,0],[0,5],[4,-5],[33,20],[0,-5],[7,0],[4,-5],[2,-20],[-2,-5],[-4,-5],[-7,-25],[-9,0],[-2,10],[-4,-5],[-27,-11],[0,-5],[7,0],[6,-10],[0,-5],[-4,-5],[0,-5],[13,-20],[2,0],[5,-5],[6,0],[0,-5],[5,5],[-2,-15],[2,0],[4,-15],[22,5],[18,10],[-2,5],[4,0],[20,0],[2,0],[-2,20],[-2,0],[0,30],[4,0],[2,10],[-4,26],[9,25],[22,20],[2,0],[2,5],[18,100],[11,5],[4,-5],[16,-5],[-3,20],[5,0],[-2,15],[6,5],[0,6],[9,0],[0,15],[5,5],[0,5],[17,5],[7,-20],[20,0],[4,-10],[13,5],[0,-5],[18,-11],[15,-30],[9,-5],[5,-5],[0,-5],[-3,-5],[-2,0],[-2,0],[-2,-10],[-2,0],[0,-5],[0,-5],[0,-5],[2,-10],[0,-5],[0,-10],[2,0],[0,-5],[2,-5],[0,-5],[2,-5],[5,-15],[4,0],[2,0],[5,-5],[11,-30],[9,-25],[-3,-21],[3,-25],[8,-40],[5,-10],[-5,-25],[16,-5],[0,-5],[2,-15],[2,-25],[5,-10],[0,-10],[2,-26],[4,-15],[11,-25],[3,-20],[-3,-5],[0,-25],[7,-20],[0,-5],[7,-5],[4,-15],[0,-10],[7,-10],[-3,-5],[7,-10],[15,-31],[0,-20],[7,-5],[2,-30],[29,-15],[2,-20],[13,5],[2,0],[16,0],[7,-10],[6,5],[5,-5],[8,5],[7,-5],[7,5],[8,10]],[[5413,6647],[7,-25],[2,-15],[0,-10],[2,0],[-4,-20],[-2,-5],[2,-10],[7,-10],[0,5],[2,0],[2,0],[7,5],[2,-5],[2,5],[9,0],[2,-5],[9,10],[9,10],[9,10],[8,0],[5,5],[9,-81],[8,0],[7,5],[7,5],[4,0],[2,5],[2,0],[3,6],[0,5],[31,35],[28,-61],[-2,-70]],[[5592,6441],[-33,30],[-4,10],[0,5],[-3,10],[-2,5],[-7,0],[0,5],[-15,-10],[-9,5],[0,5],[-22,5],[-2,-15],[-4,0],[-3,0],[-4,5],[-4,-5],[-5,-5],[-2,0],[-2,0],[-2,-5],[0,-5],[0,-5],[0,-5],[-5,5],[-2,-5],[-4,0],[-9,-5],[-5,-5],[-4,0],[-2,-5],[-3,0],[-2,-5],[-17,-35],[-7,-5],[-2,-10],[2,-5],[0,-10],[4,-15],[-4,-15],[-9,-15],[-22,-36],[-15,-10],[0,-15],[4,-35],[20,-5],[7,5],[59,20],[2,0],[9,-5],[13,-5],[11,-15],[-4,-5],[4,-5],[14,-10],[22,-30],[4,-10],[15,-5],[9,-20],[5,-10],[13,-15],[13,-21],[7,-20],[11,-5],[9,-25],[13,5],[15,-15],[-2,-50],[-9,-40],[-9,0],[-8,-15],[-14,0],[-26,-20],[-20,-5],[-13,5]],[[5537,5924],[2,60],[-90,40],[-5,-70],[2,-20],[-2,-5],[-26,0],[-9,5],[-24,10],[-7,0],[-24,-15],[-5,15],[5,10],[-2,75],[-33,5],[-75,-151],[-36,56],[-11,-5],[-6,-5],[-13,0],[-7,5],[-4,-5],[-3,0],[-2,0],[-2,0],[-2,0],[-2,0],[-3,-10],[-6,0],[-5,-6],[-15,0],[-9,16],[-29,0],[-11,-10],[-11,-11],[-15,-35],[-9,-5],[-13,30],[-7,-5],[-13,5],[-2,-5],[-2,-5],[-5,-10],[-2,-10],[-2,0],[-2,-5],[-3,-10],[-4,-10],[-2,0],[11,-25],[13,-15]],[[5010,5803],[0,-15],[-7,-5],[-19,0],[-31,-10],[-36,25],[-11,-15],[-11,0],[-24,-15],[-9,-10],[-6,-15],[-9,-5],[0,-5],[-11,-5],[2,-26],[31,-70],[-18,-30],[-6,0],[-25,-30],[-11,-20],[-6,-5],[-20,-41],[-7,-25],[-13,-40],[-13,-40],[-7,10],[-4,15],[6,50],[-2,0],[-15,5],[-13,15],[-5,-10],[-9,-5],[-6,-15],[0,-10],[-7,-20],[-11,-15],[-11,0],[-6,-5],[0,-25],[-7,-15],[4,-30],[5,0],[0,-20],[2,-20],[-7,-16],[0,-10],[-6,-10],[2,-10],[0,-10],[-2,-15],[-9,-10],[-5,5],[-6,-5],[2,0],[0,-5],[-2,-5],[2,-5],[0,-5],[2,-5],[-6,-15],[-14,-25],[-8,-5],[-9,-35],[13,-26],[-2,-15],[9,-20],[28,-85],[0,-25],[-6,0],[0,-5],[-14,-15],[5,-15],[-2,-15],[-16,-26]],[[6566,5537],[18,-51],[2,-20],[11,-25],[9,0],[0,-15],[9,-50],[2,-35],[0,-5],[-4,-25],[-20,-11],[-11,-10],[-9,-15],[-11,-10],[-16,-10],[-8,-5],[-9,-10],[-9,0],[-11,5],[-9,-20],[-11,-15],[-6,-20],[-9,-10],[-9,-5],[-18,-10],[-6,-5],[-7,-5],[-9,-10],[7,-10],[0,-25],[15,-21],[2,-10],[-4,-45],[-9,-20],[0,-5],[2,-10]],[[6438,4999],[-6,-20],[-11,-10],[-20,-5],[-15,-30],[-11,-10],[0,-10],[0,-10],[-18,0],[-2,10],[-11,-5],[-5,-10],[-9,-6],[-2,-10],[0,-20],[5,-20],[-3,-15],[7,-25],[0,-15],[7,-20],[-7,-10],[-11,5],[-9,-10],[-9,-10],[0,-15],[-4,-10],[-2,-10],[-2,-10],[2,-11],[-5,-10],[-6,-25],[6,-35],[-19,-15],[-9,-15],[-9,5],[-5,0],[-13,-5],[-13,-15],[-2,15],[-9,5],[-9,40],[-6,5],[0,10],[0,5],[-9,5],[-20,-20],[-20,-25],[-9,-35],[11,-40],[-2,-15],[-11,-10],[-18,-10],[-13,-26],[-6,-5],[-18,-10],[-2,-15],[-18,-20],[-13,20],[-7,5],[-4,-5],[-7,0],[-4,-5],[-5,-5],[-4,-20],[-7,-15],[-4,5],[-4,0],[-9,0],[-5,-5],[-4,-10],[0,-20],[2,-15],[-4,-10],[-2,-5],[2,-5],[2,-5],[0,-15],[0,-30],[7,-16],[4,-20],[-29,-40],[-11,0],[-13,-30],[7,-15],[-5,-15],[5,-10],[-11,-15],[-5,-15],[13,-25],[3,-26],[13,-15],[4,-5],[5,-10],[6,0],[14,-5],[4,-15],[-2,-30],[4,-20],[-4,-10],[0,-30],[6,-15],[-2,-20],[5,-11],[-7,-30],[0,-20]],[[6002,3823],[-13,-5],[-13,-5],[-9,-15],[-7,-5],[-4,-10],[-9,-15],[-13,-10],[-11,-5],[-18,-5],[-9,10],[-4,25],[2,15],[-4,0],[-5,10],[-13,10],[-7,0],[-4,0],[-9,-15],[-22,-5],[-24,-5],[-13,20],[-7,0],[-9,25],[-9,10],[-17,-15],[-16,5],[-6,-5],[-16,5],[-20,25],[-6,-10],[-11,0],[-11,-20],[-2,-15],[-9,-5],[2,-10],[-5,-10],[3,-30],[-9,-15],[-5,-15],[-4,-10],[7,-20],[-5,-20],[9,-21],[4,-40],[-19,-10],[-9,-5],[-2,-5],[-9,0],[-7,-5],[-9,5],[-8,-10],[-18,-5],[-2,-10],[-9,-10]],[[5559,3567],[-11,5],[-18,35],[-15,-15],[-29,20],[-11,20],[-6,-5],[-5,0],[-4,15],[-9,0],[-5,20],[-4,21],[-4,20],[2,25],[-5,0],[-2,5],[-2,10],[0,15],[-7,25],[-15,30],[0,20],[-4,5],[0,10],[-5,10],[9,56],[-4,10],[0,10],[13,20],[6,30],[0,10],[7,15],[0,45],[4,10],[-2,5],[-4,41],[2,5],[2,45],[2,10],[-8,20],[-18,5]],[[5495,4758],[20,15],[11,5],[9,5],[6,-5],[7,-5],[22,10],[18,15],[-7,45],[-4,10],[-5,10],[-13,15],[9,26],[0,5],[-2,20],[-23,-15],[-6,10],[-7,0],[2,5],[-4,5],[18,-5],[22,20],[2,30],[-11,25],[4,5],[7,10],[2,15],[0,30],[7,25],[6,26],[31,25],[5,10],[-3,10],[5,0],[-11,15],[-9,30],[-9,-5],[-13,5],[-15,15],[-7,0],[-2,-10],[-11,0]],[[5546,5210],[-9,30],[6,35],[-2,15],[-6,21],[2,10],[9,5],[6,10],[9,15],[-4,25],[-9,15],[2,10],[-7,10],[-11,15],[-8,-5],[-7,10],[13,25],[7,5],[29,20],[6,15],[5,31],[11,5],[8,-5],[7,5],[11,-26],[29,21],[6,10],[2,15],[27,5],[26,20],[0,10],[7,10],[2,15],[-9,20],[11,0],[16,5],[0,-5],[6,5],[-6,5],[2,20],[-2,5],[2,10],[-2,15],[0,46],[-2,15],[11,15],[6,20],[-2,15],[13,10],[14,35],[0,10],[-11,30]],[[5760,5888],[28,15],[33,-15],[13,-15],[3,-25],[-7,-35],[7,-30],[0,-86],[33,0],[11,5],[9,-15],[6,0],[13,0],[7,0],[4,0],[0,-5],[7,0],[7,-5],[4,0],[9,-5],[2,0],[4,-5],[3,0],[2,0],[2,0],[7,0],[2,0],[4,-5],[3,0],[2,0],[2,-5],[2,0],[5,5],[2,0],[6,0],[3,5],[4,0],[4,0],[5,0],[4,0],[5,0],[6,5],[7,0],[9,-20],[6,-50],[-6,-20],[2,-15],[4,-15],[11,-10],[7,-20],[4,5],[7,5],[9,0],[4,5],[5,10],[4,10],[2,10],[11,10],[0,5],[5,0],[2,5],[6,-5],[5,20],[17,0],[-2,15],[2,0],[11,-10],[42,30],[5,5],[6,-5],[0,-10],[11,-25],[20,-15],[9,5],[13,30],[16,10],[13,10],[7,-10],[13,-10],[2,-5],[13,0],[0,-15],[7,-10],[-5,-30],[5,-5],[-5,-10],[0,-15],[18,-56],[13,5],[0,5],[3,5],[2,5],[4,0],[0,5],[2,0],[0,5],[3,0],[0,-5],[2,-5],[2,-10],[0,-5],[-2,-5],[0,-5],[-2,-5],[0,-10],[0,-10],[2,-5],[0,-25],[-2,-25],[11,-30],[2,5],[2,10],[4,5],[7,5],[2,10],[2,20],[7,-5],[15,0],[5,0],[17,15],[5,15],[6,5],[9,5],[9,0],[2,10],[5,0],[4,5],[2,10],[5,0],[4,0],[5,5],[6,0],[2,10],[11,0],[5,15],[6,0],[3,6],[6,0],[5,10],[8,5],[5,10],[4,0]],[[5760,5888],[-58,-50],[-53,0],[-48,-20],[-71,40],[7,66]],[[5592,6441],[62,-50],[4,0],[2,5],[3,0],[2,5],[4,0],[2,0],[3,0],[2,0],[4,0],[2,0],[5,0],[2,0],[2,0],[5,0],[4,10],[2,0],[2,0],[3,0],[4,0],[2,0],[5,0],[2,0],[2,0],[24,0],[0,-5],[5,-30],[-7,-20],[4,-5],[7,-5],[16,5],[8,15],[7,-5],[13,10],[7,0],[2,15],[9,10],[11,0],[6,0],[11,5],[3,15],[6,0],[49,-5],[6,-5],[18,15],[0,20],[9,15],[9,20],[15,20],[2,5],[-2,15],[24,5],[3,0],[0,5],[-3,6],[0,5],[3,0],[0,5],[2,5],[2,0],[2,0],[2,5],[3,0],[2,5],[-2,5],[2,0],[0,5],[2,0],[4,0],[3,0],[0,5],[0,10],[2,5],[4,5],[2,5],[-2,5],[-2,5],[4,10],[3,0],[0,5],[0,5],[-3,0],[-2,5],[-2,10],[0,5],[2,5],[2,5],[3,5],[2,5],[0,5],[4,5],[2,5],[3,0],[2,0],[2,5],[4,5],[3,0],[4,0],[2,5],[2,0],[-4,10],[0,10],[-2,10],[0,11],[-2,5],[-3,15],[-8,5]],[[6286,7049],[3,-10],[26,-35],[18,-15],[26,-5],[221,50],[11,0],[6,-5],[5,0],[4,0],[7,0],[6,0],[5,0],[6,5],[5,0],[2,0],[6,0],[3,-5],[2,0],[4,-20],[-11,-10],[-9,-66],[-15,6],[7,-61],[2,-15],[0,-10],[0,-10],[17,-5],[3,5],[4,0],[2,10],[9,0],[9,5],[11,-5],[11,-10],[7,-5],[6,-5],[-4,-5],[13,-15],[0,5],[4,-10]],[[6718,6808],[3,0],[-3,0]],[[6718,6808],[-26,-55],[-9,-21],[-26,-70],[-3,-5],[-2,-15],[-15,-15],[4,-15],[-2,0],[2,-20],[-9,-40],[5,-15],[11,-5],[4,-16],[-6,-15],[0,-10],[-5,-10],[5,-20],[-25,-20],[-8,-20],[-5,-10],[0,-15],[11,-5],[29,-15],[6,-5],[-4,-10],[-15,-10],[2,-10],[-5,-15],[-8,-6],[2,-5],[-2,-15],[-5,-10],[-2,-10],[-9,-10],[-6,-25],[-5,-30],[-2,-30],[-11,0],[-7,-10],[-2,-10],[-40,-35],[-11,5],[-4,5],[-26,-10],[-3,-11],[0,-20],[7,-25],[-20,-10],[0,-5],[-4,0],[0,-5],[2,-5],[2,-5],[2,0],[3,0],[2,0],[2,0],[4,0],[5,-5],[15,-15],[2,-25],[0,-15],[11,-10],[5,-25],[6,-10],[3,5],[15,-20],[7,-31],[6,-10],[3,0],[4,-10],[7,5],[0,-15],[-20,-15],[31,-75],[6,10],[16,-30],[26,-15],[7,-5],[-5,-5],[-4,0],[-7,-10],[-2,-6],[-2,-35],[-5,-5],[-11,-40],[3,-15],[4,-10],[2,-10],[5,0],[6,-15],[-2,-10],[-20,-5],[-2,-5],[-11,0],[-11,-15],[-7,0],[-11,-10]],[[5010,5803],[13,10],[13,-5],[9,0],[11,20],[7,10],[9,0],[9,0],[4,-10],[22,5],[20,-15],[17,5],[25,5],[13,-10],[0,-10],[7,-25],[-9,-65],[9,-21],[-25,-30],[-15,-30],[-9,-30],[16,-10],[13,-10],[2,-5],[7,-15],[2,0],[2,0],[2,0],[5,-5],[0,-5],[6,5],[5,-5],[4,5],[13,0],[33,20],[7,-15],[0,-25],[-7,-15],[9,-5],[2,-10],[-4,-31],[-9,-20],[-2,-10],[7,-30],[-3,-35],[-11,-20],[0,-25],[-11,-15],[5,-20],[-3,-11],[11,-20],[0,-15],[3,-20],[-9,-20],[0,-30],[-7,-25],[2,-20],[7,-10],[0,-30],[9,-6],[-2,-25],[-5,-10],[-15,-10],[-9,-20],[9,-25],[11,-10],[18,-35],[8,-10],[0,-10],[5,-10],[20,-25],[11,0],[6,-10],[16,-26]],[[5376,4793],[48,30],[20,-15],[0,10],[-2,25],[-11,25],[-2,10],[-20,5],[-9,10],[-9,16],[-11,0],[-17,35],[-9,10],[9,25],[-2,20],[-9,0],[-9,5],[-7,10],[-6,0],[2,5],[0,5],[2,0],[0,10],[2,10],[2,5],[0,5],[-2,5],[0,5],[0,5],[0,5],[-4,10],[0,5],[-2,0],[-3,10],[-2,6],[0,5],[-2,0],[0,5],[2,10],[0,5],[-4,15],[0,20],[-2,5],[0,10],[0,5],[0,5],[2,5],[2,0],[0,10],[0,5],[0,10],[-2,10],[-13,5],[-7,10],[7,25],[13,5],[0,15],[0,5],[6,16],[16,-5],[4,-11],[-4,-10],[11,-20],[-16,-20],[-6,-20],[0,-25],[-2,-15],[2,-10],[13,45],[7,-15],[9,15],[8,10],[16,30],[6,-5],[9,5],[7,20],[4,-5],[5,10],[4,-15],[7,-10],[4,-40],[-2,-10],[0,-10],[2,-5],[9,-5],[13,-5],[20,15],[11,5],[13,0],[11,0],[18,5],[6,5],[14,-5]],[[7258,5517],[-8,-11],[-5,-5],[-6,-25],[-11,0],[-18,-10],[-4,-20],[-16,-35],[-11,-15],[-4,-15],[-11,-10],[-5,-20],[-9,-10],[-19,-10],[-7,-15],[-11,10],[-13,5],[-53,5],[9,-30],[-9,-6],[-5,0],[-6,-5],[-2,-5],[-16,-45],[-13,-10],[-11,-5],[-4,-10],[-9,-10],[-7,0],[-13,-15],[-7,-10],[-13,15],[-2,35],[-20,40],[0,15],[-22,5],[-24,16],[-18,0],[-2,0],[-9,-5],[-7,-16],[-8,-20],[-14,0],[-4,0],[-2,-10],[-2,-45],[4,-30],[-13,-15],[-5,-10],[-8,-30],[0,-20],[-9,-11],[-7,-15],[-4,-20],[-9,-20],[-2,-25],[-9,-10],[-16,-20],[-13,-5],[-13,0],[-33,-10],[-11,0],[-24,-5],[-18,-15],[-7,5],[-4,0],[-4,-10],[-7,-5],[-11,0],[-4,-5],[-3,-10],[-13,-5],[-13,-10],[-7,10],[-15,0],[-7,5],[0,10],[0,15],[2,5],[-2,20],[0,10],[-17,-5],[-11,10],[-5,10],[-4,0],[-13,0],[-7,5],[-27,-10]],[[6718,6808],[3,0]],[[6721,6808],[0,5],[2,0],[6,-10],[51,-86],[40,-65],[9,-20],[28,-35],[5,-5],[6,0],[33,5],[16,5],[11,5],[6,0],[14,-10],[17,10],[44,-5],[27,-15],[92,-25],[-2,-36],[0,-25],[0,-10],[0,-5],[0,-5],[0,-5],[0,-5],[0,-5],[-2,-5],[0,-5],[-2,0],[0,-5],[0,-5],[-2,-5],[2,-10],[-2,0],[6,-30],[5,-5],[-5,-30],[7,-61],[-2,-5],[-14,-40],[-6,-30],[-16,-25],[-8,0],[-5,-15],[-18,-5],[-15,-10],[-15,-15],[-20,-25],[39,-46],[9,0],[9,-15],[9,0],[15,10],[3,-5],[11,-10],[46,45],[6,0],[7,5],[16,-15],[11,0],[4,0],[7,-15],[6,-10],[5,-10],[13,-10],[0,-10],[11,-25],[4,-10],[0,-40],[11,-35],[5,-26],[-7,0],[-4,-15],[4,-25],[-7,-25],[7,-15],[-2,-20],[0,-15],[-7,-30],[5,-15],[2,-25],[-2,-10],[-18,-6],[0,-40],[-2,-10],[6,-15],[3,-15],[17,-10],[5,-5],[6,-45],[-6,-15],[4,-10],[-7,-30]],[[5413,6647],[3,0],[2,5],[0,5],[2,15],[0,10],[-2,10],[-5,15],[0,5],[3,5],[2,10],[2,5],[0,6],[0,15],[0,5],[0,10],[0,5],[-2,10],[-2,10],[-3,15],[-2,5],[-2,5],[-2,5],[-7,0],[-4,0],[-2,5],[-3,0],[-2,15],[-2,10],[0,10],[0,15],[0,5],[2,0],[0,5],[2,10],[3,5],[2,0],[0,5],[2,0],[0,5],[2,5],[0,5],[-2,10],[-4,11],[-3,10],[0,15],[-2,5],[0,10],[-2,5],[0,5],[0,5],[2,5],[0,15],[0,5],[-2,5],[-2,5],[-2,5],[-5,5],[0,5],[0,5],[-2,5],[0,10],[0,5],[2,10],[2,10],[0,5],[3,0],[4,10],[4,5],[9,15],[2,5],[0,5],[0,11],[0,5],[3,5],[6,10],[0,10],[0,5]],[[2823,3698],[-17,-20],[-14,-11],[-4,-15],[-24,-55],[-7,-5],[-13,35],[0,10],[-20,25],[-20,-40],[-26,-30],[-27,-30],[-11,5],[-13,0],[-7,-5],[-2,-25],[-6,-10],[-3,-10],[-2,-10],[-4,-15],[-2,-26],[-7,-5],[-2,-10],[-7,-5],[-6,-5],[-3,-10],[-2,-10],[-13,-5],[-9,-10],[-9,-5],[-6,-15],[-5,-15],[-11,-10],[-4,10],[-20,-10],[-4,5],[-11,0],[-9,5],[-13,-15],[-14,15],[-11,-10],[-15,-20],[-7,-5],[-9,-20],[-15,-15],[-26,-41],[-3,-15],[-15,-25],[2,-5],[-6,-55],[-3,5],[-31,-25],[-22,-20],[-8,-5],[-11,0],[0,5],[2,5],[6,20],[9,25],[-4,20],[-18,30],[-4,0],[-2,25],[0,31],[-3,15],[5,10],[-7,10],[-2,5],[-2,5],[-2,5],[0,5],[-3,10],[0,5],[-2,0],[0,10],[2,0],[0,5],[-2,5],[0,5],[2,0],[0,5],[-2,0],[0,5],[-4,0],[-2,5],[-3,0],[-2,5],[-2,0],[-2,5],[-3,5],[-2,5],[-2,5],[-4,5],[-5,0],[-4,5],[0,5],[-5,5],[0,5],[-2,0],[-2,0],[-4,0],[-3,0],[-2,0],[-2,-5],[-4,0],[-3,0],[-2,5],[-2,0],[-4,-5],[-7,0],[-4,0],[-3,5],[-2,0],[0,5],[-4,5],[-2,0],[0,5],[-3,0],[-2,-5],[-2,5],[-2,0],[0,5],[0,5],[-2,0],[0,5],[-7,0],[-2,0],[-2,6],[-7,5],[-2,0],[-3,0],[-2,5],[-2,0],[0,5],[0,5],[-2,0],[-2,0],[-3,0],[0,-5],[-2,0],[-2,0],[-4,5],[-3,0],[-4,0],[-4,0],[0,-5],[-3,0],[0,-5],[-2,-5],[-2,-5],[-2,0],[0,-6],[-2,0],[0,-5],[-3,5],[0,6],[0,5],[3,5],[0,5],[0,5],[2,5],[0,5],[0,15],[0,5],[2,5],[-33,-35],[-2,0],[-20,-46],[-16,-15],[-6,-35],[-11,-5],[-22,5],[-7,15],[-6,0],[-11,15],[-3,10],[-6,15],[-2,15],[-5,21],[-13,0],[-13,25],[-7,25],[-9,15],[2,5],[3,5],[6,15],[2,5],[0,5],[3,5],[0,5],[0,5],[0,5],[2,5],[2,0],[2,5],[0,5],[5,10],[2,0],[2,5],[0,5],[5,0],[2,0],[-7,-20],[0,-5],[9,0],[2,0],[5,-5],[19,5],[22,15],[3,0],[2,0],[2,0],[2,0],[0,-5],[2,-5],[0,-5],[0,-5],[3,0],[2,-5],[2,0],[0,-5],[0,-5],[-2,-15],[2,0],[2,0],[2,0],[3,15],[0,5],[4,0],[0,10],[2,5],[-2,0],[2,10],[2,-5],[3,5],[2,5],[0,5],[2,5],[2,5],[5,5],[2,0],[2,5],[2,0],[0,10],[3,0],[2,0],[2,0],[2,11],[2,5],[5,10],[6,15],[3,0],[2,5],[2,5],[2,0],[2,-5],[3,0],[2,5],[0,5],[2,0],[2,5],[0,-5],[2,0],[3,5],[2,0],[2,0],[2,0],[2,0],[5,5],[-5,10],[-2,10],[2,5],[-2,5],[7,15],[-9,5],[-13,-15],[-9,0],[-4,-25],[-3,-5],[-13,25],[-11,-10],[-4,25],[-9,25],[-7,5],[2,5],[-4,5],[-15,10],[-9,10],[-5,-5],[-4,5],[0,5],[-2,0],[-2,0],[-3,0],[-2,0],[-2,-5],[-2,0],[-2,0],[-3,-10],[-2,0],[0,-5],[-2,0],[0,-5],[-2,0],[-2,0],[0,-5],[0,-5],[-3,0],[-2,-5],[-13,5],[0,5],[-7,5],[-4,-5],[-7,35],[-15,10],[0,-10],[-2,-5],[0,-5],[-3,-5],[0,-5],[3,-5],[0,-5],[-9,5],[-2,-5],[-7,0],[-2,-5],[-2,0],[0,-10],[-9,-5],[-9,5],[2,5],[0,5],[0,5],[0,5],[2,5],[3,0],[0,5],[2,5],[0,10],[0,5],[0,5],[2,10],[0,11],[0,5],[2,5],[-6,40],[8,5],[5,40],[-5,35],[3,0],[-3,15],[3,15],[-5,15],[2,15],[-2,0],[0,10],[-6,0],[-3,16],[5,35],[6,20],[3,0],[0,5],[2,5],[-11,10],[0,5],[6,0],[11,5],[9,0],[2,-5],[5,5],[2,-15],[7,5],[-3,5],[9,15],[16,40],[6,0],[5,10],[6,0],[5,5],[13,-10],[-4,-10],[13,-10],[13,-5],[7,5],[4,15],[9,-10],[4,0],[7,15],[0,10],[-9,10],[9,25],[9,16],[-9,10],[-7,5],[-4,25],[4,0],[0,10],[5,10],[4,5],[9,-15],[13,25],[5,10],[6,0],[9,20],[4,0],[7,30],[2,5],[-4,10],[13,25],[13,31],[2,0],[14,20],[8,5],[3,5],[2,-10],[7,20],[4,10],[26,40],[5,5],[0,25],[11,35],[-2,5],[-7,15],[-4,5],[-7,10],[0,6],[-2,0],[0,5],[-2,0],[-3,0],[-4,-5],[-7,-6],[-4,0],[0,-5],[-2,0],[-2,0],[-3,5],[-2,6],[-2,5],[-2,0],[-3,0],[0,-5],[-6,10],[-2,-10],[-5,10],[2,5],[-4,10],[13,25],[7,0],[0,-10],[7,-5],[19,35],[14,20],[-3,10],[-6,0],[4,10],[-2,0],[11,20],[4,15],[0,-5],[7,15],[9,5],[0,-5],[2,0],[0,-5],[2,0],[5,0],[4,10],[11,10],[0,15],[4,0],[-6,0],[0,16],[15,30],[9,20],[-9,10],[5,0],[-16,30],[2,5],[-4,15],[4,10],[7,5],[-9,10],[2,0],[5,15],[4,15],[7,10],[4,-5],[3,0],[2,-10],[2,0],[2,-5],[2,5],[3,-5],[2,0],[0,-5],[2,0],[2,0],[2,0],[16,-5],[4,15],[11,30],[0,10],[-13,11],[2,10],[-9,15],[3,5],[4,-5],[4,10],[-2,5],[5,5],[-3,0],[-4,5],[-4,10],[-3,-5],[-2,0],[-2,0],[-4,5],[2,5],[-7,10],[0,5],[2,5],[3,5],[-3,10],[7,15],[-9,15],[7,25],[4,10],[11,15],[-2,0],[7,10],[-7,16],[-7,20],[-11,20],[-4,5],[-4,10],[-9,0],[2,-10],[-11,-10],[-7,0],[-2,5],[-9,-15],[5,-15],[4,-5],[7,-15],[11,-36],[-11,-10],[-11,30],[-7,0],[-7,21],[-4,0],[-2,5],[2,0],[-2,10],[-2,5],[-3,0],[-6,20],[-9,5],[0,5],[0,5],[-2,0],[-2,5],[-3,0],[3,5],[-3,10],[-2,0],[-4,-5],[-7,15],[-9,5],[-6,0],[-5,5],[0,5],[3,5],[4,5],[2,5],[2,0],[0,5],[3,0],[0,5],[-3,0],[-2,5],[-2,0],[-2,5],[-7,10],[-2,5],[-57,101]],[[2072,5562],[72,140]],[[2144,5702],[71,-125],[9,-20],[9,-5],[6,-10],[2,5],[3,-5],[8,10],[5,-5],[13,-10],[4,-10],[-13,-21],[7,-10],[-9,-15],[4,0],[3,-5],[2,-5],[6,-15],[18,-30],[22,-35],[7,-10],[2,0],[-9,-15],[-2,0],[-11,-20],[-2,0],[-11,-15],[2,-5],[4,-5],[7,-15],[2,0],[2,0],[2,0],[3,0],[6,-6],[2,0],[3,6],[0,5],[2,0],[2,5],[0,-5],[2,5],[0,5],[3,0],[2,5],[2,-5],[2,0],[0,10],[0,5],[0,5],[13,-25],[7,10],[2,-5],[5,-5],[6,0],[5,0],[4,-10],[0,-6],[-4,-10],[0,-5],[-3,-5],[-2,-10],[0,-5],[-2,0],[22,-25],[-2,-10],[-13,-10],[2,-10],[-9,-10],[-2,-10],[6,-15],[3,5],[4,-10],[4,-5],[7,10],[7,-5],[8,25],[5,15],[2,0],[2,0],[2,5],[3,0],[2,0],[0,5],[2,0],[2,10],[0,5],[5,15],[4,5],[2,0],[3,10],[2,5],[2,0],[2,5],[5,5],[0,5],[2,5],[2,0],[4,16],[-4,10],[-4,10],[-3,-5],[-2,5],[5,5],[-3,10],[-8,-5],[0,20],[8,15],[11,5],[5,10],[-2,0],[17,20],[-2,5],[-7,-5],[-2,0],[0,10],[9,0],[9,0]],[[2501,5451],[5,20],[-7,5],[-13,25],[-53,121],[-4,10],[6,15],[0,35],[-2,15],[-9,15],[9,6],[-6,20],[4,0],[-2,10],[4,5],[-4,10],[6,5],[-2,15],[7,10],[0,5],[-2,0],[-3,5],[-2,0],[0,5],[-4,0],[-2,5],[-3,0],[-2,5],[-2,0],[-2,5],[-3,0]],[[2554,5517],[-2,-16],[-2,-10],[13,-25],[-2,-5],[2,-15],[2,-5],[7,-5],[2,10],[5,5],[4,10],[13,10],[2,5],[7,0],[2,0],[-6,20],[0,26],[-3,10],[-11,0],[-6,-10],[-2,5],[2,5],[-5,0],[-22,-15]],[[1897,4597],[-13,-25],[-4,-5],[-7,0],[-4,0],[-5,-5],[-4,5],[-9,-5],[-6,0],[-11,10],[0,5],[6,10],[0,10],[5,5],[2,10],[2,-5],[4,5],[3,-10],[13,15],[4,-10],[2,5],[3,0],[4,5],[2,0],[2,0],[5,0],[4,5],[2,5],[-4,10],[13,15],[2,15],[16,31],[2,5],[-4,0],[2,10],[18,25],[8,10],[7,10],[11,30],[-7,0],[7,20],[7,-5],[-3,-10],[7,0],[4,-10],[3,-10],[6,-10],[0,-10],[-4,-5],[2,-10],[2,0],[0,5],[2,0],[3,0],[4,5],[2,0],[7,-15],[9,-10],[11,-10],[-2,-10],[8,-11],[5,-10],[-9,-20],[-4,-10],[-23,-55],[0,-5],[3,-5],[-3,-10],[5,-5],[-7,-15],[-4,5],[-2,-5],[-7,5],[-4,0],[-11,0],[-14,10],[-17,25],[-11,10],[-7,0],[-4,0],[-25,-10]],[[1816,5200],[189,281]],[[2005,5481],[58,-110],[9,-20],[2,5],[2,-5],[2,0],[11,-20],[2,5],[5,-5],[9,10],[22,-51],[-22,-20],[-5,10],[-17,-15],[-7,5],[-13,-10],[9,-20],[17,15],[0,-5],[20,15],[7,-15],[4,0],[5,-15],[2,5],[2,-10],[4,0],[7,-20],[4,0],[3,-5],[2,-5],[-27,-30],[-17,-40],[-7,-20],[-11,-36],[4,-20],[7,-20],[2,-5],[-2,-5],[4,0],[-4,-10],[7,-15],[-14,-35],[5,-5],[9,-10],[11,20],[-3,5],[12,10],[4,-5],[2,0],[11,0],[0,-5],[2,-5],[3,0],[2,-5],[0,-5],[0,-5],[-2,-5],[-3,0],[-2,-5],[-2,-5],[0,-5],[-2,-5],[-2,0],[0,-5],[-3,0],[-4,-5],[-2,0],[0,-5],[0,-5],[-5,-10],[-2,-11],[0,-5],[-2,0],[0,-10],[-2,0],[2,-5],[0,-5],[0,-5],[-2,-5],[0,-5],[-3,0],[0,-5],[-4,0],[-2,-5],[-2,-5],[-7,10],[4,5],[-6,5],[-2,-5],[-3,-5],[-13,0],[2,-10],[-11,-5],[-2,-10],[-13,5],[-11,-5],[-7,-10],[-2,5],[-4,0],[-9,15],[-2,-5],[-5,5],[-4,0],[-9,10],[-4,10],[4,5],[-2,10],[-9,10],[-13,-15],[-2,5],[-7,-10],[4,-5],[-4,-10],[-4,0],[-9,-10],[-7,10],[-6,-25],[-9,-5],[-13,10],[-5,-20],[-13,25],[-2,0],[-3,0],[-4,0],[-2,5],[-2,-5],[0,5],[0,5],[-9,20],[-9,10],[-15,-15],[-14,20],[-19,31],[-5,0],[-9,-21],[-2,5],[2,10],[5,11],[17,30],[-6,15],[-11,-10],[-5,10],[-22,30],[-55,90],[84,131]],[[1829,4672],[0,-5],[-2,-5],[0,-40],[-4,-10],[2,-5],[-5,-15],[-11,-10],[-2,-15],[2,-5],[-13,-25],[-20,-20],[-6,25],[2,5],[-2,10],[-16,15],[-6,20],[4,10],[2,10],[2,5],[3,0],[11,0],[2,10],[17,25],[11,35],[7,-10],[4,5],[3,5],[15,-15]],[[2819,5602],[0,-20],[-9,5],[-4,-10],[-9,-10],[-2,5],[-11,-15],[-5,20],[-2,15],[2,5],[2,-5],[3,5],[-5,5],[27,20],[-3,10],[5,5],[11,-10],[0,-25]],[[3518,7672],[-18,15],[-9,-5],[-6,15],[8,30],[-2,20],[-13,0],[-4,16],[-11,0],[-11,10],[4,25],[2,5],[-2,5],[-11,0],[-42,0],[-13,-5],[-7,-5],[-9,0],[-17,5],[-7,0],[-15,-5],[-25,5],[-8,10],[-31,35],[-9,-10],[2,10]],[[3264,7848],[5,30],[11,15],[-3,30],[0,5],[-4,10],[2,10],[-2,5],[4,6],[3,0],[2,-6],[2,-5],[7,0],[2,5],[0,6],[0,5],[2,0],[4,5],[5,-5],[4,-5],[2,-6],[5,-5],[2,5],[2,0],[2,6],[3,0],[0,5],[2,0],[4,-5],[5,-6],[2,0],[4,-5],[5,5],[4,0],[2,0],[3,-5],[0,-20],[0,-10],[0,-5],[0,-5],[0,-5],[0,-5],[2,0],[2,-5],[9,0],[2,0],[0,-10],[13,-5],[2,-5],[9,0],[13,0],[9,10],[5,5],[2,5],[4,5],[14,-5],[4,-5],[22,65],[4,16],[0,5],[-11,20],[5,5],[-7,10],[2,0],[40,10],[24,0],[25,-5],[30,10],[-2,5],[0,5],[-2,5],[-2,0],[-5,5],[-2,0],[-2,0],[-2,0],[-2,0],[-5,10],[0,5],[-2,5],[0,5],[0,5],[0,10],[0,10],[2,5],[0,5],[0,20],[0,5],[16,5],[4,-10],[0,-15],[7,0],[-5,-10],[7,-5],[6,0],[16,20],[22,-10],[13,10],[9,0],[9,0],[0,10],[-2,15],[0,10],[4,10],[-2,16],[9,25],[0,15],[6,20],[-2,25],[4,0],[5,5],[-13,20],[-9,10],[-11,5],[-14,5],[7,20],[-4,5],[0,5],[0,5],[0,10],[4,10],[0,5],[0,6],[0,5],[-2,5],[0,5],[0,5],[-2,5],[13,-5],[4,5],[7,0],[26,-25],[14,0],[13,-6],[9,11],[6,-5],[16,15],[0,5],[-9,0],[9,10],[-9,5],[-5,5],[0,5],[5,10],[2,5],[2,0],[14,-5],[15,10],[0,-10],[-2,-15],[6,-25],[5,-10],[4,0],[5,0],[6,0],[16,-11],[13,-5],[13,0],[9,-5],[11,-25],[11,-35],[-4,0],[-3,-5],[-2,0],[-6,-20],[-3,-5],[-2,0],[-2,-5],[-2,-5],[0,-10],[0,-5],[0,-5],[0,-5],[-5,-5],[-6,0],[-3,0],[-2,-5],[-2,-5],[-2,-5],[-5,-5],[-4,-10],[-2,-5],[0,-5],[-2,-15],[-3,-11],[3,-5],[-3,-10],[7,-15],[0,-10],[-2,-15],[0,-15],[-9,-45],[-4,-5],[2,-5],[-9,-5],[-2,-5],[-27,-25],[-13,-5],[-53,5],[5,-46],[2,-45],[2,-30],[-9,-5],[0,-5],[0,-5],[7,-10],[13,0],[0,-15],[2,-10],[0,-15],[2,-30],[97,20],[27,5],[62,-15],[2,-10],[11,-46],[20,-40],[17,-30],[7,-5],[26,0],[7,-5],[0,-15],[29,5],[6,-5],[0,-10],[7,5],[13,5],[-2,5],[4,25],[0,5],[0,5],[0,15],[7,30],[9,25],[9,6],[35,5],[20,10],[6,10],[7,30],[7,5],[22,20],[19,10],[9,10],[11,-5],[18,20],[6,-5],[0,20],[-4,10],[-7,0],[-4,5],[-7,20],[14,15],[6,15],[5,6],[4,-6],[2,0],[0,26],[11,5],[29,-31],[7,6],[13,-21],[24,21],[7,0],[20,15],[8,15],[-4,20],[13,10],[9,5],[2,5],[5,0],[15,0],[2,5],[-4,0],[6,10],[11,15],[-4,10],[-22,40],[4,5],[-11,51],[3,10],[4,5],[7,15],[11,10],[-3,5],[3,10],[-3,5]],[[4410,8225],[5,0],[2,5],[0,5],[2,5],[2,10],[3,0],[2,0],[4,5],[0,5],[5,5],[13,-15],[7,-30],[-5,-10],[13,-15],[3,-15],[4,-15],[0,-16],[0,-15],[4,-20],[-2,-5],[5,-20],[-3,-25],[-4,0],[0,25],[-2,0],[-44,-30],[19,-15],[5,0],[7,-10],[11,-15],[6,0],[7,0],[4,0],[0,-5],[2,-10],[7,0],[11,-5],[9,-10],[4,0],[5,-5],[2,-15],[2,-10],[2,-11],[0,-20],[0,-5],[7,-5],[4,5],[5,0],[6,-5],[0,10],[16,0],[0,-15],[6,-30],[3,-15],[0,-5],[-3,0],[0,-10],[-2,-10],[2,-5],[-2,-5],[0,-5],[-2,-10],[0,-5],[-2,-10],[0,-10],[-2,-5],[0,5],[-5,-5],[2,0],[-2,-5],[0,-5],[-2,-5],[-7,-5],[-2,0],[-4,-10],[0,-6],[-3,0],[-4,-5],[-2,-5],[-2,-5],[-5,-5],[7,-15],[-2,-20],[-18,-25],[0,-5],[7,-25],[-5,-10],[-9,-10],[-13,-10],[-6,0],[-16,-25],[-2,10],[-20,-20],[2,-15],[-26,-10],[-16,-6],[-19,-10],[0,16],[-3,20],[5,25],[-2,15],[-20,-5],[-18,5],[-26,5],[-3,5],[-4,10],[-13,15],[2,5],[-2,5],[-7,0],[0,-10],[0,-5],[-2,0],[-2,-5],[-7,-15],[-2,-5],[-4,-15],[-3,-10],[-2,-5],[0,-5],[-2,-10],[0,-10],[2,-5],[0,-5],[5,-6],[-5,0],[-2,-5],[-2,-5],[-7,-10],[-2,0],[-2,-5],[-2,0],[-3,-10],[-2,-5],[-4,-5],[-2,0],[-7,0],[-9,5],[-7,0],[-6,-5],[-7,-10],[-6,-5],[-5,-5],[-2,0],[-4,-10],[-3,-15],[-4,-10],[-4,-15],[-9,-35],[-5,-5],[-2,-5],[-4,-15],[-5,-15],[0,-21],[-2,-5],[-4,-15],[-13,-20],[-5,-10],[-11,-5],[-7,-5]],[[3826,6763],[7,-10],[11,0],[0,-5],[-4,-5],[-5,-11],[-4,6],[-9,-31],[-18,10],[-13,-5],[-4,5],[8,26],[0,10],[5,5],[2,-5],[4,10],[5,5],[0,5],[9,5],[-3,-10],[7,0],[2,-5]],[[3130,8019],[6,35],[3,35],[6,10],[0,5],[-4,5]],[[3141,8109],[4,5],[7,-5],[15,15],[16,0],[6,5],[0,10],[9,10],[15,10],[14,16],[2,5]],[[3229,8180],[7,-10],[6,0],[24,10],[5,-15],[6,-11],[11,-15],[5,-15],[4,-20],[7,-10],[0,-5],[0,-10],[-7,-15],[-2,-15],[-2,-10],[-7,-15],[-20,-10],[-24,5],[-15,-15],[-14,0],[-57,15],[-13,-5],[-9,5],[-4,0]],[[3427,8466],[2,0],[0,-20],[5,0],[2,-5],[9,-5],[29,0],[0,-10],[2,-20],[6,0],[3,-30],[-9,-36],[-9,0],[-4,-20],[8,-65],[-30,0],[-7,0],[-5,-10],[-6,0],[-7,0],[-13,5],[-11,0],[-24,-15],[-9,-5],[-11,-5],[-16,-5],[-11,-15],[-17,-5],[-18,35],[-4,25]],[[3282,8260],[11,25],[11,15],[2,10],[0,5],[-2,0],[-11,10],[-5,-5],[-4,15],[-4,5],[-3,5],[-2,-5],[-11,10],[-11,5],[-6,5],[-7,-5],[-11,-5],[2,21],[9,20],[13,40],[7,10],[15,-15],[11,-10],[9,-15],[9,-5],[4,0],[11,0],[20,-46],[11,0],[27,10],[6,11],[7,20],[6,5],[11,5],[0,20],[20,15],[-4,25],[4,5]],[[3698,8757],[-2,0],[-9,5],[-4,-5],[-4,0],[-5,-5],[-2,0],[-7,-5],[-2,0],[0,-15],[0,-5],[0,-5],[7,-10],[2,-5],[0,-5],[0,-30],[-2,-10],[-2,-15],[-7,5],[-2,-5],[-5,0],[-2,-10],[0,-5],[-9,-5],[-6,-20],[0,-5],[-5,-5],[-4,-10],[-9,-15],[-11,-21],[-2,0],[-7,0],[0,5],[-2,16],[0,20],[0,5],[-4,0],[0,10],[-5,0],[-2,10],[7,25],[-3,10],[5,10],[-16,10],[-13,0],[-11,5],[-9,0],[-22,-5],[0,5],[7,40],[4,-5],[7,30],[-18,36]],[[3524,8778],[5,0],[4,20],[-7,10],[3,10],[17,15],[3,5],[19,-5],[9,5],[13,-5],[0,30],[9,40],[22,-15],[13,-10],[-2,-20],[2,-5],[0,-10],[3,0],[9,0],[6,0],[5,0],[6,0],[2,-5],[3,0],[2,5],[2,0],[7,5],[0,5],[2,0],[4,5],[13,25],[7,10],[7,10],[6,5],[-2,10],[0,5],[9,15],[6,-5],[5,0],[2,0],[9,-5],[4,0],[9,-5],[11,-10],[18,0],[2,5],[2,10],[9,10],[4,5],[5,5],[6,0],[9,5],[2,5],[3,0],[-9,-20],[-11,0],[-2,-5],[-9,-20],[-7,-5],[-11,-20],[0,-10],[20,-10],[0,-10],[2,-15],[5,-5],[0,-15],[4,-5],[7,-5],[2,-5],[-2,-5],[-3,-5],[-2,0],[0,-5],[-2,-5],[0,-5],[-7,10],[0,15],[-4,0],[-7,-10],[0,-5],[-6,-15],[4,0],[0,-6],[-2,-5],[-9,5],[0,11],[-4,0],[-11,-5],[-2,0],[-11,-6],[-5,-5],[-2,-5],[-2,0],[-16,-10],[-9,5],[-6,0],[-5,10],[-6,5],[-5,-15]],[[3264,7848],[-9,-5],[-42,5],[-4,5],[9,20],[-5,20],[3,25],[-5,0],[-9,5],[-2,0],[-4,0],[-9,10],[-2,0],[-5,0],[-6,31],[-16,0],[-11,45],[-11,5],[-6,5]],[[3229,8180],[7,15],[-3,10],[11,15],[0,15],[5,10],[9,0],[24,15]],[[3427,8466],[-4,35],[-13,20],[-9,10],[-2,25],[4,-5],[9,-25],[4,-5],[13,15],[12,0],[4,-10],[4,5],[3,-10],[2,0],[2,5],[0,20],[7,10],[2,5],[6,26],[0,5],[0,5],[-6,15],[-9,0],[-11,15],[-7,-10],[-13,-20],[-18,-5],[-2,10],[2,10],[-6,15],[-2,10],[2,15],[13,15],[7,10],[4,0],[0,-5],[20,10],[15,25],[-2,5],[16,10],[11,5],[4,10],[4,0],[14,25],[11,5],[6,11]],[[3698,8757],[5,-5],[2,0],[2,0],[0,-5],[2,0],[3,-5],[2,0],[0,-5],[2,0],[0,-5],[2,0],[5,-15],[2,-5],[2,-5],[2,-5],[0,-5],[2,0],[0,-5],[3,0],[2,-5],[2,0],[2,0],[0,-5],[3,0],[2,0],[6,0],[3,0],[2,0],[2,-5],[2,0],[0,-5],[2,-5],[0,-5],[0,-5],[3,0],[0,-5],[0,-5],[2,0],[0,-5],[2,-5],[2,0],[0,-5],[2,0],[3,0],[0,-5],[2,0],[2,0],[2,0],[5,-5],[2,0],[2,-5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[5,0],[2,-5],[2,0],[5,0],[2,0],[2,0],[2,0],[2,0],[5,5],[2,0],[2,0],[3,0],[2,0],[0,5],[2,0],[2,5],[5,5],[2,0],[4,0],[0,5],[2,0],[3,0],[6,10],[2,0],[3,0],[2,0]],[[3875,8647],[2,-15],[7,0],[4,0],[0,5],[0,-5],[2,0],[2,0],[0,-5],[5,5],[2,0],[0,-5],[2,-5],[2,-5],[3,0],[2,0],[2,0],[4,0],[3,-5],[2,-10],[6,-15],[7,0],[13,-10],[3,5],[6,-5],[2,0],[3,0],[0,5],[4,-5],[2,0],[5,0],[2,5],[2,-5],[4,0],[5,0],[4,-5],[2,0],[5,0],[13,-11],[2,0],[2,0],[7,-5],[2,0],[5,-5],[2,0],[2,0],[4,0],[3,0],[4,-5],[2,0],[0,-5],[0,-5],[0,-5],[-4,-5],[0,-5],[0,-5],[0,-5],[2,-5],[-2,-10],[2,-15],[2,-5],[7,-5],[-2,-5],[-2,-10],[4,0],[-7,-20],[-6,-15],[4,-5],[2,0],[11,15],[5,-5],[4,5],[-2,0],[-2,5],[0,5],[2,5],[2,0],[7,-10],[11,0],[17,40],[16,20],[4,0],[11,25],[7,5],[2,51],[0,25],[5,0],[2,10],[-5,0],[-2,10],[13,0],[14,-10],[4,5],[11,10],[11,-10],[13,-30],[0,-15],[2,-6],[0,-20],[11,0],[7,15],[7,5],[4,0],[-4,-25],[2,-25],[4,5],[14,-25],[17,-10],[5,-5],[2,-20],[6,-5],[5,-25],[11,-20],[-2,-25],[2,-5],[2,-5],[13,0],[13,-11],[11,-5],[9,5],[3,-5],[8,0],[3,-5],[19,16],[7,10],[4,-5],[3,-5],[-7,-6],[-2,-15],[2,-15],[-4,-40],[-7,-35],[20,10],[20,-25],[-3,-20]],[[3130,8019],[-29,5],[-13,0],[2,15],[-9,5],[-9,10],[-13,20],[0,5],[-6,5],[0,10],[-3,5],[-17,0],[-14,10],[0,5],[-2,5],[0,5],[2,5],[3,5],[0,5],[-3,10]],[[3019,8149],[9,5],[20,0],[11,-15],[2,-10],[5,-5],[20,-5],[28,0],[27,-10]],[[5841,9300],[0,5],[2,10],[-11,5],[-9,0],[-4,-20],[-2,0],[-2,-10],[-3,0],[-4,5],[-9,-10],[-2,0],[-2,-5],[-2,0],[-7,-10],[-2,0],[0,-5],[-2,0],[-3,0],[-2,0],[-2,0],[0,5],[-2,0],[-2,0],[-3,0],[-2,5],[-2,0],[0,5],[-4,-5],[-7,10],[-2,-5],[-5,15],[2,10],[-6,0],[-2,0],[-7,-5],[-4,0],[-7,0],[-7,-10],[-2,0],[-2,0],[0,5],[-11,-15],[-4,0],[0,-5],[-3,-5],[3,-10],[2,-10],[0,-5],[0,-5],[-2,5],[-11,5],[-3,5],[0,10],[-2,5],[-6,-10],[-7,-5],[2,-10],[2,0],[3,-5],[-3,-5],[0,-5],[3,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,0],[0,-5],[2,0],[0,-5],[-2,-5],[0,-5],[-2,-5],[-2,0],[-2,0],[-3,0],[-2,0],[-2,-6],[-7,0],[-2,0],[-2,0],[-2,0],[-3,0],[0,6],[-2,0],[-2,0],[-2,0],[0,5],[-5,0],[-2,0],[-2,0],[-4,0],[-5,0],[-6,0],[-7,0],[-7,0],[-2,-5],[-9,5],[-4,0],[2,-11],[-2,-10],[2,-5],[-4,0],[0,5],[-5,-5],[-2,10],[-4,5],[-5,-5],[-4,0],[-4,11],[2,5],[-2,5],[0,5],[-11,5],[-5,0],[-2,-5],[0,-5],[2,-5],[5,0],[2,-5],[2,-6],[-9,-10],[-7,-5],[3,-5],[2,0],[4,0],[7,-5],[-9,-5],[0,-5],[-9,5],[-6,10],[-3,10],[-2,16],[-2,15],[4,20],[3,15],[-3,5],[-4,-5],[-4,-5],[-5,-5],[-6,-5],[-7,10],[-4,0],[-5,0],[-2,0],[-9,-5],[-9,10],[-4,5],[-4,0],[-5,15],[-4,5],[-14,20],[-4,5],[-2,5],[-13,-5],[-5,0],[-4,0],[-5,0],[-4,15],[-4,15],[-5,5],[0,10],[2,10],[5,10],[6,0],[9,5],[5,5],[0,10],[6,5],[-4,10],[-2,11],[-14,30],[-6,5],[-7,0],[-2,15],[-2,0],[2,5],[2,5],[5,10],[2,0],[0,5],[2,0],[2,5],[2,5],[7,10],[0,5],[2,0],[0,5],[2,5],[3,0],[2,0],[2,-5],[11,15],[2,-5],[11,15],[5,10],[4,5],[5,5],[2,0],[9,0],[-3,5],[-2,5],[7,10],[4,5],[5,0],[8,0],[9,-5],[0,5],[-2,5],[2,5],[0,11],[5,10],[0,5],[-3,0],[-6,0],[-5,15],[-2,25],[2,10],[3,5],[2,5],[6,5],[-2,5],[2,5],[0,5],[0,5],[0,5],[0,5],[3,0],[0,5],[2,0],[2,5],[2,0],[2,0],[3,0],[0,5],[2,0],[2,0],[2,5],[2,0],[0,5],[3,0],[0,5],[2,5],[0,5],[0,5],[2,5],[2,5],[0,5],[2,5],[3,5],[0,5],[2,0],[2,0],[0,5],[2,0],[3,5],[11,11],[2,0],[0,5],[2,0],[0,5],[2,0],[2,5],[3,5],[2,0],[4,5],[2,-5],[14,-5],[4,5],[9,10],[2,-5],[4,5],[9,0],[2,10],[14,-15],[6,-10],[2,-5],[0,5],[0,5],[3,0],[0,5],[2,0],[2,10],[0,5],[2,0],[3,5],[2,5],[2,0],[2,0],[2,0],[3,0],[2,0],[4,0],[7,10],[11,5],[6,0],[5,10],[6,0],[9,10],[9,-5],[4,-10],[7,-10],[2,0],[0,-10],[5,0],[2,0],[7,5],[6,5],[7,5],[4,5],[-2,5],[0,10],[-4,10],[2,15],[-7,0],[-9,5],[-9,5],[-2,0],[-2,5],[0,10],[0,10],[0,20],[4,20],[5,10],[4,6],[5,-11],[4,0],[2,0],[0,-5],[5,-5],[0,-10],[0,-10],[13,0],[15,15],[5,-10],[4,-10],[5,5],[8,10],[7,5],[13,-5],[9,0],[7,-5],[4,-10],[7,-5],[0,-5],[-2,-5],[4,-5],[4,0],[-4,-20],[0,-10],[-4,-10],[-5,0],[-2,-5],[0,-5],[0,-5],[0,-5],[2,0],[0,-5],[2,-5],[3,-5],[0,-5],[2,-5],[9,-5],[-5,-25],[-4,-10],[0,-16],[13,-15],[2,-10],[5,-15],[8,-5],[3,10],[8,10],[7,10],[2,0],[2,5],[7,-5],[0,5],[7,10],[-5,11],[7,5],[9,15],[-3,5],[-2,0],[-6,0],[0,10],[2,10],[2,15],[-2,15],[-2,5],[-7,10],[2,15],[2,15],[0,10],[5,0],[0,10],[0,5],[13,10],[4,0],[3,-10],[4,-10],[0,-10],[-2,-5],[-5,-5],[7,0],[5,0],[6,-10],[5,-10],[6,-5],[2,5],[7,-10],[4,0],[3,0],[2,5],[6,0],[-2,-10],[5,-5],[0,-5],[2,-15],[-2,-5],[2,-10],[4,-10],[2,0],[5,-5],[0,-5],[-5,-5],[-6,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,-6],[0,-5],[3,-5],[0,-5],[0,-5],[0,-5],[2,0],[0,-5],[0,-5],[0,-5],[2,0],[2,-5],[2,-5],[5,-5],[4,0],[2,5],[5,0],[2,5],[0,10],[4,5],[3,-5],[11,20],[4,-5],[7,10],[4,0],[7,-5],[4,5],[5,-10],[2,5],[4,0],[-2,-5],[7,0],[4,-10],[7,-5],[-5,-10],[13,-15],[3,-5],[8,-5],[3,-5],[-3,-10],[3,-10],[-5,-10],[-11,5],[-6,-5],[-7,0],[-2,-5],[-7,5],[-4,-10],[-5,-15],[-13,-10],[2,-10],[-4,-10],[-2,-20],[-2,-5],[2,-5],[4,-5],[5,-16],[4,-15],[0,-5],[7,5],[4,-5],[4,0],[-2,-5],[11,-5],[2,0],[7,-5],[4,-5],[3,-5],[-3,-5],[-6,-20],[0,-5],[-5,-10],[3,0],[-5,-25],[-6,-30],[2,-10],[2,-10]],[[6110,9421],[-7,0],[-8,-5],[-7,-5]],[[6088,9411],[-2,5],[0,5],[0,10],[-5,0],[-8,5],[2,25],[-9,15],[0,20],[-2,10],[-2,-5],[-3,5],[3,0],[-3,10],[0,5],[-6,10],[-3,0],[-4,0],[-2,0],[-2,-5],[-16,-10],[0,-5],[0,-5],[0,-5],[-4,0],[-5,0],[-4,0],[-7,5],[-2,0],[0,5],[5,5],[-11,5],[-7,0],[-4,-10],[-3,0],[-4,0],[-4,10],[-7,0],[4,-25],[18,-15],[7,-35],[-3,-5],[-4,5],[0,-10],[-2,-5],[-2,0],[-5,-5],[-4,-5],[0,-5],[-7,0],[-15,-5],[4,0],[0,-10],[5,-5],[4,0],[0,-5],[-2,-6]],[[6434,9230],[-7,-5],[-11,10],[-4,0],[-4,-5],[-5,-5],[-6,-25],[-16,5],[-9,10],[-4,5],[11,20],[9,20],[-2,0],[-3,5],[-2,0],[-6,5],[-5,0],[-6,5],[-3,0],[-2,5],[-2,5],[0,5],[0,5],[-2,10],[-3,0],[-2,5],[-2,5],[-2,0],[-5,10],[-6,5],[-5,0],[-2,0],[-2,0],[-4,5],[-3,0],[-6,5],[-7,5],[-2,0],[-2,0],[-2,0],[-3,0],[-4,-5],[-2,0],[-2,0],[-3,0],[-4,5],[-2,0],[-2,0],[-5,0],[-6,-10],[-7,0]],[[6260,9335],[-7,15],[0,5],[5,20],[2,10],[2,11],[2,10],[5,10],[6,0],[7,0],[9,5],[-9,15],[-2,0],[-5,0],[-11,5],[3,10],[-3,15],[-2,5],[-7,5],[-2,0],[-2,5],[-2,0],[-2,0],[-7,0],[-9,0],[-6,5],[-11,0],[-7,5],[-7,0],[3,10],[2,5],[0,10],[4,5],[-4,10],[0,5],[-2,5],[0,5],[0,5],[4,-5],[7,5],[4,10],[-2,10],[11,-5],[2,5],[0,5],[2,0],[2,5],[0,5],[3,6],[2,-6],[4,11],[7,-5],[2,10],[16,-10],[0,10],[-7,30],[7,0],[0,5],[11,5],[2,5],[2,0],[2,-5],[0,-10],[2,-20],[9,-5],[-2,0],[2,-5],[-2,-5],[-7,-5],[-6,-6],[0,-10],[6,5],[7,-5],[4,0],[3,-5],[11,-25],[13,5],[2,-5],[-2,-5],[-5,-5],[-8,-10],[0,-5],[8,-5],[0,-5],[3,0],[6,5],[7,0],[2,5],[4,10],[3,-5],[2,0],[13,-5],[0,-5],[5,0],[6,-5],[0,-20],[7,-20],[9,10],[6,0],[5,-5],[6,0],[11,5],[5,0],[2,-5],[4,5],[5,-5],[-3,-5],[-4,-5],[2,-10],[7,-5],[4,-10],[-2,-15],[-7,0],[-11,0],[-4,-5],[-4,-5],[-3,5],[7,10],[2,5],[-6,15],[-3,-10],[-4,-5],[0,10],[-4,5],[-9,-10],[-7,5],[-2,-20],[4,0],[7,5],[4,-10],[-2,-20],[-6,-5],[0,-11],[-5,0],[-2,-5],[2,-10],[-2,-10],[2,0],[2,0],[3,0],[2,0],[2,0],[0,-5],[2,0],[2,0],[3,0],[4,5],[9,-10],[6,-15],[9,-20],[5,-10],[4,-35],[2,-10],[-2,-5],[0,-20],[0,-5]],[[5746,8948],[2,-5],[5,-5],[4,5],[3,0],[4,0],[9,-10],[4,5],[11,-5],[2,5],[5,10],[6,15],[5,-5],[2,5],[4,21],[7,0]],[[8072,8134],[-11,0],[-18,0],[-26,-15],[0,10],[-29,-5],[-2,-5],[-7,0],[-9,0],[-4,15],[-2,5],[0,5],[-2,0],[-3,-5],[-2,5],[-4,0],[2,-10],[-7,-5],[0,-5],[-6,-5],[0,-10],[2,-5],[2,0],[5,-10],[4,5],[9,-10],[4,5],[0,-10],[9,-5],[-4,-5],[2,-5],[-16,-10],[3,-5],[8,0],[3,0],[2,5],[2,0],[5,-5],[2,0],[4,-5],[2,0],[5,0],[-2,-25],[6,0],[2,-10],[-13,-10],[7,-5]],[[7995,7999],[0,-5],[-13,-10],[-7,-5],[4,-10],[-6,0],[-11,-10],[0,-6],[-3,0],[-2,0],[0,-5],[-2,-5],[-7,0],[-2,0],[-4,-5],[-2,-5],[-3,0],[-2,0],[-2,0]],[[7933,7933],[-2,5],[-5,5],[-2,0],[-2,5],[-2,5],[-2,11],[-3,5],[0,5],[-2,0],[-9,15],[14,10],[6,0],[5,-10],[8,0],[5,5],[6,0],[5,-5],[0,-5],[0,-5],[2,-5],[11,5],[9,5],[0,25],[-5,5],[12,10],[-16,10],[-9,-5],[-4,5],[-2,10],[-3,-5],[-2,0],[-4,0],[0,5],[-7,5],[0,15],[-4,0],[2,20],[-4,-5],[0,5],[-11,5],[-3,10],[-8,5],[-9,5],[0,-20],[-5,-10],[-4,-5],[-7,-5],[-4,0],[-9,-5],[-7,-10],[9,-30],[-4,0],[-5,-5],[11,-10],[-2,-10],[7,5],[7,0],[-16,-15],[-7,-10],[-15,0],[-11,-20],[2,-26],[-9,-5],[3,-5]],[[7832,7923],[-3,-10],[-4,-15],[-4,-10],[2,-5],[-2,-15],[-5,0],[5,-5],[-3,-20],[0,-20],[5,-5],[-13,-25],[4,-5],[-4,-20],[2,-10],[-2,0],[4,-6],[-2,-5],[0,-10],[4,-20],[2,-35]],[[7818,7682],[-15,10],[-20,5],[-18,-15],[-28,0],[-16,15],[-22,25],[-2,0],[-4,5],[-2,5],[-5,-5],[-6,5],[-5,-5],[-4,20],[-5,11],[-2,5],[-2,5],[-2,10],[-3,0],[0,5],[0,5],[0,5],[3,5],[0,5],[-20,-15],[-7,10],[-15,-5],[-13,20],[-3,0],[-2,0],[-4,5],[-2,5],[2,0],[0,5],[2,0],[-2,0],[0,5],[-2,0],[0,5],[-3,0],[-2,-5],[-2,5],[0,5],[-2,0],[-2,0],[-3,5],[-2,0],[-2,0],[-2,0],[-3,-5],[-2,-5],[-2,0],[-2,0],[-2,0],[-3,-5],[-2,0],[0,5],[0,5],[-4,5],[-5,0],[-4,0],[-2,5],[0,5],[0,5],[2,0],[0,5],[0,5],[0,5],[-2,0],[-2,0],[-3,5],[-2,0],[-2,-5],[-2,0],[0,-5],[-2,-5],[-3,0],[-4,5],[-2,0],[-2,0],[-5,0],[-2,-5],[-2,0],[-7,5],[-4,0],[-2,-5],[-3,0],[-4,0],[-9,-5],[2,-5],[5,0],[0,-5],[2,-5],[2,0],[7,-10],[0,-5],[2,0],[0,-5],[0,-10],[0,-5],[-4,-5],[0,-5],[2,0],[0,-5],[0,-5],[2,-5],[0,-5],[2,0],[2,0],[0,-5],[-2,-5],[0,-5],[2,-5],[3,0],[0,-11],[4,-5],[2,-5],[0,-5],[-2,0],[-18,-10],[-11,-5],[-15,-15],[-2,-10],[6,-25],[-6,0],[-9,-5],[-7,-10],[-4,-5],[-7,-25],[-4,-25],[-31,-20],[-9,-10],[-2,-10],[0,-10],[2,0],[7,0],[0,-6],[6,-20],[-4,-5],[2,-10],[5,-20],[-7,-15],[4,-20],[-2,0],[0,-5],[-2,-5],[-2,-10],[-2,-10],[0,-10],[0,-5],[0,-5],[2,-5],[2,-5],[2,-5],[2,0],[3,-5],[0,-5],[2,-5],[2,-5],[7,-10],[22,-66],[2,-35],[20,-70]],[[7466,7190],[-25,0],[-15,-10],[-4,0],[-11,5],[-9,20],[-11,10],[-5,10],[3,5],[2,5],[0,5],[-2,5],[-3,0],[-4,0],[-18,-15],[-11,20],[-4,-5],[-5,5],[0,5],[-2,5],[-6,15],[-3,-5],[-8,0],[-7,0],[-2,5],[11,5],[-9,5],[-4,10],[-7,-5],[-9,0],[-6,-10],[-3,-10],[-15,-10],[0,5],[-2,5],[-3,0],[-8,5],[-3,0],[-2,0],[-2,0],[-7,-5],[-6,0],[-9,0],[-4,5],[-5,0],[-2,0],[-2,5],[-5,0],[-2,0],[-2,5],[-9,5],[-6,5],[-3,5],[-4,0],[-2,0],[0,5],[-2,0],[-3,5],[-2,5],[-6,5],[-5,5],[-2,0],[-2,5],[4,15],[20,21],[11,30],[0,10],[7,5],[-3,0],[-2,5],[-2,5],[0,5],[-2,5],[-2,5],[-3,5],[-4,5],[0,5],[-2,5],[4,30],[-9,25],[3,10],[-5,15],[0,10],[-6,6],[2,5],[2,5],[4,0],[3,0],[0,5],[2,5],[2,0],[2,0],[2,5],[5,0],[6,5],[3,0],[2,5],[4,5],[2,0],[3,0],[4,5],[2,5],[0,5],[-17,50],[-7,5],[-7,-5],[-4,0],[-4,0],[-3,-5],[-2,0],[-2,0],[-2,0],[-5,-5],[-6,-5],[0,15],[-16,30],[18,40],[-5,10],[-2,-10],[-6,-5],[-11,-10],[-3,30],[-6,16],[15,-6],[20,6],[2,5],[9,10],[0,15],[9,10],[4,15],[5,0],[0,5],[0,5],[-2,0],[-3,5],[3,5],[2,5],[0,5],[0,5],[-2,0],[-3,10],[0,5],[0,5],[0,5],[3,0],[0,5],[4,5],[0,5],[2,-5],[2,0],[7,0],[2,0],[2,0],[3,0],[2,0],[0,5],[2,0],[0,10],[2,0],[0,5],[-2,5],[0,5],[0,5],[0,5],[0,5],[-4,5],[2,0],[2,5],[2,0],[0,-10],[2,0],[0,5],[3,0],[2,-5],[2,0],[2,0],[5,10],[4,0],[2,5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,5],[5,5],[2,0],[4,0],[3,0],[2,0],[2,-5],[0,-5],[2,0],[16,10],[6,-10],[5,0],[4,10],[16,-5],[0,-10],[8,5],[25,-10],[2,-5],[6,0],[14,-5],[9,5],[13,5],[13,5],[7,5],[4,10],[2,-5],[0,5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[0,-5],[2,0],[5,5],[4,0],[4,0],[12,5],[6,6],[5,0],[4,10],[2,-5],[2,-5],[5,0],[6,10],[3,5],[4,0],[2,5],[2,0],[3,5],[6,0],[2,5],[5,-5],[2,0],[2,5],[2,-5],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,5],[2,-5],[4,0],[5,-5],[2,0],[2,-5],[0,-5],[0,-5],[2,0],[0,-6],[5,0],[4,0],[3,0],[2,0],[2,0],[9,0],[15,11],[9,10],[7,0],[22,10],[8,15],[-4,0],[2,15],[5,-10],[4,15],[-7,20],[7,5],[4,10],[0,25],[-6,20],[2,0],[2,10],[2,5],[0,5],[3,5],[4,0],[0,-5],[5,0],[0,-5],[2,0],[4,5],[2,0],[3,0],[2,0],[2,-5],[4,-5],[3,-5],[4,0],[2,5],[-2,0],[2,5],[2,0],[7,5],[4,0],[5,0],[4,5],[2,5],[5,5],[2,5],[2,0],[5,5],[2,0],[9,0],[6,5],[2,-5],[3,0],[2,0],[4,5],[2,0],[5,5],[13,5],[0,6],[13,5],[9,10],[11,10],[2,5],[7,5],[4,0],[3,0],[2,0],[4,5],[2,5],[3,0],[4,0],[2,0],[0,-5],[5,0],[2,5],[0,5],[2,5],[2,0],[2,0],[3,0],[2,0],[2,0],[-9,15],[-2,15],[0,10],[4,5],[5,10],[7,15],[22,5],[2,-10],[6,0],[0,-10],[-2,-5],[0,-5],[9,5],[7,5],[0,-5],[11,5],[8,-5],[0,-5],[11,0],[11,0],[12,0],[15,-5],[11,-15],[0,-5],[15,5],[3,-15],[15,-15],[11,-5],[4,-10],[22,-10],[3,-5],[17,-15],[3,-11],[-3,-10],[-8,-5],[-18,-10]],[[7818,7682],[0,-15],[0,-35],[-2,-35],[-4,-5],[2,0],[0,-5],[-2,-5],[-5,-41],[-11,-30],[7,-35],[-9,-10],[-6,-10],[2,-15],[-5,-20],[-2,-20],[2,-15],[-6,-20],[-9,-10],[-5,-11],[-6,-15],[-2,-10],[-5,-10],[-13,-20],[-4,-10],[-9,-15],[-7,-5],[-13,-15],[-13,-20],[-13,-15],[-5,-10],[-11,-5],[-15,-15],[-3,0],[-13,5],[-9,-10],[-28,-41],[-11,-5],[-11,0],[-22,-15],[-27,31],[-13,20],[-31,5],[-13,15],[-2,5]],[[7933,7933],[-4,-10],[0,-5],[-11,-5],[-7,10],[-4,0],[4,15],[-4,5],[0,5],[-20,-5],[-9,-5],[-22,-10],[-24,-5]],[[8072,8134],[-11,-15],[-9,0],[-4,-10],[-16,-15],[-26,-20],[2,-5],[2,-5],[-2,-10],[11,-5],[0,-5],[7,-5],[-3,-5],[9,0],[5,-5],[6,-10],[-11,-5],[-9,-10],[-13,5],[-15,-10]],[[6586,7828],[5,10],[8,10],[5,5],[2,0],[2,0],[2,5],[5,20],[9,-5],[6,5],[2,-5],[7,30],[9,0],[-2,10],[4,10],[0,10],[2,10],[2,0],[0,5],[-2,5],[2,6],[-4,10],[-2,0],[2,10],[2,0],[7,25],[11,5],[2,-5],[13,0],[5,15],[0,20],[2,10],[0,15],[-4,10],[2,5],[-2,15],[-5,5],[5,0],[8,0],[9,10],[0,10],[2,5],[9,-5],[16,5],[4,-10],[4,10],[11,10],[3,15],[4,10],[13,-25],[7,5],[7,10],[6,-10],[-6,-15],[8,10],[3,5],[-3,0],[-2,5],[0,5],[2,0],[0,5],[11,-5],[5,10],[0,-5],[2,5],[-2,6],[4,0],[0,5],[13,-5],[-2,5],[7,-5],[9,0],[-5,15],[5,0],[4,-5],[4,5],[-17,15],[-2,0],[0,5],[-5,5],[-6,5],[0,5],[-11,5],[-3,0],[-8,5],[-7,5],[-2,-5],[-11,10],[-7,5],[-2,10],[7,5],[2,5],[-2,15],[-3,5],[5,5],[-11,10],[-11,5],[-9,5],[-11,5],[-5,5],[7,10],[-7,5],[0,20],[-4,-5],[-2,10],[-5,0],[5,5],[2,5],[0,11],[2,-5],[7,5],[0,10],[-2,5],[4,5],[11,5],[7,-10],[13,10],[4,-5],[7,10],[9,5],[2,-5],[11,20],[-2,5],[4,0],[2,0],[0,-5],[11,-15],[5,0],[0,-10],[9,0],[4,-15],[9,10],[-2,5],[8,15],[5,-10],[4,0],[9,10],[7,0],[2,-5],[4,5],[7,10],[4,0],[7,-15],[-2,-5],[2,-5],[-2,-5],[4,-5],[9,-31],[18,11],[2,10],[2,-5],[9,-5],[20,0],[-3,-6],[5,0],[4,-15],[5,0],[9,0],[6,5],[-2,16],[4,0],[7,0],[18,10],[11,-10],[11,15],[13,0],[2,0],[4,5],[7,10],[9,35],[-5,15],[12,20],[2,0],[0,-10],[2,-5],[2,15],[7,-5],[-2,-5],[-5,-20],[9,-10],[2,-5],[2,0],[5,0],[4,5],[-2,5],[7,0],[4,-30],[13,10],[9,-10],[0,-10],[9,5],[4,-5],[25,0],[-7,-10],[2,-21],[-2,0],[7,-5],[-3,-10],[9,-5],[5,15],[6,11],[5,-6],[11,6],[6,-6],[2,6],[9,-6],[-2,-10],[11,0],[4,0],[5,-5],[9,0],[4,-20],[11,-5],[0,5],[13,-5],[11,0],[9,10],[11,5],[13,5],[3,10],[4,10],[4,0],[9,-5],[2,-10],[3,0],[0,-5],[17,0],[5,-10],[0,5],[9,5],[2,0],[2,5],[2,5],[2,0],[3,5],[0,5],[2,6],[13,10],[9,25],[4,0],[-2,5],[0,5],[-2,5],[0,5],[2,5],[0,5],[-2,5],[-2,5],[0,5],[-3,0],[-2,5],[-2,0],[-2,0],[0,-5],[-5,-5],[-2,-5],[-2,0],[-2,0],[-2,0],[0,5],[2,10],[-2,5],[-3,0],[5,20],[11,5],[2,-5],[4,15],[0,5],[-13,0],[-17,30],[-3,-10],[3,0],[0,-10],[-9,0],[-3,-15],[-6,5],[-7,-10],[0,-5],[-13,5],[0,-5],[-4,-5],[-3,0],[-2,0],[-2,0],[-11,10],[-9,0],[-6,20],[2,0],[4,0],[7,5],[6,-5],[0,-10],[5,0],[0,20],[6,0],[5,20],[-7,15],[2,0],[3,0],[2,0],[2,0],[4,5],[11,5],[3,0],[2,0],[2,6],[11,0],[5,10],[8,0],[11,-21],[3,0],[2,5],[0,11],[-5,15],[5,5],[6,0],[-4,5],[4,5],[5,0],[9,0],[2,-10],[11,-5],[2,10],[15,-5],[3,0],[4,15],[0,-25],[-4,-15],[4,0],[7,-21],[2,0],[2,0],[2,0],[3,0],[2,0],[4,0],[2,0],[3,0],[2,0],[4,0],[2,0],[0,-20],[-2,0],[-2,0],[-2,-5],[-2,0],[-3,0],[-2,-5],[-2,0],[-2,0],[-5,-10],[5,-5],[-11,-20],[-9,0],[-2,0],[-3,-20],[0,-10],[3,0],[2,10],[4,5],[11,-10],[14,-5],[8,-5],[0,10],[5,10],[13,-10],[9,-10],[2,5],[9,0],[2,-5],[0,-20],[-2,-10],[-9,0],[-2,-5],[-2,-5],[13,-10],[-5,-5],[-2,0],[-2,-10],[-4,-10],[13,5],[6,5],[7,0],[4,-5],[3,-5],[6,-16],[2,0],[5,0],[2,-5],[4,-10],[0,-15],[14,-5],[2,10],[2,5],[5,10],[2,10],[-5,5],[5,11],[-2,5],[6,5],[0,10],[5,10],[0,15],[8,0],[7,5],[0,10],[7,5],[11,-5],[2,5],[2,5],[4,15],[9,5],[2,5],[3,5],[2,5],[2,0],[2,0],[5,5],[147,201]],[[7818,8687],[27,-50],[37,-5],[42,5],[24,-161],[0,-5],[-2,-20],[0,-5],[5,-15],[2,-5],[4,-15],[11,-15],[11,-15],[7,-5],[2,-5],[16,-41],[6,-20],[0,-5],[2,-5],[5,-20],[2,-5],[2,-5],[0,-5],[7,0],[4,-5],[5,0],[2,0],[0,5],[4,0],[0,10],[2,5],[3,10],[0,10],[4,0],[2,0],[2,-5],[5,-10],[2,0],[4,-25],[3,-5],[4,-5],[2,-5],[5,-5],[6,-5],[9,0],[13,0],[9,-5],[11,0],[13,-5],[9,-5],[2,0],[3,-5],[2,0],[2,-5],[2,-5],[0,-5],[0,-5],[-4,-10],[-13,-20],[-11,-21],[-3,-5],[0,-5],[-2,-5],[0,-5],[2,-10],[0,-5],[3,-5],[6,-30],[2,-15],[0,-5],[0,-25],[3,-35],[0,-5],[0,-15],[6,-5],[5,-10],[2,-6],[0,-5],[2,0],[0,-5],[7,-10],[13,-10],[4,-5],[3,0],[4,-5],[4,-10],[0,-10],[0,-20],[0,-10],[-2,-10],[-6,-15],[-7,-15],[-9,-15],[-2,-5],[-9,-10],[-15,-5],[-3,0],[-6,0],[-7,0],[-2,0],[-4,0],[-16,-5],[-9,-5],[-4,0],[-2,0],[-2,-5],[-5,5],[-11,-15],[-13,-31],[-16,-25],[-8,-15],[-5,-15],[-2,-5],[-4,-25],[-3,-10],[-2,-20],[-6,-35],[-5,-25],[-4,-16],[0,-5],[-5,-15],[-6,-15],[-9,-10],[0,-5],[-18,-20],[-9,-5],[-2,-5],[-17,-25],[-3,0],[-2,-5],[-2,-5],[0,-5],[-2,-5],[0,-5],[-2,-20],[-3,-5],[-4,-25],[-2,-5],[-2,-5],[-3,-6],[-8,-10],[-9,-10],[-11,-10],[-7,-10],[-2,-5],[0,-10],[0,-25],[-2,-5],[-3,-15],[-17,-80],[-2,-10],[-20,-51],[-13,-35],[-3,-10],[-4,-15],[-2,-20],[0,-15],[-2,-10],[-7,-20],[-13,-46],[-2,-10],[-3,-30],[-4,-30],[0,-15],[0,-15],[9,-60],[4,-20],[7,-26],[9,-25],[11,-25],[6,-15],[5,-20],[8,-40],[5,-50],[4,-36],[7,-60],[0,-15],[-2,-15],[-7,-45],[-4,-5],[-5,-10],[-22,-25],[-24,-36],[-24,-20],[-11,-15],[-5,-10],[-2,-5],[0,-10],[9,-45]],[[7759,6200],[4,-15],[9,-25],[7,-20],[4,-10],[11,-21],[33,-80],[2,-5],[5,-30],[2,-5],[2,-10],[2,-5],[5,-10],[2,-5],[2,-10],[2,-5],[3,-5],[11,-20],[2,-6],[4,-10],[42,-80],[-11,-15],[-13,5],[-20,-10],[-4,0],[-9,-10],[-7,-15],[5,-15],[-3,-5],[0,-40],[-28,-11],[-5,-25],[-6,5],[-5,-25],[-4,-15],[0,-10],[-7,-5],[3,-5],[-16,-10],[-2,-30],[-13,-20],[-5,-25],[2,-25],[20,-21],[-13,-20],[-15,-10],[-9,-25],[-9,-5],[2,-15],[5,-30],[-7,-25],[-24,0],[-5,0],[0,-10],[5,-15],[-5,-20],[-2,-10],[-9,-11],[-17,31],[-7,5],[-11,25],[-11,5],[-7,10],[-8,5],[-5,0],[-2,5],[-4,0],[-11,10],[-9,0],[-7,0],[-9,0],[-2,5],[-2,0],[-4,0],[-9,10],[-11,10],[-11,5],[-31,0],[-16,-5],[-30,15],[-9,-10],[-9,20],[-20,0],[-18,-5],[-8,0],[-11,20],[-7,5],[-13,0],[-7,-5],[-18,10],[-4,0],[-11,-10],[-13,10],[-11,0],[-18,-15],[-24,20],[-5,25],[-11,16]],[[7699,8456],[-2,-15],[5,-5],[-5,-15],[5,-5],[0,-5],[8,0],[-2,-10],[7,0],[9,-5],[13,-5],[-5,-20],[0,5],[7,5],[4,5],[9,5],[2,5],[3,0],[2,0],[0,5],[-2,5],[-5,5],[-4,5],[-2,5],[-3,5],[-2,5],[-4,0],[-5,5],[-13,5],[-9,5],[-2,0],[-6,10],[-3,0]],[[7499,8491],[-7,5],[-2,5],[-2,5],[2,5],[7,0],[4,-5],[-2,-15]],[[7060,1768],[-13,0],[-31,45],[-7,5],[-8,21],[-3,20],[-26,60],[-18,25],[-48,35],[-2,5],[-9,40],[0,21],[-7,30],[-2,10],[-9,0],[-4,-5],[-7,20],[11,10],[5,110],[-14,41],[-17,25],[-3,15],[-11,30],[-8,50],[2,15],[11,10],[9,30],[8,21],[5,5],[4,5],[7,30],[-7,20],[-13,25],[-4,15],[4,10],[9,15],[-9,20],[9,25],[-2,15],[4,0],[24,21],[14,10],[2,15],[9,25],[2,30],[-2,20],[0,15],[4,10],[-4,20],[-5,35],[-9,26],[9,35],[11,20],[-9,15],[-4,20],[26,20],[-2,35],[-26,71],[-2,25],[2,0],[0,10],[-5,25],[9,20],[2,15],[3,20],[4,25],[-2,15],[-20,41],[0,20],[-13,15],[-11,10],[-29,-20],[-15,5],[-7,10],[-13,10],[6,15],[-4,15],[-2,5],[-11,10],[-2,10],[2,10],[-16,40],[-11,10],[-9,20],[-4,26],[2,30],[-4,25],[-2,20],[-7,5],[0,15],[11,10],[2,20],[-4,10],[-5,40],[14,36],[-5,15],[9,20],[0,20],[7,25],[6,15],[5,5],[0,15],[4,20],[16,5],[-5,10],[5,10],[-3,10],[-13,16],[-6,10],[0,30],[-14,-5],[-6,10],[-9,10],[-11,0],[-11,25],[-11,15],[-22,5],[-27,-15],[-24,-30],[-15,5],[-9,-5],[-5,40],[7,35],[-13,60],[-11,11],[-2,-11],[0,-30],[-20,-25],[-2,0],[-18,10],[-13,0],[-5,10],[-4,0],[-9,-15],[-15,-5],[-5,-10],[-6,-5],[-5,-20],[5,-30],[22,-45],[-5,-5],[2,-20],[-17,-26],[-11,-10],[-20,-15],[-13,-15],[-22,-10],[-5,-10],[-28,-10],[-9,-10],[-11,-5],[-24,-35],[-25,5],[-4,20],[0,15],[-64,-40],[-35,25],[-51,30],[-7,-5],[-8,5],[-9,10],[-11,-15],[-16,-5],[-24,25],[-7,-10],[-6,-10],[-7,0],[-2,-10],[-29,15],[-2,15],[-2,10],[-5,0],[-6,10],[-11,-5],[-16,0],[-11,-5],[-4,0]],[[7759,6200],[0,15],[13,5],[0,-15],[4,-15],[5,0],[2,10],[11,25],[7,-5],[6,-5],[3,0],[2,15],[9,-5],[17,0],[5,5],[6,15],[31,10],[20,10],[9,-5],[4,-10],[7,-5],[6,-10],[3,-10],[2,-30],[6,-10],[7,0],[11,10],[9,10],[9,0],[11,5],[6,-5],[16,10],[9,10],[4,0],[4,10],[5,0],[4,0],[7,15],[9,-5],[4,-5],[18,-30],[13,-5],[4,-5],[3,0],[0,-5],[2,0],[9,0],[13,5],[4,5],[5,5],[2,5],[4,20],[2,5],[3,0],[15,-5],[9,0],[2,-5],[2,0],[7,5],[4,5],[2,0],[12,-5],[4,0],[2,5],[7,5],[4,5],[2,0],[7,0],[0,-5],[0,-5],[0,-5],[13,-15],[0,-5],[2,0],[5,0],[4,-5],[2,-5],[9,-5],[5,0],[4,0],[4,5],[9,5],[0,-5],[2,-5],[-6,-10],[2,-10],[13,-10],[9,-5],[5,-5],[13,0],[2,0],[26,-10],[7,0],[0,5],[0,-5],[2,-5],[7,0],[0,-10],[4,-5],[7,-5],[4,0],[13,5],[9,0],[3,0],[13,5],[11,0],[13,0],[7,-5],[4,0],[0,-5],[4,-6],[3,0],[4,-5],[0,-5],[4,-10],[3,0],[4,-5],[4,-5],[11,-5],[9,-15],[0,-5],[3,0],[11,-15],[11,0],[15,-10],[2,-5],[13,-20],[5,0],[6,-10],[7,0],[2,5],[0,5],[2,0],[5,0],[6,5],[14,0],[4,5],[5,5],[2,5],[2,10],[2,10],[2,0],[3,0],[4,-5],[2,0],[9,0],[18,-5],[2,0],[2,0],[4,-15],[3,0],[-3,-5],[-6,-5],[-2,-5],[-3,-5],[-8,-5],[-3,0],[3,-5],[2,-10],[2,-10],[0,-10],[4,0],[14,-10],[2,-5],[15,-10],[0,-5],[0,-20],[0,-6],[2,-5],[3,-10],[0,-5],[2,-5],[-2,-10],[-7,-5],[-7,-10],[-4,-10],[4,-10],[-4,-5],[-9,-20],[-6,-10],[-3,-10],[3,-5],[0,-5],[0,-10],[-9,-15],[-2,-10],[13,-25],[4,-5],[-2,-21],[-2,-5],[-5,-10],[3,-10],[2,-35],[9,-5],[-5,-10],[-2,0],[0,-5],[-4,-10],[2,0],[6,0],[11,-10],[22,-5],[7,-10],[5,-10],[0,-5],[2,0],[2,0],[2,-5],[2,0],[9,0],[2,0],[7,0],[7,-5],[0,-5],[2,-10],[2,0],[15,-20],[29,-21],[7,0],[15,-5],[5,11],[4,0],[4,0],[14,5],[6,-11],[2,-10],[9,5],[11,5],[2,11],[9,-5],[5,0],[4,-21],[0,-25],[7,0],[6,0],[7,-15],[15,-5],[7,-5],[4,-5],[9,-5],[9,10],[11,0],[7,5],[0,-5],[2,-5],[4,-10],[2,-5],[5,0],[2,-5],[4,-5],[11,-35],[7,-5],[7,0],[4,-10],[2,-5],[5,-15],[4,-5],[5,0],[6,-10],[7,-10],[-5,-21],[-2,-5],[2,-5],[3,-30],[8,-10],[5,0],[0,-5],[4,0],[31,5],[22,-10],[7,5],[13,-10],[-2,-5],[0,-10],[0,-10],[0,-5],[0,-5],[13,-15],[9,-20],[6,-20],[14,5],[15,15],[2,5],[2,5],[5,5],[6,5],[12,-10],[11,0],[13,5],[2,5],[2,0],[5,15],[4,-5],[11,0],[4,0],[5,-10],[2,-5],[11,15],[13,0],[2,0],[7,15],[2,0],[5,0],[4,0],[7,10],[4,5],[2,10],[16,15],[9,20],[11,5],[11,-10],[33,10],[9,-5],[22,0],[-5,15],[2,15],[-2,21],[2,0],[0,5],[5,15],[0,25],[-2,5],[-5,10],[-2,5],[-7,5],[0,15],[-2,5],[0,15],[7,5],[2,5],[7,15],[6,55],[2,11],[0,5],[3,0],[4,10],[2,10],[0,10],[0,25],[0,5],[0,20],[38,-10],[8,0],[3,0],[9,-5],[24,-15],[26,-15],[7,-5],[2,0],[7,-10],[6,25],[5,0],[2,0],[13,5],[16,0],[2,20],[0,5],[-2,5],[-11,15],[-3,5],[-4,10],[-5,10],[0,10],[3,10],[2,15],[0,5],[0,5],[2,5],[2,0],[7,5],[7,5],[15,0],[9,10],[4,21],[0,25],[0,5],[2,5],[3,10],[4,10],[4,20],[11,25],[0,5],[0,15],[9,5],[7,30],[0,5],[4,5],[14,5],[11,0],[24,-5],[22,36],[2,5],[4,5],[5,5],[2,0],[4,0],[5,-5],[17,-15],[3,-11],[0,-10],[2,-5],[2,-10],[7,-10],[4,0],[2,-5],[5,-15],[2,-5],[7,-10],[6,0],[5,-5],[4,-5],[9,-10],[0,-5],[4,-5],[2,-5],[-2,-15],[0,-5],[0,-5],[-4,-10],[-2,-10],[0,-5],[-3,-10],[0,-5],[0,-5],[0,-5],[3,0],[4,-10],[2,0],[2,-5],[3,0],[2,0],[6,0],[3,-6],[2,0],[4,0],[2,0],[5,-5],[4,-5],[5,0],[4,0],[7,-5],[2,0],[7,0],[6,0],[2,-5],[3,-5],[2,0],[6,-5],[7,-5],[4,-5],[3,0],[4,-5],[2,-5],[2,-5],[3,-10],[11,-10],[2,-5],[4,0],[7,0],[9,-5],[-3,-10],[-2,0],[0,-5],[5,-5],[-5,-10],[0,-10],[2,-5],[3,-10],[0,-5],[0,-5],[0,-5],[-3,-10],[0,-5],[0,-5],[0,-5],[-2,-5],[0,-5],[0,-5],[0,-11],[-2,0],[-2,-10],[-2,0],[-3,0],[-2,-5],[-2,0],[-2,-5],[0,-5],[0,-5],[-2,-15],[0,-5],[0,-5],[-3,-5],[-2,-5],[0,-5],[0,-5],[0,-5],[0,-10],[0,-10],[-2,0],[0,-5],[-4,-10],[-3,-5],[-2,-5],[-2,-5],[-4,-5],[-5,-10],[-2,-5],[7,-10],[4,-10],[-2,-15],[4,-15],[0,-6],[0,-15],[-2,-15],[0,-5],[-2,-5],[-2,-15],[0,-5],[0,-5],[4,-25],[4,-30],[-6,-5],[-11,-35],[4,-10],[0,-15],[-6,-10],[-7,5],[-2,-16],[-5,-10],[7,-25],[-9,-15],[0,-20],[5,-5],[-7,-25],[-11,-40],[-4,-5],[0,-10],[-20,-15],[-9,-5],[-11,0],[-2,-10],[-5,-5],[2,-5],[-4,-21],[-7,0],[0,-5],[14,-10],[2,-10],[9,-10],[0,-10],[2,-5],[9,-20],[6,-15],[0,-25],[5,-25],[-3,-40],[-2,-11],[-15,6],[-29,-41],[-24,-20],[0,-10],[-24,-25],[6,-15],[11,-10],[5,-25],[9,-15],[8,-10],[-2,-20],[-2,-15],[-2,-16],[-16,-15],[-11,0],[-22,-80],[-11,-10],[-9,-5],[-4,-5],[2,-5],[5,-15],[8,-25],[5,-25],[-2,-21],[6,-35],[-4,-10],[2,-20],[4,0],[5,-10],[0,-20],[9,-15],[4,-25],[-4,-10],[4,-10],[16,-10],[24,15],[50,5],[7,10],[35,-40],[3,0],[46,-81],[11,-10],[7,0],[-3,-20],[-13,-30],[4,-35],[-6,-30],[2,-10],[7,-6],[-11,-40],[4,-20],[-9,-10],[-9,-20],[0,-15],[-4,-5],[-2,-20],[9,-30],[-16,-46],[0,-10],[2,-10],[-13,-10],[-15,-5],[0,-20],[-7,-10],[-9,-20],[-33,30],[-6,20],[-25,30],[-11,21],[-8,0],[-31,-31],[-7,-5],[-9,5],[-11,10],[-11,16],[-9,0],[-8,10],[-5,5],[-6,5],[-16,10],[-24,0],[-2,-15],[-3,-21],[-17,-25],[-9,-5],[-18,30],[-11,16],[-13,-21],[-6,0],[-11,-5],[-7,10],[-16,0],[-11,6],[-4,10],[2,15],[2,15],[-6,15],[-7,20],[-6,25],[-22,15],[-9,5],[-7,20],[-13,-5],[-22,-30],[-18,20],[-4,15],[-7,55],[0,11],[2,10],[7,20],[7,20],[8,10],[9,25],[7,10],[-5,10],[-26,50],[-11,25],[-2,26],[2,15],[-2,5],[-5,-5],[-4,-5],[0,-5],[-7,0],[-6,-5],[-5,-11],[-4,0],[-4,-5],[-3,-5],[-2,-5],[0,-5],[-4,-5],[0,-10],[0,-5],[-5,-15],[-4,-10],[-20,20],[-29,10],[-2,5],[0,5],[2,5],[-22,-10],[-42,-40],[-8,0],[-5,0],[-13,-5],[-18,-20],[-15,0],[-2,-15],[-5,0],[-13,-15],[-33,10],[-13,20],[-11,0],[-7,-30],[0,-10],[5,-10],[-7,-15],[-2,-20],[9,-26],[4,-15],[-11,-25],[-4,-20],[-38,-10],[2,-20],[11,-20],[-6,-20],[-9,-10],[-13,-10],[-5,-20],[-4,-25],[-9,-6],[-4,-15],[-33,-10],[-5,-20],[0,-5],[5,-15],[15,-20],[-7,-15],[7,-30],[-7,-50],[-8,-10],[-11,-5],[4,-31],[11,-20],[-7,-20],[-2,-10],[0,-20],[7,-10],[-11,-30],[0,-20],[4,-5],[13,-25],[3,-31],[4,-5],[-4,-25],[-11,-15],[0,-5],[-7,-5],[-4,-15],[0,-15],[-7,-10],[7,-20],[19,-10],[3,-5],[8,5],[5,-15],[0,-30],[4,-20],[9,-11],[15,11],[7,5],[7,-5],[6,-16],[-2,-10],[5,-10],[24,10],[11,-10],[9,0],[4,20],[7,0],[6,16],[18,-11],[4,16],[18,10],[4,5],[5,-5],[4,-10],[22,-5],[0,-6],[9,-20],[2,-35],[0,-10],[5,-5],[11,10],[4,5],[7,0],[15,-45],[-9,-10],[-2,-10],[4,-60],[-4,-20],[-13,-11],[-16,5],[-4,0],[-9,0],[-17,-20],[-16,-20],[0,-15],[-4,-25],[6,-30],[3,-15],[-14,-5],[-11,-15],[-11,-20],[-11,0],[0,-5],[0,-36],[-6,-15],[-3,-25],[0,-20],[18,-50],[9,-45],[15,-10],[20,-30],[13,-6],[-2,-20],[18,-30],[15,-5],[2,-5],[7,-20],[-7,-20],[18,-15],[-2,-25],[2,-10],[2,0],[0,-20],[11,-5],[9,-15],[9,-46],[-2,-15],[-53,-75],[-11,-50],[-31,-25],[-7,5],[-13,-11],[-9,6],[-22,5],[-13,10],[-9,0],[-9,5],[-13,-5],[-9,-10],[-8,-5],[-23,-41],[-6,5],[-5,10],[-6,0],[-9,26],[-7,0],[-8,15],[-7,-5],[0,5],[-11,10],[2,5],[9,10],[11,15],[0,30],[7,10],[0,15],[8,5],[-4,40],[-7,5],[5,5],[-9,46],[-22,15],[-11,15],[-7,5],[-17,20],[-42,15],[-29,20],[-9,55],[3,5],[6,0],[5,20],[6,0],[0,15],[-2,5],[-4,0],[-5,11],[9,15],[0,15],[-11,5],[-11,20],[-11,15],[-11,10],[6,25],[7,30],[9,20],[2,10],[11,10],[-2,15],[2,6],[-4,0],[4,25],[-4,5],[-20,0],[-2,5],[-14,20],[-8,5],[-7,15],[-15,15],[-18,50],[7,20],[-14,5],[-42,-20],[-4,-5],[-4,-10],[2,-15],[0,-5],[-13,-10],[-5,25],[-6,5],[-7,-10],[-20,55],[-17,-15],[-9,-5],[-20,-20],[-7,0],[0,-10],[-9,-15],[-26,-25],[-7,10],[-4,-5],[-2,0],[-11,0],[-7,-5],[-11,10],[-7,-15],[-8,0],[-5,0],[-4,-5],[-11,0],[-2,0],[-3,-15],[-8,-15],[-20,-25],[-7,0],[-13,-10],[-16,-21],[-19,-5],[-11,-10],[-7,0],[-15,-30],[-18,5],[-18,15],[-15,36],[-18,10],[-9,20],[-8,-10],[-5,5],[-31,-51],[11,-40],[-11,-10],[0,-10],[-8,-10],[-5,-15],[2,-10],[11,-5],[7,-5],[0,-35],[-2,-10],[-16,-25],[-6,-41],[0,-15],[-2,-10],[-27,-10],[-18,15],[-11,-5],[-15,20],[-2,15],[-11,15],[-11,-15],[-5,-20],[-11,5],[-9,-5],[-6,-5],[-5,-10],[-8,0],[-3,-5],[0,-10],[-11,-5],[-6,-10],[-13,-5],[-27,10],[-4,0],[-7,-5],[-20,40],[-6,-5],[-18,10],[-13,-10],[-7,5],[-15,-5],[-2,5],[-11,5],[-9,15],[-5,0],[-9,10],[-6,0],[-5,15],[-4,11],[-7,0],[-4,0],[-11,-21],[-26,36],[-5,10],[-4,5],[-7,15],[-2,5],[-5,10],[-4,5],[-4,15],[-14,25],[0,5],[0,5],[0,10],[-4,5],[-4,0],[-3,5],[0,10],[0,5],[-4,5],[-2,20],[0,15],[-2,5],[0,6],[-3,10],[0,10],[0,5],[-2,5],[-4,5],[-5,10],[-4,5],[-7,30],[-8,15],[-25,10],[-9,20],[-6,0],[-7,5],[-22,10],[-4,10],[4,20],[-4,15],[9,10],[6,26],[-4,10],[0,30],[-5,40],[-6,20],[-2,15],[-9,15],[-5,25],[9,56],[-2,25],[9,25],[-5,20],[3,25],[-3,30],[0,30],[11,15],[5,16],[-5,50],[-4,5],[-26,0],[-3,20],[27,5],[4,65],[-4,35],[4,15],[0,6],[-9,-6],[-8,-15],[-47,-35],[-11,-25],[-9,-20],[3,-15],[-5,-20],[0,-30],[-13,-15],[-11,-31],[-9,0],[-24,16],[-4,10],[-14,5],[-4,30],[-7,5],[0,10],[-6,0],[-5,10],[-4,0],[-9,25],[-7,0],[-4,35],[2,10],[7,5],[0,25],[-11,5],[-9,21],[-4,5],[-16,-31],[-9,5],[-26,-5],[-5,10],[-57,-10],[-13,-15],[-9,0],[-22,-20],[-18,0],[-8,-25],[0,-20],[-11,-20],[2,-10],[4,-15],[-2,-40],[-4,-5],[-3,-21],[5,-15],[6,-10],[-4,-10],[-9,-20],[-15,-20],[-7,-5],[-11,-5],[-13,0],[-5,-10],[-4,0],[4,-45],[-2,-25],[5,-10],[8,-15],[16,-21],[7,-15],[8,-5],[5,-10],[6,10],[5,0],[4,-25],[7,0],[2,-15],[0,-15],[4,-20],[-8,-10],[6,-5],[-4,-20],[-9,-15],[7,-30],[4,-10],[7,-6],[0,-10],[-7,-10],[-2,-15],[-5,0],[3,-10],[-3,-10],[-6,-5],[4,-10],[-2,-20],[4,-5],[11,-45],[16,-5],[13,-5],[4,-15],[-2,-15],[7,-31],[-16,-30],[-2,-10],[2,-20],[9,-20],[5,0],[-7,-20],[-2,-30],[-2,-5],[-20,-15],[-7,-25],[5,-15],[0,-41],[-27,-40],[-9,-40],[-19,-20],[0,-25],[-5,-20],[-15,-15],[4,0],[2,-21],[-9,-30],[5,-25],[-7,-20],[5,-15],[0,-25],[-5,-25],[-4,-10],[-16,0],[-8,5],[-22,-15],[-9,-5],[4,-26],[-6,-15],[-3,-35],[-11,-15],[-15,-5],[-11,-10],[-9,-45],[0,-15],[-7,-10],[0,-25],[7,-10],[-7,-15],[0,-26],[-17,-20],[-11,-25],[-20,5],[-11,5],[-16,-5],[-4,-5]],[[3875,8647],[0,5],[2,0],[2,0],[2,5],[3,0],[2,5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[5,0],[4,5],[2,0],[5,0],[22,5],[6,0],[3,0],[2,0],[4,0],[2,0],[0,5],[3,0],[2,0],[2,0],[0,5],[2,0],[2,5],[3,5],[2,0],[2,5],[4,0],[3,0],[4,5],[2,0],[2,0],[5,5],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,0],[2,0],[7,5],[4,0],[3,0],[2,0],[2,0],[0,5],[2,0],[2,0],[3,0],[2,5],[2,0],[2,0],[3,5],[2,0],[4,5],[2,0],[3,0],[0,5],[2,0],[0,5],[0,5],[2,5],[2,0],[0,5],[0,5],[2,0],[3,0],[0,5],[2,0],[0,6],[2,0],[2,0],[0,5],[2,0],[3,5],[2,0],[2,0],[0,5],[2,0],[2,0],[0,5],[3,0],[0,5],[2,5],[2,5],[0,10],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[2,5],[0,5],[3,5],[2,10],[0,5],[2,5],[0,5],[2,0],[2,0],[3,5],[2,0],[2,0],[2,0],[2,0],[3,0],[4,-5],[4,0],[3,0],[2,0],[2,0],[0,-5],[2,0],[3,-5],[2,-5],[2,-5],[2,0],[0,-5],[2,0],[3,0],[2,0],[2,0],[4,0],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[2,0],[2,0],[2,5],[5,5],[2,0],[2,0],[0,5],[2,0],[2,5],[3,0],[2,5],[2,0],[2,0],[2,0],[5,0],[4,0],[2,5],[3,0],[2,0],[2,0],[4,0],[3,0],[2,-5],[2,0],[2,0],[2,0],[5,5],[4,0],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[2,0],[0,-5],[2,0],[3,0],[0,-5],[2,0],[4,-5],[2,-5],[3,-5],[2,-5],[2,0],[2,-5],[2,0],[0,-5],[3,0],[2,-5],[2,-10],[2,0],[2,-5],[3,-15],[2,-5],[2,-5],[0,-5],[0,-5],[2,0],[0,-5],[-2,-5],[0,-5],[0,-5],[-2,0],[-2,-11],[-3,-5],[0,-5],[-2,0],[0,-5],[0,-5],[2,0],[0,-5],[0,-5],[0,-5],[3,-5],[0,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,0],[2,-5],[3,0],[0,-5],[2,0],[2,-5],[2,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[4,0],[5,0],[2,0],[2,0],[5,0],[2,0],[2,0],[2,0],[3,0],[2,0],[0,-5],[4,0],[5,-5],[4,0],[0,-5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[0,5],[3,0],[2,5],[2,5],[0,5],[2,0],[0,5],[0,5],[2,5],[0,5],[0,5],[0,5],[0,5],[3,0],[0,5],[2,0],[2,5],[2,0],[0,5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[4,-5],[4,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[4,0],[5,0],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[6,0],[2,0],[5,0],[2,0],[2,0],[2,0],[3,0],[2,0],[6,-5],[3,0],[2,0],[2,-5],[4,-5],[3,0],[0,-5],[2,0],[2,0],[0,-5],[2,0],[2,0],[5,0],[2,-5],[2,0],[3,0],[2,5],[2,0],[2,0],[2,0],[0,5],[3,0],[2,0],[4,0],[2,0],[5,0],[2,0],[2,5],[2,0],[5,0],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[7,5],[2,0],[0,5],[2,0],[2,5],[2,5],[3,0],[2,0],[2,5],[2,5],[2,0],[5,5],[0,5],[2,0],[0,5],[2,0],[2,5],[3,-5],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,6],[2,0],[3,-6],[2,0],[2,0],[2,-5],[2,-5],[3,-5],[2,0],[2,-5],[2,0],[0,-5],[2,0],[3,0],[0,-5],[4,0],[2,0],[0,-5],[2,0],[3,0],[2,0],[2,0],[0,5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,5],[2,0],[3,5],[2,0],[2,5],[2,5],[2,0],[0,5],[3,0],[0,5],[2,6],[0,5],[2,5],[0,10],[0,5],[0,5],[0,5],[0,5],[0,5],[2,5],[0,5],[0,5],[2,0],[0,5],[3,5],[2,5],[2,0],[0,5],[4,5],[3,0],[0,5],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,0],[5,0],[8,-5],[3,0],[2,0],[2,0],[2,0],[2,5],[5,0],[4,0],[2,0],[3,0],[2,0],[2,0],[2,0],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[0,5],[0,5],[3,0],[2,5],[2,0],[2,0],[2,0],[0,5],[3,0],[2,5],[2,0],[2,5],[2,0],[3,0],[2,0],[2,5],[2,0],[2,0],[3,0],[2,-5],[2,0],[2,0],[5,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[0,5],[2,0],[3,5],[2,0],[2,5],[0,5],[2,0],[0,5],[2,5],[3,0],[0,5],[2,5],[2,0],[2,0],[2,5],[3,0],[2,0],[6,5],[3,0],[2,0],[0,6],[2,0],[2,5],[2,5],[0,5],[3,5],[2,5],[2,5],[2,10],[0,5],[2,0],[0,5],[3,5],[2,0],[0,5],[2,0],[2,5],[2,5],[3,0],[2,0],[0,5],[2,0],[5,0],[0,5],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,-5],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,-5],[2,0],[2,0],[0,-5],[2,0],[0,-5],[0,-5],[3,0],[0,-5],[0,-5],[2,-5],[0,-5],[0,-5],[0,-5],[2,-5],[0,-5],[0,-5],[2,0],[0,-5],[2,0],[3,0],[2,0],[2,0],[2,5],[2,5],[3,0],[0,5],[2,0],[2,10],[2,0],[0,5],[2,0],[0,5],[3,0],[2,5],[2,0],[2,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[2,0],[4,5],[5,0],[2,5],[2,0],[2,0],[5,0],[2,0],[2,0],[2,0],[3,-5],[0,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,0],[2,-5],[3,0],[2,0],[2,5],[2,0],[2,0],[3,0],[2,0],[2,0],[4,5],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[0,-5],[4,0],[2,0],[2,0],[3,0],[2,0],[2,-5],[2,0],[2,0],[3,-5],[2,0],[4,-5],[3,0],[2,-5],[2,-5],[2,0],[0,-5],[-2,-6],[0,-5],[0,-5],[-2,-10],[0,-5],[-2,-10],[0,-5],[0,-5],[0,-5],[0,-5],[2,-5],[2,-5],[0,-5],[2,-5],[2,-5],[3,-5],[2,0],[0,-5],[2,0],[2,0],[2,-5],[3,0],[4,0],[2,-5],[2,0],[3,0],[2,-5],[2,-5],[2,0],[2,-5],[3,0],[0,-5],[2,-5],[2,0],[2,-5],[0,-5],[2,-5],[3,0],[2,-5],[2,-5],[2,-5],[2,0],[3,-5],[2,0],[2,0],[2,-5],[2,0],[3,0],[2,0],[2,0],[4,0],[3,-5],[2,0],[2,0],[7,0],[2,0],[2,5],[2,0],[3,0],[2,0],[4,0],[5,0],[4,0],[7,-5],[2,0],[4,0],[2,0],[3,0],[2,0],[2,0],[2,-5],[2,0],[3,0],[2,0],[2,0],[2,0],[5,-5],[2,0],[2,0],[2,0],[5,0],[4,0],[2,-5],[2,0],[3,0],[2,0],[2,-5],[4,0],[0,-5],[3,0],[0,5],[2,0],[2,5],[0,5],[2,0],[0,5],[0,5],[3,5],[0,5],[2,0],[0,5],[2,0],[0,5],[2,0],[0,5],[2,0],[3,5],[2,0],[2,5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[0,-5],[2,0],[2,0],[5,-5],[4,-5],[2,-5],[3,0],[2,0],[2,-5],[2,0],[5,-5],[2,0],[6,-5],[5,-5],[2,0],[2,0]],[[5982,9380],[2,0],[3,0],[0,5],[2,0],[2,0],[2,6],[2,0],[3,0],[2,0],[0,5],[2,0],[2,5],[2,0],[0,5],[5,5],[2,0],[4,5],[0,5],[3,0],[0,5],[2,0],[0,5],[2,0],[2,0],[2,0],[3,0],[2,0],[4,-5],[5,0],[2,-5],[2,0],[2,-5],[5,0],[0,-5],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[0,5],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,5]],[[6110,9421],[4,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,-5],[2,0],[4,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[5,0],[2,-5],[2,0],[2,0],[3,0],[2,0],[2,0],[0,-5],[2,0],[2,0],[3,-5],[4,0],[2,0],[0,-5],[2,0],[3,0],[2,-6],[2,0],[2,0],[0,-5],[2,0],[3,0],[0,-5],[2,0],[0,-5],[2,-5],[2,0],[0,-5],[2,0],[3,0],[2,-5],[4,0],[2,-5],[3,0],[2,-5],[4,-5],[2,0],[3,0],[2,-5],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,5]],[[6434,9230],[4,0],[3,0],[2,0],[4,0],[2,0],[3,0],[0,-5],[2,0],[2,-5],[2,-5],[2,0],[5,-5],[2,-5],[5,-5],[2,0],[0,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[4,0],[5,5],[2,0],[2,0],[2,5],[5,0],[2,5],[2,0],[2,0],[5,0],[0,5],[4,0],[2,0],[3,0],[2,0],[4,5],[9,5],[11,5],[2,0],[2,5],[3,0],[11,0],[4,0],[2,0],[3,0],[0,5],[2,0],[2,0],[7,5],[2,5],[4,0],[7,10],[4,0],[2,5],[7,5],[4,0],[5,5],[2,5],[2,0],[2,0],[3,5],[2,0],[2,5],[4,5],[3,5],[2,0],[2,5],[4,5],[5,5],[2,5],[2,0],[2,5],[3,0],[2,5],[2,0],[5,5],[4,0],[11,10],[4,5],[3,5],[4,0],[2,0],[5,5],[2,0],[2,5],[4,0],[7,5],[7,5],[4,5],[4,0],[5,5],[2,0],[2,0],[5,0],[0,6],[2,0],[2,0],[2,0],[5,0],[2,0],[0,-6],[2,0],[2,0],[5,0],[11,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[7,0],[4,0],[2,0],[5,0],[2,0],[2,0],[4,0],[3,0],[2,0],[2,-5],[2,0],[2,0],[3,0],[2,0],[2,-5],[2,0],[2,0],[3,0],[2,-5],[2,0],[2,-5],[2,0],[3,0],[2,-5],[2,-5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[4,0],[7,0],[2,0],[2,0],[3,0],[2,0],[6,0],[5,0],[2,0],[2,0],[7,-5],[4,-5],[2,0],[3,0],[2,-5],[2,0],[2,-5],[2,0],[3,-5],[2,0],[2,-5],[2,-5],[2,-5],[3,0],[2,-5],[2,0],[0,-5],[7,-5],[4,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[0,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,-5],[2,0],[3,0],[2,-5],[2,0],[2,0],[2,0],[3,0],[0,5],[2,0],[2,0],[0,5],[4,5],[3,0],[0,5],[2,0],[2,0],[2,0],[2,0],[0,-5],[3,0],[6,0],[5,-5],[2,0],[0,-5],[2,0],[0,-5],[2,0],[0,-5],[0,-5],[2,0],[3,-5],[2,-5],[4,-5],[3,-5],[4,-5],[2,-5],[2,-5],[5,0],[6,5],[3,-10],[13,10],[2,0],[9,5],[17,-5],[16,-5],[2,0],[68,10],[31,10],[18,0],[26,-15],[391,-307],[17,-25],[110,-216]],[[7759,8396],[-2,0],[-3,0],[-2,-5],[-9,-5],[-4,-5],[-7,-5],[0,-5],[5,20],[-13,5],[-9,5],[-7,0],[2,10],[-8,0],[0,5],[-5,5],[5,15],[-5,5],[2,15],[3,0],[6,-10],[2,0],[9,-5],[13,-5],[5,-5],[4,0],[2,-5],[3,-5],[2,-5],[4,-5],[5,-5],[2,-5],[0,-5]],[[5354,3185],[-7,40],[9,10],[-2,20],[15,11],[0,5],[-4,5],[-2,15],[-7,15],[2,10],[18,35],[-7,35],[0,15],[7,-5],[9,0],[4,-10],[22,5],[7,10],[13,-10],[27,20],[24,-10],[4,10],[16,55],[8,0],[9,16],[13,35],[9,10],[7,15],[11,10],[0,15]],[[7060,1768],[-4,-40],[-16,-5],[-13,-15],[-7,-15],[-13,-10],[-4,-15],[-13,-25],[-14,-51],[-9,0],[-8,0],[-18,-15],[-9,-15],[-2,-10],[-7,0],[-17,-10],[-9,-10],[-13,-10],[-16,-15],[5,-15],[13,-50],[20,-76],[0,-15],[-11,-40],[-5,-10],[-8,-10],[0,-35],[0,-15],[-9,-15],[-31,-6],[-11,6],[-11,0],[-11,-16],[-11,0],[-24,-30],[-16,0],[-4,-5],[-7,-10],[-2,-15],[4,-10],[-2,-10],[-18,-30],[-4,-35],[4,-15],[18,-31],[13,-25],[5,-75],[6,-35],[-11,-5],[-2,-15],[-7,-10],[-2,0],[-11,5],[-4,-5],[0,-25],[-5,-5],[-2,-5],[-9,-6],[-19,0],[2,-30],[-2,-10],[-7,5],[-2,-5],[-2,-5],[-3,10],[0,-15],[11,-20],[44,-25],[3,-50],[4,-10],[-11,-25],[7,-15],[11,-5],[4,-11],[-7,-50],[18,5],[7,-15],[15,0],[13,10],[7,-15],[7,-10],[2,-5],[-2,-5],[4,0],[7,0],[4,0],[7,0],[2,0],[-2,-20],[19,-20],[0,-10],[5,-5],[0,10],[7,5],[8,-10],[0,-10],[-4,-15],[4,-36],[22,16],[5,-5],[-5,-11],[5,-10],[-9,-5],[-7,-20],[-8,0],[-3,-5],[7,-10],[-7,-10],[3,-10],[-14,-15],[-13,-35],[-2,5],[-18,-5],[-4,-5],[0,-10],[-5,-10],[3,-10],[-5,-5],[-6,-20],[0,-20],[4,-16],[2,-10],[-9,-5],[7,-5],[-13,-10],[-2,-15],[-7,0],[-4,-15],[0,-5],[-7,-5],[0,-10],[4,-25],[-8,-15],[2,-5],[-5,-30],[-4,0],[9,-10],[-7,-10],[-6,0],[-16,5],[-7,-15],[-2,-5],[-31,10],[-13,15],[-9,-5],[-2,5],[5,10],[2,35],[4,0],[-2,15],[-7,-5],[-8,5],[2,5],[-9,15],[-11,-15],[-13,5],[-3,-5],[3,-5],[-7,-15],[-2,5],[-5,-5],[-6,15],[-13,5],[2,15],[-13,15],[0,5],[-7,0],[-9,5],[-4,-5],[-18,-10],[-11,-10],[-4,-10],[0,-5],[-7,-5],[0,-10],[-18,5],[-19,-15],[4,55],[40,96],[15,15],[13,15],[-4,10],[-2,5],[-11,-10],[-7,15],[2,5],[-6,65],[-11,35],[-7,0],[-2,20],[-2,0],[-3,5],[5,5],[4,16],[0,10],[-11,30],[-9,25],[-4,20],[-13,0],[-27,45],[-6,25],[0,25],[9,26],[0,65],[-7,20],[-27,-10],[-13,10],[-15,10],[-9,20],[-11,5],[-13,20],[-11,15],[-5,15],[-6,10],[0,10],[-2,6],[-3,5],[-2,0],[-2,5],[-11,10],[-7,15],[-17,0],[-9,0],[-5,0],[-8,15],[-5,-5],[-2,0],[-9,5],[-15,0],[-7,5],[-7,0],[-2,0],[0,-5],[-2,-5],[-4,-5],[-9,0],[15,95],[9,20],[20,51],[31,15],[17,45],[5,40],[6,-5],[5,15],[-16,15],[16,20],[20,-15],[24,71],[-7,70],[-11,0],[-11,20],[-20,15],[-15,35],[-2,-5],[-5,10],[-2,5],[0,5],[-2,5],[-7,0],[0,5],[-6,10],[-5,5],[-15,15],[-9,-20],[-4,-10],[-38,-5],[-13,15],[-7,10],[-13,10],[-2,0],[-7,0],[-6,0],[-5,5],[-6,16],[-31,85],[-40,-60],[-20,-66],[-37,20],[-9,5],[-7,0],[-4,0],[-2,0],[-5,0],[-2,11],[-2,5],[-2,0],[-2,5],[0,10],[-5,0],[2,5],[0,5],[-4,5],[-4,-5],[-5,0],[-4,0],[-5,-5],[-4,0],[-24,20],[-5,15],[-17,35],[-60,-5],[-20,0],[0,5],[-4,20],[0,30],[-11,10],[-5,15],[-15,26],[-7,0],[3,5],[-3,5],[3,10],[6,5],[7,5],[0,5],[0,15],[2,0],[7,5],[-3,10],[-6,0],[-11,0],[-7,5],[-4,0],[-2,0],[-3,0],[3,10],[-5,5],[2,5],[-4,10],[-4,0],[-5,0],[-6,-5],[-3,0],[-2,5],[-4,5],[-5,5],[-6,60],[-14,36],[-11,10],[-11,0],[3,5],[-5,25],[-26,30],[-11,30],[-7,70],[-24,20],[-11,-10],[-7,0],[-9,10],[-17,21],[-20,15],[-13,5],[-20,0],[-22,15],[-5,15],[-2,25],[-2,20],[-7,0],[-13,10],[-17,5],[-7,5],[-2,15],[-2,10],[4,5],[4,15],[5,0],[0,15],[17,15],[-13,51],[-35,70],[0,20],[-13,30],[4,15],[5,5],[19,10],[-4,16],[7,15],[-3,30],[7,15],[22,10],[4,30],[9,10],[11,25],[-2,15],[0,40],[-4,46],[4,10],[2,10],[11,20],[-6,30],[-3,60],[-11,36],[22,45],[-15,35],[-2,15],[11,30],[-11,30],[-11,10],[-2,15],[0,10],[6,31],[-4,5],[0,15],[2,10],[11,10],[4,20],[-2,10],[-9,5],[3,25],[-11,10],[-9,10],[-2,20],[-5,15],[-9,10],[-15,-5],[-2,5],[-16,-5],[-22,-10],[-9,-10],[-6,0],[-16,-5],[-11,-15],[-13,0],[-6,-15],[-9,5],[-9,-5]],[[6637,728],[4,-5],[16,0],[6,45],[-4,5],[-2,20],[4,36],[-2,0],[-22,5],[-20,-96],[20,-10]],[[628,2642],[-62,46],[-13,10],[-11,0],[-5,5],[-4,20],[-7,5],[-11,-5],[-4,0],[-2,5],[-7,10],[-9,10],[-13,-15],[4,-10],[-11,-10],[5,-15],[4,-5],[13,-5],[12,-20],[6,5],[2,-5],[5,-5],[2,5],[4,0],[-4,-26],[24,-25],[0,5],[7,-10],[55,-35]],[[608,2577],[-27,-95]],[[581,2482],[-46,-141],[-62,50],[-24,20],[-15,5],[-5,10],[-22,20],[-13,21],[-2,10],[-13,15],[2,5],[-7,5],[2,5],[-2,0]],[[374,2507],[-2,10],[4,10],[9,10],[0,10],[7,15],[2,0],[2,20],[5,5],[2,0],[0,10],[-5,5],[3,5],[2,5],[-2,0],[2,5],[2,0],[2,5],[7,5],[4,0],[0,5],[7,5],[7,16],[0,5],[4,5],[7,10],[2,5],[0,15],[2,20],[2,0],[2,10],[20,30],[0,5],[-11,25],[-6,10],[-5,25],[-2,5],[-4,-10],[-3,0],[-4,-5],[-9,0],[-31,56],[-48,60],[-2,-5],[4,-10],[-2,0],[-11,10],[-7,5],[-13,25],[-4,20],[-69,30],[-6,5],[13,45],[9,16],[2,20],[20,40],[2,5],[2,10],[-4,20],[-20,30],[4,20],[-9,15],[3,15],[-3,15],[9,11],[44,70],[36,141],[17,35],[38,70],[11,-15],[2,0],[20,45],[-9,10],[15,30],[-39,66],[-60,95],[24,35],[9,25],[29,41],[7,5],[15,20],[11,10],[15,30],[11,0],[20,20],[9,10],[2,20],[20,25],[5,0],[11,15],[0,10],[11,21],[-3,0],[9,10],[5,-5],[4,5],[11,25],[9,5],[0,5],[4,10],[2,0],[18,15],[13,35],[51,75],[24,31],[0,10],[5,5],[2,0],[-5,5],[0,15],[3,0],[17,20],[11,15],[29,20],[4,0],[20,25],[38,35],[9,0],[30,20],[16,21],[6,5],[5,15],[6,10],[7,15],[11,-5],[4,5],[12,5],[-3,25],[-6,0],[4,5],[11,5],[9,0],[11,0],[2,5],[9,15],[7,15],[-3,15],[-6,10],[15,25],[13,15],[7,-5],[4,0],[25,16],[15,5],[13,15],[3,0],[17,30],[-2,5],[2,10],[0,5],[22,30],[7,5],[0,25],[13,45],[-35,51],[-16,15],[0,5],[-8,50],[22,20],[-3,40],[7,40],[37,101]],[[1110,5195],[12,-5],[2,-15],[35,-5],[64,35],[9,5],[17,10],[11,10],[22,40],[18,10],[13,20],[16,6],[9,10],[15,15],[11,5],[26,20],[14,0],[11,0],[17,15],[7,0],[13,10],[13,0],[14,0],[6,15],[36,70],[2,25],[33,36],[13,10],[37,30],[80,50],[-2,-10],[2,-10],[4,-5],[-13,-75],[0,-51],[9,-5],[42,-50],[0,-15],[-5,-35],[0,-5],[3,0],[2,5],[0,-5],[-2,-25],[-14,-56],[16,20],[31,-5],[6,-10],[51,-80]],[[2005,5481],[67,81]],[[2788,2567],[-44,-80],[-27,-46],[0,-45],[18,-30],[-6,-5],[2,-10],[-11,-5],[-9,-10],[6,-50],[0,-10],[-11,-10],[-6,-5],[-2,5],[-5,-5],[-13,-26],[0,-10],[-7,-5],[-15,-30],[-15,-5],[-7,-20],[-2,-25],[-2,-5],[-12,-10],[-4,-5],[-7,-10],[-11,-5],[-11,0],[-8,0],[-3,0],[-2,-20],[-4,-20],[-2,-20],[4,-6],[-7,-5],[-8,-20],[-3,-10],[-15,-25],[-9,-10],[-18,-15],[-17,-25],[-18,-10],[-4,-5],[-5,5],[-11,5],[-15,-10],[-11,-15],[-13,-10],[-3,-5],[-6,-5],[-9,-5],[-9,-5],[-2,-5],[-13,-5],[-2,-5],[-3,5],[0,5],[0,5],[-2,0],[-2,5],[-2,10],[-7,10],[-2,10],[-4,15],[-5,0],[-2,10],[-2,0],[-5,5],[-2,5],[-2,0],[-4,5],[0,10],[0,5],[-5,10],[0,10],[0,10],[0,10],[-2,10],[0,5],[0,10],[-2,0],[-3,5],[-4,0],[-2,0],[-2,5],[-3,5],[0,11],[0,5],[0,5],[0,5],[-2,5],[0,5],[-2,5],[-9,15],[-2,0],[0,5],[-2,10],[-2,5],[-3,10],[-2,5],[0,5],[-4,5],[-2,0],[0,5],[0,5],[-3,20],[0,5],[-2,5],[-9,15],[-8,10],[-14,25],[-4,5],[-2,5],[-7,16],[-4,5],[-3,5],[0,10],[-2,30],[0,5],[-2,10],[-2,10],[-2,10],[-3,0],[-6,15],[-5,10],[-11,10],[-2,5],[-6,5],[-5,5],[-6,5],[-5,10],[-4,10],[0,5],[0,5],[0,10],[0,5],[-2,11],[-3,5],[0,10],[0,10],[-2,5],[0,5],[-2,10],[0,5],[0,15],[0,10],[0,5],[0,10],[0,5],[0,5],[-2,10],[-2,10],[-5,10],[-6,10],[-5,10],[-4,5],[-2,5],[-3,5],[-2,0],[-2,0],[0,5],[-5,0],[-4,-5],[-2,0],[-2,0],[-5,0],[-6,0],[-5,0],[-6,0],[-3,0],[-2,0],[-2,0],[-2,5],[-2,0],[-3,5],[-2,5],[-6,26],[-5,10],[-2,5],[-4,5],[-3,0],[-2,5],[-2,5],[-2,5],[0,5],[0,5],[0,5],[9,30],[0,5],[2,5],[0,15],[-2,10],[0,5],[0,10],[-3,10],[-2,5],[-2,10],[-2,0],[-2,5],[-5,5],[-4,5],[-2,0],[-3,0],[-2,5],[-4,5],[-5,10],[-2,5],[-4,11],[-9,15],[-2,0],[-3,10],[-4,5],[-84,165]],[[1906,3059],[-306,136],[-359,10],[-205,-201],[-201,-60],[-181,-221],[-26,-81]],[[1847,4612],[-2,-10],[-5,-5],[0,-10],[-6,-10],[0,-5],[11,-10],[6,0],[9,5],[4,-5],[5,5],[4,0],[7,0],[4,5],[13,25],[25,10],[4,0],[7,0],[11,-10],[17,-25],[14,-10],[11,0],[4,0],[7,-5],[2,5],[4,-5],[7,15],[-5,5],[3,10],[-3,5],[0,5],[23,55],[4,10],[9,20],[-5,10],[-8,11],[2,10],[-11,10],[-9,10],[-7,15],[-2,0],[-4,-5],[-3,0],[-2,0],[0,-5],[-2,0],[-2,10],[4,5],[0,10],[-6,10],[-3,10],[-4,10],[-7,0],[3,10],[-7,5],[-7,-20],[7,0],[-11,-30],[-7,-10],[-8,-10],[-18,-25],[-2,-10],[4,0],[-2,-5],[-16,-31],[-2,-15],[-13,-15],[4,-10],[-2,-5],[-4,-5],[-5,0],[-2,0],[-2,0],[-4,-5],[-3,0],[-2,-5],[-4,10],[-13,-15],[-3,10],[-4,-5],[-2,5]],[[471,2653],[-6,-16],[11,-10],[2,0],[0,5],[-2,5],[0,5],[2,5],[2,6],[2,5],[16,-16],[4,11],[-18,25],[-4,-10],[-2,0],[-7,-15]],[[2144,5702],[161,171],[84,-35]],[[5354,3185],[-9,-5],[-4,0],[-9,10],[-9,0],[-9,-5],[-22,-20],[-6,-10],[-7,-25],[-18,-20],[-4,-15],[-7,-10],[-11,-10],[-11,-16],[-4,-10],[-9,0],[-7,0],[-8,-10],[-9,0],[-7,15],[-9,-15],[-4,-10],[-4,-20],[-5,-15],[-11,-20],[-9,-5],[5,-10],[4,0],[5,-10],[8,0],[11,-10],[5,-5],[9,10],[2,-10],[11,-15],[2,-10],[0,-10],[-7,-15],[0,-15],[11,-16],[-8,-10],[-3,-20],[-2,-15],[-13,-10],[-11,5],[-13,-25],[-18,-20],[-11,-15],[-20,15],[-22,-15],[-6,-15],[8,-20],[-2,-5],[5,-20],[-14,-15],[7,-15],[-7,-6],[-15,6],[-9,-6],[0,-20],[-18,-5],[-4,0],[-7,5],[-8,-15],[-18,-20],[2,-5],[-6,-15],[2,-5],[0,-10],[4,-5],[-6,-15],[-16,-15],[0,-20],[-9,-15],[3,-15],[-16,-20],[-13,-21],[-11,5],[-16,-10],[-17,-15],[-9,0],[-31,-10],[-9,5],[-20,20],[-15,5],[-7,0],[-24,-35],[-4,-5],[-11,-10],[-5,-25],[-6,-15],[-5,-15],[-15,-5],[-20,-45],[-24,-20],[0,-26],[-5,-5],[-6,0],[2,-15],[13,-20],[27,-5],[4,-15],[18,0],[6,-55],[7,-15],[9,0],[9,-30],[19,-20],[14,0],[8,-71],[18,-45],[2,-30],[-2,-5],[4,-25],[9,-5],[18,-41],[0,-25],[-15,-15],[-3,-25],[-13,-20],[-2,-20],[0,-20],[6,-15],[0,-30],[5,0],[-11,-36],[-13,-20],[-11,-10],[-7,10],[-22,-10],[-26,-25],[2,-15],[-2,-15],[2,-10],[-2,-25],[-9,-10],[-3,-10],[-4,-10],[-18,0],[-4,-10],[-4,0],[-14,-10],[-8,0],[-11,-5],[-7,0],[-15,5],[-20,-15],[-7,-5],[-20,0],[-11,-11],[-22,0],[-2,-10],[2,-20],[-9,-25],[0,-15],[-2,-30],[-15,-30],[2,-15],[-2,-10],[4,-15],[0,-20],[9,-36],[9,-45],[4,-5],[2,-10],[-6,-10],[-16,-5],[-6,-10],[-22,-40],[4,-5],[9,-25],[-16,-31],[5,-15],[-2,-20],[-11,-5],[-14,5],[-2,-20],[-13,-30],[0,-10],[-11,-20],[-26,15],[-7,0],[-13,-5],[-11,0],[-7,-5],[-4,-5],[-20,10],[-18,-5],[-17,-5],[-7,5],[-7,0],[-17,-5],[-22,5],[-7,-10],[0,-10],[-4,-20],[-7,-5],[-13,-30],[-2,-16],[-36,-30],[0,-5],[5,-10],[2,-30],[-7,-10],[0,-10],[-6,-10],[6,-20],[-2,-25],[-13,-5],[-7,-56],[7,-15],[13,-35],[-9,-30],[-4,-5],[-11,0],[-5,-15],[-13,20],[-17,-5],[-20,10],[-9,0],[-11,15],[-22,10],[-7,0],[-11,-15],[-9,-5],[-13,-20],[-9,-10],[-13,15],[-4,20],[-11,15],[-22,15],[-18,35],[-40,16],[-6,5],[-11,-46],[-16,-20],[-2,-20],[-33,0],[-15,25],[-3,20],[-8,10],[4,66],[-7,15],[-11,10],[-11,10],[-17,0],[-16,10],[-9,20],[-2,20],[-6,10],[-14,35],[-8,10],[-11,5],[-7,0],[-4,-10],[-9,0],[-14,-15],[-15,-10],[-37,10],[-14,0],[-8,-15],[-36,10],[-15,0],[-13,20],[0,25],[-5,26],[-9,10],[-17,0],[-11,-5],[-27,0],[-4,-5],[-5,-5],[-4,-21],[-4,-20],[2,-25],[6,-45],[-6,-25],[-11,-10],[-7,10],[-15,0],[-11,5],[-11,25],[-5,-5],[-9,-15],[-8,0],[-9,5],[-11,15],[-7,-10],[0,-15],[-9,-10],[-8,0],[-22,-15],[-7,-10],[-7,-15],[5,-40],[2,-16],[-7,-15],[-6,0],[-9,5],[-13,5],[-7,-15],[-22,-5],[-9,-15],[-2,-5],[-15,-40],[-16,-25],[-11,0],[-2,-15],[-13,-5],[-9,-10],[-11,0],[-9,10],[-9,-15],[0,-15],[-15,-31],[-18,-10],[-15,21],[-5,5],[-17,10],[-11,-5],[-11,20],[0,20],[-11,5],[-16,15],[-26,-20],[-18,-5],[-13,10],[-5,25],[-22,5],[-8,-5],[-9,15],[-7,10],[-9,-10],[-4,-10],[-9,-15],[0,-10],[-9,-25],[-9,-35],[-13,-5],[-31,-61],[-8,0],[-3,20],[-6,5],[-20,-15],[-16,5],[-8,5],[-7,-10],[-7,0],[-11,-5],[-4,-10],[0,-15],[-11,-10],[-2,-5],[-9,-5],[-4,-15],[-9,-5],[-5,-30],[0,-15],[7,-20],[-9,-15],[-13,-5],[-16,5],[-11,15],[-8,0],[-29,40],[0,10],[7,5],[-3,10],[-6,10],[-7,5],[-9,0],[-15,-10],[-13,-10],[-3,-5],[-6,0],[-7,-10],[-2,-20],[-7,-5],[-6,-10],[-9,-5],[-11,-20],[-9,0],[-2,-5],[-11,0],[-11,5],[-5,0],[-6,10],[-5,30],[-2,10],[-6,10],[4,10],[0,10],[-20,35],[-11,10],[-9,25],[3,25],[-9,0],[-7,15],[-13,11],[0,10],[0,35],[-7,20],[-17,10],[-5,15],[-4,5],[-2,5],[-3,5],[-2,0],[-2,5],[-7,45],[-6,10],[-7,25],[2,16],[0,15],[5,5],[0,10],[-5,30],[3,5],[-3,5],[-4,5],[-26,10],[-11,10],[-3,5],[-17,40],[2,20],[2,0],[9,10],[13,5],[5,10],[0,5],[0,5],[-3,6],[-4,5],[0,10],[-9,15],[-9,0],[0,10],[0,15],[-4,15],[2,10],[-11,20],[-2,0],[-9,-10],[-2,0],[-9,5],[-11,15],[-2,0],[-9,5],[-2,5],[0,5],[0,10],[-9,50],[0,10],[-22,31],[-9,25],[-9,0],[-17,55],[-11,50],[-16,-5],[-9,10],[-4,10],[-2,0],[-2,5],[0,10],[4,10],[-2,11],[4,5],[0,5],[-2,5],[-9,10],[-2,-10],[-9,-5],[-9,5],[-13,-31],[-7,-10],[-2,-10],[-4,-5],[-2,0],[0,-10],[-5,-5],[-4,-5],[-27,-10],[-6,-15],[-2,-15],[-9,15],[-9,-5],[-15,20],[0,5],[-7,15],[0,20],[18,66],[6,10],[9,10],[7,5],[-7,25],[7,15],[2,15],[-7,10],[-2,10],[-11,25],[0,5],[7,10],[2,5],[2,10],[7,16],[6,20],[2,5],[-4,25],[7,25],[2,15],[6,10],[-2,5],[-2,0],[-7,0],[-11,5],[-17,-10],[-5,0],[-8,15],[-16,-5],[-20,5],[-20,5],[-17,10],[-2,15],[-7,5],[-44,-10],[-9,-10],[-4,15],[-5,0],[-2,5],[-4,15],[-3,5],[-13,-10],[-6,10],[-7,56],[-11,30],[7,30],[-3,15],[31,50],[2,25],[11,15],[0,5],[-11,71],[-6,35],[9,40],[4,5],[0,10],[7,5],[8,25],[7,5],[4,10],[-2,36],[0,10],[14,10],[8,0],[14,35],[2,20],[4,15],[9,5],[7,5],[11,10],[6,15],[0,20],[11,36],[-2,40],[13,30],[0,5],[-2,10],[0,5],[-9,15],[-2,5],[0,10],[0,5],[-2,0],[-9,5],[-4,0],[-3,-10],[-8,0],[-5,5],[-2,15],[-9,5],[-9,10],[-4,15],[-7,0],[-4,5],[-2,10],[4,16],[-11,30],[-9,5],[-4,10],[-7,5],[-9,10],[-8,10],[-3,5],[-8,-5],[-3,0],[-2,0],[-2,5],[-4,25],[-3,5],[5,10],[-5,10],[-2,10],[-17,-5],[-7,5],[-2,0],[0,15],[-7,25],[-4,15],[-9,16],[-7,15],[-4,25],[4,30],[9,15],[11,10],[24,5],[20,40],[7,10],[4,15],[0,15],[-4,5],[-5,16],[3,25],[4,10],[35,165]],[[1110,5195],[3,50],[4,71],[2,70],[-13,55],[-24,50],[-13,36],[-11,20],[-7,30],[26,25],[31,50],[7,20],[18,35],[4,11],[2,5],[18,35],[11,15],[11,20],[13,15],[18,-40],[2,0],[29,25],[41,15],[34,20],[22,5],[11,10],[11,5],[24,30],[17,15],[9,10],[29,-10],[18,5],[2,0],[35,31],[13,25],[9,20],[20,70],[11,25],[44,45],[20,11],[22,0],[4,10],[7,5],[9,20],[6,5],[7,15],[13,15],[2,0],[3,5],[-16,5],[-4,5],[-5,20],[-2,0],[-6,5],[-9,0],[-5,15],[-4,5],[-4,0],[-7,15],[4,15],[14,5],[6,15],[7,5],[0,5],[-2,5],[6,16],[-11,10],[2,5],[7,5],[15,15],[0,5],[5,5],[13,5],[9,15],[11,-10],[18,0],[8,10],[7,20],[0,15],[-11,25],[-2,25],[4,5],[5,0],[8,0],[9,25],[29,26],[11,5],[11,0],[9,10],[24,15],[4,5],[14,10],[4,0],[11,5],[4,5],[5,20],[13,0],[4,15],[7,10],[11,10],[2,10],[7,10],[4,0],[20,20],[0,15],[2,5],[3,0],[15,10],[2,0],[5,16],[15,30]],[[1990,6768],[4,5]],[[581,2482],[47,-36],[4,-5],[2,0],[11,-10],[-4,-10],[4,-10],[-2,-10],[5,0],[-5,-10],[7,-5],[0,-5],[2,0],[2,-10],[-4,-10],[-5,-5],[-6,-10],[-5,0],[-4,0],[-4,-15],[-5,0],[2,-10],[-2,-15],[0,-5],[11,-15],[13,-51],[3,-5],[24,-35],[-2,-15],[8,-5],[7,-15],[27,15],[0,10],[13,10],[-2,5],[4,5],[13,30],[7,11],[4,-6],[-6,-30],[2,-10],[2,0],[11,-5],[4,0],[9,5],[7,0],[-2,-5],[-7,-20],[7,-5],[0,-15],[2,-15],[-35,-95],[-5,-11],[-35,-40],[-16,-10],[-6,0],[-27,-20],[-11,-20],[-6,10],[-2,0],[0,-10],[-5,0],[-6,0],[-7,5],[-7,0],[-9,-10],[-4,-5],[-2,-5],[-5,0],[-2,-5],[-4,0],[0,-10],[-9,-5],[-9,-20],[-2,0],[-2,-5],[-11,-5],[-11,-25],[-7,-10],[-2,-5],[-4,0],[-11,-16],[-5,0],[-6,-15],[6,-60],[-31,-40],[-15,-5],[-35,-25],[-9,-15],[-2,-15],[-5,-5],[-6,10],[-3,-10],[-9,-10],[-2,-11],[-20,-5],[-13,16],[-26,0],[-11,5],[-11,0],[-16,40],[-35,-15],[-2,0],[-7,5],[-44,5],[-6,-20],[-5,-20],[5,-11],[-3,0],[-4,-5],[-7,5],[-15,-20],[0,-10],[-2,10],[-3,-5],[0,10],[-2,5],[-2,-5],[0,5],[-7,0],[-2,5],[-6,0],[-3,5],[-2,5],[-17,6],[-5,-6],[-2,0],[-7,6],[-11,-6],[-22,11],[-2,0],[-2,0],[-11,-5],[-5,0],[-4,-6],[-2,-25],[-5,-5],[-8,-15],[-7,-5],[-7,0],[-11,-10],[-8,0],[-9,-10],[-2,20],[22,25],[2,10],[-5,15],[0,16],[9,35],[9,20],[7,20],[11,35],[2,30],[4,5],[2,0],[5,-15],[2,0],[4,20],[5,10],[0,10],[6,20],[-8,21],[-14,10],[-6,10],[-40,30],[0,5],[5,5],[4,5],[11,15],[-9,20],[11,40],[9,10],[15,0],[18,-10],[2,15],[-6,20],[11,0],[8,-5],[0,-5],[5,5],[11,10],[0,21],[7,5],[0,5],[8,0],[-2,10],[5,0],[4,5],[4,0],[14,5],[19,25],[18,-25],[9,-10],[11,20],[4,20],[16,30],[2,0],[4,5],[11,-20],[5,-5],[4,5],[2,-5],[3,10],[13,15],[6,-5],[3,10],[4,-5],[4,5],[0,-5],[31,-40],[9,15],[2,0],[5,-5],[2,0],[31,55],[0,10],[-7,5],[5,10],[-3,15],[-4,10],[-4,15],[4,6],[-7,5],[-2,0],[-13,20],[7,10],[-20,30],[2,30],[-7,5],[20,30],[5,15],[2,5],[6,-5],[5,0],[2,5],[-2,0],[0,5],[4,5],[-2,5],[4,10],[-6,10],[4,26],[-4,5],[2,20],[9,20],[0,5],[4,0]],[[502,2653],[-4,-11],[-16,16],[-2,-5],[-2,-6],[-2,-5],[0,-5],[2,-5],[0,-5],[-2,0],[-11,10],[6,16],[7,15],[2,0],[4,10],[18,-25]],[[628,2642],[-20,-65],[-55,35],[-7,10],[0,-5],[-24,25],[4,26],[-4,0],[-2,-5],[-5,5],[-2,5],[-6,-5],[-12,20],[-13,5],[-4,5],[-5,15],[11,10],[-4,10],[13,15],[9,-10],[7,-10],[2,-5],[4,0],[11,5],[7,-5],[4,-20],[5,-5],[11,0],[13,-10],[62,-46]],[[1990,6768],[0,5],[-11,5],[-11,-5],[-9,0],[-6,10],[-3,15],[9,10],[18,15],[2,5],[2,0],[5,0],[17,15],[5,20],[2,5],[15,0],[-2,25],[2,5],[0,10],[5,5],[4,10],[5,21],[13,20],[4,0],[2,5],[9,10],[29,35],[9,20],[2,0],[6,5],[20,15],[5,10],[2,5],[2,15],[11,10],[16,5],[6,15],[0,5],[2,15],[9,5],[9,16],[7,5],[2,5],[-7,15],[-11,15],[-2,15],[0,5],[7,10],[4,20],[0,10],[-4,20],[4,15],[-13,50],[-2,11],[-9,25],[9,15],[4,10],[13,5],[20,-5],[13,5],[11,-5],[5,0],[2,10],[2,15],[16,-5],[11,10],[17,-5],[16,25],[6,0],[2,0],[5,10],[2,25],[7,10],[4,20],[-4,30],[-9,6],[0,15],[35,10],[18,10],[20,-10],[6,5],[25,35],[-3,5],[-6,0],[0,10],[4,5],[9,10],[7,20],[-14,10],[-13,5],[2,15],[5,10],[-7,45],[-2,6],[-13,10],[-20,0],[0,20],[-2,10],[-11,-5],[-14,5],[-4,0],[-4,5],[0,10],[-7,0],[-4,-10],[-3,10],[-2,0],[-11,-25],[-22,-25],[-13,0],[-16,0],[-19,-16],[-3,0],[-4,5],[-7,-10],[-6,0],[-3,5],[-6,-5],[-18,0],[-4,5],[-20,-10],[-15,0],[-5,0],[-17,-10],[-9,-5],[-5,5],[-6,5],[-22,10],[-9,0],[-2,0],[-5,-5],[-6,5],[-5,-15],[-20,-15],[-11,-5],[-2,25],[9,26],[4,25],[-2,30],[27,35],[-3,10],[20,0],[2,5],[16,15],[4,15],[-4,5],[-5,30],[11,5],[7,31],[-9,10],[7,0],[4,5],[5,-5],[9,5],[28,0],[2,0],[5,30],[2,20],[-2,70],[-5,20],[36,5],[6,-5],[13,10],[5,10],[9,46],[6,0],[18,10],[9,-5],[9,0],[2,0],[9,5],[2,0],[15,25],[-2,10],[-7,5],[0,15],[7,10],[-2,10],[0,15],[-18,-5],[-2,10],[4,15],[-8,10],[-5,15],[5,25],[-3,31],[-4,25],[-7,5],[0,5],[7,0],[7,5],[24,20],[2,5],[35,20],[16,0],[6,-15],[20,-10],[2,-10],[18,5],[13,-15],[20,0],[24,-15],[3,-10],[6,-10],[11,5],[27,30],[11,0],[6,-5],[27,5],[9,10],[26,35],[4,-5],[18,-5],[27,-25],[6,-5],[9,-20],[4,-5],[3,-5],[4,0],[15,-5],[5,0],[33,10],[22,15],[11,0],[2,-10],[-24,-20],[0,-10],[-9,-16],[-4,-25],[-16,-50],[2,-20],[0,-5],[0,-10],[-2,-5],[0,-10],[-11,-60],[-6,-15],[22,-6],[26,-15],[9,-20],[22,0],[44,25],[13,-5],[9,-10],[7,-15],[-3,-20],[3,-5],[0,-5],[9,0],[4,-5],[0,-5],[2,-15],[0,-15],[18,20],[35,15],[29,40],[6,0],[14,-10],[8,10],[9,5],[7,15],[20,-5],[28,5],[2,5]]]} \ No newline at end of file diff --git a/samples/JSX/sample.jsx b/samples/JSX/sample.jsx new file mode 100644 index 00000000..2020618d --- /dev/null +++ b/samples/JSX/sample.jsx @@ -0,0 +1,23 @@ +'use strict'; + +const React = require('react') + +module.exports = React.createClass({ + render: function() { + let {feeds, log} = this.props; + + log.info(feeds); + return
+

News Feed's

+
    + {feeds.map(function(feed) { + return
  • + {feed.data && feed.data.length > 0 ? + {feed.name} ({feed.data.length}) + : 'feed.name' } +
  • + })} +
+
; + } +}); diff --git a/samples/Java/GrammarKit.java b/samples/Java/GrammarKit.java new file mode 100644 index 00000000..a5db6da8 --- /dev/null +++ b/samples/Java/GrammarKit.java @@ -0,0 +1,625 @@ +// This is a generated file. Not intended for manual editing. +package org.intellij.grammar.parser; + +import com.intellij.lang.PsiBuilder; +import com.intellij.lang.PsiBuilder.Marker; +import static org.intellij.grammar.psi.BnfTypes.*; +import static org.intellij.grammar.parser.GeneratedParserUtilBase.*; +import com.intellij.psi.tree.IElementType; +import com.intellij.lang.ASTNode; +import com.intellij.psi.tree.TokenSet; +import com.intellij.lang.PsiParser; +import com.intellij.lang.LightPsiParser; + +@SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"}) +public class GrammarParser implements PsiParser, LightPsiParser { + + public ASTNode parse(IElementType t, PsiBuilder b) { + parseLight(t, b); + return b.getTreeBuilt(); + } + + public void parseLight(IElementType t, PsiBuilder b) { + boolean r; + b = adapt_builder_(t, b, this, EXTENDS_SETS_); + Marker m = enter_section_(b, 0, _COLLAPSE_, null); + if (t == BNF_ATTR) { + r = attr(b, 0); + } + else if (t == BNF_ATTR_PATTERN) { + r = attr_pattern(b, 0); + } + else if (t == BNF_ATTR_VALUE) { + r = attr_value(b, 0); + } + else if (t == BNF_ATTRS) { + r = attrs(b, 0); + } + else if (t == BNF_CHOICE) { + r = choice(b, 0); + } + else if (t == BNF_EXPRESSION) { + r = expression(b, 0); + } + else if (t == BNF_LITERAL_EXPRESSION) { + r = literal_expression(b, 0); + } + else if (t == BNF_MODIFIER) { + r = modifier(b, 0); + } + else if (t == BNF_PAREN_EXPRESSION) { + r = paren_expression(b, 0); + } + else if (t == BNF_PREDICATE) { + r = predicate(b, 0); + } + else if (t == BNF_PREDICATE_SIGN) { + r = predicate_sign(b, 0); + } + else if (t == BNF_QUANTIFIED) { + r = quantified(b, 0); + } + else if (t == BNF_QUANTIFIER) { + r = quantifier(b, 0); + } + else if (t == BNF_REFERENCE_OR_TOKEN) { + r = reference_or_token(b, 0); + } + else if (t == BNF_RULE) { + r = rule(b, 0); + } + else if (t == BNF_SEQUENCE) { + r = sequence(b, 0); + } + else if (t == BNF_STRING_LITERAL_EXPRESSION) { + r = string_literal_expression(b, 0); + } + else { + r = parse_root_(t, b, 0); + } + exit_section_(b, 0, m, t, r, true, TRUE_CONDITION); + } + + protected boolean parse_root_(IElementType t, PsiBuilder b, int l) { + return grammar(b, l + 1); + } + + public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] { + create_token_set_(BNF_LITERAL_EXPRESSION, BNF_STRING_LITERAL_EXPRESSION), + create_token_set_(BNF_CHOICE, BNF_EXPRESSION, BNF_LITERAL_EXPRESSION, BNF_PAREN_EXPRESSION, + BNF_PREDICATE, BNF_QUANTIFIED, BNF_REFERENCE_OR_TOKEN, BNF_SEQUENCE, + BNF_STRING_LITERAL_EXPRESSION), + }; + + /* ********************************************************** */ + // id attr_pattern? '=' attr_value ';'? + public static boolean attr(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr")) return false; + boolean r, p; + Marker m = enter_section_(b, l, _NONE_, ""); + r = consumeToken(b, BNF_ID); + p = r; // pin = 1 + r = r && report_error_(b, attr_1(b, l + 1)); + r = p && report_error_(b, consumeToken(b, BNF_OP_EQ)) && r; + r = p && report_error_(b, attr_value(b, l + 1)) && r; + r = p && attr_4(b, l + 1) && r; + exit_section_(b, l, m, BNF_ATTR, r, p, attr_recover_until_parser_); + return r || p; + } + + // attr_pattern? + private static boolean attr_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr_1")) return false; + attr_pattern(b, l + 1); + return true; + } + + // ';'? + private static boolean attr_4(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr_4")) return false; + consumeToken(b, BNF_SEMICOLON); + return true; + } + + /* ********************************************************** */ + // '(' string ')' + public static boolean attr_pattern(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr_pattern")) return false; + if (!nextTokenIs(b, BNF_LEFT_PAREN)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, BNF_LEFT_PAREN); + r = r && consumeToken(b, BNF_STRING); + r = r && consumeToken(b, BNF_RIGHT_PAREN); + exit_section_(b, m, BNF_ATTR_PATTERN, r); + return r; + } + + /* ********************************************************** */ + // !'}' + static boolean attr_recover_until(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr_recover_until")) return false; + boolean r; + Marker m = enter_section_(b, l, _NOT_, null); + r = !consumeToken(b, BNF_RIGHT_BRACE); + exit_section_(b, l, m, null, r, false, null); + return r; + } + + /* ********************************************************** */ + // (reference_or_token | literal_expression) !'=' + public static boolean attr_value(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr_value")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, ""); + r = attr_value_0(b, l + 1); + r = r && attr_value_1(b, l + 1); + exit_section_(b, l, m, BNF_ATTR_VALUE, r, false, null); + return r; + } + + // reference_or_token | literal_expression + private static boolean attr_value_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr_value_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = reference_or_token(b, l + 1); + if (!r) r = literal_expression(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // !'=' + private static boolean attr_value_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attr_value_1")) return false; + boolean r; + Marker m = enter_section_(b, l, _NOT_, null); + r = !consumeToken(b, BNF_OP_EQ); + exit_section_(b, l, m, null, r, false, null); + return r; + } + + /* ********************************************************** */ + // '{' attr* '}' + public static boolean attrs(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attrs")) return false; + if (!nextTokenIs(b, BNF_LEFT_BRACE)) return false; + boolean r, p; + Marker m = enter_section_(b, l, _NONE_, null); + r = consumeToken(b, BNF_LEFT_BRACE); + p = r; // pin = 1 + r = r && report_error_(b, attrs_1(b, l + 1)); + r = p && consumeToken(b, BNF_RIGHT_BRACE) && r; + exit_section_(b, l, m, BNF_ATTRS, r, p, null); + return r || p; + } + + // attr* + private static boolean attrs_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "attrs_1")) return false; + int c = current_position_(b); + while (true) { + if (!attr(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "attrs_1", c)) break; + c = current_position_(b); + } + return true; + } + + /* ********************************************************** */ + // '{' sequence ('|' sequence)* '}' | sequence choice_tail* + public static boolean choice(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "choice")) return false; + boolean r; + Marker m = enter_section_(b, l, _COLLAPSE_, ""); + r = choice_0(b, l + 1); + if (!r) r = choice_1(b, l + 1); + exit_section_(b, l, m, BNF_CHOICE, r, false, null); + return r; + } + + // '{' sequence ('|' sequence)* '}' + private static boolean choice_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "choice_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, BNF_LEFT_BRACE); + r = r && sequence(b, l + 1); + r = r && choice_0_2(b, l + 1); + r = r && consumeToken(b, BNF_RIGHT_BRACE); + exit_section_(b, m, null, r); + return r; + } + + // ('|' sequence)* + private static boolean choice_0_2(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "choice_0_2")) return false; + int c = current_position_(b); + while (true) { + if (!choice_0_2_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "choice_0_2", c)) break; + c = current_position_(b); + } + return true; + } + + // '|' sequence + private static boolean choice_0_2_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "choice_0_2_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, BNF_OP_OR); + r = r && sequence(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // sequence choice_tail* + private static boolean choice_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "choice_1")) return false; + boolean r; + Marker m = enter_section_(b); + r = sequence(b, l + 1); + r = r && choice_1_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // choice_tail* + private static boolean choice_1_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "choice_1_1")) return false; + int c = current_position_(b); + while (true) { + if (!choice_tail(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "choice_1_1", c)) break; + c = current_position_(b); + } + return true; + } + + /* ********************************************************** */ + // '|' sequence + static boolean choice_tail(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "choice_tail")) return false; + if (!nextTokenIs(b, BNF_OP_OR)) return false; + boolean r, p; + Marker m = enter_section_(b, l, _NONE_, null); + r = consumeToken(b, BNF_OP_OR); + p = r; // pin = 1 + r = r && sequence(b, l + 1); + exit_section_(b, l, m, null, r, p, null); + return r || p; + } + + /* ********************************************************** */ + // choice? + public static boolean expression(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "expression")) return false; + Marker m = enter_section_(b, l, _COLLAPSE_, ""); + choice(b, l + 1); + exit_section_(b, l, m, BNF_EXPRESSION, true, false, null); + return true; + } + + /* ********************************************************** */ + // (attrs | rule) * + static boolean grammar(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "grammar")) return false; + int c = current_position_(b); + while (true) { + if (!grammar_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "grammar", c)) break; + c = current_position_(b); + } + return true; + } + + // attrs | rule + private static boolean grammar_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "grammar_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = attrs(b, l + 1); + if (!r) r = rule(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + /* ********************************************************** */ + // string_literal_expression | number + public static boolean literal_expression(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "literal_expression")) return false; + if (!nextTokenIs(b, "", BNF_NUMBER, BNF_STRING)) return false; + boolean r; + Marker m = enter_section_(b, l, _COLLAPSE_, ""); + r = string_literal_expression(b, l + 1); + if (!r) r = consumeToken(b, BNF_NUMBER); + exit_section_(b, l, m, BNF_LITERAL_EXPRESSION, r, false, null); + return r; + } + + /* ********************************************************** */ + // 'private' | 'external' | 'wrapped' + public static boolean modifier(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "modifier")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, ""); + r = consumeToken(b, "private"); + if (!r) r = consumeToken(b, "external"); + if (!r) r = consumeToken(b, "wrapped"); + exit_section_(b, l, m, BNF_MODIFIER, r, false, null); + return r; + } + + /* ********************************************************** */ + // quantified | predicate + static boolean option(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "option")) return false; + boolean r; + Marker m = enter_section_(b); + r = quantified(b, l + 1); + if (!r) r = predicate(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + /* ********************************************************** */ + // '(' expression ')' + public static boolean paren_expression(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "paren_expression")) return false; + if (!nextTokenIs(b, BNF_LEFT_PAREN)) return false; + boolean r, p; + Marker m = enter_section_(b, l, _NONE_, null); + r = consumeToken(b, BNF_LEFT_PAREN); + p = r; // pin = 1 + r = r && report_error_(b, expression(b, l + 1)); + r = p && consumeToken(b, BNF_RIGHT_PAREN) && r; + exit_section_(b, l, m, BNF_PAREN_EXPRESSION, r, p, null); + return r || p; + } + + /* ********************************************************** */ + // predicate_sign simple + public static boolean predicate(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "predicate")) return false; + if (!nextTokenIs(b, "", BNF_OP_NOT, BNF_OP_AND)) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, ""); + r = predicate_sign(b, l + 1); + r = r && simple(b, l + 1); + exit_section_(b, l, m, BNF_PREDICATE, r, false, null); + return r; + } + + /* ********************************************************** */ + // '&' | '!' + public static boolean predicate_sign(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "predicate_sign")) return false; + if (!nextTokenIs(b, "", BNF_OP_NOT, BNF_OP_AND)) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, ""); + r = consumeToken(b, BNF_OP_AND); + if (!r) r = consumeToken(b, BNF_OP_NOT); + exit_section_(b, l, m, BNF_PREDICATE_SIGN, r, false, null); + return r; + } + + /* ********************************************************** */ + // '[' expression ']' | simple quantifier? + public static boolean quantified(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "quantified")) return false; + boolean r; + Marker m = enter_section_(b, l, _COLLAPSE_, ""); + r = quantified_0(b, l + 1); + if (!r) r = quantified_1(b, l + 1); + exit_section_(b, l, m, BNF_QUANTIFIED, r, false, null); + return r; + } + + // '[' expression ']' + private static boolean quantified_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "quantified_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, BNF_LEFT_BRACKET); + r = r && expression(b, l + 1); + r = r && consumeToken(b, BNF_RIGHT_BRACKET); + exit_section_(b, m, null, r); + return r; + } + + // simple quantifier? + private static boolean quantified_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "quantified_1")) return false; + boolean r; + Marker m = enter_section_(b); + r = simple(b, l + 1); + r = r && quantified_1_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // quantifier? + private static boolean quantified_1_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "quantified_1_1")) return false; + quantifier(b, l + 1); + return true; + } + + /* ********************************************************** */ + // '?' | '+' | '*' + public static boolean quantifier(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "quantifier")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, ""); + r = consumeToken(b, BNF_OP_OPT); + if (!r) r = consumeToken(b, BNF_OP_ONEMORE); + if (!r) r = consumeToken(b, BNF_OP_ZEROMORE); + exit_section_(b, l, m, BNF_QUANTIFIER, r, false, null); + return r; + } + + /* ********************************************************** */ + // id + public static boolean reference_or_token(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "reference_or_token")) return false; + if (!nextTokenIs(b, BNF_ID)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, BNF_ID); + exit_section_(b, m, BNF_REFERENCE_OR_TOKEN, r); + return r; + } + + /* ********************************************************** */ + // modifier* id '::=' expression attrs? ';'? + public static boolean rule(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "rule")) return false; + boolean r, p; + Marker m = enter_section_(b, l, _NONE_, ""); + r = rule_0(b, l + 1); + r = r && consumeToken(b, BNF_ID); + r = r && consumeToken(b, BNF_OP_IS); + p = r; // pin = 3 + r = r && report_error_(b, expression(b, l + 1)); + r = p && report_error_(b, rule_4(b, l + 1)) && r; + r = p && rule_5(b, l + 1) && r; + exit_section_(b, l, m, BNF_RULE, r, p, rule_recover_until_parser_); + return r || p; + } + + // modifier* + private static boolean rule_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "rule_0")) return false; + int c = current_position_(b); + while (true) { + if (!modifier(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "rule_0", c)) break; + c = current_position_(b); + } + return true; + } + + // attrs? + private static boolean rule_4(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "rule_4")) return false; + attrs(b, l + 1); + return true; + } + + // ';'? + private static boolean rule_5(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "rule_5")) return false; + consumeToken(b, BNF_SEMICOLON); + return true; + } + + /* ********************************************************** */ + // !'{' + static boolean rule_recover_until(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "rule_recover_until")) return false; + boolean r; + Marker m = enter_section_(b, l, _NOT_, null); + r = !consumeToken(b, BNF_LEFT_BRACE); + exit_section_(b, l, m, null, r, false, null); + return r; + } + + /* ********************************************************** */ + // option + + public static boolean sequence(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "sequence")) return false; + boolean r; + Marker m = enter_section_(b, l, _COLLAPSE_, ""); + r = option(b, l + 1); + int c = current_position_(b); + while (r) { + if (!option(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "sequence", c)) break; + c = current_position_(b); + } + exit_section_(b, l, m, BNF_SEQUENCE, r, false, null); + return r; + } + + /* ********************************************************** */ + // !(modifier* id '::=' ) reference_or_token | literal_expression | paren_expression + static boolean simple(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "simple")) return false; + boolean r; + Marker m = enter_section_(b); + r = simple_0(b, l + 1); + if (!r) r = literal_expression(b, l + 1); + if (!r) r = paren_expression(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // !(modifier* id '::=' ) reference_or_token + private static boolean simple_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "simple_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = simple_0_0(b, l + 1); + r = r && reference_or_token(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // !(modifier* id '::=' ) + private static boolean simple_0_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "simple_0_0")) return false; + boolean r; + Marker m = enter_section_(b, l, _NOT_, null); + r = !simple_0_0_0(b, l + 1); + exit_section_(b, l, m, null, r, false, null); + return r; + } + + // modifier* id '::=' + private static boolean simple_0_0_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "simple_0_0_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = simple_0_0_0_0(b, l + 1); + r = r && consumeToken(b, BNF_ID); + r = r && consumeToken(b, BNF_OP_IS); + exit_section_(b, m, null, r); + return r; + } + + // modifier* + private static boolean simple_0_0_0_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "simple_0_0_0_0")) return false; + int c = current_position_(b); + while (true) { + if (!modifier(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "simple_0_0_0_0", c)) break; + c = current_position_(b); + } + return true; + } + + /* ********************************************************** */ + // string + public static boolean string_literal_expression(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "string_literal_expression")) return false; + if (!nextTokenIs(b, BNF_STRING)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, BNF_STRING); + exit_section_(b, m, BNF_STRING_LITERAL_EXPRESSION, r); + return r; + } + + final static Parser attr_recover_until_parser_ = new Parser() { + public boolean parse(PsiBuilder b, int l) { + return attr_recover_until(b, l + 1); + } + }; + final static Parser rule_recover_until_parser_ = new Parser() { + public boolean parse(PsiBuilder b, int l) { + return rule_recover_until(b, l + 1); + } + }; +} diff --git a/samples/Java/JFlexLexer.java b/samples/Java/JFlexLexer.java new file mode 100644 index 00000000..e54564fb --- /dev/null +++ b/samples/Java/JFlexLexer.java @@ -0,0 +1,482 @@ +/* The following code was generated by JFlex 1.4.3 on 28/01/16 11:27 */ + +package test; +import com.intellij.lexer.*; +import com.intellij.psi.tree.IElementType; +import static org.intellij.grammar.psi.BnfTypes.*; + + +/** + * This class is a scanner generated by + * JFlex 1.4.3 + * on 28/01/16 11:27 from the specification file + * /home/abigail/code/intellij-grammar-kit-test/src/test/_GrammarLexer.flex + */ +public class _GrammarLexer implements FlexLexer { + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\1\1\1\1\0\1\1\1\1\22\0\1\1\101\0\1\13"+ + "\1\0\1\3\1\14\1\0\1\10\1\0\1\2\3\0\1\12\1\7"+ + "\3\0\1\6\1\4\1\5\1\11\uff8a\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\0\1\1\1\2\3\1\1\3\10\0\1\4\1\5"; + + private static int [] zzUnpackAction() { + int [] result = new int[17]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\15\0\32\0\47\0\64\0\101\0\15\0\116"+ + "\0\133\0\150\0\165\0\202\0\217\0\234\0\251\0\15"+ + "\0\15"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[17]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\4\1\2\1\5\2\2\1\6\5\2"+ + "\16\0\1\3\16\0\1\7\16\0\1\10\20\0\1\11"+ + "\11\0\1\12\20\0\1\13\4\0\1\14\25\0\1\15"+ + "\10\0\1\16\21\0\1\17\10\0\1\20\12\0\1\21"+ + "\6\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[182]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + private static final char[] EMPTY_BUFFER = new char[0]; + private static final int YYEOF = -1; + private static java.io.Reader zzReader = null; // Fake + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\1\11\4\1\1\11\10\0\2\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[17]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private CharSequence zzBuffer = ""; + + /** this buffer may contains the current text array to be matched when it is cheap to acquire it */ + private char[] zzBufferArray; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the textposition at the last state to be included in yytext */ + private int zzPushbackPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + public _GrammarLexer() { + this((java.io.Reader)null); + } + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public _GrammarLexer(java.io.Reader in) { + this.zzReader = in; + } + + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 52) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + public final int getTokenStart(){ + return zzStartRead; + } + + public final int getTokenEnd(){ + return getTokenStart() + yylength(); + } + + public void reset(CharSequence buffer, int start, int end,int initialState){ + zzBuffer = buffer; + zzBufferArray = com.intellij.util.text.CharArrayUtil.fromSequenceWithoutCopying(buffer); + zzCurrentPos = zzMarkedPos = zzStartRead = start; + zzPushbackPos = 0; + zzAtEOF = false; + zzAtBOL = true; + zzEndRead = end; + yybegin(initialState); + } + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + return true; + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final CharSequence yytext() { + return zzBuffer.subSequence(zzStartRead, zzMarkedPos); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBufferArray != null ? zzBufferArray[zzStartRead+pos]:zzBuffer.charAt(zzStartRead+pos); + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public IElementType advance() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + CharSequence zzBufferL = zzBuffer; + char[] zzBufferArrayL = zzBufferArray; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++)); + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++)); + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { return com.intellij.psi.TokenType.BAD_CHARACTER; + } + case 6: break; + case 4: + { return BNF_STRING; + } + case 7: break; + case 5: + { return BNF_NUMBER; + } + case 8: break; + case 3: + { return BNF_ID; + } + case 9: break; + case 2: + { return com.intellij.psi.TokenType.WHITE_SPACE; + } + case 10: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + return null; + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/samples/Java/gen-java-linguist-thrift.java b/samples/Java/gen-java-linguist-thrift.java new file mode 100644 index 00000000..4e2a5b1a --- /dev/null +++ b/samples/Java/gen-java-linguist-thrift.java @@ -0,0 +1,396 @@ +/** + * Autogenerated by Thrift Compiler (1.0.0-dev) + * + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * @generated + */ +import org.apache.thrift.scheme.IScheme; +import org.apache.thrift.scheme.SchemeFactory; +import org.apache.thrift.scheme.StandardScheme; + +import org.apache.thrift.scheme.TupleScheme; +import org.apache.thrift.protocol.TTupleProtocol; +import org.apache.thrift.protocol.TProtocolException; +import org.apache.thrift.EncodingUtils; +import org.apache.thrift.TException; +import org.apache.thrift.async.AsyncMethodCallback; +import org.apache.thrift.server.AbstractNonblockingServer.*; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.EnumMap; +import java.util.Set; +import java.util.HashSet; +import java.util.EnumSet; +import java.util.Collections; +import java.util.BitSet; +import java.nio.ByteBuffer; +import java.util.Arrays; +import javax.annotation.Generated; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"}) +@Generated(value = "Autogenerated by Thrift Compiler (1.0.0-dev)", date = "2015-5-12") +public class PullRequest implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable { + private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("PullRequest"); + + private static final org.apache.thrift.protocol.TField TITLE_FIELD_DESC = new org.apache.thrift.protocol.TField("title", org.apache.thrift.protocol.TType.STRING, (short)1); + + private static final Map, SchemeFactory> schemes = new HashMap, SchemeFactory>(); + static { + schemes.put(StandardScheme.class, new PullRequestStandardSchemeFactory()); + schemes.put(TupleScheme.class, new PullRequestTupleSchemeFactory()); + } + + public String title; // required + + /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ + public enum _Fields implements org.apache.thrift.TFieldIdEnum { + TITLE((short)1, "title"); + + private static final Map byName = new HashMap(); + + static { + for (_Fields field : EnumSet.allOf(_Fields.class)) { + byName.put(field.getFieldName(), field); + } + } + + /** + * Find the _Fields constant that matches fieldId, or null if its not found. + */ + public static _Fields findByThriftId(int fieldId) { + switch(fieldId) { + case 1: // TITLE + return TITLE; + default: + return null; + } + } + + /** + * Find the _Fields constant that matches fieldId, throwing an exception + * if it is not found. + */ + public static _Fields findByThriftIdOrThrow(int fieldId) { + _Fields fields = findByThriftId(fieldId); + if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!"); + return fields; + } + + /** + * Find the _Fields constant that matches name, or null if its not found. + */ + public static _Fields findByName(String name) { + return byName.get(name); + } + + private final short _thriftId; + private final String _fieldName; + + _Fields(short thriftId, String fieldName) { + _thriftId = thriftId; + _fieldName = fieldName; + } + + public short getThriftFieldId() { + return _thriftId; + } + + public String getFieldName() { + return _fieldName; + } + } + + // isset id assignments + public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; + static { + Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); + tmpMap.put(_Fields.TITLE, new org.apache.thrift.meta_data.FieldMetaData("title", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); + metaDataMap = Collections.unmodifiableMap(tmpMap); + org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(PullRequest.class, metaDataMap); + } + + public PullRequest() { + } + + public PullRequest( + String title) + { + this(); + this.title = title; + } + + /** + * Performs a deep copy on other. + */ + public PullRequest(PullRequest other) { + if (other.isSetTitle()) { + this.title = other.title; + } + } + + public PullRequest deepCopy() { + return new PullRequest(this); + } + + @Override + public void clear() { + this.title = null; + } + + public String getTitle() { + return this.title; + } + + public PullRequest setTitle(String title) { + this.title = title; + return this; + } + + public void unsetTitle() { + this.title = null; + } + + /** Returns true if field title is set (has been assigned a value) and false otherwise */ + public boolean isSetTitle() { + return this.title != null; + } + + public void setTitleIsSet(boolean value) { + if (!value) { + this.title = null; + } + } + + public void setFieldValue(_Fields field, Object value) { + switch (field) { + case TITLE: + if (value == null) { + unsetTitle(); + } else { + setTitle((String)value); + } + break; + + } + } + + public Object getFieldValue(_Fields field) { + switch (field) { + case TITLE: + return getTitle(); + + } + throw new IllegalStateException(); + } + + /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ + public boolean isSet(_Fields field) { + if (field == null) { + throw new IllegalArgumentException(); + } + + switch (field) { + case TITLE: + return isSetTitle(); + } + throw new IllegalStateException(); + } + + @Override + public boolean equals(Object that) { + if (that == null) + return false; + if (that instanceof PullRequest) + return this.equals((PullRequest)that); + return false; + } + + public boolean equals(PullRequest that) { + if (that == null) + return false; + + boolean this_present_title = true && this.isSetTitle(); + boolean that_present_title = true && that.isSetTitle(); + if (this_present_title || that_present_title) { + if (!(this_present_title && that_present_title)) + return false; + if (!this.title.equals(that.title)) + return false; + } + + return true; + } + + @Override + public int hashCode() { + List list = new ArrayList(); + + boolean present_title = true && (isSetTitle()); + list.add(present_title); + if (present_title) + list.add(title); + + return list.hashCode(); + } + + @Override + public int compareTo(PullRequest other) { + if (!getClass().equals(other.getClass())) { + return getClass().getName().compareTo(other.getClass().getName()); + } + + int lastComparison = 0; + + lastComparison = Boolean.valueOf(isSetTitle()).compareTo(other.isSetTitle()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetTitle()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.title, other.title); + if (lastComparison != 0) { + return lastComparison; + } + } + return 0; + } + + public _Fields fieldForId(int fieldId) { + return _Fields.findByThriftId(fieldId); + } + + public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { + schemes.get(iprot.getScheme()).getScheme().read(iprot, this); + } + + public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { + schemes.get(oprot.getScheme()).getScheme().write(oprot, this); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("PullRequest("); + boolean first = true; + + sb.append("title:"); + if (this.title == null) { + sb.append("null"); + } else { + sb.append(this.title); + } + first = false; + sb.append(")"); + return sb.toString(); + } + + public void validate() throws org.apache.thrift.TException { + // check for required fields + // check for sub-struct validity + } + + private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { + try { + write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { + try { + read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private static class PullRequestStandardSchemeFactory implements SchemeFactory { + public PullRequestStandardScheme getScheme() { + return new PullRequestStandardScheme(); + } + } + + private static class PullRequestStandardScheme extends StandardScheme { + + public void read(org.apache.thrift.protocol.TProtocol iprot, PullRequest struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TField schemeField; + iprot.readStructBegin(); + while (true) + { + schemeField = iprot.readFieldBegin(); + if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { + break; + } + switch (schemeField.id) { + case 1: // TITLE + if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { + struct.title = iprot.readString(); + struct.setTitleIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + default: + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + iprot.readFieldEnd(); + } + iprot.readStructEnd(); + + // check for required fields of primitive type, which can't be checked in the validate method + struct.validate(); + } + + public void write(org.apache.thrift.protocol.TProtocol oprot, PullRequest struct) throws org.apache.thrift.TException { + struct.validate(); + + oprot.writeStructBegin(STRUCT_DESC); + if (struct.title != null) { + oprot.writeFieldBegin(TITLE_FIELD_DESC); + oprot.writeString(struct.title); + oprot.writeFieldEnd(); + } + oprot.writeFieldStop(); + oprot.writeStructEnd(); + } + + } + + private static class PullRequestTupleSchemeFactory implements SchemeFactory { + public PullRequestTupleScheme getScheme() { + return new PullRequestTupleScheme(); + } + } + + private static class PullRequestTupleScheme extends TupleScheme { + + @Override + public void write(org.apache.thrift.protocol.TProtocol prot, PullRequest struct) throws org.apache.thrift.TException { + TTupleProtocol oprot = (TTupleProtocol) prot; + BitSet optionals = new BitSet(); + if (struct.isSetTitle()) { + optionals.set(0); + } + oprot.writeBitSet(optionals, 1); + if (struct.isSetTitle()) { + oprot.writeString(struct.title); + } + } + + @Override + public void read(org.apache.thrift.protocol.TProtocol prot, PullRequest struct) throws org.apache.thrift.TException { + TTupleProtocol iprot = (TTupleProtocol) prot; + BitSet incoming = iprot.readBitSet(1); + if (incoming.get(0)) { + struct.title = iprot.readString(); + struct.setTitleIsSet(true); + } + } + } + +} + diff --git a/samples/JavaScript/gen-js-linguist-thrift.js b/samples/JavaScript/gen-js-linguist-thrift.js new file mode 100644 index 00000000..d6a429f2 --- /dev/null +++ b/samples/JavaScript/gen-js-linguist-thrift.js @@ -0,0 +1,60 @@ +// +// Autogenerated by Thrift Compiler (1.0.0-dev) +// +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING +// + + +PullRequest = function(args) { + this.title = null; + if (args) { + if (args.title !== undefined) { + this.title = args.title; + } + } +}; +PullRequest.prototype = {}; +PullRequest.prototype.read = function(input) { + input.readStructBegin(); + while (true) + { + var ret = input.readFieldBegin(); + var fname = ret.fname; + var ftype = ret.ftype; + var fid = ret.fid; + if (ftype == Thrift.Type.STOP) { + break; + } + switch (fid) + { + case 1: + if (ftype == Thrift.Type.STRING) { + this.title = input.readString().value; + } else { + input.skip(ftype); + } + break; + case 0: + input.skip(ftype); + break; + default: + input.skip(ftype); + } + input.readFieldEnd(); + } + input.readStructEnd(); + return; +}; + +PullRequest.prototype.write = function(output) { + output.writeStructBegin('PullRequest'); + if (this.title !== null && this.title !== undefined) { + output.writeFieldBegin('title', Thrift.Type.STRING, 1); + output.writeString(this.title); + output.writeFieldEnd(); + } + output.writeFieldStop(); + output.writeStructEnd(); + return; +}; + diff --git a/samples/JavaScript/js.script! b/samples/JavaScript/js similarity index 100% rename from samples/JavaScript/js.script! rename to samples/JavaScript/js diff --git a/samples/JavaScript/js2.script! b/samples/JavaScript/js2 similarity index 100% rename from samples/JavaScript/js2.script! rename to samples/JavaScript/js2 diff --git a/samples/JavaScript/logo.jscad b/samples/JavaScript/logo.jscad new file mode 100644 index 00000000..2ada0778 --- /dev/null +++ b/samples/JavaScript/logo.jscad @@ -0,0 +1,19 @@ +// title : OpenJSCAD.org Logo +// author : Rene K. Mueller +// license : MIT License +// revision : 0.003 +// tags : Logo,Intersection,Sphere,Cube +// file : logo.jscad + +function main() { + return union( + difference( + cube({size: 3, center: true}), + sphere({r:2, center: true}) + ), + intersection( + sphere({r: 1.3, center: true}), + cube({size: 2.1, center: true}) + ) + ).translate([0,0,1.5]).scale(10); +} diff --git a/samples/Jupyter Notebook/JupyterNotebook.ipynb b/samples/Jupyter Notebook/JupyterNotebook.ipynb new file mode 100644 index 00000000..2ca74086 --- /dev/null +++ b/samples/Jupyter Notebook/JupyterNotebook.ipynb @@ -0,0 +1,210 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Morphological image operations\n", + "\n", + "** Bird Counting **\n", + "\n", + "I've used some simple morphological image operations from scipy.morphology module.\n", + "\n", + "The goal was to count how many birds were in an image\n", + "\n", + "Here are the steps taken :\n", + "\n", + "1. Load the image as an ndimage matrix object\n", + "2. Filter all pixels for those with a color tone less than 100/255\n", + "3. Get a binary representation of the pixels that satisfy the condition in step 2\n", + "4. Apply some dilation and erosion in order to get rid of noise and isolate the birds\n", + "5. Count all contiguous areas" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original image:\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvVusrVl23/Ubl/mttfc5dcqu6u60YycxAScGKSRCgKVE\nOMgPQEMUbAkcQoQQTzxEPCCBUACDECgIkCMZkSdEBEQmxEmQIiwegoQfEiPidmwcx8E2sR2F2N3E\nfa+qs/f65hxj8DDmPg6SXWXZUvPAnlKpTtU5a6+15jfnuPwv40hV8bye1/N6Xs/rq7P0/+sP8Lye\n1/N6Xv9/Ws9B93k9r+f1vL6K6znoPq/n9bye11dxPQfd5/W8ntfz+iqu56D7vJ7X83peX8X1HHSf\n1/N6Xs/rq7j8w35TRJ71ZM/reT2v5/VrWFUlv9z//9CgC/DDP/llqopMY7GoBBAyE1UlIgBDMKoK\nM6NyAQVaVCYFqCpQVDhoYCogQAkuQokSLCAZGKsUUbAMAkHNWRlYQRagRVKIGGQiqhBKyeJJe9zv\nqRRJZSIyQIPK4qLCEgDFgBKh6I9kFCJFhKEiiAZzJuKGFkQlIqC5QIwQZUiRoihJpiIoYfW0+/1V\nC6RAqkgVQIglqAXzhMykqpgpIMLKoKawFIhiVvSPI6h0qqr/SSNkYgClLBRHQRNSQJPbbXEuZc7k\ngzN4bzof3G48TlgrmUsIlDMCKFyU2DsyRElulF7xTFIEop//JDnEueVEJZiroAYiIAmlIJK4G3cO\nMwJlMCvJLFYmyH5KoSBCVTFUmNnfL6chHlQuVg2GGhmJepC5QA1NowoKQWWCDBIhmSgHqxKXhUD/\nXhajjNQbWnBLY1giUmQYJavPdComQUgiDKoAFYQbswaQiCg6C7GFfvAaub+HOgjv50YJJQIEUQUy\n0RrIbjRF6Z/BIghUB5xFmlASkIZqoEXv/SkwAE3OVBLQTNwKwikS0WSWIxmI9908UlkxUXOyFqoO\nWSTJUhj0uZQlpAmWEBSO9BkWJarvs6lSmSwDQdEIlgiHKhJFChSQFRD0PTJFgKWJlZKxMHHQ1ReP\nwSEFAoFSLBRBVYhITAzVpLJjh1jftzNAC2aCaEAMkhvHOBATXhzJqxfGKMFdOCwZo2NPrOSUZIRj\nBmMIQ41xFC8vxuVQjlGYOS8cogQzIyKhksMHLy4n5sadGS9eXXh5L3zsrV85tH4kvJClrHRCC8Eg\nhMqEGh1B+tjsYJBELvZj6X+LoPsiVQmlHbAylcyOQkGwKoDE0rlVIGqUQKKUCJngWYQCBmKGivEm\ndleBJ5Xj7/pE/StRwYaTee4vfeWMAwsYJR2XKhlqOLKDtEAFIUqgYNoBX0FE0DLCDJGBSxLlSNGX\nVIvQxEKQhFGFZGEFqvEUh8mwTh6r94idCKSc13NxLuGWybmKM4sIiIA1hUwhVl+KpTckndsJ5+qL\nfjtPzluQBbfHwnQQmkhHwQ7wqVBJlIAaKxaWfRFjCRlCEEQlyUDzERRqZe+LTgQ4owNHrsHwwaFF\n5kJcUS3cDRBWJCJOycKV3m8baEGVoiK4gVvyOCcVRoZgo1iiqAxEF1k3llUHQTVKjKjqRFcFYn3G\nns4ZCVVYHmQ5ciYmi7ITRXgkMe2A3IEepPoMVCYTQ1W55UQQvIQZB5aBh3BZggyI9/4O/+N3fys/\n/QN/klCQLNQ6fBgLs07wQ66YeScbBQ2IOVmyoA4IAU+yoFZ/pwhllYIkNaBSuJ0gquhKrmMgOUAg\nXRCUowq1wqrQhMpCzDqoaQfQUFA1jlRUDCmjDIYskNVFhsr+vJ04LiqkBSIdPL2KQhgpVBYlwqKQ\nShSlTEmjz11/BYgk3SgScHJ1EJ/ZZzMobB2UwKy+c0IRaSw3giQimSuRStZOZquU4sRskBRDgvuh\n5CrUhDGKF3fKq+uVd96+8M6rOz5+f8fbL523X1752qvxtS+UV1fjfijD9xlVZSUIHXDdjbuhvLgH\nPRxTMA8ulrh+eFj9yKAr9AGldrZzoXCoIKPQUiA7oxVUduaLTEgjE7LL464OK3bl12FRsiDASlBx\nQlcfjFp9+XVnNClqOJKCl0EVmk5FgSlUUbkQPREpCqNKyZywIJeiZv2edqJjgQlTi84NRmQQEazQ\nDnAmaJ7kTDSLiK79Okh0hZ96Q0QxDQpFBEoMLyVlIVUdqMxQhSgjTEk6MK0zOCu5Bcwobik85CIS\nzjOYq7+bqmLmqCqqStWiUOKEvBnnubgFvE744DG5lRABj+cjS5TzLCKEh1p8ZQYPKzlXXzr3Ynhw\nN/qymyuLrpKtOrGZQGKcM0gElSLWwAqQRa6ubuasvrSHY5JkworevyolS0g6AYckVcFFO0jK6M2d\nMzj8jrNO1BLRYpBEwqEDyrhoMaU7A8GJ3Z2YQkSRKdjKXaUlLsnSycykDqh0MozI4uoDoasY59hV\nmjMF0EAqyTXwGl1YkGgtRBM7YNmJhfAjf+F7ePd68n/8wB9F9dYJNQUsSTHWKtSL2kWCJSRCefQZ\njwt9GJWF4yaIJqqFyA5oORAtsImb4SGMoawzWNpF0AjB7KBDxOg7Y0Ic0pUixSjBRFCEiiSk30Oy\n0BSkBoJTJljBrO4Wq5RZMDjIUqSKWElqV7+TPu/XUkqfgi2IGrB2EWJMFQ4WiPZejOQQo2r1/lcx\nJYgpjKyOMUZH7BOQ6v5anDOCzEBRXIqhhmhw53B/19XrixfKW1fj1dV4cT946+rcifHyKF5cnVd3\ng7euhV6NYwzurwfH1bgfxaHCIFHt91cVhiaXO+MYyr0ITjGOgY/BR8Tcj4YXupSvN60sVd2Oe5Hr\nICooFlKOdOHUFSwQM0AE826FRYoUwYyulqHbmYKSbmWlDMskEChBGz3AYpFq6ICsQkpgJHkTTAbI\n7EBfjnsHSNTR2oGwJmrSh3Y3zpWCmoCCVFCliD1V7fv7W4AMKhJUkSxCAFNGCTOMNMGz8xLSlWOH\nLUEluqKU2q2WEVLMgAxBU1lZnKsghLNWB9Wnfc8uIw+CJUbiiJ1kdcs4p3BKV8MxQaQrq6GCopyp\naC3m7ErpS7fkNvefNcNScCvONLDsKi6zE5Rp9ytVqIAzuspa0dX+rsxSJocKs7QT7OxqqRB0w0Bz\nQzyuistAZCFLEIWIIHMnlhJ0XFlncDw9iywIQw4h1g1RYZVQLEwEiRsuRspCObhJIRSuzmRxAEu6\n46gh2DKWLKw7d9aaqNxBPhIGTleZFjAMYkM0sqECNQgZSCaxiqpBGvzCj/553r4sRILXn/ksl09+\nHdQggSQIAU1DbXGGoVJIgeqBVexEVKxxspaQogztrgMtdHTF/FjGUYbbZIrgocQoqD7zxeScgtkJ\n5Yj1/TNObqk4oCoIQZZiatw0qYDUIlFW3TAueD0VuA3hGdawQUTDd2t1YE5A4aJFzmQCFQ1TTQOJ\nQl1YCerJEcq5DJMAq4ZjtJ93Rt9ZoagNupC9h5qG6CSiiCwqizRlaMOOWcHBwf0d3B3O3QEHwlWC\n+6txmCMSuBp+WV3ZVxJhIMWhyjDhkOzKPyEvcFfa1daOUX5MnMHhQpwT1aIoMosZH06FfWTQzeqA\nqrLxJLrFrii+8P4Xqbjxzqu3G4vbGFyRrHQwwyLJAFMjFn38UhESsd3yaGc7LUFKCaAx6K6WL6XU\nGJhIVyw8tcXFOJS1FoKjkg15aLdXSnWANoUUakGNiZQhETylJEF2exuNMeMkQQlENowiuxWyFELo\noMUCUzSVkII6iX1UAmNIEamENfadAqlJnUKWdFW9ikfggvBAcCnjYT7hfII5DITFsfHLJJcSUdxW\n8khy3pJI6Wwv2q3dCoIDwzgjmXHyMCEzqKWYFUTg4pgntuBG469yNr5+C+GM3uOjBmcs0jooI8qw\nAyLxUs4KpBa4klF9AaTPySQbYjFDRFhzJyRT5k5QIoaUcFuNjRePHTQfC73TxvaiWOGIK1XCAYgV\nC2HUSXGl9qE2DSqTA2NmdMFgSaydDmUx7aBPipD1gMilK3IpFN24ulOqaBXmyTw7ATRDIUhJJ5q1\n+A0ff5d33oIPXn/AD/5X/yzf9l1/GUWYAkfaDoJGLuuqXIRCWBEgYHruu+AcOhtz1APRQJHuHAVM\ngiqnQjAUcThysCobEkslNbj40a366ruieqDWVe6qk2IwLHhMsNgcTNGJrA6E/oxRT3BYF1Ei0tiu\nCgyHucihrDwB3c+13/9cE6JIVSwMrSBSujgQw6zhBBFAJyxvCCW6sEEWVaDppJwondjNjJRABLzA\nUG4Kx+G8vBpvH45UYggv7pV7d7SStSYugh7JxZrjkTSmF8KBKRyiqAlaxQ3lAuTGmg8RVOGqV8wa\n0spheDlrJinxBuL8ldZHwgtmvclvKl0RyG5FPv1jP813/eHv5C9+/3/DnPPNa/oYz275K3cgBihU\nDYEmC9Ix9W7bn37+rm5ECitFTJkSu7qFiSLSYJjSn0sddG8am8gyG1CKuqGrSR/EkTnIMFIVxFD1\nDo4mZCklyoygVPpQr8Jjoyv0XvS+FDVG/39JrAorp+jAktWXptGXJmh0CoKwNp59W8UNWGvxeiZM\neKgkc/8TSlZxyyBqNea7FomREZ2FM6nkzT5HBiLFmkZmMlmoJCLCnRl3Kry6h5dDuLpiXow07g94\neWeMoYxLInagKqgLWsJDFTVqQynFBSGSxtizoRyEhoSk0GwcW7Q5H9FouEFBh4IomsGdgpeCdAIy\nE+KhsdYzFHMhb5OIyVndbeiZuDQ2HnFiclJmpNwoeeiLIMIsQ2VxMUHfJG1D9KSysWTbQJfJYGUT\nULbJJNGFW0JOMouYDgPMrIOgTEoSRVg6+Ozf+Qzf9M2/jbu7O168NZnvvQ81GZx9RtJYlSxtfHdJ\noT7x0VW+qLOqP5FUQy4WZ8Np1ocwCLQKkSAMFgWhPBKYTiQ3/2DGmsntpBNWFmTiNUmAdFySGcpR\nfQ6yhCuOizZ/U7AAlQ6kKYIfB7KS9Ia5jgD3rgiHS1eiBYfBmRMT4bAiK9/gw6lCiHZMlez7H4s1\nm6CxUFKLUEHEyRCyqp+dwaALuMquhDFFtHh1FT55CK8uinmiV3h5XwxJ3GTDI4lZV/RiwvUwXlwH\nbx0HLy/G1a2LEFNKhUM75kkKLCUUipMp3eGfMwBFCoZdmKdtccGvI+hmCMWkSpCNzUkkFYbM9/iJ\nn/gRvuvf+ze46pc35rkhCBW8OjhnZpNTKFm7tZcbBaxFww/SxFKFNIGyAX1229nBft/rLMhuw7Xe\n6A8w7wvhWrAE9X6giw7oYol4IF6INlFWebLYRBYbVrAOGDRc35XRTGoFc6sXOijeGAFJcZKcst4o\nEHQHzFjKiiKmMTFuD9rk1mzm/nYuHh+F2zx5FIhTmKt4fHAezmKeULmIzIZrFFiB2dGJSLYkooqB\nYqpIKa6CqnOP8sKdu/uDuxfw1vXCi4tjA8bRgFt6cavig7OrcaeZfBOjOfVdtS/jXLlbNMEI7lKb\niKSa1ECogFknZmBujCG4Xil1dCoZti+xkvGAiOIlHG5UCX6BhxSMyaqJ+EDVuSCITGrI/t5NAokY\npUerJriy9ClhAyqUJDJPbhyoTISBlOCWJBNJI3LDXlXcIimFCue8FVrehFgmR1TzCJEQTka3zy+v\nk6zkF37+M1yuVwzn0//lv4jIQeXRPIcUXo7XwCQ5CjIGObs3XhFoFhcxKKVCUHeyOmm3smYAg0zF\nU1F1zkw8A3Jg127pLbqwOVwolJLC1RrLXslSZYmhJUylK3AgpIg4SUtKno5WbZgweZg39NL7Z7TK\nYWmrJ+YUVj69TrlEv2+mcRFDh/fnWoknxFxEFG4HJR0oAZb3Xb/UZMakDqN880rAqqRkBwMtTAob\ng3euB69eOV9zbeXBqwF3Nrged01kuzPGYDxBRSRZfX7UGpqDYKaxZquCLuYcJLYTY99vI6dzO5UZ\nQs7VXf2AYashy19P0G1JkjceS7fWqQPsxMcddxfl63/Du3zb7/4H8AFVTorShPHO4CKsKJSNk8jG\nVveDzAgMQXUzphYMmlwoachHC8qUCkNFMXUyOxsVEzYxgnYQLIDsFlg4dvvqgBLr6TANgk4mtarh\nhLXwxZtEEQLChbIm8KzAdeDWMrlHglw724n1g8yuBCaC7Pao5GStxn3WKqIW84Q5hVrB7VY8vvfI\n7Uwez+Rhnd2aZUEMIjozk10tKIm5ccEwFBdH3TiGcVycixd3OhkXxx1eWvJqXLm/HFwug8OMQ7Ix\ny2oSonFgwVwZLtzTl30EW14H996QwJkQIjxmIhkUwsUgMrDDGNpwSOUjq5zQlpQxGpuTKrSSrAtl\nkFwgey+HKaYt0RrWz6gqOTcxZNbSxCmCe/dQWY9ELZZOBl1pHBKsmcxKzIXipLK7kNKTW0gz/qak\nJTILyrEwZKdydWGYUzKQEa3ioODIJp0wBicP54kgfPbzv8j7jw8c14HKFwhOTFrZIwxKJqInFk49\nVd0oqYLq6Kp5rZYJAnVL7CLk9I0ZJlRjzTOLlQsRYZiw6kbcdpEku9gIadht313Z3aQoaHYF6tFk\nsklXgymG5WKZ7IKnYYXAuGrjw7qCiKQiG9E7ChPDRYi1OohLE+Qi3RXdYhIqLIclDU8s7echHqgc\nxN4rEyXKGVZkBLEMVnCLzR0s3RxKy0vvRiCHITaYZbgK17HhAi0ud8bLi3HvtIRNlbVaVBh1AkXU\nYM1C19pqhGJRnCgzlNLCS6gazHljndHQlR2IKcNawvpRRNqvwpEm++EZ4MTamN10fvZv/jQf+9gr\n3nrnFb/pN3+CP//f/rGGFGKhu8VR7U131c3aPrX6BbWIpVCXDpIiLekRAW24uaIrqVLZioHZOA+K\naCB0UITWSeY0RtlOGC05Eorc6IdU48mNIy0MYaY3ZrUlNZJJphNTAWfxSEnrC1OySZGYVHUgz7DG\nraay7wS5YN2KDIdUYgmPlZwz+WCe3G7GlJNYfThXKhGDh9sjDzkht7RMOrMrTqUg42BYwymHt6Tl\n7s54+cK4Hop5gCwmippzDDqIDsMuixd3ybDkfsA4mtF9+37w6govD+flKMboqk+HNJnlZ2NuBA9R\nJE6urnxvsZgF+QiZA1OjYrXSgoHkgWvg6awJ8bhoviS3MkWoBDVhpaBuzBkMvVJPypNYSA2GFqxm\ntW8hXC26M6pCohg20CW4GpGLGYGIgxizZJMmu3VGODTR0dVNpiEmSCXDGrMUVY7h3OLcMidFRzJF\nWOVgQloByuv3HkGKy3EgwMrg4OSnvv+PE3Tbf5JodnC91a2hqTzQje8uORGTXakXookMbUmhdRHS\nkodkVeClHKK4KqsC0yuqrcyQJ4WPBSGbrGZh7v09s++OmmFbxytdp+yLohyZnORu5XN3PQ1TLBdy\nw3IlAuGsClK6Oj9ztmphJ2vZpKFUotFJ06qxZB0K4cQ6SZIZwSnZqTNbCSQmLBSLwqsLBAlHq7hc\n+vywFvM8iZLWaGeCGDhcRTBN4GQM7YKgijmT8yxyFrWiVTdHd0eZ3Sk/VftzBmcWZ5xELlZ1QrBK\nDqtdsCQuv85Kd61EIslcaCXC2bpb4Prinvde37rtMePP/rk/wd34SqsYaBlHRLzBQZ+CeERjtFn6\n5oFAZ14oMp2ybuE0QVb2Jdga08KICghBdKC19gPuiiZEd9ClpSVbDhNxA52ItEi7pAj6YOYTsZHC\n9P6MqtZsdRa1P4tGt1qltquO/m4zW1WR6TzejBmGaZNbQYvYb7OYEWQ9BYqjtYXRkMLrSG5lcBvc\nQrfkTSA22WcgsUjtikx1cgzhbsBVnTs3Xpry6lBeXQTzQs25u9yho2uyWsahiqpxdwyGOYc0g31/\nwPCDF6rcDTg2Dr7S29RQUHPvI4nXYohTcZIjSGvYRsw517m7hCLOlvXEUjCHlWSONj6sAozIky2k\nw8SQuuHaVfAhB3ZsjaSBnoNBsVaz780HsBNhS9Io76Qvhp6NG6tc4QCw1g7X2LpcZexEnyUsGlsM\ninl2gKCS0+GsJtGGdvJ1m5gZH/vYK6rgnMVtNg5qdxd+6n/7HkSTskRXd2trbn1uCqGTtCAyYJst\nrGAcm2zVJmYlR8NrufXvYY1vy2r4qy6N6W9N66LQghXagU47odwykOyAXVnAScxFbt1wieIFEyHM\nMG5bI9uEbgmUKyM6MVkmx+5qiw35CDhPXFC/trZU1GQxvMO3eBdHOYuoDW2lcFFrGWEVJcmSah12\ngegOhpIcBkag1RLVx1zcIljr5HGerGy47SCAVlcd49LqhMO4F+3uodorkK7kTIy+d5ldPOWMjjdb\n6phJY+8ijCHcj4PhTklhss/Sryfoim42nH64iTWorYuf+9nPMB9bqjX8yt31JX/oO74VkC2T0q0M\nqDcusS2s2C3Pk2ts6ybl2KzxJKd1tQnbkeXtzgEyErAmqSQ3MddynmRRtTDtrNM8QwumqdEtJKu/\nXG2dIlC5VRMJsZrAQZJuMFrziCkxWjdr0bx31a5CqohYxGysk7yx1pZ1dc9EJjxGsmZX1edZPJ7w\nehaPEUC7sG4sVgVzqwDscLA2mEUERFISzUarcAzhclHu7uG4Hww/GGNwGUdjlPPGfEhmJLdYPE7p\nDwP7+7XUppUeJ+bah/7o53yo4J1JwRNJcOsAogLiiol2Qm2aG/WBZXabNgIV5/5Q0hbpzUoTHYz7\n8hspTiWsEFSurHxEWypD5iIDxmasM5SqJGsSqyEs1cK8jSQtZ1KKiboglpi8RqOVLJlFVKIbH5Rs\n0ldsttvSWlEg3vtiCUfBkY3fx2zFRaUzz+DxnBTw+S99gc994XOsUEyFyxU8WvPsx3oDuTGNSSAc\naLYxo/WwQq6GRcxBs5Md3uaJlpg1Jm5erLDmG+jkICLEvlf9Xk18tyjAMYRSJ6woFYSBIRALK2kZ\npPYzHjNJuyNdeKzJmv3+EYG6blJc0W2u0U2OihRLhTOaTA+KtDaYFINVQqz9+Z6IaR1ojR0TaMzY\nWwLKNlHZwTbXgJQzCWYeRLRiY61ojD0aYoDEzYkC9cCkz8lxXHB35gAXwelCzaOfTWu+W5ebFDOT\nPIXHEOIMcrsQIf8uKGzu71ecbwSnv8agi8DwgeqgCIbQriBR/qHf9Tv44GGxbidvvXXlk5/4GjIX\nh75uHWVl9xfSbpMnVr4qqeyH9EQ8mWq3+NW4SBGb+GrCzL1xqSfsCbJlbJGEDHRnWsV2xt6VrjVu\nI+btgHFlR4oNTexq0jqTqdUOuF2hi7agQrVJAUH60ntncvW12zkY1vKrqMasF21YuM3i9VyN1YWT\nVTzOZIbwegZnNMl4xiIj+s+tYhE81mLOcys89hakQ3R1qtbKBPHG043CvVDvvXdrZhngtjYelkWU\nENFW0FY9wDmh1qBi48ZzE2PaIrgSRYFD216pBFgyxpVxtJPPdqKWSkp6r4cKZcGSRaVSGVR0G3/1\nxsoiolUYUqi1w8z8QEYyNam1QG/g0hYueaREOcaBeTZmv5qI06WITtSTrA0dqRI4kn1upHRfLGOu\nJDRQCZID39VZZmurS6INmGJkFgdK6miICnC/MI6jNzmV222R1WTcMQZf+D9/ZF816bKjkhLBdDHy\nRnHZhODiQFFvC0Zl45XlSSzbUkZAznZ3ssAbrrPsVldWPwPdFW+X5YandhcybHeuhZtzIzcZVoQk\nJ4shgloyfbfoUdy7s7Q4timBEkyLZXBKbmkp4AetLFOGDspkqyey92QbMuBJ9trmDitYGpi0BXhl\nbHigicGDJzPLxu8EYhkik1nwerKt7e1mXAuS5IwTkNb+qjEO3hhOlFbs32hpGRKkrFYNLaVCWTM6\nSUfgaHeMIRiJ+8FlDMxb/ihiTTjqh1e6H6nTpYqai7R+iCFORVeAcT4C7eQ5Hx+5v7/jrbeu/I2/\n9oP85r//U02+Zbazi2pW3XQfvCauRHY7FImNxKzZWmNQsrAUksayrBrMT1azu1VIOWXR2YzGVCnb\nF7OQ7GxcGRzesyNMO0s9aYqHNdCf8SSw137f7c+uip3Ne6ZBZmuNqwpJR+0kcCJz204LogmOEqgZ\nzNxi7ggeb5MzlbkWGcXKaE+3JJIHsf3lngVncY6+PE/uKzZzn1lUWWOLq4Nv+3FbUlYbu15ZxILb\nKqjY1ZKQ4VR7GzExli0qhMiGQNQM00KjoSCrQjUIq9Z14u1L1tqVTnCYvmkzO+c+zVJQctEBjIEK\nrCxSDK+ujJRCc1A227UQk3LjOvpA1ww++PIv8v3/8adwnfzWv+cbuT285r333ufLX/oMdfktfOsf\n/lO8+4lPUtUQVHmTR0rbOFWVyJbJJUktuBytStEqXLNhHFqbrmroMk4NDgI1aYMPQlQbBSrmm+/6\n+vGGqXO4MW+Cm/N//60f52u/+fc0Jq+tW2cTynMaciQe2fiwCL4GoMQOBpXSpFM1VBbiWBVnCVTP\nB1m0TK98wy3SboVc1clRpJPhVphcy4i1uNA647FxgVJhZYHSlR+tTjgDDnXmWoQZSuBLGQWntda1\nZCuc6MIoSaSEytbkqm0FR7ZsLKt/HwQuE9nzPzTaViyMJmbFGqZzZaS2FpZbE5NPcAuFShJi3U2f\n8DCEQ1fDVb5xcmlsf1SAeScqU85orbBU+xuBPa+l5WrlxpBszfDREjQVQWPidr8r3d7zX37MzS+t\nj5aMSZ//DlCb+ZWJqvGF148U8Pr1ayLhcrnw1luv+PH//a9QnCxppptV3TpqW21z63xhwwS1cTPp\ng080mdZBazAOYdCvGVoMTVx6lkFkDyQwkZ1FAV1vHC1mhdSJZrdZJWzbBE8Rv39dfdBVBG0vc286\ngmMtGF+Nz9LdFD5qt0BHv051y06qoQjtgTbtrjMyjfdn8sE05iweZw+ISbYpJIrJjYoejLJWNUkl\nxZlCrMbJO6b1YYiEmI1pVha5us3q/zZmwJzK67VnStCSt5m7FZPuOm4LMo3bbvU1W0WgOGqNY54o\nkYqmgyiTaL2zJ2ctDN/aXMHEKG24YTXi0J1IKTUViWTdulWdGaxq+U1tNZZZIe5oCBdt8bsMePvV\nu9y/9QqCltnrAAAgAElEQVTyfT772Z9h5hd5513nm7757+Xv+0blr/7Xn+KH/vg/zv/y3d9OhnDk\nRMOQKbicwAIvwhcm3X5HDWz2c4qVLe+KQrWY2TMrXJQUZ6b1Pm/teVdjwuPZ0MGae1jSKuZ8RET4\n6R/608TsqtuqNaXm2hdcHJdA/AJ5oLpID266z9EQnoAgZSFqWBolwZGtaLDcFuiRuwhs7YVZ9KAZ\n2drfeNLKnoTCqT35IK2VMCLSMnnr+QpRtc0H0tbdSkwNicXFi6ntMJWlMLxJM6EH9WRC7opbO0Dl\nfOyKlybtJOtNYSAYkkrOhY7uMs/MdnRqYGrbwNGqirmUQlBraaeVEGJkJVmdsOppXzByt3tVB+KN\nVwfBxIksjq1zdxqmbN4m8dHdyqHtWTARHMWGcx2Fjyb01RqOtEr0w2W6vwrJGPsy5y5dSJSunn7w\nL/1FAPwYfPwT7+JqzDX5pt/+zagoRDJEQXcrvyUEok8mg4Yg+tddNUZ6a++YjbZKEw6oUSYtxn8i\nyghs+xTlCZD1hgx6qtMBOwDYtRA1VK0lS7ZnMVRjUqLB0IWpgRvlhjIaq5SeK6CX9qE/KSmqlErH\nrB/orGDxNO2qoY/Xa/H6tnh4hC++N3n/g+ThvPHenMwspmzypYIzhds0HmPvdQlgPK7itiavVwfs\niGRFEtGzHapa+hMRnHNR2Q61iODcAUAKZiRnLB7n6tZ54+HIIvWkstrOrIWPo2VyuXaQASUbT48m\nsIa3SzFmIdHPclKsPUHMSnpi23Y6nVW0q/nkbK6KPNuRZWsL+BVcBlpbrnQVEMM0OdSwQ/jOf/9/\n5nd+x3/E+6+DX/j5z/G5z3+Z999/YK3k4594l1dvOZ9890v8wH/yu/A639hgqaOt4GXYaoa73V5t\nZb1lYTYQrz2kCSx3xYg0ZqltApmdohHp2RAqA2SASCfPeeM8T95/eOThvZ+hLCkNfu6v/WX+yp/5\nLxDOVr9ow2bqAd4Y77CDK9ra0UhKd4CRY6sq+uqWTFygjthJuM0es5nXDUGwh0lVy+IQNAeTrTsV\ncJxJMasY1VbsyGy3mcVWNZzt1NLEbbCm4dEtvByKVZCVzFoQnXgV3Xb/Jt1SnSXSQUmA4Zg3XLnW\nYnh0NTxtB0Ah7UBWT9xrmKCdi7i1sWI/n0U0NBftVlVvs0ZEcTuD2+vk/TO4nQ/M82TOaCFUNW9w\n6uAqrWAZF+U6jLvj4MXFuF4aXz/MGUO5XAbDjNACMeaqPSBLt374wzHdj4YXUtveWUrheC2iDkyF\nv/XXfwwQDjNElFVgfjBXMFN3C9zjD6ElH6PaLpwoatnBRQNoB1nWznJIC/0Fohr079k0CWWUFKUG\nK3EFlL6oG4+ULGRDCIjACtiDVTS6Kk6a1d2jIkgZEEWxEO8hIW9wVNU3cxwSaanTXKCDtUWsoopk\nH/wzs6ubgPM0vnKe3GKyYpAlnAIa2ZdWjMf1AHFPaaCpG3eCIJCAFYHTuB8lHNJ4lGtbXqOcswrX\nX5KtmYDN5GGTmZp7dJ9AVk/fWpXtFc9Wt6YJozqoZkVbqnUxUG77dUt3QkjtfXWF0DcKk7oFUxum\nSU08RsuVVmN1PgZVk7C2fBLb/VYFFhxsVhlpb7+3cF9F0XJWKt/0LX+A3/4tf5Cf+6Hv43/9vn+T\nr7z3Pu+++4r76x2/8es+wfXqvPP21/Cn/t1/kO/4D3+qg5oqt5A2JXii4W0oiCKPhYVCNj5Z5YgG\nocKQ0SYbmSwxPDdOKfFGlqg6+Ye/8z/lh//0v86cxcNcmCpjHMDiz/2R39qHlOT+7d/Iqn+tL6Do\nHrE4uapDTEISN+XMahZZg6HK1IRYLJz2fBoja5NLBYwOGtmsq0ztkZCyMe4Y3PKkbPT8hVWgyqwu\nbpzG1tMMp9Ad8NWCDONBgmu2DLS0CWpNuuAROJ7us+j+1668ZVe11bZpH8lJUasx5kxtGC8nKt1x\nmAoyo6v8QxvNTtpFhzG0R75WjnbIWrGkQIuIwuSADALnxuSSg8wO5jHbXLOsHXQ6YOxRtWrGYYbr\nokSIcLSCYYXJBAzJicTBGLYhiDZnDVd8a5U/bP0qKt3NrGrg3jZQsYA6+dQf/JeA4v7FS+7urry8\nf8Hnvvh5/vM/9t38wi/+It/7Z/4n/vlv/738/M99mtLCJHvMm/aTSJoBrRj0ZLBfUjOojC1VbVcY\nWVv58KQZ7Fit7jRq1eB+bezzqYWhnix/7b2G6iAhtdnWXUnlJmhqdYGZuy2WxqLJPgD7E3TbZVvO\ns9snr/bCI7sCVG1SzYpI4TyVxzyZK6i5f5r0iDriQtZJRbb10JQzak9pEwRjrdgutuQxe2jOCljZ\nKoBOLg1/yL5AkfnG6aPWGthkdNWbQa6GPoBum6S1iLVvUlqTEK+ryEhM+7KsSB5uEzdlrXNXHFBT\neUxpQ8csmDBpx454MtzbZUYnU6+BanC5nEi7bJmSiPUBNretnhFyJreVpCyG9mf7+n/0D/CPffu/\nRazgC5//MrfbyTvvvOLttz/Gy6/5Wl6+etUMfl2Qs+ceq7WZpCwJvVEOQ5TD+9lGWCsmTDeV3p5/\nwdBITHvOREhTt8UDFs43/M5/kidh6pe++AGf+9xX+PKXPugz12kdRPmn/shfQqsaStBJRJNM6dvm\nvHW3iCBjcVgS2fpUlwOiUFp7miIkLW/san71263W0Tb6ocgchIDZ4NjnuEmw6oE10XME1KwJ0Ggn\nGylUOlpwKUi99VCmeII1+meJBZmD4NKyNSsklZKGY5YIYoHIuT9zYRZUnbjlHmvZsrVcE2QSY0s7\nA7K2e07gom1QUa2eQyHNi9gMWEpy5ZbJrZQb7fycOVsJktZzFaSfqG/659T+zOY9MMuHgs5Wsag2\nXFZNvQnWiiFpV+flEI6LMkz3ZLgPj6kfGXSdHino7piAXFr/6GPwz/2+34+Icv/iJe99MPn0j/xV\nfuYnf5a/8TM/yb/yz3wTf/I/+0N86TN/nf/+T3wPtt7DdOCVPWBb5p6stP1j1UX3k5oh9uzSvsqD\nCBriyGRJj5pL3ZpMEayK0n69VAfCJ2JCaJ1gSstmACybIFrapODqsN0jGDe596RgCLH2o2+Xmlfr\ndkO7xVHPrixEUI2NVHeLf94WX35cPMzF65zbmWNE9dSv2zQCZQbcIjlRXpeyYoG0znnOycPZ4xpv\na3FGcLudxBl7JGS7e45q+dgwMKk2RAznot6wSjYmZxIcChdzXuzh4iqgUugeSznPgqo3w+qPagH6\nBMQhGGgZt9X++DDb+tbisl1Ea/QM26rtdDqSKS1sT6E9+XJi1FZ1QIQw0lnBniKlxDzJtefLiqAM\nbtXJcsjkG373v/pGbfD1v+kbML1wOQ4+8YlPtAOSxGqS2vMOJpM5BSrQOiiNre90UhO1bidtGRd6\nhKdtiOS4KJEDdYHqPTNzpglM4a233u3kU79ci6n8y//BD1E0yWvSQS5l9uc82x3YB6hdUYKSNRij\nO8QzYydRofO24OUkJ1TxmG3lzervEDa6TBhtz53scan0TI0R4Kv5kWL/5QTVFaPIiVBUBaI9llPy\nimWbP4qtNtG2zYotDBrrX534NQuVYEhQYVQOHgMuNvqOhrNWE5uyR2EeY/SgIaAsOC7F3VFc7ooX\nF+nZIO7b/aWtrCkDLjzGgnzkdsLtND64wa2UQwYyWookUvg2lywRGD3+8aIHIg29zQoEJxbtiMuW\nm9kw3B1cMW/JZM902LXcJo4/PKZ+xBpju7vUetBFdKstFQyHV2/d86M/+mNdXeb/+7VVxfd+75/l\nk7/t2zrjbb90fyhleyM6A+8LDvSwiaeWf8pmYgWsh46otrskN7tYKT1rkyd/eWPOReNa6JbVrGTJ\nCdUVTMP3SUWzk7loBhTZAgHZbVcPbO4hJN2iexZBy4hKkpT2+itNHsxZ7YoSIc7FiiTPVhqEJDF7\nLv6wBvznVnfUCsykKxe0bZFz9ZCQWN3SVDHGwaHtVy/RrV9toD/F0WOhCdetVFKBBz0Y1U66lqBJ\nj2harZudc4u/TZk59yCangI2RjLX4DqciIVJ4N4TsGYEnsceCpSsTIYPKnsexSDJ5ZhqW2KjD2zM\nG3o9kGxCpmw7q/bwnBVJyGTIXesqIxgmVJ0MG8x85BCnNPktv+Of4G/++F/gOAYvX77kk1/3ccqu\nDC++79/+PWB3UCey/jb/yD/9R/nG3/svUHVgkqy57cQSXRXuAJt1UmlU1Bv4I6Kr7Pej+Mkf/gn+\n9qf/Bx7+r/8OOLcG9Fe+Ut/yqX+H19d3ufNW0wzt+RxWzVdINVmbnlCjz6ApNZv0TGDoYtbBVaT/\nwgDvYfasvqej8TjElAjlbrTm/SGUq7VqRVYRBrIS39hcT/vbmHtJQ4Xmm8vZA2sQKk/UBpOJiyPV\nDkgbQkQrkw7dnYluuCHH5lFAJPFQ1plsdSciuc8gqHVH5Qg2QFc7Ed28oRL6LxVwqqvYW3L1wYwb\nU5Or2/YSJGueHEcPtJos7rHmYhBSByq5uY2GaeZYOJsQL6Xq9kZNNaSlrKaJO9vy20ol1XZuyoY5\n33jmf61BV8y2tAPqYqzbyf9D2tvH7NqlZ12/81xrXff9PHvv952ZzkBKW6aNfHTaKB9iEW0UKBVi\na7CxlGjQBMGECEHFREw0GqB/qFhMDAkBAsGPEvmQBBEaaWIRsNhCASmhFKIzoZWW0s5Mp++7n+e+\n1jrP0z+Ode93KNCXj7dN5q+99/Pc93WtdX4cx+/4n/+Xb+F//O2/iU9933cT57vUXRPI33nCf93X\nfg2f+8VfvlF24m9GSdT+2bItDxSHYlrarSxGgyyBxmOKdVin/o3cmgzbB/sqo23QRm5Xm0mMKclb\nOjUXs5lsqtmovhdCxptxgmYTaDHiew69SgcTHet3opfaKt+tSaCLoZnAKYYOZm3sJVY/Y4ENXi+5\nmSwHZsEqw+u9SJiLHZQn8zSOS8qx5WJXZEs4k3HtgPHiQVWWxhSNDMn3BpJ83fnGIEnYcUmYjUC3\ndUVyVuCxdtdgTCtm6PNWWIq2+Zjxohk3SjxRn6w5dTmOThAcW3mgdIJFr6Fxfnas3YidpDHdeABV\nCzenXae+1+U0Cr84t6fJpTWGXxW/Uyfdi7WA3uSGy4PlyVmNj/3cX80nvvOP85N+8k/h+7//U3zT\nN/9hPvlDf4s3j//+HAr4yb/gq3l+doxFoCggc4MZuI03Yvq7EkD/b6zD8FAiwbf/vq/nB/7S75IW\nff9XVdxu79H2QNOGz/ngwfNz8m3f9Jv4iT/vV1Ir6WPQcaLDWScX78yYHEcjq0OTVnvOXXGl2mmL\ng+FwErh3epj2G2hx9Po2aRiDIdXLgobmrVVOy9z4z8VoBydzy6QSy125xcKORuxnvVXQvHOrxMcA\nFo1jsxvuFX9uK3NgeWFR9KWlJQ69O88LRojI+0wyIukuW3n1jpmgUtYkT8zl2AGjqzszZytApg70\nU5hHax3yykMLjg4vHI6jaH3w6ji5jAuX3rA7v6S2A469symNv9xdu6vSaM2btNgyVSwuhz5zc8PW\nVn00ue5WalewFsT6sStd+7FKYTOr7/ir75IUv/Mbv4nf9Zt/FfH8Q3vjDX/vP2rC80Xyrf/39zLj\npearJjC3e2lw7qZbEtfCyA48Tt2G6eB7g5wmlcJwYmnWEndNnSEzRMt9Y9qbJ71S8OcqwZ+JnRrh\negPN3oNT1EY5koPMEJnftZHs+xA2LSeh/I12rxHgg4wpTUe62tRTqQ/vlvH6Mzd+8J3kM7fF6xms\nperGA6wbZ2ku2HPhbVPSgHEUw4wVHWx7/x26O49H4/Fh8Pa1Mbo26Jlta3K3pKwJN5epbXemc+IQ\njc7Jc8DMJKJ4PYPbqdFFhPGUWsDdXJXvCphnEihRo1ibd9ql6SxJcnzNfWG57Mpd7qPhRa7A28BD\nizfby81q4hRXwZnGi4Eu0dDyfJVpUbov27MmrTnnSim2y5jZ+M7f9x/Cp/4in/jEx4mYf9dTuZ9n\nfuk3fJwsx2fqQvahBBREn1ONduyx13sLNXPxCmZ0KifX86/ze3/DL/y7nv3P+9jP4aM/6WfyrX/k\ntwLgGG+/NfAxOJ+f6R/8cr7m130j0eFwIGwDfeS4o+l+sCxm+n4HhMS8hXOdxkRsi7kW1XVwdFvU\ndOiNnEt63a0aGvZMxYWyZyIvHC0kZTR9hxduEIMnnxwl806zza0dxVlt0/TijfkIXPhSdtdakk9G\nCIpPqrtaOxOx0sEXzS/MuYT4rE3363cXp1yCxqF3dhUPF2cMjdYp21LQIKtprFZG81C0lDUeWvBw\nNR5HZ4zksdVWInQuh/F4bW/cevf/WoNrG7gbD6No7b2pq34vvUtH17tkrfFgOufGxbkMOC6C0hfq\ngl+9dP6Rgym9OWvB7/j6X/KmkH1TAeyF0v3n/9zPfcWHP/QhqorzefLP//Qv4H//8z8AOShrLGRw\nwBZZA71uul2MZ5Z1fBp0zYZW6FDNSmyJ2D/PkNRLPEEN7Yc4ILEdRN21EdWWNbAcuz1S4KBjag32\ncsxN1ksBSEzpP5GMMmgmyc62VNrKzfZ0SX6ysDbwmSTSNOYGofgZjNE4RjCWwfPAYxGtc0pmgdtk\npB4Y6r55NXI2blurnKGgyz6Kh9EYzeUMao4d+yBc0idSgg0JJJ6qIpZCDrOC8sVaTTbjBc9ncgLd\ni/BOzMUFdUjNbR9IzjHY5gKYmwdcrvEMKXqX2yCYzAnHeGTVpEXC6rJhNlXirQwB4Dszg1GCXD8i\nDkLH8WOxyjlakmmsSiyTt3vy23/tF0nFonPuRzdYP/oJRpes8bW/+buZ0+ku7/7+gVAw4la0ZIJP\nWkC7NGmms+ErOLMxOpzWeb58Me+tRJLunV/yX/5VIhsVN/yP/FaNAw7juL7gchQPh/PpT30rH/9L\nf5qP/tNfxowLBtzWpCN8pBghzlxJN3iKZ7IGPXQZP3dVnjcEOzLgeZsfylOaeEpSzTuCtImS53nh\nciQ5O1jQm0w5qxRUObKxnG382IvRLPrSs4073p3n243ehgopTsy0D4k46D2IVKrGuo+7NETGGLAU\n+dWmzEdpi2s7mKeet4aUDHkL+pA99+oaPbam3LdoSpfptnc+ulkgk1cPyjl8GDB6p3lxtMHVjdHU\nZa8q0dA2FyaWYFaPruX12MkSsIuWEOdZ4xfHfDH7cUd/79GTfn4rtvTgx34if8z/OsXo9ndIz0br\n/Lb/9nfwHd/5N/iz3/VJPv+L/hmwxid/6F3e+REBMi698YVf8GF+/s/8cfT2jLMTQNHsCluyArOg\nTtbW5mH3ak3uHe+QvW/SmWQhGUGyhJCj4LwfPFqyCEcJZaeYpzWZJNlukHIBrbvGUPJsyb22hExp\nqsZqOnzemDfW9pwj/OExnD70AbeejKH4n7bNH7Ztgy/G4GJwvU5sGCO2cHstahanp+DOW82wMJ5v\nqYy0grO2Cy6SFfr3cshocr5O4fzCCeaG9NyBHc65JiuD81ysm1M34/l24/k5eD4XUSGpUBrtCI6L\n0w/nMjovLweP187DKC6HKhiB0zUkdjM8bRtbGuZGd81HKxZjq/WqL2ZJMVEkZxozJIvrTcyF9AZd\nduPuSaPRKhTEiRY9eOOP/u7/7L0DF97nwIWXD8bP++e+hJcvDmJ13IvAsU3ncl+YDbXo2aAaPtX2\nV+gSMBOp69Jja8hVfX3lv/N7APiSr/j3+Nf+i7/OiisRTtkj/dXnAXA7k7/9g59mhnEcD3z4Qx/k\n2/7gvyXZ4lzMmJg7t3WTYeY0MpfkadXAL8h8XTznxFKb92EhKRdwWCPLaEOi/bGNCo5xDLTM2pba\nNbX8Um6hc9tWZnoxrDEwsht9k8emdaWjjCS6Mefc6cJJFKQfOylBz0fEgUdhPTlMDrRgQlN+3fRF\n1KJ1MZRbOuctSV+cNYncfNvustXHZEVul9eSPtqMFw+Dtx6dF1fjoXceu/PWi8bLC7y8KvGXnFz6\n4HIY8WBU17x2uBO1MJzWBGE/dhCut/aGL6GDvmmE15xz7bOAxkjwo9HbjhYyGZVWvs8DyT+II605\nZsVf/p7Fl37JT+dP/ulv589919/mZ33lL6X6RzBr/P5v+mao4HYmn/ie7+dTn3yHSfLy1SNf+BN/\nPL/tv/71zEwWKMGz5BWXw7yzMEw9JGbBoOuGtisG9NK8dUVy4MySDpDPYjdkLVYI51ehBybPg7ST\nSn3Bcx1EPuEWOGA5qDogu+Ds7vjYEI6SLtTM6ZYYqlrdFLrITlN1dy7dGGPzgZtcModDH8alOw8X\n49WD8+HHK28PwVcixOm0Mu6W5paOl7a4XKTQuN1ucIo76makTQr93rdTZK1zBfjSS9MVwV3bZrpS\nzrAHdKg2ppYFLTm6UAakQjHjdKJJAzyO5LCi9+1WuomRE1b0rsqB8yQJchpt663NDIvAfIGlOBGb\nZ+C7JRpNGW6VDTs75cU1SxjOGqwdTthcvGRsV6aj+Nwv/NL3qSM0Rvi8z/scfto/+UV88cf+Cb7/\n05/heQajDWVjoUyvWg55pdliRZPueBshiMk51VJzSkdzQ9FQ1ElV8cGf/C/wdV//1/iSr/g1RNx/\nKiVOf/Wv/6MA2nQnfPpTn+E2i6sVL64H3/Nn/6TSF9jbF7vynEp6Vvi7ETxrBuvBrZKrD7S6KdI7\nGUM8DA/KOjlNHGer/UwYT2la5jbp0u8clN464Z0Hc8oWFxrlEwpaBtSkj8DPHXUUDZ/3bDyjXPl0\nvZx0Z3gjpma76YuKzZrGGP0q7sKSLnZk57TAmGTuSjE7zAvliyg512gK/izE7V1TTkrcsG6MA64d\nXr4oPvKy8+MenVdH5+FivLhe+PDLVzxuNsW1BHYvYKTz2B+5dudAS7Bum5R8lz6+wRQYawURN9w6\nfRgPPrhcjYfmHEN+ghSFR1bo96kE3nem+10ff61ZISbNaXE30b5RG2Rqg/5lX/zqzZ99663BF330\n83n9+sb3fu8P8Ef/zPcTdeEeK4MFwwdrFy3uYKlfoGxqKRUS5lPaNho7EjqVDvyjYcEifupDtm2j\nzB0tvT9JbGyFhHVqp8k6svaFQ6uQJoqlpIP9Gvbe35sZ817124kNkUnW/t85i9e3hEjemcbtvPF0\nK17fgneeOz/87hOfuSl/rEh5tq3xgGG94S04vHFtoe2oNR66xgrXa1E0rq5LAdNFdb307YwyZhjn\nbWo0YS4kpwlJN92J5Tw/L1ZOVsIZyZpqn33P6FYr5q24lTFvJ3M2bgXP59xEMSX9pg36LPyisjYn\nzAXt0vGU60oMgQ09AsaR3DI52qB2bp43QXvabJIaX/Q99WWsNjnorEquR/A7/90v4l7imung+rr/\n5rvws/F7/9Mvo+Yn8Sre+sCFz/ngK55O4wt/1q/ioz/n32a64aNRp6JkIjqtrY0WvOIs5aEhQE5w\nw+tC5BO9X6WpNhGlYhnhyeGSIdWtMbvA3WnB3/pz/z3f+gf/c64PF956qer+wx98RZ2L7/3kyS/5\njd9B2YXwTj0vstV+HhsrFMlz1qC3Gx6NNYZ4HAW1ApqzctJLAHtluMFCzNo+Os+WXJakdlale6Ud\nVC4qb1gNjiNZszEbXDLAYZ56J/0uFTOZF6Y5gxPjwkKkTk7BvefhEDfNxEOgoocGt6UkEwOcTtqz\ncuH8gawbhxvUIOsmGV1XHJIdMuqMpm13oUSah8fGq6PjZlxGcW3GQxNbIgpedI0CWmv0rnfVzWTb\nb+1NMO7AOS25Hk27crMNvrFtelAF29x5cRgPl844NCN2bxyX+16pNN3wvXQtePVof9+Z7vtWus0c\nxkFvg8NFZGdj8HT6jM0ccP7QN/+5N3/leQu+//t+UEPqh4MX+Q7OxEwLhGsbWBXdoNWiVUoGVjdB\nMqrQeP0CdC3G0jW3dG1sYwcOLppy72NuSpm+XrJTJSug4nr231t7UwqKuCmnNryc3Wbgg05u9uYh\nt4qLJtQ3FDztTtfXAmx4cbjmfo9HY/TBy1G8PAaXMTjcqXriOOCtB+PlAzy6c+3OtSXHaDy24K3j\n4O2juAzjrccLjxfn4Wg8PjjXY/BiGL0rtLJ3UeDuc8tt/+FyDFprAtC0u4bYOHZ68xgNb0Mb61CL\nNY6OD0FfPI1bBnMu5jKeK3jOLRsqwdnNjGFwG40zgudYnAVjLKxuVCkEsltCD7wX7bKj1BHEumop\nd6qKdSuWBbRJxQkRlK29bArlfp0HX/Yv/2ps/98v/y1/ka/7hk9Q60JW5yt+1e+GSi5X4+gH3/cD\nP8znfukv5KM/51eSTYuYWkH3oWe3TbIGXhd1N1syNNuO9c4BdqO1wToX4VPzvb3tvpjifXJ2qi0u\n28XWMH7Cz/7XaZdHnp5O3nk9efXi4DYNjsaHPnClm6RUFUH2iVunVmPW/U5pdJNiYVXCkrxRqEaB\nX5SEXcwUTD5c72zHYcJY0I79vRlAYLG4tobbwXHALdU+X7YRJ06NF0CkreqaDzcbO03jkdg7D5sL\n90U0Rd5TTRzfBofBc0L3U6SuTOYOf726NNbD0OIMo/nQUplGH8WllOqcW5lEOt47DWcmeCxu05ih\nuKmzREDzFhyHM/pOhe75BntZM5hza+gLHryJKmfCkwbiZwQ6qJsbj5eiXZs4DIc0762/t8syE8DH\nXAfw+00Y3vfQvasMOkne0RtbvlBVqkQBy+Rzv+CL+Qvf9WnMjfOEyOSddxVX8i3f/AcwTJSpTR/L\nStKT8LGZBfKwmzeKJvlJCaozPGUOTelfzyVDxS2TFUvCevRJrJismVIGZKoqbpuXmn1rire3G6DF\njugQms2b9IK9v7fp1K1veIfeivJiuEwTNNQKdac3ReCMA45LMboE9Q8PxluvnI+8feHth4MPvnA+\neIUXj53hxovmvLgWL66Fxcks3cZrLV18rbi4MVza6TG65klutJE78227xhi0YRzDGb1zNOlcR1ea\nxyqdxm0AACAASURBVKN3dRYmnF8NZ1KQwZyNd0OM31uppTtD4Hif+VlOHsnyVk5aPBEbjN1N8G+q\nUR3lkJUrWYCiTnnnzXUIhA2Ojbv0DavGO60uNDuwNmRzzXxjA//SX/gf88t+y//Lv/ENH+c1H8By\nV2Ij+Ot/5g8BMI5BlXHeOj/1F/0GXUp0vCTxKd9pHKYo+WSnLqdzrqDiIufl5gRXlmhg3uh+UVpI\nwfLOdSiptmywwhgmgwXZ+MW/8TuxZjy9DtwvPNjighPziT/xO/998pxyV9nBtAKbdNe4KJsirtoo\nuh1SHRiULY40LBw3J7qSrL2CllrE+gGLG4D4zZsut8ppLXier+ktuYU4shaLGYm5KsjMElvAjRY7\n7cMSrKvVdrX/uPFcsHxy23CZMjhKqKiDjuegN6OPHb1lg7poCXhYZ/iNNibNgsbaoTFOesNsyJo7\nOnYkZHKbweu5+JHQuPJcS+zpCMJli74T98wbFQdsSJGUM9qhPjbXCCwMNp/ZTUXVdQwuw3l8MI7L\n4LErSy4idsEnl2BE7bTkgv2MjveRJ7zveOG7P/7EakaP4nSE59tGhioR1J2luBOTU2vO13z5z/jx\nvHgcfPCtR8o752z8/v/tu9lyaGSJ3Ni0VBsvXm3sw3nLwXbDK3qQVl+kMW3Rom9gCfQdHdJ8bKdb\n0ZvUCsaB+0Si0Ya7pGqi26MBO1pkOUm/W5Fd4JzuLq5uUxXhBZDETrHNEjquL40zZkljPFOR3c83\neD6DeSt+ZAXPT8F5wq2MVbEBNIvGVbS0OreM6sC3XOnhaLx9GYxjy62aUheaNyBwvxuUG44OVQWK\n7u+SQeYispgT3l2L21k8nQLlPIf+3pjB65WsVbx7Cqo95yQRPrL3vl/kpWPKRb5yjLCgLd8X2bZi\nJ9xRlESnmCx3HrIRKEvLthQvberh3cuOlR3jSRKebDtFQlpiUh5owwjveEK24Pf+Bx/l5UPjGAdf\n9E99FT/pa/4refy5YH5ipsMyQpllxqklYBbhdzi1qpFKfe9GsFLz+hVG1Y3em+aRKdRopSzLGUAX\ndN1q0NwI3uEP/Ecfo3fj8Tr4yIde8vL6yCf+vx/kq37jX9Gz6JCuNv+MfTAElM83ypkqxVl5yn1p\n7rvrFIXr9KkFT8lwRDRWJhfvnDvi6uiDiHex9siZgu8f1igPchbetTzMCMKajC2YcJjIPg9a5ul9\nMdIXlm3vtJOxx4JZXaMBTyqDNraVt+QG7d02oKdxHXLb1f48h3XSShAqLqTJMLFs0YcJzONwHcZl\ndB4PY7TkejFeHuITH11p1DI2OWUhhUSD6x125bugokkwYLXf9aTV4Lg6bsm16/vvjTeW66qid+c4\nxDkZpmVhAC+u/xiSMTY85jltz/J2XLo8tfQ9xCivfZBCOx75Y//n3+SrvvzzqfgMb731gk9/8gnF\n8vhunXzTyzTX1Dxli/tKbNbKoHdTxI0la3U5SsSuIdeiNcWpRyvF6djaD4QqbfcuHzgdc9e/5f7G\nKly6eTQDouuA3QP0bqWZKJsHu5UJ3oyMOwZPMpZFKc9qqvAlnYHTL8ocO26wrnA8Ga9H4zaT24Sn\nm2aSazXOdXKrjiMPN7UEt3bNdecqaLJO29ThUNvIEblxeQMyT2KJWFXJBpqfyAJUzErmKsHVz5Ms\nuW7WSs4snk9xJ5TevIDG8GQdckGRRutDgZZbWrNi0nfOGe0UKAkliLRmqsAtOcsYSJzvbYvbt/TQ\nDTZOGqpofRKn42Mwa9FX49mLbjeKg4naP08jrPj4d3wbrYzHlx/kX/wV/x39Ix8j525JPcgNy+k2\n8WbEPDEfmK3tUNRMf2EcrRMZSgLebXsGWJ6bVMZmKis6vR3FiqK5Ynlo2jtUOq0/8Mu+4a/wx7/h\nF/HBi/NTf8oX8Im/8QmgeLg9cT6+RUURdHo3zHRZYzq4l00sO4bR6oTehVzNoqwYNGadHOeQPrcV\nVhMwjo4SIkISTY/A7EFkN6SnnaztavRN66td7qgbSJLeQuxqmxhO1DPdD5lhsm13ZjCqUb0gOoz2\nRoF00BmXlO06T+be31jBIDinLmo5MjrZNebCpMdtPsk9uutL7X0fOk+iFiucXo1qndcVjGth4Vw8\ndmhrhzLl1EXxjPFgKuaaHbJ5p+G99pipk03yUMnvdC7gOmPMOyAYus4zqSPkGnyfI/X9ztzs+svG\nYewS781CSckKi7RjV6PSgxLBWx94xW/7xv+D24RPfvo1MwLqtt1cucMmN0vWirLFHUW3oXvgtnmr\nbKPDFIADOFOV6KKYa76Rm929z26yETaX8iHSiNJ8sJar/U1BeMxhNLleWqs9v9Uy23rhh9r4Y7Ni\njaIPw0cpyqZrNuy7qrNSxWSmn3G04uW18/aLwYc+dOHHvX3wkQ8cvP1W50MfcD7yVuNzXh48Xg+G\nJ82KTuM6Do5jKxI8iWw61MpYc+sGSxggu38vS1zxqk70JY6AK24ofTFPf+OaeXee3GKwZnBbyTur\neM5k7UqQFBKyNbYcrNOqMXYHoYQqPQvF2NZrbbp7NFr6tpmmmOQleXVu80burTjnNiOYZuaYVAOZ\nSvHI3IkCloyaUIccetXo6M8dbvxf/8Mv5cd/9GP8gl//rfQPfQnFweHCu0QZFcmlgjr7nvFDbwsr\nye+6SyPaAIs9I9+KjWFFK7GFEyAuuAf9ULezSplklUaNbX116XPOTF7XK37er/sWPl0f5pM/8hl+\nwud/Pmec/Nk//PW7ajIaS0Q/BItPO7C2GC4wlFtSHFQt2uziSpdpOZhdkrudHZg5sK4KPZdGN1QR\n3KDv56WgmqzonlB1svJE2w5V7bf7O1+6IO/xP+RQdhmycItNrKpRxZPegyyTrds7rYaSWZrx2NUF\n5KbchTt1FpRY2CtV2ETaPtw2YxvjRF2th4BUQfG0gqda3GIRBbcTnm+L10/G8zSenk9uZ3C+Ls4p\ng9XpSbMLEcHtltxWcIaCYOd9w5/F0YzWjdGdo/k+9947JzAVgUOy/vc9Vd/30LVSblKaRNKtNdn0\nWn8z77TQll3oNm3xrJKPfeyn8RVf/Sve/ALHoS++2JvUUsxNTDmqFvtAdA2pay8TKHa/BGVSC2Ai\nA83K7XJLLVwSqnW8S0ytmOtJb1vT20REOlrSlC3DsdMsdGDfF2bGxZ0LcJHfTNXwm4MdHbJsg4bV\nG55pql/es6l9AHfb6DldYA9H4wOPBx94HLz16sKLF/DqcuXV9eAYrofTZBGulQKIuOLEV4A1+eTL\n7jxdvRw7jo20ElHJjGgnUY11Fu/O4DyD26lqJDI1DoliLpQrtjm+i5vm0yw8JG66dwtRDWoJ/mNF\nazIIRDP80Jy7XC9dhFgdeHHsLiNLVZa1INuNrWrWy7/b1radiQ1VJN2TZYpkd8QhCBv0bjzXM//S\nr/jt/Pxf+8cwf6Rb3zhKKV6sFsuMs4LqiS9VjprH7YSPKoVXlqzosxrVF4GL46oSfOuvl8wBIZVI\ny0FZYH0HcBI7xkmGoBYG2fi5v+YPsD74lfyFP/9XePvVS77z2/8nvTu+4enZNwfBcMQJsZVU3bae\nHKwuLE/WuQ/ZvMOfAs+teElY1ekDsqPuqIfMMuGSwjEZWSw7SBbLO80G3qRGiq2lTUtmGUcf5Ooo\nwLNo0Wi2b3k2ON/EJabtf1NRLrgFtmfUozaqEc1dKWBCpMYnYXDpxVm5edZKjrDNLJUZQb9BRLJO\nwX/emcmPnMbTXJzn5PUt+eF3T/72Dz3zfZ965gc/swSO2iyLtWSnXit5JlhzcZ6StmXalqUWJwGW\nZAbrDig3Nk5Ty1cKziwdU58lI/97n6nvM9P9a39z6maL5DRFeExM/mI3MpYq3FKkSxnkUpWSoW3g\nv/mv/AxevRj81t/1v2IPH9bccv/gqwrWXfOqrbDx3mbQjT2wViTIuRSDYwZkY3X9uQuac40usbgf\nJQ2sC0izVcAcW2jujlrAu81vf//WZL08YA/V33wWuoGX/uz9c1uhFjciWThre9vvMB5Rz9TW36V3\nleLfZqCstLl494Sn14vbhuMEMho0g3dPfQbdkYjdUStlCFNXsW9d30wLVRB3OpK3TsQzM41Pvzu5\nzeTd04i1WLZF8LM4czKnAjrTmoZTpRiUhaoDHQ2a+TZ3IhXQmNNZLTj83mnImWM4nS2BXU742qYK\n55bFpe+uJ+HobZtATnp/wEPLKT3I26rNTmYoZzTDNuYwcKJumF12nyQjBqHvqZsqJ4Dp0JZLxdEl\naVvRKDvFTN4dhHPIvjzEA6hV2D1qJrfbipP0riiX1M/RvCCKjvYF5U4P47R4M+fu+Zo/9Tt+OT/0\n6ZMv/cr/hC/9Z382UalxUW6CGHrJfRtPKvY4zmRhxkW+wwzzpqh6BlYbnYixem7dLWT2N6Obctfo\nLmU8WRn0lpy5MaeV0BbpB5zB4c7ZUBfncpTNQ3sVN3VhjWQHaGuxS5LItv5waAHdy5kGaxYrF15y\nj75eJ9BpKMz0GIIfVbLh8fVm+SujqJaIj65CY63FdQxa7zxckse7uiCdWwrqfu2qsMdj5+1Diz0F\nn6haT4exOn41LlZcL8YYxeP14KGBb7i9D1X2Bvt80AK5dT1flyYOxt9vpvu+h+7/872LuXOylu12\ntgxLzVqttMnLXWLJ9R7EuWnvdV9mbf1b7GA+B88DXNCXNyfsjprpnpgfOjiozeUUdq1CLR22539Z\n1AEHThuacfXWFPliBk3jImpXTEOi+76DHX3HM5vJ2npFrNxsxkAxHWYowsV2nlrBNPBVnIaWENvN\npqRafa6VcrX1fdHEdstFLGIJqn17Dt6di/OWPN/0+5sZvSVRndcLMhb3qPFxOB4hEEjTMehub4Tr\nqwTKeQ4tKVfqYI9IXq/iXMU7p6qO16Hvk0rOEGM4o+sASKi2gUSg2Wspj6syOKdjrYiV9KGqLlbB\ndjC2rnFHoRcxjS0BglGNtRMOopJOx+6LrEQIvhXQBbm5tC6ycoGxtKHWCgFMYZPTnCPV2cytTYlS\nqgUuZ1Z2IMBWJ7cZwN3UMe3RlCpNZPm0jvkpvnPGhqZIRxsUvYOFlnxa9mj+viZcjtT3Y8VMRejM\nLGqliozmRE5oV17tLDc2LnQl3JZ+13O2bTlVYolZMq0zCALoHPt522qiOuRkcZHsGotVnUuXXEq/\nnLEs6cjwk1G0DssEh3JzbiQHKQ0qQpG63QhEkJOoZs95s9PGIlIRRNpD6NkcXSkjozkrYs9OxWVw\nW4qcSi3bZnWu2/E2NsLSVOXgnrQ8eAqNAS8s0pSB2EzP6tGch0NhqNbgnMHEuBoc3XlxdS7tECKy\nFcfRd8e7j6DUKOm4Dh6vyePR6RehTduQjLV1jYJaFwd8dBVHKtzETLkcf/9D9x8omNLXJO2gR3Aj\nGQHPON1c/E93PJIzBVzLZXroK8m4EX7Im2wN15ZBX2KbgifXtkZpq0WZqPnOjnwucWqr9CUKw3dg\ntsnyaCygPtSUXmvogTOFSpq5IPzmVBftSti5Pc5ILbyai5pvVhy7utWBLPvh/nWhYEQxm5GnonuU\nTWYcqn+Y4W8WddPlbGvlrNKG+E43OzM5cyn2owR+6SaYh9nEI1n3v8uM56cplmeI1mZ7o5opzei7\nZ1EhgfeZJzLXKlxwIoZCA15nYVNMjNrwEUtdPl4a3fTYc7yStvVUe0IBvRuZnT6KvBXexVgwdxkP\nkMX1DSYTfZZKunAOtF23Mr2gCct1eWUuWit6brtug6xGy0Bw7aA2K9ZxznIlXvTc2/f7chbquDMy\nksOME/A6hS2twVqnDA21/7a9wda8etK58JwKb7S+dwvuXK1BpqJ4SMbOIsOTfgladrIJGToM1tom\nnAMoFzIyL2RNXWrjUHwMV40STMudo8l6XRitSSY56m4OTpKFd9uw70HViWXDcYbthAkW87wbigr2\nZ7HQCMBacpbTywWkd+NaipPaQAH9GynmgDCNTubCq28Ep3GMK8YkXeMtDqOXAlvnbuXDHG66UFSl\nJ92NKAUSVBWDwGzowkP/XlZn9ZsSVGpfejpx9GcryFvyI7fg1bVrxtodVjJdBLtzySz0ZIZfRBSL\nlIZd40PDDrk6AVYBM7FKpjfGVlHROnHuuLBqWrKbxrF/76P2H+LQteZEdVqmkJfhnE0vJXc5UuxJ\nMgFrgC8qT+5pEM3UGhrKGuvCXjHMVXkUVC2qGm5KspUsA9KCmQ1byjqzfaB6C9w2iSsbVidlB/fM\nqULR7ZlOmbLp77zXe1JCUrSuWJ/mTkOKBXNVusA2bOglrtox8anD8WY6eO8z3rnjUZ5Kh/Q9pTQx\nRhY305KQuo9NdivWoN/0cjxnMs+TZ3PGocwyHfxydMWcwl0ueDLwgGFSPqxsvHtb3Na6T4RoLnBQ\n2uYO20IK5RIftiW+DNvAd+kNi/KgZ8eaPs+jDW1y28nBA1nJbQl03TDWQ9EYRAwyFRHuvetl2gqV\nVuyqxLjYhkmbsfq+oDO4ZpeywdQeWltUv+J5cnCoio5GdOEuwyDeAEoEANfUtcBcS0/TjNZMGVaH\ngQ1t5ctu+yLQrqGiyGhKSqFUicekmw5IxgnRGMeGLrXk4luBwnuMCNLp18k8E+tXVibtAhbKZFtN\npoY06D5wv//ZjT7FaR7M7CwLuSezU7YY6Zo1ByyTtKlSnZM+b99VrrQgVifTDy0h0iCD1RpHGbSQ\nbDKPvXQ+6YdB6LNreyFMU3VuTfBz9T5J78K2DlEbMKYu+eUbRdlZ0pkokSRVDOgiT7KaLj8Hsxsv\nubBqsfrBS0vOOlB6jcO9bi8FzmYOnktd4HNplDeaHKivb/BwFP7ksJnV71YQt072qUTgzccdh36W\nyk7vsTe9sGbHPYllzFaMqefsRLpt36qistJ3sSVk/o976E7kPJmGbnUN63YrLW/5qmBOzRXTJrls\n6+zkmR8u2ZVharPL3lvClbS5lW3P7mTVywwilKbbPGXltS3Od8Ukr31It7a23bfepI+aFbWajA41\nWXURJ7T1/aEaD6bHpKFKpIZr8SEluKoCF9tz7rTeKpj7EfA9G27NiaVZ1ERVlXtyuCsyp4pw266c\nz5KlmJZJnGrdZi7mTG4h1sOK4mFc9WWywycr8TjEZ0jjeYIRnDjPa/K0NGdWVVM8VUBd6XYyMS2H\nduvq7eBiSY4NUEf5cnGDMwWNTvQiuxejILlwMsnse1nDe6aZjO3kEW7TLRkum2bRmbHAZJho7rSx\nP5PaYvzoiglafY+BOkTieaPZFe9SGMxIehqjG2cEjYHZJNJ3IocO1pWp2KRb0A9T+gg7iDSC8KBV\nI2Nn8OHcLLmOfI/7XMr281jYWHJC9caMUmx5NmmV6QzXis8s1Pjn0Ix2L4zaXiY2e6DFyU1GL6rg\neRbjSFhit3rXzD9Nl3QYdDfWajQ7wYQivNRW0mbX7zilm4ZSV9Cg+YExpZN2p5px+JSN152Zer4O\nOs9qp4TgbK6wzJCJ5OJSlZQNAe45MJs0l1LDstPcOGPJXLQXykVX2svURegNYuqAwvYozgrzi/ZG\nNagsnohtANKy7SgxcbNLG59bLTNLkJqGMLAZSqcQIvuGTyFRDzcsp1ylFficjGHYNGpAb6ExkMsx\nmZmsKWa1rSSseHdX5+fW7poB1mii82vJ/aP5BP+why4zOJuCApspzND3oVgFsZJVQTTbWzsNzaqC\nNSdWCTmx9qBW0JeE7sWWjxmUxNZlwfLaHNiiWcdGkrkoJJ1iS3nMhbrD9VB0C9bWjWYmtTS4z5zQ\nLsDUEx6a9YzmTDS6P3pACabTuhYpWG1Jmarb1tUiZ+liCDOONHFRZ1HNOVNLi+UyVLR2pzU5mZOb\n7QqhBm2nTXRftAN6SJvbmukwO3XAdl/0A9a5aBHYcbCWFjJEQWt85nlR7rx+LlY4r8/iJOm3povx\nMllTJP9cnde1OLpm7Z1G9C0eT/UIvUNLI7pGL3lKTREs1m2bV6rIVuTUZxTptKPxqhtHD1aYYDpl\nXA7nXEW/GFauLLQCi2J2p5UYC8/eUFZi7jZNc/uyK5cLHMpjIi8mw0NNDkOfaeiylTTKuC1BXawC\n606sxRgHc01hQ1Ngm+Gaw8Wu6I50cgZ2dPKNrC20zc+gGBCn9gE16ceh58MTaUYT1kE/Gmstukt5\n0n19FsMgKYJLPWBtipzlTRporZGZ5x2eLfVKd0GEBgXeiWnQ0VIt1dk1mhJ/N/O5TCkrVkHfCQi2\nedbBYLg604Yirs64iUkSBc1pfXNwTW2HdMiNo0nSZf1UQvNdgtZ0gT42/e7eGrelOX9LjWR00emQ\nixRS1LpBaV/TffOzu9ObkwE9G/Tcz4YzQqO53px3Vu6wSo1ffBkxUqqMua25QyqVG7K8356Di3Wm\nBTMvutEMRfMMDT+r6Sy5lHHUFPJyLTlmbY+YGOrUl5Cyo2u0aT86Qucf+tC1vTFWQJU+uM2hzFTs\ncu5onAzJufbI802rmjH2MupU6B97YVNBVd82V/nDiSRctg5pQQuzwfBGceMyjp3ScIfvONWeyRgc\n3pkVGluUFA97YLsBGP3NSATg8GR0zfF06+6+oO5qBaU/JFo0hNQv3Ng67g494bUJxmFbRS/Ggrz7\nlG7+2uhIvO/tuP6NsCb9MBpzDIObNcKc5hJhdwK/NM6zYHNF9RKoNfQybnNpyZJaPNhynuMk3Tnm\nVpZsAPklO3aIkxsOPl3aUvPNlxU1bDQt48Zw0gtO58FDSgabtOx60LJ4PGKzHvS7vGywtn45o3hw\nh6PJy9/g8MaKybEBSNaMw4JrOK0bT2WsWdAWV6C8MVGApFdQnowY3Fw0sKquZR1F1uTSnLkWrQlz\n6dYVarnEYx2buhWoHWyVhHUcXSYRSlJoluQe7XTrcl+qnsWGMzw36auYz461g7wsHdx+gby7yUB1\nYtvyw2OrQjptKYG4mQwla4l3sHLxdC7acHw1VissGtiNcmWItY1ALdd82dC4b9mzIE00QdtzIqjM\nIvbnGHFqIR2O+aA17WAE7R7coslsxGIch2KBKCmOhirL6YmndOQNmZiqINuxdd4FvXFbWsZfvADD\nstH3hCZzaaSDdi9WW36WpUvVpihuBrdQxX+FDXNvnKttRc0k7FCqg4tP7enEalRNLi3Flc7BKo39\nzii6PIVSvuSkNbitoDURER/KuQ4jsm856A2a8TR3LNjRuA72tjje+Bj+kQ9ddfzS6C4vam276LYC\nq4Vr5CkpFLHdaamkzKygb0al7RxSyctyjxhCD9DSDLZZo0y3xord4g9Vr4ddAGkNvYKyCXXZ5byU\nA92KSdLioHy99wGUImSsDUbT1j1Nbc/DrkrlRPss4XhJqnVXEzSHtZLLnu3ORHASQ4F+3sjNljCa\nDtsQ+ahZQG2A9rY2Y/LpH71YrWlLOp0jF5NnQIQy47JnTtrqwtbm7tn4LVXhriWjgJkma96Ny04A\ndtds05vskmGBlfGcmqvbbumbNc3uurqJh64PQoT+pI3BZbfpUc6F2m1uwphc+4BMetO8MbOxWgjP\nicuwgiRxHttSaYkPVTOezhmTF9Z4JyajyV4+HEhTZIxpTPNu7oNqayh7k8470QjFupHLKN+W2trc\niF7kKQdiNCNdmt1ibp6qIN/uxW0FPbdkyxM4OfwlR1PKSXOlKczNkIXEFvL8JygKsms3sHQ4Ubqo\nFqXla9ess/UtR1viWKQZl6bKGC/qVvShQzSRFTZiH/q1gyLzwNoJ4eRU9Z6XIG9KNmip7icy9yJM\nS6TlhWeg42wRObliAqh7EjkV2rovj7Ydh8OlQLF0ySG906yx8uTc35Wt4NIPwoLbCh4u+k5jXxoL\neGAvuuvU/qcUcBAY152m3dck9p4mDU6cmE7ZDaLj3skyKhZhvg/UYHhjyOsr9VBP5pLL8MluRD94\n21AqiTtrhizdTNwHzyTQGRZk3Sg0C55l8KAnx7wzzRhh1J1q+I966D5viMNpJhnKZr8aBT7oLvK9\nubGWvcElysprdHvY9l9j1R3urfFBlALmGpBtQ8wJ2ALp8qS3K2VLi7AMyoe+CjPoh9pKLtimFwWO\nbx89SDamLlnTW3dVwL3LTdKtEa5ZsLta1LsxYy0dtrfc+u9iy3zUSmbIrTX2HPgWOkBj6QVV7Qpm\nSeXetMtrqhFKSevaHa4ePJ+yFkYE4zi4PYsnKsvmpvmbJFeVQh2qdG+snCR9t4DF1aXVstKMsrfB\ncLF+RzrTjTOTxxRUvHowFmRPLnSo0DW2PeZm0C8O3YgKrmNwzuLA6Oa4yxyB6/d76M6MRjiKgKEY\nTe68uRS26EMvn+2E4ofWVDlV52bFqxc6QNtqhAdnahewKjWL7g1qoqdIKQjNnRaJteLijeklVGQL\nekCzg9vT0uY6Aq/CXDFKXuo8CsUjidXuRINLa6y5uI6D1tT+uvtuRcFDETq+n/1z7Q6wsaE6TUyG\nkIY7facbH0PR4CVuKz522i+66Hrn6YRLK47upC/aHCoaCqWoUFB9uzoX01x7iW4CzMxBmA5HLbUO\n/e4mE1E8AwNVehVYNHofZE2aqfNsoX2MRl7FLU5GNzKvlMfONkzKdxrK/eIrGYOIRXO9oxNjrBuX\nQ3FOnSCaqtU2OooukgPMSM7u+CzO1ve7n9wY2tFYUtFZuw29q5l6bsMLB1HFxXVJmJ3UHORVjsaI\nwHryhGs0aEUz6fFbdibBUY3YOl6FAyydHb3RTvAmS/01ZcAx+7HHC+9vA66CXAS5K79FkUQGEScW\nk4EOWqW9ChJzVwgUsJYSZCtCTNVS1Ezfvf65f9lCbfjX/qu/mKfXr2m2SDbwwxretETY/rFd7drm\ntG4WaRWRnYik1cLDAFW8HUmiajRadrnHUumgoCo2Q3lgSvMtblOH71rFOZN3p3Kg5gwiprSvZ3Gm\n8INrGoHIQxlJzGBFY54nGSV27XMRUxbnSH0FvkHQ4ygeX1xwKx4ucNmpujM13zwDzpWcJYxltaur\nJwAAIABJREFUlBCXZ6glcorbqWu8YbRWvLg2Ln0KoGdC3/VoXMwpb1qeRSPSOazxOOCt0Xg5jBdX\neHHVbPrSNW+2U1yJS1Pg4RjBGEPPy10bjRi5vYcskn0ybMn1hoIxW3ceL851JJe+geWo+rUqYkEt\nOEMR7JCMgsvuJB7QIew0yiGbljTHKI6uxIlMAZGwrrk7Cr6slMc/StV465JjsTsALXklOWpVrEgx\nLPwicUJI6yrgeUlnXJBlzDiJTEmZomGBpHZm0JxqOgDaatgZ0lZv/6jPpbmMTQFaCh42w6EwbHXi\nECbGhtIjautc01U4HA3Kd6oySVVoHOI6cM0Fwr/PqdsFVYIpLWqnK6apoLHn4r7IJkMKvXG5djIP\nJSWEigHvnaOKi/le/rZd3CRtOH0cXC+dFjf6cTCtMbxx9KEuqkk22mxoQT+Tsg6nlEdukDkYBUfc\ntlFC54Z1U8TRUHTOzEmxYCwai7kcUpbv0XU+ZSbDDxUxtXalpfPANzOiece8cYvJeS4pGRYad4Ti\nkCI1IomCk/15/Bj/vX9GWgYzd8LBlvmIeiTpz3tVoNqozIRMYofF4UuTrNBQG7RJLFRJUBri9+pk\nNT7zTvDD3/Mn+Nqv+InM88bD5SV/6i//AK9fP2s84YcifNYmtsciPfFUpRxV2kKWayNqBY5mwj1I\nM44EP4pqatF8QXjRmzNX7QG+XrQz5ESaXhDQ00mXcqJKvu47K7TYjjCXCH2m7ayySTfndk58dDr2\nBup8S81hX6ciTdbNwRcvrJitcy5t1hNjTc3jCiOnDqFoME8dACdGnEU/Bm5Ft8XD8D0Pb8xKDpRM\nZ0dRmyrVz4Z5cBzGtRmHC1SSlm9if5zklluWhRxMo+vF9YR5735u0kE/xya4eXBQnNF5uifabkPM\nozUmwWW74pIkfRA5ZQnNYp2LYRpV9cM5UErs0tifYzUWi36XBZYUBZWN65ic6Zy5MLugINGihxEO\nZy7tBEBjMRkHObNztFI0TQy8F8u1ZXGbzGU8uJNxw6pxjHuc0oLqrKWZobPHcAQ1wVtiOWl1yHHW\nlGTNQuYNh2p3uH7nYsVTJr0ZZ0yuzfZhBsEBJ9xa0V1WkIpO1TMxDfcLKxbN2SGWu3rettvmgBWj\nd+apBa6NXSjkibfFyqbv2S6cbTGqeMZhnf8/ae8aq2u33nX9rmsc7ueZa71v96aVWsTaagO0xCKR\n4gEocggRAY2CnOIXTTxEYiJ+wChG1JjgIZpojUGEDwRMJUpSowFiQAIE5aS0YCHFUmppN1XY3ae1\n1nzue4xxXX74j7neXWn7EvZMdnb2fte75jOf+dxjXIf///cX63YZ04OolaMY3QbH0bRrGE4UpUMc\ntmPTbRIk91vfz/0gi5xxsfTsZGppvlbhbpq6Y9K6z42DnQXSDo6VfGFX7BHgR2c+pkxN7lh0ZbVh\nPFXTRV8EcSp0skjB7lbxGTxQika7FPj52lU7n6FcxmUFn5I+Zui5f4H2ZDrnqUj7x8doxj720I1d\nHSnfPYghUbSWTImFY0NRNyylebZaNxpu2zSLb+viPnj3Es4NzAqYpGnVjE+8bvxDP/eX87/94f9O\ne9x8w8/4Sa9wg//lj38v9ekT5JLUpXlhVbbleINfhlwirI2dzCSispqE6ap7xQAAzf1KJldBDyQv\nM2DjkYUxBhkNSxkxVmheHTOwwhakq+WfTFoWmLnlSbGjg4JlBqm3e6QkSYL9BJPgVam8WRf37jDg\nba08HksLsmmsKlLXoLK2CaMV4zxdGk1Mpo4CrUx6cbo1rLtE+2Z0pMjIbLzbNm6uRW+6CIsFr/pd\nsGaXhnSGc12Tx1jMNSGddQz60MJmEZwBR2tKiGjySJmZDrVVefZKYdFbpdgmp11ygc2HDo7DVYlQ\nLiwLNxek5umpbv1nMIdxNVg+cFM6wXKX1jcXa0jm5DVYJ0rFzca9bUWNxInvK+pigXFjxSmN8rW4\nbOIoyFTZb0FSqTtQMTPwTK5rSaPq2tTbTNwryyozTq4LWdrdcZviSGTRgsq2vDAkV5TQruBRWCS3\nAhmDi4pFZdgpPOMEy8lZqzS2bhx+ygFpycygrsYoRmdRrMgY0MeWGFaWBzXVtY5ctAF5hFQpMcna\nKb6jf0jSFtGgRyJxRdBKZ0aw6qJm4fCt3shGctGqjEtp9b3i59hOTqzQanKNVEJELswqpSzqdlSO\nXNwsOA1epSJwlofCYCM5s9JZPCN4zpUmvXxBcrjq27AgK3wr4mIo2WExKawIWsiFKThPxUzLNeV2\nGmcv+AqCIumi6fthwd2MbM7Mgi29NvP5Hqz0Y319rA34z37PW2omYybRXO15OJhYqDEXF1q4jU2l\nIpXgO07pPs0HJcCsgw0MY2Sl2OCF1K+Mof3GZvKPfNPXkuPTfOJDwaQ/81kxHrwU/sx3fZZTmDKp\nI0xWVJHIDGNxhpZW6ca9NswXtVaOajuyI2mtcGxWwFbFSAvp8JgwT1U7M6tWP6nKz0ui8Ec5cl5K\nJMO3YqIwl+JslIUGzbXdB40SLDcbzLSoWyt5TBHVHu8Wj8fkM4/Fm0sz9cdaPGbhikXDtH3OZAI2\npD10kg+eGl7gVgswqWkyhxTF9YBmxOYm2E0sjtooVikOrRbuh5CAscQzOE/neYgGda3k+VLu3NwL\nRoB7VfeDi7Ur9oMWUIcZpSetKvJ+XMa7K3nOoYt1yVxgNfjwqLzqssuOnKyh38vzhMcjwaTeWGpg\nuEIxSKA4KW+LGNJAx4LaG2tMXYrLWGYadaXmlHQBhNbetEvSVVll0EqFWCokvDFHwctFrc6cqWSC\n3SKvNXZ8kRNTVCxV7lPUOGtiebB4Xovwwrp0KZdqO71k6HOllRhmuQX6IvCZq+0Pn1Q6xNyZYoaF\nkzWwWbYpSJHo1yUjwcwiBUOT0WmhxBRSyqNZgDXw9A1gb7owfArL2RpxDmY1chilOzUn/ah7DBN4\nGrVrNqu9A1CStopASFWmlRWTtZwbcKKFeq9Qwlno8F2mjsRrYezUuDWCuZJRgaUD+HGpo7hybZ2u\nkJutCIhTkHOtV7h38bfvpYMFH96cpy6nWmlOtYa1yZq6rI5eocjRebdC7ZVW4cjQ/qdqfNKrlBz1\n0BK7efLTv+7pb90G7Gy8Wy/UDMaLV3tvYKkmnmzktlXqAClh+E1zy2RvDkk8VT2wo9DTZb/06mQM\nMm8kyR/8k9/Fz//pP54f+vyDT3zY+bIPOo/HRRD8tK/7kK/52q/jv/99f4KkENFU6WbuGe0GdptT\nQ3SlF+7rizY4XZvThTaspRhzyuEUMykL1hQzInf+RkQjCV06aXsgXnfgplER9crM5MJbAMF9b3Vz\nU5N8S93wyULz50Ra0klyrcnzKlQm3eGxkucLrktM0USxNmPnZdUwrBmfqIVajFY3Z8DBirqOuWeY\nQtU5xQurwOsGWsRAKclTdYqsY3hZwvHdFr0ab6Zh18D94DxP0uDwIrNKNNqxXYC1SiJlDdiAG6SA\nyDC8TAFNFtiAcxOjPnGrvO6ihtVM+nKWB1csHTZNlpSVS+OPnenWi7GoxLjYRSuYIus9xRNYRchM\nT40ecBUEoZU51RCI3wPqoKqtkboi2OQwMWrnZWTR55lhhJ8sE/QmLLCEx7rUeg5jFh2kRw2ZV1Dx\nwn7rsRDJKhM4yegfGWfslLOQOxFDsJe5BPEvC4tOiQtzjcKqVea4pOE9TZZrl4XfrGOAZ+jfZ8+Y\nh+b/pKpPTO6qZro8vTpYKL/PknY4YwxKO7Q3bdK9m8nM4MVpU79TN7BmPEhaBFml346lC/tI6eUj\nlWemgMgbKwZWG2VD1XPoM7kyiUuL0RVKZjmXFtTnDDkFfQnHiTNWah8SHffg1irXWtyqM1mMVfBq\nzLVNLmtto1PhPC+xMKpukCff1W6Xoaa8OFSRp6CEkj2Ggv9+1K+PPXQLLiNAwmkOHnsLr5YmrFFY\nlKIFjzMp3hQDI7W9KlCSZBDecNASZ8+9cFXKYoXtsEjr/OE/92m++Rs/yWc/f9GbcRyFDz78kOu6\n+MwPfT/f9PVfwZ/5i59mXNs2avb+lq+1YpGUVrGU/rJ57uwn6LmBHKkD9zyH3DKbQTABasWmMpZW\niPkba0N2XDNVd8MH4KnZt8tdV4FV9jw1BRAxhJiYM7djy8kV+/vL7z7OkJaF91RT3p7wGJIBjriw\nrKwhL3s3SbmOarSaHA7NDCt77jnUyjarRAGsUD0pocFedBkTshXqy4jGXtIyXnSfDbfJsWT8IALu\nnXouzdIdSpG1UmGdjSsG8+XgQZdchj4HbJXBKzvIsvjAjVqMp1bfp0KPveAMdFHVNrl78G4ZFpU5\nB+TgjCL3mS98OiNUndUCiXNdgZm0pBqTBTiUUPDjSmXoBcZyAavdnItFyc0HNsNcgu1ai4wm68Io\nWzEgLfgw6bltjzw8TeOPzfkYW+puK4UfDVWta+3U4JFkuRM2sGiKnTJFDIWfcmohS29J8LyxcuKt\nEnNxkJw29Jm0xWzCRJa5R4OmgmGli+ewKnUHUboZ1o+tLQ96yh2o9IvQ6KI4zRVm0GqjZFI39S73\n/eFMepGJoqHlZITAObHlpcuArkslp5bqZYjH4bUwbG6EwJI703Qxrqmzoic8Qg6/sYqeKV9Ua8zz\nxKss1udWkrTWGOMkrxcVTWo52Cq9LCJl/y8UiINpExOvgDmDZrmRqYHROZE2upjAOqBO/Vw6S6D/\nmGfqx6oXzFKLr1q4mfHKnBs7TscdY703HLTqmPX9i9AbbhQlvZpcZ0LnmQ67attF9DKM3hB02EqE\nzv/wB/8CGFwjefN28Zkf+gytdF6/utO780/8wr9P2ssug0Otu8JhcjSnN804j2paxhSoTei11j7S\n52YCW3u8Nm0fBNHuRR+yNN/LwJ2Y4dsJ1JQ/1VzxI8XFHTArNFNbXVkaJbAz2MzEsX2xQxelLFia\nIuq3XfrtcGIZcznn6ayz8uaxFSCZHIdT7522K84XxyANejPurxqvPrzzdHdeHYXDEu8mwX0T1KR6\n0nbqQXFpbM3XPlRyVzpGL52jCylZclGa0Y6geXD0m5IgRkLObe18WW7KaGC8wG8kyzFftGbcuvPU\nZVG9huKL5gzOOVgzOSeKRkJto9mgNseicGO7xqa02qXEe8kWIbne2hrtJSyq7Luo0k1zSi1Aofj+\n83PRSiFcmENbtt1lznzW+KpW6V3dKzlzL3KdEkWd2wSzRfFkWbKai5IWgRXfrsYlI8o28zwsWCik\nVZ2gcytJb0a1ThYFUTZ2xD0XpYYOCEedTWiuiZXt7AMrG7JpjlMVvz636uGFVdKCkrmLhE74JNYE\nRBI8XIuwuo+MAtSekkzWirlxy0IxbU4So5ZK97W5FlKlNIejGsfNadXwbko4rsmOKCSGwVBixDWC\nuJJ5CZt6pnMhu/4ZggKFKYSgNikryq6CoWBz8O7NidHE6riCNStXVOaMDamCfPk9MbkD1icVXSpz\npJb4JiVIhp49y2TMxZpDgKXNlrB8ge7+yF8fP17wBmts5cI+Xw3uAZBclpQsW1erNxcXas1CeUYn\nAomU7VBTqeGYDWUiWSKG08D2lrXWitXFj//Kv4vj9iHn8+c1h62N2gpPr554++7kr37qU5DIGrsF\n32mFViphptt5H7C97oXRdnS9tyG/fL99+HqIeuUlOZdUG7mCbsEwtaYTvcnEIeVCasuqD2UQ66U9\nDMXhgETxuVgmqZJmMTpsxzh5vuBz7xZv3059wGLxPJzna+6N+GQsVfNXBN2cMdY+xKQ31vLGOIps\nksVkzPBbIZZzP9RuBU6uubWoWmS02qQ/bCL0S5VSpR9NwJJ7cfKQaE9V5JZt+Z4remqBZi8TNrUx\nMszoAF4pxF8NsWZn+pYisoP+xIIIpAkmEQTFCgwXoJ0gu+y+uONTY4hlZc8quyR8sd4D3a0IlrSW\nuqKjVEadxPLtStqZbVWHohus6qQHx8aMhi8pVHIbhzaRK8wJLszVCUXtWAzClSZgy/Sel82ZKOBz\nM0iwbQ7SxT/RzH8V6VojNS4yyw1JEv4Rc2IYWS/Asdko9mBhxKyYuWy2WUgzgkkpJ7EK6TcK13uw\nVA7jqiEOSZUTszT9HRjcSohxsKvfyouRSJLNtsdaYlc3irO7BBG7bAO/zcC+SEv/AmIaJeVQCycd\nVixsOoXGsy3mGryPkU8BbEopYqVQNOKzgYdxIT10LRdRi3gvoT3GFcE1LiKd6oU3e0x4xNr8Bc2f\n11mgOCOnPIQB83LKUclrkE0Oz5qIlEnwWEg//jG17Mc70uxShAqgtf2WahUh2o4lqE1itBRgCZyB\nkkWDoIVE6iW2NcjlFJI9T7+UxaSyMA5RgLYwvdjiX/i3fgvf8ht/rdqw0nn9qhORtN75Vb/snyQ2\nJ8HdibldW6XQ9nC/UYg9V2TjIX1X1LFtmq3pE/ECIJmYEHQ6OQW436kWCoAQywCbqpuKUycsS40o\nXLGHmdp42x6nTCRzcy+yVeZuu6ZznSfPZ/CF8+QxOo9IhVtOycvW/jmkXAgJyzNwhKtzl/kDoJUl\njSH6VMQSh0IIR2jNoKnl9prc/CCKIC+ZxhWnEgZCr3/scYfjPNVg4NwcubFSEBpDQHLFBuz5rUvm\ns5YR82Wer3h764W5Ll7ur+ZOTul13+YgrsKVL6MAU0IFcqMFi2tC2646HFpJiaodwm0vaW/Mpdia\nWpKYg0SLz7kG3Qqnb3VJvMgYpdBxS9aa3MwFq6du5u7QjNddi+GtchCcSQcRMXdHoGdnhm/trP75\nmlr+MS+GFylr1k6GAAa6MGMuWlliQ4QKAdjKgrUY3vHVWNW41QHRsbiotTDms5gLBL1UufVSDOnD\nYKwqRrDVHbqqBdGyAG/6fpvTPJaquMuT7sGkYBP8iM2w1kivmknaxZZELs1DM5RPVtxpppGNmw7f\n6bF/x86aMLejTKlHSRtincTSAeepWfSMqc8ZKvzAme1i26dYIUZHLcpwywyWT+7zxrLJmzM4V93p\n304JmCzmlCLJUkPPLeQlatWOqhh5wSqK7eorCR8Ur5wXXzrwJsz2SKAQcb2PoCH2bVWcsnTrTX+B\nd6t9jD1Jb6kPkZQ6AbahBZaQAwzKMkoru9RsVNNgu9rkn/lnfw3f8ht/LbUWXn34Aa3e+eCDO89n\n8J3f+Z3oyDeuJQgHcWxLL3q4DOH8qJKyqGwDFwEtbb+U/f+/RN9II6jytzVVcXUvHGIl08u2Wqbm\nc7wcuI6XpbwykhbJyKHDCPblANfmDqxMnkfwmHDO5BGFL4yLiMqY2vSaArjUuiXkBvfUJn1jcRjX\nYrnmVhmVQKhJS1UOmbvl3OqNF1eVm4y5pFrrtZwxX5Jv9wcOaJtpa2bcTDzbK0JJIYQA3UsMihVI\nv5yFmVq+qVKsOjxNDOJuB17XvgADb5U3l4hh51ycS4d4JhwVdUI1iFFUVSckslvnNt0kCbFRonFh\npXG8dGnb8D8DbBYetmfRpoPE04ky6abXU9JYpWJzij+xbdGlyH0ZJuux9cl9Z/5lpjbb66T7xOLg\nzc0pa1fLYZAT66r6IjrYpIQ+c0alL2NZUMuxcRj6vRdTxpdtbXDzSyDxDMYqyjvjYK3gqJVrQeua\nR64N/qkczBzYtl1Xk0OuuGzSaYrgKltqtUKQeF4MTRngaztORaG7FyeqiITWZNgpq3GupcQRM128\nqOvyTYCrW29tYVyXKvuKy05fC3Mtwpy5tHgfK4lrM0NKwVK6eGPhIVToYyZ25f4ziyXPK8uMuo4d\neSUjl6/FY0CvCNO4lOrCWpQiIJJm3s55JasvjkzcGqCF7hUNr5VjJmNNpo8v7dDV7E2Hoztkqn3y\nEsQKWlaeXXZQebJVAMzUocDU3OhIaXwi5Bqbe5arB2rtysLBh6yXE3qDXIW+tU4RwY/7sg/55Jd/\nBZ/93Bf4vu/7Ab7v+76fn/1TPwEvBynJ//5dP8Tz0GxqhRZoMhgMfFdhIPXC3oFQfNuUHVVIqMUt\nW4P7ciivKelXotngJWcFsWTyiLoD/IYWcp6QxelRGRmb14rQhQHPkVxn8PnH4N05eUzN6A4TW4A0\nsgRXqKKtZkrVqNJ4FhcS0MJ2PMbCaeCJFxHBZqjq8F1pHE1QnFJ0YZQp3vG187WuJSbqcCOWDmvc\nmCu4Ff3vax9KLRYqYNWmLddoAltYhcxBNfFesxpmU87Ajft0AkyMDsy4xsWcizUKa/mOavpo9BAE\ndb8e2+kNsiurEo9sJBMCjXH8gceguPYQNoUfdSpnLvEFqkZBBdNrjsIj92e/IlLdnlOCcsNW3eD3\ncLLsKKnM9zlgRuEn2vdwfP6P8PyFv8bx2R/ic89Jef0N1K/5JZztK1nDWRb0nHp/M+l2J8sibDHt\n4LCpUcpZuMqUUsWMjEktTe9JBXOj5mJmaDyW0i7X1oiZ+vPH9oDaReKKkfKtmd+VaSGxHNqtbJJg\nefldV1MIJdsWXqQVv9VKawKPX8JEMKNrlBTSW7OMrNAogpaUQjX56F/2F3ZoRPhY2v0s+MiGniIF\nZmhB7Vv3H2nkFMDHXN6AI53Rg6oznIihRfsYRGtUd1rVOYQVHpd+/lWkxCD28tWKLmKk0XeXFC4o\nWBn7+NQ/vc7JLIZ7475HKX/Lh65h+2bTLzJRRpJW6wZp3PI9HU0Jv/tWtExKE9BYuWDg3gmTHe9l\nm2wBrWxWb/rW0QKk6Em7RXv9+jXf/Zf/Cu++8//ih+uL8/1/f8M3fD2f/cHv5f4VPwV35+jQTe1+\nSVV2LxVw2oZ2m9IUVOVu3/U+5C10Kcgxtb3/ob36Mh3PsIlkWTHWTilwLWquha3GZYFtI4Vswsnz\nCuZwfujd4t3z4u21mMN5pDGYzFWY6wSgmzz5L3BvxYPIYTafE3pyL5XWnMM1IVcUvUIBvQjdWGuV\n/Md4D2OfmbDHGHMmV+gSKduNKJiPYzWZcWkxuBT7vrD9kOn9KyWVJbbBO6UUWLktuUYrL2Ojl/cy\nILX4WLF4eyp257wmp2mdELnHVVPv9wWE1ilq1XWVamQyJ3M+SKtMS1pUijJ16EXdBdGZocj4M6EF\nZMiJiIk3YXsjXcr+PJoMPJ4N/KFQ0JLUCFZ9+fwtiAp+YAE/UL6O3/ctv5LPfP6z9FZobrx6/T9z\nu/+XjMv48q/6Zr7hV//HAsWsye128HwGTaQcOvrcJYVZFy0aVkUka1bANdoqBZIhVnQeLE6aF+aU\n2aLWrQsPNf2WBYtglaTg1CZgTjUnmLgJPp+uMUBqToKHc7Tkg9qVd1acXiWFA2dmhzVkVY+LCOMx\nEUehJEdxmssCv/lqpA1eFeNB4d0juDK5JVy+5/7mXCtwl2C7UKQUYuGxRy5VGnQzaDRWD8qSEcZ3\n4gXsJSFK+ZhXUfbd0jjBreBId+A+8QpnJmUNMgsxBfkpDc4SvLZtdArIqTFM+kvn+DFn6sdmpH3q\nWcP+PXMBhePhkMOJWMyydX4rVA1Wp8zBZb4PLeWoycKqDfY+Unk5ttLk/PgFP+cf4N3nPsVP+qnf\nyPl8Ukvnu//id5Dnp/dG8kd5rRj/7r/3G/lFv/I3ELNTqqA4r1/pIOoop8ld5LLY3N5cYm2u0Gjg\nxaxw7l9ihu38Jpk/it6XLU3TeGAgW3JIRcZKxX68JO1mgkVh2SLn4jk0enwM43wMPvO4OB8X76Zz\nzeDtEuloRjCHDimq7tw59dM2h+MwnoqUILXA6558cGu8vhcpTmxX8OjDW0rnJS6ytr0HTINIpi/y\nFEh9TrEJzgXW5H5jVmpPWug9fFF9RCzGdN6N/blgTxxTI4a1K1BC7eWyQa9FD48lM4SnHKtwXoM3\ny7kewbsho0gu2yMEHRjd4Ixt+XWn5oYHMWnlAC5dbGYQheoTi4a3jZBcjZnBeSZLgmnNg0PZD2GA\ni//7VIyFMscCLTHLzv3KbW4prtSS6YLXp0kjXqLhvVBq8HPu38b16e/lL33Pd/Hpv/4pvuMv/GW+\n+3s/zee/oN/Fz/5X/iRf+dVfrsSU7JrLHeqyoOwOU11Y2RddqdJcaz+ZjFxYLdiU7dVrxXJgw8m2\ntcyhD2N1J9J3EkzQmlNtUEvZmnVpoNOXXIah2X3rzgebl1EphE0cjRmuTCVO51I67wjehWFDuXHL\npSEfFtyKZtitwa1pqPf2UbiuZ0Wxr+RK2c/nHB91lkuUubWJeRmbG4zkn4ONukTP4DlVBYfl+yU7\npkrc92XiJQlPDqscNelds3Tfypq+x0232jl88ap1KJUPDp0vDlAGrSgUs1YVG7/0m15/CeaIlzmt\nqcFKU9CiT6fsZU4zkcHGjjIvGLNUtRS5H0bbOVXoh8Y2hnDHrFSc5Y3P/9VvJ4Hv/FN/4P9/AfyY\nr/N3/M7fxtd/06/Wzd7Epe1H4V4k5WoNSde2rdBTg/kRcIbcLxeqCBXQqHGz7zHIfMHUoQdghnKd\ncq/DtSyrW1dq+8HX4RXDeDCZk/fOucccPC/nvOTLXyE9Y4RzuNFaZT0m3jU28XZwrsQZOnhdS5rq\nSa/GUZwPb87rp0Jv2/lnmmu6HbBUH5Yq67EvzURfmoQYL7QqLaEk4w3WqtwcrpowFrkdfUeXFDBC\nOt/e1YrOqKwxsFqYF1wrucbgDDmnXkD4gJaMywnflzcQ18W5KW7kIkqTpMiFrpxI8D+WKZgxjHar\n5KWDGTdqmvgbV0ijXeXqE4hdRgsvgh+tXNioYtWaEn5tFpovZkBYh7xwCt0Kc7/+smePM4K5gfpp\nQJxyVtl4z2L+E+cv5Mf9P/8hYZ03p/OD/+8bPv8Fzf2S5I9+y8/k1/wn36s0D1+kFapVzrw4dhEg\nfW1oU21s2FPlXBdKyi2UpZSLVqQv9tScVZfErlynZuWtGqxL4KeEfuv0TJaphb7vTjCmk61x80mp\nhVc1uVVdchbCjS5sA4pkGlhzsgxuLv33u2Bb2A1jciIHGFv1VBJetcm9HkQmb+ZijtDby4HjAAAg\nAElEQVRYwLcBIZ3hSX2fYajY+boGY8Pe6059sM1iqSWIqhm/ApELcyy86kx6Cbws05h1ksM51+TW\noacWsadPaduvoN5UaD3dBiP1nK40ut1YM2WsSed4Lzz4kb8+HmKOSDsr5E4htRjLsphTESXQydRB\nN9EckK29lVRKZHWj7MMz+Si9Fl5IOLOpEt7/1g/7+pEqcgM+/KDzhbcXv+23fiv/6T/4q2gmOcvt\nZtyac7+r3O9FygRcsJPQwAgLuBu89aAv2XdNenFiH/Qv39sR4zsylZAacgHNS60QG+A80d+Lyy3z\nGIPnM3hccK1JAOs0zjw3WKcytyGp5JK0ZyVndfpG96VpSXG0xjmn9JFu1Crs371VmssZdzHo/eU9\nksDbPDiaxjc1C6tMiEqsi6xGtz2vjI6dg2XBKpUDPdzHVkeUKmume+6ZtlPLwlzx2WGLPDprCnlY\nptQKMYycUlKMKR2vIT33NQVF0hY9udXO+Tyw0jnHAG/i31YX0QkdkDGNfjg5F71pDt/bngUu42iF\nZOIFjjDOKFJYx2CyZLrILokSypXTKmmbWEKIzpKaT7oFN9+pCaaFsNugXIKql9rAD5KlGXJcxEze\nxg2+5tfzt3//f8G3/d7/VrE1X/wQ9tesUegNxe0Uwbl7aMSRGw5TvaqDo+uwsInFZIbTXNFJbjI9\nWFMcz82dy2WvLcOhaql8jqC2BpWd6hv7GZEkL3ZE1u1Vcmvwik67yYiy3Mh5MbOADVYUxlYdqLgT\nWGbGpAb40iI2WWQ2Mps6qhjcreBe6TZ56pNaDvqZvHE43XlcoTkxJyv2CMOV8gKiwL0gBErVYs1I\nrMt5eU3paedILrYsbVamEljpO5CTlPpgpQw1HAqH9RfBwD0hC6clbTo04wDxu4fCWHOIxhf1S+Tp\nqvjxHaeTHx1CC0qdG9ScO15bB0eyKUYpUr4MOfohk729J0UC2jNKd7D1o48PatEm8+Xr6XA++ckn\nbP9df+SP/gF+2c/5yfyhP/U9VHPuN+fpeMmo30qGF3XCXoy5y0Awl17rBJHg93FFSmYCtun/qXSM\nqRl2RuHdEP82lw73B1qWFU/xA4ZxXou3I5mP4PPXloiFDujM5ChyULknWRTCSYU+A65gNbiu5EAu\nsfurSq/OUeSWufUbR58sk2THCA4Ka89xWzX6cZdcLhF6zuXy6bV+9LszsAxaFY9VbIiyZUXOY4gs\nhT244sBuSc8k6kEJ5c8pYBSKVa4hgbmh9796MlawliJNhiXvKJQKZTWuodSJ60rSHSYc9cBsMAjO\nVahT5pXKZBZRqV6E/80aIy61z3tjbVTWnDyXxTwbK4ccdNWxpW33Wmt/tit5Sa4kDu6ukNna3Fo4\nr0nJtufbJxFG740X9vDy0OGznFYKa4kZ8vnzFd/xZ+/MuTVpX/Q1r7c0PwnuNE+oRdpoU3BqjAPa\ndnhGA19Sq4yQoiA0FqrlzswHR4NbO+R6rJMjgjlDnIlwhlW6G9OS117wFjzdnHtR0vbjIefYU60c\nbdFLoRexoSXZDq4TZkzOUNU9ppCukwmrMq6h2WsIzM58UXVMuieH79DSpRFV9sBXxXzwdHOO7rw5\n1Q2UmbwddUvmBtc1oN9EJSuNtmOnLnxDawr3YhxWeP1qMefg8spTiur2uCf1hJKTZcmHtTKuxoxF\ndbaWe7FGx3tKaTG0eJ1r4dx5tU7m7b7JdollSJ4ZTswfuyv/m6h0DWy+r/ZK7jcRRYUXJgP5/D0h\nN6hiDtsi4Z1pBkSqfdf2UxUFaLmz1qL54it+wjfy1z/17YDmSObJn//Ov8i4/x381//Vt/Kf/Qf/\nHCS8O4P2PHh9P/jggw+4tZO/+oM/wCeepLnr1alNZ0vEDz84u2tTeS7NdlnCGZ5T7UEsQU4yQ2Dq\n/e+thBHaqD9PI2PwdiTnOaFXasB1avSg8ZEzrqHZ6UrejsnbKWnLWJqr3nDSqsTm5dLcsMgGW+oG\nfxSV5vcmWd3dnXsVv/j1ceA1KS5bhuSKheFLyw6cth/izD07L8qf8gQrtqlne7ZOpVswYxLr2se3\n8rv6joB2O2jVuGPSM6dMMB2ZQAYOTEoUxkKb5khiTsl3HM4UWKZ0iWOXQS9Kvn1dkuuCK5OXZTe7\nQ5q1k37uRLBFbYeOsDVYJk7snJLnpZUdeVSIZZS62bXDd6p0gL9E5dQtZxKqMorGFK0sbbFzcQ0t\nrciLkQWB6SaxmiD+5nthV9W+Ttlh56Un7Xv+zz/2I3dstvhvfsPfDcBXfc1P4af95K/mUz/0t/GT\n/unfTMtC8qCsl4XWxgmG7L8lJE18VRtXTLo5bXcfvRdqGnZvnMNZYVxD4Zqrwpd1p5bBB0fhg7vs\n4UnluClavBRJI1cuzqhq6REZbpEsOlEUKWSexEyYybRU/tilTrZ4Uircm2FFFxQ1mTOZc1KORp0d\nUfT1+ltzKsoQ/OybSczJO78RS+kWK6DUtXXRznAosTgiyaPyyZuWtplKtOg9WbPyfClNOY7ES8PW\nJAoczXhcFTcZn9aQmscuFUJ9JY8wbkfj3eMiaxHMqCAq3F5QJkb5GPbCxy7S/vIPanseK96bJDKT\nmRXmYOyFkoWIO4slW6Rv4lbu9IS9pIomJkIlEBhXs9HYB/zIyU/76huJ8T9+27fy9d/0S4j6inku\nTha/5Jt/Bp/63j/38vowS778yz8gZ/DXP/OOzz0vzeX8ZYO+W65U9b32gmwtGEthdNfQfx4zGUOu\npJWhliHVppjDNVUFnAvePE/GCs5pEINceyG18XlSKUg6lKFUgHfPk88+FsOCZnLIeCn0LFJG5CIN\nLgJCNC7Yc0c37s14Ks7TK3hVuqrjLlF35E6k7ULnvQxpjoJSJmJC1VLzMCU6uC/qrDznhXmnbhay\nu/FuymF3DY2UtL5pOjRqcOv3PXrQsqu4lqXVNT8cK3gmuJ4Xn7+SN29Prim1yhWNyBPPxlEVzz6B\nitgAYxmPnDyfYFYZ62JMRdOcU1l3zZzcRKrIffDX7VAqjRaXEIe94/NipDiqa212byg+x9piTae1\n5FYqpcPzKatnhOnCGgoRHdMY+Q5DceXpTRdJbgmVF3KJVzEzFFK4jBULp/Pdf/p38X/87t8gUM6P\n8lVK4ZOf/AQ/61//droVjiqZIunUvhGroAy42JCntTsSm6pWC7Sa9KNuGFWQM7l2avWak2KF++vO\nh23SS+EojVpiz6W1cAuD67oopbBS9LJcg8tldeYKHg94s8QzJnaVmIXHnCp2TFFFZsarrku0WiPt\nUoVgi8M7t1q4tcmtVe5uhAVH7Xz+nDyuxQ++ufj8u2Cl3udSJSm9mdyt7M/rvSXNO/cuyeo4Lymv\n3Hn30NJ2ZjBX088Y+gyP3L8rg7jUtcxa6Zv5a5H0o9B80urBBz249wN3aARHFxtG3N7CL/pSFmm2\nZVVe/KX/3Gm9QbMq0nqCdZ1klvIwm8SvHxniloacbZ96ZkV1UlGMTcGYpoyt7/yBZ76sLkY+UW1x\nFgh3bsv4/X/0z/CNX1136y/XiJnxuXfv+Kd+8c/dOkRVtplaQsT+OVZIc7z2ReSpzfiZyeXbs+GF\nnPor3LXdnxZ0KxST3vfxSB7zIhd4FCaNt/MiSNa89H12VIttYMc1p4AjLsbs5KJag6tI5wnvOa/3\n6cwyeHrqnNcCHDfjVS+8vjv37hSXFCgzMG+qhjO5244lKrvDiMLbdekmHgO3xruY1NaJMTTr9U7k\nRW+NtMIa0A6nrKQxWZ6s2LlWa4cyIlML4URNJSmbLN22u4K6ILvzagbl1nk3grdn0m1SrUCdWCQj\n4V6UQhsuuVxfDb8l70YqBcOMEZNejN5Co6ZUG+wGuUK/j+Lb+qsZ/uN50Jo+K60epF+UAaN1apMD\nqxzO001zwViGdR1tNoxhAz+cx7gwb+TQM3At8PHYm3UZGq45cZskTZD/NSCrbMivjL/0p//XH2Fb\n8cO/1kp+3r/xx7Epj+k5FDvkJrlmL1X8Zga+hXPFK8UWrQie9GE3Tndupgs0DLx3ylyEw9UaT2bS\nqRYXi2HJYJBb5ucoe+7Dp9fMNTlnknOR1ikhzOmJ8aY8K7vQk/VQrJdtTXQx51oLd0Wztxe+wY42\nCoy2YJgs9qBi5yxB8zvuxidfG+/eNZ7ngyR5XGJ/vOp6lospabkdRm2Ve5XrtezkGo4queNY+NHe\nK0HmWjwvyUPHEhx/7qpshhgXGRfnUKZaLR27JE87WmBWGI8Tq8C978su6a3tEuJH//p4R9p2jviK\nXb3K9yy9ZBDV8Cw7nlpyFB1u9pJRgC3b9zPvq0d5sR324eBAWfpwuTund8wEK78ZRN/0q4DXH/4E\n3nzuUzqg7sbz8zNzwG/9Hb9TcSJ8NDd7UT28Fz+k2ve10M0c4AOayQwxPMgi91nMyVhKFlActaRg\nxYLijce6yBWMU1Kj69TPQto2QkgKVX3IBkzhXqXzG+vYKaqq1t0dm0HpxtEbYfq+betce218cHfN\nP4ttNsGk1ULf5o+b+Tb02b4MVNG5FS0Fsqg9dAgemBcugluKqi+JWVBvjRbB8qCVpvkWySNfHG4v\nDOJKdbWAihlUplVEoVdxBhhBdIUMTqAWVQdrw6PHmNxprJzK4ZsonLQOWE7Npa13XdztYKUROfZ4\nyiQDyvL+sp1L0PCZTQs+koyCFaflpBdF4XSX9+tGwz25mbq3K4On1rXYq0ZD8PAcO1tvB3serdLM\nuJaDmZZGVrhWZy5o1vi//8pf4Y/89n+J83Pf/kWOxx/96/aJv4df+m/+IWxuANI2wiwmM4wSnSh6\n/tLVWZaoJFMqjYIkS8XpphSOmpupnCZcojeZHrZ2dV7Gc1n0zXko+wJbLkzrNEmjak28NlYGz1ey\nojM4ecVrlmsct5pxW7EDKbXU7W3H9VT2nF3K6hHKHrvcaKYst1LK/rwHzRXh7g61Lj7onccGx5eq\nz86tJkdNWqk0rzjB7Vg0bwIRreBRkjkCq5VPVO03shnxXPlr7wZvHohJDPgVNCBqo96CPgvPG6B0\nLwvb4KHKIubCm3YfJRZRpD0MFh4/NmXs42e6AW7J5Y22LlYU5TmtbWbYshhHODWbQ1lTW/7s8QKi\nMfCPhPYgADQ7WWIS3F3zlCfXA9qa9HQkfNB8Mzmdf/U3/zb+/X/5HxOysDXePU4+eT/oH3wVL0By\nfbsvOnBtu8qMvfxTkq8Bx42tfwXf+va4tkxMbwFzyVNuKUF+TFVgb5fRdpX51A/ONbnGeJ8iPNYU\nvwC1w44obYdDKXPPi2XPrUX0L8vF/dYpVZVALYpViQwBoKd6g6Poh2mmgwNXtLnborRCI5lFOV0M\n9qLDNFuP5FYKRuANmld6BUzgn7ntt9cCq4WSUAe8jbVtmuxYmY/kX2absbBHDdKW6pdRS6hqpnLD\nGV6YPih2SBUzoS0l4Mov4Tymtt5ui7XEBQ72snZJRmQ+KBuv6ByYXVrUuV6TV22oyUW6otetKHkh\n3XhqbAaAEJn3pur53ZkcO/22N+M5A6oLrH2DVxWebs7MA88HK+48X4vnR3La4rf8uq8kv6iuTT4q\nAH7EkZ7Br/hNf4wR51bPmBycU1XsKoXIi1hFqScpS/Dag5lSF6WIKXLOYFpyXIPZNPqJKbjUuQa+\njDdr0Sn0Q68tCJ78oJrsAxZLGQFrve/AZgw9v6ll6IpCzsHY6pqkStmQAuDUO3gEWVX1ZoYciBVa\nFmItuldeteTpkEOxpkBGtRl+JDWdV09in1gt+r2T1GL0Xnhqu+joSc3COCe1NzkcU3iB+iopRUjZ\n10ellMKb8mB6x/NirIpbYdXJysXC6NY5I/gy4PDUobpHlLd+UGtS9jL8VkxZb8VZ5kT7sY/Uv4lF\nWjJotJWcVOkvx6n5zlDVlTmJLORu6yIntnO1VkpsnIQSSMuO+okEFu7GuYSMm00MASK4F7muHA3h\nAV7tCJyv/aq/EzDuh3zGFvA//d5v25K0fH/YKiPN3h+clZTgPm3P4FRxZe6o930RvJ0aCZir0sxc\nyrxK5ZCFB6WKXNVj8rBgjsLzuvYDVRhrcsai5MHpA5iUhEckhbX/3m3DtaDWqvmQN161hBLUWvCi\n6rNUzZ9YAIoGeUllcHdqndRSxWNwtYe6DDccJYtijVJowQhVwaXpfWhVm/L3BwPSMTeP97KzbM6H\ndObS3L5glGNHGpWCR+IZ7x1pc4Wcim0bOFbb2mCjcMFCXvrd5q6pjIDMolm/yck2MnW4HwkPw+wg\nfSjqpVQsNs5vbZWBJ5EX1QufeGp4xnYMJvcGr7rvU1CqnEKCiUDluSNznuQ0nKH65ajO6wyealOy\ngjuasFySweUOCa35RUqZjw5UHbYffSb/hoM34Xf9+p/Ir/2Pvp9pp4qNWNRWRfVK0xBjz03DB42q\nCt4mI4oiabIrRdtdLjLXYljTRXVoK9eeOy8YhUcYr7PwnJOospr3Lhv7ysU8YZrabrfClRVicFjh\n2YGQEsTXInqh2R5tTduXZNIDpk2NGmZAh0/cO7euZWOthSMgutM2o+MwoVUjKsULT0+Sbd7cyC6K\nXSUoKYXUGYvedsT8lGX5wx7Ufufeu/gKNVhTEP+ai1s5mGO/P+uFbGeEC+J0K9CraZm7YrM9ZBzx\n0Htbe8fDuTIpa3K340s7dB+mw2Buw0CZyaJJqmO+I2kkd5pI01a87NgajQciFQIp1qQTUwkDi6TM\nQlbFhc8M5oTXRW0yqFqt+0M7m9qud+MLQNLvnczkVR/8vX//z8MKW//7Iv3dqgOg7CovTRKmF7qY\nNw3ObQNFXjzlMwwPoRhfIuQ1V7ve24djacN78EJKM2YG13qBnhsrT0qYooys0vdSQSkSSrUFZ86d\nHeYPLivcq7zkzSqlqSkD8UnPErjiwMQsrobXg1sPKJrVBRLCvzzci2C4bZ21UUqndo1K2mYQlyIQ\nSanG0XJnzxVWQutGpnNdiuWeUQjX9lmxPkJRllCL/gLamUtLvlxO9UWJzumTLNInp4ttseZkBjxO\nuYncVOFyQR2Fh1XG2yEAtg1VGaXhMznLolNpPSCRZPCAV0XLm5fl3ktyQC1FFDYLVnYU4+6U0nRw\nrsG5ihx3E6wvPljG0ZX1dmbl3an0hsR5zME1jOchuBEF/uF/9F/kj/3+3wLA09Mn+ef/82/nvJyR\ni9/+6772R37YTLI7zwumY00OtCiLmEUVqy2KdSpd0VG+23/XjsJycVhuY4fUF7emzLew5HMjGQtY\nFSuLSLjF5AyHruQGr01OSJyLi+UuNVIYlxm9XFxWuDDOvcwrVcqTeyThlSdPOOBhST4Uevm6HayY\nWE9eteR+yMlaC1hOStXzXKvvrMKgtM6TBZnqfF73g9uhW+qakxUVW4Vlgw9rhyE7eTTjXgq1B7de\nxBspSgCeK6mtYx7cLsQ1VivCvIJ3c7CW2NylVrwE6xKsZ84pDOlycKkiZITS/ob03X18CYfusdgH\nqNrqaUsV4LL9cGmruXZFoOjxAXZgBCPUgmr+VtUX7kNL47igbYgzl6DID3fqBstE4b0SwXeW/b0/\n6cWt5DpPfs/v/lZoh5ZmLxjA9VJx6BBeWw9spqQAy63XDdtV5E5v3eOSNYNz60m1vZQo/hqVx/Pk\nsSZz6u8uCfUwGC70cFy0ogvo2ku90hx1HbqhFwpVtFiiSZmWNVmd1m6EBzd3bhVaEXb79KQo3W87\nYTZcvu5qtSCf/f4ZHxmUKFgg/e4eebTm7wM5ey0KotyCsVJ35VySCMdaMlMLtDmAI4l5QFmM03k7\nJ2stwp2SxshLv4dVmQzmMuIy8RJC3VAJqQFyBRRxdSmNMgfNIHMy08Q8LcbVBnlJqthQJ+VVszq8\n0JkYE5a24U+l8GX3yuuuBZwV596gWsVd1mCouGu3YFbpVZ+9yMY1gqe1iXBIGtuyk7kU6TOdUYyo\ni3gE5wXvhlE6Cmq05Gf+yn+bb/4V/xrvaIzlrNhYwNn45b/p9/J7/p1f/Dc+bAm0t5RVqXspJkeW\nZtxXaMaMG0dJ7AjakgmhN4MQjjJMGXoF5dQdLaleeUNQHluNUiQpJIO36fSEnFDrhAGrSrx9pshx\nEcAOIJhD4Z8Mk6EiJV27uxah9yp7bdm7n9kn/TC6OwNd3tU12ipdP/aB0buMG75VG1YrN+I9o/jH\n3Tv3u3G45ustZEw650WvFYr015km1kUVHbDfjI7GXtdKWhb6cJ56slZwTcHsX3LdXs3OWrCWxokr\n4KyB7dj2WJrhg84TL44VFRmlGI/4UhdpjuKGbaqYt5ScrjqEtsj5MpcNLX/SfM8Ng/SKZwq8nJM0\nudvwTou5bwiJ4d9/zGNhvWhhF8Zy25VPUtz47Gf/GgBjXHztT/hKftbP/8e/6BWrLNaslC0P0tLg\n5RAeqcPV7cXCoz8fS3PetdgzSX0gchrjWjyPxfPQ8idPDS0yq76nBTNTtP1osEX7uDFisaZh3ui+\nJftu7+X7L1s+t6I5t8/9cwfVG7xkT6URXmhR3qc8HL4opVKqomQaQVQR+s0KpxtznnAUroFcWjGl\n6y1OO6QzNNuJFyv2sk5mjxXgy3iEOMielUkyJzyvybgmsSqYZm2gqnfGpRkioQ31SnDBzcMgh9OO\nwJazuhEjOVplP/HYpbypWYycB60Nzdt9UUMPSO+mLDxSMsQS3I7K65vzwSHd76ubHH37mdyLGWmX\nq7GXxEZtucX6yVPpYDD3Fv6IzpmLEs67NXYwKTidd9c7HdpFlkJ3wWPuBU5uHLUp5mgnOrsbn/7z\n3wGgeXIpvHmoK7z3J9bSa+2k7Kopy7a3IjpbBu5BdhUpq/gOGVW0liBIJnYv/v+R9i4/t27Zeddv\njDnn+67v2+dUlW8Y25hLEoeAksgRcidghQYg5FwQEv8ACQ0Qd0LSQKIRQdppElqAxFVYooNocxM0\nEiGUhCgJMYoDNrYTl6tSZ+9vrXfOMQaNZ67vWHKo49i7Vfdae633nXNcnuf37GRcdT5ndz68NOJa\nHK49w0RY0pexOFunReMtRU8Llwso9/6maPSZhEOlczSjpbNq6SSpTj+cZpPRpXl9bcV1dQI55iiB\nZ3ozjq7348U6vcV2KTbGoS70uY4yM27dub3qOxMxbjAu5+4wUtJLs6SXlomf3RpxwC2LLM2EY8Fw\nhZ7mYQpWnVpO11ZkFeJ7rEtd4iNgPpy6krcIYrEvUddFNzTEcwq3Yq149x/8hg/dlcp5V7R0MlZS\nfsgxw0arWcnxYqbK0IzKQboSFVKlD938HVpj2z9vDUBRx67VKVUNm0WNLfsyebufB+kv/NzPg8HH\nt+A//s/+S/y87QpXEi+FIKJ2f9l7PPuTFVqlWWcASoC3DeNBuU+m9JdaxbyKt6lNujCDwTJ2XIou\nngzINOa8iGhEPjDrrOU8IveF0pg+wRpj/8DWBB6xaVwWnKNhFdTqLDNeD4NRfDg63kHc2C6k6xIo\nejRV6mfXIZsu+VY/ij6Ae1EvuqFHU6hljoGXokg6pkNoKAyy+k6BQBdW3/ZpN8dHcb3pJcsIMuCq\nxqOMc6eLQLGiuKeTa3K685Zbs72cuQ8D74uILS8KZxxBriTpvNqCZnwKzYutIRdg13e5ppKDK9kj\nGfGUeze+cTO+/jp4PRSa2U17BivNR48DXvvJbUe7WMpJtF3bzCaVQVVpo44i624pB9erDT6RjANe\nPYm4YUy+fZd21dYFt05P38+rMenK8FrGoxV/4B/9Xn7yt/zz/M1f+gX+r7/61/ibf+Nb/Nw33/hn\n/sSfwVNGCxDUJ2rgI1ghjegKzerblPMwsjEMbEjnTBnRY4O0J92LaIOzLdwGr6cogU96XOZeWLcT\nUCjqlUZck27qOj/sxV2WXIQEjBRmE4x7FX0Hdx419J6xIeDpeFs46kJu5rycnXQBhWjPYqrJiNTU\ntX04ujIJgY7s3i/dZD8f6iLzkJJBk0x738O8dKMOOEusGLOi4jkeFIPFU1mCMYppOz0jpEAgknVL\nHtmoKxRt1NHsui/NpF2jxXEc2BJgNGLq8mu/WRswIkVlNWo1lkGVnFNm6CZ0zTV6BdG6IC8V+NJs\nydx1czY2mbLh1xZOV2wivLHYt3QTaFsaCFOF0zbRx+Gb3/wb/PE/+sf4wR/4Hv7B3/OT72MDRdmV\niPEFMaWgXBixjIEKW2tf0h1qIrKUfAEA3EyD+hnJ23bjveVFzO1uKahx0kuyqvkmdF6Pg8c1N4pw\nUTtjay4jWmCzsaJx9O3TT/ndzR3vmn+fNG6Hqp0stXVXKEK6mbgCsoqixUZrGINVD2pBG9LNYtqq\n2k3z7GuJD5GlBRjWcEuO4bwMSYLalng8jST3kDolWpFL7acbWyJYPAhyLkZqZn9R2HI+RXBdggA9\nmn6V5k0dj94CKsYeMamns2zkMjpJ7wezgs/K+KJr2fXhTB42WJF8qmTOtiurCVmczTiPJhKawTgk\nIeqHVDPDNU54aU2Iwb20tW0YsWZEXpzuzMu4lsIdW3PaUOrFXI3HBNaF28Qcbs35lfdRFmRr1Gws\nV0SNbzedWSN6ceSN7/9a8e2fLV4+fJ1vfO/XuM/BT/1z/xbfc/vA61AqSy6IPFkWZCh5JdJUXZlo\nd1GKiL8y+YAuVHfJ/17MOfaMVB2fYoduQ4vWtwzWNHw6q6aSRUoSz0dpNn4ZnCXQUG0gkBi2wWWi\nlo2CW1OcfIxOJjzMGLMxTvGTb61xtMY4bnx2FGMUYrMoqKC20cVMZhd3Y0bQhyKnXg4VBccA785p\nKqjSirOMaK7RWzp+6LtpKeVMyYbJLrIF9G9gTc97N2efp1SD+5SWeU0t3El1D21fxLFn5b3rcPXt\nO1AKuRbj381w9us6dG0lszUsdnpq7lK8BBVRsoAWX4/o1FT1krFInHR2BVP40vxXxa5uwApwUxtz\nZmOeTltyxjyGstjKIJsgNd6KP/Un/k3+0l/8C/zWH/utOmxTM1tKB2emHlDSuIrYmVIAACAASURB\nVG9n0coEk1unSrdp0w4LT4Fs9rNGNS0OKWUuzefBWdIjdsRZ7WabcmX4o0hvfKqpmfyGcNyGCGdp\nIhdhscP8tlLDxCQ9+uDWjYim1AlzyWYMAUgm+JBqoaWqr6Pp+8Sn3FEWdJSWOrouoXPInjhuxnUP\nMmGuIi1xLw4He2qa0edsOmvxhHvB9dDfJzAqi7URiC2K0Y0I8Wr9greZPFZKnVJyBno4yySMNpNU\nqLpp8RB7wmNIUrg0y2RKi3kiK/R9OlHFfGyo9VFYPtgRZbRm9LY4rXF00a76kIzupRnj6JwGo0Pv\nyTEQIMWS3C/jMYYKhpG87Mvw6LJ2hkuj7K4MsC+8YY/gO7V0GKVSl910ky+KjEHM4LEW2U9pVlvx\ny7/w89w++8D8TvJ93/9DfO8P/wg/+jv/CTFdmysivqmybCYzxCMCY6eElChpWTIfrOz0EcQ6yAwO\nc84u/XRWETWYsVknrir4ZRVvQyO0t6vRC95qYtZ1eCdayPoiurS0bs/EEzFIQPPy7mBDKQyPSGx0\nxtgpzq3TvfP66nx4lWPrSZnLLfujir7BTuozBKU6cNw742wcTXCZw4ydzqQCQKUTn7EXj3uE+M6P\nfe5pnlJVh3Nnu20Tnf5TKYdq7tGjVYqT2+AIpYR0F0vEh6pz35W1I6VJPkebXzFf+OpK1x32LajD\n1pkR77PSWeCxkx8cIiZ5dT2kptbbrRFbVhRVlAfWJDkzR1HuZSL41IKb6zbP4u2Ux9/QTRsmiM1v\n/52/izLjSvTNlbS0V8IV28m4RPeP2CMP00FCg1Fw1tYwolutNlKwUgfQaIPztog0gXCmMUMjikzN\nPs2Uj9UPw5bazvujk9vWlmipUT3oVVqwuQhhtL41tZ2jJE07BviOSXlKjyrVhqki21bXLnaFN6Mj\nvXMf7Qls0/dnO4SxRPJqveHPmHUvztEYbR9Y+8BoWxe9tpRuF2qiskXIkWbG0Yq6DT7dJysa12Ny\nn5rdRkCUlCpxaQb5bCPMpFIgNTvLZrvSKc2egVwbhC/dyX6QZYedmnuQlz6nexOK0kSwWlFctbih\nc/vVtVh89aIdm9fQG6OpCc7aSQi9aObgnbZf2N4d3997JDymKslMOFeymvEy4HFI032/pOetCdk7\nbV7cE25+6HI74O8+f4k0OM+TeFx8+vD38A/84/+uHGBNv2lkEpEc/cRK0em3sm03bpyukZBAiUlO\nKcDvLull88Y4gBySOl3JRXFfk2WuNORm9BrMusS8eEyUO7apdKYF9kAI0WVGTx2Xr168IcJghhEW\nXOkcvqH23XArusPnNxOn9mb690tjMq+B+ZfyQnAtNksGA0k6naNpmdy7GM5r56t1kOmjwVE6L9wk\ndWTruJ8mXGn21Wm30PI8aktSTUUI6MC1AuUWfik3Pc5GNuNrfnD0yTU1quwuvktkkm1wlrCT07+7\n7/ArD12FPKKYE9jtSpHRlbAJLGQRrqUtN6XZk+RAjocIWLYmR3MaXdIO04O+tt8fBDrvOxF2no7P\n4lOxUYr17mnZQkMKE3AnjWuK6hWhl7ahttfN9ssoqLI1uHVY5u8ys3weMpmq5pFW93CHWxEpOHUk\nO1QQIjRPTBw/jM/mIl9lS31c0nu2pkqyaXgs+EcbHKfmZAdbvzmEJTyHximxD/NmaoHCU+DyBqsN\nRaB33xcFYDpcW5PUSVqELcQ/jL4abSbWjNsp0b+7qTrruvjEGZYPnd3R9Kh9gxfeGr0Xlk3RKnfl\n5l3zwXdWEgGPWAoJNRHR5ipYxiOfAHConhwly7EUL0pvxYrMTT0zsDyomtLAovSRCmcu2MZx0emO\nxK2TNbkHHNeOi/ditMbXb40xOscRgntvnbgSX+Tzv9ElwDcpAwp1KK3xHsro1pgdqoIZolvd0vm8\nbqQ9oC/42Hl0KTouDLPBGloauXW+dv+rfCsWVnD7vr+Xv+/H/sh7dXk0/Z5lYh0vFm0veg1F0rg3\nHUCmE0O41yTTeD3PTYSDnLX3JQVtEvPGjMVok0cY+bRl7gV2tc4V83038mJQwznhWU4yazFLyR4j\ngOyEBy2MI5I6Gred6vthwMvL4DY6503x7WFGywLr5HN304zuWhgO7+AwrDG80Q7j5cXpXcveZVJN\nmR4pWu2P5r9KX55wodYlgRsyvWSJn1zY7tZFXMssWgJlTKv3BAqBsgy2tn2Y7OLm7Z3CR0wc42G6\nBNnx6+NZ+PyGD10fwNINQ6O28BmK3EJyUPm+1iJqJ9bmIldjmWyLnkvowjK8qSWzAl+5KfCLdXSJ\nqFdhI8l9Cx5RxBKV67yMaXtj6Zp3zlT1cV+qxPTVmsrolIZuZRJzD+1x7inopLuLoYu9Q2qq9pC9\nphgBdHq7hMPD6YfkQ62h2RTKhOsvxody2qvYntSOCTKBozOTZoMPHS1wrHOMgR/O2eEF3ebtlM45\nVpP5xG1XMLmtksbwju047yrHVpA7n0uWz+e/J4PJ6YYdsnH33ZVghXfZkG1XCE8nXZbayBnGlYKm\nKB9KB5Wxo9BNcrvrIRBQpm1jRgkyg2DgzcQhaF60aMj3I9+9/t+lxURXmHLScvHYLrW5CnYysfvW\nfZixIhjT4JRfvqFZUxtwnIPb2aVdbom73Ha+RSvu2+lkXSm9Li4t3d/n/1HIaYR4vp8WPBz6WIyH\nDvuzBx+GsJpvHy6+WI3roXGQErAlzTt6kd/6f7h9+BrnZz/K/L4/xMOOnRq9e10Ty9esMVOHIu8H\nrz782juWbqgQCC2MpCk3LBSc+RTGmDVuY9IxrjxIk0Ik1p6NhuROZo3WEqwRXgwTlzdWMGNXyAsp\nlbrSi3d5AkOZna+j8dnR+XA0kfAOsYYvilFSNVUKJoUXR+vcqshjj+26mNtHL25nk9Sv6UAklVDR\nS4ve5Vp8K3ASFmA7TcPM6Hvu60M7F9/yL53Posk9l3C521sfUEtsk5a2O2AVhnPBaM4xQNvErj3A\n6rsLLTj2M/ibOXQfD0liRu9c+cxZAkr09spnOkSCj00Wa6xVRC1yibTv3vAJjzE5ppYKp3ctUppc\nLL4SuiroNR0rpx9okI8zZ/KGRhnwtOemKpFoW9q2Rwslu8LhriXJhHsmZDEiOLyxesHSl+lPQv/T\nRtzBqlM98ZaM5pxDGlLMKIZQjgZYYiGZ1zjhsM7Xzo23rAeT4pd+6dv82T/7P/NDP/CD/OQ/9hP0\ndtC9sTIYlRze3yvdKxVn3SywUXSC44RjdG7d8J1SWnpegOIxpMdNUlSr7O/Ouz0uhTT60fa/Vjt2\nWy9zlVjCK4y3BCZ8WjtYMNXOx47wcYe4NOMuOrOCikmUbNy11I9MWwqRjEW6eKuaCz9ofiNY2D4s\nsjrRgiPFbb4ssVS97im7rwZ5RVzSehuae5o5reRGfDkaH26Nz1+Mzz7rvA6XjMh1sHu5RjsYvpfM\nTwNONBFCHF1EtQuDKr3QcjNqeVmVME4sH5rvnUb3xlkHZovYuWR6/QZ2wtka8/a7uX34FvNrPwHc\n+EbXYfMptwKojGw7/flakmuZXJ+Thj2K4Z2ZwaOtDcv3rWPXYWJbSqf498K9c38UVyUPBACfW1v9\nmIGtko66pHHNvdzoZ1KhhJBhi/tyqqub7Wtx69rfuKtLGc05PDjH0Gy6mWLiZ9GPxurXlrX5Zqxs\n4puz46SaFqnNOY7OOeo9Fsq3eqRXsVK/10i4u+FR3Lf8JLZCaejuFMHwOdpy+zIqbCuIZEvVu/Bq\nSkyJF2NF22CvnSgSxljFFZuq6MoTrDzpZzAjeOYn+m+20p0aCpFR7CEmlYINr6znW68/OTFTGquS\nczXTtII59aJH1ZbPdB4+NS/ZMRc0SbLkqnIi4LY0t7seehAyTImrrpSHVcb1KCwXZoOHFX2JGna6\n8o8a4sNeq8MqHo/JeUtsAdumnN3ItQHerXZIplCAT3T6cOA8gKcjLZUmex7c7sEjtTA0Azv048zZ\nGOb8+//GT3G2O1//2tf5qX/6f9rf46KhWexLa9zOkgst5d5yK8wbjnEewg+eTTK7tp13GcYjUt9v\nlZZvdHFsi73RVjQ5nruytV1VKL0hQokf31nAgi8eKgHeQtbeSnnr5ya63ZeyzeaVrMwdlV5Mklxt\nM0/VAl5LVu9hqu4Lw1YnWpL4ljbpAW5lvIUiZjKE73u8JebFVXJBNu/kESL5pUYjXk2pDy22zXUD\ndcpouxUfbY9S3g0ROnhb28+HO0dAP3SJCbwNWHEtuM8kw1kIjzjawWUTr6Q1eCmNTXIZtz5Y6dzX\npaw2Cg/Jna6v/0NE6mKmkk9XURWslQRy+M1yrPS5v1PBSUczPrXFs64txzIaARX0cjDxMyyTZcJr\nrggeCx5ra60LlslxeeXSIottNOgpPfGauA89VyRWvqWWkk3adqM+L61W6lTb0Xg9D6lDTp0Ns5zu\napEqB25J2XP4pdbfMcwFIjrHiQ3l/7XtPIo9OshSDys1d7FMS6+VWs4dlw5ZoV1R1trSs59dh/Su\nuwB1Nk1HALDdm5t3MszE6KWYBldKSHD2znUFgYD95iEHpTs5tRx+/GYr3dbUJmfazjVKamqGtMWw\ne2ZZkuZk8Omh2OVM455JKydc1asPtUqN5MUk5TILquk2Oz246PQ5se1/7tUJm8RS27CacVSqfV3a\npMc0oi5ibTj1aMxavNhgNmO5cV0XxqBbV6hdTdL2BjN0PfUNtLGUste3JKINbacPa6xZzDKWd0YV\ntrfxzRvHrPeHxb2RTUnAb9/8S9y+NvjZn/nrfD4WMwaMzugwWnE7CuuNTG38WzsYVdueq1muN2d0\nVWxHV6t0mfSQjtr8ufQwWggDWLUYQwaL0QQQ1zyX9zmYqWSkhfE21VnMacx4dgwCnFwhudCaQeWh\nwzfWhpAE92tgPrnvnLd4SMvo3pilkM4jtdU2wCLFnTUZK2wpvNPCYC2uh0wfbnC25D59j6oECLI0\nKhqrJd0aZ+sYE28HZzs4EavgeBXar1xgpV4K5Zlo22LdNNdryIXY9MJSCtNcq1gTlhfr0qjlmfd2\n9EHlQ6aGgBwyejQ2zJwiUnPJp2EFl0szy6R5TqXI9jTo4Jncp/57JLyhIt+8aJWQsgSLRNzx1EiG\nVsSE1gdFcs3JKnhL56opzfAj+bj3BNd6UuEG9wyc4krJ5DIXawm36ZZ0bxut6Zy3kjwPKUys4NZv\nwo16A9f4yb1xmjrfqsLT5L4cDd+QJ9fgmdaL13bSxtaGR1LNduBrEa738jLNa5trl9N2cKw9FxlS\n0VGh/x1pkRfMzifkMuslFZMZeNuF3F46t9S4pGnXyGqOK8ACsyHBa2taNuLEVnDNuVgoZWXmdy91\nv9oGfJ5qRdANp03mFtFfqp7SXIevIR/+rn7e7o1qk08TrnWXC2oqybRX0qprLjr1xVeltq0p9iYu\nUMrM5xZb5KqRThR8ui6SxvVYglWUHE+tb3H/alwuOtIKaHYw4846G9wFu34CzpcX3VwUpt3qx76N\nu+85o6vyNFvY1HJvVWEbjE2ERnCj7Xlh0geSAGGMo/Hhtvi8f5v88JnkTp54lzX4sNIMqrlitT3x\n1rhZchz+Pt7zveVO04JH8iQIAl/qRuhOdDhrzzGReN/RbFx/npYALeFi661rNeYK5pqs1ogHOyrd\nYSMnVySPcN4+GRGLqzregkhnFzlYU8LAfYpbSwS5l3bxZmpVlxM5oSRxCvM9x3eOGxukVOROGx7e\nmG6ce8Ztw3gh6E0Lzv4y+DA6YxTtkH8eoLqer9O3e66Cc1tGc+mlvUdyslOUE64tJctK0p3rLbiA\n9RDWdO3uigp6SzVBCeTFW5hW6HR6myTqEEXmW+Ql/GG54ZV0DpatLXtMjjFkVwc+Xktx6VfR+6Fg\nTZcq6GjiWc8UES/cuR53OvqMMxrEhJKIf1E8ruRuDiE7uflSYTPFptXWf7AiOI+idwNLjjJeT+fA\nuJ16Zjq7iOqi45kZfTTBxVmbbbIVPxTdxMN9Li1XTMKMEYP1lNy55szpOkHL2g4RrV0IalZLaF/T\n3Ombj7KWqtPusp63cqYJxjNcz6613FpalyoHI01yOYG4igdFzy0LlVqAzNSieC+X7zPJa/HpIZRr\nlk6MHr/JSrd3zVoiQguugmF6Ab3BzIVX56pFxeDBXVvzi10Vd4iJ0QR1McWGmPsOjBPbgJKMLFvD\nS9xPW0mPEmeVEPimNVYsIiWuJkS2nzNp3igculi2YY3ISURjxSTjTcujaTy6YUsyrjKNNPo4uM1O\nc7mJTgO8yKZZj5sORz8aLwfc1xTqrzeuCC5zsMTNubXChqqhP/0f/EeYwYcPH3B3/uv/9D/kD//L\nf1KtG03DenNyitnp8D7i+NAkrKdp0WT2qySIW2HgW3VRaVt/6/QoWgbXKCy2TdjsV2kIn+AdXRyF\nlAuR6mLWVbylZt7Fl5UAliwL3lKw8BlLXUOwx03JaIW5DuHr4TLPTMWexDYSWBUxi5WLCEnGmjnW\nNJcFxUEd28+fj6If+jyjO9dMfDg9FrMrJsjDmZU7TvyUSgFhCo+ulJKsJUzm0oGxTHrQuxW2tKTl\nUmWVKWNQLF0ykYt5h4973mTmVN5x67QReF8c4UxrxB4RXJci7a2CmQ/Non3DVwzG6PRlRC/yIe1r\n70pHTmsM73x+C1aJIvYgBbYBWgt2eaFE62y0HpDJI53YS+/ujVyTRxbzAqtBZMCQxdeXscak7YVS\nrs4iODei1Uyf6zwHp0HrncxJJ3EbjJGcrUmpcDba6JyecCjh2l+NuAw1FrJsq7WwbVRp4CXSHVJB\nKZU7GFbEXDx8d0dZu1ORoeZpdorN+z5dZLhrBdV1gR44yltQpqDh9OFbiSUpXjHEd2073dg2KCth\nzSVlTkIuZ17J20zWI7nPxX0rnwJoXdCr7/bnK+N6/vLPL5Iip6qi+6UnLgPCilq2yTvOW6o1vebi\ncSVfPKSBu5Yo7QdsyYvE2+0ppRnOEcl46XgIuiLaUMdN9CGqtp03t0RNVDLjyxvTlinQkMAZfLoW\n5SI/PS5ntGBt0n9GJ1lUaE7pAccIPv8w+MZLYwxndDQHLb0cM/dDkQktpRAouTYqnOUoF2tDelrr\nVAU//mPf4Ps+JLfXG705X3z8yP/+l3+FR93kjguR7L0ks7uZfvTeXNCTpoNW8jZJZSK3nrOM+x3e\n7qEX3ROspEXNYhwbYLPZAs2ScXw5U1ulJI37Hb51Lz5+sSuhTGmSS1AQkBVXicPJDLhs8Ph451fu\nkzWLj/elaoUmjTTOW6WSga1tsluBSarjpZl8hcI9rTlOo4/g8CFN89gb8ik5z6Mg1rsgjr639AP4\n7KX4ns9OfvR7X/jGh8btZnx2dnwUzKK6GLlVO1ZoT8jkItoX195O2obar0hmFo+HUhy+eLv0/LHl\neDWY8YZVJ1Fi71zJ47GIcj4u/VixL7ZMJcymS01BbYBUGWlOxGS4VEFWugCtGc06R1dYaDP4NBca\n0unZ+eLNVJ95p1La2EzJ3dydTOOLT4svYjEvKJyQ6gkfIJRmh1JCBhWyhnfj5djql6ZxW5nz0uFw\n7Rp679xujZuJ6Naa5KX0pKUq07UalJKZWxPnQ4Qxfdevp5ZnrYm5sLapqpYx0dz8qbvVGa1lHKaq\nf3S9l4dLITFbYyQ78FXnkrttL8GOan9OSLf07EJLwpYwXQd8JjzmVDbiXNzfgk/zwVqDR+hCiAqo\nA2zSR6M5/LO/93v5Dcf1DHdm6oVYS39BPe5aDszkXeJxlzZL213X0PuL+8WnaTzmpNH4/FVZVo8I\nbnTCBm6Lhx3UJeRjy8QiyDKpJt4upTlU8XhTKf9YCy+1+jfrHKdspWmT+4KMxVzKLvuI0UdQoZt3\nZdMMZi7BWUrSn5fGlrUNjrPx2ovWG8eOoekORm4lmjNMsc7DijXALbCn79ocs5B0bH2k9Q+YiVLV\n+uBn/o//ld/yD/8+HfqlcM61r1ZH6ce/egv6rHCtnm1vvUeN08GGiGXNvjyVHyXO6a2zjSWFgjc1\n101jX5pwD3hcSaRu8TDhFpMNNbGQ2aU1Mpva+fteIhS8rVJ1tWIbPra2NNiLUrWjKyRhCzSqKfV3\nuB9qYz2wHPpOSh/ygdNz8hZ71JCTpDOA8IQU6Wn4kMljFNaSjtIw1gSQZKhS4/va6NEvweLABsZI\njSOx/VV6EWNT5VZ1Jgtbu/L3S++FJeViZ2QpJ8vSaHFh3mihEY0ho4ylwPDVhDa87eSDsoPRJJvq\nTa7CyiRSIKHRGq0nn3Gywnm7T745J+5ypmlwHu8jM3cjljb+xmYj7+cnTUklcnq6dLzmmhR34+VF\nCMyXNrbSQKYNb4tmJ8eBUhuOJm3ti66j4Q13sR4qFWx5HDCnvv9VqqJrFMOMcRhj2LsTM6o0pjRI\nX7CcNFkPJYmThKt5MM254VxXaaaNCpLuJbXKVkj0jUe1fdhKIqY5saR3ss3fKdHKEtKNWMHaVuiY\nRtbAYwmriqSr2Q4KeOEQ82F892P1Kw9d7ZYFBm5NEphcehAqO2YL9g95plrINbXkyGsRGVwlpJuP\n4Fqd3thtI8xrcZhQcLG0vV8kvXUlVpRich73ySMhHgpulDd60poTPXhjcrSOl0EJZHKWc3ejx+L+\n0fAun34a3K/kuoLvLLA0rD+YrQt8HJMPM5hHY3Tj9TSlWpg24B2Bfbx3xpIcyh0i+z7NNKsdvg86\n4Ft/687f9QOvPB53xmj86//av8R/99//OQzFEnkU0Y1aztoW0LGrcFBb5mO3QrEPiXIe+/doVjAk\nczFvm05VVJPmtXUl4mbqI7K3uJHwNou3K1kpWdThOtiP3rlnkF1LNna12husZRxnqHu5kKrAHorW\nSSMfye1Xka7uU0s9IUdrz93kqlKcVVDZGO3gaOqulukCPmg8qmiIc5sM3EPZbZcOp9ZFbvvaoRid\now2FZW45UJXmeVclI9myQ1X7VVt+VxqltC2Mf8QST3gFlzUetRTVfjlpi+qKRSo30hbnOLCUJng5\nxKVDcqbxclN3+Ci9URFJ68HruGkc01E2n6nzO7vmzioUBCZae28yH644+PvFF4/JXMVdCC/N0pfx\nKBG7nnroYDM0plRS7k0z3T3esVj67/bBeRR2KCj13N8PtnXqrXhpN44evJwHL66O0L3wOGgtgImb\n07OYtlVHKWZx+dIiqsFpLvuwmUZ8NfaYYHffm9UrBrbW2mZ6BwLJG5sVyxRG66nDUSWhRjiPKm57\nVPR0a+rd0d/rWdi46/dpyR7TwXxI+bGWEkEytX+4u2FX0k2d9c2blrFNTs3j/NsWuL/+Q7dSFkie\ngYcmGZYHO1hQUpDIJG1t8IOG2NMU0RaRUgFMJ4ZxzVBLE5OXYzDNoJKBgy9GnZTJQOErBbtxx2fw\nyGLtdrdSi6fH3qDXKd2nQBb6YV8yeIzO2Nluy2DOUHWXk0XD0snLVZUyyWzMV3idxXmY/NY4R3Vo\nQXij246P2S9zzE3Ld6dZ0IccKsfTzTNDqocsXoZT9cDnr2DnDyqNNI1j6sUIg1Gq7NvYHIQyJRW4\nbuUrUcLrVpBgxrkTMMogeqc3KRkoxF3AqO70az94pgN3LrVYzOTsMH1gkWQG5zKibQpbQU5ZKKtP\n6tLD9no6EY8dXokWim1IKsZG+VnwCXuPZP9sqCKfJb3m/b4BJ5SWNr0pb2+JD3u0rkrbNO7IcmrJ\noBJ+x/zGaJPWb2qB0W9zugwU3bVtt+f7UEosewJh3NTJLQ88NQYwmkYp5eRUHp6b0bqMImRgpnSB\ncdwwlzqjqvEpUpClDMbYyEeTysTMBCIfm02BFlB+dmiLD/0gXBzrqTucXsY5nGVT/Om8iJ6sT6KC\nVSrRYhvmtyywAMnpzGSPb27M+SDqhCiqd4apOj8OZQW673agGeGNsyWHOTPhBSdtctCJ/LKoGFu3\nb6WxTKQpGTxya38lmTusU80ZpbGCI5MQW/ZlJqtwkOJgpCKgPFydEBr36dAMAieXqaqfekFGU0LJ\nbHCknu3pxllbs972wZrS4ZZrZ1OJzpdK8iFlVaxkXs/O21mzOMoFx6mgreDucKQzvEFpvPCbOnQv\n1xc6NQeHGjSbRHdxVAkypg7agssa9zWZVzKXsUKj/llb/2rF6I3beC6Iip7gXeBi753baHp4NK7T\nrYMGNIcFPQ7ukWphUhZbKdbkQFtorhmVpOsx9NH59PbgEcmnTOoyHvnl4SNIefApIK9kBVzd+fxF\nRJZHJJ+dYh6cxyTa8Z7/FZu6UrnzpfbMyUwb19/+u38ff+XP/Q/88re+4PXlxnEcfOtXvuAf+T0/\nzv/2F39e1ZHDHNLEOsYDeNl810Lf/eXyxR+a3bDH6zj6e17AEYLKVEvu9SQXwNw25HkvPkW94xAj\nJDPThl7QEdtOOnBWN2KJP0EVk+Ltmtg0VoM1BTm31vhwojnkntMNV1WVe3kxunOlLrBWTSGLS53M\ny5DESIYbOXy8nBqFVUh03jQHXEuHpe2/exsH53DOc/BywHE7VD02sSOOLpmWdLr7d5khzemz0t36\n3ZbaVtcaom9lYaG55UsqIPKBQixxsXzHFqwaSpTtUbyYE3seHSGHEwy83RnHoD0XQxinH8wGZzXM\nBmahS9aAXnRcS1ScuLRLWStZl1SrZ0vKFi3blt8pVgdD/OOc1CVLc1G0MTbcJRmVBI2QF1gJMS7N\n87WcxsK7wWEyFKE5qaYYofdrNcKVsJLAtTXmfe8WKvW7mu8A1gqWqSPR1FPGggKstIiqXXE6hyR2\nqUOxQjD7quu9W7Gnac9cKeQ7FGCkTtmg9kC4JA+TZW1fwKZ0EHTgztL+ai6TeCBtF56C/eBJuUwx\nr6aLKV1dllswTuPw7x6S9usYL2iTS2jxkRjLlJFUqeVWuFiJvVIc3O3ESYK0yayBJdgO+nvehjX0\nkHuH85h81hp+HJQFrWQnvXrx+Fi0KceSIoJ0w2QzztvA+6K1G2tePNZF0nC9PQAAIABJREFUPgxG\n14294JGLWELO1UxON+aAz6vzWKoyw423Ms5IWIad4qz2dOwONYpJ51jG59E5TuVJWUm2ZS6Ed9vm\nkUfpYWgFHz+qvIoUMrGqoDn/78/9ArmrtufBBGp1jyiu/lRNqN3NLAjnYxlkaDa3HTO96aGiS/Ct\nBZXasOmqQOdKKkRNkwNPovVAiRdrt6JJCfATWhba/lBzzi2eV+tdSyaF+0NSmkVBN26mVGeta4zH\n0pLDSpV/SNxEhWt05aIbm8WuBjWLWyxS8GKJ3XPSwmm2K91KqnWOKG5evPah+aLrGWN3qQqYci0S\nh4w6hS6WldvKXFpERsauuKSHNZRVNywIO7jmIqZmyQeduRaYc1TS3KVP78bZDXzxsRqzh96Pvrgd\nN87xJbC/KEYzPrjA2Bnaa7ylFqtr85hDlCBmBldAZMPL6MfCouRN3lS6yC6dbNXO1LAdCSpHoZVG\nTO0c1Axae7KoL8w6Kx1nchyy9GfosF9DC7QsLQazSmkWpgVzhAwv3RRtUxse5S2AQWtKJjbruyvU\nnBlfJB2yYwN8qZs2L4QX1DO+1qJQQZMp117rJh6CI4VPtneLe2iSw9BNxGOfeMeyd5qeng9lJ15T\nhqdIzbX9fbS3ZYNNypHDFc6AJWYHfScmmxdjtF8lyfwNHrrmciXZzj0z16HUWqNs4c2oh+aBO4kH\ny07vsWHM2upZa1iDYYtjHJQVty7JR++2kXu6nbtJM3qlEgpah07QAu4la+DNOjmc43kq2UUYHNX5\nyGTeJ82crOSLkFOo0vAuK9+TXRjPSriSI4OVjtlCMP+Ddg9iOW+zwz3oLbifjdvsvJzF8BKdf0fF\nzEsJv+Gii60sfvhHfpif+5mtiHXn7e3OFx8n5rbtixvGkV8iKguJ7Nmwl9xtz7OmutJ2rprypDy1\nTSbh0dRS22Y0XkuA+GsrHiphzcSbNr3r0kNVKD69SpK/DfJSBWIhGM0KHo9khjPX4i3hftfYxk1O\nwmwd94sFe468heQuCZYgMuwLa6fLqYfe2t5toU1Bur3pBd7CDASMVgjlcHvfsuNaQBqyHD/18pjc\nbdVV6egr1EjrKb+Lrc81czwFZPlyErH0j7tQi6MCwU0Q9rDvz5ViHTcflAe3jdv0CTQtS19fBHN5\nLka7i1MRBQo4kvMrS/I6gfBhxu6TSxfqytr6dRU5x5D0ME2d6arF4rkI1PtpppimXPvyR+XvpbNJ\nunmPjcvs0ueX3ttWWgTepxbhqxTSaMt4aRoJUWI0V+xUCMDcaA2OksGi3OSqtNx687ZpdFOX1rVZ\nDi47eZXGE2sFs1SY2JTEs/nBYNI28Ma2JvtEJpdIcSy+2H8/S6iZcPr+zaU2mmWsmcwZKkysYGvv\niySr473wdWHuXLHoXZS0sQ0eUltp3+PP0/w3euhWCEhz+X6hUkNtSs4VymktaRY8wljXfF/+dOCl\nJb4ziW+jOHuX9dMgZm27rGDnbys4B7wVHMggUdt7fRyN62Ewg0yJ8MudRyW1fLeNxbK1byote+5W\nrMs1LiDkJbeU+6c2aKlriSOt6AZlkEwUz7NykPc3osQk/dSDr3+e3G+dz0dyeeN2yDNPSgh++F5w\n9cW/+Ef/Hf7M//ifEwlffHFnrc7HLy4yoa47l9+0Aykj8U3dUoUZFfheCBkio3WTNpaCmhNGY60m\nzqhvSdtzLGFGKyWgFtrKr0v5dgMdMIHaZgFngNjjhU2Us20BvWryKWFWssJ5rCKXfgtD0eWKeIGo\nzWW1RtXcI4iAZVxv0l73ENu1trU5qpQq66ZsPZxHFedltCNZ3vEhwPfRnTbEyv3Qjc/G4LMbMkwA\nUdIdryhe91Nuoc5BCpaiaFBiEHjCclU36SH8HyLU5b54PIv7nDt8VTP30xwPYw3FEl3mnLnHChOu\nSIridpx8OHnfprs3HKiSU26QpAvqP5fa2kXyNi/uj05FcpmWqHPtCHTq/fJppncqVwh4HikZYwZX\nCD055xZcNsdMKpSVQTNhRb37O3QoM/AlAE548TGNdsl2faTA5KPnpviJp1zsy8h31eemZOFmuiCb\njBbeUlWtCTOgZZkWlu5a2LsZ1QWwqpCCANsRWqZRjoI8/V243nHKFQLbm377DCjXd0ETtGif2cKX\nRrJWqePd4ZsLOSnbXpcMT1ixx28C/3cL2pN3nRe4TFnH0Ti+AjP21ZKxLWaTM0e6zWbFRAdusdRG\nL32pt9chWO2nZN1OWpvkKeGyAQ0Xexa9QCNRrHE00pKPoXC6twpabXeSGVe5UoNZ1GVKsGVt33QT\nCagmzU5eXoLHffK3SvEy8tNdkEo8KC9myWVmS/OlQoeFmwDKLYoJehlr7RlYMJrLnAF8fhnrg9EP\n6AIL4yVy14mLBdCKH/9dv0MXWMF1Jdd1vX+/y+RwuaK+XFoWVEijmlNymUmhhISgegMC75Jz0aUu\nEW8hNNNFvINWyqbyCiKVfLCmDs28AttxJxGCvSSK22bDUrSsdK7Stu3xttOOo3h7gpv92a7Xu69+\n5q5kt8qgEmIZ95XEDusMwCIZrbOiOFoR1TB2qx/GL//yN/lv/r3fzw/9yG/j9//x/4Rjv8S3UyOS\n29Z9v74e9OasvQx5BSbQhrHqy5SDhS54D6SR3RWvu3OYOpRmLknZlPQK06JNFWUJGD/FJFiVzA5n\nOg9Ta/zmRc3YCSZiC/RSsjK2oDqxLqLv4MwC8y71jnUeliyC6568PTTymPG0Y2uj/ulSyFDz5LDi\n00LLpUyu0nc9DWopu29F7fe3yyZfpfDW9rSFH1rB7X+OKaNvVmc+ci8JNVfvNyOGNN5tFd/xB4cN\nWpkOKKQW6da4jcY55Fg7DtsLZiXyzhm0Lkmf8Ry7amwUq+89zQWuhXKurs5luFgeJjeeR6MGuyIP\nsrU9NtrdTKrgINjjDhSjFaVRTUjKWSmlxdGMXHq2b4dpONWNvur9QmnC1EndZcc+K2XCaE/c6m/0\n0J25g+gCSL1sVdrQB/CIRs1tQiCx0IzWb/qAj+Y4J3tXrOXLQxE/cYdoi+t+4GPxOclAbaDid/Rj\nLApsMmi0NrAXY2XInXaXB/1ugS1VEXMuzT9TB9Bahdlg5l6wpaq3eYkWVCbff6U2tyOMRaOxuPcB\nd94/OxOO07nm4q2MKzp+PPCURKXX5DyMT944DrByvn1/7L9J/Zrv93f8yPfoX914xT//V36eb9+/\noe/gGlTBoxZ9Cd/Xd76TN9tLCi3BbEvANDZIohwcwpxCeWUVTkzNgK7cjIhNZtOLyT6qdn5WaYN/\nZRBTOmxz+fcDg9W5qrjmUnAmzg1YLSkWUZNYQ/ZjU5rHcIPpYl4sbfrWFDT7ys7Rk/jkWJfa4+//\noQ/E/ef5hf/7l3CCys6HQxvvxSSRg+00gw7XlISxdVcFt5K1Fx2xK9CBU65L1F1JDeap7LuUQHKl\nLgpKbblMIkVVZ6aysGKHQOo/ZrtlN2Iq8ijXIqtTLfhYyWc7VXeU9KgNY5rT3ZldRpdYwZyJLfE/\nvMuAVCRrBvcdKNAIohoRxsdplF1QGjtdS4m+eWgZVdmINXXibFdgogKh4YpZQgvNnhub2Q5qabls\nNEZL7Qta8JJicDxmY4wkZuNK+HBM+jhoptFDH9A8GP3guJn04o6CITHMnNhQIUxLUkfKh9qaRhVj\nYt6aO9a0GwChZYcZbNyiu8xKGUWtIvtW5WTud0wznZhSrKxZ752AhS4WSs7Ktu3oVYs+tLhsw4Qy\n8MD74NiabjPpqq3pjJtfIV/46jRgQxE8ezNZe6NuNCqCI4ZI6S3ISy/lzdSmOMnr7ZWsxeNefFrG\n/VFYTkiR8mMpuVRGgz0X29Kn3p/yF82bsonFsCLA95drcF/OtR48ruTjAyIWczUWDa+gdznj3BqP\nmvRqEvv7tj1emil600NopfDIK3aSsTAXtBq0HlR1AuORSSM4p4hnVRc2Bkby8nrx9pZMM/7bn/5p\nzcHWr41mri+3Pfzhf+GP8M3rJj/8Mqon1yO0RT20oFrL6MdmLqwnAWqzbpcqDEqjlms7wKqcx/J3\nQHssSYsec2GhxcZjnzBravG0ix2YIlYxG3ktzTpbcV0iT1mJHdHz+QInK4yaxaRx1LY078RXwpWB\nt1JWTELVUW1CWBrXIZxjVuNP/bE/yB/4J38vf+1n/zo/4G989M8FLNrz2HPoN1hN2WYvh7LYrGRk\nidKyppVvpYmiV4Y5bLKUbcpdp8haLDrWmlitO1WgTPN2q9pGE3VpMxbujUclhhxmkmjJHp4zNSOO\n4u0o5WqVJE5nSM/9WAtfApg/atuPmZqFTudTASbDipaTMI5DGvgEb8m1DoLJd95CelhL8m54E9xd\njkDb+myj1WTa0O9njcilDqlqz+aD3M45Ww9oJyuLk0YdsunfaGRNmg8+HHD7IEXCy3ly291I78bt\nJgh5HwK3MZ8mlD2kT9cs3gPZ/ZNYjeVKVu5lu+Bguzb13D+H9sNM718YqwRMSqAeKPUFVcWUgix9\njysq5Lp0tkKuij6296AcLAAXsY5Oa3u53l1pIyZVBk8ldKkr77+2tvo7O3RnKiwwluyu7Hms5jAp\nqU0ZHo3hmveuJefHOJyq0BbY5GG3LKpUBVYWfrjSOVdxR1t5WwKWRIRmX470eyuJZuRUu3BlIzJl\nu5zaPlYVX0wnI7li0keX1CNEvm97a3r2pplrwtu+mDI6NnRD2jC1U6n/H3M5xRowesNRrpMV0ITI\nW1X8K//U51/1lf5t/jj/1U//F3z9t/0h3mZqNlaNfFz7dja9qE8IdEA7nCNR5hVFzMaywlKb5e7C\nKFVe1NJ3HmuRUzKlt6nAzbyCZROWcu6uUnUYvjBvUDAQV+JCm12qK1CQRgunW8LY0jWgllgAZPLW\nEpsC12cq54pYsFN8e+/KQfNGRmJrqwlW8fDk0y/+ef7Cz/wgsT7xJ//Vn+Df/tP/J0dbXKsxbOCe\nlMktVO0gc9J6o/XOiebDbSvgI9fmp25QURYcKh7MdNgsBGyKqcq4trZTAzH5sSdws8ZsIsORygQU\n1HvHyJdm5O4me/B2mT0jp0Bz50eqKiYUERMhtYZzkiQ+Ak9o9mU22qwGpRbXdxW75uKRclit3JK6\nclY+aAdY6CLO2MtYO6h1qdK3LUsjpR2urfb1JSPF7WBsS+9oxeftpDXhMrsfnDfj5XRuo/OhOZ9/\nNujH4tYFtOqjGB1aKMHFXCqA0bu+467P9eRIELoMWu3v3xWtBBeR2hX0Jj6DpVyUzUznpBm1dcZr\nFxkijWmUk3GJwlYyZ1kEc2rESXuaiw7KlVirA1fnSR+w9Ta4K+HaN2O7Id1adX/faf3//fnqjLTQ\n0sEstg4OzYOIPfcLIEk/WHGnaFokVcktlc68dmvWgkZnpRQBR4dZ2xLZ5K8Pc9ZYimPeTi9KHN5c\n7DA76UXdAivn4fosz4j0DsxNDatZLHbQJE1pEEfnRLjJKJcLhZRIHAEy1twVTbrIW+ih10EmduzK\nRVsavg+HeFfF/p39+V/+ws/yy4/v474UOumtnpKB7eASBISnA6855zKunliAb7HXWrm388W9dpSN\nda4d9LnlxNzn1NiohNucAW+Pi47m6t5y66uXWt+URXTtZ2Fl0PZzsHrSrO2HfrGmGA+r2a6ugjTN\n7YZLY2ptUIh3sOZeUESp3QQyg2FaKN5G8Iu/+Iv84Pd/P9/zsvhiLW7mvB7FrTmjd8b2uxOLelLV\n3LCdimwZLHzDvzdOMETHsygsjGu3lrE2VxV7r2QypR83NhHLlSV2870ss6C3ttGaSkEW1gwg6P2U\nHM61NBabVtK8WPp+PIzrOVcvLbKiBpXGYLHMeHnp3K+kLbkhlcCwwDvdk6jFI6UL/v9Ie/uYe7e0\nru9zrZf73vt5fi/nbWYOnZHOYFuF0hLUppSUt4a0sUYphZBGIUVM1KKoaSs1oQVpYkOxCopabLC1\njBWxMCAFNZ1BpBXEEDogwkiR6cC8MWfOmfPy+z3P3ve91rqu/vFd+zmjMnMM7MlJzuT3O8+z977v\ne611Xdf3+/l6DCIVsi0k75MhsmiTCqka1inPVItKVaN5cLUYVjPRGznLXFFyZimJ+yU4roXjwag1\nc8zGYU0clsxxzVwviesD87uboPwJD/ekRKNhmZwGHaMWOVhzlSLF+xzk1SErbihnMWcnpUVutShc\nYsMGwebGmnSAypamyMNJ6EQ7hpCgXncqCetNfzq0PpUJjbdADwias8Slz8vFwZco1e/0wcqpEwfa\nimDxyzyQfrzXv4BO19gxSjiK7dHQxru4B70JlZdwjIqlTvLB2WSRbUM2OslSdIqw5nQLesBSg2JG\ntgrZJ3ZNNJ+RBjaESRwfdQGGB8mdfUaa+HAtOK5yNwIKBSuz0e6QSmMwmatToxo2nSwuoHEKwUTU\nJjJu9j4HLur1Rc2M6Dxq6pMdFsCbTuN59pc+xuvp130CL3z4g7/in7WXX+E87kFeadlJezBMkjL1\nmY2GSZJTGuUMYxEAJaWLv1xa3jHdaYRx6oOIJq0vAzfDhnq/YRB7JkbDrZBTpY8uv39If92bc4pG\nssw+KxZ3J3rHUmUtxoOohCV6cjaHakXC+dQ5u/TSeahnOxzIWjSwTCrKw+rTddgDjihXrddEHSvL\n0nnLJ/2rPP+h5yhr5vbnfpSrT/5Mbe4Emw3Mg3M3lmMifKPHqn50KMI7FbUJbtrlQXFyDhbL7CHV\nhZgOg3DhHpu7TvBms6IJKNy1KcpxSvHMOYzMzQh6EzrRu2zKMWEz+E6e7TBdg67ngJWUCplOD7tb\ncMk6pWaTfjUdEkcP2m7ktbMnpbKYQU2F0zws7BFY7njLRFQSwcl36ihkU5pxRKOkxDEnaXrpDKu6\n75OGSEvJrDk4XlViOORKCjgUZ6mZ473ClQWHQ+J6VWthqYWywloTS1Zv23iV1ZJCn92LWhxlnl2T\nC5upNk+QitQe2WE0kdgSgBcNa7W74iMR6DSabeqBqypsJh4VwLqTa8whurP3UB99UUabzwNdzUZV\nPLf6xgDMcNmWZvagzw1dLQ6xQTSYM9JdL/uOzPOrXnSTUcPxWeLKKaO+WG95MhPUm1oStKhKAnbn\nnGQZdWBcBm42JGntImq1bkCj1qTsLlOawIguUEfPmE3ftjt7UvxK5CkY74YPDZVGa4xS5w432LdJ\nIjPDUuUqJUhNoB7U08muAEJZVsGlEpe10hLnfslzclI4p126SrzrQi9GCdmVN391hzNgWY78ue/9\naW76fYzMH/mCZ7hsgkuGWjNtOF/42z6LP/89v4CNRlpmwvKUtGRbJEnB8B1sh3EIzDujC9ITocFQ\n77A19aF8Cn9j3qDDLsGG8zNusnSTsnbqqlOhgkUv1m/BfzyaTAp0PAyvlRXFF4HULDUS2RcanTUn\nzl2sV5lnJNBnDLaRJRJ1LZsKJKmY75ThAh9VYxsbK8ErjwZPPvkktzePKZb53/7sl/FV3/r/sYXa\nWKslRnYBX0xtlLCgmcAoxdEiH5DmEInkZNeAEEt3xog+gSwpd2lHKeS58MoBV0ho8GhIqdFRDmBC\nBK3UOhDMOGPdC9NphjVwxf3YhC3o+cyUmmntTPRMcuEdBefuJM8a+pXEuU3+rcmibBgrl0WukPxC\nhpPEb7FKQvHpYXBYqt771KpcRcFXY/E0o9YVU3+siaslYbYIEuPGUtVSuJcThwcLTy6J4yqg+rLA\noYg9kEy/YSS7oEjYDYoH5qp4PCfS0DVcmBLkKGwhXod4HJKcBUM6eABriuXCEJYAcCmGIuYCjclV\nFibIfAQnb7KUj4TnQW8KyRwxw1zHmJJBrSmA5KVpQO4iH5rUKEaij6H/rkpWuM5Y9vLavYN/AZ5u\nhpwLrcnsUC5kdO+UvGgyPXeXFhretDHxf00tgdalftAJWU3+VH3yO6U+OEXmMOCcG1AFkUa4RZun\nkSLzD1uaqamutoVfyiMSe2u0yGwdzvSZXS9S/jmCOrSolwwnZyYWS8HQLxPRCPJlMpn1BR88c54i\nf2Nw75DJlqm5EzHY3HhlC77+r7+XX3rnT/LJn/7JvORX/OJLcoZRBvff9Pm88t53AHB1/8D9q2sA\nPvChj5DjZW7iIctp2hoPusF97KRRuI0O1nEvHE7BaQ3WJKfTWpwxqtivOTH2cSeCx5VeEJ7wo079\njhPZoYvXWlHLIBbDt4J7x6zLnx6dZEbNaPLdYQmwojZGSjNyJ5yC49P2WwKWXNhGYo/B2IJbV0Cp\npSw9bQgUvyRn5EzUwtIb2wBa5Rf/3x/DI3jhQx/CWyddL1xfP8TrIHqC4eyW5oMsRUaNoDbJtJqp\nnMxmLDWoNiiLdNg24UIXaymTCTFSnmCWLMdSllGjJVjRSSrsMrSMi2tgDnyTZGHpohOWoy2iq29Y\n0szd8sliOMj04JuCE0mkJeF9up9KEJtK3xGFjCRWay7SuJckHaInjouer3N3Uu9iHvRMVCPawGl4\nHhyXlTqHgtelUHNAUupwjgBWam5EyJCxFKOMTF6Cw7FwqM5x1Ul3KZBLZ7XMknWQKNmIaRYpMTmz\nQ4Q3knS+NaSRGUmn094Hh6Jntma4EBG3pE0UMm4yAvmQO5GsVsKSZiuoqCrsQ9/jDrStKfvN1S4c\ngSoEFyGRnFmLBq7BrAJNECYMmSRiEFb13UzKmWQEiVwTixu5QC7CSuok/PHX1Nf4Y5SphRiYIKcK\noThuZzp10GzER4ItROfZB3sbtCYavlUgm7SlaKjgScqA1FeiJ07J6aOwb2LwenTO+4nRobXOGTiN\nwe3tziu3O6886jzqg9smEfTZHKzg3el9UD1ztUjPSdb0fo/BTd95fNaNRSQ8CebRRwhog7SePlAe\nVCT2Js9/ax0fKNZmKCW1DePl085NG7xwu3D1G/9t3ndzzcs3xqOz8ejsnHfn9/13f01DmQS1Vg6H\nA08+/RRPPHnNf/tVX0gachSRMuyZbTMYQmuObtycjNMpeNzhfJbm9rY7j3dj7zutNdp+pnfn9Fj8\ni20ftB2YZXhkZ0kXdGDiLjoxF44YV2vHsnp4GByWwlILuVaKGTUHSxVM5dJX63ubpwyBicxlCyUZ\nV7VxzMH9Q3BVguu1cLiA2RF0/XZIkmMbAhClxHKEf/jDb9d94junbWfJiaefPPCO/+lruT3D2WF3\nDZC2FoK++LzOrbFvg7MHW8RMpEjkkKKkN6Y+eej7NUVy2yRbDXcxb2NasYdLjzwVDFhQFmNJeuAv\n2t5Ikj2l0CkVIKUqJYN1ue8mhKa1hkXHS6FbxlOhcyblTPZEiawWUi4clkSpiv+2gOuSeFgLS1m4\nvjpgFiwZDguUVGmuzdtiQE7kZeW6rlyviXvLwsPFONRMqYV7tXDMhftr4Yl7meNauH+oHJaq61g1\n4OvnDRtJBo1paDIzqIJ3++yh55Cr1LA5A4IxA02WuV5UpDpIhEDmBsca5DU4rBfmLqRw8TVSmVWi\nTXmZDAyRpXTqk8k8Ouxdiy9JZLBtjMmk0BoVnhlz6OYjOPU23a8T9ToHjj4cSCxC95BNCg+3Tq1Z\ni/dUZaSi03mSDPnjvl7zpLsA5+z6rDH5AkhEXkypo+KZTnG/QVkqvQ3WlGQljUaKRloS0QbLsnLG\nyD1gbaRmjOq0Xf3a6IO9JGokqld26xSUztDD2Zp83ltPtDiRrarB7gub3zKssObAxy6HmAty3ocm\nlDmGduPpZ+8emIuFeTgZe1J/ziMzXFBmmwkCNVf2Puil46NwIjgwxf5dg5jWNjTekti9Yux7Ysk7\nMdsXw+G0bxzv3+OZp57hIx/5IJlBTeozNlX52AjOZIYPSb1iQK/sYeQ4U7ySq1ICvCf23bXQ7NLh\nWlapuxKUFZInUk4sof70cgTri0DMl3DOBdIYZJuSORMqMkZmVLubwsueuVM+KhEimwYxPfJECBbW\nMG43ZyzBTZ8Lck4kBskzNcnm6ylIPVEYmBe+/I/+F3zd7/xWIi/UsnN7e+Lppx/yIz/4l/h3fufX\nY0iQX9B7aa1zzgvBTiSnpkylkdaVbUzQdc+MGJSQs44JSZqoItqYIBqDrYliZ1n0uNbHtBnPescl\nU9IS0OhD00pPmq7HJWDVpyXZq8JKfU6/pzY7DSfSTh+Z7At5yWCaQRScYoMxMhnZuFM29qH2mF2i\nQEInvX0Y3XcN8uYUf60Fo1OLsVgil070eToz8QvqnAtU5UGRkjCJ5SiwkrLUCrcjKDZYQmnTEVPi\nGdI12zx5EhqaJhPycHqY7ugiHkYGOUOFDWNJxmFo+i9cSeIcCgR1QwkYl35riAMcHlhNlG7sKH9v\nax0L6E1D8GqhdI8kCJSSkxe2mLQ48hRJasV0d1bTNQhTpZgmmxlQbmSW7d5QxVPcpvabuxbir3rR\njZiRzVkfdISAMzGMzRvJFaMeowpUgqaoNWmKmA+Tu3v6ZR7fFJ56YFh9nZimNdFGxqe3vlQj98o+\ndsVCz9BJN2OLhnvicRv0kTg3TW7PTbXMcYEyhHbrQ1R+nzupF8M3XaQ+1G8qsVJisLuz5IyPht8m\nRnGiTZmIjro6IWVJRs57Z+CkE1iWrKWbqT/tzj508iqIRFUJWjGSOx3nkz/3j/OuH/o6Tje3HNaV\n1ga351s+5VN+I8NvyX6PYkYztUwgCQSOorAjnGaO7TunBY6A0Rkj2DZnP6MQQhKRpItN1dlorK1o\nQ0waZAzL5OH0LN+7uYFnDqBI6UXJBKcJdRHy0CC/6mCrYXi5lFRiml5K1Zyz2L5jcFzURz9MQlYe\neZpJBqlqEUsBYxUJLdx57kOPiHA+9MHnKDXx7LNPse96PI61cCyCFwWDUwxsn7l1nlmMCZQf1Krh\n3GaaGwyYD5w4EIRaJObSFI8+F1lc2tEhVGitkAj6jJyQz1FT97BEymoBDNPsvE7+bk6KxfE0UaIj\n2EfX5gMz7aSQ0ZDGp6InSpf9NTo5yW23pMzt5jpEYCQfJDK7O7e7gEaHAAAgAElEQVRD169aps8F\n33JnWUR4O2bD8uC6LuSjWmUZnerH6JSieJ48Qekpax2ybTDI1CU4YkqIxqdWVYWZJ7WgRuheyGNC\n/y//wMwfm4vedO/mot+h2HvxbSLgyiTldE+SYyIoUbg0uJjPFqBgW30qJPoMqdx3Oc401M1c+CbK\nKje2vkmTHAVPAZNIWEODdrdBskU5dnTJEkOD4ghjCcMi1FqYB6SLlvvyOT/W6zXbCzlLjrPEtEKm\neVFyKGU2DaCTkvgLS+0cExxT4ionUjNaMf7wV/x2Tu/5Xn70+98KQ1HJgc+8e7EQDpFxl7uNFKyl\n3ilvuifObSiVdZdIeWg+IgnM2Tg10fPN0vR9J4bNlFUCjx13yXn2c+c0wEM7o9KNjd2TTsTzgibL\nonWNzN6E18MyIzI9FfY2mbQt2G+M1hIpEuepke0BrRtnN7ZR+Kwv/QoAzttgXVZuHj3GLPP8R16k\nDXjpPLgd2twI2Mn0YlQaaykUE3UpLeqTjYCbETx6PHi89aml9QlVB5p4rUvomGEelNFlvTRjv/Rl\nXUmzawnqGlwdD9QqRfpVllkk5olEzqzpMawzlNN10hxjcD675GVDlufRZTUmBJwZDqcR3DZBWXpX\nyrEnx7tYxOkQ3IoLRZBYlyPhmUe3JzB4UJ3DnGQnc66rUWudch7DRwPb8bko1jDGHuxNjJBzd/BM\n24K9O33TNTw152Z0Hrdd0JjhMyrI2dvgvBv7JlpXn4GqPbSRMBdym/fLiEXlbAR1CRKLqkR0ENED\nNglqYdroQ/Ew+77TzlpkqHlubEl93azqbLQZdd8l5m9tEK1TSVyvwaEYV9crT6zG/Sq0ap3yqGJq\nXWgBlMb0IgfNZapLcmK7FWMlIVvz8ETKmWNNLDWxlAtWlTtEQJqOM+ZCehH15DKZHhZqHWRIRRre\nUlGUVLa7v59G6F7IrnzEqRzRFdZBhHQ5WaoVMDzwXZXw3qVEOfdgj678O9PpuLmxDThFZxvBHnIA\n7k2Duhksgjtkq3MYP69BVmUvRGTctS4urRReo73wmouuzUXN7DKllo0xL8axGEtN1FpVRlgSTaxo\nsdpNRLCrNfGBD/4T3vqt38Sf+dNfT10aELLU5QwpK5QuO2uFtVSVQblo+mySdKhnWCZtXsOb+VTS\n0SSy9cGaBLVJJih3+BRel4WCkUNs0eEOvTNCiQIv707vSrk494xjdNdpbwzFUweFU9dNte9ntp7U\nhx5F5gSczY3FDUsrKYdO260L+9cyyVbZe883LGsieuOFDz/HS7cvahE/NdqmHvKIwWidUDY3VgaH\ncJIFKa+MlLi9bUrv3Y1tV1l8c9o5740Tg9aDNjJjL2w4DSOiKQEhXMg8d1mMU1L5Uwc5KffKMKxk\nbOpx60fdHGPK9dror7YdkpIoXj7v7C2xDwcGS8pk2+dJcbroAswGbdNdfgnLLGT+5Te+EYB9byw1\nc9o3alGOVvOdU2P2ajPZFmpJLMuQYq7qQTlkDXq30M8/z36vO5xGVxacD24dboZzboMxuuSNXSzd\nqJk6Q0ZzBWxoCOwxrcxBNkglK8QVwDdNj6f6QflrU0kz0YmjZ9oePN7hHDMZdwy2m1u+4gs/j+96\n67dB6SyhBN6yJOqSOFa4WhO5ME+pjo9ONhg140mg/3oIrlfnuDj3Ds7rrjNPHDNXJXN9WHjykHlw\nf+HesXJVy9Ryu1p8U51Tp0FmoA3lHE5vWsgCMS2saH0ogWzHoYfSYqoSpmlrikUmq1mLsYEgOQ7U\nNIE3GuAv9VXZmZkieJap6bSkvLYcl1VMA0PVIkx2R9A3beS9GW0PthH0vStItnWlQXRJSM9dU6rW\nRBtsoc/Y5+yCoc239iE6YKQ7GHrEDAMYel5+TYvuxdLoHmCiGaWiU2QktRFyQs6ZC24tBXnRCaqm\nLKI7if/nXR/k2Weu+eBP/S2Y2jyP+SZn5PqaE6UODmvCvVEPcleZKcUhF+HUVL5qv7Okiz9gIid3\nkZqArdn8DIH3zkhTjD57gUNKJraeOZR0F054brB1p/vgcRNiUojHxkqiD2M0Cfk3ExA7dePssoJu\nNiNbPPCiRV89qMSX/+mfBuCllx4R3XnyyXtcHSrvf88/5rw555HZ+gae6Ju+l5iWZYA4VqEtaeqp\nhzLOblrjtnVu3Dj7yu7y8Z+bYo9aCKDSTsF5qgrSqDpl5dk3ngvDmjIlu7LuLCZJSSYLcUo77mJc\nxLTGwjwJmAQ9oysQsA/1SscYZBaqBQf0d+rEUQ4M38YkSClD76VX9DMfP37MSy+9zLIUnnh4TdsH\nT90rLHmjFOe4arhXq3S/pU45YlrU+7yYQvDJl8hkTLll3eXBb53WnXPX0GjvpocK5slGpxtvMu4M\nAmzGc08IfU6KVS9m02Iut2aEcKJ6gHUqHFHvqoWaB9l9plAH/dHzvPlNxju++8+pn4zUNhnxmks1\nrtaFJ9eVw1KUvJyyAjhjAMZSC/drYS3GcV14uKxcH1eeulp44qpwXfU91TDqWnl4ZbzhwcL940K2\nyugFH0nBsGlwfVhZl8SaG6TEVc70GPOziVzXzYS/nd9JH0yaW9yBgy6LrftUHQ1ZfN2URnMB3V0U\nUcfFqEsi1YmjtNk39vndJrtjZCy53PVk+xacma0GEucui/v53Hl567LXk1RZoyqnjaQNAPkORuvs\nXQkgumtUnbR5+NhMLA0fiNKHWlPj19rTlbxFN5FNQ4ORJvZMzgwLfzUQkZ0dI7qxBOx5UAt80X/8\nW/met/1NXnjpxH/2+7+MH/jxD3Eb1+TICDhXGD7IYyPXA43J7RyDKR1leMwBiE4VuHOVNd2PNEX9\nUyjf03SZ7XNA5Aa+4uwzQl6N771nZTw1n/ISlS8pTa1q7+RUuMGpOD1DoeK+qyPmRtrgZKGe9FAf\nsWi0IvpZl2NlHZqKlsMDjk9/Orcv/CR1YuDc4YM/9w84vPFzuOo7fQx6Dq4PByI67j61m0YdnfPF\nkroHw0IW0ZTlqPJBp2kolIyaOnYe4FV9aYKaF67KAMtEJHqHUqpcdpamrVWbUIMZEe8a/pjiZnz0\nufGpjLuUmBpEyUBy64rhyajXmKokY15gNaOkjs9qolMQ7K3R3SBVynKPsT/m6de9jhdfPPHO9/wc\nAF/1298ovampt/aXfvAlrmvRvYrryR8blqoMNUm20EvvcLj4rJpRiEdgtlEnvAR2CgvMyCFQ35GU\n2P3VAYobpHwpR4cgRIDNCmPgMDelfboH95Eotc97MAT2zrOPWOH3fMmn8OTDAx958UQizSm8xjm5\nJOhqSaQlGF7p/awFvWtg2qqwi1cV1lI41kI9wHGR0hjkXIzQ+60FwivFEpYGpTdaGFEyxRZqngOp\nkrBIrIuzgRgmLd2dREnq86esQVoQsnirW3i32KZ0Gcai9oBLJSVbhFqPbRoWtokrsaErkEO5ZH1o\nCOrzmgqsLs16N9HzlqHFfLgT3blFDsjR1OIoSSagWoV+JcHWnJaCoxdyKiyLTB2anCirTiha5Qa2\ncEaaxgjEDh7/PGLln3q9tmQs25yQ6p9kcmvtFiyAV6ir3FwWA5JoQbgiRCpw6it/43v/Jp/5Gf8m\nDw+Jp5468If+k89gKZ2aBrVCjp0yGlvK9N6I4XgM2IPemnpvTXpTPLNfCESoDM7J8AT7Pjh7ZztD\nu5W+MjrKt0p9Ro44W2YOJgJzWZzzMBZUD02mPVgRK4LEiEKKlRvvEJmeZ0qGKcnUuoGfVbKMjA2B\nuw/mVIKRxZRtGL/rT/wAYLznFz7Ivg9uTze868ffTmo6Te/D1I6gkVMmEK5ub8ajHU5n5/bWaaMx\npH9hyUFeG8ukO3FJlZ396tYGp8ed21vndLtz25zeGzkcG65YFzf62WmnIUh5N7wLXj4m6aq1wb4L\n+CwnoFQgOr04I8RMPi5wrKbS2Jg6x8KxGFfVubc491LiWE19/QJWBpvLpRY++NL/8q28/vXP8LM/\n+/P8/M//wkdhMScqKOB//Fu/rHbNNvCuYVEt5a6aaiYnUmJ67F2wkoScXx5AFphavYmLBT1YD3Ip\nqsRW/3a4+Bcjx9wwJ0/AhE1MSTLCNoTybA2xBUyLyB7B2CG8S4aEFqFMpm7Pc311JLvxuifv0847\n5jPCPmkjo4rBEHmlINZ0ShI3rYtxVeHBUjgUtUV8JibbGHjaBVAanX2e1JOjxQy5O90FbSIFh6ps\ntntXavcth8QBo9pMlHDYzpKP7ZvMTm1n2miN84g7FoTPVoP77MkONJ/ISpQm6V71uRinLBtxjdkz\nNc2BLj1kUszDmCLetyagUQkjl9Cxuccda7jEoNbCem+hHjOlFMF+hkA7ddidDNJdgQ1Gok69itgc\nM5armQJBB7Q2YfPdaI0ZgPCxX/bxfMJmFu9/3mefTR8w5kTdQ/rHQKfhvotRG8PwbmzhjCaY8isl\n8x/9G0eSBb/pU9/Mu9/7PozCD/ydn+K5/omEj2kXdm4bbOdOroXRnYJx0xsx5CDaQknDnTkomtKd\nvTtbBH5Wo+hy8iLpVJtyEKOwRSPZwu6dNAqRXJPOnKZVcZBDvvaOJrDDnCUqu8sAgGUplEMTVJ+S\ntXDJzPTFOmRtn9kTyYSTvJSdlYTl4C/+vmd58n7FcuXxoxN/8Nvex1qUm/XwID5xtvmdDzkD+9g5\nbaKt9Yu6AsWkEK705dbnTZtIqJWS0nTUGKw1s+bMg2OZcS1G5A6jsDFmKF/Cx6CNrr5w6EFJNGpd\npE4xZdGFDnS0mJtuFFL22a5RO8Osk8gUk+xpyWLwusPWO3/89/4OTi/9LPitVjng/v1rHj26+Vh3\nKH/++99NiieoRyipiNcQM8TQ9L3HTPFI2cmpkotOrW7Qdme4kjpzXaYsa7DUAyWrvL1kq+nEOquu\nCLxrKNgt2Gd8/RgKUuxjSCeNk3OBMTRdD7UZFgb5eKDkM+ZlRsMkvvjfPfL5n/NbWA5H3vlTP8Ph\nwW/hm7/j+0gzo667TTgMYInbAW3f2LfgtO90V0JuSvOwFEpquLdqw1Hyllp6eSnU2W4D0yFmuBIj\nknEoiSUnHYpMJ+QE1FRJqREZlrSyLEEpykSDhCTesySvUIoG8cBUzihKp4CgOQWs6AR4hyj1War3\n4NQVSNC6nkkLUf18rkfeBHx3z2o1Ts1ub3NNcOeiTItIhDc8FcyDhVCqdCCG8nwd1oVa6uwjB7VU\nrSfZFSWWpwrjbnKmIXvgjHA+9RMrcXF5/DOv1zzpXtbkmL1d/XtnMIldzF9uRqbMkmEG02VjLYn3\nvPtFjMAj8dPv+kUe3n/A7Xnncz7jk3mwNGpRUxzTrmaWOJ93+nAe9Z1tD86jsTejhq7MkiQFKQGk\nREmw5MS9Q6IuIhtZ0kJultnPAmVXFDedBHjAmFHKQ7ttDVH0vUDKKhsYhX02jtykj1zSHJAMKNEY\nEimyJiU1aGetsnRmx6oqhCA4lMFaB8sh+Kr/+YO89KhhDP61T/l02i//DI7RbPB4GDenxnkfnPfG\neTRut43zLrPFo+7cnI3Hu0rLPQa3TazhZJmaMwfTgjN8SpvupsrBcmjksglKE4NoWmTTPK1s+85N\n2zhtyuXaXAMHyysRrgWXmY/lxk0PziPYcNyaXG7zfzV31pQgO07M085sz5ixLonziz8OfnO34AIf\nZ8GFz/is3wHpCUot0nD2ILoka3pJ8ieJkwY4SV0ZqXKDOXDNhC/0rg2kWgabkilQf7IJJC5JVMi0\nUMCm1Vl7sDNGovfOqTmnZowmfGkK6VbdnOyNRqH3RtuKTDdzoV6XK370R3+S973/fSTgpQ/8fUaf\nQan7hJiHcx4aZo2+05tMO6UUjuvsGPpcWKc6pQ80MEpBOSSW48KSnFIqS64subBUWNfEvWPiwSFx\nWBK5ZswSqcbUpRqYNn9dpkYL2cNlE9OvF+xGg2UjaElVZzb1P3OfZrrBnVIgzc1sb9xZsjdTe6L1\nmMoH1TiWJCtsI80hujbL3vvdRi8xhmYissAnzOSsNRdlrGUYXpQY4XISRmRaH5xbk/rIYfPGmCqd\nEU4bgvnvIfWNfAPOaVNV9fFer7noljJ3dhSTAzGhN5PAFBORR6iOn68lw7I4tRSefeZqPkZ6Q49u\nbnj2DU+y7cEr7/sRqkEpMd1OSBGxlAkt0ZdVUmYpAkpUbOroBuSdGoN1SRxLaDFlSpOGSsK9B16C\nUmEpxoNj4X6FZYIvS9ENl0qhoXIyRrC4ppOlqj3AIgF9X103WW7YUnW6m72pYMAa1FyoyTkuwb0r\neOLKuD5m7l9lDmvhcF25yoX7a+ar/8p7efmR89LpHu94x98XMBqhAfdpd46AYpXFsjK4DIgyS66h\nfrjN91qMqxUOJdFTZjfHclBSUQlbCn/1L34L//jvfRfPveddNGBz58zgHMbtrj55H3DTjcdDFUjb\nE/uo3PbGNpKqjSGx/21zmqPvvRmN8eqDn+UsAm2q2bQw7mOyig31N3+l29HgE97yr98NYd747JP8\n+re8njd/4tP8xI99P+vaqUvAcMyFJhypiBqV87wmWnDF2NXPtNkSWksirUUBhz7wJoQlrsGOzdWg\n1nxHvKtFqRdjAF1hlK119okX3buxt0RzFziod3ZPRCz4MLZQ33ffUUwMcG7B1hvn8y0Pn37I88+/\nyAiwOjTEdT1/bWRST3jrtH2b+XYBeQbPD01aUkl3z6tH0BPk1ahlYc2FYpJwmUm1UpLMI9dL5nhc\nWWqm5HR3avaR6DlRFyUHx1ycOjppbnvMe1WDa5ia+JC9toQ0sq7Ckw0lelwWRm9Ob7Cd4eRKdNhb\nEDvgCl4NpAPvA/qetdi5BrU+EKs5kAMVfa9man2WMKojcxI6ONbR8S6CYvgMhg3mPEiKE1rguwbg\n3p2+O9vujD0YuyzMPVRp9zGEJWgff1n9FxikqSTNc3ATgRa9CEDSrGFBzoWIjrka3LKcZrzI5ADw\nuqcXXn60s64yil/fW/my3/UlfM8Pf5h7ljnnmWMWWWTWUggL1i760rAEPmiW9eXnYLV6h0LcRmJb\njeUsZ1wPwArNO8sIsEJeDYFb9DBlV9pqTpneN4z6anyKh6KzZwpDGQu7OWUUGUF8kWV19pSpg+yi\npt2/P3i4JA5rnoaNmAkWQ26zlrGlq3cUB/7zb/tZ7i9HTsDmC1cEURuL6cZmZlypJelKm2XGJxX1\n2mtylnnUqKbY+oPNbLR0SXOu5Nppz/0wf+Vb38mn/eZ/ny/8Q9/KmtQzJIxcFYnUYycNRbz4GBAV\np7Ea7DS8qc88YnDqCSJRUoeyYO6cu4Z4IwG+kLKT3CfIu5NyvhvSFqt3JXOEyrU/+VffSa5vYCTn\nj37RG4Ggj45Z5XBY+XVvfJqv/A/fzJ9523sFSjLD9kEpQRTA+6RDTb8+sv1epYRIfYXBoI6g5xm8\n6YL3OFP4n2ymXsxjQ0wQvxnmxm5DC3sxaaJTJ3mn2oqVV5UdY3Ra69jlVBYCv4DIbU5TJiDOG9/4\nJn7pF9/Ntp2wCl//h7+U//rPvpUUsj0nE+faUsayADHEjC4nsFJoowmPWoxajNWKtMIxSKak7OBS\nFSjlpYRR84wUynpf+3BqFCiKVbJZpus3bfhY5vNntC7yWcmSW1Wb0sx5Qi2OGBOTqFZS0E3weymI\nYHQpPDSwl7IlgskaloU6IxNEIPJaB3IPPDUuDIW9a03ou6rTzTfWvEgjHWIiDgO6rMMeggRZgBVj\nFMXHd5VFk4w43WiesIw2rJhtDs93G8pHtyl+VYuumW5cv5B9bGoDTaffPGbcd0wgRcQd6ixmSf7c\n8zeA8fwLO4eDABheHB+DshypVREwy+Swltq4Di3aOSdaGgyHZSycHEbsRNeUkpi4QYelDI6RuMmd\nfpqx0SM4JFiWypKcQ8131LDoAVuwe6f3hHnGEjiFhaAvjk1gdLdECWcx2F3mBcsqK0YZPEFwPCTW\ndeUqBw9WY8mFHjourVmR88aMta5del1vnIdxVZ/k5MYRo3a5mtiMcTCyOyUpdC/mzZpNPG6zrP+f\nhKkTY1UrzIoejjZmNIprs/yh//tHefEDP83TT9znx//e/8Fv+73fxNmuBZrOHVwgmiiZ1IfQgwnC\nBqUXbnrXyTtBJ7Hvs+dssmsuMWh7Juj0kRm5Y+wqw12w++OSWHBqKjPdIvimt72PP/XHvpQ/8F99\nC/XhM5SS5cG34PrBs9y88kFeevmGYcHD6yuOOfP0Uwsvvu+nuX72U8kpOOSFZiZraglyriRriHyq\n+7cXYzVYccIKPantEh54ljwxWWghh6lucHJW7E+fqoRzOHvTohBNmufdM9tQ0GRoCCK+Q5fGu49G\nKUW8XJtyuTFzufxGmuNiWE6spXBqO+/6ie+ndKFI12lHVuKs+u7qLYprTQIPneCryYFwSEYuYx4o\nujbQnJXEMCEtzF61JafnLH18zhxz5hKrLpOC3vNuIuAJ0iw+ccriI4QHa1E/N5itlTmILM6rvw/Z\ngC/RSG0utn3MuKlx2bR0P6eUJc+a86U+NIxMQ8/FIMM22xlTt7X3dDer8NS04LoinWxkDRlT4Jue\n1Uwm+2CMgjHo0zrXPKmN2MByCA+QBi0WLnMxC3FL2iVx+le76M74RiDu+rqGdqc0gi2b7hqTnjG6\nfqiVzBgqHT7tNzzNZdocYbR9TF3k4IWPvDghy1U9VgtqtUn8V0lVQ1ARAypiuZ6bE1thD6WIdrqE\n2tEwE+MzJ20AROW6JPXgojBCygjvM6DSMhCYOUuo1xNhHFBpsvsAb7hVPMRjtZJJOMeDc1WNpw+V\nh9cLJQ+K5ZkDpUl2DC2SUezuRtn7YClyzK2ps3sWrJpFioPkXC1livsLucofn6tuypwTfYNU1Wcl\nNGxQjMls7aeEN+26+wjO4WQPnnjwkNe/7nWQOp/4xmd5+3d+LZ/7xX8SD6ESDUnvFlQZLF64isYY\ncJs6dEUk2QVUkxJlOMuq9kFR62uaTBoxjOawn51aErXIzHLlRjElxO77zm1PfMXXfQenEixJD/r1\nWmnR+fa//S6+6DOfYKmF7fEtL+3BU09e88TDa77m938u3/y2jxCEcIYU9moslhmmtF2bzAs8aN3x\nDAcE084JDpHZFvUgI+CYslo4w6hFcjwlEKiKau2CJZU6wkdn3zPnrWuocxk+I1Jgnwuw2aKee7gi\ngVzQn31ktpc+QsTgZ3/m5ziulW7Gsiy0ZecUknvlZFgt+L5PfbCqyosJKmchLZdVsqhDcWpK1LoK\n1JMkI1Rb6gIt0r2SQplt1Qe1yERkOdGiU0JOtAQMGzNpWRVJHk4ug1wqS5bqI034S81TEsbshyYF\nZq5a9uiXAddcjAz1Vc1h6+rH5os5wUx98YESv31XBUyiB3jvJKvqXTPoe9D7ThumgIJNz24PbeTh\nO+GXZJqiiCJ0j6TkEwWqVIo+djqJnJwid71ASNH5aDFCugAYPs7rtSVjKSbXUzeYuyNSgrRxuQ1R\nRs2w4ZQkt4jbxaEET98/cKnvzpvzwksnXnhpozfdKm/7a9/IP/qJH+T97383/81XfyXv+OvfyFU1\njiVzb63cP2Turca9JXhQE2sO7tfM4V7wYB2URbEvNj2HiuQ2nrk2nqiZJ66MYw6usrKZfDSKJSkB\nSNxMQ0QAtxjD0uz3Bt208PdqmoSaIua97+QEawruHTLXh8RhgauDYCHHkme4XZDWRBQF4Z23we0+\nOHXjpe3Mzd547JLGrFUBnWVxrkvmak2Ukrl/rByKzXw2lT01nPXQqTmLmTqnwMshz0my8JceIkLd\nDrlwRof/5Wu+gOee+zCvPLrBsvMT/9ffoPsjtr1ze9o5nRujDVUAI8B32oBtb+JuRGdJcuscanBd\n4eoQXNfMcQkeXBUeHBPHDPcWEawkNZTEqPculcoe3PbgfOvcDGN4lUsxFJIZyOVzIPHKyfjs3/q7\neXTTePqZ11OqTla1FJ56eCTVM44zkrEP5zzgFErJ3Zqxb8Ht7tz0oO0afuwuCWIqCZbCdSosuVAv\nj8WFLMYcyGRjqAtNt8ShZFK6yAmN3hvd5OH3ZKScdR26FuAWjaDdOf9wm7lrwk8++QnPzqcu2Pcz\nDx7c47Akrq8rP/J33kFOzj4Ca0OpBkyiWu+KDceI7kSWnDJHvXtmNRF3YWmjzqoozdaL+p0pd8mq\nLoSvIj2ZDCfq+1pRCvWCcs1qglITpdT532kucyjGWqRUWPI0mExOwYU05hZY1wacTBv12UOcjPOg\nDVWw23B6oPu3JfYmF+E+Mt0Te5jaDZ5F2usb5z1oo7P3wJoGj+6drcPmnduOuC/zQGm1UXK54yh4\nyDCDSUmBGdUdR7366IPdJRsbTfbyMQZbG9yMj+8Dfm3krk9Q8OXGA0k2fNByJpLKpzySAByXCad0\n98rkss6nfs4f4B/93W+5+7EfvTv8qT/x9f/Ur/xNn/SVLPEiVt+AZ7DWCSsQicXUP9odzKWxDJSL\ntJZMobCPyXRIjh+kIthHcBqdNjZ6FE5NE2ED1lA0zCA45kxGY9XwwLIiTI8YW50PSHSul8TTxzmU\nO66UefOFNYUBjkSknfDE2MSkxQQ7znmZuW4T8zcG5xZQ5Zs3NOQrObGuldUmXCWUltDOwe4SzZcZ\nrTPNOAIFkRmjs/fEeag09k2ZaXsJnnjmU/mFD/woz77hiut2xTMPrvkLX/0F/J5v+D+xUUg50VMn\nh83YmDydfYKL1ICw4FBF0rqfFZS4pMyyVGwI/pNT4VEPliYb8ckuyEQNKR5FZrsJDkUqgohBc2Nh\nZaydNpSGSzjjnPmyP/IN/Mjbv5P3vPdDvOnZp3jl8Zn7YTzxxBP4449wm58hEaxrIu0+S0Q4pyFn\nlwstaqvkhCNDI2SzTQ5Vw55IiU11Mmk3eoXDIioWxejNWRz2ZOCDfdcUfnOIrpNeLjIOhUHJmidU\nVKqCesuKfx+YKV9vmY/jtotnvNycuX/vPqfteX7+J/8unz7IcJIAACAASURBVPd5n0+KQZsyQR9D\ns5UisH9KaSpGIMxZ8mDkwmpanKnSnbr5tDVdcggTmNOprCZ4j7k2mYSx1IkTSHJmXqpekshfpTo5\nmXi6RfcieebTTbgNLt2ujE5T7ZG0uOcJsWmXAZxDs6RhVQtF+VxMLEMW3e3cue1K6rBRZk99F8+5\nz4zE2YKsOZO6sy+Z6k7EpS0iomG3lVKGEsa56HTR8LM4xSWDa3dkPEU0RYdhlUD3bgzJ/szar23R\n9SyYhu/cSU8itKOV+UWtJJqBQikv+WlcFM1kN779L/8P/OY3/wX92cd4GYn/9du/h0/6tz4fRmaE\noB7dMtX0ZZxJl0YFlgUZv2dBy5ktg+86XXY6KS/gjdadx32jeWHf5QxqXe/fsi5+jUmJ8kE+IMrT\ntI/GQRlL9y2DD3JdeLDA09ewlMz1wVlmptvwSvdGWxcWKvsWRBa1f6lychXvbBhtv+K0q/xhOlrM\nVIaWotLzmAK8UI+dOBtnF7OghRO7c+s7ORf8PGbva7ANuPVBbBoItCa5WBrGcpV54k2fRnv5H3B9\nvMJMIZXvf+8/5Gr8MnH4l2S5zit9dHKG3ga1ymqdqbh1FiuUnDjMPvV6kFU2hjLSlpFJJbP0zpaC\nw0gU62x7Zg+B7iMLfJ+SUSIT3oikYdbumcVNpoyRWNLO3g9829vfy+/+954hwnnLm9/Mc8+9H4/B\nN/6xL+YP/vc/xGaDtKNzXxp43iiWyS7r75Up5t1SUKJg7ng3WpZRhpFoBGuoP60DbkwiWaI63JDo\nZbDdbHTPnG4HtyMxfEgumYySFA009pioRy3arTk9pmMO9b29FlLvc3gE+77z8IkryiJH3HYabOed\nbbqvmJKphHbalNPdcKukKss7skEfoksEa6hHHcw03VcXv2o+y/g5xB7xaq1vQcepORMm27abAi8r\nlVyCQxUKoCxwMFXHORmpBsmlxb6c3JTOok0qYnK40QQqT4BTSTIBzcwIIrSpjO7sYYzm3JrRd508\nIxp09XVt6FnrOWOjU1OmT9zmsju3BmVaxrJpJrPUNoFXclaGi6q21JnCEX0mclSsaBB8ec/OwMeQ\nQspdVvD68ZfV1zRHfOAlhcWp16LAvJoq3eapag4KArmWzq6dM8J5/iMv8L3/+3fztu/+y3zwn7xz\n6vp+5d9nZnzX9/1tXv/mz5YVNOs0JLeIrIY9tOAr5VPidusKqaSbSpOhJFc32LfGORKnc3DaB7cu\nSYeF/PjdlTY8kNX5MCM5iOCQDKyQJoj6UJ3MgWNW1tixGnUx7hXjsBbuHxJrVdTOee/sI3Nz6nSM\nNaAcKktWa6I57K3TJ+2oWOK8Newy2HBFd0cyjmthKQo7PHfj9iw4vLuzufpHUifoVBHD2YZiSbp1\nSsiV1q3Rd5WJazzma7/sk3jTG57k5nzmqSfvs7fg+Q+f+IbvfDeXKO5LH7SpvsYmr7QsWsAsw3Vd\nKNUl7UlBC/X4u1WcTt/VjmpNlcS+w6NbJRx40XDwYINS4MhUapCo1jkeKstsSyxrIuNYKrBufPln\nvw6Apx4eePDwig+8/0W+5js+AC6raMmaO+QyJ84o36sucF0LT99bIEN1ZzcN2Y4kWnEqig7XqUWc\njoEked0hunEag33v3Jw6j3eZLJwZ4LgavQkQ1XG9J0uQdErefQfKXfx5zuLL1kPiKz5PaSJPP/ME\n964WWu+89PIrlONb+Obv/AmWWlQdTZOL+2CpK+ftTJox6+7MZG4NhuqMfo8I2efDZ5BiUpugqgor\n1cCdA0Ze9O9lyZJmAmsWTOd0VpsrR+V4NVUza2JJivox08YrRtPF9qvnfLa2GbMfPAz6xh1Uqg/j\n3Iybrav83weYstF6g70PTsNpW3CODd8S5AXvJ9n8o2MmcHt03UstLtpZw5JOzqsrat2MmTZsgDbP\nCPFdjrmQqvaey/e3pkKKjtfMtqul4C4IUMwqPGXjSz77wcc0R7x2RlpcPBc+w+1Qn+PyF4aimbcY\nbAEvtuDzf8Pyzy2tWYoi6el+hdfxeOAT3vLZtECgldDOWkqhk6HJhuoTyJIspgZTcO1wcU97D9qU\nbPQxOPUuwfrm7B3SWubxtVOXC0BkYc3OgeA85CspKZFyo5qRU2bJshbWmjmmzGFVs31dMvdKoayS\nkRxCXIpg4+qg91OSsWSnLIqcTkBZC5GydugIyprIreMjs+UOaaHaIMeOo++jmHPMSLERlbF3GoOB\nUf2SXiyZEyNzSK7BnwX36kIvnTUVIj9BcuP2dKLmwrY7x+OB8/ZhAGrWqS1H4pamUxIQVqg5saYq\ntOQsDWOMabkdVKu0uKT9CoMXPlhKlmYzB+O6k/bCNgYj5OLrHbwkltQxS0p36IIalRLUJLHQRsC+\n8ta3v8B/+h+8gTf+ujfx6/+VN/OLv/R2Snc2L/QwzqNxtQQ2Fmqag8+UuJcWif4jWFKl284hFMU0\nYlB6wurUd7p4r20yRLsDPXG2JhH9jA2wcdbiirGPzrhJlBzsiICGujLS2pqkV+7QY0gtY9Kbxnmf\nj2Rn2870diLnzOm2w+0vMCKINliXs/gNKeve9l2OqRH0nLC0Kxk3a1Ccqcgn2PCu3xl7oqcBNqTW\nWZTKWyzTk+ObWiR7V0+3LqHPMQA3MZOry7G2JJYV1gsNcErE1FGbC24wXZmX/DS1Bm0EVO42i2xa\nuK88cwJ6LextEKMzprwOT+xxhjYHgeOsisA6q09p17goU5oC2kyTqIMlsmdaCg42B4rupEPCPXMv\n2XRaDkVKpaK1K8aMaR8a8E15nKBIgS1A6zj5DpDzsV6vueiOOTk0THBlUwlcsxJq3aZkqwHufO/3\n/diveJb1kMPEZnPgn33d3p64d3yFF28fELHclUA7Tu87/z9p7x5r63aW9/3ecfm+Oefal+Nzjg3h\naiBgl6AAhkCtEEzSplJShQINVUSCEhWRIhSRNg0hVEpDUkHbiAZRcFtKaIogIkAdcQtOQlJwAJuU\nSyABczGYmpgY8PXss/da8/vGGO/bP54x1z6usY8DS7KOta9rzzm/Md7L8/yeJTR3co/byqVYYURm\nyZlusChoG6/O1nRJWBk8G049GqUbeKPYCjVxqpqR3imTMzrRjHie6ccmuLc9dpstRYs8arDmZXJK\npYtNSL+aauIqDhyS01b9/FJEoTKTC2t3WXVbDHaceqOsNrPBvZrptrOUqgRZxAge2anZKRs8aJ2a\nA7PKNsZkuqK5UjJtmFPibk3UyVHVkJ0pXwre9cyZe3cWliVzvm4sS+a0nglWefY9OPqiQL8YWAjw\n0tLOHerE70Gw0HvHrDC8KRUiiuaLQ/QsN6W+LjVgL7TcqV1pBYplGVLKTKG+tyJTRwS5ZvZtwIpy\nvwjGKPzP3/3r/C9/48/wL173U9y5OpL3GygrNvkH3R3KgAZrqN33aeAZaYHsFAopEqUHRpCyU2ud\nCyLNGj2cbcvs0ShDXVYQs/O6YQ24CaOPLnB96niSlrumwuhdgi5Lwhva41GAlB5GNMdzhTl+285t\nIgMb0mM7X/gf3n/8wJhxuvN7+ebv/1fsc6FmybDsLD2TirEDZNH1iB1LmZIVUUM4YTtuR5HiPOZY\nYo4+JoBm+nTUWU3shYn2SM0yI9SizvCygDO7Nabp8J3/vThc7CLdQ6M9XG45mJMQgdKkSU/OsmQG\nmtMnM5xOnoddmnB3XcqOl8wBdSbkIN0YzSsgy/NSFaZb3GaO3UQZ7GAzUr2kQcnLHMmYEjRSxrKx\nhLr+bQwt4ZKkZ/RQWIOJl/y+vp5XvSBt7mOdnCUdoGm+SBdAxMUz/bmf9Wm3L+7jz4fxWZ/9J/mB\nH/1VDi982bv9/FqNO3cKKcHLXvIheN6IKuVDH0Fuio3ZLBiz8i1hHFOmLol6dJalkRdEwqJTTA9M\nzZUUitoeKahhlFTJNI41c5WdF54S94+Z0xFOS+FUMicE+qhlYS1wWjP3aqYcigIOS+aqrNxdE1dX\nmaurzOFolKrl0tUhWE5wOGWeOAZXRzgtcHVInErmWBJLGqwmkX7OiXw06h3j6rRy51C5fzpwWLKq\n5OSU4iwFlrqyHjPHY2Wd3vBCJkVQV1hSVYVeg9OSOK5GrZm1LBwPmTt3V67uFD7qkz6PQJXMsw9v\neOeDG7Zt8EX/8UfyHa/8Mn7mtf+IL//CP84v/z//F3ePibVklrWwHuBeMQ6LnIIjBhHzfckZQ1lq\nbjtlLnx6E7mMGKQSrEfjToXD0TmUxO7in4Z3bjo88uAcg/PIPHDn+uw8e3aeedg47xvn88azbbA9\nSnz+X/kWPumPfQWPbq5442+8i82VgrFmpR8XpCLQKaC22UxyNLvwOXIog6xkcl6UZhuSzcUQqCVl\ngckfbE1zdQbF5Jg0M2pJeC/y/MO0VocO6JBAv/cuPfWcb4b2zYyhEVMh+O//jx/RCKo9bl3//yNA\ns8SXfdU/4hu//+fwoTTdWgaWZx5hBKM64FiHfVab3oy2NfpoNBswFnwoUidN+HvJgClsFfw2W3Ab\nScS8EaSYyFaDXGMiJ9X5FHvOOPg9ToLnnir68gnACTN1Ny6db8lKokg55p85z6Gkfy/JsFTJubKU\nJMVG0mhweMeS9LIbBVsHp2osNZMXYTJrdQ45k1am8knLQ9HbCs3krlPklpLBY0if7Nmo60KdMUjG\nmHJA/f3leZIpn3em++a37vjMCXus6ZOj2pszkpZp7TzY9syjPvj0j1UoNMAHfuAH8x2vfh0jP01v\n8E9/4g38rf/iE3RLZeP+1cLde0csr/zar/0WP/5TP8PD/DG3KDsbYDZwyxgB8yYtKU/AiGJVeg8e\nPWowoYqbZWI4bVeVdd4Gz7ZO7FOetSjDq2AsayGZeK9j3uyBbk8zoyxwLHAqYLlSK6zZdKAVSJOe\n7+ghjaH8q2zjVrWQzSk50wckG3SKWLe7i9DUh9qrnFnM2NxZTDEsAM4QrDoy29g4NyO3wsPe2c+D\nmwZn72DBaoml2oyELpq/YSyHwlU2RnL2CP7cK+5zgRm95yOhnvBb/sFrOD79cQzXbNiS5qU2wS05\nzS14OG0Gu/XRaGlRIm2CZRg3XS/sZWbr3hhdsUsP9s6+aym6ZlGxwo3wRKYxKKwqh8nmLJE425gh\ng7r4uwfdGikWrg6ZeyUTSb9mqXq/1wL3rlYOK1wdJOeCnTCJmKqIzOQ838skI88YYjpcd6cPLYqN\nKknd3rnZnevN2fvj2VmymBZ2qXnCJDdbIuE2V8EXeZIPUnJKrbz6VV/Pd33DX9Nn/r0UTE98wMfy\ndd/+41ialSaaJbvtUqlkY5hg5D4MS4PkwiXKOl+oRd9LLZWySBedixgFOfl0DybWQ5bhpjy219pc\nZq8Z1gPcXY3TQZ+F+r4763f76igpfGuS8XnM6hxVu1uDmzZw13Nz3ju9O1tLbK3hMR2xMRjJYReo\navi45TlEiLO8LgupCGwVe59/v1JYendiDMwUFJBzFr4ma9czhRq3CMsLX9wsK2evDTwqre8YKr4+\n++V3f+czXStG6ul2AC7dn35umKSMHpLG5BocMF73hjN/9GUv4T/5E3+YL/6rf5uHvmijnJ3P+NSX\n8rfmjRAet8uFu8fEh37QC/iPPuPlfOdr3qoPkTtuiWSVbINelE2UcpZsBqMPVQIeQa4F71PoPGac\nXNGgvBZj6ZqDiT8wICaiTnGijFzE3xySMGUXPamuiWNNGqznIOVCKdIqp6J58mXp5LOyseS6QaNL\nl1kUOHUq825sMm+Ukige1FwBZwwmSeny50wQ+mQTRAQ5LRwSjDqJR0viYIPsep0uEUvVMm30SZfS\nmOQccCRIaSOVFe/bb/OuSx3ywz/7Np7djvi0X6ZI80DMyozqjmXpgTEoq9QjharstFyBHU+JvGS8\nBTnU4i9UfA3qovjud5qzdeW8pci0GqTRuTFxPFo0jafMwLpCB02WWjMdMuZCM7YeRIZaM3lVO3ha\nKsfVuLMaa8mkmdVmuUCIPzBGwtLji1qkOgPT36XqVVE7I93grdB2Yf1S2ck+B5nd5X9l6nVFZp+R\nM3GblvFD3/vtvPrbvpIH7/g37/kOvJda6ENe+in8d6/8p4yhizwludvavhNLYeRBcW5leREZ3yRx\nYjJyralt135U8JYEeBf1K1IjJrzGh3gWpU6VVbKpttJct+TnVLP/Dgfuu50xZqIBTidXDia3eWq7\nhzS77sI4khTj082wPfBRYCiZfCTI8/C0nMgpUWxIHDwRr24FUiM2n8hNwMQXxv2WZZEmUd278gb7\nELXOXaOVHg0vF6/jLp1vDZlQ3sfX+8FeEJdK1ZA2gDoA4jYS4xJVTErU0knD+Sc/9otCLobak45e\nVKPzkn//z/ILr/s/uXtn4WZreARPvvApSl5hvIulboy4kgoiqd0ACM8Yzh6a7Vqf1CxzsmXKMtg9\nOHdZIcE4TUvMzUgsqbBtZ1oqjJbwMqjJWMcF+TfIJeHtsfUwT4JZzkYzFwUtdPuSpJQoxSjmtzHT\nPlMAismlk/TSKP2h+63Y2iOxzJmU29C8cuwCuvdGnzZU0Oc5zQqcHoqLCmlcIwyPKskPhUOVkiTy\noKaFsMbojR/+h6/m1d/+P/C2X/+536a6ffev177+bVyfjxzKAodJZvMgSGyhWX8uRt9nMkcwE1Wn\n8N/k+sFFbVvInIt0r5ELvQmUNLxjOThOx+HZUEU2GudpV7oZSgFIqVBTMLJel+ImM8KEjKQEtsj2\n6S4IintwqJkUUMqgEZQ5MhCDC3KJqdk2RveJr1QqgYVe9EYwImhtE2IzJN8j5jx9F7zew24jW5Qb\nqESOmsttuhQxCL/h21/5Rc/3+N1+zTqFd77ltzg3J8fAPFHTIBepV9II2p7ECxgBObDstKZFYPNO\nNVW5Y2RGdtKQGmlPgzqUGVZTYU2XFGQ96wmpc9wdK8oiyxUkX7Pbvc/7+zUFMVxYDro4wZvLXx4z\nQZnB5ehpQ0YfGQu1W7KsjEW6/Jx1ZFLqrEVT5WGGtwo3jbBKxIZH1efDhDOw7txcvitPLOh1khoE\nCHWjPnaxPJAyyGexMTyBQ0y8a7X3PV54/krXM1Yavs/2kiTbbZJG7fLlIY2oz411ycEgs++TZzmX\naCTja175Sv74y/4uzz678eRTd3jw4Jp3vf2dLIcrHtw0TkvnQU9YH2D6B9Yh9sHNlEVNdfVcy1U0\n8c+k7BxDVYsz5UCeSK4qMuUiiZUKJjmYlsyhOks+kKoyti6hlxKSwHnrpFpoDmuRrMaTkzyT5utS\nMEYdLKNACcwlgSpzVpW6zy220InnLRjRaNM7LgfZZNimRAkDC5bJNOg+9MEuThnGjsLylpLwIhOC\nF2O0QSqFNStxdiyFz/9Dd5nX57u/v8/5kZyMFz595F3PbPzED38vL/u0Py24dyxgCg3tZNaGorHJ\nWHIyAsdEMy7iZkOozMhSCbQxWK3SKkQbjCx1g6UEfccLZC+KG2+DM7qUzENBoZi4ANPlV4rANDlJ\nEhSmqszbIFHZyjTSmDbjWzh11+XnWUwOknjN5gF9jhRU2AKDVAsWwb51YfvOG73brdxp61qw9gv2\n0zXjxgQCuthKM4k2xDJUUKbz6296/Xs+a/O9+G/+px/g73zNX+C33qyUjJRgyZV1NZ555k2crztL\n1bvZwii7UXPRBdQHpVQhJ2M+cwVurjcRufrA1pWEs6+XscfOwTKedYEW10LWp75WhK/JpC1iKSxJ\n27Kcte3XGvLf7SvQpdiGuBdjqFPQXaaOcxuJ5oLRDC7IxtkpNz1P9CByI/eEZQFtJDUtShrP0tTC\nztg1zgkXhaz7IMxm4SgeuOUFy4mEcAGjQxs7qayspoNWCFGHnhl9n2qXjNWLPfq9f70fEeyBDQmu\nJXeShIxkWNc8j7nhjz7ZF02zsT4GxUUV2hBEuubMnaXwL9/U+YQPL7z97Q8xpF5wS5SceNebf4V4\n8mXsAzCneuLh5DJcaFIRPuNFdOsmd9acyNXoZcBZs6cSg7Npwn+3LmwiGVP2zr6qXS+WVMWVDW9F\nl8TQgT8CGMppUzUvhmwPfV/M+Z+5wNypZxGK/OLISbRdrd2eXQ9mCx6cYdudzfXgjyZFQS0qlysS\nsYcz56Aa1KesAzemtGZrEvRZSMso0wik2DFcMrZ8qUAuj4Vmtn/zq7+Bj/v0z+ZzPuVpYBKhxuCp\np57gL33xf87P/PLn8s6tAh1PGbOFbA1GKI+qDa7n7LJ5wAA3x4as4GFGDOWV5Vm1d3O6d7XpZFUz\nObE06LaTSsLIFJtBkVsiTMaP2EWlqjXT9k5LhnnT6z8Mj8KVhw4UjJvNOCxZRple2A1qKTyKQU6F\nFVmBm0mGmGeE0zoHeKkbO0PSr2QstUJ0PIKbHaVIj6GEjxGQB3vTzk5SMG3KFnM8SXHTut6rD/jg\nj3+356yuT/LVr3oj2z7INnjwrmdufy4lm8vTlVwy/9XnPM3XfvdbYZd9uM1lVy2JXMQCzrmQexDs\n5KgckjOq36oESBqxZDrZqpKeJ5GuD6ckJFNAz3hNiToP4aTfLooY0gSn+ePvz1fAbbl2SdnFxTr2\nJiRrdzg7tF224NZCY6fQs2djYmVLwbPr+a0zdw0pn9wHNvKslFUixoBgcI6ghsh54ZKUMaQ+sALW\nz2yp0gxdpLGw9ODGFNxardMikVzqEvcgUie2/Lz1/vvBXrjMcwNQRnyu6VY8Hz7lRN2Ay3wzsQ9R\nIfZwdhzLzlUqPHHMrIeAgJf9kb9w+yZs5537d09sN2d+4fU/ow0m+ntvIjRHjESQZ8R4QqniyiML\nU1TP1nba1ummpshzYrHOkpVZlnpneGcvYNk5lkRKmYjCeS88uum88+HgmbNxvRs3Hpyj0EenjUaL\nxr7PSmBK2MLl0sFUVRxyotYs4pPPNzsbDHUJN/uQX96DgnKaSpltOZ2rnDiYccqmhWFIAte703pW\nWqvN6GsTszQ7WDYOCQ5ZNLWlrtSDccj53aqQv/99r+MfvPbtfMIrPo817sKFeh9yLSVzPuxDXsgf\neOlTlGiTyq+qLVxpzyWFHtwEve+kpr9fYvMppZlqE8mvKvWQqFn4QLOVjBaieRg2bcNpzLRhs/nQ\nN3Ch/8JklHnsd1dUUd+NsILZYItQnFHvbK59gSXhNTEhAZm5fFsotqZ1jRf2kOJAn2tdejmUpRWh\nixMrnDEenm949nrnweY8czN4tomnAdK0b62zuQ6Ic/cJoh+ce+dhc65b5mu/7y28+CWv4G9/91v5\na9/yi1w/0oK0deOr/t5P375ftazcvTqxLEfu3j3wohfe4yu+4BW0MdhdC9bhnf0i6QybKSPQXdnN\n9Vh5Yi286P7C3ZNSvFeDlDMXh2eaF7tcYGjRGFJLyPar91cBAtpJ1EWc3pLeLykUMCv62x3RlAzO\nQ1tqhpBTrc19UYClTtaJeWu4qBOU4DHoMejd6M3AsyzrFlOiaoxe8a4ucxtBWOI8ViK5aHSW58gj\n2DfnbJkermJoaFfT0AzcL91XN/ahA7dNO78WD++75n/e1+l29mcAg3C1WmNXFIsHjJhWO29Ez/Sm\nRNS1Gqe1csoLd9fK8SjIdhbUi2/6pq/lQ1/6HwCZUqW33cfgtf/8n1GzyP2nUqhVkSHLrJLvr5VD\nKRxz5rAU1mrUklmqIjZyrXMYv+N7gC9aZoTMEMnkxFlGYXOnR9Bm5Mp5d7oFbe/czBRjI7j2zKN9\n0PYAcyw/FsQI9aeZVrHZxDtTTgRrsWl/VEUWLgviWoycilJsS+JQ4WrRqGQ5ZJY1ceeg9A0LBMne\ndx3arUmobtNGWYLFlJiRl0StiZQ6xQp1MX70Z6/5qV8589qffcgHf8Qn8vTdI3dLoqydb3zVz2hG\nPwTkSWkhcJ560T1e/+P/BEVkx/xQTW/6SFjo31pKxY5F55rrQQ1rpAqpCENYsyRv946FJ+4t3L2C\nw0n2UXJW6OF8mMh6WMwHKR2EfjSNDTw712OfWVWTCZEKfSIWW58SqIDWO9f7YN8EhbnpcN2ZcJK5\nCJwC+fn445F41HYdxLu0z3tD46A9sZ0H/ayZbkppmnHmmGHIoXnuxu6Z0WHriethbN4577D1KooW\nwc115gv+5nfx4BGyH5vQnNcB77oetxXTedt417M39LETXjgcDjz7zl8icCWGXHiwbXBuOwoXcIJB\nXeDumjjWwuGwsJRKSsZiDZ+KlLUG1UTgSiZ7/YhgazqwtNCe0rk5frEI6iplQJkV7/s70e08Vm7E\nZRHv03FKsHXUSZpQmqXAUhfyYpwWo1bNmkdkRmvQs9J4u0YEPqH/EuGJNW25YQYbA1LGvMzOWcfy\n4nBKMwEnJayXydRISkUuYy60wZPGkucQnrMNyC44TgTqen43h65uGr/tTMPz9C4/znsfQzDu0YPN\nnTFnjSXLR10XOFSlbpJU7gcaOr/qH/4A2Mr1zaCkTGvOT/zk67g6GffvLhyvMvePxv2rwpNXheMJ\n7typ3L1K3L0qglnkrGBMBrkqkG85JlbLpGz03OlF8iM344CgIW1eKO6d7abTeme4kUeQlzzpafp3\nLzFYycTQvPimddHrQxvQaIoNuZ1txcVfrgRVN8Vzh2n+Vm2wmnFKzkLisFSujivrWjkdCseaOdbK\nugb372aevF+4fzdz96i0iVoSJStI8/6hcGfN1IoirEcWSS0XjotxLOLt4pV1OXFaCsdD5c6dzJOn\nysd+7MewHO7ezpXPN9eyPY7Gf/0X/6xasxCLN0bAZAxHLSwh/WQaavGSpbncmOCgUDV1sVsmg7rC\noSzUsggpmCXMz7nQIjF6yFbJlOJNJcc5DdIQoOgSwSPQiM9lovgWiwUZ5Y65Gbt39pvgfDNoN02Z\neJZFF5uHRUEVXZkk6qRxMBpeDLWtY+PhuXPeGm3EXNZKCdDakISySXQfHuwOmw9iDLY+2G2gVV5j\n0BgzT0+woqGlM8iVOFb+22/9RQzjdDqAOY8e3bC1wVOfTgAAIABJREFUTnhwOhr/21d8iZygDK6n\nOyulJFBNsqk9ZSZhDAU4Th5BLZX1apCqQlh5zuUzZqmrePUxExkM6zN1GlgWzZozkqy9P1+qp2fl\nOn+sMbuMFmw3sHUxPpQ+4pCkFFjqYMkKCzimytESKSnLzcfQXHce4mOOB8cY82zSLHgLKTbwgdMo\nyagjWNVA0Yuaq4hGG3JiSksd9P0iSAly1wXHUE50SstkehdsQvnf19fz24AnoUjCX+lyGUnBfBH0\noeWZt6njTU4hiVRksM5lRC6JsBki5z6XLBlz57W//Cyf/pKVe089iccbecMb38xVcboNlqT2+fb0\nA4U+huDHGuQ76xLkUdlap2UjzoXROjfuBI51F+w4O8Mk7N6iYTNeZgLitWQLiLmQGMOxJBlLLnKX\nQcNswa2zN2PNgaeJyUPR7XufeVoxZ6wkGE5ZBQLJ60qabW2a3u+UtaiImFEyKRO54j24OmiO2U+Z\nfejf7kPLo8uHbSdwL1hxLFcWVEmua6WYQ1L1ZDmpdbRCeKd44Ud+/q18ykesnPfOU0+dyClzOl5x\n/37hlB/xoN/Fw5RvlRqWjeTBntPtgC4lVb6pCoozw6GJic5MBEw3U7ZB9aAlg5QYntld44KIgqV2\nG3hJPLajNxPYfIymdnRkEtJFJ6+ao1qHIu7BktAyKGnBt40BzVh3J61aEkntpz3BFkGecTptvm82\nVCFF6KCu5nR2uQovq7JIeJGED5Ry0sdgR8GpkW3ye0Ov++hafHER32vRus/Pd7bg7Pf50Jd+Br/2\nCz/InTsnai3EaFLRrAu/+cbvBb6OMkIyRNdnZzu72v4EkTJrSpQi/WpKGk/pfZEUcbNBvnQIaNRl\nLg60pyzam0v2NkyR9DHF7G5xy6e15yzTLkvB5/7XQCRCjbqlt2cmOMxSedsH+6Yxg37T3FOYzpwg\n6Ax2snTaoaq+T/VE8syWNq21XZ9RENN4RJB6IaqzhtGs417F6J7nlZlUWZaMNoQ2rTUT4XQv1KSY\nIUsDyqCdg7QMIlfJyBja6b+vM/X5Dt3hl22sYL2jz+SESepqDkOfFOpirLlSqmQbkoPYdIvB2ETH\nai6/d/Lp7vDgx37xEU+/6MO5DKX3B2+Sg6Soxahm8nlno5TEktTaHOt0ki2LAMMZ6Ip1CfpcgCzC\nUZKorjmdW1BZ2C7czVCb2KalNqesCmkb0KTlW5bE8QB3DysLSj1OkWgxD9vutNbZmpix0gQKjk4S\nIaqiMcCSg7wEyyGxHIJ16ZTi5KwonmJGqmrJD2uiJuPqVLl3VXjiKnH3aNw5wdXRWBfjcEicauLe\nkrhzrJxqpS6F5SDiVZrs01zlyFlycMh67Y4V1lT46V/daN20iEgalSR3vvwv/hmiB9EbxqTOuaHw\nRnEGrBZyrtSlkjy0ZGTB5ykbVBoTR9gSwxN9zlzDpSbJKZNTAteyKq1Brk5ZnFQzC1kGBneCSkaH\nps/WMWy2F6bUhFOq3MmFA1W8AUO6VaYkNLIi1UfMuBYn5vx7ZLX61VVxjan3Gj4YbYZXhuA4KYyW\nhArd3JWAIN0ZhwkfUiEirbW7UiAcpAt1n/IlXZLuzuiDiMSf+vK/xye8/E/w8OE1L3zh01iecJZw\nllr45Z/6Sdyl2W3dud7O3LTGzTY4n1XtMbTjyBPmXqrjWVLN7JCH4omIQb2oTubpkLMqYfGAtTtw\nBBlnPGap+DxwVRo9bq8f/9jjH+2hgkHZb1IpMGBrTvhga51nt8511zPlMW67CrssbH1X0bGn25gd\n/HFIZuvaQ+xmdItJLJwM7R2aqWMTHztpVDDNJH0Mts2JcSGRSYFyTJIlRgEbBl2QHx/GmoLUtUR+\nvq/nHy94MIb4kB6X5dEs0+dsL834G8hTTN5IVJJpez7aUKCbi7hvZuIQ5OCwTFcXmT/8Wf8lWPDp\nn/5pfN/3fJeSIFDmUs66IUvSyIKq37ssxtUBDqfgiTuJ+1dVh9RqRD1QPeObdJspGy2lOZPU/5Jr\n025mFMvUpVKSTc2piPRthgluvdN7cB6DM4Pdgn1CPPrQomvrRYYNAqPMwXyidzF/99BS7ViMJ06Z\np+4m7lxlTsfCackcq4A/VyfjWBInMw5Vzp9aZxrGvOAOS2ZdjLUmakIyojLxkAxycdZplz5UXRqH\nxVizVCJW9L17vrR9ia//1n/Gv3nz2/mtt72DXOCpewfe+Cs/C3HDHlmJqUnMWPeOddccdcg1FzHm\nSiaj+EGnUzBzwXGs4t257oOHW+f63Hh07mz74Lo7xFnYxVKoo1CqXEOFuZnHyNmoNUSEs6Bg4DHZ\nFqpWCnBYYVmCZWFm+ol/kXPGhzTT5kG1wsHk6koR09FkRMB5yhOTVWmTk+R757OxdxNXwYccdGiB\nmB1V0A5R5WgkqSvZQ26pEXLoW05ETvNQMoY33J2bCM5t0Hrij37xK8ll4ed//o28/Z0PGb1zOpw4\nHCrf/jX/KaXMdGIbmBceNefZ68bWBzfboOOkOWe06uTQ4tSSZHlRNN4Zpjj5bKKzlQq3etm56Loc\nos11kHkWZMmRBGtH8V0+R4iXw/bdFAsxzxVT2olMD1pYGtKulxziUky9dXTF7DSDM4NtC/YhCZxG\nB0lql2b0Lc/iUPl9SplRSnZruxyMO2wjSC1x04P9HOznwbkJXdSj0TzYXeMUy4XoXTFQ5uQi5UJG\nsrst5m7FZVX+XR26lzmPIW+0ud2KoMOgXP6IkPhbtkzdjqkYYR0z2erKnN1JiRCkYhxsttUZPulT\nX87LX/Gn+bCP/mQ+5CNfTmablnmZAVJSC1QXLafWqtnS4QB3j8bVqv/dO2VOVZloZR3kRRXkEkEa\ngz3NrWbtk0WaUOjioPVOG6o2+pSq7O4T/KlWJiWlBNtwhrfbCiq8sA9JxPYmp1Y0AW68aRu/EKxZ\ny4BDVTbWvRXun+CJO8H9Y+KJU2ZNGlvURZfMmoI1wWk1TqfEC9bE3cU4rYXTGiyrsZbC6WAsybha\nC4eUWdfEsWbuHQv3Dpl7S+J0Mso6o9OHq1JCGV+f/El/gC/7ym/hwTvPbNc7D6431jR427/9l1Mw\nr82/ueEuCU9CZpSElkulBjaTQ4ggR5sxQh0uEqvoWr7Oh7OFzY/jQXyMpAOzhEMKwVnizDCNGowE\nfjHPaNY3hpxKpzVz/07m/p2VO1cHIjnVKnFRtLROMIhs5LyQV6i1sCwKZ7ykolhIHywGQiNsoZu+\n35463Q1s5RIpkw3GPugWpJHJ6ZJmAqlPruyY37NVRusqaBq4F3bX4kYqQLXOu0P3A3/l7/y/YCs1\nV170ohdxPB44rJVlVbsdaE5903eZkrxwcxbfuA+7tXuP1jl7U3fakkhhqXDImUPO5DyTR3LW5Wp6\n/oYHIwXX0zwSaNTUt5l/1i7jrlmsmWJ3ZhF7SyXs8/dGGLEjnGMPbvwCD9cCfSlZuW6WKCYlQrFM\n8oFFpeRE+FCSNUFv0LdE742xb4SpwIueSBRGQu/t5CI0H8TeOYezDZ8FUrr1IojlKzynZcAGy1pZ\nChyzjDa1TLlj6iyh86mn92RlvMeZ+nzshV99S2dDVUX0oLXJsiXwPq1zkdX2zGvQh894Z1WqfVpb\nw4v0tUmAEMtDIBS0+TU6Zam0fSf5TqonljpjoE2LuLrMwb0K0du8pb1rGH/d4PoGHpyd6/OgtdD8\nt3e2oaH4GEGYll9hwd4FbWkDGLvcXXngLavFz5n1kLh7yixTHO0eHMuBvCqaRCasfJsIcJHUWRpU\nyxwOSfElGeqqYMSSNfzPF8TkbC1hutTmJQaAFGiKY5/e79GVoLHtqtobdlvRdHMKQV4qaw0WZpUW\n0rqOnth2/X27S99oAe94xzsY3fmxH/3H/I2//AW85MVPUo4rb/nNZ/j7//dvsbsggQNd6B7z+4xO\nSvX2Azem+X14FuRlAmC0GAtudufBdWfvje6CSUcEZ9cScOuZjnPeO26azwOy4Jr6Xw9nScInZgbr\nEZ4oiXt3V8U7rRlyYd8G19uOo89bWeGJdeF4KlzlOitkAWn2CB0W09qtxUxia8F539jOg2fPnc2d\nvRWGJ5ptXKVCmNKQe2gH0OfFs6QDzJjvCGfz2Z6jDs6y1BGjK6R09wkh70HKQ3PlSHjuvPILXsxH\nfNgL+f2//+N529t+g9f/3C/S84v5y9/wQzoodgVr5uIcSua0Ku5pSSZr7AS3WDbWg/S3S63qPl3L\n7F4G6zRklDIZBGjMl7Mu+BoxDx095xlkkZ8tuD13DfOcI+biG5DqQ1XyvgU9GfsGj86D3jseCnDN\njpakk2f8aBv0Png04+u9Gzdbn0kfIU180iWax4TgpNCAfqZZjOFTOqjzSv9xMFHYYijBXP822cZr\n1nN+W4SaZsotA9N45TQIQao+/49cvVf2wvNWum3MILY26Pugt8yjc/Dw0eB6c8ITgUYOm/cJjens\nzbnZEzebckoThZKdUuTvTkA2Jdj69NRfQvaWpbCc7nBa0yRrGXeuEvdOcLUEx9k21gInpdCwZGa1\nZyxF6MnjWqgFKMIc5tw4JjgV52CLFmA+NEecEI9h0wARSTKsnCcT1njwMNh3HVg9wR6Nbd85D71O\nrbXb2/py+Jaki2LJoSjsbCyzegCB0KXFl9e8LqoU1zlSKFXVbk1x+1pUm4d01kz73gmeuGM8fYIX\n3E3cu0qcVqOshTxfn5TS3PYbaTxuCfeYK9pIWMrcv7vwS6//YX7vR7+M7/2x3yTWD+OXf+U3eMlH\nv4QfeNW34sDWnX3vuky7nqKUhCWUBCtT54NczDFrqnyLfq2Hwj+XmlmXmbiRVvYoRA7cFuq8rE5m\nrN6Uhhz6dxCK/Cm5kJI4GGWFOwfj7lq5OkjxUgvk1FkqvOCq8sTpyN0r4/6iCPeFifMskgGmItiQ\nLtVEH4mg6BDonehZLsDIVC8suZGKc1WNtezcWeC0LDx5p/Lk3cpTpxN368qhDpbkLDaUK7bAsRqp\nDlVOxVlKY5QAtLQeyalJD7YhDnGm8qXf9CY4fRSv+cF/TlkOfMxLPpLrB7/IsRbpVLPPZSkUMn0Y\n+yTBWUgNUhdnncXEoSYOOVisczok1kWRVdXKnJNPF1iSqkDc23l4zQXupcVWftgFeanD7DLWCdXi\nMkC4QDKZ0Gf4YKzJWbNz55g4rUVjoeSkHDI/ENy0wJt2SinZ4xzAJLnYvnWGPedzkjX6tFSIqiFH\n90HTgSNI0xh0R6nfHnhXAXJYKselsGRB3tdcKKWQVp0lJRssnTE2unf2rXM+67k47+97k/a8le7P\n/9uGtyka7oObnuhNEplSCocq5xdoM9l7p+ai2I0i1N2ShloVJMVJJQmhpieQSNJ2piSXVdGCV5v3\ngnLFim7YmR6tr6HtqTel7A7XkP68Gw9v4B3Xg+vrplZmsllTqviAhzdTVoIshpuP5+D0sqLILVMJ\ncilYDq5SZlk0M+wm/eCaE0uVInAtFXLHBkRJHFKZRDNmvPljAwNzPp2XEIs3iWp/e5POt8Uv/9Xn\nRFzWWQGPqdNNror/lnQWxtgld6okzhYchjGKZmdgbM1VYYR+n+UMMUhj43x+xHe+6rv5xE/8g1w9\n/YHcu1p41Td/HZ/9eV/Mw14ZY7AuC0xuqDErXGuklPDRSaZFGTEhQIgIRwQ3DHwU+q7lxSWEsLke\nZPddqQHVGd14dB5qYcdCMxdXNWecM0vNHJbEC5bEnTVzWCungwIyfai6D8TQYBUW8JgTI4mypSga\nHUjnaOQGN8xl1tDSq+2N4QkfmWf7Rus+E0iQkgcdIqlI45yiT+Yztzpgd6knYo6uPDRikj61s/XB\nw2u4Ced6A2JwYOGc9bmtdIxKKQljsK43/PXP/QjWtbBtg0/4g3+eP/elX8mze6OUylWduMjFqEsi\n2WDNckuVKprYUhMVacTLCjWpSmZq2lNOlOrKPQudAYdVqdoLYAzqIgnoUvRpSPPDa3ArnbpUvBeT\nlY4czWovNLDdUTKEo4XgPsAT267TuznsrjzA4U6bO6L9evCoGeet4ZdLv+TJ17X57MzX3p0Rkyo2\nz7025sVrynjzGNRUqLVwLOqMPWVOy0SozvfSEfPjegTb2cENz+pwazL+/B+7/14r3ec9dP/1r22Y\nyyXTRuOmBfSFmxicaiLP/jfQgiEluaSyOT0yKTnmrnlUclpCN5iVKSeZ1LI0qCWxLtIWHgrUgw6N\nMhdIBnSfB/eieVCK0GypmzzSSYfwtsP1Dg+uB1vTiymlmWI/zr3TdmeURN4HO51tm1HZtw2ASPpm\ncPdQWauAzc1kHS5JdtjjMiNhcpBDMqPIkt4saSLvpiQmJ810xdFVdEgOSGWODwIdvsGtlOgyYri8\nVQLkuFJmh9rTiy64PffAHlrnTZQtN12/LiI4N7jZLoQpRcxYNAhj267p6YpnH3UePbxmXY/iieIT\n6aj5LVlSJIvLIog5VlHO1mWkEFaJ7pJOhUYcW/cZhZR4uPnEdAZtJPbW2N3oWSOsdjO4iWBviohJ\nJUgmOdjpVHmqZtajNv/LmjmYU3JilE4ZCY+kz2RGVDMk9XLvMJd8SykMlzph65qbbM31+Y2g90Lz\nxvUO530jIdmezRc7hjNSxTCydXVWoaq21opl1xgsIFriZuy6OFonksAq27nzcI+54NKNqtHcHOON\noKdMSoU1n8nZ+aFv+2Y+7IOfJNUP5eP/0KdgZGX+pcGyZA5rUYVphdI7pUA6OEscWVbnkIoMNVkK\noVozbkMa3CTnmj66+qyaBcekRdmhanabLCYgiDk2kfb43eYKUwGRkt260cI1FgRoMWi7cTOEjN32\noarVO6MVLLSsGr1zM2C76ezd9CwnGVbGNMXATB+uwChEDPrEco4QcCqQlTjSilkjU8hmuOnCTKGx\nglUli18QrUTMz7FYGzfhnK/FPR7zcAf4ks986r0eus9PGesxHwiE0xuqZkvSYZlTprNrYTI1j9Uy\nTqLgmKOolOlvX+iSargoVQJRaNOfXbrMw6JDt2TFgOR5+zaPx+fhiBmX/HhCYhmqK73Vutr1Nc/W\nwcTPPG87MMCGtuEOYap01oNRh2Z7EQnPuvFrMfLSZ7Jp4TAF26cFluokW0ils2ajDdmBw6SFlEB/\nan/TBITY3IjaHIqa4V2SJ/3YnEPZ5ZB8XBH4/J+NhBgqj0XhyRR+2Ae3I5ucmHhIzZO3PdgHPNrg\n+rrhqVKKZpBrCObz9KnzGw93zsuB41Xh0cMzg05agiUf5/c+WzgPILMgYtNIWbNRTzCMFE7UfaoZ\nNEYZHjzz6B18z9/9aqK9k//sS75e8/YOfXTc5W8f7fKNB6lncm5E3+mWubdk7i+JwyFxWOUyLEkh\nqFaktCle8blga7uLB8FOtzK131rGgCnuezj7cOlTuWi3J0i+DtZUWZZO26/Y9sajNhRjHsgeH0E3\nh56IrINLRKvAPNEPmdI7kbrE/JsSJXrfWZbKsibuZTFGui/YtD33Pnh0Ds425XUE25AD8xV/6ou4\nSloU5xkead4JCqNBK51imfPWuarBCKlCyA0fCy1JQy2HX4LeSWkQsdwiW5nJJ2aXUYIOzz6h32HG\nSPrMpSnIvZDDmGYIBximFBKbSo0hhKl+LtMuF4vPZdtI4AvDZknsYjhLTTDHcq4U5bwMHfqtwZo4\n2rThpwEDrlMmu3T1ZuqYUzIGKjQsiwx4KEdy8edY0aVcEgWva7eyJ/oQzP7cFCPUPW6BVCW972P1\neQ/d7oJHdE+0MPboDFOb9nhp9Dh4zlwOnfnSaHYzmbOHkia8WwdiDB0auaAbOMHVrCbTfKOXiyd7\nvpnuUjDAJQ9N2ropBmUMu5W0qGqEpQ7aMCw6OUmFkbP0pGFBpEGyLCNI1qes90HqamOXpK225cwh\nw3LQYb4siWzgqVG4yJl0KuYk3qiWGjo/D0Xy8ZwuCwipQoaLlH+pBmQksFuBoyrcuA3j7JvPA1na\nyNtxw1wJDHeaJoHUrg9mLpLmnHuwb1o6nkcS8yAX6V1J/NK/+n6W1HjBR74cqx9EbEZNCVzSnBQb\nZuW2ZzQS2KAH9EiSUAmUgIXRPZF7BQTQ7t7Bg5/+0R/gNd/39eRU+ZNf9D8yzgcIMDKNmBZnF/Sn\nGRXHi5GskKuxLAoOrMmmiULzeJuKmoyqatwpZtOEEexd1VuEwy7kaABjr7ThbFtnhFNr4apkaaeT\nNuCenaVUMp2blqAP9pj69XDwLAtukkg/p6oQ1eY6gG+CnJPSlOuiWWUEeW70czYOdb2VKybLjO48\niqAsibQJrLOEKHRt71wthQ3jTllgOJYH+y7+65ITbNpNlDVoJjRq2ofGX93pPiTNa07UxB5BGsql\nO+Q5yhuOLXA0Jp8h3VbCYo9odqvPsn5NT0Y2sGQz5Tjm2EHJxW1oDHb5/AKUyNz4DpFm1al5aw64\nGdCn6CzPpJIosi2npvDTG08sZSGPjC0Dz0IO5ADbnX1IrbHt0vy7zSRkIFlmLcZx0ez3gnYdQ+PC\ngXZIfTjZKrjMT765yHEM8Kx///K+1QvPX+miOVyPC6Ix4T7oWfNOHbQKbWQkPKuKS+gFz0Xta1ry\ndFHpsCkZHXaznCtuHI/K8yrJOCzSCZb5aBtaHu3z4O3TfROBKsthcp2YNqMpySpaktB7JQW1F7CN\nm7gcTkN+bVvIIfB1jM4KeJa+dTGjrom6BCebyoOZ+Jqy5Eu4zATM7zGWmGm5U5COqtxzwDpv9sXm\n/PWiWhhK0tBF9dvPwXogELNpsWdolluAdqk0LnPMEL5QTFjo18GjDbZr5zxCo4mQGmLvEOOGuzzg\n9/2+j+Nd73oTb37DT3D1MZ+JLUZqBesydtjsWLCETzO+kdinVqj3OeMMpTlo9jUjrh0ommO+5h9/\nGx/yQR8AwFd84Sfzpf/rz+Oj61DOhb3tJCtzTp9mKy9k4VUugqCXWfl5hhQsQ1xZwmiEomQMwock\nRiGb8vmm04aE9wMjpxCQ2mHvFyvUoC1ymuWQxjOHXtcRGbMGEzU4XO1nKsqzK9bU4cQGXe93TlU+\nqpKpuUCKqVQBrBBNltduYoykNAliNqRbzlWmBTszXE9EncAlN3jYlFqAq+Bprkv1MDZqKSxV8KCc\nM4NMIRh5F90tjFITx9ZYMNKMf+gpKMOxmjjKDSwgf1KAJMyK1ENOQ59ZilMRMLrkjgNp5C/dtmom\nVb1mcyE3HM+JUop4LhNqlS6KnpRYAs59RhiRiNb19yepQY7z9dhLJntgKrexSOSDtMy1SzXkXZCa\n7oLd1MVYZnFjKak7v5Wx9blEzFpO+uA6CjEGnhOtD1Kgijx0/vyuDt0YJj/0UJ/7mC7mujnHmG0m\nUJ3ohZZgZCcPMBRjXJBwv89D2WDCybWoWgpkgloF4Cg1qM8RVxhT62ehOJKmw1d/hEkmElpyxfz/\nHMA8KEPWvUjOmlbW3nm4DZoXBh0uEdNIoO0k7iRjXUSKryVxzBK5L+VyGMqdZ8UZSSaKGIqjzp5o\nCY1ApmohNS2x2iL4tgfUubAYNmdhcyYO3G6IfTIG1ILN8YKrgh5N44oLKER3iT7EFg6mw0qXU9er\nmREjwE2HRipEwH5+hpvxdo7HRMZ426//a37Px30mrQVemS3XInddqOU1HtOscG2SpWGWg3H3pOo8\nOqsXeoK8CZDza2/4JT70AxK9DdaU+MCnG7/5Vumf2whqVmWjZaFmcD6ro2eL80R09iiqqFtX2nBN\nxDBuAlKVjnQJwasTQMo8ez7TdmjN8SQ51vd853fwcZ/4KXzUR33E1A0PKgUbIYUHO+5KTIyUidZu\nOaxmUCzYTHD0UpLclknFQ48pUeqDOjXpmw9qPF6w7X1T9RQz6cFl4x1zi1pq5RCyRVsqMmwM6BOQ\n3gjokmMuxW7NP2dvjAy2d3I2TkumpoatilLKttzK2Ibp0Dsno0RlGYOSYORMDXWOS1y6LnE4mIvS\nMIimrtJmdRtTuthijmlU50xb9+PED40kQvKwWw6tAzE/p/PvDOPZG0UjRQpSkdqE7jpckzjbKQWL\n73hOpMiYy+iUQ13oJcljw2g3XQvQOiheCNRBmmUidroXSSw9aXyyOzak2y0e9DRYUwHrnMfAelZn\n9pyR5+/o0N36LP9jLmUMFk9sNkg4zYxDdLoVbXEY03oirZIByTvNhStcZ2JoNhhkclHVVxLkogpX\nB/B7fuNa5eivuGwck3rxeSNqlrSmCdwxpo1ztkWzLCwLlM3ZhsjzZYJadhqrKQ+uFNmMIbNmqSS4\npAIs+rNSdkaU2XarZdp8YDilJtacSSlYLYhVacTNZAPeQ/8OUpCndTAF89ZXBeGhS68NfWh1g5p8\n5mbTqqqLZ0x6mf4oeeoh2HtACmrKLCU0YrHETTNKM667k4sYGE8+ecRovPOtD7m6WvjVN/wL7n/Q\np8KAalJiBIpnD9M8DpNLkSFffHQ5oPSgQPFEc9ljI4IG5Ogs6wGza+6/4B69D/7S57yUv/q//4IO\nENWGGg0kk8g9NEaoqYiFkI2xDUaB7Gk6J0X2z+ZUL6pYJnfBkW1922HbGz0S2YPfeMvP8bM/+NX8\n5KsP/PVvfA1hgsIvaxE60IzRMo46NrxxDp+KD72XzWwCl4xzD5IpRULzeCO8UXKmpEIt83Ka7NrD\nUqlrYcGgFlZiJo1M0lcxfBgpZXw1Ng/qyIzUsHDCEow0tdd64HPSYdy7mLSlAO5c952cK3HeWQ6V\nJSswM9cuuP9EN44x1JGQwRUQq25MIZc5BRUty8yN1nTpa/mLusewaYKY1L1s5Kkxv1Sm3I4M50Ld\nLiopF/DIjH0IsrS30Nhp6pejOYup7U/A6MYYnWVZ5Dicr7/m0jNCxwOKOuAlB3ek3cSQm48o7GSW\n0VAufGfvMFJgm7NHZvQue3TJIipG0Hblz3XXcj9urSC/w0M3Am2hHR15kdiShMWpOwXnbEWWvTRx\n255IQ8zXUxjZTPHdSfIoKxpil2y3H7Jc5gw1lqXbAAAgAElEQVQ3B49Dat79y7Hb+U8qgqOHz+lx\n0tZ3zIqSDH1aMXOCHaNnKC24f9B23eqgnWV9NBusprysZZFkrCYtxRrBkgogUhgjkXIishaEgn3o\ndoxIpCKHktpPYxv6fHkEB9eh2Wd/ll1jCDNjdpiMy7z7oqUdsI85thnBpvGYcuK6MtcwVTf23Lm3\n6aEfTb82mWDsh4OSVrekgZlZp9rgmXe8lQ/8PR/AE08+TeudN/3kj/DyF38qfdP2v42dO2lhz6b4\nz96V7tATO4Pk4DY3vei9HFPTNjbHmzB6Poxn3/5LvPiDPgrvstzevXeXkm9oNyf9u5Oqk4ZTp/87\nbcHwnZLkHooRNNcoYevSdB5zIWel9aY0iInr8xFc77uUH+HKCVucr/riz+Df++gP5y3/H3FvH6zb\nlpX1/cacc6333fvsc7/7ExAQKSAdIQHFj6AxhUFLJClEAaOpRBPLSKEiUYmmKpYxarD9LEStgBAx\naBVERRosFKOCAlokSDQopcRu6Ibuhvt57jn7fdeac4yRP5757ttU2/deg7ar6lb3vXXO3u/HWnOO\nOcbz/J6HP8aITq0LUIV+LJrfbOlyvS0b5islBoQqIs9OsYUrjL04LWMS9RqHVqh1mXE2quwajWzO\n4obR8BxEqxyysF6p51tA1t29UotLwrYm6164aXAbzjYUGy/HV8wB0VxkctApDHYyF3wELAGjkgwi\n15ly7LRW5fDKnE5SyTk1jRdqFdPpwYd05S1gWVVQuV9kjtrk9Xwa3RTmksEE6MzhW8KkIKqqZKo1\n4jIjV9DBGIOtG/se7EO8ltGbGMdunMIZWVgSojpejVYX3fOtU3whbYeiQFsbhdGUCtNSn+dVa0rT\nSKmOzuSMyTKIQU5oVXeDAe77dKlVYh90d/qQDtqj0nvHqzH8pzhIC4f0yj5BEjEHKqq0CmNi/kbu\nUyWg3W2/DWrLaa0rFCqbBVRjQRCchqpb8TJnC+JDLLiXF5tzYF5D/R6KLMTaWVM9yAR2fbijwShA\nl1Vx35JtJAuGl0pUx0rTF2NdLN7GTD82lkUSp5ICqXiZN1FxLbZWmSZCDstCxBziEWzuLGHk7Ose\nEvY2X+9sKVzskhceqc9NMlNVwb5JBje6errherDqHJplAR95p4O1mNSHRVQlndS0OUUxoqrlQabA\n8qvCHJfz4HS65YXnn+WF55/nK7/iq3jyzR/PL/xVX0pvlTE21lpwi3kclWW0n6dW16W+qLN8qRfG\nRYEShdIKvssLf4HHPHr5lieffILHj1e89/0v8Ns+95P4H/78O5Ug4s5Aw7g9AvMmZnE2tl2L6AKM\nIrJXNlg9ybZzbcbWtWhvpWMpP30MLSqtFuyYHA7w5qeuKexEP83+u+FdldrDeQJS33QQZyOz0wd3\nC0EpCgE1g6ulYsW4WhrXrbAeFXQJKxTRzcRTr2QUTtlpIwW7qQlNWW5SKAi04qnnZbCIrWCCwINz\njqR3bQxWddoZZtQhm3uzhdIa6zJYU4XEIaWs2L0KGL/uXNnCRWcoNLDRy1wQo3DuTisFb0EfzjUL\n56LPW+ESl+d2qhOKFuZktsvmmuxwJ3+MnLb+OpU3RbHzrVR6Fa86T5A58CzT6j312sPJogUzClhM\nVkNrFPSgRHHNmlArLmeiV0xaWDMN2syc1gv7gO6DPtnR7kAtQkO6k6VwZw/YC1toeL5nJyc2s5uR\nA2aI0P//RffWB6Q+RE8R9MO1SGVR6T6biUgeogdtTGtpnQqFgR6+C47xsrQ2U6tB6+eHXnAvV51O\nrlLVyrWc08nZvA/TZP6wauBESOxuAae0ibTTkSHmwA0GMQqtLoLEtGRhIYscF0rTBaEbfVaxkquN\nITVCWmBWKQ2OCVamXdWl6c1U36nNflY1iKpnEcAtp90x55BC1VGtUwI2dYH7pu9hqYWc8qThIiLt\nkVgJBeptyZiVxJiOilYlw1qtUppSgnPGjr/7Xf+Me1edtsDtyy/wyz/nl/L2P/7nWaZC5bC2KV0T\nWUsnIPVwz3uQIynLxfqt9zE8GTZTnV2CclWe6j28+NILPHZzj8fe9BbquvDci8+JMxuSHEZCNw2U\nHJeCIJy0UPWP3HVjccxhtYYX4zSMK8QAloUWHu1JQS2SZb6Hr/6Dv53DvSuWUnjs/g2cXyKOz0yv\nvTTbVkQ8q9kIjelJktqSg1XWYyM9aW3hajXWpsSF4yq3l/60SUJ3mN9xwnDnni/kKvhNacAIyrIo\nC2w6pUYkXYIPzh6Ei30xsjKAQ0vOmYzhuBdaSJlQLWm1QB0sYZTaKX5gW3auY9XspAr2tMzUDbPJ\nWoi8A7t4LeRIWII220ViS8yhcSoDUCDyKceakBjJ1y5P7uWeuVNiKSaH2V4wtLDn5eRrLGuyRRUu\nAMFxcFVZa0IWRS21oSgfjz5daEOMi9mLFrRHLTf1sJ0xJaVWJlUu1Hv37owIzgP1nkkNNIGrOSSE\nnUy4zR2GGMCj7ERUzmO23V7les1Fl1Tpv6VK7nF5aEqRSPjCc62QwwkXfWkQ1N3gMKi1cZUiOpVj\nAdQ4XxCL8wJDfj1XmW884K6HJKnR3FlJrpfJhiD1YCJfeGtyti0BMQpLKzxE/Wh5ryUi7xHYIViy\n3DFhS6m0GkJVmqRfSkpOKI39Tv4mile6Frw0Y2dow3Ed+1t5xaF2gYmYachYQ3zRy5xCAyB9PgFY\nHarkDSxnem04u0sutadx5BU61nC1K/oI1oDIwaMiVOR6UAuAWvju7/4ufu6nfxJG5+HLL3F7+xJP\nP/0EbXHqpj6qzZ7cMpUAewjtWAzCKj2YOXkydYwZfzNikGgiX0Yo48oKTz/zDDdPPM7Ljx5w7/oe\nP/1jPobx4HnKzVswnChQh1KW2cXvKMUoWcEqkcqn0vdfaEuZMHKlKUjGZfo+53GnZSXrIIvxf3/P\nN/AxH/kUvcDN/Wu+7+/8b/x7v+SLVTGO+bvGojbYCqUtrCGCXLYqc1CRQ+tY4HgsXK1FUsFMsmoh\nyoDhhf3yfKRxbBVnyI4diTxe2swl3nfRzkZj7z4NFDHVJoN9JGcPWZV9Bg2YeqOzUKe68tj2Miix\nkGXQouJF+l+z4EjDcxcUp+p7uRcVX4OewTKSbIV7poWwW3DoRQEAVQkxXS19DpnqY1f1fpeAWHQq\nKfmKHNJDhdky44ASYLI/asxkidRpsxb93b0HW3Sd2EajN5241DdPek2u7qSklcyu8NkUYzpzuhKR\nGiRD+Yc2YTd7iBYXLopgBIys2rhNCq5HZWe1BkUtwr2rMBjmEG0O9AO//SlWutLUOmmNpJIhYEp1\nWfIyZiemByMqp5D/+OJK069PxtKp9xrLOsX8aHdpORvv66tP/D7wKlyqKV2Tr/yTKuWLFK2anF/N\n50I3h26WsJlSiqOEBPUIrdfqQvGYMTIyHSwHo1UdJXWcAsfmDqkFsDQNtkZMgAqoUm5VbRFPHIUU\nGnCYO369LNIDzrP6rQE+dyKbU3JLZ6mV3UM5aS6JUSmVhhQJq8viulQJ/gcV33cIeBRF1tiWsIDt\nOtJWg7beY9t2/s73fR/f8z3fzXZ74rR1WtxS40Y5bfNz3n0mHJeVDKdYsNULtCYwFprLLLGddQKI\nVEROIqVHKSsvPvcS9+8/zlve/EbuP3XDjz/7LO/5f7+Xt37yZ8t80S+ngQLFacUpUQkPhncNo0py\ns1Raqawmr1yf5p0xpFcdu5Qx2aTqaPMbHP3Evp8p9ZptH/z1b/4zfNov+y0YGiy2pYnnURpLkdlB\n6RdOqwvL4kpHMTiubfZyc8YLzRMY0BPKPh/exbgKmRHCG7s722hEqq8UcbGbNkY1Tl3AHXdnREKb\ni3SBdQ5Mh6vPSCr/q3kQtSo5uysRui7BvVa5tuCwNtalccjGGH0qCMQ+KWuwV7Ch2HVbpGVN2tSf\nK7PPuvqc+5ytADwyVak5dEQfNsleOe20GOaaZ4QLus98DkhhIi31Z2Kyds3R/KgENYLd1eKJgDVg\nFLU51+j0ulBdmvwyJ+tjJGNx2hxGd6AN2OnUNpc/GxPAXylrUs5SzowRGqL1QbZG2YuSpG0Ilh4x\ne9NNxoiQbjjXVy8hX1+lK2MrWZIW0DNnw15i5zHNCcNFyy9z8scCEY1tuMT5nowxPfVbpa5Jd/VI\n/XW9mPkZMWVR9ooo2+yD/5wm3vrfbqpYD4vRzyHSvoe4pzklb2gBXNDNVYoWl7qoXVFNv5tqZJ9M\n4YKq1bwYHAS4jiEJjacq+0qhlJhADg2AcogtIf2ozVSOZOtzABFayPuWU+NoU8qPjk9TTtbn51EN\nwoK1ClHnvTD6oPdGH8FQ0h9l6lHX2rheB1d14Zvf8Q7+1Ff8ABmDZ97wNH2H973vWb7z2/8an/gf\nfMFd9HhmqpfLZWJ9CUOETB2Lg+VOa7wsC73vjJTFVlP1JOyKFx884E3bjpUFNnjisSf4jm/+Y3zh\n234paRW3TvSGLUkOZn9XcPHLIGaZwPeMwSmZk+qgT0+qZVXvjkHLZVZPg6tltogIvG9cHRfe/8PP\ncXM8s/d7LMfCcYYVFnNFEJXKUpO6LBiOpTa2pajfrGy3KknTdBsmwneWmtzIskEPCDf6XskuWPw5\njTJMBVOmtKWm6vO8BH2rqNyQumL0wUunSqvSzJ+GqrfDGKp0feClUWMlS0A4JaTBXatJxthc5K2U\nWcQDsssBVqej65IYIxnaABaY1efoMq5UnJEiC9apTmjztQbq+9YC6cEwYzuNu3y/tVZyBfNCTn3Y\ntjv7npx2bdDkjG/Kha3s6k97ZS8hEmAdjGqUPdmLHJ/Moiyy0U/z3JtIymZTiVV3ruqB4VKTRAab\nd2nDu3T/kWojNh9CBEQoAccVVX+yomCCpjTuRipm6FWu16FeuAjCJ8AiFYvSfXCm4mcjijSjwU4f\nAmREaHCR1nUcddiA+zMAL6dj6KIvvWsLv87r0tvNV/lLho7lfb7R3cQtGNVoZ93oPpT3ZkXUroM1\nyY7qBITY1BHuQa7zSMS0MDuSTE3gwb7pv28WULSbS0kAc4lSxlSxyQcGL3L3ZQbNi6b9UzFyTlUT\nuGO1ctFcx+DOcpjYPJYVohQyBQY3Nx66kix2N/BktznU2iW+8WrUVmAk7/2JnR//iZdorXA4nnUU\nDudLvvjX8xff8ck8/oY38S/+6ffz0z7p57F7Tmu34N5t0YCm2AJtwdyp1Rk59Y5IZdHn4KePwsf9\nnC/kh77rT3N1dcW6LDx8+JBMeNcP/iPMglMYJWS2sc0IKsMHxRT+WNvcKD05qYDU8XVXP6igXXnY\nIFBLrBmspbNkFXch4f5jT/HgxZewVri6Xvn+f/gP+Jmf8lkc1NwU0nBiS1udQ9TJdmXOBsz081W9\nBda1MdUJ+okpEfNpn12Lqri6SrUzHA5URpegP1ygKLWuCq11fFkYe5+JLU5thXtrslE57xry9rNz\nLtINZwhg5IROCBpb02zc9awJwV4SVfBgZD1jHLVhzmer0NjTGV444EQXG7jvMWci5W7R6kX2/WIy\n5pQhB9mw1CKdsO8q2DDJIBdTVFKb9tyRM2EkBLnZ0pUA7YU+TDzuCDabWvHd1fasmjSXURkmnKkP\nn+qO8coMZkmqrRQf3JYdqHgojHS/pOGMoJRGhpNtvqbZqmSaZYTt1ES8ZOBZdar4qVa6j06bpqXT\nlCB49eA2IHdNA0/nHVAPzUdhzN7I0grWBLUYVb3LzQdtAK3Qkjsf/2URfT2Xar4ZD2IzOeBfchUT\nezcXLeotBD2/Dgmpc4dHIYdJsWnxOwhBmUCWgVHU/C9G9FnNBHR3fChI0KZaATPMBLs5mJwtG+p9\nnzMpBGtTz0/3qo5PvdkUh+dddTFT03B3SmlsIyZERhxdzQg1SPMUr2ALfcaBoqj36Iyt0iNpWTiu\niS1GlEoO55yFcnsi88hv+71/nN/xX3wGb3vb28CCd//Ij+o79Z3P/2Wf/MoHn/Ctf+95xjiSVVBz\ni8K6GM07Iw+T3KYqUqnBijBKq3Q6jvFrvvjL+B+/68/w/AsPuLn/PPdu7vOJn/ix/IN/8L38gf/8\nrXc9egN+3e/5Zq4/8tOJcKwcpiyxy6K9Moe5EuJTCzEGtMoFpg+K6ImiqCFbCoucNDz/7LNs28bh\neuWJx57g27/+T/CzPvUXY1ZFhSOoJcAWTDU8h6UwerJVp3nBDko5yCwzYViLghVpQCMMb7OVlpeb\nOGmLTdeW2nPrIomWAO8TvpQyCQ1zrEhJkEuBLm5sdVQVZxCtcJ3JOSBqEF3qiVor1wcobQDim1gE\nuUzTwgdWPZvRD4KD0wSOWoq0vq0Ubl2MYJ08FPeDTX2qF0z5NUSbMiNCFfac33iX/G6fGuxizn52\njANRBEnquxKYByH+wpggpumlG2NMYFESvmFVC/+aM83CBAw6h7FFl6koGnvXcLWROCLilTRiqhY2\nzznDCvY6e9KtiJvhriLDZbCoJqhQmS2RzkJEp5RKTrPVh7pec9F9cEra2jmWwhIVatCjkiECfUSy\neVBSybip8y6ngDJdOPcO0tTVWjjMSXiL2ee5q6D5V6p0L2vAh1pwL1cxtYvjIGnVMOO4aNe0KgNE\npsIfHadVY6nGyK4ddfapIjWHvu2GuU8jQrmzctYqlJ70hrLFlqbKJbvaMbUpKfaApmQ90cLlU7Ez\n1RaWUFph69Pt5TlbGarualM0eFqhmzzl7iFlA0LXVRtYWViWTvVL6J5R1uRXfvrNhTM0J7iNn/Wp\nn8q/+7a38fwL72cM4/nnX3xlgZjtm2/8zh9m8AQPQUaLizklA7ch2Dy7jnRl6jFNpDCs08fs69XB\nGkcgefHFF3n48CEvvPAC+wU5xSu3g9Uj1/ffSJ8qksjkmLMF1AILZZd008N8YSGXGNjU27bFWDOp\nrdKplIt9NJNHjx5xPB45ro1b3/mRf/EDAq8ERMpokfNzaldS4bQx/9uAUiXTi0Od6FAd240J7ket\nhBxaCNsi3ShWOO3KWwuvSo3ocApZ7jMkXRtT6zpcx/zagrppThC+k1a4zsqZM4uvdAaxpVx5RQkr\nIglWcGEPhyfnM9To9NaoaZTQwLVZkttOXRduwzlUY/QuSE5Rn5ollLSdsuX7xZVKUFMzkuqmrW5W\n9yAHp0cyGGDGvssRyFJpZbCfZIjoPdiQwiO4pE4YbQQvnTQE9eles0vhgRO1sZRF0sqLOWMMRq48\n8g1jYbiGeAdTFlrvUvWUyYWIMEJdfUbp9FHI7KxZ8XkSthKsRfjS3QsnV6Vb67zfyk9RvdCHa5K+\nLhzCaV2MAh+IpmTKKgNosbL5YCE51AOPxk7vlRf3ztUotFxozbm+rtSaeJuqTpsTh3/VVfd1XpeK\nl6O+/NuSPLFM/aUXdiCGEV1pnjnjSS0la9m8UFD0dU/hCLdzwOLYCDgE62hQgkriVVPtNm0366KH\nN4op/TR1MhbCtrAUTV8V0KdeVIaq/4pODnVKWxRiaDimfi0K4dtDDyiXyqWsWBOZaSkLFxttLUct\n4HNBVZ9r8MPv/Me88Y1v4tmfeInTaeMDkZ9G8rf/4Xt5YX+MMt13w00yqjaEDcxBLEXpx77Pqbzg\nOy89fJ7f9as/nuV4Q6kL3p03ffQn8Mwb3sRzz71frq0P+H2X67E3fSr/5R98h17qbmCFtQK5Y2ul\nuQIFzWYvtzjhRe7BUFTOoWjAkbP3brbjWbiauWQeQVka5/OZ8OB8fihljhnVB+cCJYybZfYEKZwz\niGwUHxqs1qKUAjSg8zGP1ykesKccXV4qOdQT1ECw4i7H3cvd6S5Ww07gWyHTOQ1jNddGNheFw7Hq\nd6wHrA9uzVmm9TxGYAOl1lrM3y2AU10am8t95sV42AvRfbZPDKtOD7XQDjkoS5WgsGhMDTljbua9\n3CTjWk2FRdYLJgC8itPRUkNUimA4Y6hVaSOgBmapKKU5bBvnwRlJu/Ze6eHsuyRb7oVaXCc5q9hF\nvtpiMlaUXlJdm9oeO1skPTs2miSvU6OeGFs3WqtqXWTQ6co+S2Pv2lBLgUNt5G6s1XXqicRsnYXG\nrtZemiyl5kS+eij96wDeBLWsEgzXhiPe5RgDV+6HwN9IEnOYjpoYGn6cY7BtpmPtlQMLpw0Oiw7Q\ndQKr/s0st69ci0FdxEE4hjicag/IRXPak1gLEQUfRu/qryoUb7BnvTOFnIezA3neZc7YNIjoV1UV\nWBRKBsNEFluKTQPFtFnOIaQPVYqqhGzGCEmz2wLJWjBY6owxV99tHy4IfAHGK061VqXNvCRWjAhK\nWehd2tbwyj9/5zs/+MMx4/3PnXj/s++6G4DlpRQG3vzmt5D2BI+1aTclabvjuat3nwtmC9lnaGk0\nEf3diQz+7J/4fRQG/fzi3a/8sX/+PchIw93v+cDr5/2S38qnf+Hv4LwhIlyZS5oVDlbpCSdcSQQu\nRkNrMqfYNMpkJlutNFNMT5mRLcuh0lPgnvOePFEWTpsWZx8bpHqFW0DiXJvCRs3V668mTai1AjbI\nbLirvxlThiQnbE6+iLGNjsWiFsNiU/3jDDc2FFmzd+Ph2Xl0UuqZR6FeUqRXx8dOLYtE/6skYgWj\n+bTsjmm7LnLxKWSjgV1A+eIH326DZXH1H6u9YmAaiZWKmxGLYR60o86SF5facLVPThHYNmit3kU3\n5bwXlyoOBCC5YCkC+pDajEcyKizDyKXim9NTcfTZC3txbC/seWbs2uTGCEiFeLqrVYcZWTWRy9Rs\naevOodWJCIXCyvk8OB6Mg5qBRFYleLeNbQ9KWRklOETDKHR3lllANBI8aGul2oI1Z03Ds7PtybGt\nLOuE2l+SGT74dv5J12vqtIpVTb3T6Vtn33dO511E9zDSFTXuqWPUS7vz8qg87MEYVYmpDlvCOZzT\nqbN3NclLFfHHyr/5RVdvVlE39+pM111FTWrFePyqcP8aDkdjXeFwT8oBq0r+XA9wddDgYSUoFlBk\nFnCHR2Nwut04n50xdjxd6aZT2VDnrgk5Yd0aoOwjtYDs0gdue+L79Kjn5NF2CbQvZPyrGXFjVidT\nOLm3NO4dVh6/Xnjy5sDNsXBvOWBV8etqhQze+pa3/ks+meTn/MJfzR/55ndpEZ3fzSXF4n3vey+F\nTVbihBIVxzjFyjaS29PGS+chFm0m1M6xJIdD43io3Ls5fNA8VwX5B9+dH/uxb+GNb7riPT/8fcAy\nnYGCx6y1EaNzO5OXQdPoUhdaqaRLU3FJazDTEbci/Vank1WYSQZ83Ns+Sxvu+Zbb21sePbolE/7c\nH/5vp26vc20DM1cffjrCDhlqk1HkIoskbRFwvOsB9Hlc1fTfqamwy+GJd2PvyR5yYZ32wak7Dx4N\nHm6dh3vwwm3w4u3gxZN4Dg9P4g/4jJvxuUmXi4Qmgj4G583ZSsG62l1MPCpWAA3ovBRIzRr2wR3L\nuVWdXEsblJgg9nBqLew+2M6DdDj7xu1psO+FzU0DqNlCc5ItBptLRxypQS2p7zHDGEWusj2d3vXe\n+w5jD7UJRtIz2Hpht8B3xfREaoNoeTE1MZ+DeVJyxWTtigIGVEDcHKRkAZvM6qCWnZIH2tKIss8W\nVXAOp4DaSjWFLGhGKUG2nQVYs9BK4/pQiOrzVCpnbqGwLD/F9kKrclD53Lkj5Z/u4VNb12gUdnfR\neEblQWinHruTCPzdMzhvyXataq2assJKsZ80NPlwXSsi4Q9Fe5FV+r21CU7jA/Yj7F3Wxj1MlWkp\n+HJgnJ3zFvTc8bOzLmrC6+gxKfRTm1jSca930JyzB0Qlc1CqhhDUoh4kTjNpIcOSxTSAaCPBKztB\nHdCKbqClFagLFVdII44VAaG9SnbiJfENgUB650+/49180X/yUWQav+63fgWf8ot/JekH7h3Wu+9i\nbcbN9ZGHpzPnc3A6v8Aob9bRLjrbOdj6Sb70kpRdfc0j0FqhHAat65j1K77gN/CP/uaf/qAC4D/8\n3C/jn/7gP+HHf/AdPPn4NU89cZ91acTxmve+87tgm5Krg1oxq8O2CHROSje++BCAuyTplWVJBuI8\n3PXWaiHODseK+eA2C8dq/JYv/3P8ls9+Mw8ebIzxSj/5O77ta/mOb/taLqzov/zd7yHDqOUgydBi\nQnrWoNHwIn1yIpOEV2ly0zVYdpM+mdkaoo8puTQijb4Ptm1wjsJpg9sO5z4wK3cx5LUOjgmZTsFZ\njtLlxnwWbzs6ShclvKQ1ihvrAtetEmwsdnXXo3ZXsbOYCoK1OddW2Yu07dYayyqxY7gTPYi1EmfN\nE7YwbofTtmBpcDgmdZvRQDheZIbZM6gmhKtyEJ1mWvwvuv+e2ukVqyUHnFnQTNyFSPElVNwWWcsx\nSquTNSJdgUfcucGyKtEXd9x0qhw5I5WysVghq4wN5lXfhUn9k2hNEBZaoQZXy8pVGrFALEkZTlql\nRSh63nfl+BWxVF7tes1Fdx9gFvTU1NJd5ffmCzE2rAU7CPjgzmYarMq/DqNWrnAahWMVsWsxaC2J\n6RePCm5BtddjBP7Xc+kmmCaLizayGatJ7jaqdLKtJL0W2AUrXhY4bcn9Y2XbxaXtPWVzvTpwWIwx\nOlsuHDC87mDq79ZF2lqLqf8LCJpkSEhelqlFpZokWU5QrTLCpnNNrz+ZA8ghahcp/unV0hg+yDSa\nu45RruV/kFhZuXnsaf7Cdzzg1CH25ORw8s77Hj66G7Cdt2BdO4/fPzL6mc/5jE/k6//Ws8RQHliP\nmIoEGLsq0WVIqG6lUFw9yaTxcR/3CR+w4BpY8tXveC+3eeDd7/kXvP03vYOXXrrlTW94ij46zzx2\nD7zwV//kr+CXffFfoaRiwqnBYfI93KcWtUm+pONdsu9l5r2pT5ctqOeih6V1Dgc41M43fd1X8re+\n8e0AP2nBvXuVppbRN33vo5mUUjgUBYeaCUqeUzqUJhlYQUoSZqvBp404nZmmXbDJD0iHcybn7mzn\nwqOzTSC6GCe1TjutJa0GN8uBUlVJDtPwU1IAACAASURBVA+qJ8MHWw8ehSzuw/Waix+prQtHOApu\nTmsHSm6EqQIuVQ5RgNrKnOEaSw0WGqWpl0+YOLFW8C4J1skrfQzcjb3BdRptS2IJSfZaxXqfpzuF\nTxo2xQzJ7j55udJce0/GLtB8CZlQ+pST9S5JpAaWE55uE7mYMcM2E8+dag2WSnQnSTwHA21+xkLU\nQfrCUn0+R86SMLILkO4raQU32KNQkbGktUqS7KlTjjLSYI/BvqcqtlogK2UWlK92va7kCA1b1d8c\nI3joLt90GNaDUaR/ra5FoyBZkkXlWAZlkYJAfZ7KYdGH1+YDqAexTCXrh6/eFefpFbfMpR1T0CKy\nh2yO0ZJ7FE5d+LZSgpxVxMkqwwbphboFL/Zgacm9FYKFSlHlesdtzGmHFIWNnDDrksQIiIJXI/v0\n3M1oI5v9KMuLO427CsCrUXrI7trlUNNIRz1Hj6myyMpGZ3GpKIiC28BH188NePqjP4vn3vU3AHj5\nYefJJ+7x03/641wfr+n7yzzYbmQCyUbmYOud47KwlMpSkli6oCFFAHh3+di/+m/+BP/1f/xGPvKj\nP50v+cpv4YVz4h7cf+qjAL2Xd//o+7k6NGp9gpv7R37gB76b4yppVXUlcHjAEolfmKfTwXSsRQOR\naR8R67aq+lgK3/o1f4Af/M4/pnnDXT3/oa/rx57ha7/ln5B9cKiVQ0sOtVFrcmiXGPg6UxOEs7RM\ntYOQRnaf8+ERcjcFyRh63xkN92QbcHKnVqMOab+rMnDUR51zhMhLpRcUVwW5R9yxrvcxWNx4NDRQ\n7FOZu9Qhx6Kpui5zM6mlUerFhjvTfSNpvchMMipxmFLIKfGs3skjXPWOkFHq8d46M9QgZINOQW8k\nTzfO0wAVofnJtg/CGsQQe3nvnLKqGAmX0sMLdRFwRzK3nPe/bMktVdhFdJHjOOLWKeEzX06f/YIY\nHZFJiyqbrjSg9EuvvxQimkh6xSkOxyKOQ3T15XuVZOw8pJxh0Vp3dVBE0lqX6dM34pKt9SGu12GO\nEOughCg8UmrIt5ytaTeYzNQxSUEyU8yFIlITTIPlWLl3LzleFa4Os62Q3GUrldfYIf5NXHeySZty\nJv2LvrA277chNGI1heOZF0Yq1oQ1sF653XZu9+Bqrbgn1ZJ1DUokVofMCKMqpysaHkMLXREEyM2o\nUWdfDGo4VhvpA5tVU2V+RkVsi9GneH3Ta24oHslSiaTbNHLQgpbGGM5qldqcGE2ibozlUO82xC/+\nY9/A7/3cJ3jm6StqW3jqqSd44t6RZWm8+M++nfUTfg1xvmWEXletYlWUUijWOLoWyWVFLZW909J5\ndGr8yW95Ft+TsWkgB9oMfv0f+m6+5st+/kwKqNyez1gmV63weL7Iy/kEthhk4WxOLRDdsVaoVmkF\nNp/0u1aIXu767YSRS/CD3/kVwMV4+IF1t81/0ynip33kG3nw0gM+83N+LVZWwpIDQWOBErSiI+1S\nYwYrzvSK2b8ntaT7xHnum4QXfTIyPNRCyp5k6nh9tOTh3FQdk87VZj/fpKzpiPTVAmwJtq4TU7Pg\nduazbRa0umBFUq+bNbhZjxhdp5NRKKURuavPXKoSgZcizXfLO1ZzyWD0qml9KTrhtKoFo1SubHBb\n1cP0PpTA4Y3YuFOKlKphV12FUoWZ9guQJ8o46HRCo/cdH9LI1lIxG/RN8P0MBahir5w4xkDZg1GI\nHCQb7pVmlTJRqelyp5kZwU76ot7wJUaLBWtSe8wJKDUaUYBeJosiqEuS0QiCSH3GNYPIlZHOWmAf\ngz4UcvrqfrTXMUgbM9Lm5ME+GqcsZG/UMJYJUdgzRVIfkli5D8oQjs1Qpv39xbh/bBwWBQjmvMlt\n6nV9fhmvMfj7137Z/Efy6pwSNikDSoWyzL5zCOi+bcnmsyfd4FgLN1eVe0cJ8G83sU5Pu3O7BX2Y\nbgyvCvELsV4zGltoQr77jHVOLfyyqxnhndKq5FnzxUbRETO9KBbbq24wdQ1lsQURl0pQ28JqOpql\nGwwl7kqXJufUdVu5ul548rByzMb/8fd/lL/2bX+Lv/SNX8ev+vzPwzA+8ePezP/+9X+UVjVEG55s\n2ybHT3d6OBHJ4Vg5HgyqUWwX6yKgZMP3IhZEzhTnlBPqoz/q47E0Xn64z3htw6Px5DOP8bf/0h9h\nbZWXR0hWtWvjq02tqPDBeRfX1L2w74qfGX3MgMnA98K//5/+z9gHYpUMvvRPfA9f+hfeCyj/6q1v\nfZrr64VnnrjPX/r6P0rNIaZvLVgzjotMIHWRsNo9yKq0B+tJ9KRHYfPklFXIzUy8D8be2bek96He\nFUnmjoezd2MMGLsQ7iOlu+7TXDJyqjw2uM3kvKvKohQ6zkplqZV7y8LhkNy/qjx5NB5rSrC+d2is\nraq9twT3jgs3S+VwAEwDMFJuxRbiS0cEOYLeg33saqGFy0hUpZleJ7i9tJU9nfPuPNiChz3omxCY\nHRjzSL73DqFCxF0EjEhpXNV+MAYwcnDuzuhdml0Pbnvjti/c7sb57PToM6w16CEEwSkGPTaK1XmS\nFNEw0iloHhKZinuPQs5/RinUQ0JpLFVD0uPVNHXM4qC2iT4A3Dtdsh3c4XZPepcp53ZzTqdXX8Ve\nc9GFhZ7LpCMFpJE26DXBZRGM6RbxCRYuZRWIpWoRu1oqV8fGUlVaR4aA1zFtuX326KZW78N9Fc2Z\nafOx1KhvLsY5JW3VWGpyOBjXRx2XdMMXGkP5S7VgVS2ZCNhGsvWBuyyi0cVRJYw0JwZsvWui7MYe\nNpnFyBiRmnKTMMLYfNB7IYcxQj3aTMGUPeA8VGGNIeVI71oYQpBUHWFnFbBHYnGJUklWCutqPPV4\n4T37W3j68cf4hI//mXzLX/wGPuKtb+IXfsbP5dd83n/EU/ehtANZDprYD+Mcg+6VvQ+2Pbk9F8ZJ\nlVKk4VRKlVnk7miTxqEFh7LQWuPL//Jz3HvDz+Cll2+5f2hU3yk4f/fbvgYPp8blFKSKnLnh5ARG\nmynxOSPJ2MkUBjIG9IDP+JxfzSf9oi/GgLrc8KVf+2PkzccytuTJj/g0Mo2XHzzg0Wnn/s09PuIt\nT/O1X/G7KM041qbhYLWpxeXu+N9QDFRdxUX2EYLcR9B7cpsQ1qhNKSmtyC7rXokonFOvbx+d3ae2\nlplGm1rsDdhxzgRjD3oM8ZxrsDRFER2amAxPHYI33Ks8fl25vl5YK1PlUjhew+FQWJcCK8SYkCD3\nCfFJ6qLZSzsatKGcPyuUOsE4HjIQuE+zSkDvsqYPcQtKdvaQ1tW3YGxwCrU89l2DQVzZhVskoxT2\nPbjdB+c9tHAP6eOdwh6m9kgMwgp7yI1GziBMk0StmGHW6CEOcYRA+8t0lWaKDNmkpdO8BSkTFirH\nReCgUtRymeIP0tEzRJM23IPbU3Lak9uu1/ywD17ag1MEp9dcb17jGhFAEKVMkbSSC2IEp4SXezC6\nJE5jTu89kr0KUcdiVC6Sn1lBqnWFx1RGDIUj9s7M7vq3d83ZJ5UJWS9KtGgVro9wveb0eAeVQlid\n8SzGsjalBBPqq6Zu+G0E+wcswJ6ihJ3DOe/w4DzYNkmNzunc7oMwZTPlHBjsnvi4gEnm5pdTijMf\nzDY3rXQxdmOy1qzY3PEbYxi7BW1Wo90uwnDZOkkdj54/fCI//xf8Ek6nwZe//e189uf+Zzz+hvt8\nxNPOzf1Fw5FJUutW6eOMYfq9BTKrFpcul1KZGsalFpam4eGxLawtuFqNYzN+/1f9fT7lM/87fuhH\nfpzz7SNub285Ho/TEw/uQ+S07rrXzGiLPoMwvZ5qibUDWYFymDKjzt4XftGv/d186df9GF/0v7yL\nfQjb16PwG3//OxhROB5Wzrcv8/J+5v7NNX/tG7+KQ5FkzFIsiiTZzzBGw4c2vtpkGCqlUqoRNivc\nBa5NbkXJIqvSgYdx2ncenJ3TbefheXB24zQ0CFyLIEa1gs24nL4lDye3wnNl86KQVw/WFrTqXDfn\nuDaulkpbYF3UwnAumWTqNY/d6GfhI0upLIvUNrKnG21R02VpkiYyigA1UUhvpCsI9RRdLIWLLcRU\nvW69MRLOIzilsW0QZ8PPklftURhmnF0BmtvtEBvbEqdpXnCXsReMKIwsU62xT7ylQPXdL4Npnb49\n5v3hydblPN1chUylqCc89DyNXhhhdK+StYYzUAJLeqNkJYtxbIVmRstON0ljPRuPerDtyaMOt+fk\n3CUHzP7qa9hrLro9Jem4hECeR8pFk8G+d3wE54Bzb2Q2UtFWHBJKbeCKu9i7QyusrdKmjs3S6Be7\n3tRs/lto637QVbC7Stfm/zH0PvqlKseILER2SjWOR+P+2rm5qRyPjVa1SV0C+tKMsMoe6kONLjeU\nWjILHWVD2RDvd+wFHylJ1uSRVhaKlRkAqJ/rVRzScziPxk7sg80HW8YES0uiuRRpjksxamks0Wkl\naCjOuqIh1EqlZfJjDwr9iZ/H9/3Qu3nLR38Sxyc+irf9O5/Gu7//m7h3BddXVxxWDZiaCxbeFjgu\n4k7UlcmaVV5cq4Wbw4F714X7V437a1P0S5lAoNJIa3z+b/jtfMIv+G38xEPndAs5dvbRhM20QmuV\nUiprgaUq6+p6KZjtso3mQvpOuQCya4WYfb5Ibm/VnxSKtXDdoC6Vn/3ZX8aPP3vL4epa1XAr3H/8\nwGrSK59e+BGevnaIM+pgiq1QQtVuCVirUmFL0cCqZiFKY0lXsnEGPpzboWFjz0EQjNg1pHYnTG6/\ntennVlNA5Kii1A1T/9pHY7jhs3pudWEx9eb7cHIUTpuO4VaCVbmXeJ9gy2pThVJhniS8O2lDGWlU\nWbyjUWrQ2kE/oKB05Uh8LEKXwpTjjJnM4Gx7cNoH+y069ncliXec4k53Z/TB+RSSm/osIKJz25Pb\n3ujpirqKi4FDEP5zGKcunnOSbK42RZ/PxG7JNgo9VzyN8xBf+tSdPY1zvtLK2FFr7DzNSi0v0CEV\nI2ayDZspJSc92ALONmYKipIbSxFeVJbxV+/qvrZkzOGQBUzVxZjQcotCZKHPifuyGP0ytSsaCSwo\nxSBNImZcO/3ohWhCv9WA0mYFXMQm/bd53Q3WmFUjNqHS9gppPaFUo9VgLQv0wWbGVTuwp89Qvwln\nr9KtXvCTiZJyc94gpRpLdiXXVj1IgYA8YYPqAui0UqaHPSY+TsoHG7Blyq1mwZ5QIwQByQCrgo0w\nWA9qVhcfnJvwkwB2iW13tTAGjf25wh/6qj/H+17ceeYmKaVxuH4jz1z/KM+RWNOkvh0W7hU4rHBz\nrNzcq6xNlcNo0PvCPmYVaCZOalGgaRmGHeaf3XWsPu/w+b/pvye/6Mt48PxzXN27UqVmhaZPhlOd\nIJcCTpP9MwRlsjJ7rDUgNGyzA5Rd+vJap3LBgOxYaAH/gl//m3n62vnn3/u/cn19j9vziY966xv5\nh3/vW/nkz/g8ft/v+a38s3/89/nln/cl/Fe/+XdqaIdwflx0qEVYwyyp72BAHzunUF83HDw1aN29\n4zE391IZXVN0i4TVhDqMQWsLY3IG9h60FliETAOhzwRTWyxNKNLOwKJSalUyS5lkuxTr1/uMUoqg\ntA3PwkD8a+sIhBPBKJWwGe3uISD7rATBuFrFc+40ynBIY+xDmMcq1c0pO1d9wQ6TuDY/E4uVEfqu\ntj5dbgPSp1Y2C32/xNc7UdRP3V2KoxrCd55Na0ZmUs3ZYlW/HefKBpstItMBiavPH6bTaYKNaTpK\npZQMD2oqlkunPrlLicqW8inIEafecKmOh8hBgVIjTtv2qmvM63CkJWecLQs+Zj8mio5mpgn/4aBS\n8LgmbVWemKUE/llmcqoZZl2LNZo89nkzRepmgdfK0fzwXIFSay9MAJuVrybHaj3UIpnSasm6NG4O\njXWtXC/G/avKU9eFJw6VQ2szvNKVxMtgLQutKkerteRwWLlZVlpVv7t5RwpdHf/D4TS462Odp5vo\nUXduvZP06XOXY640DRJ86kjHGNMNBG473ZJDVo7NuDkYV8dCXWXZfvRo8NzDW55/+REPXjT+zx9f\neTSuePHFF1gOK+f9ZS0uu7EuC8dSuLlpPHm/8cRN4/HrxtqM9RIcNm3hlZioy5iniEZpqnB8DPZM\nth6KlDfYcuX+028Gu1E7x5K2QFRjLck6rdWE6wEqydVaOBwrzzxWePKq8vi9JvdeVHxKmC4uu1or\n99fGvWPl5lBZ28oX/obfSb35GbzzXT/KEWWTfcNf/FOYDf7ud/x13vfsC3zdn/2fgEJbNNtQVQyt\nBWuTa/FeKSyrYDNLWbGJ/zNLCk5dQnlsMRGHUaDstFZpa1BmVQeVcwwd9Q2uFkm8fEx4vhVgoRYl\nVlwdG8tSqLPX6WNooRyV7ezsp+C0DaJMmzEF36WrzokbrbWRY0LTz0Huhm+Jj4vGQ73Nc9Y73oe7\nNv0eceekFMIzGA7neQyPM+ynJLr+7MhQH9iD3cU2oUnHvPXkNJxTKrE4vHDakzrgtImdfHZVulFm\naEBfJmUviHROvsjNSFAQqlEGDZtDQZ0QM5wxXEN9N84jiKEB3dZTGvmSUx443+tIajFiVMnUTH36\nHhD11ZfV1yUZKzZX51WBebsnxcUZKEWA6KUVciLmSllhkoQycgrunVpX5Xplw4cTR7lGLqrJTO1Y\nw14JavxwXokWXL90dpPJINCLaQ2uA8oR6jC2AmVo2KUAPKOuC9VM3vAiCVjfG0lhdKHfIpzjUvAK\ny9ACSpWQ/XpJTlFELGPogUwYnjzMDgGLVS3GM7Uih3bugeLVb3dX4scsdp2gWJvRIgfq7mQJfJHa\nkj0570qUPeXO6hVaofedhy+s/D2vfMwb3sztc+/hHE/RHr2TJ68/Go+maJolONbK9dI0iGzG7Ta5\nDCqAwC6YQcPNsKGKa992HkbBvbONaRM1ow1nVFXEC3Cs2nTWqlZGFIVzaknKGREvmVkhOdTgFMmS\nQcepFbrLuWez+rOWXC1QLGilMaj8nj/+V/ndv/EzectbD5we3fKjz76HYsFx0bCn5WB76YeoT38c\n6YUtBD0qVqjNBVSvBfNCWwJKYFvh1huZZ+xQiE3YQqvzJiudNSYYBiObYrB6XlCCQY6FrmhO1gY+\nF48yE2+L1XlqapxMMUb7pgBVt6GTDEKP7qdJBcsgl4bfDszg6qBWwFqMc19ZQlLHOu/jWnSMf7gn\n2wRhVdNQuE1kZsx4Kw8R+UokMLBdTrJActLhGg7vXu64ICBlTRldU5UiAHyCJtqhBOtmDctgWRbO\nY7CE7NWl6NTdTJXpnpKarVnmPTiRrpNhEh60EpznKbQMQYrSpIdvdKweOfW5YXqSQ5+dZUoeS4A1\n6JVLzIWNnyJPt5h2zegJTVUq2aCOmT8UtFUVR2uNPiq2SgJSqFwvwWqFZWkqv5nZYlmYkDu5mqZr\nB9d7uETyfDivi3QsZcQhTYtWq3MBdjQYbEm0JFbYR2FzADlvVjNKg4yqDL1hnBfj9uTUVZtMXCRe\nYTriLIaNIGdk0DIF4p4FK4kbhCenUwqUXAaUQm26uTKmLCeT2yHU3j6S0XeGD9Z1wZpIVwxpeBsF\nY1Wyakj4veTgnIXzMFrZ2ak8eiR96HuW5P6TP5s3Pq3q59lHyTHhSCEO0spG0SIYF5urjjR3AnzC\ncAplSqL2rirGu3Fy6FnuoPK1CvB+SKV5NJR6kGnUNhs/fiCrXFvF5HiyOhi7sTcjdlXDS1kYfbBO\nC2g2Zy0xU3WZetXKMQ2zA1/+1X+D3/clX8CL7/l/eOtb3sJz7/y/uLl3zbAHnM/J53zmp/Dt3/8A\ns5URQz3ikixRWCrErpBH5r2eGMs68LJyPu0Mu5yiVPNrnqHFrdoQxyTUQsoCnq448awUCw3QFvEc\nBPSujDLYztBK5aVtTIWK4buO1QdTu2sxx60h/9xOG5AlWAxuR3KzHDgV9aWzGaM3jjWhiMaXeXFG\nSubYQ4PeQ1mUS2TMtkFyWKSkiRCCVAa4Ic1rhORaI6jlQGsGtmM77McFTppl9BKUqte+WtJTWYM2\nHXKRyb5PdnEINh+jUSLE//bByIVBQcYkaYCtyMLdKzC0AEdRuk1rzFaGeB6GwkbDlKKTYUQ0fR/6\n66SPGUqQqEz40NdrJ+SEVp7dVJnUeZPXWXHsQ9VtXQuHNI6HQY/K0gRfvrdo6r8uRb27nvgSpFXG\nSFjhKAKh3vwMPwzLaa38cC+8F23etOZWHemXKsVFrVoYA9lfL+mytWg6r5ZhQpP7xptxNFjvFfaU\nPA4L+ggc9RvdjWwyCowwwmVFlG1y9sK8ELGzdWkSatnouZLVWWvOPrDgJafd2Yfx4BQ0Co/OG4dj\nYS1CTuZSGSM4sDHKDCi0Rh4bizv7EMD78XvJYzfw2I0I+WXhLub7yYPNvrQqfFwi9QGKP5rBkiOU\nuqxFRFHyxYKRDqEK4tCUZKxAQL2eLQrHMqNlFjhao7ahPvZ0ES21sC5gLGxj43QedFdP9dwVvni5\nyqoElBoxWx7O0ipr7RyWA4dmrK1iq9Piirf/mb/C13z12/mxf/w3+B2//b/h9nRmO8OxVI6HI2+6\nWXj/S85Sgq7JJmME+1amLGne1BKasLl6rlZXjmMjj4afJ9TIO8tkSqRV1sr/x9u7B+u2ZmddvzHG\n+875fWvts8/pPunuJJ2EdCCYtIJchNKKsYGgErEELNRCYwGiCHKREpHKBUhpxKIACwT+EaW0jEiV\nqES8FGolECCkIpdwC0mFUNBJh3S6kz59zt57fd98L8M/nvfbuzt2n9OkE2bV6Tq7z95r7TW/Occ7\nxjOeC0c691NqL+0Ei3BXJtNkaTjW+3H0pKcUaE/nZI5C5spUS5exkjubd44iDNRG4+KBD+Gveo7g\noV8xK1RXDHrZg05yZnBtxuXo9D5pa3kFhZ7Gw2zK5ctkW/TEXOGFkqUHaStG6jY9oucEJh5Jv4YW\nvZbc+WQG3G1BNaf64Ckb49Kf84hHV2tHimRn1vQuMcRsscL0M2NcSJRksG2CB8o0DpK8DtKN3jfc\nDi3Mm5RxpQQzBiU3bgkbrEl9zqnDkE7mxjDBUTFheHvTGvPW8EJZhSK1zAEoVRiJRfDYjebOVuqK\nDg9ONrhOAx+0LLJ9W53Pw4S7OTkOncocSTsZFZlVGJIblyLbxU+BSPxjft3YC+rCBa+0rgLL4vLO\nmerwuUEQQrvSVnTMFO2n9GQWbaRLlz9CTsPWYimPwTXUBbQjlLJag9k7o69k2AnHMXi4mjbXYZQB\nHk1BgTGllhvOs8uV11vnesCTodO94hzIhu/sxtEOtlo0iq3Ug4Okbs4jNiRhVy7c+QQ1lPSayzRk\nAxoycQ5UfIeLazwsFYWzQiONB2YWDpQG0FJqrLGyqmqYPINHYWTjYSyP1TEpJ0lWtjDu6qTGJte3\nCE4LmMotiS66ksQQokEJxmk8uyZebKXyisYVDicL7m1w3k882pztZNicxJKdHlb5lf/uV/GX//yX\n8o+/9xW+4l/+UhW2Otnv73jPuyt/9q8+Y7qYETKbX1HkfXJxY4xDXiVzLvGNtvAeRp3J5pUx2nL9\nYknRffktHDrBh4MdkCdh4BmSfw9h/jdGjLUFm5hy2PoBhNM6HOaUfnBx4zSdZknWZFw75+WS5kvd\n5wbFtIDrV8mbHeNJdiwnx9R0MOfkWc+VWDW1JB8TcDUnZd46kBXRPpeXiL6HmRMzsSomTljojLKD\nmIVyksIVnOmThnYD2ymIPsk2eXCpYZ8mRJfqTpTVoBant7Fkv0q/7mXS+6CUTdDeTAhlPJrBmFKU\n5dSCu0+Da+WwQYavaWpjZmemILjegzIGkSnDHQ/yzVXAn4L3QtMPPsogDsP3gQ0jQsY37fbw55CR\nL67B1YxCcI4JGUQENYzdRdWZKWx4w+gXOX4tIwQVsuB5+OSnGs/+Y30pwlkshiVTf37Jh5RFpGbx\nZlkMBVFyqoFt4lnKMN2UVJpwSi0gZglOc9AyeLAuKs9F490szkyF9D1bpOvsxrhOWkx237AxeZop\n/X+Xp/GTKzy5TnFLV3y0eYhOxcQ3p2bHyxmz1PeeV16JyulucrdVjV8WSs+dufLik5pKbfUBSaPN\nEK1mQjVbKixnzIYTsNz6hw2MTZAUWqIIigmlExv4swrbwdEq+73oOVGdrSR3p8qjk69j2FjSKd33\nmGwY8xRM5OFbA6Bi1nmaATPZ6/pMqnFe9MWXTjpg5H74PPaTwBhz8CXv+2eI8QOCh4CnV/i8Vx7z\n4Q/+EJMHet8AsQFGX9Nf2oqyKrTRxfs0yenDWSC3ghz7DEBBqXjis9F7JcpO68sofErF2YWIgudz\ncUv4ZLDc78Zg8851Kibr2sfaqBfFpU+XRDc7/ZpUDyadWu/Y42A/69kdvXH0Fx4h7rJ2TCRLbznx\nrMLFJzALo8gQKrthRYXvNCe2F6pLzovBXYQkx0ysyG+iuzH7oJhYN+aJe0idaLJaHM3AjDtLjg2u\ntuEPV7pVCX6WI5g5QOdgsNeN4ziwFFOqmpaGL97RQaYohMUmxwJAZwSMi7j205jWGSvyCTPaITpZ\nDCNmp0esYp3Pob43uz4FeEEmL7FcnrLrJM2pLbmNXMC13HhgOdFb1cmVWhL5LVJmJKUleCUw5qKd\nMLVciVAndW3KE2u2YsZXB/kP67p9K7MFNKzin3kLu5QXgyChG/VHWPTHQiKJMOEexgwdMnMk28L1\n2oFevCMZmwIAt23SCM5p2KyMFCWJcXCkXrINafkvYzBSvqjPrsnrYzCnHgKsUHPSXQuOLTsZ8DYP\namxkDo6r+J+7F7Y72Iuz1UkYvP/vfBef95P+ESnsuvxWGXDtnWdLeRVrKx8pEvtDAjlXxNFci9gV\nwz4bMZOCjHYmUFLjfnH5Ndz3jRqTkrLOCxrVlTjivhPRdMBbkBhtdLptykybYiHMKYy1zeRuS7YO\nWSUsqVGI6JzDOZ1UBKdP6MsRi3j9ZgAAIABJREFUy0WIj5ycawWD//Hrv55tX1Hiy83scz7/s/j2\nv/Dn+Kk/+59jmuCfZjL337NztfLisJ2Tm7/vnC9c+AaTmV086aFS1Gfi3uktOFJ7kxqmFVq6ltpD\nopCRgE+8m5KgfTJMScVMGapXU+EuEdToEgSkIAxf8VnMptDT66CGRAjtSC4mHrchz4PeOtcxIXcu\nJgrcTCc8adeB4WQ5iOZUgl6Su5nIf6kqgZhcvHD9TDOMzYJ+O8BdqcbHFC7tJGMEYwXBOhAz2M0Y\n5yBbY1sv6qU1tlrVtR9BDz1/FgWiYRlUFwQSA7oFaRNfuXrTCp7ClXspeE+iNGxugsxWmveMRplr\nus2Ue5tXpge9ic3yZtdbFt0ok21M2lqIjPVCuQnodhN2Fik6UvTbQkNdooVA6ifHFSeYpnHrtOxl\nTLnmKlCZ1LqUOLkc4n2FVoaoGJv/+LMaMrW8WoiRrEhWF+umZZGnCRsDNkSBW/qvj/taBrA28At/\nIWNJfaeM1MdVi6DN4RRyZTo5HFvHG1id1AbVnSw3RskNADGepTxIn03F+9iE5ollcoRkmmG7fgYf\nVC9Mm7jBqcDpDqpL1LGHOrD/+3//47z2g+/nC77wC8FW3NGcgjtSrIO28r18FwWrX4cwsFHlWtX7\nc25lmlOr0h2u18aJYKQWLSWNWpx7JiWcoxnX+YDZxit3O+dTcC6OeeNk0CK4XjtzSX0tG8Urbl2m\nQhaMYzL7QUQlTmJ6WJoOMAt8U4erkEVBQMWd4i4FUgFDXde/+m/9Gv7g7/sdvPSowpA04tFd5Y/8\n4f+c3/uzv2x1x4Z3vRtHakVci+kINsnME5YIIGEr7CSWdS0UoY7AS3DMQc9BGyFzmlaI6mAda9rE\nO8u3dTg11CmfqHQSCszpvG2XhFdUM6mzjqrUlGsbbJkcIVnryOTxSeZLbXQpRhenuo4qmmA2LJzr\n6Dy9KBpJ4Z1j4bWJN4cqhzdbvGELW/leJlI+ghcKyXDRsyaJbZWwziwpBg1BSRXF4xiMGPTcsHKl\nHabuNpNTDXoa79g2eYAAs8iXujdwb4LBMnnojd2LqKkpiLNFo1jleBgSI5VJNKj7Rs9GKbKSVDDs\nIFCiR0Ppv6NvWhrnpG6F9P1N68tbFt3dd6iN40guUx9idKk/tqFC0rNSzIgUVlmLgO1qVxITRy+S\nZyacxyPEg4vArwbTaDV1yvY1oqewOLE/DDoyqt6N048T3nAbLYfZc8+FFFf9uTuVr93kj1TO/YMs\n/Ax17qdIDjP2bX33w9jo2B4Ub3grzGlcotMXVCAP4CSKwPxuQYzBNSfbVsjWObZgS9PSKI04Va45\n8AhOtRBFS4YonVMtbJ7UGpyLsUUQdfIf/5av4DNffcSv+FX/DtTHohgZeJ/MC4IFRrBtyVaczZyL\nC0NsU54SvcHFlKxhcxC7uio36MXJpsTkEo5tk8enjYcxeTiS67FJ0WdNHFIUn9KjirZj8kEuKZ5q\nawM35xyDw5JjpMxqRicIMhtY5VwLd1uwla7CZWBFGV23yPLpKeWbpeJ5UpuFh4fG/XnjVDfeePIR\n3vjQ93OqBZsaeT0Ku8m43HzQO1hJolSxVoYk3DlFecucnMO59Mm1B+MYkhAvyCFnMlPFSwsiPWWZ\n4th6c+o2wZKTCbcuBpGVVhXTvuMUGxxdqinrEoTIuz85pTGLptE+nfq8eRAXWtKIRpPiieNqHGMy\npmDFOQ5K2Zizi1q2FKndFO84LWA03IKjD8mMbTArWJ8MIIcsFmuBzIBDnOFChzDeuB5MCsX21dxt\nVOv4bpRZ2YEREx9a3h5NXgutd9IH5MZMpSmbK5gzU4br043tKDzMSalFfhKIbjmHsvXacWAhH1+v\npoQKDzgkCx4xOCFKJmVwmm9eVt+6010teg3htk0LUWoqJDCHUcKYITmgReJLVIolbRSCBja5jCQv\n6ii6Gw9DChlsUtNlk+iukduNaOLM6nBMTn6TtKpo/Vh3vLevV9YvJouKhL4fSDr4yW+auHu1vvlt\nnatDvXGAI4y9qlhteyEm7LGz7+DPGtcOhw8ui6qTvCD52zg4ZqyXYzI9OJkkygMtdsZw7gIqxu0M\nNiYRO1YbXjdO4ZyqFphvPP0Ip3Nl3wvf+Cf/K/6FX/YfrkgXFrQkPPalu8LdnXO+c1rX8u6Nh6Bd\nGr07T5swMlJQlAJjJYmtGFlMCQIG91nxGJwymbXgORT4CNS0ZTEoMn2EwXKwi9CiqdZKkjJZaY7N\nQx16bNRibHuhmFMiqQw8Cn3cUn87UcSKqGaUKJjBXpLpQbE7QLTG7Xzm4eGBJ08bf/8H/jYv32uP\nIal8cL1MeiZtLQBPJ6f4WkK7Y1kl9e3Jw3CePT1INF6XGYw+CZMXBnaTIqxYLJdjFlGJORlFmOsW\nGyVW+vEx6dmpqdTp8MkpCu6ddpVMuUSneLDtsoasvmM+2AyiBJnBVlDszUhiSnDREedefbvYEVF5\nbn6Dy1Q8TV4bXhpPe+dkgSLPA8uLpLNN8vU2xdMP5zl1zqstH2GnLQn8SJRhF0BfJqyLgnbg9OH0\nPvS8dy3PmiXRKxlT2+BcwammnUvx5RxmsFWWH/NYalDRz3ympNbpEnKgqTBS4aU+jOpqEEvAVkKW\nlm9yvTWmm4OZksJJGSJS9ymcOQZHNW22hzGsL79XcVaLFcKl477x8mp1DoxtdmIUnrlxSvl51iOY\nZXJynVSsDtdW90s1omvJVKrifpRN8OMDONy6V0NLvTCI27bsR1zf/C3fys/6Gf+o/kx99KZfd6Ry\npeZU7M4tuqV6YtWxFRVi2TEqmz1QqrFvg9FCMuPs9Cmq1UMf4jm7zIZmThmlTMMZlJJstZKzkT24\nWMc2ZxsGzTkX4VDmCd5548kz7Gg8PHnK7/m6r+V9P+/LOb/zvfh0IoL7O7ib2vjfDIDaIaen0yV4\nlonnwbbFC4HEYnfgTiKOaU1jN4cqgwh5AZtSNkxb7YKxVWMMeQ9jEoS4I7/ZgBzOLIP+IIrVcbWl\nbJzUcO53HShzGWGn6Z7fZMNhNyAJ9hIqzNVFLZtNkut1HQ8PfPTJG7z9lZf5wPd/mLc/7uTc5HzV\nktfNYHOOFAsh3JXTVnx5HRjtmDJX6SoA263ZYJIl8IfGkfq7BoMokKU8d5fzAXUvvK1MTlslmPQs\njDmYJ2PLIAi8JHULrBsvbYVyJxVVG/pcrmNgPTkyWfIeHVTu2DawqxE1YAgCqF7oNjiG0jpqQplB\nFjVgfRS2MoEuxtIo1KJCP/C13JT3Q075riAGreS+pkl5tqnA1lR00F6DjeDaEqxTw7gwmV3PeF/U\nwzHGLSMeKw0/jNgGOQqBU70zvJJjYCufkEwZ/2+OWVeMenOsKm04mZQsjBREVkCLxCYhRFYoXtk3\nqUL2Yssw+JNfb110PfGpvK6BtouT5EidbmeD62iEiU9Hut4yKsPaWoZojI4pk4piSe8y85BLVsco\nwksfku5KoygYxQUDbaFTJ8eK/3Y4Yili1gPKj0P3i74yYeJ+109QcP/q3/sgX/7z38d/+Yd+P1/+\n5V/G/plf+Em/1kx1THOKVnaMG1FelKFckF8PaBfnenSuM5b81bmWla9hQalJjGQPICetdcowrptz\nmIqXnBomx3HlfLexO2xb5bQb9xVOZ8drUr0v/mvwt/7md/CsL9pWDX7Bl30Jf+k7f4Bud9yZPv8c\n8lvYiu5PL8iKskAtzqlubEWF7TjkfDYMIIk5aDV5hNKXy24UklKd4zjYMwgva9NsUAbSg/jK9lpb\n55Vq0ptMstt0+mVwzEEYbHXjXJxalMd1C7mcU34F1CEbxnD2MPbq3O3OaRPPXFh2pdTgX/rFv5T/\n9U/8cZ48DF591x0f+sjruMO7P+P+xUOS8A3/x7fyhf/Yz1zslMFAlp/uGv9H71wOJWrUadgmNkbE\nVLd9TR4OoxaTMCaNnkUx53XyaN94fBfstbJHknSeNGf3oOYUJOZJ5JqG0rFT53za2Kt4zYlzbY3L\nKDx5OuCYXI5OEuy1EAXBDlEk5a1O64U2O/s1ufqtVAqb3fwmhmh4BjV2Ntd0YgTmxjkS0KTG4tm6\nBZZQSnme9pwrQsgsnkfXwxSv+uxk7rTeKV2HcKFznZqYj2E8ezCwvmhbyTw2GSvlYEZ5HqIbOelt\nQmxKVp7Cd3uDsk9mH3jsz9/H4cmOIFbH8KqkiwRqGZQaEppM8O3N68lbFt22SO+WS/kyBm7JNJ2W\ncOPUah/Z1u/1PEQmm3LhITvTgotPysWJIk6hxWQfxuGQ13Xij2VeYdDC10gsCaMUNGuLuZRjbZXa\nssQJ9uNUfD+ZGc/7/sn38eqrd3z1V/9W9vE1/NJ/+7d8wt8npbjggdFFatczJsxukFzHZDS4Nnjy\nMHnt2eDJRS76w1PKJ7bn5GxxUhWnfTEjq2MN7iraemdyqoWzwxbJfqrc7cm5BOc749FWuKtO2eXJ\nGkVY2rkYx6GbfLfDL/jSn8I3ftvfpgYqIIjFoWBZ8YblCZy0NM4uc6MD4+5882CVQAYD87qKpviV\nJYQy3t1tirieSWMuf1awHXbgWm8G2GIEzJz4aWLLZrHuG3Y0zOC0hzx7t8DQQWcu/9W74mQU7SIi\n8OzU6tRinKoEQFtd0M8++WN/7H/g5Ze+gczB3/me9wM3iOcFkfB7X1MX2lrSjiQjluZf7lPHED+9\nz8mRLk/lCXsaPYcghAzuT4Z75WiT8AoJbQxKBPd3lbc/Cu420b+yB+djcIwkEftCiV6S1/bZ2WPn\nvhoeg7oF3idWgj2Ss8si8ehl3TPn7OBeuc5BG5OjTUYrfORi7CfnbTHx3sBD0SqZUJwxOhYw7ErE\nxnmTgGUsPJU0JZhMY4TBUIgqCKYcKZxbxpI35oQtS0qw1AQ0Mc4xZUBjTvHJuCbpRi2dPlWbLJNH\nZz1ftVZmXsmxMYvG1pFKyO5d+LWXoGfDmun5oi/J8MHJnN7V+MxsMALzSd02+Sn3oBWnjMn148il\nn6COvFWhudF+5pS2OSiiwXjiywR/do27RyZnC459Uqevm6cutJhsHxPnGALuYxbKhMMmp5lcDJxJ\nv2o4rBFsVVE2ZuLuPsvkfhXp2iDLC3ihaZnLFj8+EmJDNGLhQvr6k+SND34Xb/+sV7g8u/CVX/21\nn7ToKiFiKdWWpeUYSvu9TiUPZCbXHhzXwXUK1qmLON5XOGi3g2MZjcyrnJMuiL7jBlSxEh6VE7UO\nefyGc78Vtg3OZ2fftTirAbHD6WTcuwrqe9/7k3loyUuPgvP5zNteecQPv/YRePgQ5aV3Usot5lx3\nZYyP51Sfwml3xtkcJxgzJeo4khmdI+U0NTAlYMxBRHA2B1eiiKcxZyxLv845pOiKVAJrH8L9Tb0U\nw8TnPXkyTlq2nouxnau6rnDmUOjjbVjZXPl3xSYZlcok3Phbf+Nb+CW/8H28OLo/8Uv0IkLe+PCT\nCSNVOMKwLeGYSoddpP1pCOMdSVykGrwOuK5odizYK9QsYlBUQUyZYOzUYrx03rg7K59vdOPh2iTB\nnq4kXFu+uKYC33bRqyIUkVXCyZj4mDw05+zJ/b4OEE+2cAk0QsBd7/D6JXlog8cJd9UZWXnUN/px\ncI3kGcvKtZY1talz3cLZtgAL5nAsOn50wivPZiMW53qMQaNx9pMUjCXIcfOLSOHuDMyNhuoBhlgP\ny4NEVORY/hwOVfCgF8etU9IZo5KbYcv284SRYTzExIaBOWcvPI1J+MYcDfPE2DAbEnykPGZqNXkR\nh1FrocagDKfFYLy5ydhbF12bCjjMSGzEUo+sRIJZ2VzpBT1F9TqYbN3kneso/RbEYuip9E46tWzi\nki685+EWHYEtcv2gIa/MPpJzleXb2YtO+CkvUZ8rZdTyuTnGj4V0eAEWH/NrxbDnGtt8yC6vm3Gu\nFdsqJ3tEknzkg+/n5Xd9nv78x7yYJMxhCifM5Us85FmsyBuTiU3TqNTbIH1JqDNpfYVUZhBMrtm5\nro3veU6iajmwWeFUjfstudsrsSE2w2acd3j7o427DYpc8AgzTiXZqmEBP/E9n0UuLDV7o0bh8f09\nf/S/+yP8mt/0lYrg8TV2LZikDyVllGqc7zWeVowDmdx7g8MnNiveIRnYSEYd6s5CfM7b/cVgzk5B\nuLebTNH3lGHOxRdMgNIahBhLQnzenDsr1LNoeKVqx5BUMqfiStb2poJOi9mYBLHBL/mFP+djnoI3\nvxzje3/gI/IMMaMUiTXokgzry2uqKel4vhBjlKOw9ascwWrRQYL8lAdGVHh5P1N3QQ2Wzl4hXBar\njcFdMe5TZgF9SjUow+XBdnaKb5RItiqIw5EXwjEm+7YsSC1xpjDLZQMZXpEQoBOR5NNOvKTxu8/O\neThtd8hQqMFwGIPr0ekJW6mUCPaa0MBCUT8zgpENaxMPjehejN1PzMWOYk662YJmbAk6iubEOcEG\nl4StTlor1CJ4oM1B2esq2Mqii7XcGwyyorisg2UwBc27YodmMpbZfPVCZmOuRIo5BlYHZQhuKVaJ\nmJSiZWtMQ15mg60bHm9ef94a0w29VDGDu9rlCuTC76wORhqlVEIREFiRysWGMTIkVUyw6JQRPPgF\nHxvZFecyNlOHMI0u4h1tOm4NOxKvyTG01T2ba6McS3qakgxXXz6pS1b66Vy5uthbrVyKa0aKF/jQ\nphzVpgrP937oCdfZubx+4e7RTpvwK3/ZL+KP/z9/hYViESiQb84Vp7Ow2yPRUuyaeBbaMTl6l1y2\nq7PrvdO705sizyPhaI2MmwpM3UDG5DwL+9l4aUvuT5VSHTdny4GZNumv3AWv3MuSM2JhUiZc2EOu\nY1qoJM+eHbzjHXfYhMu18ef+wrfxm37ziy6/8WI5xUwR1lPmIKxAwJjy0ai7sdtGzkkZUC7AdDJC\nC5QpLBKcfJ6nZaINMiD1UDs3nmeSs67PC0CYNDZgFnLr+KzYtrbjdovOLlCcnFIZMuX34FEJH1g6\nb3v1nXzkhz74I54M57d81dfyu3/nb9drEfDoXPmMd7ydz/3sV/nh1zvTZExEV/FLkrJMdbaiLlP8\nbKVpb+eFm6R2HYbTmtzdeibbVjifjD0KGQkzqZZEOGHgRSffXsQXylyjfPgqUmAmKmEBHkYS3ekG\ndQYju/yAu0x/KBIgVX8xJz6roUVsKbRelzJtl+kMybMGrXWul4OHFuQQfbCc9H7YCPBDkemuZR+j\nsG8yzMFZjmfydcm0Rc9s1E38swnkovmOTCngvGHdmX5go3BZ+5GTC6+XKY/8iy1z8XRXGFj15x7S\nB6GE5NJhilcULjiszkmPorTvHmArAcTGahYXrcxMh/mU3W35dK0d337aJIgw42EUnMBs0Ka2xy1N\n5iwmHmFLjSXFZF+3O6JxZBEofRRanVzaZC+Vy6VT3CBF0J7CIBgzpBYakx4TOFHb5DgmT0P4rojZ\nYEXvmkQHqXEubzSvT/1KkiMXGJ5qGMZannU1VezFRCULY3T4xj/1LdxtCr2zY7Dtzl//ng9Adnrq\n9vZUceq57Oxm0gYwjMtS/B3HZAzjenXJEcegm6/OQm71OSbNwTeJK06bzGzaijPZ4sqWhUjRs3ZP\ntrMR06leuD/DozsosWLNXQYdXhWnJEpX8vjlR5DwcEzeePJAa4OHhwv/8//yJ/hrf+2v8C1//lv5\no1//3/MH/uDv5yd80c9kdGjdeNqg964srWXleH0YSKZexKzowusiiqwNe2fgYIr1mXPSRtAJTm6k\nDzavygVbFDvp/dcInBNQLIIXo8bGqU7qgj9sOFbFU60hCahjCh11F+VpChsOD2xM/sJf/G6+6D2P\nAdj3R/y9D35EfNyE3/Of/Q4ykxLGo5ce0drBZ77jJT7yoQ/w8jvfDaBkiwptpIySZpfP6lyJDH1y\nvitE5vPDt5hUfzUmuRd1m3W5/GWX5BRxS8WKkBlQAWpds6Sr4yxhK88tKRaKgl+Mj25aWobrxXFn\niZCUn3cLYZ0m2fqjcK4V7g/nWU/IDRG7jOydVz04mvHsSeVpn/SXJLCYGMfyqrVpMI1oA0POYR3x\nPrcyYW6UFTnUhqbB6FWsnsHCpuVPMtN4WFDDSKPEiTY7m831wicRk9kFa2QfWIqF0ad2AeHLLYzG\nniHT9amGIVhBnUukNHuTZmCZ8ximxOQMPAfXLHJEnFIEbsOw/dPEdO+L0xcpv1yTY+uy/kP2htYg\nZoInVQJvFZKEk+n0jghsufiDImaOOXl6bWy5ElZJuut0OVaqQkuowyjTaeXK5VogZDxzmKz0pHZR\n0RiDZW4igycVzE9WYNfwqAaCNI3ZbiqSgByi1sZoD7QCC6Pd/rDDO97zHu7OlVff+XZef/11Hj16\nmYeHZ/yx//YP8Yv/jd+ornkq+601uAx4eEguU9lwCPqjH4OnR9LG4NpEjXp4aLSWHANwvXS4qTiU\nxnUpmQapLTU7p925vyvcnZxtl9fAVjYebclp15KoLlzLpviKYVpA3h5qMtlPr3C9vMYPv/YAHxO1\n99N+2s98/u8/75/9F/l///K3c//4XaKGmbiVmZPug+uTi27UcOKuYEUH8TaUOJumBQwrSvvaVZRs\nHXB4V6S2SQE4SJqp2DCSq9taIHWq7dyVpBY9C1HU2YQVSdBdycebOyWTFkkM4apmeml6ajkX+5kf\nfF2bczMlBdfFmX33Z38u3/eB93M9ktc+/FE+9z3v5tnTC1/wBZ/Ha0+GTNjXi3sKsRRyBMZc4auD\nKPK0uOHiJ6DhzJqESfCSLo/ebRW4qGJTlDCKQufEh52LWrd+Xd3wWPx39LOdUg1JncbY1UxE3tIk\n9PVviktY4rH5Ir58Xykgj8uiciYKIDgVpT5IhMZ5Oq3t9HT6dfK0T47ZmW1yTB1q126a3rKxeQGv\neB1sszA8OefkAYMOvQ3ZlE7VH1bemxuUnux7kHNqWGgnQAZDMNmr6IfpseAKtMSzxH3D/Qpjw2qn\n9qB5J6+SUZPGaHNNTXCKslwvjEKnUBTOe4FauxhCiaTXJh+QT6vols1W9AcM65QrWA4oiQ9p5plq\nqVs2LI3dE6VLBJmDGkaJwUjhd5uZOqtd8ECbgyxFI6Ml5oU5D+Z0pgctJtaMawxqL8IOiz2XGQ6M\nHuvFmYrg9q5uZJikuzICW0uU9YBdFx55+//UQb0oqNNuOVW3u6F/kW+CXMa++Cf/BD74Qw+c7p4y\n0vE2uL/f+dW/9j/gF/+bv4HRoE2jD3h6TS4NyVyv2kj35b6WXVr6y5E8uTT6kTw7OteWa/sqjvP2\nnP/g2ng3tLB08Za3Wnh8LmxF/MZTSXaf3N3pQMnV2cAyp1+MD24KnBQH8/t+8O/zzlfunlN4Pv5y\n/vSf/4t80Xt/On2MlQg8n5sV6bORXWXrAmjcEk9fseuSP9+WKONIxlyZzA6+D+pUMQ43ejfF7oxk\nD3UdcjpLKgpKLLWzRaUUxLG1BlSm696X0JJyZtI34zSMYTKenmvvsJkcw7Zwlp84JZbk1oFMvvO7\nv5OX7u8pAU/b5O++//v4rHe9nRJJb0/x7V6S2X7DvDUZzRQGmBky8EeH+AinDvkgBInVxMbATVh+\nKbk+J38OfWG2Phctv8oa6WztNkRz0ufovkbi1NK3gqS5id6N9dzLU0JFOArYyMX1Bi8SMkxDy/Oh\noj9nCkrCSb8tv43sAzZ45DBa4fWhbvEBPSsMw6WzVg7ZgEsMShqXrNDbi6bI5CHMkNtY4FQUEzXQ\nJHRPxXEuy6z8YezPGUzFklGdLRvMSqRsL+cw1G87ncSacNqYk6MqT8+7U+pKohiaxkXt7czUJKc0\n4r4YV8GphmTXb3K9+X9FH5T4tBP31Rl5WcKHIl/dSCbXheEUFK9tlOXSn2NQKJyQsiXS2LaNGnC/\nByUKpU/KFGjd28G8JVb0Qf0YQYIv6limqCzP+lxLPRXVVV0ZrJhxgysaRRrKNbpOeKYfafE2bwsc\n/bMVFYbNPnmnbKsrHlf5Czy88YzZ5O1f65nzucLRuHZRr16/JG88DC7PJs8uk2vrXEfSmvwMuiti\np1iRG1Kd1GLcnYNqk70UKkEpgYXikrLDLEEx51wG9yd421l47V2FR9VEATopOn5z4a447JbUPRWA\n6Mav+7W/mne9svMZLzlvvw/e9fKdXKR+BC/ZzPiOv/ldvPen/HSOljy5Gm9chpyXxm396MxpRN2I\nEuwnERebNZLJGJ3eZA4zEXZ5tyeP7uDRKUVpOxn7Lm9UdxmFK5k2mEOHTHHjLpxzKdyFq4XwXO5v\nG6xnt8ZSMElXwjanUounNoEVYZqlJvsmjwgFfwqqSnvhNFfrma/5bV9LH4vNcgXrk5MZv/Prvk45\naGMyFz5pJkZILYpoclTs2nJ3s6XqCp+rsMJeK7UUqfBCXPUaKmi1JNXlmHbLFkTngQpVmkzOjfWu\nQkFxP7uZmAwsAymWkx6s/L0X74CHiu++aXEXZpzW9/H1e2YmoynLz132rJjyzMbUe3cgp7PDtCtI\nm6Jsof3F9dp4+nDQHybXpysrz5I+ljfLSJyCheTmNfS8ZspsieGMbPKuKFUCH+vqUk00um0mnhtu\n8iPGYIRjFmoCbCyf8Mmwmw0oIhCkYwFbTCIkI/bi4pHPqsWlV3kzn426r9y6T6fojmlcU2qPwNnK\n5OV7uK/GZso/c3c2q6p3XDnG5KG1lR4w6WPQMukmKtd+DvYt2SLYN20AywbDCiMK7UByyuvkEpNn\nI0XTAjmdzUZfWGCEIqOLC6cDne5eoRYt8TbTSe3D6F3LLOat6Eq+t6+HedO7KX+Ft7o5wEd/6MMA\nPLTOtu9sJyWyDoxr6/zwk+QHP9J47aODN551PnrttMvgoSetC+OVOk0v3XQB/MW2FRnibKfCVjte\nJm00Lsfkeu2MJteyR3vyzkc7n/W2nccvB2+/dx7dO3f74H6D/SSeaHe4yMVE2gBfBcbh6/+bP0zv\nLxLqZmp6eUGLgpcebUR2N3FCAAAgAElEQVQ4f+Yb/08yc8VVj+cvq/sNk4XWBkdL0gttOEfP1dEm\ncxR5kk7tCsKHOMIhzwEnmdb0wN/UYEsEY0VyYDPRw6Ik+8moLt6pVE0JdMEC4ZQ9OO+Bh2NF01U3\n8c+ryWP3tBlbdepJIom9ipZFphgUsJYs8DVf89t0QFanpfF3P/Aa9483/sB/8XufUwJLGpTElqkO\nOaUYQxTHfcoC8TZFySBHOWdl8YN1yOhQlg4kl+GQdgQFQWKwDJducMiWRFFxLPCm9MnnBcBefIZm\n+v7aAUq0ESWZoWJsZpQpoycvPOcrJ0aaGDa9NS3YetLmpI6hWKq+ItL7OvhWsMHTo0mll5NrExFQ\nzYgj+oMpBr04UYLBlAkOrKXhheTQOxMVX3UvzekoCqkyRSu2gfltkSofiY6SV7YiEUR1o5RJrUlB\nJ5D7IGJyHJ1JgxgrJUfT/H3A7nNBO5/8emvKmLGcFEQriaxkJPumB2E2Y7jR2hU357Cgt0mG8BYP\nYNnhnUrh7i44VWerwbZwsolUb2mBdRWEnp0xjHJxzneFlpO9O3MlCc8E88HuVTlXoXC624hU5vIu\nNY1Wbio6MRWXAxImFLfny5UfzfWzftbnAaxQRXhyacx25cmTK2989DWetsrDNWkNDmyN21Jo9d6Z\npVNj1zg7ktnWkuBItq3Se6d6BTqzwQFKXBXcxLnAqy+fePvjwit3wbbByQ1ssNeCV9gNjpFcpuGz\nsG86kPbKMvKQdeeYL4ru6XTi2//Gd/NFP+lzAOO0w8uPT7zysvPv/cbfyFf8ql9DO4JeirpARE7n\nSFofYgrMCb1CiIExB1KZkdQSIsbnLfqlIf2W4lAkotBhPw3MpWB0btp2LT5yBLZwfnHJRcIPd05V\nXr2bh7LZAMbkYk7OIdPugL0m502ddZhi3fXsr9GcG/NP05PfDoA1NeSENz56IcxX0Vpd4xBlkmyY\nV3KoE1Sck4vG5/o7byHFj2v/Q7ahCHuzF31TyvXgxgzJTMZQgdxWpxpVTUQ8N6558+bh1nnfyuYL\nfE1f313KP1+4L6tLz4UHewB93Ysw5MU6V6RNMvsg2+RKMLpSH5gvyHhpK5NsVKZ1HtqkRKH1C+Aa\n311JIbk+iDkNzwPKEmgVh7GReeClUPvB1XRMtuza1UQw13PhKVe2kWOlXxgRsiNoaC/Uuxa7LFhn\njmREYNPY7wfjqinCMigFTkUe4pisMN/semsT85zEbWs8k8yD0QqRHY9Qt2twmcLBTiHvAA+NJZaF\nuk32GLx0Fzx+KbiPwDZhS21CIBI9fXKZ4MOpdZff7uxYl6b6YoO9GWMzym48qht1V0X1ZU58oz21\nVMcqbMcWZqf/ebEH+5iX50d51dQDeT0mH/nI6zxcGhGFMZIv+PzP4Tu+5wc4Rud3/6e/g5/zJf8E\nP/FLfjm9rYUKS2uenWzOmJ2ccKWosKQwSjMlrwrDDpo1rgY11V2/+jj4vLcF5bzGzYU92VjdiCXn\nKq6zYuG1HNqqPX8APvrs4NEpgORvfsd38d4v/sl66cqZ2R/INB7dv8Sjl+75nHd/Lj/9p34x3/St\n38nmhSO7RBB9iBxP1+juxmyDgV7cisIbdy/L+8Bw60wqUQo0/fm5eNiWRilFhS6TUupipARjyJrS\nikqSB2JkzIFvzr5tEkfUF9CRPPKTsni6hrwutppsu7GF8rG0VBKsYOv5GItDm7k28w/w7nd/Pt//\ngb+rUMvZGUtANMaSKOPLnS2YNuRTkKGlaiSWA0+5rCUHTqHaQuzLbWl0oy+qOEgNaM8hsVitsgdr\n9OZTKLUfz0Ovy/Rl8PFmSrdFG+udluHNWuD5DcoQRHccEy8FL5O6lKtbJiMSWlB70nNjeBOtDXH+\n0w1vSV9R745x7Tp8+9D337aCZWMQVJfgYnKHzcGYYswMk01mH1JphiXTOifOa6Jyjt5wkmMJvjor\npDLX51rFd78iX2mYjNFkAp/zeSpHyQ12mbqfArbdZC2aEDl4+HS9F2aXGmQkMIyUvQZpizuZk94L\nxiSKus3iyoE/VeUulVPhznZefhScz64OdG143YzuUumw23q2Al/x0aXqBPXbyFNTC5MKtcoaL24u\nZOWFd8Hui3P7CR4+48XI9ekUXBA16lf8pt/DH/l9v5nXXr/dbZ10CXzxT/zM59/0G/6n/5pf9qu+\nj3/t134VNTU2z7nLojE7eJBMTtmYZTmE4Rztqk54GlsxegSPmJy3M5/9auWzXy288kgwQW+LF20Q\nJ2GYURYeVnJ1RP//n/l+X1zDj71PZnzP934/7/mst+EYr73xlNNJKrfXPvqDbDZ4oGjDnnON1onP\nwXCnX51SBENldcY0SooeZrHkqqm4mERikbm2zfr8BsfwlQtmtDHYS5HUu2hkdPf1aQ5q2dn3yWkt\nxGrRfahlmVmb0YeWkscxqJtz3oPTJhtHM3W65h9zh0wFzl344pxOmxqJ/9Jf/9v8ol/wc/m2b/uz\n3G8wjsTmleJ34E5bgokcKy04tLAKn5ymy/CmKPHBqy+OuWxF22pcBoJMSvUX3HEJo55/jrHilT6R\nL8gnu26/M1dhX/YtMHke8pnwfMloLrFLX9FDuZaFNcUAmT0locWxEDbeZ6dEUE4qatEa9ZACM5c0\n+EYxjJxYOfGEK9vcmCn8dwtN2IQKrvNCYEI4jMI1jH50rseamoZTrHPMjTb1TvocEAetO5kFptzt\nMk0hlsXZc9AjKan049kMolAsVyPgckuzyqkGJY0oTiHY7JDd4xzPudmf7HpLTPfaOpejYUNkZk+9\nuJmS6o0x6eXKCOO0LPuidO528UhfvQ8+83Hhne8IXnrJeXxy7ja4P1fZCbrxyPVAxjJxeakG26ny\n8tmIWvAs7Fvwynnj0Tk47SxP1OXhUGQYbbAwwtv78ukV1E/1+tqv+uVv+t/NjH/9K341f/qvvsGv\n+PW/nXsrSkoohnknigxDokC3jcssXB6SNhvHNWHKLDmLJKNmxnkLPuNlQQqnE0SFczVOd7DtSSnO\nZkpkPe+657cR9B/k+vx3vQIWtJHs25ln18bl2nn747fx9MkPP18AufsyLnFmFpiF80lijXoulE3G\nM0QuxoOEBJnC/I6p+JZSFa2dPqAo5qlEoVZfMJK6yW0p6Go42zZ4dFd5fDd5vIsj65Efsxz153jn\nthZDdf1ZlkXhzXRojBeWm7druTJSXJOBTcFl7s6f+sZv5pu+6VvIslNOhW/+pj9DWd6gIudPMnzB\nLS9gCo+k7kXLynDKehVHwnUsx6wUTfDWVLiv7xsvFl2nE5yLMMgfDUJ2gyAcMYGqi21h3H7G1V2v\nil+qs5XbxCTZvTvaPqdqhK3l9AwZ9WwEscPd7tjm7CV078fEc0rhas7D9co2gihT6SGuSUeUOKfi\nlFrY9mWXWQpWmpzotsK+i+HjIQ8XKy9azqN3+tVluj8nM/oSOE2yKNfteQTSkLG9uaCMMbRc69aI\nUqiL0zhiiP4RDbNYk3nin25cz8nloVs2YFbG6Ktr6BBVS4+rU/fJpR2KFbedSw5ONajVuT87j2rB\nS3KqcudPM3IvWib1zmgq4obR5mCz5GE60R64Oxfu6sZWglphO4vKE0XdLWZvfXp8mldm8nBM7k8F\nnpvRfWrXyy+/yr//Nb+fa3fOZjzLuUZXda6X1girHJfLit/uULTEzOj41CKsrA+17MlLW/DS2Xnl\nPrgzlKjhghP2k3O/5JUlPhXZ4ZtcBmNIwPLDH/owb3/1FYxg3yt/7/1/hy/8onetLKnkMkULjKKF\nArl60CF8cqLOQlguosutb7MtLDQi6L1RIzgmuA/MJp6OWWG6EZnEoqURkxKVs0NZtowshktfFLYx\npiaEmcvHN1chXzxa5lJBAm63IfvjboOgjMVuMXV9tnwifvY//U/xDX/y/+Lnf9n7+Mqv/k/4tn/+\ny1ex1/JHFCuHGz1xfe2c4qW5oiBeQBodCHn0VvM1wrN+Zt2xCH3J+jFf71O5Op/YCtVvkNz6+Tqi\nW6UL870dRII0kEIsknMGp7N4s70pkqvPoUOqF46QKvJRrzy5Xik2+ajBvIiOOqfwUzdn3+R5HA7Z\nutKPS9HBkPJkjpB8OGoybtHr5uTyWVZO3BQzJMXcyGl0gpZSDRYTDRYKOTtpsqElD3CJWTBnmBM5\n8OJcGuy2ce0H0507DO+uYACWcMMmg41x405+kust38d6To43DloTVaynRh4fIdMaC/aimBRGoa+/\n6N02OW8751PhzkWLOdVg322dBMLGaoXL06AXRbfcZKRHN6odlH1n35NHd8m5dk7njbuAfYdS/sFV\nZz/ay8wkrwQ+1YJ7W3Z801/6bh4uSkWeKGusL1/gXEKaFgr/iDR2qzSHdh1UQorAkEm2uXG3Ba/c\nB2977Lx8gvO+Io7sBeG9Vn7MAj3d4Ot+1x/ka7/6N3C5XDAvdJ88ee2jhBnHGLSFaYSpMxJ0BH0M\nwvXShDt9+looLcZGkZBBGJ/J31YIAzWgeTyn4JjJ73aLhptRY+nxHZHhF07rptTk53dgbdhr6O8l\nbin0LnjC8EWBkiDnk/kzGzrsiaVY5LaBSn7ez/1SXvvoU+4fn+U34kZJdfPuRr9VtPW1x5BYo9Qb\nY0Dc23RbdERtHaYma8Ce0xen65D60Tz7b+Y9fYufgpVozaJtgmTIKfbPnLfu3ziZXOXuzBg2uEyj\njMLISZ/G1p3jOhnbpJaNN2pjxqS68XCs4miD+9PG/e6UrbIzSa+Yd3wWhiB4xhxrzyfBRDXwlPIN\nZLyl++PMNig4F4zmSWSy4TRr+ChiQFgn0jhwsCuxVfqYyoQMYIjt0HLIC9inOOLFcCuUOil1Lvc6\nhy5ytr05eeGti+4dgZ8qbxyDtANzlyXcubJtCaWQOKM5fQRzahN73o2X7uHRyTjVYNucUxHZnbUV\nZprMPk6TeklOdSdz0OmSbIYgiHOFrQz2rXBnk9Mm0+SIf0gVd12Xi8D+F/3Zi8t4ThEG4O4cnE4n\nXn/ywLd/8//Ge37GvyJxAk7JSQltzntPKW12YxwTb20tYlBIn01ZGqavePMJPQkrCoWMIs+C5LnR\nRrUfu4J7u77yP/p1fPVv/fUcfXB3PKPenfnQhz/AtQ9Gg4cuhgtzMlC4oPlULpknYtEktiKb5lwK\nsbCF1RsxZHRis2KR9DmFB6eMR8wM94lb0eZ40X5iRX2HSWSQmbKWvHFp0xclao3La3UghZjk15FK\nsohM+pAk+pNJ6G/JIi8+fP3i5cdKmEjpBRZveVmCTsOWrLXbimgyHZaOivNYhXcvRk/wZQA1xuS0\nyRHLDU4/To/9x37Z5dr8/N8dTQpgzyPG57qPcyxF44214YYvUybbkii+GATG+Vo4lcHrcehrXZVF\nhkFhUmYjKtS64R40g60vaS6hhI5mbKYp4dqNvmCco+kz7ohS1pbYZ0O7qLSxaIkKbw0zuusAzVTQ\ngrl8d8OSGQ6js7FYDwGnolghQT9iSdn8/9p791jLsq287zfGnGvtvc85Vf28/bgvwBeD20BiQYJw\nQgKRCLFkhBxjmetYAsUJcYLiKE5iC8U2QTFJiBIZyVEspChPjCEPTBxiiCGyDBiEgYQAvjwM1zwv\n3dD30a+qc/Zec46RP8aYa5/q7qrTfburbl2oKbWq61TV3nutPdeYY3zjG9/ndO8sRRAxSnmLme7J\n6Ux/OWguvcN2CuGUk0mZZ81ybkebOqJRBtYaDYnNSWHWEPuYizFNEWjEBXWnZ0NNiKmvqs5uA2Uz\nJdCt7KaYzz7bbdjOwrR1dtvLpdW9W4+cbW4JrGN90zf9Z/wbf+bP8/Q7nmR/88OowG4zsdsVrp09\nztf861/FD/zUl9Nsk1zigvmCmVJU6a6UQ6f3GI82h8MSmgBFlPNm4ThrzmYulDmyyYKvc/My+JV+\n+2DxVpYAH7u554lrJ7z78UcwM5577jnchQNgKdjdltjc3pPqU4TSw/urJPc3snFZSfhKuLOqjkmz\nhpSKToot8eC4RtlbJLUFRlDUtG8alKnRrCqRlXZPzmxehFsGihycEfHA47J5tu+knGZQ2z4eKuFQ\nX7PkgQ8mlgq4CBuNDE3LkY5Wq6T2RHJwdTAJApPuODs9NoDv9rr8PpoZvY3UeoZDAzzuJ+RYsIRo\nzbDYUdWUmQSKs3ThpBpyFrbw5sbijh0KVSsqQt1YYqPR2qtS8amgLXi+0sPtePGZZmHf5D10f90a\nFzLR/IC0iaYtjFpL2M/4Ek3bZoVuB7TMIYaTEOroVE4e6obuxoawvdJJmSyb/yoYh0gYew0RIi1I\nazHj5m+xkXbtZMfZQ2c8fHLCQ9uY6T+dC6c74aFZuF4r82SczHAyK6enyslcOamF0qPzqSWI5Fpi\n+CAmbCRI4DXKvpOd8sh15fHrlWsnwtm1mYevFU5PlevXJ66fCtdO4Np2yBd+XH2Dt7z+x7/9E7ds\nyF/6xx/k3/1zX8emKl/21f/p+id1M3Pt7DpPPPEw73nXk3z3t30j81aYajA6ZoJTfGE9Rwudi96x\ni5nzfacdOjcv9ryyX7i5dFoPMfKznXJtO3GydTbzxFyPX2IVvysBd6yz7czf+7Ff4PkXX0Fm4Zd+\n8ecQbTkf7xz2zkWLoYjeB60pB2gshh+0Bs1umiLozBKZBukqDZG5TuqciHJtFw2STZmpRZkywwVi\nAyiZgQ3ifuzDUgkfrJrBLWlo3XIsmRDfB5B0Phj0QlWlD0GOXFdUjLeshIbXFXS2oOgVAYzV9WJt\n9iWbXxNegDgQbBxMeq/C7WuXe9yvcbCLjMrlCKHVEseTelIx1dHq4W9YM5hp2CBtN4Vru8q1beUd\n15RHz+D6iTCdWui3ENx/M8e9hyhS61iSolvvtN7X/pJ7jO26VrR3NlKotXOtFq5tY3R8o1FNDWqK\nSg05yIQ0JamAvRdaX45DJ0Uobiy2Z5HQCG8LtH3wyU0W1GHfLIxzvXHFbARyeeLoNX8o4j/w042L\n3sK2o0GpYbh3WitlCsnAPmhAONtpihLTnVJLAPMzbKcYT63iaxlsqSVr2SAqImOuBVFlco8HcMrG\nWYns5l5nuK9eX/sffxvf8g1fxY0brzDttvQk8990eMcm7LsfefiMRx59lLOTiWma+amf/iV+5APP\nY3ZKN8ME9nvjokNvxoU1zl8RXj50eoN9b+xb1AHene2sXNsVnnxYuXY28ehJ4ZFT5eRUOEkd3c3t\nrC3eptUMzvfwwz/6//D+L/t83vPkU/ztH/xZbvgZNw+Nw97DRFOc2YWpOJs5J6skp8+AXa14hToX\n5gx2MbobjZBgQwzhfLLZ4gERENKGvfdsvAlTMjNikivoghBZruLs89+3JcRdlMsi7MdgDbEntUTz\nZfxcL+OnEtOKr221xbosDbo46TxLXqODa3rijQDLev3x5+OwitepE0B6At7F7/ZOy4jnFA/R/cHP\nbWNMOoYEg0rXYO9OdWFZwpHYB6c3ByOWHtOJF0tnadGkqhqYsKTMa4zIAxJ9j+5Kb53zvlBNaQZL\nLyx0WtJLlyDAx5BVL+hkNFOqGIulO7MINw5RUbbuIaxDYN3LOlsQDThx2NPDckzDlkgLlBaBvkzK\npJ3FklBg0GjcWOCvfPVT+KtpMLmuzItKhXkzsd1Urp9WHtkJD51UtlvnZDsxVeVk45xulNOTgpaO\nFKhTwUZJ4EE1q5KBU4KgP09wMgmbGr/uJudsFk4m5XSC0xNht42/N03RPPhEB1yAv/b1fxKzzm63\no2SzQSTKkoee/NwMEMLLr9xAKCyt8ynvfprlxec5eGhxetMw1gPOW2N/XjiIr6V06yE2cqOF9utc\nC9utoFNSc5wwFLSRKR1pPXdrFQkTyj/4+Z/L//J//SRf8kf+FD/6D36IokYdUStN/yD0EcRDOHtW\nSWscZdHQO6g9mA51I8xziCLtttFsnef4zke2zMAMXbhpPR7CnJH3zhq8Zj1mpdG3iqx5nmOqbp4I\nF9wpIIhhzTM+vmhIGq7dEGHVQSbHcQ8ZNMf7NGKycgwWjJ9XGZKJ0UAbf1ZKyGrGe2aWrtwScEuN\n7FgENkWuzJ7u1lpy/L4mBW6MB5dqbFJ/d5OsDicOrF0hGkqzBg7dM9n1rALS4HSaCtPsXD91dtvO\nPNXQ/lVi4KnETTbv6cph4EMaVaEuKSYe/oqbqWIa067TNt5r0mjaVi3sNimsPldmVSYNY8lSHbTH\nsAaABAXTa2hyTC3Uzpbm7A+wlxhPjqZbRbThcgj/Qwv++Z3W1eyFEiOeWuPFSgU0tUmJxpiUuONm\n0HoEid4bXsawQoDdWx2NtMwsstSac8OXKqty/VjDRUCAdQ7xPloD4nV36MLP/NJP8N5rIUzz8NkJ\nL770Co8//hAvSefvfM//zJf80T8PYjTvoZvbggvYRBCZqXWBQ8+ZfGN252QubNNxVRJrwiRL4Qy2\ncixL79ZyZOWsft4f+Bw+65nP5qYLsu9YRFr2KLPHtNFcwi5lSu1ayWbKpBlURIN7miPbogEfhJ2R\nr1ktBD+29RC0rhYTS0WjIipTclf1tbtjNISKR6k4aVCG0rEltDckfM1iuCMpYzFQljhfNnzz1VXA\nE4+dxkEpkTGF01s0z5bErUemS7J1xs9Go02ENYPMWY/kx+afCZeU7u7dsqwIPK85xubj1y4xrNGF\nGF/PvdEs7veUGPWSOLbn9UfTyWI82jzphjEIsZEYcy9VOelwI8WLrHmIn7shhETohk7T4MZWNbxW\nLs4XTjYT1jLQTiV9/MKnsZkzz4W672yKsO+Fi6ZcNENLgz146ZhqaOtqUGP3NjHTcSekKr2EGWxN\nWUyrOdkWjJXDFc/hlZlurYXtLGxnZbPREJ2wKBNL6niqO/vWORycQ1s470bqUlPH6Y7kJMrISvLk\nzBN9uyGsSErahySUULK0ux8y3NutcbB0YO7Ol/2Jr+PZZz/G9vQEx/noR15kN2/5W9/17dSpIans\nNUuocR2Wyv680/YLoZQfAWeuUVWcXTOulw/xyLZxMi2cDgPJGnYzwR29+9c5iHKSGgEoqDkXzViW\nQndlUzRHRB1sTBIqm9k5neCkwnYOp4ppTjH1Gk3UmpACRIAvNaQNh8uFSuynuU5MVZg3wm6Oe1nK\nccz38hqT8J0xWRWvM/bUJAEnD+dcfIzdjmGJmD7DoS1GbwmAeTQtLauO5r5mc+ahZNd7NDrNYj/X\nhD4mouobycUweI3GYmTltR6HMoYI071eITfk5Dmwsj4cbmncQmCi4mHtpYxEBGoPP8WleRiuNlkx\n+C4xNBIuIKHbHcjwYEpHZRNK7cZBZpAltFpqZZ6FXYENBS01eh1TaLXsTgrXZ+XaWWGzU85qZZoq\nsw7X54mzufLItvLQLvbU9qRQpQQ85QFr0StVGq0IF73jVkAqiznaJxZf6N7CjVqMw7AIvsN6Yx5p\nSnTb0QyiQaQOjK6xWMGbsm8h6SYSFOxBxzmYoYtSJg01JMbGjltb9djdHdyrPBjji5OReNyfkdds\nNI4CC/wr3/yNfM93/Bc8+2u/ysMPPcS03dCWhXbjglO9yQWntCLsvXPojdZreEh1CR+pbmy3cJpy\nyN/0F/4iJxc/xgd+5scB4c/+2X+br/+P/nNsUqap3HUsFwKfPGKNMYBkU+DNporPIbAd5PhwS52L\ncbqpWX4eMVTRsLGZp+x+j/7G0D3GmTIVtRpOBt2AMeaNZENNQgWqZgbOa7v7QgQtI7SVh45s5ShW\nPwxtI8P0CKQGSwtvNc3qrE66XkPvhiWRP1gRweLQLLMniYxHde3dZGEXgktjXx/gEr86hn3W+3RX\nvsk3t8aoSPMjj3chgu2SjUATwrUl75d1SVaGp6VT3JPBwCmEN6C5Bbe2Gli46y44y5BqxUGMYuEi\nbXbBlspmbpQ60VvgxFZaHMZzitMY2FyZU8u4mOHF2Zqy5Li0WQxtuDuzT1xoVOfnRKV+4UYpwr40\n6j78+UqdKcSgjVt41LnF0A/iWHPUsvK/w7oy010a0YDoBWvK0gPEbocUIE/9Tk/2qiYP5mDhDrBv\nzsVe44RbPGxLfDQojgF3zcjHn2VmcownnyBQ6w7LiYymLSHc05uE3U9zvuPv/wbPfeSCJk5rnWmO\nx+7Z3/iHmBfawaO5c4iMqB1iB28o7OrERmY2O2F3Uvjnv/Rf5AM/8+OowBOPnfFf/dX/mk9592M8\neVaR5eV8OO/u/REGnzEzEQtoo87C6Yly/azwyPXCvA1MbTPDtFHmCvMWyhyZeRyuGrids8oGDjZD\njOfK8eea2gKTs51jEOR0F83ZGJDJiok7BykVUsA7UYNgbq5WSjAgr3T68CiLLTNfs2QT2IAL4tFR\nWH/mmeVGGcoKD8glrF3JibpMMmqJTL9ouBePad77IeCOFTDKcXjE875BHsIWIJuqpL0Ot2DiDlkV\nRUAyi1oOS/rgEhz0Q+tYg74I+xFPJMpdKbCVikwehpYe1VFB2GhlHgMvA6bqmgd9nLAyKZsKZ1U4\nnYXTCic7ZbMRNlXZbmA7F65tYNrAyRQj2rMLOsfQz8kcFfmAj/IOYO6cH+CA06WxtDs/i1cG3WaN\npQv7g3PIjmNvnmIRkR44pPZrfJJSSk76BIDl+OgyBGcyO7VjlHFkA+s3zBFSGxvwfsxyhcQfGfci\nMNcywz/5vif46v/gv+eXP/jb0EPm8HDjBt/3vd+5ll5mBK5VO6Jh+dEkRFB0ck4EzjbK+//YH+K/\n/f5nceCFl2/y2GPXOD074el3P8V73/teTnYTL734sbsad2tiiyKe1xp2NlONUnjWELG+Piunm4lr\nJ4WzbWgnz6qc5IjudiPspqB0aYnSdXTxdyU4rKOxuq3hEzbNoXe72SRToTrTnKV3NlffDFNuZMQN\nSZ5pHlvm+fvUCs4AujTHLRpsY79mAb3S/VYxGj9ygNdAzJHt0DMzTDiX7/1b38lyc59j0G/5a7qr\nK2ydfHVTOU7SxbRuzmcAACAASURBVJ97T3wln/WS9DdJdlJ4nhmdEg4xYkgO/TixrzqdhbDXcXcc\nQ62H28wmGC/iEj6IRdFtCF/NE9RdjNXr3Ci1QXVqsTz8lbpNDeNa2JxWNhqN+90mHL2vnUyc7SYe\nPimcTcaJRqCfpGVPRZAWnPSDh6PE0uDmXkKTdw/7AfbfYV25V19ZoLVQ7lmss3fjvIdluDVhWcIO\nulvoYkJkfJHmd/DORpXTbXBILRX5VZJ+QsAX7p56BJG1lNcUivffGuhjlQy+FmVWUN2cr/9zX8WX\n/2vfzG996CMUhOdfeJH/6Vu+heIvRdlTnDKHhjDeKSJMtTJNhetb52Q3cbpVdlV45j2P8Rf/6g9w\nWDqHZQk94mni2kPX2O52vPfd7+EzPu2pu8JgcHf2CSuU0Y0fJfAoLz2aItMknG3g7KRyuqtsVajp\nFDCVgCVG06tquDdvCq9Lh1IJ4bmZCPpVAhNVjeGbST0bmW/umocMivkRLhmB0z2ocRh4Nu6cEJtv\n+XeGQ4YnDHG8T0d8dv15qpeNnlz0nAd85vyRP/rH+PRPfZJf+IVffFPX8IlYGVJBPDVCMtkQDyy8\nyJpQuMHSOkt3lt6wFDPfm0YjrccNclmiEXexsBycfTecjiZk15uwiMbUIEHncgI/32hhozXcyEs0\n1ba1sKszm3lmLkothZITc5EVTxE8tVM38fxtpsq1eWJbC9udsi0zJ5vKdhaunwmPnW15x2nl+lyC\nK1+FDSWcW7xTtNPlANJD1P+K7Xhl0DWDm83ZS6ctnWXv4VxwUF6+6LRD+AMdGrySRnKa2cq1XTx4\nJycxRjflhUNs+JLpf45OB4k+3/d+D7iQGbgGtStUiKJ7q1LQfEi/8Rv+DH/6m76bX/m153js7Bpf\n9KVfzt/9m3+dQ/fAEnunS3TGTYjMlxCImecxAw9FnX/5y/4gn/1P/0leeOGCmxfnHJYD283MZ37G\np/HYE49g05bP/vSn3/brdEJIuyVm33tg1xAwUC3KNEdpXCdnuy2cZAZRSqiQ1UmDnZJ87WiQRpMr\nYfz1ob7dnh17YhzKwZ95ffnO11vxOAeea/il2YfovotEk8eG7ZNKOFSPQNoDi1y6H/dsltFD1lLk\nqM9cL33q9JJcf16E1d34Yy++zD/1eZ/zhq7hE7nigIvMda1M874V8gDuhlvslYXQU3ELh43WCXuf\nRSMgN2E5gGkJzRaE0iBezRHp4bZhPbRHNB2Rp9BfLuqpUREuvTopm7mw3VTmKeCCWnNCthSKRuNW\nN4VNmdhNMU5e5ti3tTgbCF/BrbLbbNjM2ZMo4SxyujG2kzJVZVZBu+JSmNBg3IjS+p1FzK9mL5Rw\n9aU7C4HfaoebtqBeWDwEu80LW+LiNlNhqprd5tjSQwqu5DSaavDgILug2Wi5VwI2b9eaBGoJ/LEU\nmN1iHLp6Nnecr/jyL+Sv/8Dz/PJzL/Dcb7/CP/Gl/yq/+sFf4nCImfviCoQFd5k7Oqeodg17ku1G\nmWp0W7/v+7+Vd/7eL+H551/mpZdf5HBxTu/w+595hk/9lPfw0gHejALaG1ndCVWptQwfU175ORW2\nFXY72E3KZvLgwtYQgx6BaZTP0VSJEl9xDhbBcHz1b2QLjMAsbzjkBkQlZDrrYTkj+SplLWdhOGxK\nflAnROoDagBc0/mYW7LdOIhkvdZ+qVfR5aiqNhpTh+xbvPPpJ3j80Yc4Ozl9g1dy79fQ13WPSkE5\nQirHg4fkOhC0Rg0Ro7iH0axZLZ6sBHMHDeddlEMFT/W4IjEiX2sJXHeqVC0BZ3nIrrlHxUwakp7U\nwjyH9OK21hQlyqSgKHOt1ElCeHwiE0FjEkFLD7nJUikpKbmZlc0E07RlN0/UTWGeZ3abwqbGkNdU\nQCQNXWtk5LVMd7yXV0s71kJfxukfGcLenVmUPUbpipqgU0MksJrUX0FxqDAnEC75BQkhUVcsfZgu\nZQC3k567X5cKbObAYWue2j35nrWHItR22vLeR43/71eNH/77P8Qv/OzP8Rmf/Tlc3OgcitL3bdUp\nmF0DzK8zp1MJmcQCm62wqcasygd+6u/w+ENP89ILv8173nXGe9/zLjbbLfv9wlNPPcmbQzivXlWh\nB4gfWfe6a+LwXKemxviqQsnssUE2WPxYenpggUv+vlR508fEx7NDAhSIw/1waahkRPBShYm0Q7eO\ne+xnPIY6WgqLu4d2QsbuFNyO/xcbTeIhWJ6Hi8RwhyVbo+IcEtrYnZ4g5jz6+NEr735awxB6VCRC\nyI6KhF1778KyQi/xDC8iWO94TznKLjkirHQJ2Ka3BiheFF0aWguWHmPtQLpAbNiwBI006U06FSbX\ntMtRFunBpmCBZkhR3A9MVdmmGWhMOZaYZFTh0INtcUHc86Kh1bBR4YCx1UqvBrLDfc9kMwdVbO68\n/NJNfCq4H5JZE7bx4hJuzlfgC1dTxlywmthNHtMiQm/GXIRWHdGQ0RPtaJFU8wkpRxNiWiTauMFx\nTE6mXOrUFlhN+z7Z1pTUoTLngMgSgWpRmGcNXKsWGs4X/nP/DMseXrkwbAu2F05PGyygE2x3cO1s\nx4n2FG0J3YptiRNbiYz6V5//dd798Eydgo/04osv8cijj/Kbz/72Sn8ad3I0cT6eZRyJ7zE4cKlp\nKL76kg23AS2E1iwp+qKwt1QDU1mtvoNmF2LrQ94ylPnu3h4YrzoaZDUD5XE5teQ1amHJLrv1I8PB\nTbAC+yV41JL7u/XsQ2S8HG4TcZ/gkPCCSObRLun0IMylUuZwg37koYd54eWX7vpT8Kb2RCZKOZUb\nwxE5zNE8LXy6rNORrbU4pLsgJao59U7zEoJDHq+ngSKkB6NRvFD7GC4wpjl8Fncy0SdACQug3im1\nxL0sodsLztQqIoGpqk7hoDzlKTmuQyrNO8XD2Vw92qqtt8yoYZ4mJlcMwYtzscyoKVXiID452cLN\nC2yaaL0hLYR9OjGZuJE7h9Urg26tAuZ4dw4+Uun4QN2diR6iwmmnISnMYdY578GJkxpCI7XE1y1E\nZlBKPMDTmyos789lElDDHo/xzWQ1TEmVmerAEwsXqaAkCNtNiZJknthqwAxTgaJTOCQUYapEFjwF\nxWiu8Ni1YDv0ZUGl8qmf9k6eeuppPvjBX6EUYbfZIKosywUV4ZVD/7juriaS1+w4uACDQhVBx8zR\nSaivCpiivjZA4DiBteoK1OPUlQtJxL/7e0AlJi3FhVmi1B/qcSPz7h2kJZ+UyODG9fYWsNvBonwd\nTd8mrC60VeO1YpIt3Fba4M0LuMJv/eazIHB2/WFunr/C9uwaTz1tWDNKvXvZ7hsNuJZ7VDPgrp89\nD5SxBwbtrqfYuqigTaAIbTGsKK6Km1EVdAbfCwuOu9LS3knMWQhOv5MuDlm+zxIzAlrAa8V7CCTN\nOD6FlZNMGip0U2j0TkVxN+ocQxiHQ9D3imiI03RntohjntWFU0Jbw1swKw7hEFwoVC+0aSG0YWb0\nZqMbnEpH3ThvjrpicmeTtKvHgCu0fZTMXaFaRcWo7mhVqivTVlmWBaXgzdMkLrIyinA4ONMmLm6T\nmqAO68k4eLufvCE3MvW9jM3oK2hv3fESFJdm0SmMpD/wqioLu90cOFY1JjFKKezdOCnCNEdbYZv2\nNKV4Uu8AnOsPvYMf/Qc/wYsvvsD5+Z6eXeGbF3tG6+O/+9Zvf0sT1Ergtvt1WuuIVUqWzJKN0cvU\nqDGBeOS5jswvXmSlCzJ4tvdmBziRlY5SeZ12THqji+TQAisjByIQ9w4qRlcZZF4o45qE3gYEMRgO\ncd37zPCXfLkN8CM/8kPxyupM08R2O7O/8QqPPv44L7zw0belUvl41mASjRbl4dKf9Xa8rhYTUvn3\no4lkQjhdd4t9IIHbVyx87dQwq7Bx9FA5lBiYqK2wWEfdWYowm0MN6ummhohUlRgXBqfXKZTaerJZ\nSqTNpSibqTPXQnCxlYUeWfQUokfiAYWKSFBjeqHicW1uWaHM4SCxU0oDLx1qXJvW1AFOXut0rpg1\n2qFxEZYad7y/Vzu5SKr5A9coWIVDduYhfLvaEoFiaRIJdoGNCy6R9ZUpuu9Dd8FTvSnKSlnLl0/m\nJYS49JKc494im2pJF7IOYjEy7ZuCa6MsqXZVwuxvk9NltQjXYkIEMfhv/to3Q3+RL/7iL+LXfuWX\n+cDPf4C/8Te+i0cevsYP/8iPAqRVyauxJOf8/JztdvuWr88lLHJGqT1GueO9YyMNsWuIIFSQFLmO\nUrRHfEKTWe5+77Lby+vVddXloBaZ25gQC7ujnlguJHxkSumR5UoJLdlhallyaq4l5llyCOSWiUti\nyOCZ3/eZgHPz5k3MjIeuP8S73/MuXj6/wHE6cssDemwevj3X/+oVPIA4dOJsj89QPKsBH41DT+go\nBYcssNrmR951VQ1MtkTPpylUd5rEIeNmWIGNlRggKsZGhMaEArNu0RIaHXMhrNo9LZVQrB0QL3gN\nm5FJO6ozQrituFkIj+NMaX1UHaSC9WnwVdggHHCWDpQhGuVZgQVNdiQRIFSv9OZU6RxqQQ8OukRm\nLIVSJNujt19XBt2lWYz1lVS6EFCPG7wcOtVrTFt5YLWhKhUP6UYV1NlqZGiDDzlm3eWSpN7vlDVs\nTpaSZKakFjVGVm/semh79iCrAsFZ3RZntxU2U469EhS0v/QX/n2uIv+9NuCyyiS+HWsE0DFJeHlJ\nYrG3HJwepXlvcOjHptP69yXYDT3/1SdyG1x+byfoXD0DpXvIF4YTcNjVLABu1CJMLe59nQQToS9H\nAfIpGhVrX3MVjMkw/xmf+QwgmIdlkONs5so7Hn2MmwdjO5cMhMcH1RM3FN7awNB43VFlOGOsN5Ig\nl2gMjX04qpW2xGdfugftzoJLS3VaFWoDrCE12AfiYUFUTaA4NcWdIO+ThwtK7T0pZyVNRR2G04Ok\npoMm/9kFF0WnuL8+GWYT6i0CJ0YpmgMcMSW3LcLeycYozKK0rLi2VSnNU4bTuTBias4dtYpLC/pg\ncyod3TjThdPU2GwLS4OzjYB0JhzrbzHTLRqbaSEEld0E87BaL0qK/QaeQwLsCOw2o9vpl0q0KCHd\nf+cF28tLiAmthfHgAgxFNuVCjMOhUkqwQmZ1tlXZbiP4giT+DZ5WNK/7PutrH/+/FuFd73qS537z\nt972LnglVKMGO3a87ygjPSk6IrJa87lHSWoJJe1DUyackCVe825uhTdbmscBkN5gGo3AKf/EPK57\nMcd7YGSHEnJ+5wdj48BG2FrwPge0ABHMJGE1PIJyb/F3lkPn0UfPOD27xqSd7WbixkXjdC63NJfb\n5dfL34fIT3zwOxOVXnudsdWyIUbKVxLv4Xnn1hHn/PUARK9KWA4x4CNBzYiEQ2DWSrfOXiPLXSwY\nA90U7z0DvqLZWCcbawiIZn4vDSklLlTTrDKfA/FourkFiO4txsRJyp5p9EFc41AoGpWmanxvMkUD\neMrvxTt4JV1FlKKWeHzY74QQEkwieFFkaZSizK5UOuwUnZR6w7iwwv7yxMzrrKufSoEyORsH7U7z\naJzVWtAq7CX84dsBbvZG60GGtqbcDA24KK/G660B1/OUvdrI7ZN1TeSIql7SIVVhLspJNTYKO3G2\nU4y3krQYEVab7U25/c3x0dkAnn7qUT7rmffwOc+8l81GefjR63ztv/KH39brGfjnNOyBcvc4yVTI\nsnrpQY4f4iNOZEzNZM18s2i66xnux/v6I6MMNTeQbLzhMc5q7uwXuLgwWnNsgQVhTgOMoVGxfo6c\nxJQMlCIwzTGHt9vtUJ1YLs5pXTm7fp1nP/QccBwmglREI4LlyKXSNWf9740uw1PnIfDrPvordpS4\nNAsMdGDZZtEodIHWQydjaFK4O92MPcYFnYNo0uQIChcRLJt7TPx5jNMWDc1bKXbp4iwU9CrMG4ln\nQBx6WLG7x2SaQAbaijWj93jPKWGParJKYormvU93lblqWLwX0GpUcaQmRNZ79F8SXllwGjkN1y0C\nb1HKJn375s6slakGPY36FoPu8Gw6qIR1hZb4oEJsSxMuvHNuRjsI+xR77mJh9uesAsxDvHwNQitn\n93du2itk8NWgek0Kmxp6o/MkbHcRcCdJnVeLx2fMswvC5uTR17zuhz70HO7Gz/7miwA8++xHuTi/\nQOrEtbMTSi384I/99F25nihtnYoz4WsGMrJuy6mutkiW6b5Kdo7yvdz3WgPxwN4yXTbG1XtMpx3a\nwvnB2B86h4wkXTzUs/ySwpZFNlklyvIGOT4d5fXHnv8wh2WfHfNGb+d8zVe//3UPDCfymGAT+Fpz\nvNlbOcabV7kEH7S4wLLdYenxqmYghFKXlgBCBv9fLx0w3kGWxPA7ObKbEI0rlBDj3wzdjWQXmIc/\nWlxf+tVpmIVOl+6/SOo3YAmBRBOuZxMzDo1+NM60uD+lBswwpXXThKyj6KVI+vaFrKSIghW8O613\nzFpUGw57LOcL8uaJIpOxK852bszb0AyZrvDMujLoTpOwm5Xrs3A2a7r6EgLVFBDDCY5ha7HZ4iEb\nUIJw0SJr0ORqquYY5JvaJp/cK+V/Qie4hH3RZnamGtqypR4FRMxSlyIpRi+88hFGuPu3vvbfwd15\n5zufBIRnnj7j5JFPBYTnn/8YH/7wC7zwwovsb97kf/iOb79r11OR3KTx6+CgjgdXiPJu4Gqae2JO\nAZv7O+De2mxzd7oPsZvwxhpCL4rTJTInyT2/QmgZzJDRlCItiSLbM5w//se/kuc+/DyvvHyDx554\nN5/ye34v73vf+/jJ//fH+U/+8tfz0Y8+z0svvsCyHPLzJLDjMCYyusWYcSJ863KOgw2Xf9YBsVDG\nW/rg3B4hkNHkFvN1TFs0xnTnEnb3UwGpnjKdrDhqpJbBHGgeh2tFkRruDaGopkETlVCr80T2iwQd\nUtSRvJqhz9LEsaHspoFRWYtf3aN5H1BHJdHmFIQPh2VygrBOUaEVzyrCUwCphICT4iwSFb274lpw\nZM1820FDhwNDesUXpdTKdtpwrZYYd3/1TX/13rrKI+0nfzlP0sQM9+YhdONxoiHOYYHD3mhdKOXA\nI7st89bYTMKcyv4PbYXtHLJp23LEZ+5H9bC7uQynuawYJ4yu8HHjwzE7nDS2pGa39fXu13vf9wy/\n/o9/nrOTysMPP8T5+U1efuWCi32/J1XE6BXtV7GXxHVTo6El46G7p6iPUCdndw90gN/qinI46GL7\nAxyac3EQ9osDRrewptpml12jDABPQZ8qOcE3NBkuH0qg7Zzt5oQ/8f6v4B/9/Af40LO/xXO/9bFX\nfYoIhv/Hd38v/9If/lIqEipXXY6HXO6XMfDx6mbNgbDMOawwQkIKjOZUBDv3SxzcxHCVqNBMCJnK\nHIowJIcdCHcHj0m9i4xkcyghsUhCTx3ooxIamX60BSuCEJNqaODnMQXoqDum0cA392RPGM0lqKkO\nWnP4RIPSN0/h0jsOkeEI4jgqujYIB2a9Tyjlxr5xsQiHpWGpgGYOtKD7bVyjIVx7uiQnM2cRLtqB\nF19u3Lxx4N/7iie4nUfa1RNpRxAWFWeHYBtna4AJSxeqOTZZWoEL5o1CjYtVZ8ovsTlMK5Z3/z9w\nd2MJ8WD0bChZH0GXlds5/mZPoC0EUm5flLzyystAODQsyx7Vwr/wxV90z7JJ9WRnZHdZVFaaWDwg\nAhpjoFVHaSdpCHj/rcvfgjHKVIEC2oUqnTaHdcZWhOohpC4a0oc9MRRN+MAzI51rZsLS+OhHP8oH\nf/HneP/7v5LTsw3f/h3fedvPI6QleDJEhnh4fNh4trQcG9R6qdEJqX5HHIrrNKELZOB1yUGepLm1\nBWxAQWSwGsYCyW4oHtY7i0hiFYJplOHhLuMp3h5YaCO4vF7yAI45oDh8cLpEae/pgwaxh4po4Olm\nyeePJqRZZVJhmo1aSDZUjPa6BeI9YBLz4M2rh29fX4NzZPQ9qZkOoUrm8flbVxZb6N3QXkKmoAQV\nrchEwcKRRIDqTEvwfesV8MLVQTencDCChTCk6lIzoWvQmkqfaG1PcaUXDbUhNNgNeR/HqbL4UYX+\nd+NaYfZ8cETAVVCTWwLvsOPWW4Lxa9eLH/tI/I8KbenceOWC7/me779bH/+1azQrPLDpdum6VGPq\nawFmycA0ptDIhs5tru3OV3331njPkZOWAt5gVscV5qkgLTrcKjBtjp9yTHFhIIXV+bodbnK2vVXQ\n5shsuF21qWy2p7x888VURjuaBdCFZYGD5dSnRvPLNaUpJRplZCC1fnz+ogq5BPHYLb/EOyfUYJp3\nZOCmSsIrcW2FnNYrkVzhMfgxLI26Rx1kEqL3BpT0SHNJmMYNkm7aydckqiJWHFdRLGYBLFCMbXV0\nFiYGBh38YR8NL41S3wqBwyvxLBlIHZBBfNHDqbpqyI9iiqWa/cREz7sTHGKjakG0hCQlgqUE7rQR\nNvYWBW+GQIfgeIssRi1OdEkQfePCRTpmCoXiOfrnMTghk3DRAkpYWpRB/jtgIOLjXeP0Nbt0/Tac\nNwa8EBtBYJ2cut2y5SIfpE7vez7v8z4Xrfc+h3SJB/5IY4uoZM2jEZLMDHMHCx3dbPbHvyeus+Vp\n9InW4RgYqUpg0UuLbLVLVBUBl4zPHU2mxQQdOpUEBFcq/NzPfuA1r38MtgN2iKUqPP3Od/Ch33ie\nj914KbJPzzI+Oc+9xc+KyC1mAN0H3JMc2xVbjjK9J1QhGjCBZdY3XU4AnKOwz/hcA/YKqYIVQpqI\n4aeejIKRHzSJ7JG0MQpcOBvnNZpk1iO4VkqqmEVo7cmsMBNUnUqouiEFTby2VlkFiiAV3XJaLhhC\nUSHuiWxeLRTJPBt+LYchmkem2i3gkqJxA6oZezfUNJ9LhRxbLzWfSwSvcaINWUdLC6E7rauHI3oa\n02mcbGNkd+w263H6bybFyibVMATpgk+2TnlY3vy5xylbRD7pZBzfjmXjv6HS1IPzDMfMR/JBGLfn\nTrh3NAwiN9hfNLoJf/cHf2TVN7jbawTKtUsNKSgj67jv0OM4doDi4TzvIfP56tep2Ub5RMIPliW1\nChRPypCEvZDU0H3to5nmRJlNwCdjIOCyI8rved9nvuodIot7+unP4Lv+7+/lC37/+7h2tuHRh6/z\njndcR4hJqhc++gKPPvpQ+HpxhKJEgv6ka8DNLDQD8aCA4YnFSmTBQ0tj4LqjqWQeh8YR2x3f2THY\nrrxwYcWp3aMSKznoYCJ4i3tmEu7Pc8teEMfP5B7BSQIIzr0aB8qkOUyzWrtH1msWSnZTCfv0oC1G\nslJNaFWpnpWUE9mpxrRcUcES/nIlJtZ6wKGh/xuZ7NLAm7GkDopMAsuClzma3SJIeq+5BUe5mGAo\nriHr+pYn0qY6Zs5tLRV7ZN10jhJvJoZ2T06eMXIYNSFEd474iuXU2u+mNYLKmAIam548xcViE9ZL\npZz71S7IkQkn+1uUv/Qffh3zvLm7F/Oq929wzOwu6TOY5UNMBgqOwdgsOslm4WulDHnsWK+e6bmc\nE96LNbB3gZig8hC5MT+Wv2JR8h+74XmgFF8pUHiU/g89ev2W11etHPqeZuGZBmF86d7Z7/ecbrc8\n8vApX/gFn8/P/+I/iuxfxsHslOlItXSCluiwDqVA3PMqvg5ViBy1MCA1kUfgzaApmvoRemuFFQE3\nq1Q/Jgi2Vja+vr4UZ6jSj8m+SbL5lw3V9TNqCa0WgxhNSG2WDOp4ZqhGOkLH62o9YtiWvO/ISKFY\nwBqqmgpm8WfL0kN8XjVx5RDkCWprHFRLN8w1aWGBy5fkU7v5EW4pntW/YSac+0K3jviGTb38Lbx2\nXRn7osuX3egcgRSBQ48Hp3fjYjHcO1pS2ELSnxsL4Yt80IpEkG4G+360TfndsDyJLHDMVobClub9\nkaHk5bK65C5ux3/3uq8siFecII1/w1/+xnt1ScA6Gb6WvsOyfJUCBcb/LD6msGTNeEJv9vWvzDny\nSCMPunfr8ntVBo86PNk2ye9UDb6pZbYrWb4aemxY5RMmAos5aOXv/eSvctEO6SsYjAKAi4sLWj/w\nkRde4rxH6vLrv/bL+ezI2l8p5cgzVYmi0xK2kZi8Z873XTxJbML6X3weX4dwjhbwUfIfK6Qj/VM1\npwgVNpllwpHrChmUExZLN/to6qnTcyJk9CmOjX1bTwr3GI/3hBWKh+OMqqymAKWC1vzsGQA1L0A9\nMkHPw2kwFEpm9uKBwYwq0LtQPChg40sqiR1bEaa5silC0RrwjMbcgxeLIZEUsFp6pzYFmzG5WA/R\n260rM11vQ/80vuCWnNuSeKNMyrXimE10s+AqttHJrdQpdmTeD0qHZRlvHJSa3w3LyDFSP2qRDsuX\nTojDrKIqzfM4lKC3OIyxvdfDwf/QV/6bfMFnPcWf/po/xb0MTU487Mf5/MjQJbOR3uPPdTxgyWyA\nS6Uqt05dxV/zdHkYmfwntqF2eQ0hmpXel0kdmSX19HfvHuLzIzC4Awr7vjDla4+m26YIP/MPf57P\n+ezfx0Nnynau7M/PM8iWW/0CL/keFo527iJHzYgOSA+aV5MYzFkshdQ9guQItKFvnNnieI1uIcqv\nRyhC9JhRt5XNdOQBDwv5gMxS2jJLOu3O3GOEvLkxFcUwLHs8UiT2Rl7LNBP7R2ytGCRx5jhURpCP\nG9kTeqCEOI+aYaJY8sTdYkhH87qLyJptHzy+g55DYC1vZvVOV2GiIgUOrjF0oaMh2AIBsKCsnUuj\nLY5ZHcS3264rg+6+CXPNwOtxKk4lv8weFJBJBdPGLDVoThV0EnCjUDALS4zBaMCC+1gQLiwtfK76\nIJ+ka2DgfdBq8mFdxsMKQb0TmPrIlgxNgQ9njH/ePuz8n9/2X/LBX/9tnnji8XtxSfGRyXHO3PCj\n5LzMOVaNh6nhqx8YJI3VU8mLxIMvwQvKUSLyfsL94xBIucPkx/bO2okfOq02YLZ8XqIZdAlnJayv\nSmaeTeCZzx+DrAAAC7xJREFUZz4TBD780Zd46snrLEtjvz/cMkSkWWpfykNJ5C6ZIPFnhRD3PhDw\nwaGHLoLBqvQWeOyt1+eeFDKXwIzmgBMkMdIVX833Is0JDgA9DtTe43tdcoNn/ys0lw3mRJUPmsM1\nVVMXIbi2SS4I1s4lbGPSTIizAqwJVXYP3FhtODjHCTG0n/u4gQZOjySmO80sbhJCswyToogYC0ol\nhjr6HJzggmL5PJoFi6IdHJMw02yLs2893/ctTqTN2dY0dw7eE5MRSs8vUMMaeTMXTk6c3VbRqTEV\n2FYJDd6q2BwE6J6cOpfgA7r5eur/TlkjkLTswg5bmp48ySgRI6uIzRPd04Ol6Igrq/i8HClYt1uC\n8OnvfequXtPltT7gMuQkj/hez+A7rGncg9JUMovK5Ck+dzYLV4rZpde/j2Lta1YbBwrRWFMVtKRD\nrkcSUhlZbtyPwa2tebxEEDym+6rwwvlC68qLL5+z3DhnOez5A5/7z67vK3Lr0fvq/y/EQb5A6Mz6\nEU5Y8jAsHDHd8ZpoPKcjCKuGgagkZUsJtlJ5zftlxssIRgPXjcOhZOy2JZTFRMjnP/naGgfSNB/h\ng/hMI2AHbiLdSCIMEHZgLROR1KKhS8Qkuq9Qj3lQyGTgzl5WKptAvGCP3kNBac1ovaA9jtdFUtgI\nXRMEvIcUpBtd4OCdpSuHbhyfgzsbU16Z6TYC6F+7js1phBr7SlSEmJiyQhFjWwoihkvJ2Wxoh9DD\nnDxwSk9rDPJU3X6SzQVfjoNHdCqndHKDo5KEdFLDIrEmQPJ7WXzwOiXKqRLU9pIpSWy2K8LQPWAp\nvHZFdqcacof40Fz1deqI9H1zC46kdccWD81gPf58ZDTjKj+JtsHqijxwSdEov6tklisxOTYuyvNi\nzQMjJmlXAlyfC906kyrWz1kW43/93/+3N/xZFjKjVqI5lXtRJTLA/ElkgwwoiBQc1zgEM3Y4+V16\n2NAgkprJRzZNHL6ePRtWnHY01xpkbyL3s8YgSehQxGduVdP4IH5fSkyyXZTQOPApps6GxZKW4Neq\nCwuGWXyaWWCpgi4Wz5qEzKbUYMkYAZtUNPsfmgNbUX3vF4sMGEPcoy/l0BOHadazb9Hj9QG6oM0R\nbVRVLtohXre9RWnHTab1ImGaSI2b28wQgyIGVbOkTM8rDLfQY7DW6RKbznAWD0PK3nJM2x2vwt7C\n0uR+Kidfb63kd6LUip8NzJZL0VjoIbzKkqZ80UzJL8yhe2CXPaOPljhttzVyh4F/vhrz/ESvkeUE\n9S0O5INnGbqMZqsGxamlL97IKIYHWWLb9dIXfn9d5WuXc6lq6RY6sgyMNDDRyaKKS4XT4NVK4pES\nDeRSIjgeveZyOi8z2ZdvnnN2esK3/s3v451PPPKGP9/4Tty5xSnEcjJwwD8j4A4seCrKMjLjGt/X\n0QjyGGTDRvJVlUhOqOHDRy/5wgSuHI20eM8V3+7JkkhYoVbhkBNw4jFwtbGoipVLDbnsFcwIixIn\ndkIMhdSfEMXomBXcChfnTkspWlXlYlkC70CwJnQsrOFTAS0kPQuWBpbB6FB6A6tK9wPNJ6TDHqFL\nATd6O+Au7HvHX0fb+vK6ejjCj7e41LgD+2ZoA1KyzcyoGlw4LTEz7QSLqfRKa1lSJ2duL51tV1qm\n7GOgpxXWU/9+Wb7+GlnsQFftUok2TuEYO0y5Dc+gY3GNwx9LCRGRsHoJEe+ovQmnjaKIXt7w92+x\nPZobbhJeVR5OItbDE8+zMe3OqscKjSaVKiGmtE7gyf0PKwjh7nLhgyzP6gt2ecrejHXUu4xglxNq\nhTh8FknZz8HvvfQ+J7sNzdqKH99pjeHgcZCLBJf14DFGC8d7fMTdfcWWIZpMw5ItLGbBNM0ILn8p\nHhnkgDKAhM+OAXc0SFU8HEJEks+ab4cfncFrjCZ3jaeq9mFOmlBUwgju8X5LJugHoC7h0jIYMJax\nH3PEC611mhUWc5YlGQveaFrihXuPPerhWowMSiuILohOcf+6YRVMHOsN6RvELA4MMw69sb9ouMCh\nE0LpQyLwNutq7vk6IhgqPN3iV+uRajdxtJdw1sypmE3eIMmsJg6oeKqkhm/R2sVmnL7x+z7Krru8\nXg8euPzzo0J/Nns8MpYj3zRvjZGd0IG/yCpo4wlWNmJO3bNFFhzdxMvE1+aECEzVj/oE3Hsrmze6\nhAwsCF3jc5qFHODYzMebmaWsw9hyt1Q0MppAOYhzn14zRAkvGpDY+NYPBM9USBurLK3psgqNB8yW\nGgNkc1RkZa68er2R7/1S0ro21BZPbQES17Rj1Bxc22PGG3t2hQsGJ9YdGWyGEr2Iy6PbkI1Ukm9/\n6ZkIKlfQQiVPgpFAeFaCAzv2vA/eWb3RpiSyL3JsOInH8El4KmZTNm9PLREzVFhNQA/Nsa5cLAfc\nCodMAKL0X1ZBn54BVzREbMRCH1dcab2t38uydIobEB5vwbRQvOxRL6BGPxgNmLxjV8B9V2e6HFX/\nbZxiKIcCcujsc9Chl7AvETnaukw9MuULSVwyifOqIxh7BrLcfDk7Pppqb3fAie/89VL/MdYXf94R\nVnX//BvqwTHt40SNpDeU6WW4xkoQ5m1MNEVw7QTNpQ2aXYtOrRYHD5dTKWHaOfiHo3Fw/4afhBny\nFGoEjlhI14hxAearRYoOy/K0i4gyWNYsJWD9+/mKQ4t1YVj2xOFScsO3DGQu2dTKAGdBWb9Eq4rG\nmsIxyL0BXN6If7MOo0jQnyx/a7429+k2stlYgxs+Mt1j8JXja1+COcY62kCFA8M4S8sIuGTAuxTM\nh0KZ5GuOwN+EW3pDEO+n7liJybagYzkzwkHjoorIMIVAJVynhz0YLhQN5UNPVTsYNmPKoXVMSUqY\noVI5LJ0lIjm9a4gVSceolMnoS4w2t6aIN8KxWDHrTNOEYaga3gPlDv6vMRuYFHp5i5lut/iilxYX\nr0jKwzlWA0dpo0kSvIuQljNoFfwwfKHidDGHDXGqaWaEYbEkl4L7kGF7e4LOCKYDHri84nvzSye4\nrFns5c7nkl+0WNy1US73xJSM0KYIjyboPcq7EUCjsRon7hhzxAStedpnW384R9zfoee4PLPU+M3A\n14RDslLQwNvGd1o0sn5JFstYlzPc+x1mCPJ9wkMZlMzjelsPbPvQfR2gKLmve2fNDMGwKcdWM9il\nhtRt16jQnWyOISvzI+PPOlRzFNPJvSqsegsjY4j9O3DXFCEnG2DuK6XNyCZaBlbRUBcbv6/OLWmw\nDBseAW3gJQRhQoBnSEIGxOLE66vFgd1yrBd3JhN6PitF4yKLxeup534RgPhMLo6Y0vbO0p19J3pP\nLjGUJZL8YYUlIAHcWBZNPegejblqqxSkZbDde+j07hdjQ2dJnLwdwsHY3fK6j4Mxt1tXZ7qZ5heV\ntetZJcqoSeJbCd1iCYFnz8kjAVuIVNxCl7TUmJF2nDlrkdHBdju+15BwGyf7wDVfvSHv9HAeg+j4\n/8RiWYEA1OM9b8FmSXGRhVVndGTjg/tXsmlkGThHMCVLJTjShVQDppgsKHOtHB9CiR1NrzCRUzay\nPhL3LbRweRnDiBQwWbmTo2OvOVevxPVOqbw14q3Ird/x/R5wIYYStIRRoRPXHv+fDeWczHN3ijsu\nGgLZkmPzBUQ1qiJJ0ZfbZLorcJX7cIyR24Dr8p/1DLiix4TAb2naxgcN4aGxd8d7xD5sxM8idzqO\ncxc9NkwjiYg3HYF9GR90fGaPb9I9KV0te0OeTT3PhmTzFUNumhTKFo01x1f504nBT85ULJkZc1Ya\nK7XLhH03lpYUzKXlWHpjqpsIjutNC1zC3TCJbFBLyVFeD4FyNazDoSnn7RxlRtQ4SA+ZSGpKzYRK\nSPeFi95ZLnvWv866UsT8zv/8wXqwHqwH68F6vXU7EfM7Bt0H68F6sB6sB+vtXVdOpD1YD9aD9WA9\nWG/fehB0H6wH68F6sO7hehB0H6wH68F6sO7hehB0H6wH68F6sO7hehB0H6wH68F6sO7h+v8Bv4F5\nlQJahW0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import scipy.ndimage\n", + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import numpy\n", + "\n", + "\n", + "def plotImage(image, cmap='gray'):\n", + " birdsPlot = plt.imshow(image, cmap=cmap)\n", + " birdsPlot.axes.get_xaxis().set_visible(False)\n", + " birdsPlot.axes.get_yaxis().set_visible(False)\n", + " plt.show()\n", + "\n", + "birdsOriginal = scipy.ndimage.imread(\"images/birds.jpg\")\n", + "\n", + "print(\"Original image:\")\n", + "plotImage(birdsOriginal)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Binary image:\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFABJREFUeJzt3VtsFOX7wPFnSAu0hlJIEdsqNx7wgByCV8rBEBIwHIQE\nJCaKBE1EI2qoMQIJKAEVjEFAIxc0mniBBi5IQIMhRCkYNVGgAQImoEEDAhU5yKG22Pd/wX/3t93O\nzM7uzrzvOzPfT/Im3dntzNOdmafPPnNYRyklAAA9epkOAADShKQLABqRdAFAI5IuAGhE0gUAjUi6\nAKBRhd+TjuNwPhkAlEAp5bhNp9IFQlRfX286BFjO8bs4gkoXKE5mf3Ic1yIHKUKlC0Rs7969pkNA\nDJB0gZCMGTMm+/O8efPMBQKr0V4AQpK/L9FiSLdI2gsNDQ2ilJLa2tpyZgMkUp8+fUyHAAuF0l64\ncOFCGLMBEqW9vd10CLBQaD1dbhEJAIWFeiBt8ODBYc4OiL2LFy+aDgGWCTXpnjlzJszZAbHXv39/\n0yHAMmUl3W3btvWYRpsBALyVlXRnzJgRVhxAYq1cudJ0CLBIJBdHjBgxIorZAiJy89OU1wBsxxVp\nSBQbE/DSpUtNhwCLlJV0T506FVYcQGCO48g333xT8HU2Jd6M1atXWxkX9KHSRSxNmDBBHMeRXbt2\n+b5OZ4Lbt2+fbxxKKXn99de1xQNLFeiPKb/R0NCgvIiImjZtmlJKqXvvvdd3PgxGOWP37t2e22Fm\nW9Q1gjD9fjG0bQuuebXsG94EqSQ+++wzmTt3bsHXAaUqsB1bEYcIN8FJE2P303Uch4QLrS5duiSO\n40hjY6OISGRnOUyfPr2o+RZqhSAlSmkvPProo4E+RrW2thov8RnpGHPmzMluczo+3pfK9PvE0DdU\nue2FUaNGyf79+z1f6/H7Rb0eKJXfdpwrrG3ScRzp6urqMf3EiRNy4MABmTVrVuQxwG7Ko70QOOkG\n3ahd5lHS7wFebNkW8+PInb9fjF9++aVMnTo11FhgH6+kW3JP13Gc7Dh//rzfgktdBNDDJ598YjqE\nrD/++ENEbt5JrJiEPmXKlKhCQgwETrqO48iNGzeyiTZXXV2d7+/Onz+/tOgAiw0ZMkQcx5EBAwb0\neK5QEt6zZ09UYcFyoX5HWoF5FTMrwJPbdpbZvmzaBjdu3CjPP/+85/PsE8kWenvBTX19fZizA1zl\nthhqa2u7Ja/x48f3eL1SykiCW7BggfZlIga8TmtQAa5I8xpuXnrpJeOncDCSP06ePGndaVperl+/\nbjw2RqTrPZor0rz4fQQEouJ3RoFJXvuZLfEhfFraC7nYmKBb7lkBY8aMsWobtCkWmBVZpSsiMnbs\nWGlpacmdXzmzA3xltmWbt7P8/e2ff/6RmpoaQ9EgStorXRGRvXv3ytatW6NcBJA1adIkqxOuyM1/\nCOvXr88+7tevn8FoYEKklW5GHCoQQLfMfnH69OnszXmQHF6VboWOhZNsgZ7YL9KJb44AAI1IugCg\nEUkXADQi6QKARiRdANCIpAsAGpF0AUAjK5OuUkr69u1rOgwACJ2WK9KK4faFf5xEDiBujNx7oRRu\n/wRy7u8LALFmXdIV8a5sSb4A4s7KpCvi31JQSslvv/2mMRoACId1Pd18hSpb+r0AbBSbnm6+Qkn1\n8OHDmiIBgPJZX+mKUO0CiJ/YVroi/kl1yZIlGiMBgPLEIun6mThxoukQACCw2CfdCRMm9PheecA2\nTU1NopSSpqYm06HAsFj0dEUK93Uzfv31V7nzzjsjjgYIhuMR6RWbnm5+1VpM9frCCy+QcGEVx3G6\njXxKKZk6daqByGCKdZVuqe0BKgbEgdf2zfabPLGpdEv1xRdfmA4BAApKTNJ94oknOIgGqz377LOm\nQ4AFrEu6Z8+e7TEt0w/btm2bgYiAcGzatMnzuVKPYyB+rEu6t912W/bn/IMPM2fOlJ07d5oICyjb\nc889F/i19HiTy7oDaUF4xdzc3FzUhg3o1NnZKRUVFQVfR8JNBq8DaYlKumyssM21a9ekqqoq8OvZ\nhpPDK+kW/rdrIcdx6HnBaqVsnyTcdLCup1sqNljEHYVEOiQm6QI2yT/g63dVGtIlEUmXDRm2eeyx\nxzwTLZf9plsiki4AxEUsk+7kyZOzP1PlIm6OHDkijuPI6tWru01nW06HWJ4ytmXLFpk9e7bpMICy\nZfY/Em7yJOqUMRIukmLTpk1y8uRJ02FAo1hWugBgu8Tf2hEA4oCkCwAakXQ1euSRR6S+vt50GAAM\niuWBtDjK7Z1zpBpILypdANCIpAsAGpF0NdiwYUO3x35f2wIg2ThPVwO395i+LpBsnKcLABYg6RrC\nDauBdCLpAoBGJF0NduzY4Tr97NmzmiMBYBoH0jQo8B5rjASALhxIM+jbb781HQIAS1DpauL1PlPp\nAslEpYvYUkpxtgcSgxveGJafTKh8gWSj0tXgqaeeCvS6Dz/8MOJI4ufgwYOmQwBCRU83ZKV+DKbC\ndaeUkr///lsGDhwoIrxPiA+vni5JN2SlJF0SiTfaL4grDqQZxsfkcMybN890CEBZqHRD5leZcZFE\n8bhDG+KKSlcTx3G6jVzXr183FBUAW5B0NaqurvZ87pdfftEYSTwcP37cdfrChQs1RwKEh/aCZrQY\nisOVfIgr2guWWL58uekQABikrdJVSonjOPLKK6/IunXrwpptLFG9Bcd7hbgyfp5u7nLSvsOQSIJL\n63t1/Phx+f777+Xpp582HQpKRHvBIrfffrvpEGC5+vp6efDBB02HgQhoS7pff/119ue03zHq1KlT\nrtM3btyoOZL4ytx5LIl3IFNKSXV1tYwYMcJ0KIiAtqQ7adKkbo+PHTuma9FWcvt4PG3aNAOR2C3I\ngcektxqQLEZ6ujnzD2v2scW9Bf6H+1awnySJlT3dpH0sLAU7VOn27NljOoTQdXR0mA4BEeNAmgVy\nE+/HH3+sZZlKKWloaNCyrKiMHz/edAih6927t+kQEDGj7YWc5YS1GASUWR/vv/++vPbaa4ajuYmb\nBaX3FLkksrK9APOamppMh5DlOI5s27bN9WZBZ8+e9fy9UaNGRR0aEBoq3ZTKXR9vvfWWvPnmm+aC\nCSjp25DjONLV1eX5HOLF6kp39OjRMnr0aBG5uWONHDnScETJlp+84nI/iDVr1pgOIVJ+/1RmzZql\nMRJEKv8k87wTzlVYY8OGDSqoAwcOhLZcRs/R0dHh+r6bjivI8GI6rqj/vlmzZhmPjVH0unTNq9oq\n3aD3QHUchx5dxH7//XfTIZTM62O2X5WYBDU1NaZDQEgi7+n27t1b/v3332DB0LfSxmu9x2UduMUf\nl9j9JL1vnSZePd2KiBZW9O94HUAA3DiOk/jqFskUSdItRa9eVhzTQ4ykLfEmtbpPG22ZbsWKFQU3\nkDTtQKa1tra6TldKZb+v7cyZM7J27VqdYRXNcRxZunSpiIg0NjYajqZ8QZPooEGDSLgxFUlPN3+e\nuRtHfX29nD592m+ZpSwSJQjyT+6uu+6SEydOaIgGIiItLS0yduzYgq9jP7GfV083kko3s0EsXry4\nx8bx559/+v5ue3t7FCGhBI7jkHAjtGvXrh6nE5FwU8DrXDIV8nm6uaO5udn3PN2olpv2sXXrVtXe\n3u773rMO9I1SmY6bEXj9uudVrydUhEn3/wNio9K7ARTlySefNB5zkse4ceM83/v58+ery5cvs3/E\nfHjlVW33XnDjtWw+PoXP7b1ubGyU06dPsx4MyX/fg95VLf+1sJOy8d4LW7ZsMbn41MrcxcvvgKZI\n4R0f5ckkTre7qnGmT3IZrXRF3Deey5cvS//+/aNeNHJQ7dqHajferKx0RdhwbEdFZU6hfWPXrl2a\nIkGYjFe6GX79LehBtWuftrY2qaur83yedWMvayvdDDYe87zWwQ8//KA5EmQMGjRIzp8/7/n8/fff\nrzEahMGaSjdDKSX//fefVFRYc1uI1HHbJvinaFaB/VRjJAjK+ko349ixY3LgwAHTYaTaggULTIeA\nPCTW5LCu0oU96LPbJ7NOVq1alb3RjwjrxkZelS5JF76uXr0q1dXV8t1338nEiRO5N4YFOjo6pLKy\nsts0kq59SLooS2VlpXR2dpoOAzn4JGI3r6TL0SoEQsK1j+M4smnTJlFKyS233GI6HAREpQtjNm/e\nLNXV1fL444+bDgUIHe0FWGXKlCmyY8cOEeFjMZKJpAur5G53169fl+rqaoPRAOGLzXm6SJ+qqiqj\ny583b57R5SNdqHRhhE1XvWVioc2BMFHpAi64ixp0I+nCVearRXQvE0g6ki5cpeGj9rFjx0yHgBQi\n6SK1hg4d2u3x4sWLDUWCNOFAGroZPny4tLa2Zh9HVfHacMN0mw7mIXm4DBi+bOmndnV1Sa9efABD\ncrF1Q0REzp075zpdKSX33XefiIg8/PDDoS3v6NGjrtNNV5pDhgwxunwkH+0FZAWtdsNKjPnLGzZs\nmBw+fLjH68aOHSv79u0LZZl+y88wnfiRDFwGjKxSWwlhJyPdST7o8km6CAM9XZSl3ERkS6IHTKOn\ni4LKPcj29ttvl/R7JFwkEUkXWV5JLqnJb/fu3a7TL1y4oDkSpErmck+3ISKKkbzR2NioMubOndvt\nOS/lLK+2ttZ1nj/++KPn8spdZtARhOn1xYjn8MqrHEhDNwW2h9Dmm5lXVVWVXLt2LZJl+mltbZXh\nw4cXfF1Sq3xET3H2AoKIKunmzjt/PlEuM+PKlStFf48YCRfl8Eq69HTRTZSJxnEc1/lPmzYtsmVm\nFJtwm5ubI4oEqefVd1D0dBkias6cOUoppY4ePRppfzPqnuqVK1d6zLe+vt532abfe0a8h2deJeky\n/IZSSh06dEjbsqJMfi+++KLrPL18/vnnxt9/RnyHV16lpwtPmW1DZ2/zjTfekHfeeafbNB3L99oP\n6OuiVIqeLor11VdfaU867777rly9elXrMkVEfv75Z+3LRErRXmAwbo6PPvrIs7WR8cwzzxiPkxGP\nQXsBCODgwYMyYsSIbo9HjRrVrf1AywFBeLUXSLpAnvx9wnEcki6KRk8XCCg/qfbv37/bY79CBSiE\npAu4cBxH3nvvPRERuXjxouFokCS0F4AA3PYT2gzwQ3sBACxA0gUKGDdunOv0Yu/nAIjQXgAC4Yo1\nFIv2AoqSc4EMgBCRdAFAI5IufFHtAuEi6YZEKSX19fWmw4gEiVdk4cKFrtPzr6t/6KGHNEeGuOFA\nWghyvwpm5MiR0traajii8uVvF21tbXLrrbcaisYOhf75cFANubj3QoTcrtWPu7RfDFBsdZ+m9wbB\ncPYCEBAJF1Ei6UYgqT3QtN/oe+XKla7Tk7q+EQ3aC2VyHEe6urpcp8eZ38UACxculDVr1khVVZXm\nqPTxupUjF0kgKK/2QoXuQNJi8uTJsnPnTtNhhC436SilpLKyUm7cuGEwomgUm0SVUiReBEKlG4Kk\nVj8Ftg2Nkdglqesb4eJAGnzt3LnT7TvyXKU9ueTf1DxjzJgxmiNBHFHplsmrp5t5Li6KORg0fPhw\nOXToUITR2I9qF4Vwnm6EkrAD5v8Nly5dktra2kT8bVFJ+7nM8Ed7wQCllPTp00dERD744AOpq6sz\nHJG33GThOI7U1tb6vv7SpUtRh2S9q1evmg4BMUSlG5KgH8/Xrl0rixYtijiacFHteuvo6JDKysrs\nY94TZFDpGrZ8+XJxHCd2CRf+evfu3S3RTp482WA0iAMq3SKVevVR3Csg+pf+6urqpK2tTUR4X3AT\nla5BSdgJx48fbzoEq/3111/iOE4i1jWiRdLVYPbs2aZDKFtLS4vpEIBEoL1QJLf3a/r06bJ9+/ZU\nXFDgdU8CAN3RXgjJgAEDuj12HEe2b98uIiInTpzw/L2ZM2dGGpcu/fr1y/68ZcsWg5EA8USlW4Il\nS5bIqlWrXCu9NFS7Iv/7O5P0NwFh4oo0TU6dOiUNDQ2uz5GggPSgvaBJY2Oj53MTJkzQGAkAG5F0\nI/Dyyy+7Tt+9e7fmSADYhqQbgQ0bNoQ6v/Pnz3e75eL8+fNDnT8AfUi6EQmzf/vpp592e9zc3Fzw\nnrcA7ETSjdDy5ct7TLvnnnuKnk9TU5NnEif5xlt1dbXpEKBb/rcF5H1zgGKUN5YtW6bylTqvdevW\n9ZhXWPNmmBmst+QOz7xK0o1+5CbeCxcuqMGDB5c8r/Xr15N4EzRYb8kdXnmV83Q1yrzX5fZ7r127\n5vv155wPHB+5+59SSnr1ouOXFIqLI5Kls7NTKioqXJ8j6cZH/v7HuksOr6TLv9WYyv22AiSHXxGE\nZCDpJkRNTU22SlJKSWdnZ7fzewHYgaSbEJcvX+6WXCsqKmTgwIEiInL33XebCgs+HnjgAdfp/JNM\nNpJuDGzevFlGjhyZffzTTz/JuXPnAv2u4zhy/PjxqEJDGY4cOWI6BBjAgbQYKLXy4aCM/bzWLesu\n/jiQBgAWIOkm2OrVq02HACAPSTemMt886/cxdMaMGRojQpg4mJZcJN0YyE2sy5YtC9zvGzp0aFQh\nISTr1q3L/pxZt4sWLRIRkRUrVpgKCxHiQFoCcDAm3pRS0t7eLn379vV93bBhwzjjIUa8DqS5X0eK\n2Nu/f7/pEFBAXV2dtLW1iYgUTLj8A00OKt0EcFuH7KT24dS/dOGUsRRpaWkxHQJCQsJNHirdBOBO\nVfHgtq+1t7fLHXfckW0z5GNdxhc93ZTYuHGj6RAQUJCEqpQi8SYMlW4C5K5DdlC7eSXRAvthlCEh\nIvR0E+zVV18teKEE7OC1jmpqajRHAlOodAFLcL51slDpApYjuaYDSRewSH7iJREnD0kXsEwm0ZJw\nk4mkC1iIhJtcJF0A0IikCwAakXQBQCOSLgBoRNIFAI18r0gDAISLShcANCLpAoBGJF0A0IikCwAa\nkXQBQKP/AwtvTcpUtjvBAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "birdsColorMap = birdsOriginal < [100,100,100]\n", + "\n", + "r,g,b = birdsColorMap.T\n", + "\n", + "# Hack: Using the green channel, because in this particular image, when inverted, \n", + "# pixels with full green would mean it's a white pixel.\n", + "\n", + "binaryBirds = g.T\n", + "print(\"Binary image:\")\n", + "plotImage(binaryBirds)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAElxJREFUeJzt3X+IFGUcx/HvI5aemXfSoaeXIf2RhGKFEP1hZ4gZkpmS\nRkGEaNhF2T8FWYSaSGX1R2aQgT/+LRQsLLAOi7P6QzD16iiLpLzwOrvMuyO9k6ub/sjddvdmdmZ3\nZ57nmWfeL3jgbnZv5nu7M5977plnZpXneQIA0GOM6QIAIEsIXQDQiNAFAI0IXQDQiNAFAI0IXQDQ\naGy5B5VSzCcDgCp4nqf8ltPTBQCNCF0gRp7nybRp00yXAYsRukBMvvjiCxER6e7uNlwJbEboAjGZ\nP39+/uvVq1ebKwRWU+XuvcCJNCC60mNJKd/zKMiIxE6kccMcwN+4ceNMlwAL1RS606dPFxGCF/Az\nNDRkugRYKLYxXYIXAMLFeiJt6tSpca4OSL2+vj7TJcAysYZuT09PnKsDUq++vt50CbBM7FPGGGYA\ngGDM0wUStnXrVtMlwCKJhO4tt9ySxGoBERH58ccfxfM83wbYrqaLI6ZPny5nz54dtfzWW2+Vjo6O\n2qsDfEQNV90XJ4QcSxorgQ0SuTjCL3CBpCml5PPPPw99Hj1f2IgxXaTSwoULRSklbW1tZZ+nM3i/\n/PLLsnUwBAKRGkO3ubnZd/lDDz1Uy2qByBYvXiyfffaZ6TJEROTOO+80XQJSoOYb3kT5y814FpIW\ntB/aNK4rwrGQJcY+OYKdDLr19/eLUkrq6upGzW5Yt25dbNtZtmxZRbMnwoZCkBFBU2+u7ECeX7vr\nrru8KG6//Xbfn6fR4m5TpkzxPM/zOjo6QvfLOLZXLdOvE01f8wJyNfLwwuTJk+XPP/8MfG7Az1f0\nfKBa5fbjQnHtk0opGRkZGbX89OnTcuLECVm5cmXiNcBuXsDwQuTQjbpT+6yjqp8DgtiyL5bWUbj+\ncjV+/PHHsnTp0lhrgX2CQrfqMV2lVL6dP3++3Iar3QQwyt69e02XkJcL2b6+vooC/d57702qJKRA\n5NBVSsnff/+dD9pCjY2NZX92zZo11VUHWE4pJZMnT/ZdXk57e3tSJcFysX5GWsi6KlkVEMhvP8vt\nXzbtgzt37pTHH3888HGOCbfFPrzgZ9q0aXGuDvBVOMTQ0NBQFF4LFiwY9XzP84wEXGtrq/ZtIgWC\npjV4ZaaMhTU/Tz31lPEpHDT325kzZ6ybphVkcHDQeG20RN/32qaMVarcv4BAUsrNKDAp6DizpT7E\nT8vwQiF2Jpg0f/58q/ZBm2qBWYleBtzS0pLk6oFRcrNrvvrqK9OljKKUkjfffLNo2cDAgKFqYEpi\nwws5+/bty1+dw197QGTGjBnS1dWV/57jwk3ahxdyVq1aJc8++yw7FnDFr7/+mj8eent7DVcD3RLv\n6QJAFhnr6QIA/kfoAoBGhC4AaEToAoBGhC4AaEToAoBGhC4AaEToAoBGY00XEKTwog2uZgPgCit7\nupMmTSr6vuD+vgCQatZeBmzTx64AQKVSdxlwuWD1PE9+/vlnjdUAQDys7enmhA0r0OsFYKPU9XRz\nwkK1s7NTUyUAUDvre7oi9HYBpE9qe7oi5UP1hRde0FgJANQmFaFbzqJFi0yXAACRpWJ4QSR8iCGH\noQYANggaXrD2ijTARaWdBzoJ2WPd8MK6devyV6AVtiieeOKJhKsD4uV5nixdutR0GdDIuuGFai/3\npceANAjav9l/3ZPq2QtRvP/++6ZLAIBQzoTugw8+KPv37zddBhBo7dq1pkuABawbXujp6ZGpU6eW\n1iEiIgcOHJDly5eX/Xn+TYOtmIGTLakZXmhqasp/rZQq2gFXrFghhw4dMlEWULPHHnss0vNKOx1w\ni3U93SiCat69e3fkHRvQbXh4WMaODZ+lSU/XDUE9XadCl50Vtrl06ZLU1dVFfj77sDucujhCKcUn\nScBq1eyfBG42WDemWy12WKQdHYlscCZ0AZuUnvDNnRSmcwAnQpcdGbZZsmRJYNBy2W+2ORG6QJqc\nPHnSdAkwKPWhSy8XaXP27FlRSsm2bduKlrMvZ0Mqp4wBrsgdfwSue5yaMga4QiklL774oukyoBE9\nXQBIQGruvQAALiN0AUAjQhcANCJ0NZozZ47pEgAYxuwFTQpPWDI9CMgueroAoBGhq8GOHTuKvt+1\na5ehSgCYxjxdDfxeY4YYALcxTxcALEDoGsINq4FsInQBQCNCV4OPPvrId/m5c+c0VwLANEJXg19+\n+cV3+ZQpU/QWAsA4QhcANGLKmCZBrzNTxwA3MWUMACzAvRcM454MQLbQ09XgkUceMV0CAEvQ041Z\ntRc90MsFsoGergUI3HCe53EVH5xA6Gpy8uRJ0yWkUmnYrl692lwxQAyYMhaz0tezsBcb8lonVlOa\ncYc2pBVTxjRRShW1QoODg4aqAmALQlejCRMmBD72ww8/aKwkHX766Sff5evXr9dcCRAfhhc0Y4ih\nMlzJh7RieMESmzZtMl0CAIPo6RpA7y06XiuklfGebm7qT2trq65NAoB1tA8vvPPOO7o3aZ3rr7/e\ndAmw3KFDh0yXgIRoC91PPvkk/3XWryw6e/as7/KdO3dqriS9cv85ubgv9fT0yD333OPk7waNoTtj\nxoyi70+dOqVr01byG5O87777DFRityyeeGxqajJdAhKk7UQaVxb5K3cFW9aMHz++4gtIXH29uOVn\n+hk/keaHf584oApVGrjt7e0JVWLO5cuXOS4cZ7Sne2UbcW0i1TzPy/xrUU3YuPaa8R+hO6zs6YrQ\n283RfWDlTkK98cYbWrdbiaB7WBTKwv6Thd8xS4yHLsx65plnTJeQp5SSAwcO+AbtuXPnAn/utttu\nS7o0IDbGhxeubCeuzSCiwvfjpZdeks2bN5srJiLX9yGllIyMjAQ+hnSxdnhBRGTevHkyb94802Vk\nRml4pWVa1muvvWa6hESV+6OycuVKjZUgSdpC9+233w587NixY3Ls2DHxPC/wwgHEZ3h4eNSyNIwb\nPvfcc6ZLAGqmLXSj3gO1ubk54UrQ1dVluoSqBf2bnYY/GrWYNGmS6RIQk8THdK+++mq5fPlytGIY\nt9Im7VP4XJ1a5fq4dZYEjekm8hHs1fQ6gk4gAH6UUvm5za73cuGWREK3GmPGWHFODymStZ4flwa7\nQVvSbdmyJXRHoceiT0dHh+9yz/NS93ltYRdQpEnU36OxsTHhSpCYwlvklTYR8apppQofmzZt2qjH\ng55LS7aF2bVrl/Eas9aOHDkS+r5wnKSjBeZqEqF7ZYPehg0bAh8LMjQ0ZPzFykrjwDbb2traIgUs\n70s6m/bQLdd2797NTmWg7d+/3xsaGuLAtqRVy3TdtMjvrz2he6Ugdiq9O0BFHn74YeM1u96CrFmz\nxhsYGOD4SHkLylWjnwYctG1XTorYxO+1bm5ulu7ubt4HQ0pf98LXu9xxWfpc2Mmz8d4L+/btM7n5\nzMqd7e/u7i77vLADH7VRSsnmzZt9Z18w08ddRnu6IiIHDhyQ5cuXFy0bGBiQ+vr6pDeNAvR27UNv\nN92s7OmKiKxYscJ0CSiDHpU5YaHa1tamqRLEyXjoiozeubi5h370muy0devWwMcWLVqksRLExfjw\nQqHCWggBM/z2h6NHj8odd9xhoBqIiPzxxx9y3XXX+T42e/Zs+e677zRXhCiChhesCl2R/w76f/75\nR8aOtea2EJnjt0/wR9CskONUYyWIytox3VJKKQLXsNbWVtMloATB6g7rQhfmvfvuu6MOck6omVf4\nnjz//PP5r3lv0sW64QXY5eLFizJhwgRpa2uTxYsXmy4HBTgHYrfUjOkCiIbQtVtQ6DJ4CqQUQZtO\njOkCgEaELozJ3XUJyBJCF0YUhu2lS5cMVgLoxYk0GFHutoaAC1JzcQSyiWEGZAWhi0zLjSu3tLSY\nLgUZwfACjLDl/r3MdUVSGF4ASpw6dcp0CcggQheZNWvWrKLvC+9nACSF4QUUmTt3rnR0dOS/T+pf\nbhuGF7iFJZLEZcAIZcMMgpGRERkzhn/A4C72boiIyN69e32Xe54nN998c+zb+/77732Xm+5p3nDD\nDUa3D/cxvIC8sJ7u8ePHZd68eYltb86cOdLZ2Vm0LMkQtmGIA+7i1o7Iq3YYIe4wilqHy+PKcBdj\nuqhJrUFkS9ADpjGmi1C1nmB7+eWXq/o5AhcuInSRFxRyrobf4cOHfZdfuHBBcyXIlNy1535NRDya\nmy3n0Ucf9V1eqpZtNTQ0+K7z6NGjgdurdZuVvg4ma6C52YJylRNpKBKyP8S23ty66urqyt5PN6le\ndkdHh8ydOzf0ea728pG8oBNpDC9Ai8LwKvx6cHBQy/Y//fTTot4GgQtTCF0USTJolFK+6584cWJi\n28y5++67K3r+7t27E6oEWUfoYpRcOCqlZObMmSKS7B25Ll68GPhYueGOWrcxffr0wD8ya9eujWW7\nQClCF2WdOXNGlFKJXApcKOl/5SdOnChPPvlk0fZ+++23sj/z3nvvJVoTsokTabDKhg0b5JVXXila\npmNsNeg4YFwX1eJEGlLh1VdflS1btuS/37Nnj5btEq7QhZ4ucMX9998vH3zwQdGywjD2PI9wRmT0\ndIEQH374YdEN3EVETpw4ISL/Dz/EdWIP2UVPFyjR2dkps2fPzn+vlOIDLFExerpARHPmzJGlS5cG\nPk5vF7WgpwuEaGlpkfb29qJl9HYRJqinS+gCEfgdJwQvymF4AQAsQOgCIVpaWnyXX3PNNZorgQsY\nXgAi4Io1VIrhBVTs9ddfN10C4Bx6uvCV2y/oyf2Hni4qRU8XVWFOKhAvQjcmLoeTy79bVOvXr/dd\nnvskihtvvFFzRUgrhhdi8Ndff+XPZM+cOVPOnDljuKLale4Xvb29MmXKFEPV2CHsjw9DDSjExREJ\nCvrQxTTL+sUAlfbus/TaIBrGdIGICFwkidBNgKtjoF9//bXpEozaunWr73JX328kg+GFGimlZGRk\nxHd5mpWbIrV+/XrZsWOH5or0CrqVI1PHEBVjugkJCt0lS5bIoUOHDFQUjyi9tywGTcjxorES2I7Q\nTZCrvR8Cxp+r7zfixYk0hMrNOc21IFkPl/r6et/l8+fP11wJ0oiebgxc6PlUcjJo7ty58u233yZY\njf1ceM+RLIYXEuTCAVj6O/T390tDQ4MTv1tSsj6XGeUxvGCA53kybtw402VEUhgWSilpaGgo+/z+\n/v6kS7JeV1eX6RKQQvR0Y+Ly2X56u+XxScHwQ0/XsE2bNpkuAQkhaFEJeroVqvbqo7QfmIxfhmtq\napKenh7TZcAS9HQNciGcFixYYLoE6xG4iILQ1WDVqlWmS6jZkSNHTJcAOIHhhQr5vV7Lli2TgwcP\nZuKCAk4aAdEwvBCTyZMnF32vlJKDBw+KiMjp06cDf27FihWJ1qULQQvUhp5uFerr66Wvr883gLLQ\n2xX57/d06fcB4kZPN0b9/f2BgdPd3a25GjMIXKA6hG7MmpubAx9buHChxkoA2IjQTcDTTz/tu/zw\n4cOaKwFgG8Z0ExL3pbOF61u7dq3s2bOnqvUA0IO7jBkQ51Vc3P8ASBdOpBngd7+Fm266qap1BYVr\n2A3HAVim9NMCSj45wKPV1jZu3OiVqnZd27dvH7WuuNZNM9MeeOAB3jdHW2CuErrJt8LgvXDhQk3r\neuuttwhehxrvm7stKFcZ09XIi+mCgkuXLkldXV3g44zzpkfh8ed5nowZw4ifKzxOpLlleHhYxo4d\n6/sYoZsepccf7507gkKXP6spddVVV5kuAQko1wmCGwhdR0yaNCnfS/I8T4aHh+X8+fPyzTffGK4M\nQCGGF1Isaq+If1ntFfQe8p6lH8MLDjl27Jj8/vvvkZ7LwQvYxf9MDKxS7TgfgQvYh54uAGhE6Dps\n27ZtpksAUILQTSmlVL4FWb58ucaKEKf6+nrTJSAhhG4KFAbrxo0bI4/Vzpo1K6mSEJPt27fnv869\nt0op6evrky1bthisDElhypgDmHaUbp7nydDQkIwfPz7wObyX6cOUsYw5fvy46RIQorGxMf8Hs1zg\nwi30dB3g9x7SM7IPU/+yhZ5uhhw5csR0CYgJgeseeroO4E5V6eB3rA0NDcmMGTOkt7fX92d4L9Mr\nqKfLFWmO2blzp+kSEFGUQI3rHsywBz1dB/T19eXndXKA2i0oREOOwyRLQkK4iTlgsWuvvVYGBgZ8\nHyN004nQBSzHfGu3MHsBsBzhmg2ELmCR0uAliN1D6AKWyQUtgesmQhewEIHrLkIXADQidAFAI0IX\nADQidAFAI0IXADQqe0UaACBe9HQBQCNCFwA0InQBQCNCFwA0InQBQKN/Ae70yzlkyn1PAAAAAElF\nTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# I've chosen a disk-type structuring element so as to avoid birds' wings reaching out and touching others on dilation\n", + "struct = [[0, 0, 1, 1, 1, 0, 0],\n", + " [0, 1, 1, 1, 1, 1, 0],\n", + " [1, 1, 1, 1, 1, 1, 1],\n", + " [1, 1, 1, 1, 1, 1, 1],\n", + " [1, 1, 1, 1, 1, 1, 1],\n", + " [0, 1, 1, 1, 1, 1, 0],\n", + " [0, 0, 1, 1, 1, 0, 0]]\n", + "\n", + "\n", + "birdsImage = binaryBirds\n", + "\n", + "# Two erosions and two dilations to get rid of noise, and isolate bird structures.\n", + "birdsImage = scipy.ndimage.binary_erosion(birdsImage, struct, iterations=2).astype(birdsImage.dtype)\n", + "birdsImage = scipy.ndimage.binary_dilation(birdsImage, struct, iterations=2).astype(birdsImage.dtype)\n", + "\n", + "plotImage(birdsImage)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18 birds have been detected.\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFPhJREFUeJzt3XuYVPV9x/HvzOwFZndhuSws4gawKKIGZEGlgIBRIxIR\ng03WKl7w8lBbqGnykP7RqJXkn9QmNtU0taXVGGIhsTwBH1G8VEAhUWER5SqEBZeF5bKwXPY+l/5B\ndtjZPWd2Luf8fufyfj0PDzPnzMz5PA/shx+/c35nAvF4XAAAagR1BwAAP6F0AUAhShcAFKJ0AUAh\nShcAFKJ0AUChvFQ7A4EA15MBQBbi8XjAaHvK0hURebW61vo0AOBh91ZWmO5jegGw0KottdLaEdUd\nAw5G6QIW2bDnuIiIrN1+RHMSOBmlC1ik4Xxb4vGhhiaNSeBklC5gg601p3RHgEPlXLq/eP8PVuQA\nPCfGzaRgIKfSbWprFxGKFzDyu62HdUeAA1k2vUDxAkDvLJ3TbWnvsPLjANd7fVud7ghwGEtL9+VN\nW638OMD1OqIx3RHgMJZfvcA0AwCY45IxwGY7687ojgAH6fXeC9loON8sg4rDdnw0IGejb0tMzhvu\nKw3NU5wGyIwtpQvYyaxwRUQao6sSj51SwHuPnpWrh/fXHQMOkdP0wiubq63KAaStNDRP8gJlvb6u\nawEDTsFIF65UHLxRRETOxz6USPy46esao6uUjXgHFRcm3X+hq1VbLt4idd4k89v+wftyGuk+MKXS\ncPv+4ydz+VggbcXBaWmNelWYceUQ3RHgAjmNdIsKCwy3Vx86ItWHLt7e7vGbJudyGCCl4uCNplMJ\nTpnX7cQoF7ZPL1C4UC0g+dI/NEdEoj3KOBycIAWBUZYc52hji/x+f/r/qxvSr48lx4W7ZVW6RxrP\nyuptu3p93d0Tr8nm44GM9Q99Q85E35BQoL9E42dMR77NsW1SEMq9dLvO0abr+NnWnI8L90u7dNsi\nEfnvD7Zk9OFD+hVnHAjIxpnoGyIiEo2nXohg1XTDvEkVhsVbVJgnpeECqTvdbPi+VVtqmWLwubRL\nN9PCFbmwJJjpBVgt20vB7J7f7Vqmq7YYl66IyOZ9J2XK5YNtzQLnyvrqhcdvmpz41SffvLu5FwOs\n1Bxzzk2VOks2PxTMaPRaf6bFrkhwgbRL9/GbJkswEEgUbVcLpk1K+d49R82vowTcbN6kCpkzYbjh\n9lQ27uVnwq8yGukunHmD6b5U0wjv7zmQyWEAU+HgRMPtpaF5jrs8bFSZ+TmNk+eMF1HA+yy9y9iD\nU41/IAArFQRGJB73D81JKtvi4HTD9+go5AkjBig/JpzP0tINF+Sbjnh31NVbeSj4WDg4MTGyDUh+\n0r7mWM8TvjpHwKmmGVZX8x1qfmTL/XSNiveDLw7acSggSUySrxpwwpSDWfFGY3xbsB/ZdhNzLhWD\nTsXBGY4o3E5cm4tOtn5zxF0Trrbz44EeOqcd8gKDdEfpYd6kChk9tCRp25ptTDH4ja2lO6y0RC4r\nG2jnIQBXGVdRKrePuyTxPBJlisFvbP+OtNuuuUKmjB7BdAPwJ30LQonphsI8vqbQb5TcxHx8xTAV\nhwFchXlef+KfWQBQiNIFAIUoXQBQiNIFAIUoXQBQiNIFAIUoXQBQiNIFAIWULI7Ixu7mpxOPx4af\n0ZgEAKzjyJFuLJ58V/3dzU8nlTAAuJUjSzcYKDTcTvkCcDtHlq5I6imF3c1Py/6W5xSmAQBrOLZ0\nRVIXb0e8kVEvANdxdOmK9H4S7UDrzxUlAYDcOb50e9MWO647AgCkzRWlm2q0OyT/FoVJACA3rijd\nVJpif9QdAQDS5tjFEelqitawkAKAa7i+dAE3eXH73KTnC8ev1pQEujiudBsjW+Ro++tZvbe84A6L\n0wD2enH7XJk16gcyot91uqNAEcfN6WZbuGPDz8iAPP7iwn3eqvmR7ghQyHGlm626tt/qjgAAvfJM\n6Z6N7pDDbSt1xwBM7Tn1ru4IcADHzenmBYolEj+ftK3zioTDbf8j56J7TN97LrrL1mxALjbUPm+6\nr+sJNk6ueZvjRrqX912SeDw2/EzSJWCXFv6lFIdG64gF5GxGxeK0XtcSabQ5CXRyXOmK9CzbrioK\n7zd9X2lepV2RgJx9cPjf0npd37xSm5NAJ8dNL+RiWMHc3l8EKPRfn39LIrH2tF/P1IL3ubJ0x4af\n4baOcLTuiyDSQeH6gyOnF7LB8l+4XTZFDfdx5UgXcLqKkkqpPVedeN51FEu5+psnSpdRLpxm9mXm\n01+3j3pS3qz5ocI0cBLPTC8AbjGo7yjdEaCR60uXUS7cpih/kCwcv1quHTIvaTsn0vzBtdMLlC3c\n7oZhD8qnx1eJCIXrJ64tXcALFo5fLdXHfqM7BhRy/fQC4HaVQ7+tOwIUonQBQCFKFwAUonQBQCFK\nV6FQS4PuCAA04+oFRQZW/yzx+FTlExqTANCJkS4AKETpKhCuXZ/0vOgQ35UF+BWlq0CfE9uTnhc2\n7NSUBIBulC4AKETpatL1xBoA/6B0AUAhSleBjv7G908t/ew/FScBoBulq0C0oJ/h9mCkWXESALpR\nugCgEKWrQHPFTN0RADgEpQsACnHvBc24JwPgL4x0FSg4tUd3BAAOwUjXYtkuemCUC/gDI10HoHB7\nd+fKF+TOlS/ojgHkjJGuItG+ZRJqOaE7hut0L9qKmj1SO+pKTWmA3DHStdmpyifkVOUTcmbsvaav\n4T4M6ZvwMbfFhLsx0rVYqqmCeDBPArGIwjQAnIaRrkKnr/0b0339d/5SYRJ3uPmNXxluH7XvM8VJ\nAOtQug4RamvUHcFx3vvG/Ybbv1q9UXESwDqUrmItwybrjgBAI0pXsZZhN+iOAEAjZaU7c/4smTl/\nllzy3huqDgkAjqN8pHvFS8+rPqTjNH71Ed0R4HDXvfuc7giwibLSPTVuUuLxzPmzVB3WkWL5xYbb\ni778P8VJ3KtzhZoXV6nd/JvvStmRnTL7lUd1R4ENlJVuYUPyaqzrl/j7L5TR9bz5Zw5oSOJse6/x\n3xz4e9/+qe4IsJGyxRFFdYeSnoePHlZ1aMc6VflE0mq0YEeTxjT6BaNRueO1X2T0njVVi2xK4wyz\nX3lU1j6wTHcMWEjr1Qt+n2YQ4WY3XWVauA1lw21Kos+s5QuZVvA4LhlzgM7ipYAzM+hEne4IlgvG\norojwGbaS5fR7gWqC7eq/impqn9Krj33ltLjZmJN1aLELzNePJHWHSNfb+GGNz43pmmzfFrijH/4\n1lQtkus2rZVPps7usa+tT1gKW42/sr7/6RNyZkCZ3fEAS2gf6UK/a86/rztCglHhioism/uw6Xtm\nvL3SrjiKxXUHgAKOKN2Smn1SUrNPdwzfqKp/Kun51Q4q3VT2X1mpO4LNAqZ7yg9tVZgDdlJWunW3\n3mm6b+KTi2Xik4tl5vxZMmXxfaoi+VbM4I+9exE70a7xU3RHAHKmrHT3PfjXab1u8/O/tjkJmkOl\nuiNkzeykmtdPqOV1tOiOAIvYXrrBSCRxs5verF/u3DPpXvJG2XcMt7thtCvi/QURRsZtfll3BFjE\nlqsXsroMLGA+nwV0t6Zqkdy58oXE74BbOOeSsThnbpEZv414u16vy9Jg91I2p3vwm/f1On3AQgl1\nGvPKDbdX1T8ls0+669uJe1tA4SbplmlB23mbk8AuSkp3/fK35ODdF77vavMLr6o4JHqxbrD5ic2S\nSINU1T8l1535ncJEEBGZvO6f0npde6Hx7UHhfLZML6xf/pbMnD9LDlQtkC/nVCXtay8dmPK90x+a\nIxtfft2OWMjQJ/3v0h3B065/5ycy+OjujN/H1IK72Tanm2oqoX7G16V8w9uG+4KRDrsi+d7UxhUy\nrO0LCcUjvb52ZflSBYn8LZvChftpWZG257Hv6jisr1XVPyWXtu5Kq3BFRL7S+rnNiWDmsykPSSS/\nj+4YsIm2ZcBck6vfmiFLTEe0f974W8VpsPaBZbL2gWVyePQ0yetoNX0ddx1zN633Xjhxw406D+9b\nK8uXysrypdISLEn5OrcslnCrtQ8sk33j5ybKtvu+VChe99JaujsX/4OcnNRzPf2Nj83TkMbbOovW\naGTL/K0++8bP0R0Bimm/y9iO7zCacjJGu/r0Ntq9/p2fKEoCK2kvXZGe87uhFuObVcM+jHadaf+4\nO0z3cfWDOzmidEU4seYEZsV7S8N/KE6CTl9ce1fKhRDFjUcUpoEVHFO6IheLNx50VCxfMSreQR2H\nNSRBp3er/sV03/Q1TP+4jePabf3yt2TDK2t1x/C1Lf04ueM0rELzDseVLvT7Y/i6HiNeTqjp17V4\n91benXjM5WPu4pxbO8JxVpYvlb849kMJxTukvvDPdMeBJBfvmOr/1ZgE2aJ0kdJrQ5/UHQHwFEoX\ncCnmed2JOV0AUIjShTb3bJwq92ycqjsGoBSlCy26lu23PvyaxiSAWpQutAvF2nRHAJShdOEITDPA\nL7h6Ab5228YLCws+Hv99Od3/Cs1p4AeMdOEYOke7129P71t4gVxRuvCtaZ/8QHcE+BClC98qaqlP\nen5ZLTdagv0oXSQpbO+QMQfrEr/85PKaVbojwAcoXSSMOVgnI48c15rhno3TtB4fsBulCxERKT95\n2nD7mIN1UtARsfx4Z8MjTfbELT9WJvq0ndJ6fHgfpQsREakfPMB036i6YzLmYJ2MsHAUvHbSr3ts\ne3PSchG5uDxYx9UMMz76vvJjwl+4TteHsp2rPXTJEIuTJLt9y/we2+7ZOFVWTN9k63EBlShdpGXv\nyOE5vT/bUSuFC69hegG2G1fz71m9j8KFF1G6SMh1NOs2DaVjDbffvPlvFSeBn1C6PtS1XI8OHiB7\nRw63tXD3VNxnuL2h5CrbjpmOLeO+Z7g9L9Ist218NHFfBsBKzOn6VKYlO+ZgXdbF3J5X0mNb59RB\nKNZmej9dO0+iTdn6j1LSdNiWzwZSoXShxIrpmxIn07oWaTRYqOT4kz7/qQw6vSuj96ybzneQwXpM\nLyCJndMMK6ZvMhy5vjb1XduO2SnTwq0rZ2Uc7EHpoofOOd69I4fLgUvLRUSkPd++/xRFQn1N91m1\nQCIa6jmiXj/5n01Hs8PrP7TkuEB3lC5S6sgLyd6Rw6Vm+FBbj2P35WHvTv257Bp98YTeuunLpK2g\nNOV7xu9+0dZM8CdKF46xYvom2T7qr2z7/NpLbpJ105f1GN2ajXbLT3xiWxb4F6ULR9ldcb/sGPFw\n4vmB8juUHJeTZlCFqxfgODtGPCI7Rjyi/Ljbrl4kE3a+YLr/xEvbpGzBBIWJ4EWMdIE/OT7oWjlX\nVJG0bUr1MyJyoXC7/g5ki9IFutg88Wk5H74k8bzkfK3GNPAiShfoZtOkpVJ9jfn9FxjtIhfM6QIG\nTgwclzi51nHsvOY08BJGukAv8ocW99jGaBfZonQBQCFKF+iF2fRCPBJTnAReQOkCvTCaXhAROfmr\n7YqTwAsoXZg6/eEe3REAz6F0Yejg82vlzLYDumMAnkPpIqWDz6/VHQHwFErXIlP6eLecKF6R4smX\nGm4/8dI2OfHSNomea1ecCG5F6Vpgcp91InKheAsDLZrT2KN2mf3f7uBkfceWpdx/6rWdipLA7ViR\nZoGgRBOPJxa+L5tbZ2tMY49oi79GcpkufuDuY0gXI12gGwoXdqJ0beDV+d0jK/z9vWHh8eWG21kS\njExQukhb+4mzIiJy9rNDmpPYq/vItWzBBClbMEGKKodpSgQvYU7XJqXBE9IYS33yxY06r2Q4tWGn\njFzsvbnrTplOGfCtEkgXI12bXFXg7i817K1QvVy4qVCsyBUjXSSkez2uXwu30+D54+Tk8s96bO84\n1iT5Q4s0JIKbMNKFiGS2AKK94ZyNSZwvkB8y3N649gvFSeBGlC4MBQvyTEe0R179QHEa52GaAdmi\ndG00pc9aCYo77rnatWBHLp4tX1n49ZSv//LFt+2O5HjBogLdEeBCgXg8br4zEIi/Ws23oaYjnWtz\n3bpSzWzqwe9zu526XqfLCBgiIvdWVkg8Hg8Y7WOkq0ht5ArdEWATihaZ4OqFDGW72qw2MtriJOqM\nXDybO431omzBBIm1dOiOARdgpKuAW6cVuiq/e7LuCI4X7JuvOwJcgNJVYFDoqO4IOetzyUDdEQBP\noHQtsLt9UsrR7Jh8b9wQhRNnQO4o3Qx93HZr0vPNrbPldGyIiIi0xsOm7xsYOmZrLlUoXiA3lG6G\nIvF8+aj1wjWs3Ue31W0zTd93Zf5WO2MpRfEC2aN0sxCVPNPphPZ4H8Vp9KB4gexQuhbb0vY10339\ngw0KkwBwIkrXBjUdVxluv7rgI8VJADgNiyNscDQ6Ukbl77L0M6ec/nHi8f7w7XK8cJylnw9ADUa6\nNrFzQcTo5jdlyukfJxUxAHegdG1UG7m8x7a+gaasPmvzgL833E75Au5C6dqoNnJ5j+KdULgh6887\nWjjRdB/l6055X3wgRc/e2vsL4RmUrs0uFO/FO4xFJPv1+TXhW1IWr4hQvC5TuHqpiAjF6yOUrgK1\nkdGJOd6PW3P74aoJ3yKxAOc/vajo2dQ3joc3ULoKWXVy7Q+l35M4f3QeZP6FAvAOfnJd6vcDluiO\nABswzeB9/D/VIz4q/TuJBgoSJ9TiEpRooEDagyXyab+HdccD8CeUrkfc0Phc0vOAxCQv3ip50VZN\niZCtomdvlaYl7+iOAZtQui407uwvpTB2Nq3Xml3fC0APStcFsr0MjMIFnIcTaQCgEKXrYSNa1uuO\nAKAbphdcquvUgdn0w8COfXKo70xFiWClQFuTxAuLdMeADRjpukDXgv2y741pz9Vu6/eYXZFgkY6J\n30w8bp/2kDQteUealrwj4X+9Swo+fFlfMNgmEI+br4IJBALxV6trFcZBNsxGupxIc4eiZ28VCRWI\nRNtNX8MlZO5yb2WFxOPxgNE+Rroe1RQaqjsCehFoOXtxBVqKwoW3MKfrUdv7PaQ7ArrJdokvo1xv\nYaTrQWfzKnRHgEUoXO+hdD1oR8m9uiMgXXkF0rzoNd0poBDTCx5TXzhBdwSkKZ1RLPdh8B5Guh4Q\nDRQmHh8IcyNsp+osz87LwuBPXDIGOECgvVnCP5truI+Cdh8uGQMcLl4Q1h0BilC6gEMwovUHShdw\nkO7FSxF7D6ULOEzXE27wHkoXcCAK17soXQBQiNIFAIUoXQBQiNIFAIV6XZGmMAsAeIbZirSUpQsA\nsBbTCwCgEKULAApRugCgEKULAApRugCg0P8DsKVY1HBd/6gAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "labeled_array, num_features = scipy.ndimage.label(birdsImage)\n", + "\n", + "print(\"%d birds have been detected.\" % num_features)\n", + "\n", + "# Plotting with a colorful color-map so as to demonstrate the contiguous areas detected\n", + "plotImage(labeled_array, 'Paired')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.4.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/samples/KiCad/Volume.sch b/samples/KiCad/Volume.sch new file mode 100644 index 00000000..2141db90 --- /dev/null +++ b/samples/KiCad/Volume.sch @@ -0,0 +1,714 @@ +EESchema Schematic File Version 2 +LIBS:mfk_alps +LIBS:mfk_connector +LIBS:mfk_interface +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:Volume-AlpsRK16814MG-cache +EELAYER 27 0 +EELAYER END +$Descr A 11000 8500 +encoding utf-8 +Sheet 1 1 +Title "ALPS RK16816MG with H-bridge" +Date "4 apr 2015" +Rev "" +Comp "Mithat Konar" +Comment1 "Copyright (C) 2015 Mithat Konar" +Comment2 "CERN Open Hardware Licence v1.2" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L SN754410 U1 +U 1 1 550CA683 +P 7600 4650 +F 0 "U1" H 7600 5350 60 0000 C CNN +F 1 "SN754410" H 7600 4000 60 0000 C CNN +F 2 "mfk-DIP-16_AriesC84_e" H 7600 4650 60 0001 C CNN +F 3 "~" H 7600 4650 60 0000 C CNN + 1 7600 4650 + 1 0 0 -1 +$EndComp +$Comp +L DGND #PWR01 +U 1 1 550CA83D +P 8450 5500 +F 0 "#PWR01" H 8450 5500 40 0001 C CNN +F 1 "DGND" H 8450 5430 40 0000 C CNN +F 2 "" H 8450 5500 60 0000 C CNN +F 3 "" H 8450 5500 60 0000 C CNN + 1 8450 5500 + 1 0 0 -1 +$EndComp +$Comp +L DGND #PWR02 +U 1 1 550CA86E +P 6600 5300 +F 0 "#PWR02" H 6600 5300 40 0001 C CNN +F 1 "DGND" H 6600 5230 40 0000 C CNN +F 2 "" H 6600 5300 60 0000 C CNN +F 3 "" H 6600 5300 60 0000 C CNN + 1 6600 5300 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 4550 6600 4550 +Wire Wire Line + 6600 4550 6600 5300 +Wire Wire Line + 6900 4700 6600 4700 +Connection ~ 6600 4700 +Wire Wire Line + 8300 4550 8450 4550 +Wire Wire Line + 8450 4250 8450 5500 +Wire Wire Line + 8300 4700 8450 4700 +Connection ~ 8450 4700 +Wire Wire Line + 3900 4450 4600 4450 +Wire Wire Line + 4400 4450 4400 4400 +Wire Wire Line + 4600 4450 4600 4400 +Wire Wire Line + 4400 5250 4400 5500 +Wire Wire Line + 4600 5400 4600 5250 +Wire Wire Line + 5700 4200 5700 4150 +Wire Wire Line + 5700 4150 6150 4150 +Wire Wire Line + 6150 4400 6900 4400 +Wire Wire Line + 5700 4850 6900 4850 +Wire Wire Line + 5700 4800 5700 4850 +Wire Wire Line + 8300 4250 8450 4250 +Connection ~ 8450 4550 +Wire Wire Line + 6400 4250 6900 4250 +Wire Wire Line + 6400 3250 6400 4250 +Wire Wire Line + 6750 3750 8450 3750 +Wire Wire Line + 8300 5000 8450 5000 +Wire Wire Line + 8300 4100 8700 4100 +Wire Wire Line + 6750 5150 6900 5150 +$Comp +L C C1 +U 1 1 550CAD46 +P 8700 4350 +F 0 "C1" H 8700 4450 40 0000 L CNN +F 1 "100n" H 8706 4265 40 0000 L CNN +F 2 "mfk-C_4.0_2.5_2.5_0.5" H 8738 4200 30 0001 C CNN +F 3 "~" H 8700 4350 60 0000 C CNN + 1 8700 4350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8700 4100 8700 4150 +$Comp +L DGND #PWR03 +U 1 1 550CADFB +P 8700 4700 +F 0 "#PWR03" H 8700 4700 40 0001 C CNN +F 1 "DGND" H 8700 4630 40 0000 C CNN +F 2 "" H 8700 4700 60 0000 C CNN +F 3 "" H 8700 4700 60 0000 C CNN + 1 8700 4700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8700 4700 8700 4550 +Text Label 6400 3250 3 50 ~ 0 +VOL_UP +Text Label 6400 6150 1 50 ~ 0 +VOL_DOWN +$Comp +L DGND #PWR04 +U 1 1 550CB0E4 +P 3150 2100 +F 0 "#PWR04" H 3150 2100 40 0001 C CNN +F 1 "DGND" H 3150 2030 40 0000 C CNN +F 2 "" H 3150 2100 60 0000 C CNN +F 3 "" H 3150 2100 60 0000 C CNN + 1 3150 2100 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3650 1350 3650 1800 +Wire Wire Line + 3100 2450 3850 2450 +Text Label 3850 2450 2 50 ~ 0 +VOL_UP +Wire Wire Line + 3100 2650 3850 2650 +Text Label 3850 2650 2 50 ~ 0 +VOL_DOWN +$Comp +L PWR_FLAG #FLG05 +U 1 1 550CB3B3 +P 3400 2000 +F 0 "#FLG05" H 3400 2095 30 0001 C CNN +F 1 "PWR_FLAG" H 3400 2180 30 0000 C CNN +F 2 "" H 3400 2000 60 0000 C CNN +F 3 "" H 3400 2000 60 0000 C CNN + 1 3400 2000 + -1 0 0 1 +$EndComp +$Comp +L PWR_FLAG #FLG06 +U 1 1 550CB3CC +P 3900 1650 +F 0 "#FLG06" H 3900 1745 30 0001 C CNN +F 1 "PWR_FLAG" H 3900 1830 30 0000 C CNN +F 2 "" H 3900 1650 60 0000 C CNN +F 3 "" H 3900 1650 60 0000 C CNN + 1 3900 1650 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3150 1900 3100 1900 +Wire Wire Line + 3150 1900 3150 2100 +Wire Wire Line + 3900 1650 3650 1650 +Connection ~ 3650 1650 +Wire Wire Line + 3400 2000 3150 2000 +Connection ~ 3150 2000 +$Comp +L CONN_2 P4 +U 1 1 550CCCA8 +P 2750 2550 +F 0 "P4" V 2700 2550 50 0000 C CNN +F 1 "CTRL" V 2800 2550 50 0000 C CNN +F 2 "mfk-TE_282834-2" H 2750 2550 60 0001 C CNN +F 3 "" H 2750 2550 60 0000 C CNN + 1 2750 2550 + -1 0 0 -1 +$EndComp +Wire Wire Line + 4150 3250 4150 3850 +$Comp +L CONN_5 P1 +U 1 1 550CCE69 +P 2750 3450 +F 0 "P1" V 2700 3450 50 0000 C CNN +F 1 "AB I/O" V 2800 3450 50 0000 C CNN +F 2 "mfk-TE_282834-5" H 2750 3450 60 0001 C CNN +F 3 "" H 2750 3450 60 0000 C CNN + 1 2750 3450 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3150 3250 4150 3250 +Wire Wire Line + 4300 4100 4350 4100 +Wire Wire Line + 4350 4100 4350 3350 +Wire Wire Line + 4350 3350 3150 3350 +Text Label 3150 3250 0 50 ~ 0 +A_TOP +Text Label 3150 3350 0 50 ~ 0 +A_WIPER +Text Label 3150 3550 0 50 ~ 0 +B_TOP +Text Label 3150 3650 0 50 ~ 0 +B_WIPER +$Comp +L CONN_5 P2 +U 1 1 550CCF9F +P 2800 4800 +F 0 "P2" V 2750 4800 50 0000 C CNN +F 1 "CD I/O" V 2850 4800 50 0000 C CNN +F 2 "mfk-TE_282834-5" H 2800 4800 60 0001 C CNN +F 3 "" H 2800 4800 60 0000 C CNN + 1 2800 4800 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3200 4600 4150 4600 +Wire Wire Line + 3200 4700 3900 4700 +Wire Wire Line + 3200 4900 3700 4900 +Wire Wire Line + 5100 4950 5100 5700 +Wire Wire Line + 5100 4950 4950 4950 +Wire Wire Line + 3200 4800 3800 4800 +Wire Wire Line + 5000 4600 5000 5600 +Wire Wire Line + 5000 4600 4800 4600 +Wire Wire Line + 4800 4600 4800 4700 +Wire Wire Line + 4300 5400 4300 4950 +Text Label 3200 4600 0 50 ~ 0 +C_TOP +Wire Wire Line + 3900 5400 4300 5400 +Wire Wire Line + 4400 5400 4600 5400 +Wire Wire Line + 3900 4700 3900 5400 +$Comp +L RK16814MG RV1 +U 1 1 550CA765 +P 4500 4500 +F 0 "RV1" H 5850 5250 50 0000 C CNN +F 1 "RK16814MG" H 5700 3600 50 0000 C CNN +F 2 "mfk-ALPS_RK16814MG" V 4800 4900 60 0001 C CNN +F 3 "~" V 4800 4900 60 0000 C CNN + 1 4500 4500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4150 4600 4150 4700 +Text Label 3200 4700 0 50 ~ 0 +C_WIPER +Text Label 3200 4900 0 50 ~ 0 +D_TOP +Text Label 3200 5000 0 50 ~ 0 +D_WIPER +Wire Wire Line + 3900 3450 3900 4450 +Connection ~ 4400 4450 +Connection ~ 4400 5400 +Text Label 3150 3450 0 50 ~ 0 +AB_COMMON +Wire Wire Line + 3600 5000 3200 5000 +Text Label 3200 4800 0 50 ~ 0 +CD_COMMON +$Comp +L +5VD #PWR07 +U 1 1 550CE6FC +P 7600 3650 +F 0 "#PWR07" H 7600 3600 20 0001 C CNN +F 1 "+5VD" H 7600 3750 50 0000 C CNN +F 2 "" H 7600 3650 60 0000 C CNN +F 3 "" H 7600 3650 60 0000 C CNN + 1 7600 3650 + 1 0 0 -1 +$EndComp +$Comp +L +5VD #PWR08 +U 1 1 550CE733 +P 3650 1350 +F 0 "#PWR08" H 3650 1300 20 0001 C CNN +F 1 "+5VD" H 3650 1450 50 0000 C CNN +F 2 "" H 3650 1350 60 0000 C CNN +F 3 "" H 3650 1350 60 0000 C CNN + 1 3650 1350 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3900 3450 3150 3450 +Wire Wire Line + 4800 3850 4800 3550 +Wire Wire Line + 4800 3550 3150 3550 +Wire Wire Line + 4950 4100 5000 4100 +Wire Wire Line + 5000 4100 5000 3650 +Wire Wire Line + 5000 3650 3150 3650 +Wire Wire Line + 3600 5000 3600 5700 +Wire Wire Line + 3700 4900 3700 5600 +Wire Wire Line + 3800 4800 3800 5500 +Wire Wire Line + 3800 5500 4400 5500 +Wire Wire Line + 3700 5600 5000 5600 +Wire Wire Line + 3600 5700 5100 5700 +$Bitmap +Pos 10300 6850 +Scale 1.000000 +Data +89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 5F 00 00 00 64 08 06 00 00 00 E0 F1 EC +9B 00 00 00 04 73 42 49 54 08 08 08 08 7C 08 64 88 00 00 00 09 70 48 59 73 00 00 07 6C 00 00 07 +6C 01 9C F3 D5 25 00 00 13 B3 49 44 41 54 78 9C ED 9D 7B 7C 54 D5 B5 C7 BF EB CC 04 C2 43 1E 5A +45 D0 2A F6 FA 82 52 A0 6A D5 D6 5A B1 3E 69 21 27 40 A3 F6 E1 55 51 4E 78 5C B5 B4 DA 56 3F 7E +8A 69 BD D4 6A 6F 6F AB AD 90 13 90 48 3F B7 B6 E6 16 66 22 8A F6 65 44 AD AD A2 45 B4 A5 D6 17 +88 12 15 5A 0C F2 CA 64 E6 AC FB C7 3E 93 49 86 10 66 92 7D 48 E8 E5 F7 F9 E4 33 AF BD D7 59 FB +77 76 F6 D9 7B ED B5 D6 16 55 E5 40 80 F8 C9 7B 80 59 05 14 5D A0 9E 3B 3B 6A 7D 6C C0 E9 69 05 +8A C0 85 96 CB F5 38 E4 40 E8 F9 E2 27 0F 01 9A 00 29 A0 B8 02 83 D5 73 3F 88 56 AB EE E3 40 E9 +F9 63 29 8C 78 C2 72 63 23 D4 C5 1A 0E 14 F2 C7 45 5C BE 47 70 A0 90 3F 3E E2 F2 3D 82 83 E4 F7 +20 22 27 5F FC E4 67 C5 4F 5E DE 8D FA 31 60 4C 91 D5 C6 84 F5 BA 7A CD CB C5 4F 7E B6 AB F5 0B +45 A4 E4 8B 9F 2C 03 56 02 4B C5 4F AE 14 3F 39 A2 0B 62 4E 04 FA 15 59 A7 5F 58 AF 28 88 9F 1C +21 7E 72 25 B0 14 58 19 EA 1F 19 22 23 3F 54 BC 0E E8 13 7E 75 31 F0 92 F8 C9 CB 8A 14 75 4A 17 +55 38 B5 98 C2 A1 5E 2F 61 F4 04 A3 77 5D 94 37 20 92 79 7E 07 C4 E7 E3 01 60 B6 7A EE 3F 3A 91 +31 00 B8 0C A8 02 8E EA 82 1A 8D C0 AD C0 CF D5 73 B7 77 72 9D C3 80 7B 80 4B F6 52 24 05 54 A8 +E7 D6 77 41 87 4E 61 9D FC 02 88 CF A2 11 98 A1 9E FB 50 5E FD 31 40 25 70 39 30 D8 82 4A 1F 00 +3F 03 16 AA E7 BE 98 77 AD CF 03 35 C0 F0 7D C8 88 E4 06 58 25 BF 08 E2 DB 62 11 70 3B F0 49 60 +26 70 96 35 85 F6 C4 53 C0 42 E0 69 E0 5B C0 35 45 D4 B5 7E 03 AC 91 DF 45 E2 0F 34 58 BD 01 36 +1F B8 35 FC 6B 13 0F A6 7D 35 B6 84 D9 24 FF 4E 8B B2 7A 33 AC B5 D3 26 F9 3F 04 9E B4 28 AF 37 +E2 49 4C 3B AD C0 F6 03 F7 23 C0 0B C0 40 6B 42 7B 0F B6 03 E3 D4 73 5F B7 25 D0 EA 22 2B 54 EC +06 9B 32 7B 11 6E B0 49 3C 44 B7 C8 5A 49 6E A5 F8 AF 80 47 D4 73 27 DA 16 1A 95 79 E1 6A 60 6B +44 B2 F7 37 B6 62 DA 63 1D 91 90 AF 9E BB 09 98 13 85 EC 1E C0 9C B0 3D D6 11 E9 1E AE F8 C9 06 +E0 9C C8 2E 10 3D 1E 57 CF 9D 10 95 F0 A8 ED F9 F1 88 E5 47 8D 48 F5 8F AC E7 8B 9F 1C 07 AC 89 +44 F8 FE C5 78 F5 DC 17 A2 10 1C 65 CF BF 2E 42 D9 FB 13 91 B5 23 AA A9 E6 61 C0 5B 40 A9 75 E1 +39 BC 05 BC 0C 9C 04 1C 1D E1 75 76 03 47 77 B6 F7 D0 55 44 35 A6 CD C0 3E F1 29 E0 2E E0 31 E0 +39 F5 DC 77 B3 3F 88 9F 1C 86 D9 B9 3A 17 D3 53 6D 1A F8 4A 31 ED B9 DD A2 4C 20 9A CD 94 18 F0 +06 F0 61 8B 62 D7 00 57 A8 E7 AE 2D E0 FA 63 81 FB B0 EB C1 B0 11 38 4E 3D 37 63 51 66 24 63 FE +97 B1 4B FC 7C E0 F4 42 88 07 08 CB 9D 1E D6 B3 85 0F 63 DA 65 15 DD EA F9 E2 27 FB 03 1F C3 F4 +B2 F1 18 4F B1 D3 81 2E BB 6D E4 A1 4E 3D 77 6F 7B AB FB 84 F8 C9 07 80 0A 4B BA 64 80 67 30 86 +C3 35 E1 DF 8B EA B9 3B BB 2A B0 60 F2 C5 4F 96 00 E7 63 08 CE 92 7D 02 D1 CD 98 36 03 1F 55 CF +DD DC 55 01 E2 27 0F 07 FE 02 1C 6E 4D AB F6 08 80 57 C8 DD 8C 17 80 DF AA E7 B6 14 52 B9 98 07 +EE 95 80 5F AC 76 DD C0 9C EE 10 0F A0 9E BB 59 FC E4 1C 8C B7 44 14 70 30 B3 AD 93 80 4B C3 EF +3C 0A DC ED 2A A6 D7 0E 28 4E AF 6E A1 51 3D B7 CE 86 A0 50 4E A3 0D 59 05 A2 60 9E 7A AB AF E6 +EA 5E 2E CF 0A 7A 2B F9 CF F5 72 79 56 D0 5B C9 3F D8 F3 7B 10 7B 75 EF EB 25 F2 AC A0 B7 92 7F +5C 2F 97 67 05 BD 95 FC 13 7A B9 3C 2B E8 AD E4 5F 22 7E B2 D0 00 B8 4E 11 CA E9 F2 2A 39 4A 14 +43 FE FE 0C AD 3C 1E B3 9A B6 81 F3 43 79 FB 0B 05 F3 54 CC 0A B7 16 78 8D 9C 0D 67 1C 30 1A E8 +5B 8C 66 45 60 BE F8 C9 86 42 97 EA 1D 21 34 89 D8 34 B0 E5 A3 19 F8 2B C6 AC 90 B5 F9 3C 51 68 +E5 82 C9 0F CD A9 0D E1 1F 00 E2 27 E3 C0 C9 E4 6E C6 29 C0 79 85 CA DC 07 4E C3 10 77 63 37 64 +CC 0F E5 D8 C2 EF 80 E7 C9 91 FD 37 F5 DC 74 57 85 45 61 CF FF 09 F6 DC 46 14 F8 86 7A EE 0F BA +A0 C7 0D C0 1D 14 1E 3C BD 2F FC 54 3D F7 3F 2C C9 02 A2 21 7F 14 E6 5F D1 26 EE C5 84 11 35 17 +70 FD BE 98 30 9F E9 96 75 18 AD 9E BB CE A6 C0 A8 F6 70 57 01 67 5B 16 FB 22 50 DE 99 BF 64 E8 +A8 9B C0 EC 31 D8 C4 13 EA B9 9F B1 2C 33 B2 A9 66 14 A6 E7 8F 01 1F DD 47 99 8F 62 9F 78 88 C8 +94 1E 15 F9 FF 8B 7D 5F CD B7 31 31 BD 9D 61 65 58 CE 26 B6 62 DA 63 1D 51 F9 6A EE C6 04 12 DB +84 BF AF 99 45 F8 BB ED 5E BA 34 6C 8F 75 44 B9 C2 B5 16 BB 04 A4 8B 90 57 13 96 B7 05 9B ED 68 +87 C8 C8 57 CF FD 0B F6 86 9E 84 7A 6E 41 BB 51 61 B9 84 A5 EB 6E 0D DB 11 09 A2 0C FF BF 1C 18 +6A 49 DC 3D 11 97 DF 1B 86 76 27 69 C7 BE 10 D5 54 F3 68 4C 1E 03 1B 11 E4 7F 53 CF 1D D5 05 1D +D6 61 56 DF DD 45 13 30 46 3D F7 2D 0B B2 DA C1 7A CF 0F AD 88 4B B0 43 3C C0 82 FD 5C 2F 1F 83 +81 25 B6 AC AC 6D 11 C5 B0 33 1B 7B 16 C9 1D 18 D7 BF AE E0 BE B0 BE 0D 9C 8F 69 97 55 58 25 5F +FC E4 09 18 7B 8A 2D FC 5C 3D B7 A9 2B 15 C3 7A 3F B7 A8 CB 1D 61 FB AC C1 1A F9 A1 83 EC 52 A0 +BF 2D 99 74 FF C1 69 EB C1 0B A6 5D 4B BB 93 C1 2A 1F 36 7B FE 37 80 33 2D CA FB A3 7A 6E B7 22 +5B C2 FA 7F B4 A4 0F 98 F6 7D C3 96 30 9B E4 7F D5 A2 2C B0 D7 6B 6D F6 7E B0 D8 4E 9B E4 5F 81 +D9 D9 B1 81 2D D8 F3 AF 7C 20 94 67 03 CD 98 76 5A 81 35 F2 D5 73 1F 01 CA 29 EE 06 28 F0 3F C0 +43 79 DF DF 5B 88 ED BE 40 BD 9A 31 FB 01 6D F1 50 78 DD 62 16 39 CD 18 93 F6 23 36 F4 02 FB B9 +17 8A B9 01 6F 02 E7 A9 E7 7E 45 3D 77 12 26 C3 D4 2A 8C DB 75 B5 4D BD 42 79 41 28 FF 2C F5 DC +49 EA B9 5F C1 6C 79 BE 59 40 7D EB C4 43 74 2B DC 8B 31 F6 95 BD 6D AE D7 02 D7 AB E7 6E EB A0 +EE D1 51 AC 26 F7 26 57 FC E4 20 E0 C7 18 17 F8 8E 10 09 F1 10 6D 1C 6E 47 37 E0 3D C0 53 CF 4D +46 72 D1 6E 40 FC A4 8B 31 47 1F D1 E6 EB C8 88 87 68 AD 9A F9 43 50 02 63 23 E9 75 C4 03 84 7A +8D 21 67 11 8D 94 78 D8 0F F9 F3 C5 4F 7E 1A 18 6E 2B D8 61 7F 40 FC 64 05 26 40 23 D2 CC 59 07 +C4 E1 05 FF AA E8 AD BE 9A FF 2F 70 90 FC 1E C4 41 F2 7B 10 07 C9 EF 41 1C 24 BF 07 71 90 FC 1E +44 1C 40 FC 15 FD 91 CC 6C 94 B3 50 FA 01 7F 42 32 0B D5 9B DA 08 20 8B 96 1D 4D 26 B6 08 61 23 +E2 FC 08 74 2E AA 27 80 AE 25 16 FC 40 AF 9E BA 21 2B 50 40 A8 4E 4C C7 61 32 EA 0C 41 83 35 68 +FC 4E 9D 39 A9 D5 93 4C AA 93 8F 20 A4 08 62 B3 88 65 6E 41 39 09 E1 61 E2 A9 FB F4 AA 8A 4E A3 +CE A5 BA FE 34 24 98 08 72 2E E8 56 90 75 A4 A9 D6 D9 EE C6 D6 32 FE 8A 0F 41 7A 16 22 67 A2 64 +10 79 9A DD 25 3F D5 6B 27 6E 33 ED A9 1F 4B 46 EF 40 58 AD 9E 7B 4B 6B BD 9A E5 E7 10 38 37 21 +34 A8 E7 DE DE AE DD 8E DC 8D EA D7 51 8E 02 EA 29 49 DD AF 57 55 6C 96 EA E5 E3 10 67 16 30 0A +65 23 8E 3C CE A6 41 4B 74 DE 84 34 80 DC 5B 7F 08 69 FD 26 AA 9F 44 64 17 C8 E3 34 97 DC A5 D7 +4E 6C 16 EE 7A 78 10 7D 53 7F 04 F2 3D 04 DE 45 63 67 6B E5 A4 57 C4 5F 71 32 64 D6 61 F6 44 1D +DA 1F A3 F1 0E 64 4E 69 BD 51 7E F2 7E CC A1 03 6D B1 0D 71 CE D7 19 93 9F 0D CB 28 C6 D0 B5 85 +F6 CB F9 9D 88 73 BA CE 98 DC A1 AF 8C F8 89 AF 83 74 E4 2E BE 03 63 A4 FB 93 2C 4C 8C C4 91 A7 +80 FC 23 42 5E 25 96 3A 43 AF AE F8 A7 2C 4C 4C C0 91 C7 50 1E D5 4A B7 35 FF A7 D4 D4 5F 86 EA +FD C0 2F D5 73 2F 6B D3 EE ED 61 BB C3 5D 3A D9 4C 26 7D 26 F1 F8 79 A8 2E 20 3F D1 87 EA EF E9 +CB 34 00 52 F2 67 60 64 9E 2E 6B E9 D7 EF 53 0E A5 A9 9B 31 C4 6F 04 AE 47 F5 4B 18 8F E0 61 38 +E9 FC A4 CD 03 80 DF A3 72 0E A2 97 62 6C 35 47 42 7C 96 51 3E 31 11 43 FC 1B 88 7C 11 62 A7 A2 +F2 00 30 08 0D F2 DD 07 1D 60 13 C8 25 28 D3 41 5E 07 FA A3 C1 BC 0E C8 CD D2 73 63 D8 B8 EB 88 +65 46 12 E8 19 20 FF 85 92 C0 73 9F 31 52 E5 76 0C F1 EB 40 AE 44 65 16 B0 1E 38 9E 74 C9 B7 F7 +2E BB 53 0C 04 9E 04 BD 08 F8 1A 9A 71 D1 58 0B AA 3F 0C DB 51 8F 52 16 72 F2 32 48 23 A9 F7 76 +90 92 2A 60 24 CA A3 08 67 A1 94 61 B8 1D CB AE 5D F3 E2 A8 5C 0C 0A AA DF D4 CA F2 FB 01 A4 7A +F9 5F 11 67 8D F9 2D 0F E9 92 6B 74 F6 E7 DE 01 90 9A E4 31 28 77 82 8E 36 A4 38 E5 A1 AC FF 56 +CF FD 05 80 D4 26 2A 49 89 0B 9C 2C 0B 13 23 75 66 F9 FA 36 64 7E 4D BD B2 C7 CC 35 93 20 DC 0B +D2 E1 59 27 52 57 17 83 3E 31 20 4D 89 F3 2B 9D 5E BE 09 D8 80 49 C3 D2 16 46 67 0D AE D6 CA 29 +4F 1B D9 0F 36 22 41 02 E9 A0 3D 85 41 09 B4 32 D4 FD D7 A6 ED F5 D7 A3 3A 10 58 AD 9E EB B6 EA +79 4F DD C3 CC AE D8 A1 A0 E2 27 CB 01 08 32 B3 B5 72 EA EB 21 67 71 94 65 C0 E7 E2 A0 E6 3C 12 +47 73 21 F2 87 A6 5F 62 6B 9F 9D 40 7F F9 E9 F2 C3 28 29 C9 FE B2 2D 4B 7C 88 D7 C2 D7 21 A1 8E +C6 49 49 E4 02 F1 13 6D 49 FC 00 E8 4B 4C 8E C7 F4 42 80 16 1A FF FC 38 84 E7 C1 C4 32 BF 21 88 +01 DA 61 E2 08 AD A8 C8 88 9F 5C 02 DC 48 5A D7 8B 9F 5C 0B F2 1E 12 AC 03 7E A6 33 CA D7 C8 CF +7E 3D 00 E3 67 93 61 67 3A B7 FF 2B 2D CF 84 23 43 57 CE 5E 01 F4 D5 F6 9D 06 50 0D 87 69 6D B7 +11 A4 B3 2B B6 43 F8 1C 35 49 92 76 10 73 BE 2D 7E 68 AF 13 A7 4F B8 87 73 72 9C 6C C6 6F 4D B7 +E6 2C 0B 1B BA 19 38 96 52 1D 48 2E B9 55 7B 37 0E 71 9A D0 00 90 AC D9 F8 D0 F0 75 72 87 D1 38 +81 B4 8D 01 0B 74 DE BC A0 F5 53 AA 34 4D 7C 1F B1 6F 2D C1 F7 29 71 52 98 A8 93 53 CD 7F 99 4C +04 E6 C8 E2 FA 31 68 6B 24 E0 07 3A B7 62 57 AE E2 96 2D 30 2C 0D F4 97 AA 2A 87 61 C5 9E DE 27 +C1 9E 5F 71 98 E1 D0 79 A3 C3 2A 01 43 71 10 60 00 48 6E EB 31 67 4B 8B C5 31 E9 50 8E 43 E2 E3 +81 C7 01 4C 6F 77 8E 05 60 67 BF 77 E8 9B C9 46 70 1F 25 BE 5F A2 9E D7 12 0A 1A 19 4A 0C 6F 8A +FE 1D 64 0C 4A 99 56 BA 0F 16 D9 C2 7D 42 E7 4C F9 07 70 8B 54 55 7D 9B C3 3F 71 04 B1 F4 D1 88 +7E 0B 98 46 9A CB 78 E7 CF F3 19 3E 3E 03 0C 91 C5 CB 8E 6D 9D 85 39 47 8C 25 20 0E 34 EA BC 79 +81 D4 2C 57 54 40 F2 D2 91 69 11 E9 C9 94 97 C3 37 17 D2 91 63 D7 CC 49 9B F0 93 3B 00 A5 5F BF +23 F5 F2 0B F7 70 E0 72 00 13 66 A3 CE 54 F1 FD 12 01 A1 24 F6 C5 F0 F7 B7 F5 DA 89 CD ED CB 1F +99 3B 6F 56 35 FB FE 9F E1 6B F6 34 9E AB A4 AA CA 01 90 BB 57 0E 92 9A FA 2F 4B 5D 5D B7 32 FE +49 5D 5D 4C FC E4 0F C5 AF 3F 57 E7 CD 0B 74 F6 E7 DE D1 CA B2 D5 48 E8 1A 22 3A 3E FC 4F 5A 0F +40 10 AB 90 AA 2A 47 AA 1A E2 04 8E 09 82 96 B0 AD 69 CD 4E 4B 47 8B BF FC D3 90 1D 26 F4 2B 85 +2B D4 9A C9 E4 62 59 58 FF F1 D6 AF 6B 12 57 4A F5 F2 71 6A C6 96 97 80 81 EC DA D9 9A 9F 4D 16 +D7 1F 2F 7E FD E7 01 E2 A8 7E 0F 91 F3 80 EB 60 D8 17 F0 93 4D E4 A6 9D DF DB F3 AA FA 2B F1 93 +7F 00 8E 6C 2D A7 84 B6 FA F8 4F 20 98 8D E8 14 86 8F 7F 53 AA EB 9F A2 AF 4E 44 39 84 F7 4B AE +10 B8 48 8B DB B4 CE 61 6B 89 07 CC 05 FD AA F8 C9 E7 50 5E 02 86 23 61 AE 66 D5 95 E1 EB F7 10 +59 84 72 27 C3 C7 57 42 53 1F E0 18 F3 9B 98 F6 CC 9A FA 06 7E F2 AF C0 68 70 56 89 9F CC 4E B5 +87 14 AC CF 0C 37 41 75 F2 09 84 B3 71 F4 79 F1 13 CF 83 F4 03 19 85 C8 56 59 52 77 12 D2 67 1E +CA 23 20 D5 E2 27 2A C1 79 37 9C 31 39 E2 27 6E 70 B4 B2 FC 77 66 AA C7 36 CC 14 6D 14 D0 02 F2 +5D 1A D7 E4 3B 9B 6E 40 B9 1F 93 BF 32 7B 83 6E CF 0E 31 EA 4D DA 82 F2 05 4C B2 D1 A3 10 BD 04 +38 04 78 0D 8D 7F AB CB C4 03 EA 95 2F 08 A7 72 1B 81 D3 10 AE 44 B8 08 78 15 B8 49 2B CB 17 03 +50 59 7E 2F 22 37 63 76 A2 8E C7 10 BF 13 74 B6 7A 65 0F 81 79 52 40 6C 1A C8 4A F3 91 4F 82 B4 +80 14 1C D5 A2 A0 48 E6 52 44 C3 9D 39 39 25 E4 64 13 2A 97 EA 55 15 9B 75 86 FB 28 AA D7 01 4D +E6 77 9D 08 38 A8 AC 20 D6 B2 A4 75 33 45 AA 1A E2 1C B9 6D 3C 4E 66 00 DB D3 CF B4 7D 60 B5 59 +6C BC AC 9E 7B B2 F8 2B 8E 41 83 D1 68 E6 79 9D 39 E5 BD 7C C5 A4 AA 21 CE 51 EF 8F 23 23 23 70 +82 97 99 31 E5 95 B6 C4 CB A2 07 CF 24 9D 09 74 66 F9 33 B9 6B F8 25 38 C3 4F 25 90 94 7A 93 9E +EF AC E1 66 E5 19 1F 43 09 6B 75 7A 59 87 E9 D5 E5 EE 95 7D 29 69 39 8D B8 64 08 1A 9F 6B 7D 4E +E5 97 5B 98 18 49 4C 8F A5 74 C0 6A B6 ED 28 A5 6F FC 04 44 B7 E8 D5 65 AF 4A 6D 43 29 E9 0F C6 +93 49 EF D2 CA 29 7B CD A7 6C 64 30 8A 40 36 68 A5 BB 47 18 AC F8 75 83 71 FA 8C 25 23 03 C8 C4 +D7 B4 4E D5 0B D9 C9 CA 27 7F 9F 15 22 80 D4 26 86 90 6A 51 F5 2A BA E4 38 DB 1B 71 40 A4 58 97 +DA 86 52 52 B2 15 FA 34 13 6D 7E E6 FD 8A 83 56 CD 1E C4 41 F2 7B 10 5D 22 5F AA AA 1C 59 52 D7 +69 96 56 A9 4D 0C 91 BB 57 0E EA F0 37 DF 2F 91 DA 86 D2 D6 B5 C0 E2 BA 43 F3 D7 01 02 22 F7 3C +7C 64 87 F5 EF 5E D9 57 6A 1B 4A 25 6F 19 2D BE 5F D2 D1 7A 42 6A 1B 4A A5 B6 A1 B4 7D D9 BA C1 +E2 D7 75 18 BA D4 AA 5F 5D 5D 0C 40 16 3C 34 54 EE 5E B9 87 F7 9D DC 53 37 50 16 D5 0F EB 48 46 +21 28 F6 81 FB 77 4C 00 C4 CD 40 7F 84 06 54 7F AC 5E 79 22 57 36 F9 25 CC FA E0 18 4C FE E1 35 +C0 2A 88 CD 57 6F D2 96 B0 CC 2F 80 4B 41 6F 00 F9 22 26 FD FA 3F 81 85 78 EE 2D F8 89 5B 40 E6 +62 A2 19 DF 46 E4 86 D0 D4 DB AC 9E 5B 2A 7E 72 35 70 2A 2A 17 6A 65 D9 6F DA 5C FB 15 60 10 8D +6B 86 67 4D 17 C6 FE AF CF 02 6F E1 B9 C7 50 9D 9C 86 70 27 C6 CC 1B 00 2F A0 BA 8A 4C 9F DB 5B +67 21 7E A2 D6 98 04 E4 D6 70 7A 78 06 F0 3E 48 AD 7A 65 73 A5 66 F9 89 E0 54 A3 9C 83 E9 00 9B +40 6E 56 AF AC A8 10 A6 62 7B FE 89 C0 6D 21 A9 01 CA 04 90 5F 49 75 FD 67 20 34 4B A0 B7 62 0E +13 58 0B FA 3C 66 EE 3B 17 49 77 10 A2 23 3F C0 E4 E8 69 02 06 A3 D2 80 9F 98 09 F2 1D 0C F1 DB +81 41 21 F1 6D B1 DC BC B4 AE B0 91 EA E5 E3 30 F3 FA 23 18 31 36 97 74 C3 E1 82 B0 6C 02 BF 6E +10 C2 77 30 1D E3 45 E0 59 E0 44 44 AE 27 D6 D2 81 4B BA DE 8A 21 BE C9 E8 21 0D E2 AF E8 8F 3A +BF 35 6D 67 1B C6 B8 38 02 B4 56 6A EA 8B CA 74 52 FC B0 23 7A 1B 3B 52 C3 08 F4 DF 30 C9 42 1D +24 B8 02 B2 B6 97 96 4F A0 72 AE 7A EE 38 F5 CA 4F 87 D8 28 20 85 CA 67 43 AB 63 5B AC 27 93 39 +1E DE 3D 1C 47 4E 09 7B F1 55 E1 85 16 30 34 35 84 C6 C1 87 62 CE CC 6D A3 75 B0 CC 14 E1 A2 9C +5E B1 69 6D 0A B4 79 9F BD 41 CE 32 F5 2A 9A 48 A7 4E 07 39 5F 3D 77 AC 7A EE 99 94 A4 8E 03 76 +21 9C 2D B5 89 FC 15 EE 26 34 76 22 8D 83 3F 84 06 A7 68 E5 E4 24 9A B9 16 63 AD 4C 40 6C 04 9E +7B 02 E6 1C 5F 50 BD 23 7F 28 EC 0C C5 92 BF 8B 98 73 87 CE AD D8 A5 33 CB D7 87 BB 38 80 B4 CE +FD D5 AB 68 D2 CA B2 55 B9 CF 93 DE C4 1C 66 10 63 FB EE FC E3 35 6A 74 D6 D4 D7 D5 F3 5A F4 9A +B2 30 3F BE 7C C8 68 26 4B B5 A2 22 A3 F3 26 A4 D1 A0 9D 7F BD 5E 33 65 1D F0 37 E0 63 E2 2F 0B +4F 71 D6 69 98 5E F8 07 94 29 02 62 7A 29 9F 02 FE C1 D0 E6 55 60 4C BE D9 3D 04 00 B3 6D 29 7F +07 A0 59 8F CD D3 6F A9 56 4E 7A 45 E7 4D 48 B7 59 64 9D 11 D6 5C A0 DE A4 9D 66 F1 F8 EE BD 98 +5D B9 C3 A8 5E 51 70 3E B7 62 E7 F9 6F EA F4 B2 5C 02 B7 58 EC 2F 04 01 B4 D9 46 93 EA FA 99 88 +7A 98 21 2A 2B DF 3C 04 63 4E 5E AF D0 0E 92 22 C9 40 50 48 A7 73 79 75 94 D7 F6 E8 4F AA CB 11 +B9 09 8D 5D 20 FE 8A 67 80 D1 20 3F 42 78 0F D5 F9 2C 7A F0 0C 24 33 14 95 3E 40 BD 56 54 64 00 +A4 A6 7E 3A 1A CC 01 39 11 C8 6E 54 18 FD 1C 69 7F 15 D1 97 F7 54 2F 1B 58 2D F5 E2 67 7D 7E 87 +B5 91 D1 32 02 93 D6 7D 9F B0 BA C8 92 85 F5 67 E1 E8 02 60 37 CA B3 38 6A AC 9D 2A E7 51 F0 49 +A1 6A 6C E7 71 CD CD 5A E2 DA 87 3D 2C EA CE 32 D0 9B CC D0 93 31 A6 60 47 1E 24 9D 7E 0F C7 99 +4F 26 98 86 88 E9 14 62 86 29 59 94 38 15 95 C5 20 CD 08 AB 41 B7 84 FA 9D 0B 74 38 33 EB A0 95 +A9 D0 52 F2 24 A2 7B 66 AA CD 50 F0 C1 36 76 57 B8 4E 30 03 04 54 2E 6A 3B F4 88 9F DC 44 E1 C7 +B4 6E 07 86 41 EC 38 CC 89 40 90 89 7F 04 69 3F 2B D3 CA B2 D5 E2 27 37 62 02 94 47 03 EF F3 F6 +21 AB 74 DE 84 B4 F8 C9 0D 88 4C 05 DD 0D 6C 67 77 A9 99 11 05 32 23 AC 5D A6 33 CA 7F DD 46 BF +37 28 98 7C 5D 07 8C 43 F5 7E F5 42 63 5E 17 61 79 91 E5 1C 11 4A FD B8 D4 D5 F5 11 90 70 53 7D +78 11 42 8C 8B 49 C0 8D E2 AF 38 46 16 2F 3B 16 D1 9B C2 DF F2 E7 C5 CB 31 DE 0F E3 81 47 B2 EE +1A C0 0A D0 8F 00 A3 51 79 B8 75 4F 42 B3 9E 12 72 5A 76 9D 20 7E FD B9 EC E9 5D D0 09 E4 29 F3 +22 D7 C9 A2 07 CF 94 AA 86 B8 D4 D4 5F 26 7E B2 5E 16 D4 9F 54 44 3B 2D 93 AF 7A 5F F8 FA 23 B6 +F6 79 1F 3F B9 1D 95 87 8B 93 21 3F 0E DF 4D 86 CC 06 32 B1 F5 E4 D2 09 B4 1F 93 03 5D DE E6 53 +6E E7 4C 65 45 EB 7B 87 5C 19 D1 AC 07 C5 7F 92 6A DA 8A 9F FC 00 F4 F7 45 E9 37 B4 79 01 E8 B3 +C0 58 82 E0 69 86 37 6D 0B A7 C2 93 89 E9 5D C5 88 2A 90 FC 74 0B B0 01 D5 F6 29 B4 D2 DA 8C F1 +20 68 04 D0 4A F7 97 88 FE 3B B0 16 D3 4B DF 45 F4 36 CC D9 56 1B 42 39 80 6E 0E EB ED 71 D8 8B +56 96 2D 0B ED F6 7F C2 CC A3 57 85 CF 8C 0D E1 5F 0E 87 B5 3C 11 5E EB 0D 32 F1 5C 0A B0 54 C9 +63 98 05 E1 6B C4 72 91 8E EA 95 27 8C 4B 0B 6B 30 6B 95 2D 08 DF 47 79 14 D8 40 20 A9 90 96 2D +E1 E7 3D C6 74 F3 E0 6E B9 00 E4 0E CC EC 2A 00 9E 03 F9 2E 43 53 93 3B E7 B1 3D FE 0F E4 2C B5 +B8 3A B8 3B 5D 00 00 00 00 49 45 4E 44 AE 42 60 82 AC $EndBitmap +EndData +$EndBitmap +Wire Wire Line + 5350 4600 5250 4600 +Wire Wire Line + 5350 4400 5250 4400 +$Comp +L GND #PWR09 +U 1 1 550CF9FF +P 5350 4700 +F 0 "#PWR09" H 5350 4700 30 0001 C CNN +F 1 "GND" H 5350 4630 30 0001 C CNN +F 2 "" H 5350 4700 60 0000 C CNN +F 3 "" H 5350 4700 60 0000 C CNN + 1 5350 4700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5350 4400 5350 4700 +Connection ~ 5350 4600 +Text Notes 5050 4800 0 40 ~ 0 +chassis ground +$Comp +L GND #PWR010 +U 1 1 550CFBE5 +P 5350 6250 +F 0 "#PWR010" H 5350 6250 30 0001 C CNN +F 1 "GND" H 5350 6180 30 0001 C CNN +F 2 "" H 5350 6250 60 0000 C CNN +F 3 "" H 5350 6250 60 0000 C CNN + 1 5350 6250 + 1 0 0 -1 +$EndComp +Text Notes 5150 6400 0 40 ~ 0 +chassis ground +$Comp +L PWR_FLAG #FLG011 +U 1 1 550CFBF4 +P 5350 6150 +F 0 "#FLG011" H 5350 6245 30 0001 C CNN +F 1 "PWR_FLAG" H 5350 6330 30 0000 C CNN +F 2 "" H 5350 6150 60 0000 C CNN +F 3 "" H 5350 6150 60 0000 C CNN + 1 5350 6150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5350 6150 5350 6250 +$Comp +L CONN_1 P5 +U 1 1 550D1AD1 +P 5000 6150 +F 0 "P5" H 5080 6150 40 0000 L CNN +F 1 "GND" H 5000 6205 30 0001 C CNN +F 2 "mfk-AVA-20ga" H 5000 6150 60 0001 C CNN +F 3 "" H 5000 6150 60 0000 C CNN + 1 5000 6150 + -1 0 0 1 +$EndComp +Wire Wire Line + 5150 6150 5350 6150 +$Comp +L C C2 +U 1 1 550D2A54 +P 6900 5500 +F 0 "C2" H 6900 5600 40 0000 L CNN +F 1 "1u" H 6906 5415 40 0000 L CNN +F 2 "mfk-C_4.0_2.5_2.5_0.5" H 6938 5350 30 0001 C CNN +F 3 "TDK FK18X5R1A105K" H 6900 5500 60 0001 C CNN + 1 6900 5500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 5150 6900 5300 +$Comp +L DGND #PWR012 +U 1 1 550D2ACA +P 6900 5800 +F 0 "#PWR012" H 6900 5800 40 0001 C CNN +F 1 "DGND" H 6900 5730 40 0000 C CNN +F 2 "" H 6900 5800 60 0000 C CNN +F 3 "" H 6900 5800 60 0000 C CNN + 1 6900 5800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 5800 6900 5700 +NoConn ~ 8300 4400 +NoConn ~ 8300 4850 +Connection ~ 8450 5000 +Wire Wire Line + 8450 3750 8450 4100 +Wire Wire Line + 7600 3650 7600 3750 +Connection ~ 7600 3750 +Wire Wire Line + 6900 4100 6750 4100 +Wire Wire Line + 6150 4150 6150 4400 +Connection ~ 8450 4100 +Wire Wire Line + 8300 5150 8450 5150 +Connection ~ 8450 5150 +Wire Wire Line + 6900 5000 6400 5000 +Wire Wire Line + 6400 5000 6400 6150 +$Comp +L CONN_3 P3 +U 1 1 551F2247 +P 2750 1800 +F 0 "P3" V 2700 1800 50 0000 C CNN +F 1 "PWR" V 2800 1800 40 0000 C CNN +F 2 "mfk-TE_282834-3" H 2750 1800 60 0001 C CNN +F 3 "" H 2750 1800 60 0000 C CNN + 1 2750 1800 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3650 1800 3100 1800 +Wire Wire Line + 3100 1700 3350 1700 +Wire Wire Line + 3150 1250 3150 1700 +Text Label 3150 1250 3 60 ~ 0 +V_MOT +Wire Wire Line + 6750 4100 6750 3750 +Wire Wire Line + 6750 5150 6750 6150 +Text Label 6750 6150 1 60 ~ 0 +V_MOT +$Comp +L PWR_FLAG #FLG013 +U 1 1 551F243F +P 3350 1650 +F 0 "#FLG013" H 3350 1745 30 0001 C CNN +F 1 "PWR_FLAG" H 3350 1830 30 0000 C CNN +F 2 "" H 3350 1650 60 0000 C CNN +F 3 "" H 3350 1650 60 0000 C CNN + 1 3350 1650 + -1 0 0 -1 +$EndComp +Connection ~ 3150 1700 +Wire Wire Line + 3350 1700 3350 1650 +$Comp +L JUMPER J1 +U 1 1 552023B1 +P 4750 1800 +F 0 "J1" H 4750 1950 60 0000 C CNN +F 1 "PWR_BR" H 4750 1720 40 0000 C CNN +F 2 "mfk-SIL-2" H 4750 1800 60 0001 C CNN +F 3 "~" H 4750 1800 60 0000 C CNN + 1 4750 1800 + 1 0 0 -1 +$EndComp +$Comp +L +5VD #PWR014 +U 1 1 552023F3 +P 4400 1450 +F 0 "#PWR014" H 4400 1400 20 0001 C CNN +F 1 "+5VD" H 4400 1550 50 0000 C CNN +F 2 "" H 4400 1450 60 0000 C CNN +F 3 "" H 4400 1450 60 0000 C CNN + 1 4400 1450 + -1 0 0 -1 +$EndComp +Wire Wire Line + 4450 1800 4400 1800 +Wire Wire Line + 4400 1800 4400 1450 +Text Label 5100 1350 3 60 ~ 0 +V_MOT +Wire Wire Line + 5050 1800 5100 1800 +Wire Wire Line + 5100 1800 5100 1350 +Text Notes 4000 2000 0 60 ~ 0 +Use jumper to power motor from +5VD. +$EndSCHEMATC diff --git a/samples/KiCad/nrf-bga.kicad_pcb b/samples/KiCad/nrf-bga.kicad_pcb new file mode 100644 index 00000000..ddd092ce --- /dev/null +++ b/samples/KiCad/nrf-bga.kicad_pcb @@ -0,0 +1,928 @@ +(kicad_pcb (version 4) (host pcbnew "(2014-08-05 BZR 5054)-product") + + (general + (links 36) + (no_connects 0) + (area 146.9984 92.8984 164.465656 112.3572) + (thickness 1.6) + (drawings 0) + (tracks 108) + (zones 0) + (modules 12) + (nets 54) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.1016) + (trace_clearance 0.1016) + (zone_clearance 0.2032) + (zone_45_only no) + (trace_min 0.1016) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.889) + (via_drill 0.635) + (via_min_size 0.889) + (via_min_drill 0.508) + (uvia_size 0.508) + (uvia_drill 0.127) + (uvias_allowed no) + (uvia_min_size 0.508) + (uvia_min_drill 0.127) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 0.2 0.2) + (pad_drill 0) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements FFFCFF7F) + (pcbplotparams + (layerselection 0x00000_00000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 5) + (mirror true) + (drillshape 0) + (scaleselection 1) + (outputdirectory pdfs/)) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 GND) + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C3-Pad1)") + (net 5 "Net-(C4-Pad2)") + (net 6 "Net-(D1-Pad1)") + (net 7 +BATT) + (net 8 SWDIO) + (net 9 SWCLK) + (net 10 LED) + (net 11 "Net-(U1-PadC1)") + (net 12 "Net-(U1-PadD1)") + (net 13 "Net-(U1-PadG1)") + (net 14 "Net-(U1-PadE2)") + (net 15 "Net-(U1-PadF2)") + (net 16 "Net-(U1-PadG2)") + (net 17 "Net-(U1-PadE3)") + (net 18 "Net-(U1-PadF3)") + (net 19 "Net-(U1-PadG3)") + (net 20 "Net-(U1-PadH4)") + (net 21 "Net-(U1-PadA5)") + (net 22 "Net-(U1-PadB5)") + (net 23 "Net-(U1-PadC5)") + (net 24 "Net-(U1-PadH5)") + (net 25 "Net-(U1-PadA6)") + (net 26 "Net-(U1-PadB6)") + (net 27 "Net-(U1-PadC6)") + (net 28 "Net-(U1-PadH6)") + (net 29 "Net-(U1-PadA7)") + (net 30 "Net-(U1-PadB7)") + (net 31 "Net-(U1-PadC7)") + (net 32 "Net-(U1-PadE7)") + (net 33 "Net-(U1-PadF7)") + (net 34 "Net-(U1-PadG7)") + (net 35 "Net-(U1-PadH7)") + (net 36 "Net-(U1-PadA8)") + (net 37 "Net-(U1-PadD8)") + (net 38 "Net-(U1-PadE8)") + (net 39 "Net-(U1-PadF8)") + (net 40 "Net-(U1-PadG8)") + (net 41 "Net-(U1-PadH8)") + (net 42 "Net-(U1-PadE9)") + (net 43 "Net-(U1-PadF9)") + (net 44 "Net-(U1-PadH1)") + (net 45 "Net-(U1-PadJ3)") + (net 46 "Net-(U1-PadJ4)") + (net 47 "Net-(U1-PadJ5)") + (net 48 "Net-(U1-PadJ6)") + (net 49 "Net-(U1-PadJ7)") + (net 50 "Net-(U1-PadJ8)") + (net 51 "Net-(U1-PadH9)") + (net 52 "Net-(C5-Pad1)") + (net 53 "Net-(ANT1-Pad2)") + + (net_class Default "This is the default net class." + (clearance 0.1016) + (trace_width 0.1016) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net +BATT) + (add_net LED) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C3-Pad1)") + (add_net "Net-(C4-Pad2)") + (add_net "Net-(C5-Pad1)") + (add_net "Net-(D1-Pad1)") + (add_net "Net-(U1-PadA5)") + (add_net "Net-(U1-PadA6)") + (add_net "Net-(U1-PadA7)") + (add_net "Net-(U1-PadA8)") + (add_net "Net-(U1-PadB5)") + (add_net "Net-(U1-PadB6)") + (add_net "Net-(U1-PadB7)") + (add_net "Net-(U1-PadC1)") + (add_net "Net-(U1-PadC5)") + (add_net "Net-(U1-PadC6)") + (add_net "Net-(U1-PadC7)") + (add_net "Net-(U1-PadD1)") + (add_net "Net-(U1-PadD8)") + (add_net "Net-(U1-PadE2)") + (add_net "Net-(U1-PadE3)") + (add_net "Net-(U1-PadE7)") + (add_net "Net-(U1-PadE8)") + (add_net "Net-(U1-PadE9)") + (add_net "Net-(U1-PadF2)") + (add_net "Net-(U1-PadF3)") + (add_net "Net-(U1-PadF7)") + (add_net "Net-(U1-PadF8)") + (add_net "Net-(U1-PadF9)") + (add_net "Net-(U1-PadG1)") + (add_net "Net-(U1-PadG2)") + (add_net "Net-(U1-PadG3)") + (add_net "Net-(U1-PadG7)") + (add_net "Net-(U1-PadG8)") + (add_net "Net-(U1-PadH1)") + (add_net "Net-(U1-PadH4)") + (add_net "Net-(U1-PadH5)") + (add_net "Net-(U1-PadH6)") + (add_net "Net-(U1-PadH7)") + (add_net "Net-(U1-PadH8)") + (add_net "Net-(U1-PadH9)") + (add_net "Net-(U1-PadJ3)") + (add_net "Net-(U1-PadJ4)") + (add_net "Net-(U1-PadJ5)") + (add_net "Net-(U1-PadJ6)") + (add_net "Net-(U1-PadJ7)") + (add_net "Net-(U1-PadJ8)") + (add_net SWCLK) + (add_net SWDIO) + ) + + (net_class ANT "" + (clearance 0.1016) + (trace_width 0.254) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net GND) + (add_net "Net-(ANT1-Pad2)") + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59067) + (at 153.75 102.5 270) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B59137) + (attr smd) + (fp_text reference C1 (at 0 -1.7 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 12p (at 0 1.7 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E0D) + (at 159.004 100.711) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B591B6) + (attr smd) + (fp_text reference C2 (at 0 -1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 12p (at 0 1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59E9D) + (at 159.004 102.1588) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B58D67) + (attr smd) + (fp_text reference C3 (at 0 -1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100n (at 0 1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C3-Pad1)")) + (pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E25) + (at 154.15 106.55 90) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B58DD5) + (attr smd) + (fp_text reference C4 (at 0 -1.7 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100n (at 0 1.7 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad 2 smd rect (at 0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 5 "Net-(C4-Pad2)")) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD_Packages:SMD-0805 (layer F.Cu) (tedit 54B58D88) (tstamp 54B58E32) + (at 162.0266 104.9782 90) + (path /54B599BA) + (attr smd) + (fp_text reference D1 (at 0 -0.3175 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 0 0.381 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask) + (net 6 "Net-(D1-Pad1)")) + (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model SMD_Packages/SMD-0805.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 54B58D8A) (tstamp 54B58E41) + (at 156.7942 109.1946 180) + (descr "Through hole pin header") + (tags "pin header") + (path /54B593BB) + (fp_text reference P1 (at 0 -2.286 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_01X04 (at 0 0 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.54 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.08 1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 GND)) + (pad 2 thru_hole oval (at -1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 +BATT)) + (pad 3 thru_hole oval (at 1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 SWDIO)) + (pad 4 thru_hole oval (at 3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 9 SWCLK)) + (model Pin_Headers/Pin_Header_Straight_1x04.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 54B59E20) + (at 160.0454 105.0544 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /54B59A45) + (attr smd) + (fp_text reference R1 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 10 LED)) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 "Net-(D1-Pad1)")) + (model Resistors_SMD/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Crystals_Oscillators_SMD:CX2520DB (layer F.Cu) (tedit 544FEDED) (tstamp 54B58E9A) + (at 156.1084 101.3714) + (path /54B5903E) + (fp_text reference X1 (at 0 -2.25) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CRYSTAL (at 0 2.5) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.25 1) (end 1.25 1) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.25 1) (end 1.25 -1) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.25 -1) (end -1.25 -1) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.25 -1) (end -1.25 1) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 3 smd rect (at 0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at -0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)) + ) + + (module NRF51:WLCSP62 (layer F.Cu) (tedit 54B59368) (tstamp 54B59DAD) + (at 156.9212 105.1306) + (path /54B58C30) + (fp_text reference U1 (at 0 3.2) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_text value nRF51x22-CEAA (at 0 -3.2) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_line (start -1.6 -2) (end -2 -1.6) (layer F.SilkS) (width 0.2)) + (fp_line (start -2 -1.6) (end -2 2) (layer F.SilkS) (width 0.2)) + (fp_line (start -2 2) (end 2 2) (layer F.SilkS) (width 0.2)) + (fp_line (start 2 2) (end 2 -2) (layer F.SilkS) (width 0.2)) + (fp_line (start 2 -2) (end -1.6 -2) (layer F.SilkS) (width 0.2)) + (pad A1 smd circle (at -1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 7 +BATT)) + (pad B1 smd circle (at -1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad C1 smd circle (at -1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(U1-PadC1)")) + (pad D1 smd circle (at -1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(U1-PadD1)")) + (pad E1 smd circle (at -1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(C5-Pad1)")) + (pad F1 smd circle (at -1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 5 "Net-(C4-Pad2)")) + (pad G1 smd circle (at -1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 13 "Net-(U1-PadG1)")) + (pad H1 smd circle (at -1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(U1-PadH1)")) + (pad A2 smd circle (at -1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad E2 smd circle (at -1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(U1-PadE2)")) + (pad F2 smd circle (at -1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 15 "Net-(U1-PadF2)")) + (pad G2 smd circle (at -1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 16 "Net-(U1-PadG2)")) + (pad H2 smd circle (at -1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 9 SWCLK)) + (pad J2 smd circle (at -1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 8 SWDIO)) + (pad A3 smd circle (at -0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad E3 smd circle (at -0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 17 "Net-(U1-PadE3)")) + (pad F3 smd circle (at -0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(U1-PadF3)")) + (pad G3 smd circle (at -0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(U1-PadG3)")) + (pad H3 smd circle (at -0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad J3 smd circle (at -0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(U1-PadJ3)")) + (pad A4 smd circle (at -0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C3-Pad1)")) + (pad B4 smd circle (at -0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad G4 smd circle (at -0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H4 smd circle (at -0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(U1-PadH4)")) + (pad J4 smd circle (at -0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 46 "Net-(U1-PadJ4)")) + (pad A5 smd circle (at 0 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 21 "Net-(U1-PadA5)")) + (pad B5 smd circle (at 0 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 22 "Net-(U1-PadB5)")) + (pad C5 smd circle (at 0 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 23 "Net-(U1-PadC5)")) + (pad G5 smd circle (at 0 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H5 smd circle (at 0 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(U1-PadH5)")) + (pad J5 smd circle (at 0 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 47 "Net-(U1-PadJ5)")) + (pad A6 smd circle (at 0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 25 "Net-(U1-PadA6)")) + (pad B6 smd circle (at 0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 26 "Net-(U1-PadB6)")) + (pad C6 smd circle (at 0.4 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 27 "Net-(U1-PadC6)")) + (pad G6 smd circle (at 0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H6 smd circle (at 0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 28 "Net-(U1-PadH6)")) + (pad J6 smd circle (at 0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 48 "Net-(U1-PadJ6)")) + (pad A7 smd circle (at 0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 29 "Net-(U1-PadA7)")) + (pad B7 smd circle (at 0.8 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 30 "Net-(U1-PadB7)")) + (pad C7 smd circle (at 0.8 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 31 "Net-(U1-PadC7)")) + (pad D7 smd circle (at 0.8 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad E7 smd circle (at 0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(U1-PadE7)")) + (pad F7 smd circle (at 0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(U1-PadF7)")) + (pad G7 smd circle (at 0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 34 "Net-(U1-PadG7)")) + (pad H7 smd circle (at 0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(U1-PadH7)")) + (pad J7 smd circle (at 0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 49 "Net-(U1-PadJ7)")) + (pad A8 smd circle (at 1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 36 "Net-(U1-PadA8)")) + (pad B8 smd circle (at 1.2 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 7 +BATT)) + (pad C8 smd circle (at 1.2 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad D8 smd circle (at 1.2 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 37 "Net-(U1-PadD8)")) + (pad E8 smd circle (at 1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(U1-PadE8)")) + (pad F8 smd circle (at 1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(U1-PadF8)")) + (pad G8 smd circle (at 1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(U1-PadG8)")) + (pad H8 smd circle (at 1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(U1-PadH8)")) + (pad J8 smd circle (at 1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 50 "Net-(U1-PadJ8)")) + (pad A9 smd circle (at 1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)) + (pad B9 smd circle (at 1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 7 +BATT)) + (pad C9 smd circle (at 1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad D9 smd circle (at 1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 10 LED)) + (pad E9 smd circle (at 1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(U1-PadE9)")) + (pad F9 smd circle (at 1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(U1-PadF9)")) + (pad G9 smd circle (at 1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H9 smd circle (at 1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 51 "Net-(U1-PadH9)")) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 55048D3E) + (at 153 106.55 270) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /550483E1) + (attr smd) + (fp_text reference C5 (at 0 -1.7 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 2n2 (at 0 1.7 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(C5-Pad1)")) + (pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD.3dshapes/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module ANT:ANT-2.4GHz (layer F.Cu) (tedit 54517711) (tstamp 55049531) + (at 149.35 106.95 90) + (path /55047C3D) + (fp_text reference ANT1 (at -2.5 1.5 90) (layer F.SilkS) + (effects (font (size 0.4 0.4) (thickness 0.04))) + ) + (fp_text value ANT-2.4GHz (at -2 2 90) (layer F.SilkS) + (effects (font (size 0.4 0.4) (thickness 0.04))) + ) + (pad 1 smd rect (at 0 0 90) (size 0.9 4.9) (layers F.Cu) + (net 2 GND)) + (pad 3 smd rect (at 2.05 -2.7 90) (size 5 0.5) (layers F.Cu)) + (pad 2 smd rect (at 2.1 0 90) (size 0.5 4.9) (layers F.Cu) + (net 53 "Net-(ANT1-Pad2)")) + (pad 3 smd rect (at 4.3 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 6.8 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 5.55 -0.06 90) (size 2 0.5) (layers F.Cu)) + (pad 3 smd rect (at 7.9 -2.7 90) (size 2.7 0.5) (layers F.Cu)) + (pad 3 smd rect (at 12.6 -2.7 90) (size 2.7 0.5) (layers F.Cu)) + (pad 3 smd rect (at 9 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 11.5 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 10.25 -0.06 90) (size 2 0.5) (layers F.Cu)) + (pad 3 smd rect (at 13.7 -0.48 90) (size 0.5 3.94) (layers F.Cu)) + ) + + (module NRF51:BAL-NRF02D3 (layer F.Cu) (tedit 550C7CF1) (tstamp 55048D47) + (at 153.65 104.55 180) + (path /550480A2) + (fp_text reference U2 (at 0 1.95 180) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_text value BAL-NRF02D3 (at 0 -1.95 180) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_circle (center 0.75 -1.25) (end 1 -1.25) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -0.75) (end -1 0.75) (layer F.SilkS) (width 0.2)) + (fp_line (start -1 0.75) (end 1 0.75) (layer F.SilkS) (width 0.2)) + (fp_line (start 1 0.75) (end 1 -0.75) (layer F.SilkS) (width 0.2)) + (fp_line (start 1 -0.75) (end -1 -0.75) (layer F.SilkS) (width 0.2)) + (pad A3 smd circle (at -0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(U1-PadD1)")) + (pad B3 smd circle (at -0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(U1-PadC1)")) + (pad A2 smd circle (at 0 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(C5-Pad1)")) + (pad A1 smd circle (at 0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(ANT1-Pad2)")) + (pad B1 smd circle (at 0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + ) + + (segment (start 155.7212 102.5342) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1)) + (segment (start 155.7212 103.5306) (end 155.7212 102.5342) (width 0.1016) (layer F.Cu) (net 1)) + (segment (start 155.137 101.95) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1) (tstamp 55048FFD)) + (segment (start 153.75 101.95) (end 155.137 101.95) (width 0.1016) (layer F.Cu) (net 1)) + (segment (start 156.947646 104.7306) (end 156.7306 104.7306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.7306 104.7306) (end 156.5212 104.5212) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 104.5212) (end 156.5212 104.072021) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 104.072021) (end 156.5212 103.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.1212 106.3306) (end 156.5212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 157.3212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 157.7212 104.7306) (end 156.947646 104.7306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 103.9306) (end 155.3212 103.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.9212 104.757046) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.947646 104.7306) (end 156.9212 104.757046) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 157.7212 104.7306) (end 158.1212 104.3306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 158.1212 104.3306) (end 158.5212 104.3306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 161.2265 103.4796) (end 161.7726 104.0257) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.3722 103.4796) (end 161.2265 103.4796) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 161.7726 104.0257) (end 162.0266 104.0257) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 101.0626) (end 159.554 102.1588) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 100.711) (end 159.554 101.0626) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.3722 102.6922) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 102.5104) (end 159.3722 102.6922) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 102.1588) (end 159.554 102.5104) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.3722 103.621021) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 158.5212 104.3306) (end 158.662621 104.3306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 158.662621 104.3306) (end 159.3722 103.621021) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 155.0306 103.9306) (end 154.15 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FDD)) + (segment (start 154.15 103.05) (end 153.75 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FEF)) + (segment (start 155.3212 103.9306) (end 155.0306 103.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 154.15 107.1) (end 153 107.1) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 160.6042 108.3542) (end 160.6042 109.1946) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504935E)) + (segment (start 158.5212 105.9306) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 160.85 105.05) (end 159.4 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049373)) + (segment (start 159.4 105.05) (end 159.05 105.4) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049377)) + (segment (start 159.05 105.4) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049378)) + (segment (start 161.8743 104.0257) (end 160.85 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049366)) + (segment (start 162.0266 104.0257) (end 161.8743 104.0257) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 149.5 107.1) (end 149.35 106.95) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504964A) (status 30)) + (segment (start 149.5 107.1) (end 149.35 106.95) (width 0.254) (layer F.Cu) (net 2) (tstamp 5504967F) (status 30)) + (segment (start 153 107.1) (end 149.5 107.1) (width 0.254) (layer F.Cu) (net 2) (status 20)) + (segment (start 158.4436 100.7214) (end 158.454 100.711) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 157.0084 100.7214) (end 158.4436 100.7214) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.6786 100.7214) (end 157.0084 100.7214) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.1084 101.2916) (end 156.6786 100.7214) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.1084 103.5178) (end 156.1084 101.2916) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.1212 103.5306) (end 156.1084 103.5178) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.5212 103.389179) (end 157.014979 102.8954) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 156.5212 103.5306) (end 156.5212 103.389179) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 157.6674 102.8954) (end 158.404 102.1588) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 158.404 102.1588) (end 158.454 102.1588) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 157.014979 102.8954) (end 157.6674 102.8954) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 154.45 106) (end 154.9194 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 5504901F)) + (segment (start 154.9194 105.5306) (end 155.3212 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 55049021)) + (segment (start 154.15 106) (end 154.45 106) (width 0.1016) (layer F.Cu) (net 5)) + (segment (start 160.1717 105.9307) (end 160.0454 105.8044) (width 0.1016) (layer F.Cu) (net 6)) + (segment (start 162.0266 105.9307) (end 160.1717 105.9307) (width 0.1016) (layer F.Cu) (net 6)) + (segment (start 159 99.9) (end 159.05 99.9) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159.35 99.6) (end 161.2 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.25 111.15) (end 158.0642 110.9642) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159.05 99.9) (end 159.35 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 161.2 99.6) (end 163.35 101.75) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 163.35 101.75) (end 163.35 110.35) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 163.35 110.35) (end 162.55 111.15) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.0642 110.9642) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 162.55 111.15) (end 158.25 111.15) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.5212 103.9306) (end 158.1212 103.9306) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.0642 109.347) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159 99.9) (end 159 103.593221) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.662621 103.9306) (end 158.5212 103.9306) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 154.1 99.6) (end 158.7 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 153 102.3) (end 153 100.7) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 153.2 102.5) (end 153 102.3) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.7 99.6) (end 159 99.9) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 154.2906 102.5) (end 153.2 102.5) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159 103.593221) (end 158.662621 103.9306) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 153 100.7) (end 154.1 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 155.3212 103.5306) (end 154.2906 102.5) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 155.7212 108.9976) (end 155.5242 109.1946) (width 0.1016) (layer F.Cu) (net 8)) + (segment (start 155.7212 106.7306) (end 155.7212 108.9976) (width 0.1016) (layer F.Cu) (net 8)) + (segment (start 152.9842 109.0676) (end 152.9842 109.1946) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 152.9842 109.1946) (end 152.9842 109.0422) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 155.2018 106.85) (end 155.7212 106.3306) (width 0.1016) (layer F.Cu) (net 9) (tstamp 55049280)) + (segment (start 155.1 106.95) (end 155.2 106.85) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 155.1 107.35) (end 155.1 106.95) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 154.55 107.9) (end 155.1 107.35) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 154.1264 107.9) (end 154.55 107.9) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 152.9842 109.0422) (end 154.1264 107.9) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 155.2 106.85) (end 155.2018 106.85) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 160.0454 104.3044) (end 159.4938 104.3044) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 158.662621 104.7306) (end 158.5212 104.7306) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 159.0676 104.7306) (end 158.662621 104.7306) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 159.4938 104.3044) (end 159.0676 104.7306) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 154.1806 104.3306) (end 154.15 104.3) (width 0.1016) (layer F.Cu) (net 11) (tstamp 5504938B)) + (segment (start 155.3212 104.3306) (end 154.1806 104.3306) (width 0.1016) (layer F.Cu) (net 11)) + (segment (start 154.2194 104.7306) (end 154.15 104.8) (width 0.1016) (layer F.Cu) (net 12) (tstamp 55049388)) + (segment (start 155.3212 104.7306) (end 154.2194 104.7306) (width 0.1016) (layer F.Cu) (net 12)) + (segment (start 155.3212 105.1306) (end 154.7194 105.1306) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 154.7194 105.1306) (end 154.6 105.25) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 154.6 105.25) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 153.65 105.25) (end 153.65 104.8) (width 0.1016) (layer F.Cu) (net 52) (tstamp 5504901A)) + (segment (start 153.6 105.3) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049386)) + (segment (start 153 105.9) (end 153.6 105.3) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049018)) + (segment (start 153 106) (end 153 105.9) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 149.4 104.8) (end 149.35 104.85) (width 0.1016) (layer F.Cu) (net 53) (tstamp 55049543) (status 30)) + (segment (start 153.1 104.85) (end 153.15 104.8) (width 0.254) (layer F.Cu) (net 53) (tstamp 550495A4)) + (segment (start 149.35 104.85) (end 153.1 104.85) (width 0.254) (layer F.Cu) (net 53) (status 10)) + + (zone (net 2) (net_name GND) (layer F.Cu) (tstamp 550C7F83) (hatch edge 0.508) + (connect_pads (clearance 0.2032)) + (min_thickness 0.1524) + (fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5)) + (polygon + (pts + (xy 164 111.85) (xy 151.5 111.85) (xy 151.5 97.15) (xy 164 97.15) + ) + ) + (filled_polygon + (pts + (xy 163.9238 111.318437) (xy 163.468437 111.7738) (xy 152.031563 111.7738) (xy 151.5762 111.318437) (xy 151.5762 107.6794) + (xy 151.744424 107.6794) (xy 151.855576 107.6794) (xy 151.958267 107.636864) (xy 152.036864 107.558267) (xy 152.0794 107.455576) + (xy 152.0794 107.02112) (xy 152.00955 106.95127) (xy 151.5762 106.95127) (xy 151.5762 106.94873) (xy 152.00955 106.94873) + (xy 152.0794 106.87888) (xy 152.0794 106.444424) (xy 152.036864 106.341733) (xy 151.958267 106.263136) (xy 151.855576 106.2206) + (xy 151.744424 106.2206) (xy 151.5762 106.2206) (xy 151.5762 105.3794) (xy 151.855576 105.3794) (xy 151.958267 105.336864) + (xy 152.036864 105.258267) (xy 152.037637 105.2564) (xy 153.1 105.2564) (xy 153.195652 105.237373) (xy 153.012426 105.4206) + (xy 152.694424 105.4206) (xy 152.591733 105.463136) (xy 152.513136 105.541733) (xy 152.4706 105.644424) (xy 152.4706 105.755576) + (xy 152.4706 106.355576) (xy 152.513136 106.458267) (xy 152.591733 106.536864) (xy 152.623446 106.55) (xy 152.591733 106.563136) + (xy 152.513136 106.641733) (xy 152.4706 106.744424) (xy 152.4706 107.02888) (xy 152.54045 107.09873) (xy 152.99873 107.09873) + (xy 152.99873 107.07873) (xy 153.00127 107.07873) (xy 153.00127 107.09873) (xy 153.45955 107.09873) (xy 153.5294 107.02888) + (xy 153.5294 106.744424) (xy 153.486864 106.641733) (xy 153.408267 106.563136) (xy 153.376553 106.55) (xy 153.408267 106.536864) + (xy 153.486864 106.458267) (xy 153.5294 106.355576) (xy 153.5294 106.244424) (xy 153.5294 105.837574) (xy 153.6206 105.746374) + (xy 153.6206 105.755576) (xy 153.6206 106.355576) (xy 153.663136 106.458267) (xy 153.741733 106.536864) (xy 153.773446 106.55) + (xy 153.741733 106.563136) (xy 153.663136 106.641733) (xy 153.6206 106.744424) (xy 153.6206 107.02888) (xy 153.69045 107.09873) + (xy 154.14873 107.09873) (xy 154.14873 107.07873) (xy 154.15127 107.07873) (xy 154.15127 107.09873) (xy 154.60955 107.09873) + (xy 154.6794 107.02888) (xy 154.6794 106.744424) (xy 154.636864 106.641733) (xy 154.558267 106.563136) (xy 154.526553 106.55) + (xy 154.558267 106.536864) (xy 154.636864 106.458267) (xy 154.6794 106.355576) (xy 154.6794 106.244424) (xy 154.6794 106.236217) + (xy 154.683487 106.233487) (xy 154.7968 106.120174) (xy 154.7968 106.634168) (xy 154.872829 106.710197) (xy 154.866513 106.716513) + (xy 154.794935 106.823638) (xy 154.7698 106.95) (xy 154.7698 107.213226) (xy 154.6794 107.303626) (xy 154.6794 107.17112) + (xy 154.60955 107.10127) (xy 154.15127 107.10127) (xy 154.15127 107.12127) (xy 154.14873 107.12127) (xy 154.14873 107.10127) + (xy 153.69045 107.10127) (xy 153.6206 107.17112) (xy 153.6206 107.455576) (xy 153.663136 107.558267) (xy 153.741733 107.636864) + (xy 153.844424 107.6794) (xy 153.880026 107.6794) (xy 153.5294 108.030025) (xy 153.5294 107.455576) (xy 153.5294 107.17112) + (xy 153.45955 107.10127) (xy 153.00127 107.10127) (xy 153.00127 107.60955) (xy 153.07112 107.6794) (xy 153.194424 107.6794) + (xy 153.305576 107.6794) (xy 153.408267 107.636864) (xy 153.486864 107.558267) (xy 153.5294 107.455576) (xy 153.5294 108.030025) + (xy 153.527705 108.03172) (xy 153.421607 107.960828) (xy 152.99873 107.876712) (xy 152.99873 107.60955) (xy 152.99873 107.10127) + (xy 152.54045 107.10127) (xy 152.4706 107.17112) (xy 152.4706 107.455576) (xy 152.513136 107.558267) (xy 152.591733 107.636864) + (xy 152.694424 107.6794) (xy 152.805576 107.6794) (xy 152.92888 107.6794) (xy 152.99873 107.60955) (xy 152.99873 107.876712) + (xy 152.9842 107.873822) (xy 152.546793 107.960828) (xy 152.175977 108.208599) (xy 151.928206 108.579415) (xy 151.8412 109.016822) + (xy 151.8412 109.372378) (xy 151.928206 109.809785) (xy 152.175977 110.180601) (xy 152.546793 110.428372) (xy 152.9842 110.515378) + (xy 153.421607 110.428372) (xy 153.792423 110.180601) (xy 154.040194 109.809785) (xy 154.1272 109.372378) (xy 154.1272 109.016822) + (xy 154.040194 108.579415) (xy 153.989631 108.503742) (xy 154.263173 108.2302) (xy 154.55 108.2302) (xy 154.676362 108.205065) + (xy 154.783487 108.133487) (xy 155.333483 107.583489) (xy 155.333486 107.583487) (xy 155.333487 107.583487) (xy 155.391 107.497411) + (xy 155.391 107.900317) (xy 155.086793 107.960828) (xy 154.715977 108.208599) (xy 154.468206 108.579415) (xy 154.3812 109.016822) + (xy 154.3812 109.372378) (xy 154.468206 109.809785) (xy 154.715977 110.180601) (xy 155.086793 110.428372) (xy 155.5242 110.515378) + (xy 155.961607 110.428372) (xy 156.332423 110.180601) (xy 156.580194 109.809785) (xy 156.6672 109.372378) (xy 156.6672 109.016822) + (xy 156.580194 108.579415) (xy 156.332423 108.208599) (xy 156.0514 108.020825) (xy 156.0514 107.2532) (xy 158.434168 107.2532) + (xy 159.0532 106.634168) (xy 159.0532 105.0608) (xy 159.0676 105.0608) (xy 159.193962 105.035665) (xy 159.301087 104.964087) + (xy 159.463138 104.802035) (xy 159.539824 104.8338) (xy 159.650976 104.8338) (xy 160.550976 104.8338) (xy 160.653667 104.791264) + (xy 160.732264 104.712667) (xy 160.7748 104.609976) (xy 160.7748 104.498824) (xy 160.7748 103.998824) (xy 160.732264 103.896133) + (xy 160.653667 103.817536) (xy 160.550976 103.775) (xy 160.439824 103.775) (xy 160.1334 103.775) (xy 160.1334 102.464376) + (xy 160.1334 102.353224) (xy 160.1334 102.22992) (xy 160.1334 102.08768) (xy 160.1334 101.964376) (xy 160.1334 101.853224) + (xy 160.1334 101.016576) (xy 160.1334 100.905424) (xy 160.1334 100.78212) (xy 160.1334 100.63988) (xy 160.1334 100.516576) + (xy 160.1334 100.405424) (xy 160.090864 100.302733) (xy 160.012267 100.224136) (xy 159.909576 100.1816) (xy 159.62512 100.1816) + (xy 159.55527 100.25145) (xy 159.55527 100.70973) (xy 160.06355 100.70973) (xy 160.1334 100.63988) (xy 160.1334 100.78212) + (xy 160.06355 100.71227) (xy 159.55527 100.71227) (xy 159.55527 101.17055) (xy 159.62512 101.2404) (xy 159.909576 101.2404) + (xy 160.012267 101.197864) (xy 160.090864 101.119267) (xy 160.1334 101.016576) (xy 160.1334 101.853224) (xy 160.090864 101.750533) + (xy 160.012267 101.671936) (xy 159.909576 101.6294) (xy 159.62512 101.6294) (xy 159.55527 101.69925) (xy 159.55527 102.15753) + (xy 160.06355 102.15753) (xy 160.1334 102.08768) (xy 160.1334 102.22992) (xy 160.06355 102.16007) (xy 159.55527 102.16007) + (xy 159.55527 102.61835) (xy 159.62512 102.6882) (xy 159.909576 102.6882) (xy 160.012267 102.645664) (xy 160.090864 102.567067) + (xy 160.1334 102.464376) (xy 160.1334 103.775) (xy 159.539824 103.775) (xy 159.437133 103.817536) (xy 159.358536 103.896133) + (xy 159.316 103.998824) (xy 159.316 104.033704) (xy 159.260313 104.070913) (xy 159.0532 104.278026) (xy 159.0532 104.006995) + (xy 159.233487 103.826708) (xy 159.305065 103.719583) (xy 159.3302 103.593221) (xy 159.330201 103.593221) (xy 159.3302 103.593215) + (xy 159.3302 102.6882) (xy 159.48288 102.6882) (xy 159.55273 102.61835) (xy 159.55273 102.16007) (xy 159.53273 102.16007) + (xy 159.53273 102.15753) (xy 159.55273 102.15753) (xy 159.55273 101.69925) (xy 159.48288 101.6294) (xy 159.3302 101.6294) + (xy 159.3302 101.2404) (xy 159.48288 101.2404) (xy 159.55273 101.17055) (xy 159.55273 100.71227) (xy 159.53273 100.71227) + (xy 159.53273 100.70973) (xy 159.55273 100.70973) (xy 159.55273 100.25145) (xy 159.48288 100.1816) (xy 159.3302 100.1816) + (xy 159.3302 100.086774) (xy 159.486774 99.9302) (xy 161.063226 99.9302) (xy 163.0198 101.886774) (xy 163.0198 110.213226) + (xy 163.0045 110.228526) (xy 163.0045 106.430776) (xy 163.0045 106.319624) (xy 163.0045 105.430624) (xy 163.0045 104.525776) + (xy 163.0045 104.09682) (xy 163.0045 103.95458) (xy 163.0045 103.525624) (xy 162.961964 103.422933) (xy 162.883367 103.344336) + (xy 162.780676 103.3018) (xy 162.669524 103.3018) (xy 162.09772 103.3018) (xy 162.02787 103.37165) (xy 162.02787 104.02443) + (xy 162.93465 104.02443) (xy 163.0045 103.95458) (xy 163.0045 104.09682) (xy 162.93465 104.02697) (xy 162.02787 104.02697) + (xy 162.02787 104.67975) (xy 162.09772 104.7496) (xy 162.669524 104.7496) (xy 162.780676 104.7496) (xy 162.883367 104.707064) + (xy 162.961964 104.628467) (xy 163.0045 104.525776) (xy 163.0045 105.430624) (xy 162.961964 105.327933) (xy 162.883367 105.249336) + (xy 162.780676 105.2068) (xy 162.669524 105.2068) (xy 162.02533 105.2068) (xy 162.02533 104.67975) (xy 162.02533 104.02697) + (xy 162.02533 104.02443) (xy 162.02533 103.37165) (xy 161.95548 103.3018) (xy 161.383676 103.3018) (xy 161.272524 103.3018) + (xy 161.169833 103.344336) (xy 161.091236 103.422933) (xy 161.0487 103.525624) (xy 161.0487 103.95458) (xy 161.11855 104.02443) + (xy 162.02533 104.02443) (xy 162.02533 104.02697) (xy 161.11855 104.02697) (xy 161.0487 104.09682) (xy 161.0487 104.525776) + (xy 161.091236 104.628467) (xy 161.169833 104.707064) (xy 161.272524 104.7496) (xy 161.383676 104.7496) (xy 161.95548 104.7496) + (xy 162.02533 104.67975) (xy 162.02533 105.2068) (xy 161.272524 105.2068) (xy 161.169833 105.249336) (xy 161.091236 105.327933) + (xy 161.0487 105.430624) (xy 161.0487 105.541776) (xy 161.0487 105.6005) (xy 160.7748 105.6005) (xy 160.7748 105.498824) + (xy 160.732264 105.396133) (xy 160.653667 105.317536) (xy 160.550976 105.275) (xy 160.439824 105.275) (xy 159.539824 105.275) + (xy 159.437133 105.317536) (xy 159.358536 105.396133) (xy 159.316 105.498824) (xy 159.316 105.609976) (xy 159.316 106.109976) + (xy 159.358536 106.212667) (xy 159.437133 106.291264) (xy 159.539824 106.3338) (xy 159.650976 106.3338) (xy 160.550976 106.3338) + (xy 160.653667 106.291264) (xy 160.684031 106.2609) (xy 161.0487 106.2609) (xy 161.0487 106.430776) (xy 161.091236 106.533467) + (xy 161.169833 106.612064) (xy 161.272524 106.6546) (xy 161.383676 106.6546) (xy 162.780676 106.6546) (xy 162.883367 106.612064) + (xy 162.961964 106.533467) (xy 163.0045 106.430776) (xy 163.0045 110.228526) (xy 162.413226 110.8198) (xy 161.7472 110.8198) + (xy 161.7472 110.266176) (xy 161.7472 110.155024) (xy 161.7472 109.26572) (xy 161.7472 109.12348) (xy 161.7472 108.234176) + (xy 161.7472 108.123024) (xy 161.704664 108.020333) (xy 161.626067 107.941736) (xy 161.523376 107.8992) (xy 160.67532 107.8992) + (xy 160.60547 107.96905) (xy 160.60547 109.19333) (xy 161.67735 109.19333) (xy 161.7472 109.12348) (xy 161.7472 109.26572) + (xy 161.67735 109.19587) (xy 160.60547 109.19587) (xy 160.60547 110.42015) (xy 160.67532 110.49) (xy 161.523376 110.49) + (xy 161.626067 110.447464) (xy 161.704664 110.368867) (xy 161.7472 110.266176) (xy 161.7472 110.8198) (xy 160.60293 110.8198) + (xy 160.60293 110.42015) (xy 160.60293 109.19587) (xy 160.60293 109.19333) (xy 160.60293 107.96905) (xy 160.53308 107.8992) + (xy 159.685024 107.8992) (xy 159.582333 107.941736) (xy 159.503736 108.020333) (xy 159.4612 108.123024) (xy 159.4612 108.234176) + (xy 159.4612 109.12348) (xy 159.53105 109.19333) (xy 160.60293 109.19333) (xy 160.60293 109.19587) (xy 159.53105 109.19587) + (xy 159.4612 109.26572) (xy 159.4612 110.155024) (xy 159.4612 110.266176) (xy 159.503736 110.368867) (xy 159.582333 110.447464) + (xy 159.685024 110.49) (xy 160.53308 110.49) (xy 160.60293 110.42015) (xy 160.60293 110.8198) (xy 158.3944 110.8198) + (xy 158.3944 110.449696) (xy 158.501607 110.428372) (xy 158.872423 110.180601) (xy 159.120194 109.809785) (xy 159.2072 109.372378) + (xy 159.2072 109.016822) (xy 159.120194 108.579415) (xy 158.872423 108.208599) (xy 158.501607 107.960828) (xy 158.0642 107.873822) + (xy 157.626793 107.960828) (xy 157.255977 108.208599) (xy 157.008206 108.579415) (xy 156.9212 109.016822) (xy 156.9212 109.372378) + (xy 157.008206 109.809785) (xy 157.255977 110.180601) (xy 157.626793 110.428372) (xy 157.734 110.449696) (xy 157.734 110.9642) + (xy 157.759135 111.090562) (xy 157.830713 111.197687) (xy 158.016513 111.383487) (xy 158.123638 111.455065) (xy 158.25 111.480201) + (xy 158.25 111.4802) (xy 158.250005 111.4802) (xy 162.55 111.4802) (xy 162.676362 111.455065) (xy 162.783487 111.383487) + (xy 163.583487 110.583487) (xy 163.655065 110.476362) (xy 163.6802 110.35) (xy 163.680201 110.35) (xy 163.6802 110.349994) + (xy 163.6802 101.75) (xy 163.655065 101.623638) (xy 163.583487 101.516513) (xy 161.433487 99.366513) (xy 161.326362 99.294935) + (xy 161.2 99.2698) (xy 159.35 99.2698) (xy 159.223638 99.294935) (xy 159.116513 99.366513) (xy 159.025 99.458026) + (xy 158.933487 99.366513) (xy 158.826362 99.294935) (xy 158.7 99.2698) (xy 154.100005 99.2698) (xy 154.1 99.269799) + (xy 153.973638 99.294935) (xy 153.866513 99.366513) (xy 152.766513 100.466513) (xy 152.694935 100.573638) (xy 152.6698 100.7) + (xy 152.6698 102.3) (xy 152.694935 102.426362) (xy 152.766513 102.533487) (xy 152.96651 102.733483) (xy 152.966513 102.733487) + (xy 152.966514 102.733487) (xy 153.073638 102.805065) (xy 153.2 102.830201) (xy 153.2 102.8302) (xy 153.200005 102.8302) + (xy 153.2206 102.8302) (xy 153.2206 102.97888) (xy 153.29045 103.04873) (xy 153.74873 103.04873) (xy 153.74873 103.02873) + (xy 153.75127 103.02873) (xy 153.75127 103.04873) (xy 154.20955 103.04873) (xy 154.2794 102.97888) (xy 154.2794 102.955773) + (xy 154.868129 103.544502) (xy 154.7968 103.615832) (xy 154.7968 104.0004) (xy 154.387007 104.0004) (xy 154.365194 103.978548) + (xy 154.2794 103.942923) (xy 154.2794 103.405576) (xy 154.2794 103.12112) (xy 154.20955 103.05127) (xy 153.75127 103.05127) + (xy 153.75127 103.55955) (xy 153.82112 103.6294) (xy 153.944424 103.6294) (xy 154.055576 103.6294) (xy 154.158267 103.586864) + (xy 154.236864 103.508267) (xy 154.2794 103.405576) (xy 154.2794 103.942923) (xy 154.225798 103.920666) (xy 154.074864 103.920534) + (xy 153.935368 103.978173) (xy 153.887912 104.025544) (xy 153.74873 103.886362) (xy 153.74873 103.55955) (xy 153.74873 103.05127) + (xy 153.29045 103.05127) (xy 153.2206 103.12112) (xy 153.2206 103.405576) (xy 153.263136 103.508267) (xy 153.341733 103.586864) + (xy 153.444424 103.6294) (xy 153.555576 103.6294) (xy 153.67888 103.6294) (xy 153.74873 103.55955) (xy 153.74873 103.886362) + (xy 153.675 103.812632) (xy 153.412173 104.075458) (xy 153.376346 104.076713) (xy 153.376346 103.986301) (xy 153.239069 103.92356) + (xy 153.088231 103.91813) (xy 152.946798 103.970835) (xy 152.923654 103.986301) (xy 152.926759 104.074963) (xy 153.15 104.298204) + (xy 153.373241 104.074963) (xy 153.376346 103.986301) (xy 153.376346 104.076713) (xy 153.375037 104.076759) (xy 153.151796 104.3) + (xy 153.165938 104.314142) (xy 153.164142 104.315938) (xy 153.15 104.301796) (xy 153.135857 104.315938) (xy 153.134061 104.314142) + (xy 153.148204 104.3) (xy 152.924963 104.076759) (xy 152.836301 104.073654) (xy 152.77356 104.210931) (xy 152.76813 104.361769) + (xy 152.798624 104.4436) (xy 152.037637 104.4436) (xy 152.036864 104.441733) (xy 151.958267 104.363136) (xy 151.855576 104.3206) + (xy 151.744424 104.3206) (xy 151.5762 104.3206) (xy 151.5762 97.681563) (xy 152.031563 97.2262) (xy 163.468437 97.2262) + (xy 163.9238 97.681563) (xy 163.9238 111.318437) + ) + ) + ) + (zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E3B) (hatch edge 0.508) + (connect_pads (clearance 0.2032)) + (min_thickness 0.1524) + (keepout (tracks allowed) (vias allowed) (copperpour not_allowed)) + (fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5)) + (polygon + (pts + (xy 153.9 104.55) (xy 153.45 104.55) (xy 153.45 104.1) (xy 153.9 104.1) + ) + ) + ) + (zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E43) (hatch edge 0.508) + (connect_pads (clearance 0.2032)) + (min_thickness 0.1524) + (keepout (tracks allowed) (vias allowed) (copperpour not_allowed)) + (fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5)) + (polygon + (pts + (xy 158.85 107.05) (xy 155 107.05) (xy 155 103.2) (xy 158.85 103.2) + ) + ) + ) +) diff --git a/samples/KiCad/tc14badge.brd b/samples/KiCad/tc14badge.brd new file mode 100644 index 00000000..fea8071b --- /dev/null +++ b/samples/KiCad/tc14badge.brd @@ -0,0 +1,14069 @@ +PCBNEW-BOARD Version 1 date Fri Oct 19 11:53:05 2012 + +# Created by Pcbnew(2012-05-21 BZR 3261)-stable + +$GENERAL +encoding utf-8 +LayerCount 2 +Ly 1FFF8001 +EnabledLayers 1FFF8001 +Links 135 +NoConn 11 +Di 41844 16849 73060 58324 +Ndraw 54 +Ntrack 512 +Nzone 0 +BoardThickness 630 +Nmodule 51 +Nnets 44 +$EndGENERAL + +$SHEETDESCR +Sheet A4 11700 8267 +Title "" +Date "19 oct 2012" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndSHEETDESCR + +$SETUP +InternalUnit 0.000100 INCH +Layers 2 +Layer[0] Back signal +Layer[15] Front signal +TrackWidth 80 +TrackWidthList 200 +TrackWidthList 500 +TrackWidthList 1000 +TrackClearence 80 +ZoneClearence 200 +TrackMinWidth 80 +DrawSegmWidth 80 +EdgeSegmWidth 150 +ViaSize 270 +ViaDrill 130 +ViaMinSize 270 +ViaMinDrill 130 +ViaSizeList 310 160 +ViaSizeList 370 200 +ViaSizeList 420 250 +MicroViaSize 200 +MicroViaDrill 50 +MicroViasAllowed 0 +MicroViaMinSize 200 +MicroViaMinDrill 50 +TextPcbWidth 75 +TextPcbSize 300 400 +EdgeModWidth 80 +TextModSize 600 600 +TextModWidth 120 +PadSize 551 551 +PadDrill 150 +Pad2MaskClearance 80 +Pad2PasteClearanceRatio -0.12 +AuxiliaryAxisOrg 0 0 +PcbPlotParams (pcbplotparams (layerselection 284721153) (usegerberextensions true) (excludeedgelayer false) (linewidth 60) (plotframeref false) (viasonmask false) (mode 1) (useauxorigin false) (hpglpennumber 1) (hpglpenspeed 20) (hpglpendiameter 15) (hpglpenoverlay 0) (pscolor true) (psnegative false) (psa4output false) (plotreference false) (plotvalue false) (plotothertext true) (plotinvisibletext false) (padsonsilk false) (subtractmaskfromsilk false) (outputformat 1) (mirror false) (drillshape 1) (scaleselection 1) (outputdirectory "")) +$EndSETUP + +$EQUIPOT +Na 0 "" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 1 "/DC" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 2 "/DD" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 3 "/P0_0" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 4 "/P0_1" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 5 "/P0_2" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 6 "/P0_3" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 7 "/P0_4" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 8 "/P0_5" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 9 "/P1_2" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 10 "/P1_3" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 11 "/P1_4" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 12 "/P1_5" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 13 "/P1_6" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 14 "/P1_7" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 15 "/P2_0" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 16 "/P2_3" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 17 "/P2_4" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 18 "/RESET_N" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 19 "/VBUS" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 20 "3V3" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 21 "GND" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 22 "N-000023" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 23 "N-000024" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 24 "N-000026" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 25 "N-000027" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 26 "N-000028" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 27 "N-000029" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 28 "N-000030" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 29 "N-000031" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 30 "N-000032" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 31 "N-000033" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 32 "N-000034" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 33 "N-000035" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 34 "N-000037" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 35 "N-000039" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 36 "N-000041" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 37 "N-000042" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 38 "N-000043" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 39 "N-000044" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 40 "N-000045" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 41 "N-000046" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 42 "N-000047" +St ~ +$EndEQUIPOT +$EQUIPOT +Na 43 "N-000051" +St ~ +$EndEQUIPOT +$NCLASS +Name "Default" +Desc "This is the default net class." +Clearance 80 +TrackWidth 80 +ViaDia 270 +ViaDrill 130 +uViaDia 200 +uViaDrill 50 +AddNet "" +AddNet "/DC" +AddNet "/DD" +AddNet "/P0_0" +AddNet "/P0_1" +AddNet "/P0_2" +AddNet "/P0_3" +AddNet "/P0_4" +AddNet "/P0_5" +AddNet "/P1_2" +AddNet "/P1_3" +AddNet "/P1_4" +AddNet "/P1_5" +AddNet "/P1_6" +AddNet "/P1_7" +AddNet "/P2_0" +AddNet "/P2_3" +AddNet "/P2_4" +AddNet "/RESET_N" +AddNet "/VBUS" +AddNet "3V3" +AddNet "GND" +AddNet "N-000023" +AddNet "N-000024" +AddNet "N-000026" +AddNet "N-000027" +AddNet "N-000028" +AddNet "N-000029" +AddNet "N-000030" +AddNet "N-000031" +AddNet "N-000032" +AddNet "N-000033" +AddNet "N-000034" +AddNet "N-000035" +AddNet "N-000037" +AddNet "N-000039" +AddNet "N-000041" +AddNet "N-000042" +AddNet "N-000043" +AddNet "N-000044" +AddNet "N-000045" +AddNet "N-000046" +AddNet "N-000047" +AddNet "N-000051" +$EndNCLASS +$MODULE GSG-XTAL-TXC-7A +Po 61500 45500 1800 15 504D2D98 504D3AA5 ~P +Li GSG-XTAL-TXC-7A +Sc 504D3AA5 +AR /504D0F4F +Op 0 0 0 +T0 0 0 600 600 1800 120 N V 21 N "X1" +T1 0 0 600 600 1800 120 N I 21 N "CRYSTAL" +DS 984 -630 984 -551 150 21 +DS -984 -630 -984 -551 150 21 +DS -1024 630 -1024 551 150 21 +DS 984 630 984 551 150 21 +DS -1024 630 984 630 150 21 +DS -984 -630 984 -630 150 21 +$PAD +Sh "1" R 669 945 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 41 "N-000046" +Po 728 0 +$EndPAD +$PAD +Sh "2" R 669 945 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 39 "N-000044" +Po -728 0 +$EndPAD +$EndMODULE GSG-XTAL-TXC-7A +$MODULE GSG-USB-MICROB-FCI-10103594 +Po 46000 40000 0 15 4E482E27 504D3AA6 ~P +Li GSG-USB-MICROB-FCI-10103594 +Sc 504D3AA6 +AR /504CAE21 +Op 0 0 0 +T0 984 0 600 600 0 120 N V 21 N "J2" +T1 984 0 600 600 0 120 N I 21 N "GSG-USB-MICRO-B" +$PAD +Sh "1" R 689 157 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 19 "/VBUS" +Po 1781 -512 +Le 45683504 +.SolderMask 40 +.LocalClearance 80 +$EndPAD +$PAD +Sh "2" R 689 157 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 36 "N-000041" +Po 1781 -256 +Le 113 +.SolderMask 40 +.LocalClearance 80 +$EndPAD +$PAD +Sh "3" R 689 157 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 38 "N-000043" +Po 1781 0 +Le 30424768 +.SolderMask 40 +.LocalClearance 80 +$EndPAD +$PAD +Sh "4" R 689 157 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 1781 256 +Le 32 +.SolderMask 40 +.LocalClearance 80 +$EndPAD +$PAD +Sh "5" R 689 157 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 1781 512 +Le 16 +.SolderMask 40 +.LocalClearance 80 +$EndPAD +$PAD +Sh "" R 814 561 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 656 -379 +Le 45683504 +$EndPAD +$PAD +Sh "" R 814 561 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 656 379 +Le 305 +$EndPAD +$PAD +Sh "" R 571 843 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 1840 -1114 +Le 45683504 +$EndPAD +$PAD +Sh "" R 571 843 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 1840 1114 +Le 45447072 +$EndPAD +$PAD +Sh "" R 250 719 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 1327 -1176 +Le 1341 +$EndPAD +$PAD +Sh "" R 250 719 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 1327 1176 +Le 45683504 +$EndPAD +$PAD +Sh "" R 1116 630 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 894 -1083 +Le 40068352 +$EndPAD +$PAD +Sh "" R 1116 630 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 894 1083 +Le 43410648 +$EndPAD +$PAD +Sh "" C 630 630 0 0 0 +Dr 472 0 0 +At STD N 00C8FFFF +Ne 0 "" +Po 669 -1083 +Le 45683504 +$EndPAD +$PAD +Sh "" C 630 630 0 0 0 +Dr 472 0 0 +At STD N 00C8FFFF +Ne 0 "" +Po 669 1083 +Le 43410648 +$EndPAD +$PAD +Sh "" C 571 571 0 0 0 +Dr 413 0 0 +At STD N 00C8FFFF +Ne 0 "" +Po 1839 -979 +Le 46673664 +$EndPAD +$PAD +Sh "" C 571 571 0 0 0 +Dr 413 0 0 +At STD N 00C8FFFF +Ne 0 "" +Po 1839 979 +Le 113 +$EndPAD +$EndMODULE GSG-USB-MICROB-FCI-10103594 +$MODULE GSG-TESTPOINT-100MIL +Po 55154 31500 0 15 4FA2EFE0 504E11D5 ~P +Li GSG-TESTPOINT-100MIL +Kw CONN +Sc 504E11D5 +AR /504D0B60 +Op 0 0 0 +T0 0 0 400 400 0 80 N V 21 N "P4" +T1 0 0 400 400 0 80 N I 21 N "DD" +$PAD +Sh "1" C 1000 1000 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 2 "/DD" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-TESTPOINT-100MIL +$MODULE GSG-TESTPOINT-100MIL +Po 65193 31500 0 15 4FA2EFE0 504E11D2 ~P +Li GSG-TESTPOINT-100MIL +Kw CONN +Sc 504E11D2 +AR /504D0B65 +Op 0 0 0 +T0 0 0 400 400 0 80 N V 21 N "P7" +T1 0 0 400 400 0 80 N I 21 N "GND" +$PAD +Sh "1" C 1000 1000 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 21 "GND" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-TESTPOINT-100MIL +$MODULE GSG-TESTPOINT-100MIL +Po 61846 31500 0 15 4FA2EFE0 504E11CF ~P +Li GSG-TESTPOINT-100MIL +Kw CONN +Sc 504E11CF +AR /504D0B63 +Op 0 0 0 +T0 0 0 400 400 0 80 N V 21 N "P6" +T1 0 0 400 400 0 80 N I 21 N "3V3" +$PAD +Sh "1" C 1000 1000 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 22 "N-000023" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-TESTPOINT-100MIL +$MODULE GSG-TESTPOINT-100MIL +Po 58500 31500 0 15 4FA2EFE0 504D3AAD ~P +Li GSG-TESTPOINT-100MIL +Kw CONN +Sc 504D3AAD +AR /504D0B62 +Op 0 0 0 +T0 0 0 400 400 0 80 N V 21 N "P5" +T1 0 0 400 400 0 80 N I 21 N "DC" +$PAD +Sh "1" C 1000 1000 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 1 "/DC" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-TESTPOINT-100MIL +$MODULE GSG-TESTPOINT-100MIL +Po 51807 31500 0 15 4FA2EFE0 504E11D8 ~P +Li GSG-TESTPOINT-100MIL +Kw CONN +Sc 504E11D8 +AR /504D0B57 +Op 0 0 0 +T0 0 0 400 400 0 80 N V 21 N "P3" +T1 0 0 400 400 0 80 N I 21 N "RESET_N" +$PAD +Sh "1" C 1000 1000 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 18 "/RESET_N" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-TESTPOINT-100MIL +$MODULE GSG-SPST-FSM4JSMATR +Po 67500 36500 2700 15 4E488E6F 504D3AB0 ~P +Li GSG-SPST-FSM4JSMATR +Sc 504D3AB0 +AR /504CFDB1 +Op 0 0 0 +T0 0 0 394 394 2700 80 N V 21 N "SW1" +T1 0 0 394 394 2700 80 N I 21 N "SW_PUSH" +DC 0 0 689 0 80 21 +DS -1181 -1181 1181 -1181 80 21 +DS 1181 -1181 1181 1181 80 21 +DS 1181 1181 -1181 1181 80 21 +DS -1181 1181 -1181 -1181 80 21 +$PAD +Sh "1" R 551 827 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 9 "/P1_2" +Po 886 -1791 +$EndPAD +$PAD +Sh "1" R 551 827 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 9 "/P1_2" +Po 886 1791 +$EndPAD +$PAD +Sh "2" R 551 827 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -886 -1791 +Le 83 +$EndPAD +$PAD +Sh "2" R 551 827 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -886 1791 +Le -1429971160 +$EndPAD +$EndMODULE GSG-SPST-FSM4JSMATR +$MODULE GSG-SOT23-3 +Po 54000 38000 900 15 50516083 504D3AB1 ~P +Li GSG-SOT23-3 +Kw CMS SOT +Sc 504D3AB1 +AR /504CAD4C +Op 0 0 0 +At SMD +T0 0 -410 300 300 900 75 N V 21 N "U2" +T1 0 0 300 300 900 75 N I 21 N "AP7313" +DS -600 -150 600 -150 50 21 +DS 600 -150 600 150 50 21 +DS 600 150 -600 150 50 21 +DS -600 150 -600 -150 50 21 +$PAD +Sh "2" R 360 360 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po -350 -400 +Le 3 +$EndPAD +$PAD +Sh "1" R 360 360 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 19 "/VBUS" +Po 350 -400 +$EndPAD +$PAD +Sh "3" R 360 360 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 0 400 +Le 111 +$EndPAD +$SHAPE3D +Na "smd/cms_sot23.wrl" +Sc 0.130000 0.150000 0.150000 +Of 0.000000 0.000000 0.000000 +Ro 0.000000 0.000000 0.000000 +$EndSHAPE3D +$EndMODULE GSG-SOT23-3 +$MODULE GSG-SMA-VERTICAL +Po 67250 46200 0 15 5047A6AD 504D3AB2 ~P +Li GSG-SMA-VERTICAL +Sc 504D3AB2 +AR /504CFCB0 +Op 0 0 0 +T0 0 0 600 600 0 120 N V 21 N "P2" +T1 0 0 600 600 0 120 N I 21 N "ANTENNA" +DS -1600 -1600 -1600 1600 150 21 +DS -1600 1600 1600 1600 150 21 +DS 1600 1600 1600 -1600 150 21 +DS 1600 -1600 -1600 -1600 150 21 +$PAD +Sh "1" C 1000 1000 0 0 0 +Dr 600 0 0 +At STD N 00E0FFFF +Ne 23 "N-000024" +Po 0 0 +$EndPAD +$PAD +Sh "2" C 1000 1000 0 0 0 +Dr 670 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po -1000 -1000 +$EndPAD +$PAD +Sh "3" C 1000 1000 0 0 0 +Dr 670 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po -1000 1000 +$EndPAD +$PAD +Sh "4" C 1000 1000 0 0 0 +Dr 670 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po 1000 1000 +$EndPAD +$PAD +Sh "5" C 1000 1000 0 0 0 +Dr 670 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po 1000 -1000 +$EndPAD +$EndMODULE GSG-SMA-VERTICAL +$MODULE GSG-HEADER-2x8 +Po 59500 34500 1800 15 4F8A6071 504D3AB4 ~P +Li GSG-HEADER-2x8 +Kw CONN +Sc 504D3AB4 +AR /504CF706 +Op 0 0 0 +T0 0 0 400 400 1800 80 N V 21 N "P1" +T1 0 0 400 400 1800 80 N I 21 N "EXPANSION" +DS -4000 -1000 4000 -1000 150 21 +DS 4000 -1000 4000 1000 150 21 +DS 4000 1000 -4000 1000 150 21 +DS -3000 0 -4250 0 150 21 +DS -4250 0 -4250 1250 150 21 +DS -4250 1250 -3000 1250 150 21 +DS -3000 1250 -3000 0 150 21 +DS -4000 1000 -4000 -1000 150 21 +$PAD +Sh "1" R 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po -3500 500 +Le 33 +$EndPAD +$PAD +Sh "2" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 3 "/P0_0" +Po -3500 -500 +Le 34735648 +$EndPAD +$PAD +Sh "3" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 4 "/P0_1" +Po -2500 500 +Le 24 +$EndPAD +$PAD +Sh "4" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 5 "/P0_2" +Po -2500 -500 +Le -1563238664 +$EndPAD +$PAD +Sh "5" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 6 "/P0_3" +Po -1500 500 +Le 48 +$EndPAD +$PAD +Sh "6" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 7 "/P0_4" +Po -1500 -500 +Le 48 +$EndPAD +$PAD +Sh "7" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 8 "/P0_5" +Po -500 500 +Le 48 +$EndPAD +$PAD +Sh "8" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 9 "/P1_2" +Po -500 -500 +Le 33 +$EndPAD +$PAD +Sh "9" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 10 "/P1_3" +Po 500 500 +Le 30841616 +$EndPAD +$PAD +Sh "10" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 11 "/P1_4" +Po 500 -500 +Le 97 +$EndPAD +$PAD +Sh "11" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 12 "/P1_5" +Po 1500 500 +Le 34831136 +$EndPAD +$PAD +Sh "12" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 13 "/P1_6" +Po 1500 -500 +Le 35604240 +$EndPAD +$PAD +Sh "13" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 14 "/P1_7" +Po 2500 500 +Le 42 +$EndPAD +$PAD +Sh "14" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 15 "/P2_0" +Po 2500 -500 +Le 17 +$EndPAD +$PAD +Sh "15" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 16 "/P2_3" +Po 3500 500 +Le 9 +$EndPAD +$PAD +Sh "16" C 600 600 0 0 1800 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 17 "/P2_4" +Po 3500 -500 +Le 99 +$EndPAD +$EndMODULE GSG-HEADER-2x8 +$MODULE GSG-HEADER-2x7 +Po 52000 43500 0 15 4F8A6053 504D3AB5 ~P +Li GSG-HEADER-2x7 +Kw CONN +Sc 504D3AB5 +AR /504CF491 +Op 0 0 0 +T0 0 0 400 400 0 80 N V 21 N "P8" +T1 0 0 400 400 0 80 N I 21 N "GOODFET" +DS -2500 0 -3750 0 150 21 +DS -3750 0 -3750 1250 150 21 +DS -3750 1250 -2500 1250 150 21 +DS -2500 1250 -2500 0 150 21 +DS -3500 1000 3500 1000 150 21 +DS 3500 1000 3500 -1000 150 21 +DS 3500 -1000 -3500 -1000 150 21 +DS -3500 1000 -3500 -1000 150 21 +$PAD +Sh "1" R 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 2 "/DD" +Po -3000 500 +Le 33 +$EndPAD +$PAD +Sh "2" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 35 "N-000039" +Po -3000 -500 +Le 34735648 +$EndPAD +$PAD +Sh "3" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -2000 500 +Le 24 +$EndPAD +$PAD +Sh "4" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -2000 -500 +Le -1563238664 +$EndPAD +$PAD +Sh "5" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 18 "/RESET_N" +Po -1000 500 +Le 48 +$EndPAD +$PAD +Sh "6" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -1000 -500 +Le 48 +$EndPAD +$PAD +Sh "7" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 1 "/DC" +Po 0 500 +Le 48 +$EndPAD +$PAD +Sh "8" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -500 +Le 33 +$EndPAD +$PAD +Sh "9" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po 1000 500 +Le 30841616 +$EndPAD +$PAD +Sh "10" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 1000 -500 +Le 97 +$EndPAD +$PAD +Sh "11" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 2000 500 +Le 34831136 +$EndPAD +$PAD +Sh "12" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 2000 -500 +Le 35604240 +$EndPAD +$PAD +Sh "13" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 3000 500 +Le 42 +$EndPAD +$PAD +Sh "14" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 3000 -500 +Le 17 +$EndPAD +$EndMODULE GSG-HEADER-2x7 +$MODULE GSG-HEADER-2x3 +Po 50000 34500 0 15 4F8A5FD1 504D3AB6 ~P +Li GSG-HEADER-2x3 +Kw CONN +Sc 504D3AB6 +AR /504D258A +Op 0 0 0 +T0 0 0 400 400 0 80 N V 21 N "P9" +T1 0 0 400 400 0 80 N I 21 N "PWR" +DS -500 0 -1750 0 150 21 +DS -1750 0 -1750 1250 150 21 +DS -1750 1250 -500 1250 150 21 +DS -500 1250 -500 0 150 21 +DS -1500 -1000 1500 -1000 150 21 +DS 1500 -1000 1500 1000 150 21 +DS 1500 1000 -1500 1000 150 21 +DS -1500 1000 -1500 -1000 150 21 +$PAD +Sh "1" R 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po -1000 500 +Le 33 +$EndPAD +$PAD +Sh "2" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 20 "3V3" +Po -1000 -500 +Le 34735648 +$EndPAD +$PAD +Sh "3" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po 0 500 +Le 24 +$EndPAD +$PAD +Sh "4" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 20 "3V3" +Po 0 -500 +Le -1563238664 +$EndPAD +$PAD +Sh "5" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 21 "GND" +Po 1000 500 +Le 48 +$EndPAD +$PAD +Sh "6" C 600 600 0 0 0 +Dr 400 0 0 +At STD N 00E0FFFF +Ne 20 "3V3" +Po 1000 -500 +Le 48 +$EndPAD +$EndMODULE GSG-HEADER-2x3 +$MODULE GSG-B0310J50100AHF +Po 63800 46000 2700 15 50516047 504D6841 ~P +Li GSG-B0310J50100AHF +Sc 504D6841 +AR /504C9FEC +Op 0 0 0 +T0 0 0 250 250 2700 63 N V 21 N "T1" +T1 0 0 250 250 2700 63 N I 21 N "BALUN" +DS -413 256 413 256 80 21 +DS 413 -256 -413 -256 80 21 +DC 256 0 276 20 80 21 +DS -413 -256 -413 256 80 21 +DS 413 -256 413 256 80 21 +$PAD +Sh "1" R 161 130 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 30 "N-000032" +Po 260 -195 +Le 33054512 +$EndPAD +$PAD +Sh "2" R 161 130 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 28 "N-000030" +Po 0 -195 +Le 755437432 +$EndPAD +$PAD +Sh "3" R 161 130 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 27 "N-000029" +Po -260 -195 +Le 32750520 +$EndPAD +$PAD +Sh "4" R 161 130 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 26 "N-000028" +Po -260 195 +Le 6 +$EndPAD +$PAD +Sh "5" R 161 130 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 0 195 +$EndPAD +$PAD +Sh "6" R 161 130 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 260 195 +Le 32 +$EndPAD +$EndMODULE GSG-B0310J50100AHF +$MODULE GSG-900MHZ-INVERTED-F +Po 64000 48000 1800 15 50516053 504D3AB8 ~P +Li GSG-900MHZ-INVERTED-F +Sc 504D3AB8 +AR /504C9FF3 +Op 0 0 0 +T0 7087 -2165 600 600 1800 120 N I 21 N "J1" +T1 7087 -984 600 600 1800 120 N I 21 N "GSG-900MHZ-F-ANTENNA" +$PAD +Sh "1" R 787 7874 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 29 "N-000031" +Po 0 -3937 +$EndPAD +$PAD +Sh "2" R 394 7874 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 21 "GND" +Po -2559 -3937 +Le 72 +$EndPAD +$PAD +Sh "" R 5118 394 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 0 -7677 +Le 32929184 +$EndPAD +$PAD +Sh "" R 394 4724 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 2362 -5512 +Le 33355568 +$EndPAD +$PAD +Sh "" R 2362 394 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 3346 -3346 +Le 31206400 +$EndPAD +$PAD +Sh "" R 2362 394 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 5315 -7677 +$EndPAD +$PAD +Sh "" R 2362 394 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 7283 -3346 +$EndPAD +$PAD +Sh "" R 2362 394 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 9252 -7677 +Le -1642768744 +$EndPAD +$PAD +Sh "" R 2362 394 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 11220 -3346 +$EndPAD +$PAD +Sh "" R 2362 394 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 13189 -7677 +$EndPAD +$PAD +Sh "" R 394 4724 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 4331 -5512 +Le 33355568 +$EndPAD +$PAD +Sh "" R 394 4724 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 6299 -5512 +Le 33355568 +$EndPAD +$PAD +Sh "" R 394 4724 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 8268 -5512 +Le 33355568 +$EndPAD +$PAD +Sh "" R 394 4724 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 10236 -5512 +$EndPAD +$PAD +Sh "" R 394 4724 0 0 1800 +Dr 0 0 0 +At SMD N 00008000 +Ne 0 "" +Po 12205 -5512 +Le 32929184 +$EndPAD +$EndMODULE GSG-900MHZ-INVERTED-F +$MODULE GSG-0603D +Po 65000 39000 2700 15 50516070 504D3AB9 ~P +Li GSG-0603D +Sc 504D3AB9 +AR /504CF0C2 +Op 0 0 0 +.SolderMask 40 +T0 830 0 240 240 2700 60 N V 21 N "D2" +T1 0 0 240 240 2700 60 N I 21 N "LED1" +DS -20 30 -20 -30 80 21 +DS 80 0 -80 -130 80 21 +DS -80 -130 -80 130 80 21 +DS -80 130 80 0 80 21 +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 300 0 +Le 18 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 34 "N-000037" +Po -300 0 +Le 33 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603D +$MODULE GSG-0603D +Po 56500 45000 1800 15 50516069 504D3ABB ~P +Li GSG-0603D +Sc 504D3ABB +AR /504CFE38 +Op 0 0 0 +.SolderMask 40 +T0 830 0 240 240 1800 60 N V 21 N "D3" +T1 0 0 240 240 1800 60 N I 21 N "LED2" +DS -20 30 -20 -30 80 21 +DS 80 0 -80 -130 80 21 +DS -80 -130 -80 130 80 21 +DS -80 130 80 0 80 21 +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 300 0 +Le 18 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 24 "N-000026" +Po -300 0 +Le 33 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603D +$MODULE GSG-0603D +Po 56500 46000 1800 15 50516063 504D3ABD ~P +Li GSG-0603D +Sc 504D3ABD +AR /504CFE70 +Op 0 0 0 +.SolderMask 40 +T0 850 10 240 240 1800 60 N V 21 N "D4" +T1 0 0 240 240 1800 60 N I 21 N "LED3" +DS -20 30 -20 -30 80 21 +DS 80 0 -80 -130 80 21 +DS -80 -130 -80 130 80 21 +DS -80 130 80 0 80 21 +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 300 0 +Le 18 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 25 "N-000027" +Po -300 0 +Le 33 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603D +$MODULE GSG-0603-SHORT-10MIL +Po 65000 34000 1800 15 504D2AC6 504D3ABF ~P +Li GSG-0603-SHORT-10MIL +Sc 504D3ABF +AR /504D0B94 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 1800 60 N V 21 N "R13" +T1 0 0 240 240 1800 60 N I 21 N "0" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00808000 +Ne 22 "N-000023" +Po 300 0 +Le 33 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00808000 +Ne 20 "3V3" +Po -300 0 +Le 1380141389 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "" R 280 100 0 0 1800 +Dr 0 0 0 +At SMD N 00808000 +Ne 0 "" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-0603-SHORT-10MIL +$MODULE GSG-0603-SHORT-10MIL +Po 60850 39800 0 15 504D2AC6 504D3AC1 ~P +Li GSG-0603-SHORT-10MIL +Sc 504D3AC1 +AR /504CB0EB +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 0 60 N V 21 N "R7" +T1 0 0 240 240 0 60 N I 21 N "0" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 32 "N-000034" +Po 300 0 +Le 33 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 33 "N-000035" +Po -300 0 +Le 1380141389 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "" R 280 100 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 0 "" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-0603-SHORT-10MIL +$MODULE GSG-0603-SHORT-10MIL +Po 50500 41500 0 15 504D2AC6 504D3AC5 ~P +Li GSG-0603-SHORT-10MIL +Sc 504D3AC5 +AR /504CF505 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 0 60 N V 21 N "R15" +T1 0 0 240 240 0 60 N I 21 N "0" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 20 "3V3" +Po 300 0 +Le 33 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 35 "N-000039" +Po -300 0 +Le 1380141389 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "" R 280 100 0 0 0 +Dr 0 0 0 +At SMD N 00808000 +Ne 0 "" +Po 0 0 +Le 33 +$EndPAD +$EndMODULE GSG-0603-SHORT-10MIL +$MODULE GSG-0603 +Po 58000 46000 0 15 4CFF2E39 504D3AC6 ~P +Li GSG-0603 +Sc 504D3AC6 +AR /504CFE6F +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 0 60 N V 21 N "R12" +T1 0 0 240 240 0 60 N I 21 N "330" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 17 "/P2_4" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 25 "N-000027" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 58000 45000 0 15 4CFF2E39 504D3AC8 ~P +Li GSG-0603 +Sc 504D3AC8 +AR /504CFE39 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 0 60 N V 21 N "R11" +T1 0 0 240 240 0 60 N I 21 N "330" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 16 "/P2_3" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 24 "N-000026" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 52000 45500 900 15 4CFF2E39 504D3ACA ~P +Li GSG-0603 +Sc 504D3ACA +AR /504CF38E +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 900 60 N V 21 N "R14" +T1 0 0 240 240 900 60 N I 21 N "10k" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 1 "/DC" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 57950 42300 0 15 4CFF2E39 504D3ACC ~P +Li GSG-0603 +Sc 504D3ACC +AR /504CAEA4 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 0 60 N V 21 N "R10" +T1 0 0 240 240 0 60 N I 21 N "33" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 43 "N-000051" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 36 "N-000041" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 57650 41700 0 15 4CFF2E39 504D3ACE ~P +Li GSG-0603 +Sc 504D3ACE +AR /504CAE9B +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 0 60 N V 21 N "R9" +T1 0 0 240 240 0 60 N I 21 N "33" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 37 "N-000042" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 38 "N-000043" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 57650 41100 0 15 4CFF2E39 504D3AD0 ~P +Li GSG-0603 +Sc 504D3AD0 +AR /504CAF08 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 0 60 N V 21 N "R8" +T1 0 0 240 240 0 60 N I 21 N "1k5" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 33 "N-000035" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 38 "N-000043" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 64000 39000 2700 15 4CFF2E39 504D3AD4 ~P +Li GSG-0603 +Sc 504D3AD4 +AR /504CF0D3 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 2700 60 N V 21 N "R5" +T1 0 0 240 240 2700 60 N I 21 N "330" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 42 "N-000047" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 34 "N-000037" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 52750 37100 1800 15 4CFF2E39 504D3AE6 ~P +Li GSG-0603 +Sc 504D3AE6 +AR /504CAD71 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 1800 60 N V 21 N "C15" +T1 0 0 240 240 1800 60 N I 21 N "1uF" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 19 "/VBUS" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 52750 38900 1800 15 4CFF2E39 504D3AE8 ~P +Li GSG-0603 +Sc 504D3AE8 +AR /504CAD75 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 1800 60 N V 21 N "C16" +T1 0 0 240 240 1800 60 N I 21 N "4u7" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 64000 47100 2700 15 505160A6 504D64FA ~P +Li GSG-0603 +Sc 504D64FA +AR /504CA04A +Op 0 0 0 +.SolderMask 40 +T0 230 -20 240 240 2700 60 N V 21 N "C6" +T1 0 0 240 240 2700 60 N I 21 N "10nF" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 29 "N-000031" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 30 "N-000032" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 66250 43750 1800 15 4CFF2E39 504D3AEE ~P +Li GSG-0603 +Sc 504D3AEE +AR /504CA3D1 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 1800 60 N V 21 N "C1" +T1 0 0 240 240 1800 60 N I 21 N "1uF" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 31 "N-000033" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 51000 45500 2700 15 4CFF2E39 504D3AF6 ~P +Li GSG-0603 +Sc 504D3AF6 +AR /504CEFF7 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 2700 60 N V 21 N "R2" +T1 0 0 240 240 2700 60 N I 21 N "10k" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 18 "/RESET_N" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0402 +Po 65100 47100 900 15 4FB6CFE4 504D3AF7 ~P +Li GSG-0402 +Sc 504D3AF7 +AR /504CFCBE +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 900 40 N V 21 N "D1" +T1 0 20 160 160 900 40 N I 21 N "TVS_DIODE" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 23 "N-000024" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 66050 44250 0 15 4FB6CFE4 504D3AD2 ~~ +Li GSG-0402 +Sc 504D3AD2 +AR /504CA8D9 +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 0 40 N V 21 N "C2" +T1 0 20 160 160 0 40 N I 21 N "100nF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 64800 45400 900 15 4FB6CFE4 504D65ED ~~ +Li GSG-0402 +Sc 504D65ED +AR /504CAA44 +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 900 40 N V 21 N "C3" +T1 0 20 160 160 900 40 N I 21 N "220pF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 64350 40850 2700 15 50515FE5 504D3AF2 ~~ +Li GSG-0402 +Sc 504D3AF2 +AR /504CA908 +Op 0 0 0 +.SolderMask 40 +T0 0 -20 160 160 2700 40 N V 21 N "C4" +T1 0 20 160 160 2700 40 N I 21 N "100nF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 64400 45400 900 15 4FB6CFE4 504D683B ~~ +Li GSG-0402 +Sc 504D683B +AR /504CAA22 +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 900 40 N V 21 N "C5" +T1 0 20 160 160 900 40 N I 21 N "10nF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 64700 46300 0 15 4FB6CFE4 504D683E ~~ +Li GSG-0402 +Sc 504D683E +AR /504CA01F +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 0 40 N V 21 N "C7" +T1 0 20 160 160 0 40 N I 21 N "10nF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 28 "N-000030" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 61550 44350 0 15 4FB6CFE4 504D3AF4 ~~ +Li GSG-0402 +Sc 504D3AF4 +AR /504CA977 +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 0 40 N V 21 N "C8" +T1 0 20 160 160 0 40 N I 21 N "10nF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 63250 45450 900 15 4FB6CFE4 504D3ADA ~~ +Li GSG-0402 +Sc 504D3ADA +AR /504CA9AD +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 900 40 N V 21 N "C9" +T1 0 20 160 160 900 40 N I 21 N "2p2" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 60150 45500 900 15 4FB6CFE4 504D3ADC ~~ +Li GSG-0402 +Sc 504D3ADC +AR /504CA2F0 +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 900 40 N V 21 N "C10" +T1 0 20 160 160 900 40 N I 21 N "22pF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 41 "N-000046" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 62850 45450 2700 15 50515FB0 504D3ADE ~~ +Li GSG-0402 +Sc 504D3ADE +AR /504CA2F3 +Op 0 0 0 +.SolderMask 40 +T0 0 -20 160 160 2700 40 N V 21 N "C11" +T1 0 20 160 160 2700 40 N I 21 N "22pF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 39 "N-000044" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0402 +Po 61350 42700 0 15 4FB6CFE4 504D3AE4 ~~ +Li GSG-0402 +Sc 504D3AE4 +AR /504CA934 +Op 0 0 0 +.SolderMask 40 +T0 0 20 160 160 0 40 N V 21 N "C14" +T1 0 20 160 160 0 40 N I 21 N "100nF" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0603 +Po 64300 46800 1800 15 50515FC0 504D4803 ~~ +Li GSG-0603 +Sc 504D4803 +AR /504D4718 +Op 0 0 0 +.SolderMask 40 +T0 -140 0 240 240 1800 60 N V 21 N "C17" +T1 0 0 240 240 1800 60 N I 21 N "10nF" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 30 "N-000032" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 1800 +Dr 0 0 0 +At SMD N 00888000 +Ne 23 "N-000024" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0402 +Po 65200 45400 2700 15 50515FB8 504D3AD8 ~~ +Li GSG-0402 +Sc 504D3AD8 +AR /504CA84D +Op 0 0 0 +.SolderMask 40 +T0 0 -20 160 160 2700 40 N V 21 N "R4" +T1 0 20 160 160 2700 40 N I 21 N "56k" +DS 350 -150 350 150 80 21 +DS 350 150 -350 150 80 21 +DS -350 150 -350 -150 80 21 +DS -350 -150 350 -150 80 21 +$PAD +Sh "2" R 200 220 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 210 0 +.SolderMask 40 +$EndPAD +$PAD +Sh "1" R 200 220 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 40 "N-000045" +Po -210 0 +Le 24791752 +.SolderMask 40 +$EndPAD +$EndMODULE GSG-0402 +$MODULE GSG-0603 +Po 59200 41400 2700 15 4CFF2E39 504D3AE0 ~~ +Li GSG-0603 +Sc 504D3AE0 +AR /504CAEAF +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 2700 60 N V 21 N "C12" +T1 0 0 240 240 2700 60 N I 21 N "47pF" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 37 "N-000042" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 59200 42600 900 15 4CFF2E39 504D3AE2 ~~ +Li GSG-0603 +Sc 504D3AE2 +AR /504CAECB +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 900 60 N V 21 N "C13" +T1 0 0 240 240 900 60 N I 21 N "47pF" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 43 "N-000051" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-0603 +Po 59800 39450 900 15 4CFF2E39 504D3AC3 ~~ +Li GSG-0603 +Sc 504D3AC3 +AR /504CAF13 +Op 0 0 0 +.SolderMask 40 +T0 0 0 240 240 900 60 N V 21 N "R6" +T1 0 0 240 240 900 60 N I 21 N "0" +DS 540 -240 -540 -240 80 21 +DS -540 -240 -540 240 80 21 +DS -540 240 540 240 80 21 +DS 540 240 540 -240 80 21 +$PAD +Sh "2" R 340 340 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 300 0 +Le 226 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$PAD +Sh "1" R 340 340 0 0 900 +Dr 0 0 0 +At SMD N 00888000 +Ne 33 "N-000035" +Po -300 0 +Le 46661520 +.SolderMask 40 +.LocalClearance 70 +$EndPAD +$EndMODULE GSG-0603 +$MODULE GSG-HOLE260MIL +Po 58500 19000 0 15 5051616D 504D7CF3 ~~ +Li GSG-HOLE260MIL +Sc 504D7CF3 +AR GSG-HOLE260MIL +Op 0 0 0 +T0 0 0 394 394 0 80 N I 21 N "HOLE260MIL" +T1 0 0 394 394 0 80 N I 21 N "VAL**" +$PAD +Sh "" C 2600 2600 0 0 0 +Dr 2600 0 0 +At STD N 00C0FFFF +Ne 0 "" +Po 0 0 +Le 235021312 +$EndPAD +$EndMODULE GSG-HOLE260MIL +$MODULE GSG-QFN36 +Po 63700 43100 2700 15 504E2458 504D65EA ~~ +Li GSG-QFN36 +Sc 504D65EA +AR /504D0F40 +Op 0 0 0 +T0 0 0 600 600 2700 120 N V 21 N "U1" +T1 0 0 600 600 2700 120 N I 21 N "CC1111" +DS 1181 -906 1181 -1181 80 21 +DS 1181 -1181 906 -1181 80 21 +DS 906 1181 1181 1181 80 21 +DS 1181 1181 1181 906 80 21 +DS -1181 906 -1181 1181 80 21 +DS -1181 1181 -906 1181 80 21 +DS -1181 -906 -1181 -984 80 21 +DS -1181 -984 -984 -1181 80 21 +DS -984 -1181 -906 -1181 80 21 +$PAD +Sh "1" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 9 "/P1_2" +Po -1142 -787 +$EndPAD +$PAD +Sh "2" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po -1142 -591 +$EndPAD +$PAD +Sh "3" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 42 "N-000047" +Po -1142 -394 +$EndPAD +$PAD +Sh "4" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 32 "N-000034" +Po -1142 -197 +$EndPAD +$PAD +Sh "5" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 3 "/P0_0" +Po -1142 0 +$EndPAD +$PAD +Sh "6" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 4 "/P0_1" +Po -1142 197 +$EndPAD +$PAD +Sh "7" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 5 "/P0_2" +Po -1142 394 +$EndPAD +$PAD +Sh "8" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 6 "/P0_3" +Po -1142 591 +$EndPAD +$PAD +Sh "9" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 7 "/P0_4" +Po -1142 787 +$EndPAD +$PAD +Sh "10" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 37 "N-000042" +Po -787 1142 +$EndPAD +$PAD +Sh "11" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 43 "N-000051" +Po -591 1142 +$EndPAD +$PAD +Sh "12" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po -394 1142 +$EndPAD +$PAD +Sh "13" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 8 "/P0_5" +Po -197 1142 +$EndPAD +$PAD +Sh "14" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 15 "/P2_0" +Po 0 1142 +$EndPAD +$PAD +Sh "15" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 2 "/DD" +Po 197 1142 +$EndPAD +$PAD +Sh "16" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 1 "/DC" +Po 394 1142 +$EndPAD +$PAD +Sh "17" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 16 "/P2_3" +Po 591 1142 +$EndPAD +$PAD +Sh "18" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 17 "/P2_4" +Po 787 1142 +$EndPAD +$PAD +Sh "19" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 1142 787 +$EndPAD +$PAD +Sh "20" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 41 "N-000046" +Po 1142 591 +$EndPAD +$PAD +Sh "21" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 39 "N-000044" +Po 1142 394 +$EndPAD +$PAD +Sh "22" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 1142 197 +$EndPAD +$PAD +Sh "23" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 26 "N-000028" +Po 1142 0 +$EndPAD +$PAD +Sh "24" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 27 "N-000029" +Po 1142 -197 +$EndPAD +$PAD +Sh "25" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 1142 -394 +$EndPAD +$PAD +Sh "26" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 1142 -591 +$EndPAD +$PAD +Sh "27" O 394 110 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 40 "N-000045" +Po 1142 -787 +$EndPAD +$PAD +Sh "28" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 787 -1142 +$EndPAD +$PAD +Sh "29" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 20 "3V3" +Po 591 -1142 +$EndPAD +$PAD +Sh "30" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 31 "N-000033" +Po 394 -1142 +$EndPAD +$PAD +Sh "31" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 18 "/RESET_N" +Po 197 -1142 +$EndPAD +$PAD +Sh "32" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 14 "/P1_7" +Po 0 -1142 +$EndPAD +$PAD +Sh "33" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 13 "/P1_6" +Po -197 -1142 +$EndPAD +$PAD +Sh "34" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 12 "/P1_5" +Po -394 -1142 +$EndPAD +$PAD +Sh "35" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 11 "/P1_4" +Po -591 -1142 +$EndPAD +$PAD +Sh "36" O 394 110 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 10 "/P1_3" +Po -787 -1142 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 0 0 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 575 0 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -575 0 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 0 -575 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 0 575 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 575 -575 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -575 -575 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po -575 575 +$EndPAD +$PAD +Sh "0" R 579 579 0 0 2700 +Dr 0 0 0 +At SMD N 00888000 +Ne 21 "GND" +Po 575 575 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po 575 -575 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po 0 -575 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po -575 -575 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po -575 0 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po 0 0 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po 575 0 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po -575 575 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po 0 575 +$EndPAD +$PAD +Sh "0" C 551 551 0 0 2700 +Dr 150 0 0 +At STD N 00C0FFFF +Ne 21 "GND" +Po 575 575 +$EndPAD +$EndMODULE GSG-QFN36 +$TEXTPCB +Te "P2_2" +Po 58500 33000 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "P2_1" +Po 55150 33000 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "1" +Po 50800 31500 400 500 100 0 +De 21 1 0 Normal C +$EndTEXTPCB +$DRAWSEGMENT +Po 0 56350 45500 56100 45500 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 56600 45500 56850 45500 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 65550 39150 65550 39400 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 65550 38900 65550 38650 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 63400 46450 64200 46450 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 64200 46500 64200 46200 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 63400 46500 64200 46500 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 63400 46200 63400 46500 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 3 65050 41750 65150 41850 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$TEXTPCB +Te "14" +Po 58500 49500 3500 5000 875 0 +De 20 0 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "D1" +Po 65100 47850 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "C6/C17" +Po 61500 47050 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "R6" +Po 59150 39500 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "R7" +Po 60850 39250 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "R13" +Po 65000 33450 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "R15" +Po 50500 42100 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "GND" +Po 65200 32450 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "3V3" +Po 61850 32450 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "DC" +Po 58500 32450 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "DD" +Po 55150 32450 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "RESET_N" +Po 51800 32450 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "GND" +Po 52200 35000 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "3V3" +Po 52200 34000 300 400 75 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "SW1" +Po 67500 34500 600 800 120 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "P1 EXPANSION" +Po 59500 36500 600 800 120 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "P9" +Po 50000 36500 600 800 120 0 +De 21 1 0 Normal C +$EndTEXTPCB +$DRAWSEGMENT +Po 0 65400 39150 65700 39150 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 65700 38900 65550 39100 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 65400 38900 65700 38900 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 65550 39100 65400 38900 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 56600 45650 56400 45500 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 56600 45350 56600 45650 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 56400 45500 56600 45350 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 56350 45650 56350 45350 80 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$TEXTPCB +Te "LED1" +Po 64500 38000 400 500 100 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "LED3" +Po 56500 46750 400 500 100 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "LED2" +Po 56500 44250 400 500 100 0 +De 21 1 0 Normal C +$EndTEXTPCB +$DRAWSEGMENT +Po 0 63500 47000 62500 47000 150 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 63500 47000 63250 47250 150 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 63500 47000 63250 46750 150 +De 21 0 900 0 0 +$EndDRAWSEGMENT +$TEXTPCB +Te "P2 ANTENNA" +Po 70000 45000 600 800 120 900 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "P8 GoodFET" +Po 52000 47000 600 800 120 0 +De 21 1 0 Normal C +$EndTEXTPCB +$TEXTPCB +Te "http://greatscottgadgets.com/tc14badge/" +Po 58500 54000 700 1000 150 0 +De 20 0 0 Normal C +$EndTEXTPCB +$DRAWSEGMENT +Po 0 67000 17000 50000 17000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 46000 21000 46000 53000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 71000 53000 71000 21000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 0 50000 57000 67000 57000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 2 67000 21000 67000 17000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 2 50000 21000 46000 21000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 2 50000 53000 50000 57000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$DRAWSEGMENT +Po 2 67000 53000 71000 53000 150 +De 28 0 900 0 0 +$EndDRAWSEGMENT +$TRACK +Po 0 62219 43494 62150 43563 80 -1 +De 15 0 1 0 0 +Po 0 52000 44000 52000 45200 80 -1 +De 15 0 1 0 C00000 +Po 0 56218 43782 60448 43782 80 -1 +De 15 0 1 0 0 +Po 0 56990 31500 56128 30638 80 -1 +De 15 0 1 0 0 +Po 0 54800 45200 52000 45200 80 -1 +De 15 0 1 0 800000 +Po 0 60667 43563 60448 43782 80 -1 +De 15 0 1 0 0 +Po 0 48800 44700 51300 44700 80 -1 +De 0 0 1 0 0 +Po 0 48500 42500 48500 44400 80 -1 +De 0 0 1 0 0 +Po 0 62558 43494 62219 43494 80 -1 +De 15 0 1 0 400000 +Po 0 48500 44400 48800 44700 80 -1 +De 0 0 1 0 0 +Po 0 52000 44000 51300 44700 80 -1 +De 0 0 1 0 400000 +Po 0 49338 38838 49338 41662 80 -1 +De 0 0 1 0 0 +Po 0 48080 37580 49338 38838 80 -1 +De 0 0 1 0 0 +Po 3 48080 37580 48080 37580 310 160 +De 15 1 1 0 0 +Po 0 48232 30638 47538 31332 80 -1 +De 15 0 1 0 0 +Po 0 47538 31332 47538 37038 80 -1 +De 15 0 1 0 0 +Po 0 56128 30638 48232 30638 80 -1 +De 15 0 1 0 0 +Po 0 54800 45200 56218 43782 80 -1 +De 15 0 1 0 0 +Po 0 56990 31500 58500 31500 80 -1 +De 15 0 1 0 800000 +Po 0 49338 41662 48500 42500 80 -1 +De 0 0 1 0 0 +Po 0 62150 43563 60667 43563 80 -1 +De 15 0 1 0 0 +Po 0 47538 37038 48080 37580 80 -1 +De 15 0 1 0 0 +Po 0 49000 44000 49500 43500 80 -1 +De 15 0 2 0 400000 +Po 0 49500 38770 49500 43500 80 -1 +De 0 0 2 0 0 +Po 0 62184 43297 62080 43401 80 -1 +De 15 0 2 0 0 +Po 0 56200 43500 56320 43620 80 -1 +De 15 0 2 0 0 +Po 0 49000 44000 49500 43500 80 -1 +De 0 0 2 0 400000 +Po 0 56320 43620 60380 43620 80 -1 +De 15 0 2 0 0 +Po 0 62184 43297 62558 43297 80 -1 +De 15 0 2 0 800000 +Po 0 54454 30800 55154 31500 80 -1 +De 15 0 2 0 800000 +Po 0 49500 43500 56200 43500 80 -1 +De 15 0 2 0 0 +Po 0 62080 43401 60599 43401 80 -1 +De 15 0 2 0 0 +Po 0 48380 37650 49500 38770 80 -1 +De 0 0 2 0 0 +Po 0 48300 30800 54454 30800 80 -1 +De 15 0 2 0 0 +Po 0 47700 31400 48300 30800 80 -1 +De 15 0 2 0 0 +Po 0 47700 36800 48080 37180 80 -1 +De 15 0 2 0 0 +Po 0 60380 43620 60599 43401 80 -1 +De 15 0 2 0 0 +Po 3 48080 37180 48080 37180 310 160 +De 15 1 2 0 0 +Po 0 47700 31400 47700 36800 80 -1 +De 15 0 2 0 0 +Po 0 48380 37480 48380 37650 80 -1 +De 0 0 2 0 0 +Po 0 48080 37180 48380 37480 80 -1 +De 0 0 2 0 0 +Po 0 63700 41958 63700 41690 80 -1 +De 15 0 3 0 400000 +Po 0 63676 41056 63000 40380 80 -1 +De 15 0 3 0 0 +Po 0 63700 41690 63676 41666 80 -1 +De 15 0 3 0 0 +Po 0 63000 40380 63000 35000 80 -1 +De 15 0 3 0 800000 +Po 0 63676 41666 63676 41056 80 -1 +De 15 0 3 0 0 +Po 0 62838 40448 62838 35818 80 -1 +De 15 0 4 0 0 +Po 0 63503 41113 62838 40448 80 -1 +De 15 0 4 0 0 +Po 0 62838 35818 62510 35490 80 -1 +De 15 0 4 0 0 +Po 0 62510 35490 62510 34510 80 -1 +De 15 0 4 0 0 +Po 0 63503 41958 63503 41113 80 -1 +De 15 0 4 0 400000 +Po 0 62510 34510 62000 34000 80 -1 +De 15 0 4 0 800000 +Po 0 62000 35210 62000 35000 80 -1 +De 15 0 5 0 800000 +Po 0 62676 35886 62000 35210 80 -1 +De 15 0 5 0 0 +Po 0 63306 41146 62676 40516 80 -1 +De 15 0 5 0 0 +Po 0 63306 41958 63306 41146 80 -1 +De 15 0 5 0 400000 +Po 0 62676 40516 62676 35886 80 -1 +De 15 0 5 0 0 +Po 0 63109 41958 63109 41179 80 -1 +De 15 0 6 0 400000 +Po 0 61500 34500 61000 34000 80 -1 +De 15 0 6 0 800000 +Po 0 61500 35500 61500 34500 80 -1 +De 15 0 6 0 0 +Po 0 63109 41179 62514 40584 80 -1 +De 15 0 6 0 0 +Po 0 62514 40584 62514 36514 80 -1 +De 15 0 6 0 0 +Po 0 62514 36514 61500 35500 80 -1 +De 15 0 6 0 0 +Po 0 62352 40652 62352 36582 80 -1 +De 15 0 7 0 0 +Po 0 62913 41958 62913 41213 80 -1 +De 15 0 7 0 400000 +Po 0 61000 35230 61000 35000 80 -1 +De 15 0 7 0 800000 +Po 0 62352 36582 61000 35230 80 -1 +De 15 0 7 0 0 +Po 0 62913 41213 62352 40652 80 -1 +De 15 0 7 0 0 +Po 0 56000 40920 56172 40748 80 -1 +De 0 0 8 0 0 +Po 0 61943 43077 60461 43077 80 -1 +De 15 0 8 0 0 +Po 3 56000 40920 56000 40920 310 160 +De 15 1 8 0 0 +Po 0 62117 42903 61943 43077 80 -1 +De 15 0 8 0 0 +Po 0 62558 42903 62117 42903 80 -1 +De 15 0 8 0 400000 +Po 0 59500 34500 60000 34000 80 -1 +De 15 0 8 0 800000 +Po 0 55841 42299 55832 42290 80 -1 +De 15 0 8 0 0 +Po 0 55841 42299 55841 41079 80 -1 +De 15 0 8 0 0 +Po 0 56350 38600 56680 38600 80 -1 +De 0 0 8 0 0 +Po 0 56172 40748 56172 38778 80 -1 +De 0 0 8 0 0 +Po 0 60242 43296 56838 43296 80 -1 +De 15 0 8 0 0 +Po 0 60461 43077 60242 43296 80 -1 +De 15 0 8 0 0 +Po 0 56838 43296 55841 42299 80 -1 +De 15 0 8 0 0 +Po 0 56172 38778 56350 38600 80 -1 +De 0 0 8 0 0 +Po 0 55841 41079 56000 40920 80 -1 +De 15 0 8 0 0 +Po 3 56680 38600 56680 38600 310 160 +De 15 1 8 0 0 +Po 0 56680 38600 59500 35780 80 -1 +De 15 0 8 0 0 +Po 0 59500 35780 59500 34500 80 -1 +De 15 0 8 0 0 +Po 0 64487 41958 64487 41683 80 -1 +De 15 0 9 0 400000 +Po 0 60850 33500 60500 33850 80 -1 +De 15 0 9 0 0 +Po 0 60500 34500 60000 35000 80 -1 +De 15 0 9 0 800000 +Po 0 63650 33500 60850 33500 80 -1 +De 15 0 9 0 0 +Po 0 64487 41683 65709 40461 80 -1 +De 15 0 9 0 0 +Po 0 64100 33950 63650 33500 80 -1 +De 15 0 9 0 0 +Po 0 64646 37386 64100 36840 80 -1 +De 15 0 9 0 0 +Po 0 65709 37386 64646 37386 80 -1 +De 15 0 9 0 400000 +Po 0 60500 33850 60500 34500 80 -1 +De 15 0 9 0 0 +Po 0 65709 40461 65709 37386 80 -1 +De 15 0 9 0 800000 +Po 0 64100 36840 64100 33950 80 -1 +De 15 0 9 0 0 +Po 0 65709 37386 69291 37386 80 -1 +De 15 0 9 0 C00000 +Po 0 67150 41200 67150 38280 80 -1 +De 15 0 10 0 0 +Po 0 64370 34270 63600 33500 80 -1 +De 0 0 10 0 0 +Po 0 63600 33500 59500 33500 80 -1 +De 0 0 10 0 0 +Po 0 67150 38280 64370 35500 80 -1 +De 0 0 10 0 0 +Po 0 66037 42313 67150 41200 80 -1 +De 15 0 10 0 0 +Po 3 67150 38280 67150 38280 310 160 +De 15 1 10 0 0 +Po 0 64842 42313 66037 42313 80 -1 +De 15 0 10 0 400000 +Po 0 64370 35500 64370 34270 80 -1 +De 0 0 10 0 0 +Po 0 59500 33500 59000 34000 80 -1 +De 0 0 10 0 800000 +Po 0 67312 38688 67440 38560 80 -1 +De 15 0 11 0 0 +Po 0 67440 38560 67440 38080 80 -1 +De 0 0 11 0 0 +Po 0 65146 42509 65180 42475 80 -1 +De 15 0 11 0 0 +Po 0 63668 33338 58902 33338 80 -1 +De 0 0 11 0 0 +Po 0 67360 38000 67100 38000 80 -1 +De 0 0 11 0 0 +Po 0 64842 42509 65146 42509 80 -1 +De 15 0 11 0 400000 +Po 0 67440 38080 67360 38000 80 -1 +De 0 0 11 0 0 +Po 0 58500 33740 58500 34500 80 -1 +De 0 0 11 0 0 +Po 0 65180 42475 66105 42475 80 -1 +De 15 0 11 0 0 +Po 0 67312 41268 67312 38688 80 -1 +De 15 0 11 0 0 +Po 0 66105 42475 67312 41268 80 -1 +De 15 0 11 0 0 +Po 0 67100 38000 64532 35432 80 -1 +De 0 0 11 0 0 +Po 0 64532 34202 63668 33338 80 -1 +De 0 0 11 0 0 +Po 0 58500 34500 59000 35000 80 -1 +De 0 0 11 0 800000 +Po 0 58902 33338 58500 33740 80 -1 +De 0 0 11 0 0 +Po 3 67440 38560 67440 38560 310 160 +De 15 1 11 0 0 +Po 0 64532 35432 64532 34202 80 -1 +De 0 0 11 0 0 +Po 0 58824 33176 58000 34000 80 -1 +De 0 0 12 0 800000 +Po 0 64694 34134 63736 33176 80 -1 +De 0 0 12 0 0 +Po 0 63736 33176 58824 33176 80 -1 +De 0 0 12 0 0 +Po 0 67740 38150 67428 37838 80 -1 +De 0 0 12 0 0 +Po 0 65174 42706 65243 42637 80 -1 +De 15 0 12 0 0 +Po 3 67600 38920 67600 38920 310 160 +De 15 1 12 0 0 +Po 0 67474 39046 67600 38920 80 -1 +De 15 0 12 0 0 +Po 0 67740 38780 67740 38150 80 -1 +De 0 0 12 0 0 +Po 0 64694 35364 64694 34134 80 -1 +De 0 0 12 0 0 +Po 0 65243 42637 66173 42637 80 -1 +De 15 0 12 0 0 +Po 0 67474 41336 67474 39046 80 -1 +De 15 0 12 0 0 +Po 0 67600 38920 67740 38780 80 -1 +De 0 0 12 0 0 +Po 0 66173 42637 67474 41336 80 -1 +De 15 0 12 0 0 +Po 0 64842 42706 65174 42706 80 -1 +De 15 0 12 0 400000 +Po 0 67168 37838 64694 35364 80 -1 +De 0 0 12 0 0 +Po 0 67428 37838 67168 37838 80 -1 +De 0 0 12 0 0 +Po 0 57500 34500 58000 35000 80 -1 +De 0 0 13 0 800000 +Po 3 67760 39280 67760 39280 310 160 +De 15 1 13 0 0 +Po 0 67236 37676 64856 35296 80 -1 +De 0 0 13 0 0 +Po 0 67902 39138 67902 38082 80 -1 +De 0 0 13 0 0 +Po 0 67636 39404 67760 39280 80 -1 +De 15 0 13 0 0 +Po 0 64856 35296 64856 34066 80 -1 +De 0 0 13 0 0 +Po 0 66241 42799 67636 41404 80 -1 +De 15 0 13 0 0 +Po 0 63804 33014 58156 33014 80 -1 +De 0 0 13 0 0 +Po 0 65207 42903 65311 42799 80 -1 +De 15 0 13 0 0 +Po 0 67636 41404 67636 39404 80 -1 +De 15 0 13 0 0 +Po 0 64842 42903 65207 42903 80 -1 +De 15 0 13 0 400000 +Po 0 67902 38082 67496 37676 80 -1 +De 0 0 13 0 0 +Po 0 58156 33014 57500 33670 80 -1 +De 0 0 13 0 0 +Po 0 67496 37676 67236 37676 80 -1 +De 0 0 13 0 0 +Po 0 67760 39280 67902 39138 80 -1 +De 0 0 13 0 0 +Po 0 65311 42799 66241 42799 80 -1 +De 15 0 13 0 0 +Po 0 57500 33670 57500 34500 80 -1 +De 0 0 13 0 0 +Po 0 64856 34066 63804 33014 80 -1 +De 0 0 13 0 0 +Po 0 66309 42961 67798 41472 80 -1 +De 15 0 14 0 0 +Po 0 65240 43100 65379 42961 80 -1 +De 15 0 14 0 0 +Po 0 65018 35228 65018 33998 80 -1 +De 0 0 14 0 0 +Po 0 67798 39762 67920 39640 80 -1 +De 15 0 14 0 0 +Po 0 68064 39496 68064 38014 80 -1 +De 0 0 14 0 0 +Po 0 57000 33940 57000 34000 80 -1 +De 0 0 14 0 800000 +Po 0 67564 37514 67304 37514 80 -1 +De 0 0 14 0 0 +Po 0 65379 42961 66309 42961 80 -1 +De 15 0 14 0 0 +Po 0 65018 33998 63872 32852 80 -1 +De 0 0 14 0 0 +Po 3 67920 39640 67920 39640 310 160 +De 15 1 14 0 0 +Po 0 63872 32852 58088 32852 80 -1 +De 0 0 14 0 0 +Po 0 67920 39640 68064 39496 80 -1 +De 0 0 14 0 0 +Po 0 68064 38014 67564 37514 80 -1 +De 0 0 14 0 0 +Po 0 58088 32852 57000 33940 80 -1 +De 0 0 14 0 0 +Po 0 67304 37514 65018 35228 80 -1 +De 0 0 14 0 0 +Po 0 64842 43100 65240 43100 80 -1 +De 15 0 14 0 400000 +Po 0 67798 41472 67798 39762 80 -1 +De 15 0 14 0 0 +Po 0 55670 40650 55700 40620 80 -1 +De 15 0 15 0 0 +Po 0 60310 43458 60529 43239 80 -1 +De 15 0 15 0 0 +Po 0 57000 37720 57000 35000 80 -1 +De 15 0 15 0 800000 +Po 0 55670 42358 55670 40650 80 -1 +De 15 0 15 0 0 +Po 3 56440 38280 56440 38280 310 160 +De 15 1 15 0 0 +Po 0 62010 43239 60529 43239 80 -1 +De 15 0 15 0 0 +Po 0 56010 38710 56440 38280 80 -1 +De 0 0 15 0 0 +Po 0 55700 40620 56010 40310 80 -1 +De 0 0 15 0 0 +Po 0 56440 38280 57000 37720 80 -1 +De 15 0 15 0 0 +Po 3 55700 40620 55700 40620 310 160 +De 15 1 15 0 0 +Po 0 62558 43100 62149 43100 80 -1 +De 15 0 15 0 400000 +Po 0 62149 43100 62010 43239 80 -1 +De 15 0 15 0 0 +Po 0 56770 43458 60310 43458 80 -1 +De 15 0 15 0 0 +Po 0 56010 40310 56010 38710 80 -1 +De 0 0 15 0 0 +Po 0 55670 42358 56770 43458 80 -1 +De 15 0 15 0 0 +Po 0 60735 43725 62225 43725 80 -1 +De 15 0 16 0 0 +Po 0 58926 43944 58300 44570 80 -1 +De 15 0 16 0 0 +Po 0 55410 40740 55410 40500 80 -1 +De 0 0 16 0 0 +Po 0 55808 38382 55808 35488 80 -1 +De 15 0 16 0 0 +Po 0 55848 38598 55720 38470 80 -1 +De 0 0 16 0 0 +Po 0 58300 44570 58300 45000 80 -1 +De 15 0 16 0 800000 +Po 0 58926 43944 60516 43944 80 -1 +De 15 0 16 0 0 +Po 0 55720 38470 55808 38382 80 -1 +De 15 0 16 0 0 +Po 0 55500 35180 55500 34500 80 -1 +De 15 0 16 0 0 +Po 0 56000 34000 55500 34500 80 -1 +De 15 0 16 0 400000 +Po 0 58140 44410 58140 43470 80 -1 +De 0 0 16 0 0 +Po 0 62259 43691 62558 43691 80 -1 +De 15 0 16 0 800000 +Po 0 55410 40500 55848 40062 80 -1 +De 0 0 16 0 0 +Po 0 62225 43725 62259 43691 80 -1 +De 15 0 16 0 0 +Po 0 58140 43470 55410 40740 80 -1 +De 0 0 16 0 0 +Po 0 55808 35488 55500 35180 80 -1 +De 15 0 16 0 0 +Po 0 60516 43944 60735 43725 80 -1 +De 15 0 16 0 0 +Po 0 58140 44410 58300 44570 80 -1 +De 0 0 16 0 0 +Po 0 55848 40062 55848 38598 80 -1 +De 0 0 16 0 0 +Po 3 55720 38470 55720 38470 310 160 +De 15 1 16 0 0 +Po 3 58300 44570 58300 44570 310 160 +De 15 1 16 0 0 +Po 0 56334 41434 56334 39066 80 -1 +De 0 0 17 0 0 +Po 0 56460 38940 56000 38480 80 -1 +De 15 0 17 0 0 +Po 0 58810 44720 58810 45490 80 -1 +De 15 0 17 0 0 +Po 0 58302 44152 58302 43402 80 -1 +De 0 0 17 0 0 +Po 0 60803 43887 60584 44106 80 -1 +De 15 0 17 0 0 +Po 0 58810 44660 58302 44152 80 -1 +De 0 0 17 0 0 +Po 0 59424 44106 59215 44315 80 -1 +De 15 0 17 0 0 +Po 0 60584 44106 59424 44106 80 -1 +De 15 0 17 0 0 +Po 0 58810 45490 58300 46000 80 -1 +De 15 0 17 0 800000 +Po 0 56000 38480 56000 35000 80 -1 +De 15 0 17 0 800000 +Po 0 58810 44720 58810 44660 80 -1 +De 0 0 17 0 0 +Po 3 58810 44720 58810 44720 310 160 +De 15 1 17 0 0 +Po 0 59215 44315 58810 44720 80 -1 +De 15 0 17 0 0 +Po 3 56460 38940 56460 38940 310 160 +De 15 1 17 0 0 +Po 0 62558 43887 60803 43887 80 -1 +De 15 0 17 0 400000 +Po 0 56334 39066 56460 38940 80 -1 +De 0 0 17 0 0 +Po 0 58302 43402 56334 41434 80 -1 +De 0 0 17 0 0 +Po 0 50500 42800 49662 41962 80 -1 +De 0 0 18 0 0 +Po 3 57640 32880 57640 32880 310 160 +De 15 1 18 0 0 +Po 0 51000 44000 50500 43500 80 -1 +De 0 0 18 0 400000 +Po 0 48542 37582 49662 38702 80 -1 +De 0 0 18 0 0 +Po 0 50500 43500 50500 42800 80 -1 +De 0 0 18 0 0 +Po 0 51807 31499 51270 30962 80 -1 +De 15 0 18 0 0 +Po 0 51807 31499 51807 31500 80 -1 +De 15 0 18 0 800000 +Po 0 67632 37352 67372 37352 80 -1 +De 0 0 18 0 0 +Po 0 49662 38702 49662 41962 80 -1 +De 0 0 18 0 0 +Po 0 65105 43297 64842 43297 80 -1 +De 15 0 18 0 800000 +Po 0 51000 44000 51000 45200 80 -1 +De 15 0 18 0 C00000 +Po 0 67960 40120 68080 40000 80 -1 +De 15 0 18 0 0 +Po 0 66377 43123 67960 41540 80 -1 +De 15 0 18 0 0 +Po 0 63940 32690 57830 32690 80 -1 +De 0 0 18 0 0 +Po 0 65308 43262 65447 43123 80 -1 +De 15 0 18 0 0 +Po 0 65140 43262 65308 43262 80 -1 +De 15 0 18 0 0 +Po 0 65105 43297 65140 43262 80 -1 +De 15 0 18 0 0 +Po 0 67960 41540 67960 40120 80 -1 +De 15 0 18 0 0 +Po 0 57830 32690 57640 32880 80 -1 +De 0 0 18 0 0 +Po 0 47900 31430 47900 36560 80 -1 +De 15 0 18 0 0 +Po 0 51270 30962 48368 30962 80 -1 +De 15 0 18 0 0 +Po 0 48480 37140 48542 37202 80 -1 +De 0 0 18 0 0 +Po 0 68226 39854 68226 37946 80 -1 +De 0 0 18 0 0 +Po 3 48480 37140 48480 37140 310 160 +De 15 1 18 0 0 +Po 0 47900 36560 48480 37140 80 -1 +De 15 0 18 0 0 +Po 0 67372 37352 65180 35160 80 -1 +De 0 0 18 0 0 +Po 3 68080 40000 68080 40000 310 160 +De 15 1 18 0 0 +Po 0 68226 37946 67632 37352 80 -1 +De 0 0 18 0 0 +Po 0 48368 30962 47900 31430 80 -1 +De 15 0 18 0 0 +Po 0 48542 37202 48542 37582 80 -1 +De 0 0 18 0 0 +Po 0 68080 40000 68226 39854 80 -1 +De 0 0 18 0 0 +Po 0 65180 33930 63940 32690 80 -1 +De 0 0 18 0 0 +Po 0 65447 43123 66377 43123 80 -1 +De 15 0 18 0 0 +Po 0 51807 31500 53367 33060 80 -1 +De 15 0 18 0 400000 +Po 0 65180 35160 65180 33930 80 -1 +De 0 0 18 0 0 +Po 0 57460 33060 53367 33060 80 -1 +De 15 0 18 0 0 +Po 0 57640 32880 57460 33060 80 -1 +De 15 0 18 0 0 +Po 0 53050 37210 52610 37650 200 -1 +De 15 0 19 0 0 +Po 0 53050 37100 53600 37650 200 -1 +De 15 0 19 0 C00000 +Po 0 53050 37210 53050 37100 200 -1 +De 15 0 19 0 800000 +Po 0 50210 37650 48500 39360 500 -1 +De 15 0 19 0 0 +Po 0 48372 39488 48500 39360 80 -1 +De 15 0 19 0 0 +Po 0 48500 39360 48490 39360 200 -1 +De 15 0 19 0 0 +Po 0 47781 39488 48372 39488 80 -1 +De 15 0 19 0 400000 +Po 0 52610 37650 50210 37650 500 -1 +De 15 0 19 0 0 +Po 0 60200 40550 60200 40300 200 -1 +De 15 0 20 0 0 +Po 3 64340 41430 64340 41430 310 160 +De 15 1 20 0 0 +Po 3 53050 38350 53050 38350 420 250 +De 15 1 20 0 0 +Po 0 61690 44350 61260 44780 200 -1 +De 0 0 20 0 0 +Po 0 65300 34000 65750 34000 200 -1 +De 15 0 20 0 400000 +Po 0 65500 44250 65330 44080 200 -1 +De 15 0 20 0 0 +Po 0 62690 44350 62850 44350 80 -1 +De 15 0 20 0 0 +Po 0 61926 42706 61920 42700 80 -1 +De 15 0 20 0 0 +Po 0 64291 44242 64291 44451 80 -1 +De 15 0 20 0 400000 +Po 0 66000 43000 67500 43000 200 -1 +De 0 0 20 0 0 +Po 0 53050 38900 53050 38350 200 -1 +De 15 0 20 0 400000 +Po 0 62558 42706 61926 42706 80 -1 +De 15 0 20 0 400000 +Po 0 60200 40300 59800 39900 200 -1 +De 0 0 20 0 0 +Po 3 65500 41600 65500 41600 420 250 +De 15 1 20 0 0 +Po 0 64291 44451 64460 44620 80 -1 +De 15 0 20 0 0 +Po 0 61450 42230 61920 42700 200 -1 +De 0 0 20 0 0 +Po 0 64460 44620 64660 44620 80 -1 +De 15 0 20 0 0 +Po 0 64800 44760 64660 44620 200 -1 +De 15 0 20 0 0 +Po 0 60350 44590 59730 44590 200 -1 +De 0 0 20 0 0 +Po 0 65840 44250 65500 44250 200 -1 +De 15 0 20 0 400000 +Po 0 64660 44620 64790 44620 200 -1 +De 0 0 20 0 0 +Po 0 53100 38400 53100 40500 200 -1 +De 0 0 20 0 0 +Po 0 62280 44350 62690 44350 200 -1 +De 15 0 20 0 0 +Po 0 65170 43920 65170 43800 200 -1 +De 15 0 20 0 0 +Po 3 59800 38550 59800 38550 420 250 +De 15 1 20 0 0 +Po 3 64660 44620 64660 44620 310 160 +De 15 1 20 0 0 +Po 3 59730 44590 59730 44590 420 250 +De 15 1 20 0 0 +Po 0 64291 41479 64340 41430 80 -1 +De 15 0 20 0 0 +Po 0 64340 41430 65330 41430 200 -1 +De 0 0 20 0 0 +Po 0 62913 44242 62913 44287 80 -1 +De 15 0 20 0 400000 +Po 0 64400 44880 64660 44620 200 -1 +De 0 0 20 0 0 +Po 0 63250 44940 62870 44940 200 -1 +De 0 0 20 0 0 +Po 0 61920 42700 61560 42700 200 -1 +De 15 0 20 0 800000 +Po 3 61450 41800 61450 41800 420 250 +De 15 1 20 0 0 +Po 0 63250 44940 63250 44854 200 -1 +De 15 0 20 0 0 +Po 0 63503 44601 63347 44757 80 -1 +De 15 0 20 0 0 +Po 0 65330 41430 65500 41600 200 -1 +De 0 0 20 0 0 +Po 0 62850 44350 62913 44287 80 -1 +De 15 0 20 0 0 +Po 0 59800 38550 59800 39900 200 -1 +De 0 0 20 0 0 +Po 0 65083 43887 65170 43800 80 -1 +De 15 0 20 0 0 +Po 0 61450 41800 61450 42230 200 -1 +De 0 0 20 0 0 +Po 3 65750 34000 65750 34000 420 250 +De 15 1 20 0 0 +Po 0 63250 44854 63347 44757 200 -1 +De 15 0 20 0 0 +Po 0 65170 43920 65330 44080 200 -1 +De 15 0 20 0 0 +Po 0 62280 44350 61760 44350 200 -1 +De 15 0 20 0 800000 +Po 3 63250 44940 63250 44940 310 160 +De 15 1 20 0 0 +Po 0 53050 38900 53600 38350 200 -1 +De 15 0 20 0 C00000 +Po 3 65330 44080 65330 44080 310 160 +De 15 1 20 0 0 +Po 0 50800 41500 51250 41500 200 -1 +De 15 0 20 0 400000 +Po 0 63250 44940 63250 45240 200 -1 +De 15 0 20 0 800000 +Po 3 60200 40300 60200 40300 420 250 +De 15 1 20 0 0 +Po 0 64400 44900 64400 44880 200 -1 +De 0 0 20 0 0 +Po 0 64842 43691 65061 43691 80 -1 +De 15 0 20 0 400000 +Po 3 53100 40500 53100 40500 420 250 +De 15 1 20 0 0 +Po 3 64400 44900 64400 44900 310 160 +De 15 1 20 0 0 +Po 3 51250 41500 51250 41500 420 250 +De 15 1 20 0 0 +Po 0 61260 44780 60540 44780 200 -1 +De 0 0 20 0 0 +Po 0 65330 44080 65330 43670 200 -1 +De 0 0 20 0 0 +Po 0 64350 41420 64340 41430 200 -1 +De 15 0 20 0 0 +Po 0 65330 43670 66000 43000 200 -1 +De 0 0 20 0 0 +Po 0 64842 43887 65083 43887 80 -1 +De 15 0 20 0 400000 +Po 0 65061 43691 65170 43800 80 -1 +De 15 0 20 0 0 +Po 0 63503 44242 63503 44601 80 -1 +De 15 0 20 0 400000 +Po 0 62280 44350 61690 44350 200 -1 +De 0 0 20 0 0 +Po 0 62870 44940 62280 44350 200 -1 +De 0 0 20 0 0 +Po 0 60540 44780 60350 44590 200 -1 +De 0 0 20 0 0 +Po 0 64094 44614 64160 44680 80 -1 +De 15 0 20 0 0 +Po 3 67500 43000 67500 43000 420 250 +De 15 1 20 0 0 +Po 0 64400 44900 64380 44900 200 -1 +De 15 0 20 0 0 +Po 0 64291 41479 64291 41958 80 -1 +De 15 0 20 0 800000 +Po 0 64380 44900 64160 44680 200 -1 +De 15 0 20 0 0 +Po 0 64400 44900 64400 45190 200 -1 +De 15 0 20 0 800000 +Po 0 53050 38350 53100 38400 200 -1 +De 0 0 20 0 0 +Po 0 61450 41800 60200 40550 200 -1 +De 15 0 20 0 0 +Po 0 64790 44620 65330 44080 200 -1 +De 0 0 20 0 0 +Po 0 64094 44242 64094 44614 80 -1 +De 15 0 20 0 400000 +Po 3 62280 44350 62280 44350 310 160 +De 15 1 20 0 0 +Po 0 64800 44760 64800 45190 200 -1 +De 15 0 20 0 800000 +Po 3 61920 42700 61920 42700 310 160 +De 15 1 20 0 0 +Po 0 64350 41060 64350 41420 200 -1 +De 15 0 20 0 400000 +Po 0 63125 42525 64275 42525 1000 -1 +De 0 0 21 0 C00000 +Po 0 64400 45610 64400 45780 200 -1 +De 15 0 21 0 400000 +Po 3 65280 45860 65280 45860 310 160 +De 15 1 21 0 0 +Po 0 55760 45000 55750 44990 200 -1 +De 15 0 21 0 0 +Po 0 65200 45780 65280 45860 200 -1 +De 15 0 21 0 0 +Po 0 65200 45610 65200 45780 200 -1 +De 15 0 21 0 400000 +Po 3 64480 45860 64480 45860 310 160 +De 15 1 21 0 0 +Po 0 64800 45780 64880 45860 200 -1 +De 15 0 21 0 0 +Po 0 59200 42900 59650 42900 200 -1 +De 15 0 21 0 400000 +Po 0 64800 45610 64800 45780 200 -1 +De 15 0 21 0 400000 +Po 3 64880 45860 64880 45860 310 160 +De 15 1 21 0 0 +Po 0 65709 35614 65709 35041 200 -1 +De 15 0 21 0 400000 +Po 0 63125 42525 64275 43675 500 -1 +De 0 0 21 0 C00000 +Po 0 64275 42525 64275 43675 1000 -1 +De 0 0 21 0 C00000 +Po 3 64350 40190 64350 40190 420 250 +De 15 1 21 0 0 +Po 0 65100 47310 64900 47310 200 -1 +De 15 0 21 0 400000 +Po 0 56200 46000 55750 46000 200 -1 +De 15 0 21 0 400000 +Po 0 54400 38000 54850 38000 200 -1 +De 15 0 21 0 400000 +Po 3 66560 44250 66560 44250 310 160 +De 15 1 21 0 0 +Po 3 65000 39750 65000 39750 420 250 +De 15 1 21 0 0 +Po 3 60150 44990 60150 44990 310 160 +De 15 1 21 0 0 +Po 0 48420 40510 50290 40510 500 -1 +De 15 0 21 0 0 +Po 0 61340 44350 60940 44350 200 -1 +De 15 0 21 0 400000 +Po 0 69291 35614 69291 35049 200 -1 +De 15 0 21 0 400000 +Po 0 66559 51937 66559 47509 200 -1 +De 15 0 21 0 400000 +Po 3 59650 41100 59650 41100 420 250 +De 15 1 21 0 0 +Po 0 56200 45000 55760 45000 200 -1 +De 15 0 21 0 400000 +Po 0 48418 40512 48420 40510 80 -1 +De 15 0 21 0 0 +Po 3 65210 46300 65210 46300 310 160 +De 15 1 21 0 0 +Po 0 64910 46300 65210 46300 200 -1 +De 15 0 21 0 400000 +Po 0 65193 31500 65200 31500 200 -1 +De 15 0 21 0 400000 +Po 3 62850 45960 62850 45960 310 160 +De 15 1 21 0 0 +Po 0 63250 45660 63250 45960 200 -1 +De 15 0 21 0 400000 +Po 0 64275 43675 63125 43675 1000 -1 +De 0 0 21 0 C00000 +Po 0 65200 31500 65900 32200 200 -1 +De 15 0 21 0 0 +Po 0 69291 35049 69300 35040 200 -1 +De 15 0 21 0 0 +Po 3 50300 40500 50300 40500 420 250 +De 15 1 21 0 0 +Po 3 54850 38000 54850 38000 420 250 +De 15 1 21 0 0 +Po 3 60690 42710 60690 42710 420 250 +De 15 1 21 0 0 +Po 3 65900 32200 65900 32200 420 250 +De 15 1 21 0 0 +Po 3 60940 44350 60940 44350 420 250 +De 15 1 21 0 0 +Po 0 64400 45780 64480 45860 200 -1 +De 15 0 21 0 0 +Po 3 64800 47410 64800 47410 310 160 +De 15 1 21 0 0 +Po 0 65000 39300 65000 39750 200 -1 +De 15 0 21 0 400000 +Po 0 66260 44250 66560 44250 80 -1 +De 15 0 21 0 400000 +Po 0 60150 45290 60150 44990 200 -1 +De 15 0 21 0 400000 +Po 0 60700 42700 60690 42710 200 -1 +De 15 0 21 0 0 +Po 3 69300 35040 69300 35040 420 250 +De 15 1 21 0 0 +Po 0 63125 43675 64275 42525 500 -1 +De 0 0 21 0 C00000 +Po 3 55750 46000 55750 46000 420 250 +De 15 1 21 0 0 +Po 3 65710 35040 65710 35040 420 250 +De 15 1 21 0 0 +Po 0 50290 40510 50300 40500 500 -1 +De 15 0 21 0 0 +Po 3 55750 44990 55750 44990 420 250 +De 15 1 21 0 0 +Po 0 63125 43675 63125 42525 1000 -1 +De 0 0 21 0 C00000 +Po 0 65709 35041 65710 35040 200 -1 +De 15 0 21 0 0 +Po 3 59650 42900 59650 42900 420 250 +De 15 1 21 0 0 +Po 3 52000 38900 52000 38900 420 250 +De 15 1 21 0 0 +Po 0 66550 43750 67000 43750 200 -1 +De 15 0 21 0 400000 +Po 0 52450 38900 52000 38900 200 -1 +De 15 0 21 0 400000 +Po 3 67000 43750 67000 43750 420 250 +De 15 1 21 0 0 +Po 0 47781 40512 48418 40512 80 -1 +De 15 0 21 0 400000 +Po 0 61140 42700 60700 42700 200 -1 +De 15 0 21 0 400000 +Po 0 64900 47310 64800 47410 200 -1 +De 15 0 21 0 0 +Po 3 52450 36650 52450 36650 420 250 +De 15 1 21 0 0 +Po 3 48420 40510 48420 40510 420 250 +De 15 1 21 0 0 +Po 0 52450 37100 52450 36650 200 -1 +De 15 0 21 0 400000 +Po 0 59200 41100 59650 41100 200 -1 +De 15 0 21 0 400000 +Po 0 62850 45660 62850 45960 200 -1 +De 15 0 21 0 400000 +Po 0 66559 47509 66250 47200 200 -1 +De 15 0 21 0 800000 +Po 3 63250 45960 63250 45960 310 160 +De 15 1 21 0 0 +Po 0 64350 40640 64350 40190 200 -1 +De 15 0 21 0 400000 +Po 0 61846 31500 62200 31500 80 -1 +De 15 0 22 0 400000 +Po 0 62200 31500 64700 34000 80 -1 +De 15 0 22 0 800000 +Po 0 64600 46800 65450 46800 500 -1 +De 15 0 23 0 400000 +Po 0 66050 46200 67250 46200 500 -1 +De 15 0 23 0 800000 +Po 0 65450 46800 66050 46200 500 -1 +De 15 0 23 0 0 +Po 0 64690 46890 64600 46800 80 -1 +De 15 0 23 0 800000 +Po 0 65100 46890 64690 46890 80 -1 +De 15 0 23 0 400000 +Po 0 57700 45000 56800 45000 80 -1 +De 15 0 24 0 C00000 +Po 0 56800 46000 57700 46000 80 -1 +De 15 0 25 0 C00000 +Po 0 63605 45575 63605 44915 200 -1 +De 15 0 26 0 0 +Po 0 63605 45740 63605 45575 80 -1 +De 15 0 26 0 400000 +Po 0 63700 44820 63605 44915 80 -1 +De 15 0 26 0 0 +Po 0 63700 44242 63700 44820 80 -1 +De 15 0 26 0 400000 +Po 0 63995 45575 63995 44925 200 -1 +De 15 0 27 0 0 +Po 0 63897 44242 63897 44827 80 -1 +De 15 0 27 0 400000 +Po 0 63897 44827 63995 44925 80 -1 +De 15 0 27 0 0 +Po 0 63995 45740 63995 45575 80 -1 +De 15 0 27 0 400000 +Po 0 64140 46000 64160 46020 80 -1 +De 15 0 28 0 0 +Po 0 64440 46300 64490 46300 200 -1 +De 15 0 28 0 800000 +Po 0 63995 46000 64140 46000 80 -1 +De 15 0 28 0 400000 +Po 0 64440 46300 64160 46020 200 -1 +De 15 0 28 0 0 +Po 0 64000 47400 64000 51937 500 -1 +De 15 0 29 0 C00000 +Po 0 64000 46265 63995 46260 80 -1 +De 15 0 30 0 800000 +Po 0 64000 46800 64000 46550 500 -1 +De 15 0 30 0 400000 +Po 0 64000 46550 64000 46265 80 -1 +De 15 0 30 0 0 +Po 0 64842 43494 65204 43494 80 -1 +De 15 0 31 0 400000 +Po 0 65280 43500 65210 43500 200 -1 +De 15 0 31 0 0 +Po 0 65530 43750 65280 43500 200 -1 +De 15 0 31 0 0 +Po 0 65530 43750 65950 43750 200 -1 +De 15 0 31 0 800000 +Po 0 65204 43494 65210 43500 80 -1 +De 15 0 31 0 0 +Po 0 63897 41958 63897 41639 80 -1 +De 15 0 32 0 400000 +Po 0 61620 39800 61150 39800 80 -1 +De 15 0 32 0 800000 +Po 0 62060 40240 61620 39800 80 -1 +De 15 0 32 0 0 +Po 3 62060 40240 62060 40240 310 160 +De 15 1 32 0 0 +Po 0 63260 40240 62060 40240 80 -1 +De 0 0 32 0 0 +Po 0 63280 40260 63260 40240 80 -1 +De 0 0 32 0 0 +Po 3 63280 40260 63280 40260 310 160 +De 15 1 32 0 0 +Po 0 63280 40430 63280 40260 80 -1 +De 15 0 32 0 0 +Po 0 63838 40988 63280 40430 80 -1 +De 15 0 32 0 0 +Po 0 63838 41580 63838 40988 80 -1 +De 15 0 32 0 0 +Po 0 63897 41639 63838 41580 80 -1 +De 15 0 32 0 0 +Po 0 57950 41100 57950 40700 80 -1 +De 15 0 33 0 400000 +Po 0 58900 39750 59800 39750 80 -1 +De 15 0 33 0 800000 +Po 0 57950 40700 58900 39750 80 -1 +De 15 0 33 0 0 +Po 0 59850 39800 59800 39750 80 -1 +De 15 0 33 0 800000 +Po 0 60550 39800 59850 39800 80 -1 +De 15 0 33 0 400000 +Po 0 64000 38700 65000 38700 80 -1 +De 15 0 34 0 C00000 +Po 0 49000 42260 49760 41500 200 -1 +De 15 0 35 0 0 +Po 0 49000 43000 49000 42260 200 -1 +De 15 0 35 0 400000 +Po 0 49760 41500 50200 41500 200 -1 +De 15 0 35 0 800000 +Po 0 47781 39744 56644 39744 80 -1 +De 15 0 36 0 400000 +Po 0 57650 40750 57650 42300 80 -1 +De 15 0 36 0 800000 +Po 0 56644 39744 57650 40750 80 -1 +De 15 0 36 0 0 +Po 0 57950 41700 59200 41700 80 -1 +De 15 0 37 0 C00000 +Po 0 62558 42313 62293 42313 80 -1 +De 15 0 37 0 400000 +Po 0 59638 42138 59200 41700 80 -1 +De 15 0 37 0 800000 +Po 0 62293 42313 62118 42138 80 -1 +De 15 0 37 0 0 +Po 0 62118 42138 59638 42138 80 -1 +De 15 0 37 0 0 +Po 0 48356 40000 48450 39906 80 -1 +De 15 0 38 0 0 +Po 0 56576 39906 57350 40680 80 -1 +De 15 0 38 0 0 +Po 0 47781 40000 48356 40000 80 -1 +De 15 0 38 0 400000 +Po 0 57350 41100 57350 41700 80 -1 +De 15 0 38 0 C00000 +Po 0 48450 39906 56576 39906 80 -1 +De 15 0 38 0 0 +Po 0 57350 40680 57350 41100 80 -1 +De 15 0 38 0 800000 +Po 0 62850 44940 62850 45240 80 -1 +De 15 0 39 0 800000 +Po 0 62488 45240 62228 45500 80 -1 +De 15 0 39 0 800000 +Po 0 62850 45240 62488 45240 80 -1 +De 15 0 39 0 400000 +Po 0 63306 44242 63306 44484 80 -1 +De 15 0 39 0 400000 +Po 0 63306 44484 62850 44940 80 -1 +De 15 0 39 0 0 +Po 0 65200 44680 64790 44270 200 -1 +De 15 0 40 0 0 +Po 0 64700 44270 64515 44270 80 -1 +De 15 0 40 0 0 +Po 0 64790 44270 64700 44270 200 -1 +De 15 0 40 0 0 +Po 0 65200 45190 65200 44680 200 -1 +De 15 0 40 0 400000 +Po 0 64515 44270 64487 44242 80 -1 +De 15 0 40 0 800000 +Po 0 60772 45368 60772 45500 80 -1 +De 15 0 41 0 800000 +Po 0 63109 44451 62780 44780 80 -1 +De 15 0 41 0 0 +Po 0 63109 44242 63109 44451 80 -1 +De 15 0 41 0 400000 +Po 0 62780 44780 61360 44780 80 -1 +De 15 0 41 0 0 +Po 0 60150 45710 60562 45710 80 -1 +De 15 0 41 0 400000 +Po 0 61360 44780 60772 45368 80 -1 +De 15 0 41 0 0 +Po 0 60562 45710 60772 45500 80 -1 +De 15 0 41 0 800000 +Po 0 64000 39300 64000 41490 80 -1 +De 15 0 42 0 400000 +Po 0 64094 41584 64094 41958 80 -1 +De 15 0 42 0 800000 +Po 0 64000 41490 64094 41584 80 -1 +De 15 0 42 0 0 +Po 0 58250 42300 59200 42300 80 -1 +De 15 0 43 0 C00000 +Po 0 62558 42509 62259 42509 80 -1 +De 15 0 43 0 400000 +Po 0 62050 42300 59200 42300 80 -1 +De 15 0 43 0 800000 +Po 0 62259 42509 62050 42300 80 -1 +De 15 0 43 0 0 +$EndTRACK +$ZONE +$EndZONE +$CZONE_OUTLINE +ZInfo 504D73B4 21 "GND" +ZLayer 0 +ZAux 4 E +ZClearance 200 T +ZMinThickness 100 +ZOptions 0 16 F 120 200 +ZSmoothing 0 0 +ZCorner 70500 48000 0 +ZCorner 70500 21500 0 +ZCorner 46500 21500 0 +ZCorner 46500 48000 1 +$POLYSCORNERS +63771 43100 0 0 +63700 43171 0 0 +63629 43100 0 0 +63700 43029 0 0 +63771 43100 1 0 +70450 47950 0 0 +68911 47950 0 0 +68911 47307 0 0 +68911 45307 0 0 +68902 45046 0 0 +68820 44848 0 0 +68728 44793 0 0 +68657 44864 0 0 +68657 44722 0 0 +68602 44630 0 0 +68516 44598 0 0 +68516 39854 0 0 +68516 37946 0 0 +68494 37835 0 0 +68431 37741 0 0 +67837 37147 0 0 +67743 37084 0 0 +67632 37062 0 0 +67492 37062 0 0 +65470 35040 0 0 +65470 34370 0 0 +65489 34390 0 0 +65658 34460 0 0 +65841 34460 0 0 +66010 34390 0 0 +66140 34261 0 0 +66210 34092 0 0 +66210 33909 0 0 +66140 33740 0 0 +66011 33610 0 0 +65842 33540 0 0 +65659 33540 0 0 +65490 33610 0 0 +65380 33719 0 0 +64145 32485 0 0 +64051 32422 0 0 +63940 32400 0 0 +57830 32400 0 0 +57719 32422 0 0 +57687 32443 0 0 +57637 32476 0 0 +57560 32476 0 0 +57411 32537 0 0 +57298 32651 0 0 +57236 32799 0 0 +57236 32960 0 0 +57297 33109 0 0 +57359 33170 0 0 +57078 33451 0 0 +56891 33451 0 0 +56689 33535 0 0 +56535 33689 0 0 +56500 33773 0 0 +56465 33689 0 0 +56311 33535 0 0 +56109 33451 0 0 +55891 33451 0 0 +55689 33535 0 0 +55535 33689 0 0 +55451 33891 0 0 +55451 34109 0 0 +55535 34311 0 0 +55689 34465 0 0 +55773 34500 0 0 +55689 34535 0 0 +55535 34689 0 0 +55451 34891 0 0 +55451 35109 0 0 +55535 35311 0 0 +55689 35465 0 0 +55891 35549 0 0 +56109 35549 0 0 +56311 35465 0 0 +56465 35311 0 0 +56500 35226 0 0 +56535 35311 0 0 +56689 35465 0 0 +56891 35549 0 0 +57109 35549 0 0 +57311 35465 0 0 +57465 35311 0 0 +57500 35226 0 0 +57535 35311 0 0 +57689 35465 0 0 +57891 35549 0 0 +58109 35549 0 0 +58311 35465 0 0 +58465 35311 0 0 +58500 35226 0 0 +58535 35311 0 0 +58689 35465 0 0 +58891 35549 0 0 +59109 35549 0 0 +59311 35465 0 0 +59465 35311 0 0 +59500 35226 0 0 +59535 35311 0 0 +59689 35465 0 0 +59891 35549 0 0 +60109 35549 0 0 +60311 35465 0 0 +60465 35311 0 0 +60500 35226 0 0 +60535 35311 0 0 +60689 35465 0 0 +60891 35549 0 0 +61109 35549 0 0 +61311 35465 0 0 +61465 35311 0 0 +61500 35226 0 0 +61535 35311 0 0 +61689 35465 0 0 +61891 35549 0 0 +62109 35549 0 0 +62311 35465 0 0 +62465 35311 0 0 +62500 35226 0 0 +62535 35311 0 0 +62689 35465 0 0 +62891 35549 0 0 +63109 35549 0 0 +63311 35465 0 0 +63465 35311 0 0 +63549 35109 0 0 +63549 34891 0 0 +63465 34689 0 0 +63311 34535 0 0 +63154 34470 0 0 +63334 34470 0 0 +63396 34444 0 0 +63444 34396 0 0 +63470 34334 0 0 +63470 34266 0 0 +63470 34092 0 0 +63428 34050 0 0 +63100 34050 0 0 +63050 34050 0 0 +62950 34050 0 0 +62950 33950 0 0 +63050 33950 0 0 +63100 33950 0 0 +63428 33950 0 0 +63470 33908 0 0 +63470 33790 0 0 +63480 33790 0 0 +64080 34390 0 0 +64080 35500 0 0 +64102 35611 0 0 +64165 35705 0 0 +66746 38286 0 0 +66746 38360 0 0 +66807 38509 0 0 +66921 38622 0 0 +67050 38676 0 0 +67097 38789 0 0 +67196 38887 0 0 +67196 39000 0 0 +67257 39149 0 0 +67356 39247 0 0 +67356 39360 0 0 +67417 39509 0 0 +67516 39607 0 0 +67516 39720 0 0 +67577 39869 0 0 +67676 39967 0 0 +67676 40080 0 0 +67737 40229 0 0 +67851 40342 0 0 +67999 40404 0 0 +68160 40404 0 0 +68309 40343 0 0 +68422 40229 0 0 +68484 40081 0 0 +68484 39979 0 0 +68494 39965 0 0 +68516 39854 0 0 +68516 44598 0 0 +68357 44539 0 0 +68096 44548 0 0 +67960 44604 0 0 +67960 43092 0 0 +67960 42909 0 0 +67890 42740 0 0 +67761 42610 0 0 +67592 42540 0 0 +67409 42540 0 0 +67240 42610 0 0 +67199 42650 0 0 +66000 42650 0 0 +65960 42658 0 0 +65960 41692 0 0 +65960 41509 0 0 +65890 41340 0 0 +65761 41210 0 0 +65592 41140 0 0 +65513 41140 0 0 +65464 41107 0 0 +65330 41080 0 0 +64549 41080 0 0 +64421 41026 0 0 +64260 41026 0 0 +64111 41087 0 0 +63998 41201 0 0 +63936 41349 0 0 +63936 41510 0 0 +63997 41659 0 0 +64111 41772 0 0 +64259 41834 0 0 +64420 41834 0 0 +64551 41780 0 0 +65076 41780 0 0 +65110 41860 0 0 +65239 41990 0 0 +65408 42060 0 0 +65591 42060 0 0 +65760 41990 0 0 +65890 41861 0 0 +65960 41692 0 0 +65960 42658 0 0 +65866 42677 0 0 +65752 42753 0 0 +65083 43423 0 0 +65007 43536 0 0 +64980 43670 0 0 +64980 43870 0 0 +64933 43982 0 0 +64717 44198 0 0 +64717 43729 0 0 +64717 43154 0 0 +64717 42579 0 0 +64704 42406 0 0 +64662 42306 0 0 +64592 42278 0 0 +64522 42348 0 0 +64522 42208 0 0 +64494 42138 0 0 +64329 42083 0 0 +64156 42096 0 0 +64056 42138 0 0 +64028 42208 0 0 +64275 42454 0 0 +64522 42208 0 0 +64522 42348 0 0 +64346 42525 0 0 +64592 42772 0 0 +64662 42744 0 0 +64717 42579 0 0 +64717 43154 0 0 +64704 42981 0 0 +64662 42881 0 0 +64592 42853 0 0 +64346 43100 0 0 +64592 43347 0 0 +64662 43319 0 0 +64717 43154 0 0 +64717 43729 0 0 +64704 43556 0 0 +64662 43456 0 0 +64592 43428 0 0 +64522 43498 0 0 +64522 43417 0 0 +64492 43387 0 0 +64522 43358 0 0 +64494 43288 0 0 +64341 43237 0 0 +64310 43206 0 0 +64275 43171 0 0 +64204 43100 0 0 +64275 43029 0 0 +64310 42994 0 0 +64309 42993 0 0 +64346 42957 0 0 +64394 42954 0 0 +64494 42912 0 0 +64522 42842 0 0 +64492 42812 0 0 +64522 42783 0 0 +64494 42713 0 0 +64341 42662 0 0 +64310 42631 0 0 +64275 42596 0 0 +64204 42525 0 0 +64169 42490 0 0 +64132 42453 0 0 +64129 42406 0 0 +64087 42306 0 0 +64017 42278 0 0 +63987 42307 0 0 +63958 42278 0 0 +63947 42282 0 0 +63947 42208 0 0 +63919 42138 0 0 +63754 42083 0 0 +63684 42088 0 0 +63684 40341 0 0 +63684 40180 0 0 +63623 40031 0 0 +63509 39918 0 0 +63361 39856 0 0 +63200 39856 0 0 +63051 39917 0 0 +63018 39950 0 0 +62341 39950 0 0 +62289 39898 0 0 +62141 39836 0 0 +61980 39836 0 0 +61831 39897 0 0 +61718 40011 0 0 +61656 40159 0 0 +61656 40320 0 0 +61717 40469 0 0 +61831 40582 0 0 +61979 40644 0 0 +62140 40644 0 0 +62289 40583 0 0 +62341 40530 0 0 +62978 40530 0 0 +63051 40602 0 0 +63199 40664 0 0 +63360 40664 0 0 +63509 40603 0 0 +63622 40489 0 0 +63684 40341 0 0 +63684 42088 0 0 +63581 42096 0 0 +63481 42138 0 0 +63453 42208 0 0 +63700 42454 0 0 +63947 42208 0 0 +63947 42282 0 0 +63888 42306 0 0 +63837 42458 0 0 +63771 42525 0 0 +63700 42596 0 0 +63629 42525 0 0 +63594 42490 0 0 +63557 42453 0 0 +63554 42406 0 0 +63512 42306 0 0 +63442 42278 0 0 +63412 42307 0 0 +63383 42278 0 0 +63372 42282 0 0 +63372 42208 0 0 +63344 42138 0 0 +63179 42083 0 0 +63006 42096 0 0 +62906 42138 0 0 +62878 42208 0 0 +63125 42454 0 0 +63372 42208 0 0 +63372 42282 0 0 +63313 42306 0 0 +63262 42458 0 0 +63196 42525 0 0 +63125 42596 0 0 +63054 42666 0 0 +63054 42525 0 0 +62808 42278 0 0 +62738 42306 0 0 +62683 42471 0 0 +62696 42644 0 0 +62738 42744 0 0 +62808 42772 0 0 +63054 42525 0 0 +63054 42666 0 0 +63053 42667 0 0 +63006 42671 0 0 +62906 42713 0 0 +62878 42783 0 0 +62907 42812 0 0 +62878 42842 0 0 +62906 42912 0 0 +63058 42962 0 0 +63090 42994 0 0 +63125 43029 0 0 +63196 43100 0 0 +63125 43171 0 0 +63054 43241 0 0 +63054 43100 0 0 +62808 42853 0 0 +62738 42881 0 0 +62683 43046 0 0 +62696 43219 0 0 +62738 43319 0 0 +62808 43347 0 0 +63054 43100 0 0 +63054 43241 0 0 +63053 43242 0 0 +63006 43246 0 0 +62906 43288 0 0 +62878 43358 0 0 +62907 43387 0 0 +62878 43417 0 0 +62906 43487 0 0 +63058 43537 0 0 +63090 43569 0 0 +63125 43604 0 0 +63196 43675 0 0 +63231 43710 0 0 +63267 43746 0 0 +63271 43794 0 0 +63313 43894 0 0 +63383 43922 0 0 +63412 43892 0 0 +63442 43922 0 0 +63512 43894 0 0 +63562 43741 0 0 +63593 43709 0 0 +63594 43710 0 0 +63629 43675 0 0 +63700 43604 0 0 +63771 43675 0 0 +63806 43710 0 0 +63842 43746 0 0 +63846 43794 0 0 +63888 43894 0 0 +63958 43922 0 0 +63987 43892 0 0 +64017 43922 0 0 +64087 43894 0 0 +64137 43741 0 0 +64168 43709 0 0 +64169 43710 0 0 +64204 43675 0 0 +64275 43604 0 0 +64310 43569 0 0 +64309 43568 0 0 +64346 43532 0 0 +64394 43529 0 0 +64494 43487 0 0 +64522 43417 0 0 +64522 43498 0 0 +64346 43675 0 0 +64592 43922 0 0 +64662 43894 0 0 +64717 43729 0 0 +64717 44198 0 0 +64699 44216 0 0 +64580 44216 0 0 +64522 44239 0 0 +64522 43992 0 0 +64275 43746 0 0 +64028 43992 0 0 +64056 44062 0 0 +64221 44117 0 0 +64394 44104 0 0 +64494 44062 0 0 +64522 43992 0 0 +64522 44239 0 0 +64431 44277 0 0 +64318 44391 0 0 +64264 44518 0 0 +64171 44557 0 0 +64058 44671 0 0 +63996 44819 0 0 +63996 44980 0 0 +64057 45129 0 0 +64171 45242 0 0 +64319 45304 0 0 +64480 45304 0 0 +64629 45243 0 0 +64742 45129 0 0 +64795 45001 0 0 +64889 44963 0 0 +64905 44946 0 0 +64924 44943 0 0 +65037 44867 0 0 +65428 44476 0 0 +65559 44423 0 0 +65672 44309 0 0 +65734 44161 0 0 +65734 44000 0 0 +65680 43868 0 0 +65680 43814 0 0 +66144 43350 0 0 +67199 43350 0 0 +67239 43390 0 0 +67408 43460 0 0 +67591 43460 0 0 +67760 43390 0 0 +67890 43261 0 0 +67960 43092 0 0 +67960 44604 0 0 +67898 44630 0 0 +67843 44722 0 0 +68250 45129 0 0 +68657 44722 0 0 +68657 44864 0 0 +68321 45200 0 0 +68728 45607 0 0 +68820 45552 0 0 +68911 45307 0 0 +68911 47307 0 0 +68902 47046 0 0 +68820 46848 0 0 +68728 46793 0 0 +68657 46864 0 0 +68657 46722 0 0 +68602 46630 0 0 +68357 46539 0 0 +68096 46548 0 0 +67999 46588 0 0 +67898 46630 0 0 +67869 46678 0 0 +67849 46658 0 0 +67884 46625 0 0 +67999 46350 0 0 +67999 46052 0 0 +67885 45777 0 0 +67849 45741 0 0 +67869 45721 0 0 +67898 45770 0 0 +68143 45861 0 0 +68404 45852 0 0 +68602 45770 0 0 +68657 45678 0 0 +68285 45306 0 0 +68250 45271 0 0 +68179 45200 0 0 +68144 45165 0 0 +67772 44793 0 0 +67680 44848 0 0 +67589 45093 0 0 +67598 45354 0 0 +67680 45552 0 0 +67728 45580 0 0 +67708 45600 0 0 +67675 45566 0 0 +67400 45451 0 0 +67102 45451 0 0 +66911 45530 0 0 +66827 45565 0 0 +66791 45600 0 0 +66771 45580 0 0 +66820 45552 0 0 +66911 45307 0 0 +66902 45046 0 0 +66820 44848 0 0 +66728 44793 0 0 +66657 44864 0 0 +66657 44722 0 0 +66602 44630 0 0 +66357 44539 0 0 +66096 44548 0 0 +65898 44630 0 0 +65843 44722 0 0 +66250 45129 0 0 +66657 44722 0 0 +66657 44864 0 0 +66356 45165 0 0 +66321 45200 0 0 +66250 45271 0 0 +66215 45306 0 0 +66179 45342 0 0 +66179 45200 0 0 +65772 44793 0 0 +65680 44848 0 0 +65589 45093 0 0 +65598 45354 0 0 +65680 45552 0 0 +65772 45607 0 0 +66179 45200 0 0 +66179 45342 0 0 +65843 45678 0 0 +65898 45770 0 0 +66143 45861 0 0 +66404 45852 0 0 +66602 45770 0 0 +66630 45721 0 0 +66650 45741 0 0 +66616 45775 0 0 +66501 46050 0 0 +66501 46348 0 0 +66615 46623 0 0 +66650 46658 0 0 +66630 46678 0 0 +66602 46630 0 0 +66357 46539 0 0 +66096 46548 0 0 +65898 46630 0 0 +65843 46722 0 0 +66215 47094 0 0 +66250 47129 0 0 +66321 47200 0 0 +66356 47235 0 0 +66728 47607 0 0 +66820 47552 0 0 +66911 47307 0 0 +66902 47046 0 0 +66820 46848 0 0 +66771 46819 0 0 +66791 46799 0 0 +66825 46834 0 0 +67100 46949 0 0 +67398 46949 0 0 +67673 46835 0 0 +67708 46799 0 0 +67728 46819 0 0 +67680 46848 0 0 +67589 47093 0 0 +67598 47354 0 0 +67680 47552 0 0 +67772 47607 0 0 +68144 47235 0 0 +68179 47200 0 0 +68250 47129 0 0 +68285 47094 0 0 +68657 46722 0 0 +68657 46864 0 0 +68321 47200 0 0 +68728 47607 0 0 +68820 47552 0 0 +68911 47307 0 0 +68911 47950 0 0 +68657 47950 0 0 +68657 47678 0 0 +68250 47271 0 0 +68179 47342 0 0 +67843 47678 0 0 +67898 47770 0 0 +68143 47861 0 0 +68404 47852 0 0 +68602 47770 0 0 +68657 47678 0 0 +68657 47950 0 0 +66911 47950 0 0 +66657 47950 0 0 +66657 47678 0 0 +66250 47271 0 0 +66179 47342 0 0 +66179 47200 0 0 +65772 46793 0 0 +65680 46848 0 0 +65589 47093 0 0 +65598 47354 0 0 +65680 47552 0 0 +65772 47607 0 0 +66179 47200 0 0 +66179 47342 0 0 +65843 47678 0 0 +65898 47770 0 0 +66143 47861 0 0 +66404 47852 0 0 +66602 47770 0 0 +66657 47678 0 0 +66657 47950 0 0 +63947 47950 0 0 +63947 43992 0 0 +63700 43746 0 0 +63453 43992 0 0 +63481 44062 0 0 +63646 44117 0 0 +63819 44104 0 0 +63919 44062 0 0 +63947 43992 0 0 +63947 47950 0 0 +63654 47950 0 0 +63654 45021 0 0 +63654 44860 0 0 +63593 44711 0 0 +63479 44598 0 0 +63372 44553 0 0 +63372 43992 0 0 +63125 43746 0 0 +63054 43816 0 0 +63054 43675 0 0 +62808 43428 0 0 +62738 43456 0 0 +62683 43621 0 0 +62696 43794 0 0 +62738 43894 0 0 +62808 43922 0 0 +63054 43675 0 0 +63054 43816 0 0 +62878 43992 0 0 +62906 44062 0 0 +63071 44117 0 0 +63244 44104 0 0 +63344 44062 0 0 +63372 43992 0 0 +63372 44553 0 0 +63331 44536 0 0 +63170 44536 0 0 +63038 44590 0 0 +63014 44590 0 0 +62676 44252 0 0 +62623 44121 0 0 +62509 44008 0 0 +62361 43946 0 0 +62324 43946 0 0 +62324 42781 0 0 +62324 42620 0 0 +62263 42471 0 0 +62149 42358 0 0 +62017 42302 0 0 +61807 42093 0 0 +61840 42061 0 0 +61910 41892 0 0 +61910 41709 0 0 +61840 41540 0 0 +61711 41410 0 0 +61542 41340 0 0 +61359 41340 0 0 +61190 41410 0 0 +61060 41539 0 0 +60990 41708 0 0 +60990 41891 0 0 +61060 42060 0 0 +61100 42100 0 0 +61100 42230 0 0 +61127 42364 0 0 +61203 42477 0 0 +61523 42798 0 0 +61577 42929 0 0 +61691 43042 0 0 +61839 43104 0 0 +62000 43104 0 0 +62149 43043 0 0 +62262 42929 0 0 +62324 42781 0 0 +62324 43946 0 0 +62200 43946 0 0 +62068 44000 0 0 +61690 44000 0 0 +61556 44027 0 0 +61442 44103 0 0 +61115 44430 0 0 +60684 44430 0 0 +60660 44406 0 0 +60660 40392 0 0 +60660 40209 0 0 +60590 40040 0 0 +60461 39910 0 0 +60292 39840 0 0 +60234 39840 0 0 +60150 39755 0 0 +60150 38850 0 0 +60190 38811 0 0 +60260 38642 0 0 +60260 38459 0 0 +60190 38290 0 0 +60061 38160 0 0 +59892 38090 0 0 +59709 38090 0 0 +59540 38160 0 0 +59410 38289 0 0 +59340 38458 0 0 +59340 38641 0 0 +59410 38810 0 0 +59450 38850 0 0 +59450 39900 0 0 +59477 40034 0 0 +59553 40147 0 0 +59740 40334 0 0 +59740 40391 0 0 +59810 40560 0 0 +59939 40690 0 0 +60108 40760 0 0 +60291 40760 0 0 +60460 40690 0 0 +60590 40561 0 0 +60660 40392 0 0 +60660 44406 0 0 +60597 44343 0 0 +60484 44267 0 0 +60350 44240 0 0 +60030 44240 0 0 +59991 44200 0 0 +59822 44130 0 0 +59639 44130 0 0 +59470 44200 0 0 +59340 44329 0 0 +59270 44498 0 0 +59270 44681 0 0 +59340 44850 0 0 +59469 44980 0 0 +59638 45050 0 0 +59821 45050 0 0 +59990 44980 0 0 +60030 44940 0 0 +60205 44940 0 0 +60292 45027 0 0 +60293 45027 0 0 +60406 45103 0 0 +60540 45130 0 0 +61260 45130 0 0 +61260 45129 0 0 +61394 45103 0 0 +61507 45027 0 0 +61834 44700 0 0 +62070 44700 0 0 +62183 44747 0 0 +62622 45187 0 0 +62623 45187 0 0 +62736 45263 0 0 +62870 45290 0 0 +63040 45290 0 0 +63169 45344 0 0 +63330 45344 0 0 +63479 45283 0 0 +63592 45169 0 0 +63654 45021 0 0 +63654 47950 0 0 +59214 47950 0 0 +59214 44801 0 0 +59214 44640 0 0 +59153 44491 0 0 +59039 44378 0 0 +58891 44316 0 0 +58876 44316 0 0 +58592 44032 0 0 +58592 43402 0 0 +58570 43291 0 0 +58507 43197 0 0 +56624 41314 0 0 +56624 39309 0 0 +56689 39283 0 0 +56802 39169 0 0 +56864 39021 0 0 +56864 38961 0 0 +56909 38943 0 0 +57022 38829 0 0 +57084 38681 0 0 +57084 38520 0 0 +57023 38371 0 0 +56909 38258 0 0 +56844 38230 0 0 +56844 38200 0 0 +56783 38051 0 0 +56669 37938 0 0 +56521 37876 0 0 +56360 37876 0 0 +56211 37937 0 0 +56098 38051 0 0 +56036 38199 0 0 +56036 38214 0 0 +55949 38128 0 0 +55801 38066 0 0 +55640 38066 0 0 +55491 38127 0 0 +55378 38241 0 0 +55316 38389 0 0 +55316 38550 0 0 +55377 38699 0 0 +55491 38812 0 0 +55558 38840 0 0 +55558 39942 0 0 +55205 40295 0 0 +55142 40389 0 0 +55120 40500 0 0 +55120 40740 0 0 +55142 40851 0 0 +55205 40945 0 0 +57850 43590 0 0 +57850 44410 0 0 +57872 44521 0 0 +57896 44556 0 0 +57896 44650 0 0 +57957 44799 0 0 +58071 44912 0 0 +58219 44974 0 0 +58380 44974 0 0 +58463 44939 0 0 +58467 44949 0 0 +58581 45062 0 0 +58729 45124 0 0 +58890 45124 0 0 +59039 45063 0 0 +59152 44949 0 0 +59214 44801 0 0 +59214 47950 0 0 +55549 47950 0 0 +55549 44109 0 0 +55549 43891 0 0 +55465 43689 0 0 +55311 43535 0 0 +55226 43500 0 0 +55311 43465 0 0 +55465 43311 0 0 +55549 43109 0 0 +55549 42891 0 0 +55465 42689 0 0 +55311 42535 0 0 +55109 42451 0 0 +54891 42451 0 0 +54689 42535 0 0 +54535 42689 0 0 +54500 42773 0 0 +54465 42689 0 0 +54311 42535 0 0 +54109 42451 0 0 +53891 42451 0 0 +53689 42535 0 0 +53560 42664 0 0 +53560 40592 0 0 +53560 40409 0 0 +53490 40240 0 0 +53450 40199 0 0 +53450 38586 0 0 +53510 38442 0 0 +53510 38259 0 0 +53440 38090 0 0 +53311 37960 0 0 +53142 37890 0 0 +52959 37890 0 0 +52790 37960 0 0 +52660 38089 0 0 +52590 38258 0 0 +52590 38441 0 0 +52660 38610 0 0 +52750 38700 0 0 +52750 40199 0 0 +52710 40239 0 0 +52640 40408 0 0 +52640 40591 0 0 +52710 40760 0 0 +52839 40890 0 0 +53008 40960 0 0 +53191 40960 0 0 +53360 40890 0 0 +53490 40761 0 0 +53560 40592 0 0 +53560 42664 0 0 +53535 42689 0 0 +53500 42773 0 0 +53465 42689 0 0 +53311 42535 0 0 +53109 42451 0 0 +52891 42451 0 0 +52689 42535 0 0 +52535 42689 0 0 +52500 42773 0 0 +52465 42689 0 0 +52311 42535 0 0 +52109 42451 0 0 +51891 42451 0 0 +51710 42526 0 0 +51710 41592 0 0 +51710 41409 0 0 +51640 41240 0 0 +51549 41148 0 0 +51549 34109 0 0 +51549 33891 0 0 +51465 33689 0 0 +51311 33535 0 0 +51109 33451 0 0 +50891 33451 0 0 +50689 33535 0 0 +50535 33689 0 0 +50500 33773 0 0 +50465 33689 0 0 +50311 33535 0 0 +50109 33451 0 0 +49891 33451 0 0 +49689 33535 0 0 +49535 33689 0 0 +49500 33773 0 0 +49465 33689 0 0 +49311 33535 0 0 +49109 33451 0 0 +48891 33451 0 0 +48689 33535 0 0 +48535 33689 0 0 +48451 33891 0 0 +48451 34109 0 0 +48535 34311 0 0 +48689 34465 0 0 +48845 34530 0 0 +48666 34530 0 0 +48604 34556 0 0 +48556 34604 0 0 +48530 34666 0 0 +48530 34734 0 0 +48530 34908 0 0 +48572 34950 0 0 +48900 34950 0 0 +48950 34950 0 0 +49050 34950 0 0 +49100 34950 0 0 +49428 34950 0 0 +49470 34908 0 0 +49470 34734 0 0 +49470 34666 0 0 +49444 34604 0 0 +49396 34556 0 0 +49334 34530 0 0 +49154 34530 0 0 +49311 34465 0 0 +49465 34311 0 0 +49500 34226 0 0 +49535 34311 0 0 +49689 34465 0 0 +49885 34546 0 0 +49878 34547 0 0 +49766 34593 0 0 +49735 34664 0 0 +50000 34929 0 0 +50265 34664 0 0 +50234 34593 0 0 +50102 34549 0 0 +50109 34549 0 0 +50311 34465 0 0 +50465 34311 0 0 +50500 34226 0 0 +50535 34311 0 0 +50689 34465 0 0 +50885 34546 0 0 +50878 34547 0 0 +50766 34593 0 0 +50735 34664 0 0 +51000 34929 0 0 +51265 34664 0 0 +51234 34593 0 0 +51102 34549 0 0 +51109 34549 0 0 +51311 34465 0 0 +51465 34311 0 0 +51549 34109 0 0 +51549 41148 0 0 +51511 41110 0 0 +51465 41090 0 0 +51465 35061 0 0 +51453 34878 0 0 +51407 34766 0 0 +51336 34735 0 0 +51071 35000 0 0 +51336 35265 0 0 +51407 35234 0 0 +51465 35061 0 0 +51465 41090 0 0 +51342 41040 0 0 +51265 41040 0 0 +51265 35336 0 0 +51000 35071 0 0 +50929 35142 0 0 +50929 35000 0 0 +50664 34735 0 0 +50593 34766 0 0 +50535 34939 0 0 +50547 35122 0 0 +50593 35234 0 0 +50664 35265 0 0 +50929 35000 0 0 +50929 35142 0 0 +50735 35336 0 0 +50766 35407 0 0 +50939 35465 0 0 +51122 35453 0 0 +51234 35407 0 0 +51265 35336 0 0 +51265 41040 0 0 +51159 41040 0 0 +50990 41110 0 0 +50860 41239 0 0 +50790 41408 0 0 +50790 41591 0 0 +50860 41760 0 0 +50989 41890 0 0 +51158 41960 0 0 +51341 41960 0 0 +51510 41890 0 0 +51640 41761 0 0 +51710 41592 0 0 +51710 42526 0 0 +51689 42535 0 0 +51535 42689 0 0 +51500 42773 0 0 +51465 42689 0 0 +51311 42535 0 0 +51109 42451 0 0 +50891 42451 0 0 +50689 42535 0 0 +50667 42557 0 0 +50465 42355 0 0 +50465 35061 0 0 +50453 34878 0 0 +50407 34766 0 0 +50336 34735 0 0 +50071 35000 0 0 +50336 35265 0 0 +50407 35234 0 0 +50465 35061 0 0 +50465 42355 0 0 +50265 42155 0 0 +50265 35336 0 0 +50000 35071 0 0 +49929 35142 0 0 +49929 35000 0 0 +49664 34735 0 0 +49593 34766 0 0 +49535 34939 0 0 +49547 35122 0 0 +49593 35234 0 0 +49664 35265 0 0 +49929 35000 0 0 +49929 35142 0 0 +49735 35336 0 0 +49766 35407 0 0 +49939 35465 0 0 +50122 35453 0 0 +50234 35407 0 0 +50265 35336 0 0 +50265 42155 0 0 +49952 41842 0 0 +49952 38702 0 0 +49951 38701 0 0 +49930 38591 0 0 +49929 38590 0 0 +49867 38497 0 0 +49866 38496 0 0 +49470 38100 0 0 +49470 35334 0 0 +49470 35266 0 0 +49470 35092 0 0 +49428 35050 0 0 +49050 35050 0 0 +49050 35428 0 0 +49092 35470 0 0 +49334 35470 0 0 +49396 35444 0 0 +49444 35396 0 0 +49470 35334 0 0 +49470 38100 0 0 +48950 37580 0 0 +48950 35428 0 0 +48950 35050 0 0 +48572 35050 0 0 +48530 35092 0 0 +48530 35266 0 0 +48530 35334 0 0 +48556 35396 0 0 +48604 35444 0 0 +48666 35470 0 0 +48908 35470 0 0 +48950 35428 0 0 +48950 37580 0 0 +48832 37462 0 0 +48832 37345 0 0 +48884 37221 0 0 +48884 37060 0 0 +48823 36911 0 0 +48709 36798 0 0 +48561 36736 0 0 +48400 36736 0 0 +48251 36797 0 0 +48239 36808 0 0 +48161 36776 0 0 +48000 36776 0 0 +47851 36837 0 0 +47738 36951 0 0 +47676 37099 0 0 +47676 37260 0 0 +47725 37380 0 0 +47676 37499 0 0 +47676 37660 0 0 +47737 37809 0 0 +47851 37922 0 0 +47999 37984 0 0 +48074 37984 0 0 +49048 38958 0 0 +49048 41542 0 0 +48374 42216 0 0 +48374 41086 0 0 +48374 40873 0 0 +48374 39128 0 0 +48374 38915 0 0 +48293 38718 0 0 +48142 38568 0 0 +47946 38486 0 0 +47733 38486 0 0 +47536 38567 0 0 +47386 38718 0 0 +47304 38914 0 0 +47304 39127 0 0 +47385 39324 0 0 +47536 39474 0 0 +47732 39556 0 0 +47945 39556 0 0 +48142 39475 0 0 +48292 39324 0 0 +48374 39128 0 0 +48374 40873 0 0 +48293 40676 0 0 +48142 40526 0 0 +47946 40444 0 0 +47733 40444 0 0 +47536 40525 0 0 +47386 40676 0 0 +47304 40872 0 0 +47304 41085 0 0 +47385 41282 0 0 +47536 41432 0 0 +47732 41514 0 0 +47945 41514 0 0 +48142 41433 0 0 +48292 41282 0 0 +48374 41086 0 0 +48374 42216 0 0 +48295 42295 0 0 +48232 42389 0 0 +48210 42500 0 0 +48210 44400 0 0 +48232 44511 0 0 +48295 44605 0 0 +48595 44905 0 0 +48689 44968 0 0 +48800 44990 0 0 +51300 44990 0 0 +51411 44968 0 0 +51505 44905 0 0 +51869 44540 0 0 +51891 44549 0 0 +52109 44549 0 0 +52311 44465 0 0 +52465 44311 0 0 +52546 44114 0 0 +52547 44122 0 0 +52593 44234 0 0 +52664 44265 0 0 +52929 44000 0 0 +52664 43735 0 0 +52593 43766 0 0 +52549 43897 0 0 +52549 43891 0 0 +52465 43689 0 0 +52311 43535 0 0 +52226 43500 0 0 +52311 43465 0 0 +52465 43311 0 0 +52500 43226 0 0 +52535 43311 0 0 +52689 43465 0 0 +52885 43546 0 0 +52878 43547 0 0 +52766 43593 0 0 +52735 43664 0 0 +53000 43929 0 0 +53265 43664 0 0 +53234 43593 0 0 +53102 43549 0 0 +53109 43549 0 0 +53311 43465 0 0 +53465 43311 0 0 +53500 43226 0 0 +53535 43311 0 0 +53689 43465 0 0 +53773 43500 0 0 +53689 43535 0 0 +53535 43689 0 0 +53453 43885 0 0 +53453 43878 0 0 +53407 43766 0 0 +53336 43735 0 0 +53071 44000 0 0 +53336 44265 0 0 +53407 44234 0 0 +53451 44102 0 0 +53451 44109 0 0 +53535 44311 0 0 +53689 44465 0 0 +53891 44549 0 0 +54109 44549 0 0 +54311 44465 0 0 +54465 44311 0 0 +54500 44226 0 0 +54535 44311 0 0 +54689 44465 0 0 +54891 44549 0 0 +55109 44549 0 0 +55311 44465 0 0 +55465 44311 0 0 +55549 44109 0 0 +55549 47950 0 0 +53265 47950 0 0 +53265 44336 0 0 +53000 44071 0 0 +52735 44336 0 0 +52766 44407 0 0 +52939 44465 0 0 +53122 44453 0 0 +53234 44407 0 0 +53265 44336 0 0 +53265 47950 0 0 +46550 47950 0 0 +46550 41645 0 0 +46556 41648 0 0 +46781 41648 0 0 +46989 41562 0 0 +47148 41403 0 0 +47234 41196 0 0 +47234 40971 0 0 +47148 40763 0 0 +46989 40604 0 0 +46782 40518 0 0 +46557 40518 0 0 +46550 40520 0 0 +46550 39479 0 0 +46556 39482 0 0 +46781 39482 0 0 +46989 39396 0 0 +47148 39237 0 0 +47234 39030 0 0 +47234 38805 0 0 +47148 38597 0 0 +46989 38438 0 0 +46782 38352 0 0 +46557 38352 0 0 +46550 38354 0 0 +46550 21550 0 0 +70450 21550 0 0 +70450 47950 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 504D73CA 20 "3V3" +ZLayer 15 +ZAux 6 E +ZClearance 200 T +ZMinThickness 100 +ZOptions 0 16 F 120 200 +ZSmoothing 0 0 +ZCorner 60100 48000 0 +ZCorner 60100 44800 0 +ZCorner 70500 44800 0 +ZCorner 70500 21500 0 +ZCorner 46500 21500 0 +ZCorner 46500 48000 1 +$POLYSCORNERS +60703 44750 0 0 +60481 44750 0 0 +60379 44648 0 0 +60231 44586 0 0 +60070 44586 0 0 +59921 44647 0 0 +59808 44761 0 0 +59746 44909 0 0 +59746 45070 0 0 +59791 45179 0 0 +59791 45239 0 0 +59791 45439 0 0 +59816 45499 0 0 +59791 45560 0 0 +59791 45659 0 0 +59791 45859 0 0 +59829 45951 0 0 +59899 46021 0 0 +59990 46059 0 0 +60050 46059 0 0 +60050 47950 0 0 +52340 47950 0 0 +52340 46004 0 0 +52340 45892 0 0 +52298 45850 0 0 +52050 45850 0 0 +52050 46098 0 0 +52092 46140 0 0 +52136 46140 0 0 +52204 46140 0 0 +52266 46114 0 0 +52314 46066 0 0 +52340 46004 0 0 +52340 47950 0 0 +51950 47950 0 0 +51950 46098 0 0 +51950 45850 0 0 +51702 45850 0 0 +51660 45892 0 0 +51660 46004 0 0 +51686 46066 0 0 +51734 46114 0 0 +51796 46140 0 0 +51864 46140 0 0 +51908 46140 0 0 +51950 46098 0 0 +51950 47950 0 0 +51340 47950 0 0 +51340 46004 0 0 +51340 45892 0 0 +51298 45850 0 0 +51050 45850 0 0 +51050 46098 0 0 +51092 46140 0 0 +51136 46140 0 0 +51204 46140 0 0 +51266 46114 0 0 +51314 46066 0 0 +51340 46004 0 0 +51340 47950 0 0 +50950 47950 0 0 +50950 46098 0 0 +50950 45850 0 0 +50702 45850 0 0 +50660 45892 0 0 +50660 46004 0 0 +50686 46066 0 0 +50734 46114 0 0 +50796 46140 0 0 +50864 46140 0 0 +50908 46140 0 0 +50950 46098 0 0 +50950 47950 0 0 +46550 47950 0 0 +46550 41647 0 0 +46553 41647 0 0 +46556 41648 0 0 +46781 41648 0 0 +46783 41647 0 0 +46979 41647 0 0 +46991 41676 0 0 +47061 41746 0 0 +47152 41784 0 0 +47251 41784 0 0 +47501 41784 0 0 +47503 41783 0 0 +47505 41784 0 0 +47604 41784 0 0 +48174 41784 0 0 +48266 41746 0 0 +48336 41676 0 0 +48374 41585 0 0 +48374 41486 0 0 +48374 41086 0 0 +48374 41000 0 0 +48420 41010 0 0 +50285 41010 0 0 +50290 41011 0 0 +50290 41010 0 0 +50481 40972 0 0 +50482 40972 0 0 +50644 40864 0 0 +50653 40854 0 0 +50762 40692 0 0 +50801 40500 0 0 +50762 40308 0 0 +50686 40196 0 0 +56456 40196 0 0 +57009 40749 0 0 +56969 40789 0 0 +56931 40880 0 0 +56931 40979 0 0 +56931 41319 0 0 +56964 41399 0 0 +56931 41480 0 0 +56931 41579 0 0 +56931 41919 0 0 +56969 42011 0 0 +57039 42081 0 0 +57130 42119 0 0 +57229 42119 0 0 +57231 42119 0 0 +57231 42179 0 0 +57231 42519 0 0 +57269 42611 0 0 +57339 42681 0 0 +57430 42719 0 0 +57529 42719 0 0 +57869 42719 0 0 +57949 42685 0 0 +58030 42719 0 0 +58129 42719 0 0 +58469 42719 0 0 +58561 42681 0 0 +58631 42611 0 0 +58639 42590 0 0 +58810 42590 0 0 +58814 42599 0 0 +58781 42680 0 0 +58781 42779 0 0 +58781 43006 0 0 +56958 43006 0 0 +56131 42179 0 0 +56131 41303 0 0 +56229 41263 0 0 +56342 41149 0 0 +56404 41001 0 0 +56404 40840 0 0 +56343 40691 0 0 +56229 40578 0 0 +56096 40522 0 0 +56043 40391 0 0 +55929 40278 0 0 +55781 40216 0 0 +55620 40216 0 0 +55471 40277 0 0 +55358 40391 0 0 +55296 40539 0 0 +55296 40700 0 0 +55357 40849 0 0 +55380 40871 0 0 +55380 42358 0 0 +55402 42469 0 0 +55465 42563 0 0 +56111 43210 0 0 +55507 43210 0 0 +55549 43109 0 0 +55549 42891 0 0 +55465 42689 0 0 +55311 42535 0 0 +55109 42451 0 0 +54891 42451 0 0 +54689 42535 0 0 +54535 42689 0 0 +54500 42773 0 0 +54465 42689 0 0 +54311 42535 0 0 +54109 42451 0 0 +53891 42451 0 0 +53689 42535 0 0 +53535 42689 0 0 +53500 42773 0 0 +53465 42689 0 0 +53311 42535 0 0 +53109 42451 0 0 +52891 42451 0 0 +52689 42535 0 0 +52535 42689 0 0 +52500 42773 0 0 +52465 42689 0 0 +52311 42535 0 0 +52109 42451 0 0 +51891 42451 0 0 +51689 42535 0 0 +51535 42689 0 0 +51500 42773 0 0 +51465 42689 0 0 +51311 42535 0 0 +51109 42451 0 0 +50891 42451 0 0 +50689 42535 0 0 +50535 42689 0 0 +50500 42773 0 0 +50465 42689 0 0 +50311 42535 0 0 +50109 42451 0 0 +49891 42451 0 0 +49689 42535 0 0 +49535 42689 0 0 +49500 42773 0 0 +49465 42689 0 0 +49350 42574 0 0 +49350 42404 0 0 +49881 41873 0 0 +49889 41881 0 0 +49980 41919 0 0 +50079 41919 0 0 +50419 41919 0 0 +50511 41881 0 0 +50565 41827 0 0 +50596 41840 0 0 +50708 41840 0 0 +50750 41798 0 0 +50750 41773 0 0 +50781 41761 0 0 +50850 41692 0 0 +50850 41798 0 0 +50892 41840 0 0 +51004 41840 0 0 +51066 41814 0 0 +51114 41766 0 0 +51140 41704 0 0 +51140 41636 0 0 +51140 41592 0 0 +51098 41550 0 0 +50889 41550 0 0 +50889 41501 0 0 +50889 41450 0 0 +51098 41450 0 0 +51140 41408 0 0 +51140 41364 0 0 +51140 41296 0 0 +51114 41234 0 0 +51066 41186 0 0 +51004 41160 0 0 +50892 41160 0 0 +50850 41202 0 0 +50850 41308 0 0 +50781 41239 0 0 +50750 41226 0 0 +50750 41202 0 0 +50708 41160 0 0 +50596 41160 0 0 +50565 41173 0 0 +50511 41119 0 0 +50420 41081 0 0 +50321 41081 0 0 +49981 41081 0 0 +49889 41119 0 0 +49858 41150 0 0 +49760 41150 0 0 +49626 41177 0 0 +49512 41253 0 0 +48753 42013 0 0 +48677 42126 0 0 +48650 42260 0 0 +48650 42574 0 0 +48535 42689 0 0 +48451 42891 0 0 +48451 43109 0 0 +48535 43311 0 0 +48675 43451 0 0 +48651 43451 0 0 +48559 43489 0 0 +48489 43559 0 0 +48451 43650 0 0 +48451 43749 0 0 +48451 44349 0 0 +48489 44441 0 0 +48559 44511 0 0 +48650 44549 0 0 +48749 44549 0 0 +49349 44549 0 0 +49441 44511 0 0 +49511 44441 0 0 +49549 44350 0 0 +49549 44325 0 0 +49689 44465 0 0 +49891 44549 0 0 +50109 44549 0 0 +50311 44465 0 0 +50465 44311 0 0 +50500 44226 0 0 +50535 44311 0 0 +50689 44465 0 0 +50710 44473 0 0 +50710 44810 0 0 +50689 44819 0 0 +50619 44889 0 0 +50581 44980 0 0 +50581 45079 0 0 +50581 45419 0 0 +50619 45511 0 0 +50673 45565 0 0 +50660 45596 0 0 +50660 45708 0 0 +50702 45750 0 0 +50900 45750 0 0 +50950 45750 0 0 +51050 45750 0 0 +51100 45750 0 0 +51298 45750 0 0 +51340 45708 0 0 +51340 45596 0 0 +51327 45565 0 0 +51381 45511 0 0 +51419 45420 0 0 +51419 45321 0 0 +51419 44981 0 0 +51381 44889 0 0 +51311 44819 0 0 +51290 44810 0 0 +51290 44473 0 0 +51311 44465 0 0 +51465 44311 0 0 +51500 44226 0 0 +51535 44311 0 0 +51689 44465 0 0 +51710 44473 0 0 +51710 44810 0 0 +51689 44819 0 0 +51619 44889 0 0 +51581 44980 0 0 +51581 45079 0 0 +51581 45419 0 0 +51619 45511 0 0 +51673 45565 0 0 +51660 45596 0 0 +51660 45708 0 0 +51702 45750 0 0 +51900 45750 0 0 +51950 45750 0 0 +52050 45750 0 0 +52100 45750 0 0 +52298 45750 0 0 +52340 45708 0 0 +52340 45596 0 0 +52327 45565 0 0 +52381 45511 0 0 +52389 45490 0 0 +54800 45490 0 0 +54911 45468 0 0 +55005 45405 0 0 +55301 45108 0 0 +55360 45250 0 0 +55489 45380 0 0 +55658 45450 0 0 +55841 45450 0 0 +55948 45405 0 0 +55980 45419 0 0 +56079 45419 0 0 +56419 45419 0 0 +56499 45385 0 0 +56580 45419 0 0 +56679 45419 0 0 +57019 45419 0 0 +57111 45381 0 0 +57181 45311 0 0 +57189 45290 0 0 +57310 45290 0 0 +57319 45311 0 0 +57389 45381 0 0 +57480 45419 0 0 +57579 45419 0 0 +57919 45419 0 0 +57999 45385 0 0 +58080 45419 0 0 +58179 45419 0 0 +58471 45419 0 0 +58309 45581 0 0 +58081 45581 0 0 +58000 45614 0 0 +57920 45581 0 0 +57821 45581 0 0 +57481 45581 0 0 +57389 45619 0 0 +57319 45689 0 0 +57310 45710 0 0 +57189 45710 0 0 +57181 45689 0 0 +57111 45619 0 0 +57020 45581 0 0 +56921 45581 0 0 +56581 45581 0 0 +56500 45614 0 0 +56420 45581 0 0 +56321 45581 0 0 +55981 45581 0 0 +55960 45589 0 0 +55842 45540 0 0 +55659 45540 0 0 +55490 45610 0 0 +55360 45739 0 0 +55290 45908 0 0 +55290 46091 0 0 +55360 46260 0 0 +55489 46390 0 0 +55658 46460 0 0 +55841 46460 0 0 +55960 46410 0 0 +55980 46419 0 0 +56079 46419 0 0 +56419 46419 0 0 +56499 46385 0 0 +56580 46419 0 0 +56679 46419 0 0 +57019 46419 0 0 +57111 46381 0 0 +57181 46311 0 0 +57189 46290 0 0 +57310 46290 0 0 +57319 46311 0 0 +57389 46381 0 0 +57480 46419 0 0 +57579 46419 0 0 +57919 46419 0 0 +57999 46385 0 0 +58080 46419 0 0 +58179 46419 0 0 +58519 46419 0 0 +58611 46381 0 0 +58681 46311 0 0 +58719 46220 0 0 +58719 46121 0 0 +58719 45991 0 0 +59015 45695 0 0 +59078 45601 0 0 +59100 45490 0 0 +59100 45001 0 0 +59152 44949 0 0 +59214 44801 0 0 +59214 44726 0 0 +59420 44521 0 0 +59420 44520 0 0 +59421 44518 0 0 +59544 44396 0 0 +60480 44396 0 0 +60480 44441 0 0 +60550 44610 0 0 +60679 44740 0 0 +60703 44750 1 0 +61987 42647 0 0 +61912 42698 0 0 +61830 42780 0 0 +61824 42786 0 0 +61788 42750 0 0 +61660 42750 0 0 +61610 42750 0 0 +61510 42750 0 0 +61510 42650 0 0 +61610 42650 0 0 +61660 42650 0 0 +61788 42650 0 0 +61830 42608 0 0 +61830 42590 0 0 +61930 42590 0 0 +61987 42647 1 0 +62623 41726 0 0 +62614 41748 0 0 +62614 41867 0 0 +62614 42014 0 0 +62404 42014 0 0 +62323 41933 0 0 +62229 41870 0 0 +62118 41848 0 0 +59758 41848 0 0 +59619 41709 0 0 +59619 41560 0 0 +59741 41560 0 0 +59910 41490 0 0 +60040 41361 0 0 +60110 41192 0 0 +60110 41009 0 0 +60040 40840 0 0 +59911 40710 0 0 +59742 40640 0 0 +59559 40640 0 0 +59439 40689 0 0 +59420 40681 0 0 +59321 40681 0 0 +58981 40681 0 0 +58889 40719 0 0 +58819 40789 0 0 +58781 40880 0 0 +58781 40979 0 0 +58781 41319 0 0 +58814 41399 0 0 +58810 41410 0 0 +58339 41410 0 0 +58335 41400 0 0 +58369 41320 0 0 +58369 41221 0 0 +58369 40881 0 0 +58331 40789 0 0 +58301 40759 0 0 +59020 40040 0 0 +59410 40040 0 0 +59419 40061 0 0 +59489 40131 0 0 +59580 40169 0 0 +59679 40169 0 0 +60019 40169 0 0 +60111 40131 0 0 +60152 40090 0 0 +60160 40090 0 0 +60169 40111 0 0 +60239 40181 0 0 +60330 40219 0 0 +60429 40219 0 0 +60769 40219 0 0 +60849 40185 0 0 +60930 40219 0 0 +61029 40219 0 0 +61369 40219 0 0 +61461 40181 0 0 +61526 40116 0 0 +61656 40246 0 0 +61656 40320 0 0 +61717 40469 0 0 +61831 40582 0 0 +61979 40644 0 0 +62062 40644 0 0 +62062 40652 0 0 +62084 40763 0 0 +62147 40857 0 0 +62623 41333 0 0 +62623 41726 1 0 +62810 44292 0 0 +62688 44292 0 0 +62688 44405 0 0 +62700 44449 0 0 +62660 44490 0 0 +62030 44490 0 0 +62030 44442 0 0 +61988 44400 0 0 +61860 44400 0 0 +61810 44400 0 0 +61710 44400 0 0 +61710 44300 0 0 +61810 44300 0 0 +61860 44300 0 0 +61988 44300 0 0 +62030 44258 0 0 +62030 44206 0 0 +62017 44177 0 0 +62326 44177 0 0 +62348 44186 0 0 +62467 44186 0 0 +62688 44186 0 0 +62688 44192 0 0 +62735 44192 0 0 +62786 44213 0 0 +62810 44213 0 0 +62810 44292 1 0 +64892 43937 0 0 +64877 43937 0 0 +64813 43924 0 0 +64813 43915 0 0 +64813 43837 0 0 +64892 43837 0 0 +64892 43860 0 0 +64892 43914 0 0 +64892 43916 0 0 +64892 43937 1 0 +65419 40341 0 0 +64619 41141 0 0 +64588 41110 0 0 +64400 41110 0 0 +64400 41288 0 0 +64436 41324 0 0 +64430 41330 0 0 +64331 41428 0 0 +64299 41379 0 0 +64298 41378 0 0 +64290 41370 0 0 +64290 41298 0 0 +64300 41288 0 0 +64300 41160 0 0 +64300 41110 0 0 +64300 41010 0 0 +64400 41010 0 0 +64450 41010 0 0 +64588 41010 0 0 +64630 40968 0 0 +64630 40926 0 0 +64628 40923 0 0 +64671 40881 0 0 +64709 40790 0 0 +64709 40691 0 0 +64709 40491 0 0 +64706 40484 0 0 +64740 40451 0 0 +64810 40282 0 0 +64810 40169 0 0 +64908 40210 0 0 +65091 40210 0 0 +65260 40140 0 0 +65390 40011 0 0 +65419 39940 0 0 +65419 40341 1 0 +65925 44523 0 0 +65827 44565 0 0 +65790 44601 0 0 +65790 44488 0 0 +65790 44300 0 0 +65612 44300 0 0 +65570 44342 0 0 +65570 44394 0 0 +65596 44456 0 0 +65644 44504 0 0 +65706 44530 0 0 +65748 44530 0 0 +65790 44488 0 0 +65790 44601 0 0 +65641 44750 0 0 +65550 44750 0 0 +65550 44680 0 0 +65549 44679 0 0 +65523 44546 0 0 +65447 44433 0 0 +65447 44432 0 0 +65096 44081 0 0 +65158 44031 0 0 +65180 43987 0 0 +65209 43987 0 0 +65209 43924 0 0 +65282 43997 0 0 +65283 43997 0 0 +65396 44073 0 0 +65530 44100 0 0 +65572 44100 0 0 +65570 44106 0 0 +65570 44158 0 0 +65612 44200 0 0 +65740 44200 0 0 +65790 44200 0 0 +65890 44200 0 0 +65890 44300 0 0 +65890 44350 0 0 +65890 44488 0 0 +65925 44523 1 0 +70450 44750 0 0 +68858 44750 0 0 +68675 44566 0 0 +68400 44451 0 0 +68102 44451 0 0 +67827 44565 0 0 +67641 44750 0 0 +66858 44750 0 0 +66727 44618 0 0 +66789 44593 0 0 +66902 44479 0 0 +66964 44331 0 0 +66964 44210 0 0 +67091 44210 0 0 +67260 44140 0 0 +67390 44011 0 0 +67460 43842 0 0 +67460 43659 0 0 +67390 43490 0 0 +67261 43360 0 0 +67092 43290 0 0 +66909 43290 0 0 +66789 43339 0 0 +66770 43331 0 0 +66671 43331 0 0 +66577 43331 0 0 +66582 43328 0 0 +68165 41746 0 0 +68165 41745 0 0 +68206 41683 0 0 +68227 41652 0 0 +68228 41651 0 0 +68249 41540 0 0 +68250 41540 0 0 +68250 40367 0 0 +68309 40343 0 0 +68422 40229 0 0 +68484 40081 0 0 +68484 39920 0 0 +68423 39771 0 0 +68324 39672 0 0 +68324 39560 0 0 +68263 39411 0 0 +68164 39312 0 0 +68164 39200 0 0 +68103 39051 0 0 +68004 38952 0 0 +68004 38840 0 0 +67943 38691 0 0 +67844 38592 0 0 +67844 38480 0 0 +67783 38331 0 0 +67669 38218 0 0 +67539 38163 0 0 +67493 38051 0 0 +67379 37938 0 0 +67231 37876 0 0 +67070 37876 0 0 +66921 37937 0 0 +66808 38051 0 0 +66746 38199 0 0 +66746 38360 0 0 +66807 38509 0 0 +66860 38561 0 0 +66860 41080 0 0 +65917 42023 0 0 +65073 42023 0 0 +65052 42014 0 0 +64933 42014 0 0 +64786 42014 0 0 +64786 41794 0 0 +65914 40666 0 0 +65977 40572 0 0 +65999 40461 0 0 +65999 37910 0 0 +66171 37910 0 0 +66263 37872 0 0 +66333 37802 0 0 +66371 37711 0 0 +66371 37676 0 0 +68629 37676 0 0 +68629 37710 0 0 +68667 37802 0 0 +68737 37872 0 0 +68828 37910 0 0 +68927 37910 0 0 +69753 37910 0 0 +69845 37872 0 0 +69915 37802 0 0 +69953 37711 0 0 +69953 37612 0 0 +69953 37062 0 0 +69953 35939 0 0 +69953 35840 0 0 +69953 35290 0 0 +69915 35198 0 0 +69845 35128 0 0 +69760 35092 0 0 +69760 34949 0 0 +69690 34780 0 0 +69561 34650 0 0 +69392 34580 0 0 +69209 34580 0 0 +69040 34650 0 0 +68910 34779 0 0 +68840 34948 0 0 +68840 35090 0 0 +68829 35090 0 0 +68737 35128 0 0 +68667 35198 0 0 +68629 35289 0 0 +68629 35388 0 0 +68629 35938 0 0 +68667 36030 0 0 +68737 36100 0 0 +68828 36138 0 0 +68927 36138 0 0 +69753 36138 0 0 +69845 36100 0 0 +69915 36030 0 0 +69953 35939 0 0 +69953 37062 0 0 +69915 36970 0 0 +69845 36900 0 0 +69754 36862 0 0 +69655 36862 0 0 +68829 36862 0 0 +68737 36900 0 0 +68667 36970 0 0 +68629 37061 0 0 +68629 37096 0 0 +66371 37096 0 0 +66371 37062 0 0 +66371 35939 0 0 +66371 35840 0 0 +66371 35290 0 0 +66360 35263 0 0 +66360 32292 0 0 +66360 32109 0 0 +66290 31940 0 0 +66161 31810 0 0 +65992 31740 0 0 +65934 31740 0 0 +65913 31718 0 0 +65942 31650 0 0 +65942 31352 0 0 +65828 31077 0 0 +65618 30866 0 0 +65343 30751 0 0 +65045 30751 0 0 +64770 30865 0 0 +64559 31075 0 0 +64444 31350 0 0 +64444 31648 0 0 +64558 31923 0 0 +64768 32134 0 0 +65043 32249 0 0 +65341 32249 0 0 +65421 32215 0 0 +65440 32234 0 0 +65440 32291 0 0 +65510 32460 0 0 +65639 32590 0 0 +65808 32660 0 0 +65991 32660 0 0 +66160 32590 0 0 +66290 32461 0 0 +66360 32292 0 0 +66360 35263 0 0 +66333 35198 0 0 +66263 35128 0 0 +66172 35090 0 0 +66170 35090 0 0 +66170 34949 0 0 +66100 34780 0 0 +65971 34650 0 0 +65802 34580 0 0 +65619 34580 0 0 +65450 34650 0 0 +65320 34779 0 0 +65250 34948 0 0 +65250 35090 0 0 +65247 35090 0 0 +65155 35128 0 0 +65085 35198 0 0 +65047 35289 0 0 +65047 35388 0 0 +65047 35938 0 0 +65085 36030 0 0 +65155 36100 0 0 +65246 36138 0 0 +65345 36138 0 0 +66171 36138 0 0 +66263 36100 0 0 +66333 36030 0 0 +66371 35939 0 0 +66371 37062 0 0 +66333 36970 0 0 +66263 36900 0 0 +66172 36862 0 0 +66073 36862 0 0 +65247 36862 0 0 +65155 36900 0 0 +65085 36970 0 0 +65047 37061 0 0 +65047 37096 0 0 +64766 37096 0 0 +64390 36720 0 0 +64390 34381 0 0 +64480 34419 0 0 +64579 34419 0 0 +64919 34419 0 0 +65011 34381 0 0 +65065 34327 0 0 +65096 34340 0 0 +65208 34340 0 0 +65250 34298 0 0 +65250 34273 0 0 +65281 34261 0 0 +65350 34192 0 0 +65350 34298 0 0 +65392 34340 0 0 +65504 34340 0 0 +65566 34314 0 0 +65614 34266 0 0 +65640 34204 0 0 +65640 34136 0 0 +65640 34092 0 0 +65598 34050 0 0 +65389 34050 0 0 +65389 34001 0 0 +65389 33950 0 0 +65598 33950 0 0 +65640 33908 0 0 +65640 33864 0 0 +65640 33796 0 0 +65614 33734 0 0 +65566 33686 0 0 +65504 33660 0 0 +65392 33660 0 0 +65350 33702 0 0 +65350 33808 0 0 +65281 33739 0 0 +65250 33726 0 0 +65250 33702 0 0 +65208 33660 0 0 +65096 33660 0 0 +65065 33673 0 0 +65011 33619 0 0 +64920 33581 0 0 +64821 33581 0 0 +64691 33581 0 0 +62595 31485 0 0 +62595 31352 0 0 +62481 31077 0 0 +62271 30866 0 0 +61996 30751 0 0 +61698 30751 0 0 +61423 30865 0 0 +61212 31075 0 0 +61097 31350 0 0 +61097 31648 0 0 +61211 31923 0 0 +61421 32134 0 0 +61696 32249 0 0 +61994 32249 0 0 +62269 32135 0 0 +62347 32057 0 0 +63500 33210 0 0 +60850 33210 0 0 +60739 33232 0 0 +60645 33295 0 0 +60644 33295 0 0 +60644 33296 0 0 +60358 33582 0 0 +60311 33535 0 0 +60109 33451 0 0 +59891 33451 0 0 +59689 33535 0 0 +59535 33689 0 0 +59500 33773 0 0 +59465 33689 0 0 +59311 33535 0 0 +59249 33509 0 0 +59249 31650 0 0 +59249 31352 0 0 +59135 31077 0 0 +58925 30866 0 0 +58650 30751 0 0 +58352 30751 0 0 +58077 30865 0 0 +57866 31075 0 0 +57809 31210 0 0 +57110 31210 0 0 +56333 30433 0 0 +56239 30370 0 0 +56128 30348 0 0 +48232 30348 0 0 +48121 30370 0 0 +48027 30433 0 0 +47333 31127 0 0 +47270 31221 0 0 +47248 31332 0 0 +47248 37038 0 0 +47270 37149 0 0 +47333 37243 0 0 +47676 37586 0 0 +47676 37660 0 0 +47737 37809 0 0 +47851 37922 0 0 +47999 37984 0 0 +48160 37984 0 0 +48309 37923 0 0 +48422 37809 0 0 +48484 37661 0 0 +48484 37544 0 0 +48560 37544 0 0 +48709 37483 0 0 +48822 37369 0 0 +48884 37221 0 0 +48884 37060 0 0 +48823 36911 0 0 +48709 36798 0 0 +48561 36736 0 0 +48486 36736 0 0 +48190 36440 0 0 +48190 31550 0 0 +48488 31252 0 0 +51098 31252 0 0 +51058 31350 0 0 +51058 31648 0 0 +51172 31923 0 0 +51382 32134 0 0 +51657 32249 0 0 +51955 32249 0 0 +52090 32193 0 0 +53162 33265 0 0 +53256 33328 0 0 +53367 33350 0 0 +57460 33350 0 0 +57571 33328 0 0 +57636 33284 0 0 +57720 33284 0 0 +57869 33223 0 0 +57982 33109 0 0 +58044 32961 0 0 +58044 32800 0 0 +57983 32651 0 0 +57869 32538 0 0 +57721 32476 0 0 +57560 32476 0 0 +57411 32537 0 0 +57298 32651 0 0 +57248 32770 0 0 +53487 32770 0 0 +52500 31783 0 0 +52556 31650 0 0 +52556 31352 0 0 +52447 31090 0 0 +54334 31090 0 0 +54460 31216 0 0 +54405 31350 0 0 +54405 31648 0 0 +54519 31923 0 0 +54729 32134 0 0 +55004 32249 0 0 +55302 32249 0 0 +55577 32135 0 0 +55788 31925 0 0 +55903 31650 0 0 +55903 31352 0 0 +55789 31077 0 0 +55640 30928 0 0 +56008 30928 0 0 +56785 31705 0 0 +56879 31768 0 0 +56990 31790 0 0 +57809 31790 0 0 +57865 31923 0 0 +58075 32134 0 0 +58350 32249 0 0 +58648 32249 0 0 +58923 32135 0 0 +59134 31925 0 0 +59249 31650 0 0 +59249 33509 0 0 +59109 33451 0 0 +58891 33451 0 0 +58689 33535 0 0 +58535 33689 0 0 +58500 33773 0 0 +58465 33689 0 0 +58311 33535 0 0 +58109 33451 0 0 +57891 33451 0 0 +57689 33535 0 0 +57535 33689 0 0 +57500 33773 0 0 +57465 33689 0 0 +57311 33535 0 0 +57109 33451 0 0 +56891 33451 0 0 +56689 33535 0 0 +56535 33689 0 0 +56500 33773 0 0 +56465 33689 0 0 +56311 33535 0 0 +56109 33451 0 0 +55891 33451 0 0 +55689 33535 0 0 +55535 33689 0 0 +55451 33891 0 0 +55451 34109 0 0 +55459 34130 0 0 +55295 34295 0 0 +55232 34389 0 0 +55210 34500 0 0 +55210 35180 0 0 +55232 35291 0 0 +55295 35385 0 0 +55518 35608 0 0 +55518 38115 0 0 +55491 38127 0 0 +55378 38241 0 0 +55316 38389 0 0 +55316 38550 0 0 +55377 38699 0 0 +55491 38812 0 0 +55639 38874 0 0 +55800 38874 0 0 +55930 38820 0 0 +56056 38946 0 0 +56056 39020 0 0 +56117 39169 0 0 +56231 39282 0 0 +56379 39344 0 0 +56540 39344 0 0 +56689 39283 0 0 +56802 39169 0 0 +56864 39021 0 0 +56864 38961 0 0 +56909 38943 0 0 +57022 38829 0 0 +57084 38681 0 0 +57084 38606 0 0 +59705 35985 0 0 +59768 35891 0 0 +59790 35780 0 0 +59790 35507 0 0 +59891 35549 0 0 +60109 35549 0 0 +60311 35465 0 0 +60465 35311 0 0 +60500 35226 0 0 +60535 35311 0 0 +60689 35465 0 0 +60891 35549 0 0 +60909 35549 0 0 +62062 36702 0 0 +62062 39832 0 0 +61825 39595 0 0 +61731 39532 0 0 +61620 39510 0 0 +61539 39510 0 0 +61531 39489 0 0 +61461 39419 0 0 +61370 39381 0 0 +61271 39381 0 0 +60931 39381 0 0 +60850 39414 0 0 +60770 39381 0 0 +60671 39381 0 0 +60331 39381 0 0 +60239 39419 0 0 +60192 39465 0 0 +60181 39439 0 0 +60127 39385 0 0 +60140 39354 0 0 +60140 39242 0 0 +60140 39058 0 0 +60140 38946 0 0 +60114 38884 0 0 +60066 38836 0 0 +60004 38810 0 0 +59936 38810 0 0 +59892 38810 0 0 +59850 38852 0 0 +59850 39100 0 0 +60098 39100 0 0 +60140 39058 0 0 +60140 39242 0 0 +60098 39200 0 0 +59900 39200 0 0 +59850 39200 0 0 +59750 39200 0 0 +59750 39100 0 0 +59750 38852 0 0 +59708 38810 0 0 +59664 38810 0 0 +59596 38810 0 0 +59534 38836 0 0 +59486 38884 0 0 +59460 38946 0 0 +59460 39058 0 0 +59502 39100 0 0 +59750 39100 0 0 +59750 39200 0 0 +59700 39200 0 0 +59502 39200 0 0 +59460 39242 0 0 +59460 39354 0 0 +59473 39385 0 0 +59419 39439 0 0 +59410 39460 0 0 +58900 39460 0 0 +58789 39482 0 0 +58695 39545 0 0 +57775 40464 0 0 +56849 39539 0 0 +56755 39476 0 0 +56644 39454 0 0 +53950 39454 0 0 +53950 38564 0 0 +53950 38442 0 0 +53908 38400 0 0 +53650 38400 0 0 +53650 38658 0 0 +53692 38700 0 0 +53746 38700 0 0 +53814 38700 0 0 +53876 38674 0 0 +53924 38626 0 0 +53950 38564 0 0 +53950 39454 0 0 +53550 39454 0 0 +53550 38658 0 0 +53550 38400 0 0 +53292 38400 0 0 +53250 38442 0 0 +53250 38560 0 0 +53142 38560 0 0 +53100 38602 0 0 +53100 38850 0 0 +53348 38850 0 0 +53390 38808 0 0 +53390 38764 0 0 +53390 38700 0 0 +53454 38700 0 0 +53508 38700 0 0 +53550 38658 0 0 +53550 39454 0 0 +53390 39454 0 0 +53390 39104 0 0 +53390 39036 0 0 +53390 38992 0 0 +53348 38950 0 0 +53100 38950 0 0 +53100 39198 0 0 +53142 39240 0 0 +53254 39240 0 0 +53316 39214 0 0 +53364 39166 0 0 +53390 39104 0 0 +53390 39454 0 0 +53000 39454 0 0 +53000 39198 0 0 +53000 39000 0 0 +53000 38950 0 0 +53000 38850 0 0 +53000 38800 0 0 +53000 38602 0 0 +52958 38560 0 0 +52846 38560 0 0 +52815 38573 0 0 +52761 38519 0 0 +52670 38481 0 0 +52571 38481 0 0 +52231 38481 0 0 +52210 38489 0 0 +52092 38440 0 0 +51909 38440 0 0 +51740 38510 0 0 +51610 38639 0 0 +51540 38808 0 0 +51540 38991 0 0 +51610 39160 0 0 +51739 39290 0 0 +51908 39360 0 0 +52091 39360 0 0 +52210 39310 0 0 +52230 39319 0 0 +52329 39319 0 0 +52669 39319 0 0 +52761 39281 0 0 +52815 39227 0 0 +52846 39240 0 0 +52958 39240 0 0 +53000 39198 0 0 +53000 39454 0 0 +49113 39454 0 0 +50417 38150 0 0 +52610 38150 0 0 +52801 38112 0 0 +52964 38004 0 0 +53072 37841 0 0 +53109 37653 0 0 +53171 37715 0 0 +53171 37879 0 0 +53209 37971 0 0 +53279 38041 0 0 +53300 38049 0 0 +53276 38074 0 0 +53250 38136 0 0 +53250 38258 0 0 +53292 38300 0 0 +53500 38300 0 0 +53550 38300 0 0 +53650 38300 0 0 +53700 38300 0 0 +53908 38300 0 0 +53950 38258 0 0 +53950 38136 0 0 +53924 38074 0 0 +53899 38049 0 0 +53921 38041 0 0 +53971 37991 0 0 +53971 38229 0 0 +54009 38321 0 0 +54079 38391 0 0 +54170 38429 0 0 +54269 38429 0 0 +54629 38429 0 0 +54656 38417 0 0 +54758 38460 0 0 +54941 38460 0 0 +55110 38390 0 0 +55240 38261 0 0 +55310 38092 0 0 +55310 37909 0 0 +55240 37740 0 0 +55111 37610 0 0 +54942 37540 0 0 +54759 37540 0 0 +54656 37582 0 0 +54630 37571 0 0 +54531 37571 0 0 +54171 37571 0 0 +54079 37609 0 0 +54029 37659 0 0 +54029 37421 0 0 +53991 37329 0 0 +53921 37259 0 0 +53830 37221 0 0 +53731 37221 0 0 +53665 37221 0 0 +53469 37024 0 0 +53469 36881 0 0 +53431 36789 0 0 +53361 36719 0 0 +53270 36681 0 0 +53171 36681 0 0 +52910 36681 0 0 +52910 36559 0 0 +52840 36390 0 0 +52711 36260 0 0 +52542 36190 0 0 +52359 36190 0 0 +52190 36260 0 0 +52060 36389 0 0 +51990 36558 0 0 +51990 36741 0 0 +52039 36860 0 0 +52031 36880 0 0 +52031 36979 0 0 +52031 37150 0 0 +51549 37150 0 0 +51549 35109 0 0 +51549 34891 0 0 +51465 34689 0 0 +51465 34061 0 0 +51453 33878 0 0 +51407 33766 0 0 +51336 33735 0 0 +51265 33806 0 0 +51265 33664 0 0 +51234 33593 0 0 +51061 33535 0 0 +50878 33547 0 0 +50766 33593 0 0 +50735 33664 0 0 +51000 33929 0 0 +51265 33664 0 0 +51265 33806 0 0 +51071 34000 0 0 +51336 34265 0 0 +51407 34234 0 0 +51465 34061 0 0 +51465 34689 0 0 +51311 34535 0 0 +51114 34453 0 0 +51122 34453 0 0 +51234 34407 0 0 +51265 34336 0 0 +51000 34071 0 0 +50929 34142 0 0 +50929 34000 0 0 +50664 33735 0 0 +50593 33766 0 0 +50535 33939 0 0 +50547 34122 0 0 +50593 34234 0 0 +50664 34265 0 0 +50929 34000 0 0 +50929 34142 0 0 +50735 34336 0 0 +50766 34407 0 0 +50897 34451 0 0 +50891 34451 0 0 +50689 34535 0 0 +50535 34689 0 0 +50500 34773 0 0 +50465 34689 0 0 +50465 34061 0 0 +50453 33878 0 0 +50407 33766 0 0 +50336 33735 0 0 +50265 33806 0 0 +50265 33664 0 0 +50234 33593 0 0 +50061 33535 0 0 +49878 33547 0 0 +49766 33593 0 0 +49735 33664 0 0 +50000 33929 0 0 +50265 33664 0 0 +50265 33806 0 0 +50071 34000 0 0 +50336 34265 0 0 +50407 34234 0 0 +50465 34061 0 0 +50465 34689 0 0 +50311 34535 0 0 +50114 34453 0 0 +50122 34453 0 0 +50234 34407 0 0 +50265 34336 0 0 +50000 34071 0 0 +49929 34142 0 0 +49929 34000 0 0 +49664 33735 0 0 +49593 33766 0 0 +49535 33939 0 0 +49547 34122 0 0 +49593 34234 0 0 +49664 34265 0 0 +49929 34000 0 0 +49929 34142 0 0 +49735 34336 0 0 +49766 34407 0 0 +49897 34451 0 0 +49891 34451 0 0 +49689 34535 0 0 +49549 34675 0 0 +49549 34651 0 0 +49511 34559 0 0 +49465 34513 0 0 +49465 34061 0 0 +49453 33878 0 0 +49407 33766 0 0 +49336 33735 0 0 +49265 33806 0 0 +49265 33664 0 0 +49234 33593 0 0 +49061 33535 0 0 +48878 33547 0 0 +48766 33593 0 0 +48735 33664 0 0 +49000 33929 0 0 +49265 33664 0 0 +49265 33806 0 0 +49071 34000 0 0 +49336 34265 0 0 +49407 34234 0 0 +49465 34061 0 0 +49465 34513 0 0 +49441 34489 0 0 +49350 34451 0 0 +49251 34451 0 0 +49126 34451 0 0 +49234 34407 0 0 +49265 34336 0 0 +49000 34071 0 0 +48929 34142 0 0 +48929 34000 0 0 +48664 33735 0 0 +48593 33766 0 0 +48535 33939 0 0 +48547 34122 0 0 +48593 34234 0 0 +48664 34265 0 0 +48929 34000 0 0 +48929 34142 0 0 +48735 34336 0 0 +48766 34407 0 0 +48897 34451 0 0 +48651 34451 0 0 +48559 34489 0 0 +48489 34559 0 0 +48451 34650 0 0 +48451 34749 0 0 +48451 35349 0 0 +48489 35441 0 0 +48559 35511 0 0 +48650 35549 0 0 +48749 35549 0 0 +49349 35549 0 0 +49441 35511 0 0 +49511 35441 0 0 +49549 35350 0 0 +49549 35325 0 0 +49689 35465 0 0 +49891 35549 0 0 +50109 35549 0 0 +50311 35465 0 0 +50465 35311 0 0 +50500 35226 0 0 +50535 35311 0 0 +50689 35465 0 0 +50891 35549 0 0 +51109 35549 0 0 +51311 35465 0 0 +51465 35311 0 0 +51549 35109 0 0 +51549 37150 0 0 +50210 37150 0 0 +50018 37188 0 0 +49953 37231 0 0 +49856 37296 0 0 +49854 37298 0 0 +48374 38778 0 0 +48374 38416 0 0 +48336 38324 0 0 +48266 38254 0 0 +48175 38216 0 0 +48076 38216 0 0 +47506 38216 0 0 +47503 38216 0 0 +47502 38216 0 0 +47403 38216 0 0 +47153 38216 0 0 +47061 38254 0 0 +46991 38324 0 0 +46978 38353 0 0 +46784 38353 0 0 +46782 38352 0 0 +46557 38352 0 0 +46554 38353 0 0 +46550 38353 0 0 +46550 21550 0 0 +70450 21550 0 0 +70450 44750 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660000 0 "" +ZLayer 20 +ZAux 1822 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 53880 25026 0 +ZCorner 53881 24994 0 +ZCorner 53882 24962 0 +ZCorner 53883 24929 0 +ZCorner 53884 24897 0 +ZCorner 53888 24888 0 +ZCorner 53892 24880 0 +ZCorner 53896 24871 0 +ZCorner 53900 24862 0 +ZCorner 53902 24858 0 +ZCorner 53905 24854 0 +ZCorner 53908 24850 0 +ZCorner 53911 24846 0 +ZCorner 53575 24846 0 +ZCorner 53239 24846 0 +ZCorner 52904 24846 0 +ZCorner 52568 24846 0 +ZCorner 52511 24915 0 +ZCorner 52470 24957 0 +ZCorner 52443 24971 0 +ZCorner 52431 24956 0 +ZCorner 51693 24956 0 +ZCorner 50955 24956 0 +ZCorner 50217 24956 0 +ZCorner 49479 24956 0 +ZCorner 49476 24977 0 +ZCorner 49454 24953 0 +ZCorner 49414 24885 0 +ZCorner 49354 24772 0 +ZCorner 50503 24772 0 +ZCorner 51652 24772 0 +ZCorner 52801 24772 0 +ZCorner 53950 24772 0 +ZCorner 54025 24660 0 +ZCorner 54102 24581 0 +ZCorner 54182 24536 0 +ZCorner 54263 24522 0 +ZCorner 54587 24523 0 +ZCorner 54911 24524 0 +ZCorner 55235 24525 0 +ZCorner 55559 24526 0 +ZCorner 55573 24531 0 +ZCorner 55587 24536 0 +ZCorner 55600 24541 0 +ZCorner 55614 24546 0 +ZCorner 55619 24552 0 +ZCorner 55624 24558 0 +ZCorner 55629 24563 0 +ZCorner 55634 24569 0 +ZCorner 55638 24575 0 +ZCorner 55641 24581 0 +ZCorner 55645 24587 0 +ZCorner 55649 24593 0 +ZCorner 55651 24601 0 +ZCorner 55653 24610 0 +ZCorner 55655 24619 0 +ZCorner 55657 24628 0 +ZCorner 55667 24624 0 +ZCorner 55677 24620 0 +ZCorner 55686 24616 0 +ZCorner 55696 24612 0 +ZCorner 55746 24592 0 +ZCorner 55796 24571 0 +ZCorner 55846 24551 0 +ZCorner 55895 24530 0 +ZCorner 55983 24522 0 +ZCorner 56071 24514 0 +ZCorner 56159 24507 0 +ZCorner 56247 24499 0 +ZCorner 56180 24449 0 +ZCorner 56112 24399 0 +ZCorner 56045 24349 0 +ZCorner 55977 24300 0 +ZCorner 56010 24244 0 +ZCorner 56042 24188 0 +ZCorner 56074 24133 0 +ZCorner 56106 24077 0 +ZCorner 56212 24129 0 +ZCorner 56317 24180 0 +ZCorner 56423 24232 0 +ZCorner 56528 24284 0 +ZCorner 56527 24285 0 +ZCorner 56526 24286 0 +ZCorner 56525 24287 0 +ZCorner 56524 24288 0 +ZCorner 56526 24287 0 +ZCorner 56528 24286 0 +ZCorner 56530 24285 0 +ZCorner 56532 24284 0 +ZCorner 56567 24237 0 +ZCorner 56602 24190 0 +ZCorner 56637 24143 0 +ZCorner 56672 24096 0 +ZCorner 56598 24007 0 +ZCorner 56524 23917 0 +ZCorner 56450 23827 0 +ZCorner 56376 23737 0 +ZCorner 56422 23692 0 +ZCorner 56467 23647 0 +ZCorner 56513 23602 0 +ZCorner 56559 23557 0 +ZCorner 56649 23632 0 +ZCorner 56739 23706 0 +ZCorner 56829 23780 0 +ZCorner 56918 23854 0 +ZCorner 56964 23819 0 +ZCorner 57010 23784 0 +ZCorner 57056 23749 0 +ZCorner 57102 23714 0 +ZCorner 57052 23609 0 +ZCorner 57003 23505 0 +ZCorner 56953 23400 0 +ZCorner 56903 23296 0 +ZCorner 56957 23262 0 +ZCorner 57010 23227 0 +ZCorner 57064 23193 0 +ZCorner 57118 23159 0 +ZCorner 57188 23252 0 +ZCorner 57258 23345 0 +ZCorner 57328 23437 0 +ZCorner 57399 23530 0 +ZCorner 57451 23508 0 +ZCorner 57504 23485 0 +ZCorner 57557 23463 0 +ZCorner 57610 23440 0 +ZCorner 57585 23326 0 +ZCorner 57561 23212 0 +ZCorner 57537 23098 0 +ZCorner 57512 22983 0 +ZCorner 57575 22964 0 +ZCorner 57637 22944 0 +ZCorner 57700 22925 0 +ZCorner 57762 22905 0 +ZCorner 57807 23013 0 +ZCorner 57852 23120 0 +ZCorner 57897 23227 0 +ZCorner 57942 23335 0 +ZCorner 57999 23325 0 +ZCorner 58055 23315 0 +ZCorner 58112 23305 0 +ZCorner 58168 23296 0 +ZCorner 58171 23179 0 +ZCorner 58174 23061 0 +ZCorner 58177 22944 0 +ZCorner 58180 22827 0 +ZCorner 58246 22823 0 +ZCorner 58313 22819 0 +ZCorner 58379 22815 0 +ZCorner 58445 22811 0 +ZCorner 58463 22928 0 +ZCorner 58481 23044 0 +ZCorner 58498 23160 0 +ZCorner 58516 23276 0 +ZCorner 58573 23278 0 +ZCorner 58631 23280 0 +ZCorner 58689 23282 0 +ZCorner 58746 23284 0 +ZCorner 58777 23177 0 +ZCorner 58807 23069 0 +ZCorner 58837 22962 0 +ZCorner 58878 22839 0 +ZCorner 58972 22853 0 +ZCorner 59125 22882 0 +ZCorner 59115 22999 0 +ZCorner 59105 23116 0 +ZCorner 59096 23233 0 +ZCorner 59086 23350 0 +ZCorner 59141 23367 0 +ZCorner 59195 23383 0 +ZCorner 59250 23400 0 +ZCorner 59305 23417 0 +ZCorner 59306 23418 0 +ZCorner 59306 23419 0 +ZCorner 59307 23420 0 +ZCorner 59308 23421 0 +ZCorner 59308 23420 0 +ZCorner 59308 23419 0 +ZCorner 59308 23418 0 +ZCorner 59308 23417 0 +ZCorner 59365 23315 0 +ZCorner 59422 23214 0 +ZCorner 59478 23112 0 +ZCorner 59535 23010 0 +ZCorner 59595 23037 0 +ZCorner 59654 23063 0 +ZCorner 59714 23090 0 +ZCorner 59773 23116 0 +ZCorner 59735 23227 0 +ZCorner 59697 23338 0 +ZCorner 59659 23450 0 +ZCorner 59621 23561 0 +ZCorner 59671 23590 0 +ZCorner 59720 23620 0 +ZCorner 59770 23649 0 +ZCorner 59820 23678 0 +ZCorner 59899 23594 0 +ZCorner 59978 23510 0 +ZCorner 60057 23426 0 +ZCorner 60136 23342 0 +ZCorner 60188 23381 0 +ZCorner 60240 23420 0 +ZCorner 60292 23460 0 +ZCorner 60343 23499 0 +ZCorner 60281 23597 0 +ZCorner 60218 23696 0 +ZCorner 60156 23794 0 +ZCorner 60093 23893 0 +ZCorner 60133 23934 0 +ZCorner 60174 23975 0 +ZCorner 60214 24016 0 +ZCorner 60254 24057 0 +ZCorner 60353 23994 0 +ZCorner 60453 23930 0 +ZCorner 60552 23867 0 +ZCorner 60652 23803 0 +ZCorner 60692 23853 0 +ZCorner 60732 23903 0 +ZCorner 60772 23953 0 +ZCorner 60812 24003 0 +ZCorner 60726 24084 0 +ZCorner 60640 24165 0 +ZCorner 60554 24246 0 +ZCorner 60468 24327 0 +ZCorner 60499 24376 0 +ZCorner 60529 24426 0 +ZCorner 60559 24476 0 +ZCorner 60589 24526 0 +ZCorner 60589 24529 0 +ZCorner 60589 24532 0 +ZCorner 60589 24535 0 +ZCorner 60589 24538 0 +ZCorner 60590 24538 0 +ZCorner 60591 24538 0 +ZCorner 60592 24538 0 +ZCorner 60593 24538 0 +ZCorner 60592 24535 0 +ZCorner 60591 24532 0 +ZCorner 60590 24529 0 +ZCorner 60589 24526 0 +ZCorner 60699 24488 0 +ZCorner 60808 24450 0 +ZCorner 60917 24412 0 +ZCorner 61039 24379 0 +ZCorner 61062 24431 0 +ZCorner 61097 24514 0 +ZCorner 61418 24495 0 +ZCorner 61666 24497 0 +ZCorner 61841 24519 0 +ZCorner 61945 24561 0 +ZCorner 61962 24569 0 +ZCorner 61980 24577 0 +ZCorner 61997 24584 0 +ZCorner 62015 24592 0 +ZCorner 62016 24564 0 +ZCorner 62017 24536 0 +ZCorner 62018 24507 0 +ZCorner 62019 24479 0 +ZCorner 62020 24466 0 +ZCorner 62021 24454 0 +ZCorner 62022 24441 0 +ZCorner 62023 24428 0 +ZCorner 62026 24416 0 +ZCorner 62028 24405 0 +ZCorner 62031 24393 0 +ZCorner 62034 24381 0 +ZCorner 62039 24373 0 +ZCorner 62044 24364 0 +ZCorner 62049 24355 0 +ZCorner 62054 24346 0 +ZCorner 62064 24337 0 +ZCorner 62073 24329 0 +ZCorner 62083 24320 0 +ZCorner 62093 24311 0 +ZCorner 62099 24308 0 +ZCorner 62105 24305 0 +ZCorner 62110 24302 0 +ZCorner 62116 24299 0 +ZCorner 62120 24296 0 +ZCorner 62124 24294 0 +ZCorner 62128 24291 0 +ZCorner 62132 24288 0 +ZCorner 62199 24278 0 +ZCorner 62366 24274 0 +ZCorner 62633 24276 0 +ZCorner 62999 24284 0 +ZCorner 63047 24298 0 +ZCorner 63082 24356 0 +ZCorner 63102 24458 0 +ZCorner 63108 24604 0 +ZCorner 63108 24609 0 +ZCorner 63108 24614 0 +ZCorner 63108 24619 0 +ZCorner 63108 24623 0 +ZCorner 63121 24629 0 +ZCorner 63134 24635 0 +ZCorner 63146 24641 0 +ZCorner 63159 24647 0 +ZCorner 63167 24655 0 +ZCorner 63175 24663 0 +ZCorner 63183 24670 0 +ZCorner 63190 24678 0 +ZCorner 63199 24702 0 +ZCorner 63208 24725 0 +ZCorner 63217 24748 0 +ZCorner 63225 24772 0 +ZCorner 64322 24772 0 +ZCorner 65418 24772 0 +ZCorner 66515 24772 0 +ZCorner 67611 24772 0 +ZCorner 67554 24885 0 +ZCorner 67515 24953 0 +ZCorner 67495 24977 0 +ZCorner 67494 24955 0 +ZCorner 67421 24967 0 +ZCorner 67348 24974 0 +ZCorner 67276 24976 0 +ZCorner 67205 24975 0 +ZCorner 66500 24975 0 +ZCorner 65794 24975 0 +ZCorner 65088 24975 0 +ZCorner 64382 24975 0 +ZCorner 64356 24947 0 +ZCorner 64331 24918 0 +ZCorner 64306 24890 0 +ZCorner 64280 24862 0 +ZCorner 64020 24862 0 +ZCorner 63759 24862 0 +ZCorner 63498 24862 0 +ZCorner 63237 24862 0 +ZCorner 63238 24888 0 +ZCorner 63239 24914 0 +ZCorner 63240 24941 0 +ZCorner 63241 24967 0 +ZCorner 63238 24982 0 +ZCorner 63235 24997 0 +ZCorner 63233 25011 0 +ZCorner 63230 25026 0 +ZCorner 64353 25026 0 +ZCorner 65477 25026 0 +ZCorner 66601 25026 0 +ZCorner 67725 25026 0 +ZCorner 67756 25022 0 +ZCorner 67732 25070 0 +ZCorner 67653 25170 0 +ZCorner 67522 25323 0 +ZCorner 67516 25341 0 +ZCorner 67510 25360 0 +ZCorner 67504 25378 0 +ZCorner 67498 25397 0 +ZCorner 66476 25398 0 +ZCorner 65454 25399 0 +ZCorner 64432 25400 0 +ZCorner 63409 25401 0 +ZCorner 63333 25400 0 +ZCorner 63257 25399 0 +ZCorner 63181 25398 0 +ZCorner 63105 25397 0 +ZCorner 63105 25399 0 +ZCorner 63105 25401 0 +ZCorner 63105 25403 0 +ZCorner 63105 25405 0 +ZCorner 63105 25447 0 +ZCorner 63105 25490 0 +ZCorner 63105 25533 0 +ZCorner 63105 25576 0 +ZCorner 64187 25576 0 +ZCorner 65270 25576 0 +ZCorner 66353 25576 0 +ZCorner 67436 25576 0 +ZCorner 67372 25652 0 +ZCorner 67309 25727 0 +ZCorner 67245 25802 0 +ZCorner 67182 25877 0 +ZCorner 67175 25949 0 +ZCorner 67161 26012 0 +ZCorner 67140 26068 0 +ZCorner 67111 26115 0 +ZCorner 67090 26139 0 +ZCorner 67067 26157 0 +ZCorner 67042 26170 0 +ZCorner 67014 26178 0 +ZCorner 66981 26180 0 +ZCorner 66948 26182 0 +ZCorner 66914 26184 0 +ZCorner 66881 26185 0 +ZCorner 66873 26185 0 +ZCorner 66865 26184 0 +ZCorner 66858 26183 0 +ZCorner 66850 26182 0 +ZCorner 66837 26178 0 +ZCorner 66824 26174 0 +ZCorner 66812 26170 0 +ZCorner 66799 26166 0 +ZCorner 66791 26160 0 +ZCorner 66784 26154 0 +ZCorner 66776 26148 0 +ZCorner 66768 26143 0 +ZCorner 66761 26137 0 +ZCorner 66754 26131 0 +ZCorner 66747 26125 0 +ZCorner 66741 26119 0 +ZCorner 66732 26114 0 +ZCorner 66723 26109 0 +ZCorner 66714 26105 0 +ZCorner 66705 26100 0 +ZCorner 66692 26095 0 +ZCorner 66678 26090 0 +ZCorner 66664 26085 0 +ZCorner 66651 26080 0 +ZCorner 66627 26080 0 +ZCorner 66604 26080 0 +ZCorner 66580 26080 0 +ZCorner 66557 26080 0 +ZCorner 66548 26081 0 +ZCorner 66539 26082 0 +ZCorner 66531 26083 0 +ZCorner 66522 26084 0 +ZCorner 66508 26088 0 +ZCorner 66495 26092 0 +ZCorner 66481 26096 0 +ZCorner 66467 26100 0 +ZCorner 66455 26109 0 +ZCorner 66442 26119 0 +ZCorner 66429 26129 0 +ZCorner 66416 26139 0 +ZCorner 66373 26195 0 +ZCorner 66329 26252 0 +ZCorner 66285 26309 0 +ZCorner 66241 26365 0 +ZCorner 66222 26384 0 +ZCorner 66193 26400 0 +ZCorner 66156 26412 0 +ZCorner 66108 26420 0 +ZCorner 66103 26419 0 +ZCorner 66098 26418 0 +ZCorner 66093 26417 0 +ZCorner 66088 26416 0 +ZCorner 66087 26416 0 +ZCorner 66086 26416 0 +ZCorner 66085 26416 0 +ZCorner 66084 26416 0 +ZCorner 66073 26413 0 +ZCorner 66061 26410 0 +ZCorner 66049 26407 0 +ZCorner 66038 26404 0 +ZCorner 66024 26395 0 +ZCorner 66010 26385 0 +ZCorner 65997 26375 0 +ZCorner 65983 26365 0 +ZCorner 65968 26351 0 +ZCorner 65954 26336 0 +ZCorner 65939 26321 0 +ZCorner 65924 26307 0 +ZCorner 65912 26292 0 +ZCorner 65899 26277 0 +ZCorner 65886 26263 0 +ZCorner 65874 26248 0 +ZCorner 65860 26234 0 +ZCorner 65846 26221 0 +ZCorner 65833 26207 0 +ZCorner 65819 26193 0 +ZCorner 65816 26192 0 +ZCorner 65813 26191 0 +ZCorner 65810 26190 0 +ZCorner 65807 26189 0 +ZCorner 65792 26180 0 +ZCorner 65776 26170 0 +ZCorner 65760 26160 0 +ZCorner 65745 26150 0 +ZCorner 65738 26150 0 +ZCorner 65731 26150 0 +ZCorner 65724 26150 0 +ZCorner 65717 26150 0 +ZCorner 65705 26147 0 +ZCorner 65692 26144 0 +ZCorner 65679 26142 0 +ZCorner 65667 26139 0 +ZCorner 65653 26141 0 +ZCorner 65639 26143 0 +ZCorner 65626 26145 0 +ZCorner 65612 26146 0 +ZCorner 65609 26146 0 +ZCorner 65606 26146 0 +ZCorner 65603 26146 0 +ZCorner 65600 26146 0 +ZCorner 65577 26151 0 +ZCorner 65553 26156 0 +ZCorner 65530 26161 0 +ZCorner 65507 26166 0 +ZCorner 65493 26174 0 +ZCorner 65479 26182 0 +ZCorner 65465 26189 0 +ZCorner 65452 26197 0 +ZCorner 65429 26220 0 +ZCorner 65407 26242 0 +ZCorner 65384 26265 0 +ZCorner 65362 26287 0 +ZCorner 65304 26395 0 +ZCorner 65254 26475 0 +ZCorner 65212 26526 0 +ZCorner 65178 26549 0 +ZCorner 65135 26550 0 +ZCorner 65092 26551 0 +ZCorner 65049 26552 0 +ZCorner 65006 26553 0 +ZCorner 65000 26550 0 +ZCorner 64993 26547 0 +ZCorner 64986 26544 0 +ZCorner 64979 26541 0 +ZCorner 64968 26535 0 +ZCorner 64958 26528 0 +ZCorner 64947 26521 0 +ZCorner 64936 26514 0 +ZCorner 64926 26501 0 +ZCorner 64917 26489 0 +ZCorner 64907 26476 0 +ZCorner 64897 26463 0 +ZCorner 64884 26444 0 +ZCorner 64872 26424 0 +ZCorner 64859 26405 0 +ZCorner 64846 26385 0 +ZCorner 64832 26366 0 +ZCorner 64817 26346 0 +ZCorner 64802 26327 0 +ZCorner 64788 26307 0 +ZCorner 64774 26292 0 +ZCorner 64760 26276 0 +ZCorner 64747 26260 0 +ZCorner 64733 26245 0 +ZCorner 64716 26234 0 +ZCorner 64700 26223 0 +ZCorner 64683 26212 0 +ZCorner 64667 26202 0 +ZCorner 64665 26200 0 +ZCorner 64663 26198 0 +ZCorner 64661 26196 0 +ZCorner 64659 26194 0 +ZCorner 64640 26188 0 +ZCorner 64622 26182 0 +ZCorner 64603 26176 0 +ZCorner 64585 26170 0 +ZCorner 64567 26168 0 +ZCorner 64550 26165 0 +ZCorner 64532 26162 0 +ZCorner 64514 26159 0 +ZCorner 64512 26158 0 +ZCorner 64509 26157 0 +ZCorner 64506 26156 0 +ZCorner 64503 26155 0 +ZCorner 64496 26155 0 +ZCorner 64489 26155 0 +ZCorner 64482 26155 0 +ZCorner 64475 26155 0 +ZCorner 64450 26153 0 +ZCorner 64425 26151 0 +ZCorner 64399 26149 0 +ZCorner 64374 26147 0 +ZCorner 64341 26148 0 +ZCorner 64307 26149 0 +ZCorner 64274 26150 0 +ZCorner 64241 26151 0 +ZCorner 64133 26182 0 +ZCorner 64048 26227 0 +ZCorner 63988 26286 0 +ZCorner 63952 26358 0 +ZCorner 63738 26358 0 +ZCorner 63524 26358 0 +ZCorner 63311 26358 0 +ZCorner 63097 26358 0 +ZCorner 63097 26370 0 +ZCorner 63097 26381 0 +ZCorner 63097 26393 0 +ZCorner 63097 26405 0 +ZCorner 63097 26407 0 +ZCorner 63097 26409 0 +ZCorner 63097 26411 0 +ZCorner 63097 26413 0 +ZCorner 63287 26413 0 +ZCorner 63477 26413 0 +ZCorner 63668 26413 0 +ZCorner 63858 26413 0 +ZCorner 63890 26405 0 +ZCorner 63888 26442 0 +ZCorner 63851 26522 0 +ZCorner 63780 26647 0 +ZCorner 63600 26647 0 +ZCorner 63421 26647 0 +ZCorner 63241 26647 0 +ZCorner 63061 26647 0 +ZCorner 62985 26755 0 +ZCorner 62900 26838 0 +ZCorner 62809 26897 0 +ZCorner 62710 26932 0 +ZCorner 62684 26941 0 +ZCorner 62623 26949 0 +ZCorner 62527 26955 0 +ZCorner 62398 26959 0 +ZCorner 62294 26957 0 +ZCorner 62191 26955 0 +ZCorner 62087 26953 0 +ZCorner 61984 26951 0 +ZCorner 61984 26924 0 +ZCorner 61984 26897 0 +ZCorner 61984 26869 0 +ZCorner 61984 26842 0 +ZCorner 61966 26851 0 +ZCorner 61949 26860 0 +ZCorner 61931 26868 0 +ZCorner 61913 26877 0 +ZCorner 61857 26900 0 +ZCorner 61789 26920 0 +ZCorner 61710 26938 0 +ZCorner 61621 26951 0 +ZCorner 61540 26954 0 +ZCorner 61458 26957 0 +ZCorner 61377 26960 0 +ZCorner 61296 26963 0 +ZCorner 61242 26956 0 +ZCorner 61187 26950 0 +ZCorner 61132 26943 0 +ZCorner 61078 26936 0 +ZCorner 60958 26885 0 +ZCorner 60866 26856 0 +ZCorner 60804 26848 0 +ZCorner 60769 26862 0 +ZCorner 60826 26903 0 +ZCorner 60883 26944 0 +ZCorner 60939 26985 0 +ZCorner 60996 27026 0 +ZCorner 60964 27081 0 +ZCorner 60931 27137 0 +ZCorner 60899 27192 0 +ZCorner 60867 27248 0 +ZCorner 60760 27197 0 +ZCorner 60654 27147 0 +ZCorner 60548 27096 0 +ZCorner 60441 27045 0 +ZCorner 60406 27092 0 +ZCorner 60371 27139 0 +ZCorner 60336 27186 0 +ZCorner 60301 27232 0 +ZCorner 60375 27323 0 +ZCorner 60449 27414 0 +ZCorner 60523 27505 0 +ZCorner 60597 27596 0 +ZCorner 60551 27640 0 +ZCorner 60506 27685 0 +ZCorner 60460 27730 0 +ZCorner 60414 27775 0 +ZCorner 60323 27700 0 +ZCorner 60232 27625 0 +ZCorner 60141 27550 0 +ZCorner 60050 27475 0 +ZCorner 60006 27511 0 +ZCorner 59961 27547 0 +ZCorner 59916 27583 0 +ZCorner 59871 27619 0 +ZCorner 59922 27724 0 +ZCorner 59972 27830 0 +ZCorner 60023 27935 0 +ZCorner 60074 28041 0 +ZCorner 60017 28074 0 +ZCorner 59961 28107 0 +ZCorner 59904 28140 0 +ZCorner 59847 28174 0 +ZCorner 59781 28082 0 +ZCorner 59715 27990 0 +ZCorner 59648 27898 0 +ZCorner 59582 27806 0 +ZCorner 59580 27805 0 +ZCorner 59578 27803 0 +ZCorner 59576 27801 0 +ZCorner 59574 27799 0 +ZCorner 59521 27822 0 +ZCorner 59469 27846 0 +ZCorner 59416 27869 0 +ZCorner 59363 27892 0 +ZCorner 59387 28007 0 +ZCorner 59410 28121 0 +ZCorner 59434 28235 0 +ZCorner 59457 28349 0 +ZCorner 59394 28369 0 +ZCorner 59332 28388 0 +ZCorner 59270 28408 0 +ZCorner 59207 28427 0 +ZCorner 59164 28320 0 +ZCorner 59121 28213 0 +ZCorner 59078 28105 0 +ZCorner 59035 27998 0 +ZCorner 58978 28008 0 +ZCorner 58920 28019 0 +ZCorner 58862 28030 0 +ZCorner 58805 28041 0 +ZCorner 58801 28157 0 +ZCorner 58797 28273 0 +ZCorner 58793 28389 0 +ZCorner 58789 28506 0 +ZCorner 58723 28509 0 +ZCorner 58656 28513 0 +ZCorner 58590 28517 0 +ZCorner 58524 28521 0 +ZCorner 58507 28405 0 +ZCorner 58490 28289 0 +ZCorner 58474 28172 0 +ZCorner 58457 28056 0 +ZCorner 58400 28053 0 +ZCorner 58342 28050 0 +ZCorner 58284 28048 0 +ZCorner 58227 28045 0 +ZCorner 58195 28157 0 +ZCorner 58162 28269 0 +ZCorner 58130 28382 0 +ZCorner 58098 28494 0 +ZCorner 58034 28483 0 +ZCorner 57969 28472 0 +ZCorner 57905 28461 0 +ZCorner 57840 28451 0 +ZCorner 57851 28334 0 +ZCorner 57862 28216 0 +ZCorner 57872 28099 0 +ZCorner 57883 27982 0 +ZCorner 57828 27965 0 +ZCorner 57774 27947 0 +ZCorner 57719 27929 0 +ZCorner 57664 27912 0 +ZCorner 57608 28012 0 +ZCorner 57551 28113 0 +ZCorner 57494 28214 0 +ZCorner 57438 28314 0 +ZCorner 57437 28322 0 +ZCorner 57416 28317 0 +ZCorner 57374 28299 0 +ZCorner 57309 28267 0 +ZCorner 57279 28257 0 +ZCorner 57248 28246 0 +ZCorner 57218 28235 0 +ZCorner 57188 28224 0 +ZCorner 57209 28159 0 +ZCorner 57243 28062 0 +ZCorner 57288 27933 0 +ZCorner 57344 27771 0 +ZCorner 57295 27742 0 +ZCorner 57247 27713 0 +ZCorner 57198 27684 0 +ZCorner 57149 27654 0 +ZCorner 57070 27736 0 +ZCorner 56991 27818 0 +ZCorner 56912 27900 0 +ZCorner 56833 27982 0 +ZCorner 56793 27962 0 +ZCorner 56745 27930 0 +ZCorner 56688 27887 0 +ZCorner 56622 27834 0 +ZCorner 56685 27736 0 +ZCorner 56749 27639 0 +ZCorner 56812 27541 0 +ZCorner 56876 27443 0 +ZCorner 56878 27444 0 +ZCorner 56880 27445 0 +ZCorner 56882 27446 0 +ZCorner 56884 27447 0 +ZCorner 56883 27446 0 +ZCorner 56882 27445 0 +ZCorner 56880 27444 0 +ZCorner 56879 27443 0 +ZCorner 56837 27400 0 +ZCorner 56794 27358 0 +ZCorner 56751 27315 0 +ZCorner 56708 27272 0 +ZCorner 56610 27337 0 +ZCorner 56513 27402 0 +ZCorner 56415 27468 0 +ZCorner 56317 27533 0 +ZCorner 56294 27503 0 +ZCorner 56260 27459 0 +ZCorner 56215 27399 0 +ZCorner 56161 27322 0 +ZCorner 56245 27244 0 +ZCorner 56329 27166 0 +ZCorner 56413 27088 0 +ZCorner 56497 27010 0 +ZCorner 56487 26991 0 +ZCorner 56477 26973 0 +ZCorner 56468 26954 0 +ZCorner 56458 26936 0 +ZCorner 56326 26939 0 +ZCorner 56194 26942 0 +ZCorner 56063 26945 0 +ZCorner 55931 26947 0 +ZCorner 55905 26944 0 +ZCorner 55880 26940 0 +ZCorner 55855 26936 0 +ZCorner 55829 26932 0 +ZCorner 55819 26926 0 +ZCorner 55810 26920 0 +ZCorner 55800 26914 0 +ZCorner 55790 26908 0 +ZCorner 55769 26884 0 +ZCorner 55747 26860 0 +ZCorner 55726 26835 0 +ZCorner 55704 26811 0 +ZCorner 55684 26799 0 +ZCorner 55663 26787 0 +ZCorner 55643 26776 0 +ZCorner 55622 26764 0 +ZCorner 55618 26778 0 +ZCorner 55614 26791 0 +ZCorner 55611 26805 0 +ZCorner 55607 26819 0 +ZCorner 55601 26830 0 +ZCorner 55595 26842 0 +ZCorner 55589 26854 0 +ZCorner 55583 26865 0 +ZCorner 55577 26872 0 +ZCorner 55571 26879 0 +ZCorner 55566 26886 0 +ZCorner 55560 26893 0 +ZCorner 55555 26897 0 +ZCorner 55550 26901 0 +ZCorner 55545 26905 0 +ZCorner 55540 26908 0 +ZCorner 55545 26918 0 +ZCorner 55507 26924 0 +ZCorner 55425 26925 0 +ZCorner 55298 26924 0 +ZCorner 54989 26923 0 +ZCorner 54679 26922 0 +ZCorner 54369 26921 0 +ZCorner 54060 26920 0 +ZCorner 53960 26863 0 +ZCorner 53895 26798 0 +ZCorner 53863 26726 0 +ZCorner 53865 26647 0 +ZCorner 53696 26647 0 +ZCorner 53527 26647 0 +ZCorner 53358 26647 0 +ZCorner 53189 26647 0 +ZCorner 53123 26536 0 +ZCorner 53089 26459 0 +ZCorner 53085 26418 0 +ZCorner 53111 26413 0 +ZCorner 53300 26413 0 +ZCorner 53490 26413 0 +ZCorner 53679 26413 0 +ZCorner 53869 26413 0 +ZCorner 53869 26411 0 +ZCorner 53869 26409 0 +ZCorner 53869 26407 0 +ZCorner 53869 26405 0 +ZCorner 53869 26393 0 +ZCorner 53869 26381 0 +ZCorner 53869 26370 0 +ZCorner 53869 26358 0 +ZCorner 53654 26358 0 +ZCorner 53439 26358 0 +ZCorner 53224 26358 0 +ZCorner 53010 26358 0 +ZCorner 52953 26259 0 +ZCorner 52866 26191 0 +ZCorner 52747 26154 0 +ZCorner 52596 26147 0 +ZCorner 52570 26149 0 +ZCorner 52545 26151 0 +ZCorner 52519 26153 0 +ZCorner 52494 26155 0 +ZCorner 52487 26155 0 +ZCorner 52480 26155 0 +ZCorner 52474 26155 0 +ZCorner 52467 26155 0 +ZCorner 52464 26156 0 +ZCorner 52461 26157 0 +ZCorner 52458 26158 0 +ZCorner 52455 26159 0 +ZCorner 52437 26162 0 +ZCorner 52420 26165 0 +ZCorner 52402 26168 0 +ZCorner 52385 26170 0 +ZCorner 52367 26176 0 +ZCorner 52350 26182 0 +ZCorner 52332 26188 0 +ZCorner 52315 26194 0 +ZCorner 52313 26196 0 +ZCorner 52310 26198 0 +ZCorner 52308 26200 0 +ZCorner 52306 26202 0 +ZCorner 52290 26212 0 +ZCorner 52273 26223 0 +ZCorner 52257 26234 0 +ZCorner 52240 26245 0 +ZCorner 52227 26260 0 +ZCorner 52213 26276 0 +ZCorner 52199 26292 0 +ZCorner 52185 26307 0 +ZCorner 52172 26327 0 +ZCorner 52158 26346 0 +ZCorner 52144 26366 0 +ZCorner 52131 26385 0 +ZCorner 52117 26405 0 +ZCorner 52103 26424 0 +ZCorner 52090 26444 0 +ZCorner 52076 26463 0 +ZCorner 52065 26476 0 +ZCorner 52054 26489 0 +ZCorner 52044 26502 0 +ZCorner 52033 26514 0 +ZCorner 52022 26521 0 +ZCorner 52011 26528 0 +ZCorner 52000 26535 0 +ZCorner 51990 26542 0 +ZCorner 51983 26544 0 +ZCorner 51976 26547 0 +ZCorner 51969 26550 0 +ZCorner 51963 26553 0 +ZCorner 51924 26553 0 +ZCorner 51885 26553 0 +ZCorner 51846 26553 0 +ZCorner 51807 26553 0 +ZCorner 51797 26547 0 +ZCorner 51787 26542 0 +ZCorner 51777 26536 0 +ZCorner 51767 26530 0 +ZCorner 51748 26505 0 +ZCorner 51728 26481 0 +ZCorner 51709 26457 0 +ZCorner 51689 26432 0 +ZCorner 51641 26344 0 +ZCorner 51601 26280 0 +ZCorner 51569 26239 0 +ZCorner 51545 26221 0 +ZCorner 51524 26208 0 +ZCorner 51504 26194 0 +ZCorner 51483 26180 0 +ZCorner 51463 26167 0 +ZCorner 51439 26162 0 +ZCorner 51416 26157 0 +ZCorner 51392 26152 0 +ZCorner 51369 26147 0 +ZCorner 51366 26147 0 +ZCorner 51363 26147 0 +ZCorner 51360 26147 0 +ZCorner 51357 26147 0 +ZCorner 51341 26145 0 +ZCorner 51326 26143 0 +ZCorner 51310 26141 0 +ZCorner 51295 26139 0 +ZCorner 51284 26142 0 +ZCorner 51273 26145 0 +ZCorner 51262 26148 0 +ZCorner 51252 26151 0 +ZCorner 51245 26151 0 +ZCorner 51238 26151 0 +ZCorner 51231 26151 0 +ZCorner 51224 26151 0 +ZCorner 51209 26161 0 +ZCorner 51193 26171 0 +ZCorner 51178 26180 0 +ZCorner 51162 26190 0 +ZCorner 51160 26191 0 +ZCorner 51158 26192 0 +ZCorner 51156 26193 0 +ZCorner 51154 26194 0 +ZCorner 51141 26207 0 +ZCorner 51129 26219 0 +ZCorner 51116 26232 0 +ZCorner 51103 26245 0 +ZCorner 51090 26261 0 +ZCorner 51076 26276 0 +ZCorner 51062 26292 0 +ZCorner 51049 26307 0 +ZCorner 51034 26322 0 +ZCorner 51019 26337 0 +ZCorner 51005 26351 0 +ZCorner 50990 26366 0 +ZCorner 50975 26376 0 +ZCorner 50961 26385 0 +ZCorner 50946 26395 0 +ZCorner 50931 26405 0 +ZCorner 50920 26408 0 +ZCorner 50908 26411 0 +ZCorner 50896 26414 0 +ZCorner 50885 26417 0 +ZCorner 50884 26417 0 +ZCorner 50883 26417 0 +ZCorner 50882 26417 0 +ZCorner 50881 26417 0 +ZCorner 50876 26418 0 +ZCorner 50871 26419 0 +ZCorner 50866 26420 0 +ZCorner 50861 26421 0 +ZCorner 50838 26415 0 +ZCorner 50814 26409 0 +ZCorner 50791 26403 0 +ZCorner 50767 26397 0 +ZCorner 50763 26393 0 +ZCorner 50760 26389 0 +ZCorner 50756 26386 0 +ZCorner 50752 26382 0 +ZCorner 50638 26234 0 +ZCorner 50550 26135 0 +ZCorner 50487 26086 0 +ZCorner 50451 26085 0 +ZCorner 50441 26084 0 +ZCorner 50431 26083 0 +ZCorner 50422 26082 0 +ZCorner 50412 26081 0 +ZCorner 50390 26081 0 +ZCorner 50367 26081 0 +ZCorner 50345 26081 0 +ZCorner 50322 26081 0 +ZCorner 50308 26086 0 +ZCorner 50295 26091 0 +ZCorner 50281 26096 0 +ZCorner 50268 26100 0 +ZCorner 50259 26105 0 +ZCorner 50250 26110 0 +ZCorner 50241 26115 0 +ZCorner 50232 26120 0 +ZCorner 50224 26126 0 +ZCorner 50217 26132 0 +ZCorner 50209 26138 0 +ZCorner 50201 26143 0 +ZCorner 50193 26149 0 +ZCorner 50185 26155 0 +ZCorner 50177 26161 0 +ZCorner 50170 26167 0 +ZCorner 50158 26171 0 +ZCorner 50146 26175 0 +ZCorner 50135 26179 0 +ZCorner 50123 26182 0 +ZCorner 50114 26183 0 +ZCorner 50105 26184 0 +ZCorner 50096 26185 0 +ZCorner 50087 26186 0 +ZCorner 50059 26185 0 +ZCorner 50031 26184 0 +ZCorner 50003 26183 0 +ZCorner 49974 26182 0 +ZCorner 49934 26172 0 +ZCorner 49902 26158 0 +ZCorner 49879 26141 0 +ZCorner 49865 26124 0 +ZCorner 49832 26071 0 +ZCorner 49808 26013 0 +ZCorner 49793 25948 0 +ZCorner 49787 25878 0 +ZCorner 49724 25803 0 +ZCorner 49662 25727 0 +ZCorner 49599 25652 0 +ZCorner 49537 25577 0 +ZCorner 50622 25577 0 +ZCorner 51706 25577 0 +ZCorner 52791 25577 0 +ZCorner 53876 25577 0 +ZCorner 53876 25534 0 +ZCorner 53876 25491 0 +ZCorner 53876 25448 0 +ZCorner 53876 25405 0 +ZCorner 53876 25403 0 +ZCorner 53876 25401 0 +ZCorner 53876 25399 0 +ZCorner 53876 25397 0 +ZCorner 53800 25398 0 +ZCorner 53724 25399 0 +ZCorner 53647 25400 0 +ZCorner 53571 25401 0 +ZCorner 52551 25400 0 +ZCorner 51531 25399 0 +ZCorner 50510 25398 0 +ZCorner 49490 25397 0 +ZCorner 49490 25397 0 +ZCorner 49490 25395 0 +ZCorner 49488 25392 0 +ZCorner 49486 25390 0 +ZCorner 49462 25350 0 +ZCorner 49413 25284 0 +ZCorner 49339 25192 0 +ZCorner 49240 25073 0 +ZCorner 49240 25062 0 +ZCorner 49240 25050 0 +ZCorner 49240 25038 0 +ZCorner 49240 25026 0 +ZCorner 50400 25026 0 +ZCorner 51560 25026 0 +ZCorner 52720 25026 0 +ZCorner 53880 25026 1 +ZCorner 63105 26030 0 +ZCorner 63605 26030 0 +ZCorner 64104 26030 0 +ZCorner 64604 26030 0 +ZCorner 65104 26030 0 +ZCorner 65137 26029 0 +ZCorner 65171 26028 0 +ZCorner 65204 26027 0 +ZCorner 65237 26026 0 +ZCorner 65198 25987 0 +ZCorner 65159 25948 0 +ZCorner 65120 25909 0 +ZCorner 65081 25870 0 +ZCorner 65047 25870 0 +ZCorner 65012 25870 0 +ZCorner 64978 25870 0 +ZCorner 64944 25870 0 +ZCorner 64484 25870 0 +ZCorner 64024 25870 0 +ZCorner 63564 25870 0 +ZCorner 63105 25870 0 +ZCorner 63105 25910 0 +ZCorner 63105 25950 0 +ZCorner 63105 25990 0 +ZCorner 63105 26030 1 +ZCorner 62183 26604 0 +ZCorner 62269 26604 0 +ZCorner 62355 26604 0 +ZCorner 62441 26604 0 +ZCorner 62527 26604 0 +ZCorner 62606 26598 0 +ZCorner 62664 26592 0 +ZCorner 62699 26585 0 +ZCorner 62710 26577 0 +ZCorner 62813 26518 0 +ZCorner 62880 26435 0 +ZCorner 62912 26327 0 +ZCorner 62909 26194 0 +ZCorner 62909 25925 0 +ZCorner 62909 25657 0 +ZCorner 62909 25388 0 +ZCorner 62909 25120 0 +ZCorner 62922 25120 0 +ZCorner 62935 25120 0 +ZCorner 62948 25120 0 +ZCorner 62960 25120 0 +ZCorner 62974 25118 0 +ZCorner 62988 25116 0 +ZCorner 63001 25114 0 +ZCorner 63015 25112 0 +ZCorner 63019 25111 0 +ZCorner 63023 25110 0 +ZCorner 63027 25109 0 +ZCorner 63030 25108 0 +ZCorner 63030 25088 0 +ZCorner 63030 25067 0 +ZCorner 63030 25047 0 +ZCorner 63030 25026 0 +ZCorner 63030 24981 0 +ZCorner 63030 24936 0 +ZCorner 63030 24891 0 +ZCorner 63030 24846 0 +ZCorner 63030 24841 0 +ZCorner 63030 24835 0 +ZCorner 63030 24829 0 +ZCorner 63030 24823 0 +ZCorner 63013 24823 0 +ZCorner 62995 24823 0 +ZCorner 62978 24823 0 +ZCorner 62960 24823 0 +ZCorner 62948 24822 0 +ZCorner 62935 24821 0 +ZCorner 62922 24820 0 +ZCorner 62909 24819 0 +ZCorner 62909 24750 0 +ZCorner 62909 24680 0 +ZCorner 62909 24611 0 +ZCorner 62909 24542 0 +ZCorner 62771 24542 0 +ZCorner 62632 24542 0 +ZCorner 62493 24542 0 +ZCorner 62355 24542 0 +ZCorner 62344 24546 0 +ZCorner 62333 24550 0 +ZCorner 62323 24553 0 +ZCorner 62312 24557 0 +ZCorner 62313 24624 0 +ZCorner 62314 24690 0 +ZCorner 62315 24757 0 +ZCorner 62316 24823 0 +ZCorner 62286 24824 0 +ZCorner 62257 24825 0 +ZCorner 62228 24826 0 +ZCorner 62199 24827 0 +ZCorner 62192 24828 0 +ZCorner 62185 24829 0 +ZCorner 62178 24830 0 +ZCorner 62171 24831 0 +ZCorner 62169 24834 0 +ZCorner 62167 24837 0 +ZCorner 62165 24840 0 +ZCorner 62163 24842 0 +ZCorner 62163 24910 0 +ZCorner 62163 24977 0 +ZCorner 62163 25045 0 +ZCorner 62163 25112 0 +ZCorner 62166 25114 0 +ZCorner 62169 25116 0 +ZCorner 62172 25118 0 +ZCorner 62175 25120 0 +ZCorner 62210 25120 0 +ZCorner 62245 25120 0 +ZCorner 62281 25120 0 +ZCorner 62316 25120 0 +ZCorner 62315 25388 0 +ZCorner 62314 25657 0 +ZCorner 62313 25925 0 +ZCorner 62312 26194 0 +ZCorner 62318 26246 0 +ZCorner 62302 26283 0 +ZCorner 62264 26305 0 +ZCorner 62202 26311 0 +ZCorner 62190 26310 0 +ZCorner 62177 26309 0 +ZCorner 62164 26308 0 +ZCorner 62152 26307 0 +ZCorner 62150 26379 0 +ZCorner 62148 26452 0 +ZCorner 62146 26524 0 +ZCorner 62144 26596 0 +ZCorner 62154 26598 0 +ZCorner 62163 26600 0 +ZCorner 62173 26602 0 +ZCorner 62183 26604 1 +ZCorner 60804 26010 0 +ZCorner 60808 26056 0 +ZCorner 60812 26102 0 +ZCorner 60816 26148 0 +ZCorner 60820 26194 0 +ZCorner 60850 26310 0 +ZCorner 60911 26412 0 +ZCorner 61004 26500 0 +ZCorner 61128 26577 0 +ZCorner 61129 26577 0 +ZCorner 61130 26577 0 +ZCorner 61131 26577 0 +ZCorner 61132 26577 0 +ZCorner 61133 26578 0 +ZCorner 61134 26579 0 +ZCorner 61135 26580 0 +ZCorner 61136 26581 0 +ZCorner 61139 26581 0 +ZCorner 61142 26582 0 +ZCorner 61145 26583 0 +ZCorner 61148 26584 0 +ZCorner 61366 26623 0 +ZCorner 61551 26635 0 +ZCorner 61703 26619 0 +ZCorner 61820 26577 0 +ZCorner 61917 26529 0 +ZCorner 61993 26450 0 +ZCorner 62049 26338 0 +ZCorner 62085 26194 0 +ZCorner 62089 26159 0 +ZCorner 62093 26124 0 +ZCorner 62097 26088 0 +ZCorner 62101 26053 0 +ZCorner 62101 25898 0 +ZCorner 62101 25743 0 +ZCorner 62101 25587 0 +ZCorner 62101 25432 0 +ZCorner 62097 25379 0 +ZCorner 62093 25325 0 +ZCorner 62089 25271 0 +ZCorner 62085 25217 0 +ZCorner 62073 25175 0 +ZCorner 62062 25133 0 +ZCorner 62050 25091 0 +ZCorner 62038 25049 0 +ZCorner 61890 24863 0 +ZCorner 61678 24768 0 +ZCorner 61403 24764 0 +ZCorner 61066 24850 0 +ZCorner 61063 24851 0 +ZCorner 61060 24852 0 +ZCorner 61057 24853 0 +ZCorner 61054 24854 0 +ZCorner 61052 24856 0 +ZCorner 61050 24858 0 +ZCorner 61048 24860 0 +ZCorner 61046 24862 0 +ZCorner 61026 24869 0 +ZCorner 61002 24883 0 +ZCorner 60974 24905 0 +ZCorner 60941 24936 0 +ZCorner 60921 24964 0 +ZCorner 60902 24993 0 +ZCorner 60882 25021 0 +ZCorner 60863 25049 0 +ZCorner 60852 25080 0 +ZCorner 60841 25110 0 +ZCorner 60830 25140 0 +ZCorner 60820 25170 0 +ZCorner 60815 25236 0 +ZCorner 60810 25301 0 +ZCorner 60805 25367 0 +ZCorner 60800 25432 0 +ZCorner 60801 25577 0 +ZCorner 60802 25721 0 +ZCorner 60803 25866 0 +ZCorner 60804 26010 1 +ZCorner 59391 25260 0 +ZCorner 59391 25267 0 +ZCorner 59391 25274 0 +ZCorner 59391 25281 0 +ZCorner 59391 25288 0 +ZCorner 59391 25491 0 +ZCorner 59391 25694 0 +ZCorner 59391 25897 0 +ZCorner 59391 26100 0 +ZCorner 59392 26106 0 +ZCorner 59392 26112 0 +ZCorner 59393 26118 0 +ZCorner 59394 26124 0 +ZCorner 59394 26127 0 +ZCorner 59394 26129 0 +ZCorner 59394 26132 0 +ZCorner 59394 26135 0 +ZCorner 59395 26141 0 +ZCorner 59396 26147 0 +ZCorner 59397 26153 0 +ZCorner 59398 26159 0 +ZCorner 59398 26161 0 +ZCorner 59398 26163 0 +ZCorner 59398 26165 0 +ZCorner 59398 26167 0 +ZCorner 59399 26172 0 +ZCorner 59400 26176 0 +ZCorner 59401 26181 0 +ZCorner 59402 26186 0 +ZCorner 59402 26189 0 +ZCorner 59402 26192 0 +ZCorner 59402 26195 0 +ZCorner 59402 26198 0 +ZCorner 59403 26201 0 +ZCorner 59404 26204 0 +ZCorner 59405 26207 0 +ZCorner 59406 26209 0 +ZCorner 59406 26210 0 +ZCorner 59406 26211 0 +ZCorner 59406 26212 0 +ZCorner 59406 26213 0 +ZCorner 59407 26217 0 +ZCorner 59408 26221 0 +ZCorner 59409 26225 0 +ZCorner 59410 26229 0 +ZCorner 59410 26230 0 +ZCorner 59410 26231 0 +ZCorner 59410 26232 0 +ZCorner 59410 26233 0 +ZCorner 59411 26235 0 +ZCorner 59412 26237 0 +ZCorner 59413 26239 0 +ZCorner 59414 26241 0 +ZCorner 59414 26242 0 +ZCorner 59414 26243 0 +ZCorner 59414 26244 0 +ZCorner 59414 26245 0 +ZCorner 59419 26258 0 +ZCorner 59424 26272 0 +ZCorner 59429 26286 0 +ZCorner 59433 26299 0 +ZCorner 59470 26383 0 +ZCorner 59527 26457 0 +ZCorner 59605 26522 0 +ZCorner 59703 26577 0 +ZCorner 59926 26620 0 +ZCorner 60113 26635 0 +ZCorner 60265 26620 0 +ZCorner 60382 26577 0 +ZCorner 60491 26509 0 +ZCorner 60573 26423 0 +ZCorner 60626 26318 0 +ZCorner 60652 26194 0 +ZCorner 60656 26098 0 +ZCorner 60660 26002 0 +ZCorner 60664 25907 0 +ZCorner 60667 25811 0 +ZCorner 60663 25660 0 +ZCorner 60658 25508 0 +ZCorner 60653 25357 0 +ZCorner 60648 25206 0 +ZCorner 60637 25167 0 +ZCorner 60626 25128 0 +ZCorner 60616 25089 0 +ZCorner 60605 25049 0 +ZCorner 60506 24906 0 +ZCorner 60367 24808 0 +ZCorner 60188 24756 0 +ZCorner 59968 24749 0 +ZCorner 59780 24787 0 +ZCorner 59630 24849 0 +ZCorner 59519 24937 0 +ZCorner 59449 25049 0 +ZCorner 59438 25075 0 +ZCorner 59427 25100 0 +ZCorner 59417 25126 0 +ZCorner 59406 25151 0 +ZCorner 59405 25157 0 +ZCorner 59404 25163 0 +ZCorner 59403 25169 0 +ZCorner 59402 25175 0 +ZCorner 59401 25177 0 +ZCorner 59400 25180 0 +ZCorner 59399 25183 0 +ZCorner 59398 25186 0 +ZCorner 59398 25189 0 +ZCorner 59398 25192 0 +ZCorner 59398 25195 0 +ZCorner 59398 25198 0 +ZCorner 59397 25202 0 +ZCorner 59396 25206 0 +ZCorner 59395 25210 0 +ZCorner 59394 25214 0 +ZCorner 59394 25216 0 +ZCorner 59394 25219 0 +ZCorner 59394 25222 0 +ZCorner 59394 25225 0 +ZCorner 59393 25229 0 +ZCorner 59392 25233 0 +ZCorner 59391 25237 0 +ZCorner 59390 25241 0 +ZCorner 59390 25246 0 +ZCorner 59390 25251 0 +ZCorner 59390 25256 0 +ZCorner 59391 25260 1 +ZCorner 58930 26604 0 +ZCorner 58930 26406 0 +ZCorner 58930 26208 0 +ZCorner 58930 26009 0 +ZCorner 58930 25811 0 +ZCorner 58934 25638 0 +ZCorner 58952 25516 0 +ZCorner 58984 25448 0 +ZCorner 59027 25432 0 +ZCorner 59051 25425 0 +ZCorner 59074 25417 0 +ZCorner 59098 25409 0 +ZCorner 59121 25401 0 +ZCorner 59122 25401 0 +ZCorner 59123 25401 0 +ZCorner 59124 25401 0 +ZCorner 59125 25401 0 +ZCorner 59156 25398 0 +ZCorner 59187 25395 0 +ZCorner 59219 25392 0 +ZCorner 59250 25389 0 +ZCorner 59251 25229 0 +ZCorner 59252 25069 0 +ZCorner 59253 24909 0 +ZCorner 59254 24749 0 +ZCorner 59249 24749 0 +ZCorner 59244 24749 0 +ZCorner 59239 24749 0 +ZCorner 59234 24749 0 +ZCorner 59149 24766 0 +ZCorner 59066 24812 0 +ZCorner 58987 24888 0 +ZCorner 58910 24995 0 +ZCorner 58914 24942 0 +ZCorner 58918 24889 0 +ZCorner 58922 24837 0 +ZCorner 58926 24784 0 +ZCorner 58787 24784 0 +ZCorner 58648 24784 0 +ZCorner 58510 24784 0 +ZCorner 58371 24784 0 +ZCorner 58371 25232 0 +ZCorner 58371 25680 0 +ZCorner 58371 26128 0 +ZCorner 58371 26577 0 +ZCorner 58345 26585 0 +ZCorner 58429 26592 0 +ZCorner 58624 26598 0 +ZCorner 58930 26604 1 +ZCorner 57555 25085 0 +ZCorner 57574 25085 0 +ZCorner 57592 25085 0 +ZCorner 57611 25085 0 +ZCorner 57629 25085 0 +ZCorner 57636 25092 0 +ZCorner 57643 25098 0 +ZCorner 57650 25105 0 +ZCorner 57657 25112 0 +ZCorner 57658 25131 0 +ZCorner 57660 25149 0 +ZCorner 57662 25168 0 +ZCorner 57664 25186 0 +ZCorner 57664 25438 0 +ZCorner 57664 25690 0 +ZCorner 57664 25942 0 +ZCorner 57664 26194 0 +ZCorner 57658 26213 0 +ZCorner 57653 26233 0 +ZCorner 57647 26252 0 +ZCorner 57641 26272 0 +ZCorner 57630 26281 0 +ZCorner 57619 26289 0 +ZCorner 57609 26298 0 +ZCorner 57598 26307 0 +ZCorner 57579 26304 0 +ZCorner 57561 26301 0 +ZCorner 57542 26298 0 +ZCorner 57524 26295 0 +ZCorner 57522 26293 0 +ZCorner 57520 26291 0 +ZCorner 57518 26289 0 +ZCorner 57516 26288 0 +ZCorner 57512 26280 0 +ZCorner 57508 26272 0 +ZCorner 57504 26264 0 +ZCorner 57500 26256 0 +ZCorner 57498 26250 0 +ZCorner 57496 26245 0 +ZCorner 57494 26239 0 +ZCorner 57492 26233 0 +ZCorner 57491 26216 0 +ZCorner 57491 26200 0 +ZCorner 57490 26183 0 +ZCorner 57489 26166 0 +ZCorner 57490 26164 0 +ZCorner 57491 26162 0 +ZCorner 57491 26160 0 +ZCorner 57492 26158 0 +ZCorner 57491 26158 0 +ZCorner 57491 26158 0 +ZCorner 57490 26158 0 +ZCorner 57489 26158 0 +ZCorner 57487 26144 0 +ZCorner 57485 26129 0 +ZCorner 57483 26115 0 +ZCorner 57481 26100 0 +ZCorner 57483 26098 0 +ZCorner 57485 26096 0 +ZCorner 57487 26094 0 +ZCorner 57489 26092 0 +ZCorner 57487 26092 0 +ZCorner 57485 26092 0 +ZCorner 57483 26092 0 +ZCorner 57481 26092 0 +ZCorner 57481 26073 0 +ZCorner 57481 26053 0 +ZCorner 57481 26033 0 +ZCorner 57481 26014 0 +ZCorner 57483 26010 0 +ZCorner 57485 26006 0 +ZCorner 57487 26002 0 +ZCorner 57489 25998 0 +ZCorner 57487 25997 0 +ZCorner 57485 25996 0 +ZCorner 57483 25995 0 +ZCorner 57481 25994 0 +ZCorner 57481 25959 0 +ZCorner 57481 25924 0 +ZCorner 57481 25889 0 +ZCorner 57481 25854 0 +ZCorner 57355 25854 0 +ZCorner 57229 25854 0 +ZCorner 57103 25854 0 +ZCorner 56977 25854 0 +ZCorner 56982 25939 0 +ZCorner 56987 26024 0 +ZCorner 56991 26109 0 +ZCorner 56996 26194 0 +ZCorner 57028 26309 0 +ZCorner 57087 26411 0 +ZCorner 57174 26500 0 +ZCorner 57289 26576 0 +ZCorner 57503 26620 0 +ZCorner 57681 26635 0 +ZCorner 57824 26620 0 +ZCorner 57930 26576 0 +ZCorner 58037 26513 0 +ZCorner 58118 26427 0 +ZCorner 58173 26321 0 +ZCorner 58203 26194 0 +ZCorner 58209 26154 0 +ZCorner 58215 26115 0 +ZCorner 58221 26076 0 +ZCorner 58227 26037 0 +ZCorner 58224 25822 0 +ZCorner 58221 25608 0 +ZCorner 58218 25393 0 +ZCorner 58215 25178 0 +ZCorner 58205 25146 0 +ZCorner 58195 25114 0 +ZCorner 58186 25081 0 +ZCorner 58176 25049 0 +ZCorner 58070 24909 0 +ZCorner 57929 24812 0 +ZCorner 57752 24759 0 +ZCorner 57539 24748 0 +ZCorner 57372 24778 0 +ZCorner 57232 24837 0 +ZCorner 57122 24928 0 +ZCorner 57040 25049 0 +ZCorner 57030 25080 0 +ZCorner 57020 25112 0 +ZCorner 57010 25143 0 +ZCorner 57001 25174 0 +ZCorner 56995 25239 0 +ZCorner 56989 25303 0 +ZCorner 56983 25367 0 +ZCorner 56977 25432 0 +ZCorner 56979 25441 0 +ZCorner 56981 25449 0 +ZCorner 56983 25458 0 +ZCorner 56985 25467 0 +ZCorner 57117 25467 0 +ZCorner 57249 25467 0 +ZCorner 57380 25467 0 +ZCorner 57512 25467 0 +ZCorner 57513 25392 0 +ZCorner 57514 25317 0 +ZCorner 57515 25242 0 +ZCorner 57516 25166 0 +ZCorner 57516 25161 0 +ZCorner 57516 25157 0 +ZCorner 57516 25152 0 +ZCorner 57516 25147 0 +ZCorner 57516 25145 0 +ZCorner 57516 25143 0 +ZCorner 57516 25141 0 +ZCorner 57516 25139 0 +ZCorner 57526 25125 0 +ZCorner 57536 25112 0 +ZCorner 57545 25098 0 +ZCorner 57555 25085 1 +ZCorner 55559 25967 0 +ZCorner 55563 26024 0 +ZCorner 55567 26081 0 +ZCorner 55571 26137 0 +ZCorner 55575 26194 0 +ZCorner 55596 26297 0 +ZCorner 55652 26394 0 +ZCorner 55744 26487 0 +ZCorner 55872 26577 0 +ZCorner 56097 26621 0 +ZCorner 56285 26635 0 +ZCorner 56438 26621 0 +ZCorner 56555 26577 0 +ZCorner 56577 26566 0 +ZCorner 56598 26555 0 +ZCorner 56620 26544 0 +ZCorner 56641 26534 0 +ZCorner 56646 26529 0 +ZCorner 56651 26524 0 +ZCorner 56656 26519 0 +ZCorner 56661 26514 0 +ZCorner 56667 26510 0 +ZCorner 56674 26506 0 +ZCorner 56681 26502 0 +ZCorner 56688 26498 0 +ZCorner 56692 26493 0 +ZCorner 56696 26487 0 +ZCorner 56700 26481 0 +ZCorner 56704 26475 0 +ZCorner 56723 26463 0 +ZCorner 56744 26438 0 +ZCorner 56766 26403 0 +ZCorner 56790 26358 0 +ZCorner 56800 26317 0 +ZCorner 56811 26276 0 +ZCorner 56822 26235 0 +ZCorner 56832 26194 0 +ZCorner 56837 26138 0 +ZCorner 56842 26083 0 +ZCorner 56847 26027 0 +ZCorner 56852 25971 0 +ZCorner 56851 25836 0 +ZCorner 56850 25702 0 +ZCorner 56849 25567 0 +ZCorner 56848 25432 0 +ZCorner 56844 25380 0 +ZCorner 56840 25329 0 +ZCorner 56837 25277 0 +ZCorner 56833 25225 0 +ZCorner 56823 25161 0 +ZCorner 56812 25111 0 +ZCorner 56800 25074 0 +ZCorner 56786 25049 0 +ZCorner 56779 25036 0 +ZCorner 56772 25022 0 +ZCorner 56765 25008 0 +ZCorner 56758 24995 0 +ZCorner 56756 24995 0 +ZCorner 56753 24995 0 +ZCorner 56750 24995 0 +ZCorner 56747 24995 0 +ZCorner 56737 24980 0 +ZCorner 56727 24966 0 +ZCorner 56718 24951 0 +ZCorner 56708 24936 0 +ZCorner 56705 24934 0 +ZCorner 56702 24932 0 +ZCorner 56699 24930 0 +ZCorner 56696 24928 0 +ZCorner 56597 24838 0 +ZCorner 56459 24780 0 +ZCorner 56283 24752 0 +ZCorner 56067 24757 0 +ZCorner 55916 24795 0 +ZCorner 55790 24856 0 +ZCorner 55691 24941 0 +ZCorner 55618 25050 0 +ZCorner 55608 25079 0 +ZCorner 55597 25108 0 +ZCorner 55586 25138 0 +ZCorner 55575 25167 0 +ZCorner 55571 25233 0 +ZCorner 55567 25300 0 +ZCorner 55564 25366 0 +ZCorner 55560 25432 0 +ZCorner 55560 25566 0 +ZCorner 55560 25700 0 +ZCorner 55560 25834 0 +ZCorner 55559 25967 1 +ZCorner 54657 26604 0 +ZCorner 54666 26602 0 +ZCorner 54675 26600 0 +ZCorner 54684 26598 0 +ZCorner 54692 26596 0 +ZCorner 54695 26231 0 +ZCorner 54698 25866 0 +ZCorner 54701 25501 0 +ZCorner 54704 25135 0 +ZCorner 54705 25128 0 +ZCorner 54706 25120 0 +ZCorner 54707 25112 0 +ZCorner 54708 25104 0 +ZCorner 54713 25099 0 +ZCorner 54718 25094 0 +ZCorner 54722 25090 0 +ZCorner 54727 25085 0 +ZCorner 54739 25084 0 +ZCorner 54751 25083 0 +ZCorner 54763 25082 0 +ZCorner 54774 25081 0 +ZCorner 54781 25086 0 +ZCorner 54788 25091 0 +ZCorner 54795 25095 0 +ZCorner 54802 25100 0 +ZCorner 54805 25117 0 +ZCorner 54809 25134 0 +ZCorner 54813 25150 0 +ZCorner 54817 25167 0 +ZCorner 54818 25526 0 +ZCorner 54819 25885 0 +ZCorner 54820 26245 0 +ZCorner 54821 26604 0 +ZCorner 54961 26604 0 +ZCorner 55100 26604 0 +ZCorner 55240 26604 0 +ZCorner 55379 26604 0 +ZCorner 55386 26602 0 +ZCorner 55393 26600 0 +ZCorner 55400 26598 0 +ZCorner 55407 26596 0 +ZCorner 55408 26146 0 +ZCorner 55409 25696 0 +ZCorner 55410 25246 0 +ZCorner 55411 24796 0 +ZCorner 55404 24793 0 +ZCorner 55397 24790 0 +ZCorner 55390 24787 0 +ZCorner 55383 24784 0 +ZCorner 55241 24784 0 +ZCorner 55098 24784 0 +ZCorner 54956 24784 0 +ZCorner 54813 24784 0 +ZCorner 54815 24812 0 +ZCorner 54817 24841 0 +ZCorner 54819 24869 0 +ZCorner 54821 24897 0 +ZCorner 54801 24880 0 +ZCorner 54782 24862 0 +ZCorner 54762 24845 0 +ZCorner 54743 24827 0 +ZCorner 54730 24821 0 +ZCorner 54717 24815 0 +ZCorner 54705 24809 0 +ZCorner 54692 24804 0 +ZCorner 54681 24799 0 +ZCorner 54671 24794 0 +ZCorner 54660 24789 0 +ZCorner 54649 24784 0 +ZCorner 54459 24746 0 +ZCorner 54307 24778 0 +ZCorner 54191 24879 0 +ZCorner 54114 25050 0 +ZCorner 54110 25438 0 +ZCorner 54106 25827 0 +ZCorner 54102 26215 0 +ZCorner 54098 26604 0 +ZCorner 54238 26604 0 +ZCorner 54378 26604 0 +ZCorner 54517 26604 0 +ZCorner 54657 26604 0 +ZCorner 54657 26604 0 +ZCorner 54657 26604 0 +ZCorner 54657 26604 0 +ZCorner 54657 26604 1 +ZCorner 53872 25870 0 +ZCorner 53410 25870 0 +ZCorner 52949 25870 0 +ZCorner 52487 25870 0 +ZCorner 52025 25870 0 +ZCorner 51991 25872 0 +ZCorner 51957 25874 0 +ZCorner 51922 25875 0 +ZCorner 51888 25877 0 +ZCorner 51850 25915 0 +ZCorner 51812 25952 0 +ZCorner 51774 25989 0 +ZCorner 51736 26026 0 +ZCorner 51768 26027 0 +ZCorner 51800 26028 0 +ZCorner 51833 26029 0 +ZCorner 51865 26030 0 +ZCorner 52367 26030 0 +ZCorner 52869 26030 0 +ZCorner 53370 26030 0 +ZCorner 53872 26030 0 +ZCorner 53872 25990 0 +ZCorner 53872 25950 0 +ZCorner 53872 25910 0 +ZCorner 53872 25870 1 +$POLYSCORNERS +58524 28521 0 0 +58656 28513 0 0 +58723 28509 0 0 +58789 28506 0 0 +58793 28389 0 0 +58805 28041 0 0 +58862 28030 0 0 +58930 28017 0 0 +58930 26604 0 0 +58624 26598 0 0 +58429 26592 0 0 +58345 26585 0 0 +58371 26577 0 0 +58371 24784 0 0 +58926 24784 0 0 +58922 24837 0 0 +58918 24889 0 0 +58910 24995 0 0 +58987 24888 0 0 +59066 24812 0 0 +59149 24766 0 0 +59234 24749 0 0 +59254 24749 0 0 +59250 25389 0 0 +59219 25392 0 0 +59187 25395 0 0 +59125 25401 0 0 +59121 25401 0 0 +59098 25409 0 0 +59074 25417 0 0 +59051 25425 0 0 +59027 25432 0 0 +58984 25448 0 0 +58952 25516 0 0 +58934 25638 0 0 +58930 25811 0 0 +58930 26604 0 0 +58930 28017 0 0 +58978 28008 0 0 +59035 27998 0 0 +59078 28105 0 0 +59121 28213 0 0 +59207 28427 0 0 +59270 28408 0 0 +59332 28388 0 0 +59394 28369 0 0 +59457 28349 0 0 +59434 28235 0 0 +59410 28121 0 0 +59387 28007 0 0 +59363 27892 0 0 +59469 27846 0 0 +59521 27822 0 0 +59574 27799 0 0 +59580 27805 0 0 +59582 27806 0 0 +59648 27898 0 0 +59715 27990 0 0 +59847 28174 0 0 +59904 28140 0 0 +59961 28107 0 0 +60017 28074 0 0 +60074 28041 0 0 +60023 27935 0 0 +59972 27830 0 0 +59922 27724 0 0 +59871 27619 0 0 +60006 27511 0 0 +60050 27475 0 0 +60113 27526 0 0 +60113 26635 0 0 +59926 26620 0 0 +59703 26577 0 0 +59605 26522 0 0 +59527 26457 0 0 +59470 26383 0 0 +59433 26299 0 0 +59429 26286 0 0 +59419 26258 0 0 +59414 26245 0 0 +59414 26241 0 0 +59410 26233 0 0 +59410 26229 0 0 +59406 26213 0 0 +59406 26209 0 0 +59405 26207 0 0 +59402 26198 0 0 +59402 26186 0 0 +59400 26176 0 0 +59399 26172 0 0 +59398 26167 0 0 +59398 26159 0 0 +59394 26135 0 0 +59394 26124 0 0 +59392 26112 0 0 +59392 26106 0 0 +59391 26100 0 0 +59391 25260 0 0 +59390 25256 0 0 +59390 25241 0 0 +59394 25225 0 0 +59394 25214 0 0 +59398 25198 0 0 +59398 25186 0 0 +59401 25177 0 0 +59402 25175 0 0 +59406 25151 0 0 +59417 25126 0 0 +59427 25100 0 0 +59438 25075 0 0 +59449 25049 0 0 +59519 24937 0 0 +59630 24849 0 0 +59780 24787 0 0 +59968 24749 0 0 +60188 24756 0 0 +60367 24808 0 0 +60506 24906 0 0 +60589 25025 0 0 +60589 24538 0 0 +60589 24526 0 0 +60593 24538 0 0 +60589 24538 0 0 +60589 25025 0 0 +60605 25049 0 0 +60616 25089 0 0 +60626 25128 0 0 +60648 25206 0 0 +60658 25508 0 0 +60663 25660 0 0 +60667 25811 0 0 +60664 25907 0 0 +60660 26002 0 0 +60652 26194 0 0 +60626 26318 0 0 +60589 26391 0 0 +60573 26423 0 0 +60491 26509 0 0 +60382 26577 0 0 +60265 26620 0 0 +60113 26635 0 0 +60113 27526 0 0 +60414 27775 0 0 +60506 27685 0 0 +60551 27640 0 0 +60597 27596 0 0 +60301 27232 0 0 +60336 27186 0 0 +60441 27045 0 0 +60548 27096 0 0 +60589 27115 0 0 +60654 27147 0 0 +60760 27197 0 0 +60867 27248 0 0 +60899 27192 0 0 +60931 27137 0 0 +60964 27081 0 0 +60996 27026 0 0 +60939 26985 0 0 +60883 26944 0 0 +60769 26862 0 0 +60804 26848 0 0 +60866 26856 0 0 +60958 26885 0 0 +61078 26936 0 0 +61132 26943 0 0 +61187 26950 0 0 +61242 26956 0 0 +61296 26963 0 0 +61458 26957 0 0 +61540 26954 0 0 +61551 26953 0 0 +61551 26635 0 0 +61366 26623 0 0 +61148 26584 0 0 +61139 26581 0 0 +61136 26581 0 0 +61132 26577 0 0 +61128 26577 0 0 +61004 26500 0 0 +60911 26412 0 0 +60850 26310 0 0 +60820 26194 0 0 +60804 26010 0 0 +60803 25866 0 0 +60802 25721 0 0 +60801 25577 0 0 +60800 25432 0 0 +60805 25367 0 0 +60810 25301 0 0 +60815 25236 0 0 +60820 25170 0 0 +60830 25140 0 0 +60852 25080 0 0 +60863 25049 0 0 +60882 25021 0 0 +60902 24993 0 0 +60921 24964 0 0 +60941 24936 0 0 +60974 24905 0 0 +61002 24883 0 0 +61026 24869 0 0 +61046 24862 0 0 +61054 24854 0 0 +61066 24850 0 0 +61403 24764 0 0 +61678 24768 0 0 +61890 24863 0 0 +62038 25049 0 0 +62062 25133 0 0 +62073 25175 0 0 +62085 25217 0 0 +62097 25379 0 0 +62101 25432 0 0 +62101 26053 0 0 +62097 26088 0 0 +62093 26124 0 0 +62085 26194 0 0 +62049 26338 0 0 +61993 26450 0 0 +61917 26529 0 0 +61820 26577 0 0 +61703 26619 0 0 +61551 26635 0 0 +61551 26953 0 0 +61621 26951 0 0 +61710 26938 0 0 +61789 26920 0 0 +61857 26900 0 0 +61913 26877 0 0 +61931 26868 0 0 +61949 26860 0 0 +61966 26851 0 0 +61984 26842 0 0 +61984 26951 0 0 +62087 26953 0 0 +62183 26954 0 0 +62183 26604 0 0 +62163 26600 0 0 +62154 26598 0 0 +62144 26596 0 0 +62148 26452 0 0 +62150 26379 0 0 +62152 26307 0 0 +62164 26308 0 0 +62190 26310 0 0 +62202 26311 0 0 +62264 26305 0 0 +62302 26283 0 0 +62318 26246 0 0 +62312 26194 0 0 +62313 25925 0 0 +62314 25657 0 0 +62315 25388 0 0 +62316 25120 0 0 +62175 25120 0 0 +62163 25112 0 0 +62163 24842 0 0 +62165 24840 0 0 +62171 24831 0 0 +62199 24827 0 0 +62286 24824 0 0 +62316 24823 0 0 +62315 24757 0 0 +62314 24690 0 0 +62313 24624 0 0 +62312 24557 0 0 +62323 24553 0 0 +62333 24550 0 0 +62355 24542 0 0 +62909 24542 0 0 +62909 24819 0 0 +62948 24822 0 0 +62960 24823 0 0 +63030 24823 0 0 +63030 25108 0 0 +63027 25109 0 0 +63015 25112 0 0 +63001 25114 0 0 +62988 25116 0 0 +62960 25120 0 0 +62909 25120 0 0 +62909 26194 0 0 +62912 26327 0 0 +62880 26435 0 0 +62813 26518 0 0 +62710 26577 0 0 +62699 26585 0 0 +62664 26592 0 0 +62606 26598 0 0 +62527 26604 0 0 +62183 26604 0 0 +62183 26954 0 0 +62191 26955 0 0 +62294 26957 0 0 +62398 26959 0 0 +62527 26955 0 0 +62623 26949 0 0 +62684 26941 0 0 +62710 26932 0 0 +62809 26897 0 0 +62900 26838 0 0 +62985 26755 0 0 +63061 26647 0 0 +63780 26647 0 0 +63851 26522 0 0 +63888 26442 0 0 +63890 26405 0 0 +63858 26413 0 0 +63097 26413 0 0 +63097 26358 0 0 +63105 26358 0 0 +63105 26030 0 0 +63105 25870 0 0 +65081 25870 0 0 +65237 26026 0 0 +65171 26028 0 0 +65137 26029 0 0 +65104 26030 0 0 +63105 26030 0 0 +63105 26358 0 0 +63952 26358 0 0 +63988 26286 0 0 +64048 26227 0 0 +64133 26182 0 0 +64241 26151 0 0 +64307 26149 0 0 +64341 26148 0 0 +64374 26147 0 0 +64399 26149 0 0 +64425 26151 0 0 +64475 26155 0 0 +64503 26155 0 0 +64512 26158 0 0 +64514 26159 0 0 +64550 26165 0 0 +64567 26168 0 0 +64585 26170 0 0 +64603 26176 0 0 +64622 26182 0 0 +64640 26188 0 0 +64659 26194 0 0 +64667 26202 0 0 +64683 26212 0 0 +64700 26223 0 0 +64716 26234 0 0 +64733 26245 0 0 +64747 26260 0 0 +64760 26276 0 0 +64774 26292 0 0 +64788 26307 0 0 +64802 26327 0 0 +64817 26346 0 0 +64832 26366 0 0 +64846 26385 0 0 +64859 26405 0 0 +64872 26424 0 0 +64884 26444 0 0 +64897 26463 0 0 +64917 26489 0 0 +64926 26501 0 0 +64936 26514 0 0 +64958 26528 0 0 +64968 26535 0 0 +64979 26541 0 0 +65000 26550 0 0 +65006 26553 0 0 +65178 26549 0 0 +65212 26526 0 0 +65254 26475 0 0 +65304 26395 0 0 +65362 26287 0 0 +65452 26197 0 0 +65465 26189 0 0 +65479 26182 0 0 +65507 26166 0 0 +65553 26156 0 0 +65577 26151 0 0 +65600 26146 0 0 +65612 26146 0 0 +65626 26145 0 0 +65639 26143 0 0 +65667 26139 0 0 +65679 26142 0 0 +65692 26144 0 0 +65705 26147 0 0 +65717 26150 0 0 +65745 26150 0 0 +65760 26160 0 0 +65792 26180 0 0 +65807 26189 0 0 +65819 26193 0 0 +65833 26207 0 0 +65846 26221 0 0 +65860 26234 0 0 +65874 26248 0 0 +65886 26263 0 0 +65899 26277 0 0 +65912 26292 0 0 +65924 26307 0 0 +65939 26321 0 0 +65954 26336 0 0 +65968 26351 0 0 +65983 26365 0 0 +65997 26375 0 0 +66010 26385 0 0 +66024 26395 0 0 +66038 26404 0 0 +66049 26407 0 0 +66073 26413 0 0 +66084 26416 0 0 +66088 26416 0 0 +66108 26420 0 0 +66156 26412 0 0 +66193 26400 0 0 +66222 26384 0 0 +66241 26365 0 0 +66285 26309 0 0 +66373 26195 0 0 +66416 26139 0 0 +66455 26109 0 0 +66467 26100 0 0 +66495 26092 0 0 +66508 26088 0 0 +66522 26084 0 0 +66531 26083 0 0 +66539 26082 0 0 +66557 26080 0 0 +66651 26080 0 0 +66664 26085 0 0 +66692 26095 0 0 +66705 26100 0 0 +66714 26105 0 0 +66723 26109 0 0 +66741 26119 0 0 +66747 26125 0 0 +66768 26143 0 0 +66776 26148 0 0 +66784 26154 0 0 +66791 26160 0 0 +66799 26166 0 0 +66812 26170 0 0 +66824 26174 0 0 +66850 26182 0 0 +66858 26183 0 0 +66865 26184 0 0 +66873 26185 0 0 +66881 26185 0 0 +66914 26184 0 0 +66948 26182 0 0 +67014 26178 0 0 +67042 26170 0 0 +67067 26157 0 0 +67090 26139 0 0 +67111 26115 0 0 +67140 26068 0 0 +67161 26012 0 0 +67175 25949 0 0 +67182 25877 0 0 +67245 25802 0 0 +67309 25727 0 0 +67372 25652 0 0 +67436 25576 0 0 +63105 25576 0 0 +63105 25397 0 0 +63409 25401 0 0 +67498 25397 0 0 +67504 25378 0 0 +67510 25360 0 0 +67516 25341 0 0 +67522 25323 0 0 +67653 25170 0 0 +67732 25070 0 0 +67756 25022 0 0 +67725 25026 0 0 +63230 25026 0 0 +63233 25011 0 0 +63235 24997 0 0 +63241 24967 0 0 +63240 24941 0 0 +63239 24914 0 0 +63237 24862 0 0 +64280 24862 0 0 +64306 24890 0 0 +64331 24918 0 0 +64356 24947 0 0 +64382 24975 0 0 +67205 24975 0 0 +67276 24976 0 0 +67348 24974 0 0 +67421 24967 0 0 +67494 24955 0 0 +67495 24977 0 0 +67515 24953 0 0 +67554 24885 0 0 +67611 24772 0 0 +63225 24772 0 0 +63217 24748 0 0 +63199 24702 0 0 +63190 24678 0 0 +63183 24670 0 0 +63175 24663 0 0 +63159 24647 0 0 +63146 24641 0 0 +63134 24635 0 0 +63108 24623 0 0 +63108 24604 0 0 +63102 24458 0 0 +63082 24356 0 0 +63047 24298 0 0 +62999 24284 0 0 +62633 24276 0 0 +62366 24274 0 0 +62199 24278 0 0 +62132 24288 0 0 +62124 24294 0 0 +62120 24296 0 0 +62116 24299 0 0 +62110 24302 0 0 +62105 24305 0 0 +62093 24311 0 0 +62073 24329 0 0 +62064 24337 0 0 +62054 24346 0 0 +62039 24373 0 0 +62034 24381 0 0 +62028 24405 0 0 +62026 24416 0 0 +62023 24428 0 0 +62021 24454 0 0 +62020 24466 0 0 +62019 24479 0 0 +62018 24507 0 0 +62017 24536 0 0 +62015 24592 0 0 +61997 24584 0 0 +61980 24577 0 0 +61962 24569 0 0 +61945 24561 0 0 +61841 24519 0 0 +61666 24497 0 0 +61418 24495 0 0 +61097 24514 0 0 +61062 24431 0 0 +61039 24379 0 0 +60917 24412 0 0 +60699 24488 0 0 +60589 24526 0 0 +60499 24376 0 0 +60468 24327 0 0 +60812 24003 0 0 +60652 23803 0 0 +60552 23867 0 0 +60453 23930 0 0 +60353 23994 0 0 +60254 24057 0 0 +60174 23975 0 0 +60133 23934 0 0 +60093 23893 0 0 +60156 23794 0 0 +60218 23696 0 0 +60281 23597 0 0 +60343 23499 0 0 +60292 23460 0 0 +60240 23420 0 0 +60136 23342 0 0 +59820 23678 0 0 +59720 23620 0 0 +59671 23590 0 0 +59621 23561 0 0 +59659 23450 0 0 +59697 23338 0 0 +59773 23116 0 0 +59714 23090 0 0 +59654 23063 0 0 +59595 23037 0 0 +59535 23010 0 0 +59478 23112 0 0 +59422 23214 0 0 +59365 23315 0 0 +59308 23417 0 0 +59308 23421 0 0 +59306 23419 0 0 +59306 23418 0 0 +59305 23417 0 0 +59195 23383 0 0 +59141 23367 0 0 +59086 23350 0 0 +59096 23233 0 0 +59105 23116 0 0 +59125 22882 0 0 +58972 22853 0 0 +58878 22839 0 0 +58837 22962 0 0 +58807 23069 0 0 +58777 23177 0 0 +58746 23284 0 0 +58689 23282 0 0 +58573 23278 0 0 +58516 23276 0 0 +58498 23160 0 0 +58481 23044 0 0 +58463 22928 0 0 +58445 22811 0 0 +58313 22819 0 0 +58246 22823 0 0 +58180 22827 0 0 +58174 23061 0 0 +58171 23179 0 0 +58168 23296 0 0 +58112 23305 0 0 +58055 23315 0 0 +57999 23325 0 0 +57942 23335 0 0 +57897 23227 0 0 +57807 23013 0 0 +57762 22905 0 0 +57700 22925 0 0 +57637 22944 0 0 +57575 22964 0 0 +57512 22983 0 0 +57537 23098 0 0 +57585 23326 0 0 +57610 23440 0 0 +57557 23463 0 0 +57504 23485 0 0 +57451 23508 0 0 +57399 23530 0 0 +57328 23437 0 0 +57258 23345 0 0 +57118 23159 0 0 +57010 23227 0 0 +56957 23262 0 0 +56903 23296 0 0 +56953 23400 0 0 +57003 23505 0 0 +57052 23609 0 0 +57102 23714 0 0 +56918 23854 0 0 +56829 23780 0 0 +56649 23632 0 0 +56559 23557 0 0 +56467 23647 0 0 +56422 23692 0 0 +56376 23737 0 0 +56598 24007 0 0 +56672 24096 0 0 +56532 24284 0 0 +56524 24288 0 0 +56528 24284 0 0 +56423 24232 0 0 +56317 24180 0 0 +56212 24129 0 0 +56106 24077 0 0 +56074 24133 0 0 +56042 24188 0 0 +56010 24244 0 0 +55977 24300 0 0 +56045 24349 0 0 +56112 24399 0 0 +56180 24449 0 0 +56247 24499 0 0 +56159 24507 0 0 +56071 24514 0 0 +55895 24530 0 0 +55846 24551 0 0 +55796 24571 0 0 +55746 24592 0 0 +55686 24616 0 0 +55677 24620 0 0 +55657 24628 0 0 +55651 24601 0 0 +55649 24593 0 0 +55641 24581 0 0 +55638 24575 0 0 +55634 24569 0 0 +55629 24563 0 0 +55624 24558 0 0 +55614 24546 0 0 +55600 24541 0 0 +55587 24536 0 0 +55559 24526 0 0 +54263 24522 0 0 +54182 24536 0 0 +54102 24581 0 0 +54025 24660 0 0 +53950 24772 0 0 +49354 24772 0 0 +49414 24885 0 0 +49454 24953 0 0 +49476 24977 0 0 +49479 24956 0 0 +52431 24956 0 0 +52443 24971 0 0 +52470 24957 0 0 +52511 24915 0 0 +52568 24846 0 0 +53911 24846 0 0 +53902 24858 0 0 +53900 24862 0 0 +53892 24880 0 0 +53888 24888 0 0 +53884 24897 0 0 +53883 24929 0 0 +53882 24962 0 0 +53880 25026 0 0 +49240 25026 0 0 +49240 25073 0 0 +49339 25192 0 0 +49413 25284 0 0 +49462 25350 0 0 +49486 25390 0 0 +49488 25392 0 0 +49490 25395 0 0 +49490 25397 0 0 +53571 25401 0 0 +53647 25400 0 0 +53724 25399 0 0 +53876 25397 0 0 +53876 25577 0 0 +49537 25577 0 0 +49599 25652 0 0 +49662 25727 0 0 +49724 25803 0 0 +49787 25878 0 0 +49793 25948 0 0 +49808 26013 0 0 +49832 26071 0 0 +49865 26124 0 0 +49879 26141 0 0 +49902 26158 0 0 +49934 26172 0 0 +49974 26182 0 0 +50003 26183 0 0 +50087 26186 0 0 +50123 26182 0 0 +50135 26179 0 0 +50146 26175 0 0 +50170 26167 0 0 +50177 26161 0 0 +50201 26143 0 0 +50209 26138 0 0 +50217 26132 0 0 +50224 26126 0 0 +50232 26120 0 0 +50268 26100 0 0 +50281 26096 0 0 +50295 26091 0 0 +50308 26086 0 0 +50322 26081 0 0 +50412 26081 0 0 +50422 26082 0 0 +50431 26083 0 0 +50451 26085 0 0 +50487 26086 0 0 +50550 26135 0 0 +50638 26234 0 0 +50752 26382 0 0 +50756 26386 0 0 +50760 26389 0 0 +50763 26393 0 0 +50767 26397 0 0 +50791 26403 0 0 +50814 26409 0 0 +50838 26415 0 0 +50861 26421 0 0 +50881 26417 0 0 +50885 26417 0 0 +50896 26414 0 0 +50920 26408 0 0 +50931 26405 0 0 +50961 26385 0 0 +50975 26376 0 0 +50990 26366 0 0 +51049 26307 0 0 +51062 26292 0 0 +51076 26276 0 0 +51090 26261 0 0 +51103 26245 0 0 +51154 26194 0 0 +51162 26190 0 0 +51178 26180 0 0 +51193 26171 0 0 +51209 26161 0 0 +51224 26151 0 0 +51252 26151 0 0 +51262 26148 0 0 +51295 26139 0 0 +51310 26141 0 0 +51326 26143 0 0 +51341 26145 0 0 +51357 26147 0 0 +51369 26147 0 0 +51392 26152 0 0 +51416 26157 0 0 +51439 26162 0 0 +51463 26167 0 0 +51483 26180 0 0 +51504 26194 0 0 +51524 26208 0 0 +51545 26221 0 0 +51569 26239 0 0 +51601 26280 0 0 +51641 26344 0 0 +51689 26432 0 0 +51709 26457 0 0 +51728 26481 0 0 +51748 26505 0 0 +51767 26530 0 0 +51787 26542 0 0 +51797 26547 0 0 +51807 26553 0 0 +51865 26553 0 0 +51865 26030 0 0 +51833 26029 0 0 +51800 26028 0 0 +51736 26026 0 0 +51850 25915 0 0 +51888 25877 0 0 +51922 25875 0 0 +51957 25874 0 0 +52025 25870 0 0 +53872 25870 0 0 +53872 26030 0 0 +51865 26030 0 0 +51865 26553 0 0 +51963 26553 0 0 +51969 26550 0 0 +51983 26544 0 0 +51990 26542 0 0 +52000 26535 0 0 +52033 26514 0 0 +52044 26502 0 0 +52054 26489 0 0 +52076 26463 0 0 +52090 26444 0 0 +52103 26424 0 0 +52117 26405 0 0 +52131 26385 0 0 +52144 26366 0 0 +52158 26346 0 0 +52172 26327 0 0 +52185 26307 0 0 +52199 26292 0 0 +52227 26260 0 0 +52240 26245 0 0 +52257 26234 0 0 +52273 26223 0 0 +52290 26212 0 0 +52306 26202 0 0 +52310 26198 0 0 +52313 26196 0 0 +52315 26194 0 0 +52332 26188 0 0 +52350 26182 0 0 +52367 26176 0 0 +52385 26170 0 0 +52402 26168 0 0 +52420 26165 0 0 +52437 26162 0 0 +52455 26159 0 0 +52467 26155 0 0 +52494 26155 0 0 +52519 26153 0 0 +52545 26151 0 0 +52570 26149 0 0 +52596 26147 0 0 +52747 26154 0 0 +52866 26191 0 0 +52953 26259 0 0 +53010 26358 0 0 +53869 26358 0 0 +53869 26413 0 0 +53111 26413 0 0 +53085 26418 0 0 +53089 26459 0 0 +53123 26536 0 0 +53189 26647 0 0 +53865 26647 0 0 +53863 26726 0 0 +53895 26798 0 0 +53960 26863 0 0 +54060 26920 0 0 +54369 26921 0 0 +54821 26922 0 0 +54821 26604 0 0 +54820 26245 0 0 +54819 25885 0 0 +54817 25167 0 0 +54813 25150 0 0 +54809 25134 0 0 +54805 25117 0 0 +54802 25100 0 0 +54795 25095 0 0 +54788 25091 0 0 +54774 25081 0 0 +54763 25082 0 0 +54727 25085 0 0 +54708 25104 0 0 +54705 25128 0 0 +54704 25135 0 0 +54701 25501 0 0 +54692 26596 0 0 +54684 26598 0 0 +54657 26604 0 0 +54098 26604 0 0 +54102 26215 0 0 +54106 25827 0 0 +54110 25438 0 0 +54114 25050 0 0 +54191 24879 0 0 +54307 24778 0 0 +54459 24746 0 0 +54649 24784 0 0 +54671 24794 0 0 +54681 24799 0 0 +54692 24804 0 0 +54705 24809 0 0 +54717 24815 0 0 +54743 24827 0 0 +54762 24845 0 0 +54782 24862 0 0 +54801 24880 0 0 +54821 24897 0 0 +54817 24841 0 0 +54815 24812 0 0 +54813 24784 0 0 +55383 24784 0 0 +55411 24796 0 0 +55407 26596 0 0 +55379 26604 0 0 +54821 26604 0 0 +54821 26922 0 0 +54989 26923 0 0 +55298 26924 0 0 +55425 26925 0 0 +55507 26924 0 0 +55545 26918 0 0 +55540 26908 0 0 +55545 26905 0 0 +55560 26893 0 0 +55566 26886 0 0 +55571 26879 0 0 +55583 26865 0 0 +55589 26854 0 0 +55601 26830 0 0 +55607 26819 0 0 +55611 26805 0 0 +55614 26791 0 0 +55618 26778 0 0 +55622 26764 0 0 +55643 26776 0 0 +55663 26787 0 0 +55684 26799 0 0 +55704 26811 0 0 +55726 26835 0 0 +55747 26860 0 0 +55769 26884 0 0 +55790 26908 0 0 +55810 26920 0 0 +55819 26926 0 0 +55829 26932 0 0 +55855 26936 0 0 +55905 26944 0 0 +55931 26947 0 0 +56063 26945 0 0 +56194 26942 0 0 +56285 26939 0 0 +56285 26635 0 0 +56097 26621 0 0 +55872 26577 0 0 +55744 26487 0 0 +55652 26394 0 0 +55596 26297 0 0 +55575 26194 0 0 +55571 26137 0 0 +55567 26081 0 0 +55559 25967 0 0 +55560 25834 0 0 +55560 25432 0 0 +55564 25366 0 0 +55567 25300 0 0 +55571 25233 0 0 +55575 25167 0 0 +55586 25138 0 0 +55597 25108 0 0 +55608 25079 0 0 +55618 25050 0 0 +55691 24941 0 0 +55790 24856 0 0 +55916 24795 0 0 +56067 24757 0 0 +56283 24752 0 0 +56459 24780 0 0 +56597 24838 0 0 +56696 24928 0 0 +56708 24936 0 0 +56718 24951 0 0 +56727 24966 0 0 +56737 24980 0 0 +56747 24995 0 0 +56758 24995 0 0 +56765 25008 0 0 +56779 25036 0 0 +56786 25049 0 0 +56800 25074 0 0 +56812 25111 0 0 +56823 25161 0 0 +56833 25225 0 0 +56837 25277 0 0 +56840 25329 0 0 +56844 25380 0 0 +56848 25432 0 0 +56850 25702 0 0 +56851 25836 0 0 +56852 25971 0 0 +56842 26083 0 0 +56837 26138 0 0 +56832 26194 0 0 +56822 26235 0 0 +56800 26317 0 0 +56790 26358 0 0 +56766 26403 0 0 +56744 26438 0 0 +56723 26463 0 0 +56704 26475 0 0 +56692 26493 0 0 +56688 26498 0 0 +56667 26510 0 0 +56661 26514 0 0 +56641 26534 0 0 +56620 26544 0 0 +56598 26555 0 0 +56577 26566 0 0 +56555 26577 0 0 +56438 26621 0 0 +56285 26635 0 0 +56285 26939 0 0 +56458 26936 0 0 +56468 26954 0 0 +56477 26973 0 0 +56487 26991 0 0 +56497 27010 0 0 +56161 27322 0 0 +56215 27399 0 0 +56260 27459 0 0 +56294 27503 0 0 +56317 27533 0 0 +56415 27468 0 0 +56513 27402 0 0 +56610 27337 0 0 +56708 27272 0 0 +56794 27358 0 0 +56837 27400 0 0 +56879 27443 0 0 +56880 27444 0 0 +56882 27445 0 0 +56884 27447 0 0 +56876 27443 0 0 +56812 27541 0 0 +56749 27639 0 0 +56685 27736 0 0 +56622 27834 0 0 +56688 27887 0 0 +56745 27930 0 0 +56793 27962 0 0 +56833 27982 0 0 +57149 27654 0 0 +57198 27684 0 0 +57247 27713 0 0 +57295 27742 0 0 +57344 27771 0 0 +57288 27933 0 0 +57243 28062 0 0 +57209 28159 0 0 +57188 28224 0 0 +57248 28246 0 0 +57279 28257 0 0 +57309 28267 0 0 +57374 28299 0 0 +57416 28317 0 0 +57437 28322 0 0 +57438 28314 0 0 +57494 28214 0 0 +57608 28012 0 0 +57664 27912 0 0 +57681 27917 0 0 +57681 26635 0 0 +57503 26620 0 0 +57289 26576 0 0 +57174 26500 0 0 +57087 26411 0 0 +57028 26309 0 0 +56996 26194 0 0 +56991 26109 0 0 +56987 26024 0 0 +56977 25854 0 0 +57481 25854 0 0 +57481 25994 0 0 +57489 25998 0 0 +57481 26014 0 0 +57481 26092 0 0 +57489 26092 0 0 +57481 26100 0 0 +57483 26115 0 0 +57485 26129 0 0 +57487 26144 0 0 +57489 26158 0 0 +57492 26158 0 0 +57491 26160 0 0 +57491 26162 0 0 +57489 26166 0 0 +57491 26200 0 0 +57491 26216 0 0 +57492 26233 0 0 +57496 26245 0 0 +57498 26250 0 0 +57500 26256 0 0 +57516 26288 0 0 +57518 26289 0 0 +57524 26295 0 0 +57542 26298 0 0 +57561 26301 0 0 +57579 26304 0 0 +57598 26307 0 0 +57609 26298 0 0 +57619 26289 0 0 +57630 26281 0 0 +57641 26272 0 0 +57647 26252 0 0 +57653 26233 0 0 +57658 26213 0 0 +57664 26194 0 0 +57664 25186 0 0 +57662 25168 0 0 +57660 25149 0 0 +57658 25131 0 0 +57657 25112 0 0 +57643 25098 0 0 +57636 25092 0 0 +57629 25085 0 0 +57555 25085 0 0 +57545 25098 0 0 +57536 25112 0 0 +57526 25125 0 0 +57516 25139 0 0 +57516 25166 0 0 +57515 25242 0 0 +57512 25467 0 0 +56985 25467 0 0 +56981 25449 0 0 +56979 25441 0 0 +56977 25432 0 0 +56983 25367 0 0 +56995 25239 0 0 +57001 25174 0 0 +57010 25143 0 0 +57020 25112 0 0 +57030 25080 0 0 +57040 25049 0 0 +57122 24928 0 0 +57232 24837 0 0 +57372 24778 0 0 +57539 24748 0 0 +57752 24759 0 0 +57929 24812 0 0 +58070 24909 0 0 +58176 25049 0 0 +58186 25081 0 0 +58195 25114 0 0 +58215 25178 0 0 +58221 25608 0 0 +58224 25822 0 0 +58227 26037 0 0 +58209 26154 0 0 +58203 26194 0 0 +58173 26321 0 0 +58118 26427 0 0 +58037 26513 0 0 +57930 26576 0 0 +57824 26620 0 0 +57681 26635 0 0 +57681 27917 0 0 +57719 27929 0 0 +57774 27947 0 0 +57828 27965 0 0 +57883 27982 0 0 +57872 28099 0 0 +57862 28216 0 0 +57851 28334 0 0 +57840 28451 0 0 +57905 28461 0 0 +57969 28472 0 0 +58034 28483 0 0 +58098 28494 0 0 +58130 28382 0 0 +58162 28269 0 0 +58195 28157 0 0 +58227 28045 0 0 +58284 28048 0 0 +58342 28050 0 0 +58400 28053 0 0 +58457 28056 0 0 +58474 28172 0 0 +58490 28289 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660001 0 "" +ZLayer 20 +ZAux 45 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56180 25085 0 +ZCorner 56192 25084 0 +ZCorner 56204 25083 0 +ZCorner 56216 25082 0 +ZCorner 56227 25081 0 +ZCorner 56235 25085 0 +ZCorner 56243 25089 0 +ZCorner 56251 25093 0 +ZCorner 56259 25096 0 +ZCorner 56262 25109 0 +ZCorner 56264 25122 0 +ZCorner 56267 25135 0 +ZCorner 56270 25147 0 +ZCorner 56271 25409 0 +ZCorner 56272 25671 0 +ZCorner 56273 25932 0 +ZCorner 56274 26194 0 +ZCorner 56270 26215 0 +ZCorner 56267 26237 0 +ZCorner 56263 26258 0 +ZCorner 56259 26280 0 +ZCorner 56249 26287 0 +ZCorner 56239 26294 0 +ZCorner 56229 26300 0 +ZCorner 56220 26307 0 +ZCorner 56210 26305 0 +ZCorner 56200 26303 0 +ZCorner 56190 26301 0 +ZCorner 56181 26299 0 +ZCorner 56174 26294 0 +ZCorner 56167 26288 0 +ZCorner 56160 26282 0 +ZCorner 56153 26276 0 +ZCorner 56150 26255 0 +ZCorner 56148 26235 0 +ZCorner 56145 26214 0 +ZCorner 56142 26194 0 +ZCorner 56143 25927 0 +ZCorner 56144 25661 0 +ZCorner 56145 25394 0 +ZCorner 56145 25128 0 +ZCorner 56154 25117 0 +ZCorner 56163 25106 0 +ZCorner 56172 25096 0 +ZCorner 56180 25085 1 +$POLYSCORNERS +56220 26307 0 0 +56229 26300 0 0 +56239 26294 0 0 +56259 26280 0 0 +56263 26258 0 0 +56267 26237 0 0 +56270 26215 0 0 +56274 26194 0 0 +56273 25932 0 0 +56272 25671 0 0 +56270 25147 0 0 +56267 25135 0 0 +56264 25122 0 0 +56262 25109 0 0 +56259 25096 0 0 +56251 25093 0 0 +56227 25081 0 0 +56216 25082 0 0 +56180 25085 0 0 +56172 25096 0 0 +56163 25106 0 0 +56145 25128 0 0 +56145 25394 0 0 +56144 25661 0 0 +56143 25927 0 0 +56142 26194 0 0 +56145 26214 0 0 +56148 26235 0 0 +56150 26255 0 0 +56153 26276 0 0 +56174 26294 0 0 +56181 26299 0 0 +56190 26301 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660002 0 "" +ZLayer 20 +ZAux 53 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 61386 25174 0 +ZCorner 61389 25158 0 +ZCorner 61392 25141 0 +ZCorner 61395 25125 0 +ZCorner 61398 25108 0 +ZCorner 61405 25101 0 +ZCorner 61412 25094 0 +ZCorner 61418 25088 0 +ZCorner 61425 25081 0 +ZCorner 61439 25084 0 +ZCorner 61453 25087 0 +ZCorner 61466 25090 0 +ZCorner 61480 25093 0 +ZCorner 61486 25105 0 +ZCorner 61492 25118 0 +ZCorner 61497 25131 0 +ZCorner 61503 25143 0 +ZCorner 61504 25406 0 +ZCorner 61505 25669 0 +ZCorner 61506 25931 0 +ZCorner 61507 26194 0 +ZCorner 61504 26212 0 +ZCorner 61501 26231 0 +ZCorner 61498 26249 0 +ZCorner 61495 26268 0 +ZCorner 61491 26276 0 +ZCorner 61486 26284 0 +ZCorner 61481 26292 0 +ZCorner 61476 26299 0 +ZCorner 61467 26301 0 +ZCorner 61458 26303 0 +ZCorner 61449 26305 0 +ZCorner 61441 26307 0 +ZCorner 61433 26304 0 +ZCorner 61425 26301 0 +ZCorner 61417 26298 0 +ZCorner 61409 26295 0 +ZCorner 61406 26290 0 +ZCorner 61404 26284 0 +ZCorner 61401 26278 0 +ZCorner 61398 26272 0 +ZCorner 61395 26253 0 +ZCorner 61392 26233 0 +ZCorner 61389 26213 0 +ZCorner 61386 26194 0 +ZCorner 61386 25939 0 +ZCorner 61386 25684 0 +ZCorner 61386 25429 0 +ZCorner 61386 25174 0 +ZCorner 61386 25174 0 +ZCorner 61386 25174 0 +ZCorner 61386 25174 0 +ZCorner 61386 25174 1 +$POLYSCORNERS +61441 26307 0 0 +61449 26305 0 0 +61476 26299 0 0 +61481 26292 0 0 +61491 26276 0 0 +61495 26268 0 0 +61498 26249 0 0 +61501 26231 0 0 +61504 26212 0 0 +61507 26194 0 0 +61506 25931 0 0 +61505 25669 0 0 +61503 25143 0 0 +61497 25131 0 0 +61492 25118 0 0 +61486 25105 0 0 +61480 25093 0 0 +61466 25090 0 0 +61453 25087 0 0 +61425 25081 0 0 +61398 25108 0 0 +61395 25125 0 0 +61392 25141 0 0 +61389 25158 0 0 +61386 25174 0 0 +61386 26194 0 0 +61389 26213 0 0 +61395 26253 0 0 +61398 26272 0 0 +61404 26284 0 0 +61406 26290 0 0 +61409 26295 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660003 0 "" +ZLayer 20 +ZAux 49 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59953 25159 0 +ZCorner 59957 25143 0 +ZCorner 59961 25128 0 +ZCorner 59965 25112 0 +ZCorner 59969 25096 0 +ZCorner 59974 25092 0 +ZCorner 59980 25088 0 +ZCorner 59986 25085 0 +ZCorner 59992 25081 0 +ZCorner 60044 25070 0 +ZCorner 60077 25125 0 +ZCorner 60093 25245 0 +ZCorner 60090 25432 0 +ZCorner 60090 25622 0 +ZCorner 60090 25813 0 +ZCorner 60090 26003 0 +ZCorner 60090 26194 0 +ZCorner 60086 26213 0 +ZCorner 60082 26233 0 +ZCorner 60078 26252 0 +ZCorner 60074 26272 0 +ZCorner 60069 26278 0 +ZCorner 60064 26285 0 +ZCorner 60059 26292 0 +ZCorner 60054 26299 0 +ZCorner 60042 26301 0 +ZCorner 60029 26303 0 +ZCorner 60016 26305 0 +ZCorner 60004 26307 0 +ZCorner 59999 26307 0 +ZCorner 59994 26307 0 +ZCorner 59989 26307 0 +ZCorner 59984 26307 0 +ZCorner 59978 26300 0 +ZCorner 59972 26293 0 +ZCorner 59967 26286 0 +ZCorner 59961 26280 0 +ZCorner 59959 26258 0 +ZCorner 59957 26237 0 +ZCorner 59955 26215 0 +ZCorner 59953 26194 0 +ZCorner 59953 25935 0 +ZCorner 59953 25676 0 +ZCorner 59953 25418 0 +ZCorner 59953 25159 0 +ZCorner 59953 25159 0 +ZCorner 59953 25159 0 +ZCorner 59953 25159 0 +ZCorner 59953 25159 1 +$POLYSCORNERS +60004 26307 0 0 +60016 26305 0 0 +60042 26301 0 0 +60054 26299 0 0 +60069 26278 0 0 +60074 26272 0 0 +60078 26252 0 0 +60082 26233 0 0 +60086 26213 0 0 +60090 26194 0 0 +60090 25432 0 0 +60093 25245 0 0 +60077 25125 0 0 +60044 25070 0 0 +59992 25081 0 0 +59986 25085 0 0 +59980 25088 0 0 +59974 25092 0 0 +59969 25096 0 0 +59961 25128 0 0 +59957 25143 0 0 +59953 25159 0 0 +59953 26194 0 0 +59955 26215 0 0 +59957 26237 0 0 +59959 26258 0 0 +59961 26280 0 0 +59967 26286 0 0 +59972 26293 0 0 +59984 26307 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660004 0 "" +ZLayer 20 +ZAux 41 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56606 22603 0 +ZCorner 56612 22598 0 +ZCorner 56618 22593 0 +ZCorner 56624 22589 0 +ZCorner 56630 22584 0 +ZCorner 56670 22596 0 +ZCorner 56708 22604 0 +ZCorner 56746 22606 0 +ZCorner 56786 22603 0 +ZCorner 56789 22603 0 +ZCorner 56792 22603 0 +ZCorner 56795 22603 0 +ZCorner 56798 22603 0 +ZCorner 56802 22613 0 +ZCorner 56806 22623 0 +ZCorner 56809 22632 0 +ZCorner 56813 22642 0 +ZCorner 56786 22643 0 +ZCorner 56759 22644 0 +ZCorner 56731 22645 0 +ZCorner 56704 22646 0 +ZCorner 56708 22652 0 +ZCorner 56712 22658 0 +ZCorner 56716 22664 0 +ZCorner 56720 22670 0 +ZCorner 56720 22671 0 +ZCorner 56720 22672 0 +ZCorner 56720 22673 0 +ZCorner 56720 22673 0 +ZCorner 56755 22731 0 +ZCorner 56790 22789 0 +ZCorner 56825 22846 0 +ZCorner 56860 22904 0 +ZCorner 56851 22910 0 +ZCorner 56841 22916 0 +ZCorner 56831 22921 0 +ZCorner 56821 22927 0 +ZCorner 56768 22846 0 +ZCorner 56714 22765 0 +ZCorner 56660 22684 0 +ZCorner 56606 22603 1 +$POLYSCORNERS +56821 22927 0 0 +56831 22921 0 0 +56841 22916 0 0 +56851 22910 0 0 +56860 22904 0 0 +56825 22846 0 0 +56790 22789 0 0 +56720 22673 0 0 +56720 22670 0 0 +56704 22646 0 0 +56731 22645 0 0 +56759 22644 0 0 +56813 22642 0 0 +56809 22632 0 0 +56806 22623 0 0 +56798 22603 0 0 +56786 22603 0 0 +56746 22606 0 0 +56708 22604 0 0 +56670 22596 0 0 +56630 22584 0 0 +56624 22589 0 0 +56618 22593 0 0 +56606 22603 0 0 +56768 22846 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660005 0 "" +ZLayer 20 +ZAux 50 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56665 22931 0 +ZCorner 56665 22932 0 +ZCorner 56665 22933 0 +ZCorner 56665 22934 0 +ZCorner 56665 22935 0 +ZCorner 56667 22940 0 +ZCorner 56669 22945 0 +ZCorner 56671 22950 0 +ZCorner 56673 22955 0 +ZCorner 56642 23043 0 +ZCorner 56594 23090 0 +ZCorner 56530 23095 0 +ZCorner 56450 23060 0 +ZCorner 56373 22972 0 +ZCorner 56334 22893 0 +ZCorner 56333 22825 0 +ZCorner 56372 22767 0 +ZCorner 56452 22734 0 +ZCorner 56527 22750 0 +ZCorner 56599 22816 0 +ZCorner 56665 22931 1 +ZCorner 56384 22826 0 +ZCorner 56384 22837 0 +ZCorner 56384 22847 0 +ZCorner 56384 22858 0 +ZCorner 56384 22869 0 +ZCorner 56387 22875 0 +ZCorner 56390 22880 0 +ZCorner 56393 22886 0 +ZCorner 56395 22892 0 +ZCorner 56450 22976 0 +ZCorner 56500 23030 0 +ZCorner 56548 23052 0 +ZCorner 56591 23044 0 +ZCorner 56618 23000 0 +ZCorner 56617 22948 0 +ZCorner 56587 22888 0 +ZCorner 56528 22822 0 +ZCorner 56515 22811 0 +ZCorner 56501 22800 0 +ZCorner 56487 22790 0 +ZCorner 56473 22779 0 +ZCorner 56460 22780 0 +ZCorner 56446 22781 0 +ZCorner 56433 22782 0 +ZCorner 56419 22783 0 +ZCorner 56410 22794 0 +ZCorner 56401 22804 0 +ZCorner 56393 22815 0 +ZCorner 56384 22826 1 +$POLYSCORNERS +56530 23095 0 0 +56548 23093 0 0 +56548 23052 0 0 +56500 23030 0 0 +56450 22976 0 0 +56395 22892 0 0 +56393 22886 0 0 +56390 22880 0 0 +56387 22875 0 0 +56384 22869 0 0 +56384 22826 0 0 +56393 22815 0 0 +56401 22804 0 0 +56410 22794 0 0 +56419 22783 0 0 +56433 22782 0 0 +56446 22781 0 0 +56460 22780 0 0 +56473 22779 0 0 +56487 22790 0 0 +56501 22800 0 0 +56515 22811 0 0 +56528 22822 0 0 +56587 22888 0 0 +56617 22948 0 0 +56618 23000 0 0 +56591 23044 0 0 +56548 23052 0 0 +56548 23093 0 0 +56594 23090 0 0 +56642 23043 0 0 +56673 22955 0 0 +56665 22935 0 0 +56665 22931 0 0 +56599 22816 0 0 +56527 22750 0 0 +56452 22734 0 0 +56372 22767 0 0 +56333 22825 0 0 +56334 22893 0 0 +56373 22972 0 0 +56450 23060 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660006 0 "" +ZLayer 20 +ZAux 70 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56966 22720 0 +ZCorner 56898 22599 0 +ZCorner 56878 22504 0 +ZCorner 56904 22436 0 +ZCorner 56977 22396 0 +ZCorner 57057 22404 0 +ZCorner 57119 22452 0 +ZCorner 57165 22539 0 +ZCorner 57196 22666 0 +ZCorner 57191 22678 0 +ZCorner 57186 22689 0 +ZCorner 57181 22701 0 +ZCorner 57177 22713 0 +ZCorner 57171 22720 0 +ZCorner 57165 22728 0 +ZCorner 57159 22736 0 +ZCorner 57153 22744 0 +ZCorner 57140 22750 0 +ZCorner 57128 22756 0 +ZCorner 57115 22761 0 +ZCorner 57102 22767 0 +ZCorner 57088 22767 0 +ZCorner 57073 22767 0 +ZCorner 57058 22767 0 +ZCorner 57044 22767 0 +ZCorner 57037 22765 0 +ZCorner 57030 22763 0 +ZCorner 57023 22761 0 +ZCorner 57017 22759 0 +ZCorner 57004 22750 0 +ZCorner 56991 22740 0 +ZCorner 56979 22730 0 +ZCorner 56966 22720 1 +ZCorner 56935 22486 0 +ZCorner 56936 22498 0 +ZCorner 56937 22510 0 +ZCorner 56937 22521 0 +ZCorner 56938 22533 0 +ZCorner 56973 22629 0 +ZCorner 57011 22694 0 +ZCorner 57052 22727 0 +ZCorner 57095 22728 0 +ZCorner 57105 22719 0 +ZCorner 57116 22711 0 +ZCorner 57127 22702 0 +ZCorner 57138 22693 0 +ZCorner 57139 22678 0 +ZCorner 57139 22662 0 +ZCorner 57140 22646 0 +ZCorner 57141 22631 0 +ZCorner 57127 22597 0 +ZCorner 57112 22564 0 +ZCorner 57098 22531 0 +ZCorner 57083 22498 0 +ZCorner 57074 22486 0 +ZCorner 57065 22474 0 +ZCorner 57057 22463 0 +ZCorner 57048 22451 0 +ZCorner 57035 22446 0 +ZCorner 57022 22441 0 +ZCorner 57010 22436 0 +ZCorner 56997 22431 0 +ZCorner 56986 22437 0 +ZCorner 56976 22443 0 +ZCorner 56965 22449 0 +ZCorner 56954 22455 0 +ZCorner 56949 22463 0 +ZCorner 56944 22470 0 +ZCorner 56939 22478 0 +ZCorner 56935 22486 1 +$POLYSCORNERS +57102 22767 0 0 +57115 22761 0 0 +57128 22756 0 0 +57140 22750 0 0 +57153 22744 0 0 +57171 22720 0 0 +57177 22713 0 0 +57181 22701 0 0 +57186 22689 0 0 +57191 22678 0 0 +57196 22666 0 0 +57165 22539 0 0 +57119 22452 0 0 +57057 22404 0 0 +56977 22396 0 0 +56904 22436 0 0 +56878 22504 0 0 +56898 22599 0 0 +56966 22720 0 0 +56979 22730 0 0 +56991 22740 0 0 +57004 22750 0 0 +57017 22759 0 0 +57023 22761 0 0 +57044 22767 0 0 +57095 22767 0 0 +57095 22728 0 0 +57052 22727 0 0 +57011 22694 0 0 +56973 22629 0 0 +56938 22533 0 0 +56937 22521 0 0 +56937 22510 0 0 +56935 22486 0 0 +56939 22478 0 0 +56944 22470 0 0 +56949 22463 0 0 +56954 22455 0 0 +56976 22443 0 0 +56986 22437 0 0 +56997 22431 0 0 +57010 22436 0 0 +57022 22441 0 0 +57048 22451 0 0 +57057 22463 0 0 +57065 22474 0 0 +57083 22498 0 0 +57098 22531 0 0 +57112 22564 0 0 +57127 22597 0 0 +57141 22631 0 0 +57140 22646 0 0 +57139 22662 0 0 +57139 22678 0 0 +57138 22693 0 0 +57116 22711 0 0 +57105 22719 0 0 +57095 22728 0 0 +57095 22767 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660007 0 "" +ZLayer 20 +ZAux 66 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56431 23134 0 +ZCorner 56431 23138 0 +ZCorner 56431 23142 0 +ZCorner 56431 23146 0 +ZCorner 56431 23150 0 +ZCorner 56406 23238 0 +ZCorner 56361 23285 0 +ZCorner 56298 23292 0 +ZCorner 56216 23259 0 +ZCorner 56128 23177 0 +ZCorner 56087 23098 0 +ZCorner 56093 23024 0 +ZCorner 56145 22955 0 +ZCorner 56213 22933 0 +ZCorner 56282 22955 0 +ZCorner 56354 23022 0 +ZCorner 56431 23134 1 +ZCorner 56247 22998 0 +ZCorner 56237 22994 0 +ZCorner 56228 22990 0 +ZCorner 56218 22986 0 +ZCorner 56208 22982 0 +ZCorner 56196 22985 0 +ZCorner 56185 22988 0 +ZCorner 56173 22991 0 +ZCorner 56161 22994 0 +ZCorner 56154 23005 0 +ZCorner 56148 23015 0 +ZCorner 56141 23026 0 +ZCorner 56134 23037 0 +ZCorner 56135 23049 0 +ZCorner 56136 23062 0 +ZCorner 56137 23075 0 +ZCorner 56138 23087 0 +ZCorner 56143 23092 0 +ZCorner 56148 23097 0 +ZCorner 56153 23102 0 +ZCorner 56157 23107 0 +ZCorner 56162 23116 0 +ZCorner 56167 23125 0 +ZCorner 56172 23133 0 +ZCorner 56177 23142 0 +ZCorner 56178 23144 0 +ZCorner 56179 23146 0 +ZCorner 56180 23148 0 +ZCorner 56181 23150 0 +ZCorner 56243 23211 0 +ZCorner 56296 23243 0 +ZCorner 56340 23245 0 +ZCorner 56376 23216 0 +ZCorner 56378 23204 0 +ZCorner 56380 23191 0 +ZCorner 56382 23178 0 +ZCorner 56384 23166 0 +ZCorner 56381 23157 0 +ZCorner 56378 23148 0 +ZCorner 56375 23139 0 +ZCorner 56372 23131 0 +ZCorner 56351 23105 0 +ZCorner 56329 23080 0 +ZCorner 56308 23054 0 +ZCorner 56286 23029 0 +ZCorner 56276 23021 0 +ZCorner 56267 23013 0 +ZCorner 56257 23006 0 +ZCorner 56247 22998 1 +$POLYSCORNERS +56298 23292 0 0 +56340 23287 0 0 +56340 23245 0 0 +56296 23243 0 0 +56243 23211 0 0 +56181 23150 0 0 +56177 23142 0 0 +56172 23133 0 0 +56167 23125 0 0 +56157 23107 0 0 +56153 23102 0 0 +56138 23087 0 0 +56137 23075 0 0 +56135 23049 0 0 +56134 23037 0 0 +56148 23015 0 0 +56154 23005 0 0 +56161 22994 0 0 +56185 22988 0 0 +56196 22985 0 0 +56208 22982 0 0 +56228 22990 0 0 +56237 22994 0 0 +56247 22998 0 0 +56257 23006 0 0 +56267 23013 0 0 +56276 23021 0 0 +56286 23029 0 0 +56308 23054 0 0 +56329 23080 0 0 +56351 23105 0 0 +56372 23131 0 0 +56375 23139 0 0 +56384 23166 0 0 +56382 23178 0 0 +56378 23204 0 0 +56376 23216 0 0 +56340 23245 0 0 +56340 23287 0 0 +56361 23285 0 0 +56406 23238 0 0 +56431 23150 0 0 +56431 23134 0 0 +56354 23022 0 0 +56282 22955 0 0 +56213 22933 0 0 +56145 22955 0 0 +56093 23024 0 0 +56087 23098 0 0 +56128 23177 0 0 +56216 23259 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660008 0 "" +ZLayer 20 +ZAux 98 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56411 28203 0 +ZCorner 56408 28206 0 +ZCorner 56405 28209 0 +ZCorner 56403 28212 0 +ZCorner 56400 28215 0 +ZCorner 56399 28216 0 +ZCorner 56398 28217 0 +ZCorner 56397 28218 0 +ZCorner 56396 28219 0 +ZCorner 56320 28309 0 +ZCorner 56247 28356 0 +ZCorner 56176 28359 0 +ZCorner 56107 28317 0 +ZCorner 56083 28242 0 +ZCorner 56093 28170 0 +ZCorner 56139 28101 0 +ZCorner 56220 28036 0 +ZCorner 56222 28034 0 +ZCorner 56224 28032 0 +ZCorner 56226 28030 0 +ZCorner 56228 28028 0 +ZCorner 56295 28004 0 +ZCorner 56351 28010 0 +ZCorner 56397 28044 0 +ZCorner 56431 28106 0 +ZCorner 56429 28122 0 +ZCorner 56427 28139 0 +ZCorner 56425 28156 0 +ZCorner 56423 28172 0 +ZCorner 56422 28174 0 +ZCorner 56421 28176 0 +ZCorner 56420 28178 0 +ZCorner 56419 28180 0 +ZCorner 56419 28180 0 +ZCorner 56419 28180 0 +ZCorner 56419 28180 0 +ZCorner 56419 28180 0 +ZCorner 56417 28186 0 +ZCorner 56415 28192 0 +ZCorner 56413 28198 0 +ZCorner 56411 28203 1 +ZCorner 56177 28157 0 +ZCorner 56175 28158 0 +ZCorner 56173 28159 0 +ZCorner 56171 28160 0 +ZCorner 56169 28161 0 +ZCorner 56169 28163 0 +ZCorner 56169 28165 0 +ZCorner 56169 28167 0 +ZCorner 56169 28169 0 +ZCorner 56167 28170 0 +ZCorner 56165 28172 0 +ZCorner 56163 28174 0 +ZCorner 56161 28176 0 +ZCorner 56159 28179 0 +ZCorner 56157 28182 0 +ZCorner 56155 28185 0 +ZCorner 56153 28188 0 +ZCorner 56146 28199 0 +ZCorner 56140 28209 0 +ZCorner 56133 28220 0 +ZCorner 56126 28231 0 +ZCorner 56126 28237 0 +ZCorner 56126 28243 0 +ZCorner 56126 28249 0 +ZCorner 56126 28254 0 +ZCorner 56132 28265 0 +ZCorner 56138 28276 0 +ZCorner 56144 28287 0 +ZCorner 56150 28297 0 +ZCorner 56164 28302 0 +ZCorner 56179 28307 0 +ZCorner 56193 28312 0 +ZCorner 56208 28317 0 +ZCorner 56214 28316 0 +ZCorner 56220 28315 0 +ZCorner 56226 28314 0 +ZCorner 56231 28313 0 +ZCorner 56244 28302 0 +ZCorner 56257 28292 0 +ZCorner 56269 28281 0 +ZCorner 56282 28270 0 +ZCorner 56356 28184 0 +ZCorner 56383 28118 0 +ZCorner 56365 28072 0 +ZCorner 56302 28048 0 +ZCorner 56291 28052 0 +ZCorner 56280 28057 0 +ZCorner 56270 28062 0 +ZCorner 56259 28067 0 +ZCorner 56248 28077 0 +ZCorner 56237 28087 0 +ZCorner 56227 28096 0 +ZCorner 56216 28106 0 +ZCorner 56206 28119 0 +ZCorner 56196 28132 0 +ZCorner 56187 28144 0 +ZCorner 56177 28157 1 +$POLYSCORNERS +56176 28359 0 0 +56208 28357 0 0 +56208 28317 0 0 +56193 28312 0 0 +56179 28307 0 0 +56164 28302 0 0 +56150 28297 0 0 +56144 28287 0 0 +56126 28254 0 0 +56126 28231 0 0 +56140 28209 0 0 +56146 28199 0 0 +56153 28188 0 0 +56161 28176 0 0 +56167 28170 0 0 +56169 28169 0 0 +56169 28161 0 0 +56177 28157 0 0 +56187 28144 0 0 +56196 28132 0 0 +56216 28106 0 0 +56227 28096 0 0 +56237 28087 0 0 +56259 28067 0 0 +56270 28062 0 0 +56280 28057 0 0 +56291 28052 0 0 +56302 28048 0 0 +56365 28072 0 0 +56383 28118 0 0 +56356 28184 0 0 +56282 28270 0 0 +56269 28281 0 0 +56257 28292 0 0 +56244 28302 0 0 +56231 28313 0 0 +56226 28314 0 0 +56208 28317 0 0 +56208 28357 0 0 +56247 28356 0 0 +56320 28309 0 0 +56396 28219 0 0 +56403 28212 0 0 +56405 28209 0 0 +56411 28203 0 0 +56413 28198 0 0 +56419 28180 0 0 +56423 28172 0 0 +56425 28156 0 0 +56429 28122 0 0 +56431 28106 0 0 +56397 28044 0 0 +56351 28010 0 0 +56295 28004 0 0 +56228 28028 0 0 +56220 28036 0 0 +56139 28101 0 0 +56093 28170 0 0 +56083 28242 0 0 +56107 28317 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660009 0 "" +ZLayer 20 +ZAux 37 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56442 28461 0 +ZCorner 56444 28457 0 +ZCorner 56446 28454 0 +ZCorner 56448 28450 0 +ZCorner 56450 28446 0 +ZCorner 56491 28393 0 +ZCorner 56532 28340 0 +ZCorner 56573 28288 0 +ZCorner 56614 28235 0 +ZCorner 56625 28242 0 +ZCorner 56636 28249 0 +ZCorner 56646 28255 0 +ZCorner 56657 28262 0 +ZCorner 56601 28340 0 +ZCorner 56544 28418 0 +ZCorner 56488 28497 0 +ZCorner 56431 28575 0 +ZCorner 56422 28570 0 +ZCorner 56413 28565 0 +ZCorner 56404 28560 0 +ZCorner 56396 28555 0 +ZCorner 56396 28513 0 +ZCorner 56390 28474 0 +ZCorner 56378 28438 0 +ZCorner 56360 28407 0 +ZCorner 56368 28397 0 +ZCorner 56376 28387 0 +ZCorner 56384 28377 0 +ZCorner 56392 28368 0 +ZCorner 56402 28390 0 +ZCorner 56411 28413 0 +ZCorner 56421 28435 0 +ZCorner 56431 28457 0 +ZCorner 56434 28458 0 +ZCorner 56437 28459 0 +ZCorner 56439 28460 0 +ZCorner 56442 28461 1 +$POLYSCORNERS +56431 28575 0 0 +56488 28497 0 0 +56544 28418 0 0 +56601 28340 0 0 +56657 28262 0 0 +56646 28255 0 0 +56636 28249 0 0 +56614 28235 0 0 +56573 28288 0 0 +56532 28340 0 0 +56450 28446 0 0 +56446 28454 0 0 +56444 28457 0 0 +56442 28461 0 0 +56439 28460 0 0 +56437 28459 0 0 +56431 28457 0 0 +56411 28413 0 0 +56402 28390 0 0 +56392 28368 0 0 +56384 28377 0 0 +56360 28407 0 0 +56378 28438 0 0 +56390 28474 0 0 +56396 28513 0 0 +56396 28555 0 0 +56404 28560 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66000A 0 "" +ZLayer 20 +ZAux 49 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56860 28403 0 +ZCorner 56871 28409 0 +ZCorner 56882 28415 0 +ZCorner 56893 28420 0 +ZCorner 56903 28426 0 +ZCorner 56855 28507 0 +ZCorner 56808 28588 0 +ZCorner 56760 28669 0 +ZCorner 56712 28750 0 +ZCorner 56710 28752 0 +ZCorner 56708 28754 0 +ZCorner 56706 28756 0 +ZCorner 56704 28758 0 +ZCorner 56696 28755 0 +ZCorner 56689 28752 0 +ZCorner 56681 28749 0 +ZCorner 56673 28747 0 +ZCorner 56671 28729 0 +ZCorner 56669 28711 0 +ZCorner 56667 28694 0 +ZCorner 56665 28676 0 +ZCorner 56655 28658 0 +ZCorner 56646 28639 0 +ZCorner 56636 28621 0 +ZCorner 56626 28602 0 +ZCorner 56632 28591 0 +ZCorner 56638 28581 0 +ZCorner 56644 28570 0 +ZCorner 56649 28559 0 +ZCorner 56655 28567 0 +ZCorner 56661 28575 0 +ZCorner 56667 28583 0 +ZCorner 56673 28590 0 +ZCorner 56681 28605 0 +ZCorner 56689 28620 0 +ZCorner 56696 28634 0 +ZCorner 56704 28649 0 +ZCorner 56705 28650 0 +ZCorner 56706 28651 0 +ZCorner 56707 28652 0 +ZCorner 56708 28653 0 +ZCorner 56711 28647 0 +ZCorner 56714 28641 0 +ZCorner 56717 28635 0 +ZCorner 56720 28630 0 +ZCorner 56755 28573 0 +ZCorner 56790 28516 0 +ZCorner 56825 28460 0 +ZCorner 56860 28403 1 +$POLYSCORNERS +56704 28758 0 0 +56712 28750 0 0 +56808 28588 0 0 +56855 28507 0 0 +56903 28426 0 0 +56893 28420 0 0 +56882 28415 0 0 +56860 28403 0 0 +56825 28460 0 0 +56790 28516 0 0 +56720 28630 0 0 +56717 28635 0 0 +56708 28653 0 0 +56704 28649 0 0 +56696 28634 0 0 +56689 28620 0 0 +56673 28590 0 0 +56667 28583 0 0 +56649 28559 0 0 +56644 28570 0 0 +56638 28581 0 0 +56632 28591 0 0 +56626 28602 0 0 +56636 28621 0 0 +56646 28639 0 0 +56655 28658 0 0 +56665 28676 0 0 +56667 28694 0 0 +56669 28711 0 0 +56673 28747 0 0 +56681 28749 0 0 +56689 28752 0 0 +56696 28755 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66000B 0 "" +ZLayer 20 +ZAux 37 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56958 28848 0 +ZCorner 56943 28828 0 +ZCorner 56929 28807 0 +ZCorner 56914 28786 0 +ZCorner 56900 28766 0 +ZCorner 56906 28755 0 +ZCorner 56913 28744 0 +ZCorner 56920 28734 0 +ZCorner 56927 28723 0 +ZCorner 56941 28745 0 +ZCorner 56956 28766 0 +ZCorner 56971 28788 0 +ZCorner 56985 28809 0 +ZCorner 56990 28803 0 +ZCorner 56995 28797 0 +ZCorner 57000 28791 0 +ZCorner 57005 28786 0 +ZCorner 57034 28727 0 +ZCorner 57064 28668 0 +ZCorner 57093 28610 0 +ZCorner 57122 28551 0 +ZCorner 57134 28556 0 +ZCorner 57146 28561 0 +ZCorner 57157 28566 0 +ZCorner 57169 28571 0 +ZCorner 57127 28658 0 +ZCorner 57085 28745 0 +ZCorner 57043 28831 0 +ZCorner 57001 28918 0 +ZCorner 56992 28915 0 +ZCorner 56983 28912 0 +ZCorner 56975 28910 0 +ZCorner 56966 28907 0 +ZCorner 56964 28892 0 +ZCorner 56962 28877 0 +ZCorner 56960 28863 0 +ZCorner 56958 28848 1 +$POLYSCORNERS +57001 28918 0 0 +57043 28831 0 0 +57085 28745 0 0 +57169 28571 0 0 +57157 28566 0 0 +57146 28561 0 0 +57122 28551 0 0 +57093 28610 0 0 +57064 28668 0 0 +57034 28727 0 0 +57005 28786 0 0 +57000 28791 0 0 +56985 28809 0 0 +56971 28788 0 0 +56956 28766 0 0 +56941 28745 0 0 +56927 28723 0 0 +56920 28734 0 0 +56913 28744 0 0 +56906 28755 0 0 +56900 28766 0 0 +56914 28786 0 0 +56929 28807 0 0 +56943 28828 0 0 +56958 28848 0 0 +56960 28863 0 0 +56962 28877 0 0 +56966 28907 0 0 +56975 28910 0 0 +56983 28912 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66000C 0 "" +ZLayer 20 +ZAux 37 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 58707 22057 0 +ZCorner 58717 22057 0 +ZCorner 58727 22057 0 +ZCorner 58737 22057 0 +ZCorner 58747 22057 0 +ZCorner 58766 22087 0 +ZCorner 58790 22114 0 +ZCorner 58817 22137 0 +ZCorner 58848 22154 0 +ZCorner 58851 22156 0 +ZCorner 58854 22158 0 +ZCorner 58857 22160 0 +ZCorner 58860 22162 0 +ZCorner 58859 22174 0 +ZCorner 58858 22185 0 +ZCorner 58857 22197 0 +ZCorner 58856 22209 0 +ZCorner 58841 22205 0 +ZCorner 58821 22194 0 +ZCorner 58794 22176 0 +ZCorner 58762 22150 0 +ZCorner 58762 22158 0 +ZCorner 58762 22166 0 +ZCorner 58762 22174 0 +ZCorner 58762 22181 0 +ZCorner 58756 22246 0 +ZCorner 58751 22310 0 +ZCorner 58745 22375 0 +ZCorner 58739 22439 0 +ZCorner 58726 22439 0 +ZCorner 58713 22439 0 +ZCorner 58701 22439 0 +ZCorner 58688 22439 0 +ZCorner 58693 22344 0 +ZCorner 58698 22248 0 +ZCorner 58703 22152 0 +ZCorner 58707 22057 1 +$POLYSCORNERS +58739 22439 0 0 +58745 22375 0 0 +58751 22310 0 0 +58756 22246 0 0 +58762 22181 0 0 +58762 22150 0 0 +58794 22176 0 0 +58821 22194 0 0 +58841 22205 0 0 +58856 22209 0 0 +58858 22185 0 0 +58859 22174 0 0 +58860 22162 0 0 +58848 22154 0 0 +58817 22137 0 0 +58790 22114 0 0 +58766 22087 0 0 +58747 22057 0 0 +58707 22057 0 0 +58703 22152 0 0 +58693 22344 0 0 +58688 22439 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66000D 0 "" +ZLayer 20 +ZAux 33 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59036 22092 0 +ZCorner 59045 22092 0 +ZCorner 59055 22092 0 +ZCorner 59065 22092 0 +ZCorner 59075 22092 0 +ZCorner 59094 22128 0 +ZCorner 59119 22159 0 +ZCorner 59147 22186 0 +ZCorner 59180 22209 0 +ZCorner 59178 22220 0 +ZCorner 59176 22232 0 +ZCorner 59174 22244 0 +ZCorner 59172 22256 0 +ZCorner 59152 22247 0 +ZCorner 59131 22233 0 +ZCorner 59109 22213 0 +ZCorner 59086 22189 0 +ZCorner 59084 22196 0 +ZCorner 59082 22203 0 +ZCorner 59080 22210 0 +ZCorner 59078 22217 0 +ZCorner 59067 22282 0 +ZCorner 59055 22347 0 +ZCorner 59043 22413 0 +ZCorner 59032 22478 0 +ZCorner 59019 22476 0 +ZCorner 59006 22474 0 +ZCorner 58994 22472 0 +ZCorner 58981 22471 0 +ZCorner 58995 22376 0 +ZCorner 59008 22281 0 +ZCorner 59022 22186 0 +ZCorner 59036 22092 1 +$POLYSCORNERS +59032 22478 0 0 +59043 22413 0 0 +59055 22347 0 0 +59067 22282 0 0 +59078 22217 0 0 +59086 22189 0 0 +59109 22213 0 0 +59131 22233 0 0 +59152 22247 0 0 +59172 22256 0 0 +59178 22220 0 0 +59180 22209 0 0 +59147 22186 0 0 +59119 22159 0 0 +59094 22128 0 0 +59075 22092 0 0 +59036 22092 0 0 +59022 22186 0 0 +59008 22281 0 0 +58995 22376 0 0 +58981 22471 0 0 +58994 22472 0 0 +59006 22474 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66000E 0 "" +ZLayer 20 +ZAux 74 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59231 22424 0 +ZCorner 59232 22414 0 +ZCorner 59233 22404 0 +ZCorner 59234 22394 0 +ZCorner 59235 22385 0 +ZCorner 59254 22275 0 +ZCorner 59296 22203 0 +ZCorner 59358 22169 0 +ZCorner 59442 22174 0 +ZCorner 59500 22229 0 +ZCorner 59524 22300 0 +ZCorner 59512 22387 0 +ZCorner 59465 22490 0 +ZCorner 59382 22543 0 +ZCorner 59316 22549 0 +ZCorner 59265 22509 0 +ZCorner 59231 22424 1 +ZCorner 59340 22232 0 +ZCorner 59335 22245 0 +ZCorner 59330 22258 0 +ZCorner 59326 22270 0 +ZCorner 59321 22283 0 +ZCorner 59321 22283 0 +ZCorner 59321 22283 0 +ZCorner 59321 22283 0 +ZCorner 59321 22283 0 +ZCorner 59320 22285 0 +ZCorner 59319 22287 0 +ZCorner 59318 22289 0 +ZCorner 59317 22291 0 +ZCorner 59317 22293 0 +ZCorner 59317 22295 0 +ZCorner 59317 22297 0 +ZCorner 59317 22299 0 +ZCorner 59316 22299 0 +ZCorner 59315 22299 0 +ZCorner 59314 22299 0 +ZCorner 59313 22299 0 +ZCorner 59287 22395 0 +ZCorner 59286 22463 0 +ZCorner 59307 22502 0 +ZCorner 59352 22513 0 +ZCorner 59362 22509 0 +ZCorner 59371 22506 0 +ZCorner 59381 22502 0 +ZCorner 59391 22498 0 +ZCorner 59400 22486 0 +ZCorner 59408 22474 0 +ZCorner 59417 22463 0 +ZCorner 59426 22451 0 +ZCorner 59436 22418 0 +ZCorner 59446 22384 0 +ZCorner 59455 22351 0 +ZCorner 59465 22318 0 +ZCorner 59467 22305 0 +ZCorner 59469 22293 0 +ZCorner 59471 22280 0 +ZCorner 59473 22267 0 +ZCorner 59469 22259 0 +ZCorner 59465 22252 0 +ZCorner 59461 22244 0 +ZCorner 59457 22236 0 +ZCorner 59445 22229 0 +ZCorner 59432 22222 0 +ZCorner 59419 22215 0 +ZCorner 59407 22209 0 +ZCorner 59394 22211 0 +ZCorner 59381 22213 0 +ZCorner 59368 22214 0 +ZCorner 59356 22216 0 +ZCorner 59352 22220 0 +ZCorner 59348 22224 0 +ZCorner 59344 22228 0 +ZCorner 59340 22232 1 +$POLYSCORNERS +59316 22549 0 0 +59352 22545 0 0 +59352 22513 0 0 +59307 22502 0 0 +59286 22463 0 0 +59287 22395 0 0 +59313 22299 0 0 +59317 22299 0 0 +59317 22291 0 0 +59321 22283 0 0 +59326 22270 0 0 +59330 22258 0 0 +59340 22232 0 0 +59356 22216 0 0 +59368 22214 0 0 +59381 22213 0 0 +59407 22209 0 0 +59419 22215 0 0 +59445 22229 0 0 +59457 22236 0 0 +59465 22252 0 0 +59469 22259 0 0 +59473 22267 0 0 +59469 22293 0 0 +59467 22305 0 0 +59465 22318 0 0 +59455 22351 0 0 +59446 22384 0 0 +59436 22418 0 0 +59426 22451 0 0 +59417 22463 0 0 +59408 22474 0 0 +59400 22486 0 0 +59391 22498 0 0 +59371 22506 0 0 +59362 22509 0 0 +59352 22513 0 0 +59352 22545 0 0 +59382 22543 0 0 +59465 22490 0 0 +59512 22387 0 0 +59524 22300 0 0 +59500 22229 0 0 +59442 22174 0 0 +59358 22169 0 0 +59296 22203 0 0 +59254 22275 0 0 +59235 22385 0 0 +59234 22394 0 0 +59231 22424 0 0 +59265 22509 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66000F 0 "" +ZLayer 20 +ZAux 41 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59993 22385 0 +ZCorner 60002 22387 0 +ZCorner 60012 22390 0 +ZCorner 60022 22393 0 +ZCorner 60032 22396 0 +ZCorner 60031 22416 0 +ZCorner 60041 22446 0 +ZCorner 60063 22486 0 +ZCorner 60098 22537 0 +ZCorner 60092 22548 0 +ZCorner 60086 22558 0 +ZCorner 60081 22569 0 +ZCorner 60075 22580 0 +ZCorner 60066 22570 0 +ZCorner 60057 22560 0 +ZCorner 60048 22551 0 +ZCorner 60040 22541 0 +ZCorner 60033 22529 0 +ZCorner 60026 22517 0 +ZCorner 60019 22506 0 +ZCorner 60012 22494 0 +ZCorner 60009 22495 0 +ZCorner 60006 22496 0 +ZCorner 60003 22497 0 +ZCorner 60001 22498 0 +ZCorner 60000 22503 0 +ZCorner 59999 22508 0 +ZCorner 59998 22512 0 +ZCorner 59997 22517 0 +ZCorner 59967 22576 0 +ZCorner 59938 22635 0 +ZCorner 59909 22693 0 +ZCorner 59879 22752 0 +ZCorner 59869 22747 0 +ZCorner 59858 22742 0 +ZCorner 59847 22737 0 +ZCorner 59836 22732 0 +ZCorner 59875 22645 0 +ZCorner 59914 22558 0 +ZCorner 59954 22471 0 +ZCorner 59993 22385 1 +$POLYSCORNERS +59879 22752 0 0 +59909 22693 0 0 +59938 22635 0 0 +59967 22576 0 0 +59997 22517 0 0 +59998 22512 0 0 +59999 22508 0 0 +60001 22498 0 0 +60003 22497 0 0 +60012 22494 0 0 +60019 22506 0 0 +60026 22517 0 0 +60040 22541 0 0 +60048 22551 0 0 +60057 22560 0 0 +60075 22580 0 0 +60081 22569 0 0 +60086 22558 0 0 +60092 22548 0 0 +60098 22537 0 0 +60063 22486 0 0 +60041 22446 0 0 +60031 22416 0 0 +60032 22396 0 0 +60002 22387 0 0 +59993 22385 0 0 +59954 22471 0 0 +59914 22558 0 0 +59836 22732 0 0 +59869 22747 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660010 0 "" +ZLayer 20 +ZAux 33 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 60137 22892 0 +ZCorner 60126 22886 0 +ZCorner 60116 22881 0 +ZCorner 60105 22875 0 +ZCorner 60094 22869 0 +ZCorner 60143 22787 0 +ZCorner 60192 22705 0 +ZCorner 60240 22623 0 +ZCorner 60289 22541 0 +ZCorner 60298 22545 0 +ZCorner 60307 22549 0 +ZCorner 60316 22553 0 +ZCorner 60324 22556 0 +ZCorner 60323 22579 0 +ZCorner 60331 22611 0 +ZCorner 60348 22652 0 +ZCorner 60375 22701 0 +ZCorner 60369 22711 0 +ZCorner 60363 22720 0 +ZCorner 60358 22730 0 +ZCorner 60352 22740 0 +ZCorner 60346 22741 0 +ZCorner 60334 22725 0 +ZCorner 60317 22694 0 +ZCorner 60293 22646 0 +ZCorner 60289 22653 0 +ZCorner 60285 22660 0 +ZCorner 60281 22667 0 +ZCorner 60278 22674 0 +ZCorner 60242 22728 0 +ZCorner 60207 22783 0 +ZCorner 60172 22838 0 +ZCorner 60137 22892 1 +$POLYSCORNERS +60137 22892 0 0 +60172 22838 0 0 +60242 22728 0 0 +60278 22674 0 0 +60281 22667 0 0 +60293 22646 0 0 +60317 22694 0 0 +60334 22725 0 0 +60346 22741 0 0 +60352 22740 0 0 +60358 22730 0 0 +60363 22720 0 0 +60369 22711 0 0 +60375 22701 0 0 +60348 22652 0 0 +60331 22611 0 0 +60323 22579 0 0 +60324 22556 0 0 +60316 22553 0 0 +60289 22541 0 0 +60240 22623 0 0 +60192 22705 0 0 +60094 22869 0 0 +60116 22881 0 0 +60126 22886 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660011 0 "" +ZLayer 20 +ZAux 46 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 57181 22455 0 +ZCorner 57180 22437 0 +ZCorner 57179 22420 0 +ZCorner 57178 22402 0 +ZCorner 57177 22385 0 +ZCorner 57197 22325 0 +ZCorner 57233 22286 0 +ZCorner 57286 22269 0 +ZCorner 57356 22275 0 +ZCorner 57408 22323 0 +ZCorner 57445 22385 0 +ZCorner 57468 22461 0 +ZCorner 57477 22548 0 +ZCorner 57434 22622 0 +ZCorner 57379 22649 0 +ZCorner 57312 22631 0 +ZCorner 57231 22568 0 +ZCorner 57219 22540 0 +ZCorner 57206 22511 0 +ZCorner 57193 22483 0 +ZCorner 57181 22455 1 +ZCorner 57376 22369 0 +ZCorner 57325 22321 0 +ZCorner 57283 22308 0 +ZCorner 57250 22329 0 +ZCorner 57228 22385 0 +ZCorner 57230 22390 0 +ZCorner 57232 22396 0 +ZCorner 57234 22402 0 +ZCorner 57236 22408 0 +ZCorner 57237 22423 0 +ZCorner 57239 22437 0 +ZCorner 57241 22452 0 +ZCorner 57243 22466 0 +ZCorner 57245 22467 0 +ZCorner 57247 22468 0 +ZCorner 57249 22469 0 +ZCorner 57251 22470 0 +ZCorner 57276 22540 0 +ZCorner 57309 22584 0 +ZCorner 57349 22603 0 +ZCorner 57396 22595 0 +ZCorner 57422 22572 0 +ZCorner 57427 22526 0 +ZCorner 57411 22458 0 +ZCorner 57376 22369 1 +$POLYSCORNERS +57379 22649 0 0 +57434 22622 0 0 +57477 22548 0 0 +57468 22461 0 0 +57445 22385 0 0 +57408 22323 0 0 +57356 22275 0 0 +57286 22269 0 0 +57233 22286 0 0 +57197 22325 0 0 +57177 22385 0 0 +57178 22402 0 0 +57179 22420 0 0 +57180 22437 0 0 +57181 22455 0 0 +57193 22483 0 0 +57206 22511 0 0 +57219 22540 0 0 +57231 22568 0 0 +57312 22631 0 0 +57349 22640 0 0 +57349 22603 0 0 +57309 22584 0 0 +57276 22540 0 0 +57251 22470 0 0 +57243 22466 0 0 +57241 22452 0 0 +57239 22437 0 0 +57237 22423 0 0 +57236 22408 0 0 +57230 22390 0 0 +57228 22385 0 0 +57250 22329 0 0 +57283 22308 0 0 +57325 22321 0 0 +57376 22369 0 0 +57411 22458 0 0 +57427 22526 0 0 +57422 22572 0 0 +57396 22595 0 0 +57349 22603 0 0 +57349 22640 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660012 0 "" +ZLayer 20 +ZAux 33 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 57548 22178 0 +ZCorner 57579 22201 0 +ZCorner 57615 22219 0 +ZCorner 57655 22232 0 +ZCorner 57700 22240 0 +ZCorner 57702 22251 0 +ZCorner 57704 22261 0 +ZCorner 57706 22272 0 +ZCorner 57708 22283 0 +ZCorner 57680 22277 0 +ZCorner 57653 22271 0 +ZCorner 57626 22265 0 +ZCorner 57599 22259 0 +ZCorner 57601 22267 0 +ZCorner 57603 22275 0 +ZCorner 57604 22283 0 +ZCorner 57606 22291 0 +ZCorner 57623 22354 0 +ZCorner 57640 22418 0 +ZCorner 57656 22481 0 +ZCorner 57673 22545 0 +ZCorner 57662 22547 0 +ZCorner 57651 22550 0 +ZCorner 57641 22553 0 +ZCorner 57630 22556 0 +ZCorner 57603 22463 0 +ZCorner 57575 22371 0 +ZCorner 57548 22278 0 +ZCorner 57521 22185 0 +ZCorner 57527 22183 0 +ZCorner 57534 22181 0 +ZCorner 57541 22179 0 +ZCorner 57548 22178 1 +$POLYSCORNERS +57630 22556 0 0 +57641 22553 0 0 +57651 22550 0 0 +57662 22547 0 0 +57673 22545 0 0 +57656 22481 0 0 +57640 22418 0 0 +57623 22354 0 0 +57606 22291 0 0 +57604 22283 0 0 +57603 22275 0 0 +57599 22259 0 0 +57680 22277 0 0 +57708 22283 0 0 +57704 22261 0 0 +57702 22251 0 0 +57700 22240 0 0 +57655 22232 0 0 +57615 22219 0 0 +57579 22201 0 0 +57548 22178 0 0 +57541 22179 0 0 +57527 22183 0 0 +57521 22185 0 0 +57575 22371 0 0 +57603 22463 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660013 0 "" +ZLayer 20 +ZAux 33 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 57845 22115 0 +ZCorner 57853 22112 0 +ZCorner 57862 22109 0 +ZCorner 57871 22106 0 +ZCorner 57880 22103 0 +ZCorner 57905 22128 0 +ZCorner 57935 22147 0 +ZCorner 57970 22163 0 +ZCorner 58009 22174 0 +ZCorner 58012 22186 0 +ZCorner 58016 22199 0 +ZCorner 58020 22212 0 +ZCorner 58024 22225 0 +ZCorner 57998 22216 0 +ZCorner 57971 22207 0 +ZCorner 57945 22198 0 +ZCorner 57919 22189 0 +ZCorner 57919 22196 0 +ZCorner 57919 22203 0 +ZCorner 57919 22210 0 +ZCorner 57919 22217 0 +ZCorner 57929 22282 0 +ZCorner 57940 22348 0 +ZCorner 57951 22413 0 +ZCorner 57962 22479 0 +ZCorner 57951 22480 0 +ZCorner 57940 22482 0 +ZCorner 57929 22484 0 +ZCorner 57919 22486 0 +ZCorner 57900 22394 0 +ZCorner 57882 22301 0 +ZCorner 57863 22208 0 +ZCorner 57845 22115 1 +$POLYSCORNERS +57919 22486 0 0 +57929 22484 0 0 +57951 22480 0 0 +57962 22479 0 0 +57951 22413 0 0 +57940 22348 0 0 +57929 22282 0 0 +57919 22217 0 0 +57919 22189 0 0 +57971 22207 0 0 +57998 22216 0 0 +58024 22225 0 0 +58012 22186 0 0 +58009 22174 0 0 +57970 22163 0 0 +57935 22147 0 0 +57905 22128 0 0 +57880 22103 0 0 +57853 22112 0 0 +57845 22115 0 0 +57863 22208 0 0 +57882 22301 0 0 +57900 22394 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660014 0 "" +ZLayer 20 +ZAux 54 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 58149 22385 0 +ZCorner 58146 22381 0 +ZCorner 58143 22377 0 +ZCorner 58140 22373 0 +ZCorner 58138 22369 0 +ZCorner 58108 22248 0 +ZCorner 58116 22156 0 +ZCorner 58160 22092 0 +ZCorner 58243 22057 0 +ZCorner 58315 22071 0 +ZCorner 58361 22126 0 +ZCorner 58381 22222 0 +ZCorner 58376 22357 0 +ZCorner 58372 22364 0 +ZCorner 58368 22371 0 +ZCorner 58364 22378 0 +ZCorner 58360 22385 0 +ZCorner 58320 22433 0 +ZCorner 58272 22449 0 +ZCorner 58215 22433 0 +ZCorner 58149 22385 1 +ZCorner 58259 22096 0 +ZCorner 58246 22098 0 +ZCorner 58233 22099 0 +ZCorner 58221 22101 0 +ZCorner 58208 22103 0 +ZCorner 58202 22109 0 +ZCorner 58196 22115 0 +ZCorner 58190 22121 0 +ZCorner 58184 22127 0 +ZCorner 58182 22140 0 +ZCorner 58179 22154 0 +ZCorner 58176 22168 0 +ZCorner 58173 22181 0 +ZCorner 58170 22272 0 +ZCorner 58181 22340 0 +ZCorner 58206 22385 0 +ZCorner 58243 22408 0 +ZCorner 58292 22391 0 +ZCorner 58322 22351 0 +ZCorner 58333 22288 0 +ZCorner 58325 22201 0 +ZCorner 58323 22190 0 +ZCorner 58321 22179 0 +ZCorner 58319 22169 0 +ZCorner 58317 22158 0 +ZCorner 58313 22150 0 +ZCorner 58309 22142 0 +ZCorner 58305 22135 0 +ZCorner 58302 22127 0 +ZCorner 58291 22119 0 +ZCorner 58280 22111 0 +ZCorner 58269 22103 0 +ZCorner 58259 22096 1 +$POLYSCORNERS +58272 22449 0 0 +58320 22433 0 0 +58360 22385 0 0 +58376 22357 0 0 +58381 22222 0 0 +58361 22126 0 0 +58315 22071 0 0 +58243 22057 0 0 +58160 22092 0 0 +58116 22156 0 0 +58108 22248 0 0 +58138 22369 0 0 +58140 22373 0 0 +58149 22385 0 0 +58215 22433 0 0 +58243 22440 0 0 +58243 22408 0 0 +58206 22385 0 0 +58181 22340 0 0 +58170 22272 0 0 +58173 22181 0 0 +58176 22168 0 0 +58182 22140 0 0 +58184 22127 0 0 +58208 22103 0 0 +58221 22101 0 0 +58233 22099 0 0 +58246 22098 0 0 +58259 22096 0 0 +58269 22103 0 0 +58302 22127 0 0 +58305 22135 0 0 +58309 22142 0 0 +58317 22158 0 0 +58319 22169 0 0 +58321 22179 0 0 +58325 22201 0 0 +58333 22288 0 0 +58322 22351 0 0 +58292 22391 0 0 +58243 22408 0 0 +58243 22440 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660015 0 "" +ZLayer 20 +ZAux 41 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 60567 22728 0 +ZCorner 60575 22732 0 +ZCorner 60584 22736 0 +ZCorner 60593 22740 0 +ZCorner 60602 22744 0 +ZCorner 60599 22779 0 +ZCorner 60605 22815 0 +ZCorner 60617 22853 0 +ZCorner 60637 22892 0 +ZCorner 60631 22902 0 +ZCorner 60625 22912 0 +ZCorner 60619 22922 0 +ZCorner 60613 22931 0 +ZCorner 60604 22917 0 +ZCorner 60594 22902 0 +ZCorner 60584 22887 0 +ZCorner 60574 22873 0 +ZCorner 60571 22863 0 +ZCorner 60568 22853 0 +ZCorner 60566 22843 0 +ZCorner 60563 22834 0 +ZCorner 60559 22839 0 +ZCorner 60555 22845 0 +ZCorner 60551 22851 0 +ZCorner 60547 22857 0 +ZCorner 60546 22858 0 +ZCorner 60545 22859 0 +ZCorner 60544 22860 0 +ZCorner 60543 22861 0 +ZCorner 60503 22912 0 +ZCorner 60463 22963 0 +ZCorner 60423 23013 0 +ZCorner 60383 23064 0 +ZCorner 60372 23057 0 +ZCorner 60361 23050 0 +ZCorner 60351 23044 0 +ZCorner 60340 23037 0 +ZCorner 60397 22960 0 +ZCorner 60453 22882 0 +ZCorner 60510 22805 0 +ZCorner 60567 22728 1 +$POLYSCORNERS +60383 23064 0 0 +60423 23013 0 0 +60463 22963 0 0 +60543 22861 0 0 +60547 22857 0 0 +60559 22839 0 0 +60563 22834 0 0 +60566 22843 0 0 +60568 22853 0 0 +60574 22873 0 0 +60584 22887 0 0 +60604 22917 0 0 +60613 22931 0 0 +60619 22922 0 0 +60637 22892 0 0 +60617 22853 0 0 +60605 22815 0 0 +60599 22779 0 0 +60602 22744 0 0 +60575 22732 0 0 +60567 22728 0 0 +60453 22882 0 0 +60397 22960 0 0 +60340 23037 0 0 +60351 23044 0 0 +60361 23050 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660016 0 "" +ZLayer 20 +ZAux 58 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 60574 23150 0 +ZCorner 60577 23140 0 +ZCorner 60580 23131 0 +ZCorner 60583 23121 0 +ZCorner 60586 23111 0 +ZCorner 60653 23015 0 +ZCorner 60720 22956 0 +ZCorner 60785 22935 0 +ZCorner 60848 22951 0 +ZCorner 60905 23006 0 +ZCorner 60919 23071 0 +ZCorner 60891 23146 0 +ZCorner 60820 23232 0 +ZCorner 60813 23237 0 +ZCorner 60807 23242 0 +ZCorner 60800 23247 0 +ZCorner 60793 23252 0 +ZCorner 60696 23285 0 +ZCorner 60627 23278 0 +ZCorner 60586 23233 0 +ZCorner 60574 23150 1 +ZCorner 60719 23029 0 +ZCorner 60715 23034 0 +ZCorner 60711 23039 0 +ZCorner 60707 23044 0 +ZCorner 60703 23048 0 +ZCorner 60645 23113 0 +ZCorner 60615 23166 0 +ZCorner 60615 23208 0 +ZCorner 60645 23240 0 +ZCorner 60696 23241 0 +ZCorner 60745 23222 0 +ZCorner 60791 23183 0 +ZCorner 60836 23123 0 +ZCorner 60842 23117 0 +ZCorner 60848 23111 0 +ZCorner 60854 23105 0 +ZCorner 60860 23099 0 +ZCorner 60863 23088 0 +ZCorner 60867 23076 0 +ZCorner 60871 23064 0 +ZCorner 60875 23052 0 +ZCorner 60865 23038 0 +ZCorner 60856 23023 0 +ZCorner 60846 23009 0 +ZCorner 60836 22994 0 +ZCorner 60827 22991 0 +ZCorner 60818 22988 0 +ZCorner 60810 22985 0 +ZCorner 60801 22982 0 +ZCorner 60791 22984 0 +ZCorner 60781 22986 0 +ZCorner 60772 22988 0 +ZCorner 60762 22990 0 +ZCorner 60751 23000 0 +ZCorner 60740 23009 0 +ZCorner 60730 23019 0 +ZCorner 60719 23029 1 +$POLYSCORNERS +60696 23241 0 0 +60696 23285 0 0 +60793 23252 0 0 +60807 23242 0 0 +60813 23237 0 0 +60820 23232 0 0 +60891 23146 0 0 +60919 23071 0 0 +60905 23006 0 0 +60848 22951 0 0 +60785 22935 0 0 +60720 22956 0 0 +60653 23015 0 0 +60586 23111 0 0 +60580 23131 0 0 +60577 23140 0 0 +60574 23150 0 0 +60586 23233 0 0 +60627 23278 0 0 +60696 23285 0 0 +60696 23241 0 0 +60645 23240 0 0 +60615 23208 0 0 +60615 23166 0 0 +60645 23113 0 0 +60703 23048 0 0 +60707 23044 0 0 +60719 23029 0 0 +60730 23019 0 0 +60740 23009 0 0 +60751 23000 0 0 +60762 22990 0 0 +60772 22988 0 0 +60781 22986 0 0 +60801 22982 0 0 +60810 22985 0 0 +60818 22988 0 0 +60836 22994 0 0 +60846 23009 0 0 +60856 23023 0 0 +60865 23038 0 0 +60875 23052 0 0 +60863 23088 0 0 +60860 23099 0 0 +60836 23123 0 0 +60791 23183 0 0 +60745 23222 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660017 0 "" +ZLayer 20 +ZAux 54 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 57473 28774 0 +ZCorner 57450 28898 0 +ZCorner 57409 28982 0 +ZCorner 57350 29028 0 +ZCorner 57274 29036 0 +ZCorner 57202 29003 0 +ZCorner 57172 28939 0 +ZCorner 57184 28844 0 +ZCorner 57239 28719 0 +ZCorner 57318 28663 0 +ZCorner 57383 28653 0 +ZCorner 57435 28690 0 +ZCorner 57473 28774 1 +ZCorner 57235 28871 0 +ZCorner 57234 28878 0 +ZCorner 57233 28885 0 +ZCorner 57232 28892 0 +ZCorner 57231 28899 0 +ZCorner 57229 28908 0 +ZCorner 57227 28916 0 +ZCorner 57226 28925 0 +ZCorner 57224 28934 0 +ZCorner 57226 28942 0 +ZCorner 57229 28950 0 +ZCorner 57232 28957 0 +ZCorner 57235 28965 0 +ZCorner 57246 28972 0 +ZCorner 57257 28979 0 +ZCorner 57267 28986 0 +ZCorner 57278 28992 0 +ZCorner 57288 28992 0 +ZCorner 57298 28992 0 +ZCorner 57307 28992 0 +ZCorner 57317 28992 0 +ZCorner 57326 28988 0 +ZCorner 57335 28983 0 +ZCorner 57344 28978 0 +ZCorner 57352 28973 0 +ZCorner 57360 28959 0 +ZCorner 57368 28946 0 +ZCorner 57376 28932 0 +ZCorner 57384 28918 0 +ZCorner 57414 28822 0 +ZCorner 57422 28752 0 +ZCorner 57408 28708 0 +ZCorner 57372 28692 0 +ZCorner 57324 28705 0 +ZCorner 57286 28739 0 +ZCorner 57258 28793 0 +ZCorner 57239 28868 0 +ZCorner 57238 28869 0 +ZCorner 57237 28869 0 +ZCorner 57236 28870 0 +ZCorner 57235 28871 1 +$POLYSCORNERS +57274 29036 0 0 +57278 29035 0 0 +57278 28992 0 0 +57267 28986 0 0 +57257 28979 0 0 +57235 28965 0 0 +57232 28957 0 0 +57229 28950 0 0 +57226 28942 0 0 +57224 28934 0 0 +57226 28925 0 0 +57227 28916 0 0 +57229 28908 0 0 +57231 28899 0 0 +57235 28871 0 0 +57237 28869 0 0 +57238 28869 0 0 +57239 28868 0 0 +57258 28793 0 0 +57286 28739 0 0 +57324 28705 0 0 +57372 28692 0 0 +57408 28708 0 0 +57422 28752 0 0 +57414 28822 0 0 +57384 28918 0 0 +57368 28946 0 0 +57360 28959 0 0 +57352 28973 0 0 +57344 28978 0 0 +57326 28988 0 0 +57317 28992 0 0 +57278 28992 0 0 +57278 29035 0 0 +57350 29028 0 0 +57409 28982 0 0 +57450 28898 0 0 +57473 28774 0 0 +57435 28690 0 0 +57383 28653 0 0 +57318 28663 0 0 +57239 28719 0 0 +57184 28844 0 0 +57172 28939 0 0 +57202 29003 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660018 0 "" +ZLayer 20 +ZAux 33 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 57970 28824 0 +ZCorner 57982 28826 0 +ZCorner 57995 28828 0 +ZCorner 58007 28830 0 +ZCorner 58020 28832 0 +ZCorner 58006 28927 0 +ZCorner 57991 29022 0 +ZCorner 57976 29117 0 +ZCorner 57962 29211 0 +ZCorner 57952 29210 0 +ZCorner 57942 29209 0 +ZCorner 57932 29208 0 +ZCorner 57923 29207 0 +ZCorner 57896 29165 0 +ZCorner 57870 29132 0 +ZCorner 57845 29108 0 +ZCorner 57821 29094 0 +ZCorner 57823 29083 0 +ZCorner 57825 29071 0 +ZCorner 57827 29059 0 +ZCorner 57829 29047 0 +ZCorner 57848 29054 0 +ZCorner 57869 29067 0 +ZCorner 57890 29087 0 +ZCorner 57911 29114 0 +ZCorner 57914 29107 0 +ZCorner 57917 29100 0 +ZCorner 57920 29093 0 +ZCorner 57923 29086 0 +ZCorner 57935 29021 0 +ZCorner 57946 28955 0 +ZCorner 57958 28890 0 +ZCorner 57970 28824 1 +$POLYSCORNERS +57962 29211 0 0 +57976 29117 0 0 +58006 28927 0 0 +58020 28832 0 0 +58007 28830 0 0 +57995 28828 0 0 +57982 28826 0 0 +57970 28824 0 0 +57958 28890 0 0 +57946 28955 0 0 +57935 29021 0 0 +57923 29086 0 0 +57911 29114 0 0 +57890 29087 0 0 +57869 29067 0 0 +57848 29054 0 0 +57829 29047 0 0 +57823 29083 0 0 +57821 29094 0 0 +57845 29108 0 0 +57870 29132 0 0 +57896 29165 0 0 +57923 29207 0 0 +57932 29208 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660019 0 "" +ZLayer 20 +ZAux 37 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 58149 29145 0 +ZCorner 58148 29132 0 +ZCorner 58147 29120 0 +ZCorner 58146 29107 0 +ZCorner 58146 29094 0 +ZCorner 58168 29109 0 +ZCorner 58190 29123 0 +ZCorner 58213 29138 0 +ZCorner 58235 29153 0 +ZCorner 58237 29152 0 +ZCorner 58239 29151 0 +ZCorner 58241 29150 0 +ZCorner 58243 29149 0 +ZCorner 58243 29143 0 +ZCorner 58243 29137 0 +ZCorner 58243 29131 0 +ZCorner 58243 29125 0 +ZCorner 58248 29059 0 +ZCorner 58253 28993 0 +ZCorner 58258 28926 0 +ZCorner 58263 28860 0 +ZCorner 58276 28861 0 +ZCorner 58290 28862 0 +ZCorner 58304 28863 0 +ZCorner 58318 28864 0 +ZCorner 58312 28960 0 +ZCorner 58306 29057 0 +ZCorner 58300 29154 0 +ZCorner 58294 29250 0 +ZCorner 58285 29250 0 +ZCorner 58277 29250 0 +ZCorner 58268 29250 0 +ZCorner 58259 29250 0 +ZCorner 58232 29213 0 +ZCorner 58204 29183 0 +ZCorner 58176 29161 0 +ZCorner 58149 29145 1 +$POLYSCORNERS +58294 29250 0 0 +58300 29154 0 0 +58312 28960 0 0 +58318 28864 0 0 +58276 28861 0 0 +58263 28860 0 0 +58258 28926 0 0 +58253 28993 0 0 +58243 29125 0 0 +58243 29149 0 0 +58235 29153 0 0 +58213 29138 0 0 +58190 29123 0 0 +58168 29109 0 0 +58146 29094 0 0 +58146 29107 0 0 +58147 29120 0 0 +58148 29132 0 0 +58149 29145 0 0 +58176 29161 0 0 +58204 29183 0 0 +58232 29213 0 0 +58259 29250 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66001A 0 "" +ZLayer 20 +ZAux 66 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 57766 28844 0 +ZCorner 57767 28848 0 +ZCorner 57768 28852 0 +ZCorner 57769 28856 0 +ZCorner 57770 28860 0 +ZCorner 57754 28986 0 +ZCorner 57718 29074 0 +ZCorner 57662 29123 0 +ZCorner 57587 29133 0 +ZCorner 57519 29112 0 +ZCorner 57487 29055 0 +ZCorner 57490 28961 0 +ZCorner 57528 28832 0 +ZCorner 57590 28765 0 +ZCorner 57650 28744 0 +ZCorner 57710 28769 0 +ZCorner 57767 28840 0 +ZCorner 57767 28841 0 +ZCorner 57767 28842 0 +ZCorner 57767 28843 0 +ZCorner 57766 28844 1 +ZCorner 57563 28871 0 +ZCorner 57560 28881 0 +ZCorner 57558 28891 0 +ZCorner 57555 28901 0 +ZCorner 57552 28910 0 +ZCorner 57551 28911 0 +ZCorner 57550 28912 0 +ZCorner 57549 28913 0 +ZCorner 57548 28914 0 +ZCorner 57547 28929 0 +ZCorner 57546 28944 0 +ZCorner 57545 28958 0 +ZCorner 57544 28973 0 +ZCorner 57543 28973 0 +ZCorner 57542 28973 0 +ZCorner 57541 28973 0 +ZCorner 57540 28973 0 +ZCorner 57540 28979 0 +ZCorner 57540 28985 0 +ZCorner 57540 28990 0 +ZCorner 57540 28996 0 +ZCorner 57535 29035 0 +ZCorner 57544 29065 0 +ZCorner 57567 29086 0 +ZCorner 57606 29098 0 +ZCorner 57618 29093 0 +ZCorner 57630 29088 0 +ZCorner 57641 29083 0 +ZCorner 57653 29078 0 +ZCorner 57658 29072 0 +ZCorner 57663 29065 0 +ZCorner 57668 29058 0 +ZCorner 57673 29051 0 +ZCorner 57675 29044 0 +ZCorner 57677 29037 0 +ZCorner 57679 29031 0 +ZCorner 57681 29024 0 +ZCorner 57706 28954 0 +ZCorner 57716 28894 0 +ZCorner 57711 28844 0 +ZCorner 57692 28805 0 +ZCorner 57653 28787 0 +ZCorner 57619 28793 0 +ZCorner 57589 28821 0 +ZCorner 57563 28871 1 +$POLYSCORNERS +57587 29133 0 0 +57606 29130 0 0 +57606 29098 0 0 +57567 29086 0 0 +57544 29065 0 0 +57535 29035 0 0 +57540 28996 0 0 +57540 28973 0 0 +57544 28973 0 0 +57545 28958 0 0 +57546 28944 0 0 +57548 28914 0 0 +57552 28910 0 0 +57555 28901 0 0 +57558 28891 0 0 +57560 28881 0 0 +57563 28871 0 0 +57589 28821 0 0 +57619 28793 0 0 +57653 28787 0 0 +57692 28805 0 0 +57711 28844 0 0 +57716 28894 0 0 +57706 28954 0 0 +57681 29024 0 0 +57679 29031 0 0 +57677 29037 0 0 +57673 29051 0 0 +57658 29072 0 0 +57653 29078 0 0 +57641 29083 0 0 +57630 29088 0 0 +57606 29098 0 0 +57606 29130 0 0 +57662 29123 0 0 +57718 29074 0 0 +57754 28986 0 0 +57770 28860 0 0 +57766 28844 0 0 +57767 28843 0 0 +57767 28840 0 0 +57710 28769 0 0 +57650 28744 0 0 +57590 28765 0 0 +57528 28832 0 0 +57490 28961 0 0 +57487 29055 0 0 +57519 29112 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66001B 0 "" +ZLayer 20 +ZAux 54 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59817 28684 0 +ZCorner 59823 28601 0 +ZCorner 59861 28553 0 +ZCorner 59929 28540 0 +ZCorner 60028 28563 0 +ZCorner 60096 28673 0 +ZCorner 60127 28763 0 +ZCorner 60118 28834 0 +ZCorner 60071 28887 0 +ZCorner 59975 28897 0 +ZCorner 59902 28868 0 +ZCorner 59850 28802 0 +ZCorner 59821 28700 0 +ZCorner 59820 28698 0 +ZCorner 59819 28696 0 +ZCorner 59818 28694 0 +ZCorner 59817 28692 0 +ZCorner 59817 28690 0 +ZCorner 59817 28688 0 +ZCorner 59817 28686 0 +ZCorner 59817 28684 1 +ZCorner 60059 28735 0 +ZCorner 60019 28646 0 +ZCorner 59978 28591 0 +ZCorner 59935 28568 0 +ZCorner 59891 28579 0 +ZCorner 59871 28633 0 +ZCorner 59871 28690 0 +ZCorner 59892 28752 0 +ZCorner 59934 28817 0 +ZCorner 59939 28824 0 +ZCorner 59944 28830 0 +ZCorner 59949 28837 0 +ZCorner 59953 28844 0 +ZCorner 59962 28849 0 +ZCorner 59971 28854 0 +ZCorner 59980 28859 0 +ZCorner 59989 28864 0 +ZCorner 60002 28862 0 +ZCorner 60016 28860 0 +ZCorner 60030 28858 0 +ZCorner 60043 28856 0 +ZCorner 60052 28844 0 +ZCorner 60061 28832 0 +ZCorner 60070 28821 0 +ZCorner 60078 28809 0 +ZCorner 60076 28792 0 +ZCorner 60074 28776 0 +ZCorner 60073 28759 0 +ZCorner 60071 28743 0 +ZCorner 60068 28741 0 +ZCorner 60065 28739 0 +ZCorner 60062 28737 0 +ZCorner 60059 28735 1 +$POLYSCORNERS +59975 28897 0 0 +59989 28895 0 0 +59989 28864 0 0 +59953 28844 0 0 +59949 28837 0 0 +59944 28830 0 0 +59939 28824 0 0 +59934 28817 0 0 +59892 28752 0 0 +59871 28690 0 0 +59871 28633 0 0 +59891 28579 0 0 +59935 28568 0 0 +59978 28591 0 0 +60019 28646 0 0 +60059 28735 0 0 +60071 28743 0 0 +60073 28759 0 0 +60074 28776 0 0 +60076 28792 0 0 +60078 28809 0 0 +60070 28821 0 0 +60061 28832 0 0 +60043 28856 0 0 +60030 28858 0 0 +60002 28862 0 0 +59989 28864 0 0 +59989 28895 0 0 +60071 28887 0 0 +60118 28834 0 0 +60127 28763 0 0 +60096 28673 0 0 +60028 28563 0 0 +59929 28540 0 0 +59861 28553 0 0 +59823 28601 0 0 +59817 28684 0 0 +59817 28692 0 0 +59821 28700 0 0 +59850 28802 0 0 +59902 28868 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66001C 0 "" +ZLayer 20 +ZAux 66 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59743 28684 0 +ZCorner 59743 28686 0 +ZCorner 59743 28688 0 +ZCorner 59743 28690 0 +ZCorner 59743 28692 0 +ZCorner 59746 28694 0 +ZCorner 59748 28696 0 +ZCorner 59751 28698 0 +ZCorner 59754 28700 0 +ZCorner 59811 28834 0 +ZCorner 59830 28934 0 +ZCorner 59811 28998 0 +ZCorner 59754 29028 0 +ZCorner 59661 29022 0 +ZCorner 59593 28982 0 +ZCorner 59550 28908 0 +ZCorner 59532 28801 0 +ZCorner 59551 28713 0 +ZCorner 59593 28663 0 +ZCorner 59657 28654 0 +ZCorner 59743 28684 1 +ZCorner 59688 28704 0 +ZCorner 59680 28701 0 +ZCorner 59672 28698 0 +ZCorner 59665 28695 0 +ZCorner 59657 28692 0 +ZCorner 59608 28707 0 +ZCorner 59583 28742 0 +ZCorner 59583 28797 0 +ZCorner 59606 28872 0 +ZCorner 59613 28888 0 +ZCorner 59620 28905 0 +ZCorner 59627 28922 0 +ZCorner 59633 28938 0 +ZCorner 59639 28947 0 +ZCorner 59645 28956 0 +ZCorner 59651 28964 0 +ZCorner 59657 28973 0 +ZCorner 59665 28978 0 +ZCorner 59672 28983 0 +ZCorner 59680 28988 0 +ZCorner 59688 28993 0 +ZCorner 59701 28992 0 +ZCorner 59713 28991 0 +ZCorner 59726 28990 0 +ZCorner 59739 28989 0 +ZCorner 59749 28979 0 +ZCorner 59758 28969 0 +ZCorner 59768 28959 0 +ZCorner 59778 28950 0 +ZCorner 59779 28937 0 +ZCorner 59780 28924 0 +ZCorner 59781 28912 0 +ZCorner 59782 28899 0 +ZCorner 59779 28894 0 +ZCorner 59776 28889 0 +ZCorner 59773 28884 0 +ZCorner 59770 28879 0 +ZCorner 59756 28844 0 +ZCorner 59743 28809 0 +ZCorner 59729 28774 0 +ZCorner 59715 28739 0 +ZCorner 59708 28730 0 +ZCorner 59702 28721 0 +ZCorner 59695 28712 0 +ZCorner 59688 28704 1 +$POLYSCORNERS +59754 29028 0 0 +59811 28998 0 0 +59830 28934 0 0 +59811 28834 0 0 +59754 28700 0 0 +59748 28696 0 0 +59746 28694 0 0 +59743 28692 0 0 +59743 28684 0 0 +59657 28654 0 0 +59593 28663 0 0 +59551 28713 0 0 +59532 28801 0 0 +59550 28908 0 0 +59593 28982 0 0 +59661 29022 0 0 +59688 29023 0 0 +59688 28993 0 0 +59672 28983 0 0 +59665 28978 0 0 +59657 28973 0 0 +59651 28964 0 0 +59645 28956 0 0 +59633 28938 0 0 +59627 28922 0 0 +59613 28888 0 0 +59606 28872 0 0 +59583 28797 0 0 +59583 28742 0 0 +59608 28707 0 0 +59657 28692 0 0 +59665 28695 0 0 +59672 28698 0 0 +59688 28704 0 0 +59695 28712 0 0 +59702 28721 0 0 +59708 28730 0 0 +59715 28739 0 0 +59743 28809 0 0 +59756 28844 0 0 +59770 28879 0 0 +59782 28899 0 0 +59781 28912 0 0 +59780 28924 0 0 +59778 28950 0 0 +59768 28959 0 0 +59758 28969 0 0 +59749 28979 0 0 +59739 28989 0 0 +59713 28991 0 0 +59701 28992 0 0 +59688 28993 0 0 +59688 29023 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66001D 0 "" +ZLayer 20 +ZAux 37 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59379 28747 0 +ZCorner 59406 28838 0 +ZCorner 59432 28930 0 +ZCorner 59458 29022 0 +ZCorner 59485 29114 0 +ZCorner 59476 29116 0 +ZCorner 59467 29118 0 +ZCorner 59459 29120 0 +ZCorner 59450 29122 0 +ZCorner 59428 29105 0 +ZCorner 59397 29089 0 +ZCorner 59357 29075 0 +ZCorner 59309 29063 0 +ZCorner 59307 29052 0 +ZCorner 59305 29041 0 +ZCorner 59303 29031 0 +ZCorner 59301 29020 0 +ZCorner 59328 29027 0 +ZCorner 59354 29034 0 +ZCorner 59380 29040 0 +ZCorner 59407 29047 0 +ZCorner 59408 29047 0 +ZCorner 59409 29047 0 +ZCorner 59410 29047 0 +ZCorner 59411 29047 0 +ZCorner 59410 29040 0 +ZCorner 59409 29034 0 +ZCorner 59408 29027 0 +ZCorner 59407 29020 0 +ZCorner 59388 28954 0 +ZCorner 59370 28889 0 +ZCorner 59351 28824 0 +ZCorner 59332 28758 0 +ZCorner 59344 28755 0 +ZCorner 59356 28752 0 +ZCorner 59368 28749 0 +ZCorner 59379 28747 1 +$POLYSCORNERS +59450 29122 0 0 +59459 29120 0 0 +59467 29118 0 0 +59485 29114 0 0 +59458 29022 0 0 +59406 28838 0 0 +59379 28747 0 0 +59368 28749 0 0 +59332 28758 0 0 +59351 28824 0 0 +59370 28889 0 0 +59388 28954 0 0 +59407 29020 0 0 +59409 29034 0 0 +59410 29040 0 0 +59411 29047 0 0 +59407 29047 0 0 +59380 29040 0 0 +59354 29034 0 0 +59328 29027 0 0 +59301 29020 0 0 +59303 29031 0 0 +59305 29041 0 0 +59309 29063 0 0 +59357 29075 0 0 +59397 29089 0 0 +59428 29105 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66001E 0 "" +ZLayer 20 +ZAux 33 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59043 28824 0 +ZCorner 59055 28823 0 +ZCorner 59067 28821 0 +ZCorner 59079 28819 0 +ZCorner 59090 28817 0 +ZCorner 59108 28911 0 +ZCorner 59125 29006 0 +ZCorner 59143 29101 0 +ZCorner 59160 29196 0 +ZCorner 59151 29197 0 +ZCorner 59141 29197 0 +ZCorner 59131 29198 0 +ZCorner 59121 29199 0 +ZCorner 59100 29175 0 +ZCorner 59071 29155 0 +ZCorner 59034 29138 0 +ZCorner 58989 29125 0 +ZCorner 58987 29113 0 +ZCorner 58985 29102 0 +ZCorner 58983 29090 0 +ZCorner 58981 29078 0 +ZCorner 59007 29087 0 +ZCorner 59033 29096 0 +ZCorner 59060 29105 0 +ZCorner 59086 29113 0 +ZCorner 59087 29108 0 +ZCorner 59088 29102 0 +ZCorner 59089 29096 0 +ZCorner 59090 29090 0 +ZCorner 59078 29024 0 +ZCorner 59067 28957 0 +ZCorner 59055 28891 0 +ZCorner 59043 28824 1 +$POLYSCORNERS +59121 29199 0 0 +59141 29197 0 0 +59151 29197 0 0 +59160 29196 0 0 +59143 29101 0 0 +59125 29006 0 0 +59108 28911 0 0 +59090 28817 0 0 +59079 28819 0 0 +59055 28823 0 0 +59043 28824 0 0 +59055 28891 0 0 +59067 28957 0 0 +59078 29024 0 0 +59090 29090 0 0 +59087 29108 0 0 +59086 29113 0 0 +59060 29105 0 0 +59033 29096 0 0 +58981 29078 0 0 +58985 29102 0 0 +58987 29113 0 0 +58989 29125 0 0 +59034 29138 0 0 +59071 29155 0 0 +59100 29175 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E66001F 0 "" +ZLayer 20 +ZAux 62 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 60356 28395 0 +ZCorner 60345 28298 0 +ZCorner 60371 28238 0 +ZCorner 60436 28214 0 +ZCorner 60539 28227 0 +ZCorner 60632 28328 0 +ZCorner 60675 28416 0 +ZCorner 60670 28490 0 +ZCorner 60617 28551 0 +ZCorner 60544 28570 0 +ZCorner 60476 28551 0 +ZCorner 60414 28493 0 +ZCorner 60356 28395 1 +ZCorner 60617 28489 0 +ZCorner 60620 28477 0 +ZCorner 60623 28465 0 +ZCorner 60626 28454 0 +ZCorner 60629 28442 0 +ZCorner 60623 28430 0 +ZCorner 60617 28419 0 +ZCorner 60612 28407 0 +ZCorner 60606 28395 0 +ZCorner 60553 28318 0 +ZCorner 60505 28268 0 +ZCorner 60462 28245 0 +ZCorner 60422 28247 0 +ZCorner 60415 28254 0 +ZCorner 60408 28260 0 +ZCorner 60402 28267 0 +ZCorner 60395 28274 0 +ZCorner 60393 28280 0 +ZCorner 60391 28286 0 +ZCorner 60389 28292 0 +ZCorner 60387 28297 0 +ZCorner 60387 28307 0 +ZCorner 60387 28317 0 +ZCorner 60387 28327 0 +ZCorner 60387 28336 0 +ZCorner 60404 28365 0 +ZCorner 60420 28393 0 +ZCorner 60437 28421 0 +ZCorner 60453 28450 0 +ZCorner 60461 28458 0 +ZCorner 60469 28467 0 +ZCorner 60477 28476 0 +ZCorner 60485 28485 0 +ZCorner 60486 28486 0 +ZCorner 60487 28487 0 +ZCorner 60487 28488 0 +ZCorner 60488 28489 0 +ZCorner 60498 28496 0 +ZCorner 60508 28504 0 +ZCorner 60518 28512 0 +ZCorner 60527 28520 0 +ZCorner 60540 28521 0 +ZCorner 60553 28522 0 +ZCorner 60566 28523 0 +ZCorner 60578 28524 0 +ZCorner 60588 28515 0 +ZCorner 60598 28506 0 +ZCorner 60608 28497 0 +ZCorner 60617 28489 1 +$POLYSCORNERS +60544 28570 0 0 +60578 28561 0 0 +60578 28524 0 0 +60566 28523 0 0 +60527 28520 0 0 +60518 28512 0 0 +60498 28496 0 0 +60488 28489 0 0 +60487 28488 0 0 +60487 28487 0 0 +60485 28485 0 0 +60461 28458 0 0 +60453 28450 0 0 +60437 28421 0 0 +60420 28393 0 0 +60404 28365 0 0 +60387 28336 0 0 +60387 28297 0 0 +60389 28292 0 0 +60395 28274 0 0 +60402 28267 0 0 +60408 28260 0 0 +60415 28254 0 0 +60422 28247 0 0 +60462 28245 0 0 +60505 28268 0 0 +60553 28318 0 0 +60606 28395 0 0 +60612 28407 0 0 +60617 28419 0 0 +60623 28430 0 0 +60629 28442 0 0 +60626 28454 0 0 +60623 28465 0 0 +60617 28489 0 0 +60608 28497 0 0 +60578 28524 0 0 +60578 28561 0 0 +60617 28551 0 0 +60670 28490 0 0 +60675 28416 0 0 +60632 28328 0 0 +60539 28227 0 0 +60436 28214 0 0 +60371 28238 0 0 +60345 28298 0 0 +60356 28395 0 0 +60414 28493 0 0 +60476 28551 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660020 0 "" +ZLayer 20 +ZAux 78 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 60750 28016 0 +ZCorner 60754 28019 0 +ZCorner 60758 28020 0 +ZCorner 60764 28022 0 +ZCorner 60770 28024 0 +ZCorner 60802 28055 0 +ZCorner 60834 28087 0 +ZCorner 60866 28118 0 +ZCorner 60899 28149 0 +ZCorner 60916 28178 0 +ZCorner 60923 28213 0 +ZCorner 60918 28253 0 +ZCorner 60902 28297 0 +ZCorner 60847 28354 0 +ZCorner 60779 28361 0 +ZCorner 60700 28318 0 +ZCorner 60609 28223 0 +ZCorner 60599 28206 0 +ZCorner 60589 28188 0 +ZCorner 60581 28169 0 +ZCorner 60574 28149 0 +ZCorner 60573 28138 0 +ZCorner 60572 28128 0 +ZCorner 60571 28117 0 +ZCorner 60570 28106 0 +ZCorner 60597 28052 0 +ZCorner 60635 28019 0 +ZCorner 60686 28007 0 +ZCorner 60750 28016 1 +ZCorner 60879 28231 0 +ZCorner 60872 28217 0 +ZCorner 60865 28204 0 +ZCorner 60858 28190 0 +ZCorner 60852 28176 0 +ZCorner 60850 28175 0 +ZCorner 60848 28174 0 +ZCorner 60846 28173 0 +ZCorner 60844 28172 0 +ZCorner 60844 28172 0 +ZCorner 60844 28171 0 +ZCorner 60844 28170 0 +ZCorner 60844 28169 0 +ZCorner 60840 28165 0 +ZCorner 60836 28161 0 +ZCorner 60832 28157 0 +ZCorner 60828 28153 0 +ZCorner 60759 28080 0 +ZCorner 60701 28049 0 +ZCorner 60656 28058 0 +ZCorner 60621 28106 0 +ZCorner 60623 28120 0 +ZCorner 60625 28134 0 +ZCorner 60627 28147 0 +ZCorner 60629 28161 0 +ZCorner 60648 28184 0 +ZCorner 60666 28208 0 +ZCorner 60685 28231 0 +ZCorner 60703 28255 0 +ZCorner 60713 28263 0 +ZCorner 60723 28270 0 +ZCorner 60732 28278 0 +ZCorner 60742 28286 0 +ZCorner 60755 28294 0 +ZCorner 60768 28302 0 +ZCorner 60780 28310 0 +ZCorner 60793 28317 0 +ZCorner 60804 28316 0 +ZCorner 60814 28315 0 +ZCorner 60825 28314 0 +ZCorner 60836 28313 0 +ZCorner 60843 28308 0 +ZCorner 60850 28302 0 +ZCorner 60856 28296 0 +ZCorner 60863 28290 0 +ZCorner 60867 28275 0 +ZCorner 60871 28261 0 +ZCorner 60875 28246 0 +ZCorner 60879 28231 1 +$POLYSCORNERS +60779 28361 0 0 +60793 28359 0 0 +60793 28317 0 0 +60780 28310 0 0 +60768 28302 0 0 +60742 28286 0 0 +60732 28278 0 0 +60723 28270 0 0 +60713 28263 0 0 +60703 28255 0 0 +60685 28231 0 0 +60666 28208 0 0 +60648 28184 0 0 +60629 28161 0 0 +60627 28147 0 0 +60625 28134 0 0 +60621 28106 0 0 +60656 28058 0 0 +60701 28049 0 0 +60759 28080 0 0 +60828 28153 0 0 +60844 28169 0 0 +60844 28172 0 0 +60852 28176 0 0 +60858 28190 0 0 +60865 28204 0 0 +60872 28217 0 0 +60879 28231 0 0 +60871 28261 0 0 +60867 28275 0 0 +60863 28290 0 0 +60856 28296 0 0 +60850 28302 0 0 +60843 28308 0 0 +60836 28313 0 0 +60814 28315 0 0 +60804 28316 0 0 +60793 28317 0 0 +60793 28359 0 0 +60847 28354 0 0 +60902 28297 0 0 +60918 28253 0 0 +60923 28213 0 0 +60916 28178 0 0 +60899 28149 0 0 +60866 28118 0 0 +60834 28087 0 0 +60802 28055 0 0 +60770 28024 0 0 +60758 28020 0 0 +60754 28019 0 0 +60750 28016 0 0 +60686 28007 0 0 +60635 28019 0 0 +60597 28052 0 0 +60570 28106 0 0 +60572 28128 0 0 +60573 28138 0 0 +60574 28149 0 0 +60581 28169 0 0 +60589 28188 0 0 +60599 28206 0 0 +60609 28223 0 0 +60700 28318 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660021 0 "" +ZLayer 20 +ZAux 33 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 60149 28403 0 +ZCorner 60159 28397 0 +ZCorner 60170 28391 0 +ZCorner 60181 28385 0 +ZCorner 60192 28379 0 +ZCorner 60243 28458 0 +ZCorner 60295 28536 0 +ZCorner 60347 28614 0 +ZCorner 60399 28692 0 +ZCorner 60393 28698 0 +ZCorner 60387 28704 0 +ZCorner 60381 28709 0 +ZCorner 60375 28715 0 +ZCorner 60337 28703 0 +ZCorner 60298 28697 0 +ZCorner 60258 28694 0 +ZCorner 60215 28696 0 +ZCorner 60209 28687 0 +ZCorner 60204 28678 0 +ZCorner 60198 28669 0 +ZCorner 60192 28661 0 +ZCorner 60219 28659 0 +ZCorner 60247 28657 0 +ZCorner 60274 28655 0 +ZCorner 60301 28653 0 +ZCorner 60298 28647 0 +ZCorner 60295 28641 0 +ZCorner 60292 28635 0 +ZCorner 60290 28629 0 +ZCorner 60254 28573 0 +ZCorner 60219 28516 0 +ZCorner 60184 28459 0 +ZCorner 60149 28403 1 +$POLYSCORNERS +60375 28715 0 0 +60381 28709 0 0 +60387 28704 0 0 +60399 28692 0 0 +60243 28458 0 0 +60192 28379 0 0 +60159 28397 0 0 +60149 28403 0 0 +60184 28459 0 0 +60254 28573 0 0 +60290 28629 0 0 +60292 28635 0 0 +60301 28653 0 0 +60247 28657 0 0 +60219 28659 0 0 +60192 28661 0 0 +60198 28669 0 0 +60204 28678 0 0 +60209 28687 0 0 +60215 28696 0 0 +60258 28694 0 0 +60298 28697 0 0 +60337 28703 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660022 0 "" +ZLayer 20 +ZAux 82 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 58665 28887 0 +ZCorner 58668 28883 0 +ZCorner 58672 28879 0 +ZCorner 58676 28875 0 +ZCorner 58680 28871 0 +ZCorner 58694 28867 0 +ZCorner 58708 28862 0 +ZCorner 58721 28857 0 +ZCorner 58735 28852 0 +ZCorner 58744 28852 0 +ZCorner 58753 28852 0 +ZCorner 58761 28852 0 +ZCorner 58770 28852 0 +ZCorner 58782 28857 0 +ZCorner 58794 28862 0 +ZCorner 58805 28867 0 +ZCorner 58817 28871 0 +ZCorner 58828 28883 0 +ZCorner 58839 28895 0 +ZCorner 58849 28907 0 +ZCorner 58860 28918 0 +ZCorner 58887 29050 0 +ZCorner 58886 29148 0 +ZCorner 58858 29212 0 +ZCorner 58801 29242 0 +ZCorner 58709 29237 0 +ZCorner 58649 29190 0 +ZCorner 58620 29102 0 +ZCorner 58622 28973 0 +ZCorner 58623 28970 0 +ZCorner 58624 28967 0 +ZCorner 58625 28964 0 +ZCorner 58626 28961 0 +ZCorner 58626 28960 0 +ZCorner 58626 28959 0 +ZCorner 58626 28958 0 +ZCorner 58626 28957 0 +ZCorner 58636 28940 0 +ZCorner 58645 28922 0 +ZCorner 58655 28905 0 +ZCorner 58665 28887 1 +ZCorner 58786 29207 0 +ZCorner 58794 29201 0 +ZCorner 58803 29194 0 +ZCorner 58812 29187 0 +ZCorner 58821 29180 0 +ZCorner 58823 29175 0 +ZCorner 58825 29170 0 +ZCorner 58827 29165 0 +ZCorner 58829 29161 0 +ZCorner 58830 29149 0 +ZCorner 58831 29137 0 +ZCorner 58832 29125 0 +ZCorner 58833 29114 0 +ZCorner 58833 29112 0 +ZCorner 58833 29110 0 +ZCorner 58833 29108 0 +ZCorner 58833 29106 0 +ZCorner 58833 29103 0 +ZCorner 58834 29100 0 +ZCorner 58835 29097 0 +ZCorner 58836 29094 0 +ZCorner 58825 28987 0 +ZCorner 58801 28919 0 +ZCorner 58766 28889 0 +ZCorner 58719 28899 0 +ZCorner 58689 28931 0 +ZCorner 58674 28981 0 +ZCorner 58674 29048 0 +ZCorner 58688 29133 0 +ZCorner 58694 29147 0 +ZCorner 58700 29161 0 +ZCorner 58706 29174 0 +ZCorner 58711 29188 0 +ZCorner 58715 29190 0 +ZCorner 58719 29192 0 +ZCorner 58723 29194 0 +ZCorner 58727 29196 0 +ZCorner 58742 29199 0 +ZCorner 58756 29202 0 +ZCorner 58771 29204 0 +ZCorner 58786 29207 1 +$POLYSCORNERS +58801 29242 0 0 +58858 29212 0 0 +58886 29148 0 0 +58887 29050 0 0 +58860 28918 0 0 +58849 28907 0 0 +58839 28895 0 0 +58817 28871 0 0 +58805 28867 0 0 +58794 28862 0 0 +58770 28852 0 0 +58735 28852 0 0 +58721 28857 0 0 +58708 28862 0 0 +58694 28867 0 0 +58680 28871 0 0 +58668 28883 0 0 +58665 28887 0 0 +58655 28905 0 0 +58645 28922 0 0 +58636 28940 0 0 +58626 28957 0 0 +58626 28961 0 0 +58622 28973 0 0 +58620 29102 0 0 +58649 29190 0 0 +58709 29237 0 0 +58786 29241 0 0 +58786 29207 0 0 +58771 29204 0 0 +58756 29202 0 0 +58742 29199 0 0 +58727 29196 0 0 +58711 29188 0 0 +58706 29174 0 0 +58700 29161 0 0 +58688 29133 0 0 +58674 29048 0 0 +58674 28981 0 0 +58689 28931 0 0 +58719 28899 0 0 +58766 28889 0 0 +58801 28919 0 0 +58825 28987 0 0 +58836 29094 0 0 +58833 29103 0 0 +58833 29114 0 0 +58832 29125 0 0 +58829 29161 0 0 +58827 29165 0 0 +58821 29180 0 0 +58794 29201 0 0 +58786 29207 0 0 +58786 29241 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E660023 0 "" +ZLayer 20 +ZAux 62 E +ZClearance 80 T +ZMinThickness 60 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 59524 22541 0 +ZCorner 59524 22540 0 +ZCorner 59524 22539 0 +ZCorner 59524 22538 0 +ZCorner 59524 22537 0 +ZCorner 59525 22529 0 +ZCorner 59526 22521 0 +ZCorner 59527 22513 0 +ZCorner 59528 22506 0 +ZCorner 59534 22475 0 +ZCorner 59541 22445 0 +ZCorner 59548 22415 0 +ZCorner 59555 22385 0 +ZCorner 59606 22305 0 +ZCorner 59664 22267 0 +ZCorner 59730 22270 0 +ZCorner 59805 22314 0 +ZCorner 59826 22360 0 +ZCorner 59825 22422 0 +ZCorner 59801 22499 0 +ZCorner 59754 22592 0 +ZCorner 59676 22638 0 +ZCorner 59611 22645 0 +ZCorner 59560 22612 0 +ZCorner 59524 22541 1 +ZCorner 59621 22385 0 +ZCorner 59621 22385 0 +ZCorner 59621 22386 0 +ZCorner 59621 22387 0 +ZCorner 59621 22388 0 +ZCorner 59588 22465 0 +ZCorner 59575 22527 0 +ZCorner 59583 22572 0 +ZCorner 59614 22603 0 +ZCorner 59660 22607 0 +ZCorner 59702 22577 0 +ZCorner 59738 22513 0 +ZCorner 59770 22416 0 +ZCorner 59771 22408 0 +ZCorner 59772 22400 0 +ZCorner 59773 22392 0 +ZCorner 59774 22385 0 +ZCorner 59745 22329 0 +ZCorner 59712 22308 0 +ZCorner 59673 22321 0 +ZCorner 59629 22369 0 +ZCorner 59628 22370 0 +ZCorner 59627 22371 0 +ZCorner 59626 22372 0 +ZCorner 59625 22373 0 +ZCorner 59624 22375 0 +ZCorner 59623 22377 0 +ZCorner 59622 22379 0 +ZCorner 59621 22381 0 +ZCorner 59621 22382 0 +ZCorner 59621 22383 0 +ZCorner 59621 22384 0 +ZCorner 59621 22385 0 +ZCorner 59621 22385 0 +ZCorner 59621 22385 0 +ZCorner 59621 22385 0 +ZCorner 59621 22385 1 +$POLYSCORNERS +59611 22645 0 0 +59660 22639 0 0 +59660 22607 0 0 +59614 22603 0 0 +59583 22572 0 0 +59575 22527 0 0 +59588 22465 0 0 +59621 22388 0 0 +59621 22381 0 0 +59625 22373 0 0 +59629 22369 0 0 +59673 22321 0 0 +59712 22308 0 0 +59745 22329 0 0 +59774 22385 0 0 +59773 22392 0 0 +59770 22416 0 0 +59738 22513 0 0 +59702 22577 0 0 +59660 22607 0 0 +59660 22639 0 0 +59676 22638 0 0 +59754 22592 0 0 +59801 22499 0 0 +59825 22422 0 0 +59826 22360 0 0 +59805 22314 0 0 +59730 22270 0 0 +59664 22267 0 0 +59606 22305 0 0 +59555 22385 0 0 +59534 22475 0 0 +59528 22506 0 0 +59527 22513 0 0 +59524 22537 0 0 +59524 22541 0 0 +59560 22612 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E63E176 0 "" +ZLayer 21 +ZAux 26 E +ZClearance 100 T +ZMinThickness 100 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 48804 23098 0 +ZCorner 48804 23838 0 +ZCorner 49190 23838 0 +ZCorner 49190 24582 0 +ZCorner 48804 24582 0 +ZCorner 48804 27097 0 +ZCorner 48816 27458 0 +ZCorner 48851 27614 0 +ZCorner 48975 27654 0 +ZCorner 49250 27667 0 +ZCorner 49250 28425 0 +ZCorner 48673 28425 0 +ZCorner 48254 28415 0 +ZCorner 47975 28384 0 +ZCorner 47778 28317 0 +ZCorner 47607 28196 0 +ZCorner 47477 28039 0 +ZCorner 47408 27860 0 +ZCorner 47379 27542 0 +ZCorner 47369 26969 0 +ZCorner 47369 24582 0 +ZCorner 47061 24582 0 +ZCorner 47061 23838 0 +ZCorner 47369 23838 0 +ZCorner 47369 23098 0 +ZCorner 48804 23098 1 +$POLYSCORNERS +49250 28425 0 0 +49250 27667 0 0 +48975 27654 0 0 +48851 27614 0 0 +48816 27458 0 0 +48804 27097 0 0 +48804 24582 0 0 +49190 24582 0 0 +49190 23838 0 0 +48804 23838 0 0 +48804 23098 0 0 +47369 23098 0 0 +47369 23838 0 0 +47061 23838 0 0 +47061 24582 0 0 +47369 24582 0 0 +47369 26969 0 0 +47379 27542 0 0 +47408 27860 0 0 +47477 28039 0 0 +47607 28196 0 0 +47778 28317 0 0 +47975 28384 0 0 +48254 28415 0 0 +48673 28425 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E63E177 0 "" +ZLayer 21 +ZAux 58 E +ZClearance 100 T +ZMinThickness 100 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 52624 25376 0 +ZCorner 52624 25951 0 +ZCorner 52624 26526 0 +ZCorner 52608 27076 0 +ZCorner 52560 27456 0 +ZCorner 52460 27742 0 +ZCorner 52288 28009 0 +ZCorner 52049 28232 0 +ZCorner 51751 28387 0 +ZCorner 51399 28479 0 +ZCorner 50999 28510 0 +ZCorner 50561 28484 0 +ZCorner 50195 28405 0 +ZCorner 49902 28274 0 +ZCorner 49683 28090 0 +ZCorner 49527 27857 0 +ZCorner 49423 27580 0 +ZCorner 49364 27206 0 +ZCorner 49345 26682 0 +ZCorner 49345 26080 0 +ZCorner 49345 25478 0 +ZCorner 49380 24895 0 +ZCorner 49486 24455 0 +ZCorner 49685 24123 0 +ZCorner 49996 23864 0 +ZCorner 50416 23696 0 +ZCorner 50938 23640 0 +ZCorner 51386 23676 0 +ZCorner 51765 23784 0 +ZCorner 52071 23949 0 +ZCorner 52298 24157 0 +ZCorner 52457 24391 0 +ZCorner 52555 24632 0 +ZCorner 52607 24940 0 +ZCorner 52624 25376 1 +ZCorner 51193 25021 0 +ZCorner 51184 24727 0 +ZCorner 51155 24566 0 +ZCorner 51094 24496 0 +ZCorner 50988 24472 0 +ZCorner 50882 24496 0 +ZCorner 50818 24566 0 +ZCorner 50786 24727 0 +ZCorner 50776 25021 0 +ZCorner 50776 26082 0 +ZCorner 50776 27143 0 +ZCorner 50786 27418 0 +ZCorner 50818 27576 0 +ZCorner 50881 27652 0 +ZCorner 50985 27677 0 +ZCorner 51090 27654 0 +ZCorner 51153 27585 0 +ZCorner 51183 27440 0 +ZCorner 51194 27189 0 +ZCorner 51194 26105 0 +ZCorner 51194 25021 0 +ZCorner 51194 25021 0 +ZCorner 51193 25021 1 +$POLYSCORNERS +50999 28510 0 0 +51399 28479 0 0 +51751 28387 0 0 +52049 28232 0 0 +52288 28009 0 0 +52460 27742 0 0 +52560 27456 0 0 +52608 27076 0 0 +52624 26526 0 0 +52624 25376 0 0 +52607 24940 0 0 +52555 24632 0 0 +52457 24391 0 0 +52298 24157 0 0 +52071 23949 0 0 +51765 23784 0 0 +51386 23676 0 0 +50938 23640 0 0 +50416 23696 0 0 +49996 23864 0 0 +49685 24123 0 0 +49486 24455 0 0 +49380 24895 0 0 +49345 25478 0 0 +49345 26682 0 0 +49364 27206 0 0 +49423 27580 0 0 +49527 27857 0 0 +49683 28090 0 0 +49902 28274 0 0 +50195 28405 0 0 +50561 28484 0 0 +50985 28509 0 0 +50985 27677 0 0 +50881 27652 0 0 +50818 27576 0 0 +50786 27418 0 0 +50776 27143 0 0 +50776 25021 0 0 +50786 24727 0 0 +50818 24566 0 0 +50882 24496 0 0 +50988 24472 0 0 +51094 24496 0 0 +51155 24566 0 0 +51184 24727 0 0 +51193 25021 0 0 +51194 25021 0 0 +51194 27189 0 0 +51183 27440 0 0 +51153 27585 0 0 +51090 27654 0 0 +50985 27677 0 0 +50985 28509 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E63E178 0 "" +ZLayer 21 +ZAux 56 E +ZClearance 100 T +ZMinThickness 100 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 56332 25376 0 +ZCorner 56332 25951 0 +ZCorner 56332 26526 0 +ZCorner 56316 27076 0 +ZCorner 56268 27456 0 +ZCorner 56168 27742 0 +ZCorner 55996 28009 0 +ZCorner 55757 28232 0 +ZCorner 55459 28387 0 +ZCorner 55107 28479 0 +ZCorner 54707 28510 0 +ZCorner 54268 28484 0 +ZCorner 53903 28405 0 +ZCorner 53610 28274 0 +ZCorner 53391 28090 0 +ZCorner 53235 27857 0 +ZCorner 53131 27580 0 +ZCorner 53072 27206 0 +ZCorner 53053 26682 0 +ZCorner 53053 26080 0 +ZCorner 53053 25478 0 +ZCorner 53088 24895 0 +ZCorner 53194 24455 0 +ZCorner 53393 24123 0 +ZCorner 53704 23864 0 +ZCorner 54124 23696 0 +ZCorner 54646 23640 0 +ZCorner 55094 23676 0 +ZCorner 55473 23784 0 +ZCorner 55779 23949 0 +ZCorner 56006 24157 0 +ZCorner 56164 24391 0 +ZCorner 56263 24632 0 +ZCorner 56315 24940 0 +ZCorner 56332 25376 1 +ZCorner 54901 25021 0 +ZCorner 54892 24727 0 +ZCorner 54862 24566 0 +ZCorner 54801 24496 0 +ZCorner 54696 24472 0 +ZCorner 54590 24496 0 +ZCorner 54526 24566 0 +ZCorner 54494 24727 0 +ZCorner 54483 25021 0 +ZCorner 54483 26082 0 +ZCorner 54483 27143 0 +ZCorner 54494 27418 0 +ZCorner 54526 27576 0 +ZCorner 54589 27652 0 +ZCorner 54692 27677 0 +ZCorner 54798 27654 0 +ZCorner 54861 27585 0 +ZCorner 54891 27440 0 +ZCorner 54901 27189 0 +ZCorner 54901 26105 0 +ZCorner 54901 25021 1 +$POLYSCORNERS +54707 28510 0 0 +55107 28479 0 0 +55459 28387 0 0 +55757 28232 0 0 +55996 28009 0 0 +56168 27742 0 0 +56268 27456 0 0 +56316 27076 0 0 +56332 26526 0 0 +56332 25376 0 0 +56315 24940 0 0 +56263 24632 0 0 +56164 24391 0 0 +56006 24157 0 0 +55779 23949 0 0 +55473 23784 0 0 +55094 23676 0 0 +54646 23640 0 0 +54124 23696 0 0 +53704 23864 0 0 +53393 24123 0 0 +53194 24455 0 0 +53088 24895 0 0 +53053 25478 0 0 +53053 26682 0 0 +53072 27206 0 0 +53131 27580 0 0 +53235 27857 0 0 +53391 28090 0 0 +53610 28274 0 0 +53903 28405 0 0 +54268 28484 0 0 +54692 28509 0 0 +54692 27677 0 0 +54589 27652 0 0 +54526 27576 0 0 +54494 27418 0 0 +54483 27143 0 0 +54483 25021 0 0 +54494 24727 0 0 +54526 24566 0 0 +54590 24496 0 0 +54696 24472 0 0 +54801 24496 0 0 +54862 24566 0 0 +54892 24727 0 0 +54901 25021 0 0 +54901 27189 0 0 +54891 27440 0 0 +54861 27585 0 0 +54798 27654 0 0 +54692 27677 0 0 +54692 28509 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E63E179 0 "" +ZLayer 21 +ZAux 17 E +ZClearance 100 T +ZMinThickness 100 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 58984 23725 0 +ZCorner 58984 28425 0 +ZCorner 57553 28425 0 +ZCorner 57553 26569 0 +ZCorner 57511 25696 0 +ZCorner 57432 25527 0 +ZCorner 57284 25400 0 +ZCorner 57048 25321 0 +ZCorner 56707 25294 0 +ZCorner 56707 23640 0 +ZCorner 56985 23699 0 +ZCorner 57228 23836 0 +ZCorner 57436 24050 0 +ZCorner 57610 24343 0 +ZCorner 57553 23725 0 +ZCorner 58984 23725 0 +ZCorner 58984 23725 1 +$POLYSCORNERS +58984 28425 0 0 +58984 23725 0 0 +57553 23725 0 0 +57610 24343 0 0 +57436 24050 0 0 +57228 23836 0 0 +56985 23699 0 0 +56707 23640 0 0 +56707 25294 0 0 +57048 25321 0 0 +57284 25400 0 0 +57432 25527 0 0 +57511 25696 0 0 +57553 26569 0 0 +57553 28425 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E63E17A 0 "" +ZLayer 21 +ZAux 49 E +ZClearance 100 T +ZMinThickness 100 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 62562 25499 0 +ZCorner 61212 25499 0 +ZCorner 61212 24958 0 +ZCorner 61201 24720 0 +ZCorner 61166 24573 0 +ZCorner 61101 24498 0 +ZCorner 60996 24472 0 +ZCorner 60893 24495 0 +ZCorner 60830 24561 0 +ZCorner 60798 24705 0 +ZCorner 60787 24958 0 +ZCorner 60787 27174 0 +ZCorner 60803 27395 0 +ZCorner 60851 27552 0 +ZCorner 60930 27646 0 +ZCorner 61038 27677 0 +ZCorner 61160 27645 0 +ZCorner 61235 27546 0 +ZCorner 61274 27357 0 +ZCorner 61286 27051 0 +ZCorner 61286 26491 0 +ZCorner 62561 26491 0 +ZCorner 62549 26984 0 +ZCorner 62520 27336 0 +ZCorner 62443 27621 0 +ZCorner 62283 27913 0 +ZCorner 62053 28172 0 +ZCorner 61761 28359 0 +ZCorner 61401 28472 0 +ZCorner 60964 28509 0 +ZCorner 60422 28458 0 +ZCorner 60005 28302 0 +ZCorner 59702 28054 0 +ZCorner 59503 27721 0 +ZCorner 59393 27270 0 +ZCorner 59356 26661 0 +ZCorner 59356 25326 0 +ZCorner 59386 24801 0 +ZCorner 59477 24423 0 +ZCorner 59665 24135 0 +ZCorner 59990 23879 0 +ZCorner 60426 23700 0 +ZCorner 60946 23640 0 +ZCorner 61465 23699 0 +ZCorner 61902 23877 0 +ZCorner 62233 24146 0 +ZCorner 62430 24476 0 +ZCorner 62529 24912 0 +ZCorner 62562 25499 1 +$POLYSCORNERS +60964 28509 0 0 +61401 28472 0 0 +61761 28359 0 0 +62053 28172 0 0 +62283 27913 0 0 +62443 27621 0 0 +62520 27336 0 0 +62549 26984 0 0 +62561 26491 0 0 +61286 26491 0 0 +61286 27051 0 0 +61274 27357 0 0 +61235 27546 0 0 +61160 27645 0 0 +61038 27677 0 0 +60930 27646 0 0 +60851 27552 0 0 +60803 27395 0 0 +60787 27174 0 0 +60787 24958 0 0 +60798 24705 0 0 +60830 24561 0 0 +60893 24495 0 0 +60996 24472 0 0 +61101 24498 0 0 +61166 24573 0 0 +61201 24720 0 0 +61212 24958 0 0 +61212 25499 0 0 +62562 25499 0 0 +62529 24912 0 0 +62430 24476 0 0 +62233 24146 0 0 +61902 23877 0 0 +61465 23699 0 0 +60946 23640 0 0 +60426 23700 0 0 +59990 23879 0 0 +59665 24135 0 0 +59477 24423 0 0 +59386 24801 0 0 +59356 25326 0 0 +59356 26661 0 0 +59393 27270 0 0 +59503 27721 0 0 +59702 28054 0 0 +60005 28302 0 0 +60422 28458 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E63E17B 0 "" +ZLayer 21 +ZAux 56 E +ZClearance 100 T +ZMinThickness 100 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 66106 25376 0 +ZCorner 66106 25951 0 +ZCorner 66106 26526 0 +ZCorner 66090 27076 0 +ZCorner 66042 27456 0 +ZCorner 65942 27742 0 +ZCorner 65770 28009 0 +ZCorner 65531 28232 0 +ZCorner 65233 28387 0 +ZCorner 64881 28479 0 +ZCorner 64480 28510 0 +ZCorner 64042 28484 0 +ZCorner 63676 28405 0 +ZCorner 63384 28274 0 +ZCorner 63165 28090 0 +ZCorner 63008 27857 0 +ZCorner 62904 27580 0 +ZCorner 62846 27206 0 +ZCorner 62826 26682 0 +ZCorner 62826 26080 0 +ZCorner 62826 25478 0 +ZCorner 62862 24895 0 +ZCorner 62968 24455 0 +ZCorner 63166 24123 0 +ZCorner 63478 23864 0 +ZCorner 63898 23696 0 +ZCorner 64420 23640 0 +ZCorner 64868 23676 0 +ZCorner 65247 23784 0 +ZCorner 65553 23949 0 +ZCorner 65780 24157 0 +ZCorner 65938 24391 0 +ZCorner 66036 24632 0 +ZCorner 66088 24940 0 +ZCorner 66106 25376 1 +ZCorner 64675 25021 0 +ZCorner 64666 24727 0 +ZCorner 64636 24566 0 +ZCorner 64575 24496 0 +ZCorner 64469 24472 0 +ZCorner 64364 24496 0 +ZCorner 64299 24566 0 +ZCorner 64268 24727 0 +ZCorner 64257 25021 0 +ZCorner 64257 26082 0 +ZCorner 64257 27143 0 +ZCorner 64268 27418 0 +ZCorner 64299 27576 0 +ZCorner 64363 27652 0 +ZCorner 64466 27677 0 +ZCorner 64572 27654 0 +ZCorner 64634 27585 0 +ZCorner 64665 27440 0 +ZCorner 64675 27189 0 +ZCorner 64675 26105 0 +ZCorner 64675 25021 1 +$POLYSCORNERS +64480 28510 0 0 +64881 28479 0 0 +65233 28387 0 0 +65531 28232 0 0 +65770 28009 0 0 +65942 27742 0 0 +66042 27456 0 0 +66090 27076 0 0 +66106 26526 0 0 +66106 25376 0 0 +66088 24940 0 0 +66036 24632 0 0 +65938 24391 0 0 +65780 24157 0 0 +65553 23949 0 0 +65247 23784 0 0 +64868 23676 0 0 +64420 23640 0 0 +63898 23696 0 0 +63478 23864 0 0 +63166 24123 0 0 +62968 24455 0 0 +62862 24895 0 0 +62826 25478 0 0 +62826 26682 0 0 +62846 27206 0 0 +62904 27580 0 0 +63008 27857 0 0 +63165 28090 0 0 +63384 28274 0 0 +63676 28405 0 0 +64042 28484 0 0 +64466 28509 0 0 +64466 27677 0 0 +64363 27652 0 0 +64299 27576 0 0 +64268 27418 0 0 +64257 27143 0 0 +64257 25021 0 0 +64268 24727 0 0 +64299 24566 0 0 +64364 24496 0 0 +64469 24472 0 0 +64575 24496 0 0 +64636 24566 0 0 +64666 24727 0 0 +64675 25021 0 0 +64675 27189 0 0 +64665 27440 0 0 +64634 27585 0 0 +64572 27654 0 0 +64466 27677 0 0 +64466 28509 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$CZONE_OUTLINE +ZInfo 4E63E17C 0 "" +ZLayer 21 +ZAux 27 E +ZClearance 100 T +ZMinThickness 100 +ZOptions 0 16 F 200 200 +ZSmoothing 0 0 +ZCorner 68032 23725 0 +ZCorner 68008 24158 0 +ZCorner 68181 23932 0 +ZCorner 68388 23770 0 +ZCorner 68630 23673 0 +ZCorner 68907 23640 0 +ZCorner 69242 23684 0 +ZCorner 69509 23814 0 +ZCorner 69701 24010 0 +ZCorner 69810 24251 0 +ZCorner 69861 24603 0 +ZCorner 69877 25131 0 +ZCorner 69877 28425 0 +ZCorner 68447 28425 0 +ZCorner 68447 25170 0 +ZCorner 68439 24780 0 +ZCorner 68415 24579 0 +ZCorner 68355 24499 0 +ZCorner 68238 24472 0 +ZCorner 68114 24503 0 +ZCorner 68047 24595 0 +ZCorner 68017 24819 0 +ZCorner 68008 25248 0 +ZCorner 68008 28425 0 +ZCorner 66577 28425 0 +ZCorner 66577 23725 0 +ZCorner 68032 23725 1 +$POLYSCORNERS +69877 28425 0 0 +69877 25131 0 0 +69861 24603 0 0 +69810 24251 0 0 +69701 24010 0 0 +69509 23814 0 0 +69242 23684 0 0 +68907 23640 0 0 +68630 23673 0 0 +68388 23770 0 0 +68181 23932 0 0 +68008 24158 0 0 +68032 23725 0 0 +66577 23725 0 0 +66577 28425 0 0 +68008 28425 0 0 +68008 25248 0 0 +68017 24819 0 0 +68047 24595 0 0 +68114 24503 0 0 +68238 24472 0 0 +68355 24499 0 0 +68415 24579 0 0 +68439 24780 0 0 +68447 25170 0 0 +68447 28425 1 0 +$endPOLYSCORNERS +$endCZONE_OUTLINE +$EndBOARD diff --git a/samples/KiCad/ultimate-temp-controller.sch b/samples/KiCad/ultimate-temp-controller.sch new file mode 100644 index 00000000..8cac6465 --- /dev/null +++ b/samples/KiCad/ultimate-temp-controller.sch @@ -0,0 +1,69 @@ +EESchema Schematic File Version 2 +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:relays +LIBS:w_relay +LIBS:ultimate-temp-controller-cache +EELAYER 25 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 2 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Sheet +S 1400 2100 2150 2000 +U 54E5B803 +F0 "controller" 60 +F1 "controller.sch" 60 +F2 "TC+" I L 1400 2300 60 +F3 "TC-" I L 1400 2400 60 +F4 "VCC" I L 1400 3750 60 +F5 "GND" I L 1400 3900 60 +F6 "RS485A" I R 3550 3700 60 +F7 "RS485B" I R 3550 3800 60 +F8 "DRAIN" O R 3550 3300 60 +F9 "+5V" O R 3550 2250 60 +F10 "SDA" B R 3550 2350 60 +F11 "SCL" B R 3550 2450 60 +F12 "GND" O R 3550 2550 60 +F13 "RELAY_NO" I R 3550 2850 60 +F14 "RELAY_COM" I R 3550 3050 60 +F15 "RELAY_NC" I R 3550 2950 60 +$EndSheet +$EndSCHEMATC diff --git a/samples/LSL/LSL.lslp b/samples/LSL/LSL.lslp new file mode 100644 index 00000000..5d281b95 --- /dev/null +++ b/samples/LSL/LSL.lslp @@ -0,0 +1,74 @@ +/* + Testing syntax highlighting + for the Linden Scripting Language +*/ + +integer someIntNormal = 3672; +integer someIntHex = 0x00000000; +integer someIntMath = PI_BY_TWO; + +integer event = 5673;// 'event' is invalid.illegal + +key someKeyTexture = TEXTURE_DEFAULT; +string someStringSpecial = EOF; + +some_user_defined_function_without_return_type(string inputAsString) +{ + llSay(PUBLIC_CHANNEL, inputAsString); +} + +string user_defined_function_returning_a_string(key inputAsKey) +{ + return (string)inputAsKey; +} + +default +{ + state_entry() + { + key someKey = NULL_KEY; + someKey = llGetOwner(); + + string someString = user_defined_function_returning_a_string(someKey); + + some_user_defined_function_without_return_type(someString); + } + + touch_start(integer num_detected) + { + list agentsInRegion = llGetAgentList(AGENT_LIST_REGION, []); + integer numOfAgents = llGetListLength(agentsInRegion); + + integer index; // defaults to 0 + for (; index <= numOfAgents - 1; index++) // for each agent in region + { + llRegionSayTo(llList2Key(agentsInRegion, index), PUBLIC_CHANNEL, "Hello, Avatar!"); + } + } + + touch_end(integer num_detected) + { + someIntNormal = 3672; + someIntHex = 0x00000000; + someIntMath = PI_BY_TWO; + + event = 5673;// 'event' is invalid.illegal + + someKeyTexture = TEXTURE_DEFAULT; + someStringSpecial = EOF; + + llSetInventoryPermMask("some item", MASK_NEXT, PERM_ALL);// 'llSetInventoryPermMask' is reserved.godmode + + llWhisper(PUBLIC_CHANNEL, "Leaving \"default\" now..."); + state other; + } +} + +state other +{ + state_entry() + { + llWhisper(PUBLIC_CHANNEL, "Entered \"state other\", returning to \"default\" again..."); + state default; + } +} diff --git a/samples/Lean/binary.lean b/samples/Lean/binary.lean new file mode 100644 index 00000000..060a8cb0 --- /dev/null +++ b/samples/Lean/binary.lean @@ -0,0 +1,75 @@ +/- +Copyright (c) 2014 Microsoft Corporation. All rights reserved. +Released under Apache 2.0 license as described in the file LICENSE. + +Module: algebra.binary +Authors: Leonardo de Moura, Jeremy Avigad + +General properties of binary operations. +-/ + +import logic.eq +open eq.ops + +namespace binary + section + variable {A : Type} + variables (op₁ : A → A → A) (inv : A → A) (one : A) + + local notation a * b := op₁ a b + local notation a ⁻¹ := inv a + local notation 1 := one + + definition commutative := ∀a b, a * b = b * a + definition associative := ∀a b c, (a * b) * c = a * (b * c) + definition left_identity := ∀a, 1 * a = a + definition right_identity := ∀a, a * 1 = a + definition left_inverse := ∀a, a⁻¹ * a = 1 + definition right_inverse := ∀a, a * a⁻¹ = 1 + definition left_cancelative := ∀a b c, a * b = a * c → b = c + definition right_cancelative := ∀a b c, a * b = c * b → a = c + + definition inv_op_cancel_left := ∀a b, a⁻¹ * (a * b) = b + definition op_inv_cancel_left := ∀a b, a * (a⁻¹ * b) = b + definition inv_op_cancel_right := ∀a b, a * b⁻¹ * b = a + definition op_inv_cancel_right := ∀a b, a * b * b⁻¹ = a + + variable (op₂ : A → A → A) + + local notation a + b := op₂ a b + + definition left_distributive := ∀a b c, a * (b + c) = a * b + a * c + definition right_distributive := ∀a b c, (a + b) * c = a * c + b * c + end + + context + variable {A : Type} + variable {f : A → A → A} + variable H_comm : commutative f + variable H_assoc : associative f + infixl `*` := f + theorem left_comm : ∀a b c, a*(b*c) = b*(a*c) := + take a b c, calc + a*(b*c) = (a*b)*c : H_assoc + ... = (b*a)*c : H_comm + ... = b*(a*c) : H_assoc + + theorem right_comm : ∀a b c, (a*b)*c = (a*c)*b := + take a b c, calc + (a*b)*c = a*(b*c) : H_assoc + ... = a*(c*b) : H_comm + ... = (a*c)*b : H_assoc + end + + context + variable {A : Type} + variable {f : A → A → A} + variable H_assoc : associative f + infixl `*` := f + theorem assoc4helper (a b c d) : (a*b)*(c*d) = a*((b*c)*d) := + calc + (a*b)*(c*d) = a*(b*(c*d)) : H_assoc + ... = a*((b*c)*d) : H_assoc + end + +end binary diff --git a/samples/Lean/set.hlean b/samples/Lean/set.hlean new file mode 100644 index 00000000..761cd67d --- /dev/null +++ b/samples/Lean/set.hlean @@ -0,0 +1,70 @@ +-- Copyright (c) 2015 Jakob von Raumer. All rights reserved. +-- Released under Apache 2.0 license as described in the file LICENSE. +-- Authors: Jakob von Raumer +-- Category of sets + +import .basic types.pi trunc + +open truncation sigma sigma.ops pi function eq morphism precategory +open equiv + +namespace precategory + + universe variable l + + definition set_precategory : precategory.{l+1 l} (Σ (A : Type.{l}), is_hset A) := + begin + fapply precategory.mk.{l+1 l}, + intros, apply (a.1 → a_1.1), + intros, apply trunc_pi, intros, apply b.2, + intros, intro x, exact (a_1 (a_2 x)), + intros, exact (λ (x : a.1), x), + intros, apply funext.path_pi, intro x, apply idp, + intros, apply funext.path_pi, intro x, apply idp, + intros, apply funext.path_pi, intro x, apply idp, + end + +end precategory + +namespace category + + universe variable l + local attribute precategory.set_precategory.{l+1 l} [instance] + + definition set_category_equiv_iso (a b : (Σ (A : Type.{l}), is_hset A)) + : (a ≅ b) = (a.1 ≃ b.1) := + /-begin + apply ua, fapply equiv.mk, + intro H, + apply (isomorphic.rec_on H), intros (H1, H2), + apply (is_iso.rec_on H2), intros (H3, H4, H5), + fapply equiv.mk, + apply (isomorphic.rec_on H), intros (H1, H2), + exact H1, + fapply is_equiv.adjointify, exact H3, + exact sorry, + exact sorry, + end-/ sorry + + definition set_category : category.{l+1 l} (Σ (A : Type.{l}), is_hset A) := + /-begin + assert (C : precategory.{l+1 l} (Σ (A : Type.{l}), is_hset A)), + apply precategory.set_precategory, + apply category.mk, + assert (p : (λ A B p, (set_category_equiv_iso A B) ▹ iso_of_path p) = (λ A B p, @equiv_path A.1 B.1 p)), + apply is_equiv.adjointify, + intros, + apply (isomorphic.rec_on a_1), intros (iso', is_iso'), + apply (is_iso.rec_on is_iso'), intros (f', f'sect, f'retr), + fapply sigma.path, + apply ua, fapply equiv.mk, exact iso', + fapply is_equiv.adjointify, + exact f', + intros, apply (f'retr ▹ _), + intros, apply (f'sect ▹ _), + apply (@is_hprop.elim), + apply is_trunc_is_hprop, + intros, + end -/ sorry + +end category diff --git a/samples/Lex/zend_ini_scanner.l b/samples/Lex/zend_ini_scanner.l new file mode 100644 index 00000000..8aeb076e --- /dev/null +++ b/samples/Lex/zend_ini_scanner.l @@ -0,0 +1,601 @@ +/* + +----------------------------------------------------------------------+ + | Zend Engine | + +----------------------------------------------------------------------+ + | Copyright (c) 1998-2012 Zend Technologies Ltd. (http://www.zend.com) | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.00 of the Zend license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.zend.com/license/2_00.txt. | + | If you did not receive a copy of the Zend license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@zend.com so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Zeev Suraski | + | Jani Taskinen | + | Marcus Boerger | + | Nuno Lopes | + | Scott MacVicar | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#include +#include "zend.h" +#include "zend_globals.h" +#include +#include "zend_ini_scanner.h" + +#if 0 +# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c) +#else +# define YYDEBUG(s, c) +#endif + +#include "zend_ini_scanner_defs.h" + +#define YYCTYPE unsigned char +/* allow the scanner to read one null byte after the end of the string (from ZEND_MMAP_AHEAD) + * so that if will be able to terminate to match the current token (e.g. non-enclosed string) */ +#define YYFILL(n) { if (YYCURSOR > YYLIMIT) return 0; } +#define YYCURSOR SCNG(yy_cursor) +#define YYLIMIT SCNG(yy_limit) +#define YYMARKER SCNG(yy_marker) + +#define YYGETCONDITION() SCNG(yy_state) +#define YYSETCONDITION(s) SCNG(yy_state) = s + +#define STATE(name) yyc##name + +/* emulate flex constructs */ +#define BEGIN(state) YYSETCONDITION(STATE(state)) +#define YYSTATE YYGETCONDITION() +#define yytext ((char*)SCNG(yy_text)) +#define yyleng SCNG(yy_leng) +#define yyless(x) do { YYCURSOR = (unsigned char*)yytext + x; \ + yyleng = (unsigned int)x; } while(0) + +/* #define yymore() goto yymore_restart */ + +/* perform sanity check. If this message is triggered you should + increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */ +/*!max:re2c */ +#if ZEND_MMAP_AHEAD < (YYMAXFILL + 1) +# error ZEND_MMAP_AHEAD should be greater than YYMAXFILL +#endif + + +/* How it works (for the core ini directives): + * =========================================== + * + * 1. Scanner scans file for tokens and passes them to parser. + * 2. Parser parses the tokens and passes the name/value pairs to the callback + * function which stores them in the configuration hash table. + * 3. Later REGISTER_INI_ENTRIES() is called which triggers the actual + * registering of ini entries and uses zend_get_configuration_directive() + * to fetch the previously stored name/value pair from configuration hash table + * and registers the static ini entries which match the name to the value + * into EG(ini_directives) hash table. + * 4. PATH section entries are used per-request from down to top, each overriding + * previous if one exists. zend_alter_ini_entry() is called for each entry. + * Settings in PATH section are ZEND_INI_SYSTEM accessible and thus mimics the + * php_admin_* directives used within Apache httpd.conf when PHP is compiled as + * module for Apache. + * 5. User defined ini files (like .htaccess for apache) are parsed for each request and + * stored in separate hash defined by SAPI. + */ + +/* TODO: (ordered by importance :-) + * =============================================================================== + * + * - Separate constant lookup totally from plain strings (using CONSTANT pattern) + * - Add #if .. #else .. #endif and ==, !=, <, > , <=, >= operators + * - Add #include "some.ini" + * - Allow variables to refer to options also when using parse_ini_file() + * + */ + +/* Globals Macros */ +#define SCNG INI_SCNG +#ifdef ZTS +ZEND_API ts_rsrc_id ini_scanner_globals_id; +#else +ZEND_API zend_ini_scanner_globals ini_scanner_globals; +#endif + +/* Eat leading whitespace */ +#define EAT_LEADING_WHITESPACE() \ + while (yytext[0]) { \ + if (yytext[0] == ' ' || yytext[0] == '\t') { \ + SCNG(yy_text)++; \ + yyleng--; \ + } else { \ + break; \ + } \ + } + +/* Eat trailing whitespace + extra char */ +#define EAT_TRAILING_WHITESPACE_EX(ch) \ + while (yyleng > 0 && ( \ + (ch != 'X' && yytext[yyleng - 1] == ch) || \ + yytext[yyleng - 1] == '\n' || \ + yytext[yyleng - 1] == '\r' || \ + yytext[yyleng - 1] == '\t' || \ + yytext[yyleng - 1] == ' ') \ + ) { \ + yyleng--; \ + } + +/* Eat trailing whitespace */ +#define EAT_TRAILING_WHITESPACE() EAT_TRAILING_WHITESPACE_EX('X') + +#define zend_ini_copy_value(retval, str, len) { \ + Z_STRVAL_P(retval) = zend_strndup(str, len); \ + Z_STRLEN_P(retval) = len; \ + Z_TYPE_P(retval) = IS_STRING; \ +} + +#define RETURN_TOKEN(type, str, len) { \ + zend_ini_copy_value(ini_lval, str, len); \ + return type; \ +} + +static void _yy_push_state(int new_state TSRMLS_DC) +{ + zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int)); + YYSETCONDITION(new_state); +} + +#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm) + +static void yy_pop_state(TSRMLS_D) +{ + int *stack_state; + zend_stack_top(&SCNG(state_stack), (void **) &stack_state); + YYSETCONDITION(*stack_state); + zend_stack_del_top(&SCNG(state_stack)); +} + +static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC) +{ + YYCURSOR = (YYCTYPE*)str; + SCNG(yy_start) = YYCURSOR; + YYLIMIT = YYCURSOR + len; +} + +#define ini_filename SCNG(filename) + +/* {{{ init_ini_scanner() +*/ +static int init_ini_scanner(int scanner_mode, zend_file_handle *fh TSRMLS_DC) +{ + /* Sanity check */ + if (scanner_mode != ZEND_INI_SCANNER_NORMAL && scanner_mode != ZEND_INI_SCANNER_RAW) { + zend_error(E_WARNING, "Invalid scanner mode"); + return FAILURE; + } + + SCNG(lineno) = 1; + SCNG(scanner_mode) = scanner_mode; + SCNG(yy_in) = fh; + + if (fh != NULL) { + ini_filename = zend_strndup(fh->filename, strlen(fh->filename)); + } else { + ini_filename = NULL; + } + + zend_stack_init(&SCNG(state_stack)); + BEGIN(INITIAL); + + return SUCCESS; +} +/* }}} */ + +/* {{{ shutdown_ini_scanner() +*/ +void shutdown_ini_scanner(TSRMLS_D) +{ + zend_stack_destroy(&SCNG(state_stack)); + if (ini_filename) { + free(ini_filename); + } +} +/* }}} */ + +/* {{{ zend_ini_scanner_get_lineno() +*/ +int zend_ini_scanner_get_lineno(TSRMLS_D) +{ + return SCNG(lineno); +} +/* }}} */ + +/* {{{ zend_ini_scanner_get_filename() +*/ +char *zend_ini_scanner_get_filename(TSRMLS_D) +{ + return ini_filename ? ini_filename : "Unknown"; +} +/* }}} */ + +/* {{{ zend_ini_open_file_for_scanning() +*/ +int zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode TSRMLS_DC) +{ + char *buf; + size_t size; + + if (zend_stream_fixup(fh, &buf, &size TSRMLS_CC) == FAILURE) { + return FAILURE; + } + + if (init_ini_scanner(scanner_mode, fh TSRMLS_CC) == FAILURE) { + zend_file_handle_dtor(fh TSRMLS_CC); + return FAILURE; + } + + yy_scan_buffer(buf, size TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + +/* {{{ zend_ini_prepare_string_for_scanning() +*/ +int zend_ini_prepare_string_for_scanning(char *str, int scanner_mode TSRMLS_DC) +{ + int len = strlen(str); + + if (init_ini_scanner(scanner_mode, NULL TSRMLS_CC) == FAILURE) { + return FAILURE; + } + + yy_scan_buffer(str, len TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + +/* {{{ zend_ini_escape_string() + */ +static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_type TSRMLS_DC) +{ + register char *s, *t; + char *end; + + zend_ini_copy_value(lval, str, len); + + /* convert escape sequences */ + s = t = Z_STRVAL_P(lval); + end = s + Z_STRLEN_P(lval); + + while (s < end) { + if (*s == '\\') { + s++; + if (s >= end) { + *t++ = '\\'; + continue; + } + switch (*s) { + case '"': + if (*s != quote_type) { + *t++ = '\\'; + *t++ = *s; + break; + } + case '\\': + case '$': + *t++ = *s; + Z_STRLEN_P(lval)--; + break; + default: + *t++ = '\\'; + *t++ = *s; + break; + } + } else { + *t++ = *s; + } + if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { + SCNG(lineno)++; + } + s++; + } + *t = 0; +} +/* }}} */ + +int ini_lex(zval *ini_lval TSRMLS_DC) +{ +restart: + SCNG(yy_text) = YYCURSOR; + +/* yymore_restart: */ + /* detect EOF */ + if (YYCURSOR >= YYLIMIT) { + if (YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW)) { + BEGIN(INITIAL); + return END_OF_LINE; + } + return 0; + } + + /* Eat any UTF-8 BOM we find in the first 3 bytes */ + if (YYCURSOR == SCNG(yy_start) && YYCURSOR + 3 < YYLIMIT) { + if (memcmp(YYCURSOR, "\xef\xbb\xbf", 3) == 0) { + YYCURSOR += 3; + goto restart; + } + } +/*!re2c +re2c:yyfill:check = 0; +LNUM [0-9]+ +DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*) +NUMBER [-]?{LNUM}|{DNUM} +ANY_CHAR (.|[\n\t]) +NEWLINE ("\r"|"\n"|"\r\n") +TABS_AND_SPACES [ \t] +WHITESPACE [ \t]+ +CONSTANT [a-zA-Z_][a-zA-Z0-9_]* +LABEL [^=\n\r\t;|&$~(){}!"\[]+ +TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>?@{}] +OPERATORS [&|~()!] +DOLLAR_CURLY "${" + +SECTION_RAW_CHARS [^\]\n\r] +SINGLE_QUOTED_CHARS [^'] +RAW_VALUE_CHARS [^"\n\r;\000] + +LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR}))) +VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR}) +SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR}) + + := yyleng = YYCURSOR - SCNG(yy_text); + +"[" { /* Section start */ + /* Enter section data lookup state */ + if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { + yy_push_state(ST_SECTION_RAW TSRMLS_CC); + } else { + yy_push_state(ST_SECTION_VALUE TSRMLS_CC); + } + return TC_SECTION; +} + +"'"{SINGLE_QUOTED_CHARS}+"'" { /* Raw string */ + /* Eat leading and trailing single quotes */ + if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { + SCNG(yy_text)++; + yyleng = yyleng - 2; + } + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +"]"{TABS_AND_SPACES}*{NEWLINE}? { /* End of section */ + BEGIN(INITIAL); + SCNG(lineno)++; + return ']'; +} + +{LABEL}"["{TABS_AND_SPACES}* { /* Start of option with offset */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace and [ */ + EAT_TRAILING_WHITESPACE_EX('['); + + /* Enter offset lookup state */ + yy_push_state(ST_OFFSET TSRMLS_CC); + + RETURN_TOKEN(TC_OFFSET, yytext, yyleng); +} + +{TABS_AND_SPACES}*"]" { /* End of section or an option offset */ + BEGIN(INITIAL); + return ']'; +} + +{DOLLAR_CURLY} { /* Variable start */ + yy_push_state(ST_VARNAME TSRMLS_CC); + return TC_DOLLAR_CURLY; +} + +{LABEL} { /* Variable name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_VARNAME, yytext, yyleng); +} + +"}" { /* Variable end */ + yy_pop_state(TSRMLS_C); + return '}'; +} + +("true"|"on"|"yes"){TABS_AND_SPACES}* { /* TRUE value (when used outside option value/offset this causes parse error!) */ + RETURN_TOKEN(BOOL_TRUE, "1", 1); +} + +("false"|"off"|"no"|"none"|"null"){TABS_AND_SPACES}* { /* FALSE value (when used outside option value/offset this causes parse error!)*/ + RETURN_TOKEN(BOOL_FALSE, "", 0); +} + +{LABEL} { /* Get option name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_LABEL, yytext, yyleng); +} + +{TABS_AND_SPACES}*[=]{TABS_AND_SPACES}* { /* Start option value */ + if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { + yy_push_state(ST_RAW TSRMLS_CC); + } else { + yy_push_state(ST_VALUE TSRMLS_CC); + } + return '='; +} + +["] { + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\n': + SCNG(lineno)++; + break; + case '\r': + if (*YYCURSOR != '\n') { + SCNG(lineno)++; + } + break; + case '"': + yyleng = YYCURSOR - SCNG(yy_text) - 2; + SCNG(yy_text)++; + RETURN_TOKEN(TC_RAW, yytext, yyleng); + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + break; + } + } + yyleng = YYCURSOR - SCNG(yy_text); + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +{RAW_VALUE_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +{SECTION_RAW_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +{TABS_AND_SPACES}*{NEWLINE} { /* End of option value */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +{CONSTANT} { /* Get constant option value */ + RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); +} + +{NUMBER} { /* Get number option value as string */ + RETURN_TOKEN(TC_NUMBER, yytext, yyleng); +} + +{TOKENS} { /* Disallow these chars outside option values */ + return yytext[0]; +} + +{OPERATORS}{TABS_AND_SPACES}* { /* Boolean operators */ + return yytext[0]; +} + +[=] { /* Make = used in option value to trigger error */ + yyless(0); + BEGIN(INITIAL); + return END_OF_LINE; +} + +{VALUE_CHARS}+ { /* Get everything else as option/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} + +{SECTION_VALUE_CHARS}+ { /* Get rest as section/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} + +{TABS_AND_SPACES}*["] { /* Double quoted '"' string start */ + yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); + return '"'; +} + +["]{TABS_AND_SPACES}* { /* Double quoted '"' string ends */ + yy_pop_state(TSRMLS_C); + return '"'; +} + +[^] { /* Escape double quoted string contents */ + if (YYCURSOR > YYLIMIT) { + return 0; + } + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '"': + if (YYCURSOR < YYLIMIT && YYCURSOR[-2] == '\\' && *YYCURSOR != '\r' && *YYCURSOR != '\n') { + continue; + } + break; + case '$': + if (*YYCURSOR == '{') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT && *YYCURSOR != '"') { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + + yyleng = YYCURSOR - SCNG(yy_text); + + zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC); + return TC_QUOTED_STRING; +} + +{WHITESPACE} { + RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng); +} + +{TABS_AND_SPACES}+ { + /* eat whitespace */ + goto restart; +} + +{TABS_AND_SPACES}*{NEWLINE} { + SCNG(lineno)++; + return END_OF_LINE; +} + +{TABS_AND_SPACES}*[;][^\r\n]*{NEWLINE} { /* Comment */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +{TABS_AND_SPACES}*[#][^\r\n]*{NEWLINE} { /* #Comment */ + zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno)); + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +[^] { /* End of option value (if EOF is reached before EOL */ + BEGIN(INITIAL); + return END_OF_LINE; +} + +<*>[^] { + return 0; +} + +*/ +} diff --git a/samples/Limbo/cat.b b/samples/Limbo/cat.b new file mode 100644 index 00000000..5b9e3b5b --- /dev/null +++ b/samples/Limbo/cat.b @@ -0,0 +1,48 @@ +implement Cat; + +include "sys.m"; + sys: Sys; + +include "draw.m"; + +Cat: module +{ + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +stdout: ref Sys->FD; + +init(nil: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + stdout = sys->fildes(1); + args = tl args; + if(args == nil) + args = "-" :: nil; + for(; args != nil; args = tl args){ + file := hd args; + if(file != "-"){ + fd := sys->open(file, Sys->OREAD); + if(fd == nil){ + sys->fprint(sys->fildes(2), "cat: cannot open %s: %r\n", file); + raise "fail:bad open"; + } + cat(fd, file); + }else + cat(sys->fildes(0), ""); + } +} + +cat(fd: ref Sys->FD, file: string) +{ + buf := array[Sys->ATOMICIO] of byte; + while((n := sys->read(fd, buf, len buf)) > 0) + if(sys->write(stdout, buf, n) < n) { + sys->fprint(sys->fildes(2), "cat: write error: %r\n"); + raise "fail:write error"; + } + if(n < 0) { + sys->fprint(sys->fildes(2), "cat: error reading %s: %r\n", file); + raise "fail:read error"; + } +} diff --git a/samples/Limbo/lock.b b/samples/Limbo/lock.b new file mode 100644 index 00000000..8b51e4f9 --- /dev/null +++ b/samples/Limbo/lock.b @@ -0,0 +1,26 @@ +implement Lock; + +include "sys.m"; + sys: Sys; +include "lock.m"; + +Semaphore.obtain(l: self ref Semaphore) +{ + l.c <-= 0; +} + +Semaphore.release(l: self ref Semaphore) +{ + <-l.c; +} + +Semaphore.new(): ref Semaphore +{ + l := ref Semaphore; + l.c = chan[1] of int; + return l; +} + +init() +{ +} diff --git a/samples/Limbo/lock.m b/samples/Limbo/lock.m new file mode 100644 index 00000000..ffd818c5 --- /dev/null +++ b/samples/Limbo/lock.m @@ -0,0 +1,13 @@ +Lock: module +{ + PATH: con "/dis/lib/lock.dis"; + + Semaphore: adt { + c: chan of int; + obtain: fn(nil: self ref Semaphore); + release: fn(nil: self ref Semaphore); + new: fn(): ref Semaphore; + }; + + init: fn(); +}; diff --git a/samples/Linker Script/filenames/ld.script b/samples/Linker Script/filenames/ld.script new file mode 100644 index 00000000..8e6b07ca --- /dev/null +++ b/samples/Linker Script/filenames/ld.script @@ -0,0 +1,50 @@ +/* + * ld.script for compressed kernel support of MIPS + * + * Copyright (C) 2009 Lemote Inc. + * Author: Wu Zhangjin + * Copyright (C) 2010 "Wu Zhangjin" + */ + +OUTPUT_ARCH(mips) +ENTRY(start) +SECTIONS +{ + /* Text and read-only data */ + /* . = VMLINUZ_LOAD_ADDRESS; */ + .text : { + *(.text) + *(.rodata) + } + /* End of text section */ + + /* Writable data */ + .data : { + *(.data) + /* Put the compressed image here */ + __image_begin = .; + *(.image) + __image_end = .; + CONSTRUCTORS + } + . = ALIGN(16); + _edata = .; + /* End of data section */ + + /* BSS */ + .bss : { + *(.bss) + } + . = ALIGN(16); + _end = .; + + /* Sections to be discarded */ + /DISCARD/ : { + *(.MIPS.options) + *(.options) + *(.pdr) + *(.reginfo) + *(.comment) + *(.note) + } +} diff --git a/samples/Linker Script/link.ld b/samples/Linker Script/link.ld new file mode 100644 index 00000000..833fe462 --- /dev/null +++ b/samples/Linker Script/link.ld @@ -0,0 +1,12 @@ +/* +* link.ld +*/ +OUTPUT_FORMAT(elf32-i386) +ENTRY(start) +SECTIONS + { + . = 0x100000; + .text : { *(.text) } + .data : { *(.data) } + .bss : { *(.bss) } + } \ No newline at end of file diff --git a/samples/Linker Script/vmlinux.lds b/samples/Linker Script/vmlinux.lds new file mode 100644 index 00000000..00bf300f --- /dev/null +++ b/samples/Linker Script/vmlinux.lds @@ -0,0 +1,373 @@ +/* + * ld script for the x86 kernel + * + * Historic 32-bit version written by Martin Mares + * + * Modernisation, unification and other changes and fixes: + * Copyright (C) 2007-2009 Sam Ravnborg + * + * + * Don't define absolute symbols until and unless you know that symbol + * value is should remain constant even if kernel image is relocated + * at run time. Absolute symbols are not relocated. If symbol value should + * change if kernel is relocated, make the symbol section relative and + * put it inside the section definition. + */ + +#ifdef CONFIG_X86_32 +#define LOAD_OFFSET __PAGE_OFFSET +#else +#define LOAD_OFFSET __START_KERNEL_map +#endif + +#include +#include +#include +#include +#include +#include + +#undef i386 /* in case the preprocessor is a 32bit one */ + +OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) + +#ifdef CONFIG_X86_32 +OUTPUT_ARCH(i386) +ENTRY(phys_startup_32) +jiffies = jiffies_64; +#else +OUTPUT_ARCH(i386:x86-64) +ENTRY(phys_startup_64) +jiffies_64 = jiffies; +#endif + +#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) +/* + * On 64-bit, align RODATA to 2MB so that even with CONFIG_DEBUG_RODATA + * we retain large page mappings for boundaries spanning kernel text, rodata + * and data sections. + * + * However, kernel identity mappings will have different RWX permissions + * to the pages mapping to text and to the pages padding (which are freed) the + * text section. Hence kernel identity mappings will be broken to smaller + * pages. For 64-bit, kernel text and kernel identity mappings are different, + * so we can enable protection checks that come with CONFIG_DEBUG_RODATA, + * as well as retain 2MB large page mappings for kernel text. + */ +#define X64_ALIGN_DEBUG_RODATA_BEGIN . = ALIGN(HPAGE_SIZE); + +#define X64_ALIGN_DEBUG_RODATA_END \ + . = ALIGN(HPAGE_SIZE); \ + __end_rodata_hpage_align = .; + +#else + +#define X64_ALIGN_DEBUG_RODATA_BEGIN +#define X64_ALIGN_DEBUG_RODATA_END + +#endif + +PHDRS { + text PT_LOAD FLAGS(5); /* R_E */ + data PT_LOAD FLAGS(6); /* RW_ */ +#ifdef CONFIG_X86_64 +#ifdef CONFIG_SMP + percpu PT_LOAD FLAGS(6); /* RW_ */ +#endif + init PT_LOAD FLAGS(7); /* RWE */ +#endif + note PT_NOTE FLAGS(0); /* ___ */ +} + +SECTIONS +{ +#ifdef CONFIG_X86_32 + . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR; + phys_startup_32 = startup_32 - LOAD_OFFSET; +#else + . = __START_KERNEL; + phys_startup_64 = startup_64 - LOAD_OFFSET; +#endif + + /* Text and read-only data */ + .text : AT(ADDR(.text) - LOAD_OFFSET) { + _text = .; + /* bootstrapping code */ + HEAD_TEXT + . = ALIGN(8); + _stext = .; + TEXT_TEXT + SCHED_TEXT + LOCK_TEXT + KPROBES_TEXT + ENTRY_TEXT + IRQENTRY_TEXT + *(.fixup) + *(.gnu.warning) + /* End of text section */ + _etext = .; + } :text = 0x9090 + + NOTES :text :note + + EXCEPTION_TABLE(16) :text = 0x9090 + +#if defined(CONFIG_DEBUG_RODATA) + /* .text should occupy whole number of pages */ + . = ALIGN(PAGE_SIZE); +#endif + X64_ALIGN_DEBUG_RODATA_BEGIN + RO_DATA(PAGE_SIZE) + X64_ALIGN_DEBUG_RODATA_END + + /* Data */ + .data : AT(ADDR(.data) - LOAD_OFFSET) { + /* Start of data section */ + _sdata = .; + + /* init_task */ + INIT_TASK_DATA(THREAD_SIZE) + +#ifdef CONFIG_X86_32 + /* 32 bit has nosave before _edata */ + NOSAVE_DATA +#endif + + PAGE_ALIGNED_DATA(PAGE_SIZE) + + CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) + + DATA_DATA + CONSTRUCTORS + + /* rarely changed data like cpu maps */ + READ_MOSTLY_DATA(INTERNODE_CACHE_BYTES) + + /* End of data section */ + _edata = .; + } :data + + + . = ALIGN(PAGE_SIZE); + __vvar_page = .; + + .vvar : AT(ADDR(.vvar) - LOAD_OFFSET) { + /* work around gold bug 13023 */ + __vvar_beginning_hack = .; + + /* Place all vvars at the offsets in asm/vvar.h. */ +#define EMIT_VVAR(name, offset) \ + . = __vvar_beginning_hack + offset; \ + *(.vvar_ ## name) +#define __VVAR_KERNEL_LDS +#include +#undef __VVAR_KERNEL_LDS +#undef EMIT_VVAR + + /* + * Pad the rest of the page with zeros. Otherwise the loader + * can leave garbage here. + */ + . = __vvar_beginning_hack + PAGE_SIZE; + } :data + + . = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE); + + /* Init code and data - will be freed after init */ + . = ALIGN(PAGE_SIZE); + .init.begin : AT(ADDR(.init.begin) - LOAD_OFFSET) { + __init_begin = .; /* paired with __init_end */ + } + +#if defined(CONFIG_X86_64) && defined(CONFIG_SMP) + /* + * percpu offsets are zero-based on SMP. PERCPU_VADDR() changes the + * output PHDR, so the next output section - .init.text - should + * start another segment - init. + */ + PERCPU_VADDR(INTERNODE_CACHE_BYTES, 0, :percpu) + ASSERT(SIZEOF(.data..percpu) < CONFIG_PHYSICAL_START, + "per-CPU data too large - increase CONFIG_PHYSICAL_START") +#endif + + INIT_TEXT_SECTION(PAGE_SIZE) +#ifdef CONFIG_X86_64 + :init +#endif + + INIT_DATA_SECTION(16) + + .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) { + __x86_cpu_dev_start = .; + *(.x86_cpu_dev.init) + __x86_cpu_dev_end = .; + } + +#ifdef CONFIG_X86_INTEL_MID + .x86_intel_mid_dev.init : AT(ADDR(.x86_intel_mid_dev.init) - \ + LOAD_OFFSET) { + __x86_intel_mid_dev_start = .; + *(.x86_intel_mid_dev.init) + __x86_intel_mid_dev_end = .; + } +#endif + + /* + * start address and size of operations which during runtime + * can be patched with virtualization friendly instructions or + * baremetal native ones. Think page table operations. + * Details in paravirt_types.h + */ + . = ALIGN(8); + .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) { + __parainstructions = .; + *(.parainstructions) + __parainstructions_end = .; + } + + /* + * struct alt_inst entries. From the header (alternative.h): + * "Alternative instructions for different CPU types or capabilities" + * Think locking instructions on spinlocks. + */ + . = ALIGN(8); + .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) { + __alt_instructions = .; + *(.altinstructions) + __alt_instructions_end = .; + } + + /* + * And here are the replacement instructions. The linker sticks + * them as binary blobs. The .altinstructions has enough data to + * get the address and the length of them to patch the kernel safely. + */ + .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) { + *(.altinstr_replacement) + } + + /* + * struct iommu_table_entry entries are injected in this section. + * It is an array of IOMMUs which during run time gets sorted depending + * on its dependency order. After rootfs_initcall is complete + * this section can be safely removed. + */ + .iommu_table : AT(ADDR(.iommu_table) - LOAD_OFFSET) { + __iommu_table = .; + *(.iommu_table) + __iommu_table_end = .; + } + + . = ALIGN(8); + .apicdrivers : AT(ADDR(.apicdrivers) - LOAD_OFFSET) { + __apicdrivers = .; + *(.apicdrivers); + __apicdrivers_end = .; + } + + . = ALIGN(8); + /* + * .exit.text is discard at runtime, not link time, to deal with + * references from .altinstructions and .eh_frame + */ + .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { + EXIT_TEXT + } + + .exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) { + EXIT_DATA + } + +#if !defined(CONFIG_X86_64) || !defined(CONFIG_SMP) + PERCPU_SECTION(INTERNODE_CACHE_BYTES) +#endif + + . = ALIGN(PAGE_SIZE); + + /* freed after init ends here */ + .init.end : AT(ADDR(.init.end) - LOAD_OFFSET) { + __init_end = .; + } + + /* + * smp_locks might be freed after init + * start/end must be page aligned + */ + . = ALIGN(PAGE_SIZE); + .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) { + __smp_locks = .; + *(.smp_locks) + . = ALIGN(PAGE_SIZE); + __smp_locks_end = .; + } + +#ifdef CONFIG_X86_64 + .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { + NOSAVE_DATA + } +#endif + + /* BSS */ + . = ALIGN(PAGE_SIZE); + .bss : AT(ADDR(.bss) - LOAD_OFFSET) { + __bss_start = .; + *(.bss..page_aligned) + *(.bss) + . = ALIGN(PAGE_SIZE); + __bss_stop = .; + } + + . = ALIGN(PAGE_SIZE); + .brk : AT(ADDR(.brk) - LOAD_OFFSET) { + __brk_base = .; + . += 64 * 1024; /* 64k alignment slop space */ + *(.brk_reservation) /* areas brk users have reserved */ + __brk_limit = .; + } + + _end = .; + + STABS_DEBUG + DWARF_DEBUG + + /* Sections to be discarded */ + DISCARDS + /DISCARD/ : { *(.eh_frame) } +} + + +#ifdef CONFIG_X86_32 +/* + * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility: + */ +. = ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); +#else +/* + * Per-cpu symbols which need to be offset from __per_cpu_load + * for the boot processor. + */ +#define INIT_PER_CPU(x) init_per_cpu__##x = x + __per_cpu_load +INIT_PER_CPU(gdt_page); +INIT_PER_CPU(irq_stack_union); + +/* + * Build-time check on the image size: + */ +. = ASSERT((_end - _text <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); + +#ifdef CONFIG_SMP +. = ASSERT((irq_stack_union == 0), + "irq_stack_union is not at start of per-cpu area"); +#endif + +#endif /* CONFIG_X86_32 */ + +#ifdef CONFIG_KEXEC +#include + +. = ASSERT(kexec_control_code_size <= KEXEC_CONTROL_CODE_MAX_SIZE, + "kexec control code size is too big"); +#endif + diff --git a/samples/Linux Kernel Module/bcm4334x.mod b/samples/Linux Kernel Module/bcm4334x.mod new file mode 100644 index 00000000..8b35ba24 --- /dev/null +++ b/samples/Linux Kernel Module/bcm4334x.mod @@ -0,0 +1,2 @@ +/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcm4334x.ko +/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_pno.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_ip.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_custom_gpio.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_sched.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_wq.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/aiutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmevent.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmwifi_channels.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/hndpmu.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/linux_osl.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/sbutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/siutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_android.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfgp2p.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg_btcoex.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wldev_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_linux_mon.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_platdev.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cdc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_wlfc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_sdio.o diff --git a/samples/Linux Kernel Module/mbcache.mod b/samples/Linux Kernel Module/mbcache.mod new file mode 100644 index 00000000..1478b3a1 --- /dev/null +++ b/samples/Linux Kernel Module/mbcache.mod @@ -0,0 +1,2 @@ +fs/mbcache.ko +fs/mbcache.o diff --git a/samples/Linux Kernel Module/md5.mod b/samples/Linux Kernel Module/md5.mod new file mode 100644 index 00000000..85778eb0 --- /dev/null +++ b/samples/Linux Kernel Module/md5.mod @@ -0,0 +1,2 @@ +crypto/md5.ko +crypto/md5.o diff --git a/samples/M4/htmlgen.m4 b/samples/M4/htmlgen.m4 new file mode 100644 index 00000000..9b7671fc --- /dev/null +++ b/samples/M4/htmlgen.m4 @@ -0,0 +1,38 @@ +dnl Took from https://en.wikipedia.org/wiki/M4_(computer_language) +divert(-1) + +M4 has multiple output queues that can be manipulated with the +`divert' macro. Valid queues range from 0 to 10, inclusive, with +the default queue being 0. + +Calling the `divert' macro with an invalid queue causes text to be +discarded until another call. Note that even while output is being +discarded, quotes around `divert' and other macros are needed to +prevent expansion. + +# Macros aren't expanded within comments, meaning that keywords such +# as divert and other built-ins may be used without consequence. + +# HTML utility macro: + +define(`H2_COUNT', 0) + +# The H2_COUNT macro is redefined every time the H2 macro is used: + +define(`H2', + `define(`H2_COUNT', incr(H2_COUNT))

H2_COUNT. $1

') + +divert(1)dnl +dnl +dnl The dnl macro causes m4 to discard the rest of the line, thus +dnl preventing unwanted blank lines from appearing in the output. +dnl +H2(First Section) +H2(Second Section) +H2(Conclusion) +dnl +divert(0)dnl +dnl + +undivert(1)dnl One of the queues is being pushed to output. + diff --git a/samples/M4Sugar/ax_ruby_devel.m4 b/samples/M4Sugar/ax_ruby_devel.m4 new file mode 100644 index 00000000..3f68c119 --- /dev/null +++ b/samples/M4Sugar/ax_ruby_devel.m4 @@ -0,0 +1,172 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_ruby_devel.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_RUBY_DEVEL([version]) +# +# DESCRIPTION +# +# This macro checks for Ruby and tries to get the include path to +# 'ruby.h'. It provides the $(RUBY_CPPFLAGS) and $(RUBY_LDFLAGS) output +# variables. It also exports $(RUBY_EXTRA_LIBS) for embedding Ruby in your +# code. +# +# You can search for some particular version of Ruby by passing a +# parameter to this macro, for example "1.8.6". +# +# LICENSE +# +# Copyright (c) 2008 Rafal Rzepecki +# Copyright (c) 2008 Sebastian Huber +# Copyright (c) 2008 Alan W. Irwin +# Copyright (c) 2008 Rafael Laboissiere +# Copyright (c) 2008 Andrew Collier +# Copyright (c) 2008 Matteo Settenvini +# Copyright (c) 2008 Horst Knorr +# +# 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 3 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, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 11 + +AC_DEFUN([AX_RUBY_DEVEL],[ + AC_REQUIRE([AX_WITH_RUBY]) + AS_IF([test -n "$1"], [AX_PROG_RUBY_VERSION([$1])]) + + # + # Check if you have mkmf, else fail + # + AC_MSG_CHECKING([for the mkmf Ruby package]) + ac_mkmf_result=`$RUBY -rmkmf -e ";" 2>&1` + if test -z "$ac_mkmf_result"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot import Ruby module "mkmf". +Please check your Ruby installation. The error was: +$ac_mkmf_result]) + fi + + # + # Check for Ruby include path + # + AC_MSG_CHECKING([for Ruby include path]) + if test -z "$RUBY_CPPFLAGS"; then + ruby_path=`$RUBY -rmkmf -e 'print Config::CONFIG[["archdir"]]'` + if test -n "${ruby_path}"; then + ruby_path="-I$ruby_path" + fi + RUBY_CPPFLAGS=$ruby_path + fi + AC_MSG_RESULT([$RUBY_CPPFLAGS]) + AC_SUBST([RUBY_CPPFLAGS]) + + # + # Check for Ruby library path + # + AC_MSG_CHECKING([for Ruby library path]) + if test -z "$RUBY_LDFLAGS"; then + RUBY_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LIBRUBYARG_SHARED"]]'` + fi + AC_MSG_RESULT([$RUBY_LDFLAGS]) + AC_SUBST([RUBY_LDFLAGS]) + + # + # Check for site packages + # + AC_MSG_CHECKING([for Ruby site-packages path]) + if test -z "$RUBY_SITE_PKG"; then + RUBY_SITE_PKG=`$RUBY -rmkmf -e 'print Config::CONFIG[["sitearchdir"]]'` + fi + AC_MSG_RESULT([$RUBY_SITE_PKG]) + AC_SUBST([RUBY_SITE_PKG]) + + # + # libraries which must be linked in when embedding + # + AC_MSG_CHECKING(ruby extra libraries) + if test -z "$RUBY_EXTRA_LIBS"; then + RUBY_EXTRA_LIBS=`$RUBY -rmkmf -e 'print Config::CONFIG[["SOLIBS"]]'` + fi + AC_MSG_RESULT([$RUBY_EXTRA_LIBS]) + AC_SUBST(RUBY_EXTRA_LIBS) + + # + # linking flags needed when embedding + # (is it even needed for Ruby?) + # + # AC_MSG_CHECKING(ruby extra linking flags) + # if test -z "$RUBY_EXTRA_LDFLAGS"; then + # RUBY_EXTRA_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LINKFORSHARED"]]'` + # fi + # AC_MSG_RESULT([$RUBY_EXTRA_LDFLAGS]) + # AC_SUBST(RUBY_EXTRA_LDFLAGS) + + # this flags breaks ruby.h, and is sometimes defined by KDE m4 macros + CFLAGS="`echo "$CFLAGS" | sed -e 's/-std=iso9899:1990//g;'`" + # + # final check to see if everything compiles alright + # + AC_MSG_CHECKING([consistency of all components of ruby development environment]) + AC_LANG_PUSH([C]) + # save current global flags + ac_save_LIBS="$LIBS" + LIBS="$ac_save_LIBS $RUBY_LDFLAGS" + ac_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$ac_save_CPPFLAGS $RUBY_CPPFLAGS" + AC_TRY_LINK([ + #include + ],[ + ruby_init(); + ],[rubyexists=yes],[rubyexists=no]) + + AC_MSG_RESULT([$rubyexists]) + + if test ! "$rubyexists" = "yes"; then + AC_MSG_ERROR([ + Could not link test program to Ruby. Maybe the main Ruby library has been + installed in some non-standard library path. If so, pass it to configure, + via the LDFLAGS environment variable. + Example: ./configure LDFLAGS="-L/usr/non-standard-path/ruby/lib" + ============================================================================ + ERROR! + You probably have to install the development version of the Ruby package + for your distribution. The exact name of this package varies among them. + ============================================================================ + ]) + RUBY_VERSION="" + fi + AC_LANG_POP + # turn back to default flags + CPPFLAGS="$ac_save_CPPFLAGS" + LIBS="$ac_save_LIBS" + + # + # all done! + # +]) diff --git a/samples/M4Sugar/filenames/configure.ac b/samples/M4Sugar/filenames/configure.ac new file mode 100644 index 00000000..e65c54b6 --- /dev/null +++ b/samples/M4Sugar/filenames/configure.ac @@ -0,0 +1,143 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.68) +AC_INIT([GARDEN], + [1.0.9], + [bubla@users.sourceforge.net]) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE([-Wall]) +AC_CONFIG_SRCDIR([src/input.h]) +AC_CONFIG_HEADERS([src/configure.h]) +AC_CONFIG_MACRO_DIR([m4]) + +AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [Builds the debug version of the library [[default = no]]]) ], + [], + [enable_debug="no"]) + +AS_IF([test "x$enable_debug" = "xyes"], + [CFLAGS="${CFLAGS} -g -O0"]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_LIBTOOL +LT_PROG_RC + +AC_CANONICAL_HOST + +dnl +dnl Check whether it makes sense to install a garden.desktop file +dnl +AC_CHECK_PROG([have_freedesktop], + [update-desktop-database], + [yes]) + +AM_CONDITIONAL([HAVE_FREEDESKTOP], + [test "x$have_freedesktop" = "xyes"]) + +AM_CONDITIONAL([WANT_FREEDESKTOP], + [test "x$enable_desktop_install" = "xyes"]) + +AC_ARG_ENABLE([desktop-install], + [AS_HELP_STRING([--enable-desktop-install], + [Whether you want to install the garden.desktop file if applicable. !!! DO NOT USE if you are a PACKAGER!!!])] + ) + +AS_CASE([$host], + [*mingw* | *cygwin*], + [AC_DEFINE([WINDOWS_VERSION], + [1], + [Define when building for Windows]) + windows_version="yes"]) + +AM_CONDITIONAL([WINDOWS_VERSION], + [test "x$windows_version" = "xyes" ]) + +dnl now the datadir specification, that is useful if one does want to play without installing +AC_ARG_ENABLE([datadir], + [AS_HELP_STRING([--enable-datadir=path-to-your-garden-datafiles], + [Normally you dont have to use this, but it is handy when you want to play the game without installing it or if you want to use already installed data. In the first case, use for instance --enable-datadir=`pwd`/data (if it makes sense)])], + [DATADIR_NAME="$enableval"], + [DATADIR_NAME='$(datadir)/'garden]) + +# Sets the data subdirectory +AC_SUBST([DATADIR_NAME]) + +# Checks for libraries. +AC_CHECK_HEADER([allegro.h], + [], + [have_allegro="no" + AC_MSG_ERROR([You don't even have Allegro headers... Get Allegro first!]) ]) + +AC_CHECK_LIB([m], [sin]) + +test "x$host_os" != "x$build_os" && CROSS_COMPILING="yes" + +try_link_allegro () +{ + LIBS_SAVE=$LIBS + LIBS="$LIBS $1" + AC_MSG_CHECKING([for Allegro using $1]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT + [ #include ]], + [allegro_init();])END_OF_MAIN() ], + [have_allegro="yes"], + [have_allegro="no"]) + AC_MSG_RESULT([$have_allegro]) + LIBS=$LIBS_SAVE + AS_IF([test "x$have_allegro" == "xyes"], + [return 0], + [return 1]) +} +# first check for 'official allegro' +# The official allegro does not support cross-compiling, though... +AM_PATH_ALLEGRO([4.2.0]) + +try_link_allegro "$allegro_LIBS" +AS_IF([test "x$?" == "x0"], + [[LIBS="$LIBS $allegro_LIBS" + ALLEGRO_LIB=`echo $allegro_LIBS | sed -e 's/.*-l\([^[:blank:]]*\).*/\1/'` + have_allegro="yes"]]) + +ALLEGRO_RELEASE_LIBS="alleg alleg42 alleg44" +ALLEGRO_DEBUG_LIBS="alld42 alleg44-debug" +AS_IF([test "x$enable_debug" = "xyes"], + [ALLEGRO_LIBS="$ALLEGRO_DEBUG_LIBS $ALLEGRO_RELEASE_LIBS"], + [ALLEGRO_LIBS="$ALLEGRO_RELEASE_LIBS $ALLEGRO_DEBUG_LIBS"]) + +for lib in $ALLEGRO_LIBS +do + ldflag="-l$lib" + AS_IF([test "x$have_allegro" == "xyes"], + [break]) + try_link_allegro $ldflag + AS_IF([test "x$?" == "x0"], + [LIBS="$LIBS $ldflag" + ALLEGRO_LIB="$lib" + have_allegro="yes"]) +done + +AS_IF([test "x$have_allegro" != "xyes"], + [AC_MSG_ERROR([Unable to find Allegro game programming library 4.2, check out www.allegro.cc (or your distro repositories if you use a unix-like system)]) ]) + +# Checks for header files. +AC_CHECK_HEADERS([string.h sys/stat.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_INLINE +AC_HEADER_STDBOOL + +# Checks for library functions. + +AC_SUBST([ALLEGRO_LIB]) + +AC_CONFIG_FILES([Makefile + src/Makefile + data/Makefile + resources/Makefile + docs/garden.doxyfile + pkgs/w32/winstaller.nsi]) + +AC_OUTPUT diff --git a/samples/M4Sugar/list.m4 b/samples/M4Sugar/list.m4 new file mode 100644 index 00000000..397bd8ff --- /dev/null +++ b/samples/M4Sugar/list.m4 @@ -0,0 +1,46 @@ +m4_define([m4_list_declare], [m4_do( + [m4_define([$1_GET], [m4_expand([m4_list_nth([$1], $][1)])])], + [m4_define([$1_FOREACH], [m4_foreach([item], [m4_dquote_elt(m4_list_contents([$1]))], m4_quote($][1))])], +)]) + +m4_define([m4_list_add], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_ifndef(_LIST_NAME, + [m4_define(_LIST_NAME, m4_dquote(m4_escape([$2])))], + [m4_define(_LIST_NAME, m4_dquote(m4_list_contents([$1]), m4_escape([$2])))], + )], + [m4_popdef([_LIST_NAME])], +)]) + +m4_define([m4_list_contents], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_ifndef(_LIST_NAME, [], m4_quote(_LIST_NAME))], + [m4_popdef([_LIST_NAME])], +)]) + +m4_define([m4_list_nth], [m4_argn([$2], m4_list_contents([$1]))]) + +m4_define([m4_list_pop_front], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_car(m4_unquote(_LIST_NAME))], + [m4_define(_LIST_NAME, m4_cdr(m4_unquote(_LIST_NAME)))], + [m4_popdef([_LIST_NAME])], +)]) + +m4_define([m4_list_pop_back], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))], + [m4_list_pop_front([$1])], + [m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))], + [m4_popdef([_LIST_NAME])], +)]) + +dnl +dnl $1: List name +dnl $2: What +dnl $3: If contains +dnl $4: If not +m4_define([m4_list_contains], [m4_do( + [m4_foreach([item], m4_list_contents([$1]), m4_if(item, [$2], [[$3]], [[$4]]))] +)]) + diff --git a/samples/MAXScript/macro-1.mcr b/samples/MAXScript/macro-1.mcr new file mode 100644 index 00000000..fff41b51 --- /dev/null +++ b/samples/MAXScript/macro-1.mcr @@ -0,0 +1,29 @@ +-- Taken from an example from Autodesk's MAXScript reference: +-- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_84E24969_C175_4389_B9A6_3B2699B66785_htm + +macroscript MoveToSurface + category: "HowTo" +( + fn g_filter o = superclassof o == Geometryclass + fn find_intersection z_node node_to_z = ( + local testRay = ray node_to_z.pos [0,0,-1] + local nodeMaxZ = z_node.max.z + testRay.pos.z = nodeMaxZ + 0.0001 * abs nodeMaxZ + intersectRay z_node testRay + ) + + on isEnabled return selection.count > 0 + + on Execute do ( + target_mesh = pickObject message:"Pick Target Surface:" filter:g_filter + + if isValidNode target_mesh then ( + undo "MoveToSurface" on ( + for i in selection do ( + int_point = find_intersection target_mesh i + if int_point != undefined then i.pos = int_point.pos + )--end i loop + )--end undo + )--end if + )--end execute +)--end script diff --git a/samples/MAXScript/macro-2.mcr b/samples/MAXScript/macro-2.mcr new file mode 100644 index 00000000..e0a897cf --- /dev/null +++ b/samples/MAXScript/macro-2.mcr @@ -0,0 +1,53 @@ +-- Taken from an example from Autodesk's MAXScript reference: +-- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_0876DF46_FAA3_4131_838D_5739A67FF2C1_htm + +macroscript FreeSpline category:"HowTo" tooltip:"FreeSpline" ( +local old_pos +local new_spline +local second_knot_set + +fn get_mouse_pos pen_pos old_pen_pos = ( + if old_pos == undefined then old_pos = old_pen_pos + if distance pen_pos old_pos > 10 then + ( + if second_knot_set then + addKnot new_spline 1 #smooth #curve pen_pos + else + ( + setKnotPoint new_spline 1 2 pen_pos + second_knot_set = true + ) + old_pos = pen_pos + updateShape new_spline + )-- end if +)-- end fn + +fn draw_new_line old_pen_pos = ( + pickPoint mouseMoveCallback:#(get_mouse_pos,old_pen_pos) +) + +undo"Free Spline"on( + new_spline = splineShape () + old_pen_pos = pickPoint () + + if old_pen_pos == #RightClick then + delete new_spline + else + ( + select new_spline + new_spline.pos = old_pen_pos + addNewSpline new_spline + addKnot new_spline 1 #smooth #curve old_pen_pos + addKnot new_spline 1 #smooth #curve old_pen_pos + second_knot_set = false + draw_new_line old_pen_pos + q = querybox "Close Spline?" title:"Free Spline" + if q then + ( + close new_spline 1 + updateshape new_spline + ) + select new_spline + )--end else +)--end undo +)--end script diff --git a/samples/MAXScript/svg-renderer.ms b/samples/MAXScript/svg-renderer.ms new file mode 100644 index 00000000..872334fe --- /dev/null +++ b/samples/MAXScript/svg-renderer.ms @@ -0,0 +1,64 @@ +-- Taken from a 3-part tutorial from Autodesk's MAXScript reference +-- Source: http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_6B5EDC11_A154_4AA7_A972_A11AC36949E9_htm + +fn ColourToHex col = ( + local theComponents = #(bit.intAsHex col.r, bit.intAsHex col.g, bit.intAsHex col.b) + local theValue = "#" + for i in theComponents do + theValue += (if i.count == 1 then "0" else "") + i + theValue +) + +local st = timestamp() +local theFileName = (getDir #userscripts + "\\PolygonRendering3.svg") +local theSVGfile = createFile theFileName +format "\n" to:theSVGfile + +local theViewTM = viewport.getTM() +theViewTM.row4 = [0,0,0] + +local theViewTM2 = viewport.getTM() +local theViewSize = getViewSize() +local theViewScale = getViewSize() +theViewScale.x /= 1024.0 +theViewScale.y /= 1024.0 + +local theStrokeThickness = 3 + +gw.setTransform (matrix3 1) +for o in Geometry where not o.isHiddenInVpt and classof o != TargetObject do ( + local theStrokeColour = white + local theFillColour = o.wirecolor + + local theMesh = snapshotAsMesh o + for f = 1 to theMesh.numfaces do ( + local theNormal = normalize (getFaceNormal theMesh f) + + if (theNormal*theViewTM).z > 0 do + ( + local theFace = getFace theMesh f + local v1 = gw.transPoint (getVert theMesh theFace.x) + local v2 = gw.transPoint (getVert theMesh theFace.y) + local v3 = gw.transPoint (getVert theMesh theFace.z) + + v1.x /= theViewScale.x + v1.y /= theViewScale.y + v2.x /= theViewScale.x + v2.y /= theViewScale.y + v3.x /= theViewScale.x + v3.y /= theViewScale.y + + format "\t\n" (ColourToHex theStrokeColour) (ColourToHex theFillColour) theStrokeThickness to:theSVGfile + )--end if normal positive + )--end f loop +)--end o loop + +format "\n" to:theSVGfile +close theSVGfile +local theSVGMap = VectorMap vectorFile:theFileName alphasource:0 +local theBitmap = bitmap theViewSize.x theViewSize.y +renderMap theSVGMap into:theBitmap filter:true +display theBitmap +format "Render Time: % sec.\n" ((timestamp()-st)/1000.0) diff --git a/samples/MAXScript/volume-calc.ms b/samples/MAXScript/volume-calc.ms new file mode 100644 index 00000000..5e84e341 --- /dev/null +++ b/samples/MAXScript/volume-calc.ms @@ -0,0 +1,22 @@ +fn CalculateVolumeAndCentreOfMass obj = +( + local Volume= 0.0 + local Centre= [0.0, 0.0, 0.0] + local theMesh = snapshotasmesh obj + local numFaces = theMesh.numfaces + for i = 1 to numFaces do + ( + local Face= getFace theMesh i + local vert2 = getVert theMesh Face.z + local vert1 = getVert theMesh Face.y + local vert0 = getVert theMesh Face.x + local dV = Dot (Cross (vert1 - vert0) (vert2 - vert0)) vert0 + Volume+= dV + Centre+= (vert0 + vert1 + vert2) * dV + ) + delete theMesh + Volume /= 6 + Centre /= 24 + Centre /= Volume + #(Volume,Centre) +) diff --git a/samples/MUF/39.m b/samples/MUF/39.m new file mode 100644 index 00000000..16dd9970 --- /dev/null +++ b/samples/MUF/39.m @@ -0,0 +1,278 @@ +$include $lib/strings +$include $lib/match +lvar check-obj-addr + +: check-next-loop (d -- ) + dup not if pop exit then + dup exit? over thing? or + me @ 3 pick .controls and if + dup check-obj-addr @ execute + then + next check-next-loop +; + +: check-contents (d -- ) + contents check-next-loop +; + +: check-exits (d -- ) + exits check-next-loop +; + +: exec-err (d mtypestr warnstr -- ) + "On " 4 rotate unparseobj strcat + ", in it's " strcat rot strcat + ", " strcat swap strcat .tell +; + +: can-linkto? (player object -- i) + dup "link_ok" flag? if pop pop 1 exit then + .controls +; + +: check-exec (d mtype execstr -- ) + dup "@" 1 strncmp if pop pop pop exit then + 1 strcut swap pop + " " .split pop + dup "$" 1 strncmp not if + dup match ok? not if + " is not a known registered program." strcat + exec-err exit + then + dup match program? not if + " is not a program." strcat + exec-err exit + then + 3 pick owner over match can-linkto? not if + " is not Link_OK." strcat + exec-err exit + then + else + dup number? not if + " is not a program dbref." strcat + "@" swap strcat exec-err exit + then + dup atoi dbref ok? not if + " is not a valid program reference." strcat + "@" swap strcat exec-err exit + then + dup atoi dbref program? not if + " is not a valid program reference." strcat + "@" swap strcat exec-err exit + then + 3 pick owner over atoi dbref can-linkto? not if + " is not Link_OK." strcat + "@" swap strcat exec-err exit + then + then + pop pop pop +; + + +: missing-err ( d s -- ) + swap unparseobj + " is missing an " + strcat swap strcat + " message." strcat .tell +; + +: colon-err ( d s -- ) + swap unparseobj + " has an unnecesary ':' at the start of its " + strcat swap strcat + " message." strcat .tell +; + +: check-desc (d -- ) + dup desc not if + "@description" missing-err + else + "@description" over + desc check-exec + then +; + +: check-succ (d -- ) + dup succ not if + "@success" missing-err + else + "@success" over + succ check-exec + then +; + +: check-fail (d -- ) + dup fail not if + "@fail" missing-err + else + "@fail" over + fail check-exec + then +; + +: check-drop (d -- ) + dup drop not if + "@drop" missing-err + else + "@drop" over + drop check-exec + then +; + +: check-osucc (d -- ) + dup osucc not if + "@osuccess" missing-err + else + dup osucc ":" 1 strncmp not if + "@osuccess" colon-err + else pop + then + then +; + +: check-ofail (d -- ) + dup ofail not if + "@ofail" missing-err + else + dup ofail ":" 1 strncmp not if + "@ofail" colon-err + else pop + then + then +; + +: check-odrop (d -- ) + dup odrop not if + "@odrop" missing-err + else + dup odrop ":" 1 strncmp not if + "@odrop" colon-err + else pop + then + then +; + + +$define islocked? (d -- i) getlockstr "*UNLOCKED*" stringcmp $enddef + +: islocked_always? (d -- i) + getlockstr dup "#0" stringcmp not if pop 1 exit then + dup "#" STRsplit swap pop atoi + "#" swap intostr strcat + (lockstr "#dbref") + dup "&!" over strcat strcat + 3 pick stringcmp not if pop pop 1 exit then + "&" over strcat strcat "!" swap strcat + stringcmp not if 1 exit then + 0 +; + +: check-link ( d -- ) + dup getlink not if + dup unparseobj " is unlinked." strcat .tell + else + dup getlink over location dbcmp if + dup islocked? not if + dup unparseobj + " is linked to it's location, but is unlocked." + strcat .tell + then + else (is not linked to it's location) + dup getlink program? if + dup dup owner swap getlink can-linkto? not if + dup unparseobj + " is linked to a program which is not Link_OK." + strcat .tell + then + then + then + then + pop +; + +: check-room (d -- ) + dup check-desc + dup islocked? if + dup islocked_always? not if + dup check-succ + then + dup check-fail + then + dup getlink if + dup check-drop + dup check-odrop + then + dup check-contents + check-exits +; + +: check-exit ( d -- ) + dup check-link + dup check-desc + dup getlink dup ok? if + program? not if + dup islocked_always? not if + dup check-succ + dup check-osucc + dup check-odrop + then + dup islocked? if + dup check-fail + dup check-ofail + then + then + else pop + then + pop +; + +: check-thing ( d -- ) + dup check-desc + dup islocked_always? not if + dup check-succ + dup check-osucc + then + dup islocked? if + dup check-fail + dup check-ofail + then + dup check-drop + dup check-odrop + check-exits +; + +: check-player ( d -- ) + dup check-desc + dup islocked_always? not if + dup check-succ + dup check-osucc + then + dup islocked? if + dup check-fail + dup check-ofail + then + dup check-contents + check-exits +; + +: check-program ( d -- ) + check-desc +; + +: check-obj (d -- ) + dup room? if check-room exit then + dup exit? if check-exit exit then + dup thing? if check-thing exit then + dup player? if check-player exit then + check-program +; + +: main + 'check-obj check-obj-addr ! + .strip dup not if pop "here" then + .match_controlled + dup #-3 dbcmp if pop me @ getlink then + dup ok? not if pop exit then + check-obj + me @ "Check done." notify +; diff --git a/samples/MUF/cmd-say.muf b/samples/MUF/cmd-say.muf new file mode 100644 index 00000000..6d27c65e --- /dev/null +++ b/samples/MUF/cmd-say.muf @@ -0,0 +1,275 @@ +@program cmd-say.muf +1 1000 d +i +( cmd-say.muf by Natasha@HLM + + Copyright 2002-2004 Natasha Snunkmeox. Copyright 2002-2004 Here Lie Monsters. + "@view $box/mit" for license information. +) +$author Natasha Snunkmeox +$note Say for Fuzzball 6. +$version 1.0 + +$include $lib/ignore +$include $lib/strings +$include $lib/match + +$def str_program "saypose" +$def prop_third "_prefs/say/third" +$def prop_quotes "_say/def/quotes" +$def prop_overb "_say/def/osay" +$def prop_verb "_say/def/say" +$def prop_split "_prefs/say/split" +$def prop_color "_prefs/say/color" +$def prop_meow "_prefs/say/meow" + +lvar randomWord + +lvar verb +lvar overb +lvar lquo +lvar rquo +lvar splitsay + +: rtn-getThirdVerb[ var:overb -- ] + ( Get the third-person verb. ) + me @ prop_overb getpropstr dup if ( str strOverb ) + strip dup dup "," instr not and if "," strcat then + else pop "says," then ( str strOverb ) + me @ "%D %s" fmtstring overb @ ! ( str ) +; + +: rtn-getFirstVerb[ var:verb var:overb -- ] + me @ prop_third getpropstr .yes? not if ( str ) + ( Get the first-person verb. ) + me @ prop_verb getpropstr dup if ( str strVerb ) + strip dup dup "," instr not and if "," strcat then + else pop "say," then ( str strVerb ) + splitsay @ if "you %s" else "You %s" then fmtstring ( str strVerb ) + else overb @ @ then verb @ ! ( str ) +; + +: rtn-getQuotes[ var:lquo var:rquo -- ] + me @ prop_quotes getpropstr dup "%m" instr if ( strQuotes ) + "%m" split ( strLquo strRquo ) + else pop "\"" dup then ( strLquo strRquo ) + rquo @ ! lquo @ ! ( ) +; + +: do-say ( str -- ) + "" randomWord ! + + var who + var exclude + + ( Ignoring? Get 'em outta here. ) + loc @ contents_array ( str arrHere ) + dup me @ str_program array_get_ignorers ( str arrHere arrIgnorers ) + dup exclude ! + swap array_diff who ! + + + ( Anyone #meowing this player? Go ahead and notify before special formatting. ) + who @ prop_meow me @ owner "*{%d}*" fmtstring array_filter_prop ( str arrMeow ) + dup if ( str arrMeow ) + dup who @ array_diff who ! ( str arrMeow ) + dup exclude @ array_union exclude ! ( str arrMeow ) + + over ansi_strip ( str arrMeow str ) + "\\b[A-Z0-9_]+\\b" "MEOW" REG_ALL regsub ( str arrMeow str' ) + "\\b[A-Z0-9_][A-Za-z0-9_]*[a-z][A-Za-z0-9_]*\\b" "Meow" REG_ALL regsub ( str arrMeow str' ) + "\\b[a-z_][A-Za-z0-9_]*\\b" "meow" REG_ALL regsub ( str arrMeow str' ) + me @ "%D meows, \"%s\"" fmtstring ( str arrMeow str" ) + 1 array_make swap array_notify ( str ) + else pop then ( str ) + + + var msg + + dup ",," instr ( str boolCommas ) + me @ prop_split getpropstr .no? not ( str boolCommas boolSplitOK ) + and if ( str ) + ",," split ( str- -str ) + + ( User-supplied verb? ) + dup ",," instr if + ",," split ( str- strVerb -str ) + swap dup if ( str- -str strVerb ) + strip ( str- -str strVerb ) + dup me @ name instr over tolower "%n" instr or if ( str- -str strVerb ) + "%n" "%N" subst me @ name "%n" subst ( str- -str strVerb ) + else + me @ swap "%s %D," fmtstring ( str- -str -str- ) + then ( str- -str -str- ) + dup "*[-!.,:;]" smatch not if "," strcat then ( str- -str -str- ) + dup verb ! overb ! ( str- -str ) + else pop then ( str- -str ) + then ( str- -str ) + + 2 array_make ( arrMsg ) + 1 + else 0 then splitsay ! msg ! + + + verb @ string? not if + overb rtn-getThirdVerb + verb overb rtn-getFirstVerb + then + lquo rquo rtn-getQuotes ( str ) + + + ( Say. ) + msg @ string? if + rquo @ msg @ lquo @ ( strRquo strMsg strLquo ) + "%s %s%s%s" ( strRquo strMsg strLquo strFormat ) + + 4 dupn + verb @ swap fmtstring .tell ( strRquo strMsg strLquo strFormat ) + overb @ swap fmtstring ( strOsay ) + else + rquo @ msg @ array_vals pop ( strRquo strMsg strMsg2 ) + swap dup "*[-!.,:;]" smatch not if "," strcat then swap ( strRquo strMsg strMsg2 ) + ( Only handle strMsg if there's no strMsg2. ) + dup if ( strRquo strMsg strMsg2 ) + swap ( strRquo strMsg2 strMsg ) + lquo @ swap rquo @ swap lquo @ ( strRquo strMsg2 strLquo strRquo strMsg' strLquo ) + "%s%s%s %s %s%s%s" ( strRquo strMsg2 strLquo strRquo strMsg' strLquo strFormat ) + + 7 + else ( strRquo strMsg strMsg2 ) + pop lquo @ ( strRquo strMsg' strLquo ) + "%s%s%s %s" ( strRquo strMsg' strLquo strFormat ) + + verb @ ",$" "." 0 regsub verb ! + overb @ ",$" "." 0 regsub overb ! + + 4 + then ( ... strRquo strMsg strLquo strFormat intDepth ) + + dupn + verb @ -5 rotate fmtstring .tell ( ... strRquo strMsg strLquo strFormat ) + overb @ -5 rotate fmtstring ( strOsay ) + then ( strOsay ) + + + ( Is there color to avoid? ) + dup "\[[" instr if + who @ prop_color "{n*|0}" array_filter_prop ( strOsay arrGreyed ) + dup if ( strOsay arrGreyed ) + over ansi_strip 1 array_make ( strOsay arrGreyed arrMsg ) + over array_notify ( strOsay arrGreyed ) + + exclude @ array_union exclude ! ( strOsay ) + else pop then ( strOsay ) + then ( strOsay ) + + loc @ ( strOsay db ) + exclude @ array_vals ( strOsay db dbExcludeN..dbExclude1 intN ) + me @ swap ++ ( strOsay db dbGreyedN..dbGreyed1' intN' ) + dup 3 + rotate ( db dbGreyedN..dbGreyed1 intN strOsay ) + notify_exclude ( ) +; + +: do-help pop pop .showhelp ; +: do-ignore pop str_program cmd-ignore-add ; +: do-unignore pop str_program cmd-ignore-del ; + +: do-third ( strY strZ -- ) + pop pop ( ) + me @ prop_third "yes" setprop + me @ "You will see your own says in the third person (\"%D says\")." fmtstring .tellgood +; +: do-unthird ( strY strZ -- ) + pop pop ( ) + me @ prop_third remove_prop + "You will see your own says in the second person (\"You say\")." .tellgood +; + +: do-grey ( strY strZ -- ) + pop pop ( ) + me @ prop_color "no" setprop + me @ "You will not see color in any says. Note you will see color in your own says." fmtstring .tellgood +; +: do-ungrey ( strY strZ -- ) + pop pop ( ) + me @ prop_color remove_prop + "You will see color in says." .tellgood +; + +: do-meow ( strY strZ -- ) + pop ( strY ) + dup if + .noisy_pmatch dup ok? not if pop exit then ( db ) + me @ prop_meow 3 pick reflist_find if ( db ) + "%D is already in your #meow list." fmtstring .tellbad exit ( ) + then ( db ) + me @ prop_meow 3 pick reflist_add ( db ) + "%D added." fmtstring .tellgood + else + me @ prop_meow array_get_reflist ( arr ) + "" swap foreach swap pop "%D %s" fmtstring repeat + "Your meowlist: " swap strcat .tellgood + then +; +: do-unmeow ( strY strZ -- ) + pop ( strY ) + .noisy_pmatch dup ok? not if pop exit then ( db ) + me @ prop_meow 3 pick reflist_find not if ( db ) + "%D is not in your #meow list." fmtstring .tellbad exit ( ) + then ( db ) + me @ prop_meow 3 pick reflist_del ( db ) + "%D removed." fmtstring .tellgood +; + +$define dict_commands { + "help" 'do-help + "ignore" 'do-ignore + "!ignore" 'do-unignore + "meow" 'do-meow + "!meow" 'do-unmeow + "third" 'do-third + "!third" 'do-unthird + "grey" 'do-grey + "gray" 'do-grey + "!grey" 'do-ungrey + "!gray" 'do-ungrey +}dict $enddef + +: main ( str -- ) + dup STRparse ( str strX strY strZ ) + 3 pick string? if 3 pick "#" stringpfx if ( str strX strY strZ ) + pop pop pop ( str ) + "#" split strcat ( str' ) + do-say exit ( ) + then then + 3 pick int? if pop pop pop do-say exit then + 4 rotate pop ( strX strY strZ ) + + rot dict_commands over array_getitem ( strY strZ strX ? ) + dup address? if ( strY strZ strX adr ) + swap pop ( strY strZ adr ) + execute ( ) + else pop ( strY strZ strX ) + "I don't recognize the command '#%s'. Try 'say #help' for help, or using '##' to say something starting with '#'." fmtstring .tellbad ( strY strZ ) + pop pop ( ) + then ( ) +; +. +c +q + +lsedit #257=_help +.del 1 $ +say +." +say #[!]ignore +say #[!]third +say #[!]grey +say #[!]meow + +Speaks to the room. Use #ignore to not see 's says, poses, and spoofs; use #meow to see 's says with all the words replaced with "meow." Use #third to see your own says in the third person (that is, "Puck says" instead of the normal "You say"). Use #grey to turn off color in others' says and poses. + +Say supports a "split" say if you put two consecutive commas in your message. For example, if CobaltBlue typed '"Hello,,how are you?' everyone would see '"Hello," says CobaltBlue, "how are you?"' You can also specify an "ad-hoc" verb by putting a message with your name or '%N' between pairs of commas: '"Hello,,%N welcomes Weiran,,how are you?' would display '"Hello," CobaltBlue welcomes Weiran, "how are you?"' +.format 10=78 +.format 8=78 +.end diff --git a/samples/Makefile/filenames/Kbuild b/samples/Makefile/filenames/Kbuild new file mode 100644 index 00000000..dd295335 --- /dev/null +++ b/samples/Makefile/filenames/Kbuild @@ -0,0 +1,23 @@ +# Fail on warnings - also for files referenced in subdirs +# -Werror can be disabled for specific files using: +# CFLAGS_ := -Wno-error +subdir-ccflags-y := -Werror + +# platform specific definitions +include arch/mips/Kbuild.platforms +obj-y := $(platform-y) + +# make clean traverses $(obj-) without having included .config, so +# everything ends up here +obj- := $(platform-) + +# mips object files +# The object files are linked as core-y files would be linked + +obj-y += kernel/ +obj-y += mm/ +obj-y += net/ + +ifdef CONFIG_KVM +obj-y += kvm/ +endif diff --git a/samples/Makefile/filenames/Makefile.boot b/samples/Makefile/filenames/Makefile.boot new file mode 100644 index 00000000..07c25c11 --- /dev/null +++ b/samples/Makefile/filenames/Makefile.boot @@ -0,0 +1,159 @@ +# $NetBSD$ + +S= ${.CURDIR}/../../../../.. + +NOMAN= +PROG?= boot +NEWVERSWHAT?= "BIOS Boot" +VERSIONFILE?= ${.CURDIR}/../version + +AFLAGS.biosboot.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:} + +SOURCES?= biosboot.S boot2.c conf.c devopen.c exec.c +SRCS= ${SOURCES} +.if !make(depend) +SRCS+= vers.c +.endif + +PIE_CFLAGS= +PIE_AFLAGS= +PIE_LDFLAGS= + +.include + +STRIPFLAG= # nothing + +LIBCRT0= # nothing +LIBCRTI= # nothing +LIBCRTBEGIN= # nothing +LIBCRTEND= # nothing +LIBC= # nothing + +BINDIR=/usr/mdec +BINMODE=444 + +.PATH: ${.CURDIR}/.. ${.CURDIR}/../../lib + +LDFLAGS+= -nostdlib -Wl,-N -Wl,-e,boot_start +CPPFLAGS+= -I ${.CURDIR}/.. -I ${.CURDIR}/../../lib -I ${S}/lib/libsa +CPPFLAGS+= -I ${.OBJDIR} +# Make sure we override any optimization options specified by the user +COPTS= -Os + +.if ${MACHINE_ARCH} == "x86_64" +LDFLAGS+= -Wl,-m,elf_i386 +AFLAGS+= -m32 +CPUFLAGS= -m32 +LIBKERN_ARCH=i386 +KERNMISCMAKEFLAGS="LIBKERN_ARCH=i386" +.else +CPUFLAGS= -march=i386 -mtune=i386 +.endif + +CFLAGS+= -mno-sse -mno-sse2 -mno-sse3 + +COPTS+= -ffreestanding +CFLAGS+= -Wall -Wmissing-prototypes -Wstrict-prototypes +CPPFLAGS+= -nostdinc -D_STANDALONE +CPPFLAGS+= -I$S + +CPPFLAGS+= -DSUPPORT_PS2 +CPPFLAGS+= -DDIRECT_SERIAL +CPPFLAGS+= -DSUPPORT_SERIAL=boot_params.bp_consdev + +CPPFLAGS+= -DCONSPEED=boot_params.bp_conspeed +CPPFLAGS+= -DCONSADDR=boot_params.bp_consaddr +CPPFLAGS+= -DCONSOLE_KEYMAP=boot_params.bp_keymap + +CPPFLAGS+= -DSUPPORT_CD9660 +CPPFLAGS+= -DSUPPORT_USTARFS +CPPFLAGS+= -DSUPPORT_DOSFS +CPPFLAGS+= -DSUPPORT_EXT2FS +#CPPFLAGS+= -DSUPPORT_MINIXFS3 +CPPFLAGS+= -DPASS_BIOSGEOM +CPPFLAGS+= -DPASS_MEMMAP +#CPPFLAGS+= -DBOOTPASSWD +CPPFLAGS+= -DEPIA_HACK +#CPPFLAGS+= -DDEBUG_MEMSIZE +#CPPFLAGS+= -DBOOT_MSG_COM0 +CPPFLAGS+= -DLIBSA_ENABLE_LS_OP + +# The biosboot code is linked to 'virtual' address of zero and is +# loaded at physical address 0x10000. +# XXX The heap values should be determined from _end. +SAMISCCPPFLAGS+= -DHEAP_START=0x40000 -DHEAP_LIMIT=0x70000 +SAMISCCPPFLAGS+= -DLIBSA_PRINTF_LONGLONG_SUPPORT +SAMISCMAKEFLAGS+= SA_USE_CREAD=yes # Read compressed kernels +SAMISCMAKEFLAGS+= SA_INCLUDE_NET=no # Netboot via TFTP, NFS + +CPPFLAGS+= -Wno-pointer-sign + +# CPPFLAGS+= -DBOOTXX_RAID1_SUPPORT + +I386_STAND_DIR?= $S/arch/i386/stand + +### find out what to use for libi386 +I386DIR= ${I386_STAND_DIR}/lib +.include "${I386DIR}/Makefile.inc" +LIBI386= ${I386LIB} + +### find out what to use for libsa +SA_AS= library +SAMISCMAKEFLAGS+="SA_USE_LOADFILE=yes" +SAMISCMAKEFLAGS+="SA_ENABLE_LS_OP=yes" +.include "${S}/lib/libsa/Makefile.inc" +LIBSA= ${SALIB} + +### find out what to use for libkern +KERN_AS= library +.include "${S}/lib/libkern/Makefile.inc" +LIBKERN= ${KERNLIB} + +### find out what to use for libz +Z_AS= library +.include "${S}/lib/libz/Makefile.inc" +LIBZ= ${ZLIB} + +LDSCRIPT ?= $S/arch/i386/conf/stand.ldscript + +cleandir distclean: .WAIT cleanlibdir + +cleanlibdir: + -rm -rf lib + +LIBLIST= ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN} ${LIBI386} ${LIBSA} +# LIBLIST= ${LIBSA} ${LIBKERN} ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN} + +CLEANFILES+= ${PROG}.tmp ${PROG}.map ${PROG}.sym vers.c + +vers.c: ${VERSIONFILE} ${SOURCES} ${LIBLIST} ${.CURDIR}/../Makefile.boot + ${HOST_SH} ${S}/conf/newvers_stand.sh ${VERSIONFILE} x86 ${NEWVERSWHAT} + +# Anything that calls 'real_to_prot' must have a %pc < 0x10000. +# We link the program, find the callers (all in libi386), then +# explicitly pull in the required objects before any other library code. +${PROG}: ${OBJS} ${LIBLIST} ${.CURDIR}/../Makefile.boot + ${_MKTARGET_LINK} + bb="$$( ${CC} -o ${PROG}.sym ${LDFLAGS} -Wl,-Ttext,0 -Wl,-cref \ + ${OBJS} ${LIBLIST} | ( \ + while read symbol file; do \ + [ -z "$$file" ] && continue; \ + [ "$$symbol" = real_to_prot ] && break; \ + done; \ + while \ + oifs="$$IFS"; \ + IFS='()'; \ + set -- $$file; \ + IFS="$$oifs"; \ + [ -n "$$2" ] && echo "${I386DST}/$$2"; \ + read file rest && [ -z "$$rest" ]; \ + do :; \ + done; \ + ) )"; \ + ${CC} -o ${PROG}.sym ${LDFLAGS} -Wl,-Ttext,0 -T ${LDSCRIPT} \ + -Wl,-Map,${PROG}.map -Wl,-cref ${OBJS} $$bb ${LIBLIST} + ${OBJCOPY} -O binary ${PROG}.sym ${PROG} + +.include +KLINK_MACHINE= i386 +.include diff --git a/samples/Makefile/filenames/Makefile.inc b/samples/Makefile/filenames/Makefile.inc new file mode 100644 index 00000000..cc927063 --- /dev/null +++ b/samples/Makefile/filenames/Makefile.inc @@ -0,0 +1,31 @@ +# $OpenBSD: Makefile.inc,v 1.2 2003/11/14 20:09:20 drahn Exp $ +# $NetBSD: Makefile.inc,v 1.1 1996/09/30 16:34:59 ws Exp $ + +.if !defined(__stand_makefile_inc) +__stand_makefile_inc=1 + +KERN_AS= library + +S=$(.CURDIR)/../../../$(R) + +.if !make(libdep) && !make(sadep) && !make(salibdir) && !make(kernlibdir) && !make(obj) && !defined(NOMACHINE) +.BEGIN: + @([ -h machine ] || ln -s $(S)/arch/$(MACHINE)/include machine) +.endif + +# +EXTRACFLAGS= -msoft-float +REAL_VIRT?= -v +ENTRY?= _start + +INCLUDES+= -I. -I$(.OBJDIR) -I$(.CURDIR)/.. -I$(S)/arch -I$(S) +INCLUDES+= -I$(S)/lib/libsa +DEFS+= -DSTANDALONE +CFLAGS+= $(INCLUDES) $(DEFS) $(EXTRACFLAGS) +CFLAGS+= -fno-stack-protector +LDFLAGS?= -X -N -Ttext $(RELOC) -e $(ENTRY) + +cleandir: + rm -rf lib machine + +.endif diff --git a/samples/Makefile/foo.o.d b/samples/Makefile/foo.o.d new file mode 100644 index 00000000..cf0ba55c --- /dev/null +++ b/samples/Makefile/foo.o.d @@ -0,0 +1,5 @@ +bar/foo.o: \ + bar/foo.c \ + bar/baz.h + +bar/baz.h: diff --git a/samples/Makefile/makefile.script! b/samples/Makefile/makefile similarity index 100% rename from samples/Makefile/makefile.script! rename to samples/Makefile/makefile diff --git a/samples/Mathematica/HeyexImport.m b/samples/Mathematica/HeyexImport.m new file mode 100644 index 00000000..457a7e92 --- /dev/null +++ b/samples/Mathematica/HeyexImport.m @@ -0,0 +1,344 @@ +(* Mathematica Package *) +(* Created with IntelliJ IDEA and the Mathematica Language plugin *) + +(* :Title: Importer for the RAW data-format of the Heidelberg Eye Explorer (known as HEYEX) *) + +(* :Context: HeyexImport` *) + +(* :Author: Patrick Scheibe pscheibe@trm.uni-leipzig.de *) + +(* :Package Version: 1.0 *) + +(* :Mathematica Version: 8.0 *) + +(* :Copyright: Patrick Scheibe, 2013-2015 *) + +(* :Discussion: This package registers a new importer which can load the RAW data-format exported by a + Heidelberg Spectralis OCT. The import-functionality can access different information contained + in a file: + 1. The file header which contains meta data like when the patient was scanned etc + 2. The scanned volume data + 3. Images which represent slices of the scanned volume + 4. The Scanning laser ophthalmoscopy (SLO) image which is taken with every scanned patient + 5. The segmentation data for different retina layers provided by the software + +*) + +(* :Keywords: Import, Heyex, OCT, Spectralis, Heidelberg Engineering *) + +BeginPackage[ "HeyexImport`" ] + +HeyexEyePosition::usage = "HeyexEyePosition[file] tries to extract which eye was scanned, left or right."; + +HeyexImport::wrongHdr = "Error importing OCT data. Broken/Wrong file?"; + + +Begin[ "`Private`" ]; + +(* + Registration of all import possibilities for the Heidelberg OCT. +*) + +ImportExport`RegisterImport[ + "Heyex" , + { + "FileHeader" :> importHeader, + { "Data" , n_Integer} :> (importData[n][##]&), + "Data" :> importData, + { "Images" , n_Integer} :> (importImages[n][##]&), + "Images" :> importImages, + "SLOImage" :> importSLOImage, + "SegmentationData" :> importSegmentation, + { "SegmentationData" , n_Integer} :> (importSegmentation[n][##]&), + "DataSize" :> importDataSize, + importData + }, + + { + "Image3D" :> (Image3D["Data" /. #1]&) + }, + + "AvailableElements" -> {"FileHeader", "Data", "DataSize", "Images", "SLOImage", "SegmentationData", "Image3D"} +]; + + +If[Quiet[Check[TrueQ[Compile[{}, 0, CompilationTarget -> "C"][] == 0], False]], + $compileTarget = CompilationTarget -> "C", + $compileTarget = CompilationTarget -> "MVM" +]; + + +(* + Helper function which reads data from a stream. This is + only a unification so I can map the read function over a + list. +*) +read[{id_String, type_String}, str_] := +id -> BinaryRead[str, type]; +read[{type_String, n_Integer}, str_] := BinaryReadList[str, type, n]; +read[{id_String, {type_String, n_Integer}}, str_] := id -> BinaryReadList[str, type, n]; +(* + Note that when reading bytes explicitly I convert them to + a string and remove any zeroes at the end. +*) +read[{id_String, { "Byte" , n_Integer}}, str_] := +id -> StringJoin[ + FromCharacterCode /@ (Rest[ + NestList[BinaryRead[str, "Byte" ] &, Null, + n]] /. {chars___Integer, Longest[0 ...]} :> {chars})]; + +(* + The layout of a file exported with "Raw Export" + + ***************** + * File Header * + ***************** + * SLO Image * + ***************** + * B-Scan #0 * + ***************** + * ..... * + ***************** + * B-Scan #n-1 * + ***************** +*) + +With[{i = "Integer32", f = "Real32", d = "Real64", b = "Byte"}, + + $fileHeaderInfo = Transpose[{ + { + "Version" , "SizeX" , "NumBScans" , "SizeZ" , "ScaleX" , "Distance" , + "ScaleZ" , "SizeXSlo" , "SizeYSlo" , "ScaleXSlo" , "ScaleYSlo" , + "FieldSizeSlo" , "ScanFocus" , "ScanPosition" , "ExamTime" , + "ScanPattern" , "BScanHdrSize" , "ID" , "ReferenceID" , "PID" , + "PatientID" , "Padding" , "DOB" , "VID" , "VisitID" , "VisitDate" , + "Spare" + }, + { + {b, 12}, i, i, i, d, d, d, i, i, d, d, i, d, {b, 4}, {i, 2}, i, i, + {b, 16}, {b, 16}, i, {b, 21}, {b, 3}, d, i, {b, 24}, d, {b, 1840} + } + }]; + + $bScanHeaderInfo = Transpose[{ + { + "Version" , "BScanHdrSize" , "StartX" , "StartY" , "EndX" , "EndY" , + "NumSeg" , "OffSeg" , "Quality" , "Spare" + }, + {{b, 12}, i, d, d, d, d, i, i, f, {b, 196}} + }]; +]; + + +isHeyexRawFormat[{"Version" -> version_String, "SizeX" -> _Integer, "NumBScans" -> _Integer, _Rule..}] /; StringMatchQ[version, "HSF-OCT" ~~__] := True ; +isHeyexRawFormat[___] := False; + +readFileHeader[str_InputStream] := With[{hdr = Quiet[read[#, str]] & /@ $fileHeaderInfo}, + hdr /; TrueQ[isHeyexRawFormat[hdr]] +]; +readFileHeader[___] := (Message[HeyexImport::wrongHdr]; Throw[$Failed]); + + +(* Reads the camera image of the retina. Note that you must have the + information from the fileheader and you must be at the right position + of the file stream for this.*) +readSLOImage[str_InputStream, fileHdr : {(_String -> _) ..}] := + Image[Partition[ + BinaryReadList[str, "Byte" , "SizeXSlo" * "SizeYSlo" /. fileHdr], + "SizeXSlo" /. fileHdr], "Byte" ]; + +skipSLOImage[str_InputStream, fileHdr : {(_String -> _) ..}] := + Skip[str, "Byte" , "SizeXSlo" * "SizeYSlo" /. fileHdr]; + + +(* One single BScan consists itself again of a header and a data part *) +readBScanHeader[str_InputStream, fileHdr : {(_String -> _) ..}] := + Module[{i = "Integer32", f = "Real32", d = "Real64", b = "Byte", + bScanHdr}, + bScanHdr = read[#, str] & /@ Transpose[{ + { "Version" , "BScanHdrSize" , "StartX" , "StartY" , "EndX" , "EndY" , + "NumSeg" , "OffSeg" , "Quality" , "Spare" }, + {{b, 12}, i, d, d, d, d, i, i, f, {b, 196}}} + ]; + AppendTo[bScanHdr, + read[{ "SegArray" , { "Real32" , + "NumSeg" * "SizeX" /. bScanHdr /. fileHdr}}, str] + ]; + (* + This is horrible slow, therefore I just skip the fillbytes + + AppendTo[bScanHdr, + read[{"Fillbytes", {"Byte", + "BScanHdrSize" - 256 - "NumSeg"*"SizeX"*4 /. bScanHdr /. + fileHdr}}, str] + ] + *) + Skip[str, "Byte" , "BScanHdrSize" - 256 - "NumSeg" * "SizeX" * 4 /. bScanHdr /. fileHdr]; + AppendTo[bScanHdr, "FillBytes" -> None] + ] + +skipBScanHeader[str_InputStream, fileHdr : {(_String -> _) ..}] := + Skip[str, "Byte" , "BScanHdrSize" /. fileHdr]; + +readBScanData[str_InputStream, fileHdr : {(_String -> _) ..}] := + Module[{}, + Developer`ToPackedArray[ + Partition[read[{ "Real32" , "SizeX" * "SizeZ" /. fileHdr}, str], + "SizeX" /. fileHdr]] + ]; + +skipBScanData[str_InputStream, fileHdr : {(_String -> _) ..}] := + Skip[str, "Byte" , "SizeX" * "SizeZ" * 4 /. fileHdr]; + +skipBScanBlocks[str_InputStream, fileHdr : {(_String -> _) ..}, n_Integer] := + Skip[str, "Byte" , n * ("BScanHdrSize" + "SizeX" * "SizeZ" * 4) /. fileHdr]; + + +importHeader[filename_String, ___] := Module[ + {str, header}, + str = OpenRead[filename, BinaryFormat -> True]; + header = readFileHeader[str]; + Close[str]; + "FileHeader" -> header +]; + + +(* Imports the dimension of the scanned volume. *) +importDataSize[filename_String, r___] := Module[{header = importHeader[filename]}, + "DataSize" -> ({"NumBScans", "SizeZ", "SizeXSlo"} /. ("FileHeader" /. header)) +] + +importSLOImage[filename_String, ___] := Module[ + {str, header, slo}, + str = OpenRead[filename, BinaryFormat -> True]; + header = readFileHeader[str]; + slo = readSLOImage[str, header]; + Close[str]; + "SLOImage" -> slo +] + +importData[filename_String, ___] := Module[ + {str, header, nx, n, data}, + str = OpenRead[filename, BinaryFormat -> True]; + header = readFileHeader[str]; + {nx, n} = { "SizeX" , "SizeX" * "SizeZ"} /. header; + skipSLOImage[str, header]; + data = Table[ + skipBScanHeader[str, header]; + Partition[read[{ "Real32" , n}, str], nx], + {"NumBScans" /. header} + ]; + Close[str]; + "Data" -> Developer`ToPackedArray[data] +]; + +importData[num_Integer][filename_String, ___] := Module[ + {str, header, nx, n, data}, + str = OpenRead[filename, BinaryFormat -> True]; + header = readFileHeader[str]; + {nx, n} = { "SizeX" , "SizeX" * "SizeZ"} /. header; + skipSLOImage[str, header]; + skipBScanBlocks[str, header, Max[Min["NumBScans" /. header, num - 1], 0] ]; + skipBScanHeader[str, header]; + data = Partition[read[{ "Real32" , n}, str], nx]; + Close[str]; + {"Data" -> {num -> Developer`ToPackedArray[data]}} +]; + +(* + As suggested in the Heidelberg OCT Manual the importer will adjust + the graylevels when importing images. Since this is very time-consuming + for the whole scanned volume, I use an optimized version of this function. +*) +With[{$compileTarget = $compileTarget}, $adjustGraylevelFunc := ($adjustGraylevelFunc = Compile[{{values, _Real, 2}}, + Map[Floor[255.0 * Min[Max[0.0, #], 1.0]^(0.25) + 0.5] &, values, {2}], + RuntimeAttributes -> {Listable}, + Parallelization -> True, + RuntimeOptions -> "Speed", + $compileTarget +])]; + +importImages[filename_String, ___] := Module[ + {data}, + data = "Data" /. importData[filename]; + "Images" -> (Image[#, "Byte" ]& /@ $adjustGraylevelFunc[data]) +] + +importImages[imageNumber_Integer][filename_String, ___] := Module[ + {data}, + data = {imageNumber /. ("Data" /. importData[imageNumber][filename])}; + {"Images" -> {imageNumber -> (Image[#, "Byte" ]& @@ $adjustGraylevelFunc[data])}} +]; + +importSegmentation[filename_String, ___] := Module[ + {str, header, data}, + str = OpenRead[filename, BinaryFormat -> True]; + header = readFileHeader[str]; + skipSLOImage[str, header]; + data = Table[ + Module[{bScanHeader, t}, + {t, bScanHeader} = Timing@readBScanHeader[str, header]; + skipBScanData[str, header]; + bScanHeader + ], {"NumBScans" /. header} + ]; + Close[str]; + (* + The BScanHeaderData contain the segmentation vectors as a single list + of numbers. Before returning the result, I check how many segmentations + there are inside the BScan an I transform the segmentation value list + into separate vectors and call them "ILM", "RPE" and "NFL" like described + in the manual + *) + "SegmentationData" -> Function[{bhdr}, + Block[{numVecs = "NumSeg" /. bhdr, vecNames, nx = "SizeX" /. header}, + If[numVecs > 0, + vecNames = Take[{ "ILM" , "RPE" , "NFL" }, numVecs]; + bhdr /. ("SegArray" -> vec_) :> Sequence @@ (Rule @@@ Transpose[{vecNames, Partition[vec, nx]} ]), + bhdr + ] + ]] /@ data +] + +importSegmentation[num_Integer][filename_String, ___] := Module[ + {str, header, bhdr}, + str = OpenRead[filename, BinaryFormat -> True]; + header = readFileHeader[str]; + skipSLOImage[str, header]; + skipBScanBlocks[str, header, Max[Min["NumBScans" /. header, num - 1], 0] ]; + bhdr = readBScanHeader[str, header]; + Close[str]; + (* See doc above *) + {"SegmentationData" -> {num -> Block[ + {numVecs = "NumSeg" /. bhdr, vecNames, nx = "SizeX" /. header}, + If[ numVecs > 0, + vecNames = Take[{ "ILM" , "RPE" , "NFL" }, numVecs]; + bhdr /. ("SegArray" -> vec_) :> Sequence @@ (Rule @@@ Transpose[{vecNames, Partition[vec, nx]} ]), + bhdr + ] + ] + }} +] + +(* Extracts which eye was scanned. This is stored in the header of the file *) +(* OD stands for oculus dexter which is latin for "right eye" and OS stands + for oculus sinister which is latin for "left eye" *) +HeyexEyePosition[file_String /; FileExistsQ[file]] := Module[{position}, + Check[ + position = "ScanPosition" /. Import[file, { "Heyex" , "FileHeader" }]; + Switch[ + position, + "OD" , + Right, + "OS" , + Left, + _, + $Failed + ], + $Failed + ] +]; + +End[] + +EndPackage[] \ No newline at end of file diff --git a/samples/Mathematica/Predicates.wl b/samples/Mathematica/Predicates.wl new file mode 100644 index 00000000..3c569691 --- /dev/null +++ b/samples/Mathematica/Predicates.wl @@ -0,0 +1,150 @@ +(* ::Package:: *) + +BeginPackage["Predicates`"]; + + +(* ::Title:: *) +(*Predicates*) + + +(* ::Section::Closed:: *) +(*Fuzzy Logic*) + + +(* ::Subsection:: *) +(*Documentation*) + + +PossiblyTrueQ::usage="Returns True if the argument is not definitely False."; +PossiblyFalseQ::usage="Returns True if the argument is not definitely True."; +PossiblyNonzeroQ::usage="Returns True if and only if its argument is not definitely zero."; + + +(* ::Subsection:: *) +(*Implimentation*) + + +Begin["`Private`"]; + + +PossiblyTrueQ[expr_]:=\[Not]TrueQ[\[Not]expr] + + +PossiblyFalseQ[expr_]:=\[Not]TrueQ[expr] + + +End[]; + + +(* ::Section::Closed:: *) +(*Numbers and Lists*) + + +(* ::Subsection:: *) +(*Documentation*) + + +AnyQ::usage="Given a predicate and a list, retuns True if and only if that predicate is True for at least one element of the list."; +AnyElementQ::usage="Returns True if cond matches any element of L."; +AllQ::usage="Given a predicate and a list, retuns True if and only if that predicate is True for all elements of the list."; +AllElementQ::usage="Returns True if cond matches any element of L."; + + +AnyNonzeroQ::usage="Returns True if L is a list such that at least one element is definitely not zero."; +AnyPossiblyNonzeroQ::usage="Returns True if expr is a list such that at least one element is not definitely zero."; + + +RealQ::usage="Returns True if and only if the argument is a real number"; +PositiveQ::usage="Returns True if and only if the argument is a positive real number"; +NonnegativeQ::usage="Returns True if and only if the argument is a non-negative real number"; +PositiveIntegerQ::usage="Returns True if and only if the argument is a positive integer"; +NonnegativeIntegerQ::usage="Returns True if and only if the argument is a non-negative integer"; + + +IntegerListQ::usage="Returns True if and only if the input is a list of integers."; +PositiveIntegerListQ::usage="Returns True if and only if the input is a list of positive integers."; +NonnegativeIntegerListQ::usage="Returns True if and only if the input is a list of non-negative integers."; +IntegerOrListQ::usage="Returns True if and only if the input is a list of integers or an integer."; +PositiveIntegerOrListQ::usage="Returns True if and only if the input is a list of positive integers or a positive integer."; +NonnegativeIntegerOrListQ::usage="Returns True if and only if the input is a list of positive integers or a positive integer."; + + +SymbolQ::usage="Returns True if argument is an unassigned symbol."; +SymbolOrNumberQ::usage="Returns True if argument is a number of has head 'Symbol'"; + + +(* ::Subsection:: *) +(*Implimentation*) + + +Begin["`Private`"]; + + +AnyQ[cond_, L_] := Fold[Or, False, cond /@ L] + + +AnyElementQ[cond_,L_]:=AnyQ[cond,Flatten[L]] + + +AllQ[cond_, L_] := Fold[And, True, cond /@ L] + + +AllElementQ[cond_, L_] := Fold[And, True, cond /@ L] + + +AnyNonzeroQ[L_]:=AnyElementQ[#!=0&,L] + + +PossiblyNonzeroQ[expr_]:=PossiblyTrueQ[expr!=0] + + +AnyPossiblyNonzeroQ[expr_]:=AnyElementQ[PossiblyNonzeroQ,expr] + + +RealQ[n_]:=TrueQ[Im[n]==0]; + + +PositiveQ[n_]:=Positive[n]; + + +PositiveIntegerQ[n_]:=PositiveQ[n]\[And]IntegerQ[n]; + + +NonnegativeQ[n_]:=TrueQ[RealQ[n]&&n>=0]; + + +NonnegativeIntegerQ[n_]:=NonnegativeQ[n]\[And]IntegerQ[n]; + + +IntegerListQ[input_]:=ListQ[input]&&Not[MemberQ[IntegerQ/@input,False]]; + + +IntegerOrListQ[input_]:=IntegerListQ[input]||IntegerQ[input]; + + +PositiveIntegerListQ[input_]:=IntegerListQ[input]&&Not[MemberQ[Positive[input],False]]; + + +PositiveIntegerOrListQ[input_]:=PositiveIntegerListQ[input]||PositiveIntegerQ[input]; + + +NonnegativeIntegerListQ[input_]:=IntegerListQ[input]&&Not[MemberQ[NonnegativeIntegerQ[input],False]]; + + +NonnegativeIntegerOrListQ[input_]:=NonnegativeIntegerListQ[input]||NonnegativeIntegerQ[input]; + + +SymbolQ[a_]:=Head[a]===Symbol; + + +SymbolOrNumberQ[a_]:=NumericQ[a]||Head[a]===Symbol; + + +End[]; + + +(* ::Section:: *) +(*Epilogue*) + + +EndPackage[]; diff --git a/samples/Mathematica/TestArithmetic.mt b/samples/Mathematica/TestArithmetic.mt new file mode 100644 index 00000000..40cbe122 --- /dev/null +++ b/samples/Mathematica/TestArithmetic.mt @@ -0,0 +1 @@ +Test[1 + 2, 3, TestID -> "One plus two"] diff --git a/samples/Mathematica/TestString.mt b/samples/Mathematica/TestString.mt new file mode 100644 index 00000000..20539407 --- /dev/null +++ b/samples/Mathematica/TestString.mt @@ -0,0 +1 @@ +Test["a" <> "b", "ab", TestID -> "Concat \"a\" and \"b\""] diff --git a/samples/Mathematica/TestSuite.mt b/samples/Mathematica/TestSuite.mt new file mode 100644 index 00000000..b18ae062 --- /dev/null +++ b/samples/Mathematica/TestSuite.mt @@ -0,0 +1,5 @@ +TestSuite[ + { "TestArithmetic.mt" + , "TestString.mt" + } +] diff --git a/samples/Mathematica/UnitTest.wlt b/samples/Mathematica/UnitTest.wlt new file mode 100644 index 00000000..21e67951 --- /dev/null +++ b/samples/Mathematica/UnitTest.wlt @@ -0,0 +1,17 @@ +BeginTestSection["Untitled-5"] + +VerificationTest[(* 1 *) + RotationMatrix[phi] + , + List[List[Cos[phi], Times[-1, Sin[phi]]], List[Sin[phi], Cos[phi]]] +] + +VerificationTest[(* 2 *) + Times[1, Power[Plus[a, Times[-1, a]], -1]] + , + ComplexInfinity + , + {Power::infy} +] + +EndTestSection[] diff --git a/samples/MediaWiki/README.wiki b/samples/MediaWiki/README.wiki new file mode 100644 index 00000000..546c3290 --- /dev/null +++ b/samples/MediaWiki/README.wiki @@ -0,0 +1,694 @@ += Name = + +'''nginx_tcp_proxy_module''' - support TCP proxy with Nginx + += Installation = + +Download the latest stable version of the release tarball of this module from [http://github.com/yaoweibin/nginx_tcp_proxy_module github] + +Grab the nginx source code from [http://nginx.org/ nginx.org], for example, the version 1.2.1 (see nginx compatibility), and then build the source with this module: + + + $ wget 'http://nginx.org/download/nginx-1.2.1.tar.gz' + $ tar -xzvf nginx-1.2.1.tar.gz + $ cd nginx-1.2.1/ + $ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch + + $ ./configure --add-module=/path/to/nginx_tcp_proxy_module + + $ make + $ make install + + + += Synopsis = + + +http { + + server { + listen 80; + + location /status { + tcp_check_status; + } + } +} + + + + +#You can also include tcp_proxy.conf file individually + +#include /path/to/tcp_proxy.conf; + +tcp { + + upstream cluster { + # simple round-robin + server 192.168.0.1:80; + server 192.168.0.2:80; + + check interval=3000 rise=2 fall=5 timeout=1000; + + #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello; + + #check interval=3000 rise=2 fall=5 timeout=1000 type=http; + #check_http_send "GET / HTTP/1.0\r\n\r\n"; + #check_http_expect_alive http_2xx http_3xx; + } + + server { + listen 8888; + + proxy_pass cluster; + } +} + + += Description = + +This module actually include many modules: ngx_tcp_module, ngx_tcp_core_module, ngx_tcp_upstream_module, ngx_tcp_proxy_module, ngx_tcp_websocket_module, ngx_tcp_ssl_module, ngx_tcp_upstream_ip_hash_module. All these modules work together to support TCP proxy with Nginx. I also added other features: ip_hash, upstream server health check, status monitor. + +The motivation of writing these modules is Nginx's high performance and robustness. At first, I developed this module just for general TCP proxy. And now, this module is frequently used in websocket reverse proxying. + +Note, You can't use the same listening port with HTTP modules. + += Directives = + +== ngx_tcp_moodule == + +=== tcp === + +'''syntax:''' ''tcp {...}'' + +'''default:''' ''none'' + +'''context:''' ''main'' + +'''description:''' All the tcp related directives are contained in the tcp block. + + +'''ngx_tcp_core_moodule''' + +=== server === + +'''syntax:''' ''server {...}'' + +'''default:''' ''none'' + +'''context:''' ''tcp'' + +'''description:''' All the specific server directives are contained in the server block. + +=== listen === + +'''syntax:''' ''listen address:port [ bind | ssl | default]'' + +'''default:''' ''none'' + +'''context:''' ''server'' + +'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#listen listen]. The parameter of default means the default server if you have several server blocks with the same port. + +=== access_log === + +'''syntax:''' ''access_log path [buffer=size] | off'' + +'''default:''' ''access_log logs/tcp_access.log'' + +'''context:''' ''tcp, server'' + +'''description:''' Set the access.log. Each record's format is like this: + +
+
+log_time worker_process_pid client_ip host_ip accept_time upstream_ip bytes_read bytes_write
+
+2011/08/02 06:19:07 [5972] 127.0.0.1 0.0.0.0:1982 2011/08/02 06:18:19 172.19.0.129:80 80 236305
+
+
+ +* ''log_time'': The current time when writing this log. The log action is called when the proxy session is closed. +* ''worker_process_pid'': the pid of worker process +* ''client_ip'': the client ip +* ''host_ip'': the server ip and port +* ''accept_time'': the time when the server accepts client's connection +* ''upstream_ip'': the upstream server's ip +* ''bytes_read'': the bytes read from client +* ''bytes_write'': the bytes written to client + +=== allow === + +'''syntax:''' ''allow [ address | CIDR | all ]'' + +'''default:''' ''none'' + +'''context:''' ''server'' + +'''description:''' Directive grants access for the network or addresses indicated. + +=== deny === + +'''syntax:''' ''deny [ address | CIDR | all ]'' + +'''default:''' ''none'' + +'''context:''' ''server'' + +'''description:''' Directive grants access for the network or addresses indicated. + +=== so_keepalive === + +'''syntax:''' ''so_keepalive on|off'' + +'''default:''' ''off'' + +'''context:''' ''main, server'' + +'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#so_keepalive so_keepalive]. + +=== tcp_nodelay === + +'''syntax:''' ''tcp_nodelay on|off'' + +'''default:''' ''on'' + +'''context:''' ''main, server'' + +'''description:''' The same as [http://wiki.nginx.org/NginxHttpCoreModule#tcp_nodelay tcp_nodelay]. + +=== timeout === + +'''syntax:''' ''timeout milliseconds'' + +'''default:''' ''60000'' + +'''context:''' ''main, server'' + +'''description:''' set the timeout value with clients. + +=== server_name === + +'''syntax:''' ''server_name name'' + +'''default:''' ''The name of the host, obtained through gethostname()'' + +'''context:''' ''tcp, server'' + +'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#server_name server_name]. You can specify several server name in different server block with the same port. They can be used in websocket module. + +=== resolver === + +'''syntax:''' ''resolver address'' + +'''default:''' ''none'' + +'''context:''' ''tcp, server'' + +'''description:''' DNS server + +=== resolver_timeout === + +'''syntax:''' ''resolver_timeout time'' + +'''default:''' ''30s'' + +'''context:''' ''tcp, server'' + +'''description:''' Resolver timeout in seconds. + + +== ngx_tcp_upstream_module == + +=== upstream === + +'''syntax:''' ''upstream {...}'' + +'''default:''' ''none'' + +'''context:''' ''tcp'' + +'''description:''' All the upstream directives are contained in this block. The upstream server will be dispatched with round robin by default. + +=== server === + +'''syntax:''' ''server name [parameters]'' + +'''default:''' ''none'' + +'''context:''' ''upstream'' + +'''description:''' Most of the parameters are the same as [http://wiki.nginx.org/NginxHttpUpstreamModule#server server]. Default port is 80. + +=== check === + +'''syntax:''' ''check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [type=tcp|ssl_hello|smtp|mysql|pop3|imap]'' + +'''default:''' ''none, if parameters omitted, default parameters are interval=30000 fall=5 rise=2 timeout=1000'' + +'''context:''' ''upstream'' + +'''description:''' Add the health check for the upstream servers. At present, the check method is a simple tcp connect. + +The parameters' meanings are: + +* ''interval'': the check request's interval time. +* ''fall''(fall_count): After fall_count check failures, the server is marked down. +* ''rise''(rise_count): After rise_count check success, the server is marked up. +* ''timeout'': the check request's timeout. +* ''type'': the check protocol type: +# ''tcp'' is a simple tcp socket connect and peek one byte. +# ''ssl_hello'' sends a client ssl hello packet and receives the server ssl hello packet. +# ''http'' sends a http request packet, receives and parses the http response to diagnose if the upstream server is alive. +# ''smtp'' sends a smtp request packet, receives and parses the smtp response to diagnose if the upstream server is alive. The response begins with '2' should be an OK response. +# ''mysql'' connects to the mysql server, receives the greeting response to diagnose if the upstream server is alive. +# ''pop3'' receives and parses the pop3 response to diagnose if the upstream server is alive. The response begins with '+' should be an OK response. +# ''imap'' connects to the imap server, receives the greeting response to diagnose if the upstream server is alive. + +=== check_http_send === + +'''syntax:''' ''check_http_send http_packet'' + +'''default:''' ''"GET / HTTP/1.0\r\n\r\n"'' + +'''context:''' ''upstream'' + +'''description:''' If you set the check type is http, then the check function will sends this http packet to check the upstream server. + +=== check_http_expect_alive === + +'''syntax:''' ''check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]'' + +'''default:''' ''http_2xx | http_3xx'' + +'''context:''' ''upstream'' + +'''description:''' These status codes indicate the upstream server's http response is OK, the backend is alive. + +=== check_smtp_send === + +'''syntax:''' ''check_smtp_send smtp_packet'' + +'''default:''' ''"HELO smtp.localdomain\r\n"'' + +'''context:''' ''upstream'' + +'''description:''' If you set the check type is smtp, then the check function will sends this smtp packet to check the upstream server. + +=== check_smtp_expect_alive === + +'''syntax:''' ''check_smtp_expect_alive [smtp_2xx | smtp_3xx | smtp_4xx | smtp_5xx]'' + +'''default:''' ''smtp_2xx'' + +'''context:''' ''upstream'' + +'''description:''' These status codes indicate the upstream server's smtp response is OK, the backend is alive. + +=== check_shm_size === + +'''syntax:''' ''check_shm_size size'' + +'''default:''' ''(number_of_checked_upstream_blocks + 1) * pagesize'' + +'''context:''' ''tcp'' + +'''description:''' If you store hundreds of servers in one upstream block, the shared memory for health check may be not enough, you can enlarged it by this directive. + +=== tcp_check_status === + +'''syntax:''' ''tcp_check_status'' + +'''default:''' ''none'' + +'''context:''' ''location'' + +'''description:''' Display the health checking servers' status by HTTP. This directive is set in the http block. + +The table field meanings are: + +* ''Index'': The server index in the check table +* ''Name'' : The upstream server name +* ''Status'': The marked status of the server. +* ''Busyness'': The number of connections which are connecting to the server. +* ''Rise counts'': Count the successful checking +* ''Fall counts'': Count the unsuccessful checking +* ''Access counts'': Count the times accessing to this server +* ''Check type'': The type of the check packet + + +'''ngx_tcp_upstream_busyness_module''' + +=== busyness === + +'''syntax:''' ''busyness'' + +'''default:''' ''none'' + +'''context:''' ''upstream'' + +'''description:''' the upstream server will be dispatched by backend servers' busyness. + + +'''ngx_tcp_upstream_ip_hash_module''' + +=== ip_hash === + +'''syntax:''' ''ip_hash'' + +'''default:''' ''none'' + +'''context:''' ''upstream'' + +'''description:''' the upstream server will be dispatched by ip_hash. + + +== ngx_tcp_proxy_module == + +=== proxy_pass === + +'''syntax:''' ''proxy_pass host:port'' + +'''default:''' ''none'' + +'''context:''' ''server'' + +'''description:''' proxy the request to the backend server. Default port is 80. + +=== proxy_buffer === + +'''syntax:''' ''proxy_buffer size'' + +'''default:''' ''4k'' + +'''context:''' ''tcp, server'' + +'''description:''' set the size of proxy buffer. + +=== proxy_connect_timeout === + +'''syntax:''' ''proxy_connect_timeout miliseconds'' + +'''default:''' ''60000'' + +'''context:''' ''tcp, server'' + +'''description:''' set the timeout value of connection to backends. + +=== proxy_read_timeout === + +'''syntax:''' ''proxy_read_timeout miliseconds'' + +'''default:''' ''60000'' + +'''context:''' ''tcp, server'' + +'''description:''' set the timeout value of reading from backends. + +=== proxy_send_timeout === + +'''syntax:''' ''proxy_send_timeout miliseconds'' + +'''default:''' ''60000'' + +'''context:''' ''tcp, server'' + +'''description:''' set the timeout value of sending to backends. + + +== ngx_tcp_websocket_module == + +=== websocket_pass === + +'''syntax:''' ''websocket_pass [path] host:port'' + +'''default:''' ''none'' + +'''context:''' ''server'' + +'''description:''' proxy the websocket request to the backend server. Default port is 80. You can specify several different paths in the same server block. + +=== websocket_buffer === + +'''syntax:''' ''websocket_buffer size'' + +'''default:''' ''4k'' + +'''context:''' ''tcp, server'' + +'''description:''' set the size of proxy buffer. + +=== websocket_connect_timeout === + +'''syntax:''' ''websocket_connect_timeout miliseconds'' + +'''default:''' ''60000'' + +'''context:''' ''tcp, server'' + +'''description:''' set the timeout value of connection to backends. + +=== websocket_read_timeout === + +'''syntax:''' ''websocket_read_timeout miliseconds'' + +'''default:''' ''60000'' + +'''context:''' ''tcp, server'' + +'''description:''' set the timeout value of reading from backends. Your timeout will be the minimum of this and the *timeout* parameter, so if you want a long timeout for your websockets, make sure to set both paramaters. + +=== websocket_send_timeout === + +'''syntax:''' ''websocket_send_timeout miliseconds'' + +'''default:''' ''60000'' + +'''context:''' ''tcp, server'' + +'''description:''' set the timeout value of sending to backends. + + +== ngx_tcp_ssl_module == + +The default config file includes this ngx_tcp_ssl_module. If you want to just compile nginx without ngx_tcp_ssl_module, copy the ngx_tcp_proxy_module/config_without_ssl to ngx_tcp_proxy_module/config, reconfigrure and compile nginx. + +=== ssl === + +'''syntax:''' ''ssl [on|off] '' + +'''default:''' ''ssl off'' + +'''context:''' ''tcp, server'' + +Enables SSL for a server. + +=== ssl_certificate === + +'''syntax:''' ''ssl_certificate file'' + +'''default:''' ''ssl_certificate cert.pem'' + +'''context:''' ''tcp, server'' + +This directive specifies the file containing the certificate, in PEM format. This file can contain also other certificates and the server private key. + +=== ssl_certificate_key === + +'''syntax:''' ''ssl_certificate_key file'' + +'''default:''' ''ssl_certificate_key cert.pem'' + +'''context:''' ''tcp, server'' + +This directive specifies the file containing the private key, in PEM format. + +=== ssl_client_certificate === + +'''syntax:''' ''ssl_client_certificate file'' + +'''default:''' ''none'' + +'''context:''' ''tcp, server'' + +This directive specifies the file containing the CA (root) certificate, in PEM format, that is used for validating client certificates. + +=== ssl_dhparam === + +'''syntax:''' ''ssl_dhparam file'' + +'''default:''' ''none'' + +'''context:''' ''tcp, server'' + +This directive specifies a file containing Diffie-Hellman key agreement protocol cryptographic parameters, in PEM format, utilized for exchanging session keys between server and client. + +=== ssl_ciphers === + +'''syntax:''' ''ssl_ciphers openssl_cipherlist_spec'' + +'''default:''' ''ssl_ciphers HIGH:!aNULL:!MD5'' + +'''context:''' ''tcp, server'' + +This directive describes the list of cipher suites the server supports for establishing a secure connection. Cipher suites are specified in the [http://openssl.org/docs/apps/ciphers.html OpenSSL] cipherlist format, for example: + + +ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; + + +The complete cipherlist supported by the currently installed version of OpenSSL in your platform can be obtained by issuing the command: +
+openssl ciphers
+
+ +=== ssl_crl === + +'''syntax:''' ''ssl_crl file'' + +'''default:''' ''none'' + +'''context:''' ''tcp, server'' + +This directive specifies the filename of a Certificate Revocation List, in PEM format, which is used to check the revocation status of certificates. + +=== ssl_prefer_server_ciphers === + +'''syntax:''' ''ssl_prefer_server_ciphers [on|off] '' + +'''default:''' ''ssl_prefer_server_ciphers off'' + +'''context:''' ''tcp, server'' + +The server requires that the cipher suite list for protocols SSLv3 and TLSv1 are to be preferred over the client supported cipher suite list. + +=== ssl_protocols === + +'''syntax:''' ''ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]'' + +'''default:''' ''ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2'' + +'''context:''' ''tcp, server'' + +This directive enables the protocol versions specified. + +=== ssl_verify_client === + +'''syntax:''' ''ssl_verify_client on|off|optional'' + +'''default:''' ''ssl_verify_client off'' + +'''context:''' ''tcp, server'' + +This directive enables the verification of the client identity. Parameter 'optional' checks the client identity using its certificate in case it was made available to the server. + +=== ssl_verify_depth === + +'''syntax:''' ''ssl_verify_depth number'' + +'''default:''' ''ssl_verify_depth 1'' + +'''context:''' ''tcp, server'' + +This directive sets how deep the server should go in the client provided certificate chain in order to verify the client identity. + +=== ssl_session_cache === + +'''syntax:''' ''ssl_session_cache off|none|builtin:size and/or shared:name:size'' + +'''default:''' ''ssl_session_cache off'' + +'''context:''' ''tcp, server'' + +The directive sets the types and sizes of caches to store the SSL sessions. + +The cache types are: + +* off -- Hard off: nginx says explicitly to a client that sessions can not reused. +* none -- Soft off: nginx says to a client that session can be resued, but nginx actually never reuses them. This is workaround for some mail clients as ssl_session_cache may be used in mail proxy as well as in HTTP server. +* builtin -- the OpenSSL builtin cache, is used inside one worker process only. The cache size is assigned in the number of the sessions. Note: there appears to be a memory fragmentation issue using this method, please take that into consideration when using this. See "References" below. +* shared -- the cache is shared between all worker processes. The size of the cache is assigned in bytes: 1 MB cache can contain roughly 4000 sessions. Each shared cache must be given an arbitrary name. A shared cache with a given name can be used in several virtual hosts. +It's possible to use both types of cache — builtin and shared — simultaneously, for example: + + +ssl_session_cache builtin:1000 shared:SSL:10m; + + +Bear in mind however, that using only shared cache, i.e., without builtin, should be more effective. + +=== ssl_session_timeout === + +'''syntax:''' ''ssl_session_timeout time'' + +'''default:''' ''ssl_session_timeout 5m'' + +'''context:''' ''tcp, server'' + +This directive defines the maximum time during which the client can re-use the previously negotiated cryptographic parameters of the secure session that is stored in the SSL cache. + += Compatibility = + +* My test bed is 0.7.65+ + += Notes = + +The http_response_parse.rl and smtp_response_parse.rl are [http://www.complang.org/ragel/ ragel] scripts , you can edit the script and compile it like this: + + + $ ragel -G2 http_response_parse.rl + $ ragel -G2 smtp_response_parse.rl + + += TODO = + +* refact this module, make it more extendable for adding third-party modules +* manipulate header like http module's proxy_set_header +* built-in variable support +* custom log format +* syslog support +* FTP/IRC proxying + += Known Issues = + +* This module can't use the same listening port with the HTTP module. + += Changelogs = + +== v0.2.0 == + +* add ssl proxy module +* add websocket proxy module +* add upstream busyness module +* add tcp access log module + +== v0.19 == + +* add many check methods + +== v0.1 == + +* first release + += Authors = + +Weibin Yao(姚伟斌) ''yaoweibin at gmail dot com'' + += Copyright & License = + +This README template copy from [http://github.com/agentzh agentzh]. + +I borrowed a lot of code from upstream and mail module from the nginx 0.7.* core. This part of code is copyrighted by Igor Sysoev. And the health check part is borrowed the design of Jack Lindamood's healthcheck module [http://github.com/cep21/healthcheck_nginx_upstreams healthcheck_nginx_upstreams]; + +This module is licensed under the BSD license. + +Copyright (C) 2013 by Weibin Yao . + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/samples/Mercury/switch_detection_bug.m b/samples/Mercury/switch_detection_bug.m new file mode 100644 index 00000000..f96542c3 --- /dev/null +++ b/samples/Mercury/switch_detection_bug.m @@ -0,0 +1,46 @@ +% This is a regression test for a bug in switch detection +% where it was preferring incomplete switches to complete +% one-case switches, and hence inferring the wrong determinism. + +%------------------------------------------------------------------------------% + +:- module switch_detection_bug. + +:- interface. + +:- type note ---> note(rank, modifier, octave). + +:- type rank ---> c ; d ; e ; f ; g ; a ; b . + +:- type modifier ---> natural ; sharp ; flat . + +:- type octave == int. + +:- type qualifier ---> maj ; min . + +:- pred next_topnote(note, qualifier, note). +:- mode next_topnote(in, in, out) is multi. + +%------------------------------------------------------------------------------% + +:- implementation. + +next_topnote(note(c, _, Oct), _, note(d, natural, Oct)). +next_topnote(note(d, _, Oct), _, note(c, natural, Oct)). +next_topnote(note(d, _, Oct), maj, note(e, natural, Oct)). +next_topnote(note(d, _, Oct), min, note(e, flat, Oct)). +next_topnote(note(e, _, Oct), _, note(d, natural, Oct)). +next_topnote(note(e, _, Oct), _, note(f, natural, Oct)). +next_topnote(note(f, _, Oct), maj, note(e, natural, Oct)). +next_topnote(note(f, _, Oct), min, note(e, flat, Oct)). +next_topnote(note(g, _, Oct), _, note(f, natural, Oct)). +next_topnote(note(g, _, Oct), min, note(a, flat, Oct)). +next_topnote(note(g, _, Oct), maj, note(a, natural, Oct)). +next_topnote(note(a, _, Oct), _, note(g, natural, Oct)). +next_topnote(note(a, _, Oct), min, note(b, flat, Oct)). +next_topnote(note(a, _, Oct), maj, note(b, natural, Oct)). +next_topnote(note(b, _, Oct), maj, note(a, natural, Oct)). +next_topnote(note(b, _, Oct), min, note(a, flat, Oct)). + +%------------------------------------------------------------------------------% + diff --git a/samples/Metal/ITMVisualisationEngine.metal b/samples/Metal/ITMVisualisationEngine.metal new file mode 100644 index 00000000..a1372178 --- /dev/null +++ b/samples/Metal/ITMVisualisationEngine.metal @@ -0,0 +1,99 @@ +// Copyright 2014 Isis Innovation Limited and the authors of InfiniTAM + +#include + +#include "../../DeviceAgnostic/ITMSceneReconstructionEngine.h" +#include "../../DeviceAgnostic/ITMVisualisationEngine.h" +#include "ITMVisualisationEngine_Metal.h" + +using namespace metal; + +kernel void genericRaycastVH_device(DEVICEPTR(Vector4f) *pointsRay [[ buffer(0) ]], + const CONSTPTR(ITMVoxel) *voxelData [[ buffer(1) ]], + const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex [[ buffer(2) ]], + const CONSTPTR(Vector2f) *minmaxdata [[ buffer(3) ]], + const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(4) ]], + uint2 threadIdx [[ thread_position_in_threadgroup ]], + uint2 blockIdx [[ threadgroup_position_in_grid ]], + uint2 blockDim [[ threads_per_threadgroup ]]) +{ + int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y; + + if (x >= params->imgSize.x || y >= params->imgSize.y) return; + + int locId = x + y * params->imgSize.x; + int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x; + + castRay(pointsRay[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams, + params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]); +} + +kernel void genericRaycastVGMissingPoints_device(DEVICEPTR(Vector4f) *forwardProjection [[ buffer(0) ]], + const CONSTPTR(int) *fwdProjMissingPoints [[ buffer(1) ]], + const CONSTPTR(ITMVoxel) *voxelData [[ buffer(2) ]], + const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex [[ buffer(3) ]], + const CONSTPTR(Vector2f) *minmaxdata [[ buffer(4) ]], + const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(5) ]], + uint2 threadIdx [[ thread_position_in_threadgroup ]], + uint2 blockIdx [[ threadgroup_position_in_grid ]], + uint2 blockDim [[ threads_per_threadgroup ]]) +{ + int pointId = threadIdx.x + blockIdx.x * blockDim.x; + + if (pointId >= params->imgSize.z) return; + + int locId = fwdProjMissingPoints[pointId]; + int y = locId / params->imgSize.x, x = locId - y * params->imgSize.x; + int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x; + + castRay(forwardProjection[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams, + params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]); +} + +kernel void renderICP_device(const CONSTPTR(Vector4f) *pointsRay [[ buffer(0) ]], + DEVICEPTR(Vector4f) *pointsMap [[ buffer(1) ]], + DEVICEPTR(Vector4f) *normalsMap [[ buffer(2) ]], + DEVICEPTR(Vector4u) *outRendering [[ buffer(3) ]], + const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(4) ]], + uint2 threadIdx [[ thread_position_in_threadgroup ]], + uint2 blockIdx [[ threadgroup_position_in_grid ]], + uint2 blockDim [[ threads_per_threadgroup ]]) +{ + int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y; + + if (x >= params->imgSize.x || y >= params->imgSize.y) return; + + processPixelICP(outRendering, pointsMap, normalsMap, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource)); +} + +kernel void renderForward_device(DEVICEPTR(Vector4u) *outRendering [[ buffer(0) ]], + const CONSTPTR(Vector4f) *pointsRay [[ buffer(1) ]], + const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(2) ]], + uint2 threadIdx [[ thread_position_in_threadgroup ]], + uint2 blockIdx [[ threadgroup_position_in_grid ]], + uint2 blockDim [[ threads_per_threadgroup ]]) +{ + int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y; + + if (x >= params->imgSize.x || y >= params->imgSize.y) return; + + processPixelForwardRender(outRendering, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource)); +} + +kernel void forwardProject_device(DEVICEPTR(Vector4f) *forwardProjection [[ buffer(0) ]], + const CONSTPTR(Vector4f) *pointsRay [[ buffer(1) ]], + const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(2) ]], + uint2 threadIdx [[ thread_position_in_threadgroup ]], + uint2 blockIdx [[ threadgroup_position_in_grid ]], + uint2 blockDim [[ threads_per_threadgroup ]]) +{ + int x = (threadIdx.x + blockIdx.x * blockDim.x), y = (threadIdx.y + blockIdx.y * blockDim.y); + + if (x >= params->imgSize.x || y >= params->imgSize.y) return; + + int locId = x + y * params->imgSize.x; + Vector4f pixel = pointsRay[locId]; + + int locId_new = forwardProjectPixel(pixel * params->voxelSizes.x, params->M, params->projParams, params->imgSize.xy); + if (locId_new >= 0) forwardProjection[locId_new] = pixel; +} \ No newline at end of file diff --git a/samples/Modelica/NestedPackages.mo b/samples/Modelica/NestedPackages.mo new file mode 100644 index 00000000..d57e1134 --- /dev/null +++ b/samples/Modelica/NestedPackages.mo @@ -0,0 +1,26 @@ +within ModelicaByExample.PackageExamples; +package NestedPackages + "An example of how packages can be used to organize things" + package Types + type Rabbits = Real(quantity="Rabbits", min=0); + type Wolves = Real(quantity="Wolves", min=0); + type RabbitReproduction = Real(quantity="Rabbit Reproduction", min=0); + type RabbitFatalities = Real(quantity="Rabbit Fatalities", min=0); + type WolfReproduction = Real(quantity="Wolf Reproduction", min=0); + type WolfFatalities = Real(quantity="Wolf Fatalities", min=0); + end Types; + + model LotkaVolterra "Lotka-Volterra with types" + parameter Types.RabbitReproduction alpha=0.1; + parameter Types.RabbitFatalities beta=0.02; + parameter Types.WolfReproduction gamma=0.4; + parameter Types.WolfFatalities delta=0.02; + parameter Types.Rabbits x0=10; + parameter Types.Wolves y0=10; + Types.Rabbits x(start=x0); + Types.Wolves y(start=y0); + equation + der(x) = x*(alpha-beta*y); + der(y) = -y*(gamma-delta*x); + end LotkaVolterra; +end NestedPackages; diff --git a/samples/Modelica/NewtonCooling.mo b/samples/Modelica/NewtonCooling.mo new file mode 100644 index 00000000..5a24b99f --- /dev/null +++ b/samples/Modelica/NewtonCooling.mo @@ -0,0 +1,24 @@ +within ModelicaByExample.PackageExamples; +model NewtonCooling + "Cooling example importing physical types from the Modelica Standard Library" + import Modelica.SIunits.Temperature; + import Modelica.SIunits.Mass; + import Modelica.SIunits.Area; + import ConvectionCoefficient = Modelica.SIunits.CoefficientOfHeatTransfer; + import SpecificHeat = Modelica.SIunits.SpecificHeatCapacity; + + // Parameters + parameter Temperature T_inf=300.0 "Ambient temperature"; + parameter Temperature T0=280.0 "Initial temperature"; + parameter ConvectionCoefficient h=0.7 "Convective cooling coefficient"; + parameter Area A=1.0 "Surface area"; + parameter Mass m=0.1 "Mass of thermal capacitance"; + parameter SpecificHeat c_p=1.2 "Specific heat"; + + // Variables + Temperature T "Temperature"; +initial equation + T = T0 "Specify initial value for T"; +equation + m*c_p*der(T) = h*A*(T_inf-T) "Newton's law of cooling"; +end NewtonCooling; diff --git a/samples/Modelica/Pendulum.mo b/samples/Modelica/Pendulum.mo new file mode 100644 index 00000000..919cfb5f --- /dev/null +++ b/samples/Modelica/Pendulum.mo @@ -0,0 +1,47 @@ +within ModelicaByExample.Subsystems.Pendula; +model Pendulum "A single individual pendulum" + import Modelica.Mechanics.MultiBody.Parts; + import Modelica.Mechanics.MultiBody.Joints; + + parameter Modelica.SIunits.Position x; + parameter Modelica.SIunits.Mass m "Mass of mass point"; + parameter Modelica.SIunits.Angle phi "Initial angle"; + parameter Modelica.SIunits.Length L "String length"; + parameter Modelica.SIunits.Diameter d=0.01; + + Parts.Fixed ground(r={0,0,x}, animation=false) + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=270, origin={0,60}))); + Parts.PointMass ball(m=m, sphereDiameter=5*d) + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Parts.BodyCylinder string(density=0, r={0,L,0}, diameter=d) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,-30}))); + Joints.Revolute revolute(phi(fixed=true, start=phi), + cylinderDiameter=d/2, animation=false) + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,20}))); +equation + connect(string.frame_a, ball.frame_a) annotation (Line( + points={{0,-40},{0,-40},{0,-80}}, + color={95,95,95}, + thickness=0.5, + smooth=Smooth.None)); + connect(revolute.frame_b, ground.frame_b) annotation (Line( + points={{0,30},{0,40},{0,40},{0,50}}, + color={95,95,95}, + thickness=0.5, + smooth=Smooth.None)); + connect(revolute.frame_a, string.frame_b) annotation (Line( + points={{0,10},{0,10},{0,-20},{0,-20}}, + color={95,95,95}, + thickness=0.5, + smooth=Smooth.None)); +end Pendulum; diff --git a/samples/Modelica/RLC.mo b/samples/Modelica/RLC.mo new file mode 100644 index 00000000..fb84728d --- /dev/null +++ b/samples/Modelica/RLC.mo @@ -0,0 +1,16 @@ +within ModelicaByExample.PackageExamples; +model RLC "An RLC circuit referencing types from the Modelica Standard Library" + parameter Modelica.SIunits.Voltage Vb=24 "Battery voltage"; + parameter Modelica.SIunits.Inductance L = 1; + parameter Modelica.SIunits.Resistance R = 100; + parameter Modelica.SIunits.Capacitance C = 1e-3; + Modelica.SIunits.Voltage V; + Modelica.SIunits.Current i_L; + Modelica.SIunits.Current i_R; + Modelica.SIunits.Current i_C; +equation + i_R = V/R; + i_C = C*der(V); + i_L=i_R+i_C; + L*der(i_L) = (Vb-V); +end RLC; diff --git a/samples/Modelica/SecondOrderSystem.mo b/samples/Modelica/SecondOrderSystem.mo new file mode 100644 index 00000000..29d412ec --- /dev/null +++ b/samples/Modelica/SecondOrderSystem.mo @@ -0,0 +1,29 @@ +within ModelicaByExample.PackageExamples; +model SecondOrderSystem + "A second order rotational system importing types from Modelica Standard Library" + import Modelica.SIunits.*; + parameter Angle phi1_init = 0; + parameter Angle phi2_init = 1; + parameter AngularVelocity omega1_init = 0; + parameter AngularVelocity omega2_init = 0; + parameter Inertia J1=0.4; + parameter Inertia J2=1.0; + parameter RotationalSpringConstant k1=11; + parameter RotationalSpringConstant k2=5; + parameter RotationalDampingConstant d1=0.2; + parameter RotationalDampingConstant d2=1.0; + Angle phi1; + Angle phi2; + AngularVelocity omega1; + AngularVelocity omega2; +initial equation + phi1 = phi1_init; + phi2 = phi2_init; + omega1 = omega1_init; + omega2 = omega2_init; +equation + omega1 = der(phi1); + omega2 = der(phi2); + J1*der(omega1) = k1*(phi2-phi1)+d1*der(phi2-phi1); + J2*der(omega2) = k1*(phi1-phi2)+d1*der(phi1-phi2)-k2*phi2-d2*der(phi2); +end SecondOrderSystem; diff --git a/samples/Modelica/System.mo b/samples/Modelica/System.mo new file mode 100644 index 00000000..82d762a5 --- /dev/null +++ b/samples/Modelica/System.mo @@ -0,0 +1,19 @@ +within ModelicaByExample.Subsystems.Pendula; +model System "A system of pendula" + import Modelica.Constants.g_n; + import Modelica.Constants.pi; + + parameter Integer n=15 "Number of pendula"; + parameter Modelica.SIunits.Position x[n] = linspace(0,(n-1)*0.05,n); + parameter Modelica.SIunits.Time T = 54; + parameter Modelica.SIunits.Time X = 30; + parameter Modelica.SIunits.Length lengths[n] = { g_n*(T/(2*pi*(X+(n-i))))^2 for i in 1:n}; + parameter Modelica.SIunits.Angle phi0 = 0.5; + + Pendulum pendulum[n](x=x, each m=1, each phi=phi0, L=lengths) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + inner Modelica.Mechanics.MultiBody.World world + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + annotation (experiment(StopTime=54, + Interval=9e-3, Tolerance=1e-008)); +end System; diff --git a/samples/Modelica/Translational.mo b/samples/Modelica/Translational.mo new file mode 100644 index 00000000..62735f6a --- /dev/null +++ b/samples/Modelica/Translational.mo @@ -0,0 +1,5281 @@ +within Modelica.Mechanics; +package Translational + "Library to model 1-dimensional, translational mechanical systems" + extends Modelica.Icons.Package; + import SI = Modelica.SIunits; + + package Examples "Demonstration examples of the components of this package" + + extends Modelica.Icons.ExamplesPackage; + + model SignConvention "Examples for the used sign conventions." + extends Modelica.Icons.Example; + Translational.Components.Mass mass1(L=1, + s(fixed=true), + v(fixed=true), + m=1) annotation (Placement( + transformation(extent={{40,60},{60,80}}, rotation=0))); + Translational.Sources.Force force1 + annotation (Placement(transformation(extent={{ + -4,60},{16,80}}, rotation=0))); + Modelica.Blocks.Sources.Constant constant1(k=1) + annotation (Placement(transformation(extent={{ + -44,60},{-24,80}}, rotation=0))); + Translational.Components.Mass mass2(L=1, + s(fixed=true), + v(fixed=true), + m=1) annotation (Placement( + transformation(extent={{40,0},{60,20}}, rotation=0))); + Translational.Sources.Force force2 + annotation (Placement(transformation(extent={{ + -4,20},{16,40}}, rotation=0))); + Modelica.Blocks.Sources.Constant constant2(k=1) + annotation (Placement(transformation(extent={{ + -44,20},{-24,40}}, rotation=0))); + Translational.Components.Mass mass3(L=1, + s(fixed=true), + v(fixed=true), + m=1) annotation (Placement( + transformation(extent={{-40,-40},{-20,-20}}, rotation=0))); + Translational.Sources.Force force3(useSupport=true) + annotation (Placement(transformation(extent={{ + 20,-40},{0,-20}}, rotation=0))); + Modelica.Blocks.Sources.Constant constant3(k=1) + annotation (Placement(transformation(extent={{ + 60,-40},{40,-20}}, rotation=0))); + Translational.Components.Fixed fixed + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + equation + connect(constant1.y,force1. f) annotation (Line(points={{-23,70},{-6,70}}, + color={0,0,127})); + connect(constant2.y,force2. f) annotation (Line(points={{-23,30},{-6,30}}, + color={0,0,127})); + connect(constant3.y,force3. f) annotation (Line(points={{39,-30},{22,-30}}, + color={0,0,127})); + connect(force1.flange, mass1.flange_a) annotation (Line( + points={{16,70},{40,70}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(force2.flange, mass2.flange_b) annotation (Line( + points={{16,30},{70,30},{70,10},{60,10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass3.flange_b, force3.flange) annotation (Line( + points={{-20,-30},{0,-30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(fixed.flange, force3.support) annotation (Line( + points={{10,-50},{10,-40}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation (Documentation(info=" +

+If all arrows point in the same direction a positive force +results in a positive acceleration a, velocity v and position s. +

+

+For a force of 1 N and a mass of 1 Kg this leads to +

+
+        a = 1 m/s2
+        v = 1 m/s after 1 s (SlidingMass1.v)
+        s = 0.5 m after 1 s (SlidingMass1.s)
+
+

+The acceleration is not available for plotting. +

+

+System 1) and 2) are equivalent. It doesn't matter whether the +force pushes at flange_a in system 1 or pulls at flange_b in system 2. +

+It is of course possible to ignore the arrows and connect the models +in an arbitrary way. But then it is hard see in what direction the +force acts. +

+In the third system the two arrows are opposed which means that the +force acts in the opposite direction (in the same direction as in +the two other examples). +

+"), Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={ + Text( + extent={{-100,80},{-82,60}}, + textString="1)", + lineColor={0,0,255}), + Text( + extent={{-100,40},{-82,20}}, + textString="2)", + lineColor={0,0,255}), + Text( + extent={{-100,-20},{-82,-40}}, + textString="3)", + lineColor={0,0,255})}), + experiment(StopTime=1.0, Interval=0.001)); + end SignConvention; + + model InitialConditions "Setting of initial conditions" + + extends Modelica.Icons.Example; + + Translational.Components.Fixed fixed2( s0=1) + annotation (Placement(transformation( + extent={{-100,60},{-80,80}}, rotation=0))); + Translational.Components.Spring s2( s_rel0=2, c=1e3) + annotation (Placement( + transformation(extent={{-60,60},{-40,80}}, rotation=0))); + Translational.Components.Mass m3( L=3, s(start=4.5, fixed=true), + v(fixed=true), + m=1) annotation (Placement( + transformation(extent={{-20,60},{0,80}}, rotation=0))); + Translational.Components.SpringDamper sd2( s_rel0=4, c=111, + d=1) annotation (Placement( + transformation(extent={{20,60},{40,80}}, rotation=0))); + Translational.Components.Mass m4( L=5, s(start=12.5, fixed=true), + v(fixed=true), + m=1) annotation (Placement( + transformation(extent={{60,60},{80,80}}, rotation=0))); + + Translational.Components.Fixed fixed1( s0=-1) + annotation (Placement(transformation( + extent={{-100,-20},{-80,0}}, rotation=0))); + Translational.Components.Spring s1( + s_rel0=1, + c=1e3, + s_rel(start=1, fixed=true)) + annotation (Placement(transformation(extent={{-58,-20}, + {-38,0}}, rotation=0))); + Translational.Components.Mass m1( L=1, v(fixed=true), + m=1) annotation (Placement(transformation( + extent={{-20,-20},{0,0}}, rotation=0))); + Translational.Components.SpringDamper sd1( + s_rel0=1, + c=111, + s_rel(start=1, fixed=true), + v_rel(fixed=true), + d=1) annotation (Placement(transformation(extent={{20,-20},{ + 40,0}}, rotation=0))); + Translational.Components.Mass m2( L=2, m=1) + annotation (Placement(transformation( + extent={{60,-20},{80,0}}, rotation=0))); + equation + connect(s2.flange_a, fixed2.flange) annotation (Line( + points={{-60,70},{-90,70}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(s1.flange_a, fixed1.flange) annotation (Line( + points={{-58,-10},{-90,-10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(m1.flange_a, s1.flange_b) annotation (Line( + points={{-20,-10},{-38,-10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(sd1.flange_a, m1.flange_b) annotation (Line( + points={{20,-10},{0,-10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(m2.flange_a, sd1.flange_b) annotation (Line( + points={{60,-10},{40,-10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(m4.flange_a, sd2.flange_b) annotation (Line( + points={{60,70},{40,70}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(sd2.flange_a, m3.flange_b) annotation (Line( + points={{20,70},{0,70}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(m3.flange_a, s2.flange_b) annotation (Line( + points={{-20,70},{-40,70}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+There are several ways to set initial conditions. +In the first system the position of the mass m3 was defined +by using the modifier s(start=4.5), the position of m4 by s(start=12.5). +These positions were chosen such that the system is a rest. To calculate +these values start at the left (Fixed1) with a value of 1 m. The spring +has an unstretched length of 2 m and m3 an length of 3 m, which leads to +

+ +
+        1   m (fixed1)
+      + 2   m (spring s2)
+      + 3/2 m (half of the length of mass m3)
+      -------
+        4,5 m = s(start = 4.5) for m3
+      + 3/2 m (half of the length of mass m3)
+      + 4   m (springDamper 2)
+      + 5/2 m (half of length of mass m4)
+      -------
+       12,5 m = s(start = 12.5) for m4
+
+ +

+This selection of initial conditions has the effect that Dymola selects +those variables (m3.s and m4.s) as state variables. +In the second example the length of the springs are given as start values +but they cannot be used as state for pure springs (only for the spring/damper +combination). In this case the system is not at rest. +

+ +

+ +

+ +"), + experiment(StopTime=5.0, Interval=0.001)); + end InitialConditions; + + model WhyArrows "Use of arrows in Mechanics.Translational" + + extends Modelica.Icons.Example; + + Translational.Components.Fixed fixed + annotation (Placement(transformation(extent={{ + -20,20},{0,40}}, rotation=0))); + Translational.Components.Rod rod1( L=1) + annotation (Placement(transformation(extent={ + {-48,20},{-28,40}}, rotation=0))); + Translational.Components.Rod rod2( L=1) + annotation (Placement(transformation(extent={ + {20,20},{40,40}}, rotation=0))); + Translational.Components.Rod rod3( L=1) + annotation (Placement(transformation(extent={ + {-30,58},{-50,78}}, rotation=0))); + Translational.Sensors.PositionSensor positionSensor2 annotation (Placement( + transformation(extent={{60,20},{80,40}}, rotation=0))); + Translational.Sensors.PositionSensor positionSensor1 annotation (Placement( + transformation(extent={{-60,20},{-80,40}}, rotation=0))); + Translational.Sensors.PositionSensor positionSensor3 annotation (Placement( + transformation(extent={{-60,58},{-80,78}}, rotation=0))); + Translational.Components.Fixed fixed1( s0=-1.9) + annotation (Placement(transformation( + extent={{-100,-60},{-80,-40}}, rotation=0))); + Translational.Components.Spring spring1( s_rel0=2, c=11) + annotation (Placement( + transformation(extent={{-80,-60},{-60,-40}}, rotation=0))); + Translational.Components.Mass mass1( + L=2, + s(fixed=true), + v(fixed=true), + m=1) annotation (Placement( + transformation(extent={{-50,-60},{-30,-40}}, rotation=0))); + Translational.Components.Fixed fixed2( s0=-1.9) + annotation (Placement(transformation( + extent={{0,-60},{20,-40}}, rotation=0))); + Translational.Components.Spring spring2( s_rel0=2, c=11) + annotation (Placement( + transformation(extent={{30,-60},{50,-40}}, rotation=0))); + Translational.Components.Mass inertia2( L=2, + m=1, + s(fixed=true), + v(fixed=true)) annotation (Placement( + transformation(extent={{80,-60},{60,-40}}, rotation=0))); + equation + connect(spring1.flange_b, mass1.flange_b) annotation (Line(points={{-60,-50}, + {-60,-72},{-30,-72},{-30,-50}}, color={0,191,0})); + connect(spring2.flange_b, inertia2.flange_b) annotation (Line(points={{50,-50}, + {60,-50}}, color={0,191,0})); + connect(rod3.flange_b,positionSensor3. flange) annotation (Line( + points={{-50,68},{-60,68}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(rod1.flange_a,positionSensor1. flange) annotation (Line( + points={{-48,30},{-60,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(rod1.flange_b, fixed.flange) annotation (Line( + points={{-28,30},{-10,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(rod3.flange_a, fixed.flange) annotation (Line( + points={{-30,68},{-10,68},{-10,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(fixed.flange, rod2.flange_a) annotation (Line( + points={{-10,30},{20,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(rod2.flange_b,positionSensor2. flange) annotation (Line( + points={{40,30},{60,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(fixed1.flange,spring1. flange_a) annotation (Line( + points={{-90,-50},{-80,-50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(fixed2.flange,spring2. flange_a) annotation (Line( + points={{10,-50},{30,-50}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+When using the models of the translational sublibrary +it is recommended to make sure that all arrows point in +the same direction because then all component have the +same reference system. +In the example the distance from flange_a of Rod1 to flange_b +of Rod2 is 2 m. The distance from flange_a of Rod1 to flange_b +of Rod3 is also 2 m though it is difficult to see that. Without +the arrows it would be almost impossible to notice. +That all arrows point in the same direction is a sufficient +condition for an easy use of the library. There are cases +where horizontally flipped models can be used without +problems. +

+"), Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-84,10},{88,2}}, + lineColor={0,0,255}, + textString="positionSensor2.s = positionSensor3.s"), + Text( + extent={{-78,-4},{86,-12}}, + lineColor={0,0,255}, + textString="positionSensor3.s <>positionSensor1.s"), + Text( + extent={{-82,-80},{92,-88}}, + textString="Both systems are equivalent", + lineColor={0,0,255}), + Line( + points={{-90,-28},{90,-28}}, + thickness=0.5, + color={0,0,255})}), + experiment(StopTime=1.0, Interval=0.001)); + end WhyArrows; + + model Accelerate "Use of model accelerate." + + extends Modelica.Icons.Example; + Translational.Sources.Accelerate accelerate + annotation (Placement(transformation( + extent={{-40,20},{-20,40}}, rotation=0))); + Translational.Components.Mass mass(L=1, m=1) + annotation (Placement( + transformation(extent={{0,20},{20,40}}, rotation=0))); + Modelica.Blocks.Sources.Constant constantAcc(k=1) + annotation (Placement(transformation(extent={{-80,20}, + {-60,40}}, rotation=0))); + equation + connect(accelerate.flange, mass.flange_a) annotation (Line( + points={{-20,30},{0,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(constantAcc.y, accelerate.a_ref) annotation (Line( + points={{-59,30},{-42,30}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Documentation(info=" +

+Demonstrate usage of component Sources.Accelerate by moving a massing +with a predefined acceleration. +

+"), experiment(StopTime=1.0, Interval=0.001)); + end Accelerate; + + model Damper "Use of damper models." + + extends Modelica.Icons.Example; + + Translational.Components.Mass mass1( + L=1, + s(start=3, fixed=true), + v(start=10, fixed=true), + m=1) annotation (Placement(transformation(extent={{-80,60},{-60, + 80}}, rotation=0))); + Translational.Components.Damper damper1( d=25) + annotation (Placement(transformation( + extent={{-20,60},{0,80}}, rotation=0))); + Translational.Components.Fixed fixed1( s0=4.5) + annotation (Placement(transformation( + extent={{22,60},{42,80}}, rotation=0))); + Translational.Components.Mass mass2( + L=1, + s(start=3, fixed=true), + v(start=10, fixed=true), + m=1) annotation (Placement(transformation(extent={{-80,0},{-60, + 20}}, rotation=0))); + Translational.Components.Damper damper2( d=25) + annotation (Placement(transformation( + extent={{-20,0},{0,20}}, rotation=0))); + Translational.Components.Fixed fixed2( s0=4.5) + annotation (Placement(transformation( + extent={{20,0},{40,20}}, rotation=0))); + Translational.Components.Mass mass3( + L=1, + s(start=3, fixed=true), + v(start=10, fixed=true), + m=1) annotation (Placement(transformation(extent={{-80,-60},{-60, + -40}}, rotation=0))); + Translational.Components.Fixed fixed3( s0=4.5) + annotation (Placement(transformation( + extent={{20,-60},{40,-40}}, rotation=0))); + Translational.Components.Spring spring2( s_rel0=1, c=1) + annotation (Placement( + transformation(extent={{-20,-20},{0,0}}, rotation=0))); + Translational.Components.SpringDamper springDamper3( s_rel0=1, d=25, + c=1) annotation (Placement( + transformation(extent={{-20,-60},{0,-40}}, rotation=0))); + equation + connect(mass1.flange_b, damper1.flange_a) annotation (Line(points= + {{-60,70},{-20,70}}, color={0,191,0})); + connect(mass2.flange_b, damper2.flange_a) annotation (Line(points={{-60,10}, + {-20,10}}, color={0,191,0})); + connect(damper2.flange_b,spring2. flange_b) annotation (Line(points={{0, + 10},{0,-10}}, color={0,191,0})); + connect(damper2.flange_a,spring2. flange_a) annotation (Line(points={{-20, + 10},{-20,-10}}, color={0,191,0})); + connect(mass3.flange_b, springDamper3.flange_a) annotation (Line( + points={{-60,-50},{-20,-50}}, color={0,191,0})); + connect(damper1.flange_b, fixed1.flange) annotation (Line( + points={{0,70},{32,70}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(damper2.flange_b, fixed2.flange) annotation (Line( + points={{0,10},{30,10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(springDamper3.flange_b, fixed3.flange) annotation (Line( + points={{0,-50},{30,-50}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation (Documentation(info=" +

+Demonstrate usage of damper components in different variants. +

+"), + experiment(StopTime=1.0, Interval=0.001)); + end Damper; + + model Oscillator "Oscillator demonstrates the use of initial conditions." + + extends Modelica.Icons.Example; + + Translational.Components.Mass mass1( + L=1, + s(start=-0.5, fixed=true), + v(start=0, fixed=true), + m=1) annotation (Placement(transformation(extent={{-20,40},{0, + 60}}, rotation=0))); + Translational.Components.Spring spring1( s_rel0=1, c=10000) + annotation (Placement( + transformation(extent={{20,40},{40,60}}, rotation=0))); + Translational.Components.Fixed fixed1( s0=1) + annotation (Placement(transformation( + extent={{60,40},{80,60}}, rotation=0))); + Translational.Sources.Force force1 + annotation (Placement(transformation(extent={{ + -60,40},{-40,60}}, rotation=0))); + Modelica.Blocks.Sources.Sine sine1(freqHz=15.9155) annotation (Placement(transformation( + extent={{-100,40},{-80,60}}, rotation=0))); + Translational.Components.Mass mass2( + L=1, + s(start=-0.5, fixed=true), + v(start=0, fixed=true), + m=1) annotation (Placement(transformation(extent={{-20,-60},{0, + -40}}, rotation=0))); + Translational.Components.Spring spring2( s_rel0=1, c=10000) + annotation (Placement( + transformation(extent={{20,-60},{40,-40}}, rotation=0))); + Translational.Components.Fixed fixed2( s0=1) + annotation (Placement(transformation( + extent={{60,-60},{80,-40}}, rotation=0))); + Translational.Sources.Force force2 + annotation (Placement(transformation(extent={{ + -60,-60},{-40,-40}}, rotation=0))); + Modelica.Blocks.Sources.Sine sine2(freqHz=15.9155) annotation (Placement(transformation( + extent={{-100,-60},{-80,-40}}, rotation=0))); + Translational.Components.Damper damper1( d=10) + annotation (Placement(transformation( + extent={{20,-36},{40,-16}}, rotation=0))); + equation + connect(mass1.flange_b, spring1.flange_a) annotation (Line(points= + {{0,50},{20,50}}, color={0,191,0})); + connect(spring2.flange_a,damper1. flange_a) annotation (Line(points={{20, + -50},{20,-26}}, color={0,191,0})); + connect(mass2.flange_b, spring2.flange_a) annotation (Line(points= + {{0,-50},{20,-50}}, color={0,191,0})); + connect(damper1.flange_b,spring2. flange_b) annotation (Line(points={{40, + -26},{40,-50}}, color={0,191,0})); + connect(sine1.y,force1. f) annotation (Line(points={{-79,50},{-62,50}}, + color={0,0,127})); + connect(sine2.y,force2. f) annotation (Line(points={{-79,-50},{-62,-50}}, + color={0,0,127})); + connect(spring1.flange_b, fixed1.flange) annotation (Line( + points={{40,50},{70,50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(force2.flange, mass2.flange_a) annotation (Line( + points={{-40,-50},{-20,-50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(force1.flange, mass1.flange_a) annotation (Line( + points={{-40,50},{-20,50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(spring2.flange_b, fixed2.flange) annotation (Line( + points={{40,-50},{70,-50}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+A spring - mass system is a mechanical oscillator. If no +damping is included and the system is excited at resonance +frequency infinite amplitudes will result. +The resonant frequency is given by +omega_res = sqrt(c / m) +with: +

+ +
+      c spring stiffness
+      m mass
+
+ +

+To make sure that the system is initially at rest the initial +conditions s(start=0) and v(start=0) for the SlidingMass +are set. +If damping is added the amplitudes are bounded. +

+"), + experiment(StopTime=1.0, Interval=0.001)); + end Oscillator; + + model Sensors "Sensors for translational systems." + import Modelica; + + extends Modelica.Icons.Example; + + Translational.Sensors.ForceSensor forceSensor annotation (Placement( + transformation(extent={{-34,40},{-14,60}}, + rotation=0))); + Translational.Sensors.SpeedSensor speedSensor1 annotation (Placement( + transformation(extent={{40,-40},{60,-20}}, rotation=0))); + Translational.Sensors.PositionSensor positionSensor1 annotation (Placement( + transformation(extent={{40,0},{60,20}}, rotation=0))); + Translational.Sensors.AccSensor accSensor1 annotation (Placement( + transformation(extent={{40,-80},{60,-60}}, rotation=0))); + Translational.Components.Mass mass(L=1, + s(fixed=true), + v(fixed=true), + m=1) annotation (Placement( + transformation(extent={{20,40},{40,60}}, rotation=0))); + Translational.Sources.Force force + annotation (Placement(transformation(extent={{-64,40}, + {-44,60}}, rotation=0))); + Modelica.Blocks.Sources.Sine sineForce(amplitude=10, freqHz=4) + annotation (Placement( + transformation(extent={{-100,40},{-80,60}}, rotation=0))); + Translational.Sensors.PositionSensor positionSensor2 annotation (Placement( + transformation(extent={{60,40},{80,60}}, rotation=0))); + Modelica.Mechanics.Translational.Sensors.MultiSensor multiSensor + annotation (Placement(transformation(extent={{-8,40},{12,60}}))); + equation + connect(sineForce.y, force.f) + annotation (Line(points={{-79,50},{-66,50}}, + color={0,0,127})); + connect(forceSensor.flange_a, force.flange) annotation (Line( + points={{-34,50},{-44,50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass.flange_a, positionSensor1.flange) annotation (Line( + points={{20,50},{20,10},{40,10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass.flange_a, speedSensor1.flange) annotation (Line( + points={{20,50},{20,-30},{40,-30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass.flange_a, accSensor1.flange) annotation (Line( + points={{20,50},{20,-70},{40,-70}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass.flange_b, positionSensor2.flange) annotation (Line( + points={{40,50},{60,50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(forceSensor.flange_b, multiSensor.flange_a) annotation (Line( + points={{-14,50},{-8,50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(multiSensor.flange_b, mass.flange_a) annotation (Line( + points={{12,50},{20,50}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+These sensors measure +

+ +
+   force f in N
+   position s in m
+   velocity v in m/s
+   acceleration a in m/s2
+
+ +

+The measured velocity and acceleration is independent on +the flange the sensor is connected to. The position +depends on the flange (flange_a or flange_b) and the +length L of the component. +Plot PositionSensor1.s, PositionSensor2.s and SlidingMass1.s +to see the difference. +

+"), + experiment(StopTime=1.0, Interval=0.001)); + end Sensors; + + model Friction "Use of model Stop" + extends Modelica.Icons.Example; + Modelica.Mechanics.Translational.Components.MassWithStopAndFriction stop1( + L=1, + s(fixed=true), + v(fixed=true), + smax=25, + smin=-25, + m=1, + F_prop=1, + F_Coulomb=5, + F_Stribeck=10, + fexp=2) annotation (Placement(transformation(extent={{20,60}, + {40,80}}, rotation=0))); + Translational.Sources.Force force + annotation (Placement(transformation(extent={{-20,60}, + {0,80}}, rotation=0))); + Modelica.Blocks.Sources.Sine sineForce(amplitude=25, freqHz=0.25) + annotation (Placement( + transformation(extent={{-60,60},{-40,80}}, + rotation=0))); + Modelica.Mechanics.Translational.Components.MassWithStopAndFriction stop2( + L=1, + smax=0.9, + smin=-0.9, + F_Coulomb=3, + F_Stribeck=5, + s(start=0, fixed=true), + m=1, + F_prop=1, + fexp=2, + v(start=-5, fixed=true)) + annotation (Placement(transformation(extent={{42,-60},{62, + -40}}, + rotation=0))); + Translational.Components.Spring spring(s_rel0=1, c=500) + annotation (Placement( + transformation(extent={{2,-60},{22,-40}}, + rotation=0))); + Translational.Components.Fixed fixed2(s0=-1.75) + annotation (Placement(transformation( + extent={{-40,-60},{-20,-40}}, + rotation=0))); + Translational.Sources.Force force2 + annotation (Placement(transformation(extent={{-22,0}, + {-2,20}}, rotation=0))); + Components.Mass mass( + m=1, + L=1, + s(fixed=true), + v(fixed=true)) + annotation (Placement(transformation(extent={{10,0},{30,20}}))); + Components.SupportFriction supportFriction(f_pos= + Examples.Utilities.GenerateStribeckFrictionTable( + F_prop=1, + F_Coulomb=5, + F_Stribeck=10, + fexp=2, + v_max=12, + nTable=50)) + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + equation + connect(spring.flange_b, stop2.flange_a) annotation (Line(points={{22,-50}, + {42,-50}},color={0,191,0})); + connect(sineForce.y, force.f) + annotation (Line(points={{-39,70},{-22,70}}, + color={0,0,127})); + connect(spring.flange_a, fixed2.flange) annotation (Line( + points={{2,-50},{-30,-50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(force.flange, stop1.flange_a) annotation (Line( + points={{0,70},{20,70}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(force2.flange, mass.flange_a) annotation (Line( + points={{-2,10},{10,10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass.flange_b, supportFriction.flange_a) annotation (Line( + points={{30,10},{40,10}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(sineForce.y, force2.f) annotation (Line( + points={{-39,70},{-30,70},{-30,10},{-24,10}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-100,80},{-80,60}}, + textString="1)", + lineColor={0,0,255}), + Text( + extent={{-100,20},{-80,0}}, + textString="2)", + lineColor={0,0,255}), + Text( + extent={{-100,-40},{-80,-60}}, + lineColor={0,0,255}, + textString="3)")}), + Documentation(info=" +
    +
  1. Simulate and then plot stop1.f as a function of stop1.v + This gives the Stribeck curve.
  2. +
  3. The same model is also available by modeling the system with a Mass and + a SupportFriction model. The SupportFriction model defines the friction characteristic + with a table. The table is constructed with function + Examples.Utilities.GenerateStribeckFrictionTable(..) to generate the + same friction characteristic as with stop1. + The simulation results of stop1 and of model mass are therefore identical.
  4. +
  5. Model stop2 gives an example for a hard stop. However there + can arise some problems with the used modeling approach (use of + reinit(..), convergence problems). In this case use the ElastoGap + to model a stop (see example Preload).
  6. +
+"), + experiment(StopTime=5.0, Interval=0.001)); + end Friction; + + model PreLoad "Preload of a spool using ElastoGap models." + + extends Modelica.Icons.Example; + + Translational.Components.ElastoGap innerContactA( + c=1000e3, + d=250, + s_rel0=0.001) + annotation (Placement(transformation(extent={{-70,20},{-50,40}}, + rotation=0))); + Translational.Components.ElastoGap innerContactB( + c=1000e3, + d=250, + s_rel0=0.001) + annotation ( Placement( + transformation(extent={{50,20},{70,40}}, rotation=0))); + Translational.Components.Mass spool( + L=0.19, + m=0.150, + s(start=0.01475, fixed=true), + v(fixed=true)) annotation (Placement(transformation(extent={{0,-40}, + {40,0}}, rotation=0))); + Translational.Components.Fixed fixedLe( s0=-0.0955) + annotation (Placement( + transformation(extent={{-10,-10},{10,10}}, rotation=270, + origin={-80,90}))); + Translational.Components.Mass springPlateA( + m=10e-3, + L=0.002, + s(start=-0.093, fixed=true), + v(fixed=true)) annotation (Placement(transformation(extent={{-38,60}, + {-18,80}}, rotation=0))); + Translational.Components.Mass springPlateB( + m=10e-3, + s(start=-0.06925, fixed=true), + L=0.002, + v(fixed=true)) annotation ( + Placement(transformation(extent={{20,60},{40,80}}, rotation=0))); + Translational.Components.Spring spring( c=20e3, s_rel0=0.025) + annotation (Placement(transformation(extent={{-10,60},{10,80}},rotation= + 0))); + Translational.Components.ElastoGap outerContactA( + c=1000e3, + d=250, + s_rel0=0.0015) + annotation (Placement(transformation(extent={{-70,60},{-50,80}}, + rotation=0))); + Translational.Components.ElastoGap outerContactB( + c=1000e3, + d=250, + s_rel0=0.0015) annotation (Placement(transformation(extent={{50,60},{70, + 80}}, rotation=0))); + Translational.Components.Rod rod1( L=0.007) + annotation (Placement(transformation( + extent={{-40,30},{-20,50}}, rotation=0))); + Translational.Components.Damper friction( d=2500) + annotation (Placement( + transformation( + origin={-80,50}, + extent={{-10,-10},{10,10}}, + rotation=270))); + Translational.Sources.Force force + annotation (Placement(transformation(extent={{-38,-30}, + {-18,-10}}, rotation=0))); + Translational.Components.Rod housing( L=0.0305) + annotation (Placement(transformation( + extent={{-10,80},{10,100}}, + rotation=0))); + Translational.Components.Rod rod3( L=0.00575) + annotation (Placement(transformation( + extent={{-40,-2},{-20,18}}, rotation=0))); + Translational.Components.Rod rod4( L=0.00575) + annotation (Placement(transformation( + extent={{20,-2},{40,18}}, rotation=0))); + Translational.Components.Rod rod2( L=0.007) + annotation (Placement(transformation( + extent={{20,30},{40,50}}, rotation=0))); + Modelica.Blocks.Sources.Sine sineForce(amplitude=150, freqHz=0.01) + annotation (Placement(transformation(extent={{-78,-30},{-58,-10}}, + rotation=0))); + equation + connect(outerContactA.flange_b,springPlateA. flange_a) annotation (Line( + points={{-50,70},{-38,70}}, color={0,191,0})); + connect(springPlateA.flange_b,spring. flange_a) annotation (Line(points={{-18,70}, + {-18,70},{-10,70}},color={0,191,0})); + connect(spring.flange_b,springPlateB. flange_a) annotation (Line(points={{10,70}, + {20,70}}, color={0,191,0})); + connect(springPlateB.flange_b,outerContactB. flange_a) annotation (Line( + points={{40,70},{40,70},{50,70}}, + color={0,191,0})); + connect(outerContactB.flange_b,housing. flange_b) annotation (Line(points={{70,70}, + {70,90},{10,90}}, color={0,191,0})); + connect(springPlateA.flange_b,rod1. flange_a) annotation (Line(points={{-18,70}, + {-18,52},{-40,52},{-40,40}}, color={0,191,0})); + connect(innerContactA.flange_a,rod3. flange_a) annotation (Line(points={{-70,30}, + {-80,30},{-80,8},{-40,8}}, color={0,191,0})); + connect(innerContactA.flange_b,rod1. flange_b) annotation (Line(points={{-50,30}, + {-20,30},{-20,40}}, color={0,191,0})); + connect(rod2.flange_a,innerContactB. flange_a) annotation (Line(points={{20,40}, + {20,30},{50,30}}, color={0,191,0})); + connect(rod4.flange_b,innerContactB. flange_b) annotation (Line(points={{40,8},{ + 70,8},{70,30}}, color={0,191,0})); + connect(friction.flange_b,rod3. flange_a) annotation (Line(points={{-80,40}, + {-80,8},{-40,8}}, color={0,191,0})); + connect(rod3.flange_b,rod4. flange_a) annotation (Line(points={{-20,8},{ + 20,8}}, color={0,191,0})); + connect(rod2.flange_b,springPlateB. flange_a) annotation (Line(points={{40,40}, + {40,52},{20,52},{20,70}}, color={0,191,0})); + connect(spool.flange_a,rod4. flange_a) annotation (Line(points={{0,-20},{ + 0,8},{20,8}}, color={0,191,0})); + connect(sineForce.y, force.f) + annotation (Line(points={{-57,-20},{-46,-20},{ + -40,-20}}, + color={0,0,127})); + connect(force.flange, spool.flange_a) annotation (Line( + points={{-18,-20},{0,-20}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(outerContactA.flange_a, fixedLe.flange) annotation (Line( + points={{-70,70},{-80,70},{-80,90}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(housing.flange_a, fixedLe.flange) annotation (Line( + points={{-10,90},{-80,90}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(friction.flange_a, fixedLe.flange) annotation (Line( + points={{-80,60},{-80,90}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-92,-72},{90,-80}}, + textString="positive force => spool moves in positive direction ", + lineColor={0,0,255}), + Text( + extent={{-48,-52},{42,-60}}, + textString="Simulate for 100 s", + lineColor={0,0,255}), + Text( + extent={{-100,-62},{88,-70}}, + lineColor={0,0,255}, + textString="plot spool.s as a function of force.f")}), + Documentation(info=" +

+When designing hydraulic valves it is often necessary to hold the spool in +a certain position as long as an external force is below a threshold value. +If this force exceeds the threshold value a linear relation between force +and position is desired. +There are designs that need only one spring to accomplish this task. Using +the ElastoGap elements this design can be modelled easily. +Drawing of spool. +

+ +

+
+
+
+

+ +

+Spool position s as a function of working force f. +

+ +

+ +

+"), + experiment(StopTime=100, Interval=0.1)); + end PreLoad; + + model ElastoGap "Demonstrate usage of ElastoGap" + extends Modelica.Icons.Example; + Components.Fixed fixed + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Components.Rod rod1(L=2) + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Components.Rod rod2(L=2) + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Components.SpringDamper springDamper1( + c=10, + s_rel0=1, + s_rel(fixed=false, start=1), + d=1.5) + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + Components.SpringDamper springDamper2( + c=10, + s_rel0=1, + s_rel(fixed=false, start=1), + d=1.5) + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + Components.Mass mass1( + s(fixed=true, start=2), + L=0, + m=1, + v(fixed=true)) + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + Components.ElastoGap elastoGap1( + c=10, + s_rel(fixed=false, start=1.5), + s_rel0=1.5, + d=1.5) + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + Components.ElastoGap elastoGap2( + c=10, + s_rel(fixed=false, start=1.5), + s_rel0=1.5, + d=1.5) + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + Components.Mass mass2( + s(fixed=true, start=2), + L=0, + m=1, + v(fixed=true)) + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + parameter SI.TranslationalDampingConstant d=1.5 "Damping constant"; + equation + + connect(rod1.flange_b, fixed.flange) annotation (Line( + points={{-20,0},{0,0}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(fixed.flange, rod2.flange_a) annotation (Line( + points={{0,0},{20,0}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(springDamper1.flange_a, rod1.flange_a) annotation (Line( + points={{-40,30},{-48,30},{-48,0},{-40,0}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(springDamper2.flange_b, rod2.flange_b) annotation (Line( + points={{40,30},{50,30},{50,0},{40,0}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(springDamper1.flange_b, mass1.flange_a) annotation (Line( + points={{-20,30},{-10,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass1.flange_b, springDamper2.flange_a) annotation (Line( + points={{10,30},{20,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(rod1.flange_a, elastoGap1.flange_a) annotation (Line( + points={{-40,0},{-48,0},{-48,-30},{-40,-30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(rod2.flange_b, elastoGap2.flange_b) annotation (Line( + points={{40,0},{50,0},{50,-30},{40,-30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(elastoGap1.flange_b, mass2.flange_a) annotation (Line( + points={{-20,-30},{-10,-30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass2.flange_b, elastoGap2.flange_a) annotation (Line( + points={{10,-30},{20,-30}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+This model demonstrates the effect of ElastoGaps on eigenfrequency:
+Plot mass1.s and mass2.s as well as mass1.v and mass2.v

+mass1 is moved by both spring forces all the time.
+Since elastoGap1 lifts off at s > -0.5 m and elastoGap2 lifts off s < +0.5 m, +mass2 moves freely as long as -0.5 m < s < +0.5 m. +

+"), + experiment(StopTime=1.0, Interval=0.01)); + end ElastoGap; + + model Brake "Demonstrate braking of a translational moving mass" + extends Modelica.Icons.Example; + + Modelica.Mechanics.Translational.Components.Brake brake(fn_max=1, useSupport= + false) + annotation (Placement(transformation(extent={{6,40},{26,20}}))); + Modelica.Mechanics.Translational.Components.Mass mass1(m=1, + s(fixed=true), + v(start=1, fixed=true)) + annotation (Placement(transformation(extent={{-34,20},{-14,40}}))); + Modelica.Blocks.Sources.Step step(startTime=0.1, height=2) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=0, + origin={-24,-10}))); + Modelica.Mechanics.Translational.Components.Brake brake1( + fn_max=1, useSupport= + true) + annotation (Placement(transformation(extent={{6,-60},{26,-40}}))); + Modelica.Mechanics.Translational.Components.Mass mass2(m=1, + s(fixed=true), + v(start=1, fixed=true)) + annotation (Placement(transformation(extent={{-34,-60},{-14,-40}}))); + Modelica.Mechanics.Translational.Components.Fixed fixed + annotation (Placement(transformation(extent={{6,-80},{26,-60}}))); + equation + connect(mass1.flange_b, brake.flange_a) + annotation (Line( + points={{-14,30},{6,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(step.y, brake.f_normalized) annotation (Line( + points={{-13,-10},{16,-10},{16,19}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(mass2.flange_b, brake1.flange_a) + annotation (Line( + points={{-14,-50},{6,-50}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(step.y, brake1.f_normalized) annotation (Line( + points={{-13,-10},{16,-10},{16,-39}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(fixed.flange, brake1.support) annotation (Line( + points={{16,-70},{16,-60}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( Documentation(info=" +

+This model consists of a mass with an initial velocity of 1 m/s. +After 0.1 s, a brake is activated and it is shown that the mass decelerates until +it arrives at rest and remains at rest. Two versions of this system are present, +one where the brake is implicitly grounded and one where it is explicitly grounded. +

+"), + experiment(StopTime=2.0, Interval=0.001)); + end Brake; + + model HeatLosses "Demonstrate the modeling of heat losses" + extends Modelica.Icons.Example; + Components.Mass mass1( + m=1, + s(fixed=true), + L=0.1, + v(fixed=true)) + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + Components.SpringDamper springDamper( + s_rel(fixed=true), + v_rel(fixed=true), + c=100, + d=10, + useHeatPort=true) + annotation (Placement(transformation(extent={{-30,20},{-10,40}}))); + Components.Damper damper(d=10, useHeatPort=true) + annotation (Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-60,-10}))); + Components.ElastoGap elastoGap( + c=100, + d=20, + s_rel0=-0.02, + useHeatPort=true) + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + Components.Fixed fixed1 + annotation (Placement(transformation(extent={{-70,-40},{-50,-20}}))); + Sources.Force force + annotation (Placement(transformation(extent={{-90,20},{-70,40}}))); + Blocks.Sources.Sine sine1(freqHz=1, amplitude=20) + annotation (Placement(transformation(extent={{-120,20},{-100,40}}))); + Components.Mass mass2( + m=1, + L=0.1, + s(fixed=false), + v(fixed=false)) + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + Components.SupportFriction supportFriction(useHeatPort=true) + annotation (Placement(transformation(extent={{30,20},{50,40}}))); + Components.Spring spring(c=100, s_rel(fixed=true)) + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Components.Mass mass3( + m=1, + L=0.1, + s(fixed=false), + v(fixed=true)) + annotation (Placement(transformation(extent={{90,20},{110,40}}))); + Components.Brake brake(fn_max=10, useHeatPort=true) + annotation (Placement(transformation(extent={{120,20},{140,40}}))); + Blocks.Sources.Sine sine2(amplitude=10, freqHz=2) + annotation (Placement(transformation(extent={{100,50},{120,70}}))); + Components.MassWithStopAndFriction massWithStopAndFriction( + L=0.1, + m=1, + F_prop=0.5, + F_Coulomb=1, + F_Stribeck=2, + fexp=2, + smin=0, + smax=0.4, + v(fixed=true), + useHeatPort=true) + annotation (Placement(transformation(extent={{180,20},{200,40}}))); + Thermal.HeatTransfer.Components.Convection convection + annotation (Placement(transformation(extent={{-10,-40},{10,-60}}))); + Blocks.Sources.Constant const(k=20) + annotation (Placement(transformation(extent={{-30,-90},{-10,-70}}))); + Thermal.HeatTransfer.Celsius.FixedTemperature TAmbient(T=25) + "Ambient temperature" + annotation (Placement(transformation(extent={{40,-60},{20,-40}}))); + Components.Fixed fixed2 + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Components.SpringDamper springDamper1( + c=10000, + d=1000, + useHeatPort=true, + s_rel(fixed=true)) + annotation (Placement(transformation(extent={{150,20},{170,40}}))); + equation + + connect(mass1.flange_b, springDamper.flange_a) + annotation (Line( + points={{-40,30},{-30,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(sine1.y, force.f) annotation (Line( + points={{-99,30},{-92,30}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(force.flange, mass1.flange_a) annotation (Line( + points={{-70,30},{-60,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass1.flange_a, damper.flange_a) annotation (Line( + points={{-60,30},{-60,0}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(damper.flange_b, fixed1.flange) annotation (Line( + points={{-60,-20},{-60,-30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(springDamper.flange_b, mass2.flange_a) annotation (Line( + points={{-10,30},{0,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass2.flange_b, supportFriction.flange_a) annotation (Line( + points={{20,30},{30,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(supportFriction.flange_b, spring.flange_a) annotation (Line( + points={{50,30},{60,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(spring.flange_b, mass3.flange_a) annotation (Line( + points={{80,30},{90,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(mass3.flange_b, brake.flange_a) annotation (Line( + points={{110,30},{120,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(sine2.y, brake.f_normalized) annotation (Line( + points={{121,60},{130,60},{130,41}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(elastoGap.flange_b, mass1.flange_a) annotation (Line( + points={{-70,0},{-60,0},{-60,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(const.y,convection. Gc) annotation (Line( + points={{-9,-80},{0,-80},{0,-60}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(TAmbient.port,convection. fluid) annotation (Line( + points={{20,-50},{10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(elastoGap.flange_a, fixed2.flange) annotation (Line( + points={{-90,0},{-110,0}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(elastoGap.heatPort, convection.solid) annotation (Line( + points={{-90,-10},{-90,-50},{-10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(damper.heatPort, convection.solid) annotation (Line( + points={{-50,0},{-50,-50},{-10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(springDamper.heatPort, convection.solid) annotation (Line( + points={{-30,20},{-30,-50},{-10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(supportFriction.heatPort, convection.solid) annotation (Line( + points={{30,20},{30,0},{-30,0},{-30,-50},{-10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(brake.heatPort, convection.solid) annotation (Line( + points={{120,20},{120,0},{-30,0},{-30,-50},{-10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(massWithStopAndFriction.heatPort, convection.solid) annotation ( + Line( + points={{180,20},{180,0},{-30,0},{-30,-50},{-10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(brake.flange_b, springDamper1.flange_a) annotation (Line( + points={{140,30},{150,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(springDamper1.flange_b, massWithStopAndFriction.flange_a) + annotation (Line( + points={{170,30},{180,30}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(springDamper1.heatPort, convection.solid) annotation (Line( + points={{150,20},{150,0},{-30,0},{-30,-50},{-10,-50}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation ( Documentation(info=" +

+This model demonstrates how to model the dissipated power of a Translational model, +by enabling the heatPort of all components and connecting these heatPorts via +a convection element to the environment. The total heat flow generated by the +elements and transported to the environment +is present in variable convection.fluid. +

+"), + experiment(StopTime=2.0, Interval=0.001), + Diagram(coordinateSystem(extent={{-120,-100},{200,100}}, + preserveAspectRatio=false))); + end HeatLosses; + + package Utilities "Utility classes used by the Example models" + extends Modelica.Icons.UtilitiesPackage; + function GenerateStribeckFrictionTable + "Generate Stribeck friction table for example Friction for the SupportFriction" + extends Modelica.Icons.Function; + input Real F_prop(final unit="N.s/m", final min=0) + "Velocity dependent friction coefficient"; + input Modelica.SIunits.Force F_Coulomb + "Constant friction: Coulomb force"; + input Modelica.SIunits.Force F_Stribeck "Stribeck effect"; + input Real fexp(final unit="s/m", final min=0) "Exponential decay"; + input Real v_max "Generate table from v=0 ... v_max"; + input Integer nTable(min=2)=100 "Number of table points"; + output Real table[nTable,2] "Friction table"; + algorithm + for i in 1:nTable loop + table[i,1] :=v_max*(i - 1)/(nTable - 1); + table[i,2] :=F_Coulomb + F_prop*table[i, 1] + + F_Stribeck*exp(-fexp*table[i, 1]); + end for; + annotation (Documentation(info=" +

+Returns a table with the friction characteristic table[nTable,2] = [0, f1; ....; v_max, fn], where the first +column is the velocity v in the range 0..v_max and the second column is the friction force +according to the Stribeck curve: +

+
+  F_Coulomb + F_prop*v + F_Stribeck*exp(-fexp*v);
+
+ +")); + end GenerateStribeckFrictionTable; + annotation (Documentation(info=" +

Utility models and functions used in the Examples

+")); + end Utilities; + annotation ( + Documentation(info=" +

+This package contains example models to demonstrate the usage of the +Translational package. Open the models and +simulate them according to the provided description in the models. +

+ +")); + end Examples; + + package Components "Components for 1D translational mechanical drive trains" + extends Modelica.Icons.Package; + + model Fixed "Fixed flange" + parameter SI.Position s0=0 "Fixed offset position of housing"; + + Interfaces.Flange_b flange annotation (Placement(transformation( + origin={0,0}, + extent={{-10,10},{10,-10}}, + rotation=180))); + equation + flange.s = s0; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-80,-40},{80,-40}}, color={0,0,0}), + Line(points={{80,-40},{40,-80}}, color={0,0,0}), + Line(points={{40,-40},{0,-80}}, color={0,0,0}), + Line(points={{0,-40},{-40,-80}}, color={0,0,0}), + Line(points={{-40,-40},{-80,-80}}, color={0,0,0}), + Line(points={{0,-40},{0,-10}}, color={0,0,0}), + Text( + extent={{-150,-90},{150,-130}}, + textString="%name", + lineColor={0,0,255})}), + Documentation(info=" +

+The flange of a 1D translational mechanical system fixed +at an position s0 in the housing. May be used: +

+
    +
  • to connect a compliant element, such as a spring or a damper, + between a sliding mass and the housing. +
  • to fix a rigid element, such as a sliding mass, at a specific + position. +
+ +")); + end Fixed; + + model Mass "Sliding mass with inertia" + parameter SI.Mass m(min=0, start=1) "Mass of the sliding mass"; + parameter StateSelect stateSelect=StateSelect.default + "Priority to use s and v as states" annotation(Dialog(tab="Advanced")); + extends Translational.Interfaces.PartialRigid(L=0,s(start=0, stateSelect=stateSelect)); + SI.Velocity v(start=0, stateSelect=stateSelect) + "Absolute velocity of component"; + SI.Acceleration a(start=0) "Absolute acceleration of component"; + + equation + v = der(s); + a = der(v); + m*a = flange_a.f + flange_b.f; + annotation ( + Documentation(info=" +

+Sliding mass with inertia, without friction and two rigidly connected flanges. +

+

+The sliding mass has the length L, the position coordinate s is in the middle. +Sign convention: A positive force at flange flange_a moves the sliding mass in the positive direction. +A negative force at flange flange_a moves the sliding mass to the negative direction. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,0},{-55,0}}, color={0,127,0}), + Line(points={{55,0},{100,0}}, color={0,127,0}), + Rectangle( + extent={{-55,-30},{56,30}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={255,255,255}), + Polygon( + points={{50,-90},{20,-80},{20,-100},{50,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-60,-90},{20,-90}}, color={0,0,0}), + Text( + extent={{-150,85},{150,45}}, + textString="%name", + lineColor={0,0,255}), + Text( + extent={{-150,-45},{150,-75}}, + lineColor={0,0,0}, + textString="m=%m")}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,0},{-55,0}}, color={0,127,0}), + Line(points={{55,0},{100,0}}, color={0,127,0}), + Rectangle( + extent={{-55,-30},{55,30}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={255,255,255}), + Polygon( + points={{50,-90},{20,-80},{20,-100},{50,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-60,-90},{20,-90}}, color={0,0,0}), + Line(points={{-100,-29},{-100,-61}}, color={0,0,0}), + Line(points={{100,-61},{100,-28}}, color={0,0,0}), + Line(points={{-98,-60},{98,-60}}, color={0,0,0}), + Polygon( + points={{-101,-60},{-96,-59},{-96,-61},{-101,-60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{100,-60},{95,-61},{95,-59},{100,-60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-44,-41},{51,-57}}, + textString="Length L", + lineColor={0,0,255}), + Line(points={{0,30},{0,53}}, color={0,0,0}), + Line(points={{-72,40},{1,40}}, color={0,0,0}), + Polygon( + points={{-7,42},{-7,38},{-1,40},{-7,42}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-61,53},{-9,42}}, + textString="Position s", + lineColor={0,0,255})})); + end Mass; + + model Rod "Rod without inertia" + extends Translational.Interfaces.PartialRigid; + + equation + 0 = flange_a.f + flange_b.f; + annotation ( + Documentation(info=" +

+Rod without inertia and two rigidly connected flanges. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,0},{-55,0}}, color={0,127,0}), + Line(points={{53,0},{99,0}}, color={0,127,0}), + Polygon( + points={{50,-90},{20,-80},{20,-100},{50,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-60,-90},{20,-90}}, color={0,0,0}), + Rectangle( + extent={{-55,10},{53,-10}}, + lineColor={160,160,164}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,80},{150,40}}, + textString="%name", + lineColor={0,0,255}), + Text( + extent={{-150,-30},{150,-60}}, + lineColor={0,0,0}, + textString="L=%L")}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,0},{-55,0}}, color={0,127,0}), + Line(points={{54,0},{100,0}}, color={0,127,0}), + Polygon( + points={{50,-90},{20,-80},{20,-100},{50,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-60,-90},{20,-90}}, color={0,0,0}), + Rectangle( + extent={{-55,3},{53,-4}}, + lineColor={160,160,164}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-100,-29},{-100,-61}}, color={0,0,0}), + Line(points={{100,-61},{100,-28}}, color={0,0,0}), + Line(points={{-98,-60},{98,-60}}, color={0,0,0}), + Polygon( + points={{-101,-60},{-96,-59},{-96,-61},{-101,-60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{100,-60},{95,-61},{95,-59},{100,-60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-44,-41},{51,-57}}, + textString="Length L", + lineColor={0,0,255})})); + end Rod; + + model Spring "Linear 1D translational spring" + extends Translational.Interfaces.PartialCompliant; + parameter SI.TranslationalSpringConstant c(final min=0, start = 1) + "Spring constant"; + parameter SI.Distance s_rel0=0 "Unstretched spring length"; + + equation + f = c*(s_rel - s_rel0); + annotation ( + Documentation(info=" +

+A linear 1D translational spring. The component can be connected either +between two sliding masses, or between +a sliding mass and the housing (model Fixed), to describe +a coupling of the sliding mass with the housing via a spring. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-60,-90},{20,-90}}, color={0,0,0}), + Polygon( + points={{50,-90},{20,-80},{20,-100},{50,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,90},{150,50}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{-98,0},{-60,0},{-44,-30},{-16,30},{14,-30},{44,30},{ + 60,0},{100,0}},color={0,0,0}), + Text( + extent={{-150,-45},{150,-75}}, + lineColor={0,0,0}, + textString="c=%c")}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,0},{-100,65}}, color={128,128,128}), + Line(points={{100,0},{100,65}}, color={128,128,128}), + Line(points={{-100,60},{100,60}}, color={128,128,128}), + Polygon( + points={{90,63},{100,60},{90,57},{90,63}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Text( + extent={{-56,66},{36,81}}, + lineColor={0,0,255}, + textString="s_rel"), + Line(points={{-86,0},{-60,0},{-44,-30},{-16,30},{14,-30},{44,30},{ + 60,0},{84,0}}, color={0,0,0})})); + end Spring; + + model Damper "Linear 1D translational damper" + extends Translational.Interfaces.PartialCompliantWithRelativeStates; + parameter SI.TranslationalDampingConstant d(final min=0, start = 0) + "Damping constant"; + extends + Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT; + equation + f = d*v_rel; + lossPower = f*v_rel; + annotation ( + Documentation(info=" +

+Linear, velocity dependent damper element. It can be either connected +between a sliding mass and the housing (model Fixed), or +between two sliding masses. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-90,0},{-60,0}}, color={0,0,0}), + Line(points={{-60,-30},{-60,30}}, color={0,0,0}), + Line(points={{-60,-30},{60,-30}}, color={0,0,0}), + Line(points={{-60,30},{60,30}}, color={0,0,0}), + Rectangle( + extent={{-60,30},{30,-30}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{30,0},{90,0}}, color={0,0,0}), + Polygon( + points={{50,-90},{20,-80},{20,-100},{50,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-60,-90},{20,-90}}, color={0,0,0}), + Text( + extent={{-150,90},{150,50}}, + textString="%name", + lineColor={0,0,255}), + Text( + extent={{-150,-45},{150,-75}}, + lineColor={0,0,0}, + textString="d=%d"), + Line(visible=useHeatPort, + points={{-100,-100},{-100,-20},{-14,-20}}, + color={191,0,0}, + pattern=LinePattern.Dot, + smooth=Smooth.None)}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-90,0},{-60,0}}, color={0,0,0}), + Line(points={{-60,-30},{-60,30}}, color={0,0,0}), + Line(points={{-60,-30},{60,-30}}, color={0,0,0}), + Line(points={{-60,30},{60,30}}, color={0,0,0}), + Rectangle( + extent={{-60,30},{30,-30}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{30,0},{90,0}}, color={0,0,0}), + Line(points={{-50,60},{50,60}}, color={128,128,128}), + Polygon( + points={{50,63},{60,60},{50,57},{50,63}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Text( + extent={{-58,68},{42,78}}, + lineColor={128,128,128}, + textString="der(s_rel)")})); + end Damper; + + model SpringDamper "Linear 1D translational spring and damper in parallel" + extends Translational.Interfaces.PartialCompliantWithRelativeStates; + parameter SI.TranslationalSpringConstant c(final min=0, start = 1) + "Spring constant"; + parameter SI.TranslationalDampingConstant d(final min=0, start = 1) + "Damping constant"; + parameter SI.Position s_rel0=0 "Unstretched spring length"; + extends + Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT; + protected + Modelica.SIunits.Force f_c "Spring force"; + Modelica.SIunits.Force f_d "Damping force"; + equation + f_c = c*(s_rel - s_rel0); + f_d = d*v_rel; + f = f_c + f_d; + lossPower = f_d*v_rel; + annotation ( + Documentation(info=" +

+A spring and damper element connected in parallel. +The component can be +connected either between two sliding masses to describe the elasticity +and damping, or between a sliding mass and the housing (model Fixed), +to describe a coupling of the sliding mass with the housing via a spring/damper. +

+"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-80,40},{-60,40},{-45,10},{-15,70},{15,10},{45,70},{ + 60,40},{80,40}}, color={0,0,0}), + Line(points={{-80,40},{-80,-70}}, color={0,0,0}), + Line(points={{-80,-70},{-52,-70}}, color={0,0,0}), + Rectangle( + extent={{-52,-49},{38,-91}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-52,-49},{68,-49}}, color={0,0,0}), + Line(points={{-51,-91},{69,-91}}, color={0,0,0}), + Line(points={{38,-70},{80,-70}}, color={0,0,0}), + Line(points={{80,40},{80,-70}}, color={0,0,0}), + Line(points={{-90,0},{-80,0}}, color={0,0,0}), + Line(points={{80,0},{90,0}}, color={0,0,0}), + Polygon( + points={{53,-18},{23,-8},{23,-28},{53,-18}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-57,-18},{23,-18}}, color={0,0,0}), + Text( + extent={{-150,120},{150,80}}, + textString="%name", + lineColor={0,0,255}), + Text( + extent={{-150,-135},{150,-165}}, + lineColor={0,0,0}, + textString="d=%d"), + Text( + extent={{-150,-100},{150,-130}}, + lineColor={0,0,0}, + textString="c=%c"), + Line(visible=useHeatPort, + points={{-100,-100},{-100,-80},{-5,-80}}, + color={191,0,0}, + pattern=LinePattern.Dot, + smooth=Smooth.None)}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line( + points={{-80,32},{-58,32},{-43,2},{-13,62},{17,2},{47,62},{62,32}, + {80,32}}, + color={0,0,0}, + thickness=0.5), + Line(points={{-100,31},{-100,96}}, color={128,128,128}), + Line(points={{100,29},{100,94}}, color={128,128,128}), + Line(points={{-98,82},{100,82}}, color={128,128,128}), + Polygon( + points={{90,85},{100,82},{90,79},{90,85}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Text( + extent={{-63,83},{46,103}}, + lineColor={0,0,255}, + textString="s_rel"), + Rectangle( + extent={{-52,-28},{38,-72}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-51,-72},{69,-72}}, color={0,0,0}), + Line(points={{-52,-28},{68,-28}}, color={0,0,0}), + Line(points={{38,-50},{80,-50}}, color={0,0,0}), + Line(points={{-80,-50},{-52,-50}}, color={0,0,0}), + Line(points={{-80,32},{-80,-50}}, color={0,0,0}), + Line(points={{80,32},{80,-50}}, color={0,0,0}), + Line(points={{-90,0},{-80,0}}, color={0,0,0}), + Line(points={{90,0},{80,0}}, color={0,0,0})})); + end SpringDamper; + + model ElastoGap "1D translational spring damper combination with gap" + extends + Modelica.Mechanics.Translational.Interfaces.PartialCompliantWithRelativeStates; + parameter SI.TranslationalSpringConstant c(final min=0, start=1) + "Spring constant"; + parameter SI.TranslationalDampingConstant d(final min=0, start=1) + "Damping constant"; + parameter SI.Position s_rel0=0 "Unstretched spring length"; + parameter Real n(final min=1) = 1 + "Exponent of spring force ( f_c = -c*|s_rel-s_rel0|^n )"; + extends + Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT; + + /* +Please note that initialization might fail due to the nonlinear spring characteristic +(spring force is zero for s_rel > s_rel0) +if a positive force is acting on the element and no other force balances this force +(e.g., when setting both initial velocity and acceleration to 0) +*/ + Boolean contact "=true, if contact, otherwise no contact"; + protected + Modelica.SIunits.Force f_c "Spring force"; + Modelica.SIunits.Force f_d2 "Linear damping force"; + Modelica.SIunits.Force f_d + "Linear damping force which is limited by spring force (|f_d| <= |f_c|)"; + equation + // Modify contact force, so that it is only "pushing" and not + // "pulling/sticking" and that it is continuous + contact = s_rel < s_rel0; + f_c = smooth(1, noEvent( if contact then -c*abs(s_rel - s_rel0)^n else 0)); + f_d2 = if contact then d*v_rel else 0; + f_d = smooth(0, noEvent( if contact then (if f_d2 < f_c then f_c else + if f_d2 > -f_c then -f_c else f_d2) else 0)); + f = f_c + f_d; + lossPower = f_d*v_rel; + annotation ( + Documentation(info=" +

+This component models a spring damper combination that can lift off. +It can be connected between a sliding mass and the housing (model +Fixed), +to describe the contact of a sliding mass with the housing. +

+ +

+As long as s_rel > s_rel0, no force is exerted (s_rel = flange_b.s - flange_a.s). +If s_rel ≤ s_rel0, the contact force is basically computed with a linear +spring/damper characteristic. With parameter n≥1 (exponent of spring force), +a nonlinear spring force can be modeled: +

+ +
+   desiredContactForce = c*|s_rel - s_rel0|^n + d*der(s_rel)
+
+ +

+Note, Hertzian contact is described by: +

+
    +
  • Contact between two metallic spheres: n=1.5
  • +
  • Contact between two metallic plates: n=1
  • +
+ +

+The above force law leads to the following difficulties: +

+ +
    +
  1. If the damper force becomes larger as the spring force and with opposite sign, + the contact force would be \"pulling/sticking\" which is unphysical, since during + contact only pushing forces can occur.
  2. + +
  3. When contact occurs with a non-zero relative speed (which is the usual + situation), the damping force has a non-zero value and therefore the contact + force changes discontinuously at s_rel = s_rel0. Again, this is not physical + because the force can only change continuously. (Note, this component is not an + idealized model where a steep characteristic is approximated by a discontinuity, + but it shall model the steep characteristic.)
  4. +
+ +

+In the literature there are several proposals to fix problem (2). Especially, often +the following model is used (see, e.g., +Lankarani, Nikravesh: Continuous Contact Force Models for Impact +Analysis in Multibody Systems, Nonlinear Dynamics 5, pp. 193-207, 1994, +pdf-download): +

+ +
+   f = c*s_rel^n + (d*s_rel^n)*der(s_rel)
+
+ +

+However, this and other models proposed in literature violate +issue (1), i.e., unphysical pulling forces can occur (if d*der(s_rel) +becomes large enough). Note, if the force law is of the form \"f = f_c + f_d\", then a +necessary condition is that |f_d| ≤ |f_c|, otherwise (1) and (2) are violated. +For this reason, the most simplest approach is used in the ElastoGap model +to fix both problems by using this necessary condition in the force law directly. +If s_rel0 = 0, the equations are: +

+ +
+    if s_rel ≥ 0 then
+       f = 0;    // contact force
+    else
+       f_c  = -c*|s_rel|^n;          // contact spring force (Hertzian contact force)
+       f_d2 = d*der(s_rel);         // linear contact damper force
+       f_d  = if f_d2 <  f_c then  f_c else
+              if f_d2 > -f_c then -f_c else f_d2;  // bounded damper force
+       f    = f_c + f_d;            // contact force
+    end if;
+
+ +

+Note, since |f_d| ≤ |f_c|, pulling forces cannot occur and the contact force +is always continuous, especially around the start of the penetration at s_rel = s_rel0. +

+ +

+In the next figure, a typical simulation with the ElastoGap model is shown +(Examples.ElastoGap) +where the different effects are visualized: +

+ +
    +
  1. Curve 1 (elastoGap1.f) is the unmodified contact force, i.e., the linear spring/damper + characteristic. A pulling/sticking force is present at the end of the contact.
  2. +
  3. Curve 2 (elastoGap2.f) is the contact force, where the force is explicitly set to + zero when pulling/sticking occurs. The contact force is discontinuous when contact starts.
  4. +
  5. Curve 3 (elastoGap3.f) is the ElastoGap model of this library. No discontinuity and no + pulling/sticking occurs.
  6. +
+ +

+ +

+"), Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,0},{-50,0}}, color={0,127,0}), + Line( + points={{-48,34},{-48,-46}}, + color={0,0,0}, + thickness=1), + Line(points={{8,40},{8,2}}, color={0,0,0}), + Line(points={{-2,0},{38,0},{38,44},{-2,44}}, color={0,0,0}), + Line(points={{38,22},{72,22}}, color={0,0,0}), + Line( + points={{-12,-38},{-12,20}}, + color={0,0,0}, + thickness=1), + Line(points={{-12,22},{8,22}}, color={0,0,0}), + Line(points={{-12,-38},{-2,-38}}, color={0,0,0}), + Line(points={{72,0},{100,0}}, color={0,127,0}), + Line(points={{72,22},{72,-42}}, color={0,0,0}), + Line(points={{-2,-38},{10,-28},{22,-48},{38,-28},{50,-48},{64,-28}, + {72,-40}}, color={0,0,0}), + Rectangle( + extent={{8,44},{38,0}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-64,-80},{64,-64}}, + lineColor={0,0,255}, + textString="s_rel"), + Line(points={{-100,-29},{-100,-61}}, color={0,0,0}), + Line(points={{100,-61},{100,-28}}, color={0,0,0}), + Line(points={{-98,-60},{98,-60}}, color={0,0,0}), + Polygon( + points={{-101,-60},{-96,-59},{-96,-61},{-101,-60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{100,-60},{95,-61},{95,-59},{100,-60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-98,0},{-48,0}}, color={0,127,0}), + Line( + points={{-48,38},{-48,-38}}, + color={0,0,0}, + thickness=1), + Line(points={{8,-10},{8,-48}}, + color={0,0,0}), + Line(points={{-2,-50},{38,-50},{38,-6},{-2,-6}}, + color={0,0,0}), + Line(points={{38,-28},{72,-28}}, + color={0,0,0}), + Line( + points={{-12,-38},{-12,36}}, + color={0,0,0}, + thickness=1), + Line(points={{-12,-28},{8,-28}}, + color={0,0,0}), + Line(points={{-12,24},{-6,24}}, color={0,0,0}), + Line(points={{72,0},{98,0}}, color={0,127,0}), + Line(points={{72,22},{72,-42}}, color={0,0,0}), + Line(points={{-6,24},{6,34},{18,14},{34,34},{46,14},{60,34},{68,22}}, + color={0,0,0}), + Rectangle( + extent={{8,-6},{38,-50}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-52,-70},{28,-70}}, color={0,0,0}), + Polygon( + points={{58,-70},{28,-60},{28,-80},{58,-70}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,100},{150,60}}, + textString="%name", + lineColor={0,0,255}, + pattern=LinePattern.Dot), + Text( + extent={{-150,-125},{150,-95}}, + lineColor={0,0,0}, + textString="c=%c"), + Text( + extent={{-150,-160},{150,-130}}, + lineColor={0,0,0}, + textString="d=%d"), + Line(points={{68,22},{72,22}}, color={0,0,0}), + Line(visible=useHeatPort, + points={{-100,-100},{-100,-44},{22,-44},{22,-28}}, + color={191,0,0}, + pattern=LinePattern.Dot, + smooth=Smooth.None)})); + end ElastoGap; + + model SupportFriction "Coulomb friction in support" + + extends + Modelica.Mechanics.Translational.Interfaces.PartialElementaryTwoFlangesAndSupport2; + extends + Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT; + + parameter Real f_pos[:, 2]=[0, 1] + "[v, f] Positive sliding friction characteristic (v>=0)"; + parameter Real peak(final min=1) = 1 + "peak*f_pos[1,2] = Maximum friction force for v==0"; + extends Translational.Interfaces.PartialFriction; + + SI.Position s; + SI.Force f "Friction force"; + SI.Velocity v "Absolute velocity of flange_a and flange_b"; + SI.Acceleration a "Absolute acceleration of flange_a and flange_b"; + equation + // Constant auxiliary variables + f0 = Modelica.Math.tempInterpol1(0, f_pos, 2); + f0_max = peak*f0; + free = false; + + s = flange_a.s - s_support; + flange_a.s = flange_b.s; + + // velocity and acceleration of flanges + v = der(s); + a = der(v); + v_relfric = v; + a_relfric = a; + + // Friction force + flange_a.f + flange_b.f - f = 0; + + // Friction force + f = if locked then sa*unitForce else + (if startForward then Modelica.Math.tempInterpol1( v, f_pos, 2) else + if startBackward then -Modelica.Math.tempInterpol1(-v, f_pos, 2) else + if pre(mode) == Forward then Modelica.Math.tempInterpol1( v, f_pos, 2) else + -Modelica.Math.tempInterpol1(-v, f_pos, 2)); + + lossPower = f*v_relfric; + annotation ( + Documentation(info=" +

+This element describes Coulomb friction in support, +i.e., a frictional force acting between a flange and the housing. +The positive sliding friction force \"f\" has to be defined +by table \"f_pos\" as function of the absolute velocity \"v\". +E.g. +

+
+       v |   f
+      ---+-----
+       0 |   0
+       1 |   2
+       2 |   5
+       3 |   8
+
+

+gives the following table: +

+
+   f_pos = [0, 0; 1, 2; 2, 5; 3, 8];
+
+

+Currently, only linear interpolation in the table is supported. +Outside of the table, extrapolation through the last +two table entries is used. It is assumed that the negative +sliding friction force has the same characteristic with negative +values. Friction is modelled in the following way: +

+

+When the absolute velocity \"v\" is not zero, the friction force +is a function of v and of a constant normal force. This dependency +is defined via table f_pos and can be determined by measurements, +e.g., by driving the gear with constant velocity and measuring the +needed driving force (= friction force). +

+

+When the absolute velocity becomes zero, the elements +connected by the friction element become stuck, i.e., the absolute +position remains constant. In this phase the friction force is +calculated from a force balance due to the requirement, that +the absolute acceleration shall be zero. The elements begin +to slide when the friction force exceeds a threshold value, +called the maximum static friction force, computed via: +

+
+   maximum_static_friction = peak * sliding_friction(v=0)  (peak >= 1)
+
+

+This procedure is implemented in a \"clean\" way by state events and +leads to continuous/discrete systems of equations if friction elements +are dynamically coupled which have to be solved by appropriate +numerical methods. The method is described in: +

+
+
Otter M., Elmqvist H., and Mattsson S.E. (1999): +
Hybrid Modeling in Modelica based on the Synchronous + Data Flow Principle. CACSD'99, Aug. 22.-26, Hawaii. +
+

+More precise friction models take into account the elasticity of the +material when the two elements are \"stuck\", as well as other effects, +like hysteresis. This has the advantage that the friction element can +be completely described by a differential equation without events. The +drawback is that the system becomes stiff (about 10-20 times slower +simulation) and that more material constants have to be supplied which +requires more sophisticated identification. For more details, see the +following references, especially (Armstrong and Canudas de Witt 1996): +

+
+
Armstrong B. (1991): +
Control of Machines with Friction. Kluwer Academic + Press, Boston MA.

+
Armstrong B., and Canudas de Wit C. (1996): +
Friction Modeling and Compensation. + The Control Handbook, edited by W.S.Levine, CRC Press, + pp. 1369-1382.

+
Canudas de Wit C., Olsson H., Astroem K.J., and Lischinsky P. (1995): +
A new model for control of systems with friction. + IEEE Transactions on Automatic Control, Vol. 40, No. 3, pp. 419-425.

+
+ +"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-90,10},{90,-10}}, + lineColor={0,127,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-48,-10},{-28,-30}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Sphere, + fillColor={175,175,175}), + Ellipse( + extent={{-10,-10},{10,-30}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Sphere, + fillColor={175,175,175}), + Ellipse( + extent={{30,-10},{50,-30}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Sphere, + fillColor={175,175,175}), + Polygon( + points={{-60,-30},{60,-30},{60,-12},{80,-12},{80,-50},{-80,-50},{ + -80,-12},{-60,-12},{-60,-30}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Solid, + smooth=Smooth.None, + fillColor={175,175,175}), + Text( + extent={{-150,100},{150,60}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{-10,-85},{-5,-80}}, color={0,0,0}), + Line(points={{-5,-90},{5,-80}}, color={0,0,0}), + Line(points={{-10,-90},{0,-80}}, color={0,0,0}), + Line(points={{0,-90},{10,-80}}, color={0,0,0}), + Polygon( + points={{-60,-50},{-20,-80},{20,-80},{60,-50},{-60,-50}}, + lineColor={95,95,95}, + smooth=Smooth.None, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-50,30},{-30,10}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Sphere, + fillColor={175,175,175}), + Ellipse( + extent={{-10,30},{10,10}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Sphere, + fillColor={175,175,175}), + Ellipse( + extent={{30,30},{50,10}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Sphere, + fillColor={175,175,175}), + Polygon( + points={{-60,30},{60,30},{60,12},{80,12},{80,50},{-80,50},{-80,12}, + {-60,12},{-60,30}}, + lineColor={95,95,95}, + fillPattern=FillPattern.Solid, + smooth=Smooth.None, + fillColor={175,175,175}), + Line(visible=useHeatPort, + points={{-100,-100},{-100,-20},{0,-20}}, + color={191,0,0}, + pattern=LinePattern.Dot, + smooth=Smooth.None)})); + end SupportFriction; + + model Brake "Brake based on Coulomb friction" + + extends + Modelica.Mechanics.Translational.Interfaces.PartialElementaryTwoFlangesAndSupport2; + extends + Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT; + parameter Real mue_pos[:, 2]=[0, 0.5] + "[v, f] Positive sliding friction characteristic (v>=0)"; + parameter Real peak(final min=1) = 1 + "peak*mue_pos[1,2] = Maximum friction force for v==0"; + parameter Real cgeo(final min=0) = 1 + "Geometry constant containing friction distribution assumption"; + parameter SI.Force fn_max(final min=0, start=1) "Maximum normal force"; + extends Translational.Interfaces.PartialFriction; + + SI.Position s; + SI.Force f "Brake friction force"; + SI.Velocity v "Absolute velocity of flange_a and flange_b"; + SI.Acceleration a "Absolute acceleration of flange_a and flange_b"; + + Real mue0 "Friction coefficient for v=0 and forward sliding"; + SI.Force fn "Normal force (=fn_max*f_normalized)"; + + // Constant auxiliary variable + Modelica.Blocks.Interfaces.RealInput f_normalized + "Normalized force signal 0..1 (normal force = fn_max*f_normalized; brake is active if > 0)" + annotation (Placement(transformation( + origin={0,110}, + extent={{20,-20},{-20,20}}, + rotation=90))); + equation + mue0 = Modelica.Math.tempInterpol1(0, mue_pos, 2); + + s = s_a; + s = s_b; + + // velocity and acceleration of flanges flange_a and flange_b + v = der(s); + a = der(v); + v_relfric = v; + a_relfric = a; + + // Friction force, normal force and friction force for v_rel=0 + flange_a.f + flange_b.f - f = 0; + fn = fn_max*f_normalized; + f0 = mue0*cgeo*fn; + f0_max = peak*f0; + free = fn <= 0; + + // Friction force + f = if locked then sa*unitForce else + if free then 0 else + cgeo*fn*(if startForward then Modelica.Math.tempInterpol1( v, mue_pos, 2) else + if startBackward then -Modelica.Math.tempInterpol1(-v, mue_pos, 2) else + if pre(mode) == Forward then Modelica.Math.tempInterpol1( v, mue_pos, 2) else + -Modelica.Math.tempInterpol1(-v, mue_pos, 2)); + + lossPower = f*v_relfric; + annotation ( + Documentation(info=" +

+This component models a brake, i.e., a component where a frictional +force is acting between the housing and a flange and a controlled normal +force presses the flange to the housing in order to increase friction. +The normal force fn has to be provided as input signal f_normalized in a normalized form +(0 ≤ f_normalized ≤ 1), +fn = fn_max*f_normalized, where fn_max has to be provided as parameter. +Friction in the brake is modelled in the following way: +

+

+When the absolute velocity \"v\" is not zero, the friction force +is a function of the velocity dependent friction coefficient mue(v) , of +the normal force \"fn\", and of a geometry constant \"cgeo\" which takes into +account the geometry of the device and the assumptions on the friction +distributions: +

+
+        frictional_force = cgeo * mue(v) * fn
+
+

+ Typical values of coefficients of friction: +

+
+      dry operation   :  mue = 0.2 .. 0.4
+      operating in oil:  mue = 0.05 .. 0.1
+
+

+ The positive part of the friction characteristic mue(v), + v >= 0, is defined via table mue_pos (first column = v, + second column = mue). Currently, only linear interpolation in + the table is supported. +

+

+ When the absolute velocity becomes zero, the elements + connected by the friction element become stuck, i.e., the absolute + position remains constant. In this phase the friction force is + calculated from a force balance due to the requirement, that + the absolute acceleration shall be zero. The elements begin + to slide when the friction force exceeds a threshold value, + called the maximum static friction force, computed via: +

+
+       frictional_force = peak * cgeo * mue(w=0) * fn   (peak >= 1)
+
+

+This procedure is implemented in a \"clean\" way by state events and +leads to continuous/discrete systems of equations if friction elements +are dynamically coupled. The method is described in: +

+
+
Otter M., Elmqvist H., and Mattsson S.E. (1999): +
Hybrid Modeling in Modelica based on the Synchronous + Data Flow Principle. CACSD'99, Aug. 22.-26, Hawaii. +
+

+More precise friction models take into account the elasticity of the +material when the two elements are \"stuck\", as well as other effects, +like hysteresis. This has the advantage that the friction element can +be completely described by a differential equation without events. The +drawback is that the system becomes stiff (about 10-20 times slower +simulation) and that more material constants have to be supplied which +requires more sophisticated identification. For more details, see the +following references, especially (Armstrong and Canudas de Witt 1996): +

+
+
Armstrong B. (1991): +
Control of Machines with Friction. Kluwer Academic + Press, Boston MA.

+
Armstrong B., and Canudas de Wit C. (1996): +
Friction Modeling and Compensation. + The Control Handbook, edited by W.S.Levine, CRC Press, + pp. 1369-1382.

+
Canudas de Wit C., Olsson H., Astroem K.J., and Lischinsky P. (1995): +
A new model for control of systems with friction. + IEEE Transactions on Automatic Control, Vol. 40, No. 3, pp. 419-425.

+
+"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-90,10},{90,-10}}, + lineColor={0,127,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-20,30},{20,20}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-20,-20},{20,-30}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,-30},{10,-50},{-10,-50},{0,-30}}, + lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Polygon( + points={{10,50},{-10,50},{0,30},{10,50}}, + lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Line( + points={{0,90},{0,50}}, + color={0,0,0}, + smooth=Smooth.None), + Rectangle( + extent={{20,28},{30,22}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,-22},{30,-28}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{30,28},{36,-102}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{14,-96},{30,-102}}, + lineColor={175,175,175}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid), + Line( + points={{0,-50},{0,-60},{-40,-50},{-40,48},{0,60},{0,90}}, + color={0,0,0}, + smooth=Smooth.None), + Text( + extent={{-150,-120},{150,-160}}, + textString="%name", + lineColor={0,0,255}), + Line(visible=useHeatPort, + points={{-100,-102},{-100,-16},{0,-16}}, + color={191,0,0}, + pattern=LinePattern.Dot, + smooth=Smooth.None)})); + end Brake; + + model IdealGearR2T + "Gearbox transforming rotational into translational motion" + extends Modelica.Mechanics.Rotational.Components.IdealGearR2T; + annotation (Documentation(info=" +

Couples rotational and translational motion, like a toothed wheel with a toothed rack, specifying the ratio of rotational / translational motion.

+")); + end IdealGearR2T; + + model IdealRollingWheel + "Simple 1-dim. model of an ideal rolling wheel without inertia" + extends Modelica.Mechanics.Rotational.Components.IdealRollingWheel; + annotation (Documentation(info=" +

Couples rotational and translational motion, like an ideal rolling wheel, specifying the wheel radius.

+")); + end IdealRollingWheel; + + model InitializeFlange + "Initializes a flange with pre-defined position, speed and acceleration (usually, this is reference data from a control bus)" + extends Modelica.Blocks.Icons.Block; + parameter Boolean use_s_start = true + "= true, if initial position is defined by input s_start, otherwise not initialized"; + parameter Boolean use_v_start = true + "= true, if initial speed is defined by input v_start, otherwise not initialized"; + parameter Boolean use_a_start = true + "= true, if initial acceleration is defined by input a_start, otherwise not initialized"; + + parameter StateSelect stateSelect=StateSelect.default + "Priority to use flange angle and speed as states"; + + Modelica.Blocks.Interfaces.RealInput s_start(unit="m") if use_s_start + "Initial position of flange" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput v_start(unit="m/s") if use_v_start + "Initial speed of flange" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}, + rotation=0))); + Modelica.Blocks.Interfaces.RealInput a_start(unit="m/s2") if use_a_start + "Initial angular acceleration of flange" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}, + rotation=0))); + Interfaces.Flange_b flange "Flange that is initialized" annotation (Placement( + transformation(extent={{90,-10},{110,10}}, rotation=0))); + + Modelica.SIunits.Position s_flange(stateSelect=stateSelect)=flange.s + "Flange position"; + Modelica.SIunits.Velocity v_flange(stateSelect=stateSelect)= der(s_flange) + "= der(s_flange)"; + + protected + encapsulated model Set_s_start "Set s_start" + import Modelica; + extends Modelica.Blocks.Icons.Block; + Modelica.Blocks.Interfaces.RealInput s_start(unit="m") "Start position" + annotation (HideResult=true, Placement(transformation(extent={{-140,-20},{ + -100,20}}, rotation=0))); + + Modelica.Mechanics.Translational.Interfaces.Flange_b flange + annotation (Placement( + transformation(extent={{90,-10},{110,10}}, rotation=0))); + initial equation + flange.s = s_start; + equation + flange.f = 0; + + end Set_s_start; + + encapsulated model Set_v_start "Set v_start" + import Modelica; + extends Modelica.Blocks.Icons.Block; + Modelica.Blocks.Interfaces.RealInput v_start(unit="m/s") "Start velocity" + annotation (HideResult=true, Placement(transformation(extent={{-140,-20},{ + -100,20}}, rotation=0))); + + Modelica.Mechanics.Translational.Interfaces.Flange_b flange + annotation (Placement( + transformation(extent={{90,-10},{110,10}}, rotation=0))); + initial equation + der(flange.s) = v_start; + equation + flange.f = 0; + + end Set_v_start; + + encapsulated model Set_a_start "Set a_start" + import Modelica; + extends Modelica.Blocks.Icons.Block; + Modelica.Blocks.Interfaces.RealInput a_start(unit="m/s2") "Start acceleration" + annotation (HideResult=true, Placement(transformation(extent={{-140,-20},{ + -100,20}}, rotation=0))); + + Modelica.Mechanics.Translational.Interfaces.Flange_b flange(s(stateSelect=StateSelect.avoid)) + annotation (Placement( + transformation(extent={{90,-10},{110,10}}, rotation=0))); + Modelica.SIunits.Velocity v = der(flange.s) annotation(HideResult=true); + initial equation + der(v) = a_start; + equation + flange.f = 0; + + end Set_a_start; + + encapsulated model Set_flange_f "Set flange_f to zero" + import Modelica; + extends Modelica.Blocks.Icons.Block; + Modelica.Mechanics.Translational.Interfaces.Flange_b flange + annotation (Placement( + transformation(extent={{90,-10},{110,10}}, rotation=0))); + equation + flange.f = 0; + end Set_flange_f; + protected + Set_s_start set_s_start if use_s_start annotation (Placement( + transformation(extent={{-20,50},{0,70}}, rotation=0))); + Set_v_start set_v_start if use_v_start + annotation (Placement(transformation(extent={{-20, + -10},{0,10}}, rotation=0))); + Set_a_start set_a_start if use_a_start + annotation (Placement(transformation(extent={{-20, + -70},{0,-50}}, rotation=0))); + Set_flange_f set_flange_f annotation (Placement(transformation(extent={ + {20,-100},{40,-80}}, rotation=0))); + equation + connect(set_s_start.flange, flange) annotation (Line( + points={{0,60},{60,60},{60,0},{100,0}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(set_v_start.flange, flange) annotation (Line( + points={{0,0},{100,0}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(set_a_start.flange, flange) annotation (Line( + points={{0,-60},{60,-60},{60,0},{100,0}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(set_flange_f.flange, flange) annotation (Line( + points={{40,-90},{60,-90},{60,0},{100,0}}, + color={0,0,0}, + smooth=Smooth.None)); + connect(s_start, set_s_start.s_start) annotation (Line( + points={{-120,60},{-22,60}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(v_start, set_v_start.v_start) annotation (Line( + points={{-120,0},{-22,0}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(a_start, set_a_start.a_start) annotation (Line( + points={{-120,-60},{-22,-60}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={ + Text( + extent={{-94,74},{68,46}}, + lineColor={0,0,0}, + textString="s_start"), + Text( + extent={{-94,16},{70,-14}}, + lineColor={0,0,0}, + textString="v_start"), + Text( + extent={{-94,-46},{66,-74}}, + lineColor={0,0,0}, + textString="a_start")}), + Documentation(info=" +

+This component is used to optionally initialize the position, speed, +and/or acceleration of the flange to which this component +is connected. Via parameters use_s_start, use_v_start, use_a_start +the corresponding input signals s_start, v_start, a_start are conditionally +activated. If an input is activated, the corresponding flange property +is initialized with the input value at start time. +

+ +

+For example, if \"use_s_start = true\", then flange.s is initialized +with the value of the input signal \"s_start\" at the start time. +

+ +

+Additionally, it is optionally possible to define the \"StateSelect\" +attribute of the flange position and the flange speed via parameter +\"stateSelection\". +

+ +

+This component is especially useful when the initial values of a flange +shall be set according to reference signals of a controller that are +provided via a signal bus. +

+ +")); + end InitializeFlange; + + model MassWithStopAndFriction + "Sliding mass with hard stop and Stribeck friction" + extends PartialFrictionWithStop; + SI.Velocity v(start=0, stateSelect = StateSelect.always) + "Absolute velocity of flange_a and flange_b"; + SI.Acceleration a(start=0) + "Absolute acceleration of flange_a and flange_b"; + parameter Modelica.SIunits.Mass m(start=1) "Mass"; + parameter Real F_prop(final unit="N.s/m", final min=0, start = 1) + "Velocity dependent friction"; + parameter Modelica.SIunits.Force F_Coulomb(start=5) + "Constant friction: Coulomb force"; + parameter Modelica.SIunits.Force F_Stribeck(start=10) "Stribeck effect"; + parameter Real fexp(final unit="s/m", final min=0, start = 2) + "Exponential decay"; + extends + Modelica.Thermal.HeatTransfer.Interfaces.PartialElementaryConditionalHeatPortWithoutT; + Integer stopped; + encapsulated partial model PartialFrictionWithStop + "Base model of Coulomb friction elements with stop" + + import SI = Modelica.SIunits; + import Modelica.Mechanics.Translational.Interfaces.PartialRigid; + parameter SI.Position smax(start= 25) + "Right stop for (right end of) sliding mass"; + parameter SI.Position smin(start=-25) + "Left stop for (left end of) sliding mass"; + parameter SI.Velocity v_small=1e-3 + "Relative velocity near to zero (see model info text)" + annotation(Dialog(tab="Advanced")); + // Equations to define the following variables have to be defined in subclasses + SI.Velocity v_relfric "Relative velocity between frictional surfaces"; + SI.Acceleration a_relfric + "Relative acceleration between frictional surfaces"; + SI.Force f + "Friction force (positive, if directed in opposite direction of v_rel)"; + SI.Force f0 "Friction force for v=0 and forward sliding"; + SI.Force f0_max "Maximum friction force for v=0 and locked"; + Boolean free "true, if frictional element is not active"; + // Equations to define the following variables are given in this class + Real sa(unit="1") + "Path parameter of friction characteristic f = f(a_relfric)"; + Boolean startForward(start=false, fixed=true) + "= true, if v_rel=0 and start of forward sliding or v_rel > v_small"; + Boolean startBackward(start=false, fixed=true) + "= true, if v_rel=0 and start of backward sliding or v_rel < -v_small"; + Boolean locked(start=false) "true, if v_rel=0 and not sliding"; + extends PartialRigid(s(start=0, stateSelect = StateSelect.always)); + constant Integer Unknown=3 "Value of mode is not known"; + constant Integer Free=2 "Element is not active"; + constant Integer Forward=1 "v_rel > 0 (forward sliding)"; + constant Integer Stuck=0 + "v_rel = 0 (forward sliding, locked or backward sliding)"; + constant Integer Backward=-1 "v_rel < 0 (backward sliding)"; + Integer mode( + final min=Backward, + final max=Unknown, + start=Unknown, fixed=true); + protected + constant SI.Acceleration unitAcceleration = 1 annotation(HideResult=true); + constant SI.Force unitForce = 1 annotation(HideResult=true); + equation + /* Friction characteristic + (locked is introduced to help the Modelica translator determining + the different structural configurations, + if for each configuration special code shall be generated) +*/ + startForward = pre(mode) == Stuck and (sa > f0_max/unitForce and s < (smax - L/2) or + pre(startForward) and sa > f0/unitForce and s < (smax - L/2)) or pre(mode) + == Backward and v_relfric > v_small or initial() and (v_relfric > 0); + startBackward = pre(mode) == Stuck and (sa < -f0_max/unitForce and s > (smin + L/2) or + pre(startBackward) and sa < -f0/unitForce and s > (smin + L/2)) or pre(mode) + == Forward and v_relfric < -v_small or initial() and (v_relfric < 0); + locked = not free and + not (pre(mode) == Forward or startForward or pre(mode) == Backward or startBackward); + + a_relfric/unitAcceleration = if locked then 0 else + if free then sa else + if startForward then sa - f0_max/unitForce else + if startBackward then sa + f0_max/unitForce else + if pre(mode) == Forward then sa - f0_max/unitForce else + sa + f0_max/unitForce; + + /* Friction torque has to be defined in a subclass. Example for a clutch: + f = if locked then sa else + if free then 0 else + cgeo*fn*(if startForward then Math.tempInterpol1( v_relfric, mue_pos, 2) else + if startBackward then -Math.tempInterpol1(-v_relfric, mue_pos, 2) else + if pre(mode) == Forward then Math.tempInterpol1( v_relfric, mue_pos, 2) else + -Math.tempInterpol1(-v_relfric, mue_pos, 2)); +*/ + // finite state machine to determine configuration + mode = if free then Free else + (if (pre(mode) == Forward or pre(mode) == Free or startForward) and v_relfric > 0 and s < (smax - L/2) then + Forward else + if (pre(mode) == Backward or pre(mode) == Free or startBackward) and v_relfric < 0 and s > (smin + L/2) then + Backward else + Stuck); + annotation (Documentation(info=" +

+Basic model for Coulomb friction that models the stuck phase in a reliable way.
+Additionally, a left and right stop are handled. +

+")); + end PartialFrictionWithStop; + equation + // Constant auxiliary variables + f0 = (F_Coulomb + F_Stribeck); + f0_max = f0*1.001; + free = f0 <= 0 and F_prop <= 0 and s > smin + L/2 and s < smax - L/2; + // Velocity and acceleration of flanges + v = der(s); + a = der(v); + v_relfric = v; + a_relfric = a; + // Equilibrium of forces + 0 = flange_a.f + flange_b.f - f - m*der(v); + // Friction force + f = if locked then sa*unitForce else + if free then 0 else + (if startForward then F_prop*v + F_Coulomb + F_Stribeck else + if startBackward then F_prop*v - F_Coulomb - F_Stribeck else + if pre(mode) == Forward then F_prop*v + F_Coulomb + F_Stribeck*exp(-fexp*abs(v)) else + F_prop*v - F_Coulomb - F_Stribeck*exp(-fexp*abs(v))); + lossPower = f*v_relfric; + equation + when (initial()) then + assert(s > smin + L/2 or s >= smin + L/2 and v >= 0, + "Error in initialization of hard stop. (s - L/2) must be >= smin\n"+ + "(s=" + String(s) + ", L=" + String(L) + ", smin=" + String(smin) + ")"); + assert(s < smax - L/2 or s <= smax - L/2 and v <= 0, + "Error in initialization of hard stop. (s + L/2) must be <= smax\n"+ + "(s=" + String(s) + ", L=" + String(L) + ", smax=" + String(smax) + ")"); + end when; + + // Define events for hard stops and reinitialize the state variables velocity v and position s + stopped = if s <= smin + L/2 then -1 else if s >= smax - L/2 then +1 else 0; + when stopped <> 0 then + reinit(s, if stopped < 0 then smin + L/2 else smax - L/2); + reinit(v, 0); + end when; + /* +Version 1: + + when not (s < smax - L/2) then + reinit(s, smax - L/2); + if (not initial() or v>0) then + reinit(v, 0); + end if; + end when; + + when not (s > smin + L/2) then + reinit(s, smin + L/2); + if (not initial() or v<0) then + reinit(v, 0); + end if; + end when; + +Version 2: + stopped := if s <= smin + L/2 then -1 else if s >= smax - L/2 then +1 else 0; + when (initial()) then + assert(s > smin + L/2 or s >= smin + L/2 and v >= 0, + "Error in initialization of hard stop. (s - L/2) must be >= smin\n"+ + "(s=" + String(s) + ", L=" + String(L) + ", smin=" + String(smin) + ")"); + assert(s < smax - L/2 or s <= smax - L/2 and v <= 0, + "Error in initialization of hard stop. (s + L/2) must be <= smax\n"+ + "(s=" + String(s) + ", L=" + String(L) + ", smax=" + String(smax) + ")"); + end when; + when stopped <> 0 then + reinit(s, if stopped < 0 then smin + L/2 else smax - L/2); + if (not initial() or stopped*v>0) then + reinit(v, 0); + end if; + end when; +*/ + annotation ( + Documentation(info=" +

This element describes the Stribeck friction characteristics of a sliding mass, +i. e. the frictional force acting between the sliding mass and the support. Included is a +hard stop for the position.

+

+The surface is fixed and there is friction between sliding mass and surface. +The frictional force f is given for positive velocity v by: +

+
+f = F_Coulomb + F_prop * v + F_Stribeck * exp (-fexp * v)
+
+ +

+ +

+ +

+The distance between the left and the right connector is given by parameter L. +The position of the center of gravity, coordinate s, is in the middle between +the two flanges.

+

+There are hard stops at smax and smin, i. e. if +flange_a.s >= smin and flange_b.s <= xmax the sliding mass can move freely.

+

When the absolute velocity becomes zero, the sliding mass becomes stuck, i.e., the absolute position remains constant. In this phase the +friction force is calculated from a force balance due to the requirement that the +absolute acceleration shall be zero. The elements begin to slide when the friction +force exceeds a threshold value, called the maximum static friction force, computed via:

+
+   maximum_static_friction =  F_Coulomb + F_Stribeck
+
+

+ This requires the states Stop.s and Stop.v . If these states are eliminated during the index reduction +the model will not work. To avoid this any inertias should be connected via springs +to the Stop element, other sliding masses, dampers or hydraulic chambers must be avoided.

+

For more details of the used friction model see the following reference:

+ +
+
Beater P. (1999):
+
+Entwurf hydraulischer Maschinen. Springer Verlag Berlin Heidelberg New York.
+
+ +

The friction model is implemented in a \"clean\" way by state events and leads to +continuous/discrete systems of equations which have to be solved by appropriate +numerical methods. The method is described in:

+ +
+
Otter M., Elmqvist H., and Mattsson S.E. (1999):
+
Hybrid Modeling in Modelica based on the Synchronous Data Flow Principle. + CACSD'99, Aug. 22.-26, Hawaii.
+
+ +

More precise friction models take into account the elasticity of the material when +the two elements are \"stuck\", as well as other effects, like hysteresis. This has +the advantage that the friction element can be completely described by a differential +equation without events. The drawback is that the system becomes stiff (about 10-20 times +slower simulation) and that more material constants have to be supplied which requires more +sophisticated identification. For more details, see the following references, especially +(Armstrong and Canudas de Witt 1996):

+
+
+Armstrong B. (1991):
+
Control of Machines with Friction. Kluwer Academic Press, Boston MA.
+
+
Armstrong B., and Canudas de Wit C. (1996):
+
Friction Modeling and Compensation. The Control Handbook, edited by W.S.Levine, CRC Press, pp. 1369-1382.
+
+
Canudas de Wit C., Olsson H., Astroem K.J., and Lischinsky P. (1995):
+
A new model for control of systems with friction. IEEE Transactions on Automatic Control, Vol. 40, No. 3, pp. 419-425.
+
+
+ +

Optional heatPort

+

+The dissipated energy is transported in form of heat to the optional heatPort connector +that can be enabled via parameter \"useHeatPort\". Independently whether the heatPort is +or is not enabled, the dissipated power is defined with variable \"lossPower\". +If contact occurs at the hard stops, the lossPower is not correctly modelled +at this time instant, because the hard stop would introduce a Dirac impulse +in the lossPower due to the discontinuously changing kinetic energy of the mass +(lossPower is the derivative of the kinetic energy at the time instant of the impact). +

+ +", revisions=" +

Release Notes:

+
    +
  • First Version from December 7, 1999 by P. Beater (based on Rotational.BearingFriction)
  • +
  • July 14, 2001 by P. Beater, assert on initialization added, diagram modified
  • +
  • October 11, 2001, by Hans Olsson, Dassault Systèmes AB, modified assert to handle start at stops, +modified event logic such if you have friction parameters equal to zero you do not get events +between the stops.
  • +
  • June 10, 2002 by P. Beater, StateSelect.always for variables s and v (instead of fixed=true).
  • +
+"), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Polygon( + points={{80,-100},{50,-90},{50,-110},{80,-100}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-30,-100},{50,-100}}, color={0,0,0}), + Rectangle( + extent={{-30,30},{35,-35}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={255,255,255}), + Line(points={{-90,0},{-30,0}}, color={0,127,0}), + Rectangle( + extent={{-70,-45},{74,-60}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-63,-15},{-55,-45}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{60,-16},{69,-45}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line(points={{35,0},{90,0}}, color={0,127,0}), + Text( + extent={{-150,80},{150,40}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{-50,-90},{-30,-70}}, color={0,0,0}), + Line(points={{-30,-70},{30,-70}}, color={0,0,0}), + Line(points={{-30,-90},{-10,-70}}, color={0,0,0}), + Line(points={{-10,-90},{10,-70}}, color={0,0,0}), + Line(points={{10,-90},{30,-70}}, color={0,0,0}), + Text( + extent={{-150,-110},{150,-140}}, + lineColor={0,0,0}, + textString="m=%m"), + Line(visible=useHeatPort, + points={{-100,-100},{-100,-40},{3,-40}}, + color={191,0,0}, + pattern=LinePattern.Dot, + smooth=Smooth.None)}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Polygon( + points={{50,-75},{20,-65},{20,-85},{50,-75}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-60,-75},{20,-75}}, color={0,0,0}), + Rectangle( + extent={{-30,26},{35,-9}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={255,255,255}), + Line(points={{-90,0},{-30,0}}, color={0,127,0}), + Line(points={{35,0},{90,0}}, color={0,127,0}), + Rectangle( + extent={{-68,-14},{76,-29}}, + lineColor={0,0,0}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-119,43},{-111,17}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-111,43},{-111,50}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}), + Line( + points={{-151,49},{-113,49}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}), + Text( + extent={{-149,51},{-126,60}}, + textString="s min", + lineColor={0,0,255}), + Polygon( + points={{-121,52},{-111,49},{-121,46},{-121,52}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{124,42},{132,17}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{124,39},{124,87}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}), + Line( + points={{-19,78},{121,78}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}), + Text( + extent={{-17,83},{6,92}}, + textString="s max", + lineColor={0,0,255}), + Polygon( + points={{114,81},{124,78},{114,75},{114,81}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{5,26},{5,63}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}), + Line( + points={{-77,58},{-1,58}}, + color={0,0,0}, + pattern=LinePattern.Solid, + thickness=0.25, + arrow={Arrow.None,Arrow.None}), + Text( + extent={{-75,60},{-38,71}}, + textString="Position s", + lineColor={0,0,255}), + Polygon( + points={{-5,61},{5,58},{-5,55},{-5,61}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line(points={{-100,-10},{-100,-60}}, color={0,0,0}), + Line(points={{100,-10},{100,-60}}, color={0,0,0}), + Polygon( + points={{90,-47},{100,-50},{90,-53},{90,-47}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-90,-47},{-90,-53},{-100,-50},{-90,-47}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line(points={{-90,-50},{92,-50}}, color={0,0,0}), + Text( + extent={{-11,-46},{26,-36}}, + textString="Length L", + lineColor={0,0,255})})); + end MassWithStopAndFriction; + + model RelativeStates "Definition of relative state variables" + extends Translational.Interfaces.PartialTwoFlanges; + parameter StateSelect stateSelect=StateSelect.prefer + "Priority to use the relative angle and relative speed as states"; + SI.Position s_rel(start=0, stateSelect=StateSelect.prefer) + "Relative position used as state variable"; + SI.Velocity v_rel(start=0, stateSelect=StateSelect.prefer) + "Relative velocity used as state variable"; + SI.Acceleration a_rel(start=0) "Relative angular acceleration"; + + equation + s_rel = flange_b.s - flange_a.s; + v_rel = der(s_rel); + a_rel = der(v_rel); + flange_a.f = 0; + flange_b.f = 0; + annotation ( + Documentation(info=" +

+Usually, the absolute position and the absolute velocity of +Modelica.Mechanics.Translational.Inertia models are used as state variables. +In some circumstances, relative quantities are better suited, e.g., +because it may be easier to supply initial values. +In such cases, model RelativeStates allows the definition of state variables +in the following way: +

+
    +
  • Connect an instance of this model between two flange connectors.
  • +
  • The relative position and the relative velocity + between the two connectors are used as state variables. +
+

+An example is given in the next figure +

+ +

+\"relativeStates2\" +

+ +

+Here, the relative position and the relative velocity between +the two masses are used as state variables. Additionally, the +simulator selects either the absolute position and absolute +velocity of model mass1 or of model mass2 as state variables. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Ellipse( + extent={{-40,40},{40,-40}}, + lineColor={0,255,255}, + fillColor={0,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-40,40},{40,-40}}, + textString="S", + lineColor={0,0,255}), + Line( + points={{-92,0},{-42,0}}, + color={0,0,0}, + pattern=LinePattern.Dot), + Line( + points={{40,0},{90,0}}, + color={0,0,0}, + pattern=LinePattern.Dot), + Text( + extent={{-150,90},{150,50}}, + textString="%name", + lineColor={0,0,255})}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Ellipse( + extent={{-40,40},{40,-40}}, + lineColor={0,255,255}, + fillColor={0,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-40,40},{40,-40}}, + textString="S", + lineColor={0,0,255}), + Line( + points={{40,0},{90,0}}, + color={0,0,0}, + pattern=LinePattern.Dash), + Line(points={{-100,-10},{-100,-80}}, color={160,160,164}), + Line(points={{100,-10},{100,-80}}, color={160,160,164}), + Polygon( + points={{80,-65},{80,-55},{100,-60},{80,-65}}, + lineColor={160,160,164}, + fillColor={160,160,164}, + fillPattern=FillPattern.Solid), + Line(points={{-100,-60},{80,-60}}, color={160,160,164}), + Text( + extent={{-30,-70},{30,-90}}, + textString="w_rel", + lineColor={0,0,255}), + Line(points={{-76,80},{-5,80}}, color={128,128,128}), + Polygon( + points={{14,80},{-6,85},{-6,75},{14,80}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Text( + extent={{18,87},{86,74}}, + lineColor={128,128,128}, + textString="moving direction"), + Line( + points={{-90,0},{-40,0}}, + color={0,0,0}, + pattern=LinePattern.Dash)})); + end RelativeStates; + annotation (Icon(coordinateSystem(preserveAspectRatio = true, extent = {{-100,-100},{100,100}}), graphics = { + Rectangle( + origin = {11.5,31.183}, + lineColor = {64,64,64}, + fillColor = {255,255,255}, + fillPattern = FillPattern.Sphere, + extent = {{-67,-66},{44,-6}})}), Documentation(info=" +

+This package contains basic components 1D mechanical translational drive trains. +

+")); + end Components; + + package Sensors "Sensors for 1-dim. translational mechanical quantities" + + extends Modelica.Icons.SensorsPackage; + + model PositionSensor "Ideal sensor to measure the absolute position" + extends Translational.Interfaces.PartialAbsoluteSensor; + Modelica.Blocks.Interfaces.RealOutput s(unit="m") + "Absolute position of flange as output signal" + annotation (Placement(transformation(extent={{100,-11}, + {120,9}}, rotation=0), iconTransformation(extent={{100, + -10},{120,10}}))); + + equation + s = flange.s; + annotation ( + Documentation(info=" +

+Measures the absolute position s of a flange in an ideal way and provides the result as +output signals (to be further processed with blocks of the +Modelica.Blocks library). +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Text( + extent={{80,-28},{114,-62}}, + lineColor={0,0,0}, + textString="s")})); + end PositionSensor; + + model SpeedSensor "Ideal sensor to measure the absolute velocity" + extends Translational.Interfaces.PartialAbsoluteSensor; + Modelica.Blocks.Interfaces.RealOutput v(unit="m/s") + "Absolute velocity of flange as output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}, + rotation=0))); + + equation + v = der(flange.s); + annotation ( + Documentation(info=" +

+Measures the absolute velocity v of a flange in an ideal way and provides the result as +output signals (to be further processed with blocks of the +Modelica.Blocks library). +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Text( + extent={{80,-28},{111,-61}}, + lineColor={0,0,0}, + textString="v")})); + end SpeedSensor; + + model AccSensor "Ideal sensor to measure the absolute acceleration" + extends Translational.Interfaces.PartialAbsoluteSensor; + SI.Velocity v "Absolute velocity of flange"; + Modelica.Blocks.Interfaces.RealOutput a(unit="m/s2") + "Absolute acceleration of flange as output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}, + rotation=0))); + + equation + v = der(flange.s); + a = der(v); + annotation ( + Documentation(info=" +

+Measures the absolute acceleration a +of a flange in an ideal way and provides the result as +output signals (to be further processed with blocks of the +Modelica.Blocks library). +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Text( + extent={{80,-28},{115,-60}}, + lineColor={0,0,0}, + textString="a")})); + end AccSensor; + + model RelPositionSensor "Ideal sensor to measure the relative position" + extends Translational.Interfaces.PartialRelativeSensor; + Modelica.Blocks.Interfaces.RealOutput s_rel(unit="m") + "Distance between two flanges (= flange_b.s - flange_a.s) as output signal" + annotation (Placement(transformation(extent={{-10,-10}, + {10,10}}, rotation=270, + origin={0,-110}))); + + equation + s_rel = flange_b.s - flange_a.s; + 0 = flange_a.f; + annotation ( + Documentation(info=" +

+Measures the relative position s of a flange in an ideal way and provides the result as +output signals (to be further processed with blocks of the +Modelica.Blocks library). +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70.4,0},{100,0}}, color={0,0,127}), + Text( + extent={{8,-68},{42,-102}}, + lineColor={0,0,0}, + textString="s"), + Line(points={{0,-99},{0,-60}}, color={0,0,127})})); + end RelPositionSensor; + + model RelSpeedSensor "Ideal sensor to measure the relative speed" + extends Translational.Interfaces.PartialRelativeSensor; + SI.Position s_rel + "Distance between the two flanges (flange_b.s - flange_a.s)"; + Modelica.Blocks.Interfaces.RealOutput v_rel(unit="m/s") + "Relative velocity between two flanges (= der(flange_b.s) - der(flange_a.s)) as output signal" + annotation (Placement(transformation(extent={{-10,-10}, + {10,10}}, rotation=270, + origin={0,-110}))); + + equation + s_rel = flange_b.s - flange_a.s; + v_rel = der(s_rel); + 0 = flange_a.f; + annotation ( + Documentation(info=" +

+Measures the relative speed v of a flange in an ideal way and provides the result as +output signals (to be further processed with blocks of the +Modelica.Blocks library). +

+ +", revisions= + " +

Release Notes:

+
    +
  • First Version from August 26, 1999 by P. Beater
  • +
+"), + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70.4,0},{100,0}}, color={0,0,127}), + Text( + extent={{8,-68},{42,-102}}, + lineColor={0,0,0}, + textString="v"), + Line(points={{0,-100},{0,-61}}, color={0,0,127})})); + end RelSpeedSensor; + + model RelAccSensor "Ideal sensor to measure the relative acceleration" + extends Translational.Interfaces.PartialRelativeSensor; + SI.Position s_rel + "Distance between the two flanges (flange_b.s - flange_a.s)"; + SI.Velocity v_rel + "Relative velocity between the two flanges (der(flange_b.s) - der(flange_a.s))"; + Modelica.Blocks.Interfaces.RealOutput a_rel(unit="m/s2") + "Relative acceleration between two flanges (= der(v_rel)) as output signal" + annotation (Placement(transformation(extent={{-10,-10}, + {10,10}}, rotation=270, + origin={0,-110}))); + + equation + s_rel = flange_b.s - flange_a.s; + v_rel = der(s_rel); + a_rel = der(v_rel); + 0 = flange_a.f; + annotation ( + Documentation(info=" +

+Measures the relative acceleration a of a flange in an ideal way and provides the result as +output signals (to be further processed with blocks of the +Modelica.Blocks library). +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70.4,0},{100,0}}, color={0,0,127}), + Text( + extent={{7,-68},{41,-102}}, + lineColor={0,0,0}, + textString="a"), + Line(points={{0,-99},{0,-60}}, color={0,0,127})})); + end RelAccSensor; + + model ForceSensor "Ideal sensor to measure the force between two flanges" + extends Translational.Interfaces.PartialRelativeSensor; + Modelica.Blocks.Interfaces.RealOutput f(unit="N") + "Force in flange_a and flange_b (f = flange_a.f = -flange_b.f) as output signal" + annotation (Placement(transformation( + origin={-80,-110}, + extent={{10,-10},{-10,10}}, + rotation=90))); + equation + flange_a.s = flange_b.s; + flange_a.f = f; + annotation ( + Documentation(info=" +

+Measures the cut-force between two flanges in an ideal way +and provides the result as output signal (to be further processed +with blocks of the Modelica.Blocks library). +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-40,-70},{40,-120}}, + lineColor={0,0,0}, + textString="f"), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70,0},{90,0}}, color={0,0,0}), + Line(points={{-80,-100},{-80,0}}, color={0,0,127})})); + end ForceSensor; + + model PowerSensor + "Ideal sensor to measure the power between two flanges (= flange_a.f*der(flange_a.s))" + extends Translational.Interfaces.PartialRelativeSensor; + Modelica.Blocks.Interfaces.RealOutput power(unit="W") + "Power in flange flange_a as output signal" + annotation (Placement(transformation( + origin={-80,-110}, + extent={{10,-10},{-10,10}}, + rotation=90))); + equation + flange_a.s = flange_b.s; + power = flange_a.f*der(flange_a.s); + annotation ( + Documentation(info=" +

+Measures the power between two flanges in an ideal way +and provides the result as output signal power +(to be further processed with blocks of the Modelica.Blocks library). +

+"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-75,-79},{67,-119}}, + lineColor={0,0,0}, + textString="power"), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70,0},{90,0}}, color={0,0,0}), + Line(points={{-80,-100},{-80,0}}, color={0,0,127})})); + end PowerSensor; + + model MultiSensor + "Ideal sensor to measure the absolute velocity, force and power between two flanges" + extends Translational.Interfaces.PartialRelativeSensor; + Modelica.Blocks.Interfaces.RealOutput power(unit="W") + "Power in flange flange_a as output signal" + annotation (Placement(transformation( + origin={-60,-110}, + extent={{10,-10},{-10,10}}, + rotation=90))); + Modelica.Blocks.Interfaces.RealOutput f(unit="N") + "Force in flange_a and flange_b (f = flange_a.f = -flange_b.f) as output signal" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={0,-110}))); + Modelica.Blocks.Interfaces.RealOutput v(unit="m/s") + "Absolute velocity of flange as output signal as output signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={60,-110}))); + equation + flange_a.s = flange_b.s; + f = flange_a.f; + v = der(flange_a.s); + power = f*v; + + annotation ( + Documentation(info=" +

+Measures the absolute velocity of a flange_a, the cut-force and power between two flanges in an +ideal way and provides the results as output signals v, f and power, respectively.

+"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-146,-70},{-56,-100}}, + lineColor={0,0,0}, + textString="power"), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70,0},{90,0}}, color={0,0,0}), + Line(points={{-60,-100},{-60,-60}}, + color={0,0,127}), + Text( + extent={{-28,-71},{52,-101}}, + lineColor={0,0,0}, + textString="f"), + Line(points={{0,-100},{0,-60}}, color={0,0,127}), + Line(points={{60,-100},{60,-60}}, color={0,0,127}), + Text( + extent={{60,-70},{114,-101}}, + lineColor={0,0,0}, + textString="v")})); + end MultiSensor; + annotation ( + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 100}}), graphics={ + Line(points={{-56,-61},{-56,-81}}, color={0,0,0}), + Line(points={{-36,-61},{-36,-81}}, color={0,0,0}), + Line(points={{-16,-61},{-16,-81}}, color={0,0,0}), + Line(points={{4,-61},{4,-81}}, color={0,0,0}), + Line(points={{24,-61},{24,-81}}, color={0,0,0}), + Line(points={{44,-61},{44,-81}}, color={0,0,0})}), + Documentation(info=" +

+This package contains ideal sensor components that provide +the connector variables as signals for further processing with the +Modelica.Blocks library. +

+")); + end Sensors; + + package Sources "Sources to drive 1D translational mechanical components" + extends Modelica.Icons.SourcesPackage; + + model Position + "Forced movement of a flange according to a reference position" + extends + Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2 + ( s(stateSelect=if exact then StateSelect.default else StateSelect.prefer)); + parameter Boolean exact=false + "true/false exact treatment/filtering the input signal"; + parameter SI.Frequency f_crit=50 + "if exact=false, critical frequency of filter to filter input signal" annotation(Dialog(enable=not exact)); + SI.Velocity v(start=0, stateSelect=if exact then StateSelect.default else StateSelect.prefer) + "If exact=false, absolute velocity of flange_b else dummy"; + SI.Acceleration a(start=0) + "If exact=false, absolute acceleration of flange_b else dummy"; + Modelica.Blocks.Interfaces.RealInput s_ref(unit="m") + "Reference position of flange as input signal" annotation (Placement( + transformation(extent={{-140,-20},{-100,20}}, rotation=0))); + protected + parameter Modelica.SIunits.AngularFrequency w_crit=2*Modelica.Constants.pi*f_crit + "Critical frequency"; + constant Real af=1.3617 "s coefficient of Bessel filter"; + constant Real bf=0.6180 "s*s coefficient of Bessel filter"; + + initial equation + if not exact then + s = s_ref; + end if; + equation + if exact then + s = s_ref; + v = 0; + a = 0; + else + // Filter: a = s_ref*S^2/(1 + (af/w_crit)*S + (bf/w_crit^2)*S^2) + v = der(s); + a = der(v); + a = ((s_ref - s)*w_crit - af*v)*(w_crit/bf); + end if; + annotation ( + Documentation(info=" +

+The input signal s_ref defines the reference +position in [m]. Flange flange_b is forced +to move relative to the support connector according to this reference motion. According to parameter +exact (default = false), this is done in the following way: +

    +
  1. exact=true
    + The reference position is treated exactly. This is only possible, if + the input signal is defined by an analytical function which can be + differentiated at least twice. If this prerequisite is fulfilled, + the Modelica translator will differentiate the input signal twice + in order to compute the reference acceleration of the flange.
  2. +
  3. exact=false
    + The reference position is filtered and the second derivative + of the filtered curve is used to compute the reference acceleration + of the flange. This second derivative is not computed by + numerical differentiation but by an appropriate realization of the + filter. For filtering, a second order Bessel filter is used. + The critical frequency (also called cut-off frequency) of the + filter is defined via parameter f_crit in [Hz]. This value + should be selected in such a way that it is higher as the essential + low frequencies in the signal.
  4. +
+

+The input signal can be provided from one of the signal generator +blocks of the block library Modelica.Blocks.Sources. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-56,-36},{-178,-66}}, + lineColor={0,0,0}, + textString="s_ref"), + Rectangle( + extent={{-100,20},{100,-20}}, + lineColor={0,127,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{150,60},{-150,100}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{0,52},{0,32}}, color={0,0,0}), + Line(points={{-29,32},{30,32}}, color={0,0,0}), + Line(points={{-30,-32},{30,-32}}, color={0,0,0}), + Line(points={{0,-32},{0,-100}}, color={0,0,0}), + Line(points={{30,-42},{20,-52}}, color={0,0,0}), + Line(points={{30,-32},{10,-52}}, color={0,0,0}), + Line(points={{20,-32},{0,-52}}, color={0,0,0}), + Line(points={{10,-32},{-10,-52}}, color={0,0,0}), + Line(points={{0,-32},{-20,-52}}, color={0,0,0}), + Line(points={{-10,-32},{-30,-52}}, color={0,0,0}), + Line(points={{-20,-32},{-30,-42}}, color={0,0,0}), + Text( + extent={{144,-30},{30,-60}}, + lineColor={0,0,0}, + textString="exact="), + Text( + extent={{134,-68},{22,-96}}, + lineColor={0,0,0}, + textString="%exact")})); + end Position; + + model Speed "Forced movement of a flange according to a reference speed" + extends + Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2 + ( s(start=0, fixed=true, stateSelect=StateSelect.prefer)); + parameter Boolean exact=false + "true/false exact treatment/filtering the input signal"; + parameter SI.Frequency f_crit=50 + "if exact=false, critical frequency of filter to filter input signal" annotation(Dialog(enable=not exact)); + SI.Velocity v(stateSelect=if exact then StateSelect.default else StateSelect.prefer) + "Absolute velocity of flange_b"; + SI.Acceleration a + "If exact=false, absolute acceleration of flange_b else dummy"; + Modelica.Blocks.Interfaces.RealInput v_ref(unit="m/s") + "Reference speed of flange as input signal" annotation (Placement( + transformation(extent={{-140,-20},{-100,20}}, rotation=0))); + + protected + parameter Modelica.SIunits.AngularFrequency w_crit=2*Modelica.Constants.pi*f_crit + "Critical frequency"; + initial equation + if not exact then + v = v_ref; + end if; + equation + v = der(s); + if exact then + v = v_ref; + a = 0; + else + // Filter: a = v_ref/(1 + (1/w_crit)*s) + a = der(v); + a = (v_ref - v)*w_crit; + end if; + annotation ( + Documentation(info=" +

+The input signal v_ref defines the reference +speed in [m/s]. Flange flange_b is forced +to move relative to the support connector according to this reference motion. According to parameter +exact (default = false), this is done in the following way: +

    +
  1. exact=true
    + The reference speed is treated exactly. This is only possible, if + the input signal is defined by an analytical function which can be + differentiated at least once. If this prerequisite is fulfilled, + the Modelica translator will differentiate the input signal once + in order to compute the reference acceleration of the flange.
  2. +
  3. exact=false
    + The reference speed is filtered and the first derivative + of the filtered curve is used to compute the reference acceleration + of the flange. This first derivative is not computed by + numerical differentiation but by an appropriate realization of the + filter. For filtering, a first order filter is used. + The critical frequency (also called cut-off frequency) of the + filter is defined via parameter f_crit in [Hz]. This value + should be selected in such a way that it is higher as the essential + low frequencies in the signal.
  4. +
+

+The input signal can be provided from one of the signal generator +blocks of the block library Modelica.Blocks.Sources. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-54,-36},{-174,-68}}, + lineColor={0,0,0}, + textString="v_ref"), + Line(points={{-30,-32},{30,-32}}, color={0,0,0}), + Line(points={{0,-32},{0,-100}}, color={0,0,0}), + Line(points={{30,-42},{20,-52}}, color={0,0,0}), + Line(points={{30,-32},{10,-52}}, color={0,0,0}), + Line(points={{20,-32},{0,-52}}, color={0,0,0}), + Line(points={{10,-32},{-10,-52}}, color={0,0,0}), + Line(points={{0,-32},{-20,-52}}, color={0,0,0}), + Line(points={{-10,-32},{-30,-52}}, color={0,0,0}), + Line(points={{-20,-32},{-30,-42}}, color={0,0,0}), + Rectangle( + extent={{-100,20},{100,-20}}, + lineColor={0,127,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line(points={{-29,32},{30,32}}, color={0,0,0}), + Line(points={{0,52},{0,32}}, color={0,0,0}), + Text( + extent={{150,60},{-150,100}}, + textString="%name", + lineColor={0,0,255}), + Text( + extent={{146,-38},{32,-64}}, + lineColor={0,0,0}, + textString="exact="), + Text( + extent={{140,-76},{22,-102}}, + lineColor={0,0,0}, + textString="%exact")})); + end Speed; + + model Accelerate + "Forced movement of a flange according to an acceleration signal" + extends + Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2 + (s(start=0, fixed=true, stateSelect=StateSelect.prefer)); + SI.Velocity v(start=0, fixed=true, stateSelect=StateSelect.prefer) + "Absolute velocity of flange_b"; + SI.Acceleration a "Absolute acceleration of flange_b"; + + Modelica.Blocks.Interfaces.RealInput a_ref(unit="m/s2") + "Absolute acceleration of flange as input signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}, + rotation=0))); + + equation + v = der(s); + a = der(v); + a = a_ref; + annotation ( + Documentation(info=" +

+The input signal a in [m/s2] moves the 1D translational flange +connector flange_b with a predefined acceleration, i.e., the flange +is forced to move relative to the support connector with this acceleration. The velocity and the +position of the flange are also predefined and are determined by +integration of the acceleration. +

+

+The acceleration \"a(t)\" can be provided from one of the signal generator +blocks of the block library Modelica.Blocks.Source. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-56,-40},{-166,-68}}, + lineColor={0,0,0}, + textString="a_ref"), + Line(points={{-30,-32},{30,-32}}, color={0,0,0}), + Line(points={{0,-32},{0,-100}}, color={0,0,0}), + Line(points={{30,-42},{20,-52}}, color={0,0,0}), + Line(points={{30,-32},{10,-52}}, color={0,0,0}), + Line(points={{20,-32},{0,-52}}, color={0,0,0}), + Line(points={{10,-32},{-10,-52}}, color={0,0,0}), + Line(points={{0,-32},{-20,-52}}, color={0,0,0}), + Line(points={{-10,-32},{-30,-52}}, color={0,0,0}), + Line(points={{-20,-32},{-30,-42}}, color={0,0,0}), + Rectangle( + extent={{-100,20},{100,-20}}, + lineColor={0,127,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line(points={{-29,32},{30,32}}, color={0,0,0}), + Line(points={{0,52},{0,32}}, color={0,0,0}), + Text( + extent={{150,60},{-150,100}}, + textString="%name", + lineColor={0,0,255})})); + end Accelerate; + + model Move + "Forced movement of a flange according to a position, velocity and acceleration signal" + extends + Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2; + Modelica.Blocks.Interfaces.RealInput u[3] + "Position, velocity and acceleration of flange as input signals" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}, + rotation=0))); + protected + function position + extends Modelica.Icons.Function; + input Real q_qd_qdd[3] + "Required values for position, speed, acceleration"; + input Real dummy + "Just to have one input signal that should be differentiated to avoid possible problems in the Modelica tool (is not used)"; + output Real q; + algorithm + q :=q_qd_qdd[1]; + annotation (derivative(noDerivative=q_qd_qdd) = position_der, + InlineAfterIndexReduction=true); + end position; + + function position_der + extends Modelica.Icons.Function; + input Real q_qd_qdd[3] + "Required values for position, speed, acceleration"; + input Real dummy + "Just to have one input signal that should be differentiated to avoid possible problems in the Modelica tool (is not used)"; + input Real dummy_der; + output Real qd; + algorithm + qd :=q_qd_qdd[2]; + annotation (derivative(noDerivative=q_qd_qdd, order=2) = position_der2, + InlineAfterIndexReduction=true); + end position_der; + + function position_der2 + extends Modelica.Icons.Function; + input Real q_qd_qdd[3] + "Required values for position, speed, acceleration"; + input Real dummy + "Just to have one input signal that should be differentiated to avoid possible problems in the Modelica tool (is not used)"; + input Real dummy_der; + input Real dummy_der2; + output Real qdd; + algorithm + qdd :=q_qd_qdd[3]; + end position_der2; + equation + s = position(u,time); + annotation ( + Documentation(info=" +

+Flange flange_b is forced to move relative to the support connector with a predefined motion +according to the input signals: +

+
+    u[1]: position of flange
+    u[2]: velocity of flange
+    u[3]: acceleration of flange
+
+

+The user has to guarantee that the input signals are consistent to each other, +i.e., that u[2] is the derivative of u[1] and that +u[3] is the derivative of u. There are, however, +also applications where by purpose these conditions do not hold. For example, +if only the position dependent terms of a mechanical system shall be +calculated, one may provide position = position(t) and set the velocity +and the acceleration to zero. +

+

+The input signals can be provided from one of the signal generator +blocks of the block library Modelica.Blocks.Sources. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-192,-38},{-32,-70}}, + lineColor={0,0,0}, + textString="s,v,a"), + Line(points={{-30,-32},{30,-32}}, color={0,0,0}), + Line(points={{0,-32},{0,-100}}, color={0,0,0}), + Line(points={{30,-42},{20,-52}}, color={0,0,0}), + Line(points={{30,-32},{10,-52}}, color={0,0,0}), + Line(points={{20,-32},{0,-52}}, color={0,0,0}), + Line(points={{10,-32},{-10,-52}}, color={0,0,0}), + Line(points={{0,-32},{-20,-52}}, color={0,0,0}), + Line(points={{-10,-32},{-30,-52}}, color={0,0,0}), + Line(points={{-20,-32},{-30,-42}}, color={0,0,0}), + Rectangle( + extent={{-100,20},{100,-20}}, + lineColor={0,127,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line(points={{0,52},{0,32}}, color={0,0,0}), + Line(points={{-29,32},{30,32}}, color={0,0,0}), + Text( + extent={{150,60},{-150,100}}, + textString="%name", + lineColor={0,0,255})})); + end Move; + + model Force + "External force acting on a drive train element as input signal" + extends + Modelica.Mechanics.Translational.Interfaces.PartialElementaryOneFlangeAndSupport2; + Modelica.Blocks.Interfaces.RealInput f(unit="N") "Driving force as input signal" + annotation (Placement(transformation( + extent={{-140,-20},{-100,20}}, rotation=0))); + + equation + flange.f = -f; + annotation ( + Documentation(info=" +

+The input signal \"f\" in [N] characterizes an external +force which acts (with positive sign) at a flange, +i.e., the component connected to the flange is driven by force f. +

+

+Input signal f can be provided from one of the signal generator +blocks of Modelica.Blocks.Source. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Polygon( + points={{-100,10},{20,10},{20,41},{90,0},{20,-41},{20,-10},{-100, + -10},{-100,10}}, + lineColor={0,127,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,-32},{-80,-62}}, + lineColor={0,0,0}, + textString="f"), + Text( + extent={{-150,90},{150,50}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{-30,-60},{30,-60}}, color={0,0,0}), + Line(points={{0,-60},{0,-101}}, color={0,0,0}), + Line(points={{-30,-80},{-10,-60}}, color={0,0,0}), + Line(points={{-10,-80},{10,-60}}, color={0,0,0}), + Line(points={{10,-80},{30,-60}}, color={0,0,0}), + Polygon( + points={{-61,-50},{-30,-40},{-30,-60},{-61,-50}}, + lineColor={0,0,0}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-31,-50},{50,-50}}, color={0,0,0}), + Line(points={{-50,-80},{-30,-60}}, color={0,0,0})})); + end Force; + + model Force2 "Input signal acting as torque on two flanges" + extends Translational.Interfaces.PartialTwoFlanges; + Modelica.Blocks.Interfaces.RealInput f(unit="N") "Driving force as input signal" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, rotation=270, + origin={0,60}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=270, + origin={0,40}))); + + equation + flange_a.f = f; + flange_b.f = -f; + annotation ( + Documentation(info=" +

+The input signal \"f\" in [N] characterizes an external +force which acts (with positive sign) at both flanges, +i.e., the components connected to these flanges are driven by force f. +

+

+Input signal s can be provided from one of the signal generator +blocks of Modelica.Blocks.Source. +

+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-150,-40},{150,-80}}, + textString="%name", + lineColor={0,0,255}), + Polygon( + points={{90,0},{60,-30},{60,-10},{10,-10},{10,10},{60,10},{60,31}, + {90,0}}, + lineColor={0,127,0}, + smooth=Smooth.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-90,0},{-60,30},{-60,10},{-10,10},{-10,-10},{-60,-10},{-60, + -30},{-90,0}}, + lineColor={0,127,0}, + smooth=Smooth.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid)})); + end Force2; + + model LinearSpeedDependentForce "Linear dependency of force versus speed" + extends Modelica.Mechanics.Translational.Interfaces.PartialForce; + parameter Modelica.SIunits.Force f_nominal + "Nominal force (if negative, force is acting as load)"; + parameter Boolean ForceDirection=true + "Same direction of force in both directions of movement"; + parameter Modelica.SIunits.Velocity v_nominal(min=Modelica.Constants.eps) + "Nominal speed"; + Modelica.SIunits.Velocity v + "Velocity of flange with respect to support (= der(s))"; + + equation + v = der(s); + if ForceDirection then + f = -f_nominal*abs(v/v_nominal); + else + f = -f_nominal*(v/v_nominal); + end if; + annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={Line(points={{-100,-100},{100,100}}, + color={0,0,255})}), Documentation(info=" +

+Model of force, linearly dependent on velocity of flange.
+Parameter ForceDirection chooses whether direction of force is the same in both directions of movement or not. +

+")); + end LinearSpeedDependentForce; + + model QuadraticSpeedDependentForce + "Quadratic dependency of force versus speed" + extends Modelica.Mechanics.Translational.Interfaces.PartialForce; + parameter Modelica.SIunits.Force f_nominal + "Nominal force (if negative, force is acting as load)"; + parameter Boolean ForceDirection=true + "Same direction of force in both directions of movement"; + parameter Modelica.SIunits.Velocity v_nominal(min=Modelica.Constants.eps) + "Nominal speed"; + Modelica.SIunits.Velocity v + "Velocity of flange with respect to support (= der(s))"; + equation + v = der(s); + if ForceDirection then + f = -f_nominal*(v/v_nominal)^2; + else + f = -f_nominal*smooth(1, if v >= 0 then (v/v_nominal)^2 else -(v/v_nominal)^2); + end if; + annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,-100},{-80,-98},{-60,-92},{-40,-82},{-20,-68},{0,-50},{20,-28},{40,-2},{60,28},{80,62},{100,100}}, + color={0,0,127}, + smooth=Smooth.Bezier)}),Documentation(info=" +

+Model of force, quadratic dependent on velocity of flange.
+Parameter ForceDirection chooses whether direction of force is the same in both directions of movement or not. +

+")); + end QuadraticSpeedDependentForce; + + model ConstantForce "Constant force, not dependent on speed" + extends Modelica.Mechanics.Translational.Interfaces.PartialForce; + parameter Modelica.SIunits.Force f_constant + "Nominal force (if negative, force is acting as load)"; + equation + f = -f_constant; + annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={Line(points={{-100,0},{98,0}}, + color={0,0,255}), Text( + extent={{-118,58},{126,34}}, + lineColor={0,0,0}, + textString="%f_constant")}), + Documentation(info=" +

+Model of constant force, not dependent on velocity of flange.
+Positive force acts accelerating. +

+")); + end ConstantForce; + + model ConstantSpeed "Constant speed, not dependent on force" + extends Modelica.Mechanics.Translational.Interfaces.PartialForce; + parameter Modelica.SIunits.Velocity v_fixed + "Fixed speed (if negative, force is acting as load)"; + Modelica.SIunits.Velocity v + "Velocity of flange with respect to support (= der(s))"; + equation + v = der(s); + v = v_fixed; + annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={Line(points={{0,-100},{0,100}}, + color={0,0,255}), Text( + extent={{-120,60},{124,36}}, + lineColor={0,0,0}, + textString="%v_fixed")}), + Documentation(info=" +

+Model of fixed velocity of flange, not dependent on force. +

+")); + end ConstantSpeed; + + model ForceStep "Constant force, not dependent on speed" + extends Modelica.Mechanics.Translational.Interfaces.PartialForce; + parameter Modelica.SIunits.Force stepForce(start=1) + "Height of force step (if negative, force is acting as load)"; + parameter Modelica.SIunits.Force offsetForce(start=0) "Offset of force"; + parameter Modelica.SIunits.Time startTime=0 + "Force = offset for time < startTime"; + equation + f = -offsetForce - (if time < startTime then 0 else stepForce); + annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={Line(points={{-80,-60},{0,-60},{0, + 60},{80,60}}, color={0,0,255}), Text( + extent={{0,-40},{100,-60}}, + lineColor={0,0,0}, + textString="time")}), Documentation(info=" +

+Model of a force step at time .
+Positive force acts accelerating. +

+")); + end ForceStep; + + annotation ( Documentation(info=" +

+This package contains ideal sources to drive 1D mechanical translational drive trains. +

+")); + end Sources; + + package Interfaces + "Interfaces for 1-dim. translational mechanical components" + extends Modelica.Icons.InterfacesPackage; + + connector Flange_a + "(left) 1D translational flange (flange axis directed INTO cut plane, e. g. from left to right)" + + SI.Position s "Absolute position of flange"; + flow SI.Force f "Cut force directed into flange"; + annotation(defaultComponentName = "flange_a", + Documentation(info=" +

+This is a flange for 1D translational mechanical systems. In the cut plane of +the flange a unit vector n, called flange axis, is defined which is directed +INTO the cut plane, i. e. from left to right. All vectors in the cut plane are +resolved with respect to +this unit vector. E.g. force f characterizes a vector which is directed in +the direction of n with value equal to f. When this flange is connected to +other 1D translational flanges, this means that the axes vectors of the connected +flanges are identical. +

+

+The following variables are transported through this connector: +

+
+  s: Absolute position of the flange in [m]. A positive translation
+     means that the flange is translated along the flange axis.
+  f: Cut-force in direction of the flange axis in [N].
+
+"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100}, + {100,100}}), graphics={Rectangle( + extent={{-40,-40},{40,40}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid), Text( + extent={{-160,110},{40,50}}, + lineColor={0,127,0}, + textString="%name")})); + end Flange_a; + + connector Flange_b + "(right) 1D translational flange (flange axis directed OUT OF cut plane)" + + SI.Position s "Absolute position of flange"; + flow SI.Force f "Cut force directed into flange"; + annotation(defaultComponentName = "flange_b", + Documentation(info=" +

+This is a flange for 1D translational mechanical systems. In the cut plane of +the flange a unit vector n, called flange axis, is defined which is directed +OUT OF the cut plane. All vectors in the cut plane are resolved with respect to +this unit vector. E.g. force f characterizes a vector which is directed in +the direction of n with value equal to f. When this flange is connected to +other 1D translational flanges, this means that the axes vectors of the connected +flanges are identical. +

+

+The following variables are transported through this connector: +

+  s: Absolute position of the flange in [m]. A positive translation
+     means that the flange is translated along the flange axis.
+  f: Cut-force in direction of the flange axis in [N].
+
+"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100,100}}), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Rectangle( + extent={{-40,-40},{40,40}}, + lineColor={0,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Text( + extent={{-40,110},{160,50}}, + lineColor={0,127,0}, + textString="%name")})); + end Flange_b; + + connector Support "Support/housing 1D translational flange" + + SI.Position s "Absolute position of flange"; + flow SI.Force f "Cut force directed into flange"; + annotation (Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={ + Rectangle( + extent={{-60,60},{60,-60}}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-160,110},{40,50}}, + lineColor={0,127,0}, + textString="%name"), + Rectangle( + extent={{-40,-40},{40,40}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid)}), Icon(coordinateSystem( + preserveAspectRatio=true, extent={{-100,-100},{100,100}}), + graphics={Rectangle( + extent={{-150,150},{150,-150}}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), Rectangle( + extent={{-90,-90},{90,90}}, + lineColor={0,127,0}, + fillColor={0,127,0}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

This is a connector for 1-dim. rotational mechanical systems and models the support or housing of a shaft. The following variables are defined in this connector:

+ + + + + + + + +

s

Absolute position of the support/housing in [m]

f

Reaction force in the support/housing in [N]

+


The support connector is usually defined as conditional connector. It is most convenient to utilize it

+ +")); + end Support; + + model InternalSupport + "Adapter model to utilize conditional support connector" + input SI.Force f + "External support force (must be computed via force balance in model where InternalSupport is used; = flange.f)"; + SI.Position s "External support position (= flange.s)"; + Flange_a flange + "Internal support flange (must be connected to the conditional support connector for useSupport=true and to conditional fixed model for useSupport=false)" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + equation + flange.f = f; + flange.s = s; + annotation ( Icon(coordinateSystem( + preserveAspectRatio=true, extent={{-100,-100},{100,100}}), + graphics={Text( + extent={{-200,80},{200,40}}, + lineColor={0,0,255}, + textString="%name"), Rectangle( + extent={{-20,20},{20,-20}}, + lineColor={0,127,0}, + fillColor={175,175,175}, + fillPattern=FillPattern.Solid)}), + Documentation(info=" +

+This is an adapter model to utilize a conditional support connector +in an elementary component, i.e., where the component equations are +defined textually: +

+ +
    +
  • If useSupport = true, the flange has to be connected to the conditional + support connector.
  • +
  • If useSupport = false, the flange has to be connected to the conditional + fixed model.
  • +
+ +

+Variable f is defined as input and must be provided when using +this component as a modifier (computed via a force balance in +the model where InternalSupport is used). Usually, model InternalSupport is +utilized via the partial models: +

+ +
+ +PartialElementaryOneFlangeAndSupport,
+ +PartialElementaryTwoFlangesAndSupport,
+ +PartialElementaryRotationalToTranslational. +
+ +

+Note, the support position can always be accessed as internalSupport.s, and +the support force can always be accessed as internalSupport.f. +

+")); + end InternalSupport; + + partial model PartialTwoFlanges + "Component with two translational 1D flanges" + + Flange_a flange_a + "(left) driving flange (flange axis directed in to cut plane, e. g. from left to right)" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0))); + Flange_b flange_b + "(right) driven flange (flange axis directed out of cut plane)" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, + rotation=0))); + annotation ( + Documentation(info=" +

+This is a 1D translational component with two flanges. +It is used e.g., to built up parts of a drive train consisting +of several base components. +

+")); + end PartialTwoFlanges; + + partial model PartialOneFlangeAndSupport + "Partial model for a component with one translational 1-dim. shaft flange and a support used for graphical modeling, i.e., the model is build up by drag-and-drop from elementary components" + parameter Boolean useSupport=false + "= true, if support flange enabled, otherwise implicitly grounded" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Flange_b flange "Flange of component" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0))); + Support support if useSupport "Support/housing of component" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + protected + Support internalSupport + "Internal support/housing of component (either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)" + annotation (Placement(transformation(extent={{-3,-83},{3,-77}}))); + Components.Fixed fixed if not useSupport + "Fixed support/housing, if not useSupport" + annotation (Placement(transformation(extent={{10,-94},{30,-74}}))); + equation + connect(fixed.flange, internalSupport) annotation (Line( + points={{20,-84},{20,-80},{0,-80}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(internalSupport, support) annotation (Line( + points={{0,-80},{0,-100}}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+This is a 1-dim. translational component with one flange and a support/housing. +It is used e.g., to build up parts of a drive train graphically consisting +of several components. +

+ +

+If useSupport=true, the support connector is conditionally enabled +and needs to be connected.
+If useSupport=false, the support connector is conditionally disabled +and instead the component is internally fixed to ground. +

+ +"), Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Text( + extent={{-38,-98},{-6,-96}}, + lineColor={95,95,95}, + textString="(if useSupport)"), Text( + extent={{21,-95},{61,-96}}, + lineColor={95,95,95}, + textString="(if not useSupport)")}), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={ + Line( + visible=not useSupport, + points={{-50,-120},{-30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-120},{-10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-10,-120},{10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{10,-120},{30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-100},{30,-100}}, + color={0,0,0})})); + end PartialOneFlangeAndSupport; + + partial model PartialTwoFlangesAndSupport + "Partial model for a component with two translational 1-dim. shaft flanges and a support used for graphical modeling, i.e., the model is build up by drag-and-drop from elementary components" + parameter Boolean useSupport=false + "= true, if support flange enabled, otherwise implicitly grounded" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Flange_a flange_a "Flange of left end" + annotation (Placement(transformation(extent={{-110,-10}, {-90,10}}, rotation=0))); + Flange_b flange_b "Flange of right end" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0))); + Support support if useSupport "Support/housing of component" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + protected + Support internalSupport + "Internal support/housing of component (either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)" + annotation (Placement(transformation(extent={{-3,-83},{3,-77}}))); + Components.Fixed fixed if not useSupport + "Fixed support/housing, if not useSupport" + annotation (Placement(transformation(extent={{10,-97},{30,-77}}))); + equation + connect(fixed.flange, internalSupport) annotation (Line( + points={{20,-87},{20,-80},{0,-80}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(internalSupport, support) annotation (Line( + points={{0,-80},{0,-100}}, + pattern=LinePattern.None, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+This is a 1-dim. translational component with two flanges and a support/housing. +It is used e.g., to build up parts of a drive train graphically consisting +of several components. +

+ +

+If useSupport=true, the support connector is conditionally enabled +and needs to be connected.
+If useSupport=false, the support connector is conditionally disabled +and instead the component is internally fixed to ground. +

+ +"), Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Text( + extent={{-38,-98},{-6,-96}}, + lineColor={95,95,95}, + textString="(if useSupport)"), Text( + extent={{24,-97},{64,-98}}, + lineColor={95,95,95}, + textString="(if not useSupport)")}), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={ + Line( + visible=not useSupport, + points={{-50,-120},{-30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-120},{-10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-10,-120},{10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{10,-120},{30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-100},{30,-100}}, + color={0,0,0})})); + end PartialTwoFlangesAndSupport; + + partial model PartialRigid + "Rigid connection of two translational 1D flanges" + SI.Position s + "Absolute position of center of component (s = flange_a.s + L/2 = flange_b.s - L/2)"; + parameter SI.Length L(start=0) + "Length of component, from left flange to right flange (= flange_b.s - flange_a.s)"; + Flange_a flange_a "Left flange of translational component" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0))); + Flange_b flange_b "Right flange of translational component" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, + rotation=0))); + equation + flange_a.s = s - L/2; + flange_b.s = s + L/2; + annotation ( + Documentation(info=" +

+This is a 1-dim. translational component with two rigidly connected flanges. +The fixed distance between the left and the right flange is defined by parameter \"L\". +The forces at the right and left flange can be different. +It is used e.g., to built up sliding masses. +

+")); + end PartialRigid; + + partial model PartialCompliant + "Compliant connection of two translational 1D flanges" + + Flange_a flange_a + "Left flange of compliant 1-dim. translational component" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0))); + Flange_b flange_b + "Right flange of compliant 1-dim. translational component" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, + rotation=0))); + SI.Position s_rel(start=0) + "Relative distance (= flange_b.s - flange_a.s)"; + SI.Force f + "Force between flanges (positive in direction of flange axis R)"; + + equation + s_rel = flange_b.s - flange_a.s; + flange_b.f = f; + flange_a.f = -f; + annotation ( + Documentation(info=" +

+This is a 1D translational component with a compliant connection of two +translational 1D flanges where inertial effects between the two +flanges are not included. The absolute value of the force at the left and the right +flange is the same. It is used to built up springs, dampers etc. +

+ +"), Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Polygon( + points={{50,-90},{20,-80},{20,-100},{50,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), Line(points={{-60,-90},{20,-90}}, + color={0,0,0})})); + end PartialCompliant; + + partial model PartialCompliantWithRelativeStates + "Base model for the compliant connection of two translational 1-dim. shaft flanges where the relative position and relative velocities are used as states" + + parameter StateSelect stateSelect=StateSelect.prefer + "Priority to use phi_rel and w_rel as states" + annotation(HideResult=true, Dialog(tab="Advanced")); + parameter SI.Distance s_nominal=1e-4 + "Nominal value of s_rel (used for scaling)" annotation(Dialog(tab="Advanced")); + + SI.Position s_rel(start=0, stateSelect=stateSelect, nominal=s_nominal) + "Relative distance (= flange_b.s - flange_a.s)"; + SI.Velocity v_rel(start=0, stateSelect=stateSelect) + "Relative velocity (= der(s_rel))"; + + SI.Force f "Forces between flanges (= flange_b.f)"; + Translational.Interfaces.Flange_a flange_a + "Left flange of compliant 1-dim. translational component" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0))); + Translational.Interfaces.Flange_b flange_b + "Right flange of compliant 1-dim. translational component" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, + rotation=0))); + + equation + s_rel = flange_b.s - flange_a.s; + v_rel = der(s_rel); + flange_b.f = f; + flange_a.f = -f; + annotation ( + Documentation(info=" +

+This is a 1-dim. translational component with a compliant connection of two +translational 1-dim. flanges where inertial effects between the two +flanges are neglected. The basic assumption is that the cut-forces +of the two flanges sum-up to zero, i.e., they have the same absolute value +but opposite sign: flange_a.f + flange_b.f = 0. This base class +is used to built up force elements such as springs, dampers, friction. +

+ +

+The difference to base class \"PartialCompliant\" is that the relative +distance and the relative velocity are defined as preferred states. +The reason is that for a large class of drive trains, +the absolute position is quickly increasing during operation. +Numerically, it is better to use relative distances between drive train components +because they remain in a limited size. For this reason, StateSelect.prefer +is set for the relative distance of this component. +

+ +

+In order to improve the numerics, a nominal value for the relative distance +should be set, since drive train distances are in a small order and +then step size control of the integrator is practically switched off for +such a variable. A default nominal value of s_nominal = 1e-4 is defined. +This nominal value might also be computed from other values, such +as \"s_nominal = f_nominal / c\" for a spring, if f_nominal +and c have more meaningful values for the user. +

+ +")); + end PartialCompliantWithRelativeStates; + + partial model PartialElementaryOneFlangeAndSupport + "Obsolete partial model. Use PartialElementaryOneFlangeAndSupport2." + extends Modelica.Icons.ObsoleteModel; + + parameter Boolean useSupport=false + "= true, if support flange enabled, otherwise implicitly grounded" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Modelica.SIunits.Length s + "Distance between flange and support (= flange.s - support.s)"; + Flange_b flange "Flange of component" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, + rotation=0))); + + protected + InternalSupport internalSupport(f=-flange.f) + "Internal support/housing of component as a model with connector flange (flange is either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)" + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Components.Fixed fixed if not useSupport + "Fixed support/housing, if not useSupport" + annotation (Placement(transformation(extent={{10,-97},{30,-77}}))); + public + Support support if useSupport "Support/housing of component" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + equation + s = flange.s - internalSupport.s; + connect(internalSupport.flange, support) annotation (Line( + points={{0,-80},{0,-100}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(fixed.flange, internalSupport.flange) annotation (Line( + points={{20,-87},{20,-80},{0,-80}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation ( + Documentation(info=" +

+This is a 1-dim. translational component with one flange and a support/housing. +It is used to build up elementary components of a drive train with +equations in the text layer. +

+ +

+If useSupport=true, the support connector is conditionally enabled +and needs to be connected.
+If useSupport=false, the support connector is conditionally disabled +and instead the component is internally fixed to ground. +

+ +"), Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={Text( + extent={{-38,-98},{-6,-96}}, + lineColor={95,95,95}, + textString="(if useSupport)"), Text( + extent={{24,-97},{64,-98}}, + lineColor={95,95,95}, + textString="(if not useSupport)")}), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={ + Line( + visible=not useSupport, + points={{-50,-120},{-30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-120},{-10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-10,-120},{10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{10,-120},{30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-100},{30,-100}}, + color={0,0,0})})); + end PartialElementaryOneFlangeAndSupport; + + partial model PartialElementaryOneFlangeAndSupport2 + "Partial model for a component with one translational 1-dim. shaft flange and a support used for textual modeling, i.e., for elementary models" + parameter Boolean useSupport=false + "= true, if support flange enabled, otherwise implicitly grounded" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Modelica.SIunits.Length s + "Distance between flange and support (= flange.s - support.s)"; + Flange_b flange "Flange of component" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, + rotation=0))); + Support support(s=s_support, f=-flange.f) if useSupport + "Support/housing of component" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + protected + Modelica.SIunits.Length s_support "Absolute position of support flange"; + equation + s = flange.s - s_support; + if not useSupport then + s_support = 0; + end if; + annotation ( + Documentation(info=" +

+This is a 1-dim. translational component with one flange and a support/housing. +It is used to build up elementary components of a drive train with +equations in the text layer. +

+ +

+If useSupport=true, the support connector is conditionally enabled +and needs to be connected.
+If useSupport=false, the support connector is conditionally disabled +and instead the component is internally fixed to ground. +

+ +"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={ + Line( + visible=not useSupport, + points={{-50,-120},{-30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-120},{-10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-10,-120},{10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{10,-120},{30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-100},{30,-100}}, + color={0,0,0})})); + end PartialElementaryOneFlangeAndSupport2; + + partial model PartialElementaryTwoFlangesAndSupport + "Obsolete partial model. Use PartialElementaryTwoFlangesAndSupport2." + extends Modelica.Icons.ObsoleteModel; + parameter Boolean useSupport=false + "= true, if support flange enabled, otherwise implicitly grounded" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Flange_a flange_a "Flange of left shaft" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, rotation=0))); + Flange_b flange_b "Flange of right shaft" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0))); + Modelica.SIunits.Length s_a "Distance between left flange and support"; + Modelica.SIunits.Length s_b "Distance between right flange and support"; + protected + InternalSupport internalSupport(f=-flange_a.f - flange_b.f) + "Internal support/housing of component as a model with connector flange (flange is either connected to support, if useSupport=true, or connected to fixed, if useSupport=false)" + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Components.Fixed fixed if not useSupport + "Fixed support/housing, if not useSupport" + annotation (Placement(transformation(extent={{10,-97},{30,-77}}))); + public + Support support if useSupport "Support/housing of component" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + equation + s_a = flange_a.s - internalSupport.s; + s_b = flange_b.s - internalSupport.s; + connect(internalSupport.flange, support) annotation (Line( + points={{0,-80},{0,-100}}, + color={0,127,0}, + smooth=Smooth.None)); + connect(fixed.flange, internalSupport.flange) annotation (Line( + points={{20,-87},{20,-80},{0,-80}}, + color={0,127,0}, + smooth=Smooth.None)); + annotation (Documentation(info=" +

+This is a 1-dim. translational component with two flanges and an additional support. +It is used e.g., to build up elementary ideal gear components. The component +contains the force balance, i.e., the sum of the forces of the connectors +is zero (therefore, components that are based on PartialGear cannot have +a mass). The support connector needs to be connected +to avoid the unphysical behavior that the +support force is required to be zero (= the default value, if the +connector is not connected). +

+ +"), Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100}, + {100,100}}), graphics={Text( + extent={{-38,-98},{-6,-96}}, + lineColor={95,95,95}, + textString="(if useSupport)"), Text( + extent={{24,-97},{64,-98}}, + lineColor={95,95,95}, + textString="(if not useSupport)")}), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={ + Line( + visible=not useSupport, + points={{-50,-120},{-30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-120},{-10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-10,-120},{10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{10,-120},{30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-100},{30,-100}}, + color={0,0,0})})); + end PartialElementaryTwoFlangesAndSupport; + + partial model PartialElementaryTwoFlangesAndSupport2 + "Partial model for a component with one translational 1-dim. shaft flange and a support used for textual modeling, i.e., for elementary models" + parameter Boolean useSupport=false + "= true, if support flange enabled, otherwise implicitly grounded" + annotation(Evaluate=true, HideResult=true, choices(checkBox=true)); + Flange_a flange_a "Flange of left shaft" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, rotation=0))); + Flange_b flange_b "Flange of right shaft" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, rotation=0))); + Support support(s=s_support, f = -flange_a.f - flange_b.f) if useSupport + "Support/housing of component" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + Modelica.SIunits.Length s_a "Distance between left flange and support"; + Modelica.SIunits.Length s_b "Distance between right flange and support"; + protected + Modelica.SIunits.Length s_support "Absolute position of support flange"; + equation + s_a = flange_a.s - s_support; + s_b = flange_b.s - s_support; + if not useSupport then + s_support = 0; + end if; + + annotation (Documentation(info=" +

+This is a 1-dim. translational component with two flanges and an additional support. +It is used e.g., to build up elementary ideal gear components. The component +contains the force balance, i.e., the sum of the forces of the connectors +is zero (therefore, components that are based on PartialGear cannot have +a mass). The support connector needs to be connected +to avoid the unphysical behavior that the +support force is required to be zero (= the default value, if the +connector is not connected). +

+ +"), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={ + Line( + visible=not useSupport, + points={{-50,-120},{-30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-120},{-10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-10,-120},{10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{10,-120},{30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-100},{30,-100}}, + color={0,0,0})})); + end PartialElementaryTwoFlangesAndSupport2; + + partial model PartialElementaryRotationalToTranslational + "Partial model to transform rotational into translational motion" + extends + Modelica.Mechanics.Rotational.Interfaces.PartialElementaryRotationalToTranslational; + annotation (Documentation(info=" +

This is a 1-dim. rotational component with

+
    +
  • one rotational flange,
  • +
  • one rotational support/housing,
  • +
  • one translational flange, and
  • +
  • one translational support/housing
  • +
+

This model is used to build up elementary components of a drive train transforming rotational into translational motion with equations in the text layer.

+

If useSupportR=true, the rotational support connector is conditionally enabled and needs to be connected.

+

If useSupportR=false, the rotational support connector is conditionally disabled and instead the rotational part is internally fixed to ground.

+

If useSupportT=true, the translational support connector is conditionally enabled and needs to be connected.

+

If useSupportT=false, the translational support connector is conditionally disabled and instead the translational part is internally fixed to ground.

+")); + end PartialElementaryRotationalToTranslational; + + partial model PartialForce + "Partial model of a force acting at the flange (accelerates the flange)" + extends PartialElementaryOneFlangeAndSupport2; + Modelica.SIunits.Force f "Accelerating force acting at flange (= flange.f)"; + equation + f = flange.f; + annotation ( + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, + 100}}), graphics={ + Rectangle( + extent={{-96,96},{96,-96}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line(points={{0,-60},{0,-100}}, color={0,0,0}), + Text( + extent={{-150,140},{150,100}}, + lineColor={0,0,255}, + textString="%name"), + Line(points={{-78,80},{51,80}}, color={0,0,0}), + Polygon( + points={{81,80},{51,90},{51,70},{81,80}}, + lineColor={0,0,0}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-52,-60},{77,-60}}, color={0,0,0}), + Polygon( + points={{-82,-60},{-51,-50},{-51,-70},{-82,-60}}, + lineColor={0,0,0}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line( + visible=not useSupport, + points={{-50,-120},{-30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-120},{-10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-10,-120},{10,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{10,-120},{30,-100}}, + color={0,0,0}), + Line( + visible=not useSupport, + points={{-30,-100},{30,-100}}, + color={0,0,0})}), + Documentation(info=" +

+Partial model of force that accelerates the flange. +

+ +

+If useSupport=true, the support connector is conditionally enabled +and needs to be connected.
+If useSupport=false, the support connector is conditionally disabled +and instead the component is internally fixed to ground. +

+")); + end PartialForce; + + partial model PartialAbsoluteSensor + "Device to measure a single absolute flange variable" + + extends Modelica.Icons.TranslationalSensor; + + Interfaces.Flange_a flange + "Flange to be measured (flange axis directed in to cut plane, e. g. from left to right)" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0))); + + equation + 0 = flange.f; + annotation ( + Documentation(info=" +

+This is the superclass of a 1D translational component with one flange and one +output signal in order to measure an absolute kinematic quantity in the flange +and to provide the measured signal as output signal for further processing +with the Modelica.Blocks blocks. +

+"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-100,-90},{-20,-90}}, color={0,0,0}), + Polygon( + points={{10,-90},{-20,-80},{-20,-100},{10,-90}}, + lineColor={128,128,128}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70,0},{100,0}}, color={0,0,127}), + Text( + extent={{-150,80},{150,40}}, + textString="%name", + lineColor={0,0,255})})); + end PartialAbsoluteSensor; + + partial model PartialRelativeSensor + "Device to measure a single relative variable between two flanges" + + extends Modelica.Icons.TranslationalSensor; + + Interfaces.Flange_a flange_a + "(left) driving flange (flange axis directed in to cut plane, e. g. from left to right)" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}, + rotation=0))); + Interfaces.Flange_b flange_b + "(right) driven flange (flange axis directed out of cut plane)" + annotation (Placement(transformation(extent={{90,-10},{110,10}}, + rotation=0))); + + equation + 0 = flange_a.f + flange_b.f; + annotation ( + Documentation(info=" +

+This is a superclass for 1D translational components with two rigidly connected +flanges and one output signal in order to measure relative kinematic quantities +between the two flanges or the cut-force in the flange and +to provide the measured signal as output signal for further processing +with the Modelica.Blocks blocks. +

+"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Line(points={{-51,34},{29,34}}, color={0,0,0}), + Polygon( + points={{59,34},{29,44},{29,24},{59,34}}, + lineColor={0,0,0}, + fillColor={128,128,128}, + fillPattern=FillPattern.Solid), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70,0},{90,0}}, color={0,0,0}), + Text( + extent={{-150,100},{150,60}}, + textString="%name", + lineColor={0,0,255})})); + end PartialRelativeSensor; + + partial model PartialFriction "Base model of Coulomb friction elements" + + //extends Translational.Interfaces.PartialRigid; + parameter SI.Velocity v_small=1e-3 + "Relative velocity near to zero (see model info text)" + annotation(Dialog(tab="Advanced")); + // Equations to define the following variables have to be defined in subclasses + SI.Velocity v_relfric "Relative velocity between frictional surfaces"; + SI.Acceleration a_relfric + "Relative acceleration between frictional surfaces"; + //SI.Force f "Friction force (positive, if directed in opposite direction of v_rel)"; + SI.Force f0 "Friction force for v=0 and forward sliding"; + SI.Force f0_max "Maximum friction force for v=0 and locked"; + Boolean free "true, if frictional element is not active"; + // Equations to define the following variables are given in this class + Real sa(unit="1") + "Path parameter of friction characteristic f = f(a_relfric)"; + Boolean startForward(start=false, fixed=true) + "true, if v_rel=0 and start of forward sliding"; + Boolean startBackward(start=false, fixed=true) + "true, if v_rel=0 and start of backward sliding"; + Boolean locked(start=false) "true, if v_rel=0 and not sliding"; + constant Integer Unknown=3 "Value of mode is not known"; + constant Integer Free=2 "Element is not active"; + constant Integer Forward=1 "v_rel > 0 (forward sliding)"; + constant Integer Stuck=0 + "v_rel = 0 (forward sliding, locked or backward sliding)"; + constant Integer Backward=-1 "v_rel < 0 (backward sliding)"; + Integer mode( + final min=Backward, + final max=Unknown, + start=Unknown, fixed=true); + protected + constant SI.Acceleration unitAcceleration = 1 annotation(HideResult=true); + constant SI.Force unitForce = 1 annotation(HideResult=true); + equation + /* Friction characteristic + (locked is introduced to help the Modelica translator determining + the different structural configurations, + if for each configuration special code shall be generated) +*/ + startForward = pre(mode) == Stuck and (sa > f0_max/unitForce or pre(startForward) + and sa > f0/unitForce) or pre(mode) == Backward and v_relfric > v_small or + initial() and (v_relfric > 0); + startBackward = pre(mode) == Stuck and (sa < -f0_max/unitForce or pre( + startBackward) and sa < -f0/unitForce) or pre(mode) == Forward and v_relfric < + -v_small or initial() and (v_relfric < 0); + locked = not free and not (pre(mode) == Forward or startForward or pre( + mode) == Backward or startBackward); + + a_relfric/unitAcceleration = if locked then 0 else + if free then sa else + if startForward then sa - f0_max/unitForce else + if startBackward then sa + f0_max/unitForce else + if pre(mode) == Forward then sa - f0_max/unitForce else + sa + f0_max/unitForce; + + /* Friction torque has to be defined in a subclass. Example for a clutch: + f = if locked then sa else + if free then 0 else + cgeo*fn*(if startForward then Math.tempInterpol1( v_relfric, mue_pos, 2) else + if startBackward then -Math.tempInterpol1(-v_relfric, mue_pos, 2) else + if pre(mode) == Forward then Math.tempInterpol1( v_relfric, mue_pos, 2) else + -Math.tempInterpol1(-v_relfric, mue_pos, 2)); +*/ + // finite state machine to determine configuration + mode = if free then Free else + (if (pre(mode) == Forward or pre(mode) == Free or startForward) and v_relfric > 0 then + Forward else + if (pre(mode) == Backward or pre(mode) == Free or startBackward) and v_relfric < 0 then + Backward else + Stuck); + annotation (Documentation(info=" +

+Basic model for Coulomb friction that models the stuck phase in a reliable way. +

+")); + end PartialFriction; + + annotation (Documentation(info=" +

+This package contains connectors and partial models for 1-dim. +translational mechanical components. The components of this package can +only be used as basic building elements for models. +

+ +")); + end Interfaces; + + annotation ( + Icon(coordinateSystem(preserveAspectRatio = true, extent = {{-100,-100},{100,100}}), graphics = { + Line( + origin = {14,53}, + points = {{-84,-73},{66,-73}}), + Rectangle( + origin = {14,53}, + lineColor = {64,64,64}, + fillColor = {192,192,192}, + fillPattern = FillPattern.Sphere, + extent = {{-81,-65},{-8,-22}}),Line(visible = true, + origin = {14,53}, + points = {{-8,-43},{-1,-43},{6,-64},{17,-23},{29,-65},{40,-23},{50,-44},{61,-44}}), + Line( + origin = {14,53}, + points = {{-59,-73},{-84,-93}}), + Line( + origin = {14,53}, + points = {{-11,-73},{-36,-93}}), + Line( + origin = {14,53}, + points = {{-34,-73},{-59,-93}}), + Line( + origin = {14,53}, + points = {{14,-73},{-11,-93}}), + Line( + origin = {14,53}, + points = {{39,-73},{14,-93}}), + Line( + origin = {14,53}, + points = {{63,-73},{38,-93}})}), + Documentation(info=" +

+This package contains components to model 1-dimensional translational +mechanical systems. +

+

+The filled and non-filled green squares at the left and +right side of a component represent mechanical flanges. +Drawing a line between such squares means that the corresponding +flanges are rigidly attached to each other. The components of this +library can be usually connected together in an arbitrary way. E.g. it is +possible to connect two springs or two sliding masses with inertia directly +together. +

The only connection restriction is that the Coulomb friction +elements (e.g., MassWithStopAndFriction) should be only connected +together provided a compliant element, such as a spring, is in between. +The reason is that otherwise the frictional force is not uniquely +defined if the elements are stuck at the same time instant (i.e., there +does not exist a unique solution) and some simulation systems may not be +able to handle this situation, since this leads to a singularity during +simulation. It can only be resolved in a \"clean way\" by combining the +two connected friction elements into +one component and resolving the ambiguity of the frictional force in the +stuck mode. +

+

Another restriction arises if the hard stops in model MassWithStopAndFriction are used, i. e. +the movement of the mass is limited by a stop at smax or smin. + This requires the states Stop.s and Stop.v . If these states are eliminated during the index reduction +the model will not work. To avoid this any inertias should be connected via springs +to the Stop element, other sliding masses, dampers or hydraulic chambers must be avoided.

+

+In the icon of every component an arrow is displayed in grey +color. This arrow characterizes the coordinate system in which the vectors +of the component are resolved. It is directed into the positive +translational direction (in the mathematical sense). +In the flanges of a component, a coordinate system is rigidly attached +to the flange. It is called flange frame and is directed in parallel +to the component coordinate system. As a result, e.g., the positive +cut-force of a \"left\" flange (flange_a) is directed into the flange, whereas +the positive cut-force of a \"right\" flange (flange_b) is directed out of the +flange. A flange is described by a Modelica connector containing +the following variables: +

+
+   Modelica.SIunits.Position s    \"Absolute position of flange\";
+   flow Modelica.SIunits.Force f  \"Cut-force in the flange\";
+
+ +

+This library is designed in a fully object oriented way in order that +components can be connected together in every meaningful combination +(e.g., direct connection of two springs or two shafts with inertia). +As a consequence, most models lead to a system of +differential-algebraic equations of index 3 (= constraint +equations have to be differentiated twice in order to arrive at +a state space representation) and the Modelica translator or +the simulator has to cope with this system representation. +According to our present knowledge, this requires that the +Modelica translator is able to symbolically differentiate equations +(otherwise it is e.g., not possible to provide consistent initial +conditions; even if consistent initial conditions are present, most +numerical DAE integrators can cope at most with index 2 DAEs). +

+ +

+In version 3.2 of the Modelica Standard Library, all dissipative components +of the Translational library got an optional heatPort connector to which the +dissipated energy is transported in form of heat. This connector is enabled +via parameter \"useHeatPort\". If the heatPort connector is enabled, +it must be connected, and if it is not enabled, it must not be connected. +Independently, whether the heatPort is enabled or not, +the dissipated power is available from the new variable \"lossPower\" (which is +positive if heat is flowing out of the heatPort). For an example, see +Examples.HeatLosses. +

+ +
+
Library Officer +
Martin Otter
+ Deutsches Zentrum für Luft und Raumfahrt e.V. (DLR)
+ Institut für Robotik und Mechatronik (DLR-RM)
+ Abteilung Systemdynamik und Regelungstechnik
+ Postfach 1116
+ D-82230 Wessling
+ Germany
+ email: Martin.Otter@dlr.de

+
+ +

+Contributors to this library: +

+ +
    +
  • Main author until 2006:
    + Peter Beater
    + Universität Paderborn, Abteilung Soest
    + Fachbereich Maschinenbau/Automatisierungstechnik
    + Lübecker Ring 2
    + D 59494 Soest
    + Germany
    + email: info@beater.de

    +
  • + +
  • Anton Haumer
    + Technical Consulting & Electrical Engineering
    + A-3423 St.Andrae-Woerdern, Austria
    + email: a.haumer@haumer.at

  • + +
  • Martin Otter (DLR-RM)
  • +
+ +

+Copyright © 1998-2013, Modelica Association, Anton Haumer and Universität Paderborn, FB 12. +

+

+This Modelica package is free software and the use is completely at your own risk; it can be redistributed and/or modified under the terms of the Modelica License 2. For license conditions (including the disclaimer of warranty) see Modelica.UsersGuide.ModelicaLicense2 or visit https://www.modelica.org/licenses/ModelicaLicense2. +

+", revisions=" +
    +
  • Version 1.2.0 2010-07-22 + by Anton Haumer and Martin Otter
    + heatPort introduced for all dissipative elements, and + text in icons improved. +
  • + +
  • Version 1.1.0 2007-11-16 + by Anton Haumer
    + Redesign for Modelica 3.0-compliance
    + Added new components according to Mechanics.Rotational library +
  • + +
  • Version 1.01 (July 18, 2001) + by Peter Beater
    + Assert statement added to \"Stop\", small bug fixes in examples. +
  • + +
  • Version 1.0 (January 5, 2000) + by Peter Beater
    + Realized a first version based on Modelica library Mechanics.Rotational + by Martin Otter and an existing Dymola library onedof.lib by Peter Beater.
  • +
+")); +end Translational; diff --git a/samples/Modelica/modelica.mo b/samples/Modelica/modelica.mo new file mode 100644 index 00000000..5462de87 --- /dev/null +++ b/samples/Modelica/modelica.mo @@ -0,0 +1,285 @@ +within Modelica.Electrical.Analog; +package Sensors "Potential, voltage, current, and power sensors" + + extends Modelica.Icons.SensorsPackage; + + model PotentialSensor "Sensor to measure the potential" + extends Modelica.Icons.RotationalSensor; + + Interfaces.PositivePin p "pin to be measured" annotation (Placement( + transformation(extent={{-110,-10},{-90,10}}, rotation=0))); + Modelica.Blocks.Interfaces.RealOutput phi + "Absolute voltage potential as output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}, + rotation=0))); + equation + p.i = 0; + phi = p.v; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Text( + extent={{-29,-11},{30,-70}}, + lineColor={0,0,0}, + textString="V"), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{100,0},{70,0}}, color={0,0,255}), + Text( + extent={{-150,80},{150,120}}, + textString="%name", + lineColor={0,0,255})}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={Line(points={{-70,0},{-96,0}}, color={0,0,0}), + Line(points={{100,0},{70,0}}, color={0,0,255})}), + Documentation(revisions=" +
    +
  • 1998 + by Christoph Clauss
    initially implemented
    +
  • +
+", info=" +

The potential sensor converts the voltage of a node (with respect to the ground node) into a real valued signal. It does not influence the current sum at the node which voltage is measured, therefore, the electrical behavior is not influenced by the sensor.

+")); + end PotentialSensor; + + model VoltageSensor "Sensor to measure the voltage between two pins" + extends Modelica.Icons.RotationalSensor; + + Interfaces.PositivePin p "positive pin" annotation (Placement( + transformation(extent={{-110,-10},{-90,10}}, rotation=0))); + Interfaces.NegativePin n "negative pin" annotation (Placement( + transformation(extent={{90,-10},{110,10}}, rotation=0))); + Modelica.Blocks.Interfaces.RealOutput v + "Voltage between pin p and n (= p.v - n.v) as output signal" + annotation (Placement(transformation( + origin={0,-100}, + extent={{10,-10},{-10,10}}, + rotation=90))); + + equation + p.i = 0; + n.i = 0; + v = p.v - n.v; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Text( + extent={{-29,-11},{30,-70}}, + lineColor={0,0,0}, + textString="V"), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Line(points={{70,0},{90,0}}, color={0,0,0}), + Line(points={{0,-90},{0,-70}}, color={0,0,255}), + Text( + extent={{-150,80},{150,120}}, + textString="%name", + lineColor={0,0,255})}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Line(points={{-70,0},{-96,0}}, color={0,0,0}), + Line(points={{70,0},{96,0}}, color={0,0,0}), + Line(points={{0,-90},{0,-70}}, color={0,0,255})}), + Documentation(revisions=" +
    +
  • 1998 + by Christoph Clauss
    initially implemented
    +
  • +
+", info=" +

The voltage sensor converts the voltage between the two connectors into a real valued signal. It does not influence the current sum at the nodes in between the voltage is measured, therefore, the electrical behavior is not influenced by the sensor.

+")); + end VoltageSensor; + + model CurrentSensor "Sensor to measure the current in a branch" + extends Modelica.Icons.RotationalSensor; + + Interfaces.PositivePin p "positive pin" annotation (Placement( + transformation(extent={{-110,-10},{-90,10}}, rotation=0))); + Interfaces.NegativePin n "negative pin" annotation (Placement( + transformation(extent={{90,-10},{110,10}}, rotation=0))); + Modelica.Blocks.Interfaces.RealOutput i + "current in the branch from p to n as output signal" + annotation (Placement(transformation( + origin={0,-100}, + extent={{10,-10},{-10,10}}, + rotation=90))); + + equation + p.v = n.v; + p.i = i; + n.i = -i; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Text( + extent={{-29,-11},{30,-70}}, + lineColor={0,0,0}, + textString="A"), + Line(points={{-70,0},{-90,0}}, color={0,0,0}), + Text( + extent={{-150,80},{150,120}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{70,0},{90,0}}, color={0,0,0}), + Line(points={{0,-90},{0,-70}}, color={0,0,255})}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1,1}), graphics={ + Text( + extent={{-153,79},{147,119}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{-70,0},{-96,0}}, color={0,0,0}), + Line(points={{70,0},{96,0}}, color={0,0,0}), + Line(points={{0,-90},{0,-70}}, color={0,0,255})}), + Documentation(revisions=" +
    +
  • 1998 + by Christoph Clauss
    initially implemented
    +
  • +
+", info=" +

The current sensor converts the current flowing between the two connectors into a real valued signal. The two connectors are in the sensor connected like a short cut. The sensor has to be placed within an electrical connection in series. It does not influence the current sum at the connected nodes. Therefore, the electrical behavior is not influenced by the sensor.

+")); + end CurrentSensor; + +model PowerSensor "Sensor to measure the power" + + Modelica.Electrical.Analog.Interfaces.PositivePin pc + "Positive pin, current path" + annotation (Placement(transformation(extent={{-90,-10},{-110,10}}, rotation= + 0))); + Modelica.Electrical.Analog.Interfaces.NegativePin nc + "Negative pin, current path" + annotation (Placement(transformation(extent={{110,-10},{90,10}}, rotation=0))); + Modelica.Electrical.Analog.Interfaces.PositivePin pv + "Positive pin, voltage path" + annotation (Placement(transformation(extent={{-10,110},{10,90}}, rotation=0))); + Modelica.Electrical.Analog.Interfaces.NegativePin nv + "Negative pin, voltage path" + annotation (Placement(transformation(extent={{10,-110},{-10,-90}}, rotation= + 0))); + Modelica.Blocks.Interfaces.RealOutput power + annotation (Placement(transformation( + origin={-80,-110}, + extent={{-10,10},{10,-10}}, + rotation=270))); + Modelica.Electrical.Analog.Sensors.VoltageSensor voltageSensor + annotation (Placement(transformation( + origin={0,-30}, + extent={{10,-10},{-10,10}}, + rotation=90))); + Modelica.Electrical.Analog.Sensors.CurrentSensor currentSensor + annotation (Placement(transformation(extent={{-50,-10},{-30,10}}, rotation= + 0))); + Modelica.Blocks.Math.Product product + annotation (Placement(transformation( + origin={-30,-50}, + extent={{-10,-10},{10,10}}, + rotation=270))); + +equation + connect(pv, voltageSensor.p) annotation (Line(points={{0,100},{0,-20},{ + 6.12323e-016,-20}}, color={0,0,255})); + connect(voltageSensor.n, nv) annotation (Line(points={{-6.12323e-016,-40},{ + -6.12323e-016,-63},{0,-63},{0,-100}}, color={0,0,255})); + connect(pc, currentSensor.p) + annotation (Line(points={{-100,0},{-50,0}}, color={0,0,255})); + connect(currentSensor.n, nc) + annotation (Line(points={{-30,0},{100,0}}, color={0,0,255})); + connect(currentSensor.i, product.u2) annotation (Line(points={{-40,-10},{-40, + -30},{-36,-30},{-36,-38}}, color={0,0,127})); + connect(voltageSensor.v, product.u1) annotation (Line(points={{10,-30},{-24, + -30},{-24,-38}}, color={0,0,127})); + connect(product.y, power) annotation (Line(points={{-30,-61},{-30,-80},{-80, + -80},{-80,-110}}, color={0,0,127})); + annotation (Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Ellipse( + extent={{-70,70},{70,-70}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line(points={{0,100},{0,70}}, color={0,0,255}), + Line(points={{0,-70},{0,-100}}, color={0,0,255}), + Line(points={{-80,-100},{-80,0}}, color={0,0,255}), + Line(points={{-100,0},{100,0}}, color={0,0,255}), + Text( + extent={{150,120},{-150,160}}, + textString="%name", + lineColor={0,0,255}), + Line(points={{0,70},{0,40}}, color={0,0,0}), + Line(points={{22.9,32.8},{40.2,57.3}}, color={0,0,0}), + Line(points={{-22.9,32.8},{-40.2,57.3}}, color={0,0,0}), + Line(points={{37.6,13.7},{65.8,23.9}}, color={0,0,0}), + Line(points={{-37.6,13.7},{-65.8,23.9}}, color={0,0,0}), + Line(points={{0,0},{9.02,28.6}}, color={0,0,0}), + Polygon( + points={{-0.48,31.6},{18,26},{18,57.2},{-0.48,31.6}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-5,5},{5,-5}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-29,-11},{30,-70}}, + lineColor={0,0,0}, + textString="P")}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics), + Documentation(info=" +

This power sensor measures instantaneous electrical power of a singlephase system and has a separated voltage and current path. The pins of the voltage path are pv and nv, the pins of the current path are pc and nc. The internal resistance of the current path is zero, the internal resistance of the voltage path is infinite.

+", revisions=" +
    +
  • January 12, 2006 by Anton Haumer implemented
  • +
+")); +end PowerSensor; + annotation ( + Documentation(info=" +

This package contains potential, voltage, and current sensors. The sensors can be used to convert voltages or currents into real signal values o be connected to components of the Blocks package. The sensors are designed in such a way that they do not influence the electrical behavior.

+", + revisions=" +
+
+Main Authors: +
+Christoph Clauß + <Christoph.Clauss@eas.iis.fraunhofer.de>
+ André Schneider + <Andre.Schneider@eas.iis.fraunhofer.de>
+ Fraunhofer Institute for Integrated Circuits
+ Design Automation Department
+ Zeunerstraße 38
+ D-01069 Dresden
+

+

+Copyright: +
+Copyright © 1998-2010, Modelica Association and Fraunhofer-Gesellschaft.
+The Modelica package is free software; it can be redistributed and/or modified +under the terms of the Modelica license, see the license conditions +and the accompanying disclaimer in the documentation of package +Modelica in file \"Modelica/package.mo\".
+

+

+")); +end Sensors; diff --git a/samples/Modelica/package.mo b/samples/Modelica/package.mo new file mode 100644 index 00000000..09cdd4db --- /dev/null +++ b/samples/Modelica/package.mo @@ -0,0 +1,4 @@ +within ; +package ModelicaByExample +annotation (uses(Modelica(version="3.2.1"))); +end ModelicaByExample; diff --git a/samples/Modelica/package2.mo b/samples/Modelica/package2.mo new file mode 100644 index 00000000..98c31810 --- /dev/null +++ b/samples/Modelica/package2.mo @@ -0,0 +1,3 @@ +within ModelicaByExample; +package PackageExamples "Examples of using packages" +end PackageExamples; diff --git a/samples/Modelica/package3.mo b/samples/Modelica/package3.mo new file mode 100644 index 00000000..53cb202e --- /dev/null +++ b/samples/Modelica/package3.mo @@ -0,0 +1,3 @@ +within ModelicaByExample.Subsystems; +package GearSubsystemModel "Build a subsystem model representing a gear with backlash" +end GearSubsystemModel; diff --git a/samples/Modelica/package4.mo b/samples/Modelica/package4.mo new file mode 100644 index 00000000..c0630497 --- /dev/null +++ b/samples/Modelica/package4.mo @@ -0,0 +1,3 @@ +within ModelicaByExample.Subsystems; +package Pendula "Example of using arrays of subsystems to build complete systems" +end Pendula; diff --git a/samples/Modula-2/HuffChan.mod b/samples/Modula-2/HuffChan.mod new file mode 100644 index 00000000..14073609 --- /dev/null +++ b/samples/Modula-2/HuffChan.mod @@ -0,0 +1,329 @@ +IMPLEMENTATION MODULE HuffChan; + +(* + This module shows how to redefine standard IO file functions. It provides + functions for reading and writing packed files opened in Raw mode. +*) + +IMPORT IOChan, IOLink, ChanConsts, IOConsts, SYSTEM, Strings; +FROM Storage IMPORT ALLOCATE, DEALLOCATE; + +CONST + rbldFrq = 512; (* means: every 512 bytes rebuild table *) + +TYPE + charTap = POINTER TO ARRAY [0..MAX(INTEGER)-1] OF CHAR; + smbTp = POINTER TO smbT; + + smbT = RECORD (* Huffman's tree *) + ch : CHAR; + n : CARDINAL; (* frequncy of char ch *) + left,right,next : smbTp; + END; + + tblT = RECORD (* bit sequence for code *) + vl : CARDINAL; (* bit sequence *) + cnt : INTEGER; (* it length *) + END; + + lclDataT = RECORD (* channel's local data *) + tRoot : smbTp; + htbl : ARRAY [0..255] OF tblT; (* code -> bit sequence table *) + ftbl : ARRAY [0..255] OF CARDINAL; (* frequncey table *) + wBf,rb1,rb2 : CARDINAL; + wbc,rbc,smc : INTEGER; + chid : IOChan.ChanId; + END; + lclDataTp = POINTER TO lclDataT; + charp = POINTER TO CHAR; + +VAR + did : IOLink.DeviceId; + ldt : lclDataTp; + + +PROCEDURE Shf(a:CARDINAL; b : INTEGER) : CARDINAL; (* shl a,b (or shr) *) +BEGIN + RETURN SYSTEM.CAST(CARDINAL,SYSTEM.SHIFT(SYSTEM.CAST(BITSET,a),b)); +END Shf; + +PROCEDURE wrDword(a:CARDINAL); (* write 4 bytes to file *) +BEGIN + IOChan.RawWrite(ldt^.chid,SYSTEM.ADR(a),4); +END wrDword; + +PROCEDURE rdDword() : CARDINAL; (* read 4 bytes from file *) +VAR + a,z : CARDINAL; +BEGIN + a:=0; + IOChan.RawRead(ldt^.chid,SYSTEM.ADR(a),4,z); + RETURN a; +END rdDword; + +PROCEDURE wrSmb(ch : CHAR); (* write bit sequence for code ch *) +VAR + v,h : CARDINAL; + b,c : INTEGER; +BEGIN + WITH ldt^ DO + v:=htbl[ORD(ch)].vl; + c:=htbl[ORD(ch)].cnt; + IF c+wbc<=32 THEN + wBf:=Shf(wBf,c); + wBf:=wBf+v; + wbc:=wbc+c; + IF wbc=32 THEN + wrDword(wBf); + wBf:=0; wbc:=0; + END; + RETURN; + END; + b:=c+wbc-32; + h:=Shf(v,-b); + wBf:=Shf(wBf,32-wbc)+h; + wrDword(wBf); + wBf:=v-Shf(h,b); + wbc:=b; + END; +END wrSmb; + +PROCEDURE flush(); (* write data in buffer *) +BEGIN + WITH ldt^ DO + wBf:=Shf(wBf,32-wbc); + wrDword(wBf); + END; +END flush; + +PROCEDURE getSym() : CHAR; (* find code for first bit sequence in buffer *) +VAR + t,i : CARDINAL; + b : INTEGER; +BEGIN + WITH ldt^ DO + IF rbc<=32 THEN + rb2:=rdDword(); + t:=Shf(rb2,-rbc); + IF rbc=32 THEN t:=0; END; + rb1:=rb1+t; + rb2:=Shf(rb2,32-rbc); + IF rbc=0 THEN rb2:=0; END; + rbc:=rbc+32; + END; + FOR i:=0 TO 255 DO + t:=Shf(rb1,htbl[i].cnt-32); + IF t=htbl[i].vl THEN + rb1:=Shf(rb1,htbl[i].cnt); + b:=32-htbl[i].cnt; + t:=Shf(rb2,-b); + rb1:=rb1+t; + rb2:=Shf(rb2,32-b); + rbc:=rbc+b-32; + RETURN CHR(i); + END; + END; + END; +END getSym; + +PROCEDURE Insert(s : smbTp); (* insert new character in Huffman's tree *) +VAR + cr : smbTp; +BEGIN + WITH ldt^ DO + IF tRoot=NIL THEN + cr:=tRoot; + tRoot:=s; + s^.next:=cr; + RETURN; + ELSIF tRoot^.n<=s^.n THEN + cr:=tRoot; + tRoot:=s; + s^.next:=cr; + RETURN; + END; + cr:=tRoot; + WHILE (cr^.next<>NIL) & (cr^.next^.n>s^.n) DO + cr:=cr^.next; + END; + s^.next:=cr^.next; + cr^.next:=s; + END; +END Insert; + +PROCEDURE BuildTree(); (* build Huffman's tree *) +VAR + cr,ocr,ncr : smbTp; +BEGIN + WITH ldt^ DO + LOOP + ocr:=NIL; cr:=tRoot; + WHILE cr^.next^.next<>NIL DO + ocr:=cr; cr:=cr^.next; + END; + NEW(ncr); + ncr^.n:=cr^.n+cr^.next^.n; + ncr^.left:=cr; + ncr^.right:=cr^.next; + IF ocr<>NIL THEN + ocr^.next:=NIL; + Insert(ncr); + ELSE + tRoot:=NIL; + Insert(ncr); + EXIT; + END; + END; + END; +END BuildTree; + +PROCEDURE BuildTable(cr: smbTp; vl,n: CARDINAL); (* build table: code -> bit sequence *) +BEGIN + WITH ldt^ DO + IF cr^.left=NIL THEN + htbl[ORD(cr^.ch)].vl:=vl; + htbl[ORD(cr^.ch)].cnt:=n; + DISPOSE(cr); + RETURN; + END; + vl:=vl*2; + BuildTable(cr^.left,vl,n+1); + BuildTable(cr^.right,vl+1,n+1); + DISPOSE(cr); + END; +END BuildTable; + +PROCEDURE clcTab(); (* build code/bitseq. table from frequency table *) +VAR + i : CARDINAL; + s : smbTp; +BEGIN + WITH ldt^ DO + tRoot:=NIL; + FOR i:=0 TO 255 DO + NEW(s); + s^.ch:=CHR(i); + s^.n:=ftbl[i]; + s^.left:=NIL; s^.right:=NIL; s^.next:=NIL; + Insert(s); + END; + BuildTree(); + BuildTable(tRoot,0,0); + END; +END clcTab; + +PROCEDURE iniHuf(); +VAR + i : CARDINAL; +BEGIN + WITH ldt^ DO + FOR i:=0 TO 255 DO + ftbl[i]:=1; + END; + wBf:=0; wbc:=0; rb1:=0; rb2:=0; rbc:=0; + smc:=0; + clcTab(); + END; +END iniHuf; + + +PROCEDURE RawWrite(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS; + len: CARDINAL); +VAR + i : CARDINAL; + ch : CHAR; + cht : charTap; +BEGIN + IF len = 0 THEN RETURN; END; + ldt:=SYSTEM.CAST(lclDataTp,x^.cd); + cht:=SYSTEM.CAST(charTap,buf); + WITH ldt^ DO + FOR i:=0 TO len-1 DO + ch:=cht^[i]; + wrSmb(ch); + IF ch = 377C THEN wrSmb(ch); END; + ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1; + IF smc=rbldFrq THEN + clcTab(); + smc:=0; + END; + END; + END; + x^.result:=IOChan.ReadResult(ldt^.chid); +END RawWrite; + +PROCEDURE RawRead(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS; + blen: CARDINAL; VAR len: CARDINAL); +VAR + i : CARDINAL; + cht : charTap; + ch : CHAR; +BEGIN + ldt:=SYSTEM.CAST(lclDataTp,x^.cd); + cht:=SYSTEM.CAST(charTap,buf); + IF (blen=0) OR (x^.result<>IOConsts.allRight) THEN len:=0; RETURN; END; + WITH ldt^ DO + FOR i:=0 TO blen-1 DO + ch:=getSym(); + IF ch = 377C THEN + ch:=getSym(); + IF ch = 0C THEN + x^.result:=IOConsts.endOfInput; + len:=i; cht^[i]:=0C; + RETURN; + END; + END; + cht^[i]:=ch; + ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1; + IF smc=rbldFrq THEN + clcTab(); + smc:=0; + END; + END; + len:=blen; + END; +END RawRead; + +PROCEDURE CreateAlias(VAR cid: ChanId; io: ChanId; VAR res: OpenResults); +VAR + x : IOLink.DeviceTablePtr; +BEGIN + IOLink.MakeChan(did,cid); + IF cid = IOChan.InvalidChan() THEN + res:=ChanConsts.outOfChans + ELSE + NEW(ldt); + IF ldt=NIL THEN + IOLink.UnMakeChan(did,cid); + res:=ChanConsts.outOfChans; + RETURN; + END; + x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,""); + ldt^.chid:=io; + x^.cd:=ldt; + x^.doRawWrite:=RawWrite; + x^.doRawRead:=RawRead; + res:=ChanConsts.opened; + iniHuf(); + x^.result:=IOConsts.allRight; + END; +END CreateAlias; + +PROCEDURE DeleteAlias(VAR cid: ChanId); +VAR + x : IOLink.DeviceTablePtr; +BEGIN + x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,""); + ldt:=x^.cd; + IF ldt^.rbc=0 THEN + wrSmb(377C); + wrSmb(0C); + flush(); + END; + DISPOSE(ldt); + IOLink.UnMakeChan(did,cid); +END DeleteAlias; + +BEGIN + IOLink.AllocateDeviceId(did); +END HuffChan. diff --git a/samples/Module Management System/descrip.mms b/samples/Module Management System/descrip.mms new file mode 100644 index 00000000..f6530a56 --- /dev/null +++ b/samples/Module Management System/descrip.mms @@ -0,0 +1,1204 @@ +# DESCRIP.MMS +# Written By: Robert Alan Byer / byer@mail.ourservers.net +# Modified By: Mark Pizzolato / mark@infocomm.com +# Norman Lastovica / norman.lastovica@oracle.com +# +# This MMS/MMK build script is used to compile the various simulators in +# the SIMH package for OpenVMS using DEC C v6.0-001(AXP), v6.5-001(AXP), +# HP C V7.2-001 (IA64) and v6.4-005(VAX). +# +# Notes: On VAX, the PDP-10 and Eclipse simulators will not be built +# due to the fact that INT64 is required for that simulator. +# +# This build script will accept the following build options. +# +# ALL Just Build "Everything". +# ALTAIR Just Build The MITS Altair. +# ALTAIRZ80 Just Build The MITS Altair Z80. +# ECLIPSE Just Build The Data General Eclipse. +# GRI Just Build The GRI Corporation GRI-909. +# LGP Just Build The Royal-McBee LGP-30. +# H316 Just Build The Honewell 316/516. +# HP2100 Just Build The Hewlett-Packard HP-2100. +# I1401 Just Build The IBM 1401. +# I1620 Just Build The IBM 1620. +# IBM1130 Just Build The IBM 1130. +# ID16 Just Build The Interdata 16-bit CPU. +# ID32 Just Build The Interdata 32-bit CPU. +# NOVA Just Build The Data General Nova. +# PDP1 Just Build The DEC PDP-1. +# PDP4 Just Build The DEC PDP-4. +# PDP7 Just Build The DEC PDP-7. +# PDP8 Just Build The DEC PDP-8. +# PDP9 Just Build The DEC PDP-9. +# PDP10 Just Build The DEC PDP-10. +# PDP11 Just Build The DEC PDP-11. +# PDP15 Just Build The DEC PDP-15. +# S3 Just Build The IBM System 3. +# SDS Just Build The SDS 940. +# VAX Just Build The DEC VAX. +# VAX780 Just Build The DEC VAX780. +# CLEAN Will Clean Files Back To Base Kit. +# +# To build with debugging enabled (which will also enable traceback +# information) use.. +# +# MMK/MACRO=(DEBUG=1) +# +# This will produce an executable named {Simulator}-{I64|VAX|AXP}-DBG.EXE +# + +# Let's See If We Are Going To Build With DEBUG Enabled. Always compile +# /DEBUG so that the traceback and debug information is always available +# in the object files. + +CC_DEBUG = /DEBUG + +.IFDEF DEBUG +LINK_DEBUG = /DEBUG/TRACEBACK +CC_OPTIMIZE = /NOOPTIMIZE + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = AXP-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = I64-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX-DBG +CC_DEFS = "__VAX" +.ENDIF + +.ELSE +LINK_DEBUG = /NODEBUG/NOTRACEBACK + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5)/ARCH=HOST +CC_FLAGS = /PREF=ALL +ARCH = AXP +CC_DEFS = "_LARGEFILE" +LINK_SECTION_BINDING = /SECTION_BINDING +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5) +CC_FLAGS = /PREF=ALL +ARCH = I64 +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_OPTIMIZE = /OPTIMIZE +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX +CC_DEFS = "__VAX" +.ENDIF + +.ENDIF + +# Define Our Compiler Flags & Define The Compile Command +OUR_CC_FLAGS = $(CC_FLAGS)$(CC_DEBUG)$(CC_OPTIMIZE) \ + /NEST=PRIMARY/NAME=(AS_IS,SHORT) +CC = CC/DECC$(OUR_CC_FLAGS) + +# Define The BIN Directory Where The Executables Will Go. +# Define Our Library Directory. +# Define The platform specific Build Directory Where The Objects Will Go. +# +BIN_DIR = SYS$DISK:[.BIN] +LIB_DIR = SYS$DISK:[.LIB] +BLD_DIR = SYS$DISK:[.LIB.BLD-$(ARCH)] + +# Check To Make Sure We Have SYS$DISK:[.BIN] & SYS$DISK:[.LIB] Directory. +# +.FIRST + @ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") THEN CREATE/DIRECTORY $(BIN_DIR) + @ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") THEN CREATE/DIRECTORY $(LIB_DIR) + @ IF (F$SEARCH("SYS$DISK:[.LIB]BLD-$(ARCH).DIR").EQS."") THEN CREATE/DIRECTORY $(BLD_DIR) + @ IF (F$SEARCH("$(BLD_DIR)*.*").NES."") THEN DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.*;* + @ IF "".NES."''CC'" THEN DELETE/SYMBOL/GLOBAL CC + +# Core SIMH File Definitions. +# +SIMH_DIR = SYS$DISK:[] +SIMH_LIB = $(LIB_DIR)SIMH-$(ARCH).OLB +SIMH_SOURCE = $(SIMH_DIR)SIM_CONSOLE.C,$(SIMH_DIR)SIM_SOCK.C,\ + $(SIMH_DIR)SIM_TMXR.C,$(SIMH_DIR)SIM_ETHER.C,\ + $(SIMH_DIR)SIM_TAPE.C,$(SIMH_DIR)SIM_FIO.C,\ + $(SIMH_DIR)SIM_TIMER.C + +# VMS PCAP File Definitions. +# +PCAP_DIR = SYS$DISK:[.PCAP-VMS.PCAP-VCI] +PCAP_LIB = $(LIB_DIR)PCAP-$(ARCH).OLB +PCAP_SOURCE = \ + $(PCAP_DIR)PCAPVCI.C,$(PCAP_DIR)VCMUTIL.C,\ + $(PCAP_DIR)BPF_DUMP.C,$(PCAP_DIR)BPF_FILTER.C,\ + $(PCAP_DIR)BPF_IMAGE.C,$(PCAP_DIR)ETHERENT.C,\ + $(PCAP_DIR)FAD-GIFC.C,$(PCAP_DIR)GENCODE.C,\ + $(PCAP_DIR)GRAMMAR.C,$(PCAP_DIR)INET.C,\ + $(PCAP_DIR)NAMETOADDR.C,$(PCAP_DIR)OPTIMIZE.C,\ + $(PCAP_DIR)PCAP.C,$(PCAP_DIR)SAVEFILE.C,\ + $(PCAP_DIR)SCANNER.C,$(PCAP_DIR)SNPRINTF.C,\ + $(PCAP_DIR)PCAP-VMS.C +PCAP_VCMDIR = SYS$DISK:[.PCAP-VMS.PCAPVCM] +PCAP_VCM_SOURCES = $(PCAP_VCMDIR)PCAPVCM.C,$(PCAP_VCMDIR)PCAPVCM_INIT.MAR,\ + $(PCAP_VCMDIR)VCI_JACKET.MAR,$(PCAP_VCMDIR)VCMUTIL.C +PCAP_VCI = SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +# PCAP is not available on OpenVMS VAX or IA64 right now +# +.IFDEF MMSALPHA +PCAP_EXECLET = $(PCAP_VCI) +PCAP_INC = ,$(PCAP_DIR) +PCAP_LIBD = $(PCAP_LIB) +PCAP_LIBR = ,$(PCAP_LIB)/LIB/SYSEXE +PCAP_DEFS = ,"USE_NETWORK=1" +PCAP_SIMH_INC = /INCL=($(PCAP_DIR)) +.ENDIF + +# MITS Altair Simulator Definitions. +# +ALTAIR_DIR = SYS$DISK:[.ALTAIR] +ALTAIR_LIB = $(LIB_DIR)ALTAIR-$(ARCH).OLB +ALTAIR_SOURCE = $(ALTAIR_DIR)ALTAIR_SIO.C,$(ALTAIR_DIR)ALTAIR_CPU.C,\ + $(ALTAIR_DIR)ALTAIR_DSK.C,$(ALTAIR_DIR)ALTAIR_SYS.C +ALTAIR_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIR_DIR))/DEF=($(CC_DEFS)) + +# +# MITS Altair Z80 Simulator Definitions. +# +ALTAIRZ80_DIR = SYS$DISK:[.ALTAIRZ80] +ALTAIRZ80_LIB = $(LIB_DIR)ALTAIRZ80-$(ARCH).OLB +ALTAIRZ80_SOURCE = $(ALTAIRZ80_DIR)/ALTAIRZ80_CPU.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_CPU_NOMMU.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_DSK.C,$(ALTAIRZ80_DIR)/DISASM.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_SIO.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_SYS.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_HDSK.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_NET.C,\ + $(ALTAIRZ80_DIR)/FLASHWRITER2.C,$(ALTAIRZ80_DIR)/I86_DECODE.C,\ + $(ALTAIRZ80_DIR)/I86_OPS.C,$(ALTAIRZ80_DIR)/I86_PRIM_OPS.C,\ + $(ALTAIRZ80_DIR)/I8272.C,$(ALTAIRZ80_DIR)/INSNSA.C,$(ALTAIRZ80_DIR)/INSNSD.C,\ + $(ALTAIRZ80_DIR)/MFDC.C,$(ALTAIRZ80_DIR)/N8VEM.C,$(ALTAIRZ80_DIR)/VFDHD.C,\ + $(ALTAIRZ80_DIR)/S100_DISK1A.C,$(ALTAIRZ80_DIR)/S100_DISK2.C,\ + $(ALTAIRZ80_DIR)/S100_FIF.C,$(ALTAIRZ80_DIR)/S100_MDRIVEH.C,\ + $(ALTAIRZ80_DIR)/S100_MDSAD.C,$(ALTAIRZ80_DIR)/S100_SELCHAN.C,\ + $(ALTAIRZ80_DIR)/S100_SS1.C,$(ALTAIRZ80_DIR)/S100_64FDC.C,\ + $(ALTAIRZ80_DIR)/S100_SCP300F.C,$(ALTAIRZ80_DIR)/SIM_IMD.C,\ + $(ALTAIRZ80_DIR)/WD179X.C +ALTAIRZ80_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIRZ80_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Nova Simulator Definitions. +# +NOVA_DIR = SYS$DISK:[.NOVA] +NOVA_LIB = $(LIB_DIR)NOVA-$(ARCH).OLB +NOVA_SOURCE = $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_CPU.C,\ + $(NOVA_DIR)NOVA_DKP.C,$(NOVA_DIR)NOVA_DSK.C,\ + $(NOVA_DIR)NOVA_LP.C,$(NOVA_DIR)NOVA_MTA.C,\ + $(NOVA_DIR)NOVA_PLT.C,$(NOVA_DIR)NOVA_PT.C,\ + $(NOVA_DIR)NOVA_CLK.C,$(NOVA_DIR)NOVA_TT.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +NOVA_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Eclipse Simulator Definitions. +# +ECLIPSE_LIB = $(LIB_DIR)ECLIPSE-$(ARCH).OLB +ECLIPSE_SOURCE = $(NOVA_DIR)ECLIPSE_CPU.C,$(NOVA_DIR)ECLIPSE_TT.C,\ + $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_DKP.C,\ + $(NOVA_DIR)NOVA_DSK.C,$(NOVA_DIR)NOVA_LP.C,\ + $(NOVA_DIR)NOVA_MTA.C,$(NOVA_DIR)NOVA_PLT.C,\ + $(NOVA_DIR)NOVA_PT.C,$(NOVA_DIR)NOVA_CLK.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +ECLIPSE_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","ECLIPSE=1") + +# +# GRI Corporation GRI-909 Simulator Definitions. +# +GRI_DIR = SYS$DISK:[.GRI] +GRI_LIB = $(LIB_DIR)GRI-$(ARCH).OLB +GRI_SOURCE = $(GRI_DIR)GRI_CPU.C,$(GRI_DIR)GRI_STDDEV.C,$(GRI_DIR)GRI_SYS.C +GRI_OPTIONS = /INCL=($(SIMH_DIR),$(GRI_DIR))/DEF=($(CC_DEFS)) + +# +# Royal-McBee LGP-30 Simulator Definitions. +# +LGP_DIR = SYS$DISK:[.LGP] +LGP_LIB = $(LIB_DIR)LGP-$(ARCH).OLB +LGP_SOURCE = $(LGP_DIR)LGP_CPU.C,$(LGP_DIR)LGP_STDDEV.C,$(LGP_DIR)LGP_SYS.C +LGP_OPTIONS = /INCL=($(SIMH_DIR),$(LGP_DIR))/DEF=($(CC_DEFS)) + +# +# Honeywell 316/516 Simulator Definitions. +# +H316_DIR = SYS$DISK:[.H316] +H316_LIB = $(LIB_DIR)H316-$(ARCH).OLB +H316_SOURCE = $(H316_DIR)H316_STDDEV.C,$(H316_DIR)H316_LP.C,\ + $(H316_DIR)H316_CPU.C,$(H316_DIR)H316_SYS.C,\ + $(H316_DIR)H316_FHD.C,$(H316_DIR)H316_MT.C,\ + $(H316_DIR)H316_DP.C +H316_OPTIONS = /INCL=($(SIMH_DIR),$(H316_DIR))/DEF=($(CC_DEFS)) + +# +# Hewlett-Packard HP-2100 Simulator Definitions. +# +HP2100_DIR = SYS$DISK:[.HP2100] +HP2100_LIB = $(LIB_DIR)HP2100-$(ARCH).OLB +HP2100_SOURCE = $(HP2100_DIR)HP2100_STDDEV.C,$(HP2100_DIR)HP2100_DP.C,\ + $(HP2100_DIR)HP2100_DQ.C,$(HP2100_DIR)HP2100_DR.C,\ + $(HP2100_DIR)HP2100_LPS.C,$(HP2100_DIR)HP2100_MS.C,\ + $(HP2100_DIR)HP2100_MT.C,$(HP2100_DIR)HP2100_MUX.C,\ + $(HP2100_DIR)HP2100_CPU.C,$(HP2100_DIR)HP2100_FP.C,\ + $(HP2100_DIR)HP2100_SYS.C,$(HP2100_DIR)HP2100_LPT.C,\ + $(HP2100_DIR)HP2100_IPL.C,$(HP2100_DIR)HP2100_DS.C,\ + $(HP2100_DIR)HP2100_CPU0.C,$(HP2100_DIR)HP2100_CPU1.C,\ + $(HP2100_DIR)HP2100_CPU2.C,$(HP2100_DIR)HP2100_CPU3.C,\ + $(HP2100_DIR)HP2100_CPU4.C,$(HP2100_DIR)HP2100_CPU5.C,\ + $(HP2100_DIR)HP2100_CPU6.C,$(HP2100_DIR)HP2100_CPU7.C,\ + $(HP2100_DIR)HP2100_FP1.C,$(HP2100_DIR)HP2100_BACI.C,\ + $(HP2100_DIR)HP2100_MPX.C,$(HP2100_DIR)HP2100_PIF.C +.IF ALPHA_OR_IA64 +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))\ + /DEF=($(CC_DEFS),"HAVE_INT64=1") +.ELSE +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))/DEF=($(CC_DEFS)) +.ENDIF + +# +# Interdata 16-bit CPU. +# +ID16_DIR = SYS$DISK:[.INTERDATA] +ID16_LIB = $(LIB_DIR)ID16-$(ARCH).OLB +ID16_SOURCE = $(ID16_DIR)ID16_CPU.C,$(ID16_DIR)ID16_SYS.C,$(ID16_DIR)ID_DP.C,\ + $(ID16_DIR)ID_FD.C,$(ID16_DIR)ID_FP.C,$(ID16_DIR)ID_IDC.C,\ + $(ID16_DIR)ID_IO.C,$(ID16_DIR)ID_LP.C,$(ID16_DIR)ID_MT.C,\ + $(ID16_DIR)ID_PAS.C,$(ID16_DIR)ID_PT.C,$(ID16_DIR)ID_TT.C,\ + $(ID16_DIR)ID_UVC.C,$(ID16_DIR)ID16_DBOOT.C,$(ID16_DIR)ID_TTP.C +ID16_OPTIONS = /INCL=($(SIMH_DIR),$(ID16_DIR))/DEF=($(CC_DEFS)) + +# +# Interdata 32-bit CPU. +# +ID32_DIR = SYS$DISK:[.INTERDATA] +ID32_LIB = $(LIB_DIR)ID32-$(ARCH).OLB +ID32_SOURCE = $(ID32_DIR)ID32_CPU.C,$(ID32_DIR)ID32_SYS.C,$(ID32_DIR)ID_DP.C,\ + $(ID32_DIR)ID_FD.C,$(ID32_DIR)ID_FP.C,$(ID32_DIR)ID_IDC.C,\ + $(ID32_DIR)ID_IO.C,$(ID32_DIR)ID_LP.C,$(ID32_DIR)ID_MT.C,\ + $(ID32_DIR)ID_PAS.C,$(ID32_DIR)ID_PT.C,$(ID32_DIR)ID_TT.C,\ + $(ID32_DIR)ID_UVC.C,$(ID32_DIR)ID32_DBOOT.C,$(ID32_DIR)ID_TTP.C +ID32_OPTIONS = /INCL=($(SIMH_DIR),$(ID32_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1130 Simulator Definitions. +# +IBM1130_DIR = SYS$DISK:[.IBM1130] +IBM1130_LIB = $(LIB_DIR)IBM1130-$(ARCH).OLB +IBM1130_SOURCE = $(IBM1130_DIR)IBM1130_CPU.C,$(IBM1130_DIR)IBM1130_CR.C,\ + $(IBM1130_DIR)IBM1130_DISK.C,$(IBM1130_DIR)IBM1130_STDDEV.C,\ + $(IBM1130_DIR)IBM1130_SYS.C,$(IBM1130_DIR)IBM1130_GDU.C,\ + $(IBM1130_DIR)IBM1130_GUI.C,$(IBM1130_DIR)IBM1130_PRT.C,\ + $(IBM1130_DIR)IBM1130_FMT.C,$(IBM1130_DIR)IBM1130_PTRP.C,\ + $(IBM1130_DIR)IBM1130_PLOT.C,$(IBM1130_DIR)IBM1130_SCA.C,\ + $(IBM1130_DIR)IBM1130_T2741.C +IBM1130_OPTIONS = /INCL=($(SIMH_DIR),$(IBM1130_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1401 Simulator Definitions. +# +I1401_DIR = SYS$DISK:[.I1401] +I1401_LIB = $(LIB_DIR)I1401-$(ARCH).OLB +I1401_SOURCE = $(I1401_DIR)I1401_LP.C,$(I1401_DIR)I1401_CPU.C,\ + $(I1401_DIR)I1401_IQ.C,$(I1401_DIR)I1401_CD.C,\ + $(I1401_DIR)I1401_MT.C,$(I1401_DIR)I1401_DP.C,\ + $(I1401_DIR)I1401_SYS.C +I1401_OPTIONS = /INCL=($(SIMH_DIR),$(I1401_DIR))/DEF=($(CC_DEFS)) + + +# +# IBM 1620 Simulators Definitions. +# +I1620_DIR = SYS$DISK:[.I1620] +I1620_LIB = $(LIB_DIR)I1620-$(ARCH).OLB +I1620_SOURCE = $(I1620_DIR)I1620_CD.C,$(I1620_DIR)I1620_DP.C,\ + $(I1620_DIR)I1620_PT.C,$(I1620_DIR)I1620_TTY.C,\ + $(I1620_DIR)I1620_CPU.C,$(I1620_DIR)I1620_LP.C,\ + $(I1620_DIR)I1620_FP.C,$(I1620_DIR)I1620_SYS.C +I1620_OPTIONS = /INCL=($(SIMH_DIR),$(I1620_DIR))/DEF=($(CC_DEFS)) + +# +# PDP-1 Simulator Definitions. +# +PDP1_DIR = SYS$DISK:[.PDP1] +PDP1_LIB = $(LIB_DIR)PDP1-$(ARCH).OLB +PDP1_SOURCE = $(PDP1_DIR)PDP1_LP.C,$(PDP1_DIR)PDP1_CPU.C,\ + $(PDP1_DIR)PDP1_STDDEV.C,$(PDP1_DIR)PDP1_SYS.C,\ + $(PDP1_DIR)PDP1_DT.C,$(PDP1_DIR)PDP1_DRM.C,\ + $(PDP1_DIR)PDP1_CLK.C,$(PDP1_DIR)PDP1_DCS.C +PDP1_OPTIONS = /INCL=($(SIMH_DIR),$(PDP1_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-8 Simulator Definitions. +# +PDP8_DIR = SYS$DISK:[.PDP8] +PDP8_LIB = $(LIB_DIR)PDP8-$(ARCH).OLB +PDP8_SOURCE = $(PDP8_DIR)PDP8_CPU.C,$(PDP8_DIR)PDP8_CLK.C,\ + $(PDP8_DIR)PDP8_DF.C,$(PDP8_DIR)PDP8_DT.C,\ + $(PDP8_DIR)PDP8_LP.C,$(PDP8_DIR)PDP8_MT.C,\ + $(PDP8_DIR)PDP8_PT.C,$(PDP8_DIR)PDP8_RF.C,\ + $(PDP8_DIR)PDP8_RK.C,$(PDP8_DIR)PDP8_RX.C,\ + $(PDP8_DIR)PDP8_SYS.C,$(PDP8_DIR)PDP8_TT.C,\ + $(PDP8_DIR)PDP8_TTX.C,$(PDP8_DIR)PDP8_RL.C,\ + $(PDP8_DIR)PDP8_TSC.C,$(PDP8_DIR)PDP8_TD.C,\ + $(PDP8_DIR)PDP8_CT.C +PDP8_OPTIONS = /INCL=($(SIMH_DIR),$(PDP8_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-4, PDP-7, PDP-9 And PDP-15 Simulator Definitions. +# +PDP18B_DIR = SYS$DISK:[.PDP18B] +PDP4_LIB = $(LIB_DIR)PDP4-$(ARCH).OLB +PDP7_LIB = $(LIB_DIR)PDP7-$(ARCH).OLB +PDP9_LIB = $(LIB_DIR)PDP9-$(ARCH).OLB +PDP15_LIB = $(LIB_DIR)PDP15-$(ARCH).OLB +PDP18B_SOURCE = $(PDP18B_DIR)PDP18B_DT.C,$(PDP18B_DIR)PDP18B_DRM.C,\ + $(PDP18B_DIR)PDP18B_CPU.C,$(PDP18B_DIR)PDP18B_LP.C,\ + $(PDP18B_DIR)PDP18B_MT.C,$(PDP18B_DIR)PDP18B_RF.C,\ + $(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\ + $(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\ + $(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C +PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1") +PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1") +PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1") +PDP15_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP15=1") + +# +# Digital Equipment PDP-11 Simulator Definitions. +# +PDP11_DIR = SYS$DISK:[.PDP11] +PDP11_LIB1 = $(LIB_DIR)PDP11L1-$(ARCH).OLB +PDP11_SOURCE1 = $(PDP11_DIR)PDP11_FP.C,$(PDP11_DIR)PDP11_CPU.C,\ + $(PDP11_DIR)PDP11_DZ.C,$(PDP11_DIR)PDP11_CIS.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_RK.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_RX.C,$(PDP11_DIR)PDP11_STDDEV.C,\ + $(PDP11_DIR)PDP11_SYS.C,$(PDP11_DIR)PDP11_TC.C, \ + $(PDP11_DIR)PDP11_CPUMOD.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_TA.C,$(PDP11_DIR)PDP11_IO_LIB.C +PDP11_LIB2 = $(LIB_DIR)PDP11L2-$(ARCH).OLB +PDP11_SOURCE2 = $(PDP11_DIR)PDP11_TM.C,$(PDP11_DIR)PDP11_TS.C,\ + $(PDP11_DIR)PDP11_IO.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TQ.C,$(PDP11_DIR)PDP11_PCLK.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_PT.C,\ + $(PDP11_DIR)PDP11_HK.C,$(PDP11_DIR)PDP11_XQ.C,\ + $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_RH.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_TU.C,\ + $(PDP11_DIR)PDP11_DL.C,$(PDP11_DIR)PDP11_RF.C, \ + $(PDP11_DIR)PDP11_RC.C,$(PDP11_DIR)PDP11_KG.C,\ + $(PDP11_DIR)PDP11_KE.C,$(PDP11_DIR)PDP11_DC.C +PDP11_OPTIONS = /INCL=($(SIMH_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_PDP11=1"$(PCAP_DEFS)) + +# +# Digital Equipment PDP-10 Simulator Definitions. +# +PDP10_DIR = SYS$DISK:[.PDP10] +PDP10_LIB = $(LIB_DIR)PDP10-$(ARCH).OLB +PDP10_SOURCE = $(PDP10_DIR)PDP10_FE.C,\ + $(PDP10_DIR)PDP10_CPU.C,$(PDP10_DIR)PDP10_KSIO.C,\ + $(PDP10_DIR)PDP10_LP20.C,$(PDP10_DIR)PDP10_MDFP.C,\ + $(PDP10_DIR)PDP10_PAG.C,$(PDP10_DIR)PDP10_XTND.C,\ + $(PDP10_DIR)PDP10_RP.C,$(PDP10_DIR)PDP10_SYS.C,\ + $(PDP10_DIR)PDP10_TIM.C,$(PDP10_DIR)PDP10_TU.C,\ + $(PDP11_DIR)PDP11_PT.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_XU.C,\ + $(PDP11_DIR)PDP11_CR.C +PDP10_OPTIONS = /INCL=($(SIMH_DIR),$(PDP10_DIR),$(PDP11_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","VM_PDP10=1"$(PCAP_DEFS)) + +# +# IBM System 3 Simulator Definitions. +# +S3_DIR = SYS$DISK:[.S3] +S3_LIB = $(LIB_DIR)S3-$(ARCH).OLB +S3_SOURCE = $(S3_DIR)S3_CD.C,$(S3_DIR)S3_CPU.C,$(S3_DIR)S3_DISK.C,\ + $(S3_DIR)S3_LP.C,$(S3_DIR)S3_PKB.C,$(S3_DIR)S3_SYS.C +S3_OPTIONS = /INCL=($(SIMH_DIR),$(S3_DIR))/DEF=($(CC_DEFS)) + +# +# SDS 940 +# +SDS_DIR = SYS$DISK:[.SDS] +SDS_LIB = $(LIB_DIR)SDS-$(ARCH).OLB +SDS_SOURCE = $(SDS_DIR)SDS_CPU.C,$(SDS_DIR)SDS_DRM.C,$(SDS_DIR)SDS_DSK.C,\ + $(SDS_DIR)SDS_IO.C,$(SDS_DIR)SDS_LP.C,$(SDS_DIR)SDS_MT.C,\ + $(SDS_DIR)SDS_MUX.C,$(SDS_DIR)SDS_RAD.C,$(SDS_DIR)SDS_STDDEV.C,\ + $(SDS_DIR)SDS_SYS.C +SDS_OPTIONS = /INCL=($(SIMH_DIR),$(SDS_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment VAX Simulator Definitions. +# +VAX_DIR = SYS$DISK:[.VAX] +VAX_LIB = $(LIB_DIR)VAX-$(ARCH).OLB +VAX_SOURCE = $(VAX_DIR)VAX_CIS.C,$(VAX_DIR)VAX_CMODE.C,\ + $(VAX_DIR)VAX_CPU.C,$(VAX_DIR)VAX_CPU1.C,\ + $(VAX_DIR)VAX_FPA.C,$(VAX_DIR)VAX_MMU.C,\ + $(VAX_DIR)VAX_OCTA.C,$(VAX_DIR)VAX_SYS.C,\ + $(VAX_DIR)VAX_SYSCM.C,$(VAX_DIR)VAX_SYSDEV.C,\ + $(VAX_DIR)VAX_SYSLIST.C,$(VAX_DIR)VAX_IO.C,\ + $(VAX_DIR)VAX_STDDEV.C,$(PDP11_DIR)PDP11_IO_LIB.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XQ.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_VH.C +VAX_OPTIONS = /INCL=($(SIMH_DIR),$(VAX_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS)) + +# Digital Equipment VAX780 Simulator Definitions. +# +VAX780_DIR = SYS$DISK:[.VAX] +VAX780_LIB1 = $(LIB_DIR)VAX780L1-$(ARCH).OLB +VAX780_SOURCE1 = $(VAX780_DIR)VAX_CPU.C,$(VAX780_DIR)VAX_CPU1.C,\ + $(VAX780_DIR)VAX_FPA.C,$(VAX780_DIR)VAX_CIS.C,\ + $(VAX780_DIR)VAX_OCTA.C,$(VAX780_DIR)VAX_CMODE.C,\ + $(VAX780_DIR)VAX_MMU.C,$(VAX780_DIR)VAX_SYS.C,\ + $(VAX780_DIR)VAX_SYSCM.C,$(VAX780_DIR)VAX780_STDDEV.C,\ + $(VAX780_DIR)VAX780_SBI.C,$(VAX780_DIR)VAX780_MEM.C,\ + $(VAX780_DIR)VAX780_UBA.C,$(VAX780_DIR)VAX780_MBA.C,\ + $(VAX780_DIR)VAX780_FLOAD.C,$(VAX780_DIR)VAX780_SYSLIST.C +VAX780_LIB2 = $(LIB_DIR)VAX780L2-$(ARCH).OLB +VAX780_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_RY.C,\ + $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ + $(PDP11_DIR)PDP11_IO_LIB.C +VAX780_OPTIONS = /INCL=($(SIMH_DIR),$(VAX780_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS),"VAX_780=1") + +# IBM 7094 Simulator Definitions. +# +I7094_DIR = SYS$DISK:[.I7094] +I7094_LIB = $(LIB_DIR)I7094-$(ARCH).OLB +I7094_SOURCE = $(I7094_DIR)I7094_CPU.C,$(I7094_DIR)I7094_CPU1.C,\ + $(I7094_DIR)I7094_IO.C,$(I7094_DIR)I7094_CD.C,\ + $(I7094_DIR)I7094_CLK.C,$(I7094_DIR)I7094_COM.C,\ + $(I7094_DIR)I7094_DRM.C,$(I7094_DIR)I7094_DSK.C,\ + $(I7094_DIR)I7094_SYS.C,$(I7094_DIR)I7094_LP.C,\ + $(I7094_DIR)I7094_MT.C,$(I7094_DIR)I7094_BINLOADER.C +I7094_OPTIONS = /INCL=($(SIMH_DIR),$(I7094_DIR))/DEF=($(CC_DEFS)) + +# If we're not a VAX, Build Everything +# +.IF ALPHA_OR_IA64 +ALL : ALTAIR ALTAIRZ80 ECLIPSE GRI LGP H316 HP2100 I1401 I1620 IBM1130 ID16 \ + ID32 NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP10 PDP11 PDP15 S3 VAX VAX780 SDS \ + I7094 + @CONTINUE +.ELSE +# +# Else We Are On VAX And Build Everything EXCEPT the 64b simulators +# +ALL : ALTAIR ALTAIRZ80 GRI H316 HP2100 I1401 I1620 IBM1130 ID16 ID32 \ + NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP11 PDP15 S3 VAX VAX780 SDS + @CONTINUE +.ENDIF + +CLEAN : + $! + $! Clean out all targets and building Remnants + $! + $ IF (F$SEARCH("$(BIN_DIR)*.EXE;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(BIN_DIR)*.EXE;* + $ IF (F$SEARCH("$(LIB_DIR)*.OLB;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(LIB_DIR)*.OLB;* + $ IF (F$SEARCH("SYS$DISK:[...]*.OBJ;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.OBJ;* + $ IF (F$SEARCH("SYS$DISK:[...]*.LIS;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.LIS;* + $ IF (F$SEARCH("SYS$DISK:[...]*.MAP;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.MAP;* + +# +# Build The Libraries. +# +$(SIMH_LIB) : $(SIMH_SOURCE) + $! + $! Building The $(SIMH_LIB) Library. + $! + $ $(CC)/DEF=($(CC_DEFS)$(PCAP_DEFS))$(PCAP_SIMH_INC) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIR_LIB) : $(ALTAIR_SOURCE) + $! + $! Building The $(ALTAIR_LIB) Library. + $! + $ $(CC)$(ALTAIR_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIRZ80_LIB) : $(ALTAIRZ80_SOURCE) + $! + $! Building The $(ALTAIRZ80_LIB) Library. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The Eclipse Library. +# +.IF ALPHA_OR_IA64 +$(ECLIPSE_LIB) : $(ECLIPSE_SOURCE) + $! + $! Building The $(ECLIPSE_LIB) Library. + $! + $ $(CC)$(ECLIPSE_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(ECLIPSE_LIB) : + $! + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)ECLIPSE-$(ARCH).OLB Library On VAX. + $! +.ENDIF + +$(GRI_LIB) : $(GRI_SOURCE) + $! + $! Building The $(GRI_LIB) Library. + $! + $ $(CC)$(GRI_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(LGP_LIB) : $(LGP_SOURCE) + $! + $! Building The $(LGP_LIB) Library. + $! + $ $(CC)$(LGP_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(H316_LIB) : $(H316_SOURCE) + $! + $! Building The $(H316_LIB) Library. + $! + $ $(CC)$(H316_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(HP2100_LIB) : $(HP2100_SOURCE) + $! + $! Building The $(HP2100_LIB) Library. + $! + $ $(CC)$(HP2100_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1401_LIB) : $(I1401_SOURCE) + $! + $! Building The $(I1401_LIB) Library. + $! + $ $(CC)$(I1401_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1620_LIB) : $(I1620_SOURCE) + $! + $! Building The $(I1620_LIB) Library. + $! + $ $(CC)$(I1620_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(IBM1130_LIB) : $(IBM1130_SOURCE) + $! + $! Building The $(IBM1130_LIB) Library. + $! + $ $(CC)$(IBM1130_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID16_LIB) : $(ID16_SOURCE) + $! + $! Building The $(ID16_LIB) Library. + $! + $ $(CC)$(ID16_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID32_LIB) : $(ID32_SOURCE) + $! + $! Building The $(ID32_LIB) Library. + $! + $ $(CC)$(ID32_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(NOVA_LIB) : $(NOVA_SOURCE) + $! + $! Building The $(NOVA_LIB) Library. + $! + $ $(CC)$(NOVA_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP1_LIB) : $(PDP1_SOURCE) + $! + $! Building The $(PDP1_LIB) Library. + $! + $ $(CC)$(PDP1_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP4_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP4_LIB) Library. + $! + $ $(CC)$(PDP4_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP7_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP7_LIB) Library. + $! + $ $(CC)$(PDP7_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP8_LIB) : $(PDP8_SOURCE) + $! + $! Building The $(PDP8_LIB) Library. + $! + $ $(CC)$(PDP8_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP9_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP9_LIB) Library. + $! + $ $(CC)$(PDP9_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Library. +# +.IF ALPHA_OR_IA64 +$(PDP10_LIB) : $(PDP10_SOURCE) + $! + $! Building The $(PDP10_LIB) Library. + $! + $ $(CC)$(PDP10_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(PDP10_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)PDP10-$(ARCH).OLB Library On VAX. +.ENDIF + +$(PDP11_LIB1) : $(PDP11_SOURCE1) + $! + $! Building The $(PDP11_LIB1) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP11_LIB2) : $(PDP11_SOURCE2) + $! + $! Building The $(PDP11_LIB2) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP15_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP15_LIB) Library. + $! + $ $(CC)$(PDP15_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(S3_LIB) : $(S3_SOURCE) + $! + $! Building The $(S3_LIB) Library. + $! + $ $(CC)$(S3_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(SDS_LIB) : $(SDS_SOURCE) + $! + $! Building The $(SDS_LIB) Library. + $! + $ $(CC)$(SDS_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX_LIB) : $(VAX_SOURCE) + $! + $! Building The $(VAX_LIB) Library. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(VAX_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB1) : $(VAX780_SOURCE1) + $! + $! Building The $(VAX780_LIB1) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB2) : $(VAX780_SOURCE2) + $! + $! Building The $(VAX780_LIB2) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PCAP_LIB) : $(PCAP_SOURCE) + $! + $! Building The $(PCAP_LIB) Library. + $! + $ SET DEFAULT $(PCAP_DIR) + $ @VMS_PCAP $(DEBUG) + $ SET DEFAULT [--] + $ IF (F$SEARCH("$(PCAP_LIB)").NES."") THEN - + DELETE $(PCAP_LIB); + $ COPY $(PCAP_DIR)PCAP.OLB $(PCAP_LIB) + $ DELETE/NOLOG/NOCONFIRM $(PCAP_DIR)*.OBJ;*,$(PCAP_DIR)*.OLB;* + +# +# If Not On VAX, Build The IBM 7094 Library. +# +.IF ALPHA_OR_IA64 +$(I7094_LIB) : $(I7094_SOURCE) + $! + $! Building The $(I7094_LIB) Library. + $! + $ $(CC)$(I7094_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(I7094_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)I7094-$(ARCH).OLB Library On VAX. +.ENDIF + +# +# Individual Simulator Builds. +# +ALTAIR : $(SIMH_LIB) $(ALTAIR_LIB) + $! + $! Building The $(BIN_DIR)ALTAIR-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIR_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIR-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIR_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ALTAIRZ80 : $(SIMH_LIB) $(ALTAIRZ80_LIB) + $! + $! Building The $(BIN_DIR)ALTAIRZ80-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIRZ80-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIRZ80_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +ECLIPSE : $(SIMH_LIB) $(ECLIPSE_LIB) + $! + $! Building The $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ECLIPSE_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ECLIPSE-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ECLIPSE_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +ECLIPSE : + $! Sorry, Can't Build $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +GRI : $(SIMH_LIB) $(GRI_LIB) + $! + $! Building The $(BIN_DIR)GRI-$(ARCH).EXE Simulator. + $! + $ $(CC)$(GRI_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)GRI-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(GRI_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +LGP : $(SIMH_LIB) $(LGP_LIB) + $! + $! Building The $(BIN_DIR)LGP-$(ARCH).EXE Simulator. + $! + $ $(CC)$(LGP_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)LGP-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(LGP_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +H316 : $(SIMH_LIB) $(H316_LIB) + $! + $! Building The $(BIN_DIR)H316-$(ARCH).EXE Simulator. + $! + $ $(CC)$(H316_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)H316-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(H316_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +HP2100 : $(SIMH_LIB) $(HP2100_LIB) + $! + $! Building The $(BIN_DIR)HP2100-$(ARCH).EXE Simulator. + $! + $ $(CC)$(HP2100_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)HP2100-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(HP2100_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1401 : $(SIMH_LIB) $(I1401_LIB) + $! + $! Building The $(BIN_DIR)I1401-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1401_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1401-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1401_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1620 : $(SIMH_LIB) $(I1620_LIB) + $! + $! Building The $(BIN_DIR)I1620-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1620_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1620-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1620_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +IBM1130 : $(SIMH_LIB) $(IBM1130_LIB) + $! + $! Building The $(BIN_DIR)IBM1130-$(ARCH).EXE Simulator. + $! + $ $(CC)$(IBM1130_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)IBM1130-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(IBM1130_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID16 : $(SIMH_LIB) $(ID16_LIB) + $! + $! Building The $(BIN_DIR)ID16-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID16_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID16-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID16_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID32 : $(SIMH_LIB) $(ID32_LIB) + $! + $! Building The $(BIN_DIR)ID32-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID32_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID32-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID32_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +NOVA : $(SIMH_LIB) $(NOVA_LIB) + $! + $! Building The $(BIN_DIR)NOVA-$(ARCH).EXE Simulator. + $! + $ $(CC)$(NOVA_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)NOVA-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(NOVA_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP1 : $(SIMH_LIB) $(PDP1_LIB) + $! + $! Building The $(BIN_DIR)PDP1-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP1_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP1-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP1_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP4 : $(SIMH_LIB) $(PDP4_LIB) + $! + $! Building The $(BIN_DIR)PDP4-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP4_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP4-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP4_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP7 : $(SIMH_LIB) $(PDP7_LIB) + $! + $! Building The $(BIN_DIR)PDP7-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP7_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP7-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP7_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP8 : $(SIMH_LIB) $(PDP8_LIB) + $! + $! Building The $(BIN_DIR)PDP8-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP8_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP8-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP8_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP9 : $(SIMH_LIB) $(PDP9_LIB) + $! + $! Building The $(BIN_DIR)PDP9-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP9_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP9-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP9_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +PDP10 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP10_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP10-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP10_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP10-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP10_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +PDP10 : + $! Sorry, Can't Build $(BIN_DIR)PDP10-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +PDP11 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP11_LIB1) $(PDP11_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP11-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP11_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP11-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP11_LIB1)/LIBRARY,$(PDP11_LIB2)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP15 : $(SIMH_LIB) $(PDP15_LIB) + $! + $! Building The $(BIN_DIR)PDP15-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP15_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP15-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP15_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +S3 : $(SIMH_LIB) $(S3_LIB) + $! + $! Building The $(BIN_DIR)S3-$(ARCH).EXE Simulator. + $! + $ $(CC)$(S3_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)S3-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(S3_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +SDS : $(SIMH_LIB) $(SDS_LIB) + $! + $! Building The $(BIN_DIR)SDS-$(ARCH).EXE Simulator. + $! + $ $(CC)$(SDS_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)SDS-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(SDS_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX : $(SIMH_LIB) $(PCAP_LIBD) $(VAX_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(VAX_LIB)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX780 : $(SIMH_LIB) $(PCAP_LIBD) $(VAX780_LIB1) $(VAX780_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX780-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX780-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,- + $(VAX780_LIB1)/LIBRARY,$(VAX780_LIB2)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The IBM 7094 Simulator. +# +.IF ALPHA_OR_IA64 +I7094 : $(SIMH_LIB) $(I7094_LIB) + $! + $! Building The $(BIN_DIR)I7094-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I7094_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I7094-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I7094_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +I7094 : + $! Sorry, Can't Build $(BIN_DIR)I7094-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +# +# PCAP VCI Components +# +$(PCAP_VCI) : $(PCAP_VCMDIR)PCAPVCM.EXE + $! + $! Installing the PCAP VCI Execlet in SYS$LOADABLE_IMAGES + $! + $ COPY $(PCAP_VCMDIR)PCAPVCM.EXE SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +$(PCAP_VCMDIR)PCAPVCM.EXE : $(PCAP_VCM_SOURCES) + $! + $! Building The PCAP VCI Execlet + $! + $ @SYS$DISK:[.PCAP-VMS.PCAPVCM]BUILD_PCAPVCM + $ DELETE/NOLOG/NOCONFIRM $(PCAP_VCMDIR)*.OBJ;*,$(PCAP_VCMDIR)*.MAP;* diff --git a/samples/Module Management System/openvms.mmk b/samples/Module Management System/openvms.mmk new file mode 100644 index 00000000..4a48d3c1 --- /dev/null +++ b/samples/Module Management System/openvms.mmk @@ -0,0 +1,563 @@ +# Copyright (C) 1997, 2000 Aladdin Enterprises. All rights reserved. +# +# This software is provided AS-IS with no warranty, either express or +# implied. +# +# This software is distributed under license and may not be copied, +# modified or distributed except as expressly authorized under the terms +# of the license contained in the file LICENSE in this distribution. +# +# For more information about licensing, please refer to +# http://www.ghostscript.com/licensing/. For information on +# commercial licensing, go to http://www.artifex.com/licensing/ or +# contact Artifex Software, Inc., 101 Lucas Valley Road #110, +# San Rafael, CA 94903, U.S.A., +1(415)492-9861. + +# $Id: openvms.mmk,v 1.31 2004/12/10 23:48:48 giles Exp $ +# makefile for OpenVMS VAX and Alpha using MMK +# +# Please contact Jim Dunham (dunham@omtool.com) if you have questions. +# Addapted for MMK by Jouk Jansen (joukj@hrem.stm.tudelft.nl) +# Support for VAX C on OpenVMS was removed in release 6.01 by Aladdin: +# DEC C is now used on both VAX and Alpha platforms. +# +# ------------------------------- Options ------------------------------- # + +###### This section is the only part of the file you should need to edit. + +# on the make command line specify: +# mmk/descrip=[.src]openvms.mmk/macro=("DECWINDOWS1_2={0,1}") + +# Define the directory for the final executable, and the +# source, generated intermediate file, and object directories +# for the graphics library (GL) and the PostScript/PDF interpreter (PS). + +BINDIR=[.bin] +GLSRCDIR=[.src] +GLGENDIR=[.obj] +GLOBJDIR=[.obj] +PSSRCDIR=[.src] +PSGENDIR=[.obj] +PSOBJDIR=[.obj] +PSLIBDIR=[.lib] +# Because of OpenVMS syntactic problems, the following redundant definitions +# are necessary. If you are using more than one GENDIR and/or OBJDIR, +# you will have to edit the code below that creates these directories. +BIN_DIR=BIN.DIR +OBJ_DIR=OBJ.DIR + +# create directories +.first + if f$search("$(BIN_DIR)") .eqs. "" then create/directory/log $(BINDIR) + if f$search("$(OBJ_DIR)") .eqs. "" then create/directory/log $(GLOBJDIR) + +# Do not edit the next group of lines. + +#.include $(COMMONDIR)vmscdefs.mak +#.include $(COMMONDIR)vmsdefs.mak +#.include $(COMMONDIR)generic.mak +.include $(GLSRCDIR)version.mak +DD=$(GLGENDIR) +GLD=$(GLGENDIR) +PSD=$(PSGENDIR) + +# ------ Generic options ------ # + +# Define the directory that will hold documentation at runtime. + +GS_DOCDIR=GS_DOC +#GS_DOCDIR=SYS$COMMON:[GS] + +# Define the default directory/ies for the runtime +# initialization and font files. Separate multiple directories with ,. + +GS_LIB_DEFAULT=GS_LIB +#GS_LIB_DEFAULT=SYS$COMMON:[GS],SYS$COMMON:[GS.FONT] + +# Define whether or not searching for initialization files should always +# look in the current directory first. This leads to well-known security +# and confusion problems, but users insist on it. +# NOTE: this also affects searching for files named on the command line: +# see the "File searching" section of Use.htm for full details. +# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended. + +SEARCH_HERE_FIRST=1 + +# Define the name of the interpreter initialization file. +# (There is no reason to change this.) + +GS_INIT=GS_INIT.PS + +# Choose generic configuration options. + +# Setting DEBUG=1 includes debugging features in the code + +DEBUG=0 + +# Setting TDEBUG=1 includes symbol table information for the debugger, +# and also enables stack tracing on failure. + +TDEBUG= + +# Setting CDEBUG=1 enables 'C' compiler debugging and turns off optimization +# Code is substantially slower and larger. + +CDEBUG= + +# Define the name of the executable file. + +GS=GS + +# Define the name of a pre-built executable that can be invoked at build +# time. Currently, this is only needed for compiled fonts. The usual +# alternatives are: +# - the standard name of Ghostscript on your system (typically `gs'): +BUILD_TIME_GS=GS +# - the name of the executable you are building now. If you choose this +# option, then you must build the executable first without compiled fonts, +# and then again with compiled fonts. +#BUILD_TIME_GS=$(BINDIR)$(GS) -I$(PSLIBDIR) + +# Define the directory where the IJG JPEG library sources are stored, +# and the major version of the library that is stored there. +# You may need to change this if the IJG library version changes. +# See jpeg.mak for more information. + +.ifdef SYSLIB +JSRCDIR=sys$library: +.else +JSRCDIR=[--.jpeg-6b] +.endif +JVERSION=6 + +# Define the directory where the PNG library sources are stored, +# and the version of the library that is stored there. +# You may need to change this if the libpng version changes. +# See libpng.mak for more information. + +.ifdef SYSLIB +PSRCDIR=sys$library: +.else +PSRCDIR=[--.libpng-1_2_8] +.endif +PVERSION=10208 + +# Define the directory where the zlib sources are stored. +# See zlib.mak for more information. + +.ifdef SYSLIB +ZSRCDIR=sys$library: +.else +ZSRCDIR=[--.zlib-1_2_1] +.endif + +# Define the directory where the jbig2dec library sources are stored. +# See jbig2.mak for more information +.ifdef SYSLIB +JBIG2SRCDIR=sys$library: +.else +JBIG2SRCDIR=[--.jbig2dec-0_7] +.endif + +# Define the directory where the icclib source are stored. +# See icclib.mak for more information + +ICCSRCDIR=[.icclib] + +# IJS has not been ported to OpenVMS. If you do the port, +# you'll need to set these values. You'll also need to +# include the ijs.mak makefile (right after icclib.mak). +# +# Define the directory where the ijs source is stored, +# and the process forking method to use for the server. +# See ijs.mak for more information. + +#IJSSRCDIR=[.ijs] +#IJSEXECTYPE=unix + +# Note that built-in third-party libraries aren't available. + +SHARE_JPEG=0 +SHARE_LIBPNG=0 +SHARE_ZLIB=0 +SHARE_JBIG2=0 + +# Define the path to X11 include files + +X_INCLUDE=DECW$INCLUDE + +# ------ Platform-specific options ------ # + +# Define the drive, directory, and compiler name for the 'C' compiler. +# COMP is the full compiler path name. + +.ifdef DEBUG +SW_DEBUG=/DEBUG/NOOPTIMIZE +.else +# This should include /OPTIMIZE, but some OpenVMS compilers have an +# optimizer bug that causes them to generate incorrect code for gdevpsfx.c, +# so we must disable optimization. (Eventually we will check for the bug +# in genarch and enable optimization if it is safe.) +#SW_DEBUG=/NODEBUG/OPTIMIZE +SW_DEBUG=/NODEBUG/NOOPTIMIZE +.endif + +SW_PLATFORM=/DECC/PREFIX=ALL/NESTED_INCLUDE=PRIMARY/name=(as_is,short)/nowarn + +# Define any other compilation flags. +# Including defines for A4 paper size + +.ifdef A4_PAPER +SW_PAPER=/DEFINE=("A4","HAVE_MKSTEMP") +.else +SW_PAPER=/DEFINE=("HAVE_MKSTEMP") +.endif + +.ifdef IEEE +SW_IEEE=/float=ieee +.else +SW_IEEE= +.endif + +COMP=CC$(SW_DEBUG)$(SW_PLATFORM)$(SW_PAPER)$(SW_IEEE) + +# LINK is the full linker path name + +.ifdef TDEBUG +LINKER=LINK/DEBUG/TRACEBACK +.else +LINKER=LINK/NODEBUG/NOTRACEBACK +.endif + +# INCDIR contains the include files +INCDIR= + +# LIBDIR contains the library files +LIBDIR= + +# Define the .dev module that implements thread and synchronization +# primitives for this platform. Don't change this unless you really know +# what you're doing. + +SYNC=posync + +# ------ Devices and features ------ # + +# Choose the device(s) to include. See devs.mak for details, +# devs.mak and contrib.mak for the list of available devices. + +DEVICE_DEVS=$(DD)x11.dev $(DD)x11alpha.dev $(DD)x11cmyk.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev +DEVICE_DEVS1= +DEVICE_DEVS2= +DEVICE_DEVS3=$(DD)deskjet.dev $(DD)djet500.dev $(DD)laserjet.dev $(DD)ljetplus.dev $(DD)ljet2p.dev $(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev +DEVICE_DEVS4=$(DD)cdeskjet.dev $(DD)cdjcolor.dev $(DD)cdjmono.dev $(DD)cdj550.dev $(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev +DEVICE_DEVS5=$(DD)uniprint.dev +DEVICE_DEVS6=$(DD)bj10e.dev $(DD)bj200.dev $(DD)bjc600.dev $(DD)bjc800.dev +DEVICE_DEVS7=$(DD)faxg3.dev $(DD)faxg32d.dev $(DD)faxg4.dev +DEVICE_DEVS8=$(DD)pcxmono.dev $(DD)pcxgray.dev $(DD)pcx16.dev $(DD)pcx256.dev $(DD)pcx24b.dev $(DD)pcxcmyk.dev +DEVICE_DEVS9=$(DD)pbm.dev $(DD)pbmraw.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev +DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev +DEVICE_DEVS11=$(DD)tiff12nc.dev $(DD)tiff24nc.dev +DEVICE_DEVS12=$(DD)psmono.dev $(DD)psgray.dev $(DD)psrgb.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev +DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev +DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev +DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev +DEVICE_DEVS16=$(DD)bbox.dev +# Overflow from DEVS9 +DEVICE_DEVS17=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)pkm.dev $(DD)pkmraw.dev $(DD)pksm.dev $(DD)pksmraw.dev +DEVICE_DEVS18= +DEVICE_DEVS19= +DEVICE_DEVS20= +DEVICE_DEVS21= +DEVICE_DEVS21= + +# Choose the language feature(s) to include. See gs.mak for details. + +FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)dpsnext.dev $(PSD)ttfont.dev $(PSD)epsf.dev $(PSD)fapi.dev $(PSD)jbig2.dev + +# Choose whether to compile the .ps initialization files into the executable. +# See gs.mak for details. + +COMPILE_INITS=0 + +# Choose whether to store band lists on files or in memory. +# The choices are 'file' or 'memory'. + +BAND_LIST_STORAGE=file + +# Choose which compression method to use when storing band lists in memory. +# The choices are 'lzw' or 'zlib'. + +BAND_LIST_COMPRESSOR=zlib + +# Choose the implementation of file I/O: 'stdio', 'fd', or 'both'. +# See gs.mak and sfxfd.c for more details. + +FILE_IMPLEMENTATION=stdio + +# Choose the implementation of stdio: '' for file I/O and 'c' for callouts +# See gs.mak and ziodevs.c/ziodevsc.c for more details. + +STDIO_IMPLEMENTATION=c + +# Define the name table capacity size of 2^(16+n). + +EXTEND_NAMES=0 + +# Define whether the system constants are writable. + +SYSTEM_CONSTANTS_ARE_WRITABLE=0 + +# Define the platform name. + +PLATFORM=openvms_ + +# Define the name of the makefile -- used in dependencies. + +MAKEFILE=$(GLSRCDIR)openvms.mmk +TOP_MAKEFILES=$(MAKEFILE) + +# Define the platform options + +PLATOPT= + +# Patch a couple of PC-specific things that aren't relevant to OpenVMS builds, +# but that cause `make' to produce warnings. + +PCFBASM= + +# It is very unlikely that anyone would want to edit the remaining +# symbols, but we describe them here for completeness: + +# Define the suffix for command files (e.g., null or .bat). + +CMD= + +# Define the directory separator character (\ for MS-DOS, / for Unix, +# nothing for OpenVMS). + +D= + +# Define the brackets for passing preprocessor definitions to the C compiler. +NULL= + +D_=/DEFINE=" +_D_=$(NULL)= +_D=" + +# Define the syntax of search paths for the C compiler. +# The OpenVMS compilers uses /INCLUDE=(dir1, dir2, ...dirn), +# and only a single /INCLUDE switch is allowed in the command line. + +I_=/INCLUDE=( +II=, +_I=) + +# Define the string for specifying the output file from the C compiler. + +O_=/OBJECT= + +# Define the quoting string for mixed-case arguments. +# (OpenVMS is the only platform where this isn't an empty string.) + +Q=" + +# Define the extension for executable files (e.g., null or .exe). + +XE=.exe + +# Define the extension for executable files for the auxiliary programs +# (e.g., null or .exe). + +XEAUX=.exe + +# Define the list of files that `make clean' removes. + +BEGINFILES=$(GLSRCDIR)OPENVMS.OPT $(GLSRCDIR)OPENVMS.COM + +# Define the C invocation for auxiliary programs (echogs, genarch). +# We don't need to define this separately. + +CCAUX= + +# Define the C invocation for normal compilation. + +CC=$(COMP) + +# Define the Link invocation. + +LINK=$(LINKER)/EXE=$@ $+,$(GLSRCDIR)OPENVMS.OPT/OPTION + +# Define the auxiliary program dependency. We don't need this. + +AK= + +# Define the syntax for command, object, and executable files. + +OBJ=obj + +# Define the prefix for image invocations. + +EXP=MCR $(NULL) + +# Define the prefix for shell invocations. + +SH= + +# Define generic commands. + +CP_=@$(GLSRCDIR)COPY_ONE + +# Define the command for deleting (a) file(s) (including wild cards) + +RM_=@$(GLSRCDIR)RM_ONE + +# Define the command for deleting multiple files / patterns. + +RMN_=@$(GLSRCDIR)RM_ALL + +# Define the arguments for genconf. + +CONFILES=-p %s +CONFLDTR=-o + +# Define the generic compilation rules. + +.suffixes : .c .obj .exe + +.obj.exe : + $(LINK) + +# ---------------------------- End of options ---------------------------- # + +# Define various incantations of the 'c' compiler. + +CC_=$(COMP) +CC_INT=$(CC_) +CC_NO_WARN=$(CC_) + +# ------------------- Include the generic makefiles ---------------------- # + +all : macro [.lib]Fontmap. $(GS_XE) + +#.include $(COMMONDIR)/ansidefs.mak +#.include $(COMMONDIR)/vmsdefs.mak +#.include $(COMMONDIR)/generic.mak +.include $(GLSRCDIR)gs.mak +.include $(GLSRCDIR)lib.mak +.include $(PSSRCDIR)int.mak +.include $(PSSRCDIR)cfonts.mak +.include $(GLSRCDIR)jpeg.mak +# zlib.mak must precede libpng.mak +.include $(GLSRCDIR)zlib.mak +.include $(GLSRCDIR)libpng.mak +JBIG2_EXTRA_OBJS=$(JBIG2OBJDIR)$(D)snprintf.$(OBJ) +.include $(GLSRCDIR)jbig2.mak +.include $(GLSRCDIR)icclib.mak +.include $(GLSRCDIR)devs.mak +.include $(GLSRCDIR)contrib.mak + + +# ----------------------------- Main program ------------------------------ + +macro : +.ifdef A4_PAPER + @ a4p = 1 +.else + @ a4p = 0 +.endif +.ifdef IEEE + @ i3e = 1 +.else + @ i3e = 0 +.endif +.ifdef SYSLIB + @ dsl = 1 +.else + @ dsl = 0 +.endif + @ decc = f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes."" + @ decw12 = f$search("SYS$SHARE:DECW$XTLIBSHRR5.EXE").nes."" + @ macro = "" + @ if dsl.or.a4p.or.decc.or.decw12 then macro = "/MACRO=(" + @ if decw12 then macro = macro + "DECWINDOWS1_2=1," + @ if a4p then macro = macro + "A4_PAPER=1," + @ if dsl then macro = macro + "SYSLIB=1," + @ if i3e then macro = macro + "IEEE=1," + @ if macro.nes."" then macro = f$extract(0,f$length(macro)-1,macro)+ ")" + $(MMS)$(MMSQUALIFIERS)'macro' $(GS_XE) + +$(GS_XE) : openvms $(GLGEN)arch.h $(GLOBJDIR)gs.$(OBJ) $(INT_ALL) $(LIB_ALL) + $(LINKER)/EXE=$@ $(GLOBJDIR)gs.$(OBJ),$(ld_tr)/OPTIONS,$(GLSRCDIR)OPENVMS.OPT/OPTION + @ Write Sys$Output "Build of GhostScript is complete!" + +# OpenVMS.dev + +openvms__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_vms.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ) +$(GLGEN)openvms_.dev : $(openvms__) $(GLGEN)nosync.dev + $(SETMOD) $(GLGEN)openvms_ $(openvms__) -include $(GLGEN)nosync + +$(ECHOGS_XE) : $(GLOBJDIR)echogs.$(OBJ) +$(GENARCH_XE) : $(GLOBJDIR)genarch.$(OBJ) +$(GENCONF_XE) : $(GLOBJDIR)genconf.$(OBJ) +$(GENDEV_XE) : $(GLOBJDIR)gendev.$(OBJ) +$(GENHT_XE) : $(GLOBJDIR)genht.$(OBJ) +$(GENINIT_XE) : $(GLOBJDIR)geninit.$(OBJ) + +$(GLOBJDIR)echogs.$(OBJ) : $(GLSRCDIR)echogs.c +$(GLOBJDIR)genarch.$(OBJ) : $(GLSRCDIR)genarch.c $(GENARCH_DEPS) +$(GLOBJDIR)genconf.$(OBJ) : $(GLSRCDIR)genconf.c $(GENCONF_DEPS) +$(GLOBJDIR)gendev.$(OBJ) : $(GLSRCDIR)gendev.c $(GENDEV_DEPS) +# ****** NEED TO ADD $(GENHT_CFLAGS) HERE ****** +$(GLOBJDIR)genht.$(OBJ) : $(GLSRCDIR)genht.c $(GENHT_DEPS) +$(GLOBJDIR)geninit.$(OBJ) : $(GLSRCDIR)geninit.c $(GENINIT_DEPS) + +$(GLOBJ)gp_vms.$(OBJ) : $(GLSRC)gp_vms.c $(string__h) $(memory__h) $(gx_h) $(gp_h) $(gpmisc_h) $(gsstruct_h) + $(CC_)/include=($(GLGENDIR),$(GLSRCDIR))/obj=$(GLOBJ)gp_vms.$(OBJ) $(GLSRC)gp_vms.c + +$(GLOBJ)gp_stdia.$(OBJ) : $(GLSRC)gp_stdia.c $(AK) $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h) + $(CC_)/incl=$(GLOBJ)/obj=$(GLOBJ)gp_stdia.$(OBJ) $(GLSRC)gp_stdia.c + +# Preliminary definitions + +openvms : $(GLSRCDIR)openvms.com $(GLSRCDIR)openvms.opt + @$(GLSRCDIR)OPENVMS + +$(GLSRCDIR)openvms.com : $(GLSRCDIR)append_l.com + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB X11 $(X_INCLUDE)" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB GS_LIB ''F$ENVIRONMENT(""DEFAULT"")'" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB GS_DOC ''F$ENVIRONMENT(""DEFAULT"")'" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB DECC$USER_INCLUDE ''F$ENVIRONMENT(""DEFAULT"")', DECW$INCLUDE, DECC$LIBRARY_INCLUDE, SYS$LIBRARY" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB DECC$SYSTEM_INCLUDE ''F$ENVIRONMENT(""DEFAULT"")', DECW$INCLUDE, DECC$LIBRARY_INCLUDE, SYS$LIBRARY" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB SYS "DECC$LIBRARY_INCLUDE,SYS$LIBRARY" + +$(GLSRCDIR)openvms.opt : +.ifdef DECWINDOWS1_2 + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XMLIBSHR12.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XLIBSHR.EXE/SHARE" +.else + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XMLIBSHR.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XTSHR.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XLIBSHR.EXE/SHARE" +.endif + @$(GLSRCDIR)APPEND_L $@ ""Ident="""""GS $(GS_DOT_VERSION)""""" + +# The platform-specific makefiles must also include rules for creating +# certain dynamically generated files: +# gconfig_.h - this indicates the presence or absence of +# certain system header files that are located in different +# places on different systems. (It could be generated by +# the GNU `configure' program.) +# gconfigv.h - this indicates the status of certain machine- +# and configuration-specific features derived from definitions +# in the platform-specific makefile. + +$(gconfig__h) : $(TOP_MAKEFILES) $(ECHOGS_XE) + $(EXP)$(ECHOGS_XE) -w $(gconfig__h) -x 23 define "HAVE_SYS_TIME_H" + +$(gconfigv_h) : $(TOP_MAKEFILES) $(ECHOGS_XE) + $(EXP)$(ECHOGS_XE) -w $(gconfigv_h) -x 23 define "USE_ASM" 0 + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "USE_FPU" 1 + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "EXTEND_NAMES" 0$(EXTEND_NAMES) + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "SYSTEM_CONSTANTS_ARE_WRITABLE" 0$(SYSTEM_CONSTANTS_ARE_WRITABLE) diff --git a/samples/Module Management System/simh_descrip.mms b/samples/Module Management System/simh_descrip.mms new file mode 100755 index 00000000..f6530a56 --- /dev/null +++ b/samples/Module Management System/simh_descrip.mms @@ -0,0 +1,1204 @@ +# DESCRIP.MMS +# Written By: Robert Alan Byer / byer@mail.ourservers.net +# Modified By: Mark Pizzolato / mark@infocomm.com +# Norman Lastovica / norman.lastovica@oracle.com +# +# This MMS/MMK build script is used to compile the various simulators in +# the SIMH package for OpenVMS using DEC C v6.0-001(AXP), v6.5-001(AXP), +# HP C V7.2-001 (IA64) and v6.4-005(VAX). +# +# Notes: On VAX, the PDP-10 and Eclipse simulators will not be built +# due to the fact that INT64 is required for that simulator. +# +# This build script will accept the following build options. +# +# ALL Just Build "Everything". +# ALTAIR Just Build The MITS Altair. +# ALTAIRZ80 Just Build The MITS Altair Z80. +# ECLIPSE Just Build The Data General Eclipse. +# GRI Just Build The GRI Corporation GRI-909. +# LGP Just Build The Royal-McBee LGP-30. +# H316 Just Build The Honewell 316/516. +# HP2100 Just Build The Hewlett-Packard HP-2100. +# I1401 Just Build The IBM 1401. +# I1620 Just Build The IBM 1620. +# IBM1130 Just Build The IBM 1130. +# ID16 Just Build The Interdata 16-bit CPU. +# ID32 Just Build The Interdata 32-bit CPU. +# NOVA Just Build The Data General Nova. +# PDP1 Just Build The DEC PDP-1. +# PDP4 Just Build The DEC PDP-4. +# PDP7 Just Build The DEC PDP-7. +# PDP8 Just Build The DEC PDP-8. +# PDP9 Just Build The DEC PDP-9. +# PDP10 Just Build The DEC PDP-10. +# PDP11 Just Build The DEC PDP-11. +# PDP15 Just Build The DEC PDP-15. +# S3 Just Build The IBM System 3. +# SDS Just Build The SDS 940. +# VAX Just Build The DEC VAX. +# VAX780 Just Build The DEC VAX780. +# CLEAN Will Clean Files Back To Base Kit. +# +# To build with debugging enabled (which will also enable traceback +# information) use.. +# +# MMK/MACRO=(DEBUG=1) +# +# This will produce an executable named {Simulator}-{I64|VAX|AXP}-DBG.EXE +# + +# Let's See If We Are Going To Build With DEBUG Enabled. Always compile +# /DEBUG so that the traceback and debug information is always available +# in the object files. + +CC_DEBUG = /DEBUG + +.IFDEF DEBUG +LINK_DEBUG = /DEBUG/TRACEBACK +CC_OPTIMIZE = /NOOPTIMIZE + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = AXP-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = I64-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX-DBG +CC_DEFS = "__VAX" +.ENDIF + +.ELSE +LINK_DEBUG = /NODEBUG/NOTRACEBACK + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5)/ARCH=HOST +CC_FLAGS = /PREF=ALL +ARCH = AXP +CC_DEFS = "_LARGEFILE" +LINK_SECTION_BINDING = /SECTION_BINDING +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5) +CC_FLAGS = /PREF=ALL +ARCH = I64 +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_OPTIMIZE = /OPTIMIZE +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX +CC_DEFS = "__VAX" +.ENDIF + +.ENDIF + +# Define Our Compiler Flags & Define The Compile Command +OUR_CC_FLAGS = $(CC_FLAGS)$(CC_DEBUG)$(CC_OPTIMIZE) \ + /NEST=PRIMARY/NAME=(AS_IS,SHORT) +CC = CC/DECC$(OUR_CC_FLAGS) + +# Define The BIN Directory Where The Executables Will Go. +# Define Our Library Directory. +# Define The platform specific Build Directory Where The Objects Will Go. +# +BIN_DIR = SYS$DISK:[.BIN] +LIB_DIR = SYS$DISK:[.LIB] +BLD_DIR = SYS$DISK:[.LIB.BLD-$(ARCH)] + +# Check To Make Sure We Have SYS$DISK:[.BIN] & SYS$DISK:[.LIB] Directory. +# +.FIRST + @ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") THEN CREATE/DIRECTORY $(BIN_DIR) + @ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") THEN CREATE/DIRECTORY $(LIB_DIR) + @ IF (F$SEARCH("SYS$DISK:[.LIB]BLD-$(ARCH).DIR").EQS."") THEN CREATE/DIRECTORY $(BLD_DIR) + @ IF (F$SEARCH("$(BLD_DIR)*.*").NES."") THEN DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.*;* + @ IF "".NES."''CC'" THEN DELETE/SYMBOL/GLOBAL CC + +# Core SIMH File Definitions. +# +SIMH_DIR = SYS$DISK:[] +SIMH_LIB = $(LIB_DIR)SIMH-$(ARCH).OLB +SIMH_SOURCE = $(SIMH_DIR)SIM_CONSOLE.C,$(SIMH_DIR)SIM_SOCK.C,\ + $(SIMH_DIR)SIM_TMXR.C,$(SIMH_DIR)SIM_ETHER.C,\ + $(SIMH_DIR)SIM_TAPE.C,$(SIMH_DIR)SIM_FIO.C,\ + $(SIMH_DIR)SIM_TIMER.C + +# VMS PCAP File Definitions. +# +PCAP_DIR = SYS$DISK:[.PCAP-VMS.PCAP-VCI] +PCAP_LIB = $(LIB_DIR)PCAP-$(ARCH).OLB +PCAP_SOURCE = \ + $(PCAP_DIR)PCAPVCI.C,$(PCAP_DIR)VCMUTIL.C,\ + $(PCAP_DIR)BPF_DUMP.C,$(PCAP_DIR)BPF_FILTER.C,\ + $(PCAP_DIR)BPF_IMAGE.C,$(PCAP_DIR)ETHERENT.C,\ + $(PCAP_DIR)FAD-GIFC.C,$(PCAP_DIR)GENCODE.C,\ + $(PCAP_DIR)GRAMMAR.C,$(PCAP_DIR)INET.C,\ + $(PCAP_DIR)NAMETOADDR.C,$(PCAP_DIR)OPTIMIZE.C,\ + $(PCAP_DIR)PCAP.C,$(PCAP_DIR)SAVEFILE.C,\ + $(PCAP_DIR)SCANNER.C,$(PCAP_DIR)SNPRINTF.C,\ + $(PCAP_DIR)PCAP-VMS.C +PCAP_VCMDIR = SYS$DISK:[.PCAP-VMS.PCAPVCM] +PCAP_VCM_SOURCES = $(PCAP_VCMDIR)PCAPVCM.C,$(PCAP_VCMDIR)PCAPVCM_INIT.MAR,\ + $(PCAP_VCMDIR)VCI_JACKET.MAR,$(PCAP_VCMDIR)VCMUTIL.C +PCAP_VCI = SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +# PCAP is not available on OpenVMS VAX or IA64 right now +# +.IFDEF MMSALPHA +PCAP_EXECLET = $(PCAP_VCI) +PCAP_INC = ,$(PCAP_DIR) +PCAP_LIBD = $(PCAP_LIB) +PCAP_LIBR = ,$(PCAP_LIB)/LIB/SYSEXE +PCAP_DEFS = ,"USE_NETWORK=1" +PCAP_SIMH_INC = /INCL=($(PCAP_DIR)) +.ENDIF + +# MITS Altair Simulator Definitions. +# +ALTAIR_DIR = SYS$DISK:[.ALTAIR] +ALTAIR_LIB = $(LIB_DIR)ALTAIR-$(ARCH).OLB +ALTAIR_SOURCE = $(ALTAIR_DIR)ALTAIR_SIO.C,$(ALTAIR_DIR)ALTAIR_CPU.C,\ + $(ALTAIR_DIR)ALTAIR_DSK.C,$(ALTAIR_DIR)ALTAIR_SYS.C +ALTAIR_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIR_DIR))/DEF=($(CC_DEFS)) + +# +# MITS Altair Z80 Simulator Definitions. +# +ALTAIRZ80_DIR = SYS$DISK:[.ALTAIRZ80] +ALTAIRZ80_LIB = $(LIB_DIR)ALTAIRZ80-$(ARCH).OLB +ALTAIRZ80_SOURCE = $(ALTAIRZ80_DIR)/ALTAIRZ80_CPU.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_CPU_NOMMU.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_DSK.C,$(ALTAIRZ80_DIR)/DISASM.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_SIO.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_SYS.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_HDSK.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_NET.C,\ + $(ALTAIRZ80_DIR)/FLASHWRITER2.C,$(ALTAIRZ80_DIR)/I86_DECODE.C,\ + $(ALTAIRZ80_DIR)/I86_OPS.C,$(ALTAIRZ80_DIR)/I86_PRIM_OPS.C,\ + $(ALTAIRZ80_DIR)/I8272.C,$(ALTAIRZ80_DIR)/INSNSA.C,$(ALTAIRZ80_DIR)/INSNSD.C,\ + $(ALTAIRZ80_DIR)/MFDC.C,$(ALTAIRZ80_DIR)/N8VEM.C,$(ALTAIRZ80_DIR)/VFDHD.C,\ + $(ALTAIRZ80_DIR)/S100_DISK1A.C,$(ALTAIRZ80_DIR)/S100_DISK2.C,\ + $(ALTAIRZ80_DIR)/S100_FIF.C,$(ALTAIRZ80_DIR)/S100_MDRIVEH.C,\ + $(ALTAIRZ80_DIR)/S100_MDSAD.C,$(ALTAIRZ80_DIR)/S100_SELCHAN.C,\ + $(ALTAIRZ80_DIR)/S100_SS1.C,$(ALTAIRZ80_DIR)/S100_64FDC.C,\ + $(ALTAIRZ80_DIR)/S100_SCP300F.C,$(ALTAIRZ80_DIR)/SIM_IMD.C,\ + $(ALTAIRZ80_DIR)/WD179X.C +ALTAIRZ80_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIRZ80_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Nova Simulator Definitions. +# +NOVA_DIR = SYS$DISK:[.NOVA] +NOVA_LIB = $(LIB_DIR)NOVA-$(ARCH).OLB +NOVA_SOURCE = $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_CPU.C,\ + $(NOVA_DIR)NOVA_DKP.C,$(NOVA_DIR)NOVA_DSK.C,\ + $(NOVA_DIR)NOVA_LP.C,$(NOVA_DIR)NOVA_MTA.C,\ + $(NOVA_DIR)NOVA_PLT.C,$(NOVA_DIR)NOVA_PT.C,\ + $(NOVA_DIR)NOVA_CLK.C,$(NOVA_DIR)NOVA_TT.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +NOVA_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Eclipse Simulator Definitions. +# +ECLIPSE_LIB = $(LIB_DIR)ECLIPSE-$(ARCH).OLB +ECLIPSE_SOURCE = $(NOVA_DIR)ECLIPSE_CPU.C,$(NOVA_DIR)ECLIPSE_TT.C,\ + $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_DKP.C,\ + $(NOVA_DIR)NOVA_DSK.C,$(NOVA_DIR)NOVA_LP.C,\ + $(NOVA_DIR)NOVA_MTA.C,$(NOVA_DIR)NOVA_PLT.C,\ + $(NOVA_DIR)NOVA_PT.C,$(NOVA_DIR)NOVA_CLK.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +ECLIPSE_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","ECLIPSE=1") + +# +# GRI Corporation GRI-909 Simulator Definitions. +# +GRI_DIR = SYS$DISK:[.GRI] +GRI_LIB = $(LIB_DIR)GRI-$(ARCH).OLB +GRI_SOURCE = $(GRI_DIR)GRI_CPU.C,$(GRI_DIR)GRI_STDDEV.C,$(GRI_DIR)GRI_SYS.C +GRI_OPTIONS = /INCL=($(SIMH_DIR),$(GRI_DIR))/DEF=($(CC_DEFS)) + +# +# Royal-McBee LGP-30 Simulator Definitions. +# +LGP_DIR = SYS$DISK:[.LGP] +LGP_LIB = $(LIB_DIR)LGP-$(ARCH).OLB +LGP_SOURCE = $(LGP_DIR)LGP_CPU.C,$(LGP_DIR)LGP_STDDEV.C,$(LGP_DIR)LGP_SYS.C +LGP_OPTIONS = /INCL=($(SIMH_DIR),$(LGP_DIR))/DEF=($(CC_DEFS)) + +# +# Honeywell 316/516 Simulator Definitions. +# +H316_DIR = SYS$DISK:[.H316] +H316_LIB = $(LIB_DIR)H316-$(ARCH).OLB +H316_SOURCE = $(H316_DIR)H316_STDDEV.C,$(H316_DIR)H316_LP.C,\ + $(H316_DIR)H316_CPU.C,$(H316_DIR)H316_SYS.C,\ + $(H316_DIR)H316_FHD.C,$(H316_DIR)H316_MT.C,\ + $(H316_DIR)H316_DP.C +H316_OPTIONS = /INCL=($(SIMH_DIR),$(H316_DIR))/DEF=($(CC_DEFS)) + +# +# Hewlett-Packard HP-2100 Simulator Definitions. +# +HP2100_DIR = SYS$DISK:[.HP2100] +HP2100_LIB = $(LIB_DIR)HP2100-$(ARCH).OLB +HP2100_SOURCE = $(HP2100_DIR)HP2100_STDDEV.C,$(HP2100_DIR)HP2100_DP.C,\ + $(HP2100_DIR)HP2100_DQ.C,$(HP2100_DIR)HP2100_DR.C,\ + $(HP2100_DIR)HP2100_LPS.C,$(HP2100_DIR)HP2100_MS.C,\ + $(HP2100_DIR)HP2100_MT.C,$(HP2100_DIR)HP2100_MUX.C,\ + $(HP2100_DIR)HP2100_CPU.C,$(HP2100_DIR)HP2100_FP.C,\ + $(HP2100_DIR)HP2100_SYS.C,$(HP2100_DIR)HP2100_LPT.C,\ + $(HP2100_DIR)HP2100_IPL.C,$(HP2100_DIR)HP2100_DS.C,\ + $(HP2100_DIR)HP2100_CPU0.C,$(HP2100_DIR)HP2100_CPU1.C,\ + $(HP2100_DIR)HP2100_CPU2.C,$(HP2100_DIR)HP2100_CPU3.C,\ + $(HP2100_DIR)HP2100_CPU4.C,$(HP2100_DIR)HP2100_CPU5.C,\ + $(HP2100_DIR)HP2100_CPU6.C,$(HP2100_DIR)HP2100_CPU7.C,\ + $(HP2100_DIR)HP2100_FP1.C,$(HP2100_DIR)HP2100_BACI.C,\ + $(HP2100_DIR)HP2100_MPX.C,$(HP2100_DIR)HP2100_PIF.C +.IF ALPHA_OR_IA64 +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))\ + /DEF=($(CC_DEFS),"HAVE_INT64=1") +.ELSE +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))/DEF=($(CC_DEFS)) +.ENDIF + +# +# Interdata 16-bit CPU. +# +ID16_DIR = SYS$DISK:[.INTERDATA] +ID16_LIB = $(LIB_DIR)ID16-$(ARCH).OLB +ID16_SOURCE = $(ID16_DIR)ID16_CPU.C,$(ID16_DIR)ID16_SYS.C,$(ID16_DIR)ID_DP.C,\ + $(ID16_DIR)ID_FD.C,$(ID16_DIR)ID_FP.C,$(ID16_DIR)ID_IDC.C,\ + $(ID16_DIR)ID_IO.C,$(ID16_DIR)ID_LP.C,$(ID16_DIR)ID_MT.C,\ + $(ID16_DIR)ID_PAS.C,$(ID16_DIR)ID_PT.C,$(ID16_DIR)ID_TT.C,\ + $(ID16_DIR)ID_UVC.C,$(ID16_DIR)ID16_DBOOT.C,$(ID16_DIR)ID_TTP.C +ID16_OPTIONS = /INCL=($(SIMH_DIR),$(ID16_DIR))/DEF=($(CC_DEFS)) + +# +# Interdata 32-bit CPU. +# +ID32_DIR = SYS$DISK:[.INTERDATA] +ID32_LIB = $(LIB_DIR)ID32-$(ARCH).OLB +ID32_SOURCE = $(ID32_DIR)ID32_CPU.C,$(ID32_DIR)ID32_SYS.C,$(ID32_DIR)ID_DP.C,\ + $(ID32_DIR)ID_FD.C,$(ID32_DIR)ID_FP.C,$(ID32_DIR)ID_IDC.C,\ + $(ID32_DIR)ID_IO.C,$(ID32_DIR)ID_LP.C,$(ID32_DIR)ID_MT.C,\ + $(ID32_DIR)ID_PAS.C,$(ID32_DIR)ID_PT.C,$(ID32_DIR)ID_TT.C,\ + $(ID32_DIR)ID_UVC.C,$(ID32_DIR)ID32_DBOOT.C,$(ID32_DIR)ID_TTP.C +ID32_OPTIONS = /INCL=($(SIMH_DIR),$(ID32_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1130 Simulator Definitions. +# +IBM1130_DIR = SYS$DISK:[.IBM1130] +IBM1130_LIB = $(LIB_DIR)IBM1130-$(ARCH).OLB +IBM1130_SOURCE = $(IBM1130_DIR)IBM1130_CPU.C,$(IBM1130_DIR)IBM1130_CR.C,\ + $(IBM1130_DIR)IBM1130_DISK.C,$(IBM1130_DIR)IBM1130_STDDEV.C,\ + $(IBM1130_DIR)IBM1130_SYS.C,$(IBM1130_DIR)IBM1130_GDU.C,\ + $(IBM1130_DIR)IBM1130_GUI.C,$(IBM1130_DIR)IBM1130_PRT.C,\ + $(IBM1130_DIR)IBM1130_FMT.C,$(IBM1130_DIR)IBM1130_PTRP.C,\ + $(IBM1130_DIR)IBM1130_PLOT.C,$(IBM1130_DIR)IBM1130_SCA.C,\ + $(IBM1130_DIR)IBM1130_T2741.C +IBM1130_OPTIONS = /INCL=($(SIMH_DIR),$(IBM1130_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1401 Simulator Definitions. +# +I1401_DIR = SYS$DISK:[.I1401] +I1401_LIB = $(LIB_DIR)I1401-$(ARCH).OLB +I1401_SOURCE = $(I1401_DIR)I1401_LP.C,$(I1401_DIR)I1401_CPU.C,\ + $(I1401_DIR)I1401_IQ.C,$(I1401_DIR)I1401_CD.C,\ + $(I1401_DIR)I1401_MT.C,$(I1401_DIR)I1401_DP.C,\ + $(I1401_DIR)I1401_SYS.C +I1401_OPTIONS = /INCL=($(SIMH_DIR),$(I1401_DIR))/DEF=($(CC_DEFS)) + + +# +# IBM 1620 Simulators Definitions. +# +I1620_DIR = SYS$DISK:[.I1620] +I1620_LIB = $(LIB_DIR)I1620-$(ARCH).OLB +I1620_SOURCE = $(I1620_DIR)I1620_CD.C,$(I1620_DIR)I1620_DP.C,\ + $(I1620_DIR)I1620_PT.C,$(I1620_DIR)I1620_TTY.C,\ + $(I1620_DIR)I1620_CPU.C,$(I1620_DIR)I1620_LP.C,\ + $(I1620_DIR)I1620_FP.C,$(I1620_DIR)I1620_SYS.C +I1620_OPTIONS = /INCL=($(SIMH_DIR),$(I1620_DIR))/DEF=($(CC_DEFS)) + +# +# PDP-1 Simulator Definitions. +# +PDP1_DIR = SYS$DISK:[.PDP1] +PDP1_LIB = $(LIB_DIR)PDP1-$(ARCH).OLB +PDP1_SOURCE = $(PDP1_DIR)PDP1_LP.C,$(PDP1_DIR)PDP1_CPU.C,\ + $(PDP1_DIR)PDP1_STDDEV.C,$(PDP1_DIR)PDP1_SYS.C,\ + $(PDP1_DIR)PDP1_DT.C,$(PDP1_DIR)PDP1_DRM.C,\ + $(PDP1_DIR)PDP1_CLK.C,$(PDP1_DIR)PDP1_DCS.C +PDP1_OPTIONS = /INCL=($(SIMH_DIR),$(PDP1_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-8 Simulator Definitions. +# +PDP8_DIR = SYS$DISK:[.PDP8] +PDP8_LIB = $(LIB_DIR)PDP8-$(ARCH).OLB +PDP8_SOURCE = $(PDP8_DIR)PDP8_CPU.C,$(PDP8_DIR)PDP8_CLK.C,\ + $(PDP8_DIR)PDP8_DF.C,$(PDP8_DIR)PDP8_DT.C,\ + $(PDP8_DIR)PDP8_LP.C,$(PDP8_DIR)PDP8_MT.C,\ + $(PDP8_DIR)PDP8_PT.C,$(PDP8_DIR)PDP8_RF.C,\ + $(PDP8_DIR)PDP8_RK.C,$(PDP8_DIR)PDP8_RX.C,\ + $(PDP8_DIR)PDP8_SYS.C,$(PDP8_DIR)PDP8_TT.C,\ + $(PDP8_DIR)PDP8_TTX.C,$(PDP8_DIR)PDP8_RL.C,\ + $(PDP8_DIR)PDP8_TSC.C,$(PDP8_DIR)PDP8_TD.C,\ + $(PDP8_DIR)PDP8_CT.C +PDP8_OPTIONS = /INCL=($(SIMH_DIR),$(PDP8_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-4, PDP-7, PDP-9 And PDP-15 Simulator Definitions. +# +PDP18B_DIR = SYS$DISK:[.PDP18B] +PDP4_LIB = $(LIB_DIR)PDP4-$(ARCH).OLB +PDP7_LIB = $(LIB_DIR)PDP7-$(ARCH).OLB +PDP9_LIB = $(LIB_DIR)PDP9-$(ARCH).OLB +PDP15_LIB = $(LIB_DIR)PDP15-$(ARCH).OLB +PDP18B_SOURCE = $(PDP18B_DIR)PDP18B_DT.C,$(PDP18B_DIR)PDP18B_DRM.C,\ + $(PDP18B_DIR)PDP18B_CPU.C,$(PDP18B_DIR)PDP18B_LP.C,\ + $(PDP18B_DIR)PDP18B_MT.C,$(PDP18B_DIR)PDP18B_RF.C,\ + $(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\ + $(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\ + $(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C +PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1") +PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1") +PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1") +PDP15_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP15=1") + +# +# Digital Equipment PDP-11 Simulator Definitions. +# +PDP11_DIR = SYS$DISK:[.PDP11] +PDP11_LIB1 = $(LIB_DIR)PDP11L1-$(ARCH).OLB +PDP11_SOURCE1 = $(PDP11_DIR)PDP11_FP.C,$(PDP11_DIR)PDP11_CPU.C,\ + $(PDP11_DIR)PDP11_DZ.C,$(PDP11_DIR)PDP11_CIS.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_RK.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_RX.C,$(PDP11_DIR)PDP11_STDDEV.C,\ + $(PDP11_DIR)PDP11_SYS.C,$(PDP11_DIR)PDP11_TC.C, \ + $(PDP11_DIR)PDP11_CPUMOD.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_TA.C,$(PDP11_DIR)PDP11_IO_LIB.C +PDP11_LIB2 = $(LIB_DIR)PDP11L2-$(ARCH).OLB +PDP11_SOURCE2 = $(PDP11_DIR)PDP11_TM.C,$(PDP11_DIR)PDP11_TS.C,\ + $(PDP11_DIR)PDP11_IO.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TQ.C,$(PDP11_DIR)PDP11_PCLK.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_PT.C,\ + $(PDP11_DIR)PDP11_HK.C,$(PDP11_DIR)PDP11_XQ.C,\ + $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_RH.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_TU.C,\ + $(PDP11_DIR)PDP11_DL.C,$(PDP11_DIR)PDP11_RF.C, \ + $(PDP11_DIR)PDP11_RC.C,$(PDP11_DIR)PDP11_KG.C,\ + $(PDP11_DIR)PDP11_KE.C,$(PDP11_DIR)PDP11_DC.C +PDP11_OPTIONS = /INCL=($(SIMH_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_PDP11=1"$(PCAP_DEFS)) + +# +# Digital Equipment PDP-10 Simulator Definitions. +# +PDP10_DIR = SYS$DISK:[.PDP10] +PDP10_LIB = $(LIB_DIR)PDP10-$(ARCH).OLB +PDP10_SOURCE = $(PDP10_DIR)PDP10_FE.C,\ + $(PDP10_DIR)PDP10_CPU.C,$(PDP10_DIR)PDP10_KSIO.C,\ + $(PDP10_DIR)PDP10_LP20.C,$(PDP10_DIR)PDP10_MDFP.C,\ + $(PDP10_DIR)PDP10_PAG.C,$(PDP10_DIR)PDP10_XTND.C,\ + $(PDP10_DIR)PDP10_RP.C,$(PDP10_DIR)PDP10_SYS.C,\ + $(PDP10_DIR)PDP10_TIM.C,$(PDP10_DIR)PDP10_TU.C,\ + $(PDP11_DIR)PDP11_PT.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_XU.C,\ + $(PDP11_DIR)PDP11_CR.C +PDP10_OPTIONS = /INCL=($(SIMH_DIR),$(PDP10_DIR),$(PDP11_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","VM_PDP10=1"$(PCAP_DEFS)) + +# +# IBM System 3 Simulator Definitions. +# +S3_DIR = SYS$DISK:[.S3] +S3_LIB = $(LIB_DIR)S3-$(ARCH).OLB +S3_SOURCE = $(S3_DIR)S3_CD.C,$(S3_DIR)S3_CPU.C,$(S3_DIR)S3_DISK.C,\ + $(S3_DIR)S3_LP.C,$(S3_DIR)S3_PKB.C,$(S3_DIR)S3_SYS.C +S3_OPTIONS = /INCL=($(SIMH_DIR),$(S3_DIR))/DEF=($(CC_DEFS)) + +# +# SDS 940 +# +SDS_DIR = SYS$DISK:[.SDS] +SDS_LIB = $(LIB_DIR)SDS-$(ARCH).OLB +SDS_SOURCE = $(SDS_DIR)SDS_CPU.C,$(SDS_DIR)SDS_DRM.C,$(SDS_DIR)SDS_DSK.C,\ + $(SDS_DIR)SDS_IO.C,$(SDS_DIR)SDS_LP.C,$(SDS_DIR)SDS_MT.C,\ + $(SDS_DIR)SDS_MUX.C,$(SDS_DIR)SDS_RAD.C,$(SDS_DIR)SDS_STDDEV.C,\ + $(SDS_DIR)SDS_SYS.C +SDS_OPTIONS = /INCL=($(SIMH_DIR),$(SDS_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment VAX Simulator Definitions. +# +VAX_DIR = SYS$DISK:[.VAX] +VAX_LIB = $(LIB_DIR)VAX-$(ARCH).OLB +VAX_SOURCE = $(VAX_DIR)VAX_CIS.C,$(VAX_DIR)VAX_CMODE.C,\ + $(VAX_DIR)VAX_CPU.C,$(VAX_DIR)VAX_CPU1.C,\ + $(VAX_DIR)VAX_FPA.C,$(VAX_DIR)VAX_MMU.C,\ + $(VAX_DIR)VAX_OCTA.C,$(VAX_DIR)VAX_SYS.C,\ + $(VAX_DIR)VAX_SYSCM.C,$(VAX_DIR)VAX_SYSDEV.C,\ + $(VAX_DIR)VAX_SYSLIST.C,$(VAX_DIR)VAX_IO.C,\ + $(VAX_DIR)VAX_STDDEV.C,$(PDP11_DIR)PDP11_IO_LIB.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XQ.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_VH.C +VAX_OPTIONS = /INCL=($(SIMH_DIR),$(VAX_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS)) + +# Digital Equipment VAX780 Simulator Definitions. +# +VAX780_DIR = SYS$DISK:[.VAX] +VAX780_LIB1 = $(LIB_DIR)VAX780L1-$(ARCH).OLB +VAX780_SOURCE1 = $(VAX780_DIR)VAX_CPU.C,$(VAX780_DIR)VAX_CPU1.C,\ + $(VAX780_DIR)VAX_FPA.C,$(VAX780_DIR)VAX_CIS.C,\ + $(VAX780_DIR)VAX_OCTA.C,$(VAX780_DIR)VAX_CMODE.C,\ + $(VAX780_DIR)VAX_MMU.C,$(VAX780_DIR)VAX_SYS.C,\ + $(VAX780_DIR)VAX_SYSCM.C,$(VAX780_DIR)VAX780_STDDEV.C,\ + $(VAX780_DIR)VAX780_SBI.C,$(VAX780_DIR)VAX780_MEM.C,\ + $(VAX780_DIR)VAX780_UBA.C,$(VAX780_DIR)VAX780_MBA.C,\ + $(VAX780_DIR)VAX780_FLOAD.C,$(VAX780_DIR)VAX780_SYSLIST.C +VAX780_LIB2 = $(LIB_DIR)VAX780L2-$(ARCH).OLB +VAX780_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_RY.C,\ + $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ + $(PDP11_DIR)PDP11_IO_LIB.C +VAX780_OPTIONS = /INCL=($(SIMH_DIR),$(VAX780_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS),"VAX_780=1") + +# IBM 7094 Simulator Definitions. +# +I7094_DIR = SYS$DISK:[.I7094] +I7094_LIB = $(LIB_DIR)I7094-$(ARCH).OLB +I7094_SOURCE = $(I7094_DIR)I7094_CPU.C,$(I7094_DIR)I7094_CPU1.C,\ + $(I7094_DIR)I7094_IO.C,$(I7094_DIR)I7094_CD.C,\ + $(I7094_DIR)I7094_CLK.C,$(I7094_DIR)I7094_COM.C,\ + $(I7094_DIR)I7094_DRM.C,$(I7094_DIR)I7094_DSK.C,\ + $(I7094_DIR)I7094_SYS.C,$(I7094_DIR)I7094_LP.C,\ + $(I7094_DIR)I7094_MT.C,$(I7094_DIR)I7094_BINLOADER.C +I7094_OPTIONS = /INCL=($(SIMH_DIR),$(I7094_DIR))/DEF=($(CC_DEFS)) + +# If we're not a VAX, Build Everything +# +.IF ALPHA_OR_IA64 +ALL : ALTAIR ALTAIRZ80 ECLIPSE GRI LGP H316 HP2100 I1401 I1620 IBM1130 ID16 \ + ID32 NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP10 PDP11 PDP15 S3 VAX VAX780 SDS \ + I7094 + @CONTINUE +.ELSE +# +# Else We Are On VAX And Build Everything EXCEPT the 64b simulators +# +ALL : ALTAIR ALTAIRZ80 GRI H316 HP2100 I1401 I1620 IBM1130 ID16 ID32 \ + NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP11 PDP15 S3 VAX VAX780 SDS + @CONTINUE +.ENDIF + +CLEAN : + $! + $! Clean out all targets and building Remnants + $! + $ IF (F$SEARCH("$(BIN_DIR)*.EXE;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(BIN_DIR)*.EXE;* + $ IF (F$SEARCH("$(LIB_DIR)*.OLB;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(LIB_DIR)*.OLB;* + $ IF (F$SEARCH("SYS$DISK:[...]*.OBJ;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.OBJ;* + $ IF (F$SEARCH("SYS$DISK:[...]*.LIS;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.LIS;* + $ IF (F$SEARCH("SYS$DISK:[...]*.MAP;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.MAP;* + +# +# Build The Libraries. +# +$(SIMH_LIB) : $(SIMH_SOURCE) + $! + $! Building The $(SIMH_LIB) Library. + $! + $ $(CC)/DEF=($(CC_DEFS)$(PCAP_DEFS))$(PCAP_SIMH_INC) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIR_LIB) : $(ALTAIR_SOURCE) + $! + $! Building The $(ALTAIR_LIB) Library. + $! + $ $(CC)$(ALTAIR_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIRZ80_LIB) : $(ALTAIRZ80_SOURCE) + $! + $! Building The $(ALTAIRZ80_LIB) Library. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The Eclipse Library. +# +.IF ALPHA_OR_IA64 +$(ECLIPSE_LIB) : $(ECLIPSE_SOURCE) + $! + $! Building The $(ECLIPSE_LIB) Library. + $! + $ $(CC)$(ECLIPSE_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(ECLIPSE_LIB) : + $! + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)ECLIPSE-$(ARCH).OLB Library On VAX. + $! +.ENDIF + +$(GRI_LIB) : $(GRI_SOURCE) + $! + $! Building The $(GRI_LIB) Library. + $! + $ $(CC)$(GRI_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(LGP_LIB) : $(LGP_SOURCE) + $! + $! Building The $(LGP_LIB) Library. + $! + $ $(CC)$(LGP_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(H316_LIB) : $(H316_SOURCE) + $! + $! Building The $(H316_LIB) Library. + $! + $ $(CC)$(H316_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(HP2100_LIB) : $(HP2100_SOURCE) + $! + $! Building The $(HP2100_LIB) Library. + $! + $ $(CC)$(HP2100_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1401_LIB) : $(I1401_SOURCE) + $! + $! Building The $(I1401_LIB) Library. + $! + $ $(CC)$(I1401_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1620_LIB) : $(I1620_SOURCE) + $! + $! Building The $(I1620_LIB) Library. + $! + $ $(CC)$(I1620_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(IBM1130_LIB) : $(IBM1130_SOURCE) + $! + $! Building The $(IBM1130_LIB) Library. + $! + $ $(CC)$(IBM1130_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID16_LIB) : $(ID16_SOURCE) + $! + $! Building The $(ID16_LIB) Library. + $! + $ $(CC)$(ID16_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID32_LIB) : $(ID32_SOURCE) + $! + $! Building The $(ID32_LIB) Library. + $! + $ $(CC)$(ID32_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(NOVA_LIB) : $(NOVA_SOURCE) + $! + $! Building The $(NOVA_LIB) Library. + $! + $ $(CC)$(NOVA_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP1_LIB) : $(PDP1_SOURCE) + $! + $! Building The $(PDP1_LIB) Library. + $! + $ $(CC)$(PDP1_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP4_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP4_LIB) Library. + $! + $ $(CC)$(PDP4_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP7_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP7_LIB) Library. + $! + $ $(CC)$(PDP7_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP8_LIB) : $(PDP8_SOURCE) + $! + $! Building The $(PDP8_LIB) Library. + $! + $ $(CC)$(PDP8_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP9_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP9_LIB) Library. + $! + $ $(CC)$(PDP9_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Library. +# +.IF ALPHA_OR_IA64 +$(PDP10_LIB) : $(PDP10_SOURCE) + $! + $! Building The $(PDP10_LIB) Library. + $! + $ $(CC)$(PDP10_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(PDP10_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)PDP10-$(ARCH).OLB Library On VAX. +.ENDIF + +$(PDP11_LIB1) : $(PDP11_SOURCE1) + $! + $! Building The $(PDP11_LIB1) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP11_LIB2) : $(PDP11_SOURCE2) + $! + $! Building The $(PDP11_LIB2) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP15_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP15_LIB) Library. + $! + $ $(CC)$(PDP15_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(S3_LIB) : $(S3_SOURCE) + $! + $! Building The $(S3_LIB) Library. + $! + $ $(CC)$(S3_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(SDS_LIB) : $(SDS_SOURCE) + $! + $! Building The $(SDS_LIB) Library. + $! + $ $(CC)$(SDS_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX_LIB) : $(VAX_SOURCE) + $! + $! Building The $(VAX_LIB) Library. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(VAX_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB1) : $(VAX780_SOURCE1) + $! + $! Building The $(VAX780_LIB1) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB2) : $(VAX780_SOURCE2) + $! + $! Building The $(VAX780_LIB2) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PCAP_LIB) : $(PCAP_SOURCE) + $! + $! Building The $(PCAP_LIB) Library. + $! + $ SET DEFAULT $(PCAP_DIR) + $ @VMS_PCAP $(DEBUG) + $ SET DEFAULT [--] + $ IF (F$SEARCH("$(PCAP_LIB)").NES."") THEN - + DELETE $(PCAP_LIB); + $ COPY $(PCAP_DIR)PCAP.OLB $(PCAP_LIB) + $ DELETE/NOLOG/NOCONFIRM $(PCAP_DIR)*.OBJ;*,$(PCAP_DIR)*.OLB;* + +# +# If Not On VAX, Build The IBM 7094 Library. +# +.IF ALPHA_OR_IA64 +$(I7094_LIB) : $(I7094_SOURCE) + $! + $! Building The $(I7094_LIB) Library. + $! + $ $(CC)$(I7094_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(I7094_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)I7094-$(ARCH).OLB Library On VAX. +.ENDIF + +# +# Individual Simulator Builds. +# +ALTAIR : $(SIMH_LIB) $(ALTAIR_LIB) + $! + $! Building The $(BIN_DIR)ALTAIR-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIR_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIR-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIR_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ALTAIRZ80 : $(SIMH_LIB) $(ALTAIRZ80_LIB) + $! + $! Building The $(BIN_DIR)ALTAIRZ80-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIRZ80-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIRZ80_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +ECLIPSE : $(SIMH_LIB) $(ECLIPSE_LIB) + $! + $! Building The $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ECLIPSE_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ECLIPSE-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ECLIPSE_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +ECLIPSE : + $! Sorry, Can't Build $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +GRI : $(SIMH_LIB) $(GRI_LIB) + $! + $! Building The $(BIN_DIR)GRI-$(ARCH).EXE Simulator. + $! + $ $(CC)$(GRI_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)GRI-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(GRI_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +LGP : $(SIMH_LIB) $(LGP_LIB) + $! + $! Building The $(BIN_DIR)LGP-$(ARCH).EXE Simulator. + $! + $ $(CC)$(LGP_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)LGP-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(LGP_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +H316 : $(SIMH_LIB) $(H316_LIB) + $! + $! Building The $(BIN_DIR)H316-$(ARCH).EXE Simulator. + $! + $ $(CC)$(H316_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)H316-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(H316_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +HP2100 : $(SIMH_LIB) $(HP2100_LIB) + $! + $! Building The $(BIN_DIR)HP2100-$(ARCH).EXE Simulator. + $! + $ $(CC)$(HP2100_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)HP2100-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(HP2100_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1401 : $(SIMH_LIB) $(I1401_LIB) + $! + $! Building The $(BIN_DIR)I1401-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1401_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1401-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1401_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1620 : $(SIMH_LIB) $(I1620_LIB) + $! + $! Building The $(BIN_DIR)I1620-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1620_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1620-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1620_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +IBM1130 : $(SIMH_LIB) $(IBM1130_LIB) + $! + $! Building The $(BIN_DIR)IBM1130-$(ARCH).EXE Simulator. + $! + $ $(CC)$(IBM1130_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)IBM1130-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(IBM1130_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID16 : $(SIMH_LIB) $(ID16_LIB) + $! + $! Building The $(BIN_DIR)ID16-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID16_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID16-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID16_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID32 : $(SIMH_LIB) $(ID32_LIB) + $! + $! Building The $(BIN_DIR)ID32-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID32_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID32-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID32_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +NOVA : $(SIMH_LIB) $(NOVA_LIB) + $! + $! Building The $(BIN_DIR)NOVA-$(ARCH).EXE Simulator. + $! + $ $(CC)$(NOVA_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)NOVA-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(NOVA_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP1 : $(SIMH_LIB) $(PDP1_LIB) + $! + $! Building The $(BIN_DIR)PDP1-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP1_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP1-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP1_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP4 : $(SIMH_LIB) $(PDP4_LIB) + $! + $! Building The $(BIN_DIR)PDP4-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP4_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP4-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP4_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP7 : $(SIMH_LIB) $(PDP7_LIB) + $! + $! Building The $(BIN_DIR)PDP7-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP7_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP7-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP7_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP8 : $(SIMH_LIB) $(PDP8_LIB) + $! + $! Building The $(BIN_DIR)PDP8-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP8_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP8-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP8_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP9 : $(SIMH_LIB) $(PDP9_LIB) + $! + $! Building The $(BIN_DIR)PDP9-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP9_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP9-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP9_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +PDP10 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP10_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP10-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP10_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP10-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP10_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +PDP10 : + $! Sorry, Can't Build $(BIN_DIR)PDP10-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +PDP11 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP11_LIB1) $(PDP11_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP11-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP11_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP11-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP11_LIB1)/LIBRARY,$(PDP11_LIB2)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP15 : $(SIMH_LIB) $(PDP15_LIB) + $! + $! Building The $(BIN_DIR)PDP15-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP15_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP15-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP15_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +S3 : $(SIMH_LIB) $(S3_LIB) + $! + $! Building The $(BIN_DIR)S3-$(ARCH).EXE Simulator. + $! + $ $(CC)$(S3_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)S3-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(S3_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +SDS : $(SIMH_LIB) $(SDS_LIB) + $! + $! Building The $(BIN_DIR)SDS-$(ARCH).EXE Simulator. + $! + $ $(CC)$(SDS_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)SDS-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(SDS_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX : $(SIMH_LIB) $(PCAP_LIBD) $(VAX_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(VAX_LIB)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX780 : $(SIMH_LIB) $(PCAP_LIBD) $(VAX780_LIB1) $(VAX780_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX780-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX780-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,- + $(VAX780_LIB1)/LIBRARY,$(VAX780_LIB2)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The IBM 7094 Simulator. +# +.IF ALPHA_OR_IA64 +I7094 : $(SIMH_LIB) $(I7094_LIB) + $! + $! Building The $(BIN_DIR)I7094-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I7094_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I7094-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I7094_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +I7094 : + $! Sorry, Can't Build $(BIN_DIR)I7094-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +# +# PCAP VCI Components +# +$(PCAP_VCI) : $(PCAP_VCMDIR)PCAPVCM.EXE + $! + $! Installing the PCAP VCI Execlet in SYS$LOADABLE_IMAGES + $! + $ COPY $(PCAP_VCMDIR)PCAPVCM.EXE SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +$(PCAP_VCMDIR)PCAPVCM.EXE : $(PCAP_VCM_SOURCES) + $! + $! Building The PCAP VCI Execlet + $! + $ @SYS$DISK:[.PCAP-VMS.PCAPVCM]BUILD_PCAPVCM + $ DELETE/NOLOG/NOCONFIRM $(PCAP_VCMDIR)*.OBJ;*,$(PCAP_VCMDIR)*.MAP;* diff --git a/samples/Module Management System/spline_descrip.mms b/samples/Module Management System/spline_descrip.mms new file mode 100644 index 00000000..2f81cdb0 --- /dev/null +++ b/samples/Module Management System/spline_descrip.mms @@ -0,0 +1,31 @@ +! +! $Id: descrip.mms 35 2008-01-08 21:37:42Z tmr $ +! +! Project: LISP -- The LISP Interpreter +! Created: 22-DEC-2008 18:35 +! Author: tmr + +cc = cc +cflags = /define="_VMS_=1" - +/WARN=DISABLE=(ZERODIV,FLOATOVERFL,NOMAINUFLO) - +/IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE +core = LISP_CORE +main = LISP_MAIN +exec = [.bin]LISP +clib = SYS$LIBRARY:VAXCRTL +head = LISP_CORE +objs = $(core).obj, $(main).obj + +$(exec) : $(objs) + DEFINE/NOLOG LNK$LIBRARY $(clib) + LINK/EXEC=$(exec) $(objs) + DEASSIGN LNK$LIBRARY + +$(core).obj : $(core).c, $(head).h + +$(main).obj : $(main).c, $(head).h + +clean : + del *.obj;* + del *.exe;* + diff --git a/samples/Module Management System/xv_makefile.mms b/samples/Module Management System/xv_makefile.mms new file mode 100644 index 00000000..b419dd80 --- /dev/null +++ b/samples/Module Management System/xv_makefile.mms @@ -0,0 +1,271 @@ +# MMS Description file for xv +# Written by Rick Dyson (dyson@iowasp.physics.uiowa.edu) +# Last Modified: 30-APR-1992 for v2.21 +# 5-OCT-1992 for v2.21 (export.lcs.mit.edu version +# of xv-2.21 seemed to change about +# 25-Sep-1992 without version number +# changing. +# 8-FEB-1993 for v2.21b +# ALPHA support is in ALPHA.MMS +# 2-MAR-1993 for v3.00 +# 15-APR-1993 for v3.00 (DEC C changes) +# 25-MAY-1993 merged ALPHA.MMS and MAKEFILE.MMS +# 27-APR-1994 for v3.01 +# 23-DEC-1994 for v3.10 +# +# Modeled after the original Unix Makefile for xv +# Most of the Unix comments have been left intact to help debug any +# problems. + + +# BE SURE TO SET THIS TO YOUR SITE'S DESTINATION DIRECTORY...!!! +BINDIR = Sys$Disk:[] + +# your C compiler (and options) of choice +# Remember: if you change the C compiler (to gcc, or whatever), be sure to +# do the same thing to the Makefile in the 'jpeg' and 'tiff' subdirectories +# +# For ALPHA/DEC C users, you must add a MACRO qualifier to the +# command line, i.e., +# MMS /Description = Makefile.mms /Macro = ("ALPHA=1") +# +# For VAX/DEC C users, you must add a MACRO qualifier to the +# command line, i.e., +# MMS /Description = Makefile.mms /Macro = ("DECC=1") +# +# Users still using the non-MOTIF DECWindows (i.e., XUI) should also +# add another macro of "DEC_XUI=1" + +CC = cc + + +################ CONFIGURATION OPTIONS ################# + +# if, for whatever reason, you're unable to get the JPEG library to compile +# on your machine, *COMMENT OUT* the following lines. +# +# Also, comment out the JPEGLIB dependancy below. +# +# VMS MMS USERS!!! +# +# if you don't use the JPEG package as supplied with XV, you +# will need fill in the complete directory specifications for JPEGDIR. +# +JPEG = ,HAVE_JPEG +JPEGDIR = [.JPEG] +JPEGLIB = $(JPEGDIR)LIBJPEG.OLB +JPEGINCLUDE = ,$(JPEGDIR) + + +# if, for whatever reason, you're unable to get the TIFF library to compile +# on your machine, *COMMENT OUT* the following lines +# +# Also, comment out the LIBTIFF dependancy at the end of this Makefile +# +# if you don't use the TIFF package as supplied with XV, you +# will need to fill in the complete directory specifications for TIFFDIR. +# +TIFF = ,HAVE_TIFF +TIFFDIR = [.TIFF] +TIFFLIB = $(TIFFDIR)LIBTIFF.OLB +TIFFINCLUDE = ,$(TIFFDIR) + + +# if, for whatever reason, you're unable to get the PDS/VICAR support +# to compile (xvpds.c, and vdcomp.c), *COMMENT OUT* the following line, +# and also remove 'vdcomp' from the 'all:' dependancy +PDS = ,HAVE_PDS + + +# If you are still using the DECWindows XUI interface, uncomment the +# next line. This will help stop the "window creep" problem with this +# window mananager +.ifdef DEC_XUI +XUI = ,HAVE_XUI +.endif + +DEFS = /Define = (VMS$(JPEG)$(PDS)$(TIFF)$(TIMERS)$(XUI)) +INCS = /Include = ([]$(JPEGINCLUDE)$(TIFFINCLUDE)) + +.ifdef ALPHA +OPTIMIZE = /Optimize /Standard = VAXC +OPTS = Sys$Disk:[]DECC_OPTIONS.OPT +.else +.ifdef DECC +OPTIMIZE = /Optimize /Standard = VAXC /Warnings = NoInformationals +OPTS = Sys$Disk:[]DECC_OPTIONS.OPT +.else +OPTIMIZE = /Optimize +OPTS = Sys$Disk:[]VAXC_OPTIONS.OPT +.endif +.endif +DEBUG = /NoDebug + +CFLAGS = $(CFLAGS) $(DEFS) $(INCS) $(DEBUG) $(OPTIMIZE) +LINKFLAGS = $(LINKFLAGS) $(DEBUG) + +XVLIB = LIBXV.OLB + +OBJS = xv.obj,xvevent.obj,xvroot.obj,xvmisc.obj,xvimage.obj,xvcolor.obj, \ + xvsmooth.obj,xv24to8.obj,xvgif.obj,xvpm.obj,xvinfo.obj,xvctrl.obj, \ + xvscrl.obj,xvalg.obj,xvgifwr.obj,xvdir.obj,xvbutt.obj,xvpbm.obj, \ + xvxbm.obj,xvgam.obj,xvbmp.obj,xvdial.obj,xvgraf.obj,xvsunras.obj, \ + xvjpeg.obj,xvps.obj,xvpopup.obj,xvdflt.obj,xvtiff.obj,xvtiffwr.obj, \ + xvpds.obj,xvrle.obj,xviris.obj,xvgrab.obj,xvbrowse.obj,xviff.obj, \ + xvtext.obj,xvpcx.obj,xvtarga.obj,xvxpm.obj,xvcut.obj,xvxwd.obj, \ + xvfits.obj,vms.obj + + +BITS = [.Bits]annot.h + +MISC = readme. changelog. ideas. + +.first +.ifdef ALPHA + @- Define /NoLog Sys DECC$Library_Include +.else +.ifdef DECC + @- Define /NoLog Sys DECC$Library_Include +.else + @- Define /NoLog Sys Sys$Library +.endif + @- Define /NoLog X11 DECW$Include + @- XVDIR = F$Environment ("Default") +.endif + +all : $(BITS) $(OPTS) lib xv bggen decompress xcmap xvpictoppm help + ! All Finished with the VMS build of XV (v3.10) + +lib : $(JPEGLIB) $(TIFFLIB) $(XVLIB) + @ Continue + +xv : xv.exe + @ Continue + +bggen : bggen.exe + @ Continue + +xcmap : xcmap.exe + @ Continue + +xvpictoppm : xvpictoppm.exe + @ Continue + +help : xv.hlb + @ Continue + +decompress : decompress.exe vdcomp.exe + @ Continue + +bggen.exe : bggen.obj $(XVLIB) $(OPTS) + $(LINK) $(LINKFLAGS) bggen.obj,$(XVLIB)/Library,$(OPTS)/Option + +xcmap.exe : xcmap.obj + $(LINK) $(LINKFLAGS) xcmap.obj,$(XVLIB)/Library,$(OPTS)/Option + +xvpictoppm.exe : xvpictoppm.obj + $(LINK) $(LINKFLAGS) xvpictoppm.obj,$(XVLIB)/Library,$(OPTS)/Option + +xv.exe : xv.obj $(XVLIB) $(JPEGLIB) $(TIFFLIB) $(OPTS) + $(LINK) $(LINKFLAGS) xv.obj,$(XVLIB)/Library,$(JPEGLIB)/Library,$(TIFFLIB)/Library,$(OPTS)/Option + +$(JPEGLIB) : + Set Default $(JPEGDIR) +.ifdef ALPHA + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBJPEG.OLB +.else + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBJPEG.OLB +.endif + Set Default 'XVDIR' + +$(TIFFLIB) : + Set Default $(TIFFDIR) +.ifdef ALPHA + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB +.else +.ifdef DECC + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB +.else + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBTIFF.OLB +.endif +.endif + Set Default 'XVDIR' + +$(XVLIB) : $(OBJS) + If "''F$Search ("$(XVLIB)")'" .eqs. "" Then Library /Create $(XVLIB) + Library /Replace $(XVLIB) $(OBJS) + +decompress.exe : decompress.obj + $(LINK) $(LINKFLAGS) decompress.obj,$(OPTS)/Option + +vdcomp.exe : vdcomp.obj + $(LINK) $(LINKFLAGS) vdcomp.obj,$(OPTS)/Option + +[.Bits]annot.h : + Set Default [.Bits] + Set Protection = Owner:RWED *. + Rename *. *.H + Set Protection = Owner:RWE *.H + Set Default [-] + +# various dependencies +$(OBJS) : xv.h config.h +xv.hlb : xv.hlp +vms.obj : includes.h dirent.h + +# +# Build the linker options file for OpenVMS VAX and VAX C. +# +Sys$Disk:[]VAXC_Options.opt : + @ Open /Write TMP VAXC_Options.opt + @ Write TMP "! XV (v3.10) Linker Options list for VMS VAX C" + @ Write TMP "!" + @ Write TMP "Sys$Disk:[]LibXV.OLB /Library" + @ Write TMP "Sys$Disk:[.JPEG]LibJPEG.OLB /Library" + @ Write TMP "Sys$Disk:[.TIFF]LibTIFF.OLB /Library" +.ifdef DEC_XUI + @ Write TMP "!" + @ Write TMP "! These were appropriate for VAX C and XUI in the past." + @ Write TMP "Sys$Library:DECW$DWTLibShr.exe /Share + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share + @ Write TMP "!You may need the next line for VAX C (v3.2-044)" + @ Write TMP "!But you don't for DEC C (v4.0-000)" + @ Write TMP "Sys$Library:VAXCRTL.EXE /Share" +.else + @ Write TMP "!" + @ Write TMP "! Some of the following libraries may not be available on" + @ Write TMP "! older systems, namely XUI or Motif v1.0/1.1" + @ Write TMP "! I know they are available for OpenVMS v6.1/Motif v1.2." + @ Write TMP "! If you get a report that they can't be found," + @ Write TMP "! comment them out and try again..." + @ Write TMP "Sys$Library:DECW$DXMLibShr12.exe /Share + @ Write TMP "Sys$Library:DECW$XMLibShr12.exe /Share + @ Write TMP "Sys$Library:DECW$XTLibShrR5.exe /Share" + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share +.endif + @ Close TMP + +Sys$Disk:[]DECC_Options.opt : + @ Open /Write TMP DECC_Options.opt + @ Write TMP "! XV (v3.10) Linker Options list for VMS DEC C" + @ Write TMP "!" + @ Write TMP "Sys$Disk:[]LibXV.olb /Library" + @ Write TMP "Sys$Disk:[.JPEG]LibJPEG.olb /Library" + @ Write TMP "Sys$Disk:[.TIFF]LibTIFF.olb /Library" + @ Write TMP "Sys$Library:DECW$XTShr.exe /Share" + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share" + @ Close TMP + +install : xv.exe vdcomp.exe bggen.exe decompress.exe + Copy *.exe $(BINDIR) + +clean : + @- Set Protection = Owner:RWED *.obj,*.*;-1 + - Delete /NoConfirm /NoLog *.obj;*,*.exe;*,*.log;*,*.olb;*,*.hlb;* + - Purge /NoConfirm /NoLog + Set Default [.JPEG] + $(MMS) /Description = MAKEFILE.MMS clean + - Delete /NoConfirm /NoLog *.olb;* + Set Default [-.TIFF] + $(MMS) /Description = MAKEFILE.MMS clean + Set Default [-] diff --git a/samples/NCL/PrnOscPat_driver.ncl b/samples/NCL/PrnOscPat_driver.ncl new file mode 100644 index 00000000..9a4ba134 --- /dev/null +++ b/samples/NCL/PrnOscPat_driver.ncl @@ -0,0 +1,109 @@ +undef("PrnOscPat_driver") +function PrnOscPat_driver(eof[*][*][*]:numeric, eof_ts[*][*]:numeric, kPOP[1]:integer) +; ================================================================= +; compute Principal Oscillation Patterns (POPs) +; ================================================================= +local dim_ts, dim_eof, neof, ntim, nlat, mlon, dnam_ts, dnam_eof, neof, j \ + , cov0, cov1, cov0_inverse, A, z, Z, pr, pi, zr, zi, mean, stdev \ + , evlr, eigi, eigr +begin + + dim_ts = dimsizes(eof_ts) ; (neof,ntim) + dim_eof = dimsizes(eof) ; (neof,nlat,mlon) + + ntim = dim_ts(1) + neof = dim_eof(0) + nlat = dim_eof(1) + mlon = dim_eof(2) + + dnam_ts = getvardims(eof_ts) ; dimension names + dnam_eof= getvardims(eof) ; used at end for meta data + +; ================================================================= +; lag-0 and lag-1 matrices +; ================================================================= + + if (get_ncl_version().eq."6.1.2") then ; bug in 6.1.2 + cov0 = covcorm(eof_ts,(/1,0/)) ; lag-0 covariance matrix + else + cov0 = covcorm(eof_ts,(/0,1/)) ; lag-0 covariance matrix (n x n) + end if + ; either + cov1 = covcorm_xy(eof_ts, eof_ts, (/0,1,0/)) ; lag-1 + ;cov1 = covcorm_xy(eof_ts(:,0:ntim-2) \ ; alternative, brute force + ; ,eof_ts(:,1:ntim-1), (/0,0,0/)) + ;printVarSummary(cov1) + +; ================================================================= +; matrix A contains information for evolution of the POP system. +; POPs are eigenvectors of A. +; ================================================================= + + cov0_inverse = inverse_matrix(cov0) + A = cov1#inverse_matrix(cov0) ; [*][*] => neof x neof + +; ================================================================= +; NCL 6.1.1 of dgeevx: evlr(2,2,N,N) ; (left(0)/right(1), real(0)/imag(1),:,:) +; Eigenvalues are returned as attributes: eigi = evlr@eigi ; eigr = evlr@eigr +; ================================================================= + + evlr = dgeevx_lapack(A, "B", "V", "V", "B", False) + +; ================================================================= +; POP time series from eigenvalues and right eigenvectors +; ================================================================= + ;PR = (/ evlr(1,0,:,:) /) ; right ev (1), real part (0) + ;PI = (/ evlr(1,1,:,:) /) ; right ev (1), imag part (1) + ; kPOP is what we want; use righteigenvector + pr = (/ evlr(1,0,kPOP-1,:) /) ; right ev (1), real part (0), row 'kPOP-1' + pi = (/ evlr(1,1,kPOP-1,:) /) ; right ev (1), imag part (1), row 'kPOP-1' + + z = inverse_matrix( (/ (/sum(pr*pr), sum(pr*pi)/) \ + , (/sum(pr*pi), sum(pi*pi)/) /))#(/pr,pi/)#eof_ts + + ; complex conjugate + z = (/z(0,:), -z(1,:)/) ; real & imag series + z = dim_rmvmean_n(z,1) + mean = dim_avg_n(z,1) ; calculate mean + stdev= dim_stddev_n(z,1) ; calculate stdev + z = dim_standardize_n(z,1,1) ; standardize time series + + z!0 = "nPOP" ; add meta data + z!1 = dnam_ts(1) + z&nPOP = (/0,1/) + z&$dnam_ts(1)$ = eof_ts&$dnam_ts(1)$ + z@stdev = stdev + z@mean = mean + z@long_name = "POP timeseries" + ;printVarSummary(z) + +; ================================================================= +; POP spatial patterns +; ================================================================= + + zr = pr(0)*eof(0,:,:) ; construct POP spatial domain + zi = pi(0)*eof(0,:,:) + do j=1,neof-1 + zr = zr + pr(j)*eof(j,:,:) + zi = zi + pi(j)*eof(j,:,:) + end do + + Z = (/zr*stdev(0), -zi*stdev(1)/) ; scale patterns by time series stdev + + Z!0 = "nPOP" ; add meta data + Z!1 = dnam_eof(1) + Z!2 = dnam_eof(2) + + Z&nPOP = (/0,1/) + Z&$dnam_eof(1)$ = eof&$dnam_eof(1)$ + Z&$dnam_eof(2)$ = eof&$dnam_eof(2)$ + Z@long_name = "POP pattern" + ;printVarSummary(Z) + +; ================================================================= +; return POP time series and POP spatial patterns as a +; variable of type 'list' which contains 2 variables +; ================================================================= + + return( [/z, Z/] ) ; this is type "list" +end diff --git a/samples/NCL/WRF_static_2.ncl b/samples/NCL/WRF_static_2.ncl new file mode 100644 index 00000000..3f2eefd6 --- /dev/null +++ b/samples/NCL/WRF_static_2.ncl @@ -0,0 +1,115 @@ +;************************************************* +; WRF static: panel different variables +;************************************************ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" +begin +;************************************************ +; open file and read in data +;************************************************ + f = addfile("static.wrfsi.nc", "r") +;************************************************ +; Read variables +;************************************************ + use = f->use(0,0,:,:) ; land use dominant category + stl = f->stl(0,0,:,:) ; top layer (0-30cm) dom cat soiltype + sbl = f->sbl(0,0,:,:) ; bottom layer (30-90cm) dom cat soiltype + lat2d = f->lat(0,0,:,:) + lon2d = f->lon(0,0,:,:) + lsMask= f->lnd(0,0,:,:) ; land (1) water (0) mas + +;************************************************ +; Use mask function to set all ocean areas to _FillValue +;************************************************ + use = mask(use,lsMask,1) + stl = mask(stl,lsMask,1) + sbl = mask(sbl,lsMask,1) + +;************************************************ +; Associate 2D coordinates with variables for plotting +;************************************************ + use@lat2d = lat2d + use@lon2d = lon2d + stl@lat2d = lat2d + stl@lon2d = lon2d + sbl@lat2d = lat2d + sbl@lon2d = lon2d + +;************************************************ +; The file should be examined via: ncdump -v grid_type static.wrsi +; This will print the print type. then enter below. +;************************************************ + projection = "mercator" + +;************************************************ +; create plots +;************************************************ + wks = gsn_open_wks("ps" ,"WRF_static") ; ps,pdf,x11,ncgm,eps + gsn_define_colormap(wks ,"BlAqGrYeOrReVi200"); choose colormap + + res = True ; plot mods desired + res@gsnSpreadColors = True ; use full range of colormap + res@cnFillOn = True ; color plot desired + res@cnLinesOn = False ; turn off contour lines + res@cnLineLabelsOn = False ; turn off contour labels + res@cnLevelSpacingF = 1 ; manually specify interval + res@cnFillMode = "RasterFill" ; activate raster mode + res@lbLabelAutoStride = True ; let NCL figure lb stride + +;************************************************ +; Turn on lat / lon labeling +;************************************************ +;;res@pmTickMarkDisplayMode = "Always" ; turn on tickmarks + + dimll = dimsizes(lat2d) + nlat = dimll(0) + mlon = dimll(1) + + res@mpProjection = projection + res@mpLimitMode = "Corners" + res@mpLeftCornerLatF = lat2d(0,0) + res@mpLeftCornerLonF = lon2d(0,0) + res@mpRightCornerLatF = lat2d(nlat-1,mlon-1) + res@mpRightCornerLonF = lon2d(nlat-1,mlon-1) + + res@mpCenterLonF = f->LoV ; set center logitude + + if (projection.eq."LambertConformal") then + res@mpLambertParallel1F = f->Latin1 + res@mpLambertParallel2F = f->Latin2 + res@mpLambertMeridianF = f->LoV + end if + + res@mpFillOn = False ; turn off map fill + res@mpOutlineDrawOrder = "PostDraw" ; draw continental outline last + res@mpOutlineBoundarySets = "GeophysicalAndUSStates" ; state boundaries + +;;res@tfDoNDCOverlay = True ; True only for 'native' grid + res@gsnAddCyclic = False ; data are not cyclic + +;************************************************ +; allocate array for 3 plots +;************************************************ + plts = new (3,"graphic") + +;************************************************ +; Tell NCL not to draw or advance frame for individual plots +;************************************************ + res@gsnDraw = False ; (a) do not draw + res@gsnFrame = False ; (b) do not advance 'frame' + + plts(0) = gsn_csm_contour_map(wks,use,res) + plts(1) = gsn_csm_contour_map(wks,stl,res) + plts(2) = gsn_csm_contour_map(wks,sbl,res) +;************************************************ +; create panel: panel plots have their own set of resources +;************************************************ + resP = True ; modify the panel plot + resP@txString = "Land Use and Soil Type" + resP@gsnMaximize = True ; maximize panel area + resP@gsnPanelRowSpec = True ; specify 1 top, 2 lower level + gsn_panel(wks,plts,(/1,2/),resP) ; now draw as one plot + +end + diff --git a/samples/NCL/WRF_track_1.ncl b/samples/NCL/WRF_track_1.ncl new file mode 100644 index 00000000..9d818519 --- /dev/null +++ b/samples/NCL/WRF_track_1.ncl @@ -0,0 +1,160 @@ +;******************************************************** +; Plot storm stracks from wrfout files. +;******************************************************** +; +; JUN-18-2005 +; So-Young Ha (MMM/NCAR) +; SEP-01-2006 +; Slightly modified by Mary Haley to add some extra comments. +; =========================================== + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl" + + +begin + +; DATES + date = (/1512,1600,1612,1700,1712,1800,1812,1900/) + ndate = dimsizes(date) + + sdate = sprinti("%4.0i",date) + +; Experiment name (for legend) + EXP = (/"EXP_I"/) ; (/"EXP_I","EXP_II","EXP_III"/) + nexp = dimsizes(EXP) + +; To get lat/lon info. + + a = addfile("wrfout_d01_2003-07-15_00:00:00.nc","r") + + lat2d = a->XLAT(0,:,:) + lon2d = a->XLONG(0,:,:) + dimll = dimsizes(lat2d) + nlat = dimll(0) + mlon = dimll(1) + +; Sea Level Pressure + slp = wrf_user_getvar(a,"slp",0) + dims = dimsizes(slp) + +; Array for track + time = new(ndate,string) + imin = new(ndate,integer) + jmin = new(ndate,integer) + smin = new(ndate,integer) + +; ======= +; ndate +; ======= + fs = systemfunc("ls wrfout*00") + nfs= dimsizes(fs) + if(nfs .ne. ndate) then + print("Check input data:"+nfs+" .ne. "+ndate) + end if + + do ifs=0,nfs-1 + f = addfile(fs(ifs)+".nc","r") + time(ifs) = wrf_user_list_times(f) +; print(time(ifs)) + slp2d = wrf_user_getvar(f,"slp",0) + +; We need to convert 2-D array to 1-D array to find the minima. + slp1d = ndtooned(slp2d) + smin(ifs) = minind(slp1d) + +; Convert the index for 1-D array back to the indeces for 2-D array. + minij = ind_resolve(ind(slp1d.eq.min(slp2d)),dims) + imin(ifs) = minij(0,0) + jmin(ifs) = minij(0,1) + +; print(time(ifs)+" : "+min(slp2d)+" ("+imin(ifs)+","+jmin(ifs)+")") + end do +; + +; Graphics section + + wks=gsn_open_wks("ps","track") ; Open PS file. + gsn_define_colormap(wks,"BlGrYeOrReVi200") ; Change color map. + + res = True + res@gsnDraw = False ; Turn off draw. + res@gsnFrame = False ; Turn off frame advance. + res@gsnMaximize = True ; Maximize plot in frame. + + res@tiMainString = "Hurricane Isabel" ; Main title + + WRF_map_c(a,res,0) ; Set up map resources + ; (plot options) + plot = gsn_csm_map(wks,res) ; Create a map. + +; Set up resources for polymarkers. + gsres = True + gsres@gsMarkerIndex = 16 ; filled dot + ;gsres@gsMarkerSizeF = 0.005 ; default - 0.007 + cols = (/5,160,40/) + +; Set up resources for polylines. + res_lines = True + res_lines@gsLineThicknessF = 3. ; 3x as thick + + dot = new(ndate,graphic) ; Make sure each gsn_add_polyxxx call + line = new(ndate,graphic) ; is assigned to a unique variable. + +; Loop through each date and add polylines to the plot. + do i = 0,ndate-2 + res_lines@gsLineColor = cols(0) + xx=(/lon2d(imin(i),jmin(i)),lon2d(imin(i+1),jmin(i+1))/) + yy=(/lat2d(imin(i),jmin(i)),lat2d(imin(i+1),jmin(i+1))/) + line(i) = gsn_add_polyline(wks,plot,xx,yy,res_lines) + end do + + lon1d = ndtooned(lon2d) + lat1d = ndtooned(lat2d) + +; Loop through each date and add polymarkers to the plot. + do i = 0,ndate-1 + print("dot:"+lon1d(smin(i))+","+lat1d(smin(i))) + gsres@gsMarkerColor = cols(0) + dot(i)=gsn_add_polymarker(wks,plot,lon1d(smin(i)),lat1d(smin(i)),gsres) + end do + +; Date (Legend) + txres = True + txres@txFontHeightF = 0.015 + txres@txFontColor = cols(0) + + txid1 = new(ndate,graphic) +; Loop through each date and draw a text string on the plot. + do i = 0, ndate-1 + txres@txJust = "CenterRight" + ix = smin(i) - 4 + print("Eye:"+ix) + if(i.eq.1) then + txres@txJust = "CenterLeft" + ix = ix + 8 + end if + txid1(i) = gsn_add_text(wks,plot,sdate(i),lon1d(ix),lat1d(ix),txres) + end do + +; Add marker and text for legend. (Or you can just use "pmLegend" instead.) + txres@txJust = "CenterLeft" + + txid2 = new(nexp,graphic) + pmid2 = new(nexp,graphic) + do i = 0,nexp-1 + gsres@gsMarkerColor = cols(i) + txres@txFontColor = cols(i) + ii = ((/129,119,109/)) ; ilat + jj = ((/110,110,110/)) ; jlon + ji = ii*mlon+jj ; col x row + pmid2(i) = gsn_add_polymarker(wks,plot,lon1d(ji(i)),lat1d(ji(i)),gsres) + txid2(i) = gsn_add_text(wks,plot,EXP(i),lon1d(ji(i)+5),lat1d(ji(i)),txres) + end do + + draw(plot) + frame(wks) +end diff --git a/samples/NCL/cru_8.ncl b/samples/NCL/cru_8.ncl new file mode 100644 index 00000000..465a9f85 --- /dev/null +++ b/samples/NCL/cru_8.ncl @@ -0,0 +1,129 @@ +;***************************************************** +; cru_8.ncl +; +; Concepts illustrated: +; - Plotting CRU (Climate Research Unit)/ BADC data +; - Selecting a sub-period +; - calculating a climatology +; - Drawing raster contours; very basic graphics +; +;***************************************************** + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; not needed 6.20 onward +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + +; create references (pointers) to the files + + diri = "./" + fcld = addfile(diri+"cru_ts3.21.1901.2012.cld.dat.nc", "r") + fdtr = addfile(diri+"cru_ts3.21.1901.2012.dtr.dat.nc", "r") + ffrs = addfile(diri+"cru_ts3.21.1901.2012.frs.dat.nc", "r") + fpet = addfile(diri+"cru_ts3.21.1901.2012.pet.dat.nc", "r") + fpre = addfile(diri+"cru_ts3.21.1901.2012.pre.dat.nc", "r") + ftmn = addfile(diri+"cru_ts3.21.1901.2012.tmn.dat.nc", "r") + ftmp = addfile(diri+"cru_ts3.21.1901.2012.tmp.dat.nc", "r") + ftmx = addfile(diri+"cru_ts3.21.1901.2012.tmx.dat.nc", "r") + fvap = addfile(diri+"cru_ts3.21.1901.2012.vap.dat.nc", "r") + fwet = addfile(diri+"cru_ts3.21.1901.2012.wet.dat.nc", "r") + +; specify start & last dates (arbitrary) + + ymStrt = 199101 + ymLast = 200012 + +; get index values of start/lat dates + + time = fcld->time + yyyymm = cd_calendar(time, -1) + + ntStrt = ind(yyyymm.eq.ymStrt) ; index values + ntLast = ind(yyyymm.eq.ymLast) + +; read time segment + + cld = fcld->cld(ntStrt:ntLast,:,:) + dtr = fdtr->dtr(ntStrt:ntLast,:,:) + frs = ffrs->frs(ntStrt:ntLast,:,:) + pet = fpet->pet(ntStrt:ntLast,:,:) + pre = fpre->pre(ntStrt:ntLast,:,:) + tmn = ftmn->tmn(ntStrt:ntLast,:,:) + tmp = ftmp->tmp(ntStrt:ntLast,:,:) + tmx = ftmx->tmx(ntStrt:ntLast,:,:) + vap = fvap->vap(ntStrt:ntLast,:,:) + wet = fwet->wet(ntStrt:ntLast,:,:) + + printVarSummary(cld) ; [time | 120] x [lat | 360] x [lon | 720] + +; calculate monthly climatologies + + cldclm = clmMonTLL(cld) + dtrclm = clmMonTLL(dtr) + frsclm = clmMonTLL(frs) + petclm = clmMonTLL(pet) + preclm = clmMonTLL(pre) + tmnclm = clmMonTLL(tmn) + tmpclm = clmMonTLL(tmp) + tmxclm = clmMonTLL(tmx) + vapclm = clmMonTLL(vap) + wetclm = clmMonTLL(wet) + + + printVarSummary(cldclm) ; [month | 12] x [lat | 360] x [lon | 720] + +;************************************ +; create plots ... very simple +;************************************ + + nt = 6 + month = "July" + yrStrt = ymStrt/100 + yrLast = ymLast/100 + title = month+": "+yrStrt+"-"+yrLast + + wks = gsn_open_wks("ps","cru") ; open a ps file + gsn_define_colormap(wks,"ncl_default") ; choose colormap; not needed 6.20 onward + plot = new(2,graphic) ; create graphic array + + res = True + res@cnFillOn = True ; turn on color fill; not needed 6.20 onward + res@cnFillMode = "RasterFill" ; Raster Mode + res@cnLinesOn = False ; Turn off contour lines + + res@gsnDraw = False ; do not draw picture + res@gsnFrame = False ; do not advance frame + res@lbOrientation = "Vertical" ; vertical label bar + + resp = True + resp@gsnMaximize = True ; make ps, eps, pdf large + + resp@txString = title+": CLD, FRS" + plot(0)=gsn_csm_contour_map_ce(wks,cldclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,frsclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": PET, VAP" + plot(0)=gsn_csm_contour_map_ce(wks,petclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,vapclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": TMN, TMX" + plot(0)=gsn_csm_contour_map_ce(wks,tmnclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,tmxclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": TMP, DTR" + plot(0)=gsn_csm_contour_map_ce(wks,tmpclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,dtrclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": WET, PRE" + plot(0)=gsn_csm_contour_map_ce(wks,wetclm(nt,:,:),res) + + ;colors = (/ ... /) + ;res@cnFillPalette = colors ; optional: distinct colors for categories + res@cnLevelSelectionMode = "ExplicitLevels" ; use unequal spacing + res@cnLevels = (/2.0,10,25,37.5,50,75,100,125,150,175,200,300,400,500,750/) + + plot(1)=gsn_csm_contour_map_ce(wks,preclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) diff --git a/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl b/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl new file mode 100644 index 00000000..4efe39ab --- /dev/null +++ b/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl @@ -0,0 +1,20 @@ +;******************** Inputs Regarding Input and Output Data ************************************* + +;netCDFFilePath = "NULL-MYD04_L2.051-MIL2ASAE.0022-AERONET_AOD_L2.2-20112106165049.nc" +;outputFilePath = "plot-output" + +;******************* Inputs Regarding Data Structure *********************************************** + +;lPlotVariablesList = "mean_AERONET_AOD_L2_2_AOD0558intrp_Ames,mean_MIL2ASAE_0022_AOD0866b_Ames" +;rPlotVariablesList = "medn_MYD04_L2_051_AOD0550dpbl_l_Ames" + +;xDimName = "time" +;xDimSize = 365 + +;******************* Inputs Regarding the View Annotations **************************************** + +;title = "MAPSS Time Series" +;yLAxisLabel = "Mean AOD" +;yRAxisLabel = "Median AOD" + +;*******************END INPUTS ******************************************************************** \ No newline at end of file diff --git a/samples/NCL/hdf4sds_7.ncl b/samples/NCL/hdf4sds_7.ncl new file mode 100644 index 00000000..f3aeff77 --- /dev/null +++ b/samples/NCL/hdf4sds_7.ncl @@ -0,0 +1,128 @@ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +;************************************************************** +; User Input +;*************************************************************** + ; INPUT + diri = "./" ; input directory + fili = "wv_LV3_MET08_20050102_12345678_L00013712E00013712.hdf" + + pltDir = "./" ; directory for plot output + sfx = get_file_suffix(fili,1) + ;pltName = sfx@fBase ; output graphic name + pltName = "hdf4sds" + pltType = "ps" + +;*************************************************************** +; End User Input +;*************************************************************** + +;*************************************************************** +; Open SEVIRI L3 'wv' HDF file +;*************************************************************** +; Note the rather unusual data format: flag *prepended* to data value +;*************************************************************** +; integer twc_lv3 ( fakeDim0, fakeDim1 ) +; long_name : total water vapour column + flag +; units : fmmmm +; format : I4 +; valid_range : ( 10000, 38000 ) +; _FillValue : -99 +; legend_01 : f = flag +; legend_02 : f = 1 averaged level 2 values +; legend_03 : f = 2 interpolated from averaged level 2 values +; legend_04 : f = 3 gaps filled with NVAP climatology +; legend_05 : mmmm = water vapour column in mm * 100. as integer +; legend_06 : Example: 11025 means: flag = 1, 10.25 mm water vapour column +; min_lat : -74.75 +; max_lat : 61.75 +; min_lon : -75.25 +; max_lon : 75.25 +; dlat : 0.5 +; dlon : 0.5 +;--------------------------------------------------------------- + + f = addfile (diri+fili, "r") + ifx = f->twc_lv3 ; fmmmm (integer) + printVarSummary(ifx) + + flag = ifx/10000 ; extract flag + ix = ifx - flag*10000 ; extract mmmm + x = ix*0.01 ; scale + +; create meta data for 'x' + + dimx = dimsizes(x) + nlat = dimx(0) ; grid size x(nlat,mlon) + mlon = dimx(1) + + lat = fspan(ifx@min_lat, ifx@max_lat, nlat) + lat@units = "degrees_north" + lon = fspan(ifx@min_lon, ifx@max_lon, mlon) + lon@units = "degrees_east" + + x!0 = "lat" + x!1 = "lon" + x&lat = lat + x&lon = lon + x@long_name = "SEVIRI: Total Water Vapor" + x@units = "mm" + + delete( [/ifx, ix/] ) ; no longer needed + +;*************************************************************** +; Create plot +;*************************************************************** + wks = gsn_open_wks(pltType, pltDir+pltName) + + plot = new (2, "graphic") + + res = True ; plot mods desired + res@gsnAddCyclic = False ; data noty global + res@gsnDraw = False + res@gsnFrame = False + + res@cnFillOn = True ; turn on color fill + res@cnLinesOn = False ; turn of contour lines + res@cnFillMode = "RasterFill" ; Raster Mode + res@cnLinesOn = False ; Turn off contour lines + res@cnLineLabelsOn = False ; Turn off contour lines + res@cnMissingValFillColor= "background" ; "foreground" + + res@mpCenterLonF = 0.5*(min(x&lon) + max(x&lon)) + res@mpMinLatF = min(x&lat) + res@mpMaxLatF = max(x&lat) + res@mpMinLonF = min(x&lon) + res@mpMaxLonF = max(x&lon) + + ;res@lbOrientation = "Vertical" + + plot(0) = gsn_csm_contour_map_ce(wks,x, res) + +; plot flag + + copy_VarCoords(x, flag) + flag@long_name = "Flag" + flag@units = "1=avg(L2), 2=int(L2), 3=NVAP" + print(flag&lat+" "+flag(:,{30})) + + res@cnLevelSelectionMode = "ManualLevels" ; set manual contour levels + res@cnMinLevelValF = 2 ; set min contour level + res@cnMaxLevelValF = 3 ; one less than max + res@cnLevelSpacingF = 1 ; set contour spacing + + res@lbLabelStrings = ispan(1,3,1) ; 1, 2, 3 + res@lbLabelPosition = "Center" ; label position + res@lbLabelAlignment = "BoxCenters" + + res@gsnLeftString = "" + res@gsnRightString = "" + res@gsnCenterString = "flag: 1=avg(L2), 2=int(L2), 3=NVAP" + + plot(1) = gsn_csm_contour_map_ce(wks,flag, res) + + resP = True ; modify the panel plot + resP@txString = fili + resP@gsnMaximize = True + gsn_panel(wks,plot,(/1,2/),resP) ; now draw as one plot diff --git a/samples/NCL/mask_12.ncl b/samples/NCL/mask_12.ncl new file mode 100644 index 00000000..30027c80 --- /dev/null +++ b/samples/NCL/mask_12.ncl @@ -0,0 +1,125 @@ +;---------------------------------------------------------------------- +; mask_12.ncl +; +; Concepts illustrated: +; - Using a worldwide shapefile to create a land/ocean mask +; - Masking a data array based on a geographical area +; - Attaching shapefile polylines to a map plot +; - Attaching lat/lon points to a map using gsn_coordinates +;---------------------------------------------------------------------- +; Downloaded GSHHS shapefiles from: +; +; http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhg/latest/ +; +; Used the "coarsest" one: "GSHHS_shp/c/GSHHS_c_L1.shp". +;---------------------------------------------------------------------- + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "./shapefile_mask_data.ncl" + +;---------------------------------------------------------------------- +; Main code +;---------------------------------------------------------------------- +begin + WRITE_MASK = True + DEBUG = False + +;---Read data to plot and mask + dir = "$NCARG_ROOT/lib/ncarg/data/cdf/" + cdf_prefix = "uv300" + cdf_file = dir + cdf_prefix + ".nc" + fin = addfile(cdf_file,"r") + u = fin->U(1,:,:) +; +; Create a mask array the same size as "u", using +; lat/lon data read off a shapefile. +; + shpfile = "GSHHS_shp/c/GSHHS_c_L1.shp" + opt = True + opt@return_mask = True + + land_mask = shapefile_mask_data(u,shpfile,opt) + +;---Mask "u" against land and ocean. + u_land_mask = where(land_mask.eq.1,u,u@_FillValue) + u_ocean_mask = where(land_mask.eq.0,u,u@_FillValue) + copy_VarMeta(u,u_land_mask) + copy_VarMeta(u,u_ocean_mask) + +;---Start the graphics + wks = gsn_open_wks("ps","mask") + + res = True + + res@gsnMaximize = True ; maximize plot in frame + res@gsnDraw = False ; don't draw plot yet + res@gsnFrame = False ; don't advance frame yet + + res@cnFillOn = True + res@cnLineLabelsOn = False + res@cnLinesOn = False + +;---Make sure both plots have same contour levels + mnmxint = nice_mnmxintvl(min(u),max(u),25,False) + res@cnLevelSelectionMode = "ManualLevels" + res@cnMinLevelValF = mnmxint(0) + res@cnMaxLevelValF = mnmxint(1) + res@cnLevelSpacingF = mnmxint(2) + + res@lbLabelBarOn = False + res@gsnAddCyclic = False + + res@mpFillOn = False + res@mpOutlineOn = False + + res@gsnRightString = "" + res@gsnLeftString = "" + +;---Create plot of original data and attach shapefile outlines + res@tiMainString = "Original data with shapefile outlines" + map_data = gsn_csm_contour_map(wks,u,res) + dum1 = gsn_add_shapefile_polylines(wks,map_data,shpfile,False) + +;---Create plots of masked data + res@tiMainString = "Original data masked against land" + map_land_mask = gsn_csm_contour_map(wks,u_land_mask,res) + res@tiMainString = "Original data masked against ocean" + map_ocean_mask = gsn_csm_contour_map(wks,u_ocean_mask,res) + + if(DEBUG) then + mkres = True +; mkres@gsMarkerSizeF = 0.007 + mkres@gsnCoordsAttach = True + gsn_coordinates(wks,map_data,u,mkres) + mkres@gsnCoordsNonMissingColor = "yellow" + mkres@gsnCoordsMissingColor = "black" + gsn_coordinates(wks,map_land_mask,u_land_mask,mkres) + gsn_coordinates(wks,map_ocean_mask,u_ocean_mask,mkres) + end if + +;---Add shapefile outlines + dum2 = gsn_add_shapefile_polylines(wks,map_land_mask,shpfile,False) + dum3 = gsn_add_shapefile_polylines(wks,map_ocean_mask,shpfile,False) + +;---Draw all three plots on one page + pres = True + pres@gsnMaximize = True + pres@gsnPanelLabelBar = True + gsn_panel(wks,(/map_data,map_land_mask,map_ocean_mask/),(/3,1/),pres) + + if(WRITE_MASK) then + delete(fin) ; Close file before we open again. +; +; Make copy of file so we don't overwrite original. +; This is not necessary, but it's safer. +; + new_cdf_file = cdf_prefix + "_with_mask.nc" + system("/bin/cp " + cdf_file + " " + new_cdf_file) + finout = addfile(new_cdf_file,"w") + filevardef(finout, "land_mask", typeof(land_mask), (/ "lat", "lon" /) ) + finout->land_mask = (/land_mask/) + end if +end + diff --git a/samples/NCL/mcsst_1.ncl b/samples/NCL/mcsst_1.ncl new file mode 100644 index 00000000..338fe26f --- /dev/null +++ b/samples/NCL/mcsst_1.ncl @@ -0,0 +1,115 @@ +;***************************************************** +; mcsst_1.ncl +; +; Concepts illustrated: +; - Plotting NAVO MCSST data +; - Using fbindirread to read in fortran binary data +; - Converting "byte" data to "float" +; - Adding meta data (attributes and coordinates) to a variable +; - Adding gray to an existing color map +; - Spanning all but the last two colors in a color map for contour fill +; - Drawing raster contours +; +;***************************************************** +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +;*************************************** +; type of data available on file +;*************************************** +; ipar=0 Weekly Binned Sea Surface Temperature +; ipar=1 Number of Points in Bin +; ipar=2 Weekly Binned Sea Surface Temperature Anomaly +; ipar=3 Interpolated Sea Surface Temperature +; ipar=4 Interpolated Sea Surface Temperature Anomaly +;*************************************** +begin + ipar = 3 + fname = "2001311d18N16.dat" + tmp = fbindirread(fname,ipar,(/1024,2048/),"byte") +;*************************************** +; convert to float and then change to true SST +;*************************************** + xslope = 0.15 + if(ipar.eq.4.or.ipar.eq.2)then ; anom has different intercept + yint = -20.0 + end if + if(ipar.eq.3.or.ipar.eq.0)then + yint = -3.0 + end if + sst = new((/1024,2048/),"float") ; create float var + sst = tmp*xslope+yint ; convert to float + delete(tmp) ; delete unecessary array +;*************************************** +; assign missing values. The original missing value was zero, but since it was +; not assigned in NCL, it was not recognized. The new missing values are +; listed below. These will be changed later. +;*************************************** + if(ipar.eq.4)then + sst@_FillValue = -20 + end if + if(ipar.eq.3.or.ipar.eq.0)then + sst@_FillValue = -3 + end if +;*************************************** +; create coordinate variables +;*************************************** + nlat = 1024 + dy = 180./nlat + lat = (90. -(ispan(0,1023,1)*dy))-dy/2 + lat!0 = "lat" + lat&lat = lat + lat@units = "degrees_north" + + nlon = 2048 + dx = 360./nlon + lon = (ispan(0,2047,1)*dx)+dx/2-180. ; note -180. added by sjm to align + lon!0 = "lon" + lon&lon = lon + lon@units = "degrees_east" +;*************************************** +; fill out the netCDF data model +;*************************************** + sst!0 = "lat" ; name dimensions + sst!1 = "lon" ; ditto + sst = sst(::-1,:) ; reverse lat orientation + sst@long_name = "NAVO MCSST" ; assign long_name + sst@units = "deg C" ; assign units + sst&lat = lat ; assign lat cv + sst&lon = lon ; assign lon cv + sst@_FillValue = -999. ; assign missing value +;*************************************** +; get year and day from filename +;*************************************** + res = True ; plot mods desired + title = stringtochar(fname) ; parse file name to get date + year = title(0:3) + jday = title(4:6) + res@gsnCenterString = year+" "+jday ; create center string +;*************************************** +; create plot +;*************************************** + wks = gsn_open_wks("ps","mcsst") ; open workstation (plot destination) + gsn_define_colormap(wks,"BlGrYeOrReVi200") ; choose colormap +; +; This will not be necessary in V6.1.0 and later. Named colors can +; be used without having to first add them to the color map. +; + d = NhlNewColor(wks,0.8,0.8,0.8) ; add gray to colormap + + + res@cnFillOn = True ; turn on color + res@gsnSpreadColors = True ; use full range of colormap + res@gsnSpreadColorStart = 2 ; start at color 2 + res@gsnSpreadColorEnd = -3 ; don't use added gray + res@cnLinesOn = False ; no contour lines + res@cnFillDrawOrder = "PreDraw" ; draw contours before continents + res@gsnMaximize = True ; maximize plot + + +; For a grid this size, it is better to use raster mode. It will be +; significantly faster, and will not go over NCL's 16mb default plot size. + res@cnFillMode = "RasterFill" ; turn on raster mode + + plot = gsn_csm_contour_map_ce(wks,sst,res) ; contour the variable + +end diff --git a/samples/NCL/primero.ncl b/samples/NCL/primero.ncl new file mode 100644 index 00000000..7860ab8d --- /dev/null +++ b/samples/NCL/primero.ncl @@ -0,0 +1,3 @@ +val=102 +a=val/4. +print(a) diff --git a/samples/NCL/topo_9.ncl b/samples/NCL/topo_9.ncl new file mode 100644 index 00000000..e9bd62bf --- /dev/null +++ b/samples/NCL/topo_9.ncl @@ -0,0 +1,172 @@ +;---------------------------------------------------------------------- +; topo_9.ncl +; +; Concepts illustrated: +; - Recreating a jpeg topographic image as an NCL map object +; - Zooming in on a jpeg image +; - Drawing a box around an area of interest on a map +; - Attaching polylines to a map +; - Using "overlay" to overlay multiple contour plots +; - Using more than 256 colors per frame +; - Using functions for cleaner code +;---------------------------------------------------------------------- +; NOTE: This example will only work with NCL V6.1.0 and later. +; +; This script recreates a JPEG image that was converted to a NetCDF +; file with color separated bands using the open source tool +; "gdal_translate": +; +; gdal_translate -ot Int16 -of netCDF EarthMap_2500x1250.jpg \ +; EarthMap_2500x1250.nc +;---------------------------------------------------------------------- +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" + +;---------------------------------------------------------------------- +; This function imports a JPEG image that's on the whole globe, +; and recreates it as an NCL map object that is zoomed in on the +; southern tip of Africa. +;---------------------------------------------------------------------- +undef("recreate_jpeg_image") +function recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon) +begin + orig_jpg_filename = "EarthMap_2500x1250.jpg" + nc_filename = "EarthMap_2500x1250.nc" + +;--You could use a system call to do the NetCDF conversion +; cmd = "gdal_translate -ot Int16 -of netCDF " + jpeg_filename + \ +; " " + nc_filename) +; system(cmd) + +;---Read the three bands of data + f = addfile(nc_filename,"r") + Band1 = where(f->Band1.gt.255, 255, f->Band1) ; red channel + Band2 = where(f->Band2.gt.255, 255, f->Band2) ; green channel + Band3 = where(f->Band3.gt.255, 255, f->Band3) ; blue channel + + band_dims = dimsizes(Band3) + nlat = band_dims(0) + nlon = band_dims(1) + print("dimensions of image = " + nlat + " x " + nlon) + +; +; Add lat/lon data so we can overlay on a map, and/or +; overlay contours. We know the image is global, +; cylindrical equidistant, and centered about lon=0. +; + lat = fspan( -90, 90,nlat) + lon = fspan(-180,180,nlon) + lat@units = "degrees_north" + lon@units = "degrees_east" + + Band1!0 = "lat" + Band1!1 = "lon" + Band2!0 = "lat" + Band2!1 = "lon" + Band3!0 = "lat" + Band3!1 = "lon" + Band1&lat = lat + Band1&lon = lon + Band2&lat = lat + Band2&lon = lon + Band3&lat = lat + Band3&lon = lon + + res = True + + res@gsnMaximize = True + + res@gsnFrame = False ; Don't draw or advance + res@gsnDraw = False ; frame yet. + + res@cnFillOn = True + res@cnFillMode = "RasterFill" ; Raster fill can be faster + + res@cnLevelSelectionMode = "EqualSpacedLevels" + res@cnMaxLevelCount = 254 + res@cnFillBackgroundColor = (/ 1., 1., 1., 1./) + + res@cnLinesOn = False ; Turn off contour lines . + res@cnLineLabelsOn = False ; Turn off contour labels + res@cnInfoLabelOn = False ; Turn off info label + res@lbLabelBarOn = False ; Turn off labelbar + res@gsnRightString = "" ; Turn off subtitles + res@gsnLeftString = "" + res@pmTickMarkDisplayMode = "Always" + +;---Construct RGBA colormaps... + ramp = fspan(0., 1., 255) + reds = new((/255, 4/), float) + greens = new((/255, 4/), float) + blues = new((/255, 4/), float) + + reds = 0 + greens = 0 + blues = 0 + + reds(:,0) = ramp + greens(:,1) = ramp + blues(:,2) = ramp + + ; The red contour map is plotted fully opaque; the green and blue + ; are plotted completely transparent. When overlain, the colors + ; combine (rather magically). + reds(:,3) = 1. + greens(:,3) = 0 + blues(:,3) = 0 + + res@cnFillColors = greens + greenMap = gsn_csm_contour(wks, Band2, res) + + res@cnFillColors = blues + blueMap = gsn_csm_contour(wks, Band3, res) + +;---This will be our base, so make it a map plot. + res@cnFillColors = reds + res@gsnAddCyclic = False + + res@mpFillOn = False + +;---Zoom in on area of interest + res@mpMinLatF = minlat + res@mpMaxLatF = maxlat + res@mpMinLonF = minlon + res@mpMaxLonF = maxlon + + redMap = gsn_csm_contour_map(wks, Band1, res) + +;---Overlay everything to create the topo map + overlay(redMap, greenMap) + overlay(redMap, blueMap) + + return(redMap) +end + +;---------------------------------------------------------------------- +; Main code +;---------------------------------------------------------------------- +begin +;---Recreating jpeg images only works for X11 and PNG. + wks = gsn_open_wks("png","topo") + +;---Southern part of Africa + minlat = -40 + maxlat = 5 + minlon = 10 + maxlon = 40 + + map = recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon) + +;---Overlay a red box + lonbox = (/ 15, 35, 35, 15, 15/) + latbox = (/-30,-30,-10,-10,-30/) + + lnres = True + lnres@gsLineColor = "red" ; red box + lnres@gsLineThicknessF = 4.0 ; make box thicker + box = gsn_add_polyline(wks,map,lonbox,latbox,lnres) + + draw(map) ; Drawing the map will draw the red box + frame(wks) + +end diff --git a/samples/NCL/traj_3.ncl b/samples/NCL/traj_3.ncl new file mode 100644 index 00000000..f01304b4 --- /dev/null +++ b/samples/NCL/traj_3.ncl @@ -0,0 +1,120 @@ +;************************************************* +; traj_3.ncl +;************************************************* +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +external TRAJ "./particle.so" +;************************************************* +begin + + path = "./data.asc" + data = asciiread(path,(/500,6/),"float") +;************************************************* +; some parameters +;************************************************* + np = 1 + nq = 500 + ncor= 8 + xrot = new((/np,nq/),float) + yrot = new((/np,nq/),float) + xaxis = new(ncor,float) + yaxis = new(ncor,float) +;************************************************** +; convert data into rotated format +;************************************************** + TRAJ::particle(path,xrot,yrot,nq,np,xaxis,yaxis,ncor) +;************************************************** +; create plot +;************************************************** + wks = gsn_open_wks("ps","traj") ; Open an ps file + + xyres = True + xyres@gsnFrame = False ; don't advance the frame + xyres@gsnDraw = False ; don't draw indivdual plots + xyres@tmXTBorderOn = False ; don't draw top axis + xyres@tmXBBorderOn = False ; don't draw bottom axis + xyres@tmYRBorderOn = False ; don't draw right axis + xyres@tmYLBorderOn = False ; don't draw left axis + xyres@tmXTOn = False ; don't draw top-axis tick marks + xyres@tmXBOn = False ; don't draw bottom-axis tick marks + xyres@tmYROn = False ; don't draw right-axis tick marks + xyres@tmYLOn = False ; don't draw left-axis tick marks + + xyres@xyLineColors = (/"red"/) ; set the line color to red + xyres@xyLineThicknessF = 4.0 ; 4 times the line thickness + + xyres@trXMaxF = 15000 ; choose range of axis even though + xyres@trXMinF = -10000 ; we don't see them + xyres@trYMaxF = 1000 + xyres@trYMinF = -1000 + + plot = gsn_xy(wks,xrot,yrot,xyres) ; Draw trajectory +;********************************************** +; create arrays needed for the bounding box +;********************************************** + a1 = new(5,float) + b1 = new(5,float) + a2 = new(5,float) + b2 = new(5,float) + a3 = new(2,float) + b3 = new(2,float) + a4 = new(2,float) + b4 = new(2,float) + a5 = new(2,float) + b5 = new(2,float) + a6 = new(2,float) + b6 = new(2,float) + a0 = new(2,float) + b0 = new(2,float) +;********************************************** +; determine values of each bounding line from information +; returned from particle.f +;********************************************** + a1(0:3) = xaxis(:3) + b1(0:3) = yaxis(:3) + a1(4) = xaxis(0) + b1(4) = yaxis(0) + + a2(0:3) = xaxis(4:) + b2(0:3) = yaxis(4:) + a2(4) = xaxis(4) + b2(4) = yaxis(4) + + a3 = xaxis(0:4:4) + b3 = yaxis(0:4:4) + a4 = xaxis(1:5:4) + b4 = yaxis(1:5:4) + + a5 = xaxis(2:6:4) + b5 = yaxis(2:6:4) + a6 = xaxis(3:7:4) + b6 = yaxis(3:7:4) + + a0(0) = xaxis(3) + b0(0) = yaxis(3) + a0(1) = xrot(0,0) + b0(1) = yrot(0,0) +;*************************************************************** +; create bounding box by drawing multiple xy plots on top of +; each other. each with their individual axis turned off. +;*************************************************************** + xyres@xyLineColors = (/"black"/) ; line color + xyres@xyLineThicknessF = 1.0 ; regular line thickness + + bottom = gsn_xy(wks,a1,b1,xyres) ; Draw the bottom bounding box. + top = gsn_xy(wks,a2,b2,xyres) ; Draw the top bounding box. + side1 = gsn_xy(wks,a3,b3,xyres) ; Draw a side line. + side2 = gsn_xy(wks,a4,b4,xyres) ; Draw a side line. + side3 = gsn_xy(wks,a5,b5,xyres) ; Draw a side line. + side4 = gsn_xy(wks,a6,b6,xyres) ; Draw a side line. +;*************************************************************** +; now draw a large brown line to represent the chimney +;*************************************************************** + xyres@xyLineColors = (/"brown"/) ; chimney color + xyres@xyLineThicknessF = 9.0 ; thick line + xyres@tiMainString = "Pollutant Trajectory in a 3D Volume" + chimney = gsn_xy(wks,a0,b0,xyres) ; Draw the chimney. + + draw(wks) + frame(wks) + +end diff --git a/samples/NCL/tsdiagram_1.ncl b/samples/NCL/tsdiagram_1.ncl new file mode 100644 index 00000000..be9b2f6f --- /dev/null +++ b/samples/NCL/tsdiagram_1.ncl @@ -0,0 +1,167 @@ +; Read potential temp (TEMP), salinity (SALT) +; Compute potential density (PD) for specified range PD(t,s) +; (use ncl function based on Yeager's algorithm for rho computation) +; Assumes annual and zonally avgeraged input data set (i.e, one time slice) +; Used K.Lindsay's "za" for zonal avg -- already binned into basins +; Plots temp vs salt (scatter plot), pd overlay + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl" + +begin +; ================================> ; PARAMETERS + case = "PHC2_gx1v3" + ocnfile = "za_PHC2_T_S_gx1v3.nc" + + depth_min = 14895.82 ; in cm, depth of first layer to be included + depth_max = 537499.9 +; +; plot limits +; + smincn = 32.5 + smaxcn = 37.0 + tmincn = -2. + tmaxcn = 22. +; +; Choose basin index +; +; 0 = global 1 = southern ocean 2 = pacific 3 = indian 6 = atlantic +; 8 = labrador 9 = GIN 10 = arctic +; + bi = 2 + +;=====> basin check + + if(bi.lt.0.or.bi.gt.10) then + print("basin index "+ bi + " not supported") + exit + end if + + if(bi.eq.0) then + basin = "Global" + blab = "global" + end if + if(bi.eq.1) then + basin = "Southern Ocean" + blab = "so" + end if + if(bi.eq.2) then + basin = "Pacific Ocean" + blab = "pacific" + end if + if(bi.eq.3) then + basin = "Indian Ocean" + blab = "indian" + end if + if(bi.eq.6) then + basin = "Atlantic Ocean" + blab = "atlanticn" + end if + if(bi.eq.8) then + basin = "Labrador Sea" + blab = "lab" + end if + if(bi.eq.9) then + basin = "GIN Sea" + blab = "gin" + end if + if(bi.eq.10) then + basin = "Arctic Ocean" + blab = "arctic" + end if + +;=====> initial resource settings + + wks = gsn_open_wks("ps","tsdiagram") ; Open a Postscript file + +;===== data + focn = addfile(ocnfile, "r") + salt = focn->SALT(0,:,{depth_min:depth_max},:) ;(basins, z_t, lat_t) + temp = focn->TEMP(0,:,{depth_min:depth_max},:) + +;====section out choice basin + temp_ba = temp(bi,:,:) + salt_ba = salt(bi,:,:) + +;===== put into scatter array format + tdata_ba = ndtooned(temp_ba) + sdata_ba = ndtooned(salt_ba) + + ydata = tdata_ba + xdata = sdata_ba + +;============== compute potenial density (PD), using rho_mwjf +; +; for potential density, depth = 0. (i.e. density as if brought to surface) +; +;=========================================================================== +; WARNING: T-S diagrams use POTENTIAL DENSITY... if set depth to something +; other then 0, then you will be plotting density contours computed for the +; specified depth layer. +;=========================================================================== + + depth = 0. ;in meters + tspan = fspan(tmincn,tmaxcn,51) + sspan = fspan(smincn,smaxcn,51) + + ; the more points the better... using Yeager's numbers + + t_range = conform_dims((/51,51/),tspan,0) + s_range = conform_dims((/51,51/),sspan,1) + + pd = rho_mwjf(t_range,s_range,depth) + + pd!0 = "temp" + pd!1 = "salt" + pd&temp = tspan + pd&salt = sspan + pd = 1000.*(pd-1.) ; Put into kg/m3 pot den units + +; printVarSummary(pd) +; printVarInfo(pd,"rho_mwjf") + +;=================Graphics + +;--- scatter plot + res = True + res@gsnMaximize = True + res@gsnDraw = False + res@gsnFrame = False + + res@xyMarkLineModes = "Markers" + res@xyMarkers = 16 + res@xyMarkerColors = "black" + res@pmLegendDisplayMode = "Never" + res@txFontHeightF = 0.01 + res@tiMainString = case + " ANN AVG: T-S Diagram" + res@tiXAxisString = salt@units + res@tiXAxisFontHeightF = 0.02 + res@tiYAxisString = temp@units + res@tiYAxisFontHeightF = 0.02 + res@trXMinF = smincn + res@trXMaxF = smaxcn + res@trYMinF = tmincn + res@trYMaxF = tmaxcn + res@gsnRightString = depth_min/100. + "-"+depth_max/100. +"m" + res@gsnLeftString = basin + + plot = gsn_csm_xy(wks,xdata,ydata,res) + +;----- pd overlay + resov = True + resov@gsnDraw = False + resov@gsnFrame = False + resov@cnLevelSelectionMode = "AutomaticLevels" + resov@cnInfoLabelOn = "False" + resov@cnLineLabelPlacementMode = "Constant" + resov@cnLineLabelFontHeightF = ".02" + + plotpd = gsn_csm_contour(wks,pd,resov) + overlay(plot,plotpd) + + draw(plot) + frame(wks) + +end diff --git a/samples/NCL/unique_9.ncl b/samples/NCL/unique_9.ncl new file mode 100644 index 00000000..edcf8285 --- /dev/null +++ b/samples/NCL/unique_9.ncl @@ -0,0 +1,141 @@ +;************************************ +; unique_9.ncl +; +; Concepts illustrated: +; - Drawing raster contours over a map +; - Creating a topography plot using raster contours +; - Reading data from binary files +; - Manually creating lat/lon coordinate arrays +; - Customizing a labelbar for a contour plot +;************************************ +; This example generates a topo map over +; the area of Trinidad, Colorado. +;************************************ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" + +begin + + wks = gsn_open_wks("ps","unique") + +;----------------- read the west binary data ------------------------- + binfile = "trinidad-w.bin" + + quad_name = fbinrecread(binfile,0,60,"character") + + map_cornersW = fbinrecread(binfile,1,4,"double") + + lonW = fbinrecread(binfile,2,(/1201/),"double") + + latW = fbinrecread(binfile,3,(/1201/),"double") + + minmax_elevW = fbinrecread(binfile,4,2,"double") + + tmpW = fbinrecread(binfile,5,(/1201,1201/),"integer") + +;----------------- read the east binary data ------------------------- + binfile = "trinidad-e.bin" + + quad_name = fbinrecread(binfile,0,60,"character") + + map_cornersE = fbinrecread(binfile,1,4,"double") + + lonE = fbinrecread(binfile,2,(/1201/),"double") + + latE = fbinrecread(binfile,3,(/1201/),"double") + + minmax_elevE = fbinrecread(binfile,4,2,"double") + + tmpE = fbinrecread(binfile,5,(/1201,1201/),"integer") + +;---------------------------------------------------------------------- + min_elev = min((/minmax_elevW(0),minmax_elevE(0)/))*3.28 + max_elev = max((/minmax_elevW(1),minmax_elevE(1)/))*3.28 + + lat = new(1201,"double") + lat = latW + lat!0 = "lat" + lat&lat = latW ; same as latE + lat@long_name = "latitude" + lat@units = "degrees_north" + + lon = new(2401,"double") + lon(0:1200) = lonW + lon(1201:2400) = lonE(1:1200) + lon!0 = "lon" + lon&lon = lon + lon@long_name = "longitude" + lon@units = "degrees_east" + + data = new((/1201,2401/),"float") ; (lat,lon) + data!0 = "lat" + data&lat = lat + data!1 = "lon" + data&lon = lon + data(:,0:1200) = (/tmpW*3.28/) ; convert to feet + data(:,1201:2400) = (/tmpE(:,1:1200)*3.28/) ; convert to feet +;------------------------------------------------------------- + +; +; Define colormap. +; + cmap = (/(/1.00, 1.00, 1.00/),(/0.00, 0.00, 0.00/), \ + (/0.51, 0.13, 0.94/),(/0.00, 0.00, 0.59/), \ + (/0.00, 0.00, 0.80/),(/0.25, 0.41, 0.88/), \ + (/0.12, 0.56, 1.00/),(/0.00, 0.75, 1.00/), \ + (/0.63, 0.82, 1.00/),(/0.82, 0.96, 1.00/), \ + (/1.00, 1.00, 0.78/),(/1.00, 0.88, 0.20/), \ + (/1.00, 0.67, 0.00/),(/1.00, 0.43, 0.00/), \ + (/1.00, 0.00, 0.00/),(/0.78, 0.00, 0.00/), \ + (/0.63, 0.14, 0.14/),(/1.00, 0.41, 0.70/)/) + + gsn_define_colormap(wks,cmap) + + res = True + res@gsnMaximize = True + res@gsnAddCyclic = False + +; map plot resources + res@mpFillOn = False + res@mpLimitMode = "Corners" + res@mpDataBaseVersion = "Ncarg4_1" + res@mpOutlineBoundarySets = "AllBoundaries" + res@mpLeftCornerLonF = map_cornersW(0) + res@mpLeftCornerLatF = map_cornersW(1) + res@mpRightCornerLonF = map_cornersE(2) + res@mpRightCornerLatF = map_cornersE(3) + +; contour resources + res@cnFillOn = True + res@cnLinesOn = False + res@cnFillMode = "RasterFill" + res@cnLevelSelectionMode = "ExplicitLevels" + res@cnLevels = (/ 5000., 6000., 7000., 8000., 8500., 9000., \ + 9500.,10000.,10500.,11000.,11500.,12000., \ + 12500.,13000.,13500./) + +; tickmark resources + res@pmTickMarkDisplayMode = "Always" + res@tmXBLabelFontHeightF = 0.010 + +; labelbar resources + res@pmLabelBarWidthF = 0.60 + res@txFontHeightF = 0.012 + res@lbTitleString = "elevation above mean sea level (feet)" + res@lbTitleFontHeightF = 0.012 + res@lbLabelFontHeightF = 0.008 + res@lbTitleOffsetF = -0.27 + res@lbBoxMinorExtentF = 0.15 + res@pmLabelBarOrthogonalPosF = -.05 + +; title resources + res@tiMainString = "USGS DEM TRINIDAD (1 x 2 degrees)" + res@tiMainOffsetYF = -0.02 ; Move title down towards graphic. + res@tiMainFontHeightF = 0.015 + res@gsnLeftString = "Min Elevation: "+min_elev + res@gsnRightString = "Max Elevation: "+max_elev + res@gsnCenterString = "Scale 1:250,000" + + plot = gsn_csm_contour_map(wks,data,res) + +end diff --git a/samples/NCL/viewport_4.ncl b/samples/NCL/viewport_4.ncl new file mode 100644 index 00000000..3635a2fa --- /dev/null +++ b/samples/NCL/viewport_4.ncl @@ -0,0 +1,131 @@ +; *********************************************** +; viewport_4.ncl +; +; Concepts illustrated: +; - Drawing an XY plot with multiple curves +; - Using drawNDCGrid to draw a nicely labeled NDC grid +; - Changing the size/shape of an XY plot using viewport resources +; - Drawing two XY plots on the same page using viewport resources +; - Drawing polylines, polymarkers, and text in NDC space +; - Using "getvalues" to retrieve resource values +; - Maximizing plots after they've been created +; *********************************************** +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl" + +;******************************************************************** +; Draw a box around the viewport of the given object.. +;******************************************************************** +procedure draw_vp_box(wks,plot) +local vpx, vpy, vpw, vph, xbox, ybox, lnres, mkres, txres +begin + +; Retrieve the viewport values of the drawable object. + getvalues plot + "vpXF" : vpx + "vpYF" : vpy + "vpWidthF" : vpw + "vpHeightF" : vph + end getvalues + +; Set up some marker resources. + mkres = True + mkres@gsMarkerIndex = 16 ; filled dot + mkres@gsMarkerSizeF = 0.02 ; larger than default + mkres@gsMarkerColor = "Red" + +; Draw a single marker at the vpXF/vpYF location. + gsn_polymarker_ndc(wks,vpx,vpy,mkres) + + +; Set up some text resources. + txres = True + txres@txJust = "BottomLeft" + txres@txFontHeightF = 0.018 + txres@txFontColor = "Blue" + txres@txBackgroundFillColor = "white" + + gsn_text_ndc(wks,"(vpXF="+vpx+", vpYF="+vpy+")",vpx,vpy+0.02,txres) +; Set up some line resources. + lnres = True + lnres@gsLineColor = "Red" ; line color + lnres@gsLineThicknessF = 2.0 ; 3.5 times as thick + +; Draw lines indicating the width and height + xline = (/vpx, vpx+vpw/) + yline = (/vpy-0.05,vpy-0.05/) + gsn_polyline_ndc(wks,xline,yline,lnres) + + xline = (/vpx+0.05,vpx+0.05/) + yline = (/vpy,vpy-vph/) + gsn_polyline_ndc(wks,xline,yline,lnres) + + txres@txJust = "CenterCenter" + gsn_text_ndc(wks,"vpWidthF = " + vpw,vpx+vpw/2.,vpy-0.05,txres) + + txres@txAngleF = 90. + gsn_text_ndc(wks,"vpHeightF = " + vph,vpx+0.05,vpy-vph/2.,txres) +end + +;******************************************************************** +; Main code +;******************************************************************** +begin +;************************************************ +; read in data +;************************************************ + f = addfile ("$NCARG_ROOT/lib/ncarg/data/cdf/uv300.nc","r") + u = f->U ; get u data +;************************************************ +; plotting parameters +;************************************************ + wks = gsn_open_wks ("ps","viewport") ; open workstation + + res = True ; plot mods desired + + res@gsnFrame = False ; don't advance frame yet + + res@vpWidthF = 0.8 ; set width and height + res@vpHeightF = 0.3 + +; First plot + res@tiMainString = "Plot 1" + + res@vpXF = 0.15 + res@vpYF = 0.9 ; Higher on the page + + plot1 = gsn_csm_xy (wks,u&lat,u(0,:,{82}),res) ; create plot + +; Second plot + res@tiMainString = "Plot 2" + + res@vpXF = 0.15 ; Same X location as first plot + res@vpYF = 0.4 ; Lower on the page + + plot2 = gsn_csm_xy (wks,u&lat,u(0,:,{3}),res) ; create plot + +; Advance the frame + frame(wks) + +; Now draw the two plots with illustrations. + + drawNDCGrid(wks) ; Draw helpful grid lines showing NDC square. + + draw(plot1) ; Draw the two plots + draw(plot2) + + draw_vp_box(wks,plot1) ; Draw boxes around the two viewports. + draw_vp_box(wks,plot2) + + frame(wks) ; Advance the frame. + + +; +; Uncomment the next two lines if you want to maximize these plots for +; PS or PDF output. +; +; psres = True +; maximize_output(wks,psres) ; calls draw and frame for you +end diff --git a/samples/NCL/weather_sym_6.ncl b/samples/NCL/weather_sym_6.ncl new file mode 100644 index 00000000..49ed16d1 --- /dev/null +++ b/samples/NCL/weather_sym_6.ncl @@ -0,0 +1,120 @@ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" + +begin +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Example of plotting station model data over a map +; illustrating how the wind barb directions are adjusted +; for the map projection. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; City names. +; + cities = (/ "NCAR", "Seattle", "San Francisco", \ + "Los Angeles", "Billings", "El Paso", \ + "Houston", "Kansas City", "Minneapolis", \ + "Chicago", "Detroit", "Atlanta", \ + "Miami", "New York", "Eugene", \ + "Boise", "Salt Lake", "Phoenix", \ + "Albuquerque", "Bismarck", "Tulsa", \ + "Dallas", "Little Rock", "Lexington", \ + "Charlotte", "Norfolk", "Bangor" \ + /) + city_lats = (/ 40.0, 47.6, 37.8, \ + 34.1, 45.8, 31.8, \ + 29.8, 39.1, 45.0, \ + 41.9, 42.3, 33.8, \ + 25.8, 40.8, 44.1, \ + 43.6, 40.7, 33.5, \ + 35.1, 46.7, 36.0, \ + 32.8, 34.7, 38.1, \ + 35.2, 36.8, 44.8 \ + /) + city_lons = (/ -105.0, -122.3, -122.4, \ + -118.3, -108.5, -106.5, \ + -095.3, -094.1, -093.8, \ + -087.6, -083.1, -084.4, \ + -080.2, -074.0, -123.1, \ + -116.2, -111.9, -112.1, \ + -106.6, -100.8, -096.0, \ + -096.8, -092.3, -084.1, \ + -080.8, -076.3, -068.8 \ + /) +; +; Station model data for the 27 cities. +; + imdat = (/"11000000751126021360300004955054054600007757087712", \ + "11103100011104021080300004959055050600517043080369", \ + "11206200031102021040300004963056046601517084081470", \ + "11309300061000021020300004967057042602017125082581", \ + "11412400091002021010300004971058038602517166083592", \ + "11515500121004020000300004975050034603017207084703", \ + "11618600151006020030300004979051030603507248085814", \ + "11721700181008020050300004983052026604007289086925", \ + "11824800211009020070300004987053022604507323087036", \ + "11927900241011020110300004991054018605017364088147", \ + "11030000271013020130300004995055014605517405089258", \ + "11133100301015020170300004999056010606017446080369", \ + "11236200331017020200300004000057006606517487081470", \ + "11339300361019020230300004004058002607017528082581", \ + "11442400391021020250300004008050000607517569083692", \ + "11545500421023020270300004012051040608017603084703", \ + "11648600451025020290300004017052008608517644085814", \ + "11751700481027020310300004021053012609017685086925", \ + "11854800511029020330300004025054016609507726087036", \ + "11958900541031020360300004029055018610007767088147", \ + "11060000571033020380300004033056030610507808089258", \ + "11163100601035020410300004037057034611007849080369", \ + "11266200631037020430300004041058043611507883081470", \ + "11369300661039020470300004045050041612007924082581", \ + "11472400691041020500300004048051025612507965083692", \ + "11575500721043020530300004051052022613507996084703", \ + "11678600751048021580300004055053013614007337085814" \ + /) + +; +; Define a color map and open a workstation. +; + cmap = (/ \ + (/ 1., 1., 1. /), \ ; color index 0 - white + (/ 0., 0., 0. /) \ ; color index 1 - black + /) + wks = gsn_open_wks("ps","weather_sym") + gsn_define_colormap(wks,cmap) + +; +; Draw a world map. +; + mpres = True + mpres@gsnFrame = False + mpres@mpSatelliteDistF = 1.3 + mpres@mpOutlineBoundarySets = "USStates" + mpres@mpCenterLatF = 40. + mpres@mpCenterLonF = -97. + mpres@mpCenterRotF = 35. + map = gsn_map(wks,"Satellite",mpres) + +; +; Scale the station model plot (all aspects of the station +; model plots are scaled as per the size of the wind barb). +; + wmsetp("wbs",0.018) +; +; In the middle of Nebraska, draw a wind barb for a north wind +; with a magnitude of 15 knots. +; + wmbarbmap(wks,42.,-99.,0.,-15.) + +; +; Draw the station model data at the selected cities. The call +; to wmsetp informs wmstnm that the wind barbs will be drawn over +; a map. To illustrate the adjustment for plotting the model +; data over a map, all winds are from the north. +; + wmsetp("ezf",1) + wmstnm(wks,city_lats,city_lons,imdat) + + frame(wks) + +end diff --git a/samples/NCL/xy_29.ncl b/samples/NCL/xy_29.ncl new file mode 100644 index 00000000..ae231f75 --- /dev/null +++ b/samples/NCL/xy_29.ncl @@ -0,0 +1,151 @@ +; xy_29.ncl +; +; Concepts illustrated: +; - Reading data from an ASCII file with headers +; - Creating a separate procedure to create a specific plot +; - Attaching polymarkers to an XY plot +; +; This script was originally from Dr. Birgit Hassler (NOAA) +;**************************************************** + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + +;************************************************ +; Plot Procedure +;************************************************ +procedure plotTCOPolym(pltName[1]:string, pltType[1]:string, filName[1]:string \ + ,xTitle[1]:string , yTitle[1]:string \ + ,year[*]:numeric, y[*]:numeric) +local wks, res, ntim, gsres, MarkerCol, OldYear, i, xmarker, ymarker + +begin + wks = gsn_open_wks(pltType,pltName) + gsn_define_colormap(wks,"default") + + res = True + res@gsnMaximize = True ; make "ps", "eps", "pdf" large + + res@vpHeightF = 0.5 ; change aspect ratio of plot + res@vpWidthF = 0.75 + res@vpXF = 0.15 ; start plot at x ndc coord + res@tiXAxisString = xTitle + res@tiYAxisString = yTitle + res@tiMainString = filName + + ntim = dimsizes(year) + res@trXMinF = year(0)-1 + res@trXMaxF = year(ntim-1)+1 + + res@gsnDraw = False + res@gsnFrame = False + res@xyMarkLineMode = "markers" + res@xyMarker = 16 + res@xyMarkerColor = "Background" + plot = gsn_csm_xy (wks,year,y,res) ; create plot frame ork + + ; add different color polymarkers for each year + gsres = True + MarkerCol = 2 + OldYear = year(0) + + do i=0,ntim-1 + xmarker = year(i) + ymarker = y(i) + + if (i.gt.0) then + if (year(i).gt.OldYear) then + MarkerCol = MarkerCol+1 + end if + OldYear = year(i) + end if + + gsres@gsMarkerColor = MarkerCol + gsres@gsMarkerIndex = 16 + ;gsres@gsMarkerSizeF = 15.0 + ; add (attach) polymarkers to existing plot object + plot@$unique_string("dum")$ = gsn_add_polymarker(wks,plot,xmarker,ymarker,gsres) + end do + + draw(plot) + frame(wks) +end + +;*********************************************************** +; MAIN +;*********************************************************** + pltType = "ps" ; "ps", "eps", "png", "x11" + + ; read multiple ascii file names + ;;fili = "Southpole_TCOTimeSeries_11.dat" + + diri = "./" + fili = systemfunc("cd "+diri+" ; ls *TCOT*dat") + print(fili) + + nfil = dimsizes(fili) + + nhead= 4 ; number of header lines on ascii file(s) + ncol = 4 ; year, month, day, O3 + + do nf=0,nfil-1 + sfx = get_file_suffix(fili(nf), 0) ; sfx = ".dat" + filx = sfx@fBase ; filx= "Southpole_TCOTimeSeries_11" + ; read ascii files + data = readAsciiTable(diri+fili(nf), ncol, "float", nhead) + dimd = dimsizes(data) + ntim = dimd(0) ; # rows + + year = toint( data(:,0) ) ; user decision ... convert to integer + mon = toint( data(:,1) ) + day = toint( data(:,2) ) + + hour = new (ntim, "integer", "No_FillValue") + mn = new (ntim, "integer", "No_FillValue") + sec = new (ntim, "double" , "No_FillValue") + hour = 0 + mn = 0 + sec = 0d0 + ; create COARDS/udunits time variable + ;;tunits = "days since 1900-01-01 00:00:0.0" + tunits = "days since "+year(0)+"-"+mon(0)+"-"+day(0)+" 00:00:0.0" + time = cd_inv_calendar(year,mon,day,hour,mn,sec,tunits, 0) + time!0 = "time" + time&time = time + ;printVarSummary(time) + + ; create a Gregorin 'date' variable + date = year*10000 + mon*100 + day + date!0 = "time" + date@units = "yyyymmdd" + date&time = time + ;printVarSummary(date) + + O3 = data(:,3) + O3@long_name = "total column ozone" + O3@units = "DU" + + O3!0 = "time" + O3&time = time + ;printVarSummary(O3) + ;print(" ") + ;print(date+" "+time+" "+O3) + + ; plot + yTitle = O3@long_name + year@long_name = "YEAR" + + plotTCOPolym (filx, pltType, fili(nf), year@long_name, yTitle, year, O3) + + delete(time) ; delete ... size (# rows) may change in the next file + delete(date) + delete(year) + delete(mon ) + delete(day ) + delete(mn ) + delete(sec ) + delete(O3 ) + delete(data) + end do + diff --git a/samples/NL/assign0.nl b/samples/NL/assign0.nl new file mode 100644 index 00000000..9f1c58cf --- /dev/null +++ b/samples/NL/assign0.nl @@ -0,0 +1,84 @@ +g3 0 1 0 # problem assign0 + 9 6 1 0 6 # vars, constraints, objectives, ranges, eqns + 0 0 # nonlinear constraints, objectives + 0 0 # network constraints: nonlinear, linear + 0 0 0 # nonlinear vars in constraints, objectives, both + 0 0 0 1 # linear network variables; functions; arith, flags + 9 0 0 0 0 # discrete variables: binary, integer, nonlinear (b,c,o) + 18 9 # nonzeros in Jacobian, gradients + 0 0 # max name lengths: constraints, variables + 0 0 0 0 0 # common exprs: b,c,o,c1,o1 +C0 +n0 +C1 +n0 +C2 +n0 +C3 +n0 +C4 +n0 +C5 +n0 +O0 0 +n0 +r +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +b +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +k8 +2 +4 +6 +8 +10 +12 +14 +16 +J0 3 +0 1 +1 1 +2 1 +J1 3 +3 1 +4 1 +5 1 +J2 3 +6 1 +7 1 +8 1 +J3 3 +0 1 +3 1 +6 1 +J4 3 +1 1 +4 1 +7 1 +J5 3 +2 1 +5 1 +8 1 +G0 9 +0 1 +1 3 +2 3 +3 2 +4 3 +5 3 +6 3 +7 3 +8 2 diff --git a/samples/NL/balassign0.nl b/samples/NL/balassign0.nl new file mode 100644 index 00000000..59d5690b --- /dev/null +++ b/samples/NL/balassign0.nl @@ -0,0 +1,2284 @@ +g3 2 1 0 # problem balassign0 + 160 121 1 0 26 # vars, constraints, objectives, ranges, eqns + 0 0 # nonlinear constraints, objectives + 0 0 # network constraints: nonlinear, linear + 0 0 0 # nonlinear vars in constraints, objectives, both + 0 0 0 1 # linear network variables; functions; arith, flags + 130 30 0 0 0 # discrete variables: binary, integer, nonlinear (b,c,o) + 1435 30 # nonzeros in Jacobian, gradients + 0 0 # max name lengths: constraints, variables + 0 0 0 0 0 # common exprs: b,c,o,c1,o1 +C0 +n0 +C1 +n0 +C2 +n0 +C3 +n0 +C4 +n0 +C5 +n0 +C6 +n0 +C7 +n0 +C8 +n0 +C9 +n0 +C10 +n0 +C11 +n0 +C12 +n0 +C13 +n0 +C14 +n0 +C15 +n0 +C16 +n0 +C17 +n0 +C18 +n0 +C19 +n0 +C20 +n0 +C21 +n0 +C22 +n0 +C23 +n0 +C24 +n0 +C25 +n0 +C26 +n0 +C27 +n0 +C28 +n0 +C29 +n0 +C30 +n0 +C31 +n0 +C32 +n0 +C33 +n0 +C34 +n0 +C35 +n0 +C36 +n0 +C37 +n0 +C38 +n0 +C39 +n0 +C40 +n0 +C41 +n0 +C42 +n0 +C43 +n0 +C44 +n0 +C45 +n0 +C46 +n0 +C47 +n0 +C48 +n0 +C49 +n0 +C50 +n0 +C51 +n0 +C52 +n0 +C53 +n0 +C54 +n0 +C55 +n0 +C56 +n0 +C57 +n0 +C58 +n0 +C59 +n0 +C60 +n0 +C61 +n0 +C62 +n0 +C63 +n0 +C64 +n0 +C65 +n0 +C66 +n0 +C67 +n0 +C68 +n0 +C69 +n0 +C70 +n0 +C71 +n0 +C72 +n0 +C73 +n0 +C74 +n0 +C75 +n0 +C76 +n0 +C77 +n0 +C78 +n0 +C79 +n0 +C80 +n0 +C81 +n0 +C82 +n0 +C83 +n0 +C84 +n0 +C85 +n0 +C86 +n0 +C87 +n0 +C88 +n0 +C89 +n0 +C90 +n0 +C91 +n0 +C92 +n0 +C93 +n0 +C94 +n0 +C95 +n0 +C96 +n0 +C97 +n0 +C98 +n0 +C99 +n0 +C100 +n0 +C101 +n0 +C102 +n0 +C103 +n0 +C104 +n0 +C105 +n0 +C106 +n0 +C107 +n0 +C108 +n0 +C109 +n0 +C110 +n0 +C111 +n0 +C112 +n0 +C113 +n0 +C114 +n0 +C115 +n0 +C116 +n0 +C117 +n0 +C118 +n0 +C119 +n0 +C120 +n0 +O0 0 +n0 +r +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +1 0 +1 0 +1 0 +1 0 +1 0 +2 0 +2 0 +2 0 +2 0 +2 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +b +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +1 5 +2 6 +1 4 +1 0 +1 0 +1 0 +1 1 +1 0 +1 2 +1 0 +1 0 +1 4 +1 0 +1 2 +1 2 +1 0 +2 4 +2 1 +2 1 +2 1 +2 2 +2 1 +2 3 +2 1 +2 1 +2 5 +2 1 +2 3 +2 3 +2 1 +k159 +11 +22 +33 +44 +55 +64 +73 +82 +91 +100 +111 +122 +133 +144 +155 +166 +177 +188 +199 +210 +220 +230 +240 +250 +260 +270 +280 +290 +300 +310 +321 +332 +343 +354 +365 +375 +385 +395 +405 +415 +425 +435 +445 +455 +465 +476 +487 +498 +509 +520 +531 +542 +553 +564 +575 +586 +597 +608 +619 +630 +641 +652 +663 +674 +685 +696 +707 +718 +729 +740 +749 +758 +767 +776 +785 +796 +807 +818 +829 +840 +850 +860 +870 +880 +890 +899 +908 +917 +926 +935 +945 +955 +965 +975 +985 +995 +1005 +1015 +1025 +1035 +1046 +1057 +1068 +1079 +1090 +1099 +1108 +1117 +1126 +1135 +1146 +1157 +1168 +1179 +1190 +1201 +1212 +1223 +1234 +1245 +1255 +1265 +1275 +1285 +1295 +1304 +1313 +1322 +1331 +1340 +1345 +1350 +1355 +1355 +1355 +1355 +1360 +1360 +1365 +1365 +1365 +1370 +1370 +1375 +1380 +1380 +1385 +1390 +1390 +1395 +1400 +1400 +1405 +1410 +1410 +1415 +1420 +1425 +1430 +J0 5 +0 1 +1 1 +2 1 +3 1 +4 1 +J1 5 +5 1 +6 1 +7 1 +8 1 +9 1 +J2 5 +10 1 +11 1 +12 1 +13 1 +14 1 +J3 5 +15 1 +16 1 +17 1 +18 1 +19 1 +J4 5 +20 1 +21 1 +22 1 +23 1 +24 1 +J5 5 +25 1 +26 1 +27 1 +28 1 +29 1 +J6 5 +30 1 +31 1 +32 1 +33 1 +34 1 +J7 5 +35 1 +36 1 +37 1 +38 1 +39 1 +J8 5 +40 1 +41 1 +42 1 +43 1 +44 1 +J9 5 +45 1 +46 1 +47 1 +48 1 +49 1 +J10 5 +50 1 +51 1 +52 1 +53 1 +54 1 +J11 5 +55 1 +56 1 +57 1 +58 1 +59 1 +J12 5 +60 1 +61 1 +62 1 +63 1 +64 1 +J13 5 +65 1 +66 1 +67 1 +68 1 +69 1 +J14 5 +70 1 +71 1 +72 1 +73 1 +74 1 +J15 5 +75 1 +76 1 +77 1 +78 1 +79 1 +J16 5 +80 1 +81 1 +82 1 +83 1 +84 1 +J17 5 +85 1 +86 1 +87 1 +88 1 +89 1 +J18 5 +90 1 +91 1 +92 1 +93 1 +94 1 +J19 5 +95 1 +96 1 +97 1 +98 1 +99 1 +J20 5 +100 1 +101 1 +102 1 +103 1 +104 1 +J21 5 +105 1 +106 1 +107 1 +108 1 +109 1 +J22 5 +110 1 +111 1 +112 1 +113 1 +114 1 +J23 5 +115 1 +116 1 +117 1 +118 1 +119 1 +J24 5 +120 1 +121 1 +122 1 +123 1 +124 1 +J25 5 +125 1 +126 1 +127 1 +128 1 +129 1 +J26 27 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +130 1 +J27 27 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +130 1 +J28 27 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +130 1 +J29 27 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +130 1 +J30 27 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +130 1 +J31 27 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +131 1 +J32 27 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +131 1 +J33 27 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +131 1 +J34 27 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +131 1 +J35 27 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +131 1 +J36 21 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +75 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +132 1 +J37 9 +0 -1 +10 -1 +45 -1 +70 -1 +75 -1 +90 -1 +95 -1 +100 -1 +136 1 +J38 15 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +110 -1 +115 -1 +120 -1 +138 1 +J39 25 +0 -1 +5 -1 +10 -1 +15 -1 +25 -1 +30 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +141 1 +J40 13 +0 -1 +10 -1 +20 -1 +30 -1 +35 -1 +40 -1 +45 -1 +70 -1 +75 -1 +85 -1 +100 -1 +125 -1 +143 1 +J41 12 +5 -1 +15 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +90 -1 +95 -1 +110 -1 +115 -1 +144 1 +J42 21 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +76 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +132 1 +J43 9 +1 -1 +11 -1 +46 -1 +71 -1 +76 -1 +91 -1 +96 -1 +101 -1 +136 1 +J44 15 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +111 -1 +116 -1 +121 -1 +138 1 +J45 25 +1 -1 +6 -1 +11 -1 +16 -1 +26 -1 +31 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +141 1 +J46 13 +1 -1 +11 -1 +21 -1 +31 -1 +36 -1 +41 -1 +46 -1 +71 -1 +76 -1 +86 -1 +101 -1 +126 -1 +143 1 +J47 12 +6 -1 +16 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +91 -1 +96 -1 +111 -1 +116 -1 +144 1 +J48 21 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +77 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +132 1 +J49 9 +2 -1 +12 -1 +47 -1 +72 -1 +77 -1 +92 -1 +97 -1 +102 -1 +136 1 +J50 15 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +112 -1 +117 -1 +122 -1 +138 1 +J51 25 +2 -1 +7 -1 +12 -1 +17 -1 +27 -1 +32 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +141 1 +J52 13 +2 -1 +12 -1 +22 -1 +32 -1 +37 -1 +42 -1 +47 -1 +72 -1 +77 -1 +87 -1 +102 -1 +127 -1 +143 1 +J53 12 +7 -1 +17 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +92 -1 +97 -1 +112 -1 +117 -1 +144 1 +J54 21 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +78 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +132 1 +J55 9 +3 -1 +13 -1 +48 -1 +73 -1 +78 -1 +93 -1 +98 -1 +103 -1 +136 1 +J56 15 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +113 -1 +118 -1 +123 -1 +138 1 +J57 25 +3 -1 +8 -1 +13 -1 +18 -1 +28 -1 +33 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +141 1 +J58 13 +3 -1 +13 -1 +23 -1 +33 -1 +38 -1 +43 -1 +48 -1 +73 -1 +78 -1 +88 -1 +103 -1 +128 -1 +143 1 +J59 12 +8 -1 +18 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +93 -1 +98 -1 +113 -1 +118 -1 +144 1 +J60 21 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +79 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +132 1 +J61 9 +4 -1 +14 -1 +49 -1 +74 -1 +79 -1 +94 -1 +99 -1 +104 -1 +136 1 +J62 15 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +114 -1 +119 -1 +124 -1 +138 1 +J63 25 +4 -1 +9 -1 +14 -1 +19 -1 +29 -1 +34 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +141 1 +J64 13 +4 -1 +14 -1 +24 -1 +34 -1 +39 -1 +44 -1 +49 -1 +74 -1 +79 -1 +89 -1 +104 -1 +129 -1 +143 1 +J65 12 +9 -1 +19 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +94 -1 +99 -1 +114 -1 +119 -1 +144 1 +J66 21 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +75 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +146 1 +J67 4 +40 -1 +85 -1 +90 -1 +147 1 +J68 3 +80 -1 +95 -1 +149 1 +J69 9 +0 -1 +10 -1 +45 -1 +70 -1 +75 -1 +90 -1 +95 -1 +100 -1 +150 1 +J70 15 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +110 -1 +115 -1 +120 -1 +152 1 +J71 3 +85 -1 +105 -1 +153 1 +J72 25 +0 -1 +5 -1 +10 -1 +15 -1 +25 -1 +30 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +155 1 +J73 3 +20 -1 +35 -1 +156 1 +J74 13 +0 -1 +10 -1 +20 -1 +30 -1 +35 -1 +40 -1 +45 -1 +70 -1 +75 -1 +85 -1 +100 -1 +125 -1 +157 1 +J75 12 +5 -1 +15 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +90 -1 +95 -1 +110 -1 +115 -1 +158 1 +J76 4 +25 -1 +105 -1 +120 -1 +159 1 +J77 21 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +76 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +146 1 +J78 4 +41 -1 +86 -1 +91 -1 +147 1 +J79 3 +81 -1 +96 -1 +149 1 +J80 9 +1 -1 +11 -1 +46 -1 +71 -1 +76 -1 +91 -1 +96 -1 +101 -1 +150 1 +J81 15 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +111 -1 +116 -1 +121 -1 +152 1 +J82 3 +86 -1 +106 -1 +153 1 +J83 25 +1 -1 +6 -1 +11 -1 +16 -1 +26 -1 +31 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +155 1 +J84 3 +21 -1 +36 -1 +156 1 +J85 13 +1 -1 +11 -1 +21 -1 +31 -1 +36 -1 +41 -1 +46 -1 +71 -1 +76 -1 +86 -1 +101 -1 +126 -1 +157 1 +J86 12 +6 -1 +16 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +91 -1 +96 -1 +111 -1 +116 -1 +158 1 +J87 4 +26 -1 +106 -1 +121 -1 +159 1 +J88 21 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +77 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +146 1 +J89 4 +42 -1 +87 -1 +92 -1 +147 1 +J90 3 +82 -1 +97 -1 +149 1 +J91 9 +2 -1 +12 -1 +47 -1 +72 -1 +77 -1 +92 -1 +97 -1 +102 -1 +150 1 +J92 15 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +112 -1 +117 -1 +122 -1 +152 1 +J93 3 +87 -1 +107 -1 +153 1 +J94 25 +2 -1 +7 -1 +12 -1 +17 -1 +27 -1 +32 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +155 1 +J95 3 +22 -1 +37 -1 +156 1 +J96 13 +2 -1 +12 -1 +22 -1 +32 -1 +37 -1 +42 -1 +47 -1 +72 -1 +77 -1 +87 -1 +102 -1 +127 -1 +157 1 +J97 12 +7 -1 +17 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +92 -1 +97 -1 +112 -1 +117 -1 +158 1 +J98 4 +27 -1 +107 -1 +122 -1 +159 1 +J99 21 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +78 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +146 1 +J100 4 +43 -1 +88 -1 +93 -1 +147 1 +J101 3 +83 -1 +98 -1 +149 1 +J102 9 +3 -1 +13 -1 +48 -1 +73 -1 +78 -1 +93 -1 +98 -1 +103 -1 +150 1 +J103 15 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +113 -1 +118 -1 +123 -1 +152 1 +J104 3 +88 -1 +108 -1 +153 1 +J105 25 +3 -1 +8 -1 +13 -1 +18 -1 +28 -1 +33 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +155 1 +J106 3 +23 -1 +38 -1 +156 1 +J107 13 +3 -1 +13 -1 +23 -1 +33 -1 +38 -1 +43 -1 +48 -1 +73 -1 +78 -1 +88 -1 +103 -1 +128 -1 +157 1 +J108 12 +8 -1 +18 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +93 -1 +98 -1 +113 -1 +118 -1 +158 1 +J109 4 +28 -1 +108 -1 +123 -1 +159 1 +J110 21 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +79 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +146 1 +J111 4 +44 -1 +89 -1 +94 -1 +147 1 +J112 3 +84 -1 +99 -1 +149 1 +J113 9 +4 -1 +14 -1 +49 -1 +74 -1 +79 -1 +94 -1 +99 -1 +104 -1 +150 1 +J114 15 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +114 -1 +119 -1 +124 -1 +152 1 +J115 3 +89 -1 +109 -1 +153 1 +J116 25 +4 -1 +9 -1 +14 -1 +19 -1 +29 -1 +34 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +155 1 +J117 3 +24 -1 +39 -1 +156 1 +J118 13 +4 -1 +14 -1 +24 -1 +34 -1 +39 -1 +44 -1 +49 -1 +74 -1 +79 -1 +89 -1 +104 -1 +129 -1 +157 1 +J119 12 +9 -1 +19 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +94 -1 +99 -1 +114 -1 +119 -1 +158 1 +J120 4 +29 -1 +109 -1 +124 -1 +159 1 +G0 30 +130 -1 +131 1 +132 -1 +133 -1 +134 -1 +135 -1 +136 -1 +137 -1 +138 -1 +139 -1 +140 -1 +141 -1 +142 -1 +143 -1 +144 -1 +145 -1 +146 1 +147 1 +148 1 +149 1 +150 1 +151 1 +152 1 +153 1 +154 1 +155 1 +156 1 +157 1 +158 1 +159 1 diff --git a/samples/NetLinx+ERB/sample.axi.erb b/samples/NetLinx+ERB/sample.axi.erb new file mode 100644 index 00000000..92fa9b03 --- /dev/null +++ b/samples/NetLinx+ERB/sample.axi.erb @@ -0,0 +1,78 @@ +(*********************************************************** + Sample File + + For testing syntax highlighting +************************************************************) + +#if_not_defined Sample +#define Sample 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +<% global_constant_justify = 20 -%> +// Video Source Select Buttons +<%= + video_sources = { + BTN_VID_FOH_PC: { btn: 11, input: :VID_SRC_FOH_PC }, + BTN_VID_STAGE_PC: { btn: 12, input: :VID_SRC_STAGE_PC }, + BTN_VID_BLURAY: { btn: 13, input: :VID_SRC_BLURAY }, + } + + print_constant_hash video_sources.remap(:btn), + justify: global_constant_justify +%> + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Video Source Select +<%= + justify group(video_sources.remap :input) { |name, input| + "[#{@dvTP}, #{name}] = (outputs[VID_DEST_PROJECTOR].input == #{input});" + } +%> + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx+ERB/sample.axs.erb b/samples/NetLinx+ERB/sample.axs.erb new file mode 100644 index 00000000..92fa9b03 --- /dev/null +++ b/samples/NetLinx+ERB/sample.axs.erb @@ -0,0 +1,78 @@ +(*********************************************************** + Sample File + + For testing syntax highlighting +************************************************************) + +#if_not_defined Sample +#define Sample 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +<% global_constant_justify = 20 -%> +// Video Source Select Buttons +<%= + video_sources = { + BTN_VID_FOH_PC: { btn: 11, input: :VID_SRC_FOH_PC }, + BTN_VID_STAGE_PC: { btn: 12, input: :VID_SRC_STAGE_PC }, + BTN_VID_BLURAY: { btn: 13, input: :VID_SRC_BLURAY }, + } + + print_constant_hash video_sources.remap(:btn), + justify: global_constant_justify +%> + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Video Source Select +<%= + justify group(video_sources.remap :input) { |name, input| + "[#{@dvTP}, #{name}] = (outputs[VID_DEST_PROJECTOR].input == #{input});" + } +%> + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx/projector.axi b/samples/NetLinx/projector.axi new file mode 100644 index 00000000..f4b53e20 --- /dev/null +++ b/samples/NetLinx/projector.axi @@ -0,0 +1,132 @@ +(*********************************************************** + Mock Projector + + For testing syntax highlighting +************************************************************) + +#if_not_defined MOCK_PROJECTOR +#define MOCK_PROJECTOR 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +dvPROJECTOR = 5001:1:0; + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +// Power States +POWER_STATE_ON = 0; +POWER_STATE_OFF = 1; +POWER_STATE_WARMING = 2; +POWER_STATE_COOLING = 3; + +// Inputs +INPUT_HDMI = 0; +INPUT_VGA = 1; +INPUT_COMPOSITE = 2; +INPUT_SVIDEO = 3; + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +#include 'amx-lib-log' + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +struct projector_t +{ + integer power_state; + integer input; + integer lamp_hours; +} + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +volatile projector_t proj_1; + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +define_function initialize(projector_t self) +{ + self.power_state = POWER_STATE_OFF; + self.input = INPUT_HDMI; + self.lamp_hours = 0; +} + +define_function switch_input(projector_t self, integer input) +{ + self.input = input; + print(LOG_LEVEL_INFO, "'Projector set to input: ', itoa(input)"); +} + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +initialize(proj_1); + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +data_event[dvPROJECTOR] +{ + string: + { + parse_message(data.text); + } + + command: {} + online: {} + offline: {} +} + +button_event[dvTP, BTN_HDMI] +button_event[dvTP, BTN_VGA] +button_event[dvTP, BTN_COMPOSITE] +button_event[dvTP, BTN_SVIDEO] +{ + push: + { + switch (button.input.channel) + { + case BTN_HDMI: switch_input(proj_1, INPUT_HDMI); + case BTN_VGA: switch_input(proj_1, INPUT_VGA); + case BTN_COMPOSITE: switch_input(proj_1, INPUT_COMPOSITE); + case BTN_SVIDEO: switch_input(proj_1, INPUT_SVIDEO); + } + } + + release: {} +} + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +[dvTP, BTN_POWER_ON] = (proj_1.power_state == POWER_STATE_ON); +[dvTP, BTN_POWER_OFF] = (proj_1.power_state == POWER_STATE_OFF); + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx/volume-array.axs b/samples/NetLinx/volume-array.axs new file mode 100644 index 00000000..902b86ac --- /dev/null +++ b/samples/NetLinx/volume-array.axs @@ -0,0 +1,158 @@ +(*********************************************************** + AMX VOLUME CONTROL + VOLUME ARRAY EXAMPLE + + Website: https://sourceforge.net/projects/amx-lib-volume/ + + + This application demonstrates the use of volume control + arrays using the amx-lib-volume library. + + Volume control operation can be viewed by watching the + master's internal diagnostic output. + + I/O PORT CONNECTIONS: + Ch 1: Volume Up Button + Ch 2: Volume Down Button +************************************************************ +Copyright 2011, 2012, 2014 Alex McLain + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +************************************************************) + +PROGRAM_NAME='volume array' +(***********************************************************) +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* REV HISTORY: *) +(***********************************************************) +(* + $History: See version control repository. +*) +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +// Include the volume control library. +#include 'amx-lib-volume' + +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +dvDebug = 0:0:0; // For debug output. + +dvIO = 36000:1:0; // Volume up/down button connections. + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +// Volume control indexes. +MIC1 = 1; // Microphone 1. +MIC2 = 2; // Microphone 2. +MIC3 = 3; // Microphone 3. +MIC4 = 4; // Microphone 4. +WLS1 = 5; // Wireless mic 1. +WLS2 = 6; // Wireless mic 2. +IPOD = 7; // iPod input. +CD = 8; // CD player input. + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +// Define a volume control array for the input devices. +volume inputs[8]; + +(***********************************************************) +(* LATCHING DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_LATCHING + +(***********************************************************) +(* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_MUTUALLY_EXCLUSIVE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) +(* EXAMPLE: DEFINE_FUNCTION () *) +(* EXAMPLE: DEFINE_CALL '' () *) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +// Initialize the array of volume controls. +volArrayInit(inputs, 0, VOL_UNMUTED, 10000, 20000, 5); + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Volume Up +button_event[dvIO, 1] +{ + PUSH: + { + volArrayIncrement(inputs); // Increment the volume up a step. + send_string dvDebug, "'Volume Up MIC1: ', itoa(volGetLevel(inputs[MIC1]))"; + send_string dvDebug, "'Volume Up MIC2: ', itoa(volGetLevel(inputs[MIC2]))"; + send_string dvDebug, "'Volume Up MIC3: ', itoa(volGetLevel(inputs[MIC3]))"; + send_string dvDebug, "'Volume Up MIC4: ', itoa(volGetLevel(inputs[MIC4]))"; + send_string dvDebug, "'Volume Up WLS1: ', itoa(volGetLevel(inputs[WLS1]))"; + send_string dvDebug, "'Volume Up WLS2: ', itoa(volGetLevel(inputs[WLS2]))"; + send_string dvDebug, "'Volume Up IPOD: ', itoa(volGetLevel(inputs[IPOD]))"; + send_string dvDebug, "'Volume Up CD: ', itoa(volGetLevel(inputs[CD]))"; + } +} + +// Volume Down +button_event[dvIO, 2] +{ + PUSH: + { + volArrayDecrement(inputs); // Decrement the volume down a step. + send_string dvDebug, "'Volume Dn MIC1: ', itoa(volGetLevel(inputs[MIC1]))"; + send_string dvDebug, "'Volume Dn MIC2: ', itoa(volGetLevel(inputs[MIC2]))"; + send_string dvDebug, "'Volume Dn MIC3: ', itoa(volGetLevel(inputs[MIC3]))"; + send_string dvDebug, "'Volume Dn MIC4: ', itoa(volGetLevel(inputs[MIC4]))"; + send_string dvDebug, "'Volume Dn WLS1: ', itoa(volGetLevel(inputs[WLS1]))"; + send_string dvDebug, "'Volume Dn WLS2: ', itoa(volGetLevel(inputs[WLS2]))"; + send_string dvDebug, "'Volume Dn IPOD: ', itoa(volGetLevel(inputs[IPOD]))"; + send_string dvDebug, "'Volume Dn CD: ', itoa(volGetLevel(inputs[CD]))"; + } +} + +(***********************************************************) +(* THE ACTUAL PROGRAM GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) diff --git a/samples/NewLisp/irc.lsp b/samples/NewLisp/irc.lsp new file mode 100644 index 00000000..0cac4034 --- /dev/null +++ b/samples/NewLisp/irc.lsp @@ -0,0 +1,239 @@ +#!/usr/bin/env newlisp + +;; @module IRC +;; @description a basic irc library +;; @version early alpha! 0.1 2013-01-02 20:11:22 +;; @author cormullion +;; Usage: +;; (IRC:init "newlithper") ; a username/nick (not that one obviously :-) +;; (IRC:connect "irc.freenode.net" 6667) ; irc/server +;; (IRC:join-channel {#newlisp}) ; join a room +;; either (IRC:read-irc-loop) ; loop - monitor only, no input +;; or (IRC:session) ; a command-line session, end with /QUIT + +(context 'IRC) + (define Inickname) + (define Ichannels) + (define Iserver) + (define Iconnected) + (define Icallbacks '()) + (define Idle-time 400) ; seconds + (define Itime-stamp) ; time since last message was processed + +(define (register-callback callback-name callback-function) + (println {registering callback for } callback-name { : } (sym (term callback-function) (prefix callback-function))) + (push (list callback-name (sym (term callback-function) (prefix callback-function))) Icallbacks)) + +(define (deregister-callback callback-name) + (println {deregistering callback for } callback-name) + (setf (assoc "idle-event" Icallbacks) nil) + (println {current callbacks: } Icallbacks)) + +(define (do-callback callback-name data) + (when (set 'func (lookup callback-name Icallbacks)) ; find first callback + (if-not (catch (apply func (list data)) 'error) + (println {error in callback } callback-name {: } error)))) + +(define (do-callbacks callback-name data) + (dolist (rf (ref-all callback-name Icallbacks)) + (set 'callback-entry (Icallbacks (first rf))) + (when (set 'func (last callback-entry)) + (if-not (catch (apply func (list data)) 'error) + (println {error in callback } callback-name {: } error))))) + +(define (init str) + (set 'Inickname str) + (set 'Iconnected nil) + (set 'Ichannels '()) + (set 'Itime-stamp (time-of-day))) + +(define (connect server port) + (set 'Iserver (net-connect server port)) + (net-send Iserver (format "USER %s %s %s :%s\r\n" Inickname Inickname Inickname Inickname)) + (net-send Iserver (format "NICK %s \r\n" Inickname)) + (set 'Iconnected true) + (do-callbacks "connect" (list (list "server" server) (list "port" port)))) + +(define (identify password) + (net-send Iserver (format "PRIVMSG nickserv :identify %s\r\n" password))) + +(define (join-channel channel) + (when (net-send Iserver (format "JOIN %s \r\n" channel)) + (push channel Ichannels) + (do-callbacks "join-channel" (list (list "channel" channel) (list "nickname" Inickname))))) + +(define (part chan) + (if-not (empty? chan) + ; leave specified + (begin + (net-send Iserver (format "PART %s\r\n" chan)) + (replace channel Ichannels) + (do-callbacks "part" (list (list "channel" channel)))) + ; leave all + (begin + (dolist (channel Ichannels) + (net-send Iserver (format "PART %s\r\n" channel)) + (replace channel Ichannels) + (do-callbacks "part" (list (list "channel" channel))))))) + +(define (do-quit message) + (do-callbacks "quit" '()) ; chance to do stuff before quit... + (net-send Iserver (format "QUIT :%s\r\n" message)) + (sleep 1000) + (set 'Ichannels '()) + (close Iserver) + (set 'Iconnected nil)) + +(define (privmsg user message) + (net-send Iserver (format "PRIVMSG %s :%s\r\n" user message))) + +(define (notice user message) + (net-send Iserver (format "NOTICE %s :%s\r\n" user message))) + +(define (send-to-server message (channel nil)) + (cond + ((starts-with message {/}) ; default command character + (set 'the-message (replace "^/" (copy message) {} 0)) ; keep original + (net-send Iserver (format "%s \r\n" the-message)) ; send it + ; do a quit + (if (starts-with (lower-case the-message) "quit") + (do-quit { enough}))) + (true + (if (nil? channel) + ; say to all channels + (dolist (c Ichannels) + (net-send Iserver (format "PRIVMSG %s :%s\r\n" c message))) + ; say to specified channel + (if (find channel Ichannels) + (net-send Iserver (format "PRIVMSG %s :%s\r\n" channel message)))))) + (do-callbacks "send-to-server" (list (list "channel" channel) (list "message" message)))) + +(define (process-command sender command text) + (cond + ((= sender "PING") + (net-send Iserver (format "PONG %s\r\n" command))) + ((or (= command "NOTICE") (= command "PRIVMSG")) + (process-message sender command text)) + ((= command "JOIN") + (set 'username (first (clean empty? (parse sender {!|:} 0)))) + (set 'channel (last (clean empty? (parse sender {!|:} 0)))) + (println {username } username { joined } channel) + (do-callbacks "join" (list (list "channel" channel) (list "username" username)))) + (true + nil))) + +(define (process-message sender command text) + (let ((username {} target {} message {})) + (set 'username (first (clean empty? (parse sender {!|:} 0)))) + (set 'target (trim (first (clean empty? (parse text {!|:} 0))))) + (set 'message (slice text (+ (find {:} text) 1))) + (cond + ((starts-with message "\001") + (process-ctcp username target message)) + ((find target Ichannels) + (cond + ((= command {PRIVMSG}) + (do-callbacks "channel-message" (list (list "channel" target) (list "username" username) (list "message" message)))) + ((= command {NOTICE}) + (do-callbacks "channel-notice" (list (list "channel" target) (list "username" username) (list "message" message)))))) + ((= target Inickname) + (cond + ((= command {PRIVMSG}) + (do-callbacks "private-message" (list (list "username" username) (list "message" message)))) + ((= command {NOTICE}) + (do-callbacks "private-notice" (list (list "username" username) (list "message" message)))))) + (true + nil)))) + +(define (process-ctcp username target message) + (cond + ((starts-with message "\001VERSION\001") + (net-send Iserver (format "NOTICE %s :\001VERSION %s\001\r\n" username message))) + ((starts-with message "\001PING") + (set 'data (first (rest (clean empty? (parse message { } 0))))) + (set 'data (trim data "\001" "\001")) + (net-send Iserver (format "NOTICE %s :\001PING %s\001\r\n" username data))) + ((starts-with message "\001ACTION") +; (set 'data (first (rest (clean empty? (parse message { } 0))))) +; (set 'data (join data { })) +; (set 'data (trim data "\001" "\001")) + (if (find target Ichannels) + (do-callbacks "channel-action" (list (list "username" username) (list "message" message)))) + (if (= target Inickname) + (do-callbacks "private-action" (list (list "username" username) (list "message" message))))) + ((starts-with message "\001TIME\001") + (net-send Iserver (format "NOTICE %s:\001TIME :%s\001\r\n" username (date)))))) + +(define (parse-buffer raw-buffer) + (let ((messages (clean empty? (parse raw-buffer "\r\n" 0))) + (sender {} command {} text {})) + ; check for elapsed time since last activity + (when (> (sub (time-of-day) Itime-stamp) (mul Idle-time 1000)) + (do-callbacks "idle-event") + (set 'Itime-stamp (time-of-day))) + (dolist (message messages) + (set 'message-parts (parse message { })) + (unless (empty? message-parts) + (set 'sender (first message-parts)) + (catch (set 'command (first (rest message-parts))) 'error) + (catch (set 'text (join (rest (rest message-parts)) { })) 'error)) + (process-command sender command text)))) + +(define (read-irc) + (let ((buffer {})) + (when (!= (net-peek Iserver) 0) + (net-receive Iserver buffer 8192 "\n") + (unless (empty? buffer) + (parse-buffer buffer))))) + +(define (read-irc-loop) ; monitoring + (let ((buffer {})) + (while Iconnected + (read-irc) + (sleep 1000)))) + +(define (print-raw-message data) ; example of using a callback + (set 'raw-data (lookup "message" data)) + (set 'channel (lookup "channel" data)) + (set 'message-text raw-data) + (println (date (date-value) 0 {%H:%M:%S }) username {> } message-text)) + +(define (print-outgoing-message data) + (set 'raw-data (lookup "message" data)) + (set 'channel (lookup "channel" data)) + (set 'message-text raw-data) + (println (date (date-value) 0 {%H:%M:%S }) Inickname {> } message-text)) + +(define (session); interactive terminal + ; must add callbacks to display messages + (register-callback "channel-message" 'print-raw-message) + (register-callback "send-to-server" 'print-outgoing-message) + (while Iconnected + (while (zero? (peek 0)) + (read-irc) + (sleep 1000)) + (send-to-server (string (read-line 0)))) + (println {finished session } (date)) + (exit)) + +; end of IRC code + +[text] + +simple bot code: +(load (string (env {HOME}) {/projects/programming/newlisp-projects/irc.lsp})) +(context 'BOT) +(define bot-name "bot") +(define (join-channel data) + (println {in BOT:join-channel with data: } data)) +(define (process-message data) + ????) +(IRC:register-callback "join-channel" 'join-channel) +(IRC:register-callback "channel-message" 'process-message) +(IRC:register-callback "idle-event" 'do-idle-event) +(IRC:register-callback "send-to-server" 'do-send-event) +(IRC:init bot-name) +(IRC:connect "irc.freenode.net" 6667) +(IRC:join-channel {#newlisp}) +(IRC:read-irc-loop) +[/text] \ No newline at end of file diff --git a/samples/NewLisp/log-to-database.lisp b/samples/NewLisp/log-to-database.lisp new file mode 100644 index 00000000..60af8406 --- /dev/null +++ b/samples/NewLisp/log-to-database.lisp @@ -0,0 +1,195 @@ +(module "sqlite3.lsp") ; loads the SQLite3 database module + +; FUNCTIONS------------------------------------------------- + +(define (displayln str-to-display) + (println str-to-display) +) + +(define (open-database sql-db-to-open) + (if (sql3:open (string sql-db-to-open ".db")) + (displayln "") + (displayln "There was a problem opening the database " sql-db-to-open ": " (sql3:error)))) + +(define (close-database) + (if (sql3:close) + (displayln "") + (displayln "There was a problem closing the database: " (sql3:error)))) + +;====== SAFE-FOR-SQL =============================================================== +; this function makes strings safe for inserting into SQL statements +; to avoid SQL injection issues +; it's simple right now but will add to it later +;=================================================================================== +(define (safe-for-sql str-sql-query) + (if (string? str-sql-query) (begin + (replace "&" str-sql-query "&") + (replace "'" str-sql-query "'") + (replace "\"" str-sql-query """) + )) + (set 'result str-sql-query)) + +(define (query sql-text) + (set 'sqlarray (sql3:sql sql-text)) ; results of query + (if sqlarray + (setq query-return sqlarray) + (if (sql3:error) + (displayln (sql3:error) " query problem ") + (setq query-return nil)))) + +(define-macro (create-record) + ; first save the values + (set 'temp-record-values nil) + (set 'temp-table-name (first (args))) + ;(displayln "
Arguments: " (args)) + (dolist (s (rest (args))) (push (eval s) temp-record-values -1)) + ; now save the arguments as symbols under the context "DB" + (dolist (s (rest (args))) + (set 'temp-index-num (string $idx)) ; we need to number the symbols to keep them in the correct order + (if (= (length temp-index-num) 1) (set 'temp-index-num (string "0" temp-index-num))) ; leading 0 keeps the max at 100. + (sym (string temp-index-num s) 'DB)) + ; now create the sql query + (set 'temp-sql-query (string "INSERT INTO " temp-table-name " (")) + ;(displayln "

TABLE NAME: " temp-table-name) + ;(displayln "

SYMBOLS: " (symbols DB)) + ;(displayln "
VALUES: " temp-record-values) + (dolist (d (symbols DB)) (extend temp-sql-query (rest (rest (rest (rest (rest (string d)))))) ", ")) + (set 'temp-sql-query (chop (chop temp-sql-query))) + (extend temp-sql-query ") VALUES (") + (dolist (q temp-record-values) + (if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric + (extend temp-sql-query (string (safe-for-sql q))) + (if (string? q) (extend temp-sql-query "'")) ; close quote if value is non-numeric + (extend temp-sql-query ", ")) ; all values are sanitized to avoid SQL injection + (set 'temp-sql-query (chop (chop temp-sql-query))) + (extend temp-sql-query ");") + ;(displayln "

***** SQL QUERY: " temp-sql-query) + (displayln (query temp-sql-query)) ; actually run the query against the database + (delete 'DB) ; we're done, so delete all symbols in the DB context. +) + +(define-macro (update-record) + ; first save the values + (set 'temp-record-values nil) + (set 'temp-table-name (first (args))) + (set 'continue true) ; debugging + (dolist (s (rest (args))) (push (eval s) temp-record-values -1)) + ; now save the arguments as symbols under the context "D2" + (dolist (st (rest (args))) + (set 'temp-index-num (string $idx)) ; we need to number the symbols to keep them in the correct order + (if (= (length temp-index-num) 1) (set 'temp-index-num (string "0" temp-index-num))) ; leading 0 keeps the max at 100. + ;(displayln "
SYMBOL>>>>" (string temp-index-num st) "<<<") ; debugging + (sym (string temp-index-num st) 'D2) + ) + (if continue (begin ; --- temporary debugging + ; now create the sql query + (set 'temp-sql-query (string "UPDATE " temp-table-name " SET ")) + ;(displayln "

TABLE NAME: " temp-table-name) + ;(displayln "

SYMBOLS: " (symbols D2)) + ;(displayln "
VALUES: " temp-record-values) + (dolist (d (rest (symbols D2))) ; ignore the first argument, as it will be the ConditionColumn for later + (extend temp-sql-query (rest (rest (rest (rest (rest (string d)))))) "=") + (set 'q (temp-record-values (+ $idx 1))) + (if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric + (extend temp-sql-query (string (safe-for-sql q))) + (if (string? q) (extend temp-sql-query "'")) ; close quote if value is non-numeric + (extend temp-sql-query ", ") ; all values are sanitized to avoid SQL injection + ) + (set 'temp-sql-query (chop (chop temp-sql-query))) + ; okay now add the ConditionColumn value + (extend temp-sql-query (string " WHERE " (rest (rest (rest (rest (rest (string (first (symbols D2)))))))) "=")) + (if (string? (first temp-record-values)) (extend temp-sql-query "'")) + (extend temp-sql-query (string (safe-for-sql (first temp-record-values)))) + (if (string? (first temp-record-values)) (extend temp-sql-query "'")) + (extend temp-sql-query ";") + ;(displayln "

***** SQL QUERY: " temp-sql-query) + (query temp-sql-query) ; actually run the query against the database + (delete 'D2) ; we're done, so delete all symbols in the DB context. + )) ; --- end temporary debugging +) + +(define-macro (delete-record) + (set 'temp-table-name (first (args))) + (set 'temp-record-values nil) + (dolist (s (rest (args))) (push (eval s) temp-record-values -1)) ; only one value for NOW... + (sym (first (rest (args))) 'DB) ; put the second argument (for now) into a symbol in the DB context + ; this will have to be in a dolist loop of (rest (args)) when I add more + (set 'temp-sql-query (string "DELETE FROM " temp-table-name " WHERE ")) + (dolist (d (symbols DB)) (extend temp-sql-query (rest (rest (rest (string d)))))) + (extend temp-sql-query "=") + ; why am I doing a loop here? There should be only one value, right? But maybe for future extension... + (dolist (q temp-record-values) + (if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric + (extend temp-sql-query (string (safe-for-sql q))) + (if (string? q) (extend temp-sql-query "'"))) ; close quote if value is non-numeric + (extend temp-sql-query ";") + ;(displayln "TEMP-DELETE-QUERY: " temp-sql-query) + (query temp-sql-query) + (delete 'DB) ; we're done, so delete all symbols in the DB context. +) + +(define-macro (get-record) + (set 'temp-table-name (first (args))) + ; if you have more arguments than just the table name, they become the elements of the WHERE clause + (if (> (length (args)) 1) (begin + (set 'temp-record-values nil) + (dolist (s (rest (args))) (push (eval s) temp-record-values -1)) ; only one value for NOW... + (sym (first (rest (args))) 'DB) ; put the second argument (for now) into a symbol in the DB context + ; this will have to be in a dolist loop of (rest (args)) when I add more + (set 'temp-sql-query (string "SELECT * FROM " temp-table-name " WHERE ")) + (dolist (d (symbols DB)) (extend temp-sql-query (rest (rest (rest (string d)))))) + (extend temp-sql-query "=") + ; why am I doing a loop here? There should be only one value, right? But maybe for future extension... + (dolist (q temp-record-values) + (if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric + (extend temp-sql-query (string (safe-for-sql q))) + (if (string? q) (extend temp-sql-query "'"))) ; close quote if value is non-numeric + (extend temp-sql-query ";") + ) + ; otherwise, just get everything in that table + (set 'temp-sql-query (string "SELECT * FROM " temp-table-name ";")) + ) + ;(displayln "TEMP-GET-QUERY: " temp-sql-query) + (delete 'DB) ; we're done, so delete all symbols in the DB context. + (set 'return-value (query temp-sql-query)) ; this returns a list of everything in the record +) + +; END FUNCTIONS =================== + + +(open-database "SERVER-LOGS") +(query "CREATE TABLE Logs (Id INTEGER PRIMARY KEY, IP TEXT, UserId TEXT, UserName TEXT, Date DATE, Request TEXT, Result TEXT, Size INTEGER, Referrer TEXT, UserAgent TEXT)") +;(print (query "SELECT * from SQLITE_MASTER;")) +(set 'access-log (read-file "/var/log/apache2/access.log")) +(set 'access-list (parse access-log "\n")) +(set 'max-items (integer (first (first (query "select count(*) from Logs"))))) +(println "Number of items in database: " max-items) +(println "Number of lines in log: " (length access-list)) +(dolist (line access-list) + (set 'line-list (parse line)) + ;(println "Line# " $idx " - " line-list) + ;(println "Length of line: " (length line-list)) + (if (> (length line-list) 0) (begin + (++ max-items) + (set 'Id max-items) (print $idx "/" (length access-list)) + (set 'IP (string (line-list 0) (line-list 1) (line-list 2))) + (set 'UserId (line-list 3)) + (set 'UserName (line-list 4)) + (set 'Date (line-list 5)) + (set 'Date (trim Date "[")) + (set 'Date (trim Date "]")) + ;(println "DATE: " Date) + (set 'date-parsed (date-parse Date "%d/%b/%Y:%H:%M:%S -0700")) + ;(println "DATE-PARSED: " date-parsed) + (set 'Date (date date-parsed 0 "%Y-%m-%dT%H:%M:%S")) + (println " " Date) + (set 'Request (line-list 6)) + (set 'Result (line-list 7)) + (set 'Size (line-list 8)) + (set 'Referrer (line-list 9)) + (set 'UserAgent (line-list 10)) + (create-record "Logs" Id IP UserId UserName Date Request Result Size Referrer UserAgent) + )) +) +(close-database) +(exit) \ No newline at end of file diff --git a/samples/NewLisp/queens.nl b/samples/NewLisp/queens.nl new file mode 100644 index 00000000..61c04992 --- /dev/null +++ b/samples/NewLisp/queens.nl @@ -0,0 +1,49 @@ +#!/usr/bin/env newlisp + +(constant 'NUM 8) + +(define (intersects? q1 q2) + (or + (= (q1 0) (q2 0)) + (= (q1 1) (q2 1)) + (= (abs (- (q1 0) (q2 0))) (abs (- (q1 1) (q2 1)))))) + +(define (variant? alist) + (set 'logic nil) + (cond + ((= (length alist) 1) true) + ((> (length alist) 1) + (while (> (length alist) 1) + (set 'q (pop alist -1)) + (dolist (el alist) + (push + (intersects? + (list q (inc (length alist))) + (list el (+ 1 $idx))) + logic -1))) + (not (apply or logic))))) + +(define (fork-by-line alist) + (let (res '()) + (dolist (i (sequence 1 NUM)) + (set 'tmp alist) + (push i tmp -1) + (setf res (push tmp res -1))) + res)) + +(define (find-variants num) + (let (res '()) + (cond + ((< num 1) + (begin (println "num < 1") (exit))) + ((= num 1) + (dolist (i (sequence 1 NUM)) (push (list i) res -1))) + ((> num 1) + (dolist (v (find-variants (dec num))) + (set 'passed (filter variant? (fork-by-line v))) + (if (not (empty? passed)) (extend res passed))))) + res)) + +(set 'solutions (find-variants NUM)) +(println (length solutions)) +;;(exit) \ No newline at end of file diff --git a/samples/Nginx/example.com.vhost b/samples/Nginx/example.com.vhost new file mode 100644 index 00000000..ed0c40d9 --- /dev/null +++ b/samples/Nginx/example.com.vhost @@ -0,0 +1,242 @@ +# Move the www people to no-www +server { + listen 80; + server_name www.example.com; + return 301 $scheme://example.com$request_uri; +} + +server { + listen 80; + listen 443 ssl; + server_name example.com; + + # Certs sent to the client in SERVER HELLO are concatenated in ssl_certificate + ssl_certificate /srv/www/example.com/ssl/example.com.crt; + ssl_certificate_key /srv/www/example.com/ssl/example.com.key; + + # Allow multiple connections to use the same key data + ssl_session_timeout 5m; + ssl_session_cache shared:SSL:50m; + + # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits + ssl_dhparam /etc/ssl/certs/dhparam.pem; + + # Intermediate configuration. tweak to your needs + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + include snippets/ssl_ciphers_intermediate.conf; + ssl_prefer_server_ciphers on; + + # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months) + #add_header Strict-Transport-Security max-age=15768000; + + # OCSP Stapling - fetch OCSP records from URL in ssl_certificate and cache them + ssl_stapling on; + ssl_stapling_verify on; + + # Verify chain of trust of OCSP response using Root CA and Intermediate certs + ssl_trusted_certificate /srv/www/example.com/ssl/unified-ssl.crt; + resolver 8.8.8.8 8.8.4.4; + resolver_timeout 10s; + + root /srv/www/example.com/htdocs; + index index.php index.html index.htm; + charset UTF-8; + autoindex off; + + # Deny access based on HTTP method (set in HTTP level) + if ($bad_method = 1) { + return 444; + } + + # Show "Not Found" 404 errors in place of "Forbidden" 403 errors, because + # forbidden errors allow attackers potential insight into your server's + # layout and contents + error_page 403 = 404; + + # It's always good to set logs, note however you cannot turn off the error log + # setting error_log off; will simply create a file called 'off'. + access_log /var/log/nginx/example.com.access.log; + error_log /var/log/nginx/example.com.error.log; + + # Add trailing slash to */wp-admin requests. + rewrite /wp-admin$ $scheme://$host$uri/ permanent; + + location / { + # This try_files directive is used to enable pretty, SEO-friendly URLs + # and permalinks for Wordpress. Leave it *off* to start with, and then + # turn it on once you've gotten Wordpress configured! + try_files $uri $uri/ /index.php?$args; + } + + # Option to create password protected directory + # http://www.howtoforge.com/basic-http-authentication-with-nginx + # location /admin { + # auth_basic "Administrator Login"; + # auth_basic_user_file /var/www/domain.com/admin/.htpasswd; + # } + + # Do not log access to these to keep the logs cleaner + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /apple-touch-icon.png { + log_not_found off; + access_log off; + } + + location = /apple-touch-icon-precomposed.png { + log_not_found off; + access_log off; + } + + # This block will catch static file requests, such as images, css, js + # The ?: prefix is a 'non-capturing' mark, meaning we do not require + # the pattern to be captured into $1 which should help improve performance + location ~* \.(?:3gp|gif|jpg|jpe?g|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff)$ { + # Some basic cache-control for static files to be sent to the browser + expires max; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } + + # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). + # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) + location ~ /\. { + access_log off; + log_not_found off; + deny all; + } + + location ~ ~$ { + access_log off; + log_not_found off; + deny all; + } + + # Common deny or internal locations, to help prevent access to areas of + # the site that should not be public + location ~* wp-admin/includes { + deny all; + } + + location ~* wp-includes/theme-compat/ { + deny all; + } + + location ~* wp-includes/js/tinymce/langs/.*\.php { + deny all; + } + + location /wp-content/ { + internal; + } + + # Deny access to any files with a .php extension in the uploads directory + # Works in sub-directory installs and also in multisite network + # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) + location ~* /(?:uploads|files)/.*\.php$ { + deny all; + } + + # Make sure these get through, esp with dynamic WP sitmap plugin + location = /robots.txt { + try_files $uri /index.php; + } + + location = /sitemap.xml { + try_files $uri /index.php; + } + + location = /sitemap.xml.gz { + try_files $uri /index.php; + } + + # Fix for Firefox issue with cross site font icons + location ~* \.(eot|otf|ttf|woff)$ { + add_header Access-Control-Allow-Origin *; + } + + # Redirect server error pages to the static page /50x.html + # Make sure 50x.html exists at that location + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # Cache everything by default + set $skip_cache 0; + + # POST requests and urls with a query string should always go to PHP + if ($request_method = POST) { + set $skip_cache 1; + } + if ($query_string != "") { + set $skip_cache 1; + } + + # Don't cache uris containing the following segments + if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") { + set $skip_cache 1; + } + + # Don't use the cache for logged in users or recent commenters + if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { + set $skip_cache 1; + } + + # Pass all .php files onto a php-fpm/php-fcgi server. + location ~ [^/]\.php(/|$) { + # regex to split $uri to $fastcgi_script_name and $fastcgi_path + fastcgi_split_path_info ^(.+\.php)(/.+)$; + + # Check that the PHP script exists before passing it + try_files $fastcgi_script_name =404; + + # Bypass the fact that try_files resets $fastcgi_path_info + # see: http://trac.nginx.org/nginx/ticket/321 + set $path_info $fastcgi_path_info; + fastcgi_param PATH_INFO $path_info; + + fastcgi_pass unix:/var/run/example.com.sock; + fastcgi_index index.php; + # Uncomment if site is HTTPS + #fastcgi_param HTTPS on; + include fastcgi.conf; + + fastcgi_cache_bypass $skip_cache; + fastcgi_no_cache $skip_cache; + + fastcgi_cache WORDPRESS; + fastcgi_cache_valid 60m; + } + + location ~ /purge(/.*) { + fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; + } + + # Use this block if PHPMyAdmin is enabled for this domain + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass unix:/var/run/example.com.sock; + fastcgi_index index.php; + include fastcgi.conf; + } + + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + # End PHPMyAdmin block + +} # End of server block. diff --git a/samples/Nit/file.nit b/samples/Nit/file.nit new file mode 100644 index 00000000..889526fc --- /dev/null +++ b/samples/Nit/file.nit @@ -0,0 +1,798 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2004-2008 Jean Privat +# Copyright 2008 Floréal Morandat +# Copyright 2008 Jean-Sébastien Gélinas +# +# This file is free software, which comes along with NIT. This software 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. You can modify it is you want, provided this header +# is kept unaltered, and a notification of the changes is added. +# You are allowed to redistribute it and sell it, alone or is a part of +# another product. + +# File manipulations (create, read, write, etc.) +module file + +intrude import stream +intrude import ropes +import string_search +import time + +in "C Header" `{ + #include + #include + #include + #include + #include + #include + #include + #include +`} + +# File Abstract Stream +abstract class FStream + super IOS + # The path of the file. + var path: nullable String = null + + # The FILE *. + private var file: nullable NativeFile = null + + fun file_stat: FileStat do return _file.file_stat + + # File descriptor of this file + fun fd: Int do return _file.fileno +end + +# File input stream +class IFStream + super FStream + super BufferedIStream + super PollableIStream + # Misc + + # Open the same file again. + # The original path is reused, therefore the reopened file can be a different file. + fun reopen + do + if not eof and not _file.address_is_null then close + _file = new NativeFile.io_open_read(path.to_cstring) + if _file.address_is_null then + last_error = new IOError("Error: Opening file at '{path.as(not null)}' failed with '{sys.errno.strerror}'") + end_reached = true + return + end + end_reached = false + _buffer_pos = 0 + _buffer.clear + end + + redef fun close + do + if _file.address_is_null then return + var i = _file.io_close + _buffer.clear + end_reached = true + end + + redef fun fill_buffer + do + var nb = _file.io_read(_buffer.items, _buffer.capacity) + if nb <= 0 then + end_reached = true + nb = 0 + end + _buffer.length = nb + _buffer_pos = 0 + end + # End of file? + redef var end_reached: Bool = false + + # Open the file at `path` for reading. + init open(path: String) + do + self.path = path + prepare_buffer(10) + _file = new NativeFile.io_open_read(path.to_cstring) + if _file.address_is_null then + last_error = new IOError("Error: Opening file at '{path}' failed with '{sys.errno.strerror}'") + end_reached = true + end + end + + init from_fd(fd: Int) do + self.path = "" + prepare_buffer(10) + _file = fd_to_stream(fd, read_only) + if _file.address_is_null then + last_error = new IOError("Error: Converting fd {fd} to stream failed with '{sys.errno.strerror}'") + end_reached = true + end + end +end + +# File output stream +class OFStream + super FStream + super OStream + + redef fun write(s) + do + if last_error != null then return + if not _is_writable then + last_error = new IOError("Cannot write to non-writable stream") + return + end + if s isa FlatText then + write_native(s.to_cstring, s.length) + else + for i in s.substrings do write_native(i.to_cstring, i.length) + end + end + + redef fun close + do + if _file.address_is_null then + last_error = new IOError("Cannot close non-existing write stream") + _is_writable = false + return + end + var i = _file.io_close + _is_writable = false + end + redef var is_writable = false + + # Write `len` bytes from `native`. + private fun write_native(native: NativeString, len: Int) + do + if last_error != null then return + if not _is_writable then + last_error = new IOError("Cannot write to non-writable stream") + return + end + if _file.address_is_null then + last_error = new IOError("Writing on a null stream") + _is_writable = false + return + end + var err = _file.io_write(native, len) + if err != len then + # Big problem + last_error = new IOError("Problem in writing : {err} {len} \n") + end + end + + # Open the file at `path` for writing. + init open(path: String) + do + _file = new NativeFile.io_open_write(path.to_cstring) + if _file.address_is_null then + last_error = new IOError("Error: Opening file at '{path}' failed with '{sys.errno.strerror}'") + self.path = path + is_writable = false + end + self.path = path + _is_writable = true + end + + # Creates a new File stream from a file descriptor + init from_fd(fd: Int) do + self.path = "" + _file = fd_to_stream(fd, wipe_write) + _is_writable = true + if _file.address_is_null then + last_error = new IOError("Error: Opening stream from file descriptor {fd} failed with '{sys.errno.strerror}'") + _is_writable = false + end + end +end + +redef interface Object + + private fun read_only: NativeString do return "r".to_cstring + + private fun wipe_write: NativeString do return "w".to_cstring + + private fun fd_to_stream(fd: Int, mode: NativeString): NativeFile `{ + return fdopen(fd, mode); + `} + + # returns first available stream to read or write to + # return null on interruption (possibly a signal) + protected fun poll( streams : Sequence[FStream] ) : nullable FStream + do + var in_fds = new Array[Int] + var out_fds = new Array[Int] + var fd_to_stream = new HashMap[Int,FStream] + for s in streams do + var fd = s.fd + if s isa IFStream then in_fds.add( fd ) + if s isa OFStream then out_fds.add( fd ) + + fd_to_stream[fd] = s + end + + var polled_fd = intern_poll( in_fds, out_fds ) + + if polled_fd == null then + return null + else + return fd_to_stream[polled_fd] + end + end + + private fun intern_poll(in_fds: Array[Int], out_fds: Array[Int]) : nullable Int is extern import Array[Int].length, Array[Int].[], Int.as(nullable Int) `{ + int in_len, out_len, total_len; + struct pollfd *c_fds; + sigset_t sigmask; + int i; + int first_polled_fd = -1; + int result; + + in_len = Array_of_Int_length( in_fds ); + out_len = Array_of_Int_length( out_fds ); + total_len = in_len + out_len; + c_fds = malloc( sizeof(struct pollfd) * total_len ); + + /* input streams */ + for ( i=0; i 0 ) { + /* analyse results */ + for ( i=0; i 0 and self.chars[l] == '/' do l -= 1 # remove all trailing `/` + if l == 0 then return "/" + var pos = chars.last_index_of_from('/', l) + var n = self + if pos >= 0 then + n = substring(pos+1, l-pos) + end + return n.strip_extension(ext) + end + + # Extract the dirname of a path + # + # assert "/path/to/a_file.ext".dirname == "/path/to" + # assert "path/to/a_file.ext".dirname == "path/to" + # assert "path/to".dirname == "path" + # assert "path/to/".dirname == "path" + # assert "path".dirname == "." + # assert "/path".dirname == "/" + # assert "/".dirname == "/" + # assert "".dirname == "." + fun dirname: String + do + var l = length - 1 # Index of the last char + while l > 0 and self.chars[l] == '/' do l -= 1 # remove all trailing `/` + var pos = chars.last_index_of_from('/', l) + if pos > 0 then + return substring(0, pos) + else if pos == 0 then + return "/" + else + return "." + end + end + + # Return the canonicalized absolute pathname (see POSIX function `realpath`) + fun realpath: String do + var cs = to_cstring.file_realpath + var res = cs.to_s_with_copy + # cs.free_malloc # FIXME memory leak + return res + end + + # Simplify a file path by remove useless ".", removing "//", and resolving ".." + # ".." are not resolved if they start the path + # starting "/" is not removed + # trainling "/" is removed + # + # Note that the method only wonrk on the string: + # * no I/O access is performed + # * the validity of the path is not checked + # + # assert "some/./complex/../../path/from/../to/a////file//".simplify_path == "path/to/a/file" + # assert "../dir/file".simplify_path == "../dir/file" + # assert "dir/../../".simplify_path == ".." + # assert "dir/..".simplify_path == "." + # assert "//absolute//path/".simplify_path == "/absolute/path" + # assert "//absolute//../".simplify_path == "/" + fun simplify_path: String + do + var a = self.split_with("/") + var a2 = new Array[String] + for x in a do + if x == "." then continue + if x == "" and not a2.is_empty then continue + if x == ".." and not a2.is_empty and a2.last != ".." then + a2.pop + continue + end + a2.push(x) + end + if a2.is_empty then return "." + if a2.length == 1 and a2.first == "" then return "/" + return a2.join("/") + end + + # Correctly join two path using the directory separator. + # + # Using a standard "{self}/{path}" does not work in the following cases: + # + # * `self` is empty. + # * `path` ends with `'/'`. + # * `path` starts with `'/'`. + # + # This method ensures that the join is valid. + # + # assert "hello".join_path("world") == "hello/world" + # assert "hel/lo".join_path("wor/ld") == "hel/lo/wor/ld" + # assert "".join_path("world") == "world" + # assert "hello".join_path("/world") == "/world" + # assert "hello/".join_path("world") == "hello/world" + # assert "hello/".join_path("/world") == "/world" + # + # Note: You may want to use `simplify_path` on the result. + # + # Note: This method works only with POSIX paths. + fun join_path(path: String): String + do + if path.is_empty then return self + if self.is_empty then return path + if path.chars[0] == '/' then return path + if self.last == '/' then return "{self}{path}" + return "{self}/{path}" + end + + # Convert the path (`self`) to a program name. + # + # Ensure the path (`self`) will be treated as-is by POSIX shells when it is + # used as a program name. In order to do that, prepend `./` if needed. + # + # assert "foo".to_program_name == "./foo" + # assert "/foo".to_program_name == "/foo" + # assert "".to_program_name == "./" # At least, your shell will detect the error. + fun to_program_name: String do + if self.has_prefix("/") then + return self + else + return "./{self}" + end + end + + # Alias for `join_path` + # + # assert "hello" / "world" == "hello/world" + # assert "hel/lo" / "wor/ld" == "hel/lo/wor/ld" + # assert "" / "world" == "world" + # assert "/hello" / "/world" == "/world" + # + # This operator is quite useful for chaining changes of path. + # The next one being relative to the previous one. + # + # var a = "foo" + # var b = "/bar" + # var c = "baz/foobar" + # assert a/b/c == "/bar/baz/foobar" + fun /(path: String): String do return join_path(path) + + # Returns the relative path needed to go from `self` to `dest`. + # + # assert "/foo/bar".relpath("/foo/baz") == "../baz" + # assert "/foo/bar".relpath("/baz/bar") == "../../baz/bar" + # + # If `self` or `dest` is relative, they are considered relatively to `getcwd`. + # + # In some cases, the result is still independent of the current directory: + # + # assert "foo/bar".relpath("..") == "../../.." + # + # In other cases, parts of the current directory may be exhibited: + # + # var p = "../foo/bar".relpath("baz") + # var c = getcwd.basename("") + # assert p == "../../{c}/baz" + # + # For path resolution independent of the current directory (eg. for paths in URL), + # or to use an other starting directory than the current directory, + # just force absolute paths: + # + # var start = "/a/b/c/d" + # var p2 = (start/"../foo/bar").relpath(start/"baz") + # assert p2 == "../../d/baz" + # + # + # Neither `self` or `dest` has to be real paths or to exist in directories since + # the resolution is only done with string manipulations and without any access to + # the underlying file system. + # + # If `self` and `dest` are the same directory, the empty string is returned: + # + # assert "foo".relpath("foo") == "" + # assert "foo/../bar".relpath("bar") == "" + # + # The empty string and "." designate both the current directory: + # + # assert "".relpath("foo/bar") == "foo/bar" + # assert ".".relpath("foo/bar") == "foo/bar" + # assert "foo/bar".relpath("") == "../.." + # assert "/" + "/".relpath(".") == getcwd + fun relpath(dest: String): String + do + var cwd = getcwd + var from = (cwd/self).simplify_path.split("/") + if from.last.is_empty then from.pop # case for the root directory + var to = (cwd/dest).simplify_path.split("/") + if to.last.is_empty then to.pop # case for the root directory + + # Remove common prefixes + while not from.is_empty and not to.is_empty and from.first == to.first do + from.shift + to.shift + end + + # Result is going up in `from` with ".." then going down following `to` + var from_len = from.length + if from_len == 0 then return to.join("/") + var up = "../"*(from_len-1) + ".." + if to.is_empty then return up + var res = up + "/" + to.join("/") + return res + end + + # Create a directory (and all intermediate directories if needed) + fun mkdir + do + var dirs = self.split_with("/") + var path = new FlatBuffer + if dirs.is_empty then return + if dirs[0].is_empty then + # it was a starting / + path.add('/') + end + for d in dirs do + if d.is_empty then continue + path.append(d) + path.add('/') + path.to_s.to_cstring.file_mkdir + end + end + + # Delete a directory and all of its content, return `true` on success + # + # Does not go through symbolic links and may get stuck in a cycle if there + # is a cycle in the filesystem. + fun rmdir: Bool + do + var ok = true + for file in self.files do + var file_path = self.join_path(file) + var stat = file_path.file_lstat + if stat.is_dir then + ok = file_path.rmdir and ok + else + ok = file_path.file_delete and ok + end + stat.free + end + + # Delete the directory itself + if ok then to_cstring.rmdir + + return ok + end + + # Change the current working directory + # + # "/etc".chdir + # assert getcwd == "/etc" + # "..".chdir + # assert getcwd == "/" + # + # TODO: errno + fun chdir do to_cstring.file_chdir + + # Return right-most extension (without the dot) + # + # Only the last extension is returned. + # There is no special case for combined extensions. + # + # assert "file.txt".file_extension == "txt" + # assert "file.tar.gz".file_extension == "gz" + # + # For file without extension, `null` is returned. + # Hoever, for trailing dot, `""` is returned. + # + # assert "file".file_extension == null + # assert "file.".file_extension == "" + # + # The starting dot of hidden files is never considered. + # + # assert ".file.txt".file_extension == "txt" + # assert ".file".file_extension == null + fun file_extension: nullable String + do + var last_slash = chars.last_index_of('.') + if last_slash > 0 then + return substring( last_slash+1, length ) + else + return null + end + end + + # returns files contained within the directory represented by self + fun files : Set[ String ] is extern import HashSet[String], HashSet[String].add, NativeString.to_s, String.to_cstring, HashSet[String].as(Set[String]) `{ + char *dir_path; + DIR *dir; + + dir_path = String_to_cstring( recv ); + if ((dir = opendir(dir_path)) == NULL) + { + perror( dir_path ); + exit( 1 ); + } + else + { + HashSet_of_String results; + String file_name; + struct dirent *de; + + results = new_HashSet_of_String(); + + while ( ( de = readdir( dir ) ) != NULL ) + if ( strcmp( de->d_name, ".." ) != 0 && + strcmp( de->d_name, "." ) != 0 ) + { + file_name = NativeString_to_s( strdup( de->d_name ) ); + HashSet_of_String_add( results, file_name ); + } + + closedir( dir ); + return HashSet_of_String_as_Set_of_String( results ); + } + `} +end + +redef class NativeString + private fun file_exists: Bool is extern "string_NativeString_NativeString_file_exists_0" + private fun file_stat: FileStat is extern "string_NativeString_NativeString_file_stat_0" + private fun file_lstat: FileStat `{ + struct stat* stat_element; + int res; + stat_element = malloc(sizeof(struct stat)); + res = lstat(recv, stat_element); + if (res == -1) return NULL; + return stat_element; + `} + private fun file_mkdir: Bool is extern "string_NativeString_NativeString_file_mkdir_0" + private fun rmdir: Bool `{ return rmdir(recv); `} + private fun file_delete: Bool is extern "string_NativeString_NativeString_file_delete_0" + private fun file_chdir is extern "string_NativeString_NativeString_file_chdir_0" + private fun file_realpath: NativeString is extern "file_NativeString_realpath" +end + +# This class is system dependent ... must reify the vfs +extern class FileStat `{ struct stat * `} + # Returns the permission bits of file + fun mode: Int is extern "file_FileStat_FileStat_mode_0" + # Returns the last access time + fun atime: Int is extern "file_FileStat_FileStat_atime_0" + # Returns the last status change time + fun ctime: Int is extern "file_FileStat_FileStat_ctime_0" + # Returns the last modification time + fun mtime: Int is extern "file_FileStat_FileStat_mtime_0" + # Returns the size + fun size: Int is extern "file_FileStat_FileStat_size_0" + + # Returns true if it is a regular file (not a device file, pipe, sockect, ...) + fun is_reg: Bool `{ return S_ISREG(recv->st_mode); `} + # Returns true if it is a directory + fun is_dir: Bool `{ return S_ISDIR(recv->st_mode); `} + # Returns true if it is a character device + fun is_chr: Bool `{ return S_ISCHR(recv->st_mode); `} + # Returns true if it is a block device + fun is_blk: Bool `{ return S_ISBLK(recv->st_mode); `} + # Returns true if the type is fifo + fun is_fifo: Bool `{ return S_ISFIFO(recv->st_mode); `} + # Returns true if the type is a link + fun is_lnk: Bool `{ return S_ISLNK(recv->st_mode); `} + # Returns true if the type is a socket + fun is_sock: Bool `{ return S_ISSOCK(recv->st_mode); `} +end + +# Instance of this class are standard FILE * pointers +private extern class NativeFile `{ FILE* `} + fun io_read(buf: NativeString, len: Int): Int is extern "file_NativeFile_NativeFile_io_read_2" + fun io_write(buf: NativeString, len: Int): Int is extern "file_NativeFile_NativeFile_io_write_2" + fun io_close: Int is extern "file_NativeFile_NativeFile_io_close_0" + fun file_stat: FileStat is extern "file_NativeFile_NativeFile_file_stat_0" + fun fileno: Int `{ return fileno(recv); `} + + new io_open_read(path: NativeString) is extern "file_NativeFileCapable_NativeFileCapable_io_open_read_1" + new io_open_write(path: NativeString) is extern "file_NativeFileCapable_NativeFileCapable_io_open_write_1" + new native_stdin is extern "file_NativeFileCapable_NativeFileCapable_native_stdin_0" + new native_stdout is extern "file_NativeFileCapable_NativeFileCapable_native_stdout_0" + new native_stderr is extern "file_NativeFileCapable_NativeFileCapable_native_stderr_0" +end + +redef class Sys + + # Standard input + var stdin: PollableIStream = new Stdin is protected writable + + # Standard output + var stdout: OStream = new Stdout is protected writable + + # Standard output for errors + var stderr: OStream = new Stderr is protected writable + +end + +# Print `objects` on the standard output (`stdout`). +protected fun printn(objects: Object...) +do + sys.stdout.write(objects.to_s) +end + +# Print an `object` on the standard output (`stdout`) and add a newline. +protected fun print(object: Object) +do + sys.stdout.write(object.to_s) + sys.stdout.write("\n") +end + +# Read a character from the standard input (`stdin`). +protected fun getc: Char +do + return sys.stdin.read_char.ascii +end + +# Read a line from the standard input (`stdin`). +protected fun gets: String +do + return sys.stdin.read_line +end + +# Return the working (current) directory +protected fun getcwd: String do return file_getcwd.to_s +private fun file_getcwd: NativeString is extern "string_NativeString_NativeString_file_getcwd_0" diff --git a/samples/Nit/meetup.nit b/samples/Nit/meetup.nit new file mode 100644 index 00000000..e5d1f561 --- /dev/null +++ b/samples/Nit/meetup.nit @@ -0,0 +1,376 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License + +# Shows a meetup and allows to modify its participants +module meetup + +import opportunity_model +import boilerplate +import welcome +import template + +# Shows a meetup and allows to modify its participants +class OpportunityMeetupPage + super OpportunityPage + + # Meetup the page is supposed to show + var meetup: nullable Meetup = null + # Answer mode for the meetup + var mode = 0 + + init from_id(id: String) do + var db = new OpportunityDB.open("opportunity") + meetup = db.find_meetup_by_id(id) + db.close + if meetup != null then mode = meetup.answer_mode + init + end + + init do + header.page_js = "mode = {mode};\n" + header.page_js += """ + function update_scores(){ + var anss = $('.answer'); + var count = {}; + var scores = {}; + var answers = []; + var maxscore = 0; + for(i=0; i < anss.length; i++){ + var incscore = 0; + var inccount = 0; + var idparts = anss[i].id.split("_"); + var ansid = idparts[1]; + var html = anss[i].innerHTML; + if(html === "

"){ + inccount = 1; + incscore = 2; + }else if(html === "
"){ + incscore = 1; + } + var intansid = parseInt(ansid) + if(answers.indexOf(intansid) == -1){ + answers.push(intansid); + } + if(ansid in count){ + count[ansid] += inccount; + }else{ + count[ansid] = inccount; + } + if(ansid in scores){ + scores[ansid] += incscore; + }else{ + scores[ansid] = incscore; + } + if(scores[ansid] > maxscore){ + maxscore = scores[ansid]; + } + } + for(i=0; i < answers.length; i++){ + var ansid = answers[i].toString(); + var el = $('#total'+ansid)[0]; + var ins = "
"+count[ansid]; + if(scores[ansid] >= maxscore){ + ins += "
"; + } + ins += "
"; + el.innerHTML = ins; + } + } + function change_answer(ele, id){ + // modify only the currently selected entry + if (in_modification_id != id) return; + + var e = document.getElementById(ele.id); + var i = e.innerHTML; + var ans = true;""" + if mode == 0 then + header.page_js += """ + if(i === "
"){ + ans = 0; + e.innerHTML = "
" + e.style.color = "red"; + }else{ + ans = 1; + e.innerHTML = "
"; + e.style.color = "green"; + }""" + + else + header.page_js += """ + if(i === "
"){ + ans = 1; + e.innerHTML = "
" + e.style.color = "#B8860B"; + }else if(i === "
"){ + ans = 0; + e.innerHTML = "
" + e.style.color = "red"; + }else{ + ans = 2; + e.innerHTML = "
"; + e.style.color = "green"; + }""" + end + header.page_js += """ + var a = ele.id.split('_') + var pid = a[1] + var aid = a[2] + update_scores(); + $.ajax({ + type: "POST", + url: "./rest/answer", + data: { + answer_id: aid, + pers_id: pid, + answer: ans + } + }); + } + function change_temp_answer(ele){ + var e = document.getElementById(ele.id); + var i = e.innerHTML;""" + if mode == 0 then + header.page_js += """ + if(i === "
"){ + e.innerHTML = "
" + e.style.color = "red"; + }else{ + e.innerHTML = "
"; + e.style.color = "green"; + } + """ + else + header.page_js += """ + if(i === "
"){ + e.innerHTML = "
"; + e.style.color = "#B8860B"; + }else if(i === "
"){ + e.innerHTML = "
" + e.style.color = "red"; + }else{ + e.innerHTML = "
"; + e.style.color = "green"; + } + """ + end + header.page_js += """ + update_scores(); + } + function add_part(ele){ + var e = document.getElementById(ele.id); + var pname = document.getElementById("new_name").value; + var arr = e.id.split("_"); + var mid = arr[1]; + var ans = $('#' + ele.id).parent().parent().parent().children(".answer"); + ansmap = {}; + for(i=0;i✔"){ + ansmap[curr.attr('id')] = 1 + }else{ + ansmap[curr.attr('id')] = 0 + }""" + else + header.page_js += """ + if(curr[0].innerHTML === "
"){ + ansmap[curr.attr('id')] = 2 + }else if(curr[0].innerHTML === "
"){ + ansmap[curr.attr('id')] = 1 + }else{ + ansmap[curr.attr('id')] = 0 + }""" + end + header.page_js += """ + } + $.ajax({ + type: "POST", + url: "./rest/meetup/new_pers", + data: { + meetup_id: mid, + persname: pname, + answers: $.param(ansmap) + } + }) + .done(function(data){ + location.reload(); + }) + .fail(function(data){ + //TODO: Notify of failure + }); + } + function remove_people(ele){ + var arr = ele.id.split("_") + var pid = arr[1] + $('#' + ele.id).parent().parent().parent().remove(); + update_scores(); + $.ajax({ + type: "POST", + url: "./rest/people", + data: { + method: "DELETE", + p_id: pid + } + }); + } + // ID of line currently open for modification + var in_modification_id = null; + function modify_people(ele, id){ + if (in_modification_id != null) { + // reset to normal values + $('#modify_'+in_modification_id).text("Modify or delete"); + $('#modify_'+in_modification_id).attr("class", "btn btn-xs btn-warning"); + $('#line_'+in_modification_id).css("background-color", ""); + $('#delete_'+in_modification_id).css("display", "none"); + } + if (in_modification_id != id) { + // activate modifiable mode + $('#modify_'+id).text("Done"); + $('#modify_'+id).attr("class", "btn btn-xs btn-success"); + $('#line_'+id).css("background-color", "LightYellow"); + $('#delete_'+id).show(); + + in_modification_id = id; + } else { + in_modification_id = null; + } + } + """ + end + + redef fun rendering do + if meetup == null then + add((new OpportunityHomePage).write_to_string) + return + end + add header + var db = new OpportunityDB.open("opportunity") + add meetup.to_html(db) + db.close + add footer + end +end + +redef class Meetup + # Build the HTML for `self` + fun to_html(db: OpportunityDB): Streamable do + var t = new Template + t.add """ +
+ + +""" + t.add "" + for i in answers(db) do + t.add "" + end + t.add "" + t.add "" + for i in participants(db) do + i.load_answers(db, self) + t.add "" + t.add "" + for j, k in i.answers do + var color + if answer_mode == 0 then + if k == 1 then + color = "green" + else + color = "red" + end + else + if k == 2 then + color = "green" + else if k == 1 then + color = "#B8860B" + else + color = "red" + end + end + t.add """" + end + t.add """""" + t.add "" + end + t.add """ + + + """ + for i in answers(db) do + t.add "" + end + t.add """ + """ + t.add "" + # Compute score for each answer + var scores = new HashMap[Int, Int] + var maxsc = 0 + for i in answers(db) do + scores[i.id] = i.score(db) + if scores[i.id] > maxsc then maxsc = scores[i.id] + end + t.add """ + + + """ + for i in answers(db) do + t.add """" + end + t.add "" + t.add """ + +""" + t.add "
Participant name" + t.add i.to_s + t.add "
" + t.add i.to_s + t.add """" + t.add "
" + if answer_mode == 0 then + if k == 1 then + t.add "✔" + else + t.add "✘" + end + else + if k == 2 then + t.add "✔" + else if k == 1 then + t.add "❓" + else + t.add "✘" + end + end + t.add "
 """ + t.add """
Total
{{{i.count(db)}}}""" + if scores.has_key(i.id) and scores[i.id] >= maxsc then + t.add """
""" + end + t.add "
" + t.add "
" + return t + end +end diff --git a/samples/Nu/nu.script! b/samples/Nu/nu similarity index 100% rename from samples/Nu/nu.script! rename to samples/Nu/nu diff --git a/samples/OCaml/cmdliner.ml b/samples/OCaml/cmdliner.ml new file mode 100644 index 00000000..71e49e85 --- /dev/null +++ b/samples/OCaml/cmdliner.ml @@ -0,0 +1,1344 @@ +(*--------------------------------------------------------------------------- + Copyright (c) 2011 Daniel C. Bünzli. All rights reserved. + Distributed under a BSD3 license, see license at the end of the file. + %%NAME%% release %%VERSION%% + ---------------------------------------------------------------------------*) + +(* Invalid_arg strings *) + +let err_argv = "argv array must have at least one element" +let err_not_opt = "Option argument without name" +let err_not_pos = "Positional argument with a name" +let err_help s = "term error, help requested for unknown command " ^ s +let err_empty_list = "empty list" + +(* A few useful definitions. *) + +let rev_compare n n' = compare n' n +let str = Printf.sprintf +let pr = Format.fprintf +let pr_str = Format.pp_print_string +let pr_char = Format.pp_print_char +let str_of_pp pp v = pp Format.str_formatter v; Format.flush_str_formatter () +let quote s = str "`%s'" s +let alts_str ?(quoted = true) alts = + let quote = if quoted then quote else (fun s -> s) in + match alts with + | [] -> invalid_arg err_empty_list + | [a] -> (quote a) + | [a; b] -> str "either %s or %s" (quote a) (quote b) + | alts -> + let rev_alts = List.rev alts in + str "one of %s or %s" + (String.concat ", " (List.rev_map quote (List.tl rev_alts))) + (quote (List.hd rev_alts)) + +let pr_white_str spaces ppf s = (* spaces and new lines with Format's funs *) + let left = ref 0 and right = ref 0 and len = String.length s in + let flush () = + Format.pp_print_string ppf (String.sub s !left (!right - !left)); + incr right; left := !right; + in + while (!right <> len) do + if s.[!right] = '\n' then (flush (); Format.pp_force_newline ppf ()) else + if spaces && s.[!right] = ' ' then (flush (); Format.pp_print_space ppf ()) + else incr right; + done; + if !left <> len then flush () + +let pr_text = pr_white_str true +let pr_lines = pr_white_str false +let pr_to_temp_file pr v = try + let exec = Filename.basename Sys.argv.(0) in + let file, oc = Filename.open_temp_file exec "out" in + let ppf = Format.formatter_of_out_channel oc in + pr ppf v; Format.pp_print_flush ppf (); close_out oc; + at_exit (fun () -> try Sys.remove file with Sys_error e -> ()); + Some file +with Sys_error _ -> None + +(* Levenshtein distance, for making spelling suggestions in case of error. *) + +let levenshtein_distance s t = + (* As found here http://rosettacode.org/wiki/Levenshtein_distance#OCaml *) + let minimum a b c = min a (min b c) in + let m = String.length s in + let n = String.length t in + (* for all i and j, d.(i).(j) will hold the Levenshtein distance between + the first i characters of s and the first j characters of t *) + let d = Array.make_matrix (m+1) (n+1) 0 in + for i = 0 to m do d.(i).(0) <- i done; + for j = 0 to n do d.(0).(j) <- j done; + for j = 1 to n do + for i = 1 to m do + if s.[i-1] = t.[j-1] then + d.(i).(j) <- d.(i-1).(j-1) (* no operation required *) + else + d.(i).(j) <- minimum + (d.(i-1).(j) + 1) (* a deletion *) + (d.(i).(j-1) + 1) (* an insertion *) + (d.(i-1).(j-1) + 1) (* a substitution *) + done; + done; + d.(m).(n) + +let suggest s candidates = + let add (min, acc) name = + let d = levenshtein_distance s name in + if d = min then min, (name :: acc) else + if d < min then d, [name] else + min, acc + in + let dist, suggs = List.fold_left add (max_int, []) candidates in + if dist < 3 (* suggest only if not too far *) then suggs else [] + +(* Tries. This implementation also maps any non ambiguous prefix of a + key to its value. *) + +module Trie : sig + type 'a t + val empty : 'a t + val is_empty : 'a t -> bool + val add : 'a t -> string -> 'a -> 'a t + val find : 'a t -> string -> [ `Ok of 'a | `Ambiguous | `Not_found ] + val ambiguities : 'a t -> string -> string list + val of_list : (string * 'a) list -> 'a t +end = struct + module Cmap = Map.Make (Char) (* character maps. *) + type 'a value = (* type for holding a bound value. *) + | Pre of 'a (* value is bound by the prefix of a key. *) + | Key of 'a (* value is bound by an entire key. *) + | Amb (* no value bound because of ambiguous prefix. *) + | Nil (* not bound (only for the empty trie). *) + + type 'a t = { v : 'a value; succs : 'a t Cmap.t } + let empty = { v = Nil; succs = Cmap.empty } + let is_empty t = t = empty + + (* N.B. If we replace a non-ambiguous key, it becomes ambiguous but it's + not important for our use. Also the following is not tail recursive but + the stack is bounded by key length. *) + let add t k d = + let rec aux t k len i d pre_d = + if i = len then { v = Key d; succs = t.succs } else + let v = match t.v with + | Amb | Pre _ -> Amb | Key _ as v -> v | Nil -> pre_d + in + let succs = + let t' = try Cmap.find k.[i] t.succs with Not_found -> empty in + Cmap.add k.[i] (aux t' k len (i + 1) d pre_d) t.succs + in + { v; succs } + in + aux t k (String.length k) 0 d (Pre d (* allocate less *)) + + let find_node t k = + let rec aux t k len i = + if i = len then t else + aux (Cmap.find k.[i] t.succs) k len (i + 1) + in + aux t k (String.length k) 0 + + let find t k = + try match (find_node t k).v with + | Key v | Pre v -> `Ok v | Amb -> `Ambiguous | Nil -> `Not_found + with Not_found -> `Not_found + + let ambiguities t p = (* ambiguities of [p] in [t]. *) + try + let t = find_node t p in + match t.v with + | Key _ | Pre _ | Nil -> [] + | Amb -> + let add_char s c = s ^ (String.make 1 c) in + let rem_char s = String.sub s 0 ((String.length s) - 1) in + let to_list m = Cmap.fold (fun k t acc -> (k,t) :: acc) m [] in + let rec aux acc p = function + | ((c, t) :: succs) :: rest -> + let p' = add_char p c in + let acc' = match t.v with + | Pre _ | Amb -> acc + | Key _ -> (p' :: acc) + | Nil -> assert false + in + aux acc' p' ((to_list t.succs) :: succs :: rest) + | [] :: [] -> acc + | [] :: rest -> aux acc (rem_char p) rest + | [] -> assert false + in + aux [] p (to_list t.succs :: []) + with Not_found -> [] + + let of_list l = List.fold_left (fun t (s, v) -> add t s v) empty l +end + +(* The following types keep untyped information about arguments and + terms. This data is used to parse the command line, report errors + and format man page information. *) + +type absence = (* what happens if the argument is absent from the cl. *) + | Error (* an error is reported. *) + | Val of string Lazy.t (* if <> "", takes the given default value. *) + +type opt_kind = (* kinds of optional arguments. *) + | Flag (* just a flag, without value. *) + | Opt (* value is required. *) + | Opt_vopt of string (* option value is optional, takes given default. *) + +type pos_kind = (* kinds of positional arguments. *) + | All (* all positional arguments. *) + | Nth of bool * int (* specific position. *) + | Left of bool * int (* all args on the left of a position. *) + | Right of bool * int (* all args on the right of a position. *) + +type arg_info = (* information about a command line argument. *) + { id : int; (* unique id for the argument. *) + absent : absence; (* behaviour if absent. *) + doc : string; (* help. *) + docv : string; (* variable name for the argument in help. *) + docs : string; (* title of help section where listed. *) + p_kind : pos_kind; (* positional arg kind. *) + o_kind : opt_kind; (* optional arg kind. *) + o_names : string list; (* names (for opt args). *) + o_all : bool; } (* repeatable (for opt args). *) + +let arg_id = (* thread-safe UIDs, Oo.id (object end) was used before. *) + let c = ref 0 in + fun () -> + let id = !c in + incr c; if id > !c then assert false (* too many ids *) else id + +let is_opt a = a.o_names <> [] +let is_pos a = a.o_names = [] + +module Amap = Map.Make (* arg info maps. *) + (struct type t = arg_info let compare a a' = compare a.id a'.id end) + +type arg = (* unconverted argument data as found on the command line. *) + | O of (int * string * (string option)) list (* (pos, name, value) of opt. *) + | P of string list + +type cmdline = arg Amap.t (* command line, maps arg_infos to arg value. *) + +type man_block = [ (* block of manpage text. *) + | `S of string | `P of string | `I of string * string | `Noblank ] + +type term_info = + { name : string; (* name of the term. *) + version : string option; (* version (for --version). *) + tdoc : string; (* one line description of term. *) + tdocs : string; (* title of man section where listed (commands). *) + sdocs : string; (* standard options, title of section where listed. *) + man : man_block list; } (* man page text. *) + +type eval_info = (* information about the evaluation context. *) + { term : term_info * arg_info list; (* term being evaluated. *) + main : term_info * arg_info list; (* main term. *) + choices : (term_info * arg_info list) list} (* all term choices. *) + +let eval_kind ei = (* evaluation with multiple terms ? *) + if ei.choices = [] then `Simple else + if (fst ei.term) == (fst ei.main) then `M_main else `M_choice + +module Manpage = struct + type title = string * int * string * string * string + type block = man_block + type t = title * block list + + let p_indent = 7 (* paragraph indentation. *) + let l_indent = 4 (* label indentation. *) + let escape subst esc buf s = + let subst s = + let len = String.length s in + if not (len > 1 && s.[1] = ',') then (subst s) else + if len = 2 then "" else + esc s.[0] (String.sub s 2 (len - 2)) + in + Buffer.clear buf; Buffer.add_substitute buf subst s; + let s = Buffer.contents buf in (* twice for $(i,$(mname)). *) + Buffer.clear buf; Buffer.add_substitute buf subst s; + Buffer.contents buf + + let pr_tokens ?(groff = false) ppf s = + let is_space = function ' ' | '\n' | '\r' | '\t' -> true | _ -> false in + let len = String.length s in + let i = ref 0 in + try while (true) do + while (!i < len && is_space s.[!i]) do incr i done; + let start = !i in + if start = len then raise Exit; + while (!i < len && not (is_space s.[!i]) && not (s.[!i] = '-')) do + incr i + done; + pr_str ppf (String.sub s start (!i - start)); + if !i = len then raise Exit; + if s.[!i] = '-' then + (incr i; if groff then pr_str ppf "\\-" else pr_char ppf '-'); + if (!i < len && is_space s.[!i]) then + (if groff then pr_char ppf ' ' else Format.pp_print_space ppf ()) + done with Exit -> () + + (* Plain text output *) + + let plain_esc c s = match c with 'g' -> "" (* groff specific *) | _ -> s + let pr_indent ppf c = for i = 1 to c do pr_char ppf ' ' done + let pr_plain_blocks subst ppf ts = + let buf = Buffer.create 1024 in + let escape t = escape subst plain_esc buf t in + let pr_tokens ppf t = pr_tokens ppf (escape t) in + let rec aux = function + | [] -> () + | t :: ts -> + begin match t with + | `Noblank -> () + | `P s -> pr ppf "%a@[%a@]@," pr_indent p_indent pr_tokens s + | `S s -> pr ppf "@[%a@]" pr_tokens s + | `I (label, s) -> + let label = escape label in + let ll = String.length label in + pr ppf "@[%a@[%a@]" pr_indent p_indent pr_tokens label; + if s = "" then () else + if ll < l_indent then + pr ppf "%a@[%a@]@]@," pr_indent (l_indent - ll) pr_tokens s + else + pr ppf "@\n%a@[%a@]@]@," + pr_indent (p_indent + l_indent) pr_tokens s + end; + begin match ts with + | `Noblank :: ts -> aux ts + | ts -> Format.pp_print_cut ppf (); aux ts + end + in + aux ts + + let pr_plain_page subst ppf (_, text) = + pr ppf "@[%a@]" (pr_plain_blocks subst) text + + (* Groff output *) + + let groff_esc c s = match c with + | 'i' -> (str "\\fI%s\\fR" s) + | 'b' -> (str "\\fB%s\\fR" s) + | 'p' -> "" (* plain text specific *) + | _ -> s + + let pr_groff_blocks subst ppf text = + let buf = Buffer.create 1024 in + let escape t = escape subst groff_esc buf t in + let pr_tokens ppf t = pr_tokens ~groff:true ppf (escape t) in + let pr_block = function + | `P s -> pr ppf "@\n.P@\n%a" pr_tokens s + | `S s -> pr ppf "@\n.SH %a" pr_tokens s + | `Noblank -> pr ppf "@\n.sp -1" + | `I (l, s) -> pr ppf "@\n.TP 4@\n%a@\n%a" pr_tokens l pr_tokens s + in + List.iter pr_block text + + let pr_groff_page subst ppf ((n, s, a1, a2, a3), t) = + pr ppf ".\\\" Pipe this output to groff -man -Tutf8 | less@\n\ + .\\\"@\n\ + .TH \"%s\" %d \"%s\" \"%s\" \"%s\"@\n\ + .\\\" Disable hyphenantion and ragged-right@\n\ + .nh@\n\ + .ad l\ + %a@?" + n s a1 a2 a3 (pr_groff_blocks subst) t + + (* Printing to a pager *) + + let find_cmd cmds = + let test, null = match Sys.os_type with + | "Win32" -> "where", " NUL" + | _ -> "type", "/dev/null" + in + let cmd c = Sys.command (str "%s %s 1>%s 2>%s" test c null null) = 0 in + try Some (List.find cmd cmds) with Not_found -> None + + let pr_to_pager print ppf v = + let pager = + let cmds = ["less"; "more"] in + let cmds = try (Sys.getenv "PAGER") :: cmds with Not_found -> cmds in + let cmds = try (Sys.getenv "MANPAGER") :: cmds with Not_found -> cmds in + find_cmd cmds + in + match pager with + | None -> print `Plain ppf v + | Some pager -> + let cmd = match (find_cmd ["groff"; "nroff"]) with + | None -> + begin match pr_to_temp_file (print `Plain) v with + | None -> None + | Some f -> Some (str "%s < %s" pager f) + end + | Some c -> + begin match pr_to_temp_file (print `Groff) v with + | None -> None + | Some f -> + (* TODO use -Tutf8, but annoyingly maps U+002D to U+2212. *) + let xroff = if c = "groff" then c ^ " -Tascii -P-c" else c in + Some (str "%s -man < %s | %s" xroff f pager) + end + in + match cmd with + | None -> print `Plain ppf v + | Some cmd -> if (Sys.command cmd) <> 0 then print `Plain ppf v + + let rec print ?(subst = fun x -> x) fmt ppf page = match fmt with + | `Pager -> pr_to_pager (print ~subst) ppf page + | `Plain -> pr_plain_page subst ppf page + | `Groff -> pr_groff_page subst ppf page +end + +module Help = struct + let invocation ?(sep = ' ') ei = match eval_kind ei with + | `Simple | `M_main -> (fst ei.main).name + | `M_choice -> str "%s%c%s" (fst ei.main).name sep (fst ei.term).name + + let title ei = + let prog = String.capitalize (fst ei.main).name in + let name = String.uppercase (invocation ~sep:'-' ei) in + let left_footer = prog ^ match (fst ei.main).version with + | None -> "" | Some v -> str " %s" v + in + let center_header = str "%s Manual" prog in + name, 1, "", left_footer, center_header + + let name_section ei = + let tdoc d = if d = "" then "" else (str " - %s" d) in + [`S "NAME"; `P (str "%s%s" (invocation ~sep:'-' ei) + (tdoc (fst ei.term).tdoc)); ] + + let synopsis ei = match eval_kind ei with + | `M_main -> str "$(b,%s) $(i,COMMAND) ..." (invocation ei) + | `Simple | `M_choice -> + let rev_cmp (p, _) (p', _) = match p', p with (* best effort. *) + | p, All -> -1 | All, p -> 1 + | Left _, Right _ -> -1 | Right _, Left _ -> 1 + | Left (false, k), Nth (false, k') + | Nth (false, k), Nth (false, k') + | Nth (false, k), Right (false, k') -> if k <= k' then -1 else 1 + | Nth (false, k), Left (false, k') + | Right (false, k), Nth (false, k') -> if k >= k' then 1 else -1 + | Left (true, k), Nth (true, k') + | Nth (true, k), Nth (true, k') + | Nth (true, k), Right (true, k') -> if k >= k' then -1 else 1 + | Nth (true, k), Left (true, k') + | Right (true, k), Nth (true, k') -> if k <= k' then 1 else -1 + | p, p' -> compare p p' + in + let rec format_pos acc = function + | a :: al -> + if is_opt a then format_pos acc al else + let v = if a.docv = "" then "$(i,ARG)" else str "$(i,%s)" a.docv in + let v = if a.absent = Error then str "%s" v else str "[%s]" v in + let v = v ^ match a.p_kind with Nth _ -> "" | _ -> "..." in + format_pos ((a.p_kind, v) :: acc) al + | [] -> acc + in + let args = List.sort rev_cmp (format_pos [] (snd ei.term)) in + let args = String.concat " " (List.rev_map snd args) in + str "$(b,%s) [$(i,OPTION)]... %s" (invocation ei) args + + let get_synopsis_section ei = + let rec extract_synopsis syn = function + | `S _ :: _ as man -> List.rev syn, man + | block :: rest -> extract_synopsis (block :: syn) rest + | [] -> List.rev syn, [] + in + match (fst ei.term).man with + | `S "SYNOPSIS" as s :: rest -> extract_synopsis [s] rest (* user-defined *) + | man -> [ `S "SYNOPSIS"; `P (synopsis ei); ], man (* automatic *) + + let make_arg_label a = + if is_pos a then str "$(i,%s)" a.docv else + let fmt_name var = match a.o_kind with + | Flag -> fun n -> str "$(b,%s)" n + | Opt -> + fun n -> + if String.length n > 2 then str "$(b,%s)=$(i,%s)" n var else + str "$(b,%s) $(i,%s)" n var + | Opt_vopt _ -> + fun n -> + if String.length n > 2 then str "$(b,%s)[=$(i,%s)]" n var else + str "$(b,%s) [$(i,%s)]" n var + in + let var = if a.docv = "" then "VAL" else a.docv in + let names = List.sort compare a.o_names in + let s = String.concat ", " (List.rev_map (fmt_name var) names) in + s + + let make_arg_items ei = + let buf = Buffer.create 200 in + let subst_docv docv d = + let subst = function "docv" -> str "$(i,%s)" docv | s -> str "$(%s)" s in + Buffer.clear buf; Buffer.add_substitute buf subst d; Buffer.contents buf + in + let rev_cmp a' a = + let c = compare a.docs a'.docs in + if c <> 0 then c else + match is_opt a, is_opt a' with + | true, true -> + let key names = + let k = String.lowercase (List.hd (List.sort rev_compare names)) in + if k.[1] = '-' then String.sub k 1 (String.length k - 1) else k + in + compare (key a.o_names) (key a'.o_names) + | false, false -> + compare (String.lowercase a.docv) (String.lowercase a'.docv) + | true, false -> -1 + | false, true -> 1 + in + let format a = + let absent = match a.absent with + | Error -> "" + | Val v -> match Lazy.force v with "" -> "" | v -> str "absent=%s" v + in + let optvopt = match a.o_kind with + | Opt_vopt v -> str "default=%s" v + | _ -> "" + in + let argvdoc = match absent, optvopt with + | "", "" -> "" + | s, "" | "", s -> str " (%s)" s + | s, s' -> str " (%s, %s)" s s' + in + (a.docs, `I (make_arg_label a ^ argvdoc, (subst_docv a.docv a.doc))) + in + let is_arg_item a = not (is_pos a && (a.docv = "" || a.doc = "")) in + let l = List.sort rev_cmp (List.filter is_arg_item (snd ei.term)) in + List.rev_map format l + + let make_cmd_items ei = match eval_kind ei with + | `Simple | `M_choice -> [] + | `M_main -> + let add_cmd acc (ti, _) = + (ti.tdocs, `I ((str "$(b,%s)" ti.name), ti.tdoc)) :: acc + in + List.sort rev_compare (List.fold_left add_cmd [] ei.choices) + + let text ei = (* man that code is particulary unreadable. *) + let rec merge_items acc to_insert mark il = function + | `S s as sec :: ts -> + let acc = List.rev_append to_insert acc in + let acc = if mark then sec :: `Orphan_mark :: acc else sec :: acc in + let to_insert, il = List.partition (fun (n, _) -> n = s) il in + let to_insert = List.rev_map (fun (_, i) -> i) to_insert in + let to_insert = (to_insert :> [ `Orphan_mark | Manpage.block] list) in + merge_items acc to_insert (s = "DESCRIPTION") il ts + | t :: ts -> + let t = (t :> [`Orphan_mark | Manpage.block]) in + merge_items (t :: acc) to_insert mark il ts + | [] -> + let acc = List.rev_append to_insert acc in + (if mark then `Orphan_mark :: acc else acc), il + in + let rec merge_orphans acc orphans = function + | `Orphan_mark :: ts -> + let rec merge acc s = function + | [] -> (`S s) :: acc + | (s', i) :: ss -> + let i = (i :> Manpage.block) in + if s = s' then merge (i :: acc) s ss else + merge (i :: (`S s) :: acc) s' ss + in + let acc = match orphans with + | [] -> acc | (s, _) :: _ -> merge acc s orphans + in + merge_orphans acc [] ts + | (#Manpage.block as e) :: ts -> merge_orphans (e :: acc) orphans ts + | [] -> acc + in + let cmds = make_cmd_items ei in + let args = make_arg_items ei in + let cmp (s, _) (s', _) = compare s s' in + let items = List.rev (List.stable_sort cmp (List.rev_append cmds args)) in + let synopsis, man = get_synopsis_section ei in + let rev_text, orphans = + merge_items [`Orphan_mark] [] false items man + in + synopsis @ merge_orphans [] orphans rev_text + + let ei_subst ei = function + | "tname" -> (fst ei.term).name + | "mname" -> (fst ei.main).name + | s -> s + + let man ei = + title ei, (name_section ei) @ (text ei) + + let print fmt ppf ei = Manpage.print ~subst:(ei_subst ei) fmt ppf (man ei) + let pr_synopsis ppf ei = + pr ppf "@[%s@]" + (Manpage.escape (ei_subst ei) + Manpage.plain_esc (Buffer.create 100) (synopsis ei)) + + let pr_version ppf ei = match (fst ei.main).version with + | None -> assert false + | Some v -> pr ppf "@[%a@]@." pr_text v +end + +(* Errors for the command line user *) + +module Err = struct + let invalid kind s exp = str "invalid %s %s, %s" kind (quote s) exp + let invalid_val = invalid "value" + let no kind s = str "no %s %s" (quote s) kind + let not_dir s = str "%s is not a directory" (quote s) + let is_dir s = str "%s is a directory" (quote s) + let element kind s exp = str "invalid element in %s (`%s'): %s" kind s exp + let sep_miss sep s = invalid_val s (str "missing a `%c' separator" sep) + let unknown kind ?(hints = []) v = + let did_you_mean s = str ", did you mean %s ?" s in + let hints = match hints with [] -> "." | hs -> did_you_mean (alts_str hs) in + str "unknown %s %s%s" kind (quote v) hints + + let ambiguous kind s ambs = + str "%s %s ambiguous and could be %s" kind (quote s) (alts_str ambs) + + let pos_excess excess = + str "too many arguments, don't know what to do with %s" + (String.concat ", " (List.map quote excess)) + + let flag_value f v = + str "option %s is a flag, it cannot take the argument %s" + (quote f) (quote v) + + let opt_value_missing f = str "option %s needs an argument" (quote f) + let opt_parse_value f e = str "option %s: %s" (quote f) e + let opt_repeated f f' = + if f = f' then str "option %s cannot be repeated" (quote f) else + str "options %s and %s cannot be present at the same time" (quote f) + (quote f') + + let pos_parse_value a e = + if a.docv = "" then e else match a.p_kind with + | Nth _ -> str "%s argument: %s" a.docv e + | _ -> str "%s... arguments: %s" a.docv e + + let arg_missing a = + if is_opt a then + let rec long_name = function + | n :: l -> if (String.length n) > 2 || l = [] then n else long_name l + | [] -> assert false + in + str "required option %s is missing" (long_name a.o_names) + else + if a.docv = "" then str "a required argument is missing" else + str "required argument %s is missing" a.docv + + (* Error printers *) + + let print ppf ei e = pr ppf "%s: @[%a@]@." (fst ei.main).name pr_text e + let pr_backtrace err ei e bt = + let bt = + let len = String.length bt in + if len > 0 then String.sub bt 0 (len - 1) (* remove final '\n' *) else bt + in + pr err + "%s: @[internal error, uncaught exception:@\n%a@]@." + (fst ei.main).name pr_lines (str "%s\n%s" (Printexc.to_string e) bt) + + let pr_try_help ppf ei = + let exec = Help.invocation ei in + let main = (fst ei.main).name in + if exec = main then + pr ppf "@[<2>Try `%s --help' for more information.@]" exec + else + pr ppf "@[<2>Try `%s --help' or `%s --help' for more information.@]" + exec main + + let pr_usage ppf ei e = + pr ppf "@[%s: @[%a@]@,@[Usage: @[%a@]@]@,%a@]@." + (fst ei.main).name pr_text e Help.pr_synopsis ei pr_try_help ei +end + +(* Command lines. A command line stores pre-parsed information about + the command line's arguments in a more structured way. Given the + [arg_info] values mentionned in a term and Sys.argv (whithout exec + name) we parse the command line into a map of [arg_info] values to + [arg] values. This map is used by the term's closures to retrieve + and convert command line arguments (see the Arg module). *) + +module Cmdline :sig + exception Error of string + val choose_term : term_info -> (term_info * 'a) list -> string list -> + term_info * string list + val create : ?peek_opts:bool -> arg_info list -> string list -> cmdline + val opt_arg : cmdline -> arg_info -> (int * string * (string option)) list + val pos_arg : cmdline -> arg_info -> string list +end = struct + exception Error of string + + let opt_arg cl a = match try Amap.find a cl with Not_found -> assert false + with O l -> l | _ -> assert false + + let pos_arg cl a = match try Amap.find a cl with Not_found -> assert false + with P l -> l | _ -> assert false + + let choose_term ti choices = function + | [] -> ti, [] + | maybe :: args' as args -> + if String.length maybe > 1 && maybe.[0] = '-' then ti, args else + let index = + let add acc (choice, _) = Trie.add acc choice.name choice in + List.fold_left add Trie.empty choices + in + match Trie.find index maybe with + | `Ok choice -> choice, args' + | `Not_found -> + let all = Trie.ambiguities index "" in + let hints = suggest maybe all in + raise (Error (Err.unknown "command" ~hints maybe)) + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities index maybe) in + raise (Error (Err.ambiguous "command" maybe ambs)) + + let arg_info_indexes al = + (* from [al] returns a trie mapping the names of optional arguments to + their arg_info, a list with all arg_info for positional arguments and + a cmdline mapping each arg_info to an empty [arg]. *) + let rec aux opti posi cl = function + | a :: l -> + if is_pos a then aux opti (a :: posi) (Amap.add a (P []) cl) l else + let add t name = Trie.add t name a in + aux (List.fold_left add opti a.o_names) posi (Amap.add a (O []) cl) l + | [] -> opti, posi, cl + in + aux Trie.empty [] Amap.empty al + + let parse_opt_arg s = (* (name,value) of opt arg, assert len > 1. *) + let l = String.length s in + if s.[1] <> '-' then + if l = 2 then s, None else + String.sub s 0 2, Some (String.sub s 2 (l - 2)) + else try + let i = String.index s '=' in + String.sub s 0 i, Some (String.sub s (i + 1) (l - i - 1)) + with Not_found -> s, None + + let parse_args ~peek_opts opti cl args = + (* returns an updated [cl] cmdline according to the options found in [args] + with the trie index [opti]. Positional arguments are returned in order + in a list. *) + let rec aux k opti cl pargs = function + | [] -> cl, (List.rev pargs) + | "--" :: args -> cl, (List.rev_append pargs args) + | s :: args -> + let is_opt s = String.length s > 1 && s.[0] = '-' in + let is_short_opt s = String.length s = 2 && s.[0] = '-' in + if not (is_opt s) then aux (k+1) opti cl (s :: pargs) args else + let name, value = parse_opt_arg s in + match Trie.find opti name with + | `Ok a -> + let value, args = match value, a.o_kind with + | Some v, Flag when is_short_opt name -> None, ("-" ^ v) :: args + | Some v, _ -> value, args + | None, Flag -> value, args + | None, _ -> + match args with + | v :: rest -> if is_opt v then None, args else Some v, rest + | [] -> None, args + in + let arg = O ((k, name, value) :: opt_arg cl a) in + aux (k+1) opti (Amap.add a arg cl) pargs args + | `Not_found when peek_opts -> aux (k+1) opti cl pargs args (* skip *) + | `Not_found -> + let hints = + if String.length s <= 2 then [] else + let short_opt, long_opt = + if s.[1] <> '-' + then s, Printf.sprintf "-%s" s + else String.sub s 1 (String.length s - 1), s + in + let short_opt, _ = parse_opt_arg short_opt in + let long_opt, _ = parse_opt_arg long_opt in + let all = Trie.ambiguities opti "-" in + match List.mem short_opt all, suggest long_opt all with + | false, [] -> [] + | false, l -> l + | true, [] -> [short_opt] + | true, l -> if List.mem short_opt l then l else short_opt :: l + in + raise (Error (Err.unknown "option" ~hints name)) + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities opti name) in + raise (Error (Err.ambiguous "option" name ambs)) + in + aux 0 opti cl [] args + + let process_pos_args posi cl pargs = + (* returns an updated [cl] cmdline in which each positional arg mentionned + in the list index posi, is given a value according the list + of positional arguments values [pargs]. *) + if pargs = [] then cl else + let rec take n acc l = + if n = 0 then List.rev acc else + take (n - 1) (List.hd l :: acc) (List.tl l) + in + let rec aux pargs last cl max_spec = function + | a :: al -> + let arg, max_spec = match a.p_kind with + | All -> P pargs, last + | Nth (rev, k) -> + let k = if rev then last - k else k in + let max_spec = max k max_spec in + if k < 0 || k > last then P [], max_spec else + P ([List.nth pargs k]), max_spec + | Left (rev, k) -> + let k = if rev then last - k else k in + let max_spec = max k max_spec in + if k <= 0 || k > last then P [], max_spec else + P (take k [] pargs), max_spec + | Right (rev, k) -> + let k = if rev then last - k else k in + if k < 0 || k >= last then P [], last else + P (List.rev (take (last - k) [] (List.rev pargs))), last + in + aux pargs last (Amap.add a arg cl) max_spec al + | [] -> cl, max_spec + in + let last = List.length pargs - 1 in + let cl, max_spec = aux pargs last cl (-1) posi in + if last <= max_spec then cl else + let excess = List.rev (take (last - max_spec) [] (List.rev pargs)) in + raise (Error (Err.pos_excess excess)) + + let create ?(peek_opts = false) al args = + let opti, posi, cl = arg_info_indexes al in + let cl, pargs = parse_args ~peek_opts opti cl args in + if peek_opts then cl (* skip positional arguments *) else + process_pos_args posi cl pargs +end + +module Arg = struct + type 'a parser = string -> [ `Ok of 'a | `Error of string ] + type 'a printer = Format.formatter -> 'a -> unit + type 'a converter = 'a parser * 'a printer + type 'a arg_converter = (eval_info -> cmdline -> 'a) + type 'a t = arg_info list * 'a arg_converter + type info = arg_info + + let ( & ) f x = f x + let parse_error e = raise (Cmdline.Error e) + let some ?(none = "") (parse, print) = + (fun s -> match parse s with `Ok v -> `Ok (Some v) | `Error _ as e -> e), + (fun ppf v -> match v with None -> pr_str ppf none| Some v -> print ppf v) + + let info ?docs ?(docv = "") ?(doc = "") names = + let dash n = if String.length n = 1 then "-" ^ n else "--" ^ n in + let docs = match docs with + | None -> if names = [] then "ARGUMENTS" else "OPTIONS" + | Some s -> s + in + { id = arg_id (); absent = Val (Lazy.from_val ""); + doc = doc; docv = docv; docs = docs; + p_kind = All; o_kind = Flag; o_names = List.rev_map dash names; + o_all = false; } + + let flag a = + if is_pos a then invalid_arg err_not_opt else + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> false + | [_, _, None] -> true + | [_, f, Some v] -> parse_error (Err.flag_value f v) + | (_, f, _) :: (_ ,g, _) :: _ -> parse_error (Err.opt_repeated f g) + in + [a], convert + + let flag_all a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with o_all = true } in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> [] + | l -> + let truth (_, f, v) = match v with + | None -> true | Some v -> parse_error (Err.flag_value f v) + in + List.rev_map truth l + in + [a], convert + + let vflag v l = + let convert _ cl = + let rec aux fv = function + | (v, a) :: rest -> + begin match Cmdline.opt_arg cl a with + | [] -> aux fv rest + | [_, f, None] -> + begin match fv with + | None -> aux (Some (f, v)) rest + | Some (g, _) -> parse_error (Err.opt_repeated g f) + end + | [_, f, Some v] -> parse_error (Err.flag_value f v) + | (_, f, _) :: (_, g, _) :: _ -> parse_error (Err.opt_repeated g f) + end + | [] -> match fv with None -> v | Some (_, v) -> v + in + aux None l + in + let flag (_, a) = if is_pos a then invalid_arg err_not_opt else a in + List.rev_map flag l, convert + + let vflag_all v l = + let convert _ cl = + let rec aux acc = function + | (fv, a) :: rest -> + begin match Cmdline.opt_arg cl a with + | [] -> aux acc rest + | l -> + let fval (k, f, v) = match v with + | None -> (k, fv) | Some v -> parse_error (Err.flag_value f v) + in + aux (List.rev_append (List.rev_map fval l) acc) rest + end + | [] -> + if acc = [] then v else List.rev_map snd (List.sort rev_compare acc) + in + aux [] l + in + let flag (_, a) = + if is_pos a then invalid_arg err_not_opt else { a with o_all = true } + in + List.rev_map flag l, convert + + let parse_opt_value parse f v = match parse v with + | `Ok v -> v | `Error e -> parse_error (Err.opt_parse_value f e) + + let opt ?vopt (parse, print) v a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with absent = Val (lazy (str_of_pp print v)); + o_kind = match vopt with + | None -> Opt | Some dv -> Opt_vopt (str_of_pp print dv) } + in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> v + | [_, f, Some v] -> parse_opt_value parse f v + | [_, f, None] -> + begin match vopt with + | None -> parse_error (Err.opt_value_missing f) + | Some optv -> optv + end + | (_, f, _) :: (_, g, _) :: _ -> parse_error (Err.opt_repeated g f) + in + [a], convert + + let opt_all ?vopt (parse, print) v a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with absent = Val (Lazy.from_val ""); o_all = true; + o_kind = match vopt with + | None -> Opt | Some dv -> Opt_vopt (str_of_pp print dv) } + in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> v + | l -> + let parse (k, f, v) = match v with + | Some v -> (k, parse_opt_value parse f v) + | None -> match vopt with + | None -> parse_error (Err.opt_value_missing f) + | Some dv -> (k, dv) + in + List.rev_map snd (List.sort rev_compare (List.rev_map parse l)) + in + [a], convert + + (* Positional arguments *) + + let parse_pos_value parse a v = match parse v with + | `Ok v -> v | `Error e -> parse_error (Err.pos_parse_value a e) + + let pos ?(rev = false) k (parse, print) v a = + if is_opt a then invalid_arg err_not_pos else + let a = { a with p_kind = Nth (rev, k); + absent = Val (Lazy.from_val (str_of_pp print v)) } + in + let convert _ cl = match Cmdline.pos_arg cl a with + | [] -> v + | [v] -> parse_pos_value parse a v + | _ -> assert false + in + [a], convert + + let pos_list kind (parse, _) v a = + if is_opt a then invalid_arg err_not_pos else + let a = { a with p_kind = kind } in + let convert _ cl = match Cmdline.pos_arg cl a with + | [] -> v + | l -> List.rev (List.rev_map (parse_pos_value parse a) l) + in + [a], convert + + let pos_all c v a = pos_list All c v a + let pos_left ?(rev = false) k = pos_list (Left (rev, k)) + let pos_right ?(rev = false) k = pos_list (Right (rev, k)) + + (* Arguments as terms *) + + let absent_error al = List.rev_map (fun a -> { a with absent = Error }) al + let value a = a + let required (al, convert) = + let al = absent_error al in + let convert ei cl = match convert ei cl with + | Some v -> v + | None -> parse_error (Err.arg_missing (List.hd al)) + in + al, convert + + let non_empty (al, convert) = + let al = absent_error al in + let convert ei cl = match convert ei cl with + | [] -> parse_error (Err.arg_missing (List.hd al)) + | l -> l + in + al, convert + + let last (al, convert) = + let convert ei cl = match convert ei cl with + | [] -> parse_error (Err.arg_missing (List.hd al)) + | l -> List.hd (List.rev l) + in + al, convert + + (* Predefined converters. *) + + let bool = + (fun s -> try `Ok (bool_of_string s) with Invalid_argument _ -> + `Error (Err.invalid_val s (alts_str ["true"; "false"]))), + Format.pp_print_bool + + let char = + (fun s -> if String.length s = 1 then `Ok s.[0] else + `Error (Err.invalid_val s "expected a character")), + pr_char + + let parse_with t_of_str exp s = + try `Ok (t_of_str s) with Failure _ -> `Error (Err.invalid_val s exp) + + let int = + parse_with int_of_string "expected an integer", Format.pp_print_int + + let int32 = + parse_with Int32.of_string "expected a 32-bit integer", + (fun ppf -> pr ppf "%ld") + + let int64 = + parse_with Int64.of_string "expected a 64-bit integer", + (fun ppf -> pr ppf "%Ld") + + let nativeint = + parse_with Nativeint.of_string "expected a processor-native integer", + (fun ppf -> pr ppf "%nd") + + let float = + parse_with float_of_string "expected a floating point number", + Format.pp_print_float + + let string = (fun s -> `Ok s), pr_str + let enum sl = + if sl = [] then invalid_arg err_empty_list else + let sl_inv = List.rev_map (fun (s,v) -> (v,s)) sl in + let print ppf v = pr_str ppf (List.assoc v sl_inv) in + let t = Trie.of_list sl in + let parse s = match Trie.find t s with + | `Ok _ as r -> r + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities t s) in + `Error (Err.ambiguous "enum value" s ambs) + | `Not_found -> + let alts = List.rev (List.rev_map (fun (s, _) -> s) sl) in + `Error (Err.invalid_val s ("expected " ^ (alts_str alts))) + in + parse, print + + let file = + (fun s -> if Sys.file_exists s then `Ok s else + `Error (Err.no "file or directory" s)), + pr_str + + let dir = + (fun s -> + if Sys.file_exists s then + if Sys.is_directory s then `Ok s else `Error (Err.not_dir s) + else + `Error (Err.no "directory" s)), + pr_str + + let non_dir_file = + (fun s -> + if Sys.file_exists s then + if not (Sys.is_directory s) then `Ok s else `Error (Err.is_dir s) + else + `Error (Err.no "file" s)), + pr_str + + let split_and_parse sep parse s = + let parse sub = match parse sub with + | `Error e -> failwith e | `Ok v -> v in + let rec split accum j = + let i = try String.rindex_from s j sep with Not_found -> -1 in + if (i = -1) then + let p = String.sub s 0 (j + 1) in + if p <> "" then parse p :: accum else accum + else + let p = String.sub s (i + 1) (j - i) in + let accum' = if p <> "" then parse p :: accum else accum in + split accum' (i - 1) + in + split [] (String.length s - 1) + + let list ?(sep = ',') (parse, pr_e) = + let parse s = try `Ok (split_and_parse sep parse s) with + | Failure e -> `Error (Err.element "list" s e) + in + let rec print ppf = function + | v :: l -> pr_e ppf v; if (l <> []) then (pr_char ppf sep; print ppf l) + | [] -> () + in + parse, print + + let array ?(sep = ',') (parse, pr_e) = + let parse s = try `Ok (Array.of_list (split_and_parse sep parse s)) with + | Failure e -> `Error (Err.element "array" s e) + in + let print ppf v = + let max = Array.length v - 1 in + for i = 0 to max do pr_e ppf v.(i); if i <> max then pr_char ppf sep done + in + parse, print + + let split_left sep s = + try + let i = String.index s sep in + let len = String.length s in + Some ((String.sub s 0 i), (String.sub s (i + 1) (len - i - 1))) + with Not_found -> None + + let pair ?(sep = ',') (pa0, pr0) (pa1, pr1) = + let parser s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v0, v1) -> + match pa0 v0, pa1 v1 with + | `Ok v0, `Ok v1 -> `Ok (v0, v1) + | `Error e, _ | _, `Error e -> `Error (Err.element "pair" s e) + in + let printer ppf (v0, v1) = pr ppf "%a%c%a" pr0 v0 sep pr1 v1 in + parser, printer + + let t2 = pair + let t3 ?(sep = ',') (pa0, pr0) (pa1, pr1) (pa2, pr2) = + let parse s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v0, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v1, v2) -> + match pa0 v0, pa1 v1, pa2 v2 with + | `Ok v0, `Ok v1, `Ok v2 -> `Ok (v0, v1, v2) + | `Error e, _, _ | _, `Error e, _ | _, _, `Error e -> + `Error (Err.element "triple" s e) + in + let print ppf (v0, v1, v2) = + pr ppf "%a%c%a%c%a" pr0 v0 sep pr1 v1 sep pr2 v2 + in + parse, print + + let t4 ?(sep = ',') (pa0, pr0) (pa1, pr1) (pa2, pr2) (pa3, pr3) = + let parse s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some(v0, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v1, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v2, v3) -> + match pa0 v0, pa1 v1, pa2 v2, pa3 v3 with + | `Ok v1, `Ok v2, `Ok v3, `Ok v4 -> `Ok (v1, v2, v3, v4) + | `Error e, _, _, _ | _, `Error e, _, _ | _, _, `Error e, _ + | _, _, _, `Error e -> `Error (Err.element "quadruple" s e) + in + let print ppf (v0, v1, v2, v3) = + pr ppf "%a%c%a%c%a%c%a" pr0 v0 sep pr1 v1 sep pr2 v2 sep pr3 v3 + in + parse, print + + (* Documentation formatting helpers *) + + let doc_quote = quote + let doc_alts = alts_str + let doc_alts_enum ?quoted enum = alts_str ?quoted (List.map fst enum) +end + +module Term = struct + type info = term_info + type +'a t = arg_info list * (eval_info -> cmdline -> 'a) + type 'a result = [ + | `Ok of 'a | `Error of [`Parse | `Term | `Exn ] | `Version | `Help ] + + exception Term of + [ `Help of [`Pager | `Plain | `Groff] * string option + | `Error of bool * string ] + + let info ?(sdocs = "OPTIONS") ?(man = []) ?(docs = "COMMANDS") ?(doc = "") + ?version name = + { name = name; version = version; tdoc = doc; tdocs = docs; sdocs = sdocs; + man = man } + + let name ti = ti.name + let pure v = [], (fun _ _ -> v) + let app (al, f) (al', v) = + List.rev_append al al', + fun ei cl -> (f ei cl) (v ei cl) + + let ( $ ) = app + + type 'a ret = + [ `Help of [`Pager | `Plain | `Groff] * string option + | `Error of (bool * string) + | `Ok of 'a ] + + let ret (al, v) = + al, fun ei cl -> match v ei cl with + | `Ok v -> v + | `Error (u,e) -> raise (Term (`Error (u,e))) + | `Help h -> raise (Term (`Help h)) + + let main_name = [], (fun ei _ -> (fst ei.main).name) + let choice_names = + [], fun ei _ -> List.rev_map (fun e -> (fst e).name) ei.choices + + let man_format = + let fmts = ["pager", `Pager; "groff", `Groff; "plain", `Plain] in + let doc = "Show output in format $(docv) (pager, plain or groff)."in + Arg.(value & opt (enum fmts) `Pager & info ["man-format"] ~docv:"FMT" ~doc) + + (* Evaluation *) + + let remove_exec argv = + try List.tl (Array.to_list argv) with Failure _ -> invalid_arg err_argv + + let add_std_opts ei = + let docs = (fst ei.term).sdocs in + let args, v_lookup = + if (fst ei.main).version = None then [], None else + let (a, lookup) = + Arg.flag (Arg.info ["version"] ~docs ~doc:"Show version information.") + in + a, Some lookup + in + let args, h_lookup = + let (a, lookup) = + let fmt = Arg.enum ["pager",`Pager; "groff",`Groff; "plain",`Plain] in + let doc = "Show this help in format $(docv) (pager, plain or groff)."in + let a = Arg.info ["help"] ~docv:"FMT" ~docs ~doc in + Arg.opt ~vopt:(Some `Pager) (Arg.some fmt) None a + in + List.rev_append a args, lookup + in + h_lookup, v_lookup, + { ei with term = (fst ei.term), List.rev_append args (snd ei.term) } + + let eval_term help err ei f args = + let help_arg, vers_arg, ei = add_std_opts ei in + try + let cl = Cmdline.create (snd ei.term) args in + match help_arg ei cl, vers_arg with + | Some fmt, _ -> Help.print fmt help ei; `Help + | None, Some v_arg when v_arg ei cl -> Help.pr_version help ei; `Version + | _ -> `Ok (f ei cl) + with + | Cmdline.Error e -> Err.pr_usage err ei e; `Error `Parse + | Term (`Error (usage, e)) -> + if usage then Err.pr_usage err ei e else Err.print err ei e; + `Error `Term + | Term (`Help (fmt, cmd)) -> + let ei = match cmd with + | Some cmd -> + let cmd = + try List.find (fun (i, _) -> i.name = cmd) ei.choices + with Not_found -> invalid_arg (err_help cmd) + in + {ei with term = cmd } + | None -> { ei with term = ei.main } + in + let _, _, ei = add_std_opts ei in + Help.print fmt help ei; `Help + + let eval ?(help = Format.std_formatter) ?(err = Format.err_formatter) + ?(catch = true) ?(argv = Sys.argv) ((al, f), ti) = + let term = ti, al in + let ei = { term = term; main = term; choices = [] } in + try eval_term help err ei f (remove_exec argv) with + | e when catch -> + Err.pr_backtrace err ei e (Printexc.get_backtrace ()); `Error `Exn + + let eval_choice ?(help = Format.std_formatter) ?(err = Format.err_formatter) + ?(catch = true) ?(argv = Sys.argv) (((al, f) as t), ti) choices = + let ei_choices = List.rev_map (fun ((al, _), ti) -> ti, al) choices in + let main = (ti, al) in + let ei = { term = main; main = main; choices = ei_choices } in + try + let chosen, args = Cmdline.choose_term ti ei_choices (remove_exec argv) in + let find_chosen (_, ti) = ti = chosen in + let (al, f), _ = List.find find_chosen ((t, ti) :: choices) in + let ei = { ei with term = (chosen, al) } in + eval_term help err ei f args + with + | Cmdline.Error e -> (* may be raised by choose_term. *) + Err.pr_usage err ei e; `Error `Parse + | e when catch -> + Err.pr_backtrace err ei e (Printexc.get_backtrace ()); `Error `Exn + + let eval_peek_opts ?(version_opt = false) ?(argv = Sys.argv) (al, f) = + let args = remove_exec argv in + let version = if version_opt then Some "dummy" else None in + let term = info ?version "dummy", al in + let ei = { term = term; main = term; choices = [] } in + let help_arg, vers_arg, ei = add_std_opts ei in + try + let cl = Cmdline.create ~peek_opts:true (snd ei.term) args in + match help_arg ei cl, vers_arg with + | Some fmt, _ -> + (try (Some (f ei cl), `Help) with e -> None, `Help) + | None, Some v_arg when v_arg ei cl -> + (try (Some (f ei cl), `Version) with e -> None, `Version) + | _ -> + let v = f ei cl in + Some v, `Ok v + with + | Cmdline.Error _ -> None, (`Error `Parse) + | Term _ -> None, (`Error `Term) + | e -> None, (`Error `Exn) +end + +(*--------------------------------------------------------------------------- + Copyright (c) 2011 Daniel C. Bünzli + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + 3. Neither the name of Daniel C. Bünzli nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*) diff --git a/samples/OCaml/common.ml b/samples/OCaml/common.ml new file mode 100644 index 00000000..8f3a9260 --- /dev/null +++ b/samples/OCaml/common.ml @@ -0,0 +1,14 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +let string_of format v = + let buf = Buffer.create 100 in + let fmt = Format.formatter_of_buffer buf in begin + format fmt v; + Format.pp_print_flush fmt (); + Buffer.contents buf + end diff --git a/samples/OCaml/date.ml b/samples/OCaml/date.ml new file mode 100644 index 00000000..70f46d3c --- /dev/null +++ b/samples/OCaml/date.ml @@ -0,0 +1,40 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +open Ctypes +open PosixTypes +open Foreign + +type tm +let tm = structure "tm" +let (-:) ty label = field tm label ty +let tm_sec = int -: "tm_sec" (* seconds *) +let tm_min = int -: "tm_min" (* minutes *) +let tm_hour = int -: "tm_hour" (* hours *) +let tm_mday = int -: "tm_mday" (* day of the month *) +let tm_mon = int -: "tm_mon" (* month *) +let tm_year = int -: "tm_year" (* year *) +let tm_wday = int -: "tm_wday" (* day of the week *) +let tm_yday = int -: "tm_yday" (* day in the year *) +let tm_isdst = int -: "tm_isdst" (* daylight saving time *) +let () = seal (tm : tm structure typ) + +let time = foreign "time" ~check_errno:true (ptr time_t @-> returning time_t) + +let asctime = foreign "asctime" (ptr tm @-> returning string) + +let localtime = foreign "localtime" (ptr time_t @-> returning (ptr tm)) + +let () = begin + let timep = allocate_n ~count:1 time_t in + let time = time timep in + assert (time = !@timep); + let tm = localtime timep in + Printf.printf "tm.tm_mon = %d\n" (getf !@tm tm_mon); + Printf.printf "tm.tm_year = %d\n" (getf !@tm tm_year); + print_endline (asctime tm) +end diff --git a/samples/OCaml/map.ml b/samples/OCaml/map.ml new file mode 100644 index 00000000..7d65bc6b --- /dev/null +++ b/samples/OCaml/map.ml @@ -0,0 +1,337 @@ +(***********************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. This file is distributed *) +(* under the terms of the GNU Library General Public License, with *) +(* the special exception on linking described in file ../LICENSE. *) +(* *) +(***********************************************************************) + +module type OrderedType = + sig + type t + val compare: t -> t -> int + end + +module type S = + sig + type key + type +'a t + val empty: 'a t + val is_empty: 'a t -> bool + val mem: key -> 'a t -> bool + val add: key -> 'a -> 'a t -> 'a t + val singleton: key -> 'a -> 'a t + val remove: key -> 'a t -> 'a t + val merge: + (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t + val compare: ('a -> 'a -> int) -> 'a t -> 'a t -> int + val equal: ('a -> 'a -> bool) -> 'a t -> 'a t -> bool + val iter: (key -> 'a -> unit) -> 'a t -> unit + val fold: (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b + val for_all: (key -> 'a -> bool) -> 'a t -> bool + val exists: (key -> 'a -> bool) -> 'a t -> bool + val filter: (key -> 'a -> bool) -> 'a t -> 'a t + val partition: (key -> 'a -> bool) -> 'a t -> 'a t * 'a t + val cardinal: 'a t -> int + val bindings: 'a t -> (key * 'a) list + val min_binding: 'a t -> (key * 'a) + val max_binding: 'a t -> (key * 'a) + val choose: 'a t -> (key * 'a) + val split: key -> 'a t -> 'a t * 'a option * 'a t + val find: key -> 'a t -> 'a + val map: ('a -> 'b) -> 'a t -> 'b t + val mapi: (key -> 'a -> 'b) -> 'a t -> 'b t + end + +module Make(Ord: OrderedType) = struct + + type key = Ord.t + + type 'a t = + Empty + | Node of 'a t * key * 'a * 'a t * int + + let height = function + Empty -> 0 + | Node(_,_,_,_,h) -> h + + let create l x d r = + let hl = height l and hr = height r in + Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1)) + + let singleton x d = Node(Empty, x, d, Empty, 1) + + let bal l x d r = + let hl = match l with Empty -> 0 | Node(_,_,_,_,h) -> h in + let hr = match r with Empty -> 0 | Node(_,_,_,_,h) -> h in + if hl > hr + 2 then begin + match l with + Empty -> invalid_arg "Map.bal" + | Node(ll, lv, ld, lr, _) -> + if height ll >= height lr then + create ll lv ld (create lr x d r) + else begin + match lr with + Empty -> invalid_arg "Map.bal" + | Node(lrl, lrv, lrd, lrr, _)-> + create (create ll lv ld lrl) lrv lrd (create lrr x d r) + end + end else if hr > hl + 2 then begin + match r with + Empty -> invalid_arg "Map.bal" + | Node(rl, rv, rd, rr, _) -> + if height rr >= height rl then + create (create l x d rl) rv rd rr + else begin + match rl with + Empty -> invalid_arg "Map.bal" + | Node(rll, rlv, rld, rlr, _) -> + create (create l x d rll) rlv rld (create rlr rv rd rr) + end + end else + Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1)) + + let empty = Empty + + let is_empty = function Empty -> true | _ -> false + + let rec add x data = function + Empty -> + Node(Empty, x, data, Empty, 1) + | Node(l, v, d, r, h) -> + let c = Ord.compare x v in + if c = 0 then + Node(l, x, data, r, h) + else if c < 0 then + bal (add x data l) v d r + else + bal l v d (add x data r) + + let rec find x = function + Empty -> + raise Not_found + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + if c = 0 then d + else find x (if c < 0 then l else r) + + let rec mem x = function + Empty -> + false + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + c = 0 || mem x (if c < 0 then l else r) + + let rec min_binding = function + Empty -> raise Not_found + | Node(Empty, x, d, r, _) -> (x, d) + | Node(l, x, d, r, _) -> min_binding l + + let rec max_binding = function + Empty -> raise Not_found + | Node(l, x, d, Empty, _) -> (x, d) + | Node(l, x, d, r, _) -> max_binding r + + let rec remove_min_binding = function + Empty -> invalid_arg "Map.remove_min_elt" + | Node(Empty, x, d, r, _) -> r + | Node(l, x, d, r, _) -> bal (remove_min_binding l) x d r + + let merge t1 t2 = + match (t1, t2) with + (Empty, t) -> t + | (t, Empty) -> t + | (_, _) -> + let (x, d) = min_binding t2 in + bal t1 x d (remove_min_binding t2) + + let rec remove x = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let c = Ord.compare x v in + if c = 0 then + merge l r + else if c < 0 then + bal (remove x l) v d r + else + bal l v d (remove x r) + + let rec iter f = function + Empty -> () + | Node(l, v, d, r, _) -> + iter f l; f v d; iter f r + + let rec map f = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let l' = map f l in + let d' = f d in + let r' = map f r in + Node(l', v, d', r', h) + + let rec mapi f = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let l' = mapi f l in + let d' = f v d in + let r' = mapi f r in + Node(l', v, d', r', h) + + let rec fold f m accu = + match m with + Empty -> accu + | Node(l, v, d, r, _) -> + fold f r (f v d (fold f l accu)) + + let rec for_all p = function + Empty -> true + | Node(l, v, d, r, _) -> p v d && for_all p l && for_all p r + + let rec exists p = function + Empty -> false + | Node(l, v, d, r, _) -> p v d || exists p l || exists p r + + (* Beware: those two functions assume that the added k is *strictly* + smaller (or bigger) than all the present keys in the tree; it + does not test for equality with the current min (or max) key. + + Indeed, they are only used during the "join" operation which + respects this precondition. + *) + + let rec add_min_binding k v = function + | Empty -> singleton k v + | Node (l, x, d, r, h) -> + bal (add_min_binding k v l) x d r + + let rec add_max_binding k v = function + | Empty -> singleton k v + | Node (l, x, d, r, h) -> + bal l x d (add_max_binding k v r) + + (* Same as create and bal, but no assumptions are made on the + relative heights of l and r. *) + + let rec join l v d r = + match (l, r) with + (Empty, _) -> add_min_binding v d r + | (_, Empty) -> add_max_binding v d l + | (Node(ll, lv, ld, lr, lh), Node(rl, rv, rd, rr, rh)) -> + if lh > rh + 2 then bal ll lv ld (join lr v d r) else + if rh > lh + 2 then bal (join l v d rl) rv rd rr else + create l v d r + + (* Merge two trees l and r into one. + All elements of l must precede the elements of r. + No assumption on the heights of l and r. *) + + let concat t1 t2 = + match (t1, t2) with + (Empty, t) -> t + | (t, Empty) -> t + | (_, _) -> + let (x, d) = min_binding t2 in + join t1 x d (remove_min_binding t2) + + let concat_or_join t1 v d t2 = + match d with + | Some d -> join t1 v d t2 + | None -> concat t1 t2 + + let rec split x = function + Empty -> + (Empty, None, Empty) + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + if c = 0 then (l, Some d, r) + else if c < 0 then + let (ll, pres, rl) = split x l in (ll, pres, join rl v d r) + else + let (lr, pres, rr) = split x r in (join l v d lr, pres, rr) + + let rec merge f s1 s2 = + match (s1, s2) with + (Empty, Empty) -> Empty + | (Node (l1, v1, d1, r1, h1), _) when h1 >= height s2 -> + let (l2, d2, r2) = split v1 s2 in + concat_or_join (merge f l1 l2) v1 (f v1 (Some d1) d2) (merge f r1 r2) + | (_, Node (l2, v2, d2, r2, h2)) -> + let (l1, d1, r1) = split v2 s1 in + concat_or_join (merge f l1 l2) v2 (f v2 d1 (Some d2)) (merge f r1 r2) + | _ -> + assert false + + let rec filter p = function + Empty -> Empty + | Node(l, v, d, r, _) -> + (* call [p] in the expected left-to-right order *) + let l' = filter p l in + let pvd = p v d in + let r' = filter p r in + if pvd then join l' v d r' else concat l' r' + + let rec partition p = function + Empty -> (Empty, Empty) + | Node(l, v, d, r, _) -> + (* call [p] in the expected left-to-right order *) + let (lt, lf) = partition p l in + let pvd = p v d in + let (rt, rf) = partition p r in + if pvd + then (join lt v d rt, concat lf rf) + else (concat lt rt, join lf v d rf) + + type 'a enumeration = End | More of key * 'a * 'a t * 'a enumeration + + let rec cons_enum m e = + match m with + Empty -> e + | Node(l, v, d, r, _) -> cons_enum l (More(v, d, r, e)) + + let compare cmp m1 m2 = + let rec compare_aux e1 e2 = + match (e1, e2) with + (End, End) -> 0 + | (End, _) -> -1 + | (_, End) -> 1 + | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) -> + let c = Ord.compare v1 v2 in + if c <> 0 then c else + let c = cmp d1 d2 in + if c <> 0 then c else + compare_aux (cons_enum r1 e1) (cons_enum r2 e2) + in compare_aux (cons_enum m1 End) (cons_enum m2 End) + + let equal cmp m1 m2 = + let rec equal_aux e1 e2 = + match (e1, e2) with + (End, End) -> true + | (End, _) -> false + | (_, End) -> false + | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) -> + Ord.compare v1 v2 = 0 && cmp d1 d2 && + equal_aux (cons_enum r1 e1) (cons_enum r2 e2) + in equal_aux (cons_enum m1 End) (cons_enum m2 End) + + let rec cardinal = function + Empty -> 0 + | Node(l, _, _, r, _) -> cardinal l + 1 + cardinal r + + let rec bindings_aux accu = function + Empty -> accu + | Node(l, v, d, r, _) -> bindings_aux ((v, d) :: bindings_aux accu r) l + + let bindings s = + bindings_aux [] s + + let choose = min_binding + +end diff --git a/samples/OCaml/mirage.ml b/samples/OCaml/mirage.ml new file mode 100644 index 00000000..4878abed --- /dev/null +++ b/samples/OCaml/mirage.ml @@ -0,0 +1,2503 @@ +(* + * Copyright (c) 2013 Thomas Gazagnaire + * Copyright (c) 2013 Anil Madhavapeddy + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + *) + +open Mirage_misc + +module StringSet = struct + + include Set.Make(String) + + let of_list l = + let s = ref empty in + List.iter (fun e -> s := add e !s) l; + !s + +end + +let main_ml = ref None + +let append_main fmt = + match !main_ml with + | None -> failwith "main_ml" + | Some oc -> append oc fmt + +let newline_main () = + match !main_ml with + | None -> failwith "main_ml" + | Some oc -> newline oc + +let set_main_ml file = + let oc = open_out file in + main_ml := Some oc + +type mode = [ + | `Unix + | `Xen + | `MacOSX +] + +let string_of_mode = + function + | `Unix -> "Unix" + | `Xen -> "Xen" + | `MacOSX -> "MacOS X" + +let mode : mode ref = ref `Unix + +let set_mode m = + mode := m + +let get_mode () = + !mode + +type _ typ = + | Type: 'a -> 'a typ + | Function: 'a typ * 'b typ -> ('a -> 'b) typ + +let (@->) f t = + Function (f, t) + +module type CONFIGURABLE = sig + type t + val name: t -> string + val module_name: t -> string + val packages: t -> string list + val libraries: t -> string list + val configure: t -> unit + val clean: t -> unit + val update_path: t -> string -> t +end + + +module TODO (N: sig val name: string end) = struct + + let todo str = + failwith (Printf.sprintf "TODO: %s.%s" N.name str) + + let name _ = + todo "name" + + let module_name _ = + todo "module_name" + + let packages _ = + todo "packages" + + let libraries _ = + todo "libraries" + + let configure _ = + todo "configure" + + let clean _ = + todo "clean" + + let update_path _ = + todo "update_path" + +end + +type ('a, 'b) base = { + typ: 'a typ; + t: 'b; + m: (module CONFIGURABLE with type t = 'b); +} + +type 'a foreign = { + name: string; + ty: 'a typ; + libraries: string list; + packages: string list; +} + +type _ impl = + | Impl: ('a, 'b) base -> 'a impl (* base implementation *) + | App: ('a, 'b) app -> 'b impl (* functor application *) + | Foreign: 'a foreign -> 'a impl (* foreign functor implementation *) + +and ('a, 'b) app = { + f: ('a -> 'b) impl; (* functor *) + x: 'a impl; (* parameter *) +} + +let rec string_of_impl: type a. a impl -> string = function + | Impl { t; m = (module M) } -> Printf.sprintf "Impl (%s)" (M.module_name t) + | Foreign { name } -> Printf.sprintf "Foreign (%s)" name + | App { f; x } -> Printf.sprintf "App (%s, %s)" (string_of_impl f) (string_of_impl x) + +type 'a folder = { + fn: 'b. 'a -> 'b impl -> 'a +} + +let rec fold: type a. 'b folder -> a impl -> 'b -> 'b = + fun fn t acc -> + match t with + | Impl _ + | Foreign _ -> fn.fn acc t + | App {f; x} -> fold fn f (fn.fn acc x) + +type iterator = { + i: 'b. 'b impl -> unit +} + +let rec iter: type a. iterator -> a impl -> unit = + fun fn t -> + match t with + | Impl _ + | Foreign _ -> fn.i t + | App {f; x} -> iter fn f; iter fn x; fn.i x + +let driver_initialisation_error name = + Printf.sprintf "fail (Failure %S)" name + +module Name = struct + + let ids = Hashtbl.create 1024 + + let names = Hashtbl.create 1024 + + let create name = + let n = + try 1 + Hashtbl.find ids name + with Not_found -> 1 in + Hashtbl.replace ids name n; + Printf.sprintf "%s%d" name n + + let of_key key ~base = + find_or_create names key (fun () -> create base) + +end + +module Impl = struct + + (* get the left-most module name (ie. the name of the functor). *) + let rec functor_name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.module_name t + | Foreign { name } -> name + | App { f } -> functor_name f + + (* return a unique variable name holding the state of the given + module construction. *) + let rec name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.name t + | Foreign { name } -> Name.of_key ("f" ^ name) ~base:"f" + | App _ as t -> Name.of_key (module_name t) ~base:"t" + + (* return a unique module name holding the implementation of the + given module construction. *) + and module_name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.module_name t + | Foreign { name } -> name + | App { f; x } -> + let name = match module_names f @ [module_name x] with + | [] -> assert false + | [m] -> m + | h::t -> h ^ String.concat "" (List.map (Printf.sprintf "(%s)") t) + in + Name.of_key name ~base:"M" + + and module_names: type a. a impl -> string list = + function t -> + let fn = { + fn = fun acc t -> module_name t :: acc + } in + fold fn t [] + + let rec names: type a. a impl -> string list = function + | Foreign _ -> [] + | Impl _ as t -> [name t] + | App {f=Foreign f; x} -> names x + | App {f; x} -> (names f) @ [name x] + + let configured = Hashtbl.create 31 + + let rec configure: type a. a impl -> unit = + fun t -> + let name = name t in + if not (Hashtbl.mem configured name) then ( + Hashtbl.add configured name true; + match t with + | Impl { t; m = (module M) } -> M.configure t + | Foreign _ -> () + | App {f; x} as app -> + configure_app f; + configure_app x; + iter { i=configure } app; + let name = module_name app in + let body = cofind Name.names name in + append_main "module %s = %s" name body; + newline_main (); + ) + + and configure_app: type a. a impl -> unit = function + | Impl _ + | Foreign _ -> () + | App _ as t -> + let name = name t in + configure t; + begin match names t with + | [n] -> append_main "let %s = %s" name n + | names -> + append_main "let %s () =" name; + List.iter (fun n -> + append_main " %s () >>= function" n; + append_main " | `Error e -> %s" (driver_initialisation_error n); + append_main " | `Ok %s ->" n; + ) names; + append_main " return (`Ok (%s))" (String.concat ", " names) + end; + newline_main () + + let rec packages: type a. a impl -> string list = function + | Impl { t; m = (module M) } -> M.packages t + | Foreign { packages } -> packages + | App {f; x} -> packages f @ packages x + + let rec libraries: type a. a impl -> string list = function + | Impl { t; m = (module M) } -> M.libraries t + | Foreign { libraries } -> libraries + | App {f; x} -> libraries f @ libraries x + + let rec clean: type a. a impl -> unit = function + | Impl { t; m = (module M) } -> M.clean t + | Foreign _ -> () + | App {f; x} -> clean f; clean x + + let rec update_path: type a. a impl -> string -> a impl = + fun t root -> match t with + | Impl b -> + let module M = (val b.m) in Impl { b with t = M.update_path b.t root } + | Foreign _ -> t + | App {f; x} -> App { f = update_path f root; x = update_path x root } + +end + +let impl typ t m = + Impl { typ; t; m } + +let implementation typ t m = + let typ = Type typ in + Impl { typ; t; m } + +let ($) f x = + App { f; x } + +let foreign name ?(libraries=[]) ?(packages=[]) ty = + Foreign { name; ty; libraries; packages } + +let rec typ: type a. a impl -> a typ = function + | Impl { typ } -> typ + | Foreign { ty } -> ty + | App { f } -> match typ f with Function (_, b) -> b | _ -> assert false + + +module Io_page = struct + + (** Memory allocation interface. *) + + type t = unit + + let name () = + "io_page" + + let module_name () = + "Io_page" + + let packages () = [ + "io-page" + ] + + let libraries () = + match !mode with + | `Xen -> ["io-page"] + | `Unix | `MacOSX -> ["io-page"; "io-page.unix"] + + let configure () = () + + let clean () = () + + let update_path () _ = () + +end + +type io_page = IO_PAGE + +let io_page = Type IO_PAGE + +let default_io_page: io_page impl = + impl io_page () (module Io_page) + +module Time = struct + + (** OS Timer. *) + + type t = unit + + let name () = + "time" + + let module_name () = + "OS.Time" + + let packages () = [] + + let libraries () = [] + + let configure () = () + + let clean () = () + + let update_path () _ = () + +end + +type time = TIME + +let time = Type TIME + +let default_time: time impl = + impl time () (module Time) + +module Clock = struct + + (** Clock operations. *) + + type t = unit + + let name () = + "clock" + + let module_name () = + "Clock" + + let packages () = [ + match !mode with + | `Unix | `MacOSX -> "mirage-clock-unix" + | `Xen -> "mirage-clock-xen" + ] + + let libraries () = packages () + + let configure () = + append_main "let clock () = return (`Ok ())"; + newline_main () + + let clean () = () + + let update_path () _ = () + +end + +type clock = CLOCK + +let clock = Type CLOCK + +let default_clock: clock impl = + impl clock () (module Clock) + +module Random = struct + + type t = unit + + let name () = + "random" + + let module_name () = + "Random" + + let packages () = [] + + let libraries () = [] + + let configure () = + append_main "let random () = return (`Ok ())"; + newline_main () + + let clean () = () + + let update_path () _ = () + +end + +type random = RANDOM + +let random = Type RANDOM + +let default_random: random impl = + impl random () (module Random) + +module Entropy = struct + + type t = unit + + let name _ = + "entropy" + + let module_name () = "Entropy" + + let construction () = + match !mode with + | `Unix | `MacOSX -> "Entropy_unix.Make (OS.Time)" + | `Xen -> "Entropy_xen" + + let packages () = + match !mode with + | `Unix | `MacOSX -> [ "mirage-entropy-unix" ] + | `Xen -> [ "mirage-entropy-xen" ] + + let libraries = packages + + let configure t = + append_main "module %s = %s" (module_name t) (construction t) ; + newline_main () ; + append_main "let %s () =" (name t); + append_main " %s.connect ()" (module_name t); + newline_main () + + let clean () = () + + let update_path t _ = t + +end + +type entropy = ENTROPY + +let entropy = Type ENTROPY + +let default_entropy: entropy impl = + impl entropy () (module Entropy) + +module Console = struct + + type t = string + + let name t = + Name.of_key ("console" ^ t) ~base:"console" + + let module_name t = + "Console" + + let construction () = + match !mode with + | `Unix | `MacOSX -> "Console_unix" + | `Xen -> "Console_xen" + + let packages _ = + match !mode with + | `Unix | `MacOSX -> ["mirage-console"; "mirage-unix"] + | `Xen -> ["mirage-console"; "xenstore"; "mirage-xen"; "xen-gnt"; "xen-evtchn"] + + let libraries _ = + match !mode with + | `Unix | `MacOSX -> ["mirage-console.unix"] + | `Xen -> ["mirage-console.xen"] + + let configure t = + append_main "module %s = %s" (module_name t) (construction ()); + newline_main (); + append_main "let %s () =" (name t); + append_main " %s.connect %S" (module_name t) t; + newline_main () + + let clean _ = + () + + let update_path t _ = + t + +end + +type console = CONSOLE + +let console = Type CONSOLE + +let default_console: console impl = + impl console "0" (module Console) + +let custom_console: string -> console impl = + fun str -> + impl console str (module Console) + +module Crunch = struct + + type t = string + + let name t = + Name.of_key ("static" ^ t) ~base:"static" + + let module_name t = + String.capitalize (name t) + + let packages _ = [ + "mirage-types"; + "lwt"; + "cstruct"; + "crunch"; + ] @ Io_page.packages () + + let libraries _ = [ + "mirage-types"; + "lwt"; + "cstruct"; + ] @ Io_page.libraries () + + let ml t = + Printf.sprintf "%s.ml" (name t) + + let mli t = + Printf.sprintf "%s.mli" (name t) + + let configure t = + if not (command_exists "ocaml-crunch") then + error "ocaml-crunch not found, stopping."; + let file = ml t in + if Sys.file_exists t then ( + info "%s %s" (blue_s "Generating:") (Sys.getcwd () / file); + command "ocaml-crunch -o %s %s" file t + ) else + error "The directory %s does not exist." t; + append_main "let %s () =" (name t); + append_main " %s.connect ()" (module_name t); + newline_main () + + let clean t = + remove (ml t); + remove (mli t) + + let update_path t root = + if Sys.file_exists (root / t) then + root / t + else + t + +end + +type kv_ro = KV_RO + +let kv_ro = Type KV_RO + +let crunch dirname = + impl kv_ro dirname (module Crunch) + +module Direct_kv_ro = struct + + include Crunch + + let module_name t = + match !mode with + | `Xen -> Crunch.module_name t + | `Unix | `MacOSX -> "Kvro_fs_unix" + + let packages t = + match !mode with + | `Xen -> Crunch.packages t + | `Unix | `MacOSX -> "mirage-fs-unix" :: Crunch.packages t + + let libraries t = + match !mode with + | `Xen -> Crunch.libraries t + | `Unix | `MacOSX -> "mirage-fs-unix" :: Crunch.libraries t + + let configure t = + match !mode with + | `Xen -> Crunch.configure t + | `Unix | `MacOSX -> + append_main "let %s () =" (name t); + append_main " Kvro_fs_unix.connect %S" t + +end + +let direct_kv_ro dirname = + impl kv_ro dirname (module Direct_kv_ro) + +module Block = struct + + type t = string + + let name t = + Name.of_key ("block" ^ t) ~base:"block" + + let module_name _ = + "Block" + + let packages _ = [ + match !mode with + | `Unix | `MacOSX -> "mirage-block-unix" + | `Xen -> "mirage-block-xen" + ] + + let libraries _ = [ + match !mode with + | `Unix | `MacOSX -> "mirage-block-unix" + | `Xen -> "mirage-block-xen.front" + ] + + let configure t = + append_main "let %s () =" (name t); + append_main " %s.connect %S" (module_name t) t; + newline_main () + + let clean t = + () + + let update_path t root = + if Sys.file_exists (root / t) then + root / t + else + t + +end + +type block = BLOCK + +let block = Type BLOCK + +let block_of_file filename = + impl block filename (module Block) + +module Fat = struct + + type t = { + io_page: io_page impl; + block : block impl; + } + + let name t = + let key = "fat" ^ Impl.name t.io_page ^ Impl.name t.block in + Name.of_key key ~base:"fat" + + let module_name t = + String.capitalize (name t) + + let packages t = + "fat-filesystem" + :: Impl.packages t.io_page + @ Impl.packages t.block + + let libraries t = + "fat-filesystem" + :: Impl.libraries t.io_page + @ Impl.libraries t.block + + let configure t = + Impl.configure t.io_page; + Impl.configure t.block; + append_main "module %s = Fat.Fs.Make(%s)(%s)" + (module_name t) + (Impl.module_name t.block) + (Impl.module_name t.io_page); + newline_main (); + let name = name t in + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.block); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok dev -> %s.connect dev" (module_name t); + newline_main () + + let clean t = + Impl.clean t.block; + Impl.clean t.io_page + + let update_path t root = + { io_page = Impl.update_path t.io_page root; + block = Impl.update_path t.block root; + } + +end + +type fs = FS + +let fs = Type FS + +let fat ?(io_page=default_io_page) block: fs impl = + let t = { Fat.block; io_page } in + impl fs t (module Fat) + +(* This would deserve to be in its own lib. *) +let kv_ro_of_fs x: kv_ro impl = + let dummy_fat = fat (block_of_file "xx") in + let libraries = Impl.libraries dummy_fat in + let packages = Impl.packages dummy_fat in + let fn = foreign "Fat.KV_RO.Make" ~libraries ~packages (fs @-> kv_ro) in + fn $ x + +module Fat_of_files = struct + + type t = { + dir : string option; + regexp: string; + } + + let name t = + Name.of_key + ("fat" ^ (match t.dir with None -> "." | Some d -> d) ^ ":" ^ t.regexp) + ~base:"fat" + + let module_name t = + String.capitalize (name t) + + let block_file t = + name t ^ ".img" + + let block t = + block_of_file (block_file t) + + let packages t = + Impl.packages (fat (block t)) + + let libraries t = + Impl.libraries (fat (block t)) + + let configure t = + let fat = fat (block t) in + Impl.configure fat; + append_main "module %s = %s" (module_name t) (Impl.module_name fat); + append_main "let %s = %s" (name t) (Impl.name fat); + newline_main (); + let file = Printf.sprintf "make-%s-image.sh" (name t) in + let oc = open_out file in + append oc "#!/bin/sh"; + append oc ""; + append oc "echo This uses the 'fat' command-line tool to build a simple FAT"; + append oc "echo filesystem image."; + append oc ""; + append oc "FAT=$(which fat)"; + append oc "if [ ! -x \"${FAT}\" ]; then"; + append oc " echo I couldn\\'t find the 'fat' command-line tool."; + append oc " echo Try running 'opam install fat-filesystem'"; + append oc " exit 1"; + append oc "fi"; + append oc ""; + append oc "IMG=$(pwd)/%s" (block_file t); + append oc "rm -f ${IMG}"; + (match t.dir with None -> () | Some d -> append oc "cd %s/" d); + append oc "SIZE=$(du -s . | cut -f 1)"; + append oc "${FAT} create ${IMG} ${SIZE}KiB"; + append oc "${FAT} add ${IMG} %s" t.regexp; + append oc "echo Created '%s'" (block_file t); + + close_out oc; + Unix.chmod file 0o755; + command "./make-%s-image.sh" (name t) + + let clean t = + command "rm -f make-%s-image.sh %s" (name t) (block_file t); + Impl.clean (block t) + + let update_path t root = + match t.dir with + | None -> t + | Some d -> { t with dir = Some (root / d) } + +end + +let fat_of_files: ?dir:string -> ?regexp:string -> unit -> fs impl = + fun ?dir ?regexp () -> + let regexp = match regexp with + | None -> "*" + | Some r -> r in + impl fs { Fat_of_files.dir; regexp } (module Fat_of_files) + +type network_config = Tap0 | Custom of string + +module Network = struct + + type t = network_config + + let name t = + "net_" ^ match t with + | Tap0 -> "tap0" + | Custom s -> s + + let module_name _ = + "Netif" + + let packages t = + match !mode with + | `Unix -> ["mirage-net-unix"] + | `MacOSX -> ["mirage-net-macosx"] + | `Xen -> ["mirage-net-xen"] + + let libraries t = + packages t + + let configure t = + append_main "let %s () =" (name t); + append_main " %s.connect %S" + (module_name t) + (match t with Tap0 -> "tap0" | Custom s -> s); + newline_main () + + let clean _ = + () + + let update_path t _ = + t + +end + +type network = NETWORK + +let network = Type NETWORK + +let tap0 = + impl network Tap0 (module Network) + +let netif dev = + impl network (Custom dev) (module Network) + +module Ethif = struct + + type t = network impl + + let name t = + Name.of_key ("ethif" ^ Impl.name t) ~base:"ethif" + + let module_name t = + String.capitalize (name t) + + let packages t = + Impl.packages t @ ["tcpip"] + + let libraries t = + Impl.libraries t @ + match !mode with + | `Unix | `MacOSX -> [ "tcpip.ethif-unix" ] + | `Xen -> [ "tcpip.ethif" ] + + let configure t = + let name = name t in + Impl.configure t; + append_main "module %s = Ethif.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth -> %s.connect eth" (module_name t); + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +type ethernet = ETHERNET + +let ethernet = Type ETHERNET + +let etif network = + impl ethernet network (module Ethif) + +type ('ipaddr, 'prefix) ip_config = { + address: 'ipaddr; + netmask: 'prefix; + gateways: 'ipaddr list; +} + +type ipv4_config = (Ipaddr.V4.t, Ipaddr.V4.t) ip_config + +let meta_ipv4_config t = + Printf.sprintf "(Ipaddr.V4.of_string_exn %S, Ipaddr.V4.of_string_exn %S, [%s])" + (Ipaddr.V4.to_string t.address) + (Ipaddr.V4.to_string t.netmask) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V4.of_string_exn %S") + (List.map Ipaddr.V4.to_string t.gateways))) + +module IPV4 = struct + + type t = { + ethernet: ethernet impl; + config : ipv4_config; + } + (* XXX: should the type if ipv4.id be ipv4.t ? + N.connect ethif |> N.set_ip up *) + + let name t = + let key = "ipv4" ^ Impl.name t.ethernet ^ meta_ipv4_config t.config in + Name.of_key key ~base:"ipv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.ethernet + + let libraries t = + (match !mode with + | `Unix | `MacOSX -> [ "tcpip.ipv4-unix" ] + | `Xen -> [ "tcpip.ipv4" ]) + @ Impl.libraries t.ethernet + + let configure t = + let name = name t in + let mname = module_name t in + Impl.configure t.ethernet; + append_main "module %s = Ipv4.Make(%s)" + (module_name t) (Impl.module_name t.ethernet); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ethernet); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth ->"; + append_main " %s.connect eth >>= function" mname; + append_main " | `Error _ -> %s" (driver_initialisation_error "IPV4"); + append_main " | `Ok ip ->"; + append_main " let i = Ipaddr.V4.of_string_exn in"; + append_main " %s.set_ip ip (i %S) >>= fun () ->" + mname (Ipaddr.V4.to_string t.config.address); + append_main " %s.set_ip_netmask ip (i %S) >>= fun () ->" + mname (Ipaddr.V4.to_string t.config.netmask); + append_main " %s.set_ip_gateways ip [%s] >>= fun () ->" + mname + (String.concat "; " + (List.map + (fun n -> Printf.sprintf "(i %S)" (Ipaddr.V4.to_string n)) + t.config.gateways)); + append_main " return (`Ok ip)"; + newline_main () + + let clean t = + Impl.clean t.ethernet + + let update_path t root = + { t with ethernet = Impl.update_path t.ethernet root } + +end + +type ipv6_config = (Ipaddr.V6.t, Ipaddr.V6.Prefix.t list) ip_config + +let meta_ipv6_config t = + Printf.sprintf "(Ipaddr.V6.of_string_exn %S, [%s], [%s])" + (Ipaddr.V6.to_string t.address) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V6.Prefix.of_string_exn %S") + (List.map Ipaddr.V6.Prefix.to_string t.netmask))) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V6.of_string_exn %S") + (List.map Ipaddr.V6.to_string t.gateways))) + +module IPV6 = struct + + type t = { + time : time impl; + clock : clock impl; + ethernet: ethernet impl; + config : ipv6_config; + } + (* XXX: should the type if ipv4.id be ipv4.t ? + N.connect ethif |> N.set_ip up *) + + let name t = + let key = "ipv6" ^ Impl.name t.time ^ Impl.name t.clock ^ Impl.name t.ethernet ^ meta_ipv6_config t.config in + Name.of_key key ~base:"ipv6" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.time @ Impl.packages t.clock @ Impl.packages t.ethernet + + let libraries t = + (match !mode with + | `Unix | `MacOSX -> [ "tcpip.ipv6-unix" ] + | `Xen -> [ "tcpip.ipv6" ]) + @ Impl.libraries t.time @ Impl.libraries t.clock @ Impl.libraries t.ethernet + + let configure t = + let name = name t in + let mname = module_name t in + Impl.configure t.ethernet; + append_main "module %s = Ipv6.Make(%s)(%s)(%s)" + (module_name t) (Impl.module_name t.ethernet) (Impl.module_name t.time) (Impl.module_name t.clock); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ethernet); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth ->"; + append_main " %s.connect eth >>= function" mname; + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok ip ->"; + append_main " let i = Ipaddr.V6.of_string_exn in"; + append_main " %s.set_ip ip (i %S) >>= fun () ->" + mname (Ipaddr.V6.to_string t.config.address); + List.iter begin fun netmask -> + append_main " %s.set_ip_netmask ip (i %S) >>= fun () ->" + mname (Ipaddr.V6.Prefix.to_string netmask) + end t.config.netmask; + append_main " %s.set_ip_gateways ip [%s] >>= fun () ->" + mname + (String.concat "; " + (List.map + (fun n -> Printf.sprintf "(i %S)" (Ipaddr.V6.to_string n)) + t.config.gateways)); + append_main " return (`Ok ip)"; + newline_main () + + let clean t = + Impl.clean t.time; + Impl.clean t.clock; + Impl.clean t.ethernet + + let update_path t root = + { t with + time = Impl.update_path t.time root; + clock = Impl.update_path t.clock root; + ethernet = Impl.update_path t.ethernet root } + +end + +type v4 +type v6 + +type 'a ip = IP + +let ip = Type IP + +type ipv4 = v4 ip +type ipv6 = v6 ip + +let ipv4 : ipv4 typ = ip +let ipv6 : ipv6 typ = ip + +let create_ipv4 net config = + let etif = etif net in + let t = { + IPV4.ethernet = etif; + config } in + impl ipv4 t (module IPV4) + +let default_ipv4_conf = + let i = Ipaddr.V4.of_string_exn in + { + address = i "10.0.0.2"; + netmask = i "255.255.255.0"; + gateways = [i "10.0.0.1"]; + } + +let default_ipv4 net = + create_ipv4 net default_ipv4_conf + +let create_ipv6 + ?(time = default_time) + ?(clock = default_clock) + net config = + let etif = etif net in + let t = { + IPV6.ethernet = etif; + time; clock; + config + } in + impl ipv6 t (module IPV6) + +module UDP_direct (V : sig type t end) = struct + + type t = V.t ip impl + + let name t = + Name.of_key ("udp" ^ Impl.name t) ~base:"udp" + + let module_name t = + String.capitalize (name t) + + let packages t = + Impl.packages t @ [ "tcpip" ] + + let libraries t = + Impl.libraries t @ [ "tcpip.udp" ] + + let configure t = + let name = name t in + Impl.configure t; + append_main "module %s = Udp.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok ip -> %s.connect ip" (module_name t); + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +module UDPV4_socket = struct + + type t = Ipaddr.V4.t option + + let name _ = "udpv4_socket" + + let module_name _ = "Udpv4_socket" + + let packages t = [ "tcpip" ] + + let libraries t = + match !mode with + | `Unix | `MacOSX -> [ "tcpip.udpv4-socket" ] + | `Xen -> failwith "No socket implementation available for Xen" + + let configure t = + append_main "let %s () =" (name t); + let ip = match t with + | None -> "None" + | Some ip -> + Printf.sprintf "Some (Ipaddr.V4.of_string_exn %s)" (Ipaddr.V4.to_string ip) + in + append_main " %s.connect %S" (module_name t) ip; + newline_main () + + let clean t = + () + + let update_path t root = + t + +end + +type 'a udp = UDP + +type udpv4 = v4 udp +type udpv6 = v6 udp + +let udp = Type UDP +let udpv4 : udpv4 typ = udp +let udpv6 : udpv6 typ = udp + +let direct_udp (type v) (ip : v ip impl) = + impl udp ip (module UDP_direct (struct type t = v end)) + +let socket_udpv4 ip = + impl udpv4 ip (module UDPV4_socket) + +module TCP_direct (V : sig type t end) = struct + + type t = { + clock : clock impl; + time : time impl; + ip : V.t ip impl; + random: random impl; + } + + let name t = + let key = "tcp" + ^ Impl.name t.clock + ^ Impl.name t.time + ^ Impl.name t.ip in + Name.of_key key ~base:"tcp" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" + :: Impl.packages t.clock + @ Impl.packages t.time + @ Impl.packages t.ip + @ Impl.packages t.random + + let libraries t = + "tcpip.tcp" + :: Impl.libraries t.clock + @ Impl.libraries t.time + @ Impl.libraries t.ip + @ Impl.libraries t.random + + let configure t = + let name = name t in + Impl.configure t.clock; + Impl.configure t.time; + Impl.configure t.ip; + Impl.configure t.random; + append_main "module %s = Tcp.Flow.Make(%s)(%s)(%s)(%s)" + (module_name t) + (Impl.module_name t.ip) + (Impl.module_name t.time) + (Impl.module_name t.clock) + (Impl.module_name t.random); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ip); + append_main " | `Error _ -> %s" (driver_initialisation_error (Impl.name t.ip)); + append_main " | `Ok ip -> %s.connect ip" (module_name t); + newline_main () + + let clean t = + Impl.clean t.clock; + Impl.clean t.time; + Impl.clean t.ip; + Impl.clean t.random + + let update_path t root = + { clock = Impl.update_path t.clock root; + ip = Impl.update_path t.ip root; + time = Impl.update_path t.time root; + random = Impl.update_path t.random root; + } + +end + +module TCPV4_socket = struct + + type t = Ipaddr.V4.t option + + let name _ = "tcpv4_socket" + + let module_name _ = "Tcpv4_socket" + + let packages t = [ "tcpip" ] + + let libraries t = + match !mode with + | `Unix | `MacOSX -> [ "tcpip.tcpv4-socket" ] + | `Xen -> failwith "No socket implementation available for Xen" + + let configure t = + append_main "let %s () =" (name t); + let ip = match t with + | None -> "None" + | Some ip -> + Printf.sprintf "Some (Ipaddr.V4.of_string_exn %s)" (Ipaddr.V4.to_string ip) + in + append_main " %s.connect %S" (module_name t) ip; + newline_main () + + let clean t = + () + + let update_path t root = + t + +end + +type 'a tcp = TCP + +type tcpv4 = v4 tcp +type tcpv6 = v6 tcp + +let tcp = Type TCP +let tcpv4 : tcpv4 typ = tcp +let tcpv6 : tcpv6 typ = tcp + +let direct_tcp (type v) + ?(clock=default_clock) ?(random=default_random) ?(time=default_time) (ip : v ip impl) = + let module TCP_direct = TCP_direct (struct type t = v end) in + let t = { TCP_direct.clock; random; time; ip } in + impl tcp t (module TCP_direct) + +let socket_tcpv4 ip = + impl tcpv4 ip (module TCPV4_socket) + +module STACKV4_direct = struct + + type t = { + clock : clock impl; + time : time impl; + console: console impl; + network: network impl; + random : random impl; + config : [`DHCP | `IPV4 of ipv4_config]; + } + + let name t = + let key = "stackv4" + ^ Impl.name t.clock + ^ Impl.name t.time + ^ Impl.name t.console + ^ Impl.name t.network + ^ Impl.name t.random + ^ match t.config with + | `DHCP -> "dhcp" + | `IPV4 i -> meta_ipv4_config i in + Name.of_key key ~base:"stackv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" + :: Impl.packages t.clock + @ Impl.packages t.time + @ Impl.packages t.console + @ Impl.packages t.network + @ Impl.packages t.random + + let libraries t = + "tcpip.stack-direct" + :: "mirage.runtime" + :: Impl.libraries t.clock + @ Impl.libraries t.time + @ Impl.libraries t.console + @ Impl.libraries t.network + @ Impl.libraries t.random + + let configure t = + let name = name t in + Impl.configure t.clock; + Impl.configure t.time; + Impl.configure t.console; + Impl.configure t.network; + Impl.configure t.random; + append_main "module %s = struct" (module_name t); + append_main " module E = Ethif.Make(%s)" (Impl.module_name t.network); + append_main " module I = Ipv4.Make(E)"; + append_main " module U = Udp.Make(I)"; + append_main " module T = Tcp.Flow.Make(I)(%s)(%s)(%s)" + (Impl.module_name t.time) + (Impl.module_name t.clock) + (Impl.module_name t.random); + append_main " module S = Tcpip_stack_direct.Make(%s)(%s)(%s)(%s)(E)(I)(U)(T)" + (Impl.module_name t.console) + (Impl.module_name t.time) + (Impl.module_name t.random) + (Impl.module_name t.network); + append_main " include S"; + append_main "end"; + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.console); + append_main " | `Error _ -> %s" + (driver_initialisation_error (Impl.name t.console)); + append_main " | `Ok console ->"; + append_main " %s () >>= function" (Impl.name t.network); + append_main " | `Error e ->"; + let net_init_error_msg_fn = "Mirage_runtime.string_of_network_init_error" in + append_main " fail (Failure (%s %S e))" + net_init_error_msg_fn (Impl.name t.network); + append_main " | `Ok interface ->"; + append_main " let config = {"; + append_main " V1_LWT.name = %S;" name; + append_main " console; interface;"; + begin match t.config with + | `DHCP -> append_main " mode = `DHCP;" + | `IPV4 i -> append_main " mode = `IPv4 %s;" (meta_ipv4_config i); + end; + append_main " } in"; + append_main " %s.connect config" (module_name t); + newline_main () + + let clean t = + Impl.clean t.clock; + Impl.clean t.time; + Impl.clean t.console; + Impl.clean t.network; + Impl.clean t.random + + let update_path t root = + { t with + clock = Impl.update_path t.clock root; + time = Impl.update_path t.time root; + console = Impl.update_path t.console root; + network = Impl.update_path t.network root; + random = Impl.update_path t.random root; + } + +end + +module STACKV4_socket = struct + + type t = { + console: console impl; + ipv4s : Ipaddr.V4.t list; + } + + let meta_ips ips = + String.concat "; " + (List.map (fun x -> + Printf.sprintf "Ipaddr.V4.of_string_exn %S" (Ipaddr.V4.to_string x) + ) ips) + + let name t = + let key = "stackv4" ^ Impl.name t.console ^ meta_ips t.ipv4s in + Name.of_key key ~base:"stackv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.console + + let libraries t = + "tcpip.stack-socket" :: Impl.libraries t.console + + let configure t = + let name = name t in + Impl.configure t.console; + append_main "module %s = Tcpip_stack_socket.Make(%s)" + (module_name t) (Impl.module_name t.console); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.console); + append_main " | `Error _ -> %s" + (driver_initialisation_error (Impl.name t.console)); + append_main " | `Ok console ->"; + append_main " let config = {"; + append_main " V1_LWT.name = %S;" name; + append_main " console; interface = [%s];" (meta_ips t.ipv4s); + append_main " mode = ();"; + append_main " } in"; + append_main " %s.connect config" (module_name t); + newline_main () + + let clean t = + Impl.clean t.console + + let update_path t root = + { t with console = Impl.update_path t.console root } + +end + +type stackv4 = STACKV4 + +let stackv4 = Type STACKV4 + +let direct_stackv4_with_dhcp + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network = + let t = { + STACKV4_direct.console; network; time; clock; random; + config = `DHCP } in + impl stackv4 t (module STACKV4_direct) + +let direct_stackv4_with_default_ipv4 + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network = + let t = { + STACKV4_direct.console; network; clock; time; random; + config = `IPV4 default_ipv4_conf; + } in + impl stackv4 t (module STACKV4_direct) + +let direct_stackv4_with_static_ipv4 + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network ipv4 = + let t = { + STACKV4_direct.console; network; clock; time; random; + config = `IPV4 ipv4; + } in + impl stackv4 t (module STACKV4_direct) + +let socket_stackv4 console ipv4s = + impl stackv4 { STACKV4_socket.console; ipv4s } (module STACKV4_socket) + +module Channel_over_TCP (V : sig type t end) = struct + + type t = V.t tcp impl + + let name t = + let key = "channel" ^ Impl.name t in + Name.of_key key ~base:"channel" + + let module_name t = + String.capitalize (name t) + + let packages _ = + [ "mirage-tcpip" ] + + let libraries _ = + [ "tcpip.channel" ] + + let configure t = + Impl.configure t; + append_main "module %s = Channel.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" (name t); + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error (Impl.name t)); + append_main " | `Ok console ->"; + append_main " let flow = %s.create config in" (module_name t); + append_main " return (`Ok flow)"; + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +type channel = CHANNEL + +let channel = Type CHANNEL + +let channel_over_tcp (type v) (flow : v tcp impl) = + impl channel flow (module Channel_over_TCP (struct type t = v end)) + +module VCHAN_localhost = struct + + type uuid = string + type t = uuid + + let name t = + let key = "in_memory" in + Name.of_key key ~base:"vchan" + + let module_name t = + String.capitalize (name t) + + let packages t = + [ "mirage-conduit" ] + + let libraries t = + [ "conduit.mirage" ] + + let configure t = + append_main "module %s = Conduit_localhost" (module_name t); + newline_main (); + append_main "let %s = %s.register %S" (name t) (module_name t) t; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +module VCHAN_xenstore = struct + + type uuid = string + type t = string + + let name t = + let key = "xen" in + Name.of_key key ~base:"vchan" + + let module_name t = + String.capitalize (name t) + + let packages t = + match !mode with + |`Xen -> [ "vchan"; "mirage-xen"; "xen-evtchn"; "xen-gnt" ] + |`Unix | `MacOSX -> [ "vchan"; "xen-evtchn"; "xen-gnt"] + (* TODO: emit a failure on MacOSX? *) + + let libraries t = + match !mode with + |`Xen -> [ "conduit.mirage-xen" ] + |`Unix | `MacOSX-> [ "vchan" ] + + let configure t = + let m = + match !mode with + |`Xen -> "Conduit_xenstore" + |`Unix | `MacOSX -> "Vchan_lwt_unix.M" + in + append_main "module %s = %s" (module_name t) m; + newline_main (); + append_main "let %s = %s.register %S" (name t) (module_name t) t; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +type vchan = STACK4 + +let vchan = Type STACK4 + +let vchan_localhost ?(uuid="localhost") () = + impl vchan uuid (module VCHAN_localhost) + +let vchan_xen ?(uuid="localhost") () = + impl vchan uuid (module VCHAN_xenstore) + +let vchan_default ?uuid () = + match !mode with + | `Xen -> vchan_xen ?uuid () + | `Unix | `MacOSX -> vchan_localhost ?uuid () + +module Conduit = struct + type t = + [ `Stack of stackv4 impl * vchan impl ] + + let name t = + let key = "conduit" ^ match t with + | `Stack (s,v) -> + Printf.sprintf "%s_%s" (Impl.name s) (Impl.name v) in + Name.of_key key ~base:"conduit" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t + + let packages t = + [ "conduit"; "mirage-types"; "vchan" ] @ + match t with + | `Stack (s,v) -> Impl.packages s @ (Impl.packages v) + + let libraries t = + [ "conduit.mirage" ] @ + match t with + | `Stack (s,v) -> Impl.libraries s @ (Impl.libraries v) + + let configure t = + begin match t with + | `Stack (s,v) -> + Impl.configure s; + Impl.configure v; + append_main "module %s = Conduit_mirage.Make(%s)(%s)" + (module_name_core t) (Impl.module_name s) (Impl.module_name v); + end; + newline_main (); + append_main "let %s () =" (name t); + let (stack_subname, vchan_subname) = match t with + | `Stack (s,v) -> Impl.name s, Impl.name v in + + append_main " %s () >>= function" stack_subname; + append_main " | `Error _ -> %s" (driver_initialisation_error stack_subname); + append_main " | `Ok %s ->" stack_subname; + append_main " %s >>= fun %s ->" vchan_subname vchan_subname; + append_main " %s.init ~peer:%s ~stack:%s () >>= fun %s ->" + (module_name_core t) vchan_subname stack_subname (name t); + append_main " return (`Ok %s)" (name t); + newline_main () + + let clean = function + | `Stack (s,v) -> Impl.clean s; Impl.clean v + + let update_path t root = + match t with + | `Stack (s,v) -> + `Stack ((Impl.update_path s root), (Impl.update_path v root)) + +end + +type conduit = Conduit + +let conduit = Type Conduit + +let conduit_direct ?(vchan=vchan_localhost ()) stack = + impl conduit (`Stack (stack,vchan)) (module Conduit) + +type conduit_client = [ + | `TCP of Ipaddr.t * int + | `Vchan of string list +] + +type conduit_server = [ + | `TCP of [ `Port of int ] + | `Vchan of string list +] + +module Resolver_unix = struct + type t = unit + + let name t = + let key = "resolver_unix" in + Name.of_key key ~base:"resolver" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t + + let packages t = + match !mode with + |`Unix | `MacOSX -> [ "mirage-conduit" ] + |`Xen -> failwith "Resolver_unix not supported on Xen" + + let libraries t = + [ "conduit.mirage"; "conduit.lwt-unix" ] + + let configure t = + append_main "module %s = Resolver_lwt" (module_name t); + append_main "let %s () =" (name t); + append_main " return (`Ok Resolver_lwt_unix.system)"; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +module Resolver_direct = struct + type t = + [ `DNS of stackv4 impl * Ipaddr.V4.t option * int option ] + + let name t = + let key = "resolver" ^ match t with + | `DNS (s,_,_) -> Impl.name s in + Name.of_key key ~base:"resolver" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + (module_name_core t) ^ "_res" + + let packages t = + [ "dns"; "tcpip" ] @ + match t with + | `DNS (s,_,_) -> Impl.packages s + + let libraries t = + [ "dns.mirage" ] @ + match t with + | `DNS (s,_,_) -> Impl.libraries s + + let configure t = + begin match t with + | `DNS (s,_,_) -> + Impl.configure s; + append_main "module %s = Resolver_lwt" (module_name t); + append_main "module %s_dns = Dns_resolver_mirage.Make(OS.Time)(%s)" + (module_name_core t) (Impl.module_name s); + append_main "module %s = Resolver_mirage.Make(%s_dns)" + (module_name_core t) (module_name_core t); + end; + newline_main (); + append_main "let %s () =" (name t); + let subname = match t with + | `DNS (s,_,_) -> Impl.name s in + append_main " %s () >>= function" subname; + append_main " | `Error _ -> %s" (driver_initialisation_error subname); + append_main " | `Ok %s ->" subname; + let res_ns = match t with + | `DNS (_,None,_) -> "None" + | `DNS (_,Some ns,_) -> + Printf.sprintf "Ipaddr.V4.of_string %S" (Ipaddr.V4.to_string ns) in + append_main " let ns = %s in" res_ns; + let res_ns_port = match t with + | `DNS (_,_,None) -> "None" + | `DNS (_,_,Some ns_port) -> Printf.sprintf "Some %d" ns_port in + append_main " let ns_port = %s in" res_ns_port; + append_main " let res = %s.init ?ns ?ns_port ~stack:%s () in" (module_name_core t) subname; + append_main " return (`Ok res)"; + newline_main () + + let clean = function + | `DNS (s,_,_) -> Impl.clean s + + let update_path t root = + match t with + | `DNS (s,a,b) -> `DNS (Impl.update_path s root, a, b) + +end + +type resolver = Resolver + +let resolver = Type Resolver + +let resolver_dns ?ns ?ns_port stack = + impl resolver (`DNS (stack, ns, ns_port)) (module Resolver_direct) + +let resolver_unix_system = + impl resolver () (module Resolver_unix) + +module HTTP = struct + + type t = + [ `Channel of channel impl + | `Stack of conduit_server * conduit impl ] + + let name t = + let key = "http" ^ match t with + | `Channel c -> Impl.name c + | `Stack (_, c) -> Impl.name c in + Name.of_key key ~base:"http" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t ^ ".Server" + + let packages t = + [ "mirage-http" ] @ + match t with + | `Channel c -> Impl.packages c + | `Stack (_, c) -> Impl.packages c + + let libraries t = + [ "mirage-http" ] @ + match t with + | `Channel c -> Impl.libraries c + | `Stack (_, c) -> Impl.libraries c + + let configure t = + begin match t with + | `Channel c -> + Impl.configure c; + append_main "module %s = HTTP.Make(%s)" (module_name_core t) (Impl.module_name c) + | `Stack (_, c) -> + Impl.configure c; + append_main "module %s = HTTP.Make(%s)" (module_name_core t) (Impl.module_name c) + end; + newline_main (); + let subname = match t with + | `Channel c -> Impl.name c + | `Stack (_,c) -> Impl.name c in + append_main "let %s () =" (name t); + append_main " %s () >>= function" subname; + append_main " | `Error _ -> %s" (driver_initialisation_error subname); + append_main " | `Ok %s ->" subname; + begin match t with + | `Channel c -> failwith "TODO" + | `Stack (m,c) -> + append_main " let listen spec ="; + append_main " let ctx = %s in" (Impl.name c); + append_main " let mode = %s in" + (match m with + |`TCP (`Port port) -> Printf.sprintf "`TCP (`Port %d)" port + |`Vchan l -> failwith "Vchan not supported yet in server" + ); + append_main " %s.serve ~ctx ~mode (%s.Server.listen spec)" (Impl.module_name c) (module_name_core t); + append_main " in"; + append_main " return (`Ok listen)"; + end; + newline_main () + + let clean = function + | `Channel c -> Impl.clean c + | `Stack (_,c) -> Impl.clean c + + let update_path t root = + match t with + | `Channel c -> `Channel (Impl.update_path c root) + | `Stack (m, c) -> `Stack (m, Impl.update_path c root) + +end + +type http = HTTP + +let http = Type HTTP + +let http_server_of_channel chan = + impl http (`Channel chan) (module HTTP) + +let http_server mode conduit = + impl http (`Stack (mode, conduit)) (module HTTP) + +type job = JOB + +let job = Type JOB + +module Job = struct + + type t = { + name: string; + impl: job impl; + } + + let create impl = + let name = Name.create "job" in + { name; impl } + + let name t = + t.name + + let module_name t = + "Job_" ^ t.name + + let packages t = + Impl.packages t.impl + + let libraries t = + Impl.libraries t.impl + + let configure t = + Impl.configure t.impl; + newline_main () + + let clean t = + Impl.clean t.impl + + let update_path t root = + { t with impl = Impl.update_path t.impl root } + +end + +module Tracing = struct + type t = { + size : int; + } + + let unix_trace_file = "trace.ctf" + + let packages _ = StringSet.singleton "mirage-profile" + + let libraries _ = + match !mode with + | `Unix | `MacOSX -> StringSet.singleton "mirage-profile.unix" + | `Xen -> StringSet.singleton "mirage-profile.xen" + + let configure t = + if Sys.command "ocamlfind query lwt.tracing 2>/dev/null" <> 0 then ( + flush stdout; + error "lwt.tracing module not found. Hint:\n\ + opam pin add lwt 'https://github.com/mirage/lwt.git#tracing'" + ); + + append_main "let () = "; + begin match !mode with + | `Unix | `MacOSX -> + append_main " let buffer = MProf_unix.mmap_buffer ~size:%d %S in" t.size unix_trace_file; + append_main " let trace_config = MProf.Trace.Control.make buffer MProf_unix.timestamper in"; + append_main " MProf.Trace.Control.start trace_config"; + | `Xen -> + append_main " let trace_pages = MProf_xen.make_shared_buffer ~size:%d in" t.size; + append_main " let buffer = trace_pages |> Io_page.to_cstruct |> Cstruct.to_bigarray in"; + append_main " let trace_config = MProf.Trace.Control.make buffer MProf_xen.timestamper in"; + append_main " MProf.Trace.Control.start trace_config;"; + append_main " MProf_xen.share_with (module Gnt.Gntshr) (module OS.Xs) ~domid:0 trace_pages"; + append_main " |> OS.Main.run"; + end; + newline_main () +end + +type tracing = Tracing.t + +let mprof_trace ~size () = + { Tracing.size } + +type t = { + name: string; + root: string; + jobs: job impl list; + tracing: tracing option; +} + +let t = ref None + +let config_file = ref None + +let reset () = + config_file := None; + t := None + +let set_config_file f = + config_file := Some f + +let get_config_file () = + match !config_file with + | None -> Sys.getcwd () / "config.ml" + | Some f -> f + +let update_path t root = + { t with jobs = List.map (fun j -> Impl.update_path j root) t.jobs } + +let register ?tracing name jobs = + let root = match !config_file with + | None -> failwith "no config file" + | Some f -> Filename.dirname f in + t := Some { name; jobs; root; tracing } + +let registered () = + match !t with + | None -> { name = "empty"; jobs = []; root = Sys.getcwd (); tracing = None } + | Some t -> t + +let ps = ref StringSet.empty + +let add_to_opam_packages p = + ps := StringSet.union (StringSet.of_list p) !ps + +let packages t = + let m = match !mode with + | `Unix | `MacOSX -> "mirage-unix" + | `Xen -> "mirage-xen" in + let ps = StringSet.add m !ps in + let ps = match t.tracing with + | None -> ps + | Some tracing -> StringSet.union (Tracing.packages tracing) ps in + let ps = List.fold_left (fun set j -> + let ps = StringSet.of_list (Impl.packages j) in + StringSet.union ps set + ) ps t.jobs in + StringSet.elements ps + +let ls = ref StringSet.empty + +let add_to_ocamlfind_libraries l = + ls := StringSet.union !ls (StringSet.of_list l) + +let libraries t = + let m = match !mode with + | `Unix | `MacOSX -> "mirage-types.lwt" + | `Xen -> "mirage-types.lwt" in + let ls = StringSet.add m !ls in + let ls = match t.tracing with + | None -> ls + | Some tracing -> StringSet.union (Tracing.libraries tracing) ls in + let ls = List.fold_left (fun set j -> + let ls = StringSet.of_list (Impl.libraries j) in + StringSet.union ls set + ) ls t.jobs in + StringSet.elements ls + +let configure_myocamlbuild_ml t = + let minor, major = ocaml_version () in + if minor < 4 || major < 1 then ( + (* Previous ocamlbuild versions weren't able to understand the + --output-obj rules *) + let file = t.root / "myocamlbuild.ml" in + let oc = open_out file in + append oc "(* %s *)" generated_by_mirage; + newline oc; + append oc + "open Ocamlbuild_pack;;\n\ + open Ocamlbuild_plugin;;\n\ + open Ocaml_compiler;;\n\ + \n\ + let native_link_gen linker =\n\ + \ link_gen \"cmx\" \"cmxa\" !Options.ext_lib [!Options.ext_obj; \"cmi\"] linker;;\n\ + \n\ + let native_output_obj x = native_link_gen ocamlopt_link_prog\n\ + \ (fun tags -> tags++\"ocaml\"++\"link\"++\"native\"++\"output_obj\") x;;\n\ + \n\ + rule \"ocaml: cmx* & o* -> native.o\"\n\ + \ ~tags:[\"ocaml\"; \"native\"; \"output_obj\" ]\n\ + \ ~prod:\"%%.native.o\" ~deps:[\"%%.cmx\"; \"%%.o\"]\n\ + \ (native_output_obj \"%%.cmx\" \"%%.native.o\");;\n\ + \n\ + \n\ + let byte_link_gen = link_gen \"cmo\" \"cma\" \"cma\" [\"cmo\"; \"cmi\"];;\n\ + let byte_output_obj = byte_link_gen ocamlc_link_prog\n\ + \ (fun tags -> tags++\"ocaml\"++\"link\"++\"byte\"++\"output_obj\");;\n\ + \n\ + rule \"ocaml: cmo* -> byte.o\"\n\ + \ ~tags:[\"ocaml\"; \"byte\"; \"link\"; \"output_obj\" ]\n\ + ~prod:\"%%.byte.o\" ~dep:\"%%.cmo\"\n\ + \ (byte_output_obj \"%%.cmo\" \"%%.byte.o\");;"; + close_out oc + ) + +let clean_myocamlbuild_ml t = + remove (t.root / "myocamlbuild.ml") + +let configure_main_libvirt_xml t = + let file = t.root / t.name ^ "_libvirt.xml" in + let oc = open_out file in + append oc "" generated_by_mirage; + append oc ""; + append oc " %s" t.name; + append oc " 262144"; + append oc " 262144"; + append oc " 1"; + append oc " "; + append oc " linux"; + append oc " %s/mir-%s.xen" t.root t.name; + append oc " "; (* the libxl driver currently needs an empty cmdline to be able to start the domain on arm - due to this? http://lists.xen.org/archives/html/xen-devel/2014-02/msg02375.html *) + append oc " "; + append oc " "; + append oc " preserve"; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc ""; + close_out oc + +let clean_main_libvirt_xml t = + remove (t.root / t.name ^ "_libvirt.xml") + +let configure_main_xl t = + let file = t.root / t.name ^ ".xl" in + let oc = open_out file in + append oc "# %s" generated_by_mirage; + newline oc; + append oc "name = '%s'" t.name; + append oc "kernel = '%s/mir-%s.xen'" t.root t.name; + append oc "builder = 'linux'"; + append oc "memory = 256"; + append oc "on_crash = 'preserve'"; + newline oc; + append oc "# You must define the network and block interfaces manually."; + newline oc; + append oc "# The disk configuration is defined here:"; + append oc "# http://xenbits.xen.org/docs/4.3-testing/misc/xl-disk-configuration.txt"; + append oc "# An example would look like:"; + append oc "# disk = [ '/dev/loop0,,xvda' ]"; + newline oc; + append oc "# The network configuration is defined here:"; + append oc "# http://xenbits.xen.org/docs/4.3-testing/misc/xl-network-configuration.html"; + append oc "# An example would look like:"; + append oc "# vif = [ 'mac=c0:ff:ee:c0:ff:ee,bridge=br0' ]"; + close_out oc + +let clean_main_xl t = + remove (t.root / t.name ^ ".xl") + +let configure_main_xe t = + let file = t.root / t.name ^ ".xe" in + let oc = open_out file in + append oc "#!/bin/sh"; + append oc "# %s" generated_by_mirage; + newline oc; + append oc "set -e"; + newline oc; + append oc "# Dependency: xe"; + append oc "command -v xe >/dev/null 2>&1 || { echo >&2 \"I require xe but it's not installed. Aborting.\"; exit 1; }"; + append oc "# Dependency: xe-unikernel-upload"; + append oc "command -v xe-unikernel-upload >/dev/null 2>&1 || { echo >&2 \"I require xe-unikernel-upload but it's not installed. Aborting.\"; exit 1; }"; + append oc "# Dependency: a $HOME/.xe"; + append oc "if [ ! -e $HOME/.xe ]; then"; + append oc " echo Please create a config file for xe in $HOME/.xe which contains:"; + append oc " echo server=''"; + append oc " echo username=root"; + append oc " echo password=password"; + append oc " exit 1"; + append oc "fi"; + newline oc; + append oc "echo Uploading VDI containing unikernel"; + append oc "VDI=$(xe-unikernel-upload --path %s/mir-%s.xen)" t.root t.name; + append oc "echo VDI=$VDI"; + append oc "echo Creating VM metadata"; + append oc "VM=$(xe vm-create name-label=%s)" t.name; + append oc "echo VM=$VM"; + append oc "xe vm-param-set uuid=$VM PV-bootloader=pygrub"; + append oc "echo Adding network interface connected to xenbr0"; + append oc "ETH0=$(xe network-list bridge=xenbr0 params=uuid --minimal)"; + append oc "VIF=$(xe vif-create vm-uuid=$VM network-uuid=$ETH0 device=0)"; + append oc "echo Atting block device and making it bootable"; + append oc "VBD=$(xe vbd-create vm-uuid=$VM vdi-uuid=$VDI device=0)"; + append oc "xe vbd-param-set uuid=$VBD bootable=true"; + append oc "xe vbd-param-set uuid=$VBD other-config:owner=true"; + append oc "echo Starting VM"; + append oc "xe vm-start vm=%s" t.name; + close_out oc; + Unix.chmod file 0o755 + +let clean_main_xe t = + remove (t.root / t.name ^ ".xe") + +(* Get the linker flags for any extra C objects we depend on. + * This is needed when building a Xen image as we do the link manually. *) +let get_extra_ld_flags ~filter pkgs = + let output = read_command + "ocamlfind query -r -format '%%d\t%%(xen_linkopts)' -predicates native %s" + (String.concat " " pkgs) in + split output '\n' + |> List.fold_left (fun acc line -> + match cut_at line '\t' with + | None -> acc + | Some (dir, ldflags) -> Printf.sprintf "-L%s %s" dir ldflags :: acc + ) [] + +let configure_makefile t = + let file = t.root / "Makefile" in + let pkgs = "lwt.syntax" :: libraries t in + let libraries_str = + match pkgs with + | [] -> "" + | ls -> "-pkgs " ^ String.concat "," ls in + let packages = String.concat " " (packages t) in + let oc = open_out file in + append oc "# %s" generated_by_mirage; + newline oc; + append oc "LIBS = %s" libraries_str; + append oc "PKGS = %s" packages; + begin match !mode with + | `Xen -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg,-dontlink,unix\n"; + append oc "XENLIB = $(shell ocamlfind query mirage-xen)\n" + | `Unix -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg\n" + | `MacOSX -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal,thread\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg\n" + end; + append oc "BUILD = ocamlbuild -use-ocamlfind $(LIBS) $(SYNTAX) $(FLAGS)\n\ + OPAM = opam\n\n\ + export PKG_CONFIG_PATH=$(shell opam config var prefix)/lib/pkgconfig\n\n\ + export OPAMVERBOSE=1\n\ + export OPAMYES=1"; + newline oc; + append oc ".PHONY: all depend clean build main.native\n\ + all: build\n\ + \n\ + depend:\n\ + \t$(OPAM) install $(PKGS) --verbose\n\ + \n\ + main.native:\n\ + \t$(BUILD) main.native\n\ + \n\ + main.native.o:\n\ + \t$(BUILD) main.native.o"; + newline oc; + + (* On ARM, we must convert the ELF image to an ARM boot executable zImage, + * while on x86 we leave it as it is. *) + let generate_image = + let need_zImage = + match uname_m () with + | Some machine -> String.length machine > 2 && String.sub machine 0 3 = "arm" + | None -> failwith "uname -m failed; can't determine target machine type!" in + if need_zImage then ( + Printf.sprintf "\t -o mir-%s.elf\n\ + \tobjcopy -O binary mir-%s.elf mir-%s.xen" + t.name t.name t.name + ) else ( + Printf.sprintf "\t -o mir-%s.xen" t.name + ) in + + begin match !mode with + | `Xen -> + let filter = function + | "unix" | "bigarray" |"shared_memory_ring_stubs" -> false (* Provided by mirage-xen instead. *) + | _ -> true in + let extra_c_archives = + get_extra_ld_flags ~filter pkgs + |> String.concat " \\\n\t " in + + append oc "build: main.native.o"; + let pkg_config_deps = "mirage-xen" in + append oc "\tpkg-config --print-errors --exists %s" pkg_config_deps; + append oc "\tld -d -static -nostdlib \\\n\ + \t _build/main.native.o \\\n\ + \t %s \\\n\ + \t $$(pkg-config --static --libs %s) \\\n\ + \t $(shell gcc -print-libgcc-file-name) \\\n\ + %s" + extra_c_archives pkg_config_deps generate_image; + | `Unix | `MacOSX -> + append oc "build: main.native"; + append oc "\tln -nfs _build/main.native mir-%s" t.name; + end; + newline oc; + append oc "run: build"; + begin match !mode with + | `Xen -> + append oc "\t@echo %s.xl has been created. Edit it to add VIFs or VBDs" t.name; + append oc "\t@echo Then do something similar to: xl create -c %s.xl\n" t.name + | `Unix | `MacOSX -> + append oc "\t$(SUDO) ./mir-%s\n" t.name + end; + append oc "clean:\n\ + \tocamlbuild -clean"; + close_out oc + +let clean_makefile t = + remove (t.root / "Makefile") + +let no_opam_version_check_ = ref false +let no_opam_version_check b = no_opam_version_check_ := b + +let configure_opam t = + info "Installing OPAM packages."; + match packages t with + | [] -> () + | ps -> + if command_exists "opam" then + if !no_opam_version_check_ then () + else ( + let opam_version = read_command "opam --version" in + let version_error () = + error "Your version of opam: %s is not up-to-date. \ + Please update to (at least) 1.2." opam_version + in + match split opam_version '.' with + | major::minor::_ -> + let major = try int_of_string major with Failure _ -> 0 in + let minor = try int_of_string minor with Failure _ -> 0 in + if (major, minor) >= (1, 2) then opam "install" ps else version_error () + | _ -> version_error () + ) + else error "OPAM is not installed." + +let clean_opam t = + () +(* This is a bit too agressive, disabling for now on. + let (++) = StringSet.union in + let set mode = StringSet.of_list (packages t mode) in + let packages = + set (`Unix `Socket) ++ set (`Unix `Direct) ++ set `Xen in + match StringSet.elements packages with + | [] -> () + | ps -> + if cmd_exists "opam" then opam "remove" ps + else error "OPAM is not installed." +*) + +let manage_opam_packages_ = ref true +let manage_opam_packages b = manage_opam_packages_ := b + +let configure_job j = + let name = Impl.name j in + let module_name = Impl.module_name j in + let param_names = Impl.names j in + append_main "let %s () =" name; + List.iter (fun p -> + append_main " %s () >>= function" p; + append_main " | `Error e -> %s" (driver_initialisation_error p); + append_main " | `Ok %s ->" p; + ) (dedup param_names); + append_main " %s.start %s" module_name (String.concat " " param_names); + newline_main () + +let configure_main t = + info "%s main.ml" (blue_s "Generating:"); + set_main_ml (t.root / "main.ml"); + append_main "(* %s *)" generated_by_mirage; + newline_main (); + append_main "open Lwt"; + newline_main (); + append_main "let _ = Printexc.record_backtrace true"; + newline_main (); + begin match t.tracing with + | None -> () + | Some tracing -> Tracing.configure tracing end; + List.iter (fun j -> Impl.configure j) t.jobs; + List.iter configure_job t.jobs; + let names = List.map (fun j -> Printf.sprintf "%s ()" (Impl.name j)) t.jobs in + append_main "let () ="; + append_main " OS.Main.run (join [%s])" (String.concat "; " names) + +let clean_main t = + List.iter Impl.clean t.jobs; + remove (t.root / "main.ml") + +let configure t = + info "%s %s" (blue_s "Using configuration:") (get_config_file ()); + info "%d job%s [%s]" + (List.length t.jobs) + (if List.length t.jobs = 1 then "" else "s") + (String.concat ", " (List.map Impl.functor_name t.jobs)); + in_dir t.root (fun () -> + if !manage_opam_packages_ then configure_opam t; + configure_myocamlbuild_ml t; + configure_makefile t; + configure_main_xl t; + configure_main_xe t; + configure_main_libvirt_xml t; + configure_main t + ) + +let make () = + match uname_s () with + | Some ("FreeBSD" | "OpenBSD" | "NetBSD" | "DragonFly") -> "gmake" + | _ -> "make" + +let build t = + info "Build: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + command "%s build" (make ()) + ) + +let run t = + info "Run: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + command "%s run" (make ()) + ) + +let clean t = + info "Clean: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + if !manage_opam_packages_ then clean_opam t; + clean_myocamlbuild_ml t; + clean_makefile t; + clean_main_xl t; + clean_main_xe t; + clean_main_libvirt_xml t; + clean_main t; + command "rm -rf %s/_build" t.root; + command "rm -rf log %s/main.native.o %s/main.native %s/mir-%s %s/*~" + t.root t.root t.root t.name t.root; + ) + +(* Compile the configuration file and attempt to dynlink it. + * It is responsible for registering an application via + * [Mirage_config.register] in order to have an observable + * side effect to this command. *) +let compile_and_dynlink file = + info "%s %s" (blue_s "Processing:") file; + let root = Filename.dirname file in + let file = Filename.basename file in + let file = Dynlink.adapt_filename file in + command "rm -rf %s/_build/%s.*" root (Filename.chop_extension file); + command "cd %s && ocamlbuild -use-ocamlfind -tags annot,bin_annot -pkg mirage %s" root file; + try Dynlink.loadfile (String.concat "/" [root; "_build"; file]) + with Dynlink.Error err -> error "Error loading config: %s" (Dynlink.error_message err) + +(* If a configuration file is specified, then use that. + * If not, then scan the curdir for a `config.ml` file. + * If there is more than one, then error out. *) +let scan_conf = function + | Some f -> + info "%s %s" (blue_s "Using specified config file:") f; + if not (Sys.file_exists f) then error "%s does not exist, stopping." f; + realpath f + | None -> + let files = Array.to_list (Sys.readdir ".") in + match List.filter ((=) "config.ml") files with + | [] -> error "No configuration file config.ml found.\n\ + You'll need to create one to let Mirage know what to do." + | [f] -> + info "%s %s" (blue_s "Using scanned config file:") f; + realpath f + | _ -> error "There is more than one config.ml in the current working directory.\n\ + Please specify one explictly on the command-line." + +let load file = + reset (); + let file = scan_conf file in + let root = realpath (Filename.dirname file) in + let file = root / Filename.basename file in + info "%s %s" (blue_s "Compiling for target:") (string_of_mode !mode); + set_config_file file; + compile_and_dynlink file; + let t = registered () in + set_section t.name; + update_path t root diff --git a/samples/OCaml/reload.ml b/samples/OCaml/reload.ml new file mode 100644 index 00000000..510f201f --- /dev/null +++ b/samples/OCaml/reload.ml @@ -0,0 +1,125 @@ +(***********************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 2000 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. This file is distributed *) +(* under the terms of the Q Public License version 1.0. *) +(* *) +(***********************************************************************) + +open Cmm +open Arch +open Reg +open Mach + +(* Reloading for the AMD64 *) + +(* Summary of instruction set constraints: + "S" means either stack or register, "R" means register only. + Operation Res Arg1 Arg2 + Imove R S + or S R + Iconst_int S if 32-bit signed, R otherwise + Iconst_float R + Iconst_symbol (not PIC) S + Iconst_symbol (PIC) R + Icall_ind R + Itailcall_ind R + Iload R R R + Istore R R + Iintop(Icomp) R R S + or S S R + Iintop(Imul|Idiv|mod) R R S + Iintop(shift) S S R + Iintop(others) R R S + or S S R + Iintop_imm(Iadd, n)/lea R R + Iintop_imm(others) S S + Inegf...Idivf R R S + Ifloatofint R S + Iintoffloat R S + Ispecific(Ilea) R R R + Ispecific(Ifloatarithmem) R R R + + Conditional branches: + Iinttest S R + or R S + Ifloattest R S (or S R if swapped test) + other tests S +*) + +let stackp r = + match r.loc with + Stack _ -> true + | _ -> false + +class reload = object (self) + +inherit Reloadgen.reload_generic as super + +method! reload_operation op arg res = + match op with + | Iintop(Iadd|Isub|Iand|Ior|Ixor|Icomp _|Icheckbound) -> + (* One of the two arguments can reside in the stack, but not both *) + if stackp arg.(0) && stackp arg.(1) + then ([|arg.(0); self#makereg arg.(1)|], res) + else (arg, res) + | Iintop_imm(Iadd, _) when arg.(0).loc <> res.(0).loc -> + (* This add will be turned into a lea; args and results must be + in registers *) + super#reload_operation op arg res + | Iintop(Idiv | Imod | Ilsl | Ilsr | Iasr) + | Iintop_imm(_, _) -> + (* The argument(s) and results can be either in register or on stack *) + (* Note: Idiv, Imod: arg(0) and res(0) already forced in regs + Ilsl, Ilsr, Iasr: arg(1) already forced in regs *) + (arg, res) + | Iintop(Imul) | Iaddf | Isubf | Imulf | Idivf -> + (* First argument (= result) must be in register, second arg + can reside in the stack *) + if stackp arg.(0) + then (let r = self#makereg arg.(0) in ([|r; arg.(1)|], [|r|])) + else (arg, res) + | Ifloatofint | Iintoffloat -> + (* Result must be in register, but argument can be on stack *) + (arg, (if stackp res.(0) then [| self#makereg res.(0) |] else res)) + | Iconst_int n -> + if n <= 0x7FFFFFFFn && n >= -0x80000000n + then (arg, res) + else super#reload_operation op arg res + | Iconst_symbol _ -> + if !pic_code || !Clflags.dlcode + then super#reload_operation op arg res + else (arg, res) + | _ -> (* Other operations: all args and results in registers *) + super#reload_operation op arg res + +method! reload_test tst arg = + match tst with + Iinttest cmp -> + (* One of the two arguments can reside on stack *) + if stackp arg.(0) && stackp arg.(1) + then [| self#makereg arg.(0); arg.(1) |] + else arg + | Ifloattest((Clt|Cle), _) -> + (* Cf. emit.mlp: we swap arguments in this case *) + (* First argument can be on stack, second must be in register *) + if stackp arg.(1) + then [| arg.(0); self#makereg arg.(1) |] + else arg + | Ifloattest((Ceq|Cne|Cgt|Cge), _) -> + (* Second argument can be on stack, first must be in register *) + if stackp arg.(0) + then [| self#makereg arg.(0); arg.(1) |] + else arg + | _ -> + (* The argument(s) can be either in register or on stack *) + arg + +end + +let fundecl f = + (new reload)#fundecl f diff --git a/samples/OCaml/sigset.ml b/samples/OCaml/sigset.ml new file mode 100644 index 00000000..ba5e1092 --- /dev/null +++ b/samples/OCaml/sigset.ml @@ -0,0 +1,70 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +open PosixTypes +open Ctypes +open Foreign + +type t = sigset_t ptr + +let t = ptr sigset_t + +(* This function initializes the signal set set to exclude all of the defined + signals. It always returns 0. *) +let sigemptyset = foreign "sigemptyset" (ptr sigset_t @-> returning int) + +let empty () = + let setp = allocate_n ~count:1 sigset_t in begin + ignore (sigemptyset setp); + setp + end + +(* This function initializes the signal set set to include all of the defined + signals. Again, the return value is 0. *) +let sigfillset = foreign "sigfillset" (ptr sigset_t @-> returning int) + +let full () = + let setp = allocate_n ~count:1 sigset_t in begin + ignore (sigfillset setp); + setp + end + +(* This function adds the signal signum to the signal set set. All sigaddset + does is modify set; it does not block or unblock any signals. + + The return value is 0 on success and -1 on failure. The following errno + error condition is defined for this function: + + EINVAL The signum argument doesn't specify a valid signal. +*) +let sigaddset = foreign "sigaddset" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let add set signal = ignore (sigaddset set signal) + +(* This function removes the signal signum from the signal set set. All + sigdelset does is modify set; it does not block or unblock any signals. + + The return value and error conditions are the same as for + sigaddset. *) +let sigdelset = foreign "sigdelset" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let del set signal = ignore (sigdelset set signal) + +(* The sigismember function tests whether the signal signum is a member of the + signal set set. It returns 1 if the signal is in the set, 0 if not, and -1 if + there is an error. + + The following errno error condition is defined for this function: + + EINVAL The signum argument doesn't specify a valid signal. +*) +let sigismember = foreign "sigismember" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let mem set signal = sigismember set signal <> 0 diff --git a/samples/OCaml/uutf.ml b/samples/OCaml/uutf.ml new file mode 100644 index 00000000..ff12d954 --- /dev/null +++ b/samples/OCaml/uutf.ml @@ -0,0 +1,810 @@ +(*--------------------------------------------------------------------------- + Copyright 2012 Daniel C. Bünzli. All rights reserved. + Distributed under the BSD3 license, see license at the end of the file. + %%NAME%% release %%VERSION%% + ---------------------------------------------------------------------------*) + +let io_buffer_size = 65536 (* IO_BUFFER_SIZE 4.0.0 *) + +let pp = Format.fprintf +let invalid_encode () = invalid_arg "expected `Await encode" +let invalid_bounds j l = + invalid_arg (Printf.sprintf "invalid bounds (index %d, length %d)" j l) + +(* Unsafe string byte manipulations. If you don't believe the author's + invariants, replacing with safe versions makes everything safe in + the module. He won't be upset. *) + +let unsafe_chr = Char.unsafe_chr +let unsafe_blit = String.unsafe_blit +let unsafe_array_get = Array.unsafe_get +let unsafe_byte s j = Char.code (String.unsafe_get s j) +let unsafe_set_byte s j byte = String.unsafe_set s j (Char.unsafe_chr byte) + +(* Unicode characters *) + +type uchar = int +let u_bom = 0xFEFF (* BOM. *) +let u_rep = 0xFFFD (* replacement character. *) +let is_uchar cp = + (0x0000 <= cp && cp <= 0xD7FF) || (0xE000 <= cp && cp <= 0x10FFFF) + +let pp_cp ppf cp = + if cp < 0 || cp > 0x10FFFF then pp ppf "U+Invalid(%X)" cp else + if cp <= 0xFFFF then pp ppf "U+%04X" cp else + pp ppf "U+%X" cp + +let cp_to_string cp = (* NOT thread safe. *) + pp Format.str_formatter "%a" pp_cp cp; Format.flush_str_formatter () + +(* Unicode encoding schemes *) + +type encoding = [ `UTF_8 | `UTF_16 | `UTF_16BE | `UTF_16LE ] +type decoder_encoding = [ encoding | `US_ASCII | `ISO_8859_1 ] + +let encoding_of_string s = match String.uppercase s with (* IANA names. *) +| "UTF-8" -> Some `UTF_8 +| "UTF-16" -> Some `UTF_16 +| "UTF-16LE" -> Some `UTF_16LE +| "UTF-16BE" -> Some `UTF_16BE +| "ANSI_X3.4-1968" | "ISO-IR-6" | "ANSI_X3.4-1986" | "ISO_646.IRV:1991" +| "ASCII" | "ISO646-US" | "US-ASCII" | "US" | "IBM367" | "CP367" | "CSASCII" -> + Some `US_ASCII +| "ISO_8859-1:1987" | "ISO-IR-100" | "ISO_8859-1" | "ISO-8859-1" +| "LATIN1" | "L1" | "IBM819" | "CP819" | "CSISOLATIN1" -> + Some `ISO_8859_1 +| _ -> None + +let encoding_to_string = function +| `UTF_8 -> "UTF-8" | `UTF_16 -> "UTF-16" | `UTF_16BE -> "UTF-16BE" +| `UTF_16LE -> "UTF-16LE" | `US_ASCII -> "US-ASCII" +| `ISO_8859_1 -> "ISO-8859-1" + +(* Base character decoders. They assume enough data. *) + +let malformed s j l = `Malformed (String.sub s j l) +let malformed_pair be hi s j l = (* missing or half low surrogate at eoi. *) + let bs1 = String.sub s j l in + let bs0 = String.create 2 in + let j0, j1 = if be then (0, 1) else (1, 0) in + unsafe_set_byte bs0 j0 (hi lsr 8); + unsafe_set_byte bs0 j1 (hi land 0xFF); + `Malformed (bs0 ^ bs1) + +let r_us_ascii s j = + (* assert (0 <= j && j < String.length s); *) + let b0 = unsafe_byte s j in + if b0 <= 127 then `Uchar b0 else malformed s j 1 + +let r_iso_8859_1 s j = + (* assert (0 <= j && j < String.length s); *) + `Uchar (unsafe_byte s j) + +let utf_8_len = [| (* uchar byte length according to first UTF-8 byte. *) + 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; 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; 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; + 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; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; + 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; + 4; 4; 4; 4; 4; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0 |] + +let r_utf_8 s j l = + (* assert (0 <= j && 0 <= l && j + l <= String.length s); *) + match l with + | 1 -> `Uchar (unsafe_byte s j) + | 2 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + if b1 lsr 6 != 0b10 then malformed s j l else + `Uchar (((b0 land 0x1F) lsl 6) lor (b1 land 0x3F)) + | 3 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + let b2 = unsafe_byte s (j + 2) in + let c = `Uchar (((b0 land 0x0F) lsl 12) lor + ((b1 land 0x3F) lsl 6) lor + (b2 land 0x3F)) + in + if b2 lsr 6 != 0b10 then malformed s j l else + begin match b0 with + | 0xE0 -> if b1 < 0xA0 || 0xBF < b1 then malformed s j l else c + | 0xED -> if b1 < 0x80 || 0x9F < b1 then malformed s j l else c + | _ -> if b1 lsr 6 != 0b10 then malformed s j l else c + end + | 4 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + let b2 = unsafe_byte s (j + 2) in let b3 = unsafe_byte s (j + 3) in + let c = `Uchar (((b0 land 0x07) lsl 18) lor + ((b1 land 0x3F) lsl 12) lor + ((b2 land 0x3F) lsl 6) lor + (b3 land 0x3F)) + in + if b3 lsr 6 != 0b10 || b2 lsr 6 != 0b10 then malformed s j l else + begin match b0 with + | 0xF0 -> if b1 < 0x90 || 0xBF < b1 then malformed s j l else c + | 0xF4 -> if b1 < 0x80 || 0x8F < b1 then malformed s j l else c + | _ -> if b1 lsr 6 != 0b10 then malformed s j l else c + end + | _ -> assert false + +let r_utf_16 s j0 j1 = (* May return a high surrogate. *) + (* assert (0 <= j0 && 0 <= j1 && max j0 j1 < String.length s); *) + let b0 = unsafe_byte s j0 in let b1 = unsafe_byte s j1 in + let u = (b0 lsl 8) lor b1 in + if u < 0xD800 || u > 0xDFFF then `Uchar u else + if u > 0xDBFF then malformed s (min j0 j1) 2 else `Hi u + +let r_utf_16_lo hi s j0 j1 = (* Combines [hi] with a low surrogate. *) + (* assert (0 <= j0 && 0 <= j1 && max j0 j1 < String.length s); *) + let b0 = unsafe_byte s j0 in + let b1 = unsafe_byte s j1 in + let lo = (b0 lsl 8) lor b1 in + if lo < 0xDC00 || lo > 0xDFFF + then malformed_pair (j0 < j1 (* true => be *)) hi s (min j0 j1) 2 + else `Uchar ((((hi land 0x3FF) lsl 10) lor (lo land 0x3FF)) + 0x10000) + +let r_encoding s j l = (* guess encoding with max. 3 bytes. *) + (* assert (0 <= j && 0 <= l && j + l <= String.length s) *) + let some i = if i < l then Some (unsafe_byte s (j + i)) else None in + match (some 0), (some 1), (some 2) with + | Some 0xEF, Some 0xBB, Some 0xBF -> `UTF_8 `BOM + | Some 0xFE, Some 0xFF, _ -> `UTF_16BE `BOM + | Some 0xFF, Some 0xFE, _ -> `UTF_16LE `BOM + | Some 0x00, Some p, _ when p > 0 -> `UTF_16BE (`ASCII p) + | Some p, Some 0x00, _ when p > 0 -> `UTF_16LE (`ASCII p) + | Some u, _, _ when utf_8_len.(u) <> 0 -> `UTF_8 `Decode + | Some _, Some _, _ -> `UTF_16BE `Decode + | Some _, None , None -> `UTF_8 `Decode + | None , None , None -> `UTF_8 `End + | None , Some _, _ -> assert false + | Some _, None , Some _ -> assert false + | None , None , Some _ -> assert false + +(* Decode *) + +type src = [ `Channel of in_channel | `String of string | `Manual ] +type nln = [ `ASCII of uchar | `NLF of uchar | `Readline of uchar ] +type decode = [ `Await | `End | `Malformed of string | `Uchar of uchar] + +let pp_decode ppf = function +| `Uchar u -> pp ppf "@[`Uchar %a@]" pp_cp u +| `End -> pp ppf "`End" +| `Await -> pp ppf "`Await" +| `Malformed bs -> + let l = String.length bs in + pp ppf "@[`Malformed ("; + if l > 0 then pp ppf "%02X" (Char.code (bs.[0])); + for i = 1 to l - 1 do pp ppf " %02X" (Char.code (bs.[i])) done; + pp ppf ")@]" + +type decoder = + { src : src; (* input source. *) + mutable encoding : decoder_encoding; (* decoded encoding. *) + nln : nln option; (* newline normalization (if any). *) + nl : int; (* newline normalization character. *) + mutable i : string; (* current input chunk. *) + mutable i_pos : int; (* input current position. *) + mutable i_max : int; (* input maximal position. *) + t : string; (* four bytes temporary buffer for overlapping reads. *) + mutable t_len : int; (* current byte length of [t]. *) + mutable t_need : int; (* number of bytes needed in [t]. *) + mutable removed_bom : bool; (* [true] if an initial BOM was removed. *) + mutable last_cr : bool; (* [true] if last char was CR. *) + mutable line : int; (* line number. *) + mutable col : int; (* column number. *) + mutable byte_count : int; (* byte count. *) + mutable count : int; (* char count. *) + mutable pp : (* decoder post-processor for BOM, position and nln. *) + decoder -> [ `Malformed of string | `Uchar of uchar ] -> decode; + mutable k : decoder -> decode } (* decoder continuation. *) + +(* On decodes that overlap two (or more) [d.i] buffers, we use [t_fill] to copy + the input data to [d.t] and decode from there. If the [d.i] buffers are not + too small this is faster than continuation based byte per byte writes. + + End of input (eoi) is signalled by [d.i_pos = 0] and [d.i_max = min_int] + which implies that [i_rem d < 0] is [true]. *) + +let i_rem d = d.i_max - d.i_pos + 1 (* remaining bytes to read in [d.i]. *) +let eoi d = d.i <- ""; d.i_pos <- 0; d.i_max <- min_int (* set eoi in [d]. *) +let src d s j l = (* set [d.i] with [s]. *) + if (j < 0 || l < 0 || j + l > String.length s) then invalid_bounds j l else + if (l = 0) then eoi d else + (d.i <- s; d.i_pos <- j; d.i_max <- j + l - 1) + +let refill k d = match d.src with (* get new input in [d.i] and [k]ontinue. *) +| `Manual -> d.k <- k; `Await +| `String _ -> eoi d; k d +| `Channel ic -> + let rc = input ic d.i 0 (String.length d.i) in + (src d d.i 0 rc; k d) + +let t_need d need = d.t_len <- 0; d.t_need <- need +let rec t_fill k d = (* get [d.t_need] bytes (or less if eoi) in [i.t]. *) + let blit d l = + unsafe_blit d.i d.i_pos d.t d.t_len (* write pos. *) l; + d.i_pos <- d.i_pos + l; d.t_len <- d.t_len + l; + in + let rem = i_rem d in + if rem < 0 (* eoi *) then k d else + let need = d.t_need - d.t_len in + if rem < need then (blit d rem; refill (t_fill k) d) else (blit d need; k d) + +let ret k v byte_count d = (* return post-processed [v]. *) + d.k <- k; d.byte_count <- d.byte_count + byte_count; d.pp d v + +(* Decoders. *) + +let rec decode_us_ascii d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_us_ascii d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 1; ret decode_us_ascii (r_us_ascii d.i j) 1 d + +let rec decode_iso_8859_1 d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_iso_8859_1 d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 1; ret decode_iso_8859_1 (r_iso_8859_1 d.i j) 1 d + +(* UTF-8 decoder *) + +let rec t_decode_utf_8 d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else ret decode_utf_8 (r_utf_8 d.t 0 d.t_len) d.t_len d + +and decode_utf_8 d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_8 d) else + let need = unsafe_array_get utf_8_len (unsafe_byte d.i d.i_pos) in + if rem < need then (t_need d need; t_fill t_decode_utf_8 d) else + let j = d.i_pos in + if need = 0 + then (d.i_pos <- d.i_pos + 1; ret decode_utf_8 (malformed d.i j 1) 1 d) + else (d.i_pos <- d.i_pos + need; ret decode_utf_8 (r_utf_8 d.i j need) need d) + +(* UTF-16BE decoder *) + +let rec t_decode_utf_16be_lo hi d = (* decode from [d.t]. *) + let bcount = d.t_len + 2 (* hi count *) in + if d.t_len < d.t_need + then ret decode_utf_16be (malformed_pair true hi d.t 0 d.t_len) bcount d + else ret decode_utf_16be (r_utf_16_lo hi d.t 0 1) bcount d + +and t_decode_utf_16be d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_16be (malformed d.t 0 d.t_len) d.t_len d + else decode_utf_16be_lo (r_utf_16 d.t 0 1) d + +and decode_utf_16be_lo v d = match v with +| `Uchar _ | `Malformed _ as v -> ret decode_utf_16be v 2 d +| `Hi hi -> + let rem = i_rem d in + if rem < 2 then (t_need d 2; t_fill (t_decode_utf_16be_lo hi) d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; + ret decode_utf_16be (r_utf_16_lo hi d.i j (j + 1)) 4 d + +and decode_utf_16be d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_16be d) else + if rem < 2 then (t_need d 2; t_fill t_decode_utf_16be d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; decode_utf_16be_lo (r_utf_16 d.i j (j + 1)) d + +(* UTF-16LE decoder, same as UTF-16BE with byte swapped. *) + +let rec t_decode_utf_16le_lo hi d = (* decode from [d.t]. *) + let bcount = d.t_len + 2 (* hi count *) in + if d.t_len < d.t_need + then ret decode_utf_16le (malformed_pair false hi d.t 0 d.t_len) bcount d + else ret decode_utf_16le (r_utf_16_lo hi d.t 1 0) bcount d + +and t_decode_utf_16le d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_16le (malformed d.t 0 d.t_len) d.t_len d + else decode_utf_16le_lo (r_utf_16 d.t 1 0) d + +and decode_utf_16le_lo v d = match v with +| `Uchar _ | `Malformed _ as v -> ret decode_utf_16le v 2 d +| `Hi hi -> + let rem = i_rem d in + if rem < 2 then (t_need d 2; t_fill (t_decode_utf_16le_lo hi) d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; + ret decode_utf_16le (r_utf_16_lo hi d.i (j + 1) j) 4 d + +and decode_utf_16le d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_16le d) else + if rem < 2 then (t_need d 2; t_fill t_decode_utf_16le d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; decode_utf_16le_lo (r_utf_16 d.i (j + 1) j) d + +(* Encoding guessing. The guess is simple but starting the decoder + after is tedious, uutf's decoders are not designed to put bytes + back in the stream. *) + +let guessed_utf_8 d = (* start decoder after `UTF_8 guess. *) + let b3 d = (* handles the third read byte. *) + let b3 = unsafe_byte d.t 2 in + match utf_8_len.(b3) with + | 0 -> ret decode_utf_8 (malformed d.t 2 1) 1 d + | n -> + d.t_need <- n; d.t_len <- 1; unsafe_set_byte d.t 0 b3; + t_fill t_decode_utf_8 d + in + let b2 d = (* handle second read byte. *) + let b2 = unsafe_byte d.t 1 in + let b3 = if d.t_len > 2 then b3 else decode_utf_8 (* decodes `End *) in + match utf_8_len.(b2) with + | 0 -> ret b3 (malformed d.t 1 1) 1 d + | 1 -> ret b3 (r_utf_8 d.t 1 1) 1 d + | n -> (* copy d.t.(1-2) to d.t.(0-1) and decode *) + d.t_need <- n; + unsafe_set_byte d.t 0 b2; + if (d.t_len < 3) then d.t_len <- 1 else + (d.t_len <- 2; unsafe_set_byte d.t 1 (unsafe_byte d.t 2); ); + t_fill t_decode_utf_8 d + in + let b1 = unsafe_byte d.t 0 in (* handle first read byte. *) + let b2 = if d.t_len > 1 then b2 else decode_utf_8 (* decodes `End *) in + match utf_8_len.(b1) with + | 0 -> ret b2 (malformed d.t 0 1) 1 d + | 1 -> ret b2 (r_utf_8 d.t 0 1) 1 d + | 2 -> + if d.t_len < 2 then ret decode_utf_8 (malformed d.t 0 1) 1 d else + if d.t_len < 3 then ret decode_utf_8 (r_utf_8 d.t 0 2) 2 d else + ret b3 (r_utf_8 d.t 0 2) 2 d + | 3 -> + if d.t_len < 3 + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else ret decode_utf_8 (r_utf_8 d.t 0 3) 3 d + | 4 -> + if d.t_len < 3 + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else (d.t_need <- 4; t_fill t_decode_utf_8 d) + | n -> assert false + +let guessed_utf_16 d be v = (* start decoder after `UTF_16{BE,LE} guess. *) + let decode_utf_16, t_decode_utf_16, t_decode_utf_16_lo, j0, j1 = + if be then decode_utf_16be, t_decode_utf_16be, t_decode_utf_16be_lo, 0, 1 + else decode_utf_16le, t_decode_utf_16le, t_decode_utf_16le_lo, 1, 0 + in + let b3 k d = + if d.t_len < 3 then decode_utf_16 d (* decodes `End *) else + begin (* copy d.t.(2) to d.t.(0) and decode. *) + d.t_need <- 2; d.t_len <- 1; + unsafe_set_byte d.t 0 (unsafe_byte d.t 2); + t_fill k d + end + in + match v with + | `BOM -> ret (b3 t_decode_utf_16) (`Uchar u_bom) 2 d + | `ASCII u -> ret (b3 t_decode_utf_16) (`Uchar u) 2 d + | `Decode -> + match r_utf_16 d.t j0 j1 with + | `Malformed _ | `Uchar _ as v -> ret (b3 t_decode_utf_16) v 2 d + | `Hi hi -> + if d.t_len < 3 + then ret decode_utf_16 (malformed_pair be hi "" 0 0) d.t_len d + else (b3 (t_decode_utf_16_lo hi)) d + +let guess_encoding d = (* guess encoding and start decoder. *) + let setup d = match r_encoding d.t 0 d.t_len with + | `UTF_8 r -> + d.encoding <- `UTF_8; d.k <- decode_utf_8; + begin match r with + | `BOM -> ret decode_utf_8 (`Uchar u_bom) 3 d + | `Decode -> guessed_utf_8 d + | `End -> `End + end + | `UTF_16BE r -> + d.encoding <- `UTF_16BE; d.k <- decode_utf_16be; guessed_utf_16 d true r + | `UTF_16LE r -> + d.encoding <- `UTF_16LE; d.k <- decode_utf_16le; guessed_utf_16 d false r + + in + (t_need d 3; t_fill setup d) + +(* Character post-processors. Used for BOM handling, newline + normalization and position tracking. The [pp_remove_bom] is only + used for the first character to remove a possible initial BOM and + handle UTF-16 endianness recognition. *) + +let nline d = d.col <- 0; d.line <- d.line + 1 (* inlined. *) +let ncol d = d.col <- d.col + 1 (* inlined. *) +let ncount d = d.count <- d.count + 1 (* inlined. *) +let cr d b = d.last_cr <- b (* inlined. *) + +let pp_remove_bom utf16 pp d = function(* removes init. BOM, handles UTF-16. *) +| `Uchar 0xFEFF (* BOM *) -> + if utf16 then (d.encoding <- `UTF_16BE; d.k <- decode_utf_16be); + d.removed_bom <- true; d.pp <- pp; d.k d +| `Uchar 0xFFFE (* BOM reversed from decode_utf_16be *) when utf16 -> + d.encoding <- `UTF_16LE; d.k <- decode_utf_16le; + d.removed_bom <- true; d.pp <- pp; d.k d +| `Malformed _ | `Uchar _ as v -> + d.removed_bom <- false; d.pp <- pp; d.pp d v + +let pp_nln_none d = function +| `Uchar 0x000A (* LF *) as v -> + let last_cr = d.last_cr in + cr d false; ncount d; if last_cr then v else (nline d; v) +| `Uchar 0x000D (* CR *) as v -> cr d true; ncount d; nline d; v +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) (* NEL | FF | LS | PS *) as v -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_readline d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) (* NEL | FF | LS | PS *) -> + cr d false; ncount d; nline d; `Uchar d.nl +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_nlf d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar 0x0085 (* NEL *) -> cr d false; ncount d; nline d; `Uchar d.nl +| `Uchar (0x000C | 0x2028 | 0x2029) as v (* FF | LS | PS *) -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_ascii d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) as v (* NEL | FF | LS | PS *) -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let decode_fun = function +| `UTF_8 -> decode_utf_8 +| `UTF_16 -> decode_utf_16be (* see [pp_remove_bom]. *) +| `UTF_16BE -> decode_utf_16be +| `UTF_16LE -> decode_utf_16le +| `US_ASCII -> decode_us_ascii +| `ISO_8859_1 -> decode_iso_8859_1 + +let decoder ?nln ?encoding src = + let pp, nl = match nln with + | None -> pp_nln_none, 0x000A (* not used. *) + | Some (`ASCII nl) -> pp_nln_ascii, nl + | Some (`NLF nl) -> pp_nln_nlf, nl + | Some (`Readline nl) -> pp_nln_readline, nl + in + let encoding, k = match encoding with + | None -> `UTF_8, guess_encoding + | Some e -> (e :> decoder_encoding), decode_fun e + in + let i, i_pos, i_max = match src with + | `Manual -> "", 1, 0 (* implies src_rem d = 0. *) + | `Channel _ -> String.create io_buffer_size, 1, 0 (* idem. *) + | `String s -> s, 0, String.length s - 1 + in + { src = (src :> src); encoding; nln = (nln :> nln option); nl; + i; i_pos; i_max; t = String.create 4; t_len = 0; t_need = 0; + removed_bom = false; last_cr = false; line = 1; col = 0; + byte_count = 0; count = 0; + pp = pp_remove_bom (encoding = `UTF_16) pp; k } + +let decode d = d.k d +let decoder_line d = d.line +let decoder_col d = d.col +let decoder_byte_count d = d.byte_count +let decoder_count d = d.count +let decoder_removed_bom d = d.removed_bom +let decoder_src d = d.src +let decoder_nln d = d.nln +let decoder_encoding d = d.encoding +let set_decoder_encoding d e = + d.encoding <- (e :> decoder_encoding); d.k <- decode_fun e + +(* Encode *) + +type dst = [ `Channel of out_channel | `Buffer of Buffer.t | `Manual ] +type encode = [ `Await | `End | `Uchar of uchar ] +type encoder = + { dst : dst; (* output destination. *) + encoding : encoding; (* encoded encoding. *) + mutable o : string; (* current output chunk. *) + mutable o_pos : int; (* next output position to write. *) + mutable o_max : int; (* maximal output position to write. *) + t : string; (* four bytes buffer for overlapping writes. *) + mutable t_pos : int; (* next position to read in [t]. *) + mutable t_max : int; (* maximal position to read in [t]. *) + mutable k : (* encoder continuation. *) + encoder -> encode -> [ `Ok | `Partial ] } + +(* On encodes that overlap two (or more) [e.o] buffers, we encode the + character to the temporary buffer [o.t] and continue with + [tmp_flush] to write this data on the different [e.o] buffers. If + the [e.o] buffers are not too small this is faster than + continuation based byte per byte writes. *) + +let o_rem e = e.o_max - e.o_pos + 1 (* remaining bytes to write in [e.o]. *) +let dst e s j l = (* set [e.o] with [s]. *) + if (j < 0 || l < 0 || j + l > String.length s) then invalid_bounds j l; + e.o <- s; e.o_pos <- j; e.o_max <- j + l - 1 + +let partial k e = function `Await -> k e | `Uchar _ | `End -> invalid_encode () +let flush k e = match e.dst with(* get free storage in [d.o] and [k]ontinue. *) +| `Manual -> e.k <- partial k; `Partial +| `Buffer b -> Buffer.add_substring b e.o 0 e.o_pos; e.o_pos <- 0; k e +| `Channel oc -> output oc e.o 0 e.o_pos; e.o_pos <- 0; k e + +let t_range e max = e.t_pos <- 0; e.t_max <- max +let rec t_flush k e = (* flush [d.t] up to [d.t_max] in [d.i]. *) + let blit e l = + unsafe_blit e.t e.t_pos e.o e.o_pos l; + e.o_pos <- e.o_pos + l; e.t_pos <- e.t_pos + l + in + let rem = o_rem e in + let len = e.t_max - e.t_pos + 1 in + if rem < len then (blit e rem; flush (t_flush k) e) else (blit e len; k e) + +(* Encoders. *) + +let rec encode_utf_8 e v = + let k e = e.k <- encode_utf_8; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u as v -> + let rem = o_rem e in + if u <= 0x007F then + if rem < 1 then flush (fun e -> encode_utf_8 e v) e else + (unsafe_set_byte e.o e.o_pos u; e.o_pos <- e.o_pos + 1; k e) + else if u <= 0x07FF then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (0xC0 lor (u lsr 6)); + unsafe_set_byte s (j + 1) (0x80 lor (u land 0x3F)); + k e + end + else if u <= 0xFFFF then + begin + let s, j, k = + if rem < 3 then (t_range e 2; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 3; e.o, j, k) + in + unsafe_set_byte s j (0xE0 lor (u lsr 12)); + unsafe_set_byte s (j + 1) (0x80 lor ((u lsr 6) land 0x3F)); + unsafe_set_byte s (j + 2) (0x80 lor (u land 0x3F)); + k e + end + else + begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + unsafe_set_byte s j (0xF0 lor (u lsr 18)); + unsafe_set_byte s (j + 1) (0x80 lor ((u lsr 12) land 0x3F)); + unsafe_set_byte s (j + 2) (0x80 lor ((u lsr 6) land 0x3F)); + unsafe_set_byte s (j + 3) (0x80 lor (u land 0x3F)); + k e + end + +let rec encode_utf_16be e v = + let k e = e.k <- encode_utf_16be; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u -> + let rem = o_rem e in + if u < 0x10000 then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (u lsr 8); + unsafe_set_byte s (j + 1) (u land 0xFF); + k e + end else begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + unsafe_set_byte s j (hi lsr 8); + unsafe_set_byte s (j + 1) (hi land 0xFF); + unsafe_set_byte s (j + 2) (lo lsr 8); + unsafe_set_byte s (j + 3) (lo land 0xFF); + k e + end + +let rec encode_utf_16le e v = (* encode_uft_16be with bytes swapped. *) + let k e = e.k <- encode_utf_16le; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u -> + let rem = o_rem e in + if u < 0x10000 then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (u land 0xFF); + unsafe_set_byte s (j + 1) (u lsr 8); + k e + end + else + begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + unsafe_set_byte s j (hi land 0xFF); + unsafe_set_byte s (j + 1) (hi lsr 8); + unsafe_set_byte s (j + 2) (lo land 0xFF); + unsafe_set_byte s (j + 3) (lo lsr 8); + k e + end + +let encode_fun = function +| `UTF_8 -> encode_utf_8 +| `UTF_16 -> encode_utf_16be +| `UTF_16BE -> encode_utf_16be +| `UTF_16LE -> encode_utf_16le + +let encoder encoding dst = + let o, o_pos, o_max = match dst with + | `Manual -> "", 1, 0 (* implies o_rem e = 0. *) + | `Buffer _ + | `Channel _ -> String.create io_buffer_size, 0, io_buffer_size - 1 + in + { dst = (dst :> dst); encoding = (encoding :> encoding); o; o_pos; o_max; + t = String.create 4; t_pos = 1; t_max = 0; k = encode_fun encoding} + +let encode e v = e.k e (v :> encode) +let encoder_encoding e = e.encoding +let encoder_dst e = e.dst + +(* Manual sources and destinations. *) + +module Manual = struct + let src = src + let dst = dst + let dst_rem = o_rem +end + +(* Strings folders and Buffer encoders *) + +module String = struct + let encoding_guess s = match r_encoding s 0 (max (String.length s) 3) with + | `UTF_8 d -> `UTF_8, (d = `BOM) + | `UTF_16BE d -> `UTF_16BE, (d = `BOM) + | `UTF_16LE d -> `UTF_16LE, (d = `BOM) + + type 'a folder = + 'a -> int -> [ `Uchar of uchar | `Malformed of string ] -> 'a + + let fold_utf_8 f acc s = + let rec loop acc f s i l = + if i = l then acc else + let need = unsafe_array_get utf_8_len (unsafe_byte s i) in + if need = 0 then loop (f acc i (malformed s i 1)) f s (i + 1) l else + let rem = l - i in + if rem < need then f acc i (malformed s i rem) else + loop (f acc i (r_utf_8 s i need)) f s (i + need) l + in + loop acc f s 0 (String.length s) + + let fold_utf_16be f acc s = + let rec loop acc f s i l = + if i = l then acc else + let rem = l - i in + if rem < 2 then f acc i (malformed s i 1) else + match r_utf_16 s i (i + 1) with + | `Uchar _ | `Malformed _ as v -> loop (f acc i v) f s (i + 2) l + | `Hi hi -> + if rem < 4 then f acc i (malformed s i rem) else + loop (f acc i (r_utf_16_lo hi s (i + 2) (i + 3))) f s (i + 4) l + in + loop acc f s 0 (String.length s) + + let fold_utf_16le f acc s = (* [fold_utf_16be], bytes swapped. *) + let rec loop acc f s i l = + if i = l then acc else + let rem = l - i in + if rem < 2 then f acc i (malformed s i 1) else + match r_utf_16 s (i + 1) i with + | `Uchar _ | `Malformed _ as v -> loop (f acc i v) f s (i + 2) l + | `Hi hi -> + if rem < 4 then f acc i (malformed s i rem) else + loop (f acc i (r_utf_16_lo hi s (i + 3) (i + 2))) f s (i + 4) l + in + loop acc f s 0 (String.length s) +end + +module Buffer = struct + let add_utf_8 b u = + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u <= 0x007F then + (w u) + else if u <= 0x07FF then + (w (0xC0 lor (u lsr 6)); + w (0x80 lor (u land 0x3F))) + else if u <= 0xFFFF then + (w (0xE0 lor (u lsr 12)); + w (0x80 lor ((u lsr 6) land 0x3F)); + w (0x80 lor (u land 0x3F))) + else + (w (0xF0 lor (u lsr 18)); + w (0x80 lor ((u lsr 12) land 0x3F)); + w (0x80 lor ((u lsr 6) land 0x3F)); + w (0x80 lor (u land 0x3F))) + + let add_utf_16be b u = + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u < 0x10000 then (w (u lsr 8); w (u land 0xFF)) else + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + w (hi lsr 8); w (hi land 0xFF); + w (lo lsr 8); w (lo land 0xFF) + + let add_utf_16le b u = (* swapped add_utf_16be. *) + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u < 0x10000 then (w (u land 0xFF); w (u lsr 8)) else + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + w (hi land 0xFF); w (hi lsr 8); + w (lo land 0xFF); w (lo lsr 8) +end + +(*--------------------------------------------------------------------------- + Copyright 2012 Daniel C. Bünzli + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + 3. Neither the name of Daniel C. Bünzli nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*) diff --git a/samples/Objective-C/Siesta.h b/samples/Objective-C/Siesta.h new file mode 100644 index 00000000..a48984e3 --- /dev/null +++ b/samples/Objective-C/Siesta.h @@ -0,0 +1,16 @@ +// +// Siesta.h +// Siesta +// +// Created by Paul on 2015/6/14. +// Copyright © 2015 Bust Out Solutions. MIT license. +// + +#import + +//! Project version number for Siesta. +FOUNDATION_EXPORT double SiestaVersionNumber; + +//! Project version string for Siesta. +FOUNDATION_EXPORT const unsigned char SiestaVersionString[]; + diff --git a/samples/Objective-C/gen-cocoa-linguist-thrift.m b/samples/Objective-C/gen-cocoa-linguist-thrift.m new file mode 100644 index 00000000..670a85f7 --- /dev/null +++ b/samples/Objective-C/gen-cocoa-linguist-thrift.m @@ -0,0 +1,176 @@ +/** + * Autogenerated by Thrift Compiler (1.0.0-dev) + * + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * @generated + */ + +#import + +#import "TProtocol.h" +#import "TApplicationException.h" +#import "TProtocolException.h" +#import "TProtocolUtil.h" +#import "TProcessor.h" +#import "TObjective-C.h" +#import "TBase.h" + + +#import "linguist.h" + +@implementation PullRequest + +- (id) init +{ + self = [super init]; +#if TARGET_OS_IPHONE || (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) +#endif + return self; +} + +- (id) initWithTitle: (NSString *) title +{ + self = [super init]; + __title = [title retain_stub]; + __title_isset = YES; + return self; +} + +- (id) initWithCoder: (NSCoder *) decoder +{ + self = [super init]; + if ([decoder containsValueForKey: @"title"]) + { + __title = [[decoder decodeObjectForKey: @"title"] retain_stub]; + __title_isset = YES; + } + return self; +} + +- (void) encodeWithCoder: (NSCoder *) encoder +{ + if (__title_isset) + { + [encoder encodeObject: __title forKey: @"title"]; + } +} + +- (NSUInteger) hash +{ + NSUInteger hash = 17; + hash = (hash * 31) ^ __title_isset ? 2654435761 : 0; + if (__title_isset) + { + hash = (hash * 31) ^ [__title hash]; + } + return hash; +} + +- (BOOL) isEqual: (id) anObject +{ + if (self == anObject) { + return YES; + } + if (![anObject isKindOfClass:[PullRequest class]]) { + return NO; + } + PullRequest *other = (PullRequest *)anObject; + if ((__title_isset != other->__title_isset) || + (__title_isset && ((__title || other->__title) && ![__title isEqual:other->__title]))) { + return NO; + } + return YES; +} + +- (void) dealloc +{ + [__title release_stub]; + [super dealloc_stub]; +} + +- (NSString *) title { + return [[__title retain_stub] autorelease_stub]; +} + +- (void) setTitle: (NSString *) title { + [title retain_stub]; + [__title release_stub]; + __title = title; + __title_isset = YES; +} + +- (BOOL) titleIsSet { + return __title_isset; +} + +- (void) unsetTitle { + [__title release_stub]; + __title = nil; + __title_isset = NO; +} + +- (void) read: (id ) inProtocol +{ + NSString * fieldName; + int fieldType; + int fieldID; + + [inProtocol readStructBeginReturningName: NULL]; + while (true) + { + [inProtocol readFieldBeginReturningName: &fieldName type: &fieldType fieldID: &fieldID]; + if (fieldType == TType_STOP) { + break; + } + switch (fieldID) + { + case 1: + if (fieldType == TType_STRING) { + NSString * fieldValue = [inProtocol readString]; + [self setTitle: fieldValue]; + } else { + [TProtocolUtil skipType: fieldType onProtocol: inProtocol]; + } + break; + default: + [TProtocolUtil skipType: fieldType onProtocol: inProtocol]; + break; + } + [inProtocol readFieldEnd]; + } + [inProtocol readStructEnd]; +} + +- (void) write: (id ) outProtocol { + [outProtocol writeStructBeginWithName: @"PullRequest"]; + if (__title_isset) { + if (__title != nil) { + [outProtocol writeFieldBeginWithName: @"title" type: TType_STRING fieldID: 1]; + [outProtocol writeString: __title]; + [outProtocol writeFieldEnd]; + } + } + [outProtocol writeFieldStop]; + [outProtocol writeStructEnd]; +} + +- (void) validate { + // check for required fields +} + +- (NSString *) description { + NSMutableString * ms = [NSMutableString stringWithString: @"PullRequest("]; + [ms appendString: @"title:"]; + [ms appendFormat: @"\"%@\"", __title]; + [ms appendString: @")"]; + return [NSString stringWithString: ms]; +} + +@end + + +@implementation linguistConstants ++ (void) initialize { +} +@end + diff --git a/samples/PHP/drupal.script! b/samples/PHP/drupal.php similarity index 100% rename from samples/PHP/drupal.script! rename to samples/PHP/drupal.php diff --git a/samples/Zephir/filenames/exception.zep.php b/samples/PHP/exception.zep.php similarity index 100% rename from samples/Zephir/filenames/exception.zep.php rename to samples/PHP/exception.zep.php diff --git a/samples/PHP/file_display.inc b/samples/PHP/file_display.inc new file mode 100644 index 00000000..8133a3b9 --- /dev/null +++ b/samples/PHP/file_display.inc @@ -0,0 +1,142 @@ + TRUE, + 'title' => t('File display'), + 'description' => t('Displays the file with a configurable style.'), + 'required context' => new ctools_context_required(t('File'), 'entity:file'), + 'category' => t('File'), + 'defaults' => array( + 'displays' => array(), + ), +); + +/** + * Render the node content. + */ +function file_entity_file_display_content_type_render($subtype, $conf, $panel_args, $context) { + if (!empty($context) && empty($context->data)) { + return; + } + $file = isset($context->data) ? clone($context->data) : NULL; + $block = new stdClass(); + $block->module = 'file_entity'; + $block->delta = $file->fid; + + if (empty($file)) { + $block->delta = 'placeholder'; + $block->title = t('File display'); + $block->content = t('File display goes here.'); + } + else { + if (!empty($conf['identifier'])) { + $file->ctools_template_identifier = $conf['identifier']; + } + + $block->title = $file->filename; + $block->content = file_view_file($file, $conf['displays']); + } + + if (!empty($conf['link']) && $file) { + $block->title_link = entity_uri('file', $file); + } + + return $block; +} + +/** + * Edit form for this plugin. + */ +function file_entity_file_display_content_type_edit_form($form, &$form_state) { + $conf = $form_state['conf']; + $form['#tree'] = TRUE; + $form['#attached']['js'][] = drupal_get_path('module', 'file_entity') . '/file_entity.admin.js'; + + // Retrieve available formatters for this file. We can load all file types + // since we don't know which type the file is at this point. + $formatters = file_info_formatter_types(); + + // Formatter status. + $form['displays']['status'] = array( + '#type' => 'item', + '#title' => t('Enabled displays'), + '#prefix' => '
', + '#suffix' => '
', + ); + $i=0; + foreach ($formatters as $name => $formatter) { + $form['displays']['status'][$name] = array( + '#type' => 'checkbox', + '#title' => check_plain($formatter['label']), + '#default_value' => !empty($conf['displays'][$name]['status']), + '#description' => isset($formatter['description']) ? filter_xss($formatter['description']) : NULL, + '#parents' => array('displays', $name, 'status'), + '#weight' => (isset($formatter['weight']) ? $formatter['weight'] : 0) + ($i / 1000), + ); + $i++; + } + // Formatter order (tabledrag). + $form['displays']['order'] = array( + '#type' => 'item', + '#title' => t('Display precedence order'), + '#theme' => 'file_entity_file_display_order', + ); + foreach ($formatters as $name => $formatter) { + $form['displays']['order'][$name]['label'] = array( + '#markup' => check_plain($formatter['label']), + ); + $form['displays']['order'][$name]['weight'] = array( + '#type' => 'weight', + '#title' => t('Weight for @title', array('@title' => $formatter['label'])), + '#title_display' => 'invisible', + '#delta' => 50, + '#default_value' => isset($conf['displays'][$name]['weight']) ? $conf['displays'][$name]['weight'] : 0, + '#parents' => array('displays', $name, 'weight'), + ); + $form['displays']['order'][$name]['#weight'] = $form['displays']['order'][$name]['weight']['#default_value']; + } + + // Formatter settings. + $form['display_settings_title'] = array( + '#type' => 'item', + '#title' => t('Display settings'), + ); + $form['display_settings'] = array( + '#type' => 'vertical_tabs', + ); + $i=0; + foreach ($formatters as $name => $formatter) { + if (isset($formatter['settings callback']) && ($function = $formatter['settings callback']) && function_exists($function)) { + $defaults = !empty($formatter['default settings']) ? $formatter['default settings'] : array(); + $settings = !empty($conf['displays'][$name]['settings']) ? $conf['displays'][$name]['settings'] : array(); + $settings += $defaults; + $settings_form = $function($form, $form_state, $settings, $name, $file_type, $view_mode); + if (!empty($settings_form)) { + $form['displays']['settings'][$name] = array( + '#type' => 'fieldset', + '#title' => check_plain($formatter['label']), + '#parents' => array('displays', $name, 'settings'), + '#group' => 'display_settings', + '#weight' => (isset($formatter['weight']) ? $formatter['weight'] : 0) + ($i / 1000), + ) + $settings_form; + } + } + $i++; + } + return $form; +} + +function file_entity_file_display_content_type_edit_form_submit($form, &$form_state) { + // Copy everything from our defaults. + foreach (array_keys($form_state['plugin']['defaults']) as $key) { + $form_state['conf'][$key] = $form_state['values'][$key]; + } +} + +function file_entity_file_display_content_type_admin_title($subtype, $conf, $context) { + return t('"@s" content', array('@s' => $context->identifier)); +} diff --git a/samples/PHP/mail.phps b/samples/PHP/mail.phps new file mode 100644 index 00000000..8e129f47 --- /dev/null +++ b/samples/PHP/mail.phps @@ -0,0 +1,31 @@ +setFrom('from@example.com', 'First Last'); +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); +//Set the subject line +$mail->Subject = 'PHPMailer mail() test'; +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/samples/PHP/php.script! b/samples/PHP/php similarity index 100% rename from samples/PHP/php.script! rename to samples/PHP/php diff --git a/samples/PHP/php-script.script! b/samples/PHP/php-script similarity index 100% rename from samples/PHP/php-script.script! rename to samples/PHP/php-script diff --git a/samples/PHP/php2.script! b/samples/PHP/php2 similarity index 100% rename from samples/PHP/php2.script! rename to samples/PHP/php2 diff --git a/samples/PHP/root.php b/samples/PHP/root.php new file mode 100644 index 00000000..8f8be563 --- /dev/null +++ b/samples/PHP/root.php @@ -0,0 +1,6 @@ + diff --git a/samples/PLSQL/myobject.sql b/samples/PLSQL/myobject.sql new file mode 100644 index 00000000..dd2a68aa --- /dev/null +++ b/samples/PLSQL/myobject.sql @@ -0,0 +1,15 @@ +create or replace type myobject +AUTHID DEFINER +AS OBJECT +( + m_name varchar2(200), + member function toString RETURN VARCHAR2, + map member function Compare return varchar2 + +) +not instantiable not final; +/ + +prompt create type myarray +create or replace type myarray as table of myobject; +/ diff --git a/samples/PLSQL/packagebody.pkb b/samples/PLSQL/packagebody.pkb new file mode 100644 index 00000000..e5e80d99 --- /dev/null +++ b/samples/PLSQL/packagebody.pkb @@ -0,0 +1,58 @@ +CREATE OR REPLACE PACKAGE BODY linguistpackage +AS + /* + * Package: linguist pacakage body + * Purpose: a sample PLSQL file for linguist to work with + * + * Date: 03/03/2014 + * Author: david pyke le brun + * Comments: initial version + */ + +PROCEDURE proc_1 +IS +BEGIN +NULL; +END; + +-- functions with 1 arg +FUNCTION function1( param1 VARCHAR2 ) RETURN VARCHAR2 +IS +CURSOR c IS +select * from dual; +v c%ROWTYPE; +BEGIN + open c; + fetch c into v; + close c; + + return v; +end; + +FUNCTION function2( param1 NUMBER ) RETURN DATE +IS +BEGIN + return SYSDATE; +end; + +--a few more to use all basic SQL types +FUNCTION function3( param1 TIMESTAMP ) RETURN CHAR +IS +BEGIN +IF 1 = 2 THEN +return 'Y'; +ELSE +return 'N'; +END IF; +return NULL; +END; + + +FUNCTION function4( param1 CLOB ) RETURN BLOB +IS +BEGIN + return null; +END; + +END linguistpackage; +/ diff --git a/samples/PLSQL/packageheader.pks b/samples/PLSQL/packageheader.pks new file mode 100644 index 00000000..408cdca3 --- /dev/null +++ b/samples/PLSQL/packageheader.pks @@ -0,0 +1,28 @@ +CREATE OR REPLACE PACKAGE linguistpackage +AUTHID DEFINER +AS + /* + * Package: linguist pacakage + * Purpose: a sample PLSQL file for linguist to work with + * + * Date: 03/03/2014 + * Author: david pyke le brun + * Comments: initial version + */ + +k_constant CONSTANT NUMBER(10,2) := 3.14; + +--basic procedure +PROCEDURE proc_1; + +-- functions with 1 arg +FUNCTION function1( param1 VARCHAR2 ) RETURN VARCHAR2; +FUNCTION function2( param1 NUMBER ) RETURN DATE; + +--a few more to use all basic SQL types +FUNCTION function3( param1 TIMESTAMP ) RETURN CHAR; +FUNCTION function4( param1 CLOB ) RETURN BLOB; + +END linguistpackage; +/ + diff --git a/samples/PLSQL/plsqlguide.pck b/samples/PLSQL/plsqlguide.pck new file mode 100644 index 00000000..d31830ba --- /dev/null +++ b/samples/PLSQL/plsqlguide.pck @@ -0,0 +1,90 @@ +create or replace package plsqlguide is + +-- Author : Jared Petersen +-- Created : 9/22/2015 12:26:22 AM +-- Purpose : Basic PLSQL template/guide + +/* Procedures */ +procedure p_main; + +end plsqlguide; +/ +create or replace package body plsqlguide is + +/* Main entry point (homepage) */ +procedure p_main + is +begin + +htp.prn(' + + + + + + + + PL/SQL Sample Application + + + + + + + + + + + +
+ + + + + + + + +'); + +-- Fill out the parts table +for row in (select * from parts) loop + htp.prn(' + + + + + + + + '); +end loop; + +htp.prn(' +
#NameDescriptionQuantityPrice
'||row.pid||''||row.name||''||row.description||''||row.quantity||''||row.price||'
+
+ + + + + + + +'); + +end p_main; + +begin + -- Initialization + null; +end plsqlguide; +/ diff --git a/samples/PLSQL/prime#.plsql b/samples/PLSQL/prime#.plsql new file mode 100644 index 00000000..1a4785a1 --- /dev/null +++ b/samples/PLSQL/prime#.plsql @@ -0,0 +1,93 @@ +create or replace package prime# +is + invalid_argument_error exception; + + function nth ( + i_num pls_integer + ) return number; +end prime#; +/ + +create or replace package body prime# +is + type t_primes is table of number index by pls_integer; + b_primes t_primes; + + function is_prime( + i_candidate number + ) return boolean + is + l_num number := 1; + l_prime number; + l_result number; + begin + if i_candidate < 2 then + return false; + end if; + + loop + l_prime := nth(l_num); + if l_prime = i_candidate then + return true; + end if; + + l_result := i_candidate / l_prime; + if l_result = ceil(l_result) then + return false; + end if; + + l_num := l_num + 1; + exit when l_result <= l_prime; + end loop; + + return true; + end is_prime; + + function next ( + i_prime pls_integer + ) return number + is + l_next number; + begin + l_next := i_prime + case mod(i_prime, 2) when 0 then 1 else 2 end; + + while not is_prime(l_next) loop + l_next := l_next + 2; + end loop; + return l_next; + end next; + + function nth ( + i_num pls_integer + ) return number + is + l_index number := 2; + l_prime number := 3; + begin + if i_num < 1 + or ceil(i_num) != i_num + then + raise invalid_argument_error; + end if; + + case i_num + when 1 then return 2; + else + if b_primes.exists(i_num) then + return b_primes(i_num); + end if; + while l_index < i_num loop + l_index := l_index + 1; + if b_primes.exists(l_index) then + l_prime := b_primes(l_index); + else + l_prime := next(l_prime); + b_primes(l_index) := l_prime; + end if; + end loop; + return l_prime; + end case; + end nth; + +end prime#; +/ \ No newline at end of file diff --git a/samples/PLSQL/who_called_me.sql b/samples/PLSQL/who_called_me.sql new file mode 100644 index 00000000..fee4ed9b --- /dev/null +++ b/samples/PLSQL/who_called_me.sql @@ -0,0 +1,65 @@ +CREATE OR REPLACE PROCEDURE who_called_me +( owner OUT VARCHAR2, + name OUT VARCHAR2, + lineno OUT NUMBER, + caller_t OUT VARCHAR2 , + depth NUMBER DEFAULT 1 +) +AUTHID DEFINER +AS +--depth based version of who_called_me from asktom + call_stack VARCHAR2(4096) default dbms_utility.format_call_stack; + n NUMBER; + found_stack BOOLEAN DEFAULT FALSE; + line VARCHAR2(255); + cnt NUMBER := 0; +BEGIN + LOOP + n := instr( call_stack, chr(10) ); + exit when ( n is NULL or n = 0 ); +-- + line := substr( call_stack, 1, n-1 ); + call_stack := substr( call_stack, n+1 ); +-- + if ( NOT found_stack ) then + if ( line like '%handle%number%name%' ) then + found_stack := TRUE; + end if; + else + cnt := cnt + 1; + -- cnt = 1 is ME + -- cnt = 2 is MY Caller + -- cnt = 3 is Their Caller + if ( cnt = (2+depth) ) then + lineno := to_number(substr( line, 13, 8 )); + line := substr( line, 23 ); --set to rest of line .. change from 21 to 23 + if ( line like 'pr%' ) then + n := length( 'procedure ' ); + elsif ( line like 'fun%' ) then + n := length( 'function ' ); + elsif ( line like 'package body%' ) then + n := length( 'package body ' ); + elsif ( line like 'pack%' ) then + n := length( 'package ' ); + elsif ( line like 'anonymous%' ) then + n := length( 'anonymous block ' ); + else + n := null; + end if; + if ( n is not null ) then + caller_t := ltrim(rtrim(upper(substr( line, 1, n-1 )))); + else + caller_t := 'TRIGGER'; + end if; + + line := substr( line, nvl(n,1) ); + n := instr( line, '.' ); + owner := ltrim(rtrim(substr( line, 1, n-1 ))); + name := LTRIM(RTRIM(SUBSTR( LINE, N+1 ))); + exit; + END IF; + END IF; + END LOOP; +END; +/ + diff --git a/samples/PLpgSQL/plpgsql_lint-8.4.sql b/samples/PLpgSQL/plpgsql_lint-8.4.sql new file mode 100644 index 00000000..72c84469 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-8.4.sql @@ -0,0 +1,165 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type diagnostic_info_type as ( + status text, + message text, + detail text, + row_count int); + +create or replace function f1() +returns void as $$ +declare + dg record; +begin + dg := NULL::diagnostic_info_type; + if false then + dg.status := '00000'; + dg.mistake := 'hello'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/PLpgSQL/plpgsql_lint-9.0.sql b/samples/PLpgSQL/plpgsql_lint-9.0.sql new file mode 100644 index 00000000..72c84469 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.0.sql @@ -0,0 +1,165 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type diagnostic_info_type as ( + status text, + message text, + detail text, + row_count int); + +create or replace function f1() +returns void as $$ +declare + dg record; +begin + dg := NULL::diagnostic_info_type; + if false then + dg.status := '00000'; + dg.mistake := 'hello'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/PLpgSQL/plpgsql_lint-9.1.sql b/samples/PLpgSQL/plpgsql_lint-9.1.sql new file mode 100644 index 00000000..2cc532a1 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.1.sql @@ -0,0 +1,179 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type diagnostic_info_type as ( + status text, + message text, + detail text, + row_count int); + +create or replace function f1() +returns void as $$ +declare dg record; +begin + dg := NULL::diagnostic_info_type; + if false then + dg.status := '00000'; + dg.mistake := 'hello'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare dg record; +begin + if false then + dg := 10,20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + diff --git a/samples/PLpgSQL/plpgsql_lint-9.2.sql b/samples/PLpgSQL/plpgsql_lint-9.2.sql new file mode 100644 index 00000000..73da6e67 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.2.sql @@ -0,0 +1,166 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type _exception_type as ( + state text, + message text, + detail text); + +create or replace function f1() +returns void as $$ +declare + _exception record; +begin + _exception := NULL::_exception_type; +exception when others then + get stacked diagnostics + _exception.state = RETURNED_SQLSTATE, + _exception.message = MESSAGE_TEXT, + _exception.detail = PG_EXCEPTION_DETAIL, + _exception.hint = PG_EXCEPTION_HINT; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/PLpgSQL/plpgsql_lint-9.3.sql b/samples/PLpgSQL/plpgsql_lint-9.3.sql new file mode 100644 index 00000000..73da6e67 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.3.sql @@ -0,0 +1,166 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type _exception_type as ( + state text, + message text, + detail text); + +create or replace function f1() +returns void as $$ +declare + _exception record; +begin + _exception := NULL::_exception_type; +exception when others then + get stacked diagnostics + _exception.state = RETURNED_SQLSTATE, + _exception.message = MESSAGE_TEXT, + _exception.detail = PG_EXCEPTION_DETAIL, + _exception.hint = PG_EXCEPTION_HINT; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/POV-Ray SDL/balcony.pov b/samples/POV-Ray SDL/balcony.pov new file mode 100755 index 00000000..87d10da3 --- /dev/null +++ b/samples/POV-Ray SDL/balcony.pov @@ -0,0 +1,207 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Scene Description File +// File: balcony.pov +// Desc: Povray demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann +// +// *********************************************************************** +// +// -------------------- 'balcony' demonstration scene -------------------- +// +// written July-August 2001 by Christoph Hormann +// +// demonstrates use of various new or changed features: +// +// - isosurface (for the rail columns) +// - mesh2 object (table cloth) +// - uv-mapping (table cloth) +// - pattern image type (background heightfield) +// - slope pattern (background heightfield) +// - variable reflection (water & glass) +// - metallic reflection +// - conserve_energy +// - function pattern (water) +// - fading interior (water, drink) +// - 'circular' and 'orient' area_light +// - radiosity +// - photons (objects on the table) +// +// *********************************************************************** +// +// Command line options: +// +// -w240 -h320 +// -w480 -h640 +a0.3 +// -w600 -h800 +a0.3 + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#version 3.6; + +#include "functions.inc" +#include "colors.inc" + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#declare AreaLight=on; +#declare Radiosity=on; +#declare Photons=on; +#declare TestLight=off; +#declare show_Fog=true; +#declare show_Water=true; +#declare show_Terrain=true; +#declare show_Building=true; +#declare show_Table=true; +#declare show_TableCloth=true; +#declare show_Chair=true; +#declare show_Table_Stuff=true; + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +global_settings{ + max_trace_level 15 + assumed_gamma 1 + + #if (Radiosity=on) + radiosity{ + pretrace_start 0.08 + pretrace_end 0.01 + count 130 + nearest_count 5 + error_bound 0.3 + + recursion_limit 1 + low_error_factor 0.5 + gray_threshold 0.0 + minimum_reuse 0.015 + brightness 1.0 + adc_bailout 0.01/2 + normal on + } + #end + + #if (Photons=on) + photons { + spacing 0.002 + } + #end + +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ +// This scene uses a non-standard camera set-up. +// (See CAMERA in the included documentation for details.) +// If you are new to POV-Ray, you might want to try a different demo scene. + +camera { + location <0.5, 0.5, 1.2> + direction y + sky z + up z + right x*image_width/image_height // keep propotions with any aspect ratio + look_at <5, 4.3, 0.9> + angle 36 +} + +/* +camera { // table detail camera + location <1.5, 1.5, 1.0> + direction y + sky z + up z + right x*image_width/image_height // keep propotions with any aspect ratio + look_at <3.3,2.52,0.5> + angle 30 +} +*/ + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + +#if (TestLight=on) + light_source { + <2, 2, 2> + color rgb 0.7 + } +#end + + +light_source { + <3.0, -2.5, 2.6>*10000 + color rgb <3.43,2.87,1.95> + #if (AreaLight=on) + area_light 400*x 400*y 4,4 + jitter + circular + orient + #end + + photons { + reflection on + refraction on + } +} + + +#if (show_Fog) + +fog{ + fog_type 2 + fog_alt 1.2 + fog_offset 0 + color rgbt <0.60, 0.68, 0.82, 0.0> + distance 700 + up z +} + +#end + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "sky.inc" + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (show_Water) + #include "water.inc" +#end + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (show_Building) + #include "building.inc" +#end + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (show_Terrain) + #include "terrain.inc" +#end + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (show_Table) + #include "table.inc" +#end + +#if (show_TableCloth) + #include "table_cloth.inc" +#end + +#if (show_Table_Stuff) + #include "table_stuff.inc" +#end + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (show_Chair) + #include "chair.inc" +#end + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + diff --git a/samples/POV-Ray SDL/bglass.inc b/samples/POV-Ray SDL/bglass.inc new file mode 100755 index 00000000..dde88d44 --- /dev/null +++ b/samples/POV-Ray SDL/bglass.inc @@ -0,0 +1,117 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: bglass.inc +// Desc: drinking glass for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#declare Mat_Glass= +material { + texture { + pigment { color rgbt 1 } + finish { + ambient 0.0 + diffuse 0.1 + specular 0.5 + roughness 0.05 + + reflection { + 0.0, 1.0 + fresnel on + } + + conserve_energy + } + } + interior { + ior 1.5 + fade_distance 0.1 + fade_power 1001 + fade_color <0.4,0.4,0.4> + } +} + +#declare Mat_Liquid= +material { + texture { + pigment { color rgbt 1 } + finish { + ambient 0.0 + diffuse 0.1 + specular 0.5 + roughness 0.01 + + reflection { + 0.0, 1.0 + fresnel on + } + + conserve_energy + } + } + interior { + ior 1.3 + fade_distance 0.03 + fade_power 1001 + fade_color <0.8,0.3,0.4> + } +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "shapes.inc" + +#local Content_Shape= +merge { + cylinder { + 0*z, 5*z, 3.0 + } + + object { Round_Cylinder_Merge (2*z, -3*z, 3.0, 0.25) } + + material { Mat_Liquid } +} + +#declare Glass= +union { + merge { + difference { + cylinder { + 0.01*z, 14*z, 3.2 + } + + cylinder { + 0*z, 10*z, 3.0 + translate 4.6*z + } + + object { Round_Cylinder_Merge (2*z, -3*z, 3.0, 0.25) translate 4.6*z } + } + torus { + 3.1, 0.1 + rotate 90*x + translate 14*z + } + + material { Mat_Glass } + } + + object { Content_Shape scale 0.99 translate 4.6*z } + + scale 1.1 + scale 0.01 +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + diff --git a/samples/POV-Ray SDL/building.inc b/samples/POV-Ray SDL/building.inc new file mode 100755 index 00000000..400b8166 --- /dev/null +++ b/samples/POV-Ray SDL/building.inc @@ -0,0 +1,212 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: building.inc +// Desc: building for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#declare Tex_Stone= +texture { + pigment { + + agate + color_map { + [0.7 color rgb <0.6,0.6,0.6> ] + [1.0 color rgb 0.46 ] + } + warp { turbulence <0.7,0.4,0.4> } + scale <0.3,1.2,1.2>*0.25 + rotate -60*y + rotate 70*z + } + finish { + ambient 0.0//0.1 + diffuse 0.5 + specular 0.15 + } + normal { + granite 0.2 + warp {turbulence 1} + scale 0.1 + } +} + +#declare Tex_Floor_A= +texture { + pigment { + color rgb <0.6,0.6,0.6> + } + finish { + ambient 0.0 + diffuse 0.5 + specular 0.15 + } + normal { + granite 0.2 + warp {turbulence 1} + scale 0.25 + translate 2 + } +} + +#declare Tex_Floor_B= +texture { + pigment { + color rgb <0.18,0.18,0.22> + } + finish { + ambient 0.0 + diffuse 0.5 + specular 0.15 + } + normal { + granite 0.2 + warp {turbulence 1} + scale 0.25 + } +} + +#declare Tex_Floor= +texture { + checker + texture { Tex_Floor_A }, + texture { Tex_Floor_B } + scale 0.4 + rotate 45*z +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "shapes.inc" + +#declare fn_Rad= +function { + sin(pow(abs(z*0.4),1.8))+0.4 +} + +#declare Small_Column_part1= +isosurface { + function { min(sqrt( x*x + y*y ) - fn_Rad(x, y, z), sqrt( x*x + y*y + pow(abs(z*2),1.4)) - 1.0) } + max_gradient 1.8 + //eval + accuracy 0.001 + contained_by { box { -4, 4 } } + translate 4*z + scale 6 + + texture { Tex_Stone } +} + +#declare Small_Column= +union { + object { Small_Column_part1 translate 3*z } + object { Round_Cylinder_Union (0, 3*z, 10, 1) } + object { Round_Cylinder_Union (51*z, 54*z, 10, 1) } + + scale 0.01 + + translate 0.1*z + texture { Tex_Stone } +} + +#declare Large_Column= +union { + object { Round_Cylinder_Merge (0.7*z, 0.8*z, 0.22, 0.02) } + + cylinder { 0.75*z, 3*z, 0.2 } + object { Round_Box_Union (<-0.23,-0.23,-0.1>, <0.23,0.23,0.15>, 0.02) } + object { Round_Box_Union (<-0.20,-0.20,0.00>, <0.20,0.20,0.70>, 0.02) } + object { Round_Box_Union (<-0.23,-0.23,0.58>, <0.23,0.23,0.70>, 0.02) } + object { Round_Box_Union (<-0.26,-0.26,0.64>, <0.26,0.26,0.74>, 0.02) } + + torus { 0.2, 0.06 rotate 90*x translate 2.74*z } + + object { Round_Box_Union (<-0.26,-0.26,2.80>, <0.26,0.26,2.88>, 0.01) } + + texture { Tex_Stone } +} + +#declare Balustrade= +union { + object { Round_Box_Union (<0.0,-0.15,0>, <5,0.15,0.1>, 0.02) } + object { Round_Box_Union (<0.0,-0.15,0.64>, <5,0.15,0.74>, 0.02) } + + #declare Cnt=0; + + #while (Cnt<10) + object { Small_Column translate(Cnt*0.5+0.6)*x } + #declare Cnt=Cnt+1; + #end + + texture { Tex_Stone } +} + +#declare Walls= +union { + box { <-0.5,-0.5,-1>, <-2,5.5,3.2> } + box { <-0.5,-0.5,-1>, <5.5,-2,3.2> } + + texture { Tex_Stone } +} + +#declare Ceiling_Segment= +union { + box { <-0.20,-0.20,2.94>, <0.20,0.20,2.98> } + box { <-0.14,-0.14,2.94>, <0.14,0.14,3.01> } +} + +#declare Ceiling= +union { + box { <5.6,5.6,3.04>, <-2,-2,3.5> } + + union { + object { Round_Box_Union (<0.0,-0.26,3.1>, <6,0.26,2.88>, 0.02) rotate 180*z } + object { Round_Box_Union (<0.0,-0.26,3.1>, <6,0.26,2.88>, 0.02) rotate -90*z } + translate <5,5,0> + } + + difference { + box { <5.0,5.0,2.95>, <-2,-2,3.5> } + object { Ceiling_Segment translate <4.44,4.44,0> } + object { Ceiling_Segment translate <4.44,3.94,0> } + object { Ceiling_Segment translate <3.94,4.44,0> } + object { Ceiling_Segment translate <3.94,3.94,0> } + object { Ceiling_Segment translate <4.44,3.44,0> } + object { Ceiling_Segment translate <3.44,4.44,0> } + object { Ceiling_Segment translate <3.94,3.44,0> } + object { Ceiling_Segment translate <3.44,3.94,0> } + object { Ceiling_Segment translate <4.44,2.94,0> } + object { Ceiling_Segment translate <2.94,4.44,0> } + } + + texture { Tex_Stone } +} + +#declare Base= +union { + box { <5.4,5.4,0>, <0,0,-1> texture { Tex_Floor } } + box { <6,6,-1>, <0,0,-2> } + + texture { Tex_Stone } +} + +object { Balustrade rotate 180*z translate <5,5,0> } +object { Balustrade rotate -90*z translate <5,5,0> } +object { Large_Column translate <5,5,0> } +object { Base } +object { Walls } +object { Ceiling } + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + diff --git a/samples/POV-Ray SDL/chair.inc b/samples/POV-Ray SDL/chair.inc new file mode 100755 index 00000000..39d47857 --- /dev/null +++ b/samples/POV-Ray SDL/chair.inc @@ -0,0 +1,382 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: chair.inc +// Desc: chair for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#declare Tex_Table_Foot= +texture { + pigment { + color rgb 0.4 + } + finish { + ambient 0.0 + diffuse 0.3 + specular 0.4 + roughness 0.01 + metallic + + reflection { + 0.8 + metallic + } + } +} + +#declare Tex_Table_Foot_Bottom= +texture { + pigment { + color rgb 0.2 + } + finish { + ambient 0.0 + diffuse 0.3 + specular 0.4 + roughness 0.02 + } +} + +#declare Tex_Dark_Wood= +texture { + pigment { + bozo + color_map { + [0.3 color rgb <0.0,0.0,0.16> ] + [0.5 color rgb <0.0,0.0,0.08> ] + [0.7 color rgb <0.0,0.0,0.0> ] + } + scale <4,1,1>*0.036 + } + finish { + ambient 0.09 + diffuse 0.3 + specular 0.5 + roughness 0.025 + + reflection { + 0.15 + metallic + } + } + normal { + granite 0.1 + scale 0.03 + accuracy 0.007 + } +} + + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "shapes.inc" + +#local Chair_Tube_Rad=0.01; +#local Chair_Tube_Curve_Rad=0.045; +#local Chair_Leg_Angle=7; +#local Chair_Leg_AngleA=4; +#local Chair_Leg_Depth=0.13; + +#local Chair_Plate_Curve_Rad=0.03; +#local Chair_Plate_Thickness=0.008; +#local Chair_Plate_Width=0.48; +#local Chair_Plate_UWidth=0.22; +#local Chair_Plate_Height=0.45; +#local Chair_Plate_UAngle=5; +#local Chair_Plate_Depth=0.26; + +#local Chair_Leg= +union { + + intersection { + torus { Chair_Tube_Curve_Rad, Chair_Tube_Rad } + plane { x, 0 } + plane { -x, 0 rotate (-90+Chair_Leg_Angle)*y } + } + + cylinder { + <-Chair_Tube_Curve_Rad,0,0>, + <-Chair_Tube_Curve_Rad,0,-Chair_Plate_Height+0.01>, Chair_Tube_Rad + rotate Chair_Leg_Angle*y + } + cylinder { + <0,0,Chair_Tube_Curve_Rad>, + , Chair_Tube_Rad + } + + object { Round_Cylinder_Merge ( + <-Chair_Tube_Curve_Rad,0,-Chair_Plate_Height-0.003>, + <-Chair_Tube_Curve_Rad,0,-Chair_Plate_Height+0.025>, Chair_Tube_Rad+0.001, 0.005) + rotate Chair_Leg_Angle*y + texture { Tex_Table_Foot_Bottom } + } + + translate -Chair_Leg_Depth*x + + translate Chair_Plate_Height*cos(radians(Chair_Leg_Angle))*z + +} + +#macro Chair_Back(Rotate) +union { + + intersection { + torus { Chair_Tube_Curve_Rad, Chair_Tube_Rad } + plane { x, 0 } + plane { z, 0 } + + translate <-Chair_Leg_Depth, 0.0,Chair_Tube_Curve_Rad*2> + } + + cylinder { + <-0.08, 0.0,Chair_Tube_Curve_Rad>, + < 0.05, 0.0,Chair_Tube_Curve_Rad>, Chair_Tube_Rad + } + + intersection { + torus { 4, Chair_Tube_Rad } + plane { z, 0.4 } + plane { -z, 0 } + + translate <-4-Chair_Leg_Depth-Chair_Tube_Curve_Rad, 0.0,Chair_Tube_Curve_Rad*2> + } + + translate -Chair_Tube_Curve_Rad*z + + rotate 3*y + rotate Rotate*x + + translate Chair_Tube_Curve_Rad*z + + translate Chair_Plate_Height*cos(radians(Chair_Leg_Angle))*z + + +} +#end + +#local Chair_Base= +union { + + union { + object { Chair_Back(-0.25) translate Chair_Tube_Rad*2*y } + + object { Chair_Leg } + object { Chair_Leg rotate 180*z } + rotate -Chair_Leg_AngleA*x + translate -0.23*y + } + union { + object { Chair_Back( 0.25) translate -Chair_Tube_Rad*2*y } + + object { Chair_Leg } + object { Chair_Leg rotate 180*z } + rotate Chair_Leg_AngleA*x + translate 0.23*y + } + + texture { Tex_Table_Foot } +} + +#local Chair_Plate= +union { + + intersection { + merge { + torus { Chair_Plate_Curve_Rad, Chair_Plate_Thickness translate (Chair_Plate_Width/2)*y } + torus { Chair_Plate_Curve_Rad, Chair_Plate_Thickness translate -(Chair_Plate_Width/2)*y } + + difference { + cylinder { + -(Chair_Plate_Width/2)*y, (Chair_Plate_Width/2)*y, + Chair_Plate_Curve_Rad+Chair_Plate_Thickness + } + cylinder { + -(Chair_Plate_Width/1.8)*y, (Chair_Plate_Width/1.8)*y, + Chair_Plate_Curve_Rad-Chair_Plate_Thickness + } + } + } + + plane { -z, 0 rotate -20*y} + plane { -x, 0 } + } + + + merge { + cylinder { + <0.0, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad> + <0.0, Chair_Plate_Width/2, Chair_Plate_Curve_Rad>, + Chair_Plate_Thickness + } + + sphere { <0.0, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad>, Chair_Plate_Thickness } + sphere { <0.0, Chair_Plate_Width/2, Chair_Plate_Curve_Rad>, Chair_Plate_Thickness } + + rotate 70*y + } + + box { + < 0.00, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad-Chair_Plate_Thickness>, + <-Chair_Plate_Depth, Chair_Plate_Width/2, Chair_Plate_Curve_Rad+Chair_Plate_Thickness> + } + cylinder { + < 0.00, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad> + <-Chair_Plate_Depth, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad>, + Chair_Plate_Thickness + } + cylinder { + < 0.00, Chair_Plate_Width/2, Chair_Plate_Curve_Rad> + <-Chair_Plate_Depth, Chair_Plate_Width/2, Chair_Plate_Curve_Rad>, + Chair_Plate_Thickness + } + + box { + <-Chair_Plate_Depth, -Chair_Plate_Width/2+Chair_Plate_Curve_Rad, + Chair_Plate_Curve_Rad-Chair_Plate_Thickness>, + <-Chair_Plate_Depth-Chair_Plate_Curve_Rad, Chair_Plate_Width/2-Chair_Plate_Curve_Rad, + Chair_Plate_Curve_Rad+Chair_Plate_Thickness> + } + + cylinder { + <-Chair_Plate_Depth, Chair_Plate_Width/2-Chair_Plate_Curve_Rad, + Chair_Plate_Curve_Rad-Chair_Plate_Thickness> + <-Chair_Plate_Depth, Chair_Plate_Width/2-Chair_Plate_Curve_Rad, + Chair_Plate_Curve_Rad+Chair_Plate_Thickness>, + Chair_Plate_Curve_Rad + } + cylinder { + <-Chair_Plate_Depth, -Chair_Plate_Width/2+Chair_Plate_Curve_Rad, + Chair_Plate_Curve_Rad-Chair_Plate_Thickness> + <-Chair_Plate_Depth, -Chair_Plate_Width/2+Chair_Plate_Curve_Rad, + Chair_Plate_Curve_Rad+Chair_Plate_Thickness>, + Chair_Plate_Curve_Rad + } + torus { + Chair_Plate_Curve_Rad, Chair_Plate_Thickness + rotate 90*x + translate <-Chair_Plate_Depth, + -Chair_Plate_Width/2+Chair_Plate_Curve_Rad, Chair_Plate_Curve_Rad> + } + torus { + Chair_Plate_Curve_Rad, Chair_Plate_Thickness + rotate 90*x + translate <-Chair_Plate_Depth, + Chair_Plate_Width/2-Chair_Plate_Curve_Rad, Chair_Plate_Curve_Rad> + } + + translate (Chair_Plate_Height+0.03)*z + translate 0.18*x +} + +#local Chair_Back_Plate= +union { + intersection { + union { + intersection { + difference { + cylinder { <0.0, -0.30, 0.0>, <0.0, 0.30, 0.0>, 4+2*Chair_Plate_Thickness } + cylinder { <0.0, -0.40, 0.0>, <0.0, 0.40, 0.0>, 4 } + } + plane { y, Chair_Plate_UWidth rotate Chair_Plate_UAngle*x } + plane { -y, Chair_Plate_UWidth rotate -Chair_Plate_UAngle*x } + } + + torus { + 4+Chair_Plate_Thickness, Chair_Plate_Thickness + scale <1, 1, 1/cos(radians(Chair_Plate_UAngle))> + rotate Chair_Plate_UAngle*x + translate Chair_Plate_UWidth*y + } + + torus { + 4+Chair_Plate_Thickness, Chair_Plate_Thickness + scale <1, 1, 1/cos(radians(Chair_Plate_UAngle))> + rotate -Chair_Plate_UAngle*x + translate -Chair_Plate_UWidth*y + } + } + + plane { z, 0 rotate -8*y } + plane { -z, 0 rotate -0.2*y } + } + + intersection { + union { + cylinder { + <4+Chair_Plate_Thickness, 0.3, 0.0>, + <4+Chair_Plate_Thickness, -0.3, 0.0>, + Chair_Plate_Thickness + rotate -0.2*y + } + cylinder { + <4+Chair_Plate_Thickness, 0.3, 0.0>, + <4+Chair_Plate_Thickness, -0.3, 0.0>, + Chair_Plate_Thickness + rotate -8*y + } + } + plane { y, Chair_Plate_UWidth rotate Chair_Plate_UAngle*x } + plane { -y, Chair_Plate_UWidth rotate -Chair_Plate_UAngle*x } + } + sphere { + <4+Chair_Plate_Thickness, Chair_Plate_UWidth, 0.0>, + Chair_Plate_Thickness + rotate -0.2*y + } + sphere { + <4+Chair_Plate_Thickness, -Chair_Plate_UWidth, 0.0>, + Chair_Plate_Thickness + rotate -0.2*y + } + + sphere { + <4+Chair_Plate_Thickness, + Chair_Plate_UWidth-4*sin(radians(Chair_Plate_UAngle))*sin(radians(8)), 0.0>, + Chair_Plate_Thickness + rotate -8*y + } + sphere { + <4+Chair_Plate_Thickness, + -Chair_Plate_UWidth+4*sin(radians(Chair_Plate_UAngle))*sin(radians(8)), 0.0>, + Chair_Plate_Thickness + rotate -8*y + } + + + translate <-4-Chair_Leg_Depth-Chair_Tube_Curve_Rad+Chair_Tube_Rad, + 0.0, Chair_Tube_Curve_Rad*2> + + translate -Chair_Tube_Curve_Rad*z + + rotate 3*y + + translate Chair_Tube_Curve_Rad*z + + translate Chair_Plate_Height*cos(radians(Chair_Leg_Angle))*z + +} + + +union { + object { Chair_Back_Plate texture { Tex_Dark_Wood rotate 90*y } } + object { Chair_Plate texture { Tex_Dark_Wood } } + + object { Chair_Base } + scale 0.92 + rotate -60*z + translate <2.68,3.35,0> +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ diff --git a/samples/POV-Ray SDL/cloth.inc b/samples/POV-Ray SDL/cloth.inc new file mode 100755 index 00000000..53e95ae5 --- /dev/null +++ b/samples/POV-Ray SDL/cloth.inc @@ -0,0 +1,12217 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +#if (version < 3.7) + #version 3.5; +#end + +#local nx=90; +#local ny=90; +#local ZP=0.66003; + +#macro ZS(Nbr) + #local Cnt=0; + #while (Cnt, +<-0.36168,-0.34964,0.32452>, +<-0.36685,-0.34249,0.33361>, +<-0.37122,-0.33488,0.34282>, +<-0.37518,-0.32706,0.35207>, +<-0.37935,-0.31939,0.36145>, +<-0.38404,-0.31214,0.37091>, +<-0.38958,-0.30556,0.38035>, +<-0.39618,-0.30007,0.38972>, +<-0.40374,-0.29602,0.39905>, +<-0.41187,-0.29331,0.40832>, +<-0.42017,-0.29123,0.41751>, +<-0.42787,-0.28740,0.42664>, +<-0.43451,-0.28169,0.43565>, +<-0.43902,-0.27389,0.44448>, +<-0.44053,-0.26456,0.45305>, +<-0.43874,-0.25480,0.46126>, +<-0.43422,-0.24574,0.46908>, +<-0.42958,-0.23699,0.47696>, +<-0.42909,-0.22709,0.48490>, +<-0.43330,-0.21774,0.49266>, +<-0.44198,-0.21156,0.49979>, +<-0.45268,-0.20913,0.50633>, +<-0.46379,-0.20937,0.51260>, +<-0.47348,-0.20478,0.51937>, +<-0.47923,-0.19545,0.52581>, +<-0.47799,-0.18406,0.53132>, +<-0.47180,-0.17392,0.53610>, +<-0.46550,-0.16443,0.54096>, +<-0.46576,-0.15265,0.54656>, +<-0.47382,-0.14354,0.55147>, +<-0.48558,-0.14027,0.55515>, +<-0.49547,-0.13422,0.55978>, +<-0.49992,-0.12291,0.56422>, +<-0.49618,-0.11116,0.56725>, +<-0.48742,-0.10196,0.56967>, +<-0.48660,-0.08936,0.57326>, +<-0.49360,-0.07884,0.57589>, +<-0.50537,-0.07381,0.57824>, +<-0.51092,-0.06250,0.58087>, +<-0.50818,-0.05001,0.58201>, +<-0.49857,-0.04125,0.58244>, +<-0.49585,-0.02897,0.58362>, +<-0.49991,-0.01714,0.58411>, +<-0.50878,-0.00811,0.58500>, +<-0.50917,0.00496,0.58493>, +<-0.50100,0.01463,0.58383>, +<-0.49548,0.02603,0.58338>, +<-0.49750,0.03889,0.58227>, +<-0.50716,0.04766,0.58171>, +<-0.51053,0.05988,0.58096>, +<-0.50521,0.07163,0.57825>, +<-0.49371,0.07717,0.57564>, +<-0.48643,0.08741,0.57312>, +<-0.48711,0.10021,0.56953>, +<-0.49587,0.10962,0.56689>, +<-0.49897,0.12189,0.56376>, +<-0.49345,0.13317,0.55935>, +<-0.48310,0.13851,0.55496>, +<-0.47196,0.14338,0.55117>, +<-0.46530,0.15343,0.54635>, +<-0.46665,0.16501,0.54102>, +<-0.47450,0.17393,0.53636>, +<-0.48025,0.18446,0.53164>, +<-0.48041,0.19606,0.52600>, +<-0.47361,0.20474,0.51912>, +<-0.46355,0.20815,0.51218>, +<-0.45236,0.20747,0.50617>, +<-0.44162,0.21032,0.49972>, +<-0.43343,0.21707,0.49262>, +<-0.42989,0.22650,0.48483>, +<-0.43100,0.23616,0.47688>, +<-0.43592,0.24474,0.46926>, +<-0.43998,0.25391,0.46163>, +<-0.44131,0.26365,0.45360>, +<-0.43940,0.27286,0.44510>, +<-0.43452,0.28036,0.43621>, +<-0.42766,0.28572,0.42710>, +<-0.41980,0.28916,0.41798>, +<-0.41135,0.29122,0.40887>, +<-0.40325,0.29439,0.39964>, +<-0.39597,0.29900,0.39029>, +<-0.38976,0.30491,0.38085>, +<-0.38464,0.31181,0.37140>, +<-0.38026,0.31928,0.36195>, +<-0.37639,0.32705,0.35261>, +<-0.37252,0.33490,0.34333>, +<-0.36800,0.34258,0.33412>, +<-0.36256,0.34969,0.32503>, +<-0.35644,0.35623,0.31592> +<-0.34951,-0.36255,0.32437>, +<-0.35616,-0.35667,0.33347>, +<-0.36217,-0.35018,0.34242>, +<-0.36724,-0.34300,0.35158>, +<-0.37135,-0.33528,0.36079>, +<-0.37493,-0.32734,0.37012>, +<-0.37875,-0.31957,0.37952>, +<-0.38332,-0.31225,0.38898>, +<-0.38892,-0.30576,0.39837>, +<-0.39566,-0.30046,0.40774>, +<-0.40332,-0.29654,0.41707>, +<-0.41155,-0.29406,0.42634>, +<-0.41984,-0.29171,0.43558>, +<-0.42752,-0.28755,0.44477>, +<-0.43384,-0.28119,0.45377>, +<-0.43771,-0.27270,0.46250>, +<-0.43849,-0.26305,0.47086>, +<-0.43626,-0.25346,0.47882>, +<-0.43118,-0.24476,0.48650>, +<-0.42872,-0.23532,0.49448>, +<-0.43053,-0.22537,0.50249>, +<-0.43699,-0.21724,0.51004>, +<-0.44664,-0.21267,0.51695>, +<-0.45761,-0.21208,0.52323>, +<-0.46787,-0.20924,0.53001>, +<-0.47545,-0.20104,0.53687>, +<-0.47675,-0.18970,0.54295>, +<-0.47289,-0.17914,0.54830>, +<-0.46580,-0.16986,0.55309>, +<-0.46484,-0.15823,0.55854>, +<-0.47140,-0.14822,0.56338>, +<-0.48206,-0.14310,0.56739>, +<-0.49252,-0.13769,0.57189>, +<-0.49772,-0.12671,0.57641>, +<-0.49530,-0.11471,0.57950>, +<-0.48749,-0.10482,0.58198>, +<-0.48644,-0.09237,0.58557>, +<-0.49302,-0.08196,0.58825>, +<-0.50350,-0.07541,0.59079>, +<-0.50862,-0.06395,0.59347>, +<-0.50716,-0.05131,0.59468>, +<-0.49825,-0.04184,0.59509>, +<-0.49560,-0.02952,0.59642>, +<-0.49957,-0.01796,0.59711>, +<-0.50831,-0.00793,0.59824>, +<-0.50783,0.00469,0.59826>, +<-0.50020,0.01487,0.59715>, +<-0.49605,0.02666,0.59635>, +<-0.49758,0.03948,0.59513>, +<-0.50585,0.04934,0.59452>, +<-0.50824,0.06187,0.59357>, +<-0.50304,0.07327,0.59056>, +<-0.49258,0.08023,0.58806>, +<-0.48645,0.09137,0.58532>, +<-0.48756,0.10360,0.58180>, +<-0.49512,0.11356,0.57919>, +<-0.49676,0.12578,0.57588>, +<-0.49075,0.13636,0.57134>, +<-0.47986,0.14129,0.56728>, +<-0.47009,0.14791,0.56301>, +<-0.46512,0.15882,0.55784>, +<-0.46722,0.17017,0.55245>, +<-0.47505,0.17930,0.54805>, +<-0.47838,0.19036,0.54290>, +<-0.47590,0.20144,0.53690>, +<-0.46778,0.20873,0.53011>, +<-0.45733,0.21038,0.52357>, +<-0.44644,0.21122,0.51737>, +<-0.43674,0.21619,0.51046>, +<-0.43089,0.22472,0.50288>, +<-0.42962,0.23461,0.49482>, +<-0.43269,0.24385,0.48689>, +<-0.43745,0.25266,0.47921>, +<-0.43928,0.26218,0.47122>, +<-0.43811,0.27162,0.46283>, +<-0.43389,0.27980,0.45414>, +<-0.42734,0.28590,0.44514>, +<-0.41956,0.28983,0.43601>, +<-0.41119,0.29195,0.42691>, +<-0.40303,0.29486,0.41769>, +<-0.39551,0.29922,0.40836>, +<-0.38903,0.30504,0.39894>, +<-0.38384,0.31193,0.38952>, +<-0.37968,0.31950,0.38011>, +<-0.37614,0.32737,0.37067>, +<-0.37274,0.33533,0.36132>, +<-0.36853,0.34299,0.35201>, +<-0.36322,0.35010,0.34286>, +<-0.35692,0.35650,0.33392>, +<-0.34999,0.36226,0.32517> +<-0.34261,-0.36819,0.33344>, +<-0.34999,-0.36317,0.34233>, +<-0.35691,-0.35745,0.35134>, +<-0.36285,-0.35089,0.36045>, +<-0.36768,-0.34356,0.36965>, +<-0.37132,-0.33566,0.37897>, +<-0.37430,-0.32757,0.38829>, +<-0.37789,-0.31970,0.39772>, +<-0.38240,-0.31235,0.40708>, +<-0.38819,-0.30587,0.41653>, +<-0.39522,-0.30073,0.42593>, +<-0.40306,-0.29706,0.43530>, +<-0.41157,-0.29511,0.44455>, +<-0.41989,-0.29237,0.45378>, +<-0.42745,-0.28751,0.46289>, +<-0.43338,-0.28039,0.47186>, +<-0.43652,-0.27140,0.48047>, +<-0.43645,-0.26166,0.48866>, +<-0.43369,-0.25232,0.49657>, +<-0.42918,-0.24343,0.50452>, +<-0.42894,-0.23361,0.51260>, +<-0.43291,-0.22414,0.52048>, +<-0.44114,-0.21740,0.52754>, +<-0.45119,-0.21408,0.53434>, +<-0.46216,-0.21313,0.54076>, +<-0.47069,-0.20674,0.54753>, +<-0.47482,-0.19633,0.55383>, +<-0.47303,-0.18494,0.55937>, +<-0.46655,-0.17517,0.56424>, +<-0.46449,-0.16404,0.56984>, +<-0.46955,-0.15341,0.57492>, +<-0.47854,-0.14614,0.57937>, +<-0.48915,-0.14087,0.58374>, +<-0.49505,-0.13057,0.58827>, +<-0.49414,-0.11839,0.59170>, +<-0.48767,-0.10792,0.59446>, +<-0.48676,-0.09573,0.59819>, +<-0.49271,-0.08515,0.60082>, +<-0.50072,-0.07676,0.60323>, +<-0.50605,-0.06558,0.60627>, +<-0.50390,-0.05321,0.60722>, +<-0.49833,-0.04262,0.60817>, +<-0.49911,-0.03043,0.60923>, +<-0.49970,-0.01837,0.60969>, +<-0.50570,-0.00748,0.61113>, +<-0.50550,0.00491,0.61133>, +<-0.50004,0.01559,0.61021>, +<-0.49925,0.02806,0.60906>, +<-0.49839,0.04022,0.60791>, +<-0.50348,0.05149,0.60709>, +<-0.50549,0.06367,0.60583>, +<-0.50052,0.07469,0.60313>, +<-0.49294,0.08381,0.60054>, +<-0.48687,0.09441,0.59780>, +<-0.48811,0.10674,0.59440>, +<-0.49384,0.11744,0.59178>, +<-0.49403,0.12957,0.58870>, +<-0.48777,0.13955,0.58376>, +<-0.47735,0.14504,0.57932>, +<-0.46857,0.15297,0.57461>, +<-0.46506,0.16416,0.56962>, +<-0.46802,0.17507,0.56412>, +<-0.47457,0.18458,0.55944>, +<-0.47593,0.19613,0.55392>, +<-0.47114,0.20616,0.54762>, +<-0.46212,0.21205,0.54065>, +<-0.45105,0.21251,0.53462>, +<-0.44100,0.21610,0.52796>, +<-0.43299,0.22317,0.52069>, +<-0.42947,0.23270,0.51285>, +<-0.43016,0.24258,0.50482>, +<-0.43502,0.25152,0.49701>, +<-0.43738,0.26094,0.48898>, +<-0.43697,0.27062,0.48079>, +<-0.43342,0.27929,0.47210>, +<-0.42735,0.28603,0.46332>, +<-0.41968,0.29054,0.45416>, +<-0.41123,0.29303,0.44510>, +<-0.40283,0.29544,0.43586>, +<-0.39512,0.29954,0.42649>, +<-0.38838,0.30511,0.41705>, +<-0.38301,0.31195,0.40760>, +<-0.37888,0.31956,0.39823>, +<-0.37569,0.32757,0.38884>, +<-0.37286,0.33581,0.37947>, +<-0.36906,0.34362,0.37012>, +<-0.36398,0.35086,0.36085>, +<-0.35773,0.35728,0.35181>, +<-0.35060,0.36276,0.34299>, +<-0.34300,0.36758,0.33433> +<-0.33512,-0.37291,0.34274>, +<-0.34307,-0.36875,0.35143>, +<-0.35075,-0.36391,0.36039>, +<-0.35762,-0.35821,0.36947>, +<-0.36345,-0.35150,0.37862>, +<-0.36804,-0.34399,0.38793>, +<-0.37130,-0.33596,0.39728>, +<-0.37398,-0.32773,0.40673>, +<-0.37734,-0.31980,0.41617>, +<-0.38190,-0.31239,0.42559>, +<-0.38785,-0.30598,0.43500>, +<-0.39507,-0.30098,0.44441>, +<-0.40310,-0.29753,0.45376>, +<-0.41171,-0.29555,0.46302>, +<-0.41998,-0.29227,0.47214>, +<-0.42730,-0.28684,0.48116>, +<-0.43265,-0.27918,0.49005>, +<-0.43500,-0.26993,0.49849>, +<-0.43458,-0.26024,0.50672>, +<-0.43133,-0.25103,0.51467>, +<-0.42878,-0.24164,0.52270>, +<-0.43030,-0.23180,0.53073>, +<-0.43620,-0.22318,0.53822>, +<-0.44535,-0.21761,0.54516>, +<-0.45603,-0.21582,0.55156>, +<-0.46540,-0.21132,0.55836>, +<-0.47150,-0.20236,0.56486>, +<-0.47213,-0.19092,0.57077>, +<-0.46801,-0.18031,0.57589>, +<-0.46492,-0.16960,0.58145>, +<-0.46839,-0.15875,0.58699>, +<-0.47571,-0.14994,0.59158>, +<-0.48568,-0.14380,0.59596>, +<-0.49176,-0.13401,0.60062>, +<-0.49228,-0.12212,0.60420>, +<-0.48767,-0.11098,0.60713>, +<-0.49001,-0.09966,0.61069>, +<-0.49217,-0.08821,0.61352>, +<-0.49897,-0.07872,0.61652>, +<-0.50307,-0.06720,0.61914>, +<-0.50192,-0.05495,0.62052>, +<-0.49817,-0.04339,0.62116>, +<-0.49904,-0.03132,0.62245>, +<-0.49963,-0.01942,0.62313>, +<-0.50295,-0.00757,0.62359>, +<-0.50341,0.00465,0.62328>, +<-0.49998,0.01627,0.62218>, +<-0.49918,0.02890,0.62208>, +<-0.49852,0.04114,0.62081>, +<-0.50117,0.05310,0.62000>, +<-0.50216,0.06529,0.61862>, +<-0.49776,0.07642,0.61594>, +<-0.49242,0.08679,0.61323>, +<-0.49029,0.09827,0.61038>, +<-0.48829,0.10945,0.60656>, +<-0.49185,0.12070,0.60345>, +<-0.49116,0.13260,0.59979>, +<-0.48414,0.14236,0.59485>, +<-0.47498,0.14909,0.59100>, +<-0.46766,0.15835,0.58656>, +<-0.46545,0.16965,0.58137>, +<-0.46976,0.18012,0.57638>, +<-0.47337,0.19069,0.57140>, +<-0.47231,0.20186,0.56568>, +<-0.46553,0.21044,0.55901>, +<-0.45570,0.21443,0.55214>, +<-0.44516,0.21641,0.54563>, +<-0.43625,0.22227,0.53857>, +<-0.43073,0.23098,0.53104>, +<-0.42948,0.24076,0.52301>, +<-0.43256,0.25006,0.51513>, +<-0.43559,0.25945,0.50714>, +<-0.43575,0.26924,0.49895>, +<-0.43286,0.27839,0.49030>, +<-0.42711,0.28562,0.48149>, +<-0.41973,0.29068,0.47253>, +<-0.41139,0.29357,0.46336>, +<-0.40290,0.29585,0.45423>, +<-0.39505,0.29979,0.44488>, +<-0.38809,0.30522,0.43545>, +<-0.38253,0.31205,0.42601>, +<-0.37837,0.31971,0.41660>, +<-0.37535,0.32789,0.40722>, +<-0.37290,0.33619,0.39777>, +<-0.36944,0.34422,0.38838>, +<-0.36465,0.35157,0.37903>, +<-0.35855,0.35807,0.36988>, +<-0.35139,0.36355,0.36096>, +<-0.34358,0.36805,0.35220>, +<-0.33543,0.37201,0.34358> +<-0.32728,-0.37687,0.35198>, +<-0.33557,-0.37325,0.36075>, +<-0.34379,-0.36928,0.36963>, +<-0.35146,-0.36458,0.37861>, +<-0.35834,-0.35881,0.38772>, +<-0.36399,-0.35196,0.39702>, +<-0.36826,-0.34433,0.40643>, +<-0.37122,-0.33622,0.41588>, +<-0.37365,-0.32794,0.42539>, +<-0.37698,-0.31993,0.43481>, +<-0.38158,-0.31250,0.44426>, +<-0.38773,-0.30613,0.45374>, +<-0.39511,-0.30125,0.46311>, +<-0.40327,-0.29794,0.47244>, +<-0.41187,-0.29572,0.48161>, +<-0.41992,-0.29192,0.49074>, +<-0.42680,-0.28586,0.49978>, +<-0.43155,-0.27783,0.50855>, +<-0.43340,-0.26841,0.51692>, +<-0.43289,-0.25874,0.52505>, +<-0.42990,-0.24938,0.53310>, +<-0.42938,-0.23972,0.54111>, +<-0.43278,-0.23030,0.54887>, +<-0.44008,-0.22275,0.55610>, +<-0.44943,-0.21815,0.56289>, +<-0.45959,-0.21486,0.56970>, +<-0.46713,-0.20748,0.57648>, +<-0.46975,-0.19661,0.58254>, +<-0.46868,-0.18556,0.58789>, +<-0.46551,-0.17475,0.59334>, +<-0.46777,-0.16401,0.59895>, +<-0.47524,-0.15545,0.60359>, +<-0.48160,-0.14664,0.60830>, +<-0.48819,-0.13744,0.61308>, +<-0.48955,-0.12583,0.61673>, +<-0.48769,-0.11412,0.61988>, +<-0.48937,-0.10262,0.62355>, +<-0.49165,-0.09106,0.62656>, +<-0.49498,-0.07998,0.62922>, +<-0.49804,-0.06868,0.63165>, +<-0.49678,-0.05687,0.63279>, +<-0.49805,-0.04438,0.63452>, +<-0.49900,-0.03229,0.63572>, +<-0.49964,-0.02002,0.63617>, +<-0.49997,-0.00761,0.63642>, +<-0.49999,0.00504,0.63623>, +<-0.49972,0.01746,0.63585>, +<-0.49914,0.02987,0.63526>, +<-0.49824,0.04216,0.63430>, +<-0.49704,0.05433,0.63288>, +<-0.49726,0.06649,0.63117>, +<-0.49456,0.07809,0.62870>, +<-0.49191,0.08962,0.62627>, +<-0.48966,0.10123,0.62323>, +<-0.48858,0.11276,0.61936>, +<-0.48925,0.12393,0.61591>, +<-0.48731,0.13563,0.61191>, +<-0.48060,0.14553,0.60724>, +<-0.47539,0.15501,0.60327>, +<-0.46748,0.16362,0.59874>, +<-0.46614,0.17470,0.59324>, +<-0.47010,0.18544,0.58830>, +<-0.47086,0.19670,0.58293>, +<-0.46740,0.20722,0.57712>, +<-0.45966,0.21413,0.57031>, +<-0.44939,0.21670,0.56346>, +<-0.44027,0.22170,0.55655>, +<-0.43311,0.22931,0.54922>, +<-0.42991,0.23887,0.54161>, +<-0.43089,0.24857,0.53346>, +<-0.43387,0.25782,0.52553>, +<-0.43428,0.26750,0.51732>, +<-0.43213,0.27696,0.50886>, +<-0.42693,0.28486,0.49990>, +<-0.41979,0.29049,0.49097>, +<-0.41160,0.29388,0.48185>, +<-0.40306,0.29631,0.47269>, +<-0.39506,0.30012,0.46347>, +<-0.38797,0.30542,0.45408>, +<-0.38225,0.31216,0.44460>, +<-0.37804,0.31989,0.43508>, +<-0.37511,0.32800,0.42570>, +<-0.37283,0.33642,0.41628>, +<-0.36970,0.34451,0.40683>, +<-0.36517,0.35211,0.39748>, +<-0.35926,0.35878,0.38820>, +<-0.35211,0.36426,0.37915>, +<-0.34420,0.36869,0.37026>, +<-0.33595,0.37227,0.36152>, +<-0.32759,0.37569,0.35283> +<-0.31944,-0.38059,0.36139>, +<-0.32767,-0.37680,0.37009>, +<-0.33616,-0.37349,0.37897>, +<-0.34436,-0.36975,0.38787>, +<-0.35210,-0.36508,0.39696>, +<-0.35885,-0.35926,0.40623>, +<-0.36430,-0.35228,0.41566>, +<-0.36834,-0.34457,0.42510>, +<-0.37111,-0.33637,0.43466>, +<-0.37346,-0.32803,0.44413>, +<-0.37678,-0.31999,0.45357>, +<-0.38155,-0.31251,0.46313>, +<-0.38782,-0.30630,0.47258>, +<-0.39530,-0.30156,0.48195>, +<-0.40354,-0.29820,0.49120>, +<-0.41202,-0.29552,0.50032>, +<-0.41982,-0.29104,0.50947>, +<-0.42620,-0.28453,0.51850>, +<-0.43033,-0.27615,0.52718>, +<-0.43199,-0.26671,0.53553>, +<-0.43151,-0.25709,0.54357>, +<-0.42961,-0.24747,0.55160>, +<-0.43097,-0.23786,0.55946>, +<-0.43621,-0.22911,0.56707>, +<-0.44403,-0.22246,0.57391>, +<-0.45340,-0.21803,0.58053>, +<-0.46165,-0.21181,0.58753>, +<-0.46631,-0.20182,0.59395>, +<-0.46698,-0.19066,0.59966>, +<-0.46632,-0.18044,0.60555>, +<-0.47011,-0.17039,0.61095>, +<-0.47368,-0.16015,0.61598>, +<-0.47807,-0.15001,0.62072>, +<-0.48348,-0.14020,0.62552>, +<-0.48513,-0.12888,0.62946>, +<-0.48604,-0.11736,0.63289>, +<-0.48868,-0.10585,0.63620>, +<-0.49108,-0.09405,0.63907>, +<-0.49338,-0.08213,0.64161>, +<-0.49508,-0.07000,0.64416>, +<-0.49570,-0.05812,0.64582>, +<-0.49799,-0.04567,0.64752>, +<-0.49547,-0.03807,0.65000>, +<-0.49974,-0.02057,0.64931>, +<-0.50010,-0.00779,0.64950>, +<-0.50011,0.00525,0.64938>, +<-0.49980,0.01800,0.64897>, +<-0.49916,0.03069,0.64825>, +<-0.49818,0.04328,0.64717>, +<-0.49690,0.05578,0.64570>, +<-0.49533,0.06821,0.64377>, +<-0.49370,0.08053,0.64134>, +<-0.49135,0.09261,0.63880>, +<-0.48898,0.10449,0.63593>, +<-0.48648,0.11559,0.63249>, +<-0.48455,0.12688,0.62886>, +<-0.48232,0.13815,0.62461>, +<-0.47751,0.14887,0.62014>, +<-0.47388,0.15956,0.61564>, +<-0.47032,0.16979,0.61092>, +<-0.46643,0.18016,0.60584>, +<-0.46840,0.19125,0.60053>, +<-0.46700,0.20186,0.59495>, +<-0.46205,0.21119,0.58844>, +<-0.45356,0.21692,0.58132>, +<-0.44430,0.22127,0.57473>, +<-0.43658,0.22817,0.56740>, +<-0.43142,0.23695,0.55987>, +<-0.43042,0.24661,0.55198>, +<-0.43246,0.25614,0.54397>, +<-0.43281,0.26578,0.53587>, +<-0.43107,0.27522,0.52755>, +<-0.42657,0.28359,0.51879>, +<-0.41978,0.28989,0.50966>, +<-0.41179,0.29396,0.50053>, +<-0.40334,0.29666,0.49133>, +<-0.39532,0.30039,0.48214>, +<-0.38809,0.30562,0.47281>, +<-0.38222,0.31223,0.46336>, +<-0.37791,0.31991,0.45387>, +<-0.37488,0.32820,0.44433>, +<-0.37269,0.33658,0.43495>, +<-0.36972,0.34478,0.42547>, +<-0.36546,0.35238,0.41606>, +<-0.35976,0.35917,0.40673>, +<-0.35271,0.36477,0.39751>, +<-0.34481,0.36913,0.38854>, +<-0.33639,0.37255,0.37965>, +<-0.32791,0.37562,0.37089>, +<-0.31970,0.37926,0.36216> +<-0.31193,-0.38467,0.37085>, +<-0.31982,-0.38014,0.37948>, +<-0.32812,-0.37651,0.38827>, +<-0.33663,-0.37360,0.39721>, +<-0.34486,-0.37003,0.40634>, +<-0.35247,-0.36542,0.41559>, +<-0.35912,-0.35951,0.42498>, +<-0.36438,-0.35251,0.43438>, +<-0.36829,-0.34471,0.44397>, +<-0.37095,-0.33649,0.45357>, +<-0.37332,-0.32814,0.46303>, +<-0.37682,-0.32001,0.47263>, +<-0.38171,-0.31273,0.48217>, +<-0.38813,-0.30666,0.49162>, +<-0.39574,-0.30189,0.50104>, +<-0.40389,-0.29836,0.51022>, +<-0.41208,-0.29505,0.51935>, +<-0.41941,-0.28995,0.52848>, +<-0.42528,-0.28292,0.53748>, +<-0.42901,-0.27436,0.54607>, +<-0.43064,-0.26491,0.55430>, +<-0.43057,-0.25519,0.56235>, +<-0.43060,-0.24564,0.57031>, +<-0.43382,-0.23644,0.57824>, +<-0.44009,-0.22847,0.58541>, +<-0.44768,-0.22193,0.59193>, +<-0.45573,-0.21548,0.59873>, +<-0.46129,-0.20670,0.60562>, +<-0.46406,-0.19639,0.61173>, +<-0.46535,-0.18531,0.61752>, +<-0.46832,-0.17520,0.62348>, +<-0.47205,-0.16491,0.62860>, +<-0.47561,-0.15429,0.63332>, +<-0.47918,-0.14345,0.63764>, +<-0.48222,-0.13217,0.64168>, +<-0.48528,-0.12059,0.64552>, +<-0.48816,-0.10875,0.64905>, +<-0.49046,-0.09663,0.65269>, +<-0.49114,-0.08409,0.65612>, +<-0.49066,-0.07126,0.65851>, +<-0.48965,-0.05870,0.65975>, +<-0.48898,-0.04581,0.66014>, +<-0.48896,-0.03290,0.66019>, +<-0.48919,-0.02023,0.66019>, +<-0.48936,-0.00753,0.66019>, +<-0.48948,0.00537,0.66018>, +<-0.48959,0.01813,0.66019>, +<-0.48984,0.03092,0.66018>, +<-0.49029,0.04375,ZP>, +<-0.49093,0.05665,0.65939>, +<-0.49161,0.06961,0.65799>, +<-0.49181,0.08251,0.65554>, +<-0.49085,0.09518,0.65221>, +<-0.48845,0.10742,0.64873>, +<-0.48561,0.11928,0.64526>, +<-0.48261,0.13076,0.64137>, +<-0.47937,0.14226,0.63656>, +<-0.47591,0.15338,0.63304>, +<-0.47234,0.16407,0.62844>, +<-0.46860,0.17444,0.62347>, +<-0.46625,0.18520,0.61812>, +<-0.46513,0.19620,0.61269>, +<-0.46213,0.20645,0.60688>, +<-0.45612,0.21477,0.60006>, +<-0.44800,0.22092,0.59290>, +<-0.44044,0.22758,0.58602>, +<-0.43433,0.23564,0.57858>, +<-0.43135,0.24466,0.57063>, +<-0.43151,0.25414,0.56266>, +<-0.43148,0.26380,0.55456>, +<-0.42976,0.27336,0.54629>, +<-0.42593,0.28193,0.53763>, +<-0.41975,0.28875,0.52860>, +<-0.41213,0.29354,0.51940>, +<-0.40375,0.29686,0.51027>, +<-0.39566,0.30074,0.50109>, +<-0.38834,0.30592,0.49181>, +<-0.38233,0.31244,0.48234>, +<-0.37790,0.31996,0.47280>, +<-0.37484,0.32806,0.46327>, +<-0.37255,0.33652,0.45377>, +<-0.36969,0.34475,0.44440>, +<-0.36551,0.35253,0.43488>, +<-0.35995,0.35939,0.42547>, +<-0.35308,0.36502,0.41615>, +<-0.34520,0.36939,0.40698>, +<-0.33685,0.37264,0.39800>, +<-0.32815,0.37522,0.38906>, +<-0.31986,0.37882,0.38029>, +<-0.31202,0.38330,0.37156> +<-0.30487,-0.38940,0.38033>, +<-0.31217,-0.38402,0.38890>, +<-0.32003,-0.37941,0.39770>, +<-0.32843,-0.37627,0.40667>, +<-0.33695,-0.37364,0.41583>, +<-0.34507,-0.37022,0.42505>, +<-0.35264,-0.36560,0.43445>, +<-0.35913,-0.35971,0.44387>, +<-0.36434,-0.35260,0.45347>, +<-0.36814,-0.34477,0.46310>, +<-0.37081,-0.33652,0.47256>, +<-0.37340,-0.32810,0.48220>, +<-0.37704,-0.32021,0.49187>, +<-0.38215,-0.31306,0.50140>, +<-0.38874,-0.30702,0.51085>, +<-0.39630,-0.30219,0.52021>, +<-0.40420,-0.29836,0.52941>, +<-0.41196,-0.29428,0.53860>, +<-0.41885,-0.28849,0.54776>, +<-0.42415,-0.28111,0.55658>, +<-0.42757,-0.27235,0.56503>, +<-0.42952,-0.26278,0.57330>, +<-0.43053,-0.25325,0.58133>, +<-0.43263,-0.24384,0.58930>, +<-0.43724,-0.23519,0.59686>, +<-0.44490,-0.22823,0.60407>, +<-0.45040,-0.21970,0.61035>, +<-0.45563,-0.21098,0.61733>, +<-0.45915,-0.20089,0.62353>, +<-0.46247,-0.19014,0.62959>, +<-0.46640,-0.18024,0.63556>, +<-0.47035,-0.16971,0.64072>, +<-0.47423,-0.15868,0.64568>, +<-0.47802,-0.14731,0.65053>, +<-0.47989,-0.13516,0.65581>, +<-0.47905,-0.12225,0.65935>, +<-0.47762,-0.10922,0.66021>, +<-0.47707,-0.09643,0.66009>, +<-0.47658,-0.08380,ZP>, +<-0.47617,-0.07110,ZP>, +<-0.47550,-0.05853,0.66008>, +<-0.47542,-0.04559,ZP>, +<-0.47567,-0.03261,ZP>, +<-0.47599,-0.01988,ZP>, +<-0.47619,-0.00722,ZP>, +<-0.47630,0.00553,ZP>, +<-0.47637,0.01826,ZP>, +<-0.47645,0.03102,ZP>, +<-0.47658,0.04382,ZP>, +<-0.47681,0.05665,ZP>, +<-0.47711,0.06947,ZP>, +<-0.47743,0.08226,ZP>, +<-0.47778,0.09507,0.66011>, +<-0.47822,0.10798,0.66024>, +<-0.47954,0.12114,0.65932>, +<-0.48039,0.13420,0.65562>, +<-0.47423,0.14634,0.65034>, +<-0.47463,0.15756,0.64558>, +<-0.47072,0.16870,0.64073>, +<-0.46679,0.17931,0.63557>, +<-0.46280,0.18946,0.62975>, +<-0.46054,0.20014,0.62408>, +<-0.45696,0.21031,0.61802>, +<-0.45072,0.21858,0.61144>, +<-0.44534,0.22738,0.60439>, +<-0.43768,0.23448,0.59757>, +<-0.43321,0.24304,0.58974>, +<-0.43140,0.25231,0.58156>, +<-0.43038,0.26166,0.57338>, +<-0.42840,0.27113,0.56527>, +<-0.42480,0.28005,0.55669>, +<-0.41925,0.28738,0.54781>, +<-0.41216,0.29288,0.53870>, +<-0.40419,0.29690,0.52945>, +<-0.39631,0.30100,0.52022>, +<-0.38896,0.30617,0.51092>, +<-0.38273,0.31258,0.50158>, +<-0.37804,0.32002,0.49211>, +<-0.37478,0.32807,0.48253>, +<-0.37239,0.33643,0.47293>, +<-0.36953,0.34470,0.46340>, +<-0.36548,0.35246,0.45397>, +<-0.35999,0.35943,0.44444>, +<-0.35322,0.36511,0.43499>, +<-0.34551,0.36944,0.42567>, +<-0.33715,0.37260,0.41647>, +<-0.32855,0.37496,0.40745>, +<-0.31999,0.37798,0.39846>, +<-0.31208,0.38259,0.38969>, +<-0.30480,0.38814,0.38100> +<-0.29858,-0.39519,0.38977>, +<-0.30503,-0.38876,0.39832>, +<-0.31225,-0.38314,0.40710>, +<-0.32023,-0.37891,0.41612>, +<-0.32864,-0.37605,0.42530>, +<-0.33709,-0.37361,0.43449>, +<-0.34525,-0.37021,0.44390>, +<-0.35270,-0.36561,0.45342>, +<-0.35912,-0.35962,0.46303>, +<-0.36420,-0.35249,0.47273>, +<-0.36796,-0.34463,0.48229>, +<-0.37078,-0.33634,0.49195>, +<-0.37362,-0.32814,0.50164>, +<-0.37756,-0.32039,0.51121>, +<-0.38290,-0.31341,0.52071>, +<-0.38958,-0.30742,0.53024>, +<-0.39691,-0.30250,0.53958>, +<-0.40446,-0.29816,0.54882>, +<-0.41173,-0.29317,0.55807>, +<-0.41797,-0.28675,0.56712>, +<-0.42286,-0.27885,0.57587>, +<-0.42631,-0.26981,0.58428>, +<-0.42873,-0.26052,0.59236>, +<-0.43215,-0.25152,0.60053>, +<-0.43697,-0.24308,0.60818>, +<-0.44177,-0.23424,0.61565>, +<-0.44657,-0.22492,0.62255>, +<-0.45173,-0.21437,0.62884>, +<-0.45603,-0.20511,0.63477>, +<-0.46011,-0.19582,0.64202>, +<-0.46462,-0.18520,0.64785>, +<-0.46822,-0.17383,0.65431>, +<-0.46738,-0.16076,0.65947>, +<-0.46582,-0.14751,0.66019>, +<-0.46519,-0.13460,0.66007>, +<-0.46474,-0.12182,ZP>, +<-0.46441,-0.10907,ZP>, +<-0.46417,-0.09639,ZP>, +<-0.46393,-0.08381,ZP>, +<-0.46366,-0.07118,ZP>, +<-0.46337,-0.05837,ZP>, +<-0.46318,-0.04549,ZP>, +<-0.46310,-0.03262,ZP>, +<-0.46313,-0.01977,ZP>, +<-0.46323,-0.00700,ZP>, +<-0.46336,0.00574,ZP>, +<-0.46351,0.01851,ZP>, +<-0.46370,0.03132,ZP>, +<-0.46396,0.04414,ZP>, +<-0.46426,0.05695,ZP>, +<-0.46454,0.06970,ZP>, +<-0.46473,0.08238,ZP>, +<-0.46484,0.09507,ZP>, +<-0.46497,0.10785,ZP>, +<-0.46512,0.12061,ZP>, +<-0.46543,0.13347,0.66012>, +<-0.46597,0.14643,0.66028>, +<-0.46768,0.15969,0.65958>, +<-0.46861,0.17279,0.65439>, +<-0.46496,0.18439,0.64801>, +<-0.46055,0.19486,0.64220>, +<-0.45612,0.20487,0.63608>, +<-0.45167,0.21451,0.62958>, +<-0.44692,0.22426,0.62343>, +<-0.44229,0.23330,0.61633>, +<-0.43758,0.24205,0.60874>, +<-0.43264,0.25067,0.60072>, +<-0.42949,0.25948,0.59262>, +<-0.42697,0.26882,0.58433>, +<-0.42357,0.27772,0.57604>, +<-0.41857,0.28550,0.56721>, +<-0.41209,0.29182,0.55812>, +<-0.40465,0.29669,0.54895>, +<-0.39703,0.30128,0.53960>, +<-0.38981,0.30649,0.53030>, +<-0.38342,0.31281,0.52093>, +<-0.37842,0.32008,0.51153>, +<-0.37483,0.32803,0.50200>, +<-0.37220,0.33628,0.49237>, +<-0.36932,0.34446,0.48276>, +<-0.36533,0.35226,0.47313>, +<-0.36001,0.35922,0.46359>, +<-0.35328,0.36502,0.45402>, +<-0.34561,0.36941,0.44451>, +<-0.33740,0.37249,0.43516>, +<-0.32880,0.37472,0.42587>, +<-0.32031,0.37749,0.41681>, +<-0.31219,0.38167,0.40785>, +<-0.30492,0.38740,0.39916>, +<-0.29852,0.39412,0.39046> +<-0.29348,-0.40212,0.39912>, +<-0.29880,-0.39471,0.40772>, +<-0.30508,-0.38798,0.41650>, +<-0.31236,-0.38257,0.42551>, +<-0.32035,-0.37859,0.43469>, +<-0.32872,-0.37591,0.44394>, +<-0.33714,-0.37351,0.45342>, +<-0.34515,-0.37019,0.46301>, +<-0.35250,-0.36552,0.47262>, +<-0.35884,-0.35944,0.48237>, +<-0.36388,-0.35225,0.49209>, +<-0.36771,-0.34439,0.50180>, +<-0.37076,-0.33623,0.51155>, +<-0.37399,-0.32820,0.52122>, +<-0.37825,-0.32072,0.53085>, +<-0.38385,-0.31390,0.54050>, +<-0.39046,-0.30797,0.55000>, +<-0.39756,-0.30271,0.55926>, +<-0.40471,-0.29754,0.56847>, +<-0.41140,-0.29156,0.57769>, +<-0.41705,-0.28438,0.58662>, +<-0.42157,-0.27610,0.59526>, +<-0.42522,-0.26720,0.60358>, +<-0.42882,-0.25803,0.61172>, +<-0.43352,-0.24917,0.61990>, +<-0.43851,-0.24030,0.62746>, +<-0.44349,-0.23098,0.63425>, +<-0.44845,-0.22126,0.64144>, +<-0.45198,-0.20979,0.64438>, +<-0.45676,-0.20021,0.65595>, +<-0.45455,-0.18638,0.66033>, +<-0.45365,-0.17321,0.66013>, +<-0.45310,-0.16020,ZP>, +<-0.45271,-0.14743,ZP>, +<-0.45234,-0.13472,ZP>, +<-0.45197,-0.12207,ZP>, +<-0.45152,-0.10936,ZP>, +<-0.45105,-0.09656,ZP>, +<-0.45067,-0.08378,ZP>, +<-0.45041,-0.07099,ZP>, +<-0.45025,-0.05817,ZP>, +<-0.45017,-0.04532,ZP>, +<-0.45015,-0.03247,ZP>, +<-0.45017,-0.01965,ZP>, +<-0.45025,-0.00687,ZP>, +<-0.45035,0.00589,ZP>, +<-0.45048,0.01865,ZP>, +<-0.45063,0.03143,ZP>, +<-0.45080,0.04421,ZP>, +<-0.45099,0.05699,ZP>, +<-0.45118,0.06975,ZP>, +<-0.45140,0.08253,ZP>, +<-0.45169,0.09534,ZP>, +<-0.45205,0.10818,ZP>, +<-0.45227,0.12085,ZP>, +<-0.45251,0.13361,ZP>, +<-0.45281,0.14647,0.66008>, +<-0.45325,0.15936,0.66009>, +<-0.45388,0.17235,0.66015>, +<-0.45472,0.18560,0.66030>, +<-0.45687,0.19945,0.65618>, +<-0.44697,0.21331,0.65000>, +<-0.44894,0.22039,0.64059>, +<-0.44397,0.23014,0.63521>, +<-0.43914,0.23923,0.62801>, +<-0.43414,0.24815,0.62027>, +<-0.42946,0.25718,0.61210>, +<-0.42591,0.26612,0.60381>, +<-0.42220,0.27498,0.59532>, +<-0.41763,0.28314,0.58668>, +<-0.41175,0.29036,0.57764>, +<-0.40495,0.29627,0.56854>, +<-0.39779,0.30152,0.55944>, +<-0.39074,0.30701,0.55003>, +<-0.38440,0.31313,0.54062>, +<-0.37910,0.32018,0.53110>, +<-0.37508,0.32788,0.52154>, +<-0.37200,0.33607,0.51191>, +<-0.36892,0.34426,0.50230>, +<-0.36496,0.35203,0.49265>, +<-0.35972,0.35905,0.48286>, +<-0.35323,0.36482,0.47325>, +<-0.34564,0.36928,0.46361>, +<-0.33748,0.37239,0.45408>, +<-0.32904,0.37453,0.44469>, +<-0.32057,0.37717,0.43533>, +<-0.31248,0.38118,0.42622>, +<-0.30508,0.38664,0.41727>, +<-0.29886,0.39352,0.40858>, +<-0.29364,0.40125,0.39986> +<-0.28986,-0.41003,0.40835>, +<-0.29396,-0.40187,0.41702>, +<-0.29898,-0.39423,0.42587>, +<-0.30514,-0.38756,0.43487>, +<-0.31238,-0.38228,0.44408>, +<-0.32033,-0.37845,0.45340>, +<-0.32865,-0.37583,0.46295>, +<-0.33695,-0.37345,0.47257>, +<-0.34489,-0.37000,0.48220>, +<-0.35223,-0.36513,0.49204>, +<-0.35847,-0.35894,0.50188>, +<-0.36342,-0.35179,0.51165>, +<-0.36738,-0.34401,0.52148>, +<-0.37081,-0.33601,0.53128>, +<-0.37454,-0.32827,0.54102>, +<-0.37926,-0.32097,0.55074>, +<-0.38506,-0.31440,0.56040>, +<-0.39151,-0.30841,0.56984>, +<-0.39819,-0.30267,0.57912>, +<-0.40478,-0.29657,0.58843>, +<-0.41085,-0.28965,0.59748>, +<-0.41619,-0.28189,0.60622>, +<-0.42090,-0.27324,0.61489>, +<-0.42461,-0.26402,0.62313>, +<-0.42994,-0.25533,0.63119>, +<-0.43524,-0.24627,0.63882>, +<-0.43089,-0.24321,0.65079>, +<-0.44502,-0.22663,0.65483>, +<-0.44230,-0.21242,0.66048>, +<-0.44145,-0.19901,0.66019>, +<-0.44092,-0.18589,0.66008>, +<-0.44062,-0.17323,ZP>, +<-0.44018,-0.16044,ZP>, +<-0.43970,-0.14771,ZP>, +<-0.43914,-0.13483,ZP>, +<-0.43869,-0.12199,ZP>, +<-0.43834,-0.10920,ZP>, +<-0.43804,-0.09643,ZP>, +<-0.43780,-0.08364,ZP>, +<-0.43761,-0.07084,ZP>, +<-0.43748,-0.05803,ZP>, +<-0.43739,-0.04521,ZP>, +<-0.43734,-0.03239,ZP>, +<-0.43733,-0.01957,ZP>, +<-0.43737,-0.00677,ZP>, +<-0.43745,0.00601,ZP>, +<-0.43757,0.01878,ZP>, +<-0.43771,0.03156,ZP>, +<-0.43788,0.04432,ZP>, +<-0.43804,0.05708,ZP>, +<-0.43822,0.06983,ZP>, +<-0.43840,0.08259,ZP>, +<-0.43859,0.09535,ZP>, +<-0.43880,0.10812,ZP>, +<-0.43904,0.12096,ZP>, +<-0.43942,0.13388,ZP>, +<-0.43993,0.14685,ZP>, +<-0.44038,0.15967,ZP>, +<-0.44080,0.17249,ZP>, +<-0.44110,0.18520,ZP>, +<-0.44161,0.19823,0.66014>, +<-0.44223,0.21058,0.66026>, +<-0.44499,0.22556,0.65552>, +<-0.44101,0.22268,0.65000>, +<-0.43576,0.24548,0.63883>, +<-0.43050,0.25447,0.63139>, +<-0.42523,0.26302,0.62332>, +<-0.42162,0.27226,0.61514>, +<-0.41667,0.28099,0.60636>, +<-0.41136,0.28845,0.59752>, +<-0.40532,0.29529,0.58833>, +<-0.39871,0.30147,0.57915>, +<-0.39200,0.30738,0.57000>, +<-0.38552,0.31369,0.56052>, +<-0.37992,0.32046,0.55099>, +<-0.37543,0.32793,0.54136>, +<-0.37188,0.33576,0.53167>, +<-0.36850,0.34381,0.52190>, +<-0.36446,0.35160,0.51219>, +<-0.35932,0.35863,0.50244>, +<-0.35289,0.36459,0.49255>, +<-0.34551,0.36909,0.48291>, +<-0.33740,0.37229,0.47322>, +<-0.32902,0.37448,0.46365>, +<-0.32073,0.37704,0.45420>, +<-0.31267,0.38091,0.44479>, +<-0.30537,0.38627,0.43564>, +<-0.29922,0.39307,0.42662>, +<-0.29430,0.40085,0.41792>, +<-0.29047,0.40932,0.40913> +<-0.28770,-0.41850,0.41745>, +<-0.29057,-0.40992,0.42630>, +<-0.29437,-0.40167,0.43520>, +<-0.29918,-0.39407,0.44424>, +<-0.30521,-0.38748,0.45347>, +<-0.31239,-0.38226,0.46285>, +<-0.32033,-0.37847,0.47239>, +<-0.32858,-0.37580,0.48204>, +<-0.33679,-0.37324,0.49178>, +<-0.34465,-0.36955,0.50167>, +<-0.35175,-0.36455,0.51162>, +<-0.35775,-0.35837,0.52155>, +<-0.36275,-0.35119,0.53154>, +<-0.36695,-0.34353,0.54144>, +<-0.37087,-0.33578,0.55126>, +<-0.37520,-0.32834,0.56105>, +<-0.38040,-0.32136,0.57084>, +<-0.38629,-0.31484,0.58046>, +<-0.39254,-0.30853,0.58985>, +<-0.39885,-0.30202,0.59915>, +<-0.40511,-0.29501,0.60828>, +<-0.41043,-0.28716,0.61736>, +<-0.41518,-0.27862,0.62601>, +<-0.42067,-0.27033,0.63429>, +<-0.42629,-0.26156,0.64230>, +<-0.43215,-0.25239,0.65049>, +<-0.43161,-0.23929,ZP>, +<-0.42973,-0.22550,0.66023>, +<-0.42882,-0.21215,0.66009>, +<-0.42835,-0.19912,ZP>, +<-0.42784,-0.18610,ZP>, +<-0.42747,-0.17337,ZP>, +<-0.42688,-0.16039,ZP>, +<-0.42645,-0.14757,ZP>, +<-0.42605,-0.13474,ZP>, +<-0.42569,-0.12195,ZP>, +<-0.42537,-0.10915,ZP>, +<-0.42509,-0.09635,ZP>, +<-0.42485,-0.08354,ZP>, +<-0.42468,-0.07072,ZP>, +<-0.42456,-0.05790,ZP>, +<-0.42449,-0.04508,ZP>, +<-0.42445,-0.03228,ZP>, +<-0.42444,-0.01948,ZP>, +<-0.42447,-0.00669,ZP>, +<-0.42453,0.00609,ZP>, +<-0.42462,0.01886,ZP>, +<-0.42474,0.03162,ZP>, +<-0.42486,0.04437,ZP>, +<-0.42501,0.05713,ZP>, +<-0.42516,0.06989,ZP>, +<-0.42535,0.08266,ZP>, +<-0.42555,0.09544,ZP>, +<-0.42577,0.10823,ZP>, +<-0.42603,0.12106,ZP>, +<-0.42634,0.13391,ZP>, +<-0.42669,0.14680,ZP>, +<-0.42708,0.15969,ZP>, +<-0.42762,0.17270,ZP>, +<-0.42796,0.18538,ZP>, +<-0.42840,0.19831,ZP>, +<-0.43050,0.21190,0.66100>, +<-0.42933,0.22461,0.66010>, +<-0.43171,0.23802,0.66012>, +<-0.43294,0.25103,0.65107>, +<-0.42707,0.26033,0.64280>, +<-0.42121,0.26949,0.63462>, +<-0.41572,0.27782,0.62628>, +<-0.41086,0.28626,0.61749>, +<-0.40551,0.29414,0.60842>, +<-0.39943,0.30094,0.59926>, +<-0.39313,0.30751,0.58999>, +<-0.38685,0.31405,0.58068>, +<-0.38099,0.32083,0.57105>, +<-0.37596,0.32790,0.56134>, +<-0.37178,0.33549,0.55156>, +<-0.36798,0.34331,0.54178>, +<-0.36379,0.35098,0.53197>, +<-0.35866,0.35809,0.52209>, +<-0.35245,0.36411,0.51225>, +<-0.34519,0.36883,0.50222>, +<-0.33732,0.37214,0.49249>, +<-0.32900,0.37450,0.48276>, +<-0.32075,0.37710,0.47317>, +<-0.31290,0.38085,0.46367>, +<-0.30566,0.38612,0.45423>, +<-0.29962,0.39285,0.44501>, +<-0.29490,0.40063,0.43594>, +<-0.29132,0.40896,0.42710>, +<-0.28893,0.41786,0.41824> +<-0.28507,-0.42679,0.42657>, +<-0.28860,-0.41851,0.43554>, +<-0.29143,-0.40998,0.44454>, +<-0.29476,-0.40177,0.45363>, +<-0.29939,-0.39426,0.46293>, +<-0.30535,-0.38766,0.47239>, +<-0.31251,-0.38243,0.48194>, +<-0.32040,-0.37863,0.49164>, +<-0.32852,-0.37581,0.50146>, +<-0.33659,-0.37292,0.51141>, +<-0.34426,-0.36897,0.52144>, +<-0.35109,-0.36381,0.53146>, +<-0.35698,-0.35749,0.54159>, +<-0.36200,-0.35041,0.55161>, +<-0.36651,-0.34294,0.56156>, +<-0.37094,-0.33559,0.57148>, +<-0.37588,-0.32842,0.58135>, +<-0.38142,-0.32154,0.59121>, +<-0.38802,-0.31537,0.60080>, +<-0.39375,-0.30817,0.61015>, +<-0.39948,-0.30072,0.61950>, +<-0.40520,-0.29301,0.62847>, +<-0.41091,-0.28500,0.63703>, +<-0.41677,-0.27664,0.64555>, +<-0.42156,-0.26689,0.65581>, +<-0.41835,-0.25215,0.66042>, +<-0.41726,-0.23865,0.66015>, +<-0.41663,-0.22542,0.66007>, +<-0.41599,-0.21232,ZP>, +<-0.41544,-0.19937,ZP>, +<-0.41472,-0.18621,ZP>, +<-0.41421,-0.17324,ZP>, +<-0.41378,-0.16035,ZP>, +<-0.41340,-0.14752,ZP>, +<-0.41302,-0.13468,ZP>, +<-0.41269,-0.12186,ZP>, +<-0.41239,-0.10903,ZP>, +<-0.41215,-0.09621,ZP>, +<-0.41196,-0.08340,ZP>, +<-0.41182,-0.07058,ZP>, +<-0.41171,-0.05778,ZP>, +<-0.41164,-0.04498,ZP>, +<-0.41160,-0.03218,ZP>, +<-0.41159,-0.01940,ZP>, +<-0.41160,-0.00662,ZP>, +<-0.41165,0.00615,ZP>, +<-0.41172,0.01892,ZP>, +<-0.41181,0.03167,ZP>, +<-0.41192,0.04442,ZP>, +<-0.41205,0.05717,ZP>, +<-0.41219,0.06992,ZP>, +<-0.41235,0.08269,ZP>, +<-0.41253,0.09547,ZP>, +<-0.41275,0.10828,ZP>, +<-0.41302,0.12112,ZP>, +<-0.41332,0.13397,ZP>, +<-0.41365,0.14685,ZP>, +<-0.41399,0.15970,ZP>, +<-0.41435,0.17259,ZP>, +<-0.41472,0.18545,ZP>, +<-0.41536,0.19859,ZP>, +<-0.41542,0.21137,ZP>, +<-0.41663,0.22466,ZP>, +<-0.41773,0.23768,0.66013>, +<-0.41889,0.25091,0.66040>, +<-0.42207,0.26547,0.65632>, +<-0.41733,0.27580,0.64589>, +<-0.41146,0.28420,0.63733>, +<-0.40576,0.29223,0.62869>, +<-0.40007,0.29994,0.61968>, +<-0.39435,0.30741,0.61033>, +<-0.38862,0.31463,0.60096>, +<-0.38213,0.32078,0.59126>, +<-0.37658,0.32790,0.58158>, +<-0.37172,0.33516,0.57178>, +<-0.36737,0.34272,0.56185>, +<-0.36293,0.35021,0.55197>, +<-0.35784,0.35727,0.54203>, +<-0.35177,0.36346,0.53204>, +<-0.34480,0.36839,0.52208>, +<-0.33706,0.37202,0.51195>, +<-0.32897,0.37460,0.50210>, +<-0.32078,0.37733,0.49230>, +<-0.31294,0.38111,0.48265>, +<-0.30590,0.38627,0.47310>, +<-0.29999,0.39291,0.46355>, +<-0.29543,0.40055,0.45426>, +<-0.29223,0.40889,0.44509>, +<-0.28986,0.41757,0.43618>, +<-0.28700,0.42623,0.42733> +<-0.28036,-0.43422,0.43566>, +<-0.28543,-0.42667,0.44478>, +<-0.28960,-0.41868,0.45366>, +<-0.29208,-0.41013,0.46282>, +<-0.29518,-0.40201,0.47221>, +<-0.29973,-0.39451,0.48184>, +<-0.30564,-0.38798,0.49147>, +<-0.31276,-0.38278,0.50127>, +<-0.32053,-0.37893,0.51113>, +<-0.32854,-0.37585,0.52108>, +<-0.33647,-0.37253,0.53124>, +<-0.34374,-0.36831,0.54140>, +<-0.35026,-0.36293,0.55160>, +<-0.35606,-0.35654,0.56174>, +<-0.36123,-0.34955,0.57186>, +<-0.36606,-0.34245,0.58194>, +<-0.37105,-0.33532,0.59189>, +<-0.37686,-0.32863,0.60194>, +<-0.38275,-0.32175,0.61167>, +<-0.38866,-0.31461,0.62120>, +<-0.39457,-0.30721,0.63035>, +<-0.40054,-0.29949,0.63927>, +<-0.40674,-0.29147,0.64823>, +<-0.40821,-0.27973,0.65952>, +<-0.40599,-0.26530,0.66025>, +<-0.40514,-0.25198,0.66009>, +<-0.40443,-0.23884,ZP>, +<-0.40366,-0.22563,ZP>, +<-0.40286,-0.21237,ZP>, +<-0.40221,-0.19922,ZP>, +<-0.40166,-0.18619,ZP>, +<-0.40117,-0.17322,ZP>, +<-0.40074,-0.16030,ZP>, +<-0.40036,-0.14743,ZP>, +<-0.40002,-0.13457,ZP>, +<-0.39972,-0.12173,ZP>, +<-0.39947,-0.10891,ZP>, +<-0.39925,-0.09609,ZP>, +<-0.39908,-0.08327,ZP>, +<-0.39895,-0.07047,ZP>, +<-0.39885,-0.05767,ZP>, +<-0.39878,-0.04488,ZP>, +<-0.39874,-0.03210,ZP>, +<-0.39872,-0.01932,ZP>, +<-0.39873,-0.00656,ZP>, +<-0.39877,0.00620,ZP>, +<-0.39882,0.01895,ZP>, +<-0.39890,0.03170,ZP>, +<-0.39899,0.04444,ZP>, +<-0.39911,0.05719,ZP>, +<-0.39924,0.06994,ZP>, +<-0.39939,0.08271,ZP>, +<-0.39957,0.09549,ZP>, +<-0.39978,0.10830,ZP>, +<-0.40002,0.12112,ZP>, +<-0.40028,0.13396,ZP>, +<-0.40059,0.14683,ZP>, +<-0.40091,0.15970,ZP>, +<-0.40127,0.17262,ZP>, +<-0.40164,0.18552,ZP>, +<-0.40211,0.19855,ZP>, +<-0.40276,0.21173,ZP>, +<-0.40366,0.22499,ZP>, +<-0.40455,0.23813,ZP>, +<-0.40537,0.25119,0.66009>, +<-0.40631,0.26441,0.66023>, +<-0.40846,0.27872,0.65969>, +<-0.40731,0.29070,0.64847>, +<-0.40108,0.29878,0.63948>, +<-0.39515,0.30647,0.63051>, +<-0.38926,0.31388,0.62135>, +<-0.38337,0.32102,0.61186>, +<-0.37749,0.32790,0.60219>, +<-0.37180,0.33471,0.59216>, +<-0.36679,0.34202,0.58224>, +<-0.36202,0.34928,0.57221>, +<-0.35691,0.35622,0.56222>, +<-0.35097,0.36255,0.55205>, +<-0.34421,0.36782,0.54191>, +<-0.33678,0.37181,0.53179>, +<-0.32888,0.37481,0.52169>, +<-0.32089,0.37775,0.51173>, +<-0.31314,0.38159,0.50177>, +<-0.30609,0.38677,0.49201>, +<-0.30027,0.39328,0.48241>, +<-0.29584,0.40086,0.47281>, +<-0.29291,0.40907,0.46345>, +<-0.29092,0.41772,0.45420>, +<-0.28726,0.42587,0.44529>, +<-0.28275,0.43384,0.43636> +<-0.27341,-0.43997,0.44465>, +<-0.28006,-0.43378,0.45387>, +<-0.28575,-0.42669,0.46277>, +<-0.28982,-0.41873,0.47197>, +<-0.29254,-0.41044,0.48143>, +<-0.29555,-0.40233,0.49118>, +<-0.30005,-0.39497,0.50084>, +<-0.30600,-0.38852,0.51076>, +<-0.31305,-0.38340,0.52078>, +<-0.32065,-0.37949,0.53084>, +<-0.32847,-0.37605,0.54098>, +<-0.33602,-0.37230,0.55117>, +<-0.34301,-0.36764,0.56147>, +<-0.34943,-0.36193,0.57177>, +<-0.35510,-0.35557,0.58212>, +<-0.36042,-0.34880,0.59236>, +<-0.36575,-0.34186,0.60241>, +<-0.37125,-0.33494,0.61267>, +<-0.37731,-0.32814,0.62254>, +<-0.38337,-0.32109,0.63192>, +<-0.38954,-0.31373,0.64102>, +<-0.39608,-0.30607,0.65060>, +<-0.39441,-0.29201,0.66060>, +<-0.39341,-0.27837,0.66018>, +<-0.39270,-0.26510,0.66008>, +<-0.39204,-0.25198,ZP>, +<-0.39128,-0.23875,ZP>, +<-0.39042,-0.22541,ZP>, +<-0.38977,-0.21226,ZP>, +<-0.38919,-0.19917,ZP>, +<-0.38866,-0.18614,ZP>, +<-0.38818,-0.17316,ZP>, +<-0.38774,-0.16021,ZP>, +<-0.38738,-0.14731,ZP>, +<-0.38707,-0.13445,ZP>, +<-0.38680,-0.12160,ZP>, +<-0.38657,-0.10877,ZP>, +<-0.38638,-0.09596,ZP>, +<-0.38622,-0.08315,ZP>, +<-0.38610,-0.07035,ZP>, +<-0.38600,-0.05757,ZP>, +<-0.38594,-0.04479,ZP>, +<-0.38590,-0.03202,ZP>, +<-0.38588,-0.01926,ZP>, +<-0.38588,-0.00651,ZP>, +<-0.38591,0.00624,ZP>, +<-0.38595,0.01898,ZP>, +<-0.38602,0.03171,ZP>, +<-0.38610,0.04445,ZP>, +<-0.38620,0.05720,ZP>, +<-0.38632,0.06995,ZP>, +<-0.38646,0.08271,ZP>, +<-0.38663,0.09549,ZP>, +<-0.38683,0.10829,ZP>, +<-0.38705,0.12111,ZP>, +<-0.38730,0.13394,ZP>, +<-0.38758,0.14680,ZP>, +<-0.38788,0.15968,ZP>, +<-0.38825,0.17261,ZP>, +<-0.38865,0.18558,ZP>, +<-0.38914,0.19863,ZP>, +<-0.38974,0.21175,ZP>, +<-0.39044,0.22491,ZP>, +<-0.39136,0.23819,ZP>, +<-0.39221,0.25134,ZP>, +<-0.39295,0.26438,0.66008>, +<-0.39372,0.27759,0.66018>, +<-0.39469,0.29116,0.66060>, +<-0.39659,0.30542,0.65082>, +<-0.39012,0.31304,0.64102>, +<-0.38398,0.32037,0.63213>, +<-0.37795,0.32741,0.62278>, +<-0.37190,0.33421,0.61297>, +<-0.36647,0.34126,0.60274>, +<-0.36119,0.34831,0.59267>, +<-0.35580,0.35520,0.58257>, +<-0.35008,0.36152,0.57233>, +<-0.34356,0.36707,0.56204>, +<-0.33640,0.37158,0.55183>, +<-0.32876,0.37513,0.54149>, +<-0.32094,0.37842,0.53133>, +<-0.31336,0.38235,0.52131>, +<-0.30643,0.38749,0.51124>, +<-0.30062,0.39391,0.50132>, +<-0.29621,0.40131,0.49161>, +<-0.29338,0.40945,0.48199>, +<-0.29114,0.41787,0.47259>, +<-0.28754,0.42594,0.46326>, +<-0.28239,0.43329,0.45431>, +<-0.27624,0.44000,0.44521> +<-0.26447,-0.44277,0.45329>, +<-0.27239,-0.43878,0.46270>, +<-0.27955,-0.43341,0.47180>, +<-0.28533,-0.42658,0.48109>, +<-0.28968,-0.41892,0.49055>, +<-0.29267,-0.41081,0.50030>, +<-0.29579,-0.40287,0.51004>, +<-0.30044,-0.39555,0.52008>, +<-0.30646,-0.38929,0.53023>, +<-0.31337,-0.38432,0.54046>, +<-0.32080,-0.38022,0.55075>, +<-0.32831,-0.37638,0.56101>, +<-0.33551,-0.37206,0.57141>, +<-0.34217,-0.36698,0.58192>, +<-0.34832,-0.36119,0.59231>, +<-0.35423,-0.35479,0.60265>, +<-0.35979,-0.34814,0.61297>, +<-0.36547,-0.34126,0.62331>, +<-0.37168,-0.33455,0.63301>, +<-0.37506,-0.32554,0.64251>, +<-0.38437,-0.32002,0.65340>, +<-0.38162,-0.30489,0.66049>, +<-0.38082,-0.29145,0.66016>, +<-0.38018,-0.27814,0.66008>, +<-0.37951,-0.26494,ZP>, +<-0.37877,-0.25169,ZP>, +<-0.37802,-0.23842,ZP>, +<-0.37738,-0.22527,ZP>, +<-0.37675,-0.21215,ZP>, +<-0.37617,-0.19906,ZP>, +<-0.37566,-0.18602,ZP>, +<-0.37520,-0.17304,ZP>, +<-0.37480,-0.16010,ZP>, +<-0.37446,-0.14719,ZP>, +<-0.37416,-0.13432,ZP>, +<-0.37391,-0.12147,ZP>, +<-0.37370,-0.10864,ZP>, +<-0.37352,-0.09583,ZP>, +<-0.37338,-0.08303,ZP>, +<-0.37326,-0.07025,ZP>, +<-0.37317,-0.05747,ZP>, +<-0.37311,-0.04471,ZP>, +<-0.37307,-0.03196,ZP>, +<-0.37305,-0.01921,ZP>, +<-0.37305,-0.00647,ZP>, +<-0.37306,0.00626,ZP>, +<-0.37310,0.01899,ZP>, +<-0.37315,0.03172,ZP>, +<-0.37322,0.04445,ZP>, +<-0.37332,0.05719,ZP>, +<-0.37343,0.06994,ZP>, +<-0.37356,0.08270,ZP>, +<-0.37372,0.09547,ZP>, +<-0.37390,0.10826,ZP>, +<-0.37411,0.12107,ZP>, +<-0.37435,0.13390,ZP>, +<-0.37461,0.14675,ZP>, +<-0.37491,0.15964,ZP>, +<-0.37526,0.17257,ZP>, +<-0.37567,0.18556,ZP>, +<-0.37617,0.19861,ZP>, +<-0.37674,0.21171,ZP>, +<-0.37738,0.22483,ZP>, +<-0.37805,0.23796,ZP>, +<-0.37884,0.25117,ZP>, +<-0.37965,0.26437,ZP>, +<-0.38038,0.27751,0.66008>, +<-0.38110,0.29075,0.66016>, +<-0.38194,0.30411,0.66049>, +<-0.38486,0.31927,0.65377>, +<-0.37518,0.32507,0.64232>, +<-0.37233,0.33383,0.63332>, +<-0.36614,0.34054,0.62368>, +<-0.36045,0.34747,0.61338>, +<-0.35492,0.35422,0.60306>, +<-0.34911,0.36057,0.59282>, +<-0.34287,0.36638,0.58239>, +<-0.33598,0.37138,0.57199>, +<-0.32868,0.37555,0.56162>, +<-0.32106,0.37932,0.55117>, +<-0.31366,0.38340,0.54093>, +<-0.30682,0.38845,0.53073>, +<-0.30101,0.39468,0.52054>, +<-0.29655,0.40191,0.51051>, +<-0.29359,0.40989,0.50070>, +<-0.29102,0.41811,0.49107>, +<-0.28715,0.42597,0.48164>, +<-0.28183,0.43310,0.47222>, +<-0.27511,0.43886,0.46311>, +<-0.26748,0.44338,0.45376> +<-0.25475,-0.44219,0.46150>, +<-0.26312,-0.44078,0.47113>, +<-0.27127,-0.43776,0.48053>, +<-0.27857,-0.43289,0.49009>, +<-0.28464,-0.42640,0.49960>, +<-0.28925,-0.41900,0.50930>, +<-0.29263,-0.41111,0.51909>, +<-0.29609,-0.40327,0.52922>, +<-0.30090,-0.39627,0.53947>, +<-0.30688,-0.39038,0.54982>, +<-0.31376,-0.38550,0.56031>, +<-0.32100,-0.38117,0.57078>, +<-0.32817,-0.37678,0.58134>, +<-0.33494,-0.37194,0.59188>, +<-0.34137,-0.36655,0.60232>, +<-0.34753,-0.36053,0.61300>, +<-0.35320,-0.35393,0.62351>, +<-0.35948,-0.34762,0.63352>, +<-0.36594,-0.34104,0.64339>, +<-0.37170,-0.33326,0.65556>, +<-0.36879,-0.31779,0.66039>, +<-0.36810,-0.30431,0.66012>, +<-0.36759,-0.29118,0.66008>, +<-0.36690,-0.27787,ZP>, +<-0.36612,-0.26452,ZP>, +<-0.36549,-0.25131,ZP>, +<-0.36488,-0.23816,ZP>, +<-0.36428,-0.22504,ZP>, +<-0.36370,-0.21194,ZP>, +<-0.36317,-0.19888,ZP>, +<-0.36269,-0.18587,ZP>, +<-0.36227,-0.17290,ZP>, +<-0.36189,-0.15996,ZP>, +<-0.36156,-0.14706,ZP>, +<-0.36128,-0.13418,ZP>, +<-0.36104,-0.12134,ZP>, +<-0.36085,-0.10851,ZP>, +<-0.36068,-0.09571,ZP>, +<-0.36055,-0.08292,ZP>, +<-0.36044,-0.07015,ZP>, +<-0.36036,-0.05739,ZP>, +<-0.36029,-0.04464,ZP>, +<-0.36025,-0.03190,ZP>, +<-0.36023,-0.01917,ZP>, +<-0.36022,-0.00644,ZP>, +<-0.36024,0.00628,ZP>, +<-0.36027,0.01900,ZP>, +<-0.36031,0.03172,ZP>, +<-0.36038,0.04445,ZP>, +<-0.36046,0.05718,ZP>, +<-0.36057,0.06992,ZP>, +<-0.36069,0.08267,ZP>, +<-0.36084,0.09543,ZP>, +<-0.36101,0.10821,ZP>, +<-0.36120,0.12102,ZP>, +<-0.36143,0.13384,ZP>, +<-0.36168,0.14669,ZP>, +<-0.36198,0.15958,ZP>, +<-0.36232,0.17251,ZP>, +<-0.36272,0.18549,ZP>, +<-0.36318,0.19851,ZP>, +<-0.36370,0.21157,ZP>, +<-0.36428,0.22466,ZP>, +<-0.36489,0.23776,ZP>, +<-0.36553,0.25088,ZP>, +<-0.36620,0.26403,ZP>, +<-0.36703,0.27731,ZP>, +<-0.36780,0.29054,0.66008>, +<-0.36838,0.30358,0.66013>, +<-0.36911,0.31692,0.66038>, +<-0.37208,0.33229,0.65615>, +<-0.36663,0.34030,0.64383>, +<-0.36019,0.34688,0.63398>, +<-0.35396,0.35317,0.62403>, +<-0.34824,0.35982,0.61341>, +<-0.34213,0.36583,0.60290>, +<-0.33554,0.37127,0.59238>, +<-0.32865,0.37604,0.58178>, +<-0.32148,0.38035,0.57128>, +<-0.31414,0.38469,0.56080>, +<-0.30724,0.38966,0.55035>, +<-0.30140,0.39561,0.54000>, +<-0.29677,0.40258,0.52973>, +<-0.29353,0.41034,0.51967>, +<-0.29049,0.41828,0.50982>, +<-0.28629,0.42585,0.50014>, +<-0.28071,0.43266,0.49055>, +<-0.27380,0.43804,0.48092>, +<-0.26594,0.44150,0.47152>, +<-0.25768,0.44339,0.46189> +<-0.24546,-0.43859,0.46927>, +<-0.25343,-0.43953,0.47904>, +<-0.26171,-0.43882,0.48892>, +<-0.26979,-0.43655,0.49880>, +<-0.27740,-0.43222,0.50855>, +<-0.28361,-0.42612,0.51833>, +<-0.28844,-0.41900,0.52827>, +<-0.29226,-0.41135,0.53843>, +<-0.29615,-0.40386,0.54873>, +<-0.30124,-0.39718,0.55914>, +<-0.30748,-0.39154,0.56975>, +<-0.31424,-0.38668,0.58039>, +<-0.32104,-0.38207,0.59103>, +<-0.32788,-0.37750,0.60183>, +<-0.33419,-0.37191,0.61252>, +<-0.34051,-0.36617,0.62326>, +<-0.34685,-0.36022,0.63350>, +<-0.35332,-0.35410,0.64365>, +<-0.35872,-0.34639,0.65641>, +<-0.35595,-0.33081,0.66034>, +<-0.35529,-0.31730,0.66010>, +<-0.35478,-0.30396,ZP>, +<-0.35426,-0.29075,ZP>, +<-0.35349,-0.27735,ZP>, +<-0.35290,-0.26415,ZP>, +<-0.35231,-0.25097,ZP>, +<-0.35174,-0.23785,ZP>, +<-0.35119,-0.22476,ZP>, +<-0.35068,-0.21170,ZP>, +<-0.35020,-0.19868,ZP>, +<-0.34975,-0.18569,ZP>, +<-0.34935,-0.17273,ZP>, +<-0.34900,-0.15980,ZP>, +<-0.34869,-0.14691,ZP>, +<-0.34843,-0.13404,ZP>, +<-0.34821,-0.12121,ZP>, +<-0.34802,-0.10839,ZP>, +<-0.34786,-0.09560,ZP>, +<-0.34774,-0.08282,ZP>, +<-0.34763,-0.07006,ZP>, +<-0.34755,-0.05731,ZP>, +<-0.34749,-0.04458,ZP>, +<-0.34745,-0.03185,ZP>, +<-0.34743,-0.01913,ZP>, +<-0.34742,-0.00642,ZP>, +<-0.34743,0.00629,ZP>, +<-0.34745,0.01900,ZP>, +<-0.34749,0.03172,ZP>, +<-0.34755,0.04443,ZP>, +<-0.34763,0.05715,ZP>, +<-0.34773,0.06988,ZP>, +<-0.34784,0.08263,ZP>, +<-0.34798,0.09538,ZP>, +<-0.34814,0.10816,ZP>, +<-0.34833,0.12095,ZP>, +<-0.34854,0.13377,ZP>, +<-0.34879,0.14661,ZP>, +<-0.34907,0.15950,ZP>, +<-0.34940,0.17241,ZP>, +<-0.34978,0.18537,ZP>, +<-0.35021,0.19836,ZP>, +<-0.35068,0.21138,ZP>, +<-0.35119,0.22443,ZP>, +<-0.35173,0.23750,ZP>, +<-0.35231,0.25059,ZP>, +<-0.35292,0.26371,ZP>, +<-0.35355,0.27684,ZP>, +<-0.35436,0.29015,ZP>, +<-0.35494,0.30325,ZP>, +<-0.35551,0.31648,0.66010>, +<-0.35623,0.32985,0.66032>, +<-0.35900,0.34528,0.65713>, +<-0.35407,0.35337,0.64421>, +<-0.34765,0.35945,0.63409>, +<-0.34132,0.36541,0.62386>, +<-0.33501,0.37118,0.61310>, +<-0.32870,0.37679,0.60234>, +<-0.32172,0.38127,0.59156>, +<-0.31472,0.38597,0.58074>, +<-0.30792,0.39083,0.57015>, +<-0.30175,0.39654,0.55959>, +<-0.29683,0.40322,0.54924>, +<-0.29308,0.41073,0.53886>, +<-0.28949,0.41840,0.52881>, +<-0.28501,0.42562,0.51884>, +<-0.27927,0.43203,0.50894>, +<-0.27219,0.43689,0.49912>, +<-0.26426,0.43975,0.48927>, +<-0.25612,0.44082,0.47947>, +<-0.24807,0.44025,0.46958> +<-0.23696,-0.43304,0.47686>, +<-0.24435,-0.43550,0.48667>, +<-0.25217,-0.43712,0.49696>, +<-0.26010,-0.43704,0.50701>, +<-0.26840,-0.43519,0.51706>, +<-0.27594,-0.43131,0.52711>, +<-0.28224,-0.42558,0.53730>, +<-0.28727,-0.41870,0.54755>, +<-0.29153,-0.41136,0.55785>, +<-0.29601,-0.40429,0.56828>, +<-0.30145,-0.39816,0.57902>, +<-0.30761,-0.39283,0.58987>, +<-0.31463,-0.38863,0.60070>, +<-0.32100,-0.38337,0.61156>, +<-0.32740,-0.37795,0.62244>, +<-0.33380,-0.37236,0.63295>, +<-0.34028,-0.36664,0.64335>, +<-0.34569,-0.35943,0.65638>, +<-0.34318,-0.34378,0.66034>, +<-0.34266,-0.33030,0.66011>, +<-0.34218,-0.31701,ZP>, +<-0.34154,-0.30361,ZP>, +<-0.34081,-0.29016,ZP>, +<-0.34025,-0.27693,ZP>, +<-0.33969,-0.26375,ZP>, +<-0.33914,-0.25060,ZP>, +<-0.33862,-0.23751,ZP>, +<-0.33813,-0.22445,ZP>, +<-0.33767,-0.21143,ZP>, +<-0.33723,-0.19844,ZP>, +<-0.33683,-0.18548,ZP>, +<-0.33646,-0.17254,ZP>, +<-0.33613,-0.15963,ZP>, +<-0.33585,-0.14676,ZP>, +<-0.33560,-0.13390,ZP>, +<-0.33539,-0.12108,ZP>, +<-0.33521,-0.10827,ZP>, +<-0.33506,-0.09549,ZP>, +<-0.33494,-0.08273,ZP>, +<-0.33484,-0.06998,ZP>, +<-0.33477,-0.05724,ZP>, +<-0.33471,-0.04452,ZP>, +<-0.33467,-0.03181,ZP>, +<-0.33464,-0.01910,ZP>, +<-0.33463,-0.00640,ZP>, +<-0.33464,0.00630,ZP>, +<-0.33466,0.01900,ZP>, +<-0.33470,0.03171,ZP>, +<-0.33475,0.04441,ZP>, +<-0.33482,0.05712,ZP>, +<-0.33491,0.06985,ZP>, +<-0.33502,0.08258,ZP>, +<-0.33515,0.09533,ZP>, +<-0.33530,0.10809,ZP>, +<-0.33548,0.12088,ZP>, +<-0.33568,0.13368,ZP>, +<-0.33592,0.14652,ZP>, +<-0.33619,0.15939,ZP>, +<-0.33650,0.17229,ZP>, +<-0.33685,0.18522,ZP>, +<-0.33724,0.19817,ZP>, +<-0.33767,0.21116,ZP>, +<-0.33812,0.22416,ZP>, +<-0.33860,0.23719,ZP>, +<-0.33912,0.25025,ZP>, +<-0.33967,0.26335,ZP>, +<-0.34025,0.27646,ZP>, +<-0.34084,0.28961,ZP>, +<-0.34163,0.30296,ZP>, +<-0.34233,0.31625,ZP>, +<-0.34288,0.32943,0.66011>, +<-0.34346,0.34277,0.66031>, +<-0.34596,0.35822,0.65724>, +<-0.34112,0.36588,0.64404>, +<-0.33472,0.37153,0.63360>, +<-0.32835,0.37713,0.62290>, +<-0.32189,0.38263,0.61188>, +<-0.31548,0.38794,0.60098>, +<-0.30819,0.39211,0.59025>, +<-0.30194,0.39754,0.57949>, +<-0.29657,0.40376,0.56880>, +<-0.29226,0.41084,0.55831>, +<-0.28812,0.41823,0.54789>, +<-0.28330,0.42519,0.53771>, +<-0.27736,0.43114,0.52757>, +<-0.27017,0.43548,0.51739>, +<-0.26234,0.43786,0.50728>, +<-0.25439,0.43839,0.49719>, +<-0.24666,0.43735,0.48723>, +<-0.23936,0.43482,0.47700> +<-0.22746,-0.43075,0.48474>, +<-0.23544,-0.43110,0.49424>, +<-0.24337,-0.43221,0.50462>, +<-0.25062,-0.43489,0.51479>, +<-0.25865,-0.43536,0.52516>, +<-0.26652,-0.43382,0.53552>, +<-0.27397,-0.43018,0.54604>, +<-0.28035,-0.42473,0.55650>, +<-0.28561,-0.41813,0.56691>, +<-0.29031,-0.41124,0.57735>, +<-0.29532,-0.40479,0.58816>, +<-0.30098,-0.39910,0.59912>, +<-0.30744,-0.39433,0.61008>, +<-0.31387,-0.38926,0.62108>, +<-0.32035,-0.38399,0.63181>, +<-0.32412,-0.37573,0.64215>, +<-0.33258,-0.37236,0.65551>, +<-0.33019,-0.35654,0.66035>, +<-0.32978,-0.34317,0.66011>, +<-0.32940,-0.32986,ZP>, +<-0.32883,-0.31645,ZP>, +<-0.32813,-0.30298,ZP>, +<-0.32758,-0.28971,ZP>, +<-0.32704,-0.27649,ZP>, +<-0.32652,-0.26333,ZP>, +<-0.32602,-0.25022,ZP>, +<-0.32555,-0.23716,ZP>, +<-0.32510,-0.22414,ZP>, +<-0.32468,-0.21115,ZP>, +<-0.32428,-0.19819,ZP>, +<-0.32392,-0.18525,ZP>, +<-0.32358,-0.17234,ZP>, +<-0.32328,-0.15946,ZP>, +<-0.32302,-0.14660,ZP>, +<-0.32279,-0.13376,ZP>, +<-0.32259,-0.12095,ZP>, +<-0.32242,-0.10816,ZP>, +<-0.32228,-0.09539,ZP>, +<-0.32216,-0.08264,ZP>, +<-0.32207,-0.06990,ZP>, +<-0.32200,-0.05718,ZP>, +<-0.32194,-0.04447,ZP>, +<-0.32190,-0.03177,ZP>, +<-0.32187,-0.01907,ZP>, +<-0.32186,-0.00638,ZP>, +<-0.32187,0.00631,ZP>, +<-0.32189,0.01900,ZP>, +<-0.32192,0.03169,ZP>, +<-0.32197,0.04439,ZP>, +<-0.32204,0.05709,ZP>, +<-0.32212,0.06980,ZP>, +<-0.32222,0.08253,ZP>, +<-0.32234,0.09526,ZP>, +<-0.32249,0.10802,ZP>, +<-0.32265,0.12079,ZP>, +<-0.32285,0.13359,ZP>, +<-0.32307,0.14641,ZP>, +<-0.32333,0.15926,ZP>, +<-0.32362,0.17213,ZP>, +<-0.32394,0.18504,ZP>, +<-0.32429,0.19796,ZP>, +<-0.32467,0.21091,ZP>, +<-0.32508,0.22388,ZP>, +<-0.32551,0.23688,ZP>, +<-0.32597,0.24990,ZP>, +<-0.32647,0.26297,ZP>, +<-0.32700,0.27607,ZP>, +<-0.32756,0.28922,ZP>, +<-0.32815,0.30240,ZP>, +<-0.32890,0.31577,ZP>, +<-0.32954,0.32906,ZP>, +<-0.32997,0.34226,0.66010>, +<-0.33042,0.35548,0.66032>, +<-0.33287,0.37120,0.65654>, +<-0.32521,0.37512,0.64236>, +<-0.32132,0.38319,0.63231>, +<-0.31471,0.38858,0.62140>, +<-0.30826,0.39369,0.61041>, +<-0.30161,0.39838,0.59930>, +<-0.29592,0.40423,0.58872>, +<-0.29100,0.41072,0.57789>, +<-0.28642,0.41766,0.56726>, +<-0.28132,0.42433,0.55680>, +<-0.27525,0.42996,0.54640>, +<-0.26814,0.43395,0.53594>, +<-0.26036,0.43601,0.52540>, +<-0.25259,0.43622,0.51514>, +<-0.24529,0.43403,0.50495>, +<-0.23792,0.43213,0.49476>, +<-0.23018,0.43121,0.48473> +<-0.21762,-0.43293,0.49253>, +<-0.22556,-0.43124,0.50214>, +<-0.23374,-0.43032,0.51237>, +<-0.24134,-0.43085,0.52240>, +<-0.24906,-0.43278,0.53306>, +<-0.25668,-0.43385,0.54360>, +<-0.26451,-0.43234,0.55437>, +<-0.27173,-0.42879,0.56503>, +<-0.27807,-0.42353,0.57575>, +<-0.28343,-0.41732,0.58641>, +<-0.28859,-0.41102,0.59722>, +<-0.29409,-0.40530,0.60814>, +<-0.29999,-0.40003,0.61944>, +<-0.30647,-0.39515,0.63026>, +<-0.31301,-0.39012,0.64095>, +<-0.31936,-0.38496,0.65332>, +<-0.31718,-0.36933,0.66040>, +<-0.31676,-0.35577,0.66010>, +<-0.31654,-0.34262,ZP>, +<-0.31606,-0.32921,ZP>, +<-0.31544,-0.31577,ZP>, +<-0.31493,-0.30250,ZP>, +<-0.31440,-0.28926,ZP>, +<-0.31388,-0.27606,ZP>, +<-0.31339,-0.26293,ZP>, +<-0.31294,-0.24985,ZP>, +<-0.31251,-0.23682,ZP>, +<-0.31210,-0.22383,ZP>, +<-0.31172,-0.21087,ZP>, +<-0.31136,-0.19793,ZP>, +<-0.31103,-0.18503,ZP>, +<-0.31072,-0.17214,ZP>, +<-0.31045,-0.15928,ZP>, +<-0.31021,-0.14644,ZP>, +<-0.30999,-0.13362,ZP>, +<-0.30981,-0.12082,ZP>, +<-0.30965,-0.10805,ZP>, +<-0.30951,-0.09529,ZP>, +<-0.30940,-0.08256,ZP>, +<-0.30931,-0.06983,ZP>, +<-0.30924,-0.05712,ZP>, +<-0.30919,-0.04442,ZP>, +<-0.30915,-0.03173,ZP>, +<-0.30912,-0.01905,ZP>, +<-0.30911,-0.00637,ZP>, +<-0.30912,0.00631,ZP>, +<-0.30913,0.01899,ZP>, +<-0.30916,0.03167,ZP>, +<-0.30921,0.04436,ZP>, +<-0.30927,0.05706,ZP>, +<-0.30935,0.06976,ZP>, +<-0.30944,0.08247,ZP>, +<-0.30956,0.09520,ZP>, +<-0.30969,0.10794,ZP>, +<-0.30985,0.12070,ZP>, +<-0.31003,0.13348,ZP>, +<-0.31024,0.14629,ZP>, +<-0.31048,0.15912,ZP>, +<-0.31075,0.17197,ZP>, +<-0.31104,0.18484,ZP>, +<-0.31136,0.19773,ZP>, +<-0.31170,0.21065,ZP>, +<-0.31207,0.22359,ZP>, +<-0.31246,0.23656,ZP>, +<-0.31288,0.24956,ZP>, +<-0.31333,0.26259,ZP>, +<-0.31382,0.27568,ZP>, +<-0.31435,0.28882,ZP>, +<-0.31491,0.30198,ZP>, +<-0.31546,0.31517,ZP>, +<-0.31612,0.32849,ZP>, +<-0.31666,0.34179,ZP>, +<-0.31694,0.35483,0.66010>, +<-0.31744,0.36832,0.66038>, +<-0.31995,0.38408,0.65421>, +<-0.31424,0.38921,0.64029>, +<-0.30735,0.39447,0.63069>, +<-0.30084,0.39940,0.61983>, +<-0.29485,0.40469,0.60863>, +<-0.28933,0.41052,0.59773>, +<-0.28430,0.41681,0.58686>, +<-0.27909,0.42311,0.57604>, +<-0.27301,0.42853,0.56532>, +<-0.26602,0.43240,0.55466>, +<-0.25841,0.43442,0.54401>, +<-0.25075,0.43432,0.53334>, +<-0.24339,0.43217,0.52278>, +<-0.23586,0.43087,0.51248>, +<-0.22802,0.43085,0.50267>, +<-0.22010,0.43168,0.49251> +<-0.21001,-0.44028,0.49977>, +<-0.21646,-0.43604,0.50977>, +<-0.22380,-0.43279,0.52012>, +<-0.23135,-0.43107,0.53039>, +<-0.23945,-0.43073,0.54104>, +<-0.24711,-0.43164,0.55148>, +<-0.25484,-0.43253,0.56231>, +<-0.26226,-0.43098,0.57317>, +<-0.26925,-0.42727,0.58417>, +<-0.27530,-0.42220,0.59514>, +<-0.28099,-0.41660,0.60607>, +<-0.28626,-0.41076,0.61728>, +<-0.29229,-0.40572,0.62843>, +<-0.29876,-0.40108,0.63920>, +<-0.30539,-0.39661,0.65050>, +<-0.30427,-0.38213,0.66050>, +<-0.30375,-0.36855,0.66012>, +<-0.30347,-0.35517,ZP>, +<-0.30319,-0.34191,ZP>, +<-0.30264,-0.32845,ZP>, +<-0.30220,-0.31521,ZP>, +<-0.30173,-0.30198,ZP>, +<-0.30124,-0.28878,ZP>, +<-0.30077,-0.27564,ZP>, +<-0.30032,-0.26254,ZP>, +<-0.29990,-0.24949,ZP>, +<-0.29950,-0.23649,ZP>, +<-0.29913,-0.22352,ZP>, +<-0.29878,-0.21059,ZP>, +<-0.29846,-0.19768,ZP>, +<-0.29816,-0.18480,ZP>, +<-0.29788,-0.17194,ZP>, +<-0.29763,-0.15910,ZP>, +<-0.29741,-0.14628,ZP>, +<-0.29721,-0.13348,ZP>, +<-0.29704,-0.12070,ZP>, +<-0.29689,-0.10794,ZP>, +<-0.29676,-0.09520,ZP>, +<-0.29666,-0.08248,ZP>, +<-0.29657,-0.06977,ZP>, +<-0.29650,-0.05707,ZP>, +<-0.29645,-0.04438,ZP>, +<-0.29641,-0.03170,ZP>, +<-0.29639,-0.01903,ZP>, +<-0.29638,-0.00636,ZP>, +<-0.29638,0.00631,ZP>, +<-0.29640,0.01898,ZP>, +<-0.29642,0.03166,ZP>, +<-0.29647,0.04433,ZP>, +<-0.29652,0.05702,ZP>, +<-0.29660,0.06971,ZP>, +<-0.29668,0.08241,ZP>, +<-0.29679,0.09513,ZP>, +<-0.29692,0.10786,ZP>, +<-0.29707,0.12061,ZP>, +<-0.29724,0.13337,ZP>, +<-0.29743,0.14616,ZP>, +<-0.29765,0.15896,ZP>, +<-0.29789,0.17179,ZP>, +<-0.29816,0.18464,ZP>, +<-0.29844,0.19750,ZP>, +<-0.29876,0.21039,ZP>, +<-0.29909,0.22330,ZP>, +<-0.29944,0.23625,ZP>, +<-0.29983,0.24922,ZP>, +<-0.30025,0.26223,ZP>, +<-0.30069,0.27529,ZP>, +<-0.30117,0.28838,ZP>, +<-0.30168,0.30151,ZP>, +<-0.30218,0.31467,ZP>, +<-0.30264,0.32782,ZP>, +<-0.30324,0.34117,ZP>, +<-0.30359,0.35438,ZP>, +<-0.30404,0.36775,0.66013>, +<-0.30471,0.38121,0.66049>, +<-0.30628,0.39590,0.65106>, +<-0.29970,0.40039,0.63965>, +<-0.29316,0.40509,0.62885>, +<-0.28711,0.41017,0.61768>, +<-0.28190,0.41616,0.60645>, +<-0.27633,0.42183,0.59547>, +<-0.27037,0.42706,0.58449>, +<-0.26370,0.43096,0.57356>, +<-0.25638,0.43309,0.56269>, +<-0.24884,0.43299,0.55187>, +<-0.24125,0.43165,0.54119>, +<-0.23361,0.43129,0.53080>, +<-0.22578,0.43201,0.52045>, +<-0.21821,0.43392,0.51025>, +<-0.21125,0.43717,0.49986> +<-0.20638,-0.45062,0.50626>, +<-0.21059,-0.44502,0.51674>, +<-0.21590,-0.43994,0.52739>, +<-0.22224,-0.43578,0.53789>, +<-0.22971,-0.43286,0.54872>, +<-0.23737,-0.43173,0.55938>, +<-0.24519,-0.43194,0.57031>, +<-0.25269,-0.43198,0.58118>, +<-0.25998,-0.42983,0.59238>, +<-0.26652,-0.42603,0.60351>, +<-0.27256,-0.42142,0.61477>, +<-0.27787,-0.41569,0.62603>, +<-0.28429,-0.41140,0.63701>, +<-0.29080,-0.40722,0.64818>, +<-0.29145,-0.39493,0.66059>, +<-0.29092,-0.38127,0.66016>, +<-0.29069,-0.36800,0.66008>, +<-0.29033,-0.35462,ZP>, +<-0.28979,-0.34112,ZP>, +<-0.28941,-0.32786,ZP>, +<-0.28900,-0.31465,ZP>, +<-0.28856,-0.30146,ZP>, +<-0.28813,-0.28832,ZP>, +<-0.28770,-0.27522,ZP>, +<-0.28729,-0.26217,ZP>, +<-0.28690,-0.24915,ZP>, +<-0.28654,-0.23617,ZP>, +<-0.28619,-0.22323,ZP>, +<-0.28587,-0.21032,ZP>, +<-0.28558,-0.19743,ZP>, +<-0.28531,-0.18457,ZP>, +<-0.28506,-0.17174,ZP>, +<-0.28483,-0.15892,ZP>, +<-0.28462,-0.14612,ZP>, +<-0.28444,-0.13334,ZP>, +<-0.28428,-0.12058,ZP>, +<-0.28414,-0.10784,ZP>, +<-0.28403,-0.09511,ZP>, +<-0.28393,-0.08240,ZP>, +<-0.28385,-0.06970,ZP>, +<-0.28378,-0.05702,ZP>, +<-0.28373,-0.04434,ZP>, +<-0.28369,-0.03167,ZP>, +<-0.28367,-0.01901,ZP>, +<-0.28366,-0.00635,ZP>, +<-0.28366,0.00631,ZP>, +<-0.28368,0.01897,ZP>, +<-0.28370,0.03164,ZP>, +<-0.28374,0.04430,ZP>, +<-0.28379,0.05698,ZP>, +<-0.28386,0.06966,ZP>, +<-0.28394,0.08235,ZP>, +<-0.28404,0.09506,ZP>, +<-0.28416,0.10777,ZP>, +<-0.28430,0.12051,ZP>, +<-0.28446,0.13326,ZP>, +<-0.28463,0.14602,ZP>, +<-0.28483,0.15881,ZP>, +<-0.28505,0.17161,ZP>, +<-0.28529,0.18443,ZP>, +<-0.28556,0.19728,ZP>, +<-0.28584,0.21014,ZP>, +<-0.28614,0.22303,ZP>, +<-0.28647,0.23595,ZP>, +<-0.28683,0.24890,ZP>, +<-0.28721,0.26188,ZP>, +<-0.28762,0.27490,ZP>, +<-0.28805,0.28796,ZP>, +<-0.28849,0.30104,ZP>, +<-0.28895,0.31416,ZP>, +<-0.28938,0.32730,ZP>, +<-0.28981,0.34050,ZP>, +<-0.29042,0.35393,ZP>, +<-0.29098,0.36733,0.66009>, +<-0.29136,0.38053,0.66017>, +<-0.29194,0.39394,0.66061>, +<-0.29172,0.40659,0.64852>, +<-0.28521,0.41077,0.63737>, +<-0.27874,0.41510,0.62631>, +<-0.27346,0.42101,0.61505>, +<-0.26756,0.42576,0.60372>, +<-0.26115,0.42977,0.59271>, +<-0.25411,0.43229,0.58153>, +<-0.24670,0.43265,0.57067>, +<-0.23920,0.43222,0.55980>, +<-0.23159,0.43264,0.54914>, +<-0.22398,0.43417,0.53841>, +<-0.21681,0.43728,0.52765>, +<-0.21073,0.44153,0.51728>, +<-0.20571,0.44654,0.50655> +<-0.20649,-0.46182,0.51226>, +<-0.20843,-0.45560,0.52312>, +<-0.21150,-0.44961,0.53422>, +<-0.21586,-0.44409,0.54499>, +<-0.22156,-0.43946,0.55601>, +<-0.22824,-0.43615,0.56710>, +<-0.23576,-0.43433,0.57834>, +<-0.24315,-0.43353,0.58911>, +<-0.25074,-0.43260,0.60058>, +<-0.25742,-0.42959,0.61170>, +<-0.26326,-0.42511,0.62307>, +<-0.26959,-0.42114,0.63432>, +<-0.27594,-0.41723,0.64555>, +<-0.27912,-0.40869,0.65949>, +<-0.27782,-0.39385,0.66018>, +<-0.27765,-0.38058,0.66008>, +<-0.27744,-0.36726,ZP>, +<-0.27697,-0.35381,ZP>, +<-0.27660,-0.34053,ZP>, +<-0.27622,-0.32729,ZP>, +<-0.27583,-0.31410,ZP>, +<-0.27544,-0.30097,ZP>, +<-0.27506,-0.28788,ZP>, +<-0.27467,-0.27482,ZP>, +<-0.27430,-0.26180,ZP>, +<-0.27394,-0.24882,ZP>, +<-0.27360,-0.23587,ZP>, +<-0.27329,-0.22295,ZP>, +<-0.27299,-0.21006,ZP>, +<-0.27272,-0.19720,ZP>, +<-0.27247,-0.18436,ZP>, +<-0.27225,-0.17155,ZP>, +<-0.27204,-0.15875,ZP>, +<-0.27185,-0.14597,ZP>, +<-0.27169,-0.13321,ZP>, +<-0.27154,-0.12047,ZP>, +<-0.27141,-0.10774,ZP>, +<-0.27130,-0.09503,ZP>, +<-0.27121,-0.08233,ZP>, +<-0.27113,-0.06965,ZP>, +<-0.27107,-0.05697,ZP>, +<-0.27102,-0.04430,ZP>, +<-0.27099,-0.03164,ZP>, +<-0.27097,-0.01899,ZP>, +<-0.27096,-0.00634,ZP>, +<-0.27096,0.00631,ZP>, +<-0.27097,0.01896,ZP>, +<-0.27100,0.03162,ZP>, +<-0.27103,0.04428,ZP>, +<-0.27108,0.05694,ZP>, +<-0.27114,0.06961,ZP>, +<-0.27122,0.08229,ZP>, +<-0.27131,0.09498,ZP>, +<-0.27142,0.10769,ZP>, +<-0.27155,0.12041,ZP>, +<-0.27169,0.13314,ZP>, +<-0.27185,0.14589,ZP>, +<-0.27204,0.15865,ZP>, +<-0.27224,0.17143,ZP>, +<-0.27245,0.18423,ZP>, +<-0.27269,0.19705,ZP>, +<-0.27295,0.20990,ZP>, +<-0.27323,0.22276,ZP>, +<-0.27353,0.23566,ZP>, +<-0.27386,0.24858,ZP>, +<-0.27421,0.26154,ZP>, +<-0.27458,0.27453,ZP>, +<-0.27497,0.28754,ZP>, +<-0.27536,0.30059,ZP>, +<-0.27577,0.31367,ZP>, +<-0.27618,0.32680,ZP>, +<-0.27661,0.33999,ZP>, +<-0.27705,0.35324,ZP>, +<-0.27762,0.36665,ZP>, +<-0.27795,0.37993,0.66008>, +<-0.27824,0.39312,0.66018>, +<-0.27955,0.40774,0.65974>, +<-0.27675,0.41671,0.64585>, +<-0.27042,0.42060,0.63456>, +<-0.26425,0.42470,0.62331>, +<-0.25841,0.42930,0.61191>, +<-0.25172,0.43207,0.60076>, +<-0.24452,0.43366,0.58963>, +<-0.23715,0.43425,0.57852>, +<-0.22968,0.43521,0.56746>, +<-0.22256,0.43749,0.55652>, +<-0.21620,0.44125,0.54553>, +<-0.21084,0.44622,0.53461>, +<-0.20664,0.45162,0.52373>, +<-0.20376,0.45753,0.51261> +<-0.20368,-0.47191,0.51881>, +<-0.20749,-0.46663,0.52958>, +<-0.21101,-0.46066,0.54042>, +<-0.21306,-0.45433,0.55151>, +<-0.21586,-0.44857,0.56284>, +<-0.22101,-0.44372,0.57434>, +<-0.22740,-0.44016,0.58567>, +<-0.23425,-0.43767,0.59660>, +<-0.24230,-0.43742,0.60824>, +<-0.24842,-0.43396,0.61997>, +<-0.25463,-0.43034,0.63124>, +<-0.26093,-0.42664,0.64236>, +<-0.26631,-0.42184,0.65582>, +<-0.26471,-0.40640,0.66024>, +<-0.26458,-0.39310,0.66008>, +<-0.26449,-0.37987,ZP>, +<-0.26413,-0.36646,ZP>, +<-0.26381,-0.35320,ZP>, +<-0.26346,-0.33996,ZP>, +<-0.26309,-0.32675,ZP>, +<-0.26272,-0.31360,ZP>, +<-0.26237,-0.30051,ZP>, +<-0.26202,-0.28745,ZP>, +<-0.26167,-0.27443,ZP>, +<-0.26133,-0.26145,ZP>, +<-0.26100,-0.24850,ZP>, +<-0.26070,-0.23557,ZP>, +<-0.26041,-0.22268,ZP>, +<-0.26014,-0.20982,ZP>, +<-0.25989,-0.19698,ZP>, +<-0.25966,-0.18416,ZP>, +<-0.25946,-0.17136,ZP>, +<-0.25927,-0.15859,ZP>, +<-0.25910,-0.14583,ZP>, +<-0.25895,-0.13309,ZP>, +<-0.25881,-0.12036,ZP>, +<-0.25869,-0.10765,ZP>, +<-0.25859,-0.09495,ZP>, +<-0.25851,-0.08226,ZP>, +<-0.25844,-0.06959,ZP>, +<-0.25838,-0.05693,ZP>, +<-0.25833,-0.04427,ZP>, +<-0.25830,-0.03162,ZP>, +<-0.25828,-0.01897,ZP>, +<-0.25827,-0.00633,ZP>, +<-0.25827,0.00631,ZP>, +<-0.25828,0.01895,ZP>, +<-0.25830,0.03160,ZP>, +<-0.25834,0.04425,ZP>, +<-0.25838,0.05690,ZP>, +<-0.25844,0.06956,ZP>, +<-0.25851,0.08223,ZP>, +<-0.25860,0.09491,ZP>, +<-0.25870,0.10760,ZP>, +<-0.25881,0.12031,ZP>, +<-0.25894,0.13302,ZP>, +<-0.25909,0.14576,ZP>, +<-0.25926,0.15850,ZP>, +<-0.25944,0.17126,ZP>, +<-0.25964,0.18404,ZP>, +<-0.25985,0.19684,ZP>, +<-0.26009,0.20967,ZP>, +<-0.26035,0.22251,ZP>, +<-0.26062,0.23538,ZP>, +<-0.26092,0.24828,ZP>, +<-0.26124,0.26121,ZP>, +<-0.26158,0.27416,ZP>, +<-0.26193,0.28715,ZP>, +<-0.26229,0.30016,ZP>, +<-0.26266,0.31321,ZP>, +<-0.26305,0.32632,ZP>, +<-0.26347,0.33949,ZP>, +<-0.26389,0.35270,ZP>, +<-0.26430,0.36592,ZP>, +<-0.26475,0.37931,ZP>, +<-0.26496,0.39246,0.66008>, +<-0.26518,0.40573,0.66023>, +<-0.26717,0.42107,0.65627>, +<-0.26198,0.42607,0.64239>, +<-0.25551,0.42985,0.63125>, +<-0.24919,0.43351,0.62019>, +<-0.24312,0.43695,0.60857>, +<-0.23538,0.43721,0.59729>, +<-0.22830,0.43904,0.58608>, +<-0.22150,0.44163,0.57461>, +<-0.21565,0.44549,0.56332>, +<-0.21115,0.45045,0.55208>, +<-0.20829,0.45650,0.54088>, +<-0.20623,0.46274,0.52973>, +<-0.20333,0.46859,0.51872> +<-0.19556,-0.47939,0.52551>, +<-0.20067,-0.47522,0.53661>, +<-0.20579,-0.46996,0.54717>, +<-0.20993,-0.46447,0.55807>, +<-0.21300,-0.45891,0.56953>, +<-0.21604,-0.45267,0.58144>, +<-0.22041,-0.44786,0.59257>, +<-0.22741,-0.44532,0.60387>, +<-0.23347,-0.44220,0.61568>, +<-0.23952,-0.43897,0.62752>, +<-0.24554,-0.43564,0.63887>, +<-0.25174,-0.43244,0.65064>, +<-0.25161,-0.41865,0.66031>, +<-0.25140,-0.40552,0.66009>, +<-0.25148,-0.39240,ZP>, +<-0.25126,-0.37910,ZP>, +<-0.25094,-0.36580,ZP>, +<-0.25066,-0.35259,ZP>, +<-0.25034,-0.33939,ZP>, +<-0.25000,-0.32624,ZP>, +<-0.24967,-0.31313,ZP>, +<-0.24934,-0.30007,ZP>, +<-0.24902,-0.28705,ZP>, +<-0.24870,-0.27407,ZP>, +<-0.24839,-0.26112,ZP>, +<-0.24810,-0.24819,ZP>, +<-0.24782,-0.23530,ZP>, +<-0.24755,-0.22243,ZP>, +<-0.24731,-0.20959,ZP>, +<-0.24708,-0.19677,ZP>, +<-0.24687,-0.18397,ZP>, +<-0.24668,-0.17119,ZP>, +<-0.24651,-0.15843,ZP>, +<-0.24636,-0.14569,ZP>, +<-0.24622,-0.13297,ZP>, +<-0.24610,-0.12026,ZP>, +<-0.24599,-0.10756,ZP>, +<-0.24590,-0.09488,ZP>, +<-0.24582,-0.08220,ZP>, +<-0.24575,-0.06954,ZP>, +<-0.24570,-0.05688,ZP>, +<-0.24566,-0.04424,ZP>, +<-0.24563,-0.03160,ZP>, +<-0.24561,-0.01896,ZP>, +<-0.24560,-0.00632,ZP>, +<-0.24560,0.00631,ZP>, +<-0.24561,0.01894,ZP>, +<-0.24563,0.03158,ZP>, +<-0.24566,0.04422,ZP>, +<-0.24570,0.05686,ZP>, +<-0.24575,0.06952,ZP>, +<-0.24582,0.08217,ZP>, +<-0.24590,0.09484,ZP>, +<-0.24599,0.10752,ZP>, +<-0.24609,0.12021,ZP>, +<-0.24621,0.13291,ZP>, +<-0.24634,0.14563,ZP>, +<-0.24649,0.15836,ZP>, +<-0.24666,0.17110,ZP>, +<-0.24684,0.18386,ZP>, +<-0.24704,0.19665,ZP>, +<-0.24725,0.20945,ZP>, +<-0.24749,0.22227,ZP>, +<-0.24774,0.23512,ZP>, +<-0.24802,0.24799,ZP>, +<-0.24831,0.26089,ZP>, +<-0.24861,0.27382,ZP>, +<-0.24893,0.28677,ZP>, +<-0.24927,0.29976,ZP>, +<-0.24962,0.31279,ZP>, +<-0.24998,0.32586,ZP>, +<-0.25036,0.33898,ZP>, +<-0.25074,0.35215,ZP>, +<-0.25110,0.36533,ZP>, +<-0.25148,0.37859,ZP>, +<-0.25180,0.39184,ZP>, +<-0.25182,0.40495,0.66009>, +<-0.25225,0.41773,0.66047>, +<-0.25269,0.43200,0.65084>, +<-0.24637,0.43520,0.63904>, +<-0.24037,0.43848,0.62784>, +<-0.23434,0.44172,0.61598>, +<-0.22829,0.44488,0.60422>, +<-0.22091,0.44580,0.59287>, +<-0.21513,0.44977,0.58120>, +<-0.21110,0.45508,0.56991>, +<-0.20888,0.46102,0.55861>, +<-0.20574,0.46687,0.54733>, +<-0.20198,0.47247,0.53634>, +<-0.19770,0.47800,0.52537> +<-0.18403,-0.48026,0.53136>, +<-0.18991,-0.47865,0.54301>, +<-0.19614,-0.47567,0.55376>, +<-0.20165,-0.47168,0.56470>, +<-0.20643,-0.46684,0.57624>, +<-0.21061,-0.46118,0.58823>, +<-0.21386,-0.45546,0.59919>, +<-0.21835,-0.45047,0.61159>, +<-0.22428,-0.44697,0.62236>, +<-0.23041,-0.44390,0.63415>, +<-0.23863,-0.43351,0.65005>, +<-0.23838,-0.43185,0.65998>, +<-0.23804,-0.41742,ZP>, +<-0.23826,-0.40479,ZP>, +<-0.23826,-0.39162,ZP>, +<-0.23800,-0.37834,ZP>, +<-0.23781,-0.36517,ZP>, +<-0.23755,-0.35201,ZP>, +<-0.23726,-0.33887,ZP>, +<-0.23696,-0.32577,ZP>, +<-0.23666,-0.31270,ZP>, +<-0.23635,-0.29967,ZP>, +<-0.23606,-0.28668,ZP>, +<-0.23577,-0.27373,ZP>, +<-0.23549,-0.26080,ZP>, +<-0.23522,-0.24791,ZP>, +<-0.23496,-0.23504,ZP>, +<-0.23472,-0.22219,ZP>, +<-0.23450,-0.20937,ZP>, +<-0.23429,-0.19657,ZP>, +<-0.23410,-0.18379,ZP>, +<-0.23393,-0.17103,ZP>, +<-0.23377,-0.15829,ZP>, +<-0.23363,-0.14557,ZP>, +<-0.23351,-0.13286,ZP>, +<-0.23339,-0.12016,ZP>, +<-0.23330,-0.10748,ZP>, +<-0.23321,-0.09480,ZP>, +<-0.23314,-0.08214,ZP>, +<-0.23308,-0.06949,ZP>, +<-0.23303,-0.05684,ZP>, +<-0.23299,-0.04421,ZP>, +<-0.23296,-0.03157,ZP>, +<-0.23294,-0.01894,ZP>, +<-0.23294,-0.00632,ZP>, +<-0.23294,0.00631,ZP>, +<-0.23295,0.01893,ZP>, +<-0.23296,0.03156,ZP>, +<-0.23299,0.04419,ZP>, +<-0.23303,0.05683,ZP>, +<-0.23308,0.06947,ZP>, +<-0.23314,0.08212,ZP>, +<-0.23321,0.09478,ZP>, +<-0.23329,0.10744,ZP>, +<-0.23339,0.12012,ZP>, +<-0.23349,0.13281,ZP>, +<-0.23361,0.14551,ZP>, +<-0.23375,0.15822,ZP>, +<-0.23390,0.17095,ZP>, +<-0.23406,0.18370,ZP>, +<-0.23424,0.19646,ZP>, +<-0.23444,0.20924,ZP>, +<-0.23466,0.22205,ZP>, +<-0.23489,0.23487,ZP>, +<-0.23514,0.24772,ZP>, +<-0.23540,0.26060,ZP>, +<-0.23568,0.27350,ZP>, +<-0.23598,0.28643,ZP>, +<-0.23629,0.29939,ZP>, +<-0.23661,0.31239,ZP>, +<-0.23695,0.32543,ZP>, +<-0.23729,0.33850,ZP>, +<-0.23764,0.35161,ZP>, +<-0.23796,0.36474,ZP>, +<-0.23823,0.37789,ZP>, +<-0.23857,0.39111,ZP>, +<-0.23869,0.40428,ZP>, +<-0.23835,0.41669,0.66022>, +<-0.23912,0.43123,0.66017>, +<-0.22965,0.44030,0.64230>, +<-0.23254,0.44296,0.63281>, +<-0.22525,0.44652,0.62038>, +<-0.21923,0.44940,0.61111>, +<-0.21374,0.45302,0.59985>, +<-0.20986,0.45842,0.58797>, +<-0.20649,0.46433,0.57654>, +<-0.20276,0.46981,0.56524>, +<-0.19823,0.47490,0.55392>, +<-0.19311,0.47903,0.54276>, +<-0.18760,0.48307,0.53155> +<-0.17340,-0.47535,0.53624>, +<-0.17864,-0.47567,0.54829>, +<-0.18447,-0.47522,0.55947>, +<-0.19046,-0.47378,0.57074>, +<-0.19631,-0.47083,0.58247>, +<-0.20152,-0.46662,0.59459>, +<-0.20578,-0.46185,0.60594>, +<-0.21011,-0.45623,0.61821>, +<-0.21454,-0.45174,0.62898>, +<-0.22083,-0.44876,0.64137>, +<-0.22574,-0.44548,0.65492>, +<-0.22460,-0.43014,0.66019>, +<-0.22467,-0.41687,ZP>, +<-0.22505,-0.40400,ZP>, +<-0.22493,-0.39075,ZP>, +<-0.22486,-0.37768,ZP>, +<-0.22469,-0.36457,ZP>, +<-0.22447,-0.35146,ZP>, +<-0.22422,-0.33837,ZP>, +<-0.22395,-0.32532,ZP>, +<-0.22367,-0.31229,ZP>, +<-0.22340,-0.29930,ZP>, +<-0.22313,-0.28634,ZP>, +<-0.22286,-0.27341,ZP>, +<-0.22261,-0.26051,ZP>, +<-0.22236,-0.24764,ZP>, +<-0.22213,-0.23479,ZP>, +<-0.22191,-0.22197,ZP>, +<-0.22171,-0.20917,ZP>, +<-0.22152,-0.19639,ZP>, +<-0.22135,-0.18363,ZP>, +<-0.22119,-0.17089,ZP>, +<-0.22105,-0.15816,ZP>, +<-0.22092,-0.14545,ZP>, +<-0.22081,-0.13275,ZP>, +<-0.22070,-0.12007,ZP>, +<-0.22062,-0.10740,ZP>, +<-0.22054,-0.09474,ZP>, +<-0.22047,-0.08209,ZP>, +<-0.22042,-0.06944,ZP>, +<-0.22037,-0.05681,ZP>, +<-0.22034,-0.04418,ZP>, +<-0.22031,-0.03155,ZP>, +<-0.22029,-0.01893,ZP>, +<-0.22029,-0.00631,ZP>, +<-0.22029,0.00630,ZP>, +<-0.22030,0.01892,ZP>, +<-0.22031,0.03154,ZP>, +<-0.22034,0.04417,ZP>, +<-0.22037,0.05679,ZP>, +<-0.22042,0.06943,ZP>, +<-0.22047,0.08207,ZP>, +<-0.22053,0.09471,ZP>, +<-0.22061,0.10737,ZP>, +<-0.22069,0.12003,ZP>, +<-0.22079,0.13271,ZP>, +<-0.22090,0.14540,ZP>, +<-0.22102,0.15810,ZP>, +<-0.22116,0.17081,ZP>, +<-0.22131,0.18354,ZP>, +<-0.22147,0.19629,ZP>, +<-0.22165,0.20905,ZP>, +<-0.22185,0.22184,ZP>, +<-0.22206,0.23464,ZP>, +<-0.22229,0.24747,ZP>, +<-0.22253,0.26032,ZP>, +<-0.22279,0.27320,ZP>, +<-0.22306,0.28610,ZP>, +<-0.22334,0.29904,ZP>, +<-0.22364,0.31201,ZP>, +<-0.22395,0.32501,ZP>, +<-0.22426,0.33804,ZP>, +<-0.22456,0.35109,ZP>, +<-0.22485,0.36417,ZP>, +<-0.22509,0.37727,ZP>, +<-0.22523,0.39029,ZP>, +<-0.22545,0.40353,ZP>, +<-0.22517,0.41642,0.66010>, +<-0.22543,0.42960,0.66019>, +<-0.22676,0.44471,0.65512>, +<-0.22111,0.44888,0.64111>, +<-0.21432,0.45214,0.62776>, +<-0.21055,0.45457,0.61739>, +<-0.20643,0.46030,0.60643>, +<-0.20267,0.46581,0.59457>, +<-0.19853,0.47089,0.58297>, +<-0.19309,0.47519,0.57143>, +<-0.18737,0.47814,0.55990>, +<-0.18176,0.47995,0.54833>, +<-0.17603,0.48133,0.53667> +<-0.16437,-0.46739,0.54093>, +<-0.16960,-0.46787,0.55281>, +<-0.17448,-0.46911,0.56429>, +<-0.17939,-0.47086,0.57611>, +<-0.18511,-0.47061,0.58782>, +<-0.19072,-0.46832,0.59991>, +<-0.19554,-0.46489,0.61184>, +<-0.20005,-0.45988,0.62421>, +<-0.20510,-0.45608,0.63591>, +<-0.20216,-0.45179,0.65001>, +<-0.21162,-0.44279,0.66045>, +<-0.21138,-0.42933,0.66007>, +<-0.21161,-0.41634,ZP>, +<-0.21178,-0.40320,ZP>, +<-0.21176,-0.39010,ZP>, +<-0.21173,-0.37706,ZP>, +<-0.21159,-0.36399,ZP>, +<-0.21142,-0.35094,ZP>, +<-0.21120,-0.33791,ZP>, +<-0.21097,-0.32490,ZP>, +<-0.21072,-0.31191,ZP>, +<-0.21047,-0.29895,ZP>, +<-0.21023,-0.28602,ZP>, +<-0.20999,-0.27312,ZP>, +<-0.20975,-0.26024,ZP>, +<-0.20953,-0.24739,ZP>, +<-0.20932,-0.23457,ZP>, +<-0.20912,-0.22177,ZP>, +<-0.20894,-0.20898,ZP>, +<-0.20877,-0.19622,ZP>, +<-0.20861,-0.18348,ZP>, +<-0.20847,-0.17075,ZP>, +<-0.20834,-0.15804,ZP>, +<-0.20822,-0.14534,ZP>, +<-0.20812,-0.13266,ZP>, +<-0.20803,-0.11999,ZP>, +<-0.20795,-0.10733,ZP>, +<-0.20788,-0.09468,ZP>, +<-0.20782,-0.08204,ZP>, +<-0.20777,-0.06940,ZP>, +<-0.20773,-0.05677,ZP>, +<-0.20770,-0.04415,ZP>, +<-0.20767,-0.03154,ZP>, +<-0.20766,-0.01892,ZP>, +<-0.20765,-0.00631,ZP>, +<-0.20765,0.00630,ZP>, +<-0.20766,0.01891,ZP>, +<-0.20767,0.03153,ZP>, +<-0.20769,0.04414,ZP>, +<-0.20773,0.05676,ZP>, +<-0.20777,0.06939,ZP>, +<-0.20781,0.08202,ZP>, +<-0.20787,0.09465,ZP>, +<-0.20794,0.10730,ZP>, +<-0.20801,0.11995,ZP>, +<-0.20810,0.13262,ZP>, +<-0.20820,0.14529,ZP>, +<-0.20831,0.15798,ZP>, +<-0.20843,0.17068,ZP>, +<-0.20857,0.18339,ZP>, +<-0.20872,0.19613,ZP>, +<-0.20888,0.20887,ZP>, +<-0.20906,0.22164,ZP>, +<-0.20925,0.23443,ZP>, +<-0.20946,0.24724,ZP>, +<-0.20968,0.26007,ZP>, +<-0.20992,0.27292,ZP>, +<-0.21017,0.28580,ZP>, +<-0.21043,0.29871,ZP>, +<-0.21070,0.31165,ZP>, +<-0.21098,0.32461,ZP>, +<-0.21126,0.33760,ZP>, +<-0.21152,0.35060,ZP>, +<-0.21176,0.36363,ZP>, +<-0.21197,0.37667,ZP>, +<-0.21207,0.38968,ZP>, +<-0.21218,0.40277,ZP>, +<-0.21218,0.41593,ZP>, +<-0.21214,0.42881,ZP>, +<-0.21249,0.44208,0.66040>, +<-0.21545,0.44928,0.64426>, +<-0.20408,0.45660,0.63599>, +<-0.20099,0.45922,0.62433>, +<-0.19694,0.46516,0.61266>, +<-0.19250,0.46959,0.60076>, +<-0.18772,0.47300,0.58873>, +<-0.18189,0.47529,0.57694>, +<-0.17611,0.47622,0.56501>, +<-0.17091,0.47612,0.55317>, +<-0.16608,0.47511,0.54122> +<-0.15269,-0.46565,0.54660>, +<-0.15835,-0.46527,0.55807>, +<-0.16378,-0.46553,0.56966>, +<-0.16896,-0.46611,0.58143>, +<-0.17444,-0.46687,0.59310>, +<-0.17963,-0.46697,0.60494>, +<-0.18481,-0.46626,0.61739>, +<-0.18924,-0.46305,0.62951>, +<-0.19473,-0.46058,0.64154>, +<-0.19926,-0.45712,0.65587>, +<-0.19825,-0.44179,0.66010>, +<-0.19843,-0.42874,ZP>, +<-0.19868,-0.41581,ZP>, +<-0.19863,-0.40256,ZP>, +<-0.19866,-0.38953,ZP>, +<-0.19863,-0.37650,ZP>, +<-0.19853,-0.36347,ZP>, +<-0.19840,-0.35047,ZP>, +<-0.19822,-0.33748,ZP>, +<-0.19802,-0.32450,ZP>, +<-0.19780,-0.31155,ZP>, +<-0.19758,-0.29862,ZP>, +<-0.19735,-0.28572,ZP>, +<-0.19714,-0.27284,ZP>, +<-0.19693,-0.25999,ZP>, +<-0.19672,-0.24716,ZP>, +<-0.19653,-0.23436,ZP>, +<-0.19635,-0.22158,ZP>, +<-0.19619,-0.20881,ZP>, +<-0.19603,-0.19607,ZP>, +<-0.19589,-0.18334,ZP>, +<-0.19576,-0.17062,ZP>, +<-0.19564,-0.15793,ZP>, +<-0.19554,-0.14524,ZP>, +<-0.19545,-0.13257,ZP>, +<-0.19536,-0.11991,ZP>, +<-0.19529,-0.10726,ZP>, +<-0.19523,-0.09462,ZP>, +<-0.19517,-0.08199,ZP>, +<-0.19513,-0.06936,ZP>, +<-0.19509,-0.05674,ZP>, +<-0.19506,-0.04413,ZP>, +<-0.19504,-0.03152,ZP>, +<-0.19503,-0.01891,ZP>, +<-0.19502,-0.00631,ZP>, +<-0.19502,0.00630,ZP>, +<-0.19503,0.01891,ZP>, +<-0.19504,0.03151,ZP>, +<-0.19506,0.04412,ZP>, +<-0.19509,0.05673,ZP>, +<-0.19512,0.06935,ZP>, +<-0.19517,0.08197,ZP>, +<-0.19522,0.09460,ZP>, +<-0.19528,0.10724,ZP>, +<-0.19535,0.11988,ZP>, +<-0.19543,0.13253,ZP>, +<-0.19552,0.14520,ZP>, +<-0.19562,0.15787,ZP>, +<-0.19573,0.17056,ZP>, +<-0.19585,0.18326,ZP>, +<-0.19598,0.19598,ZP>, +<-0.19613,0.20871,ZP>, +<-0.19629,0.22146,ZP>, +<-0.19647,0.23423,ZP>, +<-0.19666,0.24702,ZP>, +<-0.19686,0.25983,ZP>, +<-0.19707,0.27266,ZP>, +<-0.19730,0.28552,ZP>, +<-0.19754,0.29840,ZP>, +<-0.19779,0.31131,ZP>, +<-0.19803,0.32423,ZP>, +<-0.19828,0.33718,ZP>, +<-0.19851,0.35015,ZP>, +<-0.19870,0.36312,ZP>, +<-0.19887,0.37612,ZP>, +<-0.19899,0.38914,ZP>, +<-0.19905,0.40217,ZP>, +<-0.19921,0.41540,ZP>, +<-0.19896,0.42823,0.66009>, +<-0.19877,0.44128,0.66020>, +<-0.19990,0.45665,0.65627>, +<-0.19568,0.46019,0.64221>, +<-0.19129,0.46244,0.63073>, +<-0.18640,0.46744,0.61833>, +<-0.18165,0.46998,0.60577>, +<-0.17674,0.47137,0.59359>, +<-0.17150,0.47109,0.58173>, +<-0.16629,0.47007,0.56968>, +<-0.16132,0.46933,0.55779>, +<-0.15653,0.46872,0.54611> +<-0.14237,-0.47192,0.55161>, +<-0.14710,-0.47008,0.56314>, +<-0.15232,-0.46873,0.57486>, +<-0.15769,-0.46799,0.58681>, +<-0.16320,-0.46787,0.59881>, +<-0.16950,-0.47043,0.61094>, +<-0.17429,-0.46865,0.62344>, +<-0.17862,-0.46702,0.63500>, +<-0.18411,-0.46503,0.64774>, +<-0.18533,-0.45502,0.66027>, +<-0.18425,-0.44097,ZP>, +<-0.18495,-0.42772,ZP>, +<-0.18551,-0.41512,ZP>, +<-0.18558,-0.40204,ZP>, +<-0.18561,-0.38902,ZP>, +<-0.18559,-0.37600,ZP>, +<-0.18552,-0.36301,ZP>, +<-0.18541,-0.35004,ZP>, +<-0.18526,-0.33708,ZP>, +<-0.18509,-0.32414,ZP>, +<-0.18490,-0.31122,ZP>, +<-0.18470,-0.29832,ZP>, +<-0.18450,-0.28545,ZP>, +<-0.18431,-0.27259,ZP>, +<-0.18412,-0.25976,ZP>, +<-0.18394,-0.24696,ZP>, +<-0.18376,-0.23417,ZP>, +<-0.18360,-0.22140,ZP>, +<-0.18345,-0.20865,ZP>, +<-0.18331,-0.19592,ZP>, +<-0.18318,-0.18321,ZP>, +<-0.18307,-0.17051,ZP>, +<-0.18296,-0.15782,ZP>, +<-0.18287,-0.14515,ZP>, +<-0.18278,-0.13249,ZP>, +<-0.18271,-0.11984,ZP>, +<-0.18264,-0.10720,ZP>, +<-0.18259,-0.09457,ZP>, +<-0.18254,-0.08195,ZP>, +<-0.18250,-0.06933,ZP>, +<-0.18247,-0.05672,ZP>, +<-0.18244,-0.04411,ZP>, +<-0.18242,-0.03150,ZP>, +<-0.18241,-0.01890,ZP>, +<-0.18240,-0.00630,ZP>, +<-0.18240,0.00630,ZP>, +<-0.18241,0.01890,ZP>, +<-0.18242,0.03150,ZP>, +<-0.18244,0.04410,ZP>, +<-0.18246,0.05671,ZP>, +<-0.18249,0.06932,ZP>, +<-0.18253,0.08193,ZP>, +<-0.18258,0.09455,ZP>, +<-0.18263,0.10718,ZP>, +<-0.18269,0.11981,ZP>, +<-0.18276,0.13246,ZP>, +<-0.18284,0.14511,ZP>, +<-0.18293,0.15777,ZP>, +<-0.18303,0.17045,ZP>, +<-0.18314,0.18314,ZP>, +<-0.18327,0.19584,ZP>, +<-0.18340,0.20856,ZP>, +<-0.18355,0.22130,ZP>, +<-0.18370,0.23405,ZP>, +<-0.18387,0.24682,ZP>, +<-0.18406,0.25961,ZP>, +<-0.18425,0.27243,ZP>, +<-0.18446,0.28526,ZP>, +<-0.18467,0.29812,ZP>, +<-0.18489,0.31099,ZP>, +<-0.18511,0.32389,ZP>, +<-0.18532,0.33680,ZP>, +<-0.18552,0.34973,ZP>, +<-0.18569,0.36267,ZP>, +<-0.18584,0.37564,ZP>, +<-0.18595,0.38864,ZP>, +<-0.18600,0.40164,ZP>, +<-0.18602,0.41468,ZP>, +<-0.18581,0.42766,0.66008>, +<-0.18548,0.44075,0.66012>, +<-0.18602,0.45441,0.66039>, +<-0.18499,0.46473,0.64800>, +<-0.18004,0.46648,0.63559>, +<-0.17551,0.46852,0.62367>, +<-0.17055,0.47002,0.61107>, +<-0.16555,0.46924,0.59882>, +<-0.16055,0.46900,0.58695>, +<-0.15523,0.46860,0.57486>, +<-0.14980,0.46824,0.56311>, +<-0.14478,0.46853,0.55140> +<-0.13729,-0.48276,0.55536>, +<-0.14016,-0.47973,0.56729>, +<-0.14414,-0.47704,0.57931>, +<-0.14851,-0.47503,0.59131>, +<-0.15466,-0.47551,0.60347>, +<-0.15922,-0.47399,0.61590>, +<-0.16387,-0.47241,0.62854>, +<-0.16866,-0.47072,0.64067>, +<-0.17282,-0.46865,0.65422>, +<-0.17227,-0.45413,0.66015>, +<-0.17233,-0.44110,ZP>, +<-0.17256,-0.42794,ZP>, +<-0.17251,-0.41465,ZP>, +<-0.17259,-0.40160,ZP>, +<-0.17262,-0.38857,ZP>, +<-0.17260,-0.37557,ZP>, +<-0.17254,-0.36260,ZP>, +<-0.17245,-0.34965,ZP>, +<-0.17233,-0.33672,ZP>, +<-0.17219,-0.32381,ZP>, +<-0.17202,-0.31092,ZP>, +<-0.17185,-0.29804,ZP>, +<-0.17168,-0.28519,ZP>, +<-0.17150,-0.27236,ZP>, +<-0.17133,-0.25955,ZP>, +<-0.17117,-0.24676,ZP>, +<-0.17101,-0.23399,ZP>, +<-0.17087,-0.22124,ZP>, +<-0.17073,-0.20851,ZP>, +<-0.17061,-0.19579,ZP>, +<-0.17049,-0.18309,ZP>, +<-0.17039,-0.17041,ZP>, +<-0.17029,-0.15773,ZP>, +<-0.17021,-0.14507,ZP>, +<-0.17013,-0.13242,ZP>, +<-0.17007,-0.11978,ZP>, +<-0.17001,-0.10715,ZP>, +<-0.16996,-0.09452,ZP>, +<-0.16991,-0.08191,ZP>, +<-0.16988,-0.06930,ZP>, +<-0.16985,-0.05669,ZP>, +<-0.16982,-0.04409,ZP>, +<-0.16981,-0.03149,ZP>, +<-0.16980,-0.01889,ZP>, +<-0.16979,-0.00630,ZP>, +<-0.16979,0.00629,ZP>, +<-0.16980,0.01889,ZP>, +<-0.16981,0.03148,ZP>, +<-0.16982,0.04408,ZP>, +<-0.16984,0.05668,ZP>, +<-0.16987,0.06928,ZP>, +<-0.16991,0.08189,ZP>, +<-0.16995,0.09451,ZP>, +<-0.17000,0.10713,ZP>, +<-0.17005,0.11975,ZP>, +<-0.17011,0.13239,ZP>, +<-0.17018,0.14503,ZP>, +<-0.17026,0.15769,ZP>, +<-0.17035,0.17035,ZP>, +<-0.17045,0.18303,ZP>, +<-0.17056,0.19572,ZP>, +<-0.17068,0.20843,ZP>, +<-0.17081,0.22115,ZP>, +<-0.17096,0.23389,ZP>, +<-0.17111,0.24664,ZP>, +<-0.17128,0.25941,ZP>, +<-0.17145,0.27221,ZP>, +<-0.17164,0.28502,ZP>, +<-0.17183,0.29785,ZP>, +<-0.17202,0.31070,ZP>, +<-0.17222,0.32357,ZP>, +<-0.17240,0.33645,ZP>, +<-0.17257,0.34935,ZP>, +<-0.17272,0.36227,ZP>, +<-0.17285,0.37521,ZP>, +<-0.17296,0.38819,ZP>, +<-0.17301,0.40118,ZP>, +<-0.17300,0.41420,ZP>, +<-0.17310,0.42744,ZP>, +<-0.17294,0.44058,ZP>, +<-0.17292,0.45362,0.66013>, +<-0.17356,0.46824,0.65449>, +<-0.16947,0.47043,0.64086>, +<-0.16473,0.47210,0.62875>, +<-0.16010,0.47369,0.61617>, +<-0.15562,0.47521,0.60372>, +<-0.14946,0.47174,0.59192>, +<-0.14434,0.47241,0.57970>, +<-0.13930,0.47365,0.56791>, +<-0.13483,0.47561,0.55594> +<-0.13307,-0.49386,0.55957>, +<-0.13621,-0.49110,0.57141>, +<-0.13929,-0.48800,0.58343>, +<-0.14198,-0.48444,0.59560>, +<-0.14488,-0.48060,0.60806>, +<-0.14844,-0.47781,0.62050>, +<-0.15316,-0.47598,0.63321>, +<-0.15752,-0.47461,0.64557>, +<-0.15969,-0.46795,0.65939>, +<-0.15918,-0.45364,ZP>, +<-0.15949,-0.44072,ZP>, +<-0.15953,-0.42740,ZP>, +<-0.15958,-0.41427,ZP>, +<-0.15965,-0.40120,ZP>, +<-0.15967,-0.38818,ZP>, +<-0.15966,-0.37519,ZP>, +<-0.15961,-0.36223,ZP>, +<-0.15953,-0.34930,ZP>, +<-0.15943,-0.33639,ZP>, +<-0.15931,-0.32351,ZP>, +<-0.15917,-0.31064,ZP>, +<-0.15902,-0.29779,ZP>, +<-0.15887,-0.28496,ZP>, +<-0.15871,-0.27215,ZP>, +<-0.15856,-0.25936,ZP>, +<-0.15842,-0.24659,ZP>, +<-0.15828,-0.23384,ZP>, +<-0.15815,-0.22110,ZP>, +<-0.15803,-0.20838,ZP>, +<-0.15792,-0.19568,ZP>, +<-0.15781,-0.18299,ZP>, +<-0.15772,-0.17031,ZP>, +<-0.15764,-0.15765,ZP>, +<-0.15756,-0.14500,ZP>, +<-0.15749,-0.13235,ZP>, +<-0.15743,-0.11972,ZP>, +<-0.15738,-0.10710,ZP>, +<-0.15734,-0.09448,ZP>, +<-0.15730,-0.08187,ZP>, +<-0.15726,-0.06927,ZP>, +<-0.15724,-0.05667,ZP>, +<-0.15722,-0.04407,ZP>, +<-0.15720,-0.03148,ZP>, +<-0.15719,-0.01889,ZP>, +<-0.15719,-0.00630,ZP>, +<-0.15719,0.00629,ZP>, +<-0.15719,0.01888,ZP>, +<-0.15720,0.03147,ZP>, +<-0.15721,0.04406,ZP>, +<-0.15723,0.05666,ZP>, +<-0.15726,0.06926,ZP>, +<-0.15729,0.08186,ZP>, +<-0.15733,0.09447,ZP>, +<-0.15737,0.10708,ZP>, +<-0.15742,0.11970,ZP>, +<-0.15747,0.13232,ZP>, +<-0.15754,0.14496,ZP>, +<-0.15761,0.15761,ZP>, +<-0.15769,0.17026,ZP>, +<-0.15778,0.18293,ZP>, +<-0.15787,0.19561,ZP>, +<-0.15798,0.20830,ZP>, +<-0.15810,0.22101,ZP>, +<-0.15823,0.23374,ZP>, +<-0.15837,0.24648,ZP>, +<-0.15851,0.25923,ZP>, +<-0.15867,0.27201,ZP>, +<-0.15883,0.28480,ZP>, +<-0.15900,0.29761,ZP>, +<-0.15917,0.31043,ZP>, +<-0.15934,0.32328,ZP>, +<-0.15950,0.33614,ZP>, +<-0.15965,0.34901,ZP>, +<-0.15979,0.36192,ZP>, +<-0.15991,0.37484,ZP>, +<-0.15999,0.38779,ZP>, +<-0.16005,0.40078,ZP>, +<-0.16007,0.41381,ZP>, +<-0.16009,0.42690,ZP>, +<-0.16012,0.44019,ZP>, +<-0.15987,0.45311,ZP>, +<-0.16042,0.46733,0.65954>, +<-0.15838,0.47434,0.64581>, +<-0.15406,0.47569,0.63346>, +<-0.14954,0.47713,0.62101>, +<-0.14520,0.47848,0.60841>, +<-0.13990,0.47825,0.59627>, +<-0.13560,0.48029,0.58394>, +<-0.13203,0.48286,0.57211>, +<-0.12903,0.48610,0.55971> +<-0.12189,-0.49974,0.56405>, +<-0.12582,-0.49750,0.57604>, +<-0.12954,-0.49467,0.58806>, +<-0.13281,-0.49131,0.60037>, +<-0.13594,-0.48755,0.61272>, +<-0.13875,-0.48309,0.62516>, +<-0.14217,-0.47938,0.63742>, +<-0.14606,-0.47841,0.65028>, +<-0.14637,-0.46643,0.66019>, +<-0.14634,-0.45331,ZP>, +<-0.14672,-0.44030,ZP>, +<-0.14668,-0.42703,ZP>, +<-0.14675,-0.41395,ZP>, +<-0.14677,-0.40087,ZP>, +<-0.14677,-0.38784,ZP>, +<-0.14676,-0.37486,ZP>, +<-0.14672,-0.36191,ZP>, +<-0.14665,-0.34900,ZP>, +<-0.14657,-0.33611,ZP>, +<-0.14646,-0.32324,ZP>, +<-0.14634,-0.31039,ZP>, +<-0.14621,-0.29756,ZP>, +<-0.14608,-0.28475,ZP>, +<-0.14594,-0.27196,ZP>, +<-0.14581,-0.25919,ZP>, +<-0.14568,-0.24643,ZP>, +<-0.14556,-0.23369,ZP>, +<-0.14544,-0.22097,ZP>, +<-0.14534,-0.20826,ZP>, +<-0.14524,-0.19557,ZP>, +<-0.14515,-0.18289,ZP>, +<-0.14506,-0.17023,ZP>, +<-0.14499,-0.15757,ZP>, +<-0.14492,-0.14493,ZP>, +<-0.14486,-0.13230,ZP>, +<-0.14481,-0.11967,ZP>, +<-0.14476,-0.10705,ZP>, +<-0.14472,-0.09444,ZP>, +<-0.14469,-0.08184,ZP>, +<-0.14466,-0.06924,ZP>, +<-0.14464,-0.05664,ZP>, +<-0.14462,-0.04405,ZP>, +<-0.14460,-0.03147,ZP>, +<-0.14459,-0.01888,ZP>, +<-0.14459,-0.00629,ZP>, +<-0.14459,0.00629,ZP>, +<-0.14459,0.01888,ZP>, +<-0.14460,0.03146,ZP>, +<-0.14461,0.04405,ZP>, +<-0.14463,0.05664,ZP>, +<-0.14465,0.06923,ZP>, +<-0.14468,0.08183,ZP>, +<-0.14471,0.09443,ZP>, +<-0.14475,0.10704,ZP>, +<-0.14479,0.11965,ZP>, +<-0.14484,0.13227,ZP>, +<-0.14490,0.14490,ZP>, +<-0.14496,0.15753,ZP>, +<-0.14503,0.17018,ZP>, +<-0.14511,0.18284,ZP>, +<-0.14520,0.19551,ZP>, +<-0.14529,0.20819,ZP>, +<-0.14540,0.22089,ZP>, +<-0.14551,0.23360,ZP>, +<-0.14564,0.24633,ZP>, +<-0.14577,0.25907,ZP>, +<-0.14591,0.27183,ZP>, +<-0.14605,0.28460,ZP>, +<-0.14620,0.29739,ZP>, +<-0.14635,0.31020,ZP>, +<-0.14650,0.32302,ZP>, +<-0.14664,0.33586,ZP>, +<-0.14677,0.34872,ZP>, +<-0.14689,0.36160,ZP>, +<-0.14700,0.37451,ZP>, +<-0.14709,0.38745,ZP>, +<-0.14717,0.40044,ZP>, +<-0.14723,0.41348,ZP>, +<-0.14724,0.42653,ZP>, +<-0.14736,0.43977,ZP>, +<-0.14707,0.45276,ZP>, +<-0.14714,0.46584,0.66018>, +<-0.14694,0.47813,0.65069>, +<-0.14304,0.47911,0.63785>, +<-0.13865,0.48040,0.62551>, +<-0.13500,0.48300,0.61272>, +<-0.13206,0.48659,0.60047>, +<-0.12998,0.49073,0.58807>, +<-0.12754,0.49396,0.57616>, +<-0.12467,0.49711,0.56386> +<-0.10977,-0.49675,0.56702>, +<-0.11346,-0.49585,0.57922>, +<-0.11724,-0.49441,0.59144>, +<-0.12098,-0.49223,0.60397>, +<-0.12445,-0.48948,0.61650>, +<-0.12748,-0.48518,0.62915>, +<-0.13079,-0.48259,0.64149>, +<-0.13386,-0.48047,0.65549>, +<-0.13338,-0.46586,0.66007>, +<-0.13356,-0.45302,ZP>, +<-0.13378,-0.43980,ZP>, +<-0.13382,-0.42668,ZP>, +<-0.13389,-0.41361,ZP>, +<-0.13391,-0.40055,ZP>, +<-0.13391,-0.38754,ZP>, +<-0.13390,-0.37457,ZP>, +<-0.13386,-0.36163,ZP>, +<-0.13380,-0.34873,ZP>, +<-0.13373,-0.33585,ZP>, +<-0.13364,-0.32300,ZP>, +<-0.13354,-0.31017,ZP>, +<-0.13343,-0.29736,ZP>, +<-0.13331,-0.28456,ZP>, +<-0.13319,-0.27179,ZP>, +<-0.13308,-0.25903,ZP>, +<-0.13296,-0.24629,ZP>, +<-0.13285,-0.23356,ZP>, +<-0.13275,-0.22085,ZP>, +<-0.13266,-0.20816,ZP>, +<-0.13257,-0.19548,ZP>, +<-0.13249,-0.18281,ZP>, +<-0.13242,-0.17015,ZP>, +<-0.13235,-0.15751,ZP>, +<-0.13229,-0.14487,ZP>, +<-0.13224,-0.13224,ZP>, +<-0.13219,-0.11963,ZP>, +<-0.13215,-0.10701,ZP>, +<-0.13211,-0.09441,ZP>, +<-0.13208,-0.08181,ZP>, +<-0.13206,-0.06922,ZP>, +<-0.13204,-0.05663,ZP>, +<-0.13202,-0.04404,ZP>, +<-0.13201,-0.03146,ZP>, +<-0.13200,-0.01887,ZP>, +<-0.13200,-0.00629,ZP>, +<-0.13200,0.00629,ZP>, +<-0.13200,0.01887,ZP>, +<-0.13201,0.03145,ZP>, +<-0.13202,0.04403,ZP>, +<-0.13204,0.05662,ZP>, +<-0.13205,0.06921,ZP>, +<-0.13208,0.08180,ZP>, +<-0.13211,0.09440,ZP>, +<-0.13214,0.10700,ZP>, +<-0.13218,0.11961,ZP>, +<-0.13222,0.13222,ZP>, +<-0.13227,0.14484,ZP>, +<-0.13233,0.15747,ZP>, +<-0.13239,0.17011,ZP>, +<-0.13246,0.18276,ZP>, +<-0.13253,0.19542,ZP>, +<-0.13262,0.20809,ZP>, +<-0.13271,0.22078,ZP>, +<-0.13281,0.23348,ZP>, +<-0.13292,0.24619,ZP>, +<-0.13304,0.25892,ZP>, +<-0.13316,0.27166,ZP>, +<-0.13328,0.28442,ZP>, +<-0.13341,0.29720,ZP>, +<-0.13354,0.30999,ZP>, +<-0.13367,0.32279,ZP>, +<-0.13380,0.33562,ZP>, +<-0.13392,0.34847,ZP>, +<-0.13403,0.36134,ZP>, +<-0.13413,0.37423,ZP>, +<-0.13422,0.38716,ZP>, +<-0.13429,0.40013,ZP>, +<-0.13436,0.41315,ZP>, +<-0.13438,0.42619,ZP>, +<-0.13442,0.43927,ZP>, +<-0.13429,0.45246,ZP>, +<-0.13415,0.46525,ZP>, +<-0.13468,0.47990,0.65599>, +<-0.13169,0.48235,0.64192>, +<-0.12831,0.48492,0.62976>, +<-0.12617,0.49024,0.61725>, +<-0.12349,0.49427,0.60499>, +<-0.12072,0.49793,0.59254>, +<-0.11756,0.50096,0.58043>, +<-0.11446,0.50365,0.56814> +<-0.10045,-0.48797,0.56933>, +<-0.10351,-0.48794,0.58166>, +<-0.10657,-0.48820,0.59413>, +<-0.10959,-0.48816,0.60680>, +<-0.11266,-0.48814,0.61963>, +<-0.11587,-0.48640,0.63260>, +<-0.11909,-0.48565,0.64519>, +<-0.12089,-0.47984,0.65914>, +<-0.12051,-0.46547,ZP>, +<-0.12084,-0.45272,ZP>, +<-0.12089,-0.43941,ZP>, +<-0.12100,-0.42637,ZP>, +<-0.12106,-0.41330,ZP>, +<-0.12108,-0.40026,ZP>, +<-0.12109,-0.38727,ZP>, +<-0.12107,-0.37431,ZP>, +<-0.12103,-0.36139,ZP>, +<-0.12098,-0.34849,ZP>, +<-0.12092,-0.33563,ZP>, +<-0.12084,-0.32279,ZP>, +<-0.12075,-0.30997,ZP>, +<-0.12066,-0.29718,ZP>, +<-0.12056,-0.28440,ZP>, +<-0.12046,-0.27164,ZP>, +<-0.12035,-0.25889,ZP>, +<-0.12026,-0.24616,ZP>, +<-0.12016,-0.23345,ZP>, +<-0.12007,-0.22075,ZP>, +<-0.11999,-0.20807,ZP>, +<-0.11991,-0.19539,ZP>, +<-0.11984,-0.18273,ZP>, +<-0.11978,-0.17008,ZP>, +<-0.11972,-0.15745,ZP>, +<-0.11967,-0.14482,ZP>, +<-0.11962,-0.13220,ZP>, +<-0.11958,-0.11959,ZP>, +<-0.11955,-0.10698,ZP>, +<-0.11951,-0.09438,ZP>, +<-0.11949,-0.08179,ZP>, +<-0.11947,-0.06920,ZP>, +<-0.11945,-0.05661,ZP>, +<-0.11943,-0.04403,ZP>, +<-0.11942,-0.03145,ZP>, +<-0.11942,-0.01887,ZP>, +<-0.11941,-0.00629,ZP>, +<-0.11941,0.00629,ZP>, +<-0.11942,0.01886,ZP>, +<-0.11942,0.03144,ZP>, +<-0.11943,0.04402,ZP>, +<-0.11944,0.05660,ZP>, +<-0.11946,0.06919,ZP>, +<-0.11948,0.08178,ZP>, +<-0.11951,0.09437,ZP>, +<-0.11953,0.10697,ZP>, +<-0.11957,0.11957,ZP>, +<-0.11961,0.13218,ZP>, +<-0.11965,0.14479,ZP>, +<-0.11970,0.15742,ZP>, +<-0.11975,0.17005,ZP>, +<-0.11981,0.18269,ZP>, +<-0.11988,0.19534,ZP>, +<-0.11995,0.20801,ZP>, +<-0.12004,0.22068,ZP>, +<-0.12012,0.23337,ZP>, +<-0.12022,0.24607,ZP>, +<-0.12032,0.25879,ZP>, +<-0.12043,0.27152,ZP>, +<-0.12054,0.28427,ZP>, +<-0.12065,0.29703,ZP>, +<-0.12076,0.30980,ZP>, +<-0.12088,0.32260,ZP>, +<-0.12099,0.33541,ZP>, +<-0.12109,0.34825,ZP>, +<-0.12120,0.36111,ZP>, +<-0.12129,0.37399,ZP>, +<-0.12138,0.38691,ZP>, +<-0.12146,0.39987,ZP>, +<-0.12153,0.41286,ZP>, +<-0.12156,0.42588,ZP>, +<-0.12153,0.43888,ZP>, +<-0.12157,0.45214,ZP>, +<-0.12128,0.46487,ZP>, +<-0.12165,0.47907,0.65940>, +<-0.12003,0.48541,0.64570>, +<-0.11709,0.48758,0.63325>, +<-0.11468,0.49275,0.62090>, +<-0.11168,0.49599,0.60835>, +<-0.10848,0.49865,0.59572>, +<-0.10510,0.50048,0.58333>, +<-0.10187,0.50179,0.57086> +<-0.08792,-0.48681,0.57271>, +<-0.09128,-0.48675,0.58514>, +<-0.09458,-0.48710,0.59758>, +<-0.09820,-0.49030,0.61025>, +<-0.10111,-0.48968,0.62310>, +<-0.10428,-0.48902,0.63580>, +<-0.10715,-0.48850,0.64860>, +<-0.10775,-0.47852,0.66022>, +<-0.10767,-0.46521,ZP>, +<-0.10807,-0.45234,ZP>, +<-0.10806,-0.43911,ZP>, +<-0.10819,-0.42607,ZP>, +<-0.10824,-0.41301,ZP>, +<-0.10827,-0.40000,ZP>, +<-0.10828,-0.38703,ZP>, +<-0.10826,-0.37408,ZP>, +<-0.10823,-0.36117,ZP>, +<-0.10819,-0.34829,ZP>, +<-0.10813,-0.33544,ZP>, +<-0.10806,-0.32261,ZP>, +<-0.10799,-0.30980,ZP>, +<-0.10791,-0.29702,ZP>, +<-0.10782,-0.28425,ZP>, +<-0.10773,-0.27150,ZP>, +<-0.10765,-0.25877,ZP>, +<-0.10756,-0.24605,ZP>, +<-0.10748,-0.23335,ZP>, +<-0.10740,-0.22066,ZP>, +<-0.10733,-0.20798,ZP>, +<-0.10727,-0.19532,ZP>, +<-0.10720,-0.18267,ZP>, +<-0.10715,-0.17003,ZP>, +<-0.10710,-0.15739,ZP>, +<-0.10705,-0.14477,ZP>, +<-0.10701,-0.13216,ZP>, +<-0.10698,-0.11955,ZP>, +<-0.10695,-0.10695,ZP>, +<-0.10692,-0.09435,ZP>, +<-0.10690,-0.08176,ZP>, +<-0.10688,-0.06918,ZP>, +<-0.10686,-0.05660,ZP>, +<-0.10685,-0.04402,ZP>, +<-0.10684,-0.03144,ZP>, +<-0.10684,-0.01886,ZP>, +<-0.10683,-0.00629,ZP>, +<-0.10683,0.00629,ZP>, +<-0.10683,0.01886,ZP>, +<-0.10684,0.03144,ZP>, +<-0.10685,0.04401,ZP>, +<-0.10686,0.05659,ZP>, +<-0.10687,0.06917,ZP>, +<-0.10689,0.08176,ZP>, +<-0.10691,0.09434,ZP>, +<-0.10694,0.10694,ZP>, +<-0.10697,0.11953,ZP>, +<-0.10700,0.13214,ZP>, +<-0.10704,0.14475,ZP>, +<-0.10708,0.15737,ZP>, +<-0.10713,0.16999,ZP>, +<-0.10718,0.18263,ZP>, +<-0.10724,0.19527,ZP>, +<-0.10730,0.20793,ZP>, +<-0.10737,0.22060,ZP>, +<-0.10745,0.23328,ZP>, +<-0.10753,0.24597,ZP>, +<-0.10762,0.25867,ZP>, +<-0.10771,0.27139,ZP>, +<-0.10780,0.28413,ZP>, +<-0.10790,0.29688,ZP>, +<-0.10800,0.30964,ZP>, +<-0.10810,0.32243,ZP>, +<-0.10820,0.33523,ZP>, +<-0.10830,0.34806,ZP>, +<-0.10839,0.36091,ZP>, +<-0.10848,0.37379,ZP>, +<-0.10856,0.38669,ZP>, +<-0.10864,0.39963,ZP>, +<-0.10869,0.41259,ZP>, +<-0.10873,0.42560,ZP>, +<-0.10870,0.43859,ZP>, +<-0.10878,0.45177,ZP>, +<-0.10845,0.46463,ZP>, +<-0.10858,0.47784,0.66021>, +<-0.10813,0.48829,0.64909>, +<-0.10539,0.48883,0.63611>, +<-0.10271,0.49207,0.62360>, +<-0.10003,0.49254,0.61067>, +<-0.09754,0.49280,0.59791>, +<-0.09505,0.49278,0.58522>, +<-0.09251,0.49295,0.57263> +<-0.07733,-0.49349,0.57531>, +<-0.08025,-0.49249,0.58781>, +<-0.08379,-0.49294,0.60031>, +<-0.08671,-0.49244,0.61302>, +<-0.08948,-0.49194,0.62605>, +<-0.09242,-0.49139,0.63860>, +<-0.09496,-0.49093,0.65199>, +<-0.09487,-0.47800,0.66011>, +<-0.09490,-0.46505,ZP>, +<-0.09523,-0.45193,ZP>, +<-0.09528,-0.43883,ZP>, +<-0.09540,-0.42579,ZP>, +<-0.09544,-0.41275,ZP>, +<-0.09548,-0.39976,ZP>, +<-0.09549,-0.38680,ZP>, +<-0.09548,-0.37388,ZP>, +<-0.09545,-0.36098,ZP>, +<-0.09541,-0.34811,ZP>, +<-0.09536,-0.33527,ZP>, +<-0.09530,-0.32245,ZP>, +<-0.09524,-0.30966,ZP>, +<-0.09517,-0.29688,ZP>, +<-0.09510,-0.28413,ZP>, +<-0.09503,-0.27139,ZP>, +<-0.09495,-0.25866,ZP>, +<-0.09488,-0.24595,ZP>, +<-0.09481,-0.23326,ZP>, +<-0.09475,-0.22058,ZP>, +<-0.09468,-0.20791,ZP>, +<-0.09463,-0.19526,ZP>, +<-0.09457,-0.18261,ZP>, +<-0.09453,-0.16997,ZP>, +<-0.09448,-0.15735,ZP>, +<-0.09444,-0.14473,ZP>, +<-0.09441,-0.13212,ZP>, +<-0.09438,-0.11952,ZP>, +<-0.09435,-0.10692,ZP>, +<-0.09433,-0.09433,ZP>, +<-0.09431,-0.08175,ZP>, +<-0.09429,-0.06916,ZP>, +<-0.09428,-0.05658,ZP>, +<-0.09427,-0.04401,ZP>, +<-0.09426,-0.03143,ZP>, +<-0.09426,-0.01886,ZP>, +<-0.09426,-0.00629,ZP>, +<-0.09426,0.00628,ZP>, +<-0.09426,0.01886,ZP>, +<-0.09426,0.03143,ZP>, +<-0.09427,0.04400,ZP>, +<-0.09428,0.05658,ZP>, +<-0.09429,0.06916,ZP>, +<-0.09431,0.08174,ZP>, +<-0.09432,0.09432,ZP>, +<-0.09434,0.10691,ZP>, +<-0.09437,0.11951,ZP>, +<-0.09440,0.13210,ZP>, +<-0.09443,0.14471,ZP>, +<-0.09446,0.15732,ZP>, +<-0.09451,0.16994,ZP>, +<-0.09455,0.18257,ZP>, +<-0.09460,0.19521,ZP>, +<-0.09466,0.20786,ZP>, +<-0.09472,0.22052,ZP>, +<-0.09478,0.23319,ZP>, +<-0.09485,0.24588,ZP>, +<-0.09492,0.25858,ZP>, +<-0.09500,0.27129,ZP>, +<-0.09508,0.28401,ZP>, +<-0.09517,0.29675,ZP>, +<-0.09526,0.30951,ZP>, +<-0.09534,0.32228,ZP>, +<-0.09543,0.33508,ZP>, +<-0.09552,0.34790,ZP>, +<-0.09561,0.36074,ZP>, +<-0.09569,0.37361,ZP>, +<-0.09577,0.38650,ZP>, +<-0.09583,0.39942,ZP>, +<-0.09588,0.41237,ZP>, +<-0.09593,0.42535,ZP>, +<-0.09590,0.43835,ZP>, +<-0.09593,0.45139,ZP>, +<-0.09570,0.46450,ZP>, +<-0.09575,0.47741,0.66010>, +<-0.09591,0.49063,0.65253>, +<-0.09346,0.49119,0.63894>, +<-0.09073,0.49170,0.62649>, +<-0.08832,0.49216,0.61347>, +<-0.08582,0.49262,0.60077>, +<-0.08302,0.49016,0.58815>, +<-0.08042,0.49019,0.57560> +<-0.07158,-0.50487,0.57772>, +<-0.07319,-0.50292,0.59029>, +<-0.07455,-0.50042,0.60294>, +<-0.07613,-0.49768,0.61566>, +<-0.07786,-0.49459,0.62870>, +<-0.08035,-0.49372,0.64118>, +<-0.08235,-0.49198,0.65530>, +<-0.08210,-0.47764,ZP>, +<-0.08223,-0.46491,ZP>, +<-0.08242,-0.45159,ZP>, +<-0.08251,-0.43858,ZP>, +<-0.08262,-0.42553,ZP>, +<-0.08267,-0.41252,ZP>, +<-0.08270,-0.39955,ZP>, +<-0.08271,-0.38661,ZP>, +<-0.08271,-0.37369,ZP>, +<-0.08269,-0.36081,ZP>, +<-0.08265,-0.34796,ZP>, +<-0.08261,-0.33513,ZP>, +<-0.08256,-0.32232,ZP>, +<-0.08251,-0.30953,ZP>, +<-0.08245,-0.29677,ZP>, +<-0.08239,-0.28402,ZP>, +<-0.08233,-0.27129,ZP>, +<-0.08227,-0.25857,ZP>, +<-0.08221,-0.24587,ZP>, +<-0.08215,-0.23318,ZP>, +<-0.08210,-0.22051,ZP>, +<-0.08204,-0.20785,ZP>, +<-0.08200,-0.19520,ZP>, +<-0.08195,-0.18256,ZP>, +<-0.08191,-0.16993,ZP>, +<-0.08187,-0.15731,ZP>, +<-0.08184,-0.14470,ZP>, +<-0.08181,-0.13209,ZP>, +<-0.08179,-0.11949,ZP>, +<-0.08176,-0.10690,ZP>, +<-0.08175,-0.09431,ZP>, +<-0.08173,-0.08173,ZP>, +<-0.08172,-0.06915,ZP>, +<-0.08170,-0.05657,ZP>, +<-0.08170,-0.04400,ZP>, +<-0.08169,-0.03143,ZP>, +<-0.08168,-0.01886,ZP>, +<-0.08168,-0.00629,ZP>, +<-0.08168,0.00628,ZP>, +<-0.08168,0.01885,ZP>, +<-0.08169,0.03142,ZP>, +<-0.08169,0.04400,ZP>, +<-0.08170,0.05657,ZP>, +<-0.08171,0.06914,ZP>, +<-0.08172,0.08172,ZP>, +<-0.08174,0.09430,ZP>, +<-0.08176,0.10689,ZP>, +<-0.08178,0.11948,ZP>, +<-0.08180,0.13208,ZP>, +<-0.08183,0.14468,ZP>, +<-0.08186,0.15729,ZP>, +<-0.08189,0.16990,ZP>, +<-0.08193,0.18253,ZP>, +<-0.08197,0.19516,ZP>, +<-0.08202,0.20780,ZP>, +<-0.08207,0.22046,ZP>, +<-0.08212,0.23312,ZP>, +<-0.08218,0.24580,ZP>, +<-0.08225,0.25849,ZP>, +<-0.08231,0.27119,ZP>, +<-0.08238,0.28391,ZP>, +<-0.08245,0.29664,ZP>, +<-0.08253,0.30939,ZP>, +<-0.08260,0.32216,ZP>, +<-0.08268,0.33495,ZP>, +<-0.08276,0.34776,ZP>, +<-0.08284,0.36059,ZP>, +<-0.08291,0.37345,ZP>, +<-0.08298,0.38633,ZP>, +<-0.08304,0.39924,ZP>, +<-0.08309,0.41218,ZP>, +<-0.08313,0.42513,ZP>, +<-0.08311,0.43814,ZP>, +<-0.08311,0.45110,ZP>, +<-0.08303,0.46439,ZP>, +<-0.08298,0.47706,ZP>, +<-0.08331,0.49152,0.65578>, +<-0.08139,0.49333,0.64152>, +<-0.07893,0.49374,0.62913>, +<-0.07653,0.49412,0.61592>, +<-0.07398,0.49451,0.60312>, +<-0.07116,0.49430,0.59049>, +<-0.06864,0.49515,0.57801> +<-0.06005,-0.51011,0.58040>, +<-0.06180,-0.50799,0.59308>, +<-0.06346,-0.50522,0.60567>, +<-0.06500,-0.50207,0.61834>, +<-0.06631,-0.49748,0.63115>, +<-0.06809,-0.49543,0.64350>, +<-0.06950,-0.49185,0.65780>, +<-0.06936,-0.47730,ZP>, +<-0.06959,-0.46470,ZP>, +<-0.06967,-0.45132,ZP>, +<-0.06977,-0.43835,ZP>, +<-0.06985,-0.42529,ZP>, +<-0.06991,-0.41231,ZP>, +<-0.06994,-0.39936,ZP>, +<-0.06995,-0.38643,ZP>, +<-0.06995,-0.37354,ZP>, +<-0.06993,-0.36067,ZP>, +<-0.06991,-0.34782,ZP>, +<-0.06987,-0.33500,ZP>, +<-0.06983,-0.32221,ZP>, +<-0.06979,-0.30943,ZP>, +<-0.06974,-0.29667,ZP>, +<-0.06970,-0.28393,ZP>, +<-0.06965,-0.27120,ZP>, +<-0.06960,-0.25850,ZP>, +<-0.06955,-0.24580,ZP>, +<-0.06950,-0.23312,ZP>, +<-0.06945,-0.22045,ZP>, +<-0.06941,-0.20780,ZP>, +<-0.06937,-0.19515,ZP>, +<-0.06933,-0.18252,ZP>, +<-0.06930,-0.16989,ZP>, +<-0.06927,-0.15728,ZP>, +<-0.06924,-0.14467,ZP>, +<-0.06922,-0.13207,ZP>, +<-0.06920,-0.11947,ZP>, +<-0.06918,-0.10688,ZP>, +<-0.06916,-0.09430,ZP>, +<-0.06915,-0.08172,ZP>, +<-0.06914,-0.06914,ZP>, +<-0.06913,-0.05656,ZP>, +<-0.06912,-0.04399,ZP>, +<-0.06912,-0.03142,ZP>, +<-0.06911,-0.01885,ZP>, +<-0.06911,-0.00628,ZP>, +<-0.06911,0.00628,ZP>, +<-0.06911,0.01885,ZP>, +<-0.06912,0.03142,ZP>, +<-0.06912,0.04399,ZP>, +<-0.06913,0.05656,ZP>, +<-0.06913,0.06913,ZP>, +<-0.06915,0.08171,ZP>, +<-0.06916,0.09429,ZP>, +<-0.06917,0.10687,ZP>, +<-0.06919,0.11946,ZP>, +<-0.06921,0.13205,ZP>, +<-0.06923,0.14465,ZP>, +<-0.06926,0.15726,ZP>, +<-0.06928,0.16987,ZP>, +<-0.06932,0.18249,ZP>, +<-0.06935,0.19512,ZP>, +<-0.06939,0.20776,ZP>, +<-0.06943,0.22041,ZP>, +<-0.06947,0.23306,ZP>, +<-0.06952,0.24574,ZP>, +<-0.06958,0.25842,ZP>, +<-0.06963,0.27112,ZP>, +<-0.06969,0.28383,ZP>, +<-0.06975,0.29656,ZP>, +<-0.06981,0.30930,ZP>, +<-0.06988,0.32206,ZP>, +<-0.06995,0.33484,ZP>, +<-0.07002,0.34765,ZP>, +<-0.07009,0.36047,ZP>, +<-0.07015,0.37332,ZP>, +<-0.07021,0.38619,ZP>, +<-0.07027,0.39909,ZP>, +<-0.07031,0.41201,ZP>, +<-0.07034,0.42495,ZP>, +<-0.07034,0.43796,ZP>, +<-0.07033,0.45090,ZP>, +<-0.07037,0.46422,ZP>, +<-0.07021,0.47676,ZP>, +<-0.07043,0.49122,0.65820>, +<-0.06911,0.49521,0.64394>, +<-0.06704,0.49549,0.63133>, +<-0.06562,0.49876,0.61825>, +<-0.06433,0.50151,0.60544>, +<-0.06323,0.50431,0.59277>, +<-0.06192,0.50622,0.58018> +<-0.04767,-0.50707,0.58132>, +<-0.04941,-0.50584,0.59413>, +<-0.05125,-0.50372,0.60685>, +<-0.05286,-0.50148,0.61976>, +<-0.05426,-0.49706,0.63267>, +<-0.05571,-0.49691,0.64547>, +<-0.05661,-0.49117,0.65928>, +<-0.05659,-0.47696,ZP>, +<-0.05689,-0.46439,ZP>, +<-0.05693,-0.45108,ZP>, +<-0.05704,-0.43813,ZP>, +<-0.05710,-0.42508,ZP>, +<-0.05715,-0.41213,ZP>, +<-0.05719,-0.39919,ZP>, +<-0.05720,-0.38628,ZP>, +<-0.05720,-0.37340,ZP>, +<-0.05719,-0.36054,ZP>, +<-0.05717,-0.34771,ZP>, +<-0.05715,-0.33490,ZP>, +<-0.05712,-0.32211,ZP>, +<-0.05708,-0.30934,ZP>, +<-0.05705,-0.29659,ZP>, +<-0.05701,-0.28385,ZP>, +<-0.05697,-0.27114,ZP>, +<-0.05693,-0.25843,ZP>, +<-0.05689,-0.24574,ZP>, +<-0.05686,-0.23307,ZP>, +<-0.05682,-0.22040,ZP>, +<-0.05678,-0.20775,ZP>, +<-0.05675,-0.19511,ZP>, +<-0.05672,-0.18248,ZP>, +<-0.05670,-0.16986,ZP>, +<-0.05667,-0.15725,ZP>, +<-0.05665,-0.14464,ZP>, +<-0.05663,-0.13205,ZP>, +<-0.05661,-0.11945,ZP>, +<-0.05660,-0.10687,ZP>, +<-0.05659,-0.09428,ZP>, +<-0.05657,-0.08170,ZP>, +<-0.05656,-0.06913,ZP>, +<-0.05656,-0.05656,ZP>, +<-0.05655,-0.04399,ZP>, +<-0.05655,-0.03142,ZP>, +<-0.05654,-0.01885,ZP>, +<-0.05654,-0.00628,ZP>, +<-0.05654,0.00628,ZP>, +<-0.05654,0.01885,ZP>, +<-0.05655,0.03142,ZP>, +<-0.05655,0.04398,ZP>, +<-0.05656,0.05655,ZP>, +<-0.05656,0.06912,ZP>, +<-0.05657,0.08170,ZP>, +<-0.05658,0.09428,ZP>, +<-0.05659,0.10686,ZP>, +<-0.05660,0.11944,ZP>, +<-0.05662,0.13203,ZP>, +<-0.05664,0.14463,ZP>, +<-0.05666,0.15723,ZP>, +<-0.05668,0.16984,ZP>, +<-0.05671,0.18246,ZP>, +<-0.05673,0.19508,ZP>, +<-0.05676,0.20772,ZP>, +<-0.05680,0.22036,ZP>, +<-0.05683,0.23302,ZP>, +<-0.05687,0.24568,ZP>, +<-0.05691,0.25836,ZP>, +<-0.05696,0.27106,ZP>, +<-0.05701,0.28376,ZP>, +<-0.05706,0.29649,ZP>, +<-0.05711,0.30923,ZP>, +<-0.05717,0.32198,ZP>, +<-0.05723,0.33476,ZP>, +<-0.05728,0.34755,ZP>, +<-0.05734,0.36037,ZP>, +<-0.05740,0.37321,ZP>, +<-0.05746,0.38607,ZP>, +<-0.05750,0.39896,ZP>, +<-0.05754,0.41188,ZP>, +<-0.05757,0.42480,ZP>, +<-0.05759,0.43781,ZP>, +<-0.05757,0.45073,ZP>, +<-0.05762,0.46397,ZP>, +<-0.05740,0.47651,ZP>, +<-0.05749,0.49054,0.65950>, +<-0.05674,0.49679,0.64593>, +<-0.05531,0.49765,0.63325>, +<-0.05435,0.50279,0.62055>, +<-0.05314,0.50619,0.60793>, +<-0.05174,0.50898,0.59521>, +<-0.05021,0.51123,0.58267> +<-0.03844,-0.49817,0.58190>, +<-0.03935,-0.49806,0.59474>, +<-0.04014,-0.49839,0.60765>, +<-0.04102,-0.49835,0.62070>, +<-0.04216,-0.49824,0.63407>, +<-0.04328,-0.49818,0.64697>, +<-0.04377,-0.49047,0.65996>, +<-0.04383,-0.47669,ZP>, +<-0.04414,-0.46405,ZP>, +<-0.04420,-0.45085,ZP>, +<-0.04431,-0.43792,ZP>, +<-0.04436,-0.42490,ZP>, +<-0.04441,-0.41197,ZP>, +<-0.04444,-0.39904,ZP>, +<-0.04445,-0.38615,ZP>, +<-0.04446,-0.37329,ZP>, +<-0.04445,-0.36044,ZP>, +<-0.04444,-0.34762,ZP>, +<-0.04443,-0.33482,ZP>, +<-0.04441,-0.32204,ZP>, +<-0.04439,-0.30927,ZP>, +<-0.04436,-0.29652,ZP>, +<-0.04433,-0.28379,ZP>, +<-0.04430,-0.27108,ZP>, +<-0.04428,-0.25838,ZP>, +<-0.04425,-0.24570,ZP>, +<-0.04422,-0.23303,ZP>, +<-0.04419,-0.22037,ZP>, +<-0.04416,-0.20772,ZP>, +<-0.04414,-0.19508,ZP>, +<-0.04412,-0.18246,ZP>, +<-0.04409,-0.16984,ZP>, +<-0.04408,-0.15723,ZP>, +<-0.04406,-0.14463,ZP>, +<-0.04404,-0.13203,ZP>, +<-0.04403,-0.11944,ZP>, +<-0.04402,-0.10685,ZP>, +<-0.04401,-0.09427,ZP>, +<-0.04400,-0.08170,ZP>, +<-0.04399,-0.06912,ZP>, +<-0.04399,-0.05655,ZP>, +<-0.04398,-0.04398,ZP>, +<-0.04398,-0.03141,ZP>, +<-0.04398,-0.01885,ZP>, +<-0.04398,-0.00628,ZP>, +<-0.04398,0.00628,ZP>, +<-0.04398,0.01885,ZP>, +<-0.04398,0.03141,ZP>, +<-0.04398,0.04398,ZP>, +<-0.04399,0.05655,ZP>, +<-0.04399,0.06912,ZP>, +<-0.04400,0.08169,ZP>, +<-0.04400,0.09427,ZP>, +<-0.04401,0.10685,ZP>, +<-0.04402,0.11943,ZP>, +<-0.04404,0.13202,ZP>, +<-0.04405,0.14461,ZP>, +<-0.04406,0.15721,ZP>, +<-0.04408,0.16982,ZP>, +<-0.04410,0.18243,ZP>, +<-0.04412,0.19505,ZP>, +<-0.04414,0.20769,ZP>, +<-0.04417,0.22033,ZP>, +<-0.04420,0.23298,ZP>, +<-0.04423,0.24564,ZP>, +<-0.04426,0.25832,ZP>, +<-0.04429,0.27101,ZP>, +<-0.04433,0.28371,ZP>, +<-0.04437,0.29643,ZP>, +<-0.04442,0.30917,ZP>, +<-0.04446,0.32192,ZP>, +<-0.04451,0.33469,ZP>, +<-0.04456,0.34748,ZP>, +<-0.04461,0.36029,ZP>, +<-0.04466,0.37312,ZP>, +<-0.04471,0.38598,ZP>, +<-0.04475,0.39886,ZP>, +<-0.04479,0.41177,ZP>, +<-0.04481,0.42469,ZP>, +<-0.04483,0.43768,ZP>, +<-0.04479,0.45058,ZP>, +<-0.04481,0.46372,ZP>, +<-0.04459,0.47635,ZP>, +<-0.04460,0.48998,ZP>, +<-0.04424,0.49810,0.64739>, +<-0.04320,0.49814,0.63445>, +<-0.04217,0.50208,0.62155>, +<-0.04093,0.50432,0.60874>, +<-0.03955,0.50663,0.59592>, +<-0.03808,0.50788,0.58309> +<-0.02601,-0.49535,0.58313>, +<-0.02699,-0.49568,0.59601>, +<-0.02811,-0.49925,0.60882>, +<-0.02900,-0.49917,0.62188>, +<-0.02996,-0.49913,0.63509>, +<-0.03078,-0.49915,0.64809>, +<-0.03100,-0.48995,0.66017>, +<-0.03109,-0.47649,ZP>, +<-0.03137,-0.46374,ZP>, +<-0.03145,-0.45065,ZP>, +<-0.03156,-0.43773,ZP>, +<-0.03161,-0.42475,ZP>, +<-0.03166,-0.41183,ZP>, +<-0.03169,-0.39893,ZP>, +<-0.03170,-0.38605,ZP>, +<-0.03172,-0.37320,ZP>, +<-0.03172,-0.36037,ZP>, +<-0.03172,-0.34755,ZP>, +<-0.03171,-0.33476,ZP>, +<-0.03171,-0.32198,ZP>, +<-0.03169,-0.30922,ZP>, +<-0.03168,-0.29648,ZP>, +<-0.03166,-0.28375,ZP>, +<-0.03164,-0.27104,ZP>, +<-0.03162,-0.25834,ZP>, +<-0.03160,-0.24566,ZP>, +<-0.03158,-0.23299,ZP>, +<-0.03156,-0.22034,ZP>, +<-0.03155,-0.20769,ZP>, +<-0.03153,-0.19506,ZP>, +<-0.03151,-0.18243,ZP>, +<-0.03150,-0.16982,ZP>, +<-0.03148,-0.15721,ZP>, +<-0.03147,-0.14461,ZP>, +<-0.03146,-0.13202,ZP>, +<-0.03145,-0.11943,ZP>, +<-0.03144,-0.10684,ZP>, +<-0.03143,-0.09427,ZP>, +<-0.03143,-0.08169,ZP>, +<-0.03142,-0.06912,ZP>, +<-0.03142,-0.05655,ZP>, +<-0.03142,-0.04398,ZP>, +<-0.03141,-0.03141,ZP>, +<-0.03141,-0.01885,ZP>, +<-0.03141,-0.00628,ZP>, +<-0.03141,0.00628,ZP>, +<-0.03141,0.01885,ZP>, +<-0.03141,0.03141,ZP>, +<-0.03141,0.04398,ZP>, +<-0.03142,0.05654,ZP>, +<-0.03142,0.06911,ZP>, +<-0.03143,0.08168,ZP>, +<-0.03143,0.09426,ZP>, +<-0.03144,0.10684,ZP>, +<-0.03144,0.11942,ZP>, +<-0.03145,0.13201,ZP>, +<-0.03146,0.14460,ZP>, +<-0.03147,0.15720,ZP>, +<-0.03148,0.16980,ZP>, +<-0.03150,0.18241,ZP>, +<-0.03151,0.19503,ZP>, +<-0.03153,0.20766,ZP>, +<-0.03155,0.22030,ZP>, +<-0.03157,0.23295,ZP>, +<-0.03159,0.24561,ZP>, +<-0.03161,0.25829,ZP>, +<-0.03164,0.27097,ZP>, +<-0.03166,0.28368,ZP>, +<-0.03169,0.29639,ZP>, +<-0.03173,0.30912,ZP>, +<-0.03176,0.32187,ZP>, +<-0.03180,0.33464,ZP>, +<-0.03184,0.34743,ZP>, +<-0.03188,0.36023,ZP>, +<-0.03193,0.37306,ZP>, +<-0.03197,0.38591,ZP>, +<-0.03200,0.39878,ZP>, +<-0.03204,0.41168,ZP>, +<-0.03205,0.42459,ZP>, +<-0.03206,0.43756,ZP>, +<-0.03202,0.45047,ZP>, +<-0.03199,0.46353,ZP>, +<-0.03180,0.47629,ZP>, +<-0.03180,0.48965,0.66018>, +<-0.03166,0.49909,0.64839>, +<-0.03096,0.49906,0.63536>, +<-0.03027,0.49909,0.62214>, +<-0.02983,0.49913,0.60907>, +<-0.02961,0.49822,0.59628>, +<-0.02903,0.49811,0.58361> +<-0.01411,-0.49971,0.58374>, +<-0.01486,-0.49942,0.59653>, +<-0.01604,-0.49975,0.60942>, +<-0.01691,-0.49972,0.62250>, +<-0.01768,-0.49971,0.63571>, +<-0.01823,-0.49979,0.64885>, +<-0.01832,-0.48964,0.66019>, +<-0.01840,-0.47637,ZP>, +<-0.01861,-0.46351,ZP>, +<-0.01870,-0.45047,ZP>, +<-0.01880,-0.43756,ZP>, +<-0.01886,-0.42462,ZP>, +<-0.01890,-0.41172,ZP>, +<-0.01893,-0.39884,ZP>, +<-0.01896,-0.38598,ZP>, +<-0.01897,-0.37313,ZP>, +<-0.01899,-0.36031,ZP>, +<-0.01900,-0.34750,ZP>, +<-0.01901,-0.33471,ZP>, +<-0.01901,-0.32194,ZP>, +<-0.01901,-0.30918,ZP>, +<-0.01900,-0.29644,ZP>, +<-0.01900,-0.28372,ZP>, +<-0.01899,-0.27101,ZP>, +<-0.01898,-0.25831,ZP>, +<-0.01897,-0.24564,ZP>, +<-0.01895,-0.23297,ZP>, +<-0.01894,-0.22032,ZP>, +<-0.01893,-0.20767,ZP>, +<-0.01892,-0.19504,ZP>, +<-0.01891,-0.18242,ZP>, +<-0.01890,-0.16981,ZP>, +<-0.01889,-0.15720,ZP>, +<-0.01888,-0.14460,ZP>, +<-0.01888,-0.13201,ZP>, +<-0.01887,-0.11942,ZP>, +<-0.01887,-0.10684,ZP>, +<-0.01886,-0.09426,ZP>, +<-0.01886,-0.08168,ZP>, +<-0.01885,-0.06911,ZP>, +<-0.01885,-0.05654,ZP>, +<-0.01885,-0.04398,ZP>, +<-0.01885,-0.03141,ZP>, +<-0.01885,-0.01885,ZP>, +<-0.01885,-0.00628,ZP>, +<-0.01885,0.00628,ZP>, +<-0.01885,0.01884,ZP>, +<-0.01885,0.03141,ZP>, +<-0.01885,0.04397,ZP>, +<-0.01885,0.05654,ZP>, +<-0.01885,0.06911,ZP>, +<-0.01886,0.08168,ZP>, +<-0.01886,0.09425,ZP>, +<-0.01886,0.10683,ZP>, +<-0.01887,0.11941,ZP>, +<-0.01887,0.13200,ZP>, +<-0.01888,0.14459,ZP>, +<-0.01888,0.15719,ZP>, +<-0.01889,0.16979,ZP>, +<-0.01890,0.18240,ZP>, +<-0.01891,0.19502,ZP>, +<-0.01892,0.20765,ZP>, +<-0.01893,0.22029,ZP>, +<-0.01894,0.23293,ZP>, +<-0.01895,0.24559,ZP>, +<-0.01897,0.25827,ZP>, +<-0.01898,0.27095,ZP>, +<-0.01900,0.28365,ZP>, +<-0.01902,0.29637,ZP>, +<-0.01904,0.30910,ZP>, +<-0.01907,0.32184,ZP>, +<-0.01910,0.33461,ZP>, +<-0.01913,0.34739,ZP>, +<-0.01916,0.36019,ZP>, +<-0.01919,0.37301,ZP>, +<-0.01923,0.38586,ZP>, +<-0.01926,0.39872,ZP>, +<-0.01929,0.41161,ZP>, +<-0.01930,0.42451,ZP>, +<-0.01930,0.43746,ZP>, +<-0.01926,0.45038,ZP>, +<-0.01921,0.46341,ZP>, +<-0.01906,0.47629,ZP>, +<-0.01903,0.48951,0.66019>, +<-0.01899,0.49976,0.64900>, +<-0.01854,0.49968,0.63589>, +<-0.01797,0.49968,0.62275>, +<-0.01743,0.49972,0.60968>, +<-0.01679,0.49795,0.59688>, +<-0.01614,0.49854,0.58421> +<-0.00578,-0.50942,0.58454>, +<-0.00567,-0.50798,0.59742>, +<-0.00532,-0.50580,0.61026>, +<-0.00528,-0.50333,0.62318>, +<-0.00533,-0.49998,0.63607>, +<-0.00560,-0.50010,0.64929>, +<-0.00567,-0.48952,0.66017>, +<-0.00574,-0.47629,ZP>, +<-0.00587,-0.46336,ZP>, +<-0.00596,-0.45035,ZP>, +<-0.00604,-0.43745,ZP>, +<-0.00609,-0.42453,ZP>, +<-0.00614,-0.41165,ZP>, +<-0.00617,-0.39878,ZP>, +<-0.00620,-0.38593,ZP>, +<-0.00623,-0.37309,ZP>, +<-0.00626,-0.36027,ZP>, +<-0.00628,-0.34747,ZP>, +<-0.00630,-0.33468,ZP>, +<-0.00631,-0.32191,ZP>, +<-0.00632,-0.30916,ZP>, +<-0.00633,-0.29642,ZP>, +<-0.00633,-0.28370,ZP>, +<-0.00633,-0.27099,ZP>, +<-0.00633,-0.25830,ZP>, +<-0.00633,-0.24562,ZP>, +<-0.00633,-0.23296,ZP>, +<-0.00632,-0.22030,ZP>, +<-0.00632,-0.20766,ZP>, +<-0.00631,-0.19503,ZP>, +<-0.00631,-0.18241,ZP>, +<-0.00631,-0.16980,ZP>, +<-0.00630,-0.15719,ZP>, +<-0.00630,-0.14460,ZP>, +<-0.00630,-0.13200,ZP>, +<-0.00629,-0.11942,ZP>, +<-0.00629,-0.10683,ZP>, +<-0.00629,-0.09426,ZP>, +<-0.00629,-0.08168,ZP>, +<-0.00629,-0.06911,ZP>, +<-0.00629,-0.05654,ZP>, +<-0.00629,-0.04398,ZP>, +<-0.00628,-0.03141,ZP>, +<-0.00628,-0.01885,ZP>, +<-0.00628,-0.00628,ZP>, +<-0.00628,0.00628,ZP>, +<-0.00628,0.01884,ZP>, +<-0.00628,0.03141,ZP>, +<-0.00628,0.04397,ZP>, +<-0.00628,0.05654,ZP>, +<-0.00629,0.06911,ZP>, +<-0.00629,0.08168,ZP>, +<-0.00629,0.09425,ZP>, +<-0.00629,0.10683,ZP>, +<-0.00629,0.11941,ZP>, +<-0.00629,0.13200,ZP>, +<-0.00629,0.14459,ZP>, +<-0.00629,0.15718,ZP>, +<-0.00630,0.16979,ZP>, +<-0.00630,0.18240,ZP>, +<-0.00630,0.19501,ZP>, +<-0.00630,0.20764,ZP>, +<-0.00631,0.22028,ZP>, +<-0.00631,0.23293,ZP>, +<-0.00632,0.24559,ZP>, +<-0.00632,0.25826,ZP>, +<-0.00633,0.27094,ZP>, +<-0.00634,0.28364,ZP>, +<-0.00635,0.29636,ZP>, +<-0.00636,0.30909,ZP>, +<-0.00638,0.32183,ZP>, +<-0.00639,0.33459,ZP>, +<-0.00641,0.34737,ZP>, +<-0.00644,0.36017,ZP>, +<-0.00646,0.37299,ZP>, +<-0.00649,0.38583,ZP>, +<-0.00651,0.39869,ZP>, +<-0.00653,0.41157,ZP>, +<-0.00655,0.42446,ZP>, +<-0.00655,0.43739,ZP>, +<-0.00652,0.45032,ZP>, +<-0.00647,0.46334,ZP>, +<-0.00636,0.47630,ZP>, +<-0.00629,0.48951,0.66018>, +<-0.00626,0.50010,0.64927>, +<-0.00615,0.49998,0.63613>, +<-0.00604,0.50304,0.62320>, +<-0.00607,0.50534,0.61041>, +<-0.00658,0.50682,0.59745>, +<-0.00661,0.50745,0.58482> +<0.00639,-0.51331,0.58540>, +<0.00658,-0.51126,0.59817>, +<0.00665,-0.50856,0.61094>, +<0.00676,-0.50536,0.62370>, +<0.00689,-0.49996,0.63613>, +<0.00703,-0.50008,0.64936>, +<0.00698,-0.48944,0.66017>, +<0.00690,-0.47623,ZP>, +<0.00685,-0.46329,ZP>, +<0.00678,-0.45028,ZP>, +<0.00674,-0.43739,ZP>, +<0.00668,-0.42448,ZP>, +<0.00664,-0.41161,ZP>, +<0.00659,-0.39875,ZP>, +<0.00655,-0.38590,ZP>, +<0.00651,-0.37307,ZP>, +<0.00647,-0.36025,ZP>, +<0.00644,-0.34745,ZP>, +<0.00641,-0.33467,ZP>, +<0.00638,-0.32190,ZP>, +<0.00636,-0.30914,ZP>, +<0.00634,-0.29641,ZP>, +<0.00633,-0.28369,ZP>, +<0.00632,-0.27098,ZP>, +<0.00631,-0.25829,ZP>, +<0.00630,-0.24562,ZP>, +<0.00630,-0.23295,ZP>, +<0.00630,-0.22030,ZP>, +<0.00629,-0.20766,ZP>, +<0.00629,-0.19503,ZP>, +<0.00629,-0.18241,ZP>, +<0.00629,-0.16980,ZP>, +<0.00629,-0.15719,ZP>, +<0.00629,-0.14460,ZP>, +<0.00629,-0.13200,ZP>, +<0.00628,-0.11942,ZP>, +<0.00628,-0.10683,ZP>, +<0.00628,-0.09426,ZP>, +<0.00628,-0.08168,ZP>, +<0.00628,-0.06911,ZP>, +<0.00628,-0.05654,ZP>, +<0.00628,-0.04398,ZP>, +<0.00628,-0.03141,ZP>, +<0.00628,-0.01885,ZP>, +<0.00628,-0.00628,ZP>, +<0.00628,0.00628,ZP>, +<0.00628,0.01884,ZP>, +<0.00628,0.03141,ZP>, +<0.00628,0.04397,ZP>, +<0.00628,0.05654,ZP>, +<0.00628,0.06911,ZP>, +<0.00628,0.08168,ZP>, +<0.00628,0.09425,ZP>, +<0.00629,0.10683,ZP>, +<0.00629,0.11941,ZP>, +<0.00629,0.13200,ZP>, +<0.00629,0.14459,ZP>, +<0.00629,0.15718,ZP>, +<0.00630,0.16979,ZP>, +<0.00630,0.18240,ZP>, +<0.00630,0.19501,ZP>, +<0.00631,0.20764,ZP>, +<0.00631,0.22028,ZP>, +<0.00631,0.23293,ZP>, +<0.00632,0.24559,ZP>, +<0.00632,0.25826,ZP>, +<0.00632,0.27094,ZP>, +<0.00632,0.28364,ZP>, +<0.00632,0.29636,ZP>, +<0.00632,0.30909,ZP>, +<0.00632,0.32183,ZP>, +<0.00631,0.33460,ZP>, +<0.00630,0.34738,ZP>, +<0.00629,0.36018,ZP>, +<0.00627,0.37299,ZP>, +<0.00625,0.38583,ZP>, +<0.00624,0.39868,ZP>, +<0.00622,0.41156,ZP>, +<0.00621,0.42445,ZP>, +<0.00621,0.43737,ZP>, +<0.00622,0.45028,ZP>, +<0.00626,0.46329,ZP>, +<0.00635,0.47626,ZP>, +<0.00656,0.48946,0.66019>, +<0.00673,0.50011,0.64931>, +<0.00646,0.49999,0.63619>, +<0.00646,0.50283,0.62338>, +<0.00641,0.50518,0.61030>, +<0.00601,0.50652,0.59743>, +<0.00598,0.50775,0.58458> +<0.01826,-0.50895,0.58428>, +<0.01847,-0.50758,0.59723>, +<0.01865,-0.50556,0.61004>, +<0.01877,-0.50309,0.62295>, +<0.01914,-0.49965,0.63583>, +<0.01966,-0.49973,0.64902>, +<0.01963,-0.48942,0.66018>, +<0.01955,-0.47617,ZP>, +<0.01958,-0.46329,ZP>, +<0.01954,-0.45027,ZP>, +<0.01952,-0.43739,ZP>, +<0.01947,-0.42448,ZP>, +<0.01942,-0.41161,ZP>, +<0.01936,-0.39875,ZP>, +<0.01931,-0.38590,ZP>, +<0.01926,-0.37307,ZP>, +<0.01920,-0.36026,ZP>, +<0.01916,-0.34745,ZP>, +<0.01911,-0.33467,ZP>, +<0.01908,-0.32190,ZP>, +<0.01904,-0.30915,ZP>, +<0.01901,-0.29641,ZP>, +<0.01899,-0.28369,ZP>, +<0.01897,-0.27099,ZP>, +<0.01895,-0.25830,ZP>, +<0.01894,-0.24562,ZP>, +<0.01893,-0.23296,ZP>, +<0.01892,-0.22031,ZP>, +<0.01891,-0.20767,ZP>, +<0.01890,-0.19504,ZP>, +<0.01889,-0.18242,ZP>, +<0.01888,-0.16980,ZP>, +<0.01888,-0.15720,ZP>, +<0.01887,-0.14460,ZP>, +<0.01887,-0.13201,ZP>, +<0.01886,-0.11942,ZP>, +<0.01886,-0.10684,ZP>, +<0.01885,-0.09426,ZP>, +<0.01885,-0.08168,ZP>, +<0.01885,-0.06911,ZP>, +<0.01885,-0.05654,ZP>, +<0.01885,-0.04398,ZP>, +<0.01884,-0.03141,ZP>, +<0.01884,-0.01885,ZP>, +<0.01884,-0.00628,ZP>, +<0.01884,0.00628,ZP>, +<0.01884,0.01884,ZP>, +<0.01884,0.03141,ZP>, +<0.01885,0.04397,ZP>, +<0.01885,0.05654,ZP>, +<0.01885,0.06911,ZP>, +<0.01885,0.08168,ZP>, +<0.01886,0.09425,ZP>, +<0.01886,0.10683,ZP>, +<0.01886,0.11941,ZP>, +<0.01887,0.13200,ZP>, +<0.01888,0.14459,ZP>, +<0.01888,0.15719,ZP>, +<0.01889,0.16979,ZP>, +<0.01890,0.18240,ZP>, +<0.01891,0.19502,ZP>, +<0.01892,0.20765,ZP>, +<0.01893,0.22029,ZP>, +<0.01894,0.23294,ZP>, +<0.01895,0.24560,ZP>, +<0.01896,0.25827,ZP>, +<0.01897,0.27096,ZP>, +<0.01899,0.28366,ZP>, +<0.01899,0.29637,ZP>, +<0.01900,0.30911,ZP>, +<0.01901,0.32185,ZP>, +<0.01901,0.33462,ZP>, +<0.01901,0.34740,ZP>, +<0.01901,0.36020,ZP>, +<0.01901,0.37302,ZP>, +<0.01900,0.38585,ZP>, +<0.01899,0.39871,ZP>, +<0.01898,0.41159,ZP>, +<0.01897,0.42447,ZP>, +<0.01898,0.43739,ZP>, +<0.01897,0.45027,ZP>, +<0.01901,0.46328,ZP>, +<0.01901,0.47614,ZP>, +<0.01925,0.48939,0.66020>, +<0.01945,0.49978,0.64903>, +<0.01883,0.49969,0.63584>, +<0.01820,0.49969,0.62272>, +<0.01721,0.49971,0.60941>, +<0.01668,0.49976,0.59671>, +<0.01600,0.49991,0.58354> +<0.02602,-0.49825,0.58343>, +<0.02743,-0.49815,0.59617>, +<0.02904,-0.49917,0.60895>, +<0.03027,-0.49909,0.62200>, +<0.03142,-0.49904,0.63526>, +<0.03227,-0.49906,0.64831>, +<0.03232,-0.48953,0.66019>, +<0.03222,-0.47614,ZP>, +<0.03235,-0.46338,ZP>, +<0.03231,-0.45033,ZP>, +<0.03231,-0.43745,ZP>, +<0.03225,-0.42452,ZP>, +<0.03220,-0.41165,ZP>, +<0.03213,-0.39878,ZP>, +<0.03207,-0.38593,ZP>, +<0.03200,-0.37309,ZP>, +<0.03194,-0.36028,ZP>, +<0.03188,-0.34747,ZP>, +<0.03182,-0.33469,ZP>, +<0.03177,-0.32192,ZP>, +<0.03173,-0.30917,ZP>, +<0.03169,-0.29643,ZP>, +<0.03165,-0.28371,ZP>, +<0.03163,-0.27100,ZP>, +<0.03160,-0.25831,ZP>, +<0.03158,-0.24564,ZP>, +<0.03156,-0.23297,ZP>, +<0.03154,-0.22032,ZP>, +<0.03152,-0.20768,ZP>, +<0.03151,-0.19505,ZP>, +<0.03149,-0.18243,ZP>, +<0.03148,-0.16981,ZP>, +<0.03147,-0.15721,ZP>, +<0.03146,-0.14461,ZP>, +<0.03145,-0.13201,ZP>, +<0.03144,-0.11943,ZP>, +<0.03143,-0.10684,ZP>, +<0.03143,-0.09426,ZP>, +<0.03142,-0.08169,ZP>, +<0.03142,-0.06912,ZP>, +<0.03141,-0.05655,ZP>, +<0.03141,-0.04398,ZP>, +<0.03141,-0.03141,ZP>, +<0.03141,-0.01885,ZP>, +<0.03141,-0.00628,ZP>, +<0.03141,0.00628,ZP>, +<0.03141,0.01885,ZP>, +<0.03141,0.03141,ZP>, +<0.03141,0.04398,ZP>, +<0.03141,0.05654,ZP>, +<0.03142,0.06911,ZP>, +<0.03142,0.08168,ZP>, +<0.03143,0.09426,ZP>, +<0.03143,0.10684,ZP>, +<0.03144,0.11942,ZP>, +<0.03145,0.13201,ZP>, +<0.03146,0.14460,ZP>, +<0.03147,0.15720,ZP>, +<0.03148,0.16980,ZP>, +<0.03150,0.18242,ZP>, +<0.03151,0.19504,ZP>, +<0.03153,0.20767,ZP>, +<0.03155,0.22031,ZP>, +<0.03157,0.23296,ZP>, +<0.03159,0.24562,ZP>, +<0.03161,0.25830,ZP>, +<0.03163,0.27098,ZP>, +<0.03165,0.28369,ZP>, +<0.03167,0.29641,ZP>, +<0.03169,0.30914,ZP>, +<0.03171,0.32189,ZP>, +<0.03172,0.33466,ZP>, +<0.03173,0.34744,ZP>, +<0.03174,0.36024,ZP>, +<0.03175,0.37306,ZP>, +<0.03175,0.38590,ZP>, +<0.03175,0.39876,ZP>, +<0.03175,0.41164,ZP>, +<0.03174,0.42452,ZP>, +<0.03176,0.43746,ZP>, +<0.03175,0.45031,ZP>, +<0.03181,0.46334,ZP>, +<0.03171,0.47594,ZP>, +<0.03188,0.48933,0.66019>, +<0.03722,0.49551,0.65000>, +<0.03110,0.49907,0.63537>, +<0.03011,0.49911,0.62206>, +<0.02924,0.49918,0.60887>, +<0.02842,0.49615,0.59609>, +<0.02755,0.49528,0.58308> +<0.03884,-0.49685,0.58213>, +<0.04017,-0.49656,0.59496>, +<0.04130,-0.49831,0.60786>, +<0.04241,-0.49821,0.62091>, +<0.04365,-0.49812,0.63427>, +<0.04478,-0.49806,0.64720>, +<0.04505,-0.48989,ZP>, +<0.04496,-0.47620,ZP>, +<0.04515,-0.46357,ZP>, +<0.04509,-0.45044,ZP>, +<0.04509,-0.43756,ZP>, +<0.04503,-0.42460,ZP>, +<0.04498,-0.41171,ZP>, +<0.04491,-0.39883,ZP>, +<0.04483,-0.38598,ZP>, +<0.04475,-0.37314,ZP>, +<0.04468,-0.36032,ZP>, +<0.04460,-0.34751,ZP>, +<0.04454,-0.33472,ZP>, +<0.04447,-0.32195,ZP>, +<0.04442,-0.30920,ZP>, +<0.04437,-0.29646,ZP>, +<0.04432,-0.28374,ZP>, +<0.04429,-0.27103,ZP>, +<0.04425,-0.25834,ZP>, +<0.04422,-0.24566,ZP>, +<0.04419,-0.23300,ZP>, +<0.04416,-0.22034,ZP>, +<0.04414,-0.20770,ZP>, +<0.04412,-0.19507,ZP>, +<0.04410,-0.18244,ZP>, +<0.04408,-0.16983,ZP>, +<0.04406,-0.15722,ZP>, +<0.04405,-0.14462,ZP>, +<0.04403,-0.13202,ZP>, +<0.04402,-0.11944,ZP>, +<0.04401,-0.10685,ZP>, +<0.04400,-0.09427,ZP>, +<0.04399,-0.08169,ZP>, +<0.04399,-0.06912,ZP>, +<0.04398,-0.05655,ZP>, +<0.04398,-0.04398,ZP>, +<0.04397,-0.03141,ZP>, +<0.04397,-0.01885,ZP>, +<0.04397,-0.00628,ZP>, +<0.04397,0.00628,ZP>, +<0.04397,0.01885,ZP>, +<0.04397,0.03141,ZP>, +<0.04398,0.04398,ZP>, +<0.04398,0.05655,ZP>, +<0.04399,0.06912,ZP>, +<0.04399,0.08169,ZP>, +<0.04400,0.09427,ZP>, +<0.04401,0.10685,ZP>, +<0.04402,0.11943,ZP>, +<0.04403,0.13202,ZP>, +<0.04405,0.14461,ZP>, +<0.04406,0.15721,ZP>, +<0.04408,0.16982,ZP>, +<0.04410,0.18243,ZP>, +<0.04412,0.19506,ZP>, +<0.04415,0.20769,ZP>, +<0.04417,0.22033,ZP>, +<0.04420,0.23299,ZP>, +<0.04423,0.24565,ZP>, +<0.04426,0.25833,ZP>, +<0.04429,0.27102,ZP>, +<0.04432,0.28373,ZP>, +<0.04435,0.29645,ZP>, +<0.04438,0.30919,ZP>, +<0.04441,0.32194,ZP>, +<0.04444,0.33471,ZP>, +<0.04446,0.34750,ZP>, +<0.04448,0.36031,ZP>, +<0.04449,0.37314,ZP>, +<0.04450,0.38598,ZP>, +<0.04451,0.39884,ZP>, +<0.04452,0.41173,ZP>, +<0.04452,0.42461,ZP>, +<0.04454,0.43756,ZP>, +<0.04455,0.45039,ZP>, +<0.04463,0.46349,ZP>, +<0.04474,0.47575,ZP>, +<0.04474,0.48953,0.66008>, +<0.04444,0.49808,0.64709>, +<0.04318,0.49815,0.63423>, +<0.04232,0.49821,0.62081>, +<0.04142,0.49829,0.60781>, +<0.04065,0.49770,0.59495>, +<0.04018,0.49764,0.58209> +<0.04922,-0.50534,0.58125>, +<0.05097,-0.50411,0.59391>, +<0.05272,-0.50243,0.60673>, +<0.05422,-0.50059,0.61979>, +<0.05564,-0.49690,0.63291>, +<0.05749,-0.49555,0.64538>, +<0.05787,-0.49048,0.65953>, +<0.05775,-0.47637,ZP>, +<0.05794,-0.46385,ZP>, +<0.05786,-0.45060,ZP>, +<0.05786,-0.43770,ZP>, +<0.05781,-0.42471,ZP>, +<0.05776,-0.41181,ZP>, +<0.05768,-0.39892,ZP>, +<0.05760,-0.38605,ZP>, +<0.05751,-0.37320,ZP>, +<0.05742,-0.36038,ZP>, +<0.05734,-0.34757,ZP>, +<0.05726,-0.33477,ZP>, +<0.05718,-0.32200,ZP>, +<0.05712,-0.30924,ZP>, +<0.05706,-0.29651,ZP>, +<0.05700,-0.28378,ZP>, +<0.05695,-0.27107,ZP>, +<0.05691,-0.25838,ZP>, +<0.05687,-0.24570,ZP>, +<0.05683,-0.23303,ZP>, +<0.05679,-0.22038,ZP>, +<0.05676,-0.20773,ZP>, +<0.05673,-0.19510,ZP>, +<0.05670,-0.18247,ZP>, +<0.05668,-0.16985,ZP>, +<0.05666,-0.15724,ZP>, +<0.05664,-0.14464,ZP>, +<0.05662,-0.13204,ZP>, +<0.05660,-0.11945,ZP>, +<0.05659,-0.10686,ZP>, +<0.05658,-0.09428,ZP>, +<0.05657,-0.08170,ZP>, +<0.05656,-0.06913,ZP>, +<0.05655,-0.05656,ZP>, +<0.05655,-0.04399,ZP>, +<0.05654,-0.03142,ZP>, +<0.05654,-0.01885,ZP>, +<0.05654,-0.00628,ZP>, +<0.05654,0.00628,ZP>, +<0.05654,0.01885,ZP>, +<0.05654,0.03142,ZP>, +<0.05655,0.04398,ZP>, +<0.05655,0.05655,ZP>, +<0.05656,0.06912,ZP>, +<0.05657,0.08170,ZP>, +<0.05658,0.09428,ZP>, +<0.05659,0.10686,ZP>, +<0.05660,0.11944,ZP>, +<0.05662,0.13203,ZP>, +<0.05664,0.14463,ZP>, +<0.05666,0.15723,ZP>, +<0.05668,0.16984,ZP>, +<0.05671,0.18246,ZP>, +<0.05674,0.19509,ZP>, +<0.05677,0.20772,ZP>, +<0.05680,0.22037,ZP>, +<0.05684,0.23303,ZP>, +<0.05687,0.24569,ZP>, +<0.05691,0.25838,ZP>, +<0.05695,0.27107,ZP>, +<0.05699,0.28378,ZP>, +<0.05704,0.29651,ZP>, +<0.05708,0.30925,ZP>, +<0.05712,0.32201,ZP>, +<0.05716,0.33479,ZP>, +<0.05719,0.34758,ZP>, +<0.05722,0.36040,ZP>, +<0.05725,0.37323,ZP>, +<0.05727,0.38608,ZP>, +<0.05728,0.39895,ZP>, +<0.05729,0.41185,ZP>, +<0.05730,0.42474,ZP>, +<0.05732,0.43771,ZP>, +<0.05735,0.45054,ZP>, +<0.05745,0.46375,ZP>, +<0.05762,0.47614,ZP>, +<0.05760,0.49032,0.65957>, +<0.05701,0.49676,0.64569>, +<0.05559,0.49700,0.63249>, +<0.05397,0.50187,0.62006>, +<0.05234,0.50415,0.60727>, +<0.05050,0.50631,0.59433>, +<0.04881,0.50745,0.58153> +<0.06187,-0.50360,0.57943>, +<0.06355,-0.50267,0.59206>, +<0.06495,-0.50094,0.60506>, +<0.06621,-0.49876,0.61800>, +<0.06762,-0.49541,0.63113>, +<0.06953,-0.49515,0.64378>, +<0.07077,-0.49120,0.65819>, +<0.07054,-0.47664,ZP>, +<0.07066,-0.46412,ZP>, +<0.07062,-0.45078,ZP>, +<0.07062,-0.43786,ZP>, +<0.07059,-0.42486,ZP>, +<0.07053,-0.41194,ZP>, +<0.07046,-0.39903,ZP>, +<0.07037,-0.38615,ZP>, +<0.07027,-0.37329,ZP>, +<0.07017,-0.36046,ZP>, +<0.07007,-0.34764,ZP>, +<0.06998,-0.33484,ZP>, +<0.06990,-0.32207,ZP>, +<0.06982,-0.30931,ZP>, +<0.06975,-0.29657,ZP>, +<0.06969,-0.28384,ZP>, +<0.06963,-0.27113,ZP>, +<0.06957,-0.25843,ZP>, +<0.06952,-0.24575,ZP>, +<0.06947,-0.23308,ZP>, +<0.06943,-0.22042,ZP>, +<0.06939,-0.20777,ZP>, +<0.06935,-0.19513,ZP>, +<0.06932,-0.18250,ZP>, +<0.06928,-0.16988,ZP>, +<0.06926,-0.15727,ZP>, +<0.06923,-0.14466,ZP>, +<0.06921,-0.13206,ZP>, +<0.06919,-0.11947,ZP>, +<0.06917,-0.10688,ZP>, +<0.06916,-0.09429,ZP>, +<0.06914,-0.08171,ZP>, +<0.06913,-0.06914,ZP>, +<0.06912,-0.05656,ZP>, +<0.06912,-0.04399,ZP>, +<0.06911,-0.03142,ZP>, +<0.06911,-0.01885,ZP>, +<0.06911,-0.00628,ZP>, +<0.06911,0.00628,ZP>, +<0.06911,0.01885,ZP>, +<0.06911,0.03142,ZP>, +<0.06912,0.04399,ZP>, +<0.06912,0.05656,ZP>, +<0.06913,0.06913,ZP>, +<0.06914,0.08171,ZP>, +<0.06916,0.09429,ZP>, +<0.06917,0.10687,ZP>, +<0.06919,0.11946,ZP>, +<0.06921,0.13205,ZP>, +<0.06923,0.14465,ZP>, +<0.06926,0.15726,ZP>, +<0.06928,0.16987,ZP>, +<0.06932,0.18249,ZP>, +<0.06935,0.19512,ZP>, +<0.06939,0.20776,ZP>, +<0.06943,0.22041,ZP>, +<0.06948,0.23307,ZP>, +<0.06952,0.24575,ZP>, +<0.06957,0.25844,ZP>, +<0.06963,0.27114,ZP>, +<0.06968,0.28385,ZP>, +<0.06973,0.29658,ZP>, +<0.06978,0.30933,ZP>, +<0.06984,0.32210,ZP>, +<0.06988,0.33488,ZP>, +<0.06993,0.34769,ZP>, +<0.06997,0.36051,ZP>, +<0.07001,0.37335,ZP>, +<0.07004,0.38622,ZP>, +<0.07006,0.39910,ZP>, +<0.07007,0.41200,ZP>, +<0.07009,0.42491,ZP>, +<0.07010,0.43789,ZP>, +<0.07013,0.45075,ZP>, +<0.07018,0.46407,ZP>, +<0.07000,0.47668,ZP>, +<0.07016,0.49126,0.65821>, +<0.06900,0.49522,0.64376>, +<0.06717,0.49812,0.63148>, +<0.06609,0.50266,0.61875>, +<0.06440,0.50623,0.60626>, +<0.06286,0.50905,0.59336>, +<0.06096,0.51145,0.58101> +<0.06975,-0.49319,0.57760>, +<0.07215,-0.49280,0.59023>, +<0.07488,-0.49439,0.60294>, +<0.07716,-0.49402,0.61572>, +<0.07938,-0.49367,0.62899>, +<0.08173,-0.49328,0.64150>, +<0.08361,-0.49148,0.65577>, +<0.08329,-0.47697,ZP>, +<0.08331,-0.46431,ZP>, +<0.08338,-0.45100,ZP>, +<0.08338,-0.43805,ZP>, +<0.08338,-0.42504,ZP>, +<0.08332,-0.41209,ZP>, +<0.08324,-0.39917,ZP>, +<0.08314,-0.38627,ZP>, +<0.08304,-0.37340,ZP>, +<0.08293,-0.36056,ZP>, +<0.08282,-0.34773,ZP>, +<0.08272,-0.33493,ZP>, +<0.08263,-0.32215,ZP>, +<0.08254,-0.30939,ZP>, +<0.08246,-0.29665,ZP>, +<0.08238,-0.28392,ZP>, +<0.08231,-0.27120,ZP>, +<0.08225,-0.25850,ZP>, +<0.08218,-0.24581,ZP>, +<0.08213,-0.23314,ZP>, +<0.08207,-0.22047,ZP>, +<0.08202,-0.20782,ZP>, +<0.08197,-0.19518,ZP>, +<0.08193,-0.18254,ZP>, +<0.08189,-0.16991,ZP>, +<0.08186,-0.15730,ZP>, +<0.08183,-0.14469,ZP>, +<0.08180,-0.13208,ZP>, +<0.08178,-0.11949,ZP>, +<0.08176,-0.10690,ZP>, +<0.08174,-0.09431,ZP>, +<0.08172,-0.08173,ZP>, +<0.08171,-0.06915,ZP>, +<0.08170,-0.05657,ZP>, +<0.08169,-0.04400,ZP>, +<0.08168,-0.03143,ZP>, +<0.08168,-0.01885,ZP>, +<0.08168,-0.00628,ZP>, +<0.08168,0.00628,ZP>, +<0.08168,0.01885,ZP>, +<0.08168,0.03142,ZP>, +<0.08169,0.04400,ZP>, +<0.08170,0.05657,ZP>, +<0.08171,0.06914,ZP>, +<0.08172,0.08172,ZP>, +<0.08174,0.09430,ZP>, +<0.08175,0.10689,ZP>, +<0.08178,0.11948,ZP>, +<0.08180,0.13208,ZP>, +<0.08183,0.14468,ZP>, +<0.08186,0.15729,ZP>, +<0.08189,0.16990,ZP>, +<0.08193,0.18253,ZP>, +<0.08197,0.19517,ZP>, +<0.08202,0.20781,ZP>, +<0.08207,0.22047,ZP>, +<0.08213,0.23313,ZP>, +<0.08218,0.24581,ZP>, +<0.08224,0.25851,ZP>, +<0.08231,0.27122,ZP>, +<0.08237,0.28394,ZP>, +<0.08244,0.29668,ZP>, +<0.08250,0.30943,ZP>, +<0.08256,0.32221,ZP>, +<0.08262,0.33500,ZP>, +<0.08268,0.34781,ZP>, +<0.08273,0.36065,ZP>, +<0.08278,0.37350,ZP>, +<0.08282,0.38638,ZP>, +<0.08285,0.39927,ZP>, +<0.08286,0.41219,ZP>, +<0.08289,0.42513,ZP>, +<0.08287,0.43812,ZP>, +<0.08287,0.45105,ZP>, +<0.08277,0.46437,ZP>, +<0.08267,0.47707,ZP>, +<0.08297,0.49156,0.65580>, +<0.08096,0.49357,0.64159>, +<0.07853,0.49507,0.62897>, +<0.07715,0.49865,0.61610>, +<0.07574,0.50139,0.60335>, +<0.07426,0.50394,0.59035>, +<0.07277,0.50603,0.57813> +<0.08225,-0.49080,0.57537>, +<0.08472,-0.49095,0.58797>, +<0.08695,-0.49241,0.60062>, +<0.08910,-0.49200,0.61331>, +<0.09119,-0.49185,0.62639>, +<0.09372,-0.49115,0.63897>, +<0.09616,-0.49057,0.65256>, +<0.09600,-0.47735,0.66010>, +<0.09595,-0.46442,ZP>, +<0.09619,-0.45130,ZP>, +<0.09615,-0.43827,ZP>, +<0.09617,-0.42526,ZP>, +<0.09610,-0.41228,ZP>, +<0.09603,-0.39934,ZP>, +<0.09592,-0.38642,ZP>, +<0.09581,-0.37354,ZP>, +<0.09570,-0.36068,ZP>, +<0.09559,-0.34785,ZP>, +<0.09548,-0.33504,ZP>, +<0.09537,-0.32226,ZP>, +<0.09528,-0.30949,ZP>, +<0.09518,-0.29674,ZP>, +<0.09509,-0.28401,ZP>, +<0.09501,-0.27129,ZP>, +<0.09493,-0.25859,ZP>, +<0.09486,-0.24589,ZP>, +<0.09479,-0.23321,ZP>, +<0.09472,-0.22054,ZP>, +<0.09466,-0.20788,ZP>, +<0.09461,-0.19523,ZP>, +<0.09456,-0.18259,ZP>, +<0.09451,-0.16996,ZP>, +<0.09447,-0.15733,ZP>, +<0.09443,-0.14472,ZP>, +<0.09440,-0.13211,ZP>, +<0.09437,-0.11951,ZP>, +<0.09434,-0.10692,ZP>, +<0.09432,-0.09433,ZP>, +<0.09430,-0.08174,ZP>, +<0.09429,-0.06916,ZP>, +<0.09428,-0.05658,ZP>, +<0.09427,-0.04400,ZP>, +<0.09426,-0.03143,ZP>, +<0.09425,-0.01886,ZP>, +<0.09425,-0.00629,ZP>, +<0.09425,0.00629,ZP>, +<0.09425,0.01886,ZP>, +<0.09426,0.03143,ZP>, +<0.09427,0.04400,ZP>, +<0.09428,0.05658,ZP>, +<0.09429,0.06916,ZP>, +<0.09430,0.08174,ZP>, +<0.09432,0.09432,ZP>, +<0.09434,0.10691,ZP>, +<0.09437,0.11951,ZP>, +<0.09440,0.13210,ZP>, +<0.09443,0.14471,ZP>, +<0.09447,0.15732,ZP>, +<0.09451,0.16995,ZP>, +<0.09455,0.18258,ZP>, +<0.09460,0.19522,ZP>, +<0.09466,0.20787,ZP>, +<0.09472,0.22053,ZP>, +<0.09478,0.23321,ZP>, +<0.09485,0.24589,ZP>, +<0.09492,0.25859,ZP>, +<0.09500,0.27131,ZP>, +<0.09508,0.28404,ZP>, +<0.09515,0.29679,ZP>, +<0.09523,0.30955,ZP>, +<0.09530,0.32233,ZP>, +<0.09538,0.33514,ZP>, +<0.09544,0.34796,ZP>, +<0.09551,0.36081,ZP>, +<0.09556,0.37368,ZP>, +<0.09561,0.38657,ZP>, +<0.09565,0.39949,ZP>, +<0.09566,0.41243,ZP>, +<0.09568,0.42540,ZP>, +<0.09563,0.43840,ZP>, +<0.09564,0.45145,ZP>, +<0.09536,0.46459,ZP>, +<0.09535,0.47751,0.66010>, +<0.09552,0.49073,0.65245>, +<0.09301,0.49128,0.63892>, +<0.09003,0.49184,0.62638>, +<0.08717,0.49236,0.61333>, +<0.08413,0.49289,0.60067>, +<0.08084,0.49308,0.58783>, +<0.07797,0.49418,0.57548> +<0.09297,-0.49695,0.57278>, +<0.09551,-0.49702,0.58557>, +<0.09789,-0.49705,0.59825>, +<0.10056,-0.49584,0.61104>, +<0.10319,-0.49347,0.62385>, +<0.10573,-0.48939,0.63621>, +<0.10836,-0.48823,0.64916>, +<0.10880,-0.47778,0.66021>, +<0.10868,-0.46456,ZP>, +<0.10902,-0.45169,ZP>, +<0.10893,-0.43852,ZP>, +<0.10896,-0.42551,ZP>, +<0.10889,-0.41250,ZP>, +<0.10881,-0.39953,ZP>, +<0.10871,-0.38660,ZP>, +<0.10860,-0.37370,ZP>, +<0.10848,-0.36083,ZP>, +<0.10836,-0.34799,ZP>, +<0.10825,-0.33518,ZP>, +<0.10814,-0.32239,ZP>, +<0.10803,-0.30962,ZP>, +<0.10792,-0.29686,ZP>, +<0.10782,-0.28412,ZP>, +<0.10772,-0.27140,ZP>, +<0.10763,-0.25868,ZP>, +<0.10754,-0.24598,ZP>, +<0.10746,-0.23329,ZP>, +<0.10738,-0.22061,ZP>, +<0.10731,-0.20795,ZP>, +<0.10724,-0.19529,ZP>, +<0.10719,-0.18264,ZP>, +<0.10713,-0.17001,ZP>, +<0.10708,-0.15738,ZP>, +<0.10704,-0.14476,ZP>, +<0.10700,-0.13215,ZP>, +<0.10697,-0.11954,ZP>, +<0.10694,-0.10694,ZP>, +<0.10691,-0.09435,ZP>, +<0.10689,-0.08176,ZP>, +<0.10687,-0.06917,ZP>, +<0.10686,-0.05659,ZP>, +<0.10684,-0.04401,ZP>, +<0.10684,-0.03144,ZP>, +<0.10683,-0.01886,ZP>, +<0.10683,-0.00629,ZP>, +<0.10683,0.00629,ZP>, +<0.10683,0.01886,ZP>, +<0.10684,0.03144,ZP>, +<0.10685,0.04401,ZP>, +<0.10686,0.05659,ZP>, +<0.10687,0.06917,ZP>, +<0.10689,0.08176,ZP>, +<0.10691,0.09434,ZP>, +<0.10694,0.10694,ZP>, +<0.10697,0.11953,ZP>, +<0.10700,0.13214,ZP>, +<0.10704,0.14475,ZP>, +<0.10708,0.15737,ZP>, +<0.10713,0.16999,ZP>, +<0.10718,0.18263,ZP>, +<0.10724,0.19528,ZP>, +<0.10730,0.20794,ZP>, +<0.10737,0.22061,ZP>, +<0.10745,0.23329,ZP>, +<0.10753,0.24598,ZP>, +<0.10762,0.25869,ZP>, +<0.10770,0.27142,ZP>, +<0.10779,0.28416,ZP>, +<0.10788,0.29692,ZP>, +<0.10797,0.30969,ZP>, +<0.10806,0.32248,ZP>, +<0.10814,0.33530,ZP>, +<0.10822,0.34813,ZP>, +<0.10829,0.36099,ZP>, +<0.10836,0.37388,ZP>, +<0.10841,0.38679,ZP>, +<0.10845,0.39973,ZP>, +<0.10847,0.41270,ZP>, +<0.10848,0.42571,ZP>, +<0.10841,0.43872,ZP>, +<0.10845,0.45192,ZP>, +<0.10808,0.46481,ZP>, +<0.10817,0.47803,0.66022>, +<0.10767,0.48840,0.64891>, +<0.10481,0.48890,0.63607>, +<0.10160,0.48958,0.62340>, +<0.09866,0.49021,0.61055>, +<0.09497,0.48684,0.59784>, +<0.09141,0.48665,0.58540>, +<0.08831,0.48689,0.57282> +<0.10289,-0.50470,0.57125>, +<0.10628,-0.50301,0.58378>, +<0.10949,-0.50066,0.59607>, +<0.11238,-0.49751,0.60867>, +<0.11513,-0.49372,0.62106>, +<0.11745,-0.48811,0.63329>, +<0.12024,-0.48536,0.64575>, +<0.12186,-0.47901,0.65940>, +<0.12149,-0.46481,ZP>, +<0.12178,-0.45208,ZP>, +<0.12174,-0.43880,ZP>, +<0.12175,-0.42579,ZP>, +<0.12170,-0.41275,ZP>, +<0.12161,-0.39975,ZP>, +<0.12151,-0.38680,ZP>, +<0.12140,-0.37388,ZP>, +<0.12128,-0.36101,ZP>, +<0.12116,-0.34816,ZP>, +<0.12104,-0.33534,ZP>, +<0.12092,-0.32255,ZP>, +<0.12080,-0.30977,ZP>, +<0.12068,-0.29701,ZP>, +<0.12056,-0.28426,ZP>, +<0.12045,-0.27152,ZP>, +<0.12034,-0.25880,ZP>, +<0.12024,-0.24609,ZP>, +<0.12014,-0.23339,ZP>, +<0.12005,-0.22070,ZP>, +<0.11997,-0.20803,ZP>, +<0.11989,-0.19536,ZP>, +<0.11982,-0.18271,ZP>, +<0.11976,-0.17006,ZP>, +<0.11970,-0.15743,ZP>, +<0.11965,-0.14480,ZP>, +<0.11961,-0.13219,ZP>, +<0.11957,-0.11958,ZP>, +<0.11953,-0.10697,ZP>, +<0.11951,-0.09437,ZP>, +<0.11948,-0.08178,ZP>, +<0.11946,-0.06919,ZP>, +<0.11944,-0.05661,ZP>, +<0.11943,-0.04402,ZP>, +<0.11942,-0.03144,ZP>, +<0.11941,-0.01886,ZP>, +<0.11941,-0.00629,ZP>, +<0.11941,0.00629,ZP>, +<0.11941,0.01887,ZP>, +<0.11942,0.03144,ZP>, +<0.11943,0.04402,ZP>, +<0.11944,0.05661,ZP>, +<0.11946,0.06919,ZP>, +<0.11948,0.08178,ZP>, +<0.11951,0.09437,ZP>, +<0.11953,0.10697,ZP>, +<0.11957,0.11957,ZP>, +<0.11961,0.13218,ZP>, +<0.11965,0.14479,ZP>, +<0.11970,0.15742,ZP>, +<0.11975,0.17005,ZP>, +<0.11982,0.18269,ZP>, +<0.11988,0.19535,ZP>, +<0.11996,0.20801,ZP>, +<0.12004,0.22069,ZP>, +<0.12013,0.23338,ZP>, +<0.12022,0.24609,ZP>, +<0.12032,0.25881,ZP>, +<0.12042,0.27155,ZP>, +<0.12053,0.28430,ZP>, +<0.12063,0.29707,ZP>, +<0.12073,0.30985,ZP>, +<0.12083,0.32266,ZP>, +<0.12093,0.33548,ZP>, +<0.12102,0.34833,ZP>, +<0.12109,0.36121,ZP>, +<0.12117,0.37411,ZP>, +<0.12123,0.38705,ZP>, +<0.12127,0.40001,ZP>, +<0.12130,0.41301,ZP>, +<0.12128,0.42605,ZP>, +<0.12121,0.43907,ZP>, +<0.12120,0.45236,ZP>, +<0.12088,0.46511,ZP>, +<0.12126,0.47941,0.65930>, +<0.11956,0.48554,0.64544>, +<0.11634,0.48628,0.63284>, +<0.11313,0.48787,0.61992>, +<0.11004,0.48774,0.60709>, +<0.10699,0.48765,0.59447>, +<0.10392,0.48753,0.58202>, +<0.10080,0.48754,0.56945> +<0.11588,-0.50450,0.56826>, +<0.11897,-0.50137,0.58035>, +<0.12153,-0.49794,0.59249>, +<0.12382,-0.49389,0.60487>, +<0.12604,-0.48948,0.61699>, +<0.12825,-0.48435,0.62954>, +<0.13186,-0.48230,0.64192>, +<0.13486,-0.47985,0.65598>, +<0.13432,-0.46521,ZP>, +<0.13446,-0.45240,ZP>, +<0.13458,-0.43919,ZP>, +<0.13453,-0.42609,ZP>, +<0.13450,-0.41303,ZP>, +<0.13441,-0.40000,ZP>, +<0.13432,-0.38703,ZP>, +<0.13422,-0.37410,ZP>, +<0.13411,-0.36122,ZP>, +<0.13399,-0.34837,ZP>, +<0.13386,-0.33554,ZP>, +<0.13373,-0.32274,ZP>, +<0.13359,-0.30995,ZP>, +<0.13346,-0.29718,ZP>, +<0.13332,-0.28442,ZP>, +<0.13319,-0.27167,ZP>, +<0.13306,-0.25893,ZP>, +<0.13295,-0.24621,ZP>, +<0.13283,-0.23350,ZP>, +<0.13273,-0.22080,ZP>, +<0.13264,-0.20812,ZP>, +<0.13255,-0.19544,ZP>, +<0.13247,-0.18278,ZP>, +<0.13240,-0.17013,ZP>, +<0.13233,-0.15749,ZP>, +<0.13227,-0.14485,ZP>, +<0.13222,-0.13223,ZP>, +<0.13218,-0.11961,ZP>, +<0.13214,-0.10700,ZP>, +<0.13210,-0.09440,ZP>, +<0.13208,-0.08180,ZP>, +<0.13205,-0.06921,ZP>, +<0.13203,-0.05662,ZP>, +<0.13202,-0.04403,ZP>, +<0.13201,-0.03145,ZP>, +<0.13200,-0.01887,ZP>, +<0.13199,-0.00629,ZP>, +<0.13199,0.00629,ZP>, +<0.13200,0.01887,ZP>, +<0.13201,0.03145,ZP>, +<0.13202,0.04404,ZP>, +<0.13203,0.05662,ZP>, +<0.13205,0.06921,ZP>, +<0.13208,0.08180,ZP>, +<0.13211,0.09440,ZP>, +<0.13214,0.10700,ZP>, +<0.13218,0.11961,ZP>, +<0.13222,0.13222,ZP>, +<0.13227,0.14484,ZP>, +<0.13233,0.15747,ZP>, +<0.13239,0.17011,ZP>, +<0.13246,0.18276,ZP>, +<0.13254,0.19543,ZP>, +<0.13262,0.20810,ZP>, +<0.13272,0.22079,ZP>, +<0.13281,0.23349,ZP>, +<0.13292,0.24621,ZP>, +<0.13303,0.25894,ZP>, +<0.13315,0.27169,ZP>, +<0.13327,0.28446,ZP>, +<0.13339,0.29724,ZP>, +<0.13351,0.31004,ZP>, +<0.13363,0.32286,ZP>, +<0.13373,0.33570,ZP>, +<0.13383,0.34856,ZP>, +<0.13392,0.36145,ZP>, +<0.13399,0.37437,ZP>, +<0.13406,0.38733,ZP>, +<0.13410,0.40031,ZP>, +<0.13413,0.41335,ZP>, +<0.13410,0.42641,ZP>, +<0.13409,0.43951,ZP>, +<0.13390,0.45270,ZP>, +<0.13373,0.46553,0.66007>, +<0.13424,0.48019,0.65576>, +<0.13124,0.48247,0.64170>, +<0.12788,0.48480,0.62944>, +<0.12498,0.48909,0.61673>, +<0.12133,0.49180,0.60423>, +<0.11762,0.49381,0.59162>, +<0.11401,0.49506,0.57946>, +<0.11030,0.49589,0.56702> +<0.12473,-0.49613,0.56373>, +<0.12714,-0.49287,0.57587>, +<0.12881,-0.48871,0.58790>, +<0.13079,-0.48453,0.60017>, +<0.13444,-0.48165,0.61264>, +<0.13880,-0.48036,0.62552>, +<0.14317,-0.47907,0.63781>, +<0.14707,-0.47809,0.65066>, +<0.14726,-0.46581,0.66018>, +<0.14718,-0.45271,ZP>, +<0.14747,-0.43969,ZP>, +<0.14733,-0.42642,ZP>, +<0.14731,-0.41334,ZP>, +<0.14724,-0.40028,ZP>, +<0.14716,-0.38729,ZP>, +<0.14707,-0.37436,ZP>, +<0.14696,-0.36147,ZP>, +<0.14684,-0.34861,ZP>, +<0.14671,-0.33578,ZP>, +<0.14656,-0.32297,ZP>, +<0.14641,-0.31016,ZP>, +<0.14625,-0.29738,ZP>, +<0.14610,-0.28460,ZP>, +<0.14595,-0.27184,ZP>, +<0.14580,-0.25909,ZP>, +<0.14567,-0.24635,ZP>, +<0.14554,-0.23363,ZP>, +<0.14542,-0.22092,ZP>, +<0.14531,-0.20822,ZP>, +<0.14521,-0.19553,ZP>, +<0.14512,-0.18286,ZP>, +<0.14504,-0.17020,ZP>, +<0.14497,-0.15755,ZP>, +<0.14490,-0.14491,ZP>, +<0.14484,-0.13228,ZP>, +<0.14479,-0.11966,ZP>, +<0.14475,-0.10704,ZP>, +<0.14471,-0.09443,ZP>, +<0.14468,-0.08183,ZP>, +<0.14465,-0.06923,ZP>, +<0.14463,-0.05664,ZP>, +<0.14461,-0.04405,ZP>, +<0.14460,-0.03146,ZP>, +<0.14459,-0.01887,ZP>, +<0.14458,-0.00629,ZP>, +<0.14459,0.00629,ZP>, +<0.14459,0.01888,ZP>, +<0.14460,0.03146,ZP>, +<0.14461,0.04405,ZP>, +<0.14463,0.05664,ZP>, +<0.14465,0.06923,ZP>, +<0.14468,0.08183,ZP>, +<0.14471,0.09443,ZP>, +<0.14475,0.10704,ZP>, +<0.14479,0.11965,ZP>, +<0.14485,0.13227,ZP>, +<0.14490,0.14490,ZP>, +<0.14497,0.15754,ZP>, +<0.14504,0.17019,ZP>, +<0.14512,0.18285,ZP>, +<0.14520,0.19552,ZP>, +<0.14530,0.20820,ZP>, +<0.14540,0.22090,ZP>, +<0.14552,0.23361,ZP>, +<0.14564,0.24635,ZP>, +<0.14577,0.25909,ZP>, +<0.14590,0.27186,ZP>, +<0.14604,0.28464,ZP>, +<0.14618,0.29744,ZP>, +<0.14631,0.31025,ZP>, +<0.14644,0.32309,ZP>, +<0.14657,0.33594,ZP>, +<0.14667,0.34882,ZP>, +<0.14677,0.36172,ZP>, +<0.14685,0.37466,ZP>, +<0.14691,0.38763,ZP>, +<0.14696,0.40065,ZP>, +<0.14699,0.41372,ZP>, +<0.14695,0.42679,ZP>, +<0.14703,0.44003,ZP>, +<0.14668,0.45303,ZP>, +<0.14672,0.46612,0.66018>, +<0.14647,0.47827,0.65054>, +<0.14265,0.47929,0.63759>, +<0.13929,0.48309,0.62544>, +<0.13663,0.48767,0.61296>, +<0.13319,0.49131,0.60082>, +<0.12977,0.49449,0.58817>, +<0.12605,0.49712,0.57643>, +<0.12217,0.49944,0.56410> +<0.12795,-0.48460,0.55973>, +<0.13107,-0.48148,0.57181>, +<0.13506,-0.47904,0.58379>, +<0.13946,-0.47729,0.59607>, +<0.14536,-0.47843,0.60832>, +<0.14964,-0.47710,0.62094>, +<0.15413,-0.47567,0.63340>, +<0.15844,-0.47431,0.64577>, +<0.16048,-0.46733,0.65953>, +<0.15990,-0.45306,ZP>, +<0.16014,-0.44011,ZP>, +<0.16009,-0.42677,ZP>, +<0.16007,-0.41364,ZP>, +<0.16006,-0.40058,ZP>, +<0.16002,-0.38760,ZP>, +<0.15995,-0.37467,ZP>, +<0.15986,-0.36177,ZP>, +<0.15973,-0.34891,ZP>, +<0.15959,-0.33606,ZP>, +<0.15942,-0.32323,ZP>, +<0.15925,-0.31041,ZP>, +<0.15907,-0.29760,ZP>, +<0.15890,-0.28481,ZP>, +<0.15872,-0.27202,ZP>, +<0.15856,-0.25926,ZP>, +<0.15841,-0.24650,ZP>, +<0.15826,-0.23377,ZP>, +<0.15813,-0.22104,ZP>, +<0.15800,-0.20833,ZP>, +<0.15789,-0.19564,ZP>, +<0.15779,-0.18295,ZP>, +<0.15770,-0.17028,ZP>, +<0.15761,-0.15762,ZP>, +<0.15754,-0.14498,ZP>, +<0.15747,-0.13234,ZP>, +<0.15742,-0.11971,ZP>, +<0.15737,-0.10708,ZP>, +<0.15732,-0.09447,ZP>, +<0.15729,-0.08186,ZP>, +<0.15725,-0.06926,ZP>, +<0.15723,-0.05666,ZP>, +<0.15721,-0.04406,ZP>, +<0.15719,-0.03147,ZP>, +<0.15719,-0.01888,ZP>, +<0.15718,-0.00629,ZP>, +<0.15718,0.00630,ZP>, +<0.15719,0.01889,ZP>, +<0.15720,0.03148,ZP>, +<0.15721,0.04407,ZP>, +<0.15723,0.05666,ZP>, +<0.15726,0.06926,ZP>, +<0.15729,0.08186,ZP>, +<0.15733,0.09447,ZP>, +<0.15737,0.10708,ZP>, +<0.15742,0.11970,ZP>, +<0.15748,0.13233,ZP>, +<0.15754,0.14497,ZP>, +<0.15761,0.15761,ZP>, +<0.15769,0.17027,ZP>, +<0.15778,0.18294,ZP>, +<0.15788,0.19562,ZP>, +<0.15799,0.20831,ZP>, +<0.15810,0.22102,ZP>, +<0.15823,0.23375,ZP>, +<0.15837,0.24650,ZP>, +<0.15851,0.25926,ZP>, +<0.15866,0.27204,ZP>, +<0.15882,0.28484,ZP>, +<0.15898,0.29766,ZP>, +<0.15914,0.31049,ZP>, +<0.15929,0.32335,ZP>, +<0.15943,0.33622,ZP>, +<0.15955,0.34912,ZP>, +<0.15965,0.36204,ZP>, +<0.15973,0.37499,ZP>, +<0.15979,0.38797,ZP>, +<0.15983,0.40101,ZP>, +<0.15984,0.41409,ZP>, +<0.15984,0.42720,ZP>, +<0.15985,0.44049,ZP>, +<0.15956,0.45337,ZP>, +<0.16007,0.46758,0.65948>, +<0.15799,0.47446,0.64577>, +<0.15364,0.47582,0.63343>, +<0.14946,0.47796,0.62083>, +<0.14592,0.48130,0.60827>, +<0.14299,0.48513,0.59629>, +<0.14009,0.48862,0.58360>, +<0.13713,0.49159,0.57200>, +<0.13356,0.49473,0.55975> +<0.13444,-0.47441,0.55573>, +<0.13914,-0.47265,0.56758>, +<0.14424,-0.47146,0.57960>, +<0.14938,-0.47132,0.59171>, +<0.15559,-0.47522,0.60362>, +<0.16009,-0.47370,0.61609>, +<0.16471,-0.47211,0.62869>, +<0.16945,-0.47044,0.64084>, +<0.17352,-0.46824,0.65450>, +<0.17287,-0.45358,0.66014>, +<0.17286,-0.44050,ZP>, +<0.17301,-0.42729,ZP>, +<0.17291,-0.41400,ZP>, +<0.17295,-0.40096,ZP>, +<0.17294,-0.38798,ZP>, +<0.17288,-0.37503,ZP>, +<0.17279,-0.36214,ZP>, +<0.17266,-0.34925,ZP>, +<0.17250,-0.33639,ZP>, +<0.17231,-0.32353,ZP>, +<0.17211,-0.31069,ZP>, +<0.17191,-0.29785,ZP>, +<0.17171,-0.28504,ZP>, +<0.17152,-0.27223,ZP>, +<0.17133,-0.25945,ZP>, +<0.17116,-0.24668,ZP>, +<0.17100,-0.23392,ZP>, +<0.17085,-0.22118,ZP>, +<0.17071,-0.20846,ZP>, +<0.17058,-0.19575,ZP>, +<0.17047,-0.18306,ZP>, +<0.17036,-0.17037,ZP>, +<0.17027,-0.15770,ZP>, +<0.17019,-0.14505,ZP>, +<0.17011,-0.13240,ZP>, +<0.17005,-0.11976,ZP>, +<0.16999,-0.10713,ZP>, +<0.16994,-0.09451,ZP>, +<0.16990,-0.08189,ZP>, +<0.16987,-0.06928,ZP>, +<0.16984,-0.05668,ZP>, +<0.16982,-0.04408,ZP>, +<0.16980,-0.03148,ZP>, +<0.16979,-0.01889,ZP>, +<0.16978,-0.00629,ZP>, +<0.16978,0.00630,ZP>, +<0.16979,0.01890,ZP>, +<0.16980,0.03149,ZP>, +<0.16982,0.04409,ZP>, +<0.16984,0.05669,ZP>, +<0.16987,0.06929,ZP>, +<0.16991,0.08190,ZP>, +<0.16995,0.09451,ZP>, +<0.17000,0.10713,ZP>, +<0.17005,0.11976,ZP>, +<0.17012,0.13239,ZP>, +<0.17019,0.14504,ZP>, +<0.17027,0.15769,ZP>, +<0.17036,0.17036,ZP>, +<0.17046,0.18304,ZP>, +<0.17057,0.19573,ZP>, +<0.17069,0.20844,ZP>, +<0.17082,0.22116,ZP>, +<0.17096,0.23390,ZP>, +<0.17111,0.24666,ZP>, +<0.17127,0.25944,ZP>, +<0.17144,0.27224,ZP>, +<0.17162,0.28506,ZP>, +<0.17180,0.29790,ZP>, +<0.17198,0.31076,ZP>, +<0.17215,0.32364,ZP>, +<0.17231,0.33654,ZP>, +<0.17246,0.34945,ZP>, +<0.17257,0.36239,ZP>, +<0.17266,0.37535,ZP>, +<0.17272,0.38836,ZP>, +<0.17275,0.40139,ZP>, +<0.17274,0.41447,ZP>, +<0.17286,0.42774,ZP>, +<0.17270,0.44087,ZP>, +<0.17266,0.45386,0.66012>, +<0.17325,0.46837,0.65445>, +<0.16916,0.47054,0.64088>, +<0.16438,0.47223,0.62878>, +<0.15967,0.47384,0.61615>, +<0.15505,0.47538,0.60373>, +<0.14978,0.47562,0.59189>, +<0.14556,0.47813,0.57940>, +<0.14245,0.48122,0.56773>, +<0.13941,0.48463,0.55528> +<0.14481,-0.46841,0.55119>, +<0.15024,-0.46836,0.56282>, +<0.15539,-0.46869,0.57473>, +<0.16047,-0.46946,0.58667>, +<0.16536,-0.46977,0.59874>, +<0.17053,-0.47003,0.61090>, +<0.17526,-0.46929,0.62344>, +<0.17987,-0.46656,0.63541>, +<0.18479,-0.46478,0.64801>, +<0.18586,-0.45443,0.66038>, +<0.18531,-0.44072,0.66010>, +<0.18562,-0.42759,ZP>, +<0.18577,-0.41442,ZP>, +<0.18585,-0.40138,ZP>, +<0.18589,-0.38841,ZP>, +<0.18587,-0.37548,ZP>, +<0.18577,-0.36257,ZP>, +<0.18563,-0.34966,ZP>, +<0.18544,-0.33676,ZP>, +<0.18522,-0.32387,ZP>, +<0.18500,-0.31100,ZP>, +<0.18477,-0.29814,ZP>, +<0.18455,-0.28529,ZP>, +<0.18433,-0.27247,ZP>, +<0.18412,-0.25966,ZP>, +<0.18393,-0.24687,ZP>, +<0.18375,-0.23409,ZP>, +<0.18358,-0.22134,ZP>, +<0.18343,-0.20860,ZP>, +<0.18328,-0.19588,ZP>, +<0.18316,-0.18317,ZP>, +<0.18304,-0.17048,ZP>, +<0.18294,-0.15779,ZP>, +<0.18284,-0.14513,ZP>, +<0.18276,-0.13247,ZP>, +<0.18269,-0.11982,ZP>, +<0.18263,-0.10718,ZP>, +<0.18257,-0.09455,ZP>, +<0.18252,-0.08193,ZP>, +<0.18249,-0.06931,ZP>, +<0.18245,-0.05670,ZP>, +<0.18243,-0.04410,ZP>, +<0.18241,-0.03149,ZP>, +<0.18240,-0.01889,ZP>, +<0.18239,-0.00629,ZP>, +<0.18240,0.00631,ZP>, +<0.18240,0.01890,ZP>, +<0.18242,0.03150,ZP>, +<0.18243,0.04411,ZP>, +<0.18246,0.05671,ZP>, +<0.18249,0.06932,ZP>, +<0.18253,0.08194,ZP>, +<0.18258,0.09456,ZP>, +<0.18263,0.10719,ZP>, +<0.18270,0.11982,ZP>, +<0.18277,0.13246,ZP>, +<0.18285,0.14512,ZP>, +<0.18294,0.15778,ZP>, +<0.18304,0.17046,ZP>, +<0.18315,0.18315,ZP>, +<0.18327,0.19586,ZP>, +<0.18341,0.20858,ZP>, +<0.18355,0.22131,ZP>, +<0.18371,0.23407,ZP>, +<0.18387,0.24685,ZP>, +<0.18405,0.25964,ZP>, +<0.18424,0.27246,ZP>, +<0.18444,0.28530,ZP>, +<0.18464,0.29817,ZP>, +<0.18485,0.31106,ZP>, +<0.18505,0.32396,ZP>, +<0.18523,0.33689,ZP>, +<0.18540,0.34983,ZP>, +<0.18553,0.36279,ZP>, +<0.18563,0.37577,ZP>, +<0.18570,0.38878,ZP>, +<0.18570,0.40180,ZP>, +<0.18571,0.41488,ZP>, +<0.18566,0.42806,ZP>, +<0.18558,0.44112,ZP>, +<0.18612,0.45460,0.66028>, +<0.18505,0.46470,0.64807>, +<0.18009,0.46647,0.63585>, +<0.17484,0.46845,0.62375>, +<0.17000,0.47025,0.61121>, +<0.16350,0.46787,0.59900>, +<0.15853,0.46830,0.58726>, +<0.15328,0.46925,0.57492>, +<0.14824,0.47090,0.56361>, +<0.14338,0.47309,0.55163> +<0.15658,-0.46936,0.54610>, +<0.16180,-0.47020,0.55770>, +<0.16656,-0.47112,0.56956>, +<0.17139,-0.47223,0.58151>, +<0.17631,-0.47280,0.59370>, +<0.18123,-0.47154,0.60578>, +<0.18641,-0.46913,0.61816>, +<0.19062,-0.46408,0.62998>, +<0.19530,-0.46032,0.64213>, +<0.19960,-0.45679,0.65627>, +<0.19839,-0.44128,0.66020>, +<0.19857,-0.42816,0.66007>, +<0.19886,-0.41514,ZP>, +<0.19886,-0.40192,ZP>, +<0.19894,-0.38896,ZP>, +<0.19892,-0.37602,ZP>, +<0.19880,-0.36306,ZP>, +<0.19862,-0.35012,ZP>, +<0.19840,-0.33718,ZP>, +<0.19816,-0.32425,ZP>, +<0.19791,-0.31134,ZP>, +<0.19765,-0.29844,ZP>, +<0.19740,-0.28557,ZP>, +<0.19716,-0.27272,ZP>, +<0.19693,-0.25989,ZP>, +<0.19672,-0.24708,ZP>, +<0.19651,-0.23428,ZP>, +<0.19633,-0.22151,ZP>, +<0.19616,-0.20875,ZP>, +<0.19600,-0.19602,ZP>, +<0.19586,-0.18329,ZP>, +<0.19573,-0.17059,ZP>, +<0.19562,-0.15789,ZP>, +<0.19551,-0.14521,ZP>, +<0.19542,-0.13254,ZP>, +<0.19534,-0.11989,ZP>, +<0.19527,-0.10724,ZP>, +<0.19521,-0.09460,ZP>, +<0.19516,-0.08197,ZP>, +<0.19511,-0.06935,ZP>, +<0.19508,-0.05673,ZP>, +<0.19505,-0.04411,ZP>, +<0.19503,-0.03151,ZP>, +<0.19502,-0.01890,ZP>, +<0.19501,-0.00629,ZP>, +<0.19501,0.00631,ZP>, +<0.19502,0.01891,ZP>, +<0.19504,0.03152,ZP>, +<0.19506,0.04413,ZP>, +<0.19509,0.05674,ZP>, +<0.19512,0.06936,ZP>, +<0.19517,0.08198,ZP>, +<0.19522,0.09461,ZP>, +<0.19528,0.10725,ZP>, +<0.19535,0.11989,ZP>, +<0.19543,0.13254,ZP>, +<0.19552,0.14521,ZP>, +<0.19562,0.15788,ZP>, +<0.19573,0.17057,ZP>, +<0.19586,0.18328,ZP>, +<0.19599,0.19599,ZP>, +<0.19614,0.20873,ZP>, +<0.19630,0.22148,ZP>, +<0.19647,0.23425,ZP>, +<0.19666,0.24705,ZP>, +<0.19685,0.25986,ZP>, +<0.19706,0.27270,ZP>, +<0.19728,0.28557,ZP>, +<0.19751,0.29846,ZP>, +<0.19774,0.31138,ZP>, +<0.19797,0.32432,ZP>, +<0.19818,0.33728,ZP>, +<0.19838,0.35025,ZP>, +<0.19854,0.36324,ZP>, +<0.19867,0.37624,ZP>, +<0.19873,0.38926,ZP>, +<0.19874,0.40227,ZP>, +<0.19888,0.41549,ZP>, +<0.19864,0.42838,ZP>, +<0.19869,0.44150,0.66011>, +<0.19999,0.45657,0.65622>, +<0.19575,0.46016,0.64241>, +<0.19044,0.46233,0.63044>, +<0.18526,0.46537,0.61819>, +<0.18025,0.46639,0.60586>, +<0.17452,0.46591,0.59365>, +<0.16955,0.46537,0.58185>, +<0.16438,0.46488,0.56983>, +<0.15852,0.46491,0.55853>, +<0.15295,0.46546,0.54682> +<0.16608,-0.47637,0.54137>, +<0.17106,-0.47761,0.55324>, +<0.17628,-0.47769,0.56488>, +<0.18176,-0.47678,0.57681>, +<0.18718,-0.47470,0.58884>, +<0.19236,-0.47115,0.60056>, +<0.19701,-0.46667,0.61219>, +<0.20084,-0.46044,0.62403>, +<0.20470,-0.45622,0.63581>, +<0.20531,-0.45004,0.65044>, +<0.21099,-0.44216,0.66056>, +<0.21114,-0.42862,0.66014>, +<0.21154,-0.41536,0.66008>, +<0.21201,-0.40265,ZP>, +<0.21204,-0.38963,ZP>, +<0.21201,-0.37665,ZP>, +<0.21186,-0.36363,ZP>, +<0.21165,-0.35063,ZP>, +<0.21140,-0.33764,ZP>, +<0.21112,-0.32466,ZP>, +<0.21084,-0.31171,ZP>, +<0.21056,-0.29878,ZP>, +<0.21028,-0.28588,ZP>, +<0.21001,-0.27299,ZP>, +<0.20976,-0.26014,ZP>, +<0.20952,-0.24730,ZP>, +<0.20930,-0.23449,ZP>, +<0.20910,-0.22170,ZP>, +<0.20891,-0.20892,ZP>, +<0.20873,-0.19617,ZP>, +<0.20858,-0.18343,ZP>, +<0.20843,-0.17071,ZP>, +<0.20831,-0.15800,ZP>, +<0.20819,-0.14531,ZP>, +<0.20809,-0.13263,ZP>, +<0.20800,-0.11996,ZP>, +<0.20792,-0.10730,ZP>, +<0.20786,-0.09465,ZP>, +<0.20780,-0.08201,ZP>, +<0.20775,-0.06938,ZP>, +<0.20771,-0.05676,ZP>, +<0.20768,-0.04414,ZP>, +<0.20766,-0.03152,ZP>, +<0.20765,-0.01891,ZP>, +<0.20764,-0.00630,ZP>, +<0.20764,0.00631,ZP>, +<0.20765,0.01893,ZP>, +<0.20767,0.03154,ZP>, +<0.20769,0.04415,ZP>, +<0.20772,0.05677,ZP>, +<0.20776,0.06940,ZP>, +<0.20781,0.08203,ZP>, +<0.20787,0.09467,ZP>, +<0.20794,0.10731,ZP>, +<0.20802,0.11997,ZP>, +<0.20811,0.13263,ZP>, +<0.20821,0.14531,ZP>, +<0.20832,0.15799,ZP>, +<0.20844,0.17070,ZP>, +<0.20858,0.18341,ZP>, +<0.20873,0.19615,ZP>, +<0.20889,0.20890,ZP>, +<0.20907,0.22167,ZP>, +<0.20926,0.23446,ZP>, +<0.20946,0.24727,ZP>, +<0.20968,0.26010,ZP>, +<0.20990,0.27296,ZP>, +<0.21014,0.28585,ZP>, +<0.21040,0.29877,ZP>, +<0.21065,0.31172,ZP>, +<0.21091,0.32469,ZP>, +<0.21116,0.33769,ZP>, +<0.21139,0.35071,ZP>, +<0.21160,0.36374,ZP>, +<0.21176,0.37679,ZP>, +<0.21183,0.38979,ZP>, +<0.21189,0.40283,ZP>, +<0.21186,0.41593,ZP>, +<0.21178,0.42852,ZP>, +<0.21214,0.44190,0.66037>, +<0.21344,0.44713,0.65000>, +<0.20582,0.45571,0.63654>, +<0.20086,0.45890,0.62541>, +<0.19600,0.46420,0.61210>, +<0.19123,0.46712,0.60062>, +<0.18537,0.46916,0.58828>, +<0.17996,0.46862,0.57636>, +<0.17518,0.46714,0.56449>, +<0.16994,0.46638,0.55277>, +<0.16462,0.46594,0.54133> +<0.17598,-0.48278,0.53718>, +<0.18208,-0.48161,0.54848>, +<0.18792,-0.47971,0.55974>, +<0.19311,-0.47664,0.57153>, +<0.19818,-0.47245,0.58300>, +<0.20270,-0.46712,0.59438>, +<0.20627,-0.46142,0.60561>, +<0.20960,-0.45534,0.61766>, +<0.21469,-0.45162,0.62880>, +<0.22050,-0.44887,0.64140>, +<0.22534,-0.44524,0.65561>, +<0.22443,-0.42952,0.66025>, +<0.22482,-0.41647,0.66008>, +<0.22523,-0.40363,ZP>, +<0.22519,-0.39040,ZP>, +<0.22512,-0.37735,ZP>, +<0.22495,-0.36426,ZP>, +<0.22470,-0.35118,ZP>, +<0.22441,-0.33813,ZP>, +<0.22411,-0.32511,ZP>, +<0.22379,-0.31211,ZP>, +<0.22348,-0.29914,ZP>, +<0.22318,-0.28621,ZP>, +<0.22289,-0.27329,ZP>, +<0.22261,-0.26041,ZP>, +<0.22235,-0.24755,ZP>, +<0.22211,-0.23471,ZP>, +<0.22188,-0.22190,ZP>, +<0.22167,-0.20910,ZP>, +<0.22148,-0.19633,ZP>, +<0.22131,-0.18357,ZP>, +<0.22115,-0.17084,ZP>, +<0.22101,-0.15811,ZP>, +<0.22089,-0.14541,ZP>, +<0.22077,-0.13271,ZP>, +<0.22068,-0.12003,ZP>, +<0.22059,-0.10737,ZP>, +<0.22052,-0.09471,ZP>, +<0.22045,-0.08206,ZP>, +<0.22040,-0.06942,ZP>, +<0.22036,-0.05679,ZP>, +<0.22032,-0.04416,ZP>, +<0.22030,-0.03153,ZP>, +<0.22028,-0.01891,ZP>, +<0.22028,-0.00630,ZP>, +<0.22028,0.00632,ZP>, +<0.22029,0.01894,ZP>, +<0.22031,0.03156,ZP>, +<0.22033,0.04418,ZP>, +<0.22037,0.05681,ZP>, +<0.22041,0.06944,ZP>, +<0.22047,0.08208,ZP>, +<0.22053,0.09473,ZP>, +<0.22061,0.10738,ZP>, +<0.22069,0.12005,ZP>, +<0.22079,0.13273,ZP>, +<0.22090,0.14541,ZP>, +<0.22103,0.15811,ZP>, +<0.22116,0.17083,ZP>, +<0.22131,0.18356,ZP>, +<0.22148,0.19631,ZP>, +<0.22166,0.20908,ZP>, +<0.22185,0.22187,ZP>, +<0.22206,0.23468,ZP>, +<0.22228,0.24751,ZP>, +<0.22252,0.26036,ZP>, +<0.22277,0.27325,ZP>, +<0.22303,0.28616,ZP>, +<0.22331,0.29910,ZP>, +<0.22359,0.31208,ZP>, +<0.22388,0.32509,ZP>, +<0.22416,0.33813,ZP>, +<0.22444,0.35120,ZP>, +<0.22469,0.36429,ZP>, +<0.22489,0.37737,ZP>, +<0.22500,0.39039,ZP>, +<0.22520,0.40357,ZP>, +<0.22496,0.41644,0.66008>, +<0.22526,0.42925,0.66018>, +<0.22663,0.44459,0.65548>, +<0.22132,0.44842,0.64179>, +<0.21452,0.45169,0.62950>, +<0.21066,0.45599,0.61868>, +<0.20639,0.46166,0.60598>, +<0.20208,0.46605,0.59505>, +<0.19658,0.46984,0.58306>, +<0.19049,0.47238,0.57134>, +<0.18478,0.47348,0.55977>, +<0.17919,0.47384,0.54819>, +<0.17372,0.47323,0.53653> +<0.18790,-0.48425,0.53200>, +<0.19365,-0.48050,0.54285>, +<0.19849,-0.47612,0.55388>, +<0.20283,-0.47106,0.56520>, +<0.20643,-0.46556,0.57618>, +<0.20962,-0.45945,0.58749>, +<0.21296,-0.45359,0.59896>, +<0.21827,-0.44987,0.61031>, +<0.22428,-0.44691,0.62311>, +<0.23011,-0.44396,0.63503>, +<0.23874,-0.43670,0.64348>, +<0.23800,-0.43175,0.66013>, +<0.23787,-0.41766,0.66009>, +<0.23835,-0.40459,ZP>, +<0.23846,-0.39140,ZP>, +<0.23824,-0.37809,ZP>, +<0.23804,-0.36493,ZP>, +<0.23777,-0.35178,ZP>, +<0.23745,-0.33867,ZP>, +<0.23712,-0.32559,ZP>, +<0.23678,-0.31255,ZP>, +<0.23643,-0.29954,ZP>, +<0.23610,-0.28656,ZP>, +<0.23579,-0.27362,ZP>, +<0.23548,-0.26070,ZP>, +<0.23520,-0.24782,ZP>, +<0.23493,-0.23495,ZP>, +<0.23468,-0.22212,ZP>, +<0.23445,-0.20930,ZP>, +<0.23425,-0.19651,ZP>, +<0.23406,-0.18373,ZP>, +<0.23389,-0.17098,ZP>, +<0.23373,-0.15824,ZP>, +<0.23359,-0.14552,ZP>, +<0.23347,-0.13281,ZP>, +<0.23336,-0.12012,ZP>, +<0.23327,-0.10744,ZP>, +<0.23319,-0.09477,ZP>, +<0.23312,-0.08211,ZP>, +<0.23306,-0.06946,ZP>, +<0.23301,-0.05682,ZP>, +<0.23298,-0.04418,ZP>, +<0.23295,-0.03155,ZP>, +<0.23293,-0.01892,ZP>, +<0.23293,-0.00630,ZP>, +<0.23293,0.00633,ZP>, +<0.23294,0.01895,ZP>, +<0.23296,0.03158,ZP>, +<0.23299,0.04421,ZP>, +<0.23303,0.05685,ZP>, +<0.23308,0.06949,ZP>, +<0.23314,0.08214,ZP>, +<0.23321,0.09479,ZP>, +<0.23329,0.10746,ZP>, +<0.23339,0.12014,ZP>, +<0.23349,0.13283,ZP>, +<0.23361,0.14553,ZP>, +<0.23375,0.15825,ZP>, +<0.23390,0.17098,ZP>, +<0.23406,0.18372,ZP>, +<0.23425,0.19649,ZP>, +<0.23444,0.20928,ZP>, +<0.23466,0.22208,ZP>, +<0.23489,0.23491,ZP>, +<0.23513,0.24777,ZP>, +<0.23539,0.26064,ZP>, +<0.23567,0.27355,ZP>, +<0.23595,0.28649,ZP>, +<0.23625,0.29946,ZP>, +<0.23656,0.31247,ZP>, +<0.23688,0.32552,ZP>, +<0.23719,0.33860,ZP>, +<0.23751,0.35172,ZP>, +<0.23780,0.36486,ZP>, +<0.23804,0.37799,ZP>, +<0.23835,0.39121,ZP>, +<0.23846,0.40431,ZP>, +<0.23826,0.41691,0.66016>, +<0.23906,0.43092,0.66023>, +<0.23217,0.43989,0.64326>, +<0.23088,0.44357,0.63402>, +<0.22470,0.44670,0.62290>, +<0.21890,0.45038,0.61169>, +<0.21491,0.45580,0.59940>, +<0.21142,0.46143,0.58853>, +<0.20721,0.46675,0.57694>, +<0.20164,0.47146,0.56560>, +<0.19603,0.47477,0.55422>, +<0.19008,0.47716,0.54306>, +<0.18396,0.47893,0.53190> +<0.19797,-0.47891,0.52557>, +<0.20220,-0.47346,0.53637>, +<0.20565,-0.46790,0.54727>, +<0.20850,-0.46200,0.55841>, +<0.21060,-0.45568,0.56951>, +<0.21430,-0.45017,0.58104>, +<0.21974,-0.44602,0.59252>, +<0.22753,-0.44528,0.60418>, +<0.23329,-0.44228,0.61615>, +<0.23916,-0.43914,0.62775>, +<0.24584,-0.43547,0.63848>, +<0.25115,-0.43278,0.65105>, +<0.25117,-0.41892,0.66033>, +<0.25142,-0.40547,0.66009>, +<0.25161,-0.39231,ZP>, +<0.25145,-0.37895,ZP>, +<0.25115,-0.36563,ZP>, +<0.25087,-0.35242,ZP>, +<0.25052,-0.33924,ZP>, +<0.25016,-0.32610,ZP>, +<0.24979,-0.31301,ZP>, +<0.24942,-0.29996,ZP>, +<0.24906,-0.28694,ZP>, +<0.24871,-0.27397,ZP>, +<0.24838,-0.26102,ZP>, +<0.24807,-0.24810,ZP>, +<0.24777,-0.23521,ZP>, +<0.24750,-0.22235,ZP>, +<0.24725,-0.20951,ZP>, +<0.24703,-0.19669,ZP>, +<0.24682,-0.18390,ZP>, +<0.24663,-0.17113,ZP>, +<0.24647,-0.15837,ZP>, +<0.24632,-0.14564,ZP>, +<0.24618,-0.13291,ZP>, +<0.24606,-0.12021,ZP>, +<0.24596,-0.10751,ZP>, +<0.24587,-0.09483,ZP>, +<0.24579,-0.08216,ZP>, +<0.24573,-0.06950,ZP>, +<0.24568,-0.05685,ZP>, +<0.24564,-0.04421,ZP>, +<0.24561,-0.03157,ZP>, +<0.24559,-0.01893,ZP>, +<0.24559,-0.00630,ZP>, +<0.24559,0.00633,ZP>, +<0.24560,0.01897,ZP>, +<0.24562,0.03160,ZP>, +<0.24565,0.04424,ZP>, +<0.24569,0.05689,ZP>, +<0.24575,0.06954,ZP>, +<0.24581,0.08220,ZP>, +<0.24589,0.09487,ZP>, +<0.24598,0.10755,ZP>, +<0.24609,0.12024,ZP>, +<0.24621,0.13294,ZP>, +<0.24634,0.14566,ZP>, +<0.24649,0.15839,ZP>, +<0.24665,0.17113,ZP>, +<0.24684,0.18390,ZP>, +<0.24703,0.19668,ZP>, +<0.24725,0.20949,ZP>, +<0.24748,0.22231,ZP>, +<0.24774,0.23517,ZP>, +<0.24801,0.24804,ZP>, +<0.24830,0.26095,ZP>, +<0.24860,0.27388,ZP>, +<0.24891,0.28684,ZP>, +<0.24923,0.29984,ZP>, +<0.24956,0.31287,ZP>, +<0.24990,0.32595,ZP>, +<0.25025,0.33909,ZP>, +<0.25061,0.35226,ZP>, +<0.25093,0.36545,ZP>, +<0.25129,0.37872,ZP>, +<0.25159,0.39196,ZP>, +<0.25160,0.40501,0.66009>, +<0.25188,0.41805,0.66040>, +<0.25230,0.43218,0.65105>, +<0.24611,0.43534,0.63917>, +<0.24011,0.43862,0.62789>, +<0.23401,0.44189,0.61611>, +<0.22793,0.44505,0.60447>, +<0.22128,0.44771,0.59266>, +<0.21730,0.45296,0.58149>, +<0.21428,0.45908,0.57005>, +<0.21037,0.46495,0.55913>, +<0.20604,0.47028,0.54791>, +<0.20111,0.47496,0.53707>, +<0.19557,0.47934,0.52617> +<0.20317,-0.46931,0.51873>, +<0.20591,-0.46340,0.52980>, +<0.20762,-0.45730,0.54081>, +<0.21014,-0.45123,0.55202>, +<0.21449,-0.44598,0.56314>, +<0.22039,-0.44179,0.57437>, +<0.22723,-0.43915,0.58577>, +<0.23433,-0.43743,0.59723>, +<0.24206,-0.43754,0.60859>, +<0.24845,-0.43398,0.61941>, +<0.25523,-0.43005,0.63064>, +<0.26046,-0.42693,0.64265>, +<0.26573,-0.42211,0.65595>, +<0.26463,-0.40648,0.66024>, +<0.26462,-0.39310,0.66008>, +<0.26463,-0.37980,ZP>, +<0.26431,-0.36636,ZP>, +<0.26400,-0.35309,ZP>, +<0.26363,-0.33985,ZP>, +<0.26323,-0.32665,ZP>, +<0.26283,-0.31350,ZP>, +<0.26243,-0.30041,ZP>, +<0.26204,-0.28736,ZP>, +<0.26166,-0.27434,ZP>, +<0.26130,-0.26135,ZP>, +<0.26096,-0.24840,ZP>, +<0.26064,-0.23548,ZP>, +<0.26035,-0.22259,ZP>, +<0.26008,-0.20973,ZP>, +<0.25983,-0.19689,ZP>, +<0.25961,-0.18408,ZP>, +<0.25940,-0.17129,ZP>, +<0.25922,-0.15852,ZP>, +<0.25905,-0.14576,ZP>, +<0.25891,-0.13302,ZP>, +<0.25878,-0.12030,ZP>, +<0.25866,-0.10759,ZP>, +<0.25857,-0.09490,ZP>, +<0.25848,-0.08222,ZP>, +<0.25842,-0.06955,ZP>, +<0.25836,-0.05689,ZP>, +<0.25832,-0.04423,ZP>, +<0.25829,-0.03159,ZP>, +<0.25827,-0.01894,ZP>, +<0.25826,-0.00630,ZP>, +<0.25826,0.00634,ZP>, +<0.25827,0.01898,ZP>, +<0.25830,0.03163,ZP>, +<0.25833,0.04427,ZP>, +<0.25838,0.05693,ZP>, +<0.25843,0.06959,ZP>, +<0.25850,0.08226,ZP>, +<0.25859,0.09494,ZP>, +<0.25869,0.10764,ZP>, +<0.25880,0.12034,ZP>, +<0.25893,0.13306,ZP>, +<0.25908,0.14579,ZP>, +<0.25925,0.15854,ZP>, +<0.25943,0.17131,ZP>, +<0.25963,0.18409,ZP>, +<0.25984,0.19689,ZP>, +<0.26008,0.20971,ZP>, +<0.26033,0.22256,ZP>, +<0.26061,0.23544,ZP>, +<0.26091,0.24834,ZP>, +<0.26122,0.26127,ZP>, +<0.26156,0.27423,ZP>, +<0.26190,0.28722,ZP>, +<0.26225,0.30024,ZP>, +<0.26260,0.31330,ZP>, +<0.26297,0.32642,ZP>, +<0.26336,0.33961,ZP>, +<0.26375,0.35283,ZP>, +<0.26411,0.36606,ZP>, +<0.26454,0.37945,ZP>, +<0.26471,0.39263,0.66008>, +<0.26492,0.40588,0.66023>, +<0.26664,0.42133,0.65629>, +<0.26146,0.42636,0.64262>, +<0.25515,0.43005,0.63149>, +<0.24891,0.43367,0.62028>, +<0.24279,0.43714,0.60860>, +<0.23495,0.43722,0.59709>, +<0.22801,0.44004,0.58568>, +<0.22178,0.44388,0.57454>, +<0.21708,0.44901,0.56341>, +<0.21466,0.45522,0.55232>, +<0.21211,0.46142,0.54105>, +<0.20857,0.46699,0.53028>, +<0.20436,0.47271,0.51931> +<0.20311,-0.45835,0.51251>, +<0.20576,-0.45232,0.52381>, +<0.20965,-0.44675,0.53463>, +<0.21482,-0.44165,0.54552>, +<0.22119,-0.43778,0.55644>, +<0.22840,-0.43546,0.56747>, +<0.23598,-0.43450,0.57849>, +<0.24342,-0.43403,0.58962>, +<0.25056,-0.43275,0.60089>, +<0.25735,-0.43006,0.61214>, +<0.26306,-0.42558,0.62336>, +<0.26939,-0.42126,0.63443>, +<0.27574,-0.41736,0.64560>, +<0.27900,-0.40882,0.65947>, +<0.27781,-0.39393,0.66019>, +<0.27775,-0.38058,0.66008>, +<0.27758,-0.36724,ZP>, +<0.27714,-0.35377,ZP>, +<0.27676,-0.34048,ZP>, +<0.27635,-0.32723,ZP>, +<0.27592,-0.31404,ZP>, +<0.27548,-0.30089,ZP>, +<0.27506,-0.28779,ZP>, +<0.27464,-0.27473,ZP>, +<0.27425,-0.26170,ZP>, +<0.27387,-0.24872,ZP>, +<0.27353,-0.23577,ZP>, +<0.27321,-0.22285,ZP>, +<0.27292,-0.20996,ZP>, +<0.27265,-0.19711,ZP>, +<0.27241,-0.18427,ZP>, +<0.27219,-0.17146,ZP>, +<0.27199,-0.15867,ZP>, +<0.27180,-0.14589,ZP>, +<0.27164,-0.13314,ZP>, +<0.27150,-0.12040,ZP>, +<0.27138,-0.10768,ZP>, +<0.27128,-0.09497,ZP>, +<0.27119,-0.08228,ZP>, +<0.27112,-0.06959,ZP>, +<0.27106,-0.05692,ZP>, +<0.27101,-0.04426,ZP>, +<0.27098,-0.03160,ZP>, +<0.27096,-0.01895,ZP>, +<0.27095,-0.00630,ZP>, +<0.27095,0.00635,ZP>, +<0.27096,0.01900,ZP>, +<0.27098,0.03165,ZP>, +<0.27102,0.04431,ZP>, +<0.27107,0.05698,ZP>, +<0.27113,0.06965,ZP>, +<0.27121,0.08233,ZP>, +<0.27130,0.09502,ZP>, +<0.27141,0.10773,ZP>, +<0.27153,0.12045,ZP>, +<0.27168,0.13319,ZP>, +<0.27184,0.14594,ZP>, +<0.27202,0.15870,ZP>, +<0.27222,0.17149,ZP>, +<0.27243,0.18429,ZP>, +<0.27267,0.19711,ZP>, +<0.27293,0.20996,ZP>, +<0.27321,0.22282,ZP>, +<0.27351,0.23572,ZP>, +<0.27384,0.24865,ZP>, +<0.27418,0.26161,ZP>, +<0.27455,0.27460,ZP>, +<0.27493,0.28762,ZP>, +<0.27531,0.30068,ZP>, +<0.27570,0.31377,ZP>, +<0.27608,0.32692,ZP>, +<0.27647,0.34012,ZP>, +<0.27687,0.35338,ZP>, +<0.27740,0.36682,ZP>, +<0.27770,0.38012,0.66008>, +<0.27793,0.39335,0.66018>, +<0.27921,0.40800,0.65972>, +<0.27638,0.41696,0.64587>, +<0.27005,0.42085,0.63462>, +<0.26371,0.42481,0.62345>, +<0.25774,0.42922,0.61203>, +<0.25117,0.43235,0.60091>, +<0.24354,0.43289,0.58968>, +<0.23609,0.43400,0.57874>, +<0.22857,0.43633,0.56764>, +<0.22205,0.44000,0.55668>, +<0.21689,0.44469,0.54583>, +<0.21280,0.45035,0.53477>, +<0.21036,0.45640,0.52385>, +<0.20817,0.46273,0.51232> +<0.20448,-0.44745,0.50647>, +<0.20943,-0.44208,0.51735>, +<0.21541,-0.43769,0.52792>, +<0.22253,-0.43441,0.53853>, +<0.23023,-0.43281,0.54916>, +<0.23787,-0.43249,0.55984>, +<0.24550,-0.43315,0.57059>, +<0.25302,-0.43292,0.58164>, +<0.26001,-0.43052,0.59273>, +<0.26644,-0.42647,0.60390>, +<0.27229,-0.42167,0.61507>, +<0.27770,-0.41580,0.62610>, +<0.28413,-0.41151,0.63702>, +<0.29066,-0.40732,0.64816>, +<0.29144,-0.39506,0.66059>, +<0.29098,-0.38133,0.66016>, +<0.29081,-0.36803,0.66008>, +<0.29047,-0.35463,ZP>, +<0.28993,-0.34112,ZP>, +<0.28951,-0.32784,ZP>, +<0.28906,-0.31460,ZP>, +<0.28857,-0.30139,ZP>, +<0.28810,-0.28824,ZP>, +<0.28765,-0.27513,ZP>, +<0.28722,-0.26206,ZP>, +<0.28682,-0.24904,ZP>, +<0.28645,-0.23606,ZP>, +<0.28610,-0.22312,ZP>, +<0.28579,-0.21021,ZP>, +<0.28550,-0.19733,ZP>, +<0.28523,-0.18447,ZP>, +<0.28499,-0.17164,ZP>, +<0.28477,-0.15882,ZP>, +<0.28457,-0.14603,ZP>, +<0.28440,-0.13326,ZP>, +<0.28425,-0.12050,ZP>, +<0.28411,-0.10776,ZP>, +<0.28400,-0.09504,ZP>, +<0.28391,-0.08234,ZP>, +<0.28383,-0.06964,ZP>, +<0.28377,-0.05696,ZP>, +<0.28372,-0.04429,ZP>, +<0.28368,-0.03162,ZP>, +<0.28366,-0.01896,ZP>, +<0.28365,-0.00630,ZP>, +<0.28365,0.00636,ZP>, +<0.28366,0.01902,ZP>, +<0.28369,0.03168,ZP>, +<0.28373,0.04435,ZP>, +<0.28378,0.05702,ZP>, +<0.28384,0.06971,ZP>, +<0.28393,0.08240,ZP>, +<0.28403,0.09511,ZP>, +<0.28414,0.10783,ZP>, +<0.28428,0.12057,ZP>, +<0.28443,0.13332,ZP>, +<0.28461,0.14609,ZP>, +<0.28481,0.15887,ZP>, +<0.28502,0.17168,ZP>, +<0.28527,0.18450,ZP>, +<0.28553,0.19735,ZP>, +<0.28581,0.21021,ZP>, +<0.28611,0.22310,ZP>, +<0.28644,0.23602,ZP>, +<0.28679,0.24897,ZP>, +<0.28717,0.26196,ZP>, +<0.28757,0.27499,ZP>, +<0.28799,0.28805,ZP>, +<0.28842,0.30115,ZP>, +<0.28886,0.31429,ZP>, +<0.28926,0.32745,ZP>, +<0.28965,0.34066,ZP>, +<0.29020,0.35412,ZP>, +<0.29065,0.36749,0.66008>, +<0.29095,0.38075,0.66015>, +<0.29149,0.39425,0.66059>, +<0.29123,0.40694,0.64854>, +<0.28476,0.41108,0.63735>, +<0.27831,0.41539,0.62634>, +<0.27305,0.42113,0.61516>, +<0.26684,0.42570,0.60388>, +<0.26029,0.42928,0.59288>, +<0.25291,0.43120,0.58156>, +<0.24535,0.43118,0.57092>, +<0.23748,0.43139,0.56011>, +<0.22987,0.43296,0.54940>, +<0.22298,0.43591,0.53876>, +<0.21663,0.44055,0.52800>, +<0.21163,0.44571,0.51762>, +<0.20754,0.45149,0.50627> +<0.20965,-0.43780,0.49989>, +<0.21663,-0.43433,0.51033>, +<0.22420,-0.43215,0.52054>, +<0.23218,-0.43143,0.53082>, +<0.23998,-0.43188,0.54128>, +<0.24751,-0.43344,0.55187>, +<0.25506,-0.43366,0.56269>, +<0.26246,-0.43155,0.57359>, +<0.26923,-0.42762,0.58453>, +<0.27515,-0.42239,0.59545>, +<0.28074,-0.41670,0.60633>, +<0.28605,-0.41084,0.61730>, +<0.29219,-0.40579,0.62839>, +<0.29871,-0.40112,0.63913>, +<0.30540,-0.39661,0.65032>, +<0.30441,-0.38222,0.66065>, +<0.30390,-0.36864,0.66027>, +<0.30360,-0.35524,0.66017>, +<0.30330,-0.34194,ZP>, +<0.30270,-0.32845,ZP>, +<0.30222,-0.31517,ZP>, +<0.30170,-0.30191,ZP>, +<0.30118,-0.28869,ZP>, +<0.30068,-0.27553,ZP>, +<0.30022,-0.26243,ZP>, +<0.29979,-0.24938,ZP>, +<0.29939,-0.23637,ZP>, +<0.29902,-0.22340,ZP>, +<0.29868,-0.21047,ZP>, +<0.29837,-0.19756,ZP>, +<0.29808,-0.18468,ZP>, +<0.29781,-0.17182,ZP>, +<0.29757,-0.15899,ZP>, +<0.29736,-0.14617,ZP>, +<0.29717,-0.13338,ZP>, +<0.29700,-0.12060,ZP>, +<0.29686,-0.10785,ZP>, +<0.29675,-0.09512,ZP>, +<0.29664,-0.08240,ZP>, +<0.29656,-0.06969,ZP>, +<0.29649,-0.05700,ZP>, +<0.29644,-0.04432,ZP>, +<0.29640,-0.03164,ZP>, +<0.29638,-0.01897,ZP>, +<0.29636,-0.00630,ZP>, +<0.29636,0.00637,ZP>, +<0.29638,0.01904,ZP>, +<0.29641,0.03171,ZP>, +<0.29645,0.04439,ZP>, +<0.29650,0.05708,ZP>, +<0.29657,0.06977,ZP>, +<0.29666,0.08248,ZP>, +<0.29676,0.09520,ZP>, +<0.29689,0.10794,ZP>, +<0.29703,0.12069,ZP>, +<0.29720,0.13346,ZP>, +<0.29739,0.14625,ZP>, +<0.29761,0.15905,ZP>, +<0.29785,0.17188,ZP>, +<0.29812,0.18473,ZP>, +<0.29840,0.19759,ZP>, +<0.29871,0.21048,ZP>, +<0.29905,0.22339,ZP>, +<0.29940,0.23633,ZP>, +<0.29978,0.24930,ZP>, +<0.30019,0.26232,ZP>, +<0.30062,0.27537,ZP>, +<0.30109,0.28848,ZP>, +<0.30158,0.30164,ZP>, +<0.30205,0.31483,ZP>, +<0.30249,0.32801,ZP>, +<0.30303,0.34139,ZP>, +<0.30332,0.35460,ZP>, +<0.30363,0.36795,0.66012>, +<0.30421,0.38151,0.66047>, +<0.30574,0.39630,0.65118>, +<0.29918,0.40077,0.63962>, +<0.29271,0.40541,0.62881>, +<0.28676,0.41054,0.61763>, +<0.28145,0.41648,0.60653>, +<0.27575,0.42198,0.59550>, +<0.26950,0.42689,0.58451>, +<0.26234,0.43033,0.57345>, +<0.25488,0.43153,0.56301>, +<0.24720,0.43058,0.55229>, +<0.23942,0.43009,0.54160>, +<0.23172,0.43071,0.53114>, +<0.22380,0.43282,0.52068>, +<0.21685,0.43627,0.51060>, +<0.21066,0.44087,0.49974> +<0.21832,-0.43186,0.49255>, +<0.22623,-0.43106,0.50267>, +<0.23419,-0.43103,0.51277>, +<0.24187,-0.43238,0.52299>, +<0.24934,-0.43479,0.53341>, +<0.25705,-0.43487,0.54396>, +<0.26472,-0.43286,0.55467>, +<0.27176,-0.42896,0.56539>, +<0.27783,-0.42355,0.57604>, +<0.28303,-0.41732,0.58670>, +<0.28824,-0.41106,0.59743>, +<0.29388,-0.40534,0.60812>, +<0.29993,-0.40008,0.61940>, +<0.30639,-0.39520,0.63020>, +<0.31298,-0.39014,0.64087>, +<0.31947,-0.38504,0.65297>, +<0.31731,-0.36946,0.66060>, +<0.31686,-0.35586,0.66024>, +<0.31661,-0.34264,ZP>, +<0.31608,-0.32920,ZP>, +<0.31541,-0.31572,ZP>, +<0.31486,-0.30242,ZP>, +<0.31430,-0.28916,ZP>, +<0.31376,-0.27595,ZP>, +<0.31326,-0.26280,ZP>, +<0.31280,-0.24972,ZP>, +<0.31237,-0.23669,ZP>, +<0.31197,-0.22370,ZP>, +<0.31160,-0.21073,ZP>, +<0.31126,-0.19780,ZP>, +<0.31094,-0.18489,ZP>, +<0.31065,-0.17201,ZP>, +<0.31039,-0.15915,ZP>, +<0.31016,-0.14631,ZP>, +<0.30995,-0.13350,ZP>, +<0.30978,-0.12071,ZP>, +<0.30963,-0.10794,ZP>, +<0.30950,-0.09519,ZP>, +<0.30940,-0.08246,ZP>, +<0.30931,-0.06975,ZP>, +<0.30924,-0.05704,ZP>, +<0.30918,-0.04435,ZP>, +<0.30914,-0.03166,ZP>, +<0.30911,-0.01898,ZP>, +<0.30910,-0.00630,ZP>, +<0.30910,0.00638,ZP>, +<0.30911,0.01906,ZP>, +<0.30914,0.03174,ZP>, +<0.30918,0.04443,ZP>, +<0.30924,0.05713,ZP>, +<0.30932,0.06984,ZP>, +<0.30941,0.08256,ZP>, +<0.30952,0.09530,ZP>, +<0.30965,0.10805,ZP>, +<0.30981,0.12081,ZP>, +<0.30999,0.13360,ZP>, +<0.31019,0.14641,ZP>, +<0.31043,0.15924,ZP>, +<0.31069,0.17209,ZP>, +<0.31099,0.18496,ZP>, +<0.31130,0.19785,ZP>, +<0.31165,0.21076,ZP>, +<0.31201,0.22369,ZP>, +<0.31240,0.23665,ZP>, +<0.31281,0.24965,ZP>, +<0.31325,0.26268,ZP>, +<0.31372,0.27577,ZP>, +<0.31423,0.28893,ZP>, +<0.31476,0.30213,ZP>, +<0.31528,0.31536,ZP>, +<0.31590,0.32874,ZP>, +<0.31638,0.34208,ZP>, +<0.31660,0.35519,0.66009>, +<0.31701,0.36867,0.66037>, +<0.31943,0.38444,0.65432>, +<0.31351,0.38973,0.64141>, +<0.30686,0.39484,0.63074>, +<0.30038,0.39974,0.61987>, +<0.29456,0.40521,0.60859>, +<0.28900,0.41111,0.59772>, +<0.28392,0.41734,0.58680>, +<0.27825,0.42349,0.57611>, +<0.27168,0.42840,0.56541>, +<0.26447,0.43155,0.55488>, +<0.25691,0.43268,0.54414>, +<0.24912,0.43132,0.53342>, +<0.24148,0.42979,0.52305>, +<0.23360,0.42957,0.51289>, +<0.22564,0.43067,0.50292>, +<0.21764,0.43287,0.49263> +<0.22831,-0.43111,0.48466>, +<0.23601,-0.43217,0.49477>, +<0.24346,-0.43421,0.50484>, +<0.25094,-0.43652,0.51522>, +<0.25891,-0.43636,0.52548>, +<0.26682,-0.43428,0.53585>, +<0.27399,-0.43022,0.54630>, +<0.28006,-0.42457,0.55667>, +<0.28520,-0.41797,0.56706>, +<0.28989,-0.41114,0.57760>, +<0.29502,-0.40481,0.58829>, +<0.30082,-0.39911,0.59900>, +<0.30741,-0.39435,0.61004>, +<0.31377,-0.38934,0.62097>, +<0.32027,-0.38405,0.63173>, +<0.32824,-0.37810,0.63300>, +<0.33274,-0.37254,0.65520>, +<0.33025,-0.35663,0.66049>, +<0.32981,-0.34317,0.66011>, +<0.32939,-0.32981,ZP>, +<0.32876,-0.31637,ZP>, +<0.32802,-0.30288,ZP>, +<0.32744,-0.28959,ZP>, +<0.32688,-0.27636,ZP>, +<0.32635,-0.26319,ZP>, +<0.32585,-0.25008,ZP>, +<0.32539,-0.23702,ZP>, +<0.32496,-0.22400,ZP>, +<0.32455,-0.21101,ZP>, +<0.32417,-0.19804,ZP>, +<0.32382,-0.18510,ZP>, +<0.32350,-0.17219,ZP>, +<0.32322,-0.15931,ZP>, +<0.32297,-0.14645,ZP>, +<0.32276,-0.13362,ZP>, +<0.32257,-0.12082,ZP>, +<0.32242,-0.10803,ZP>, +<0.32228,-0.09527,ZP>, +<0.32217,-0.08253,ZP>, +<0.32208,-0.06980,ZP>, +<0.32200,-0.05708,ZP>, +<0.32194,-0.04438,ZP>, +<0.32189,-0.03168,ZP>, +<0.32186,-0.01899,ZP>, +<0.32185,-0.00630,ZP>, +<0.32185,0.00639,ZP>, +<0.32186,0.01908,ZP>, +<0.32189,0.03178,ZP>, +<0.32193,0.04448,ZP>, +<0.32199,0.05719,ZP>, +<0.32207,0.06991,ZP>, +<0.32217,0.08265,ZP>, +<0.32229,0.09539,ZP>, +<0.32243,0.10816,ZP>, +<0.32259,0.12094,ZP>, +<0.32279,0.13375,ZP>, +<0.32301,0.14657,ZP>, +<0.32327,0.15942,ZP>, +<0.32355,0.17229,ZP>, +<0.32388,0.18519,ZP>, +<0.32423,0.19810,ZP>, +<0.32461,0.21104,ZP>, +<0.32501,0.22400,ZP>, +<0.32544,0.23699,ZP>, +<0.32589,0.25001,ZP>, +<0.32637,0.26307,ZP>, +<0.32686,0.27618,ZP>, +<0.32739,0.28935,ZP>, +<0.32794,0.30258,ZP>, +<0.32863,0.31600,ZP>, +<0.32923,0.32938,ZP>, +<0.32960,0.34265,0.66010>, +<0.32998,0.35597,0.66032>, +<0.33236,0.37169,0.65651>, +<0.32463,0.37513,0.64206>, +<0.32067,0.38373,0.63235>, +<0.31419,0.38900,0.62159>, +<0.30778,0.39406,0.61056>, +<0.30133,0.39904,0.59955>, +<0.29574,0.40501,0.58867>, +<0.29096,0.41143,0.57788>, +<0.28609,0.41832,0.56739>, +<0.28069,0.42462,0.55696>, +<0.27404,0.42975,0.54646>, +<0.26664,0.43295,0.53587>, +<0.25850,0.43420,0.52543>, +<0.25079,0.43320,0.51516>, +<0.24342,0.43066,0.50479>, +<0.23558,0.42993,0.49482>, +<0.22730,0.42992,0.48487> +<0.23740,-0.43464,0.47681>, +<0.24467,-0.43741,0.48703>, +<0.25248,-0.43846,0.49710>, +<0.26062,-0.43801,0.50721>, +<0.26868,-0.43565,0.51720>, +<0.27599,-0.43127,0.52732>, +<0.28195,-0.42528,0.53756>, +<0.28675,-0.41849,0.54772>, +<0.29101,-0.41127,0.55797>, +<0.29564,-0.40433,0.56843>, +<0.30121,-0.39826,0.57906>, +<0.30745,-0.39294,0.58977>, +<0.31463,-0.38862,0.60068>, +<0.32094,-0.38344,0.61127>, +<0.32740,-0.37796,0.62221>, +<0.33388,-0.37228,0.63291>, +<0.34030,-0.36662,0.64328>, +<0.34576,-0.35947,0.65634>, +<0.34318,-0.34371,0.66034>, +<0.34261,-0.33021,0.66011>, +<0.34207,-0.31688,ZP>, +<0.34139,-0.30346,ZP>, +<0.34063,-0.29001,ZP>, +<0.34005,-0.27677,ZP>, +<0.33950,-0.26360,ZP>, +<0.33895,-0.25045,ZP>, +<0.33844,-0.23736,ZP>, +<0.33797,-0.22430,ZP>, +<0.33752,-0.21127,ZP>, +<0.33710,-0.19828,ZP>, +<0.33672,-0.18531,ZP>, +<0.33638,-0.17237,ZP>, +<0.33607,-0.15946,ZP>, +<0.33581,-0.14659,ZP>, +<0.33558,-0.13374,ZP>, +<0.33539,-0.12092,ZP>, +<0.33522,-0.10813,ZP>, +<0.33508,-0.09535,ZP>, +<0.33496,-0.08259,ZP>, +<0.33486,-0.06985,ZP>, +<0.33478,-0.05712,ZP>, +<0.33472,-0.04440,ZP>, +<0.33467,-0.03170,ZP>, +<0.33463,-0.01899,ZP>, +<0.33461,-0.00629,ZP>, +<0.33461,0.00641,ZP>, +<0.33462,0.01911,ZP>, +<0.33465,0.03182,ZP>, +<0.33470,0.04453,ZP>, +<0.33476,0.05725,ZP>, +<0.33485,0.06999,ZP>, +<0.33495,0.08274,ZP>, +<0.33508,0.09550,ZP>, +<0.33522,0.10828,ZP>, +<0.33540,0.12108,ZP>, +<0.33560,0.13389,ZP>, +<0.33584,0.14673,ZP>, +<0.33612,0.15960,ZP>, +<0.33643,0.17249,ZP>, +<0.33678,0.18541,ZP>, +<0.33717,0.19836,ZP>, +<0.33759,0.21132,ZP>, +<0.33804,0.22432,ZP>, +<0.33851,0.23733,ZP>, +<0.33901,0.25038,ZP>, +<0.33954,0.26348,ZP>, +<0.34007,0.27660,ZP>, +<0.34061,0.28977,ZP>, +<0.34132,0.30317,ZP>, +<0.34197,0.31654,ZP>, +<0.34246,0.32982,0.66010>, +<0.34298,0.34325,0.66031>, +<0.34542,0.35880,0.65718>, +<0.34050,0.36645,0.64397>, +<0.33408,0.37211,0.63350>, +<0.32769,0.37770,0.62295>, +<0.32130,0.38313,0.61206>, +<0.31495,0.38837,0.60119>, +<0.30780,0.39276,0.59039>, +<0.30181,0.39828,0.57948>, +<0.29663,0.40459,0.56881>, +<0.29228,0.41173,0.55846>, +<0.28792,0.41892,0.54812>, +<0.28252,0.42570,0.53774>, +<0.27604,0.43100,0.52756>, +<0.26826,0.43448,0.51752>, +<0.26021,0.43594,0.50736>, +<0.25227,0.43562,0.49710>, +<0.24476,0.43347,0.48688>, +<0.23709,0.43140,0.47694> +<0.24587,-0.44014,0.46932>, +<0.25387,-0.44072,0.47921>, +<0.26218,-0.43970,0.48900>, +<0.27025,-0.43691,0.49889>, +<0.27747,-0.43217,0.50861>, +<0.28342,-0.42577,0.51855>, +<0.28807,-0.41858,0.52855>, +<0.29183,-0.41109,0.53859>, +<0.29592,-0.40381,0.54881>, +<0.30112,-0.39729,0.55921>, +<0.30739,-0.39169,0.56970>, +<0.31412,-0.38687,0.58034>, +<0.32101,-0.38217,0.59101>, +<0.32794,-0.37748,0.60139>, +<0.33481,-0.37138,0.61038>, +<0.34067,-0.36602,0.62316>, +<0.34696,-0.36011,0.63352>, +<0.35341,-0.35401,0.64371>, +<0.35870,-0.34622,0.65660>, +<0.35588,-0.33063,0.66034>, +<0.35516,-0.31712,0.66010>, +<0.35460,-0.30378,ZP>, +<0.35406,-0.29058,ZP>, +<0.35328,-0.27719,ZP>, +<0.35268,-0.26400,ZP>, +<0.35209,-0.25082,ZP>, +<0.35153,-0.23769,ZP>, +<0.35100,-0.22459,ZP>, +<0.35051,-0.21153,ZP>, +<0.35005,-0.19850,ZP>, +<0.34964,-0.18550,ZP>, +<0.34927,-0.17254,ZP>, +<0.34894,-0.15961,ZP>, +<0.34867,-0.14672,ZP>, +<0.34843,-0.13386,ZP>, +<0.34822,-0.12103,ZP>, +<0.34805,-0.10822,ZP>, +<0.34790,-0.09543,ZP>, +<0.34777,-0.08266,ZP>, +<0.34767,-0.06990,ZP>, +<0.34758,-0.05716,ZP>, +<0.34751,-0.04443,ZP>, +<0.34746,-0.03171,ZP>, +<0.34742,-0.01900,ZP>, +<0.34740,-0.00629,ZP>, +<0.34739,0.00642,ZP>, +<0.34740,0.01913,ZP>, +<0.34743,0.03185,ZP>, +<0.34748,0.04458,ZP>, +<0.34755,0.05732,ZP>, +<0.34764,0.07007,ZP>, +<0.34775,0.08283,ZP>, +<0.34788,0.09561,ZP>, +<0.34804,0.10840,ZP>, +<0.34822,0.12121,ZP>, +<0.34844,0.13404,ZP>, +<0.34870,0.14689,ZP>, +<0.34899,0.15977,ZP>, +<0.34933,0.17268,ZP>, +<0.34971,0.18562,ZP>, +<0.35013,0.19859,ZP>, +<0.35060,0.21159,ZP>, +<0.35110,0.22462,ZP>, +<0.35163,0.23768,ZP>, +<0.35218,0.25076,ZP>, +<0.35275,0.26389,ZP>, +<0.35333,0.27703,ZP>, +<0.35406,0.29037,ZP>, +<0.35455,0.30351,ZP>, +<0.35504,0.31682,0.66010>, +<0.35570,0.33028,0.66032>, +<0.35845,0.34579,0.65719>, +<0.35351,0.35393,0.64423>, +<0.34704,0.36004,0.63406>, +<0.34075,0.36595,0.62378>, +<0.33446,0.37167,0.61308>, +<0.32816,0.37727,0.60230>, +<0.32105,0.38184,0.59154>, +<0.31428,0.38647,0.58092>, +<0.30764,0.39149,0.57018>, +<0.30169,0.39739,0.55961>, +<0.29694,0.40426,0.54924>, +<0.29322,0.41177,0.53900>, +<0.28923,0.41936,0.52881>, +<0.28421,0.42626,0.51894>, +<0.27778,0.43203,0.50914>, +<0.26999,0.43595,0.49914>, +<0.26178,0.43784,0.48912>, +<0.25369,0.43812,0.47927>, +<0.24564,0.43675,0.46936> +<0.25529,-0.44329,0.46154>, +<0.26363,-0.44151,0.47106>, +<0.27160,-0.43804,0.48059>, +<0.27867,-0.43276,0.49020>, +<0.28441,-0.42612,0.49973>, +<0.28886,-0.41862,0.50948>, +<0.29228,-0.41077,0.51933>, +<0.29592,-0.40320,0.52937>, +<0.30085,-0.39643,0.53962>, +<0.30688,-0.39057,0.54991>, +<0.31384,-0.38563,0.56025>, +<0.32104,-0.38129,0.57077>, +<0.32810,-0.37687,0.58132>, +<0.33489,-0.37198,0.59185>, +<0.34141,-0.36647,0.60240>, +<0.34748,-0.36050,0.61295>, +<0.35328,-0.35385,0.62359>, +<0.35957,-0.34752,0.63364>, +<0.36603,-0.34094,0.64357>, +<0.37162,-0.33302,0.65593>, +<0.36865,-0.31756,0.66039>, +<0.36793,-0.30411,0.66012>, +<0.36740,-0.29101,0.66008>, +<0.36668,-0.27771,ZP>, +<0.36589,-0.26437,ZP>, +<0.36525,-0.25116,ZP>, +<0.36464,-0.23800,ZP>, +<0.36406,-0.22487,ZP>, +<0.36351,-0.21176,ZP>, +<0.36301,-0.19869,ZP>, +<0.36257,-0.18566,ZP>, +<0.36218,-0.17268,ZP>, +<0.36184,-0.15974,ZP>, +<0.36155,-0.14684,ZP>, +<0.36130,-0.13397,ZP>, +<0.36108,-0.12113,ZP>, +<0.36090,-0.10831,ZP>, +<0.36074,-0.09551,ZP>, +<0.36060,-0.08272,ZP>, +<0.36049,-0.06995,ZP>, +<0.36040,-0.05720,ZP>, +<0.36032,-0.04446,ZP>, +<0.36027,-0.03172,ZP>, +<0.36023,-0.01900,ZP>, +<0.36020,-0.00628,ZP>, +<0.36019,0.00644,ZP>, +<0.36020,0.01916,ZP>, +<0.36023,0.03189,ZP>, +<0.36028,0.04463,ZP>, +<0.36035,0.05738,ZP>, +<0.36044,0.07015,ZP>, +<0.36056,0.08293,ZP>, +<0.36070,0.09572,ZP>, +<0.36087,0.10852,ZP>, +<0.36107,0.12134,ZP>, +<0.36131,0.13418,ZP>, +<0.36158,0.14704,ZP>, +<0.36189,0.15993,ZP>, +<0.36225,0.17285,ZP>, +<0.36265,0.18580,ZP>, +<0.36311,0.19880,ZP>, +<0.36362,0.21184,ZP>, +<0.36418,0.22491,ZP>, +<0.36476,0.23801,ZP>, +<0.36536,0.25112,ZP>, +<0.36598,0.26429,ZP>, +<0.36674,0.27759,ZP>, +<0.36746,0.29090,0.66009>, +<0.36794,0.30395,0.66013>, +<0.36856,0.31732,0.66038>, +<0.37146,0.33274,0.65640>, +<0.36609,0.34090,0.64396>, +<0.35963,0.34746,0.63408>, +<0.35337,0.35376,0.62405>, +<0.34772,0.36033,0.61341>, +<0.34154,0.36635,0.60283>, +<0.33491,0.37173,0.59230>, +<0.32810,0.37642,0.58176>, +<0.32101,0.38072,0.57121>, +<0.31376,0.38518,0.56071>, +<0.30698,0.39040,0.55027>, +<0.30132,0.39663,0.53995>, +<0.29700,0.40376,0.52975>, +<0.29382,0.41162,0.51968>, +<0.29024,0.41942,0.50994>, +<0.28541,0.42663,0.50028>, +<0.27900,0.43287,0.49062>, +<0.27145,0.43726,0.48101>, +<0.26323,0.43975,0.47128>, +<0.25485,0.44072,0.46167> +<0.26497,-0.44332,0.45326>, +<0.27273,-0.43900,0.46245>, +<0.27962,-0.43328,0.47160>, +<0.28519,-0.42627,0.48112>, +<0.28931,-0.41853,0.49060>, +<0.29234,-0.41040,0.50028>, +<0.29577,-0.40262,0.51010>, +<0.30053,-0.39560,0.52009>, +<0.30648,-0.38956,0.53027>, +<0.31333,-0.38459,0.54036>, +<0.32076,-0.38041,0.55058>, +<0.32827,-0.37645,0.56104>, +<0.33544,-0.37206,0.57147>, +<0.34204,-0.36697,0.58191>, +<0.34830,-0.36105,0.59235>, +<0.35414,-0.35478,0.60266>, +<0.35980,-0.34803,0.61308>, +<0.36556,-0.34117,0.62345>, +<0.37176,-0.33447,0.63318>, +<0.37511,-0.32527,0.64239>, +<0.38433,-0.31987,0.65380>, +<0.38145,-0.30467,0.66048>, +<0.38063,-0.29129,0.66016>, +<0.37995,-0.27799,0.66008>, +<0.37925,-0.26480,ZP>, +<0.37849,-0.25153,ZP>, +<0.37775,-0.23827,ZP>, +<0.37712,-0.22510,ZP>, +<0.37653,-0.21196,ZP>, +<0.37598,-0.19885,ZP>, +<0.37551,-0.18580,ZP>, +<0.37511,-0.17280,ZP>, +<0.37477,-0.15986,ZP>, +<0.37446,-0.14696,ZP>, +<0.37420,-0.13408,ZP>, +<0.37397,-0.12123,ZP>, +<0.37377,-0.10840,ZP>, +<0.37360,-0.09559,ZP>, +<0.37345,-0.08279,ZP>, +<0.37333,-0.07000,ZP>, +<0.37324,-0.05723,ZP>, +<0.37316,-0.04447,ZP>, +<0.37310,-0.03173,ZP>, +<0.37305,-0.01900,ZP>, +<0.37302,-0.00627,ZP>, +<0.37301,0.00645,ZP>, +<0.37302,0.01919,ZP>, +<0.37304,0.03193,ZP>, +<0.37309,0.04468,ZP>, +<0.37316,0.05745,ZP>, +<0.37326,0.07023,ZP>, +<0.37339,0.08302,ZP>, +<0.37354,0.09583,ZP>, +<0.37373,0.10864,ZP>, +<0.37395,0.12148,ZP>, +<0.37420,0.13432,ZP>, +<0.37449,0.14718,ZP>, +<0.37482,0.16007,ZP>, +<0.37519,0.17298,ZP>, +<0.37561,0.18595,ZP>, +<0.37610,0.19897,ZP>, +<0.37666,0.21205,ZP>, +<0.37726,0.22516,ZP>, +<0.37789,0.23829,ZP>, +<0.37862,0.25152,ZP>, +<0.37936,0.26475,ZP>, +<0.38002,0.27792,0.66008>, +<0.38067,0.29126,0.66016>, +<0.38141,0.30459,0.66049>, +<0.38430,0.31979,0.65404>, +<0.37533,0.32493,0.64234>, +<0.37174,0.33449,0.63353>, +<0.36560,0.34112,0.62382>, +<0.36013,0.34795,0.61354>, +<0.35446,0.35476,0.60309>, +<0.34856,0.36111,0.59283>, +<0.34230,0.36675,0.58238>, +<0.33547,0.37163,0.57185>, +<0.32815,0.37580,0.56143>, +<0.32053,0.37969,0.55114>, +<0.31317,0.38402,0.54082>, +<0.30656,0.38929,0.53059>, +<0.30101,0.39576,0.52052>, +<0.29685,0.40321,0.51055>, +<0.29397,0.41138,0.50076>, +<0.29082,0.41937,0.49114>, +<0.28616,0.42687,0.48165>, +<0.28006,0.43340,0.47229>, +<0.27256,0.43833,0.46293>, +<0.26456,0.44184,0.45357> +<0.27363,-0.44006,0.44447>, +<0.28014,-0.43367,0.45353>, +<0.28554,-0.42642,0.46256>, +<0.28944,-0.41840,0.47200>, +<0.29213,-0.41014,0.48142>, +<0.29547,-0.40212,0.49102>, +<0.30019,-0.39493,0.50079>, +<0.30612,-0.38871,0.51067>, +<0.31308,-0.38368,0.52073>, +<0.32060,-0.37970,0.53070>, +<0.32830,-0.37619,0.54087>, +<0.33584,-0.37233,0.55121>, +<0.34293,-0.36755,0.56149>, +<0.34925,-0.36190,0.57181>, +<0.35499,-0.35553,0.58212>, +<0.36038,-0.34875,0.59236>, +<0.36576,-0.34182,0.60255>, +<0.37134,-0.33484,0.61281>, +<0.37739,-0.32806,0.62268>, +<0.38344,-0.32101,0.63208>, +<0.38958,-0.31370,0.64110>, +<0.39611,-0.30603,0.65091>, +<0.39414,-0.29179,0.66060>, +<0.39318,-0.27821,0.66018>, +<0.39243,-0.26496,0.66008>, +<0.39174,-0.25184,ZP>, +<0.39097,-0.23860,ZP>, +<0.39013,-0.22525,ZP>, +<0.38951,-0.21206,ZP>, +<0.38898,-0.19895,ZP>, +<0.38851,-0.18590,ZP>, +<0.38809,-0.17291,ZP>, +<0.38773,-0.15996,ZP>, +<0.38741,-0.14706,ZP>, +<0.38713,-0.13418,ZP>, +<0.38689,-0.12133,ZP>, +<0.38667,-0.10849,ZP>, +<0.38648,-0.09566,ZP>, +<0.38632,-0.08284,ZP>, +<0.38619,-0.07004,ZP>, +<0.38609,-0.05726,ZP>, +<0.38601,-0.04449,ZP>, +<0.38595,-0.03173,ZP>, +<0.38590,-0.01899,ZP>, +<0.38587,-0.00626,ZP>, +<0.38585,0.00647,ZP>, +<0.38585,0.01921,ZP>, +<0.38587,0.03196,ZP>, +<0.38591,0.04472,ZP>, +<0.38599,0.05750,ZP>, +<0.38609,0.07030,ZP>, +<0.38623,0.08311,ZP>, +<0.38640,0.09593,ZP>, +<0.38661,0.10876,ZP>, +<0.38685,0.12160,ZP>, +<0.38713,0.13444,ZP>, +<0.38744,0.14730,ZP>, +<0.38779,0.16018,ZP>, +<0.38818,0.17310,ZP>, +<0.38862,0.18606,ZP>, +<0.38911,0.19908,ZP>, +<0.38966,0.21217,ZP>, +<0.39029,0.22532,ZP>, +<0.39112,0.23864,ZP>, +<0.39188,0.25185,ZP>, +<0.39254,0.26496,0.66008>, +<0.39324,0.27819,0.66018>, +<0.39413,0.29183,0.66061>, +<0.39606,0.30609,0.65093>, +<0.38950,0.31385,0.64040>, +<0.38340,0.32107,0.63221>, +<0.37734,0.32811,0.62285>, +<0.37136,0.33481,0.61307>, +<0.36603,0.34191,0.60285>, +<0.36079,0.34894,0.59270>, +<0.35551,0.35563,0.58262>, +<0.34958,0.36197,0.57243>, +<0.34303,0.36739,0.56201>, +<0.33582,0.37179,0.55169>, +<0.32817,0.37534,0.54149>, +<0.32040,0.37876,0.53125>, +<0.31291,0.38294,0.52114>, +<0.30619,0.38839,0.51117>, +<0.30068,0.39510,0.50133>, +<0.29651,0.40281,0.49157>, +<0.29392,0.41100,0.48190>, +<0.29098,0.41921,0.47253>, +<0.28661,0.42697,0.46335>, +<0.28058,0.43383,0.45421>, +<0.27370,0.43962,0.44502> +<0.28027,-0.43414,0.43541>, +<0.28532,-0.42647,0.44449>, +<0.28935,-0.41846,0.45346>, +<0.29176,-0.40986,0.46285>, +<0.29509,-0.40185,0.47221>, +<0.29986,-0.39441,0.48172>, +<0.30587,-0.38803,0.49145>, +<0.31290,-0.38299,0.50123>, +<0.32057,-0.37912,0.51114>, +<0.32842,-0.37598,0.52109>, +<0.33619,-0.37261,0.53120>, +<0.34352,-0.36830,0.54135>, +<0.35016,-0.36287,0.55151>, +<0.35600,-0.35646,0.56174>, +<0.36117,-0.34958,0.57192>, +<0.36604,-0.34245,0.58206>, +<0.37112,-0.33528,0.59210>, +<0.37696,-0.32852,0.60206>, +<0.38283,-0.32165,0.61181>, +<0.38874,-0.31452,0.62135>, +<0.39463,-0.30714,0.63053>, +<0.40058,-0.29944,0.63949>, +<0.40678,-0.29145,0.64848>, +<0.40783,-0.27945,0.65974>, +<0.40569,-0.26515,0.66023>, +<0.40481,-0.25184,0.66009>, +<0.40407,-0.23871,ZP>, +<0.40330,-0.22547,ZP>, +<0.40253,-0.21217,ZP>, +<0.40196,-0.19900,ZP>, +<0.40150,-0.18595,ZP>, +<0.40111,-0.17299,ZP>, +<0.40074,-0.16005,ZP>, +<0.40041,-0.14716,ZP>, +<0.40010,-0.13427,ZP>, +<0.39983,-0.12141,ZP>, +<0.39959,-0.10856,ZP>, +<0.39939,-0.09572,ZP>, +<0.39921,-0.08289,ZP>, +<0.39907,-0.07008,ZP>, +<0.39896,-0.05728,ZP>, +<0.39888,-0.04450,ZP>, +<0.39881,-0.03173,ZP>, +<0.39877,-0.01898,ZP>, +<0.39874,-0.00624,ZP>, +<0.39871,0.00649,ZP>, +<0.39870,0.01924,ZP>, +<0.39871,0.03199,ZP>, +<0.39875,0.04476,ZP>, +<0.39883,0.05755,ZP>, +<0.39894,0.07036,ZP>, +<0.39909,0.08318,ZP>, +<0.39929,0.09602,ZP>, +<0.39952,0.10885,ZP>, +<0.39979,0.12170,ZP>, +<0.40010,0.13454,ZP>, +<0.40045,0.14741,ZP>, +<0.40082,0.16027,ZP>, +<0.40122,0.17318,ZP>, +<0.40163,0.18611,ZP>, +<0.40210,0.19913,ZP>, +<0.40268,0.21228,ZP>, +<0.40345,0.22556,ZP>, +<0.40422,0.23879,ZP>, +<0.40494,0.25190,0.66009>, +<0.40580,0.26520,0.66023>, +<0.40791,0.27951,0.65969>, +<0.40672,0.29153,0.64846>, +<0.40054,0.29949,0.63955>, +<0.39464,0.30712,0.63056>, +<0.38874,0.31451,0.62131>, +<0.38281,0.32168,0.61184>, +<0.37697,0.32850,0.60229>, +<0.37134,0.33539,0.59233>, +<0.36660,0.34254,0.58231>, +<0.36179,0.34982,0.57227>, +<0.35648,0.35683,0.56223>, +<0.35050,0.36297,0.55209>, +<0.34371,0.36802,0.54188>, +<0.33626,0.37189,0.53176>, +<0.32826,0.37493,0.52172>, +<0.32022,0.37813,0.51171>, +<0.31264,0.38225,0.50178>, +<0.30586,0.38779,0.49199>, +<0.30030,0.39467,0.48235>, +<0.29621,0.40236,0.47274>, +<0.29352,0.41074,0.46338>, +<0.29087,0.41919,0.45425>, +<0.28634,0.42704,0.44527>, +<0.28107,0.43438,0.43620> +<0.28486,-0.42670,0.42629>, +<0.28839,-0.41828,0.43536>, +<0.29124,-0.40980,0.44435>, +<0.29475,-0.40160,0.45368>, +<0.29951,-0.39416,0.46298>, +<0.30562,-0.38763,0.47242>, +<0.31282,-0.38250,0.48208>, +<0.32063,-0.37869,0.49173>, +<0.32871,-0.37575,0.50152>, +<0.33665,-0.37279,0.51141>, +<0.34416,-0.36885,0.52146>, +<0.35101,-0.36368,0.53149>, +<0.35690,-0.35747,0.54154>, +<0.36196,-0.35045,0.55167>, +<0.36650,-0.34303,0.56171>, +<0.37103,-0.33558,0.57167>, +<0.37598,-0.32841,0.58154>, +<0.38150,-0.32148,0.59122>, +<0.38811,-0.31527,0.60094>, +<0.39382,-0.30808,0.61034>, +<0.39954,-0.30064,0.61971>, +<0.40524,-0.29295,0.62871>, +<0.41094,-0.28497,0.63732>, +<0.41680,-0.27661,0.64588>, +<0.42102,-0.26696,0.65631>, +<0.41773,-0.25220,0.66027>, +<0.41649,-0.23839,ZP>, +<0.41620,-0.22523,ZP>, +<0.41564,-0.21218,ZP>, +<0.41518,-0.19918,ZP>, +<0.41456,-0.18600,ZP>, +<0.41417,-0.17303,ZP>, +<0.41380,-0.16011,ZP>, +<0.41346,-0.14724,ZP>, +<0.41312,-0.13435,ZP>, +<0.41281,-0.12148,ZP>, +<0.41254,-0.10861,ZP>, +<0.41231,-0.09576,ZP>, +<0.41212,-0.08292,ZP>, +<0.41197,-0.07010,ZP>, +<0.41185,-0.05729,ZP>, +<0.41177,-0.04450,ZP>, +<0.41171,-0.03172,ZP>, +<0.41167,-0.01897,ZP>, +<0.41163,-0.00622,ZP>, +<0.41160,0.00652,ZP>, +<0.41159,0.01926,ZP>, +<0.41158,0.03201,ZP>, +<0.41161,0.04478,ZP>, +<0.41168,0.05757,ZP>, +<0.41179,0.07039,ZP>, +<0.41196,0.08322,ZP>, +<0.41218,0.09607,ZP>, +<0.41245,0.10892,ZP>, +<0.41277,0.12177,ZP>, +<0.41312,0.13462,ZP>, +<0.41351,0.14748,ZP>, +<0.41390,0.16032,ZP>, +<0.41430,0.17321,ZP>, +<0.41472,0.18615,ZP>, +<0.41533,0.19930,ZP>, +<0.41578,0.21228,ZP>, +<0.41634,0.22535,ZP>, +<0.41666,0.23858,ZP>, +<0.41794,0.25227,0.66025>, +<0.42116,0.26696,0.65611>, +<0.41677,0.27665,0.64582>, +<0.41089,0.28503,0.63731>, +<0.40523,0.29297,0.62874>, +<0.39955,0.30063,0.61971>, +<0.39384,0.30806,0.61030>, +<0.38811,0.31527,0.60091>, +<0.38147,0.32145,0.59137>, +<0.37614,0.32838,0.58175>, +<0.37145,0.33567,0.57191>, +<0.36721,0.34321,0.56200>, +<0.36278,0.35070,0.55206>, +<0.35758,0.35768,0.54210>, +<0.35142,0.36373,0.53202>, +<0.34435,0.36854,0.52200>, +<0.33648,0.37208,0.51203>, +<0.32824,0.37475,0.50210>, +<0.32017,0.37771,0.49228>, +<0.31244,0.38184,0.48257>, +<0.30562,0.38741,0.47301>, +<0.30005,0.39431,0.46346>, +<0.29574,0.40218,0.45426>, +<0.29287,0.41058,0.44516>, +<0.28998,0.41912,0.43617>, +<0.28615,0.42721,0.42716> +<0.28755,-0.41846,0.41722>, +<0.29060,-0.40976,0.42621>, +<0.29442,-0.40163,0.43515>, +<0.29935,-0.39402,0.44441>, +<0.30541,-0.38747,0.45367>, +<0.31268,-0.38230,0.46305>, +<0.32063,-0.37847,0.47264>, +<0.32885,-0.37568,0.48221>, +<0.33698,-0.37296,0.49192>, +<0.34466,-0.36929,0.50179>, +<0.35164,-0.36437,0.51180>, +<0.35772,-0.35822,0.52173>, +<0.36276,-0.35112,0.53165>, +<0.36701,-0.34348,0.54153>, +<0.37097,-0.33577,0.55144>, +<0.37535,-0.32829,0.56132>, +<0.38048,-0.32133,0.57103>, +<0.38634,-0.31474,0.58064>, +<0.39261,-0.30832,0.59007>, +<0.39893,-0.30178,0.59933>, +<0.40507,-0.29493,0.60841>, +<0.41040,-0.28699,0.61757>, +<0.41522,-0.27857,0.62632>, +<0.42069,-0.27029,0.63463>, +<0.42611,-0.26179,0.64256>, +<0.43191,-0.25255,0.65107>, +<0.43076,-0.23917,0.66012>, +<0.42910,-0.22552,0.66015>, +<0.42825,-0.21209,ZP>, +<0.42804,-0.19896,ZP>, +<0.42770,-0.18596,ZP>, +<0.42742,-0.17320,ZP>, +<0.42690,-0.16016,ZP>, +<0.42651,-0.14726,ZP>, +<0.42616,-0.13437,ZP>, +<0.42583,-0.12151,ZP>, +<0.42553,-0.10865,ZP>, +<0.42527,-0.09580,ZP>, +<0.42504,-0.08295,ZP>, +<0.42487,-0.07011,ZP>, +<0.42474,-0.05728,ZP>, +<0.42466,-0.04448,ZP>, +<0.42461,-0.03171,ZP>, +<0.42457,-0.01894,ZP>, +<0.42454,-0.00619,ZP>, +<0.42451,0.00656,ZP>, +<0.42449,0.01930,ZP>, +<0.42448,0.03204,ZP>, +<0.42449,0.04479,ZP>, +<0.42455,0.05757,ZP>, +<0.42467,0.07039,ZP>, +<0.42487,0.08324,ZP>, +<0.42513,0.09610,ZP>, +<0.42544,0.10894,ZP>, +<0.42580,0.12178,ZP>, +<0.42618,0.13461,ZP>, +<0.42659,0.14746,ZP>, +<0.42703,0.16034,ZP>, +<0.42757,0.17335,ZP>, +<0.42791,0.18614,ZP>, +<0.42823,0.19907,ZP>, +<0.42821,0.21217,ZP>, +<0.42907,0.22571,0.66013>, +<0.43086,0.23949,ZP>, +<0.43189,0.25255,0.65085>, +<0.42610,0.26178,0.64249>, +<0.42065,0.27034,0.63456>, +<0.41520,0.27859,0.62625>, +<0.41036,0.28701,0.61771>, +<0.40488,0.29477,0.60862>, +<0.39864,0.30155,0.59944>, +<0.39234,0.30812,0.59014>, +<0.38627,0.31447,0.58071>, +<0.38058,0.32115,0.57114>, +<0.37564,0.32834,0.56142>, +<0.37161,0.33601,0.55166>, +<0.36784,0.34390,0.54193>, +<0.36357,0.35156,0.53209>, +<0.35833,0.35858,0.52214>, +<0.35198,0.36449,0.51225>, +<0.34467,0.36905,0.50232>, +<0.33662,0.37227,0.49240>, +<0.32834,0.37464,0.48267>, +<0.32010,0.37753,0.47302>, +<0.31234,0.38164,0.46355>, +<0.30538,0.38732,0.45409>, +<0.29968,0.39432,0.44498>, +<0.29525,0.40217,0.43592>, +<0.29181,0.41056,0.42704>, +<0.28921,0.41920,0.41805> +<0.29001,-0.41008,0.40815>, +<0.29419,-0.40183,0.41699>, +<0.29918,-0.39423,0.42586>, +<0.30544,-0.38756,0.43503>, +<0.31265,-0.38230,0.44426>, +<0.32057,-0.37845,0.45361>, +<0.32888,-0.37571,0.46314>, +<0.33716,-0.37315,0.47269>, +<0.34505,-0.36960,0.48235>, +<0.35224,-0.36481,0.49210>, +<0.35839,-0.35876,0.50193>, +<0.36341,-0.35168,0.51175>, +<0.36745,-0.34394,0.52162>, +<0.37098,-0.33593,0.53140>, +<0.37477,-0.32814,0.54120>, +<0.37938,-0.32088,0.55095>, +<0.38509,-0.31428,0.56053>, +<0.39154,-0.30819,0.57002>, +<0.39819,-0.30241,0.57929>, +<0.40480,-0.29628,0.58847>, +<0.41089,-0.28943,0.59756>, +<0.41625,-0.28175,0.60638>, +<0.42089,-0.27335,0.61507>, +<0.42458,-0.26414,0.62336>, +<0.42989,-0.25538,0.63140>, +<0.43524,-0.24625,0.63914>, +<0.43096,-0.24307,0.65001>, +<0.44457,-0.22687,0.65542>, +<0.44167,-0.21249,0.66041>, +<0.44120,-0.19898,0.66011>, +<0.44078,-0.18586,ZP>, +<0.44054,-0.17309,ZP>, +<0.44017,-0.16022,ZP>, +<0.43973,-0.14738,ZP>, +<0.43923,-0.13440,ZP>, +<0.43882,-0.12148,ZP>, +<0.43851,-0.10861,ZP>, +<0.43822,-0.09575,ZP>, +<0.43799,-0.08290,ZP>, +<0.43781,-0.07007,ZP>, +<0.43770,-0.05727,ZP>, +<0.43763,-0.04449,ZP>, +<0.43757,-0.03170,ZP>, +<0.43752,-0.01892,ZP>, +<0.43748,-0.00615,ZP>, +<0.43746,0.00661,ZP>, +<0.43745,0.01935,ZP>, +<0.43744,0.03206,ZP>, +<0.43744,0.04479,ZP>, +<0.43745,0.05752,ZP>, +<0.43754,0.07031,ZP>, +<0.43773,0.08317,ZP>, +<0.43802,0.09604,ZP>, +<0.43838,0.10889,ZP>, +<0.43881,0.12171,ZP>, +<0.43931,0.13459,ZP>, +<0.43987,0.14751,ZP>, +<0.44032,0.16033,ZP>, +<0.44070,0.17318,ZP>, +<0.44095,0.18609,ZP>, +<0.44137,0.19918,0.66011>, +<0.44181,0.21256,0.66037>, +<0.44447,0.22706,0.65533>, +<0.43143,0.24262,0.65008>, +<0.43514,0.24641,0.63905>, +<0.42984,0.25547,0.63133>, +<0.42482,0.26417,0.62324>, +<0.42119,0.27344,0.61505>, +<0.41640,0.28180,0.60643>, +<0.41073,0.28932,0.59768>, +<0.40443,0.29597,0.58869>, +<0.39780,0.30196,0.57942>, +<0.39123,0.30776,0.57006>, +<0.38491,0.31403,0.56068>, +<0.37940,0.32097,0.55112>, +<0.37510,0.32856,0.54148>, +<0.37173,0.33653,0.53183>, +<0.36840,0.34452,0.52200>, +<0.36428,0.35224,0.51219>, +<0.35902,0.35918,0.50241>, +<0.35249,0.36495,0.49257>, +<0.34487,0.36939,0.48274>, +<0.33679,0.37240,0.47309>, +<0.32839,0.37464,0.46348>, +<0.32009,0.37750,0.45405>, +<0.31213,0.38177,0.44468>, +<0.30515,0.38747,0.43559>, +<0.29940,0.39448,0.42653>, +<0.29474,0.40232,0.41772>, +<0.29107,0.41076,0.40889> +<0.29381,-0.40229,0.39898>, +<0.29921,-0.39476,0.40774>, +<0.30533,-0.38804,0.41660>, +<0.31263,-0.38261,0.42568>, +<0.32055,-0.37858,0.43487>, +<0.32886,-0.37583,0.44413>, +<0.33724,-0.37330,0.45359>, +<0.34525,-0.36984,0.46309>, +<0.35265,-0.36512,0.47268>, +<0.35899,-0.35907,0.48238>, +<0.36404,-0.35198,0.49207>, +<0.36793,-0.34422,0.50179>, +<0.37106,-0.33614,0.51160>, +<0.37430,-0.32809,0.52140>, +<0.37858,-0.32042,0.53116>, +<0.38399,-0.31364,0.54071>, +<0.39039,-0.30776,0.55006>, +<0.39745,-0.30244,0.55943>, +<0.40458,-0.29730,0.56860>, +<0.41135,-0.29140,0.57774>, +<0.41716,-0.28422,0.58682>, +<0.42176,-0.27601,0.59551>, +<0.42548,-0.26723,0.60387>, +<0.42907,-0.25808,0.61205>, +<0.43353,-0.24916,0.62032>, +<0.43853,-0.24031,0.62796>, +<0.44344,-0.23121,0.63476>, +<0.44833,-0.22166,0.64177>, +<0.44750,-0.21197,0.65000>, +<0.45641,-0.20026,0.65630>, +<0.45428,-0.18639,0.66031>, +<0.45353,-0.17307,0.66013>, +<0.45306,-0.15996,ZP>, +<0.45274,-0.14707,ZP>, +<0.45244,-0.13425,ZP>, +<0.45210,-0.12150,ZP>, +<0.45168,-0.10864,ZP>, +<0.45123,-0.09574,ZP>, +<0.45089,-0.08284,ZP>, +<0.45070,-0.07000,ZP>, +<0.45059,-0.05722,ZP>, +<0.45053,-0.04447,ZP>, +<0.45046,-0.03166,ZP>, +<0.45043,-0.01887,ZP>, +<0.45042,-0.00609,ZP>, +<0.45039,0.00663,ZP>, +<0.45039,0.01937,ZP>, +<0.45038,0.03208,ZP>, +<0.45040,0.04479,ZP>, +<0.45039,0.05746,ZP>, +<0.45048,0.07020,ZP>, +<0.45066,0.08304,ZP>, +<0.45106,0.09595,ZP>, +<0.45161,0.10883,ZP>, +<0.45215,0.12161,ZP>, +<0.45258,0.13432,ZP>, +<0.45292,0.14710,ZP>, +<0.45325,0.16001,ZP>, +<0.45370,0.17312,0.66012>, +<0.45440,0.18665,0.66029>, +<0.45634,0.20053,0.65623>, +<0.45453,0.20430,0.64321>, +<0.44826,0.22176,0.64171>, +<0.44333,0.23144,0.63428>, +<0.43846,0.24045,0.62776>, +<0.43348,0.24925,0.62017>, +<0.42924,0.25836,0.61198>, +<0.42582,0.26757,0.60376>, +<0.42195,0.27633,0.59548>, +<0.41705,0.28425,0.58689>, +<0.41097,0.29102,0.57797>, +<0.40410,0.29658,0.56871>, +<0.39691,0.30174,0.55941>, +<0.38992,0.30730,0.55014>, +<0.38362,0.31363,0.54075>, +<0.37855,0.32076,0.53120>, +<0.37480,0.32859,0.52157>, +<0.37198,0.33677,0.51187>, +<0.36890,0.34493,0.50223>, +<0.36486,0.35265,0.49258>, +<0.35944,0.35961,0.48281>, +<0.35264,0.36537,0.47312>, +<0.34502,0.36961,0.46356>, +<0.33684,0.37256,0.45397>, +<0.32836,0.37476,0.44455>, +<0.31990,0.37772,0.43526>, +<0.31206,0.38205,0.42611>, +<0.30506,0.38780,0.41710>, +<0.29913,0.39488,0.40833>, +<0.29418,0.40272,0.39963> +<0.29898,-0.39537,0.38967>, +<0.30547,-0.38885,0.39839>, +<0.31260,-0.38317,0.40723>, +<0.32052,-0.37888,0.41625>, +<0.32888,-0.37592,0.42543>, +<0.33726,-0.37338,0.43462>, +<0.34537,-0.36992,0.44401>, +<0.35283,-0.36528,0.45348>, +<0.35930,-0.35930,0.46302>, +<0.36447,-0.35216,0.47267>, +<0.36836,-0.34431,0.48235>, +<0.37123,-0.33617,0.49198>, +<0.37402,-0.32802,0.50168>, +<0.37782,-0.32028,0.51141>, +<0.38310,-0.31314,0.52107>, +<0.38960,-0.30711,0.53046>, +<0.39685,-0.30212,0.53968>, +<0.40440,-0.29774,0.54897>, +<0.41174,-0.29292,0.55813>, +<0.41821,-0.28656,0.56726>, +<0.42327,-0.27871,0.57614>, +<0.42670,-0.26983,0.58451>, +<0.42923,-0.26044,0.59260>, +<0.43216,-0.25150,0.60089>, +<0.43698,-0.24310,0.60863>, +<0.44175,-0.23432,0.61618>, +<0.44656,-0.22509,0.62289>, +<0.45120,-0.21564,0.62988>, +<0.45564,-0.20609,0.63637>, +<0.46004,-0.19601,0.64240>, +<0.46457,-0.18536,0.64815>, +<0.46812,-0.17371,0.65462>, +<0.46720,-0.16051,0.65957>, +<0.46580,-0.14714,0.66017>, +<0.46508,-0.13425,ZP>, +<0.46476,-0.12119,ZP>, +<0.46455,-0.10828,ZP>, +<0.46431,-0.09546,0.66008>, +<0.46414,-0.08271,0.66008>, +<0.46408,-0.07003,ZP>, +<0.46386,-0.05728,ZP>, +<0.46367,-0.04452,ZP>, +<0.46351,-0.03167,ZP>, +<0.46344,-0.01885,ZP>, +<0.46344,-0.00604,ZP>, +<0.46346,0.00670,ZP>, +<0.46352,0.01945,ZP>, +<0.46349,0.03210,ZP>, +<0.46363,0.04484,ZP>, +<0.46353,0.05733,ZP>, +<0.46363,0.07010,ZP>, +<0.46308,0.08289,ZP>, +<0.46380,0.09550,ZP>, +<0.46449,0.10834,ZP>, +<0.46507,0.12101,ZP>, +<0.46551,0.13384,0.66010>, +<0.46601,0.14708,0.66020>, +<0.46746,0.16053,0.65948>, +<0.46821,0.17371,0.65443>, +<0.46449,0.18556,0.64815>, +<0.45996,0.19621,0.64242>, +<0.45549,0.20637,0.63665>, +<0.45114,0.21572,0.63000>, +<0.44647,0.22523,0.62308>, +<0.44174,0.23436,0.61600>, +<0.43696,0.24312,0.60848>, +<0.43212,0.25155,0.60080>, +<0.42967,0.26095,0.59248>, +<0.42710,0.27016,0.58448>, +<0.42323,0.27899,0.57612>, +<0.41794,0.28638,0.56727>, +<0.41122,0.29232,0.55824>, +<0.40362,0.29693,0.54899>, +<0.39596,0.30150,0.53978>, +<0.38878,0.30685,0.53058>, +<0.38264,0.31319,0.52113>, +<0.37788,0.32062,0.51163>, +<0.37460,0.32866,0.50203>, +<0.37217,0.33702,0.49238>, +<0.36926,0.34522,0.48272>, +<0.36515,0.35300,0.47304>, +<0.35962,0.35992,0.46348>, +<0.35284,0.36550,0.45398>, +<0.34508,0.36973,0.44443>, +<0.33681,0.37270,0.43505>, +<0.32825,0.37493,0.42583>, +<0.31988,0.37801,0.41661>, +<0.31204,0.38251,0.40764>, +<0.30500,0.38852,0.39887>, +<0.29885,0.39550,0.39028> +<0.30527,-0.38952,0.38031>, +<0.31264,-0.38405,0.38904>, +<0.32037,-0.37938,0.39784>, +<0.32870,-0.37614,0.40684>, +<0.33716,-0.37337,0.41598>, +<0.34524,-0.36989,0.42513>, +<0.35284,-0.36524,0.43452>, +<0.35937,-0.35935,0.44398>, +<0.36460,-0.35232,0.45350>, +<0.36853,-0.34448,0.46310>, +<0.37134,-0.33617,0.47276>, +<0.37389,-0.32788,0.48233>, +<0.37744,-0.32000,0.49189>, +<0.38239,-0.31285,0.50146>, +<0.38882,-0.30670,0.51103>, +<0.39622,-0.30180,0.52038>, +<0.40418,-0.29784,0.52960>, +<0.41205,-0.29387,0.53885>, +<0.41896,-0.28842,0.54787>, +<0.42453,-0.28110,0.55681>, +<0.42818,-0.27228,0.56542>, +<0.43011,-0.26286,0.57356>, +<0.43110,-0.25328,0.58168>, +<0.43272,-0.24394,0.58961>, +<0.43715,-0.23510,0.59710>, +<0.44488,-0.22827,0.60427>, +<0.44979,-0.21899,0.61124>, +<0.45588,-0.21111,0.61815>, +<0.45938,-0.20133,0.62475>, +<0.46227,-0.19064,0.63039>, +<0.46636,-0.18037,0.63581>, +<0.47037,-0.16965,0.64098>, +<0.47429,-0.15853,0.64590>, +<0.47813,-0.14697,0.65070>, +<0.47988,-0.13468,0.65603>, +<0.47907,-0.12148,0.65946>, +<0.47771,-0.10835,0.66030>, +<0.47715,-0.09544,0.66018>, +<0.47688,-0.08256,0.66012>, +<0.47674,-0.06988,ZP>, +<0.47649,-0.05710,ZP>, +<0.47632,-0.04434,ZP>, +<0.47626,-0.03153,ZP>, +<0.47629,-0.01876,ZP>, +<0.47636,-0.00601,ZP>, +<0.47642,0.00673,ZP>, +<0.47650,0.01945,ZP>, +<0.47632,0.03199,0.66009>, +<0.47662,0.04468,ZP>, +<0.47655,0.05719,ZP>, +<0.47667,0.06999,0.66009>, +<0.47635,0.08211,0.66010>, +<0.47709,0.09508,0.66012>, +<0.47791,0.10785,0.66028>, +<0.47946,0.12099,0.65938>, +<0.48027,0.13408,0.65580>, +<0.47819,0.14680,0.65049>, +<0.47432,0.15845,0.64572>, +<0.47036,0.16967,0.64085>, +<0.46614,0.18091,0.63592>, +<0.46218,0.19114,0.63037>, +<0.45894,0.20123,0.62443>, +<0.45480,0.21095,0.61809>, +<0.44954,0.21891,0.61100>, +<0.44487,0.22831,0.60427>, +<0.43679,0.23484,0.59706>, +<0.43317,0.24403,0.58951>, +<0.43191,0.25381,0.58153>, +<0.43073,0.26349,0.57352>, +<0.42847,0.27273,0.56539>, +<0.42449,0.28115,0.55673>, +<0.41854,0.28813,0.54796>, +<0.41113,0.29325,0.53881>, +<0.40302,0.29696,0.52953>, +<0.39520,0.30105,0.52047>, +<0.38795,0.30630,0.51116>, +<0.38188,0.31288,0.50174>, +<0.37747,0.32047,0.49226>, +<0.37450,0.32873,0.48261>, +<0.37231,0.33722,0.47301>, +<0.36944,0.34547,0.46346>, +<0.36531,0.35319,0.45390>, +<0.35976,0.36000,0.44443>, +<0.35284,0.36557,0.43491>, +<0.34497,0.36978,0.42561>, +<0.33667,0.37277,0.41647>, +<0.32806,0.37519,0.40725>, +<0.31974,0.37850,0.39831>, +<0.31196,0.38343,0.38950>, +<0.30488,0.38933,0.38088> +<0.31239,-0.38462,0.37092>, +<0.32029,-0.38006,0.37967>, +<0.32847,-0.37633,0.38847>, +<0.33687,-0.37332,0.39739>, +<0.34508,-0.36966,0.40650>, +<0.35259,-0.36506,0.41567>, +<0.35928,-0.35919,0.42508>, +<0.36461,-0.35223,0.43453>, +<0.36861,-0.34446,0.44400>, +<0.37140,-0.33617,0.45353>, +<0.37382,-0.32776,0.46312>, +<0.37725,-0.31970,0.47269>, +<0.38209,-0.31241,0.48224>, +<0.38835,-0.30631,0.49176>, +<0.39574,-0.30148,0.50115>, +<0.40372,-0.29791,0.51041>, +<0.41201,-0.29463,0.51966>, +<0.41954,-0.28975,0.52888>, +<0.42556,-0.28305,0.53779>, +<0.42954,-0.27449,0.54646>, +<0.43133,-0.26495,0.55469>, +<0.43138,-0.25527,0.56257>, +<0.43095,-0.24556,0.57062>, +<0.43358,-0.23638,0.57851>, +<0.43969,-0.22814,0.58588>, +<0.44750,-0.22127,0.59273>, +<0.45518,-0.21500,0.59961>, +<0.46162,-0.20722,0.60625>, +<0.46516,-0.19699,0.61249>, +<0.46622,-0.18629,0.61824>, +<0.46827,-0.17531,0.62375>, +<0.47205,-0.16490,0.62885>, +<0.47564,-0.15421,0.63350>, +<0.47909,-0.14311,0.63776>, +<0.48201,-0.13309,0.64135>, +<0.48533,-0.12040,0.64558>, +<0.48585,-0.11398,0.64567>, +<0.49073,-0.09584,0.65246>, +<0.49159,-0.08312,0.65582>, +<0.49132,-0.07011,0.65819>, +<0.49064,-0.05723,0.65951>, +<0.48998,-0.04441,ZP>, +<0.48960,-0.03158,0.66020>, +<0.48949,-0.01879,0.66020>, +<0.48955,-0.00602,0.66020>, +<0.48967,0.00681,0.66023>, +<0.48989,0.01960,0.66029>, +<0.48893,0.03238,0.65290>, +<0.49092,0.04482,ZP>, +<0.48776,0.05810,0.65438>, +<0.49229,0.07033,0.65760>, +<0.48941,0.08129,0.65042>, +<0.49108,0.09506,0.65146>, +<0.48511,0.09889,0.65000>, +<0.48566,0.11932,0.64543>, +<0.48253,0.13120,0.64170>, +<0.47914,0.14298,0.63764>, +<0.47565,0.15419,0.63339>, +<0.47201,0.16499,0.62877>, +<0.46819,0.17553,0.62366>, +<0.46706,0.18632,0.61841>, +<0.46514,0.19752,0.61275>, +<0.46110,0.20730,0.60639>, +<0.45403,0.21395,0.59963>, +<0.44618,0.22054,0.59291>, +<0.43900,0.22818,0.58599>, +<0.43384,0.23677,0.57869>, +<0.43200,0.24636,0.57057>, +<0.43256,0.25603,0.56259>, +<0.43219,0.26541,0.55471>, +<0.43002,0.27474,0.54646>, +<0.42540,0.28315,0.53778>, +<0.41877,0.28952,0.52879>, +<0.41095,0.29370,0.51949>, +<0.40263,0.29663,0.51046>, +<0.39455,0.30060,0.50131>, +<0.38725,0.30594,0.49192>, +<0.38141,0.31268,0.48257>, +<0.37719,0.32051,0.47296>, +<0.37447,0.32883,0.46341>, +<0.37246,0.33727,0.45396>, +<0.36961,0.34546,0.44440>, +<0.36541,0.35314,0.43499>, +<0.35973,0.35990,0.42550>, +<0.35271,0.36542,0.41616>, +<0.34486,0.36959,0.40702>, +<0.33642,0.37278,0.39783>, +<0.32783,0.37542,0.38891>, +<0.31965,0.37936,0.38016>, +<0.31191,0.38422,0.37147> +<0.31990,-0.38040,0.36160>, +<0.32813,-0.37653,0.37034>, +<0.33646,-0.37313,0.37910>, +<0.34456,-0.36938,0.38796>, +<0.35228,-0.36467,0.39709>, +<0.35898,-0.35891,0.40631>, +<0.36450,-0.35196,0.41568>, +<0.36861,-0.34431,0.42512>, +<0.37146,-0.33614,0.43462>, +<0.37384,-0.32776,0.44415>, +<0.37714,-0.31968,0.45365>, +<0.38186,-0.31216,0.46318>, +<0.38812,-0.30586,0.47274>, +<0.39547,-0.30108,0.48216>, +<0.40346,-0.29769,0.49146>, +<0.41184,-0.29504,0.50064>, +<0.41975,-0.29084,0.50978>, +<0.42642,-0.28447,0.51878>, +<0.43085,-0.27627,0.52747>, +<0.43270,-0.26677,0.53593>, +<0.43242,-0.25717,0.54396>, +<0.43029,-0.24769,0.55172>, +<0.43081,-0.23776,0.55977>, +<0.43559,-0.22874,0.56734>, +<0.44336,-0.22178,0.57460>, +<0.45263,-0.21690,0.58148>, +<0.46120,-0.21169,0.58837>, +<0.46663,-0.20283,0.59496>, +<0.46853,-0.19193,0.60098>, +<0.46705,-0.18111,0.60607>, +<0.47004,-0.17057,0.61126>, +<0.47364,-0.16026,0.61621>, +<0.47708,-0.14989,0.62023>, +<0.48188,-0.13977,0.62470>, +<0.48391,-0.12796,0.62904>, +<0.48614,-0.11698,0.63231>, +<0.48882,-0.10522,0.63621>, +<0.49125,-0.09330,0.63894>, +<0.49336,-0.08135,0.64147>, +<0.49528,-0.06869,0.64367>, +<0.49689,-0.05626,0.64521>, +<0.49812,-0.04402,0.64728>, +<0.49911,-0.03146,0.64835>, +<0.49977,-0.01883,0.64900>, +<0.50010,-0.00610,0.64924>, +<0.50009,0.00654,0.64896>, +<0.49975,0.01919,0.64815>, +<0.49912,0.03153,0.64644>, +<0.49812,0.04428,0.64553>, +<0.49687,0.05636,0.64399>, +<0.49532,0.06859,0.64206>, +<0.49357,0.08018,0.63940>, +<0.49133,0.09287,0.63771>, +<0.48893,0.10482,0.63560>, +<0.48633,0.11625,0.63272>, +<0.48367,0.12698,0.62973>, +<0.48102,0.13845,0.62483>, +<0.47707,0.14972,0.62089>, +<0.47356,0.16049,0.61618>, +<0.46990,0.17091,0.61121>, +<0.46882,0.18158,0.60563>, +<0.46909,0.19225,0.60038>, +<0.46642,0.20284,0.59446>, +<0.45982,0.21045,0.58796>, +<0.45079,0.21536,0.58134>, +<0.44203,0.22145,0.57461>, +<0.43516,0.22953,0.56763>, +<0.43171,0.23885,0.55982>, +<0.43212,0.24844,0.55180>, +<0.43389,0.25758,0.54393>, +<0.43375,0.26735,0.53607>, +<0.43120,0.27697,0.52776>, +<0.42594,0.28471,0.51902>, +<0.41888,0.29036,0.50980>, +<0.41068,0.29378,0.50062>, +<0.40205,0.29634,0.49156>, +<0.39397,0.30024,0.48228>, +<0.38681,0.30568,0.47310>, +<0.38111,0.31262,0.46367>, +<0.37716,0.32042,0.45407>, +<0.37463,0.32867,0.44459>, +<0.37263,0.33712,0.43498>, +<0.36968,0.34532,0.42559>, +<0.36531,0.35292,0.41617>, +<0.35949,0.35958,0.40677>, +<0.35240,0.36500,0.39762>, +<0.34440,0.36927,0.38848>, +<0.33603,0.37266,0.37957>, +<0.32757,0.37594,0.37085>, +<0.31946,0.37990,0.36212> +<0.32772,-0.37655,0.35223>, +<0.33591,-0.37284,0.36093>, +<0.34401,-0.36886,0.36975>, +<0.35160,-0.36416,0.37862>, +<0.35851,-0.35840,0.38781>, +<0.36414,-0.35169,0.39710>, +<0.36853,-0.34403,0.40644>, +<0.37158,-0.33591,0.41586>, +<0.37402,-0.32761,0.42536>, +<0.37733,-0.31956,0.43492>, +<0.38185,-0.31209,0.44438>, +<0.38797,-0.30563,0.45383>, +<0.39534,-0.30069,0.46331>, +<0.40338,-0.29730,0.47262>, +<0.41181,-0.29511,0.48187>, +<0.41983,-0.29155,0.49104>, +<0.42682,-0.28580,0.50005>, +<0.43195,-0.27786,0.50887>, +<0.43414,-0.26851,0.51723>, +<0.43381,-0.25877,0.52539>, +<0.43099,-0.24951,0.53328>, +<0.42958,-0.24011,0.54123>, +<0.43217,-0.23025,0.54923>, +<0.43913,-0.22217,0.55657>, +<0.44817,-0.21690,0.56335>, +<0.45860,-0.21411,0.56993>, +<0.46680,-0.20760,0.57665>, +<0.47091,-0.19747,0.58283>, +<0.47085,-0.18609,0.58850>, +<0.46690,-0.17534,0.59361>, +<0.46730,-0.16442,0.59906>, +<0.47516,-0.15574,0.60376>, +<0.47961,-0.14574,0.60749>, +<0.48608,-0.13666,0.61174>, +<0.48818,-0.12540,0.61639>, +<0.48698,-0.11399,0.61980>, +<0.48950,-0.10200,0.62342>, +<0.49180,-0.09029,0.62635>, +<0.49477,-0.07797,0.62853>, +<0.49752,-0.06734,0.63128>, +<0.49693,-0.05538,0.63286>, +<0.49818,-0.04291,0.63426>, +<0.49909,-0.03069,0.63529>, +<0.49968,-0.01843,0.63582>, +<0.49997,-0.00607,0.63598>, +<0.50045,0.00542,0.63564>, +<0.49969,0.01808,0.63454>, +<0.49914,0.02981,0.63315>, +<0.49818,0.04304,0.63210>, +<0.49812,0.05476,0.63045>, +<0.49577,0.06692,0.62930>, +<0.49446,0.07591,0.62522>, +<0.49182,0.09017,0.62450>, +<0.48947,0.10247,0.62194>, +<0.48955,0.11375,0.62028>, +<0.48940,0.12509,0.61721>, +<0.48472,0.13529,0.61254>, +<0.47843,0.14530,0.60825>, +<0.47506,0.15605,0.60364>, +<0.46842,0.16570,0.59910>, +<0.46977,0.17690,0.59391>, +<0.47276,0.18680,0.58880>, +<0.47170,0.19848,0.58298>, +<0.46564,0.20726,0.57644>, +<0.45653,0.21227,0.56969>, +<0.44633,0.21591,0.56312>, +<0.43785,0.22238,0.55640>, +<0.43247,0.23108,0.54902>, +<0.43092,0.24063,0.54113>, +<0.43327,0.24983,0.53328>, +<0.43545,0.25953,0.52563>, +<0.43518,0.26961,0.51767>, +<0.43216,0.27864,0.50915>, +<0.42633,0.28585,0.50015>, +<0.41884,0.29087,0.49103>, +<0.41029,0.29362,0.48197>, +<0.40164,0.29595,0.47278>, +<0.39361,0.29992,0.46357>, +<0.38657,0.30549,0.45427>, +<0.38120,0.31239,0.44476>, +<0.37737,0.32015,0.43532>, +<0.37480,0.32847,0.42576>, +<0.37270,0.33693,0.41637>, +<0.36955,0.34502,0.40700>, +<0.36496,0.35249,0.39757>, +<0.35894,0.35904,0.38840>, +<0.35170,0.36443,0.37926>, +<0.34381,0.36883,0.37027>, +<0.33554,0.37251,0.36154>, +<0.32733,0.37605,0.35274> +<0.33545,-0.37253,0.34290>, +<0.34337,-0.36826,0.35163>, +<0.35102,-0.36340,0.36046>, +<0.35784,-0.35770,0.36940>, +<0.36371,-0.35105,0.37863>, +<0.36828,-0.34373,0.38801>, +<0.37162,-0.33571,0.39743>, +<0.37431,-0.32748,0.40688>, +<0.37766,-0.31950,0.41630>, +<0.38218,-0.31201,0.42580>, +<0.38802,-0.30553,0.43518>, +<0.39524,-0.30042,0.44461>, +<0.40327,-0.29685,0.45401>, +<0.41181,-0.29486,0.46319>, +<0.42009,-0.29186,0.47243>, +<0.42734,-0.28667,0.48150>, +<0.43280,-0.27936,0.49037>, +<0.43558,-0.27018,0.49895>, +<0.43547,-0.26041,0.50706>, +<0.43270,-0.25100,0.51497>, +<0.42946,-0.24178,0.52286>, +<0.43019,-0.23204,0.53079>, +<0.43511,-0.22296,0.53851>, +<0.44377,-0.21671,0.54561>, +<0.45414,-0.21419,0.55222>, +<0.46445,-0.21103,0.55887>, +<0.47163,-0.20301,0.56548>, +<0.47353,-0.19190,0.57148>, +<0.47117,-0.18094,0.57674>, +<0.46626,-0.17041,0.58189>, +<0.46753,-0.15918,0.58723>, +<0.47422,-0.14968,0.59198>, +<0.48307,-0.14289,0.59568>, +<0.49091,-0.13435,0.60018>, +<0.49166,-0.12219,0.60378>, +<0.48773,-0.11054,0.60702>, +<0.49014,-0.09898,0.61052>, +<0.49231,-0.08742,0.61323>, +<0.49815,-0.07703,0.61601>, +<0.50231,-0.06599,0.61862>, +<0.50197,-0.05378,0.62003>, +<0.49873,-0.04189,0.62098>, +<0.49913,-0.02982,0.62203>, +<0.49983,-0.01791,0.62246>, +<0.50445,-0.00630,0.62274>, +<0.50624,0.00588,0.62287>, +<0.50238,0.01725,0.62168>, +<0.49916,0.02921,0.62042>, +<0.49833,0.04138,0.61906>, +<0.50124,0.05364,0.61794>, +<0.49984,0.06582,0.61612>, +<0.49425,0.07579,0.61373>, +<0.49225,0.08786,0.61191>, +<0.49035,0.09967,0.60922>, +<0.49245,0.11078,0.60696>, +<0.49254,0.12358,0.60438>, +<0.48750,0.13277,0.60049>, +<0.47933,0.14104,0.59599>, +<0.47203,0.15027,0.59187>, +<0.46786,0.16064,0.58720>, +<0.46940,0.17164,0.58173>, +<0.47439,0.18160,0.57686>, +<0.47560,0.19304,0.57143>, +<0.47116,0.20335,0.56509>, +<0.46249,0.20984,0.55882>, +<0.45176,0.21178,0.55201>, +<0.44210,0.21613,0.54535>, +<0.43452,0.22341,0.53844>, +<0.43087,0.23268,0.53073>, +<0.43092,0.24252,0.52291>, +<0.43514,0.25195,0.51523>, +<0.43723,0.26158,0.50752>, +<0.43662,0.27116,0.49924>, +<0.43286,0.27985,0.49052>, +<0.42649,0.28656,0.48158>, +<0.41855,0.29091,0.47251>, +<0.40992,0.29315,0.46332>, +<0.40143,0.29543,0.45414>, +<0.39357,0.29951,0.44490>, +<0.38680,0.30511,0.43550>, +<0.38154,0.31208,0.42608>, +<0.37771,0.31999,0.41662>, +<0.37508,0.32830,0.40725>, +<0.37272,0.33665,0.39796>, +<0.36919,0.34458,0.38855>, +<0.36431,0.35188,0.37929>, +<0.35814,0.35833,0.37012>, +<0.35102,0.36373,0.36104>, +<0.34322,0.36826,0.35226>, +<0.33516,0.37221,0.34345> +<0.34283,-0.36781,0.33355>, +<0.35022,-0.36270,0.34240>, +<0.35718,-0.35694,0.35135>, +<0.36312,-0.35040,0.36042>, +<0.36800,-0.34312,0.36968>, +<0.37165,-0.33537,0.37903>, +<0.37468,-0.32726,0.38847>, +<0.37822,-0.31937,0.39793>, +<0.38270,-0.31193,0.40736>, +<0.38846,-0.30533,0.41686>, +<0.39542,-0.30015,0.42617>, +<0.40327,-0.29642,0.43553>, +<0.41176,-0.29437,0.44478>, +<0.42012,-0.29180,0.45395>, +<0.42775,-0.28711,0.46320>, +<0.43371,-0.28023,0.47217>, +<0.43705,-0.27151,0.48080>, +<0.43731,-0.26178,0.48902>, +<0.43497,-0.25241,0.49690>, +<0.43015,-0.24359,0.50462>, +<0.42921,-0.23379,0.51273>, +<0.43218,-0.22417,0.52053>, +<0.43954,-0.21677,0.52774>, +<0.44932,-0.21247,0.53443>, +<0.46050,-0.21212,0.54079>, +<0.46987,-0.20687,0.54761>, +<0.47553,-0.19740,0.55399>, +<0.47514,-0.18608,0.55952>, +<0.46947,-0.17596,0.56432>, +<0.46591,-0.16496,0.56963>, +<0.46820,-0.15375,0.57462>, +<0.47610,-0.14533,0.57920>, +<0.48690,-0.14024,0.58341>, +<0.49392,-0.13051,0.58810>, +<0.49371,-0.11805,0.59147>, +<0.48723,-0.10722,0.59416>, +<0.48634,-0.09528,0.59783>, +<0.49284,-0.08444,0.60055>, +<0.50039,-0.07585,0.60325>, +<0.50535,-0.06464,0.60606>, +<0.50409,-0.05209,0.60722>, +<0.49834,-0.04122,0.60782>, +<0.49920,-0.02912,0.60899>, +<0.49973,-0.01690,0.60907>, +<0.50676,-0.00684,0.60991>, +<0.50897,0.00500,0.61004>, +<0.50500,0.01656,0.60897>, +<0.49924,0.02780,0.60726>, +<0.49839,0.04015,0.60583>, +<0.50245,0.05173,0.60534>, +<0.50119,0.06359,0.60298>, +<0.49453,0.07392,0.60084>, +<0.48894,0.08464,0.59995>, +<0.49084,0.09709,0.59565>, +<0.49523,0.10844,0.59442>, +<0.49683,0.11996,0.59197>, +<0.49168,0.13070,0.58854>, +<0.48128,0.13730,0.58392>, +<0.47290,0.14490,0.57996>, +<0.46721,0.15525,0.57498>, +<0.46890,0.16661,0.56964>, +<0.47496,0.17654,0.56487>, +<0.47833,0.18758,0.55964>, +<0.47599,0.19862,0.55409>, +<0.46824,0.20659,0.54777>, +<0.45810,0.20983,0.54092>, +<0.44735,0.21104,0.53463>, +<0.43810,0.21638,0.52790>, +<0.43190,0.22484,0.52062>, +<0.43004,0.23493,0.51290>, +<0.43263,0.24462,0.50493>, +<0.43727,0.25351,0.49739>, +<0.43893,0.26308,0.48942>, +<0.43771,0.27263,0.48105>, +<0.43327,0.28087,0.47233>, +<0.42651,0.28702,0.46323>, +<0.41852,0.29100,0.45403>, +<0.40980,0.29246,0.44492>, +<0.40139,0.29494,0.43572>, +<0.39371,0.29914,0.42647>, +<0.38717,0.30492,0.41710>, +<0.38207,0.31210,0.40770>, +<0.37827,0.31994,0.39833>, +<0.37532,0.32809,0.38908>, +<0.37259,0.33628,0.37972>, +<0.36870,0.34406,0.37037>, +<0.36358,0.35124,0.36116>, +<0.35739,0.35754,0.35208>, +<0.35027,0.36298,0.34317>, +<0.34274,0.36773,0.33429> +<0.34974,-0.36220,0.32452>, +<0.35640,-0.35625,0.33336>, +<0.36250,-0.34971,0.34241>, +<0.36758,-0.34255,0.35168>, +<0.37171,-0.33489,0.36097>, +<0.37525,-0.32710,0.37039>, +<0.37905,-0.31935,0.37978>, +<0.38354,-0.31197,0.38920>, +<0.38908,-0.30532,0.39865>, +<0.39580,-0.29987,0.40808>, +<0.40345,-0.29588,0.41737>, +<0.41168,-0.29330,0.42661>, +<0.42004,-0.29117,0.43576>, +<0.42779,-0.28710,0.44494>, +<0.43426,-0.28082,0.45405>, +<0.43828,-0.27255,0.46284>, +<0.43926,-0.26315,0.47123>, +<0.43734,-0.25356,0.47922>, +<0.43261,-0.24476,0.48679>, +<0.42928,-0.23561,0.49466>, +<0.43013,-0.22558,0.50268>, +<0.43578,-0.21683,0.51031>, +<0.44484,-0.21150,0.51726>, +<0.45525,-0.20957,0.52360>, +<0.46608,-0.20879,0.52988>, +<0.47481,-0.20225,0.53668>, +<0.47844,-0.19135,0.54298>, +<0.47566,-0.18024,0.54813>, +<0.46817,-0.17094,0.55270>, +<0.46561,-0.15978,0.55797>, +<0.46957,-0.14869,0.56286>, +<0.47873,-0.14137,0.56701>, +<0.49011,-0.13694,0.57108>, +<0.49656,-0.12664,0.57597>, +<0.49524,-0.11430,0.57944>, +<0.48689,-0.10424,0.58192>, +<0.48608,-0.09201,0.58521>, +<0.49211,-0.08134,0.58791>, +<0.50287,-0.07414,0.59047>, +<0.50815,-0.06279,0.59336>, +<0.50594,-0.05048,0.59445>, +<0.49810,-0.04063,0.59492>, +<0.49524,-0.02837,0.59603>, +<0.49903,-0.01634,0.59637>, +<0.50888,-0.00754,0.59716>, +<0.51179,0.00508,0.59751>, +<0.50753,0.01647,0.59590>, +<0.49887,0.02630,0.59455>, +<0.49748,0.03892,0.59302>, +<0.50406,0.04992,0.59193>, +<0.50228,0.06239,0.59024>, +<0.49352,0.07155,0.58848>, +<0.48864,0.08262,0.58639>, +<0.48957,0.09452,0.58365>, +<0.49609,0.10481,0.58122>, +<0.49953,0.11690,0.57931>, +<0.49465,0.12823,0.57562>, +<0.48403,0.13443,0.57137>, +<0.47354,0.14023,0.56765>, +<0.46722,0.15017,0.56336>, +<0.46744,0.16213,0.55778>, +<0.47466,0.17149,0.55323>, +<0.47982,0.18220,0.54844>, +<0.47982,0.19364,0.54296>, +<0.47399,0.20291,0.53666>, +<0.46416,0.20758,0.53002>, +<0.45301,0.20735,0.52394>, +<0.44267,0.21041,0.51748>, +<0.43439,0.21725,0.51056>, +<0.43054,0.22698,0.50287>, +<0.43125,0.23697,0.49495>, +<0.43597,0.24572,0.48726>, +<0.43962,0.25478,0.47956>, +<0.44073,0.26452,0.47148>, +<0.43870,0.27381,0.46306>, +<0.43382,0.28167,0.45420>, +<0.42659,0.28698,0.44501>, +<0.41841,0.28999,0.43590>, +<0.40973,0.29151,0.42673>, +<0.40159,0.29447,0.41756>, +<0.39420,0.29902,0.40833>, +<0.38796,0.30508,0.39901>, +<0.38299,0.31217,0.38970>, +<0.37906,0.31988,0.38035>, +<0.37576,0.32779,0.37102>, +<0.37240,0.33577,0.36161>, +<0.36818,0.34337,0.35230>, +<0.36289,0.35035,0.34318>, +<0.35665,0.35666,0.33424>, +<0.34976,0.36241,0.32528> +<0.35600,-0.35592,0.31548> +<0.36196,-0.34921,0.32445> +<0.36720,-0.34203,0.33358> +<0.37161,-0.33444,0.34291> +<0.37561,-0.32668,0.35227> +<0.37977,-0.31907,0.36167> +<0.38440,-0.31185,0.37111> +<0.38985,-0.30520,0.38058> +<0.39633,-0.29959,0.38995> +<0.40390,-0.29530,0.39932> +<0.41210,-0.29251,0.40857> +<0.42051,-0.29051,0.41784> +<0.42829,-0.28692,0.42706> +<0.43504,-0.28142,0.43622> +<0.43968,-0.27369,0.44515> +<0.44133,-0.26436,0.45361> +<0.43981,-0.25459,0.46157> +<0.43567,-0.24553,0.46913> +<0.43058,-0.23706,0.47671> +<0.42919,-0.22750,0.48467> +<0.43214,-0.21799,0.49252> +<0.43985,-0.21076,0.49982> +<0.45049,-0.20735,0.50647> +<0.46170,-0.20758,0.51261> +<0.47208,-0.20484,0.51939> +<0.47950,-0.19675,0.52631> +<0.48005,-0.18543,0.53209> +<0.47525,-0.17501,0.53708> +<0.46751,-0.16607,0.54179> +<0.46545,-0.15460,0.54699> +<0.47121,-0.14359,0.55192> +<0.48207,-0.13845,0.55527> +<0.49349,-0.13420,0.55992> +<0.49934,-0.12277,0.56454> +<0.49591,-0.11057,0.56718> +<0.48719,-0.10113,0.56962> +<0.48653,-0.08858,0.57308> +<0.49327,-0.07829,0.57586> +<0.50467,-0.07260,0.57816> +<0.51004,-0.06109,0.58067> +<0.50704,-0.04874,0.58164> +<0.49775,-0.03970,0.58227> +<0.49436,-0.02723,0.58354> +<0.49935,-0.01533,0.58353> +<0.51008,-0.00758,0.58417> +<0.51336,0.00439,0.58441> +<0.50926,0.01608,0.58331> +<0.49943,0.02420,0.58167> +<0.49722,0.03692,0.58053> +<0.50502,0.04760,0.57915> +<0.50315,0.06047,0.57734> +<0.49393,0.06924,0.57525> +<0.48751,0.07974,0.57358> +<0.48889,0.09263,0.57070> +<0.49826,0.10169,0.56902> +<0.50012,0.11317,0.56692> +<0.49642,0.12489,0.56350> +<0.48700,0.13174,0.55948> +<0.47616,0.13616,0.55582> +<0.46813,0.14492,0.55187> +<0.46721,0.15648,0.54686> +<0.47350,0.16620,0.54151> +<0.48060,0.17519,0.53713> +<0.48377,0.18726,0.53232> +<0.47924,0.19827,0.52594> +<0.47010,0.20462,0.51919> +<0.45929,0.20508,0.51281> +<0.44835,0.20597,0.50683> +<0.43868,0.21079,0.50018> +<0.43207,0.21896,0.49302> +<0.43071,0.22900,0.48522> +<0.43335,0.23836,0.47743> +<0.43884,0.24689,0.46986> +<0.44240,0.25637,0.46205> +<0.44284,0.26625,0.45385> +<0.43985,0.27518,0.44520> +<0.43409,0.28211,0.43619> +<0.42669,0.28669,0.42699> +<0.41847,0.28906,0.41775> +<0.40996,0.29069,0.40860> +<0.40192,0.29387,0.39944> +<0.39473,0.29870,0.39022> +<0.38868,0.30490,0.38097> +<0.38374,0.31205,0.37162> +<0.37960,0.31959,0.36228> +<0.37592,0.32741,0.35286> +<0.37219,0.33519,0.34357> +<0.36771,0.34277,0.33436> +<0.36242,0.34978,0.32532> +<0.35628,0.35636,0.31633> +} +normal_vectors { +nx*ny, +<-0.727,-0.685,0.031>, +<-0.784,-0.621,-0.005>, +<-0.847,-0.531,-0.014>, +<-0.889,-0.457,-0.019>, +<-0.897,-0.442,-0.024>, +<-0.867,-0.498,-0.014>, +<-0.810,-0.586,-0.009>, +<-0.719,-0.695,-0.018>, +<-0.590,-0.807,-0.035>, +<-0.442,-0.896,-0.047>, +<-0.319,-0.947,-0.038>, +<-0.328,-0.944,0.018>, +<-0.512,-0.858,0.046>, +<-0.706,-0.702,0.090>, +<-0.882,-0.450,0.138>, +<-0.975,-0.137,0.172>, +<-0.969,0.175,0.176>, +<-0.919,0.378,0.107>, +<-0.970,0.239,0.033>, +<-0.989,-0.131,-0.074>, +<-0.833,-0.525,-0.173>, +<-0.516,-0.831,-0.209>, +<-0.213,-0.957,-0.198>, +<-0.260,-0.961,-0.094>, +<-0.656,-0.755,0.029>, +<-0.939,-0.301,0.168>, +<-0.951,0.227,0.211>, +<-0.864,0.486,0.131>, +<-0.968,0.235,0.081>, +<-0.939,-0.333,-0.083>, +<-0.579,-0.792,-0.193>, +<-0.422,-0.902,-0.087>, +<-0.770,-0.638,0.005>, +<-0.985,-0.080,0.153>, +<-0.864,0.464,0.196>, +<-0.921,0.382,0.083>, +<-0.968,-0.246,-0.047>, +<-0.654,-0.740,-0.156>, +<-0.685,-0.729,0.009>, +<-0.977,-0.141,0.162>, +<-0.862,0.492,0.121>, +<-0.863,0.503,0.045>, +<-0.998,-0.057,0.017>, +<-0.850,-0.526,-0.011>, +<-0.921,-0.387,0.038>, +<-0.940,0.327,0.101>, +<-0.837,0.546,0.040>, +<-0.989,0.140,-0.050>, +<-0.880,-0.474,0.016>, +<-0.844,-0.514,0.154>, +<-0.981,0.103,0.162>, +<-0.711,0.702,0.032>, +<-0.658,0.743,-0.123>, +<-0.964,0.254,-0.084>, +<-0.925,-0.374,0.069>, +<-0.882,-0.431,0.192>, +<-0.981,0.144,0.133>, +<-0.728,0.685,-0.019>, +<-0.453,0.888,-0.081>, +<-0.680,0.714,-0.166>, +<-0.976,0.202,-0.079>, +<-0.926,-0.359,0.116>, +<-0.845,-0.500,0.190>, +<-0.961,-0.146,0.236>, +<-0.899,0.402,0.174>, +<-0.577,0.817,0.010>, +<-0.182,0.979,-0.092>, +<-0.212,0.955,-0.207>, +<-0.550,0.812,-0.194>, +<-0.861,0.486,-0.150>, +<-0.995,0.089,-0.045>, +<-0.960,-0.275,0.049>, +<-0.926,-0.351,0.137>, +<-0.975,-0.128,0.181>, +<-0.967,0.183,0.176>, +<-0.857,0.495,0.142>, +<-0.673,0.735,0.086>, +<-0.482,0.875,0.033>, +<-0.314,0.949,0.006>, +<-0.353,0.934,-0.052>, +<-0.493,0.869,-0.044>, +<-0.637,0.770,-0.026>, +<-0.757,0.653,-0.012>, +<-0.838,0.546,-0.006>, +<-0.886,0.464,-0.012>, +<-0.906,0.422,-0.022>, +<-0.889,0.458,-0.018>, +<-0.837,0.547,-0.014>, +<-0.767,0.642,-0.006>, +<-0.707,0.706,0.032> +<-0.667,-0.745,-0.005>, +<-0.728,-0.684,-0.042>, +<-0.806,-0.591,-0.047>, +<-0.869,-0.493,-0.035>, +<-0.904,-0.427,-0.015>, +<-0.900,-0.435,0.009>, +<-0.859,-0.511,0.027>, +<-0.787,-0.617,0.027>, +<-0.677,-0.736,0.017>, +<-0.537,-0.843,0.002>, +<-0.391,-0.920,-0.018>, +<-0.302,-0.953,-0.021>, +<-0.403,-0.915,-0.026>, +<-0.595,-0.804,0.007>, +<-0.794,-0.606,0.051>, +<-0.942,-0.323,0.087>, +<-0.995,-0.013,0.104>, +<-0.953,0.279,0.119>, +<-0.940,0.335,0.065>, +<-1,0.022,0.014>, +<-0.931,-0.357,-0.081>, +<-0.685,-0.716,-0.135>, +<-0.342,-0.923,-0.174>, +<-0.211,-0.973,-0.088>, +<-0.546,-0.837,-0.037>, +<-0.878,-0.467,0.103>, +<-0.987,0.034,0.157>, +<-0.896,0.418,0.151>, +<-0.944,0.314,0.102>, +<-0.973,-0.225,-0.057>, +<-0.698,-0.697,-0.166>, +<-0.469,-0.880,-0.077>, +<-0.723,-0.691,0>, +<-0.975,-0.166,0.144>, +<-0.907,0.376,0.187>, +<-0.934,0.350,0.075>, +<-0.974,-0.219,-0.062>, +<-0.719,-0.679,-0.146>, +<-0.746,-0.663,0.061>, +<-0.971,-0.174,0.165>, +<-0.892,0.404,0.203>, +<-0.884,0.466,0.033>, +<-0.991,-0.044,-0.129>, +<-0.862,-0.506,-0.017>, +<-0.931,-0.345,0.118>, +<-0.932,0.338,0.130>, +<-0.881,0.473,0.015>, +<-0.984,0.092,-0.152>, +<-0.918,-0.397,-0.011>, +<-0.891,-0.411,0.191>, +<-0.974,0.143,0.175>, +<-0.750,0.658,0.061>, +<-0.750,0.644,-0.149>, +<-0.979,0.191,-0.071>, +<-0.935,-0.350,0.054>, +<-0.925,-0.335,0.181>, +<-0.966,0.227,0.122>, +<-0.684,0.729,-0.031>, +<-0.517,0.849,-0.106>, +<-0.792,0.596,-0.129>, +<-0.993,0.109,-0.040>, +<-0.914,-0.388,0.115>, +<-0.894,-0.407,0.185>, +<-0.985,0.046,0.167>, +<-0.830,0.548,0.100>, +<-0.464,0.884,-0.053>, +<-0.172,0.981,-0.095>, +<-0.367,0.915,-0.171>, +<-0.715,0.687,-0.127>, +<-0.947,0.316,-0.059>, +<-0.997,-0.063,0.037>, +<-0.937,-0.342,0.074>, +<-0.963,-0.239,0.125>, +<-0.993,0.057,0.106>, +<-0.927,0.366,0.086>, +<-0.768,0.638,0.047>, +<-0.569,0.822,0.005>, +<-0.380,0.925,-0.029>, +<-0.320,0.947,-0.029>, +<-0.439,0.898,-0.019>, +<-0.586,0.810,0.002>, +<-0.721,0.693,0.021>, +<-0.820,0.571,0.032>, +<-0.882,0.471,0.026>, +<-0.914,0.405,0.004>, +<-0.907,0.420,-0.018>, +<-0.862,0.506,-0.040>, +<-0.790,0.612,-0.050>, +<-0.707,0.706,-0.043>, +<-0.642,0.767,-0.004> +<-0.573,-0.819,-0.013>, +<-0.639,-0.767,-0.050>, +<-0.730,-0.681,-0.057>, +<-0.818,-0.573,-0.047>, +<-0.887,-0.461,-0.026>, +<-0.924,-0.382,0>, +<-0.917,-0.398,0.018>, +<-0.869,-0.494,0.026>, +<-0.786,-0.618,0.024>, +<-0.663,-0.748,0.011>, +<-0.516,-0.857,-0.006>, +<-0.357,-0.934,-0.032>, +<-0.299,-0.954,-0.030>, +<-0.442,-0.897,-0.011>, +<-0.645,-0.764,0.025>, +<-0.840,-0.539,0.061>, +<-0.966,-0.241,0.091>, +<-0.992,0.055,0.110>, +<-0.948,0.310,0.078>, +<-0.976,0.214,0.040>, +<-0.987,-0.157,-0.041>, +<-0.839,-0.534,-0.105>, +<-0.554,-0.822,-0.134>, +<-0.257,-0.961,-0.099>, +<-0.390,-0.918,-0.066>, +<-0.774,-0.631,0.060>, +<-0.975,-0.177,0.132>, +<-0.943,0.280,0.179>, +<-0.935,0.348,0.069>, +<-0.992,-0.109,-0.057>, +<-0.815,-0.561,-0.146>, +<-0.564,-0.822,-0.084>, +<-0.683,-0.730,0.009>, +<-0.952,-0.266,0.154>, +<-0.947,0.256,0.193>, +<-0.954,0.292,0.065>, +<-0.969,-0.163,-0.185>, +<-0.814,-0.569,-0.113>, +<-0.815,-0.575,0.070>, +<-0.968,-0.163,0.189>, +<-0.928,0.293,0.229>, +<-0.979,0.204,0.015>, +<-0.990,-0.048,-0.134>, +<-0.961,-0.274,-0.018>, +<-0.947,-0.250,0.204>, +<-0.956,0.241,0.169>, +<-0.966,0.260,-0.006>, +<-0.991,0.055,-0.125>, +<-0.983,-0.180,-0.024>, +<-0.940,-0.266,0.212>, +<-0.964,0.159,0.213>, +<-0.831,0.546,0.105>, +<-0.831,0.539,-0.135>, +<-0.970,0.153,-0.191>, +<-0.959,-0.280,0.038>, +<-0.961,-0.202,0.189>, +<-0.942,0.307,0.133>, +<-0.679,0.734,0.004>, +<-0.609,0.782,-0.132>, +<-0.863,0.490,-0.128>, +<-1,0.015,-0.021>, +<-0.917,-0.394,0.066>, +<-0.945,-0.261,0.195>, +<-0.963,0.230,0.141>, +<-0.727,0.683,0.063>, +<-0.336,0.940,-0.059>, +<-0.256,0.959,-0.121>, +<-0.581,0.802,-0.139>, +<-0.860,0.499,-0.108>, +<-0.992,0.122,-0.028>, +<-0.968,-0.246,0.047>, +<-0.951,-0.295,0.091>, +<-0.995,-0.017,0.100>, +<-0.956,0.282,0.082>, +<-0.819,0.572,0.054>, +<-0.621,0.783,0.015>, +<-0.416,0.909,-0.019>, +<-0.310,0.950,-0.031>, +<-0.407,0.913,-0.033>, +<-0.563,0.826,-0.008>, +<-0.709,0.705,0.009>, +<-0.822,0.570,0.023>, +<-0.894,0.448,0.025>, +<-0.932,0.363,0.015>, +<-0.927,0.375,-0.006>, +<-0.879,0.476,-0.035>, +<-0.803,0.594,-0.053>, +<-0.707,0.704,-0.061>, +<-0.612,0.789,-0.051>, +<-0.546,0.838,-0.012> +<-0.478,-0.878,-0.017>, +<-0.535,-0.844,-0.043>, +<-0.628,-0.777,-0.052>, +<-0.734,-0.677,-0.050>, +<-0.830,-0.556,-0.040>, +<-0.903,-0.430,-0.022>, +<-0.940,-0.341,-0.002>, +<-0.932,-0.363,0.012>, +<-0.880,-0.475,0.016>, +<-0.789,-0.615,0.011>, +<-0.654,-0.756,0.001>, +<-0.497,-0.868,-0.013>, +<-0.330,-0.944,-0.020>, +<-0.307,-0.952,-0.010>, +<-0.477,-0.879,0.012>, +<-0.686,-0.726,0.045>, +<-0.873,-0.480,0.080>, +<-0.979,-0.182,0.094>, +<-0.989,0.107,0.099>, +<-0.961,0.274,0.030>, +<-0.998,0.057,-0.003>, +<-0.946,-0.316,-0.076>, +<-0.737,-0.666,-0.114>, +<-0.425,-0.894,-0.139>, +<-0.318,-0.947,-0.032>, +<-0.638,-0.769,0.037>, +<-0.917,-0.379,0.125>, +<-0.982,0.069,0.174>, +<-0.953,0.299,0.046>, +<-1,0.004,-0.042>, +<-0.895,-0.428,-0.123>, +<-0.694,-0.698,-0.174>, +<-0.692,-0.721,0.043>, +<-0.925,-0.343,0.161>, +<-0.971,0.113,0.211>, +<-0.995,0.094,0.022>, +<-0.978,-0.153,-0.142>, +<-0.923,-0.381,-0.049>, +<-0.865,-0.484,0.131>, +<-0.946,-0.165,0.279>, +<-0.943,0.170,0.287>, +<-0.993,0.120,0.019>, +<-0.998,-0.061,0>, +<-0.987,-0.162,-0.008>, +<-0.964,-0.153,0.218>, +<-0.968,0.133,0.213>, +<-0.985,0.172,0>, +<-0.998,0.059,0>, +<-0.997,-0.081,0.012>, +<-0.960,-0.122,0.253>, +<-0.940,0.187,0.285>, +<-0.886,0.438,0.148>, +<-0.948,0.316,-0.033>, +<-0.980,0.136,-0.144>, +<-0.998,-0.070,-0.002>, +<-0.977,-0.062,0.203>, +<-0.908,0.387,0.162>, +<-0.704,0.709,0.034>, +<-0.733,0.647,-0.209>, +<-0.921,0.370,-0.122>, +<-0.995,-0.097,-0.002>, +<-0.943,-0.327,0.059>, +<-0.985,-0.031,0.172>, +<-0.894,0.432,0.122>, +<-0.594,0.804,0.018>, +<-0.298,0.954,-0.028>, +<-0.455,0.879,-0.145>, +<-0.761,0.639,-0.115>, +<-0.955,0.287,-0.074>, +<-0.996,-0.093,0.003>, +<-0.959,-0.282,0.036>, +<-0.992,-0.081,0.100>, +<-0.973,0.215,0.084>, +<-0.853,0.517,0.063>, +<-0.660,0.751,0.032>, +<-0.449,0.894,0.003>, +<-0.311,0.950,-0.017>, +<-0.379,0.925,-0.024>, +<-0.546,0.837,-0.013>, +<-0.700,0.714,0>, +<-0.825,0.566,0.009>, +<-0.904,0.428,0.015>, +<-0.945,0.327,0.011>, +<-0.942,0.337,-0.003>, +<-0.893,0.449,-0.025>, +<-0.814,0.580,-0.045>, +<-0.709,0.703,-0.055>, +<-0.598,0.799,-0.056>, +<-0.505,0.862,-0.044>, +<-0.451,0.892,-0.016> +<-0.419,-0.908,-0.021>, +<-0.439,-0.898,-0.025>, +<-0.513,-0.858,-0.040>, +<-0.620,-0.783,-0.045>, +<-0.738,-0.673,-0.041>, +<-0.841,-0.540,-0.028>, +<-0.914,-0.405,-0.012>, +<-0.949,-0.315,0.002>, +<-0.939,-0.343,0.009>, +<-0.885,-0.466,0.010>, +<-0.787,-0.617,0.003>, +<-0.644,-0.765,-0.006>, +<-0.482,-0.876,-0.017>, +<-0.328,-0.944,-0.015>, +<-0.339,-0.941,0>, +<-0.524,-0.851,0.032>, +<-0.728,-0.682,0.065>, +<-0.901,-0.425,0.086>, +<-0.985,-0.147,0.090>, +<-0.990,0.127,0.064>, +<-0.984,0.179,0.004>, +<-0.993,-0.109,-0.049>, +<-0.880,-0.464,-0.104>, +<-0.650,-0.750,-0.122>, +<-0.406,-0.912,-0.053>, +<-0.508,-0.861,0.014>, +<-0.825,-0.550,0.129>, +<-0.973,-0.157,0.170>, +<-0.985,0.140,0.104>, +<-0.998,0.058,-0.032>, +<-0.913,-0.338,-0.230>, +<-0.813,-0.558,-0.166>, +<-0.786,-0.612,0.088>, +<-0.889,-0.417,0.192>, +<-0.964,-0.055,0.258>, +<-0.998,-0.010,0.061>, +<-0.985,-0.172,0.010>, +<-0.971,-0.238,-0.013>, +<-0.937,-0.306,0.167>, +<-0.950,-0.119,0.290>, +<-0.972,-0.028,0.235>, +<-0.996,-0.090,-0.001>, +<-0.991,-0.072,0.111>, +<-1,-0.039,-0.006>, +<-0.994,-0.014,0.109>, +<-0.992,0.013,0.125>, +<-1,0.035,0.005>, +<-0.998,0.060,-0.003>, +<-0.996,0.086,0.006>, +<-0.986,0.060,0.157>, +<-0.959,0.143,0.244>, +<-0.962,0.247,0.114>, +<-0.979,0.206,-0.006>, +<-0.989,0.147,0.015>, +<-0.997,0.038,0.061>, +<-0.961,0.133,0.244>, +<-0.874,0.436,0.214>, +<-0.833,0.547,0.078>, +<-0.835,0.519,-0.183>, +<-0.920,0.307,-0.245>, +<-0.993,-0.115,0.009>, +<-0.981,-0.152,0.125>, +<-0.965,0.204,0.164>, +<-0.796,0.595,0.115>, +<-0.469,0.883,-0.005>, +<-0.406,0.911,-0.071>, +<-0.675,0.727,-0.127>, +<-0.889,0.445,-0.105>, +<-0.996,0.079,-0.044>, +<-0.980,-0.199,0.007>, +<-0.991,-0.114,0.075>, +<-0.982,0.167,0.089>, +<-0.886,0.456,0.080>, +<-0.702,0.710,0.052>, +<-0.493,0.870,0.016>, +<-0.335,0.942,-0.007>, +<-0.372,0.928,-0.019>, +<-0.534,0.845,-0.019>, +<-0.691,0.723,-0.008>, +<-0.823,0.568,0.002>, +<-0.908,0.420,0.009>, +<-0.951,0.310,0.009>, +<-0.949,0.314,0.003>, +<-0.904,0.428,-0.011>, +<-0.823,0.567,-0.027>, +<-0.711,0.702,-0.042>, +<-0.587,0.808,-0.047>, +<-0.478,0.878,-0.039>, +<-0.411,0.911,-0.025>, +<-0.397,0.917,-0.021> +<-0.434,-0.900,-0.019>, +<-0.396,-0.918,-0.005>, +<-0.403,-0.915,-0.016>, +<-0.492,-0.870,-0.030>, +<-0.613,-0.790,-0.032>, +<-0.742,-0.670,-0.025>, +<-0.848,-0.529,-0.015>, +<-0.921,-0.390,-0.003>, +<-0.954,-0.300,0.004>, +<-0.942,-0.335,0.007>, +<-0.886,-0.464,0.003>, +<-0.782,-0.623,-0.006>, +<-0.637,-0.771,-0.017>, +<-0.478,-0.878,-0.022>, +<-0.348,-0.937,-0.009>, +<-0.388,-0.921,0.015>, +<-0.573,-0.818,0.047>, +<-0.767,-0.637,0.080>, +<-0.918,-0.385,0.091>, +<-0.988,-0.133,0.084>, +<-0.995,0.094,0.034>, +<-0.999,0.046,-0.022>, +<-0.959,-0.266,-0.093>, +<-0.811,-0.572,-0.124>, +<-0.600,-0.792,-0.114>, +<-0.515,-0.857,0.003>, +<-0.723,-0.680,0.126>, +<-0.921,-0.340,0.189>, +<-0.985,-0.083,0.153>, +<-0.991,-0.126,-0.048>, +<-0.952,-0.271,-0.145>, +<-0.934,-0.357,-0.016>, +<-0.882,-0.466,0.069>, +<-0.890,-0.393,0.231>, +<-0.955,-0.182,0.234>, +<-0.985,-0.167,0.051>, +<-0.978,-0.210,-0.004>, +<-0.981,-0.195,0.003>, +<-0.976,-0.186,0.111>, +<-0.959,-0.137,0.250>, +<-0.959,-0.148,0.243>, +<-0.942,-0.058,0.330>, +<-0.922,-0.091,0.376>, +<-0.909,-0.132,0.394>, +<-0.913,-0.014,0.408>, +<-0.916,0.019,0.402>, +<-0.922,0.052,0.383>, +<-0.935,0.084,0.345>, +<-0.951,0.115,0.287>, +<-0.968,0.139,0.211>, +<-0.970,0.158,0.186>, +<-0.982,0.175,0.072>, +<-0.981,0.193,-0.001>, +<-0.978,0.207,-0.004>, +<-0.976,0.211,0.059>, +<-0.953,0.240,0.184>, +<-0.909,0.368,0.194>, +<-0.922,0.385,0.050>, +<-0.946,0.324,-0.002>, +<-0.950,0.267,-0.160>, +<-0.997,0.072,-0.035>, +<-0.983,0.061,0.173>, +<-0.904,0.391,0.170>, +<-0.693,0.714,0.106>, +<-0.496,0.868,-0.005>, +<-0.619,0.775,-0.128>, +<-0.823,0.554,-0.129>, +<-0.965,0.243,-0.095>, +<-0.997,-0.073,-0.023>, +<-0.995,-0.092,0.038>, +<-0.986,0.146,0.086>, +<-0.911,0.404,0.088>, +<-0.746,0.662,0.072>, +<-0.542,0.839,0.038>, +<-0.375,0.927,0.006>, +<-0.379,0.925,-0.016>, +<-0.526,0.850,-0.022>, +<-0.683,0.730,-0.016>, +<-0.818,0.575,-0.006>, +<-0.908,0.420,0.002>, +<-0.952,0.306,0.007>, +<-0.953,0.303,0.005>, +<-0.910,0.415,-0.001>, +<-0.829,0.559,-0.012>, +<-0.713,0.700,-0.022>, +<-0.578,0.816,-0.028>, +<-0.454,0.890,-0.028>, +<-0.367,0.930,-0.009>, +<-0.375,0.927,-0.002>, +<-0.421,0.907,-0.018> +<-0.507,-0.862,-0.011>, +<-0.437,-0.899,0.015>, +<-0.354,-0.935,0.009>, +<-0.369,-0.929,-0.009>, +<-0.475,-0.880,-0.018>, +<-0.608,-0.794,-0.017>, +<-0.744,-0.668,-0.012>, +<-0.852,-0.523,-0.004>, +<-0.924,-0.382,0.003>, +<-0.955,-0.297,0.006>, +<-0.941,-0.338,0.002>, +<-0.882,-0.471,-0.008>, +<-0.776,-0.630,-0.020>, +<-0.635,-0.772,-0.028>, +<-0.488,-0.872,-0.024>, +<-0.388,-0.922,-0.002>, +<-0.452,-0.892,0.026>, +<-0.625,-0.778,0.065>, +<-0.799,-0.594,0.090>, +<-0.926,-0.365,0.095>, +<-0.986,-0.146,0.077>, +<-1,0,0.004>, +<-0.991,-0.118,-0.063>, +<-0.909,-0.399,-0.118>, +<-0.771,-0.625,-0.119>, +<-0.674,-0.735,-0.075>, +<-0.697,-0.711,0.098>, +<-0.846,-0.499,0.191>, +<-0.941,-0.283,0.188>, +<-0.971,-0.230,0.063>, +<-0.948,-0.319,0.015>, +<-0.944,-0.329,0>, +<-0.944,-0.327,0.032>, +<-0.939,-0.324,0.113>, +<-0.948,-0.294,0.118>, +<-0.935,-0.298,0.192>, +<-0.882,-0.299,0.364>, +<-0.819,-0.247,0.518>, +<-0.737,-0.157,0.657>, +<-0.643,-0.071,0.762>, +<-0.577,-0.014,0.817>, +<-0.484,-0.002,0.875>, +<-0.451,-0.005,0.893>, +<-0.412,-0.006,0.911>, +<-0.404,-0.004,0.915>, +<-0.409,-0.004,0.912>, +<-0.428,-0.006,0.904>, +<-0.461,-0.006,0.887>, +<-0.512,0.005,0.859>, +<-0.581,0.033,0.813>, +<-0.666,0.087,0.740>, +<-0.752,0.166,0.638>, +<-0.830,0.248,0.500>, +<-0.889,0.295,0.351>, +<-0.939,0.292,0.182>, +<-0.956,0.286,0.071>, +<-0.923,0.340,0.182>, +<-0.952,0.307,0.003>, +<-0.945,0.328,0>, +<-0.957,0.289,0.026>, +<-0.979,0.193,0.074>, +<-0.936,0.289,0.203>, +<-0.835,0.522,0.172>, +<-0.667,0.739,0.091>, +<-0.677,0.730,-0.090>, +<-0.784,0.608,-0.124>, +<-0.916,0.383,-0.116>, +<-0.993,0.095,-0.066>, +<-1,-0.003,0.004>, +<-0.985,0.156,0.078>, +<-0.922,0.374,0.098>, +<-0.785,0.613,0.090>, +<-0.597,0.800,0.058>, +<-0.432,0.902,0.022>, +<-0.407,0.913,-0.007>, +<-0.528,0.849,-0.024>, +<-0.677,0.736,-0.023>, +<-0.811,0.585,-0.014>, +<-0.903,0.429,-0.004>, +<-0.950,0.312,0.004>, +<-0.953,0.302,0.007>, +<-0.913,0.408,0.005>, +<-0.833,0.554,0>, +<-0.715,0.699,-0.008>, +<-0.573,0.820,-0.014>, +<-0.437,0.900,-0.013>, +<-0.330,0.944,-0.007>, +<-0.329,0.944,0.014>, +<-0.427,0.904,0.024>, +<-0.503,0.864,-0.009> +<-0.605,-0.796,-0.015>, +<-0.528,-0.849,0.027>, +<-0.409,-0.912,0.024>, +<-0.316,-0.949,0.007>, +<-0.345,-0.939,-0.003>, +<-0.463,-0.886,-0.007>, +<-0.605,-0.796,-0.007>, +<-0.745,-0.667,-0.002>, +<-0.854,-0.520,0.004>, +<-0.925,-0.381,0.008>, +<-0.952,-0.305,0.004>, +<-0.936,-0.352,-0.005>, +<-0.875,-0.484,-0.020>, +<-0.770,-0.638,-0.032>, +<-0.638,-0.770,-0.035>, +<-0.511,-0.860,-0.024>, +<-0.446,-0.895,0.005>, +<-0.523,-0.851,0.041>, +<-0.675,-0.733,0.079>, +<-0.824,-0.557,0.104>, +<-0.927,-0.363,0.100>, +<-0.978,-0.200,0.057>, +<-0.989,-0.148,-0.016>, +<-0.959,-0.264,-0.107>, +<-0.852,-0.486,-0.195>, +<-0.801,-0.589,-0.106>, +<-0.815,-0.573,0.086>, +<-0.840,-0.514,0.176>, +<-0.904,-0.394,0.166>, +<-0.934,-0.355,0.047>, +<-0.934,-0.357,-0.005>, +<-0.937,-0.349,0.018>, +<-0.901,-0.391,0.187>, +<-0.824,-0.379,0.420>, +<-0.726,-0.255,0.639>, +<-0.578,-0.087,0.811>, +<-0.420,0.006,0.908>, +<-0.270,0.018,0.963>, +<-0.143,0.008,0.990>, +<-0.057,0.001,0.998>, +<-0.011,0,1>, +<0.004,0.002,1>, +<0.006,-0.002,1>, +<0.006,-0.001,1>, +<0.006,0,1>, +<0.006,0,1>, +<0.006,0,1>, +<0.006,0,1>, +<-0.001,0,1>, +<-0.024,0,1>, +<-0.076,-0.003,0.997>, +<-0.164,-0.007,0.986>, +<-0.289,-0.016,0.957>, +<-0.434,-0.002,0.901>, +<-0.587,0.093,0.804>, +<-0.712,0.364,0.600>, +<-0.833,0.379,0.404>, +<-0.940,0.248,0.233>, +<-0.938,0.347,0.019>, +<-0.935,0.354,-0.005>, +<-0.939,0.331,0.090>, +<-0.904,0.372,0.211>, +<-0.813,0.555,0.177>, +<-0.798,0.599,0.071>, +<-0.812,0.574,-0.105>, +<-0.856,0.479,-0.197>, +<-0.963,0.251,-0.097>, +<-0.990,0.140,-0.011>, +<-0.976,0.210,0.062>, +<-0.923,0.371,0.100>, +<-0.815,0.570,0.104>, +<-0.653,0.753,0.078>, +<-0.502,0.864,0.036>, +<-0.456,0.890,0>, +<-0.543,0.839,-0.026>, +<-0.674,0.738,-0.033>, +<-0.802,0.597,-0.026>, +<-0.895,0.445,-0.012>, +<-0.945,0.328,0.002>, +<-0.951,0.310,0.008>, +<-0.914,0.406,0.010>, +<-0.835,0.550,0.007>, +<-0.716,0.698,0.002>, +<-0.570,0.821,-0.002>, +<-0.426,0.905,-0.004>, +<-0.309,0.951,0>, +<-0.291,0.957,0.009>, +<-0.399,0.917,0.024>, +<-0.529,0.848,0.033>, +<-0.615,0.788,-0.012> +<-0.724,-0.690,-0.028>, +<-0.644,-0.765,0.023>, +<-0.522,-0.853,0.026>, +<-0.382,-0.924,0.016>, +<-0.293,-0.956,0.007>, +<-0.330,-0.944,0.002>, +<-0.455,-0.890,0>, +<-0.603,-0.798,0.004>, +<-0.745,-0.667,0.010>, +<-0.853,-0.522,0.014>, +<-0.921,-0.390,0.013>, +<-0.945,-0.328,0.003>, +<-0.926,-0.378,-0.013>, +<-0.863,-0.505,-0.030>, +<-0.763,-0.645,-0.042>, +<-0.648,-0.760,-0.042>, +<-0.549,-0.835,-0.023>, +<-0.520,-0.854,0.014>, +<-0.597,-0.800,0.058>, +<-0.723,-0.684,0.098>, +<-0.840,-0.530,0.114>, +<-0.918,-0.384,0.100>, +<-0.946,-0.323,0.023>, +<-0.926,-0.369,-0.076>, +<-0.905,-0.412,-0.104>, +<-0.884,-0.467,0>, +<-0.884,-0.467,0.035>, +<-0.884,-0.463,0.066>, +<-0.878,-0.468,0.102>, +<-0.908,-0.417,0.038>, +<-0.837,-0.468,0.284>, +<-0.739,-0.355,0.572>, +<-0.564,-0.131,0.815>, +<-0.352,0.008,0.936>, +<-0.152,0.012,0.988>, +<-0.026,0.002,1>, +<0.007,0,1>, +<0.002,0,1>, +z,z,<0.002,0,1>, +z,z,z,<0.001,0,1>, +ZS(7) +<0.003,0,1>, +<0.008,0,1>, +<-0.027,-0.004,1>, +<-0.158,-0.014,0.987>, +<-0.414,-0.017,0.910>, +<-0.564,0.126,0.816>, +<-0.739,0.351,0.575>, +<-0.836,0.465,0.290>, +<-0.907,0.418,0.045>, +<-0.845,0.502,0.187>, +<-0.873,0.477,0.097>, +<-0.887,0.462,0.027>, +<-0.885,0.465,0>, +<-0.907,0.409,-0.105>, +<-0.929,0.363,-0.074>, +<-0.945,0.324,0.032>, +<-0.914,0.391,0.104>, +<-0.834,0.539,0.117>, +<-0.708,0.700,0.097>, +<-0.582,0.812,0.054>, +<-0.525,0.851,0.009>, +<-0.574,0.818,-0.027>, +<-0.678,0.734,-0.041>, +<-0.791,0.611,-0.038>, +<-0.882,0.470,-0.022>, +<-0.935,0.356,-0.003>, +<-0.944,0.329,0.011>, +<-0.911,0.412,0.017>, +<-0.836,0.549,0.017>, +<-0.719,0.695,0.011>, +<-0.572,0.820,0.006>, +<-0.423,0.906,0.003>, +<-0.298,0.954,0.003>, +<-0.273,0.962,0.007>, +<-0.374,0.927,0.013>, +<-0.523,0.852,0.022>, +<-0.657,0.754,0.023>, +<-0.741,0.671,-0.028> +<-0.835,-0.548,-0.045>, +<-0.769,-0.639,0.007>, +<-0.655,-0.756,0.017>, +<-0.511,-0.859,0.015>, +<-0.368,-0.930,0.010>, +<-0.283,-0.959,0.006>, +<-0.325,-0.946,0.004>, +<-0.454,-0.891,0.008>, +<-0.603,-0.798,0.016>, +<-0.743,-0.669,0.022>, +<-0.848,-0.530,0.024>, +<-0.911,-0.412,0.017>, +<-0.931,-0.364,0.002>, +<-0.909,-0.416,-0.018>, +<-0.847,-0.531,-0.040>, +<-0.757,-0.651,-0.049>, +<-0.668,-0.743,-0.044>, +<-0.604,-0.797,-0.016>, +<-0.604,-0.797,0.029>, +<-0.672,-0.736,0.077>, +<-0.768,-0.631,0.111>, +<-0.851,-0.513,0.110>, +<-0.901,-0.427,0.072>, +<-0.891,-0.452,0.047>, +<-0.874,-0.486,0.009>, +<-0.877,-0.480,-0.002>, +<-0.840,-0.529,0.124>, +<-0.918,-0.392,0.052>, +<-0.808,-0.515,0.285>, +<-0.655,-0.473,0.589>, +<-0.459,-0.084,0.884>, +<-0.204,0.022,0.979>, +<-0.021,0.004,1>, +<0.006,0,1>, +<0.001,0,1>, +ZS(19) +<0.001,-0.001,1>, +<0.004,-0.001,1>, +<0.009,0,1>, +<-0.017,-0.003,1>, +<-0.200,-0.019,0.980>, +<-0.452,0.080,0.889>, +<-0.663,0.417,0.622>, +<-0.781,0.536,0.322>, +<-0.952,0.280,0.126>, +<-0.802,0.559,0.212>, +<-0.879,0.477,-0.003>, +<-0.877,0.481,0.010>, +<-0.892,0.451,0.046>, +<-0.899,0.432,0.069>, +<-0.847,0.521,0.108>, +<-0.759,0.642,0.110>, +<-0.665,0.743,0.073>, +<-0.607,0.794,0.021>, +<-0.622,0.783,-0.024>, +<-0.691,0.721,-0.047>, +<-0.781,0.623,-0.047>, +<-0.864,0.502,-0.034>, +<-0.918,0.397,-0.011>, +<-0.932,0.362,0.010>, +<-0.904,0.427,0.023>, +<-0.833,0.552,0.026>, +<-0.720,0.693,0.022>, +<-0.575,0.818,0.014>, +<-0.425,0.905,0.008>, +<-0.297,0.955,0.004>, +<-0.268,0.963,0.004>, +<-0.366,0.931,0.007>, +<-0.515,0.857,0.008>, +<-0.666,0.746,0.007>, +<-0.786,0.618,0.002>, +<-0.854,0.517,-0.053> +<-0.917,-0.394,-0.063>, +<-0.872,-0.489,-0.013>, +<-0.788,-0.616,0>, +<-0.661,-0.750,0.005>, +<-0.511,-0.860,0.004>, +<-0.366,-0.931,0.003>, +<-0.285,-0.958,0.003>, +<-0.329,-0.944,0.008>, +<-0.459,-0.888,0.019>, +<-0.606,-0.795,0.029>, +<-0.739,-0.672,0.036>, +<-0.837,-0.546,0.035>, +<-0.894,-0.448,0.023>, +<-0.910,-0.416,0.002>, +<-0.885,-0.466,-0.024>, +<-0.826,-0.562,-0.047>, +<-0.755,-0.653,-0.055>, +<-0.697,-0.716,-0.040>, +<-0.668,-0.744,-0.002>, +<-0.684,-0.728,0.045>, +<-0.739,-0.670,0.079>, +<-0.796,-0.596,0.103>, +<-0.850,-0.513,0.119>, +<-0.872,-0.486,0.050>, +<-0.860,-0.510,-0.005>, +<-0.955,-0.271,0.122>, +<-0.807,-0.559,0.192>, +<-0.684,-0.437,0.583>, +<-0.565,-0.086,0.820>, +<-0.144,0.022,0.989>, +<0.010,0.005,1>, +<0.003,0.001,1>, +ZS(23) +<0.001,0,1>, +<0.002,0,1>, +<0.002,0,1>, +<0.004,0,1>, +<0.010,-0.003,1>, +<-0.135,-0.014,0.991>, +<-0.549,0.073,0.832>, +<-0.654,0.527,0.543>, +<-0.802,0.555,0.219>, +<-0.934,0.351,0.072>, +<-0.860,0.511,-0.006>, +<-0.873,0.486,0.054>, +<-0.849,0.515,0.117>, +<-0.790,0.605,0.096>, +<-0.736,0.673,0.070>, +<-0.689,0.724,0.038>, +<-0.680,0.733,-0.010>, +<-0.713,0.700,-0.046>, +<-0.773,0.632,-0.057>, +<-0.841,0.539,-0.042>, +<-0.894,0.449,-0.016>, +<-0.913,0.409,0.009>, +<-0.891,0.453,0.028>, +<-0.827,0.561,0.037>, +<-0.721,0.692,0.033>, +<-0.581,0.814,0.025>, +<-0.432,0.902,0.014>, +<-0.305,0.952,0.005>, +<-0.272,0.962,0.001>, +<-0.365,0.931,0>, +<-0.515,0.857,0>, +<-0.671,0.741,0>, +<-0.802,0.597,-0.010>, +<-0.889,0.458,-0.019>, +<-0.935,0.346,-0.074> +<-0.955,-0.297,-0.022>, +<-0.940,-0.339,-0.032>, +<-0.890,-0.456,-0.025>, +<-0.801,-0.598,-0.010>, +<-0.672,-0.741,-0.007>, +<-0.518,-0.855,-0.007>, +<-0.374,-0.927,-0.004>, +<-0.301,-0.954,0.002>, +<-0.349,-0.937,0.013>, +<-0.474,-0.880,0.028>, +<-0.613,-0.789,0.040>, +<-0.735,-0.676,0.047>, +<-0.822,-0.568,0.044>, +<-0.870,-0.493,0.027>, +<-0.878,-0.479,0.001>, +<-0.851,-0.524,-0.028>, +<-0.803,-0.594,-0.046>, +<-0.757,-0.652,-0.043>, +<-0.744,-0.667,-0.042>, +<-0.729,-0.684,0.005>, +<-0.752,-0.657,0.058>, +<-0.798,-0.595,0.097>, +<-0.820,-0.568,0.069>, +<-0.842,-0.539,-0.009>, +<-0.832,-0.554,0.023>, +<-0.736,-0.521,0.433>, +<-0.487,-0.259,0.834>, +<-0.182,0.017,0.983>, +<0.017,0.005,1>, +<0.006,0.001,1>, +<0.002,0.001,1>, +ZS(28) +<0.001,0,1>, +<0.004,-0.036,1>, +<0.009,-0.002,1>, +<-0.157,0.026,0.987>, +<-0.504,0.217,0.836>, +<-0.738,0.503,0.450>, +<-0.829,0.558,0.034>, +<-0.843,0.538,-0.010>, +<-0.818,0.572,0.066>, +<-0.797,0.597,0.089>, +<-0.758,0.651,0.049>, +<-0.737,0.676,-0.005>, +<-0.753,0.656,-0.047>, +<-0.769,0.638,-0.045>, +<-0.815,0.578,-0.044>, +<-0.860,0.510,-0.022>, +<-0.883,0.469,0.009>, +<-0.870,0.492,0.034>, +<-0.816,0.577,0.047>, +<-0.720,0.692,0.047>, +<-0.590,0.806,0.036>, +<-0.446,0.895,0.022>, +<-0.323,0.946,0.007>, +<-0.288,0.958,-0.002>, +<-0.374,0.927,-0.007>, +<-0.521,0.854,-0.008>, +<-0.679,0.734,-0.011>, +<-0.812,0.584,-0.014>, +<-0.901,0.432,-0.029>, +<-0.955,0.294,-0.036>, +<-0.972,0.232,-0.030> +<-0.913,-0.407,0.017>, +<-0.945,-0.324,-0.031>, +<-0.950,-0.308,-0.038>, +<-0.903,-0.428,-0.025>, +<-0.812,-0.584,-0.019>, +<-0.682,-0.731,-0.016>, +<-0.529,-0.848,-0.016>, +<-0.393,-0.920,-0.010>, +<-0.331,-0.944,0>, +<-0.381,-0.924,0.016>, +<-0.497,-0.867,0.035>, +<-0.624,-0.780,0.050>, +<-0.731,-0.680,0.057>, +<-0.803,-0.594,0.050>, +<-0.839,-0.544,0.029>, +<-0.840,-0.543,0>, +<-0.816,-0.578,-0.021>, +<-0.776,-0.628,-0.063>, +<-0.766,-0.642,-0.045>, +<-0.783,-0.622,0.007>, +<-0.781,-0.624,0.028>, +<-0.797,-0.603,0.021>, +<-0.824,-0.567,-0.015>, +<-0.774,-0.614,0.153>, +<-0.641,-0.428,0.637>, +<-0.332,-0.094,0.938>, +<-0.001,0.013,1>, +<0.007,0.004,1>, +<0.002,0.001,1>, +<0.001,0,1>, +ZS(31) +<0.035,0.001,1>, +<0.002,-0.004,1>, +<0.002,-0.013,1>, +<-0.310,0.081,0.947>, +<-0.631,0.420,0.653>, +<-0.774,0.610,0.169>, +<-0.825,0.565,-0.015>, +<-0.801,0.598,0.016>, +<-0.785,0.618,0.023>, +<-0.788,0.616,0.002>, +<-0.771,0.635,-0.048>, +<-0.781,0.621,-0.060>, +<-0.821,0.571,-0.018>, +<-0.844,0.536,0.008>, +<-0.841,0.540,0.037>, +<-0.799,0.598,0.055>, +<-0.718,0.693,0.059>, +<-0.603,0.796,0.049>, +<-0.471,0.881,0.031>, +<-0.354,0.935,0.010>, +<-0.317,0.948,-0.006>, +<-0.392,0.920,-0.016>, +<-0.533,0.846,-0.020>, +<-0.688,0.726,-0.018>, +<-0.819,0.573,-0.021>, +<-0.912,0.409,-0.028>, +<-0.962,0.270,-0.042>, +<-0.965,0.262,-0.029>, +<-0.941,0.336,0.025> +<-0.790,-0.609,0.065>, +<-0.866,-0.500,-0.013>, +<-0.937,-0.348,-0.027>, +<-0.954,-0.298,-0.019>, +<-0.910,-0.414,-0.025>, +<-0.817,-0.576,-0.024>, +<-0.689,-0.724,-0.025>, +<-0.543,-0.839,-0.025>, +<-0.421,-0.907,-0.019>, +<-0.377,-0.926,-0.004>, +<-0.426,-0.904,0.017>, +<-0.530,-0.847,0.040>, +<-0.639,-0.767,0.057>, +<-0.725,-0.686,0.060>, +<-0.780,-0.624,0.049>, +<-0.804,-0.595,0.028>, +<-0.793,-0.609,-0.007>, +<-0.776,-0.631,-0.026>, +<-0.765,-0.643,0>, +<-0.778,-0.629,-0.003>, +<-0.790,-0.613,-0.006>, +<-0.803,-0.596,-0.021>, +<-0.722,-0.612,0.323>, +<-0.517,-0.345,0.784>, +<-0.146,-0.004,0.989>, +<0.014,0.006,1>, +<0.004,0.001,1>, +<0.002,0.001,1>, +ZS(34) +<0,-0.001,1>, +<0.003,-0.001,1>, +<0.013,-0.006,1>, +<-0.128,0,0.992>, +<-0.506,0.336,0.794>, +<-0.720,0.606,0.338>, +<-0.803,0.595,-0.022>, +<-0.791,0.612,-0.006>, +<-0.779,0.627,-0.003>, +<-0.767,0.642,0>, +<-0.779,0.627,-0.021>, +<-0.797,0.604,0>, +<-0.807,0.590,0.036>, +<-0.779,0.624,0.059>, +<-0.716,0.695,0.065>, +<-0.620,0.783,0.059>, +<-0.506,0.862,0.039>, +<-0.401,0.916,0.013>, +<-0.360,0.933,-0.009>, +<-0.421,0.907,-0.024>, +<-0.550,0.835,-0.031>, +<-0.697,0.716,-0.031>, +<-0.825,0.564,-0.027>, +<-0.918,0.396,-0.026>, +<-0.965,0.260,-0.020>, +<-0.956,0.292,-0.027>, +<-0.897,0.441,-0.013>, +<-0.830,0.553,0.073> +<-0.576,-0.808,0.127>, +<-0.707,-0.706,0.037>, +<-0.833,-0.554,0.011>, +<-0.924,-0.382,-0.003>, +<-0.948,-0.319,-0.010>, +<-0.909,-0.416,-0.020>, +<-0.817,-0.577,-0.029>, +<-0.693,-0.720,-0.035>, +<-0.560,-0.828,-0.036>, +<-0.460,-0.888,-0.028>, +<-0.432,-0.902,-0.008>, +<-0.481,-0.876,0.018>, +<-0.568,-0.822,0.044>, +<-0.653,-0.755,0.059>, +<-0.718,-0.694,0.059>, +<-0.757,-0.652,0.043>, +<-0.770,-0.637,0.024>, +<-0.754,-0.656,0.014>, +<-0.754,-0.657,-0.003>, +<-0.703,-0.706,0.086>, +<-0.771,-0.637,-0.013>, +<-0.680,-0.569,0.462>, +<-0.403,-0.264,0.876>, +<-0.021,0.020,1>, +<0.007,0.004,1>, +<0.002,0.001,1>, +<0.001,0,1>, +ZS(36) +<0.001,0,1>, +<0.002,-0.001,1>, +<0.007,-0.004,1>, +<-0.015,-0.020,1>, +<-0.394,0.256,0.883>, +<-0.676,0.565,0.473>, +<-0.770,0.637,-0.010>, +<-0.700,0.709,0.091>, +<-0.755,0.655,-0.003>, +<-0.758,0.652,0.017>, +<-0.773,0.634,0.032>, +<-0.757,0.651,0.050>, +<-0.713,0.698,0.064>, +<-0.640,0.766,0.060>, +<-0.549,0.835,0.043>, +<-0.462,0.887,0.016>, +<-0.418,0.908,-0.012>, +<-0.459,0.888,-0.033>, +<-0.570,0.821,-0.041>, +<-0.704,0.709,-0.039>, +<-0.826,0.562,-0.034>, +<-0.918,0.397,-0.025>, +<-0.960,0.281,-0.012>, +<-0.945,0.328,-0.005>, +<-0.865,0.501,0.008>, +<-0.755,0.655,0.037>, +<-0.632,0.763,0.136> +<-0.270,-0.947,0.174>, +<-0.451,-0.889,0.082>, +<-0.646,-0.762,0.051>, +<-0.801,-0.598,0.030>, +<-0.901,-0.433,0.011>, +<-0.935,-0.354,-0.001>, +<-0.901,-0.434,-0.018>, +<-0.810,-0.586,-0.034>, +<-0.694,-0.719,-0.044>, +<-0.580,-0.813,-0.046>, +<-0.507,-0.861,-0.035>, +<-0.497,-0.867,-0.012>, +<-0.542,-0.840,0.019>, +<-0.606,-0.794,0.042>, +<-0.667,-0.744,0.049>, +<-0.712,-0.701,0.047>, +<-0.732,-0.680,0.047>, +<-0.743,-0.669,0.013>, +<-0.806,-0.586,0.077>, +<-0.740,-0.673,0.019>, +<-0.594,-0.627,0.504>, +<-0.307,-0.183,0.934>, +<0.019,0.014,1>, +<0.005,0.004,1>, +<0.002,0.002,1>, +ZS(40) +<0.002,-0.002,1>, +<0.005,-0.004,1>, +<0.019,-0.014,1>, +<-0.299,0.171,0.939>, +<-0.586,0.630,0.509>, +<-0.737,0.675,0.030>, +<-0.813,0.576,0.084>, +<-0.745,0.667,0.013>, +<-0.733,0.678,0.051>, +<-0.711,0.701,0.054>, +<-0.662,0.748,0.054>, +<-0.595,0.802,0.041>, +<-0.529,0.849,0.014>, +<-0.489,0.872,-0.018>, +<-0.507,0.861,-0.042>, +<-0.590,0.806,-0.051>, +<-0.707,0.706,-0.048>, +<-0.820,0.571,-0.037>, +<-0.909,0.416,-0.021>, +<-0.947,0.321,-0.002>, +<-0.923,0.385,0.013>, +<-0.834,0.550,0.031>, +<-0.695,0.718,0.049>, +<-0.511,0.856,0.080>, +<-0.330,0.927,0.179> +<0.054,-0.980,0.192>, +<-0.135,-0.984,0.112>, +<-0.365,-0.927,0.088>, +<-0.590,-0.804,0.065>, +<-0.762,-0.646,0.043>, +<-0.873,-0.487,0.025>, +<-0.913,-0.407,0.008>, +<-0.881,-0.472,-0.014>, +<-0.794,-0.607,-0.036>, +<-0.688,-0.723,-0.051>, +<-0.601,-0.798,-0.054>, +<-0.557,-0.830,-0.037>, +<-0.561,-0.828,-0.008>, +<-0.602,-0.798,0.010>, +<-0.637,-0.770,0.036>, +<-0.683,-0.729,0.053>, +<-0.708,-0.705,0.031>, +<-0.719,-0.695,-0.010>, +<-0.721,-0.691,0.050>, +<-0.662,-0.494,0.564>, +<-0.211,-0.127,0.969>, +<0.016,0.011,1>, +<0.004,0.003,1>, +<0.002,0.002,1>, +ZS(42) +<0.002,-0.002,1>, +<0.004,-0.003,1>, +<0.016,-0.011,1>, +<-0.199,0.109,0.974>, +<-0.665,0.477,0.574>, +<-0.719,0.692,0.070>, +<-0.720,0.694,-0.010>, +<-0.709,0.704,0.031>, +<-0.683,0.729,0.054>, +<-0.635,0.772,0.037>, +<-0.598,0.802,0.006>, +<-0.557,0.830,-0.014>, +<-0.558,0.829,-0.044>, +<-0.607,0.792,-0.061>, +<-0.700,0.712,-0.055>, +<-0.805,0.592,-0.038>, +<-0.890,0.456,-0.014>, +<-0.924,0.383,0.011>, +<-0.891,0.453,0.029>, +<-0.794,0.606,0.050>, +<-0.640,0.765,0.070>, +<-0.426,0.901,0.088>, +<-0.194,0.975,0.109>, +<0,0.981,0.194> +<0.326,-0.929,0.176>, +<0.169,-0.977,0.128>, +<-0.056,-0.993,0.103>, +<-0.293,-0.952,0.086>, +<-0.534,-0.843,0.072>, +<-0.720,-0.691,0.061>, +<-0.836,-0.547,0.042>, +<-0.879,-0.477,0.022>, +<-0.847,-0.531,-0.004>, +<-0.764,-0.644,-0.035>, +<-0.677,-0.734,-0.051>, +<-0.618,-0.784,-0.045>, +<-0.614,-0.788,-0.053>, +<-0.624,-0.781,-0.012>, +<-0.649,-0.760,0.020>, +<-0.665,-0.747,0.015>, +<-0.694,-0.720,-0.010>, +<-0.706,-0.706,0.061>, +<-0.548,-0.527,0.650>, +<-0.143,-0.108,0.984>, +<0.012,0.010,1>, +<0.003,0.002,1>, +<0.002,0,1>, +ZS(44) +<0.002,0,1>, +<0.003,-0.002,1>, +<0.012,-0.010,1>, +<-0.125,0.087,0.988>, +<-0.534,0.511,0.674>, +<-0.704,0.705,0.087>, +<-0.695,0.719,-0.010>, +<-0.667,0.745,0.015>, +<-0.651,0.759,0.020>, +<-0.624,0.781,-0.019>, +<-0.615,0.786,-0.065>, +<-0.620,0.783,-0.050>, +<-0.683,0.728,-0.055>, +<-0.774,0.632,-0.036>, +<-0.855,0.518,-0.003>, +<-0.887,0.461,0.024>, +<-0.849,0.526,0.049>, +<-0.746,0.663,0.071>, +<-0.578,0.811,0.088>, +<-0.352,0.931,0.097>, +<-0.109,0.988,0.109>, +<0.115,0.986,0.119>, +<0.290,0.940,0.181> +<0.367,-0.929,0.044>, +<0.363,-0.928,0.086>, +<0.246,-0.962,0.118>, +<0.004,-0.995,0.099>, +<-0.239,-0.967,0.087>, +<-0.480,-0.873,0.086>, +<-0.671,-0.737,0.083>, +<-0.788,-0.612,0.067>, +<-0.828,-0.560,0.040>, +<-0.794,-0.608,0.007>, +<-0.722,-0.692,-0.021>, +<-0.641,-0.765,-0.053>, +<-0.629,-0.776,-0.050>, +<-0.642,-0.767,0>, +<-0.655,-0.755,-0.003>, +<-0.574,-0.814,0.086>, +<-0.690,-0.722,0.049>, +<-0.527,-0.549,0.649>, +<-0.113,-0.115,0.987>, +<0.010,0.010,1>, +<0.002,0.003,1>, +<0,0.001,1>, +ZS(46) +<0,-0.001,1>, +<0.002,-0.002,1>, +<0.009,-0.009,1>, +<-0.092,0.089,0.992>, +<-0.509,0.529,0.678>, +<-0.690,0.720,0.077>, +<-0.581,0.810,0.081>, +<-0.657,0.754,-0.003>, +<-0.644,0.765,0>, +<-0.630,0.774,-0.060>, +<-0.640,0.766,-0.060>, +<-0.729,0.685,-0.023>, +<-0.802,0.597,0.008>, +<-0.835,0.549,0.042>, +<-0.798,0.598,0.070>, +<-0.692,0.717,0.089>, +<-0.517,0.850,0.096>, +<-0.289,0.952,0.101>, +<-0.051,0.993,0.104>, +<0.190,0.974,0.124>, +<0.358,0.928,0.102>, +<0.406,0.912,0.064> +<0.021,-1,-0.019>, +<0.170,-0.983,0.064>, +<0.308,-0.950,0.052>, +<0.272,-0.961,0.055>, +<0.050,-0.995,0.089>, +<-0.206,-0.974,0.091>, +<-0.437,-0.894,0.100>, +<-0.620,-0.778,0.103>, +<-0.730,-0.677,0.089>, +<-0.759,-0.648,0.060>, +<-0.726,-0.687,0.027>, +<-0.668,-0.744,-0.014>, +<-0.611,-0.791,-0.004>, +<-0.627,-0.779,-0.003>, +<-0.713,-0.694,0.099>, +<-0.671,-0.741,0.017>, +<-0.486,-0.677,0.552>, +<-0.108,-0.145,0.984>, +<0.010,0.010,1>, +<0.003,0.003,1>, +<0.001,0.001,1>, +ZS(48) +<0.001,-0.001,1>, +<0.002,-0.002,1>, +<0.009,-0.009,1>, +<-0.084,0.113,0.990>, +<-0.472,0.660,0.585>, +<-0.678,0.734,0.039>, +<-0.711,0.698,0.092>, +<-0.629,0.777,-0.002>, +<-0.609,0.793,-0.009>, +<-0.670,0.742,-0.021>, +<-0.735,0.677,0.026>, +<-0.767,0.638,0.060>, +<-0.741,0.666,0.089>, +<-0.640,0.761,0.106>, +<-0.470,0.876,0.107>, +<-0.252,0.963,0.099>, +<-0.019,0.995,0.095>, +<0.230,0.970,0.075>, +<0.337,0.940,0.054>, +<0.275,0.959,0.072>, +<0.144,0.989,0.020> +<-0.373,-0.916,-0.148>, +<-0.216,-0.975,-0.047>, +<-0.028,-1,-0.002>, +<0.181,-0.983,0.017>, +<0.219,-0.976,0.020>, +<0.059,-0.996,0.064>, +<-0.198,-0.976,0.091>, +<-0.414,-0.904,0.110>, +<-0.576,-0.809,0.118>, +<-0.665,-0.740,0.105>, +<-0.683,-0.727,0.067>, +<-0.651,-0.758,0.041>, +<-0.615,-0.789,0.018>, +<-0.612,-0.791,-0.006>, +<-0.635,-0.773,-0.013>, +<-0.643,-0.588,0.491>, +<-0.127,-0.214,0.969>, +<0.010,0.012,1>, +<0.003,0.002,1>, +<0.001,0.001,1>, +ZS(50) +<0.001,-0.001,1>, +<0.002,-0.002,1>, +<0.009,-0.012,1>, +<-0.099,0.187,0.977>, +<-0.627,0.588,0.511>, +<-0.642,0.767,-0.005>, +<-0.613,0.790,-0.007>, +<-0.615,0.788,0.017>, +<-0.658,0.752,0.036>, +<-0.693,0.718,0.064>, +<-0.676,0.729,0.104>, +<-0.595,0.795,0.120>, +<-0.444,0.889,0.115>, +<-0.245,0.964,0.099>, +<-0.015,0.997,0.079>, +<0.195,0.980,0.034>, +<0.242,0.970,0.012>, +<0.097,0.995,0.008>, +<-0.075,0.997,-0.019>, +<-0.227,0.969,-0.098> +<-0.743,-0.635,-0.210>, +<-0.606,-0.786,-0.121>, +<-0.418,-0.905,-0.083>, +<-0.206,-0.977,-0.057>, +<0.011,-1,-0.019>, +<0.112,-0.994,-0.003>, +<-0.003,-1,0.029>, +<-0.231,-0.970,0.081>, +<-0.417,-0.902,0.112>, +<-0.544,-0.832,0.114>, +<-0.616,-0.782,0.099>, +<-0.601,-0.795,0.083>, +<-0.597,-0.802,0.014>, +<-0.595,-0.804,-0.021>, +<-0.570,-0.681,0.459>, +<-0.184,-0.309,0.933>, +<0.011,0.016,1>, +<0.002,0.003,1>, +<0.001,0,1>, +ZS(52) +<0.001,0,1>, +<0.002,-0.003,1>, +<0.010,-0.016,1>, +<-0.160,0.291,0.943>, +<-0.574,0.666,0.475>, +<-0.597,0.802,-0.021>, +<-0.598,0.801,0.014>, +<-0.606,0.791,0.086>, +<-0.624,0.774,0.103>, +<-0.557,0.823,0.116>, +<-0.440,0.890,0.118>, +<-0.270,0.959,0.092>, +<-0.057,0.997,0.054>, +<0.107,0.994,0.009>, +<0.096,0.995,-0.011>, +<-0.073,0.997,-0.037>, +<-0.264,0.962,-0.075>, +<-0.458,0.883,-0.103>, +<-0.619,0.765,-0.175> +<-0.933,-0.282,-0.224>, +<-0.871,-0.465,-0.157>, +<-0.747,-0.652,-0.127>, +<-0.579,-0.808,-0.107>, +<-0.375,-0.923,-0.090>, +<-0.169,-0.982,-0.080>, +<-0.053,-0.997,-0.049>, +<-0.136,-0.991,0.004>, +<-0.320,-0.946,0.054>, +<-0.446,-0.891,0.084>, +<-0.523,-0.843,0.124>, +<-0.574,-0.816,0.065>, +<-0.565,-0.825,-0.015>, +<-0.611,-0.724,0.320>, +<-0.267,-0.405,0.875>, +<0.014,0.018,1>, +<0.002,0.004,1>, +<0,0.002,1>, +ZS(54) +<0,-0.002,1>, +<0.003,-0.004,1>, +<0.014,-0.019,1>, +<-0.249,0.392,0.885>, +<-0.605,0.718,0.344>, +<-0.567,0.824,-0.016>, +<-0.578,0.813,0.069>, +<-0.531,0.837,0.132>, +<-0.456,0.885,0.095>, +<-0.324,0.943,0.081>, +<-0.159,0.987,0.025>, +<-0.037,0.999,-0.028>, +<-0.073,0.996,-0.052>, +<-0.237,0.968,-0.080>, +<-0.428,0.898,-0.101>, +<-0.622,0.774,-0.120>, +<-0.777,0.614,-0.139>, +<-0.873,0.446,-0.199> +<-0.982,-0.171,-0.077>, +<-0.973,-0.204,-0.109>, +<-0.936,-0.316,-0.152>, +<-0.840,-0.522,-0.145>, +<-0.685,-0.717,-0.126>, +<-0.508,-0.852,-0.127>, +<-0.333,-0.936,-0.114>, +<-0.232,-0.969,-0.080>, +<-0.350,-0.935,-0.058>, +<-0.441,-0.896,0.053>, +<-0.490,-0.870,0.061>, +<-0.538,-0.843,-0.008>, +<-0.611,-0.777,0.153>, +<-0.346,-0.518,0.783>, +<0.020,-0.022,1>, +<0.004,0.005,1>, +<0.002,0.002,1>, +ZS(56) +<0.002,-0.002,1>, +<0.004,-0.005,1>, +<0.020,0.013,1>, +<-0.335,0.504,0.796>, +<-0.616,0.769,0.169>, +<-0.545,0.839,-0.005>, +<-0.492,0.867,0.072>, +<-0.430,0.901,0.056>, +<-0.345,0.938,-0.032>, +<-0.217,0.975,-0.047>, +<-0.250,0.963,-0.100>, +<-0.385,0.915,-0.121>, +<-0.558,0.821,-0.117>, +<-0.728,0.675,-0.120>, +<-0.862,0.484,-0.148>, +<-0.944,0.291,-0.155>, +<-0.970,0.188,-0.152> +<-0.838,-0.544,-0.030>, +<-0.904,-0.419,-0.089>, +<-0.949,-0.309,-0.067>, +<-0.952,-0.304,-0.042>, +<-0.885,-0.456,-0.096>, +<-0.740,-0.660,-0.131>, +<-0.585,-0.801,-0.130>, +<-0.461,-0.865,-0.199>, +<-0.411,-0.905,-0.106>, +<-0.475,-0.880,0.016>, +<-0.509,-0.861,-0.003>, +<-0.552,-0.834,0.026>, +<-0.424,-0.643,0.638>, +<-0.005,-0.146,0.989>, +<0.004,0.007,1>, +<0.002,0.002,1>, +ZS(58) +<0.002,-0.002,1>, +<0.004,-0.007,1>, +<0,0.132,0.991>, +<-0.415,0.636,0.651>, +<-0.560,0.828,0.030>, +<-0.505,0.863,-0.002>, +<-0.468,0.884,0.021>, +<-0.413,0.905,-0.103>, +<-0.429,0.881,-0.201>, +<-0.493,0.860,-0.134>, +<-0.633,0.762,-0.136>, +<-0.786,0.606,-0.124>, +<-0.910,0.403,-0.100>, +<-0.960,0.274,-0.060>, +<-0.963,0.260,-0.074>, +<-0.943,0.325,-0.075> +<-0.454,-0.883,0.122>, +<-0.597,-0.799,0.066>, +<-0.724,-0.689,0.033>, +<-0.836,-0.548,0.001>, +<-0.888,-0.459,0>, +<-0.851,-0.524,-0.022>, +<-0.691,-0.714,-0.116>, +<-0.556,-0.823,-0.113>, +<-0.467,-0.884,-0.002>, +<-0.481,-0.876,-0.003>, +<-0.309,-0.945,0.104>, +<-0.513,-0.737,0.439>, +<-0.089,-0.329,0.940>, +<0.006,0.009,1>, +<0.001,0.002,1>, +ZS(60) +<0.001,-0.002,1>, +<0.005,-0.016,1>, +<-0.081,0.320,0.944>, +<-0.516,0.728,0.452>, +<-0.392,0.919,0.049>, +<-0.489,0.872,-0.008>, +<-0.471,0.882,-0.002>, +<-0.512,0.846,-0.148>, +<-0.593,0.787,-0.172>, +<-0.785,0.613,-0.087>, +<-0.893,0.450,-0.023>, +<-0.916,0.402,-0.008>, +<-0.872,0.490,-0.018>, +<-0.788,0.616,0.023>, +<-0.708,0.702,0.077> +<0.091,-0.979,0.181>, +<-0.099,-0.984,0.148>, +<-0.310,-0.941,0.135>, +<-0.489,-0.865,0.116>, +<-0.630,-0.770,0.104>, +<-0.733,-0.673,0.096>, +<-0.724,-0.686,0.074>, +<-0.562,-0.826,0.050>, +<-0.458,-0.889,0.014>, +<-0.534,-0.836,0.130>, +<-0.562,-0.803,0.201>, +<-0.248,-0.505,0.827>, +<0.011,-0.003,1>, +<0.002,0,1>, +<0,0.001,1>, +ZS(60) +<0,-0.001,1>, +<0.001,-0.007,1>, +<0.014,-0.004,1>, +<-0.199,0.638,0.744>, +<-0.560,0.802,0.209>, +<-0.538,0.833,0.128>, +<-0.455,0.891,-0.015>, +<-0.483,0.876,0.007>, +<-0.704,0.710,-0.008>, +<-0.804,0.593,0.038>, +<-0.801,0.597,0.049>, +<-0.700,0.710,0.077>, +<-0.566,0.819,0.093>, +<-0.413,0.901,0.133>, +<-0.256,0.943,0.213> +<0.474,-0.861,0.183>, +<0.387,-0.902,0.190>, +<0.200,-0.962,0.187>, +<-0.047,-0.985,0.163>, +<-0.259,-0.952,0.166>, +<-0.421,-0.891,0.171>, +<-0.540,-0.825,0.167>, +<-0.536,-0.829,0.160>, +<-0.467,-0.882,0.068>, +<-0.315,-0.945,0.092>, +<-0.455,-0.677,0.579>, +<0.013,-0.176,0.984>, +<0,0.005,1>, +<0.001,0,1>, +ZS(62) +<0.001,-0.003,1>, +<0.007,-0.006,1>, +<0.020,0.174,0.984>, +<-0.594,0.629,0.501>, +<-0.388,0.919,0.073>, +<-0.441,0.897,0.019>, +<-0.537,0.835,0.121>, +<-0.649,0.747,0.144>, +<-0.609,0.779,0.146>, +<-0.491,0.859,0.145>, +<-0.323,0.936,0.138>, +<-0.128,0.982,0.140>, +<0.054,0.985,0.162>, +<0.244,0.942,0.231> +<0.369,-0.921,0.125>, +<0.411,-0.905,0.111>, +<0.402,-0.914,0.052>, +<0.301,-0.951,0.076>, +<0.103,-0.983,0.154>, +<-0.104,-0.977,0.187>, +<-0.307,-0.929,0.205>, +<-0.391,-0.904,0.176>, +<-0.510,-0.832,0.219>, +<-0.513,-0.805,0.299>, +<-0.108,-0.443,0.890>, +<0.005,0.016,1>, +<0,0.002,1>, +ZS(64) +<0.002,0,1>, +<0.003,-0.014,1>, +<-0.070,0.602,0.795>, +<-0.511,0.804,0.303>, +<-0.462,0.881,0.105>, +<-0.473,0.864,0.172>, +<-0.442,0.869,0.223>, +<-0.290,0.937,0.195>, +<-0.111,0.977,0.184>, +<0.099,0.978,0.181>, +<0.285,0.944,0.165>, +<0.409,0.903,0.131>, +<0.494,0.860,0.127> +<-0.176,-0.983,-0.055>, +<-0.082,-0.996,-0.034>, +<0.028,-1,-0.023>, +<0.130,-0.992,0.002>, +<0.116,-0.993,0.016>, +<-0.091,-0.996,-0.014>, +<-0.212,-0.975,0.072>, +<-0.349,-0.934,0.076>, +<-0.414,-0.909,0.047>, +<-0.479,-0.661,0.578>, +<0.025,-0.146,0.989>, +<0.002,0.002,1>, +ZS(65) +<0,-0.002,1>, +<-0.001,-0.006,1>, +<0.017,0.134,0.991>, +<-0.448,0.653,0.610>, +<-0.424,0.904,0.062>, +<-0.385,0.914,0.128>, +<-0.247,0.950,0.191>, +<-0.078,0.989,0.126>, +<0.123,0.988,0.098>, +<0.257,0.965,0.060>, +<0.315,0.947,0.064>, +<0.316,0.945,0.077>, +<0.268,0.961,0.061> +<-0.688,-0.706,-0.169>, +<-0.574,-0.808,-0.135>, +<-0.455,-0.882,-0.126>, +<-0.346,-0.930,-0.124>, +<-0.284,-0.930,-0.233>, +<-0.252,-0.957,-0.144>, +<-0.293,-0.956,0.024>, +<-0.349,-0.937,-0.001>, +<-0.468,-0.840,0.275>, +<-0.090,-0.454,0.887>, +<0.002,0.009,1>, +ZS(66) +<0,-0.002,1>, +<0.002,-0.004,1>, +<0.006,-0.011,1>, +<-0.076,0.451,0.889>, +<-0.467,0.834,0.294>, +<-0.348,0.937,0.011>, +<-0.233,0.971,0.050>, +<-0.154,0.987,-0.033>, +<-0.133,0.986,-0.097>, +<-0.014,1,-0.033>, +<-0.076,0.995,-0.066>, +<-0.159,0.984,-0.074>, +<-0.264,0.960,-0.090> +<-0.900,-0.422,-0.110>, +<-0.859,-0.495,-0.128>, +<-0.785,-0.600,-0.155>, +<-0.639,-0.734,-0.231>, +<-0.498,-0.848,-0.181>, +<-0.329,-0.944,-0.004>, +<-0.327,-0.945,0>, +<-0.346,-0.938,0.017>, +<-0.359,-0.742,0.566>, +<0.019,-0.208,0.978>, +<0,0.004,1>, +ZS(67) +<0.002,0,1>, +<0.003,-0.004,1>, +<0.022,0.198,0.980>, +<-0.350,0.736,0.579>, +<-0.349,0.937,0.021>, +<-0.319,0.948,0.004>, +<-0.321,0.947,0>, +<-0.318,0.923,-0.214>, +<-0.301,0.921,-0.248>, +<-0.464,0.877,-0.126>, +<-0.590,0.797,-0.129>, +<-0.701,0.698,-0.148> +<-0.731,-0.681,-0.036>, +<-0.767,-0.640,-0.043>, +<-0.768,-0.640,-0.007>, +<-0.730,-0.682,0.039>, +<-0.565,-0.822,0.072>, +<-0.417,-0.908,0.030>, +<-0.309,-0.951,0.009>, +<-0.385,-0.905,0.182>, +<-0.135,-0.570,0.810>, +<0.005,-0.024,1>, +<0,0.001,1>, +ZS(69) +<0.004,0.019,1>, +<-0.126,0.559,0.820>, +<-0.392,0.900,0.193>, +<-0.307,0.952,-0.002>, +<-0.299,0.954,0>, +<-0.321,0.944,-0.082>, +<-0.589,0.790,-0.172>, +<-0.753,0.646,-0.122>, +<-0.842,0.529,-0.102>, +<-0.886,0.454,-0.095> +<-0.163,-0.978,0.129>, +<-0.244,-0.962,0.126>, +<-0.324,-0.935,0.145>, +<-0.398,-0.904,0.158>, +<-0.454,-0.873,0.181>, +<-0.397,-0.897,0.197>, +<-0.312,-0.946,0.086>, +<-0.376,-0.834,0.405>, +<0.004,-0.363,0.932>, +<0,0.006,1>, +ZS(70) +<0,-0.005,1>, +<0.008,0.346,0.938>, +<-0.375,0.826,0.422>, +<-0.283,0.959,-0.007>, +<-0.356,0.934,0.031>, +<-0.546,0.836,0.063>, +<-0.716,0.694,0.072>, +<-0.775,0.630,0.047>, +<-0.780,0.626,-0.006>, +<-0.766,0.643,-0.014> +<0.434,-0.879,0.196>, +<0.345,-0.918,0.194>, +<0.215,-0.955,0.205>, +<0.073,-0.974,0.213>, +<-0.097,-0.965,0.245>, +<-0.207,-0.955,0.211>, +<-0.292,-0.951,0.100>, +<-0.262,-0.735,0.625>, +<0.012,-0.164,0.986>, +<0,0.002,1>, +ZS(70) +<0,-0.001,1>, +<0.011,0.146,0.989>, +<-0.249,0.721,0.646>, +<-0.297,0.949,0.109>, +<-0.375,0.904,0.205>, +<-0.493,0.841,0.222>, +<-0.466,0.869,0.168>, +<-0.389,0.908,0.154>, +<-0.317,0.938,0.138>, +<-0.242,0.959,0.149> +<0.391,-0.915,0.099>, +<0.360,-0.929,0.080>, +<0.291,-0.955,0.062>, +<0.079,-0.997,0.021>, +<-0.026,-0.998,0.062>, +<-0.177,-0.983,0.051>, +<-0.289,-0.941,0.178>, +<-0.100,-0.594,0.798>, +<0.002,-0.033,1>, +ZS(72) +<0.002,0.024,1>, +<-0.087,0.574,0.814>, +<-0.306,0.920,0.246>, +<-0.225,0.946,0.231>, +<-0.151,0.946,0.287>, +<0.016,0.973,0.232>, +<0.163,0.963,0.216>, +<0.298,0.934,0.197>, +<0.397,0.897,0.197> +<-0.218,-0.974,-0.054>, +<-0.177,-0.982,-0.059>, +<-0.154,-0.972,-0.180>, +<-0.146,-0.980,-0.136>, +<-0.164,-0.986,0.010>, +<-0.207,-0.978,-0.004>, +<-0.292,-0.893,0.343>, +<-0.002,-0.441,0.898>, +<0,0.007,1>, +ZS(72) +<0,-0.007,1>, +<0.002,0.420,0.907>, +<-0.294,0.884,0.364>, +<-0.175,0.979,0.108>, +<0.009,0.989,0.146>, +<0.149,0.987,0.058>, +<0.245,0.968,0.057>, +<0.406,0.910,0.086>, +<0.455,0.884,0.104> +<-0.721,-0.683,-0.114>, +<-0.636,-0.758,-0.148>, +<-0.524,-0.841,-0.132>, +<-0.310,-0.950,-0.031>, +<-0.205,-0.979,-0.006>, +<-0.192,-0.981,-0.003>, +<-0.250,-0.835,0.491>, +<0.016,-0.297,0.955>, +<0,0.003,1>, +ZS(72) +<0,-0.003,1>, +<0.015,0.277,0.961>, +<-0.245,0.824,0.510>, +<-0.185,0.983,0.004>, +<-0.075,0.997,0.023>, +<-0.072,0.997,0.022>, +<-0.052,0.995,-0.089>, +<-0.040,0.994,-0.105>, +<-0.088,0.996,-0.016> +<-0.697,-0.717,0.022>, +<-0.651,-0.757,0.057>, +<-0.535,-0.838,0.111>, +<-0.431,-0.890,0.146>, +<-0.254,-0.961,0.107>, +<-0.177,-0.982,0.066>, +<-0.171,-0.758,0.630>, +<0.008,-0.173,0.985>, +ZS(74) +<0.007,0.155,0.988>, +<-0.160,0.748,0.643>, +<-0.173,0.983,0.054>, +<-0.158,0.987,0>, +<-0.275,0.961,-0.024>, +<-0.368,0.927,-0.071>, +<-0.563,0.820,-0.099>, +<-0.642,0.763,-0.078> +<-0.112,-0.982,0.149>, +<-0.147,-0.975,0.169>, +<-0.171,-0.964,0.204>, +<-0.200,-0.943,0.264>, +<-0.140,-0.961,0.236>, +<-0.158,-0.970,0.186>, +<-0.092,-0.674,0.733>, +<0.003,-0.082,0.997>, +ZS(74) +<0.002,0.068,0.998>, +<-0.083,0.658,0.749>, +<-0.161,0.978,0.135>, +<-0.181,0.977,0.111>, +<-0.389,0.905,0.170>, +<-0.508,0.850,0.138>, +<-0.614,0.784,0.088>, +<-0.663,0.747,0.044> +<0.471,-0.870,0.147>, +<0.388,-0.905,0.173>, +<0.260,-0.945,0.196>, +<0.123,-0.957,0.261>, +<-0.051,-0.984,0.169>, +<-0.136,-0.970,0.203>, +<-0.036,-0.590,0.806>, +<0,-0.028,1>, +ZS(74) +<0,0.020,1>, +<-0.031,0.571,0.820>, +<-0.146,0.958,0.247>, +<-0.136,0.967,0.216>, +<-0.175,0.937,0.301>, +<-0.147,0.964,0.221>, +<-0.120,0.976,0.181>, +<-0.089,0.982,0.165> +<0.473,-0.880,0.041>, +<0.411,-0.911,0.019>, +<0.190,-0.982,0.001>, +<0.095,-0.995,0.013>, +<-0.085,-0.996,-0.001>, +<-0.115,-0.953,0.279>, +<-0.005,-0.519,0.855>, +<0,-0.003,1>, +ZS(75) +<-0.005,0.503,0.864>, +<-0.116,0.948,0.296>, +<-0.070,0.987,0.146>, +<0.132,0.961,0.243>, +<0.276,0.941,0.195>, +<0.424,0.889,0.170>, +<0.517,0.844,0.142> +<-0.061,-0.998,-0.030>, +<-0.044,-0.987,-0.153>, +<-0.046,-0.989,-0.137>, +<-0.057,-0.998,0>, +<-0.060,-0.998,-0.003>, +<-0.085,-0.937,0.339>, +<0.007,-0.467,0.884>, +<0,0.005,1>, +ZS(74) +<0,-0.006,1>, +<0.003,0.455,0.890>, +<-0.084,0.933,0.351>, +<-0.062,0.998,-0.003>, +<0.098,0.995,0.007>, +<0.193,0.981,-0.028>, +<0.357,0.934,-0.026>, +<0.391,0.920,0.010> +<-0.570,-0.821,-0.016>, +<-0.497,-0.867,-0.039>, +<-0.274,-0.961,-0.032>, +<-0.172,-0.985,-0.009>, +<-0.034,-1,-0.004>, +<-0.053,-0.924,0.379>, +<0.007,-0.432,0.902>, +<0,0.006,1>, +ZS(74) +<0,-0.006,1>, +<0.002,0.426,0.905>, +<-0.050,0.922,0.385>, +<-0.037,1,-0.004>, +<-0.161,0.987,-0.005>, +<-0.248,0.966,-0.076>, +<-0.346,0.936,-0.061>, +<-0.385,0.922,0.023> +<-0.556,-0.826,0.098>, +<-0.487,-0.864,0.131>, +<-0.367,-0.915,0.170>, +<-0.237,-0.948,0.213>, +<-0.012,-0.992,0.123>, +<-0.019,-0.917,0.398>, +<0.004,-0.412,0.911>, +<0,0.005,1>, +ZS(74) +<0,-0.006,1>, +<0,0.413,0.911>, +<-0.017,0.917,0.399>, +<-0.014,0.994,0.112>, +<-0.130,0.971,0.202>, +<-0.225,0.963,0.146>, +<-0.352,0.932,0.084>, +<-0.385,0.922,0.047> +<0.021,-0.987,0.158>, +<0.017,-0.983,0.183>, +<0.012,-0.974,0.225>, +<0.013,-0.946,0.323>, +<0.015,-0.979,0.201>, +<0.017,-0.916,0.401>, +<0.001,-0.409,0.913>, +<0,0.005,1>, +ZS(73) +<0,-0.001,1>, +<0,-0.006,1>, +<0,0.411,0.912>, +<0.015,0.916,0.402>, +<0.013,0.994,0.104>, +<0.138,0.971,0.194>, +<0.238,0.962,0.133>, +<0.292,0.952,0.090>, +<0.320,0.943,0.089> +<0.612,-0.788,0.073>, +<0.536,-0.838,0.102>, +<0.394,-0.906,0.154>, +<0.266,-0.941,0.211>, +<0.042,-0.991,0.126>, +<0.053,-0.921,0.386>, +<-0.002,-0.424,0.906>, +<0,0.006,1>, +ZS(74) +<0.001,-0.007,1>, +<0.002,0.423,0.906>, +<0.129,0.914,0.384>, +<0.037,1,-0.005>, +<0.155,0.988,-0.009>, +<0.254,0.967,-0.012>, +<0.419,0.908,-0.013>, +<0.499,0.866,-0.016> +<0.503,-0.863,-0.049>, +<0.444,-0.892,-0.085>, +<0.298,-0.952,-0.068>, +<0.201,-0.979,-0.013>, +<0.062,-0.998,-0.004>, +<0.087,-0.932,0.352>, +<-0.004,-0.456,0.890>, +<0,0.006,1>, +ZS(74) +<0.001,-0.006,1>, +<0.002,0.456,0.890>, +<0.091,0.928,0.361>, +<0.070,0.991,0.110>, +<0.061,0.998,0>, +<0.051,0.992,-0.116>, +<0.073,0.985,-0.154>, +<0.089,0.993,-0.073> +<-0.287,-0.956,0.051>, +<-0.248,-0.968,-0.031>, +<-0.141,-0.989,-0.050>, +<-0.061,-0.998,0.013>, +<0.087,-0.996,-0.003>, +<0.165,-0.942,0.291>, +<0.004,-0.506,0.862>, +ZS(75) +<0,-0.002,1>, +<0.002,0.501,0.865>, +<0.009,0.949,0.316>, +<0.084,0.996,-0.002>, +<-0.114,0.993,0.012>, +<-0.211,0.978,-0.006>, +<-0.418,0.908,-0.003>, +<-0.496,0.868,0.014> +<-0.265,-0.956,0.129>, +<-0.234,-0.962,0.142>, +<-0.092,-0.985,0.146>, +<0.002,-0.978,0.206>, +<0.133,-0.976,0.175>, +<0.144,-0.965,0.221>, +<0.027,-0.607,0.794>, +<0,-0.019,1>, +ZS(73) +<0,0.001,1>, +<-0.001,0.018,1>, +<0.022,0.570,0.821>, +<0.143,0.963,0.227>, +<0.023,0.981,0.193>, +<-0.152,0.946,0.288>, +<-0.308,0.930,0.202>, +<-0.438,0.882,0.173>, +<-0.542,0.827,0.146> +<0.509,-0.861,-0.004>, +<0.475,-0.879,0.034>, +<0.355,-0.929,0.104>, +<0.299,-0.939,0.169>, +<0.153,-0.981,0.117>, +<0.115,-0.984,0.140>, +<0.084,-0.660,0.747>, +<-0.003,-0.068,0.998>, +ZS(74) +<-0.004,0.067,0.998>, +<0.079,0.660,0.747>, +<0.167,0.959,0.228>, +<0.122,0.955,0.270>, +<0.179,0.942,0.283>, +<0.151,0.963,0.223>, +<0.128,0.975,0.184>, +<0.083,0.981,0.178> +<0.520,-0.851,-0.073>, +<0.460,-0.878,-0.135>, +<0.340,-0.934,-0.111>, +<0.279,-0.960,-0.022>, +<0.150,-0.989,0.002>, +<0.174,-0.983,0.053>, +<0.162,-0.748,0.644>, +<-0.007,-0.156,0.988>, +ZS(74) +<-0.008,0.155,0.988>, +<0.163,0.743,0.649>, +<0.180,0.979,0.098>, +<0.292,0.945,0.145>, +<0.467,0.869,0.164>, +<0.577,0.810,0.102>, +<0.673,0.738,0.056>, +<0.717,0.696,0.031> +<-0.156,-0.988,0.019>, +<-0.183,-0.983,-0.029>, +<-0.119,-0.993,-0.021>, +<-0.071,-0.997,0.033>, +<0.015,-1,0.031>, +<0.163,-0.986,0.017>, +<0.245,-0.824,0.511>, +<-0.015,-0.276,0.961>, +<0,0.003,1>, +ZS(72) +<0,-0.003,1>, +<-0.017,0.279,0.960>, +<0.247,0.825,0.509>, +<0.192,0.981,0.001>, +<0.229,0.973,-0.011>, +<0.355,0.934,-0.044>, +<0.577,0.808,-0.120>, +<0.685,0.717,-0.131>, +<0.755,0.645,-0.118> +<-0.541,-0.834,0.102>, +<-0.473,-0.877,0.088>, +<-0.322,-0.940,0.107>, +<-0.193,-0.965,0.175>, +<-0.019,-0.968,0.252>, +<0.164,-0.972,0.168>, +<0.298,-0.874,0.385>, +<-0.002,-0.418,0.909>, +<0,0.007,1>, +ZS(72) +<0,-0.007,1>, +<-0.004,0.427,0.904>, +<0.296,0.886,0.358>, +<0.208,0.978,-0.004>, +<0.172,0.985,0.009>, +<0.157,0.977,-0.145>, +<0.171,0.967,-0.186>, +<0.220,0.974,-0.057>, +<0.268,0.962,-0.047> +<-0.271,-0.942,0.200>, +<-0.137,-0.971,0.195>, +<0.015,-0.977,0.212>, +<0.143,-0.961,0.235>, +<0.251,-0.920,0.300>, +<0.283,-0.925,0.255>, +<0.312,-0.912,0.265>, +<0.087,-0.572,0.815>, +<-0.002,-0.024,1>, +ZS(72) +<-0.002,0.028,1>, +<0.090,0.583,0.807>, +<0.293,0.937,0.189>, +<0.187,0.981,0.043>, +<0.035,0.998,0.048>, +<-0.068,0.998,0.008>, +<-0.278,0.959,0.060>, +<-0.330,0.941,0.077>, +<-0.357,0.930,0.089> +<0.401,-0.907,0.132>, +<0.472,-0.872,0.126>, +<0.562,-0.815,0.138>, +<0.616,-0.773,0.153>, +<0.581,-0.789,0.201>, +<0.390,-0.905,0.170>, +<0.292,-0.952,0.089>, +<0.250,-0.721,0.646>, +<-0.011,-0.147,0.989>, +<0,0.001,1>, +ZS(70) +<0,-0.002,1>, +<-0.011,0.154,0.988>, +<0.254,0.728,0.637>, +<0.291,0.952,0.097>, +<0.199,0.958,0.204>, +<0.082,0.966,0.247>, +<-0.093,0.973,0.210>, +<-0.232,0.953,0.194>, +<-0.352,0.918,0.182>, +<-0.441,0.877,0.190> +<0.849,-0.527,-0.027>, +<0.857,-0.515,0.013>, +<0.826,-0.560,0.068>, +<0.735,-0.678,0.026>, +<0.492,-0.870,-0.012>, +<0.316,-0.949,-0.012>, +<0.283,-0.959,-0.007>, +<0.376,-0.826,0.421>, +<-0.009,-0.347,0.938>, +<0,0.005,1>, +ZS(70) +<0,-0.006,1>, +<-0.007,0.352,0.936>, +<0.375,0.829,0.416>, +<0.314,0.945,0.091>, +<0.372,0.903,0.216>, +<0.410,0.891,0.196>, +<0.344,0.925,0.159>, +<0.272,0.951,0.147>, +<0.191,0.972,0.140>, +<0.097,0.983,0.155> +<0.890,-0.441,-0.116>, +<0.831,-0.543,-0.120>, +<0.709,-0.694,-0.125>, +<0.509,-0.839,-0.193>, +<0.252,-0.963,-0.096>, +<0.299,-0.954,0>, +<0.307,-0.952,-0.002>, +<0.392,-0.900,0.192>, +<0.125,-0.559,0.819>, +<-0.004,-0.019,1>, +ZS(70) +<-0.004,0.021,1>, +<0.129,0.563,0.817>, +<0.388,0.902,0.189>, +<0.318,0.948,0.024>, +<0.436,0.898,0.062>, +<0.582,0.809,0.083>, +<0.699,0.713,0.046>, +<0.722,0.692,0.010>, +<0.694,0.720,-0.006>, +<0.653,0.758,0.004> +<0.646,-0.749,-0.145>, +<0.525,-0.844,-0.112>, +<0.407,-0.905,-0.123>, +<0.234,-0.937,-0.257>, +<0.297,-0.929,-0.221>, +<0.321,-0.947,0>, +<0.295,-0.955,0.014>, +<0.349,-0.937,0.021>, +<0.352,-0.735,0.580>, +<-0.022,-0.197,0.980>, +<-0.002,0.004,1>, +<-0.001,0,1>, +ZS(67) +<0,-0.003,1>, +<-0.018,0.200,0.980>, +<0.349,0.739,0.577>, +<0.348,0.937,0.021>, +<0.328,0.945,0>, +<0.347,0.938,-0.011>, +<0.544,0.823,-0.161>, +<0.672,0.718,-0.181>, +<0.800,0.591,-0.106>, +<0.863,0.498,-0.086>, +<0.892,0.441,-0.097> +<0.187,-0.979,-0.082>, +<0.086,-0.995,-0.050>, +<-0.005,-1,-0.044>, +<-0.052,-0.998,-0.023>, +<0.087,-0.994,-0.060>, +<0.093,-0.996,-0.018>, +<0.171,-0.982,0.074>, +<0.312,-0.949,0.053>, +<0.469,-0.833,0.292>, +<0.075,-0.449,0.890>, +<-0.005,0.012,1>, +<-0.001,0.002,1>, +<0,0.001,1>, +ZS(66) +<-0.002,-0.009,1>, +<0.082,0.453,0.888>, +<0.462,0.837,0.293>, +<0.358,0.934,-0.006>, +<0.319,0.948,0.015>, +<0.271,0.951,-0.147>, +<0.326,0.917,-0.231>, +<0.408,0.905,-0.121>, +<0.523,0.841,-0.135>, +<0.657,0.737,-0.158>, +<0.759,0.621,-0.194> +<-0.319,-0.945,0.075>, +<-0.370,-0.925,0.088>, +<-0.367,-0.928,0.069>, +<-0.302,-0.952,0.056>, +<-0.176,-0.979,0.099>, +<0.016,-0.990,0.142>, +<0.222,-0.953,0.207>, +<0.371,-0.908,0.196>, +<0.442,-0.892,0.096>, +<0.457,-0.650,0.607>, +<-0.025,-0.133,0.991>, +<-0.003,0.006,1>, +<-0.002,0.001,1>, +ZS(65) +<0,-0.003,1>, +<-0.016,0.135,0.991>, +<0.416,0.660,0.626>, +<0.419,0.907,0.047>, +<0.362,0.931,0.044>, +<0.231,0.971,0.065>, +<0.129,0.991,-0.035>, +<-0.066,0.998,-0.013>, +<-0.030,1,-0.030>, +<0.071,0.996,-0.053>, +<0.174,0.983,-0.062>, +<0.279,0.956,-0.088> +<-0.522,-0.843,0.132>, +<-0.436,-0.889,0.140>, +<-0.300,-0.939,0.169>, +<-0.118,-0.977,0.175>, +<0.106,-0.977,0.184>, +<0.297,-0.934,0.197>, +<0.471,-0.854,0.220>, +<0.514,-0.834,0.201>, +<0.527,-0.817,0.233>, +<0.525,-0.791,0.316>, +<0.089,-0.431,0.898>, +<-0.006,0.018,1>, +<-0.001,0.004,1>, +<0,0.002,1>, +ZS(63) +<-0.001,0,1>, +<-0.005,-0.013,1>, +<0.095,0.466,0.880>, +<0.520,0.792,0.321>, +<0.494,0.855,0.157>, +<0.380,0.910,0.163>, +<0.281,0.938,0.202>, +<0.096,0.982,0.162>, +<-0.119,0.986,0.116>, +<-0.297,0.954,0.046>, +<-0.360,0.931,0.065>, +<-0.347,0.931,0.110>, +<-0.303,0.947,0.104> +<-0.242,-0.943,0.229>, +<-0.052,-0.985,0.162>, +<0.140,-0.980,0.144>, +<0.333,-0.932,0.144>, +<0.501,-0.853,0.146>, +<0.629,-0.763,0.147>, +<0.697,-0.701,0.148>, +<0.585,-0.801,0.126>, +<0.449,-0.893,0.037>, +<0.299,-0.948,0.107>, +<0.484,-0.659,0.576>, +<-0.018,-0.154,0.988>, +<0,0.008,1>, +<-0.001,0.002,1>, +ZS(62) +<-0.001,-0.002,1>, +<-0.004,-0.005,1>, +<-0.021,0.162,0.987>, +<0.535,0.639,0.552>, +<0.301,0.946,0.118>, +<0.471,0.879,0.071>, +<0.525,0.834,0.172>, +<0.498,0.848,0.180>, +<0.361,0.916,0.172>, +<0.192,0.967,0.164>, +<-0.042,0.984,0.175>, +<-0.256,0.949,0.185>, +<-0.396,0.901,0.179>, +<-0.485,0.855,0.183> +<0.265,-0.946,0.186>, +<0.435,-0.892,0.121>, +<0.596,-0.798,0.092>, +<0.719,-0.692,0.071>, +<0.820,-0.570,0.047>, +<0.840,-0.541,0.043>, +<0.750,-0.662,-0.006>, +<0.494,-0.869,0.009>, +<0.448,-0.894,0>, +<0.503,-0.861,0.074>, +<0.560,-0.801,0.213>, +<0.178,-0.642,0.745>, +<-0.009,0.003,1>, +<-0.001,0.002,1>, +<0,0.001,1>, +ZS(60) +<0,-0.001,1>, +<-0.001,-0.005,1>, +<-0.012,-0.006,1>, +<0.192,0.614,0.766>, +<0.559,0.802,0.213>, +<0.515,0.852,0.096>, +<0.461,0.887,0.023>, +<0.577,0.813,0.075>, +<0.724,0.684,0.093>, +<0.700,0.706,0.104>, +<0.574,0.812,0.110>, +<0.410,0.904,0.118>, +<0.219,0.967,0.132>, +<0.034,0.986,0.165>, +<-0.155,0.959,0.237> +<0.725,-0.686,0.062>, +<0.815,-0.580,0.006>, +<0.893,-0.449,-0.022>, +<0.935,-0.354,-0.014>, +<0.918,-0.396,-0.028>, +<0.820,-0.566,-0.088>, +<0.609,-0.771,-0.185>, +<0.517,-0.840,-0.164>, +<0.466,-0.885,0>, +<0.478,-0.879,0>, +<0.402,-0.915,0.043>, +<0.503,-0.744,0.441>, +<0.090,-0.314,0.945>, +<-0.006,0.010,1>, +<-0.001,0.002,1>, +ZS(60) +<-0.001,-0.002,1>, +<-0.005,-0.013,1>, +<0.080,0.313,0.946>, +<0.508,0.731,0.457>, +<0.410,0.911,0.038>, +<0.480,0.877,-0.003>, +<0.467,0.884,0>, +<0.570,0.815,-0.107>, +<0.722,0.685,-0.098>, +<0.859,0.513,-0.008>, +<0.872,0.490,-0.007>, +<0.787,0.616,0.018>, +<0.666,0.744,0.058>, +<0.530,0.843,0.096>, +<0.382,0.908,0.171> +<0.954,-0.290,-0.081>, +<0.974,-0.212,-0.081>, +<0.973,-0.222,-0.064>, +<0.929,-0.355,-0.105>, +<0.809,-0.573,-0.129>, +<0.648,-0.749,-0.139>, +<0.492,-0.860,-0.136>, +<0.425,-0.879,-0.215>, +<0.401,-0.909,-0.114>, +<0.463,-0.886,0.024>, +<0.501,-0.866,0.004>, +<0.554,-0.832,0.031>, +<0.425,-0.639,0.642>, +<0.005,-0.141,0.990>, +<-0.005,0.007,1>, +<-0.002,0.002,1>, +ZS(58) +<-0.002,-0.002,1>, +<-0.004,-0.007,1>, +<-0.001,0.131,0.991>, +<0.416,0.632,0.654>, +<0.559,0.829,0.032>, +<0.510,0.860,-0.005>, +<0.479,0.878,0.013>, +<0.409,0.906,-0.107>, +<0.478,0.856,-0.200>, +<0.609,0.784,-0.124>, +<0.770,0.626,-0.126>, +<0.904,0.421,-0.075>, +<0.946,0.324,-0.030>, +<0.931,0.359,-0.066>, +<0.875,0.481,-0.062>, +<0.799,0.601,0.006> +<0.978,-0.145,-0.153>, +<0.957,-0.247,-0.153>, +<0.882,-0.448,-0.148>, +<0.747,-0.652,-0.127>, +<0.570,-0.812,-0.123>, +<0.385,-0.915,-0.122>, +<0.236,-0.967,-0.098>, +<0.194,-0.980,-0.050>, +<0.333,-0.942,-0.040>, +<0.423,-0.904,0.053>, +<0.494,-0.866,0.075>, +<0.543,-0.840,0>, +<0.607,-0.779,0.154>, +<0.346,-0.517,0.782>, +<-0.021,-0.023,1>, +<-0.004,0.005,1>, +<-0.002,0.002,1>, +ZS(56) +<-0.002,-0.002,1>, +<-0.004,-0.005,1>, +<-0.020,0.014,1>, +<0.334,0.505,0.796>, +<0.614,0.771,0.170>, +<0.539,0.842,-0.010>, +<0.487,0.872,0.058>, +<0.445,0.894,0.052>, +<0.354,0.932,-0.072>, +<0.243,0.965,-0.093>, +<0.375,0.920,-0.111>, +<0.547,0.828,-0.122>, +<0.720,0.683,-0.124>, +<0.869,0.475,-0.143>, +<0.949,0.286,-0.129>, +<0.976,0.196,-0.093>, +<0.978,0.195,-0.079> +<0.890,-0.408,-0.203>, +<0.798,-0.587,-0.140>, +<0.641,-0.758,-0.122>, +<0.439,-0.893,-0.102>, +<0.237,-0.968,-0.083>, +<0.058,-0.997,-0.057>, +<0.018,-1,-0.032>, +<0.147,-0.989,0.021>, +<0.326,-0.942,0.077>, +<0.466,-0.880,0.093>, +<0.540,-0.832,0.126>, +<0.577,-0.814,0.065>, +<0.565,-0.825,-0.015>, +<0.611,-0.726,0.317>, +<0.272,-0.406,0.872>, +<-0.020,0.018,1>, +<-0.008,0.004,1>, +<-0.005,0.002,1>, +ZS(54) +<0,-0.002,1>, +<-0.002,-0.004,1>, +<-0.013,-0.019,1>, +<0.246,0.391,0.887>, +<0.606,0.717,0.344>, +<0.566,0.824,-0.016>, +<0.573,0.817,0.068>, +<0.517,0.847,0.125>, +<0.434,0.897,0.080>, +<0.315,0.948,0.037>, +<0.132,0.991,-0.004>, +<0.086,0.995,-0.053>, +<0.229,0.970,-0.085>, +<0.426,0.899,-0.099>, +<0.622,0.775,-0.110>, +<0.784,0.605,-0.141>, +<0.899,0.403,-0.173>, +<0.947,0.235,-0.221> +<0.647,-0.740,-0.186>, +<0.482,-0.870,-0.102>, +<0.278,-0.957,-0.076>, +<0.071,-0.997,-0.041>, +<-0.113,-0.994,-0.013>, +<-0.121,-0.993,0.003>, +<0.055,-0.997,0.049>, +<0.276,-0.957,0.085>, +<0.450,-0.886,0.110>, +<0.566,-0.817,0.111>, +<0.624,-0.775,0.098>, +<0.602,-0.794,0.080>, +<0.595,-0.803,0.012>, +<0.594,-0.804,-0.021>, +<0.570,-0.686,0.452>, +<0.193,-0.320,0.928>, +<-0.018,0.017,1>, +<-0.007,0.008,1>, +<-0.001,0.005,1>, +ZS(52) +<-0.001,0,1>, +<-0.002,-0.003,1>, +<-0.010,-0.015,1>, +<0.156,0.287,0.945>, +<0.560,0.671,0.485>, +<0.597,0.802,-0.021>, +<0.600,0.800,0.017>, +<0.599,0.795,0.092>, +<0.608,0.787,0.104>, +<0.526,0.843,0.113>, +<0.394,0.913,0.106>, +<0.206,0.976,0.070>, +<-0.006,1,0.016>, +<-0.076,0.997,-0.012>, +<0.056,0.998,-0.035>, +<0.260,0.963,-0.069>, +<0.472,0.875,-0.105>, +<0.659,0.741,-0.129>, +<0.790,0.578,-0.205> +<0.248,-0.961,-0.118>, +<0.088,-0.996,-0.028>, +<-0.098,-0.995,0.011>, +<-0.254,-0.967,0.010>, +<-0.205,-0.978,0.032>, +<0.020,-0.997,0.076>, +<0.254,-0.963,0.091>, +<0.454,-0.885,0.107>, +<0.602,-0.790,0.113>, +<0.676,-0.731,0.098>, +<0.683,-0.728,0.061>, +<0.648,-0.761,0.035>, +<0.613,-0.790,0.015>, +<0.612,-0.791,-0.006>, +<0.632,-0.775,-0.017>, +<0.653,-0.590,0.475>, +<0.139,-0.228,0.964>, +<-0.011,0.019,1>, +<-0.002,0.008,1>, +<-0.001,0.001,1>, +ZS(50) +<-0.001,-0.001,1>, +<-0.002,-0.002,1>, +<-0.009,-0.011,1>, +<0.099,0.183,0.978>, +<0.642,0.569,0.514>, +<0.642,0.767,-0.004>, +<0.612,0.790,-0.006>, +<0.619,0.785,0.023>, +<0.656,0.753,0.049>, +<0.679,0.730,0.075>, +<0.649,0.753,0.109>, +<0.547,0.829,0.116>, +<0.379,0.920,0.103>, +<0.164,0.983,0.084>, +<-0.081,0.996,0.048>, +<-0.200,0.980,0.012>, +<-0.123,0.992,0.008>, +<0.088,0.996,-0.026>, +<0.274,0.960,-0.060>, +<0.442,0.883,-0.155> +<-0.141,-0.990,0.003>, +<-0.278,-0.959,0.061>, +<-0.340,-0.939,0.048>, +<-0.231,-0.970,0.072>, +<0.028,-0.996,0.087>, +<0.264,-0.960,0.092>, +<0.482,-0.871,0.100>, +<0.645,-0.758,0.099>, +<0.738,-0.670,0.083>, +<0.755,-0.654,0.056>, +<0.719,-0.695,0.023>, +<0.662,-0.749,-0.017>, +<0.609,-0.793,-0.007>, +<0.627,-0.779,-0.002>, +<0.626,-0.779,-0.025>, +<0.670,-0.743,0.009>, +<0.478,-0.709,0.519>, +<0.114,-0.153,0.982>, +<-0.010,0.015,1>, +<-0.003,0.003,1>, +<-0.001,0.001,1>, +ZS(48) +<-0.001,-0.001,1>, +<-0.002,-0.002,1>, +<-0.009,-0.009,1>, +<0.086,0.114,0.990>, +<0.464,0.676,0.573>, +<0.676,0.736,0.040>, +<0.717,0.689,0.102>, +<0.628,0.778,-0.003>, +<0.615,0.788,0>, +<0.680,0.733,-0.007>, +<0.733,0.679,0.037>, +<0.753,0.654,0.068>, +<0.707,0.701,0.095>, +<0.582,0.806,0.105>, +<0.392,0.915,0.100>, +<0.162,0.983,0.088>, +<-0.094,0.992,0.084>, +<-0.281,0.959,0.041>, +<-0.271,0.961,0.048>, +<-0.105,0.993,0.048>, +<0.044,0.998,-0.039> +<-0.420,-0.906,0.053>, +<-0.362,-0.927,0.094>, +<-0.186,-0.975,0.118>, +<0.058,-0.994,0.092>, +<0.298,-0.950,0.091>, +<0.526,-0.846,0.088>, +<0.694,-0.715,0.082>, +<0.793,-0.606,0.064>, +<0.820,-0.571,0.038>, +<0.781,-0.624,0.007>, +<0.713,-0.701,-0.021>, +<0.636,-0.770,-0.052>, +<0.627,-0.777,-0.050>, +<0.642,-0.767,0>, +<0.655,-0.756,-0.002>, +<0.685,-0.728,-0.028>, +<0.693,-0.720,0.042>, +<0.530,-0.548,0.646>, +<0.108,-0.116,0.987>, +<-0.010,0.010,1>, +<-0.002,0.002,1>, +<0,0.001,1>, +ZS(46) +<0,-0.001,1>, +<-0.002,-0.002,1>, +<-0.009,-0.009,1>, +<0.090,0.091,0.992>, +<0.509,0.531,0.677>, +<0.688,0.721,0.076>, +<0.569,0.818,0.091>, +<0.656,0.755,-0.003>, +<0.643,0.766,0>, +<0.634,0.771,-0.053>, +<0.656,0.753,-0.053>, +<0.740,0.672,-0.015>, +<0.804,0.594,0.016>, +<0.820,0.570,0.049>, +<0.763,0.642,0.073>, +<0.631,0.771,0.089>, +<0.428,0.899,0.089>, +<0.188,0.978,0.092>, +<-0.058,0.993,0.101>, +<-0.286,0.953,0.101>, +<-0.357,0.931,0.074>, +<-0.315,0.948,0.046> +<-0.296,-0.937,0.184>, +<-0.115,-0.986,0.117>, +<0.109,-0.989,0.101>, +<0.351,-0.933,0.085>, +<0.576,-0.814,0.075>, +<0.742,-0.668,0.061>, +<0.840,-0.541,0.044>, +<0.869,-0.494,0.023>, +<0.832,-0.555,-0.003>, +<0.753,-0.658,-0.032>, +<0.670,-0.741,-0.047>, +<0.616,-0.787,-0.042>, +<0.614,-0.788,-0.051>, +<0.625,-0.780,-0.011>, +<0.650,-0.759,0.019>, +<0.666,-0.746,0.013>, +<0.694,-0.720,-0.009>, +<0.709,-0.702,0.062>, +<0.545,-0.523,0.655>, +<0.132,-0.103,0.986>, +<-0.012,0.010,1>, +<-0.003,0.002,1>, +<-0.002,0,1>, +ZS(44) +<-0.002,0,1>, +<-0.003,-0.002,1>, +<-0.012,-0.010,1>, +<0.118,0.086,0.989>, +<0.531,0.510,0.677>, +<0.704,0.705,0.087>, +<0.694,0.720,-0.010>, +<0.666,0.746,0.015>, +<0.650,0.759,0.019>, +<0.624,0.781,-0.020>, +<0.618,0.784,-0.064>, +<0.633,0.772,-0.049>, +<0.701,0.711,-0.050>, +<0.789,0.614,-0.029>, +<0.860,0.511,0.003>, +<0.873,0.487,0.030>, +<0.812,0.581,0.055>, +<0.682,0.728,0.071>, +<0.481,0.873,0.081>, +<0.238,0.967,0.090>, +<0.003,0.994,0.106>, +<-0.221,0.967,0.127>, +<-0.350,0.924,0.157> +<-0.005,-0.982,0.188>, +<0.187,-0.976,0.109>, +<0.418,-0.904,0.085>, +<0.627,-0.776,0.063>, +<0.782,-0.622,0.043>, +<0.877,-0.480,0.024>, +<0.905,-0.426,0.009>, +<0.866,-0.500,-0.012>, +<0.781,-0.623,-0.034>, +<0.683,-0.729,-0.049>, +<0.600,-0.798,-0.052>, +<0.561,-0.827,-0.036>, +<0.566,-0.824,-0.008>, +<0.606,-0.795,0.010>, +<0.639,-0.769,0.037>, +<0.684,-0.728,0.050>, +<0.708,-0.705,0.028>, +<0.719,-0.695,-0.010>, +<0.723,-0.689,0.057>, +<0.666,-0.484,0.569>, +<0.199,-0.116,0.973>, +<-0.016,0.011,1>, +<-0.004,0.003,1>, +<-0.002,0.002,1>, +ZS(42) +<-0.002,-0.002,1>, +<-0.004,-0.003,1>, +<-0.016,-0.011,1>, +<0.192,0.103,0.976>, +<0.661,0.474,0.581>, +<0.719,0.691,0.074>, +<0.719,0.695,-0.010>, +<0.706,0.707,0.034>, +<0.680,0.732,0.055>, +<0.631,0.775,0.035>, +<0.598,0.801,0.001>, +<0.562,0.827,-0.018>, +<0.568,0.822,-0.045>, +<0.625,0.778,-0.059>, +<0.721,0.691,-0.051>, +<0.823,0.567,-0.031>, +<0.897,0.442,-0.005>, +<0.911,0.412,0.015>, +<0.854,0.520,0.032>, +<0.730,0.682,0.050>, +<0.543,0.837,0.068>, +<0.309,0.947,0.085>, +<0.082,0.991,0.107>, +<-0.104,0.976,0.190> +<0.320,-0.932,0.168>, +<0.495,-0.865,0.079>, +<0.676,-0.735,0.050>, +<0.817,-0.575,0.030>, +<0.906,-0.423,0.012>, +<0.927,-0.374,-0.002>, +<0.885,-0.464,-0.019>, +<0.797,-0.603,-0.033>, +<0.689,-0.723,-0.042>, +<0.583,-0.812,-0.044>, +<0.514,-0.857,-0.034>, +<0.507,-0.862,-0.012>, +<0.549,-0.836,0.017>, +<0.611,-0.790,0.040>, +<0.668,-0.743,0.047>, +<0.711,-0.701,0.046>, +<0.731,-0.681,0.045>, +<0.742,-0.670,0.011>, +<0.809,-0.582,0.081>, +<0.738,-0.674,0.027>, +<0.586,-0.629,0.510>, +<0.296,-0.171,0.940>, +<-0.019,0.014,1>, +<-0.005,0.004,1>, +<-0.002,0.002,1>, +ZS(40) +<-0.002,-0.002,1>, +<-0.005,-0.004,1>, +<-0.019,-0.014,1>, +<0.295,0.165,0.941>, +<0.589,0.629,0.508>, +<0.735,0.677,0.036>, +<0.811,0.580,0.081>, +<0.746,0.666,0.015>, +<0.730,0.681,0.056>, +<0.705,0.707,0.055>, +<0.654,0.754,0.052>, +<0.589,0.808,0.038>, +<0.528,0.849,0.011>, +<0.496,0.868,-0.020>, +<0.525,0.850,-0.042>, +<0.614,0.788,-0.049>, +<0.731,0.680,-0.045>, +<0.841,0.541,-0.032>, +<0.918,0.396,-0.014>, +<0.936,0.352,0.002>, +<0.885,0.465,0.015>, +<0.772,0.635,0.032>, +<0.601,0.798,0.051>, +<0.396,0.914,0.085>, +<0.214,0.961,0.178> +<0.608,-0.785,0.117>, +<0.730,-0.683,0.035>, +<0.845,-0.535,0.016>, +<0.928,-0.373,-0.002>, +<0.941,-0.337,-0.010>, +<0.895,-0.446,-0.022>, +<0.803,-0.595,-0.030>, +<0.687,-0.726,-0.035>, +<0.563,-0.825,-0.036>, +<0.470,-0.882,-0.027>, +<0.443,-0.896,-0.008>, +<0.489,-0.872,0.018>, +<0.571,-0.820,0.043>, +<0.653,-0.755,0.058>, +<0.715,-0.697,0.059>, +<0.754,-0.656,0.043>, +<0.767,-0.641,0.025>, +<0.754,-0.657,0.014>, +<0.754,-0.656,-0.003>, +<0.699,-0.710,0.090>, +<0.769,-0.639,-0.009>, +<0.676,-0.564,0.475>, +<0.393,-0.253,0.884>, +<0.014,0.020,1>, +<-0.007,0.004,1>, +<-0.002,0.001,1>, +<-0.001,0,1>, +ZS(36) +<-0.001,0,1>, +<-0.002,-0.001,1>, +<-0.007,-0.004,1>, +<0.015,-0.020,1>, +<0.394,0.253,0.883>, +<0.670,0.574,0.472>, +<0.768,0.640,-0.007>, +<0.698,0.710,0.093>, +<0.754,0.657,-0.003>, +<0.759,0.651,0.020>, +<0.775,0.631,0.036>, +<0.753,0.656,0.054>, +<0.704,0.707,0.065>, +<0.629,0.775,0.061>, +<0.539,0.841,0.041>, +<0.459,0.889,0.012>, +<0.429,0.903,-0.016>, +<0.483,0.875,-0.035>, +<0.599,0.800,-0.040>, +<0.733,0.680,-0.035>, +<0.848,0.530,-0.029>, +<0.928,0.372,-0.018>, +<0.951,0.310,-0.009>, +<0.909,0.416,0>, +<0.805,0.593,0.016>, +<0.666,0.744,0.044>, +<0.524,0.840,0.137> +<0.801,-0.595,0.057>, +<0.873,-0.487,-0.016>, +<0.939,-0.343,-0.019>, +<0.949,-0.314,-0.013>, +<0.897,-0.441,-0.024>, +<0.804,-0.594,-0.024>, +<0.681,-0.732,-0.027>, +<0.544,-0.838,-0.027>, +<0.433,-0.901,-0.020>, +<0.390,-0.921,-0.005>, +<0.436,-0.900,0.016>, +<0.533,-0.845,0.039>, +<0.637,-0.769,0.057>, +<0.720,-0.691,0.062>, +<0.775,-0.630,0.052>, +<0.800,-0.599,0.030>, +<0.791,-0.612,-0.006>, +<0.776,-0.631,-0.025>, +<0.766,-0.643,0>, +<0.778,-0.629,-0.003>, +<0.790,-0.613,-0.006>, +<0.802,-0.597,-0.022>, +<0.719,-0.606,0.341>, +<0.504,-0.335,0.796>, +<0.131,0.002,0.991>, +<-0.008,0.006,1>, +<0,0.002,1>, +<0,0.001,1>, +ZS(34) +<0,-0.001,1>, +<0,-0.002,1>, +<-0.007,-0.006,1>, +<0.137,0,0.991>, +<0.506,0.337,0.794>, +<0.718,0.607,0.339>, +<0.802,0.597,-0.021>, +<0.791,0.612,-0.007>, +<0.778,0.629,-0.003>, +<0.766,0.643,0>, +<0.781,0.624,-0.021>, +<0.803,0.596,0.002>, +<0.808,0.588,0.039>, +<0.774,0.631,0.059>, +<0.705,0.706,0.066>, +<0.606,0.793,0.056>, +<0.494,0.869,0.035>, +<0.397,0.918,0.010>, +<0.373,0.928,-0.010>, +<0.448,0.894,-0.023>, +<0.583,0.812,-0.027>, +<0.729,0.684,-0.026>, +<0.847,0.530,-0.024>, +<0.930,0.366,-0.022>, +<0.958,0.285,-0.017>, +<0.925,0.380,-0.025>, +<0.841,0.540,-0.002>, +<0.760,0.645,0.081> +<0.915,-0.403,0.019>, +<0.944,-0.328,-0.027>, +<0.946,-0.322,-0.035>, +<0.893,-0.450,-0.019>, +<0.801,-0.599,-0.018>, +<0.673,-0.739,-0.017>, +<0.528,-0.849,-0.017>, +<0.404,-0.915,-0.013>, +<0.349,-0.937,-0.003>, +<0.394,-0.919,0.013>, +<0.502,-0.864,0.033>, +<0.622,-0.782,0.048>, +<0.726,-0.685,0.055>, +<0.798,-0.600,0.049>, +<0.835,-0.549,0.029>, +<0.837,-0.547,0.003>, +<0.816,-0.578,-0.020>, +<0.778,-0.626,-0.062>, +<0.768,-0.639,-0.047>, +<0.785,-0.620,0.005>, +<0.782,-0.622,0.026>, +<0.800,-0.600,0.017>, +<0.824,-0.567,-0.016>, +<0.771,-0.613,0.171>, +<0.634,-0.410,0.655>, +<0.313,-0.075,0.947>, +<-0.002,0.008,1>, +<-0.004,0,1>, +ZS(34) +<-0.003,0,1>, +<0.002,-0.008,1>, +<0.321,0.079,0.944>, +<0.637,0.415,0.649>, +<0.772,0.613,0.168>, +<0.824,0.567,-0.015>, +<0.800,0.600,0.017>, +<0.786,0.617,0.020>, +<0.791,0.612,-0.005>, +<0.772,0.633,-0.057>, +<0.783,0.619,-0.065>, +<0.828,0.561,-0.016>, +<0.850,0.526,0.010>, +<0.842,0.539,0.040>, +<0.793,0.607,0.057>, +<0.706,0.706,0.059>, +<0.588,0.807,0.049>, +<0.456,0.889,0.031>, +<0.348,0.937,0.010>, +<0.332,0.943,-0.005>, +<0.423,0.906,-0.013>, +<0.570,0.821,-0.017>, +<0.722,0.692,-0.017>, +<0.842,0.539,-0.020>, +<0.925,0.378,-0.027>, +<0.957,0.286,-0.037>, +<0.938,0.346,-0.031>, +<0.893,0.450,0.024> +<0.949,-0.314,-0.018>, +<0.934,-0.356,-0.024>, +<0.882,-0.471,-0.017>, +<0.793,-0.610,-0.005>, +<0.665,-0.747,-0.006>, +<0.516,-0.856,-0.008>, +<0.384,-0.923,-0.005>, +<0.319,-0.948,0>, +<0.363,-0.932,0.011>, +<0.480,-0.877,0.025>, +<0.612,-0.790,0.038>, +<0.731,-0.681,0.045>, +<0.818,-0.574,0.043>, +<0.866,-0.499,0.028>, +<0.876,-0.483,0.002>, +<0.852,-0.523,-0.028>, +<0.807,-0.589,-0.046>, +<0.762,-0.646,-0.044>, +<0.748,-0.662,-0.045>, +<0.732,-0.681,0>, +<0.755,-0.654,0.056>, +<0.797,-0.597,0.094>, +<0.817,-0.572,0.067>, +<0.842,-0.539,-0.008>, +<0.829,-0.558,0.036>, +<0.728,-0.507,0.461>, +<0.505,-0.227,0.833>, +<0.162,0.017,0.987>, +<-0.014,0.004,1>, +<-0.003,0,1>, +ZS(30) +<-0.003,0,1>, +<-0.013,-0.003,1>, +<0.166,-0.015,0.986>, +<0.498,0.236,0.834>, +<0.731,0.512,0.452>, +<0.831,0.555,0.033>, +<0.840,0.543,-0.001>, +<0.813,0.578,0.075>, +<0.791,0.605,0.093>, +<0.751,0.659,0.043>, +<0.739,0.674,-0.015>, +<0.761,0.646,-0.057>, +<0.776,0.629,-0.049>, +<0.822,0.568,-0.044>, +<0.868,0.497,-0.020>, +<0.887,0.461,0.013>, +<0.868,0.495,0.037>, +<0.807,0.589,0.049>, +<0.706,0.707,0.049>, +<0.572,0.819,0.038>, +<0.429,0.903,0.022>, +<0.315,0.949,0.008>, +<0.304,0.953,0>, +<0.406,0.914,-0.005>, +<0.559,0.829,-0.006>, +<0.714,0.700,-0.009>, +<0.834,0.551,-0.014>, +<0.913,0.407,-0.032>, +<0.952,0.304,-0.032>, +<0.958,0.287,-0.001> +<0.911,-0.408,-0.050>, +<0.866,-0.499,-0.002>, +<0.783,-0.623,0.004>, +<0.658,-0.753,0.007>, +<0.511,-0.860,0.005>, +<0.374,-0.928,0.002>, +<0.301,-0.954,0.003>, +<0.344,-0.939,0.009>, +<0.466,-0.885,0.019>, +<0.605,-0.796,0.028>, +<0.734,-0.678,0.036>, +<0.831,-0.555,0.036>, +<0.888,-0.458,0.025>, +<0.906,-0.424,0.004>, +<0.884,-0.466,-0.021>, +<0.831,-0.555,-0.046>, +<0.763,-0.644,-0.057>, +<0.704,-0.709,-0.043>, +<0.672,-0.740,-0.005>, +<0.684,-0.728,0.043>, +<0.735,-0.674,0.077>, +<0.789,-0.605,0.105>, +<0.845,-0.520,0.124>, +<0.870,-0.489,0.058>, +<0.860,-0.510,-0.003>, +<0.953,-0.275,0.127>, +<0.794,-0.567,0.220>, +<0.666,-0.438,0.604>, +<0.461,-0.093,0.882>, +<0.131,0.018,0.991>, +<-0.010,0.002,1>, +<-0.003,0,1>, +ZS(25) +<-0.001,0,1>, +<-0.003,0,1>, +<-0.009,-0.002,1>, +<0.135,-0.016,0.991>, +<0.554,0.080,0.829>, +<0.668,0.437,0.602>, +<0.799,0.563,0.211>, +<0.950,0.290,0.118>, +<0.864,0.504,0.002>, +<0.871,0.486,0.074>, +<0.837,0.529,0.136>, +<0.775,0.624,0.104>, +<0.719,0.692,0.068>, +<0.678,0.735,0.029>, +<0.682,0.731,-0.020>, +<0.722,0.690,-0.052>, +<0.784,0.618,-0.059>, +<0.853,0.521,-0.042>, +<0.903,0.429,-0.013>, +<0.916,0.400,0.012>, +<0.887,0.461,0.032>, +<0.817,0.575,0.040>, +<0.705,0.708,0.035>, +<0.561,0.827,0.025>, +<0.412,0.911,0.016>, +<0.296,0.955,0.007>, +<0.288,0.958,0.003>, +<0.398,0.917,0.003>, +<0.553,0.833,0.002>, +<0.705,0.709,0.002>, +<0.822,0.569,-0.006>, +<0.898,0.440,-0.018>, +<0.936,0.347,-0.058> +<0.832,-0.554,-0.037>, +<0.767,-0.642,0.018>, +<0.654,-0.756,0.023>, +<0.514,-0.858,0.016>, +<0.376,-0.927,0.010>, +<0.296,-0.955,0.005>, +<0.337,-0.941,0.006>, +<0.459,-0.888,0.010>, +<0.602,-0.799,0.018>, +<0.737,-0.675,0.025>, +<0.840,-0.542,0.028>, +<0.904,-0.428,0.022>, +<0.927,-0.374,0.007>, +<0.909,-0.416,-0.015>, +<0.852,-0.522,-0.037>, +<0.766,-0.641,-0.049>, +<0.677,-0.735,-0.047>, +<0.610,-0.792,-0.020>, +<0.601,-0.799,0.026>, +<0.663,-0.745,0.078>, +<0.756,-0.644,0.115>, +<0.842,-0.527,0.115>, +<0.895,-0.439,0.080>, +<0.894,-0.445,0.051>, +<0.877,-0.480,0.014>, +<0.876,-0.482,-0.002>, +<0.836,-0.533,0.127>, +<0.949,-0.293,0.117>, +<0.792,-0.518,0.323>, +<0.655,-0.425,0.625>, +<0.447,-0.078,0.891>, +<0.194,0.018,0.981>, +<0.018,0.004,1>, +<-0.005,0,1>, +z,z,<-0.001,0,1>, +<-0.002,0,1>, +<-0.002,0,1>, +ZS(15) +<-0.001,0,1>, +<-0.003,0,1>, +<-0.006,0,1>, +<0.021,-0.003,1>, +<0.201,-0.017,0.980>, +<0.451,0.083,0.889>, +<0.623,0.541,0.564>, +<0.791,0.520,0.321>, +<0.915,0.398,0.063>, +<0.838,0.532,0.124>, +<0.876,0.483,-0.002>, +<0.882,0.472,0.020>, +<0.903,0.426,0.054>, +<0.892,0.444,0.089>, +<0.828,0.549,0.113>, +<0.734,0.672,0.104>, +<0.641,0.765,0.062>, +<0.596,0.803,0.012>, +<0.628,0.778,-0.031>, +<0.705,0.707,-0.052>, +<0.797,0.602,-0.050>, +<0.879,0.475,-0.033>, +<0.929,0.370,-0.009>, +<0.936,0.352,0.012>, +<0.900,0.434,0.025>, +<0.824,0.566,0.027>, +<0.704,0.710,0.022>, +<0.555,0.832,0.016>, +<0.405,0.914,0.010>, +<0.289,0.957,0.006>, +<0.284,0.959,0.008>, +<0.399,0.917,0.009>, +<0.551,0.834,0.012>, +<0.696,0.718,0.011>, +<0.806,0.593,0.005>, +<0.867,0.497,-0.045> +<0.725,-0.688,-0.025>, +<0.647,-0.762,0.028>, +<0.527,-0.849,0.030>, +<0.390,-0.920,0.017>, +<0.306,-0.952,0.006>, +<0.341,-0.940,0>, +<0.460,-0.888,0.001>, +<0.601,-0.799,0.006>, +<0.739,-0.673,0.012>, +<0.846,-0.532,0.016>, +<0.915,-0.404,0.015>, +<0.942,-0.336,0.007>, +<0.927,-0.375,-0.008>, +<0.868,-0.495,-0.026>, +<0.772,-0.634,-0.039>, +<0.658,-0.751,-0.042>, +<0.558,-0.830,-0.026>, +<0.517,-0.856,0.010>, +<0.582,-0.811,0.056>, +<0.706,-0.701,0.100>, +<0.829,-0.546,0.122>, +<0.912,-0.396,0.110>, +<0.947,-0.318,0.040>, +<0.933,-0.352,-0.070>, +<0.906,-0.410,-0.107>, +<0.883,-0.469,-0.001>, +<0.891,-0.454,0.004>, +<0.879,-0.471,0.071>, +<0.846,-0.500,0.187>, +<0.907,-0.419,0.050>, +<0.834,-0.465,0.297>, +<0.734,-0.346,0.584>, +<0.556,-0.123,0.822>, +<0.346,0.011,0.938>, +<0.145,0.011,0.989>, +<0.022,0,1>, +<-0.010,-0.002,1>, +<-0.006,0,1>, +<-0.003,0.001,1>, +<0,0.002,1>, +ZS(5) +<-0.001,0,1>, +<-0.001,0,1>, +<-0.002,0,1>, +<-0.001,0,1>, +<-0.001,0,1>, +<-0.002,0,1>, +<-0.003,0,1>, +<-0.004,0,1>, +<-0.009,0,1>, +<0.024,-0.003,1>, +<0.152,-0.011,0.988>, +<0.354,-0.004,0.935>, +<0.564,0.130,0.815>, +<0.739,0.349,0.576>, +<0.836,0.464,0.294>, +<0.906,0.420,0.052>, +<0.871,0.474,0.127>, +<0.890,0.454,0.038>, +<0.894,0.449,-0.003>, +<0.883,0.469,-0.001>, +<0.908,0.401,-0.120>, +<0.940,0.338,-0.051>, +<0.947,0.313,0.066>, +<0.899,0.423,0.112>, +<0.806,0.580,0.117>, +<0.676,0.731,0.091>, +<0.554,0.832,0.046>, +<0.514,0.858,0.001>, +<0.585,0.810,-0.035>, +<0.696,0.717,-0.047>, +<0.810,0.584,-0.042>, +<0.899,0.437,-0.025>, +<0.946,0.324,-0.005>, +<0.949,0.316,0.009>, +<0.908,0.418,0.016>, +<0.826,0.563,0.016>, +<0.703,0.711,0.013>, +<0.553,0.833,0.007>, +<0.405,0.914,0.005>, +<0.291,0.957,0.004>, +<0.292,0.957,0.008>, +<0.409,0.912,0.015>, +<0.557,0.830,0.024>, +<0.685,0.728,0.024>, +<0.764,0.644,-0.024> +<0.610,-0.793,-0.019>, +<0.535,-0.844,0.027>, +<0.420,-0.907,0.024>, +<0.330,-0.944,0.008>, +<0.357,-0.934,-0.004>, +<0.469,-0.883,-0.009>, +<0.604,-0.797,-0.007>, +<0.741,-0.672,-0.002>, +<0.849,-0.528,0.004>, +<0.920,-0.391,0.006>, +<0.951,-0.310,0.003>, +<0.937,-0.348,-0.005>, +<0.880,-0.476,-0.017>, +<0.779,-0.627,-0.028>, +<0.650,-0.759,-0.032>, +<0.522,-0.853,-0.024>, +<0.446,-0.895,0.002>, +<0.504,-0.863,0.037>, +<0.654,-0.752,0.080>, +<0.810,-0.577,0.106>, +<0.920,-0.377,0.104>, +<0.975,-0.209,0.069>, +<0.992,-0.129,-0.010>, +<0.966,-0.237,-0.099>, +<0.857,-0.471,-0.208>, +<0.826,-0.554,-0.106>, +<0.819,-0.571,0.056>, +<0.812,-0.562,0.158>, +<0.893,-0.401,0.204>, +<0.929,-0.358,0.093>, +<0.934,-0.357,-0.006>, +<0.936,-0.350,0.023>, +<0.899,-0.392,0.196>, +<0.826,-0.373,0.423>, +<0.726,-0.248,0.642>, +<0.575,-0.085,0.814>, +<0.563,0.019,0.826>, +<0.277,0.016,0.961>, +<0.154,0.008,0.988>, +<0.068,0.004,0.998>, +<0.020,0,1>, +<-0.001,0,1>, +<-0.006,0,1>, +<-0.006,0,1>, +<-0.006,0,1>, +<-0.007,0,1>, +<-0.009,0,1>, +<0.270,-0.001,0.963>, +z,<0.227,-0.001,0.974>, +<0.085,0,0.996>, +<0.343,-0.007,0.939>, +<0.300,-0.025,0.954>, +<0.433,-0.014,0.901>, +<0.582,0.086,0.809>, +<0.728,0.255,0.636>, +<0.829,0.374,0.415>, +<0.902,0.389,0.189>, +<0.937,0.349,0.020>, +<0.935,0.354,-0.004>, +<0.915,0.387,0.111>, +<0.876,0.444,0.189>, +<0.821,0.550,0.150>, +<0.858,0.514,0.029>, +<0.833,0.530,-0.157>, +<0.870,0.444,-0.216>, +<0.977,0.203,-0.060>, +<0.991,0.136,0.015>, +<0.966,0.245,0.082>, +<0.900,0.422,0.109>, +<0.778,0.620,0.105>, +<0.614,0.786,0.073>, +<0.469,0.883,0.028>, +<0.450,0.893,-0.011>, +<0.558,0.829,-0.037>, +<0.694,0.719,-0.040>, +<0.823,0.567,-0.031>, +<0.913,0.407,-0.015>, +<0.956,0.292,-0.002>, +<0.955,0.296,0.006>, +<0.911,0.411,0.010>, +<0.827,0.562,0.008>, +<0.703,0.711,0.002>, +<0.555,0.832,-0.003>, +<0.411,0.911,-0.005>, +<0.305,0.952,0>, +<0.311,0.950,0.009>, +<0.434,0.901,0.025>, +<0.562,0.827,0.035>, +<0.646,0.763,-0.009> +<0.513,-0.858,-0.017>, +<0.448,-0.894,0.012>, +<0.370,-0.929,0.008>, +<0.382,-0.924,-0.010>, +<0.482,-0.876,-0.018>, +<0.609,-0.793,-0.018>, +<0.741,-0.672,-0.015>, +<0.848,-0.529,-0.006>, +<0.921,-0.390,0>, +<0.954,-0.300,0.002>, +<0.943,-0.333,-0.002>, +<0.886,-0.463,-0.011>, +<0.784,-0.620,-0.021>, +<0.647,-0.762,-0.026>, +<0.501,-0.865,-0.023>, +<0.392,-0.920,-0.004>, +<0.435,-0.900,0.024>, +<0.602,-0.796,0.058>, +<0.783,-0.616,0.090>, +<0.919,-0.383,0.096>, +<0.984,-0.162,0.080>, +<1,0.008,0.014>, +<0.996,-0.066,-0.060>, +<0.926,-0.356,-0.124>, +<0.789,-0.599,-0.137>, +<0.700,-0.705,-0.114>, +<0.658,-0.748,0.090>, +<0.805,-0.568,0.170>, +<0.918,-0.329,0.223>, +<0.974,-0.198,0.113>, +<0.960,-0.278,0.033>, +<0.944,-0.330,0>, +<0.952,-0.308,0>, +<0.951,-0.306,0.052>, +<0.955,-0.287,0.071>, +<0.949,-0.237,0.208>, +<0.881,-0.297,0.368>, +<0.805,-0.315,0.503>, +<0.745,-0.162,0.648>, +<0.663,-0.082,0.744>, +<0.588,-0.028,0.808>, +<0.505,-0.003,0.863>, +<0.456,0.004,0.890>, +<0.426,0,0.905>, +<0.414,-0.004,0.910>, +<0.425,-0.009,0.905>, +<0.443,0.259,0.858>, +<0.513,-0.012,0.858>, +<0.560,-0.023,0.828>, +<0.621,0.041,0.783>, +<0.696,0.073,0.714>, +<0.763,0.191,0.617>, +<0.834,0.216,0.508>, +<0.887,0.288,0.361>, +<0.965,0.135,0.225>, +<0.959,0.280,0.049>, +<0.957,0.290,0.011>, +<0.952,0.307,-0.002>, +<0.944,0.330,0>, +<0.968,0.248,0.047>, +<0.960,0.219,0.173>, +<0.892,0.387,0.232>, +<0.757,0.635,0.154>, +<0.656,0.755,0.015>, +<0.753,0.637,-0.165>, +<0.839,0.531,-0.121>, +<0.954,0.282,-0.100>, +<0.999,0.037,-0.035>, +<0.999,0.027,0.045>, +<0.972,0.214,0.095>, +<0.891,0.441,0.105>, +<0.737,0.670,0.091>, +<0.547,0.835,0.049>, +<0.394,0.919,0.010>, +<0.405,0.914,-0.019>, +<0.546,0.837,-0.033>, +<0.699,0.714,-0.030>, +<0.834,0.552,-0.019>, +<0.922,0.387,-0.007>, +<0.962,0.275,0.003>, +<0.958,0.288,0.007>, +<0.912,0.411,0.004>, +<0.827,0.562,-0.003>, +<0.704,0.710,-0.011>, +<0.560,0.828,-0.017>, +<0.427,0.904,-0.017>, +<0.332,0.943,-0.008>, +<0.352,0.936,0.015>, +<0.460,0.888,0.028>, +<0.537,0.843,-0.007> +<0.445,-0.895,-0.022>, +<0.410,-0.912,-0.009>, +<0.415,-0.910,-0.018>, +<0.499,-0.866,-0.031>, +<0.614,-0.788,-0.033>, +<0.739,-0.673,-0.025>, +<0.844,-0.536,-0.017>, +<0.918,-0.398,-0.005>, +<0.953,-0.304,0.002>, +<0.944,-0.331,0.005>, +<0.890,-0.457,0>, +<0.789,-0.614,-0.010>, +<0.647,-0.762,-0.019>, +<0.492,-0.870,-0.023>, +<0.357,-0.934,-0.011>, +<0.378,-0.926,0.010>, +<0.552,-0.833,0.042>, +<0.749,-0.659,0.073>, +<0.908,-0.409,0.090>, +<0.984,-0.154,0.085>, +<0.995,0.087,0.047>, +<0.995,0.095,-0.016>, +<0.976,-0.200,-0.088>, +<0.836,-0.533,-0.133>, +<0.639,-0.757,-0.137>, +<0.506,-0.862,-0.024>, +<0.660,-0.746,0.093>, +<0.884,-0.436,0.169>, +<0.977,-0.111,0.181>, +<0.998,-0.069,-0.003>, +<0.962,-0.235,-0.141>, +<0.947,-0.322,0>, +<0.925,-0.379,0.017>, +<0.922,-0.351,0.161>, +<0.958,-0.234,0.165>, +<0.977,-0.214,0.009>, +<0.974,-0.221,0.041>, +<0.982,-0.187,0>, +<0.981,-0.176,0.081>, +<0.965,-0.166,0.205>, +<0.965,-0.143,0.218>, +<0.948,-0.122,0.294>, +<0.932,-0.085,0.352>, +<0.922,-0.049,0.385>, +<0.918,-0.011,0.395>, +<0.916,0.030,0.400>, +<0.934,0.071,0.351>, +<0.889,0.104,0.446>, +<0.964,0.112,0.243>, +<0.914,0.158,0.373>, +<0.983,0.156,0.102>, +<0.970,0.187,0.154>, +<0.983,0.184,-0.006>, +<0.954,0.242,0.179>, +<0.963,0.253,0.093>, +<0.937,0.292,0.190>, +<0.942,0.317,0.112>, +<0.948,0.318,-0.008>, +<0.947,0.321,0>, +<0.980,0.187,-0.066>, +<0.994,0.078,0.080>, +<0.954,0.216,0.207>, +<0.826,0.538,0.172>, +<0.591,0.804,0.064>, +<0.552,0.832,-0.050>, +<0.726,0.675,-0.130>, +<0.895,0.431,-0.117>, +<0.992,0.111,-0.057>, +<0.994,-0.112,0.004>, +<0.997,-0.027,0.070>, +<0.972,0.215,0.096>, +<0.869,0.485,0.096>, +<0.687,0.723,0.068>, +<0.484,0.875,0.030>, +<0.335,0.942,0>, +<0.382,0.924,-0.023>, +<0.546,0.837,-0.027>, +<0.708,0.706,-0.019>, +<0.842,0.539,-0.010>, +<0.926,0.377,0.002>, +<0.963,0.269,0.007>, +<0.957,0.289,0.003>, +<0.910,0.416,-0.005>, +<0.824,0.566,-0.018>, +<0.705,0.709,-0.029>, +<0.570,0.821,-0.035>, +<0.451,0.892,-0.030>, +<0.375,0.927,-0.007>, +<0.398,0.917,0.002>, +<0.452,0.892,-0.016> +<0.431,-0.902,-0.021>, +<0.451,-0.892,-0.027>, +<0.519,-0.854,-0.041>, +<0.622,-0.782,-0.047>, +<0.736,-0.676,-0.043>, +<0.837,-0.547,-0.028>, +<0.910,-0.414,-0.013>, +<0.948,-0.319,0.002>, +<0.940,-0.341,0.009>, +<0.888,-0.459,0.009>, +<0.794,-0.608,0.002>, +<0.653,-0.758,-0.009>, +<0.493,-0.870,-0.019>, +<0.338,-0.941,-0.017>, +<0.330,-0.944,0>, +<0.502,-0.864,0.028>, +<0.708,-0.704,0.060>, +<0.886,-0.456,0.081>, +<0.981,-0.172,0.088>, +<0.992,0.101,0.076>, +<0.978,0.209,0.015>, +<0.999,-0.035,-0.031>, +<0.910,-0.402,-0.096>, +<0.699,-0.704,-0.127>, +<0.435,-0.895,-0.094>, +<0.446,-0.895,0>, +<0.760,-0.642,0.103>, +<0.951,-0.265,0.156>, +<0.983,0.103,0.154>, +<0.989,0.146,0.033>, +<0.934,-0.275,-0.228>, +<0.857,-0.479,-0.189>, +<0.855,-0.515,0.062>, +<0.862,-0.458,0.216>, +<0.956,-0.132,0.263>, +<0.997,-0.070,0.045>, +<0.980,-0.200,0.002>, +<0.977,-0.213,-0.008>, +<0.954,-0.267,0.134>, +<0.957,-0.140,0.253>, +<0.980,-0.050,0.193>, +<0.996,-0.089,0.016>, +<0.998,-0.061,-0.003>, +<1,-0.036,0>, +<0.986,-0.031,0.162>, +<0.973,0.025,0.229>, +<0.994,0.063,0.094>, +<0.998,0.060,-0.004>, +<1,0.041,0.003>, +<0.981,0.117,0.152>, +<0.968,0.204,0.147>, +<0.986,0.167,-0.003>, +<0.983,0.185,0>, +<0.994,0.102,0.033>, +<0.974,0.049,0.221>, +<0.911,0.304,0.278>, +<0.853,0.511,0.108>, +<0.914,0.401,-0.057>, +<0.912,0.355,-0.207>, +<0.972,0.174,-0.157>, +<0.983,-0.159,0.090>, +<0.977,0.019,0.211>, +<0.891,0.417,0.178>, +<0.634,0.770,0.076>, +<0.413,0.911,-0.008>, +<0.539,0.833,-0.124>, +<0.786,0.607,-0.120>, +<0.953,0.291,-0.085>, +<0.998,-0.057,-0.017>, +<0.976,-0.219,0.019>, +<0.996,-0.028,0.087>, +<0.963,0.250,0.097>, +<0.836,0.542,0.080>, +<0.641,0.766,0.046>, +<0.426,0.905,0.011>, +<0.297,0.955,-0.014>, +<0.379,0.925,-0.027>, +<0.554,0.832,-0.022>, +<0.717,0.697,-0.011>, +<0.847,0.532,0>, +<0.926,0.377,0.007>, +<0.961,0.276,0.008>, +<0.953,0.303,0>, +<0.903,0.430,-0.016>, +<0.819,0.573,-0.036>, +<0.705,0.708,-0.049>, +<0.583,0.811,-0.048>, +<0.478,0.877,-0.036>, +<0.420,0.907,-0.021>, +<0.417,0.909,-0.023> +<0.487,-0.873,-0.015>, +<0.540,-0.840,-0.042>, +<0.630,-0.775,-0.052>, +<0.732,-0.679,-0.050>, +<0.826,-0.562,-0.041>, +<0.899,-0.437,-0.021>, +<0.938,-0.346,-0.002>, +<0.932,-0.361,0.012>, +<0.883,-0.469,0.017>, +<0.795,-0.606,0.012>, +<0.662,-0.749,0.002>, +<0.505,-0.863,-0.012>, +<0.339,-0.941,-0.021>, +<0.298,-0.954,-0.014>, +<0.458,-0.889,0.010>, +<0.668,-0.743,0.045>, +<0.857,-0.510,0.077>, +<0.973,-0.215,0.088>, +<0.993,0.069,0.095>, +<0.959,0.280,0.035>, +<0.992,0.124,0.009>, +<0.969,-0.239,-0.062>, +<0.792,-0.601,-0.105>, +<0.498,-0.855,-0.145>, +<0.291,-0.956,-0.044>, +<0.539,-0.842,0>, +<0.866,-0.487,0.115>, +<0.987,-0.057,0.151>, +<0.955,0.290,0.067>, +<0.988,0.153,0.025>, +<0.944,-0.313,-0.102>, +<0.761,-0.608,-0.228>, +<0.667,-0.744,0.032>, +<0.882,-0.436,0.179>, +<0.970,0.062,0.234>, +<0.998,0.058,0.025>, +<0.976,-0.150,-0.160>, +<0.942,-0.334,-0.038>, +<0.879,-0.450,0.158>, +<0.941,-0.201,0.271>, +<0.953,0.114,0.281>, +<0.993,0.116,0.013>, +<0.999,-0.046,0.001>, +<0.975,-0.220,-0.011>, +<0.934,-0.256,0.251>, +<0.945,0.097,0.313>, +<0.937,0.303,0.177>, +<0.986,0.165,-0.009>, +<0.996,-0.083,0.017>, +<0.984,-0.040,0.175>, +<0.934,0.323,0.151>, +<0.947,0.321,-0.024>, +<0.980,0.133,-0.145>, +<0.999,0.002,0.052>, +<0.974,-0.044,0.223>, +<0.936,0.275,0.220>, +<0.769,0.631,0.102>, +<0.772,0.625,-0.116>, +<0.879,0.395,-0.266>, +<0.993,0.082,-0.085>, +<0.962,-0.262,0.077>, +<0.965,-0.196,0.173>, +<0.959,0.231,0.164>, +<0.750,0.655,0.094>, +<0.409,0.913,-0.018>, +<0.339,0.938,-0.076>, +<0.623,0.771,-0.130>, +<0.865,0.490,-0.110>, +<0.989,0.138,-0.059>, +<0.977,-0.215,0.002>, +<0.961,-0.268,0.062>, +<0.995,0.005,0.099>, +<0.948,0.306,0.084>, +<0.799,0.598,0.063>, +<0.591,0.806,0.025>, +<0.373,0.928,-0.004>, +<0.268,0.963,-0.013>, +<0.391,0.920,-0.029>, +<0.566,0.824,-0.017>, +<0.725,0.689,-0.003>, +<0.847,0.531,0.011>, +<0.921,0.389,0.019>, +<0.954,0.299,0.012>, +<0.943,0.331,-0.009>, +<0.891,0.454,-0.031>, +<0.809,0.585,-0.048>, +<0.704,0.708,-0.053>, +<0.596,0.801,-0.052>, +<0.506,0.861,-0.041>, +<0.457,0.889,-0.019> +<0.577,-0.817,-0.010>, +<0.640,-0.767,-0.048>, +<0.728,-0.683,-0.055>, +<0.815,-0.578,-0.046>, +<0.884,-0.467,-0.028>, +<0.922,-0.388,0>, +<0.917,-0.397,0.018>, +<0.872,-0.489,0.026>, +<0.793,-0.609,0.023>, +<0.672,-0.741,0.009>, +<0.523,-0.852,-0.008>, +<0.366,-0.930,-0.033>, +<0.293,-0.956,-0.028>, +<0.425,-0.905,-0.012>, +<0.631,-0.775,0.021>, +<0.826,-0.560,0.061>, +<0.958,-0.272,0.093>, +<0.994,0.020,0.105>, +<0.951,0.295,0.093>, +<0.963,0.265,0.039>, +<0.996,-0.079,-0.031>, +<0.886,-0.454,-0.095>, +<0.627,-0.768,-0.127>, +<0.302,-0.942,-0.148>, +<0.303,-0.951,-0.068>, +<0.685,-0.728,0.032>, +<0.942,-0.310,0.125>, +<0.966,0.186,0.181>, +<0.923,0.382,0.044>, +<0.998,0.058,-0.002>, +<0.902,-0.418,-0.104>, +<0.623,-0.769,-0.144>, +<0.640,-0.768,-0.003>, +<0.937,-0.329,0.114>, +<0.953,0.219,0.211>, +<0.954,0.297,0.042>, +<0.962,-0.180,-0.204>, +<0.821,-0.554,-0.140>, +<0.830,-0.550,0.091>, +<0.963,-0.183,0.199>, +<0.946,0.269,0.182>, +<0.978,0.209,-0.014>, +<0.987,-0.049,-0.150>, +<0.946,-0.319,-0.048>, +<0.904,-0.389,0.175>, +<0.974,0.082,0.210>, +<0.899,0.404,0.167>, +<0.963,0.265,-0.041>, +<0.991,-0.134,-0.020>, +<0.987,-0.103,0.122>, +<0.938,0.344,0.043>, +<0.866,0.489,-0.107>, +<0.979,0.119,-0.163>, +<0.968,-0.251,0.021>, +<0.957,-0.221,0.186>, +<0.955,0.208,0.211>, +<0.723,0.686,0.082>, +<0.626,0.775,-0.088>, +<0.816,0.551,-0.177>, +<0.986,0.140,-0.088>, +<0.946,-0.321,0.050>, +<0.927,-0.342,0.157>, +<0.986,0.034,0.165>, +<0.850,0.517,0.105>, +<0.527,0.850,0.008>, +<0.238,0.970,-0.051>, +<0.402,0.901,-0.164>, +<0.726,0.674,-0.136>, +<0.938,0.334,-0.092>, +<1,-0.032,0.006>, +<0.945,-0.321,0.056>, +<0.966,-0.229,0.120>, +<0.993,0.062,0.099>, +<0.924,0.373,0.082>, +<0.757,0.652,0.050>, +<0.542,0.840,0.028>, +<0.329,0.944,-0.019>, +<0.265,0.963,-0.041>, +<0.414,0.910,-0.032>, +<0.579,0.815,-0.006>, +<0.730,0.683,0.019>, +<0.841,0.540,0.033>, +<0.909,0.416,0.028>, +<0.940,0.342,0.013>, +<0.928,0.373,-0.010>, +<0.876,0.481,-0.037>, +<0.799,0.599,-0.053>, +<0.705,0.707,-0.061>, +<0.612,0.789,-0.052>, +<0.545,0.838,-0.014> +<0.668,-0.744,-0.003>, +<0.727,-0.686,-0.040>, +<0.803,-0.594,-0.046>, +<0.867,-0.497,-0.033>, +<0.902,-0.432,-0.014>, +<0.899,-0.437,0.010>, +<0.861,-0.508,0.030>, +<0.792,-0.610,0.033>, +<0.685,-0.728,0.021>, +<0.547,-0.837,0.003>, +<0.400,-0.916,-0.018>, +<0.300,-0.954,-0.026>, +<0.386,-0.922,-0.027>, +<0.579,-0.815,0.011>, +<0.779,-0.625,0.051>, +<0.934,-0.348,0.086>, +<0.994,-0.042,0.106>, +<0.962,0.245,0.121>, +<0.931,0.358,0.070>, +<0.994,0.101,0.033>, +<0.960,-0.271,-0.073>, +<0.753,-0.644,-0.138>, +<0.441,-0.883,-0.164>, +<0.190,-0.975,-0.111>, +<0.402,-0.911,-0.092>, +<0.789,-0.610,0.067>, +<0.984,-0.112,0.142>, +<0.910,0.369,0.187>, +<0.911,0.401,0.097>, +<0.998,-0.045,-0.041>, +<0.836,-0.533,-0.128>, +<0.527,-0.843,-0.111>, +<0.642,-0.767,-0.017>, +<0.955,-0.265,0.133>, +<0.919,0.346,0.190>, +<0.929,0.359,0.088>, +<0.976,-0.210,-0.049>, +<0.742,-0.653,-0.150>, +<0.750,-0.660,0.043>, +<0.975,-0.153,0.159>, +<0.904,0.399,0.156>, +<0.900,0.435,0.005>, +<0.982,-0.026,-0.189>, +<0.837,-0.545,-0.046>, +<0.850,-0.513,0.124>, +<0.984,0.064,0.167>, +<0.839,0.529,0.129>, +<0.914,0.403,-0.050>, +<0.976,-0.217,-0.017>, +<0.975,-0.185,0.125>, +<0.898,0.440,0.015>, +<0.834,0.540,-0.118>, +<0.985,0.152,-0.082>, +<0.947,-0.322,-0.017>, +<0.908,-0.364,0.205>, +<0.991,0.086,0.107>, +<0.752,0.660,-0.011>, +<0.514,0.855,-0.074>, +<0.713,0.685,-0.152>, +<0.969,0.239,-0.068>, +<0.951,-0.302,0.064>, +<0.871,-0.467,0.152>, +<0.974,-0.144,0.177>, +<0.926,0.346,0.150>, +<0.648,0.761,0.036>, +<0.258,0.962,-0.089>, +<0.213,0.966,-0.147>, +<0.543,0.827,-0.144>, +<0.840,0.536,-0.089>, +<0.989,0.145,-0.016>, +<0.973,-0.217,0.078>, +<0.929,-0.359,0.090>, +<0.982,-0.149,0.119>, +<0.982,0.148,0.116>, +<0.885,0.455,0.098>, +<0.700,0.712,0.050>, +<0.486,0.874,-0.012>, +<0.292,0.956,-0.033>, +<0.292,0.956,-0.035>, +<0.449,0.893,-0.014>, +<0.606,0.795,0.009>, +<0.743,0.669,0.025>, +<0.838,0.544,0.032>, +<0.896,0.444,0.024>, +<0.922,0.387,0>, +<0.909,0.417,-0.021>, +<0.861,0.508,-0.042>, +<0.788,0.613,-0.052>, +<0.706,0.707,-0.042>, +<0.642,0.767,-0.002> +<0.728,-0.685,0.030> +<0.782,-0.624,-0.005> +<0.845,-0.534,-0.014> +<0.887,-0.462,-0.019> +<0.894,-0.447,-0.022> +<0.866,-0.499,-0.011> +<0.812,-0.584,-0.005> +<0.724,-0.689,-0.011> +<0.599,-0.800,-0.027> +<0.453,-0.890,-0.045> +<0.323,-0.945,-0.045> +<0.313,-0.950,0.013> +<0.492,-0.870,0.042> +<0.684,-0.723,0.098> +<0.868,-0.473,0.150> +<0.971,-0.160,0.179> +<0.973,0.143,0.181> +<0.921,0.365,0.139> +<0.951,0.306,0.042> +<0.998,-0.044,-0.045> +<0.889,-0.433,-0.147> +<0.605,-0.768,-0.209> +<0.266,-0.938,-0.221> +<0.163,-0.983,-0.082> +<0.529,-0.849,-0.016> +<0.875,-0.459,0.152> +<0.976,0.094,0.196> +<0.865,0.466,0.189> +<0.916,0.383,0.116> +<0.989,-0.129,-0.075> +<0.732,-0.653,-0.195> +<0.418,-0.902,-0.105> +<0.667,-0.745,0.018> +<0.971,-0.156,0.183> +<0.875,0.448,0.183> +<0.925,0.363,0.114> +<0.968,-0.248,-0.034> +<0.675,-0.728,-0.120> +<0.714,-0.700,0.017> +<0.984,-0.117,0.131> +<0.863,0.485,0.140> +<0.862,0.507,0.014> +<0.995,-0.062,-0.076> +<0.781,-0.624,-0.029> +<0.811,-0.580,0.077> +<0.992,0.039,0.117> +<0.808,0.581,0.093> +<0.868,0.495,-0.043> +<0.973,-0.231,0.017> +<0.967,-0.228,0.114> +<0.891,0.455,-0.007> +<0.782,0.618,-0.083> +<0.974,0.185,-0.128> +<0.899,-0.437,0.016> +<0.866,-0.425,0.263> +<0.996,0.084,0.023> +<0.823,0.567,-0.036> +<0.505,0.860,-0.069> +<0.604,0.785,-0.137> +<0.926,0.366,-0.094> +<0.975,-0.204,0.085> +<0.840,-0.522,0.152> +<0.907,-0.327,0.265> +<0.952,0.177,0.248> +<0.751,0.655,0.084> +<0.357,0.932,-0.059> +<0.133,0.983,-0.126> +<0.366,0.912,-0.185> +<0.692,0.705,-0.153> +<0.941,0.319,-0.114> +<0.998,-0.067,0> +<0.922,-0.384,0.041> +<0.932,-0.314,0.180> +<0.979,-0.034,0.203> +<0.939,0.291,0.183> +<0.806,0.580,0.121> +<0.600,0.797,0.070> +<0.388,0.921,0.019> +<0.252,0.968,-0.018> +<0.348,0.935,-0.069> +<0.513,0.857,-0.051> +<0.664,0.747,-0.030> +<0.780,0.625,-0.012> +<0.854,0.519,-0.007> +<0.899,0.438,-0.016> +<0.913,0.407,-0.022> +<0.890,0.455,-0.017> +<0.838,0.546,-0.011> +<0.766,0.643,-0.001> +<0.706,0.708,0.035> +} +uv_vectors { +nx*ny, +#local i=0; +#while (i, + #else + + #end + #local j=j+1; + #end + #local i=i+1; +#end +} +face_indices { +15842 +#local i=0; +#while (i + #end + #if (((j-1) >= 0) & ((i-1) >= 0)) + + #end + #local j=j+1; + #end + #local i=i+1; +#end +} diff --git a/samples/POV-Ray SDL/gamma_showcase.pov b/samples/POV-Ray SDL/gamma_showcase.pov new file mode 100755 index 00000000..70a44aef --- /dev/null +++ b/samples/POV-Ray SDL/gamma_showcase.pov @@ -0,0 +1,188 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence of Vision Ray Tracer Scene Description File +// File: gamma_showcase.pov +// Vers: 3.7 +// Desc: Gamma Handling Test Scene - An arrangement of spheres on a marble plane +// Date: 2010-12-21 +// Auth: Christoph Lipka +// + +// +w640 +h480 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase.png +// +w640 +h480 +a0.3 +am1 +fN -d File_Gamma=1.0 Output_File_Name=gamma_showcase_linear.png +// +w320 +h240 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase_ref0.png Declare=Stripes=off +// +w320 +h240 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase_ref1.png Declare=Stripes=off Declare=Gamma=1.2 +// +w320 +h240 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase_ref2.png Declare=Stripes=off Declare=Gamma=0.8 +// +w640 +h480 +a0.3 +am1 -f +d + +#version 3.7; + +#include "colors.inc" +#include "stones.inc" + +#ifndef (Stripes) + #declare Stripes = on; +#end +#ifndef (Gamma) + #declare Gamma = 1.0; +#end + +global_settings { + max_trace_level 5 + assumed_gamma 1.0 + radiosity { + pretrace_start 0.08 + pretrace_end 0.01 + count 35 + nearest_count 5 + error_bound 1.8 + recursion_limit 2 + low_error_factor .5 + gray_threshold 0.0 + minimum_reuse 0.015 + brightness 1 + adc_bailout 0.01/2 + } +} + +#default { + texture { + pigment {rgb 1} + finish { + ambient 0.0 + diffuse 0.6 + specular 0.6 roughness 0.001 + reflection { 0.0 1.0 fresnel on } + conserve_energy + } + } +} + +// ---------------------------------------- + +#local TestRed = rgb <0.5,0.1,0.1>; +#local TestGreen = rgb <0.1,0.5,0.1>; +#local TestBlue = rgb <0.1,0.1,0.5>; + +#local CameraFocus = <0,0.5,0>; +#local CameraDist = 8; +#local CameraDepth = 1.8; +#local CameraTilt = 20; + +camera { + location <0,0,0> + direction z*CameraDepth + right x*image_width/image_height + up y + translate <0,0,-CameraDist> + rotate x*CameraTilt + translate CameraFocus +} + +#macro LightSource(Pos,Color) + light_source { + Pos + color Color + spotlight + point_at <0,0,0> + radius 175/vlength(Pos) + falloff 200/vlength(Pos) + area_light x*vlength(Pos)/10, y*vlength(Pos)/10, 9,9 adaptive 1 jitter circular orient + } + +#end + +LightSource(<-500,500,-500>,TestRed + <0.2,0.2,0.2>) +LightSource(< 0,500,-500>,TestGreen + <0.2,0.2,0.2>) +LightSource(< 500,500,-500>,TestBlue + <0.2,0.2,0.2>) + +// ---------------------------------------- + +#macro DarkStripeBW(TargetBrightness) + #if (TargetBrightness < 0.5) + (0.0) + #else + (TargetBrightness*2 - 1.0) + #end +#end + +#macro BrightStripeBW(TargetBrightness) + #if (TargetBrightness < 0.5) + (TargetBrightness*2) + #else + (1.0) + #end +#end + +#macro DarkStripeRGB(TargetColor) + +#end + +#macro BrightStripeRGB(TargetColor) + +#end + +#macro StripedPigment(TargetColor) + #if (Stripes) + function { abs(mod(abs(image_height*CameraDepth*y/z+0.5),2.0)-1.0) } + color_map { + [0.5 color rgb DarkStripeRGB(TargetColor) ] + [0.5 color rgb BrightStripeRGB(TargetColor) ] + } + translate <0,0,-CameraDist> + rotate x*CameraTilt + translate CameraFocus + #else + color TargetColor + #end +#end + + +plane { + y, 0 + texture { T_Stone11 } + interior { ior 1.5 } +} + +#macro GammaAdjust(C,G) + #local C2 = color rgbft ; + (C2) +#end + +#macro TestSphere(Pos,Radius,TargetColor,Split) + sphere { + Pos + y*Radius, Radius + texture { pigment { color GammaAdjust(TargetColor,Gamma) } } + interior { ior 1.5 } + } + #if (Split) + sphere { + Pos + y*Radius + x*0.001, Radius + texture { pigment { StripedPigment(TargetColor) } } + interior { ior 1.5 } + } + #end +#end + +TestSphere(<-2,0,1>, 1, TestRed, true) +TestSphere(< 0,0,1>, 1, TestGreen, true) +TestSphere(< 2,0,1>, 1, TestBlue, true) + +#local Steps = 6; +#for(I,0,1,1/Steps) + #if (I < 0.5) + #local Color2 = TestRed; + #else + #local Color2 = TestBlue; + #end + #local P = abs(I-0.5)*2; + TestSphere(, 2/Steps, (1-P)*TestGreen + P*Color2, true) +#end + +#local Steps = 8; +#for(I,0,1,1/Steps) + TestSphere(, 2/Steps, rgb I, true) + TestSphere(, 2/Steps, GammaAdjust(rgb I, 2.2*Gamma), false) +#end diff --git a/samples/POV-Ray SDL/sky.inc b/samples/POV-Ray SDL/sky.inc new file mode 100755 index 00000000..93753d02 --- /dev/null +++ b/samples/POV-Ray SDL/sky.inc @@ -0,0 +1,91 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: sky.inc +// Desc: sky for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#local P_Clouds= +pigment { + gradient z + pigment_map { + [ 0.0 color rgbt 1] + [ 0.1 + bozo + color_map { + [0.0 color rgbt < 0.85, 0.88, 0.94, 0.0>] + [0.15 color rgbt < 0.91, 0.96, 0.99, 0.0>] + [0.35 color rgbt < 0.91, 0.96, 0.99, 1.0>] + } + turbulence 0.75 + lambda 2.4 + omega 0.6 + octaves 8 + scale <0.4,0.4,0.15> + ] + [ 0.4 + bozo + color_map { + [0.0 color rgbt < 0.85, 0.88, 0.94, 0.0>] + [0.15 color rgbt < 0.91, 0.96, 0.99, 0.0>] + [0.35 color rgbt < 0.91, 0.96, 0.99, 1.0>] + } + turbulence 0.75 + lambda 2.4 + omega 0.6 + octaves 8 + scale <0.4,0.4,0.15> + ] + [ 0.65 color rgbt 1] + + } + rotate 10*z +} + + +#local Tex_Sky = +texture { + pigment { + function { abs(z) } + color_map { + [0.0 color rgb < 0.640, 0.685, 0.800 >] + [0.3 color rgb < 0.400, 0.550, 0.900 >] + } + turbulence 0.05 + } + + finish { + diffuse 0 + ambient 1 + } +} +texture { + pigment { P_Clouds } + finish { + diffuse 0 + ambient 1 + } +} + + +sphere { + <0, 0, 0>, 1 + texture { Tex_Sky } + scale<1000000, 1000000, 300000> + no_shadow + hollow on + photons{ collect off } +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ diff --git a/samples/POV-Ray SDL/table.inc b/samples/POV-Ray SDL/table.inc new file mode 100755 index 00000000..17981897 --- /dev/null +++ b/samples/POV-Ray SDL/table.inc @@ -0,0 +1,171 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: table.inc +// Desc: table for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#declare Tex_Table_Foot= +texture { + pigment { + color rgb 0.4 + } + finish { + ambient 0.0 + diffuse 0.3 + specular 0.4 + roughness 0.01 + metallic + + reflection { + 0.8 + metallic + } + } +} + +#declare Tex_Table_Foot_Bottom= +texture { + pigment { + color rgb 0.2 + } + finish { + ambient 0.0 + diffuse 0.3 + specular 0.4 + roughness 0.02 + } +} + +#declare Tex_Dark_Wood= +texture { + pigment { + bozo + color_map { + [0.3 color rgb <0.0,0.0,0.16> ] + [0.5 color rgb <0.0,0.0,0.08> ] + [0.7 color rgb <0.0,0.0,0.0> ] + } + scale <4,1,1>*0.036 + } + finish { + ambient 0.09 + diffuse 0.3 + specular 0.5 + roughness 0.025 + + reflection { + 0.15 + metallic + } + } + normal { + granite 0.1 + scale 0.03 + accuracy 0.007 + } + scale 0.5 + rotate 90*y +} + +#declare Tex_Dark_Wood2 = +texture { + pigment { + wood + color_map { + [ 0.0000 color rgb<0.6431, 0.3176, 0.0824> ] + [ 0.1000 color rgb<0.6196, 0.2824, 0.0588> ] + [ 0.2000 color rgb<0.7137, 0.3725, 0.1529> ] + [ 0.3000 color rgb<0.7529, 0.4157, 0.1922> ] + [ 0.4000 color rgb<0.8157, 0.4941, 0.2588> ] + [ 0.5000 color rgb<0.7686, 0.4745, 0.2196> ] + [ 0.6000 color rgb<0.8471, 0.5647, 0.2980> ] + [ 0.7000 color rgb<0.8627, 0.5843, 0.3137> ] + [ 0.8000 color rgb<0.8902, 0.6314, 0.3529> ] + [ 0.9000 color rgb<0.8627, 0.6118, 0.3294> ] + [ 1.0000 color rgb<0.8392, 0.5922, 0.3098> ] + } + + turbulence <0.075, 0.075, 0.65> + scale <0.04, 0.04, 0.6> + + scale 0.27 + rotate 91*y + translate -0.1*z + } + finish { + ambient 0.0 + diffuse 0.4 + specular 0.3 + roughness 0.025 + + reflection { + 0.17 + metallic + } + } + normal { + granite 0.015 + scale <0.02, 0.02, 0.06> + rotate 91*y + accuracy 0.007 + } +} + + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "shapes.inc" + +#declare Table_Height=0.66; + +#declare Table= +union { + + torus { 0.49, 0.01 sturm rotate 90*x translate z*(Table_Height-0.01) } + cylinder { z*(Table_Height-0.05), z*(Table_Height-0.01), 0.5 } + cylinder { z*(Table_Height-0.01), z*Table_Height, 0.49 } + + union { + cylinder { z*0.01, z*0.63, 0.03 translate 0.37*x } + cylinder { z*0.01, z*0.63, 0.03 translate 0.37*x rotate 120*z } + cylinder { z*0.01, z*0.63, 0.03 translate 0.37*x rotate 240*z } + + texture { Tex_Table_Foot } + + rotate -70*z + } + + union { + object { Round_Cylinder_Merge (0, z*0.03, 0.031, 0.005) translate 0.37*x } + object { Round_Cylinder_Merge (0, z*0.03, 0.031, 0.005) translate 0.37*x rotate 120*z } + object { Round_Cylinder_Merge (0, z*0.03, 0.031, 0.005) translate 0.37*x rotate 240*z } + + texture { Tex_Table_Foot_Bottom } + + rotate -70*z + } + + texture { Tex_Dark_Wood2 } + + #if (show_TableCloth) + scale <0.97, 0.97, 0.99> + #else + scale <0.97, 0.97, 1.00> + #end +} + +object { Table translate <3.3,2.52,0> } + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ diff --git a/samples/POV-Ray SDL/table_cloth.inc b/samples/POV-Ray SDL/table_cloth.inc new file mode 100755 index 00000000..84bf9331 --- /dev/null +++ b/samples/POV-Ray SDL/table_cloth.inc @@ -0,0 +1,91 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: table_cloth.inc +// Desc: table cloth for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#declare ClCol01=color rgb <0.8, 0.7, 0.4>; +#declare ClCol02=color rgb <0.07, 0.12, 0.4>; + +#declare CPig1= +pigment { + gradient x + triangle_wave + color_map { + [0.04 ClCol01 ] + [0.04 ClCol02 ] + [0.06 ClCol02 ] + [0.06 ClCol01 ] + [0.09 ClCol01 ] + [0.09 ClCol02 ] + [0.13 ClCol02 ] + [0.13 ClCol01 ] + [0.16 ClCol01 ] + [0.16 ClCol02 ] + [0.18 ClCol02 ] + [0.18 ClCol01 ] + } +} + +#declare CPig2= +pigment { + gradient y + triangle_wave + pigment_map { + [0.04 CPig1 ] + [0.04 ClCol02 ] + [0.06 ClCol02 ] + [0.06 CPig1 ] + [0.09 CPig1 ] + [0.09 ClCol02 ] + [0.13 ClCol02 ] + [0.13 CPig1 ] + [0.16 CPig1 ] + [0.16 ClCol02 ] + [0.18 ClCol02 ] + [0.18 CPig1 ] + } +} + + /* +#include "clothutil.inc" + +ReadClothFile("cloth.cth") +DrawSmoothTriangles2(Points, 90, 90, on, true, "cloth.inc") + */ +#declare Table_Cloth= +mesh2{ + #include "cloth.inc" + texture { + uv_mapping + pigment { + CPig2 + } + finish { + ambient 0.0 + diffuse 0.6 + } + normal { + quilted 0.16 + scale 0.008 + } + } + rotate -30*z +} + +object { Table_Cloth translate <3.3,2.52,0> } + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + diff --git a/samples/POV-Ray SDL/table_stuff.inc b/samples/POV-Ray SDL/table_stuff.inc new file mode 100755 index 00000000..0bcdc4e5 --- /dev/null +++ b/samples/POV-Ray SDL/table_stuff.inc @@ -0,0 +1,136 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: table_stuff.inc +// Desc: stuff on the table for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#declare Mat_Glass= +material { + texture { + pigment { color rgbt 1 } + finish { + ambient 0.0 + diffuse 0.1 + specular 0.5 + roughness 0.01 + + reflection { + 0.15, 1.0 + fresnel on + } + + conserve_energy + } + } + interior { + ior 1.5 + fade_distance 0.1 + fade_power 1001 + fade_color <0.4,0.4,0.8> + } +} + +#declare Tex_Box_Metal= +texture { + pigment { + color rgb <0.5,0.45,0.4> + } + finish { + ambient 0.0 + diffuse 0.05 + specular 0.5 + roughness 0.01 + metallic + + reflection { + 0.8 + metallic + } + } +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include "shapes.inc" +#include "functions.inc" + +#declare Table_Height=0.66; + +#declare Box_Iso= +isosurface { + function { -f_superellipsoid(x,y,z, 0.2, 0.2) } + contained_by {box { -1.2, 1.2 }} + max_gradient 1.1 + + translate 1.001*z +} + +#declare Box= +union { + intersection { + object { Box_Iso } + object { Round_Box_Merge (<-1.1,-1.1,1.6>, <1.1,1.1,-0.1>, 0.4) } + + } + intersection { + object { Box_Iso } + object { Round_Box_Merge (<-1.1,-1.1,1.6>, <1.1,1.1,2.2>, 0.4) } + scale 1.01 + rotate 0.2 + } + torus { + 0.6, 0.13 + rotate 90*z + translate 2*z + } + + scale <1,1,0.6> +} + +#include "bglass.inc" + +union { + object { + Glass + + photons{ + target 1.0 + refraction on + reflection on + } + + translate <-0.16,-0.1,0> + } + + object { + Box + + texture { + Tex_Box_Metal + } + photons{ + target 1.0 + reflection on + } + + scale 0.06 + translate <-0.1,0.2,0> + } + + + translate <3.3,2.52,Table_Height> +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ diff --git a/samples/POV-Ray SDL/terrain.inc b/samples/POV-Ray SDL/terrain.inc new file mode 100755 index 00000000..24f8408e --- /dev/null +++ b/samples/POV-Ray SDL/terrain.inc @@ -0,0 +1,118 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence of Vision Ray Tracer Include File +// File: terrain.inc +// Desc: terrain for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#declare Tex_Vegetation= +texture { + pigment { + bozo + color_map { + [0.3 color rgb <0.20,0.35,0.1>*0.9 ] + [0.8 color rgb <0.12,0.35,0.1>*0.7 ] + } + scale 4 + } + finish { + ambient 0.0 + diffuse 0.5 + brilliance 0.8 + specular 0.1 + } + normal { + granite 0.4 + } +} + +#declare Tex_Stone= +texture { + pigment { + color rgb <0.6,0.6,0.6> + } + finish { + ambient 0.0//0.1 + diffuse 0.45 + specular 0.15 + } +} + +#declare Tex_Terrain= +texture { + slope -z + texture_map { + [0.34 Tex_Vegetation ] + [0.34 Tex_Stone ] + } +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + + + +#declare Terrain= +object { + height_field { + + function 300,300 { + pigment { + function { 1-(min(pow(x*x + z*z,1.3), 1) -0.0001) } + color_map { + [0.0 color rgb 0.0] + [1.0 color rgb 1.0] + } + scale 0.35 + translate <0.5,0,0.5> + + warp { turbulence 0.3 } + + scale 3 + warp { turbulence 0.4 lambda 2.2 octaves 8 } + scale 1/3 + + rotate -90*x + translate -0.5*y + scale <1, -1, 1> + translate 0.5*y + } + } + + water_level 0.02 + + rotate 90*x + rotate -10*z + + scale <4, 4, 1> + scale 30 + } +} + + +union { + object { + Terrain + translate <130, 368, -10> + } + + object { + Terrain + rotate -180*z + scale 0.3 + translate <90, 97, -6> + } + texture { Tex_Terrain } +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ diff --git a/samples/POV-Ray SDL/water.inc b/samples/POV-Ray SDL/water.inc new file mode 100755 index 00000000..14facf30 --- /dev/null +++ b/samples/POV-Ray SDL/water.inc @@ -0,0 +1,74 @@ +// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. +// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a +// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. + +// Persistence Of Vision Ray Tracer Include File +// File: water.inc +// Desc: water for 'balcony.pov' demonstration scene +// Date: July/August 2001 +// Auth: Christoph Hormann + +// Updated: 09Aug2008 (jh) for v3.7 distribution + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#if (version < 3.7) + #version 3.5; +#end + +#include "functions.inc" + +#declare RMF=function{ f_ridged_mf(x, y, z, 0.07, 2.2, 7, 0.6, 0.9, 1)} + +#declare M_Watx4 = +material { + texture { + pigment { + color rgbt <0.2, 0.22, 0.21, 0.94> + } + finish { + diffuse 0.0 + ambient -0.2 + + reflection { + 0.0, 0.95 + fresnel on + } + + conserve_energy + + specular 0.4 + roughness 0.007 + } + normal{ + function { RMF(x, y, z) } 0.8 + scale 0.3 + } + } + interior { + ior 1.31 + fade_distance 5 + fade_power 1001.0 + fade_color <0.02, 0.20, 0.06> + } +} + +plane { + z, -1 + material { + M_Watx4 + } + hollow on +} + +plane { + z, -12.0 + + texture { + pigment { color rgb 0 } + finish { ambient 0.0 diffuse 0.0 } + } + hollow on +} + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ diff --git a/samples/Pascal/cwindirs.pp b/samples/Pascal/cwindirs.pp new file mode 100644 index 00000000..d97895e3 --- /dev/null +++ b/samples/Pascal/cwindirs.pp @@ -0,0 +1,121 @@ + +unit cwindirs; + + + + +interface + +uses + windows, + strings; + +Const + CSIDL_PROGRAMS = $0002; + CSIDL_PERSONAL = $0005; + CSIDL_FAVORITES = $0006; + CSIDL_STARTUP = $0007; + CSIDL_RECENT = $0008; + CSIDL_SENDTO = $0009; + CSIDL_STARTMENU = $000B; + CSIDL_MYMUSIC = $000D; + CSIDL_MYVIDEO = $000E; + CSIDL_DESKTOPDIRECTORY = $0010; + CSIDL_NETHOOD = $0013; + CSIDL_TEMPLATES = $0015; + CSIDL_COMMON_STARTMENU = $0016; + CSIDL_COMMON_PROGRAMS = $0017; + CSIDL_COMMON_STARTUP = $0018; + CSIDL_COMMON_DESKTOPDIRECTORY = $0019; + CSIDL_APPDATA = $001A; + CSIDL_PRINTHOOD = $001B; + CSIDL_LOCAL_APPDATA = $001C; + CSIDL_COMMON_FAVORITES = $001F; + CSIDL_INTERNET_CACHE = $0020; + CSIDL_COOKIES = $0021; + CSIDL_HISTORY = $0022; + CSIDL_COMMON_APPDATA = $0023; + CSIDL_WINDOWS = $0024; + CSIDL_SYSTEM = $0025; + CSIDL_PROGRAM_FILES = $0026; + CSIDL_MYPICTURES = $0027; + CSIDL_PROFILE = $0028; + CSIDL_PROGRAM_FILES_COMMON = $002B; + CSIDL_COMMON_TEMPLATES = $002D; + CSIDL_COMMON_DOCUMENTS = $002E; + CSIDL_COMMON_ADMINTOOLS = $002F; + CSIDL_ADMINTOOLS = $0030; + CSIDL_COMMON_MUSIC = $0035; + CSIDL_COMMON_PICTURES = $0036; + CSIDL_COMMON_VIDEO = $0037; + CSIDL_CDBURN_AREA = $003B; + CSIDL_PROFILES = $003E; + + CSIDL_FLAG_CREATE = $8000; + +Function GetWindowsSpecialDir(ID : Integer) : String; + +implementation + +uses + sysutils; + +Type + PFNSHGetFolderPath = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; + + +var + SHGetFolderPath : PFNSHGetFolderPath = Nil; + CFGDLLHandle : THandle = 0; + +Procedure InitDLL; + +Var + pathBuf: array[0..MAX_PATH-1] of char; + pathLength: Integer; +begin + { Load shfolder.dll using a full path, in order to prevent spoofing (Mantis #18185) + Don't bother loading shell32.dll because shfolder.dll itself redirects SHGetFolderPath + to shell32.dll whenever possible. } + pathLength:=GetSystemDirectory(pathBuf, MAX_PATH); + if (pathLength>0) and (pathLength0) then + begin + Pointer(ShGetFolderPath):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA'); + If @ShGetFolderPath=nil then + begin + FreeLibrary(CFGDLLHandle); + CFGDllHandle:=0; + end; + end; + end; + If (@ShGetFolderPath=Nil) then + Raise Exception.Create('Could not determine SHGetFolderPath Function'); +end; + +Function GetWindowsSpecialDir(ID : Integer) : String; + +Var + APath : Array[0..MAX_PATH] of char; + +begin + Result:=''; + if (CFGDLLHandle=0) then + InitDLL; + If (SHGetFolderPath<>Nil) then + begin + if SHGetFolderPath(0,ID or CSIDL_FLAG_CREATE,0,0,@APATH[0])=S_OK then + Result:=IncludeTrailingPathDelimiter(StrPas(@APath[0])); + end; +end; + +Initialization +Finalization + if CFGDLLHandle<>0 then + FreeLibrary(CFGDllHandle); +end. + diff --git a/samples/Pascal/gtkextra.pp b/samples/Pascal/gtkextra.pp deleted file mode 100644 index 9f2ebf8c..00000000 --- a/samples/Pascal/gtkextra.pp +++ /dev/null @@ -1,51 +0,0 @@ -{ $Id$ } -{ - --------------------------------------------------------------------------- - gtkextra.pp - GTK(2) widgetset - additional gdk/gtk functions - --------------------------------------------------------------------------- - - This unit contains missing gdk/gtk functions and defines for certain - versions of gtk or fpc. - - --------------------------------------------------------------------------- - - @created(Sun Jan 28th WET 2006) - @lastmod($Date$) - @author(Marc Weustink ) - - ***************************************************************************** - This file is part of the Lazarus Component Library (LCL) - - See the file COPYING.modifiedLGPL.txt, included in this distribution, - for details about the license. - ***************************************************************************** - } - -unit GtkExtra; - -{$mode objfpc}{$H+} - -interface - -{$I gtkdefines.inc} - -{$ifdef gtk1} -{$I gtk1extrah.inc} -{$endif} - -{$ifdef gtk2} -{$I gtk2extrah.inc} -{$endif} - - -implementation - -{$ifdef gtk1} -{$I gtk1extra.inc} -{$endif} - -{$ifdef gtk2} -{$I gtk2extra.inc} -{$endif} - -end. diff --git a/samples/Pascal/image_url.inc b/samples/Pascal/image_url.inc new file mode 100644 index 00000000..9f7090fa --- /dev/null +++ b/samples/Pascal/image_url.inc @@ -0,0 +1,37 @@ + function GetUnixMangaImageURL: Boolean; + var + i: Integer; + l: TStringList; + s: String; + begin + l := TStringList.Create; + s := manager.container.PageContainerLinks[workCounter]; + Result := GetPage(TObject(l), s , manager.container.Manager.retryConnect); + + if Self.Terminated then + begin + l.Free; + parse.Free; + Exit; + end; + + parse := TStringList.Create; + Parser := THTMLParser.Create(PChar(l.Text)); + Parser.OnFoundTag := OnTag; + Parser.OnFoundText := OnText; + Parser.Exec; + Parser.Free; + l.Free; + if parse.Count > 0 then + begin + for i := 0 to parse.Count - 1 do + begin + if (Pos('STYLE="border', parse[i]) > 0) and (Pos(' 0) then + begin + manager.container.PageLinks[workCounter] := Trim(GetVal(parse[i], 'SRC')); + Break; + end; + end; + end; + parse.Free; + end; diff --git a/samples/Pascal/large.pp b/samples/Pascal/large.pp new file mode 100644 index 00000000..9e0f4867 --- /dev/null +++ b/samples/Pascal/large.pp @@ -0,0 +1,22 @@ +program large; + + const + max = 100000000; + + type + tlist = array[1..max] of longint; + + var + data : tlist; + i : integer; + +begin + + i := 0; + while(i < max) + do + begin + data[i] := 0; + Writeln(data[i]) + end +end. diff --git a/samples/Pascal/libc.inc b/samples/Pascal/libc.inc new file mode 100644 index 00000000..15ced61e --- /dev/null +++ b/samples/Pascal/libc.inc @@ -0,0 +1,56 @@ +{ + This file is part of the Free Component Library (FCL) + Copyright (c) 1999-2002 by the Free Pascal development team + + BIOS functions unit for Nintendo DS + Copyright (c) 2006 by Francesco Lombardi + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + 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. + + *****************************************************************************} + +function __errno: plongint; cdecl; export; +begin + +end; + + +function S_ISBLK(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFBLK; +end; + +function S_ISCHR(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFCHR; +end; + +function S_ISDIR(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFDIR; +end; + +function S_ISFIFO(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFIFO; +end; + +function S_ISREG(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFREG; +end; + +function S_ISLNK(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFLNK; +end; + +function S_ISSOCK(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFSOCK; +end; diff --git a/samples/Pascal/tw27294.pp b/samples/Pascal/tw27294.pp new file mode 100644 index 00000000..34d14f5d --- /dev/null +++ b/samples/Pascal/tw27294.pp @@ -0,0 +1,26 @@ +uses + uw27294; + +var + p : procedure; + +procedure test; + +begin + p:=@test; + writeln('OK'); +end; + +procedure global; +begin + p:=nil; + test; + p(); +end; + +begin + global; + uw27294.global; +end. + + diff --git a/samples/Pascal/vmops_impl.inc b/samples/Pascal/vmops_impl.inc new file mode 100644 index 00000000..71ab8727 --- /dev/null +++ b/samples/Pascal/vmops_impl.inc @@ -0,0 +1,502 @@ +operator+(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] + b[i mod bn]; +end; + +operator+(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] + b; +end; + +operator+(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a + b[i]; +end; + +operator-(a: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := -a[i]; +end; + +operator-(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] - b[i mod bn]; +end; + +operator-(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] - b; +end; + +operator-(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a - b[i]; +end; + +operator*(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] * b[i mod bn]; +end; + +operator*(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] * b; +end; + +operator*(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a * b[i]; +end; + +operator/(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] / b[i mod bn]; +end; + +operator/(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] / b; +end; + +operator/(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a / b[i]; +end; + +operator**(a, b: Double)res: Double; +begin + if IsNan(a) or IsNan(b) then res := NaN + else if b = Infinity then begin + if a = NegInfinity then res := NaN + else case sign(a) of + 1: res := Infinity; + 0: res := 0; + -1: res := NegInfinity; + end; + end else if b = NegInfinity then begin + if a = NegInfinity then res := NaN + else case sign(a) of + 1: res := 0; + 0: res := Infinity; + -1: res := 0; + end; + end else res := power(a, b); +end; + +operator**(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] ** b[i mod bn]; +end; + +operator**(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] ** b; +end; + +operator**(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a ** b[i]; +end; + +operator><(a: TVector; b: TVector)res: TMatrix; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + if an * bn = 0 then Exit(nil); + rn := math.max(an, bn); + SetLength(res, 1); + SetLength(res[0], 1); + res[0][0] := 0; + for i := 0 to rn - 1 do res[0][0] := res[0][0] + a[i mod an] * b[i mod bn]; +end; + +operator+(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] + b[i]; +end; + +operator+(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] + b; +end; + +operator+(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a + b[i]; +end; + +operator+(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a + matrix(b, Length(a), Length(a[0])); +end; + +operator+(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b + matrix(a, Length(b), Length(b[0])); +end; + +operator-(a: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := -a[i]; +end; + +operator-(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] - b[i]; +end; + +operator-(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] - b; +end; + +operator-(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a - b[i]; +end; + +operator-(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a - matrix(b, Length(a), Length(a[0])); +end; + +operator-(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b - matrix(a, Length(b), Length(b[0])); +end; + +operator*(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] * b[i]; +end; + +operator*(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] * b; +end; + +operator*(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a * b[i]; +end; + +operator*(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a * matrix(b, Length(a), Length(a[0])); +end; + +operator*(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b * matrix(a, Length(b), Length(b[0])); +end; + +operator/(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] / b[i]; +end; + +operator/(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] / b; +end; + +operator/(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a / b[i]; +end; + +operator/(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a / matrix(b, Length(a), Length(a[0])); +end; + +operator/(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b / matrix(a, Length(b), Length(b[0])); +end; + +operator**(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] ** b[i]; +end; + +operator**(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] ** b; +end; + +operator**(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a ** b[i]; +end; + +operator**(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a ** matrix(b, Length(a), Length(a[0])); +end; + +operator**(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b ** matrix(a, Length(b), Length(b[0])); +end; + +operator><(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, j, n, m: Integer; +begin + n := Length(a); + m := Length(b); + if (n = 1) and (m = 1) then Exit(vector(a) >< vector(b)); + SetLength(res, n); + for i := 0 to n - 1 do begin + j := 0; + res[i] := a[i][j] * b[j]; + for j := 1 to m - 1 do res[i] := res[i] + a[i][j] * b[j]; + end; +end; + +operator><(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a >< matrix(b, 1, Length(b)); +end; + +operator><(a: TVector; b: TMatrix)res: TMatrix; +begin + res := matrix(a, 1, Length(a)) >< b; +end; + +function vector(a: array of const): TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(Result, n); + for i := 0 to n - 1 do case a[i].VType of + vtInteger: Result[i] := a[i].VInteger; + vtExtended: Result[i] := a[i].VExtended^; + vtCurrency: Result[i] := a[i].VCurrency^; + vtInt64: Result[i] := a[i].VInt64^; + end; +end; + +function vector(a: TMatrix): TVector; inline; +var + i, j, n, m : Integer; +begin + n := Length(a); + if n = 0 then Exit(nil); + m := Length(a[0]); + if m = 0 then Exit(nil); + SetLength(Result, m * n); + for i := 0 to m - 1 do + for j := 0 to n - 1 do + Result[i * n + j] := a[j][i]; +end; + +function matrix(data: TVector; nrow, ncol: Integer; byrow: Boolean): TMatrix; +var + i, j, n, c: Integer; +begin + n := Length(data); + if n = 0 then Exit(nil); + if (nrow = 0) and (ncol = 0) then ncol := 1; + if nrow = 0 then nrow := (n div ncol) + sign(n mod ncol); + if ncol = 0 then ncol := (n div nrow) + sign(n mod nrow); + SetLength(Result, nrow); + for i := 0 to nrow - 1 do begin + SetLength(Result[i], ncol); + for j := 0 to ncol - 1 do begin + if byrow then c := i * ncol + j else c := j * nrow + i; + Result[i][j] := data[c mod n]; + end; + end; +end; + +function matrix(data: TMatrix; nrow, ncol: Integer; byrow: Boolean): TMatrix; +begin + Result := matrix(vector(data), nrow, ncol, byrow); +end; + +function rep(data: TVector; times: TVector): TVector; +var + i, j, n, m, s, c: Integer; +begin + Result := nil; + n := Length(data); + m := Length(times); + if n * m = 0 then Exit; + s := 0; + for i := 0 to n - 1 do begin + c := trunc(times[i mod m]); + if c > 0 then s += c; + end; + SetLength(Result, s); + c := 0; + for i := 0 to n - 1 do begin + s := trunc(times[i mod m]); + for j := 1 to s do begin + Result[c] := data[i]; + Inc(c); + end; + end; +end; + +function rep(data: TVector; len: Integer): TVector; +var + i, j, n: Integer; +begin + n := Length(data); + SetLength(Result, n * len); + if n = 0 then Exit; + for i := 0 to len - 1 do + for j := 0 to n - 1 do + Result[i * n + j] := data[j]; +end; + +function rep(data: Double; len: Integer): TVector; +var + i: Integer; +begin + SetLength(Result, len); + for i := 0 to len - 1 do Result[i] := data; +end; diff --git a/samples/Perl/Sample.pod b/samples/Perl/Sample.pod new file mode 100644 index 00000000..00fa0b99 --- /dev/null +++ b/samples/Perl/Sample.pod @@ -0,0 +1,10 @@ +use strict; +use warnings; +package DZT::Sample; + +sub return_arrayref_of_values_passed { + my $invocant = shift; + return \@_; +} + +1; diff --git a/samples/Perl/exception_handler.pl b/samples/Perl/exception_handler.pl new file mode 100644 index 00000000..14807ced --- /dev/null +++ b/samples/Perl/exception_handler.pl @@ -0,0 +1,117 @@ +package exception_handler; +use sigtrap qw(die normal-signals); +use IO::Handle; +use Carp; +use File::Spec; +use File::Basename; +use Data::Dumper; + +use sigtrap 'handler', \&tm_die; + +$Carp::CarpLevel = 1; # How many extra package levels to skip on carp. + +BEGIN { + *CORE::GLOBAL::die = \&tm_die; + $main::SIG{__DIE__} = \&tm_die; + my $error_fd = $ENV{"TM_ERROR_FD"}; + open (TM_ERROR_FD, ">&=$error_fd"); + TM_ERROR_FD->autoflush(1); +} + +sub realwarn { CORE::warn(@_); } +sub realdie { CORE::die(@_); } + +sub longmess { + my ($arg, @rest) = shift; + { + local $@; + # XXX fix require to not clear $@? + # don't use require unless we need to (for Safe compartments) + require Carp::Heavy unless $INC{"Carp/Heavy.pm"}; + } + # Icky backwards compatibility wrapper. :-( + my $call_pack = caller(); + if ($Internal{$call_pack} or $Carp::CarpInternal{$call_pack}) { + return longmess_heavy($arg, @rest); + } + else { + local $Carp::CarpLevel = $Carp::CarpLevel + 1; + return longmess_heavy($arg, @rest); + } +} + +sub longmess_heavy { + return @_ if ref($_[0]); # don't break references as exceptions + my $i = Carp::long_error_loc(); + my ($arg, @rest) = @_; + return ret_backtrace($i, $arg, @rest); +} + +sub quote { + my $str = shift; + $str =~ s/([^A-Za-z0-9\/_.-])/sprintf("%%%02X", ord($1))/seg; + return $str; +} + +sub url_and_display_name { + my $file = shift; + my $url = ""; + my $display_name = ""; + $display_name = basename($file); + $url = 'url=file://' . quote($file); + return ($url, $display_name); +} + +# Returns a full stack backtrace starting from where it is +# told. +sub ret_backtrace { + my ($i, $arg, @rest) = @_; + my $mess; + $i++; + + my $tid_msg = ''; + if (defined &Thread::tid) { + my $tid = Thread->self->tid; + $tid_msg = " thread $tid" if $tid; + } + + my %i = Carp::caller_info($i); + $arg =~ s/\n/\/g; + $i{sub} =~ s/tm_die/die/g; + $mess .= "
\n"; + $mess .= "

$arg

\n"; + $mess .= "
\n"; + my ($url, $display_name) = url_and_display_name($i{file}); + $mess .= "\n"; + while (my %i = Carp::caller_info(++$i)) { + ($url, $display_name) = url_and_display_name($i{file}); + $mess .= "\n"; + } + $mess .= "
$i{sub} in $display_name at line $i{line}$tid_msg
$i{sub} in $display_name at line $i{line}$tid_msg
"; + return $mess; +} + +sub ineval { + (exists $ENV{MOD_PERL} ? 0 : $^S) || Carp::longmess() =~ /eval [\{\']/m +} + +sub htmlize { + my $l = shift; + $l =~ s/&/&/g; + $l =~ s//>/g; + return $l; +} + +sub tm_die { + my ($arg,@rest) = @_; + if (ineval()) { + realdie ($arg,@rest) if ineval(); + } + if (!ref($arg)) { + print TM_ERROR_FD longmess($arg,@rest); + } + exit($!); +} + +1; diff --git a/samples/Perl/getchar.al b/samples/Perl/getchar.al new file mode 100644 index 00000000..ecd06589 --- /dev/null +++ b/samples/Perl/getchar.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ../../lib/POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 318 "../../lib/POSIX.pm (autosplit into ../../lib/auto/POSIX/getchar.al)" +sub getchar { + usage "getchar()" if @_ != 0; + CORE::getc(STDIN); +} + +# end of POSIX::getchar +1; diff --git a/samples/Perl/perl.script! b/samples/Perl/perl similarity index 100% rename from samples/Perl/perl.script! rename to samples/Perl/perl diff --git a/samples/Perl/strict.t b/samples/Perl/strict.t index 04cea2f8..a9d4ec8c 100644 --- a/samples/Perl/strict.t +++ b/samples/Perl/strict.t @@ -1,4 +1,5 @@ use Test::Base; +use Test::More; __DATA__ === Strict Test diff --git a/samples/Perl/use5.pl b/samples/Perl/use5.pl new file mode 100644 index 00000000..de7d248c --- /dev/null +++ b/samples/Perl/use5.pl @@ -0,0 +1,3 @@ +use Mojolicious::Lite; +use 5.20.0; +use experimental 'signatures'; diff --git a/samples/Perl6/List.pm b/samples/Perl6/List.pm new file mode 100644 index 00000000..4e1ec47f --- /dev/null +++ b/samples/Perl6/List.pm @@ -0,0 +1,699 @@ +# for our tantrums +my class X::TypeCheck { ... } +my role Supply { ... } + +my sub combinations($n, $k) { + my @result; + my @stack; + + return ([],) unless $k; + + @stack.push(0); + gather while @stack { + my $index = @stack - 1; + my $value = @stack.pop; + + while $value < $n { + @result[$index++] = $value++; + @stack.push($value); + if $index == $k { + take [@result]; + $value = $n; # fake a last + } + } + } +} + +my sub permutations(Int $n) { + $n == 1 ?? ( [0,] ) !! + gather for ^$n -> $i { + my @i = grep none($i), ^$n; + take [$i, @i[@$_]] for permutations($n - 1); + } +} + +my class List does Positional { # declared in BOOTSTRAP + # class List is Iterable is Cool + # has Mu $!items; # VM's array of our reified elements + # has Mu $!flattens; # true if this list flattens its parcels + # has Mu $!nextiter; # iterator for generating remaining elements + + method new(|) { + my Mu $args := nqp::p6argvmarray(); + nqp::shift($args); + + nqp::p6list($args, self.WHAT, Mu); + } + + multi method Bool(List:D:) { self.gimme(1).Bool } + multi method Int(List:D:) { self.elems } + multi method end(List:D:) { self.elems - 1 } + multi method Numeric(List:D:) { self.elems } + multi method Str(List:D:) { self.join(' ') } + + # Pretend we're a Match assuming we're a list of Matches + method to() { self.elems ?? self[self.end].to !! Nil } + method from() { self.elems ?? self[0].from !! Nil } + + method fmt($format = '%s', $separator = ' ') { + self.map({ .fmt($format) }).join($separator); + } + + method flat() { self.flattens + ?? self + !! nqp::p6list(nqp::list(self), List, Bool::True) + } + method list() { self } + method lol() { + self.gimme(0); + my Mu $rpa := nqp::clone($!items); + nqp::push($rpa, $!nextiter) if $!nextiter.defined; + nqp::p6list($rpa, LoL, Mu); + } + + method flattens() { $!flattens } + + method Capture() { + self.gimme(*); + my $cap := nqp::create(Capture); + nqp::bindattr($cap, Capture, '$!list', $!items); + $cap + } + + method Parcel() { + my Mu $rpa := nqp::clone(nqp::p6listitems(self)); + nqp::push($rpa, $!nextiter) if $!nextiter.defined; + nqp::p6parcel($rpa, Any); + } + + method Supply(List:D:) { Supply.from-list(self) } + + multi method at_pos(List:D: int \pos) is rw { + fail X::OutOfRange.new(:what,:got(pos),:range<0..Inf>) + if nqp::islt_i(pos,0); + self.exists_pos(pos) ?? nqp::atpos($!items,pos) !! Nil; + } + multi method at_pos(List:D: Int:D \pos) is rw { + my int $pos = nqp::unbox_i(pos); + fail X::OutOfRange.new(:what,:got(pos),:range<0..Inf>) + if nqp::islt_i($pos,0); + self.exists_pos($pos) ?? nqp::atpos($!items,$pos) !! Nil; + } + + method eager() { self.gimme(*); self } + + method elems() { + return 0 unless self.DEFINITE; + return nqp::elems(nqp::p6listitems(self)) unless nqp::defined($!nextiter); + # Get as many elements as we can. If gimme stops before + # reaching the end of the list, assume the list is infinite. + my $n := self.gimme(*); + nqp::defined($!nextiter) ?? Inf !! $n + } + + multi method exists_pos(List:D: int $pos) { + return False if nqp::islt_i($pos,0); + self.gimme($pos + 1); + nqp::p6bool( + nqp::not_i(nqp::isnull(nqp::atpos($!items,$pos))) + ); + } + multi method exists_pos(List:D: Int:D $pos) { + return False if $pos < 0; + self.gimme($pos + 1); + nqp::p6bool( + nqp::not_i(nqp::isnull(nqp::atpos($!items,nqp::unbox_i($pos)))) + ); + } + + method gimme($n, :$sink) { + return unless self.DEFINITE; + # loop through iterators until we have at least $n elements + my int $count = nqp::elems(nqp::p6listitems(self)); + if nqp::istype($n, Whatever) || nqp::istype($n, Num) && nqp::istrue($n == Inf) { + while $!nextiter.DEFINITE && !$!nextiter.infinite { + $!nextiter.reify(*, :$sink); + $count = nqp::elems($!items); + } + } + else { + my int $target = $n.Int; + while nqp::isconcrete($!nextiter) && $count < $target { + $!nextiter.reify($target - $count, :$sink); + $count = nqp::elems($!items); + } + } + + # return the number of elements we have now + $count + } + + multi method infinite(List:D:) { $!nextiter.infinite } + + method iterator() { + # Return a reified ListIter containing our currently reified elements + # and any subsequent iterator. + my $iter := nqp::create(ListIter); + nqp::bindattr($iter, ListIter, '$!nextiter', $!nextiter); + nqp::bindattr($iter, ListIter, '$!reified', self.Parcel()); + $iter; + } + + method munch($n is copy) { + $n = 0 if $n < 0; + $n = self.gimme($n) if nqp::not_i(nqp::istype($n, Int)) + || nqp::not_i(nqp::islist($!items)) + || nqp::islt_i(nqp::elems($!items), nqp::unbox_i($n)); + nqp::p6parcel( + nqp::p6shiftpush(nqp::list(), $!items, nqp::unbox_i($n)), + Any + ) + } + + proto method pick(|) { * } + multi method pick() { + fail "Cannot .pick from infinite list" if self.infinite; + my $elems = self.elems; + $elems ?? self.at_pos($elems.rand.floor) !! Nil; + } + multi method pick($n is copy) { + fail "Cannot .pick from infinite list" if self.infinite; + ## We use a version of Fisher-Yates shuffle here to + ## replace picked elements with elements from the end + ## of the list, resulting in an O(n) algorithm. + my $elems = self.elems; + return unless $elems; + $n = Inf if nqp::istype($n, Whatever); + $n = $elems if $n > $elems; + return self.at_pos($elems.rand.floor) if $n == 1; + my Mu $rpa := nqp::clone($!items); + my $i; + my Mu $v; + gather while $n > 0 { + $i = nqp::rand_I(nqp::decont($elems), Int); + $elems--; $n--; + $v := nqp::atpos($rpa, nqp::unbox_i($i)); + # replace selected element with last unpicked one + nqp::bindpos($rpa, nqp::unbox_i($i), + nqp::atpos($rpa, nqp::unbox_i($elems))); + take-rw $v; + } + } + + method pop() is parcel { + my $elems = self.gimme(*); + fail 'Cannot .pop from an infinite list' if $!nextiter.defined; + $elems > 0 + ?? nqp::pop($!items) + !! fail 'Element popped from empty list'; + } + + method shift() is parcel { + # make sure we have at least one item, then shift+return it + nqp::islist($!items) && nqp::existspos($!items, 0) || self.gimme(1) + ?? nqp::shift($!items) + !! fail 'Element shifted from empty list'; + } + + my &list_push = multi method push(List:D: *@values) { + fail 'Cannot .push an infinite list' if @values.infinite; + nqp::p6listitems(self); + my $elems = self.gimme(*); + fail 'Cannot .push to an infinite list' if $!nextiter.DEFINITE; + + # push is always eager + @values.gimme(*); + + # need type checks? + my $of := self.of; + + unless $of =:= Mu { + X::TypeCheck.new( + operation => '.push', + expected => $of, + got => $_, + ).throw unless nqp::istype($_, $of) for @values; + } + + nqp::splice($!items, + nqp::getattr(@values, List, '$!items'), + $elems, 0); + + self; + } + + multi method push(List:D: \value) { + if nqp::iscont(value) || nqp::not_i(nqp::istype(value, Iterable)) && nqp::not_i(nqp::istype(value, Parcel)) { + $!nextiter.DEFINITE && self.gimme(*); + fail 'Cannot .push to an infinite list' if $!nextiter.DEFINITE; + nqp::p6listitems(self); + nqp::istype(value, self.of) + ?? nqp::push($!items, nqp::assign(nqp::p6scalarfromdesc(nqp::null), value)) + !! X::TypeCheck.new( + operation => '.push', + expected => self.of, + got => value, + ).throw; + self + } + else { + list_push(self, value) + } + } + + multi method unshift(List:D: \value) { + if nqp::iscont(value) || !(nqp::istype(value, Iterable) || nqp::istype(value, Parcel)) { + nqp::p6listitems(self); + value.gimme(*) if nqp::istype(value, List); # fixes #121994 + nqp::istype(value, self.of) + ?? nqp::unshift($!items, my $ = value) + !! X::TypeCheck.new( + operation => '.push', + expected => self.of, + got => value, + ).throw; + self + } + else { + callsame(); + } + } + + multi method unshift(List:D: *@values) { + fail 'Cannot .unshift an infinite list' if @values.infinite; + nqp::p6listitems(self); + + # don't bother with type checks + my $of := self.of; + if ( $of =:= Mu ) { + nqp::unshift($!items, @values.pop) while @values; + } + + # we must check types + else { + while @values { + my $value := @values.pop; + if nqp::istype($value, $of) { + nqp::unshift($!items, $value); + } + + # huh? + else { + X::TypeCheck.new( + operation => '.unshift', + expected => $of, + got => $value, + ).throw; + } + } + } + + self + } + + method plan(List:D: |args) { + nqp::p6listitems(self); + my $elems = self.gimme(*); + fail 'Cannot add plan to an infinite list' if $!nextiter.defined; + +# # need type checks? +# my $of := self.of; +# +# unless $of =:= Mu { +# X::TypeCheck.new( +# operation => '.push', +# expected => $of, +# got => $_, +# ).throw unless nqp::istype($_, $of) for @values; +# } + + nqp::bindattr(self, List, '$!nextiter', nqp::p6listiter(nqp::list(args.list), self)); + Nil; + } + + proto method roll(|) { * } + multi method roll() { + fail "Cannot .roll from infinite list" if self.infinite; + my $elems = self.elems; + $elems ?? self.at_pos($elems.rand.floor) !! Nil; + } + multi method roll($n is copy) { + fail "Cannot .roll from infinite list" if self.infinite; + my $elems = self.elems; + return unless $elems; + $n = Inf if nqp::istype($n, Whatever); + return self.at_pos($elems.rand.floor) if $n == 1; + + gather while $n > 0 { + take nqp::atpos($!items, nqp::unbox_i($elems.rand.floor.Int)); + $n--; + } + } + + method reverse() { + self.gimme(*); + fail 'Cannot .reverse from an infinite list' if $!nextiter.defined; + my Mu $rev := nqp::list(); + my Mu $orig := nqp::clone($!items); + nqp::push($rev, nqp::pop($orig)) while $orig; + my $rlist := nqp::create(self.WHAT); + nqp::bindattr($rlist, List, '$!items', $rev); + $rlist; + } + + method rotate(Int $n is copy = 1) { + self.gimme(*); + fail 'Cannot .rotate an infinite list' if $!nextiter.defined; + my $items = nqp::p6box_i(nqp::elems($!items)); + return self if !$items; + + $n %= $items; + return self if $n == 0; + + my Mu $res := nqp::clone($!items); + if $n > 0 { + nqp::push($res, nqp::shift($res)) while $n--; + } + elsif $n < 0 { + nqp::unshift($res, nqp::pop($res)) while $n++; + } + my $rlist := nqp::create(self.WHAT); + nqp::bindattr($rlist, List, '$!items', $res); + $rlist; + } + + method splice($offset = 0, $size?, *@values) { + self.gimme(*); + my $o = $offset; + my $s = $size; + my $elems = self.elems; + $o = $o($elems) if nqp::istype($o, Callable); + X::OutOfRange.new( + what => 'offset argument to List.splice', + got => $offset, + range => (0..^self.elems), + ).fail if $o < 0; + $s //= self.elems - ($o min $elems); + $s = $s(self.elems - $o) if nqp::istype($s, Callable); + X::OutOfRange.new( + what => 'size argument to List.splice', + got => $size, + range => (0..^(self.elems - $o)), + ).fail if $s < 0; + + my @ret = self[$o..($o + $s - 1)]; + nqp::splice($!items, + nqp::getattr(@values.eager, List, '$!items'), + $o.Int, $s.Int); + @ret; + } + + method sort($by = &infix:) { + fail 'Cannot .sort an infinite list' if self.infinite; #MMD? + + # Instead of sorting elements directly, we sort a Parcel of + # indices from 0..^$list.elems, then use that Parcel as + # a slice into self. This is for historical reasons: on + # Parrot we delegate to RPA.sort. The JVM implementation + # uses a Java collection sort. MoarVM has its sort algorithm + # implemented in NQP. + + # nothing to do here + my $elems := self.elems; + return self if $elems < 2; + + # Range is currently optimized for fast Parcel construction. + my $index := Range.new(0, $elems, :excludes-max).reify(*); + my Mu $index_rpa := nqp::getattr($index, Parcel, '$!storage'); + + # if $by.arity < 2, then we apply the block to the elements + # for sorting. + if ($by.?count // 2) < 2 { + my $list = self.map($by).eager; + nqp::p6sort($index_rpa, -> $a, $b { $list.at_pos($a) cmp $list.at_pos($b) || $a <=> $b }); + } + else { + my $list = self.eager; + nqp::p6sort($index_rpa, -> $a, $b { $by($list.at_pos($a), $list.at_pos($b)) || $a <=> $b }); + } + self[$index]; + } + + multi method ACCEPTS(List:D: $topic) { self } + + method uniq(|c) { + DEPRECATED('unique', |<2014.11 2015.11>); + self.unique(|c); + } + + proto method unique(|) {*} + multi method unique() { + my $seen := nqp::hash(); + my str $target; + gather for @.list { + $target = nqp::unbox_s($_.WHICH); + unless nqp::existskey($seen, $target) { + nqp::bindkey($seen, $target, 1); + take $_; + } + } + } + multi method unique( :&as!, :&with! ) { + my @seen = "should be Mu, but doesn't work in settings :-(" + my Mu $target; + gather for @.list { + $target = &as($_); + if first( { with($target,$_) }, @seen ) =:= Nil { + @seen.push($target); + take $_; + } + }; + } + multi method unique( :&as! ) { + my $seen := nqp::hash(); + my str $target; + gather for @.list { + $target = &as($_).WHICH; + unless nqp::existskey($seen, $target) { + nqp::bindkey($seen, $target, 1); + take $_; + } + } + } + multi method unique( :&with! ) { + nextwith() if &with === &[===]; # use optimized version + + my @seen; # should be Mu, but doesn't work in settings :-( + my Mu $target; + gather for @.list { + $target := $_; + if first( { with($target,$_) }, @seen ) =:= Nil { + @seen.push($target); + take $_; + } + } + } + + my @secret; + proto method squish(|) {*} + multi method squish( :&as!, :&with = &[===] ) { + my $last = @secret; + my str $which; + gather for @.list { + $which = &as($_).Str; + unless with($which,$last) { + $last = $which; + take $_; + } + } + } + multi method squish( :&with = &[===] ) { + my $last = @secret; + gather for @.list { + unless with($_,$last) { + $last = $_; + take $_; + } + } + } + + proto method rotor(|) {*} + multi method rotor(1, 0) { self } + multi method rotor($elems = 2, $overlap = 1) { + X::OutOfRange.new( + what => 'Overlap argument to List.rotor', + got => $overlap, + range => (0 .. $elems - 1), + ).fail unless 0 <= $overlap < $elems; + X::OutOfRange.new( + what => 'Elements argument to List.rotor', + got => $elems, + range => (0 .. *), + ).fail unless 0 <= $elems; + + my $finished = 0; + gather while $finished + $overlap < self.gimme($finished + $elems) { + take item self[$finished ..^ $finished + $elems]; + $finished += $elems - $overlap + } + } + + multi method gist(List:D:) { + @(self).map( -> $elem { + given ++$ { + when 101 { '...' } + when 102 { last } + default { $elem.gist } + } + } ).join: ' '; + } + multi method perl(List:D \SELF:) { + self.gimme(*); + self.Parcel.perl ~ '.list' + ~ (nqp::iscont(SELF) ?? '.item' !! '') + } + + method REIFY(Parcel \parcel, Mu \nextiter) { + nqp::splice($!items, nqp::getattr(parcel, Parcel, '$!storage'), + nqp::elems($!items), 0); + nqp::bindattr(self, List, '$!nextiter', nextiter); + parcel + } + + method FLATTENABLE_LIST() { self.gimme(*); $!items } + method FLATTENABLE_HASH() { nqp::hash() } + + multi method DUMP(List:D: :$indent-step = 4, :%ctx?) { + return DUMP(self, :$indent-step) unless %ctx; + + my $flags := ("\x221e" if self.infinite); + my Mu $attrs := nqp::list(); + nqp::push($attrs, '$!flattens'); + nqp::push($attrs, $!flattens ); + nqp::push($attrs, '$!items' ); + nqp::push($attrs, $!items ); + nqp::push($attrs, '$!nextiter'); + nqp::push($attrs, $!nextiter ); + self.DUMP-OBJECT-ATTRS($attrs, :$indent-step, :%ctx, :$flags); + } + + multi method keys(List:D:) { + self.values.map: { (state $)++ } + } + multi method kv(List:D:) { + gather for self.values { + take (state $)++; + take-rw $_; + } + } + multi method values(List:D:) { + my Mu $rpa := nqp::clone(nqp::p6listitems(self)); + nqp::push($rpa, $!nextiter) if $!nextiter.defined; + nqp::p6list($rpa, List, self.flattens); + } + multi method pairs(List:D:) { + self.values.map: {; (state $)++ => $_ } + } + + method reduce(List: &with) { + fail('can only reduce with arity 2') + unless &with.arity <= 2 <= &with.count; + return unless self.DEFINITE; + my \vals = self.values; + my Mu $val = vals.shift; + $val = with($val, $_) for vals; + $val; + } + + method sink() { + self.gimme(*, :sink) if self.DEFINITE && $!nextiter.DEFINITE; + Nil; + } + + # this is a remnant of a previous implementation of .push(), which + # apparently is used by LoL. Please remove when no longer necessary. + method STORE_AT_POS(Int \pos, Mu \v) is rw { + nqp::bindpos($!items, nqp::unbox_i(pos), v) + } + + proto method combinations($?) {*} + multi method combinations( Int $of ) { + ([self[@$_]] for combinations(self.elems, $of).eager) + } + multi method combinations( Range $of = 0 .. * ) { + gather for @$of { + last if $_ > self.elems; + take self.combinations($_); + } + } + + method permutations() { + # need block on Moar because of RT#121830 + gather { take [self[@$_]] for permutations(self.elems).eager } + } +} + +sub eager(|) { + nqp::p6parcel(nqp::p6argvmarray(), Any).eager +} + +sub flat(|) { + nqp::p6list(nqp::p6argvmarray(), List, Bool::True) +} + +sub list(|) { + nqp::p6list(nqp::p6argvmarray(), List, Mu) +} + +proto sub infix:(|) { * } +multi sub infix:() { fail "No zero-arg meaning for infix:" } +multi sub infix:(Mu \x) {x } +multi sub infix:(Mu \x, $n is copy, :$thunked!) { + $n = nqp::p6bool(nqp::istype($n, Whatever)) ?? Inf !! $n.Int; + GatherIter.new({ take x.() while --$n >= 0; }, :infinite($n == Inf)).list +} +multi sub infix:(Mu \x, Whatever, :$thunked!) { + GatherIter.new({ loop { take x.() } }, :infinite(True)).flat +} +multi sub infix:(Mu \x, Whatever) { + GatherIter.new({ loop { take x } }, :infinite(True)).flat +} +multi sub infix:(Mu \x, $n) { + my int $size = $n.Int; + + my Mu $rpa := nqp::list(); + if $size > 0 { + nqp::setelems($rpa, $size); + nqp::setelems($rpa, 0); + + $size = $size + 1; + nqp::push($rpa,x) while $size = $size - 1; + } + + nqp::p6parcel($rpa, Any); +} + +proto sub pop(@) {*} +multi sub pop(@a) { @a.pop } + +proto sub shift(@) {*} +multi sub shift(@a) { @a.shift } + +proto sub unshift(|) {*} +multi sub unshift(\a, \elem) { a.unshift: elem } +multi sub unshift(\a, *@elems) { a.unshift: @elems } + +proto sub push(|) {*} +multi sub push(\a, \elem) { a.push: elem } +multi sub push(\a, *@elems) { a.push: @elems } + +sub reverse(*@a) { @a.reverse } +sub rotate(@a, Int $n = 1) { @a.rotate($n) } +sub reduce (&with, *@list) { @list.reduce(&with) } +sub splice(@arr, $offset = 0, $size?, *@values) { + @arr.splice($offset, $size, @values) +} + +multi sub infix:(@a, @b) { (@a Zcmp @b).first(&prefix:) || @a <=> @b } + +# vim: ft=perl6 expandtab sw=4 diff --git a/samples/Perl6/hash.t b/samples/Perl6/hash.t index 7bff849e..24ba2b50 100644 --- a/samples/Perl6/hash.t +++ b/samples/Perl6/hash.t @@ -12,7 +12,6 @@ unless EVAL 'EVAL("1", :lang)' { die unless EVAL(q/ package My::Hash; -use strict; sub new { my ($class, $ref) = @_; diff --git a/samples/Perl6/test.p6 b/samples/Perl6/test.p6 index 3d12b56c..65073eb9 100644 --- a/samples/Perl6/test.p6 +++ b/samples/Perl6/test.p6 @@ -73,26 +73,6 @@ Here's some POD! Wooo say('this is not!'); -=table - Of role things - -say('not in your table'); -#= A single line declarator "block" (with a keyword like role) -#| Another single line declarator "block" (with a keyword like role) -#={ - A declarator block (with a keyword like role) - } -#|{ - Another declarator block (with a keyword like role) - } -#= { A single line declarator "block" with a brace (with a keyword like role) -#=« - More declarator blocks! (with a keyword like role) - » -#|« - More declarator blocks! (with a keyword like role) - » - say 'Moar code!'; my $don't = 16; diff --git a/samples/Pickle/data.pkl b/samples/Pickle/data.pkl new file mode 100644 index 00000000..cf451f4f --- /dev/null +++ b/samples/Pickle/data.pkl @@ -0,0 +1,24 @@ +(dp0 +S'a' +p1 +(lp2 +I1 +aF2.0 +aI3 +ac__builtin__ +complex +p3 +(F4.0 +F6.0 +tp4 +Rp5 +asS'c' +p6 +NsS'b' +p7 +(S'string' +p8 +VUnicode string +p9 +tp10 +s. \ No newline at end of file diff --git a/samples/Pickle/neural-network-ce-l2reg-784-10-30.pkl b/samples/Pickle/neural-network-ce-l2reg-784-10-30.pkl new file mode 100644 index 00000000..2ad7bad3 --- /dev/null +++ b/samples/Pickle/neural-network-ce-l2reg-784-10-30.pkl @@ -0,0 +1,60 @@ +(cnumpy.core.multiarray +_reconstruct +p1 +(cnumpy +ndarray +p2 +(I0 +tS'b' +tRp3 +(I1 +(I10 +I784 +tcnumpy +dtype +p4 +(S'f8' +I0 +I1 +tRp5 +(I3 +S'<' +NNNI-1 +I-1 +I0 +tbI00 +S'B\xf9\xc2tq0\xed?\xe7\xcd\xa1\x01\xe7\xb9\xca\xbf\x19X;&x8\xea?\xa9V\xc7\xf2\x81\xd3\xd8\xbf\xaa\xa8fs\x88\xaa\xe6?\x1bC\xde\xe8,!\xf0?\xf3\x10%y\x89\x83\xe9\xbf\xc5\x9dY\t{\x94\xf4\xbf:/\x18\x10l\xd7\xe2?[g\x8f\xa8O\x99\xc9\xbf\xeb\x11g\x06\xe9\xd2\xe0\xbf\xd7\xe6R\x0b\xd5\x19\xe8\xbfF\x90\xef\xfe\x05>\xd9\xbf_\x82u\x8d\xa2\xd3\xae\xbf/\x91\x97\x8b>I\xca?f\x9a\xb7\x15O!\xd0\xbf|\xff\xfe\x98#\x1f\xd2\xbf\x98J@kO\xa6\xe4\xbf\x90\x94@ \x82\xbf\xd9?=2\x1f\xc7\xcbi\xf1?\xbc\x07\x9cJj\x96\xed\xbf\xc0\xf2c\x8f\xb4\xc3\xca\xbf\xb8):\x0f\x8e\x00\xe1?\xc6\xfe\xae\n\xc0M\xce?\xf0hf:]#\xd1?\xd6f9_\xf0\t\xe4?\xbd1\x8b\xf3T7\xf3?\xcfCX\xbfQ\xf5\xec\xbf\xaaP^\xaf\x00\xe0\x8e\xbf\xa4\x122FP!\xd4?\xcf\xa5>\xa6\xee\xc0\xd9\xbf\xeb\xae\x90\xd2*\x05\xdf?\xb2nPzh\xa0\xf3?d\xf8\xa8P\xf9d\xb6?\x1e\x8b\x1b\xfe\x9e\xf2\xc6?\xb8\x92.\x1c\\1\xd3?`hs\xc7;T\xd2?MQ\x99+\xfc\x9c\xf0?;\\F\xf40=\xb9?Y\xbc\xd4\xb5\xf9\xe6\xa5\xbf?\x02\xf4\xa6\xc6\x9d\xe5\xbf\xe0\x94\xf0\xef#\x7f\xd2\xbf\xf2\xd7\\I\x8eh\xc8?\xf1\xd9S\xf1-\xef\xda\xbf\x1e\xe9\xbeZ\xbav\xff?n\xb7erb\xdf\xbe\xbf\xc8\xa9d\xe9\xb1\x81\xf1\xbf\x0f\x81\xa5E{\xfc\xd1?*\x8d\xb8s\x05T\xef\xbf\xf3.s\xf0\x1e\xe8\xdd?\xcab\x0cT\x1bZ\xe9?\xc4\xf3\rQ\xdd\x10\xd8\xbf\x1eHe\xc2\xca\xca\xda?\xbdq\xe9p\x96{\xdf\xbfD\x05\x0eI\xe6V\xc9\xbf\xcf\xf5\\v\xce8\xea\xbfbV\xd5;\xb5k\xf2\xbf}\x90\x1b|\xd4g\xe0?\xce\xac\xc0\xa9\xe0\x9d\x90?+\xf3W(\x01u\xdb\xbf\xac\xa19"D\x7f\xdd?\x1d\xf2\xfbmJ\xb8\xdd?fv\x8c\x0bt\x18\xf0\xbf\xff\x94hIJ&\xe8?\x87\xf4\xb3K\xdbC\xdc\xbf\x1a9G\xc1p\xa0\xc2\xbf%^ZX\xaa\xbd\xda\xbf4\xdf\x9f\xac\x10!\xe2\xbf\xc8:$\x03\xb3\xce\xc4\xbf\xa7,\x11\xf4\xf9\x14\xe5\xbf\x97\xb2\x8ez\xe4w\xdc?T0\xedSI\xdf\xd5?\xc5\xd8W0^\xce\xc4?\xee`\x867\xdb\xb4\xe7\xbf\xc1F\xf1\x00B\x10\x03\xc0\xf1\xcd\xdeM\xb7P\xf1\xbf\x07\xb7\x80KIn\xf6\xbf\xeb2\xc3O\x95\x9b\xb7\xbf\xa7s^\xa5x\x05\xe2?^\xd3\x1b\xbbA?\xf4\xbf\xfc+U\xb0M\xa8\xd5?\x1d gm$\xf4\xda?\xa7"c\xaf\xbf\x04\xe1\xbf\xb6U7\xde3v\xb9\xbf\x81"\x95\xe7G\x14\xc4?!^S,\xb60\x01\xc0i\x08&\xf3\x8d\r\xd0\xbf2\x05^w\xe7\xdf\xb7?w\x84}n\xd6\xcd\xe1?\xb3\x98\xfbN\xfb\xa2\xee?S\xab/\xef\x7f\x12\xf3\xbfWw\xf4\xfez\xae\xeb?a\xa5~\x19&\xec\xf3?\xb1\x08\xfe\xdd-\'\xd3\xbf\xbe\xe5i\r\xca\x90\xe9?\xf0\'T\xe3\xd1j\xe3?uH\xe3\xea8\xcb\xc0?X\xaf\x86\xa6\xe3\xb7\xf4?\xb7\xcc\xael6\x7f\xda\xbf\x06\x87a\xe2\x0e\xf0\xb4\xbfnWl6\x1b\x9e\xe9?\x97\xfb\x91X2\xf6\xb0\xbfT[\xea\xc0\xdfr\xe0?\xba\xd5\x00U\xc5B\xe3?n\xa4V\xa8\xa4z\xd0?\xf4#/,!\x92\xf2\xbf\x82\x83\xae\r\xa6\xec\xea\xbf\xa7t\xbbi\xdb\xf5\xb2\xbf\xd4Wr\xc2\xb0\x93\xcc?\xe2\x03gt\x0cr\xf0\xbfJ\x03\xf6_\xe4\r\xdf?\x8a\x83u#\xfe\x85\xe4\xbf/lf\xbe\xf3\xde\x94?\xbd\x99#\x10\x0c\x90\xf7?\xfd\x832\xfa([\xe5?R\xd9\xa6\xbf-$\x19\xfa7W\xd8?\xe6\xc8\xc6\x8d\x19u\xe4\xbf*\xedf\xd1\xab\x82\xe2\xbf\\7<\x97\x84\x84\xcf?\xc8\xce\xdc\xfb\x1f\xca\xee?\x98\xcbC\xb7\xf2\xac\xe6??\tKt\xbc\x8f\xf9\xbft\x98\x15\xc2\x84\xac\xfa\xbf\x93\'\xc6\xe6\xc5\xc3\xf7\xbfv\x9eLu\xdbq\xf6?H\x85\xf5e\xf0\x85\x8b\xbf>\xd9\xfas\x15%\xf2\xbf\xe4\xcf\x9e\xad\xf6\x96\xf4?_(\xfa\x94o\xbc\xe6?\n\xb0\x0cC!\x8e\xfd?1\x04lY])\x01@4_\x1bdyP\xe6?\xf8\xf1CG\xfe\x91\xe0\xbfD\x8c,\xdb\xcf\x14\xc2?\xe9N\xf1\x926\n\xdb?\x01\xed,\xba\x1dp\xe1\xbf\x87\xed\xd2\xcb\xe6\xc5\xde?(\xca\x9f\x02\xb7\xba\xcb\xbf\x179\xf7\x9c\xca\xa1\xe5?\x1d\x93P\xdbV\x1f\xf0?\xe0\xd2\xb41;\xf1\xfa\xbf+\x81M9\x88\xa0\xf5?\x9b\x01\xdb\x14g\x85\xc4\xbf\x82\\\xd7\xad-\xc6\xee\xbf\x85\xc9\xa2i\x95\x03\xe1\xbf\x04\xa0\xcb\xc1\xc7{\xde\xbf\x84()\xa4\xd8\xe9\xf3\xbf\x97NY\x85\xa3\x8e\xe0?\x0f\xf5\xaa\x1c\x1a\xe8\x00@4\xf9+\xce\xab\xdc\xf6\xbf\xf1\x98D\xa6\x07\xe3\xe1\xbfT\xa3A\xa7\x95\x17\x01@\xc8iPOe\xc2\xfc?\xdb(l\xd7o\xd3\xff\xbf}\xd1\x17\xee \x00\x02@\x95\xe0\x93X&\'\xcf\xbfgF\xd9(\x9f\x02\xe0?p\x9a\x9a\xc2\x12\x8c\xf9?\x9c\x7f\xed\x93\x11R\x00@\xcby\xd3\x94\xc7\x91\xea\xbf)\xea\x93\xfa\xc1+\xf2?\xe0\xd5\xd7\xd2\x99\xe7\xe2\xbf\x0b\xdf=`T\xbf\xca\xbf\x84\xed\x92\xef\x8d\x0b\xd9?\xc7\xa9XI\xfeH\xeb\xbf\xebJ#\xbd\xa3`\xf0?\xc5\x82\xb8\xf7\x12\xb4\x01\xc0\x0c\xaa\xdb\xe5\xe6\xff\xf5\xbfx\xceQ\x11]\xee\x01\xc0\xba*\n/\xa7\x15\xc7\xbf\x89\x1bC\x8e\xe7\xc9\xec\xbf\x1e\xcb\xeb\xc3\xcdb\xe6\xbf\xcf\x9c\x1f\x0e\x04\xe0\xf0\xbfvV\x05>\x8c\x12\xd8?\x08b\xc9S\xd5\xd3\xff?\x80S\xe4\xddP\xed\xfc\xbf\x99\xa0W\xf7O\xa3\xce\xbfj\xe2\xde\xb2\x1c\x1f\xf4?\x13\x00p\xb7\xe72\xa9?\xdf\xaal\xcfo1\x06\xc0\x024}C\xdd?;Cr\xff\xd8\x11\xe6?\x10\x02k\x80U/\xf9?\x14\xc8_~1\xf1\xa3?0\xa0\xb76\x05\xa0\xe5\xbf@\xf8F\xfa\xe1\x84\xb0\xbf\xa4\x04\xadTx\x80\xc2\xbfP\x82F\xc0\x1eW\xde\xbf\xc8\xbd2K\x1e\xd6\xd4\xbf^X\x81\x0f\x99#\xf8\xbf\x07]}\x11\xff\x95\xd0?;\xafZ\x0e\xc8\xb6\xd5?*I\x9d\xb0\x9fU\xcd?ct}\x1f\r1\xef?\x08\xaa\xc1\xbdQB\xfa\xbf\xf7\x10\xce\xe4\xc7-\xe9\xbf\xfb\xack`w\xd2\x0c\xc0c\xf4<\x13\x8a\xf8\xce?]\x0ei\xe2Fu\xca\xbft\xadq\xe0\xa7\x04\xe9\xbf\x06|\xb1\x0b\x8a}\xe4?\x0e\xefe86M\x05\xc0\xa9n\x87\x1d\xc0U\xe2?\xc0\xc1\xc4x\x95\xb4\xbd\xbfR\xfc\xf4\x0b\xb4Q\xd5?\xfc#\x86\x0c\x8d \xf1\xbf\x1c75\xe1C\x8a\xf0?\xca\x9e\xa2\xd2\xd7\xa4\x04@\x9fP\xd1S\x12\xa9\x10@\xaaw\x94\x97\x95\x18\x00@\x9a\xb7Fz\xbcZ\xf0?g\xa9\x95\xb0=|\x93?s\x13\x9f\xf0}1\xa5?\xac\x8c\x95\x95\xd0w\xff\xbfJ$Sk;\x00\xec\xbf\xd4\xc5\x0e\xb6\xbb\xe4\xf1\xbf\xa8E\xf3\xbe7\xcc\x04@\x92+\xf2\xc2s\t\xe8\xbfN\x12\xf9\xcf\x91\x0e\xba\xbf\xda\xe0\x06\xcc\xd5\x1f\xc1?\x88\x027\x94\xa6\xd5\xd4\xbf\xe6\x95\x0cs\xf5O\x0b\xc0M\xad\x11<\x04r\xd0?\x8ac\xb8\x05\xa18\xf2?_>\xf7w\x843\xd0?\x03\x08a7\xd4\\\xfd\xbf\x8d\xd3\xaf]\xe5\x9c\xb0\xbfqZ\xb6AK/\xa7?)\x8f\xf9z\x8a\x96\xc9?\xeaE\x8er\x8d>\xf9?\xf8w\xed\xde\r\xed\xe9\xbf8\xf5\xbbD\x0e\xdd\xe1\xbf4\x82\x0c:\x0e]\xe5?\xa8\xc4\xad\xa0e\xbe\x06@\xbf>\xc6(\x81\x00\xed\xbf\xc7\x921\xc1*\xb0\x06@\xb2\xb6k\xc7\xfe\xe7\x15@\xdf\xa7\xb9\xc7\x03~\x0b@\xceP\x1f\';A\xf7?\xbe\x8eAL<\xfd\xf3\xbf\xf5\xd7\x87\xbf\x15\x13\x9e?+\xcc\xb4\xce\xfd\xad\xb2?b\xe5\x1e\x88o\xe3\xef\xbfim9aR\xc4\xf3\xbf6\xaakxf\x80\x93?\xb9\xa8\xfd\xa2\xe6~\xf5?g\xae\x19=yW\xfe\xbf\xbe"m\xe3\x85<\n\xc09\xdf]\xb7\x83\xa1\xda?\n\xb1\x89\x90\x9e\x97\r\xc0\x96\xad\x05\xc4@7\xc6\xbf\xee\xa6\xf6~\x95/\x10\xc0<\xb2\xd6\xfd\xa2\x86\xd3\xbf\x940\xfe\x93\xd51\x03@FS\xb9;"\xa7\xd3?9\x1f\r\xaa<\xb9\x0c\xc0z\xc4\rq\xc4\x1f\x03\xc0\xa6\x8e\x15_\xd0\xeb\x06\xc0\xf3\x0eX\xfc\xdd\xd4\x05\xc0\n\xf7J\xa6L&\xea\xbf\xa6\x87\x96\x18\xe4p\t\xc0\xd7\xdbPz\x1aN\xfc\xbf\xf7.-\xef\x95\xdd\xec?\x03\xfa\t4xh\x10@c\xc7s\xb4\xd5\xe8\x10@]\xe7!?\xb0\xec\xee?b\x8e\xb2A0\xf6\x01@K\xb7\xf811\x07\xdc\xbfi\xfaE\xf7\xa8\x16\xfc?\xeav\x84gWW\xf7\xbf\xc1\x99x\x8f\xbf\x1f\xd7\xbf\xfa\x98\x9e\xed\xac\xaf\xc0?C\x90\xd7\xb2\x13\x96\x0f\xc0\xba\r\xbfT\x07\xc4\x98?#\x80\x19\xf8y\xc8\x05\xc0v\xf0s\x97c\xca\x02\xc0\x99\x89A\x85\xfd\xce\xc4\xbf\xa6\xbeV{y\xd5\xde\xbfq45\x8d\xffu\x02\xc0N\x0f\xddt\xeb\xdc\xff\xbf\x0f\xad,b\x96.\xdb\xbff\xcf\xcf\xe5\r5\x07@\x06Q=qm\xcc\n@\x84\xdf\xbe{\t1\xf2\xbf\xc4\x8a:\xae:\x1d\n\xc0\xb0T\x1e~\x844\xf7\xbf\xc1m\xc2\xbe\xc0Z\xff\xbft\x1b\xea\nFT\xe5\xbfz\xed\'\xce\xbdA\xe8\xbf\xd5\xfc\xe2\xd1$\x98\xf2\xbfrI2\xa3\xca\x0c\x01\xc0J6~\x8548\xfd?\x8eH|\xf7\xcbL\x10@\xfc\x02e4x)\x01@\x80\xeb\xdf\x14\xfa\x95\xe9?\xce9\xce\x8f0*\xe5?\xaba\xb6;Y[\xed\xbf8\x89\xe12\xc7\xb0\xd4\xbfc\xfc\xa8eE\xc4\xf1?P\xba\x1f>z\xbd\xb2\xbf\xa7\xfb\x05\x13\xd3\xe7\x11\xc05a\x87\xc4\xea\x88\x0b\xc0g\xc3)\xd6M\xf2\xf9\xbf\xec\x18a\x10^w\x02\xc0\x0b\xa4\x12\xd8\x92\xf5\xea?\x97\xe1\'\'\x99\xa7\xe4?\x02c\xcd~\x1f\x11\x00\xc0a\x82\x85Q^\x97\x01@\x8d\x97|\xfdz\x03\x07@&\xeedI\xcb\xd5\xfe?\x07\x17\x1e\xb7\xed6\xdb\xbfv\xa4\xa5y\xc0\xe2\xf6\xbf\x0f\xb2:\xeb\x1f\xd3\xd7\xbf\xa2\x14M$}\xb6\t\xc0\xdf;g\xd8\xa2~\xed?#r\xdcR\x94\xfb\xf6\xbfc\x1f\x82\x17\x0e\xdc\xf9\xbf\x80\xe7\x08\xe26\x15\x0b\xc0M\x91\x1e\xd3\x99\x98\xf2?\x9fn\x81\xd7b\xb5\r@X\x93\xeb<2\x85\x03@\xc9r\xea\x00\xce\xb7\xf2?\x8c\xc4It\xb5\x8f\xb2\xbf\x0e\xe6\xf5\x81\xbc\xed\xce?\xac\xf0r\x0b\xa8\x8e\xf5?7E\x19\xaa\x115\xee\xbf\x9a~j\x97\x95)\xf1\xbf\x8de\x11\x9d\xad\x8e\xcf\xbfU\x18\x87\x9e\xd5\x9d\x05\xc0\x96\xb0\xde\x17\xab\x8f\xc4?\x19i\x1f.\x07$\xf0?\xa6Kv\xbdFh\xe4\xbf\xc4V\x99cCh\xf6\xbfiT\xfaXw\x8c\xc5\xbf\x8f$\x84\x8d\xcf\xea\xea?\xe7\x8e\x13\xf0\x936\xf9\xbfcn>\xd9\xaf\xfb\x00@r\xe8\xe1\xd3\xdbu\xf1?\xab\x82\xef\xd2\xfb;\xf6\xbfJ\xd2\xc3j\x7f\xbb\xf5\xbf\x07\x04\xb0C\xfb\xb7\x00\xc0\x0c\x82\x0e\xcc\xd8\xf9\xe8\xbf<\xfbh\xb5wJ\x0f\xc0h^\x83\x93\xc5\xe5\x11\xc0\xa1\x95\xfe\rqi\xfe\xbf\x03\xcb\xbd\xb4\xf0)\xf4\xbf\xc5\x17q\x89\x0cd\x08\xc0\xaa>_=\x05\x9f\xfc?\x99\xb9W\x89\xc2\xee\xf2?Qt\'C\xdb\x0e\xf5?\xbe\xac\x9f\xc4\x1c\xad\xe7\xbfd\xac\xa4.\xc9\xac\xe3\xbf\x15W>m\xd0\x0c\x99\xbfv\xf6./\x82y\xd0?(o+L\x17O\xd6\xbf\xec\xfd\xd1P\xb9A\xe4?QAY$v\xf3\xf2\xbf\x90<\xc4\nG=\xe9?\x04\xa7eI\x14\xd4\xcf\xbf\x033\xf4\xfbB\xad\xe1?\x03^$d\xa1\x9f\xc4\xbf\xed\x1c\xdb&\xd1q\xf9?\xab\x1b\xce\x8a\xcc\x05\xf0?A\x060\x87&\xa7\x08\xc0U\x08\x14\x0ci=\x0c@\x88\xde\x8e:[_\xfd?\x1d\xe4Ju\xe5?\xef?\xa0E(|z\xec4\xfd\xbf\xb9\xe0\xe37\xa2=\xd2\xbfh\x9c\xc0\xf3\xfa\x9b\xfb\xbf\xeb\x0c\xddR\x8e\r\xfc\xbf\xb0u\xf1>\xb9\'\x10\xc0\xc9I\x14\x935\xe0\xe5?\xe7\xcb\xcc\x86\x86+\r@\xcf]\xe6\xa1\xa2\xa4\xef?\xfc\x8c\x82\xd9\xc2\x9c\xd1?V\xacJ\xef\x13\x05\xec?\xf0\x08G\'e]\xe4\xbf\xda\x165\xf88]\xd1?\x8crAl\xec\xba\xf1\xbfW\x1c\x07G\x12\xb4\xfa?\x88\x108^\xd5\xcb\r@Y\xc6\x00\xad\xc8&\xf2?\xc0a\xd5\xefs\xaf\xc6\xbf\xef\xeb\x98\x85\x19\x04\x02\xc0b\xd9d\xb4i\xaa\xe7\xbfI\xa0\x96\xbf\x8f\x93\xb8?\x0c~$\xd8\xc0\x94\xf4\xbf\xa0]:\x1b\xf0\x1d\xf0?X\xf4G\x8a}\xfa\x03@:\xdd*\x0b_A\xea?\xda\x1a\xe1*|\x85\x00\xc0\x02\x10j\x14\x88\x10\x07\xc0\xa5\x84\xd1"<\xbd\xf3\xbf\xf0e\xf3\x85\x10c\xfd\xbfM\xdd+8\xff\xad\xf7\xbfb\x00\x1f\xbe\x0c\xef\xf9\xbf\xd6\xa2\x8d\xb9\x86\x83\xfe\xbf-\xe0\x1cuo\xee\xbe\xbf+[\xc7jL\x0b\xf4?\x89M#c\x1b7\xc6?\xd4\\\xdd\x836\xe5\x01@\xab\xeb\xfeB\x16V\xe9?\xe8\xfe\x95)=C\xf3?\x1f\xfb\xc3\xf4t\xba\xbd\xbf\x84\x10a\x13\xba/\xb4\xbf\xe4r\xb5l\x08\xd8\xa4?\x0cT\xa4\x07\xcaJ\xda\xbf\xd8\xa8|Q\xbd\x1d\x06@/\xcb4y\x82Q\x03@\xe8\xb8\xad6\xc7\xa7\x08@\xc9\x01\\\xc6\x1dn\x00@\xd2\x1f\xa3\xc1e\x81\xf1\xbf\xaa\x1e\x1cY\x9c\x91\xeb\xbf\xff\xd2w\xba\xbe(\xd8\xbfs\x10.\xfd;\x9a\xf2?\x90F\xb8\x9a\x89r\xee\xbf\x8265f\x1aL\xe9?\xb0n\xf3\x00\xdb*\xfa\xbfL\xbf\x877q\xb2\xe6?D\x13rg{\x91\x03\xc0:\xe0\xe9\xd2\xef\\\xaa\xbfz<\xb6\xa7E\xf6\xd6\xbfw\xde\xe2\xba\xc6\x01\x07\xc0q.\xd2\xda\x7ff\x10@"`\x9b\xc5\x90G\xb8\xbf*0rV\xd8O\xb9?\xee\xbf}v\x08=\xef?IH\xb5TBx\xf5?\x1a\xa3rh\x1a\n\xfb?\xb8U\x9c+\x9c\x9e\xdc\xbf\xb7\xc1c\xe1\xdb\r\xef\xbf\xe0/\x82QgZ\xb3?\xa6\xe2\x17\xbc\x05]\xdd?\xa9l\xdf?\xb1\x9e\xda?\x8c\n\xee!gd\xe7\xbfK\xac9>\xf5!\xe9?\x07Q\x02s\xdb\xfb\xe4?\xa2z#\x19\n\xd7\xeb?\xa6kC_\x9b\x8a\xe2?0\xcf\x94\xadg\xf1\x02@\xdei1\xcf@I\xf7?o\x8b\xf2$Z\x83\xe6?\xeeb\xd0\xb3\x91H\xd8\xbf\xd1\xc0\x0ck^\x95\x01\xc0\x96\xf21)`\xb9\xeb?l\xed\x89\xdf\xee\x08\xf0?\xddZ\xb5m\xfcQ\xf5?4\x18w\xa0\xbe\xf9\xf6\xbf\x1b\xa7\xff\x1d\x08\n\xec\xbf\xaa\x08\x85\'R\xac\xc3?\xcd\x8es\x87!T\xfe?X\xbb\x8e[\x9e\x89\xed?\xdf\x8b\xf9T\xe0G\x03@}\xcer}TM\xeb\xbf\xe1\xf8V\xb9\xd8J\x0f@\xe1Zv\x02\xa1m\x12@p\xb4\x0be\xf7\xa7\x10@\xc4\xb7\xf9!m\xb9\xf7?\xf2\x93\x83\\\xe6W\xff?@s\xc2\x92\xd9b\xee\xbf\x03\xeb%\x8b\xf0\xed\xc6\xbf\xa1\xe2\xc9\xcf\xfa`\xdd?y\xddyAR\xc5\xd2\xbf)\x9cScA\xd6\xc9?\xfc\xc4=4\xd5\x8f\xc7?\xd9]\xbd\xef\x01)\xe0\xbf\t\x05`j\xa11\x0f@\x8c\xb7\xf2\xfb\xea\xd0\x04@\xc5\xee\xf2\x9e\\i\xf0?\x1c\xc8\x01y4\\\x13@\xca,\xf74\xf3C\xff?-f\xac\x07\xdb\xce\xf6??\xef\x9b\xd2\xaa\xa1\xd9\xbf\xbc\x1d\x9a&v\xef\xa0\xbfC\xde+k\xa9s\xea\xbf/\x1b"c|\xd7\xe5?d=zH\tJ\xea?\xd2?\xb1rKp\xf0?4@;<\xc5l\x03@-\xd3r\x1co\xab\xed?p\xcb\x9e\xca\x94\xb8\xf9?X\x112\x18\x02H\xde\xbf+!\xa8I\xba.\x10@\xd7\xa3\xc3\xaf\xd8\xe5\x13@\xdf\x8c\xe5\xb4\x0fH\t@}Z\xb3m\x14\x9e\xeb\xbfJ\x1e.\xde\xc2@\x00@\x05\xa8\xd6\xc8\x1b\xa1\xce?\x9d\x12\xdd\xa3\x1b\xe4\xe8?\xeb\x03\x91\xb7\x1d\xb5\xd6?I\xa2V\x8b5\x1d\xf0?6U\x96\xafH;\xf5?63\xb9\xf4\xc0.\xe5?\x92\xe8\x9a0\xda\xe7\xf6?\xf9\x01T\x87UV\x11@\x8a\xd9\xcb!\xc1W\x18@\x94\x1f\x1e\xb40\x9a\x14@\xc8\x8be>-&\x12@\xc6\x9bx\x86\x15i\x06@\x06^\xcer\xb0\x94\x03@\xa2\x1er\x8f\xd8r\xff?\xb5\x06\x17\x81\xf6\x17\xc7\xbf$\xcc\xb2\x14\x03\xb4\xef?QY\xfe\xe3b\xc9\x0e@\xe8|\x8e\xcc\t \x05@\x05\xb4\xa2\x9bQZ\x04@\xb8\'\xa7Vrh\xfc?n\x82\x9c\xd7\xe7\x03\x08@)\xdeo\x07\x93-\x10@\x8aO\xe5\x97\xb56\t@\xd3\xcd\x12X\x01m\x0b@\xb2\x16H\xeb"\xb7\x06@,6\x91n\xcc\xcd\xd5?\xe9\xc1X\xf9\xf6\xa0\xf1?\xc3\x06\x056\xc3\xf0\x94?\xb7m\xef\x99\xc5%\xf3?1)\xb6\x17*\xb1\xf8\xbf\xbf\x95\xce\xd5\n\xe5\xdc\xbf\xd2\xeb\xfe\xeb\xbd\xbe\xd8?\xeeo~\x0b\x0cV\xf5?|\xf5\xf1\x13\x08?\xef?d\x0f\xc3\xbaN\x83\x01@\xbe\xcc\x8c\x91\xab\x1a\x12@\x99\x9e\x83\xda"\xb9\x04@\x86\xaa\xdd\x96qB\xff?\xac\xf2\x18`\xf7?P\t\x97%80\xff?\x8f_\x11\x0cEZ\xef?\x91\x8aR\x17\x1e?\x10@\xe7)}4\xe8\x15\x06@\xe1\xcf\xdb\xa2\xfc\xc3\n@\xd5\xd7\x99v\xdf\x9c\xf8\xbf0\x7f-T\xfb\xf0\xd1\xbf\xcf\xa7\x02T#r\xe6\xbfi6r=\x9b\x1ew\xbfW`C\x03l\xad\xdf?\xc4H\t\x16b\x10\xcf?\x1aj\xb1\x10\x95[\xd0\xbf2\x94\x06N\x98\xa4\xea?\t|Ql\x14#\xfd?\t\x813 \x1c\x80\xc9?\x99\xc0\xf7,\xc4K\x9f\xbfT#\xa1\x1c3\xbb\xea\xbf\xb6\x19\xf6\x98\x89\xd9\xf7?\x83\xf6\x87L\xca\x95\x02@\x8c\xe6\xe0\x9c\xd6\x81\xf1\xbf\t\x8a\n\x94#\xe2\xbb?\xe1\xb7\n\xf3\xc5\xe3\x00@6\xe1=<\xad\xc1\xd2?\x96.\x1bh\xd4l\xea?\x06\xb0*\x19\xd49\x01@\xd4\x90\xd0;\x1ak\x10@j \x02\'[:\xe0?\xc8\x10\x8aOW\xc3\x02@\x96\x00\xdd\xe6\x13\xc4\xe9?\xbf\x95\xd0\x0f\xba\xf1\xe6?\xb7-3\xa8-\x89\xf7?0\xe5?\xc0Y\xfb\xfc?\x1a\xe5:\x177E\x07@\xb5Xn%\x7f\xbd\xe6?\xb3:\x99\x1a\x83*\xf3?NvfY\x01h\xe4?\xd6@;\xe0\xc1\xff\xe7?BOi )A\xdc?!5\x1aT\xf1\xec\xd1\xbf7g\xf4@1x\xf3?\xee\xf8\xab\x1a&\xee\xee?\xd9&\xa0\x9e\xef9\xe2\xbfB\xf3\x0bC\xbbi\x00\xc0\x02V#\x1d\x1az\xf7\xbf\xd9a\x84\xdc\x8a\'\xbe?\xf4\x8dMWH\xb0\xe5?s\xee\x00\x80Q\x89\x04@\x15o\x1f\x03\x1d>\xd8\xbfq\xbb\x85\xd5\xd1\xf2\xff?<\x13T\xd19\xb6\x04@N\x17\x1c\xde\x08m\xfb?p\xd9h7\x1d\r\x14@\xa8v\xd0Z\xe7c\xe8?A\xf5\'\xc2\xceP\t@2\xf9\x9aZ>\x92\xec?"\xca\xc4\xac>"\x06@\xe8\x1d\xa0\xbe8\xab\xff?\xf0\x1aS\x99\x0bk\xf1?u)\xaa\x01\xbao\xf6\xbf\xb0_\xc8\x1cF\x9b\x03@x\x01Q\x02\x12\xdb\xcf\xbf\xf1\xe9C\\\xf7Y\xd5?\x12\xa6\x84\xea\xe9W\xc3\xbf\xf90\xa95\x05.\xdb?\x85}\xcc5\xfb\xaa\xce?\x0f \x83\xc2AP\xeb?b\x05\xef\xcc\xeeP\xb2?B\xdb\xf9\xe1\xf5\x9d\xcb\xbf\x8b\xa2/`\x0c\xe2\xc6\xbf`\xdd\xa1\xb4\xc5\x92\xf9\xbf=2\x1fL\xfe\xd2\t\xc0[\xf1nPhY\xff\xbf\x17\xbb|B\x94\xbb\x00\xc0\x99\x1f\x1bk\xc7\xce\xf9\xbf\x94\x02\x83\x96\xe6\x1f\xd3?\xaf\x1a\xa3B1\x95\xfe?_\xd5\x89r3e\xe3?\x85\xdaW\x83\x9dZ\xea\xbf]\xacJ\x1a\xb8\x07\xd5?\x00\x01\x1e\xd8YT\xe0\xbfR\x80\xa1\x90\x9bj\xf1?\xe3\xcd\x99n\xeb\t\xf9?`\xb7E\xe7U\xc1\xe6\xbf\x02\x88\x0c\xbc\xdc-\xe0\xbfk\xb4F\x17\xf7\xf8\xe4\xbf\xb6\xdf\xdfu\xfbf\xe1\xbf\xbf\xc5\xd3\x97!{\xf8\xbf\xd7\x90P\x8e\xf4m\xc5\xbf\x93\x1a\\\xd8\xb7\x90\xe2?)k\xbe\xefFW\xa3?\xaa\xcep\xb6\xcc\xee\xf3?\x81\x11\xb1\xd9mk\xe2\xbf+\xd0P]\x00p\xd0\xbf\xbb\xd2\xaf\xf8P\xbd\xf4\xbf\xf22n\x01\x01\xbc\xc2\xbf@\xdf\xb1\xce\xe1i\xd3\xbf++\x00\xd7\xbfo\xda?\xf9L\x03\xca\\*\xd6?\xe5\xbdS\xd5\xbe8\xc0\xbf\x95\x99Ui\xdaZ\x00\xc0q\x8a\xd2\x96\xe6\xd5\xf9\xbfm\xb9\x01[\x95\x10\x00\xc0\xbc\x10\x05x\x9f-\x13\xc0\xbbd\xbc\xb9\x8e\xfe\x05\xc0Y\xc9\xd91\xdc:\xea\xbf\xce\xf7(\xf8\x94\xdb\xeb\xbf\xea\xb8\xc9\xce\xab\x87\xb3?e\xc1\xae\xe5\x86>\x04\xc0Ks\xd0\xfcp\x87\xc2?;9\x1b\x0f4\xb8\xd8\xbf3\x86\xf6\xa5\x80\xae\xfd\xbf\x9a\xb8\xb3\x1c\x87\x9a\xe9\xbf9E\xa7\xfaq\xd4\xf2\xbf\xda\xdc\x874\x94\x91\xe6?\xd1g\xb8\xa4x\xad\xe4\xbf^\xbf_\xcd\xbf\xb0\xc6?<\x85&6R\xa5\xe5\xbf\xaa"\xcbG-\x1a\xf5\xbf\x88\xd2\x11T\xb5\xe5\xe2\xbf\xec\x127\x1f\xc5\xc0\xd9?\xdaB\xc5\x07\n\xe3\xe5?3\x0e\xc7_\x92\xeb\xf0?\x19\xb3\x1f\xeeRY\xc3?\xfa\x01\x9d\xa3\x9bf\xf2?W\xb6\x10\xfee\xab2?5A)\x05\x15\x83\xe6\xbf\x05\xb7\x0cO\x81\xdf\xd6\xbf\x0bim\xfb\xbcX\xf8?7\x8c\xfd\xea\xadQ\xd1\xbf@\xb7K\x18\x10$\xea\xbf\xb3\x8b\x86\xed\n\x98\xa4\xbf\xe7\x10\xa9-@\x06\xe5?E7\xb0\x83\xfe\xe5\xe6\xbf\xa9\xd3\xbf\xd0a\x04\xed\xbf\x069\xc1\xb46\x1a\xe4\xbf\xc9-\xf2\xc3\xac\xe9\xe3\xbf\xd5\x7fA\x8d\x97\xca\xec\xbfs\xf8\x8c\xbe\'\xf4\xc8?\xbd\xef\x8aM\xa23\xf3?\xe0U\xc4\xc3!\xfb\xc5\xbf\x8d\x8f\xaaO\x0fp\xe9\xbf\x8e#\x19\xb5\x0bO\xe6\xbf\x88,dLk\xf2\xf2?\\s\xf7=\x05\x8e\xd6\xbf*\x04\x8b,N\xfa\xe6\xbf,\xf8\xb8\xe9I\xda\xd4?l\xd19\x1dqJ\xf7\xbf\xdd\xc1u\x17 \xcf\xe0?\x00\xc4\x8a\xbc \x12\xc7?@\x02\xe3\xec4\x1b\xe7?\xa3,yQ\x02\x07\xc3\xbf\xbf\xc0\xa5\xb7\xc6K\xe6?\x8d\xf4\x02 vC\xe5?m\xe9Lf\xc7\x90\xf2\xbf3\xfb\xec\x1am\x1es\xbfP\xe7fr@\xc5\xeb?8\x8eu\xea\xd9\xeb\xea\xbfI\xbd\x9d\xde\xb30\xda?\x19\x89\x82\xef\xc5\xd7\xf4\xbf\xef\xaa\x9d#\x88$\xf6?\x05W\xe8V\xe6\xa3\xcf\xbf\xa4\xa9\xe8.\xfeE\xc6\xbf\xec\xd9m\x97\xdcI\xe1\xbf]F\xb2\x16B\xe7\xe2?,WR\t\xe5\xaf\xe2?\tK\xe9\x87$(\xea??\x0bM\xd9R\xba\xb6\xbf\x88F\xe3\xb2\xc3v\xef\xbf7^\x89\xd8j#\xc4\xbfY8c6\xc6\xdb\xe8\xbf\xca\to\xbf\xec\xf0\xd9?w\xe0\x13\xad\xb9\xeb\xe9?\xaa\xe8\xb7\x92A\xe9\xf7?\xcc/\xcb\xae\xb1T\xd3?\xf97e\xa4a\xab\xf5?\xd6\x06:nh\xb0\xde?R\xd6{\x89\x90\r\xf0\xbf\xa7\xd1\x0cD\xff\\\xef?$\r\xc6\x91\x16\xf1\xfc?\x9c\xca\xe3\xda/\xbb\x03\xc0j-S\xa7\x98?\xfe\xbf\xd0\xe5\x9b\x92\x11\x82\xd2?K\x88&\xbf\xc8\xee\xf6\xbfhB\xa6\x02\xe3\xb3\xe0\xbfC\xee(b\xda\xe6\xeb?\xfb!\xef\x1d\x12\x86\xe9\xbf&o8x7\xd1\xf0\xbfp\x16\xcc\xd4W\xeb\xfb?Ua\xa1i\t\x1e\xb7\xbf\xdb\x10\xc6\xc1vQ\xd4?N\xdc\xd7\x0f\xf7\xda\xb2?\xf1k\x0cF\xf5T\xca\xbf\x8f(q\xdbU\\\xdc?\x8b\xde\x162\x92\xbd\xc0\xbf8\xb80"\x88\x86\xdd\xbf\xdaa\x8b\xb21\xa4\xb3\xbfD\xb2\'\x859\xca\xd3?nw-\x98\x03\xc5\xd7\xbfaj\xb3\xacn \xe1\xbfr]\xff>V\x90\xda\xbf\xfa\xec\x1at\xd0x\xd3?.\x0b\xe5\x1a-]\xd0?5,\xbc\x87R?\xf5\xbf{P\x1a\xdc\xbe\xbc\xf0?\xe9\x86\xceHq\xe4\xd6?\xbd\xb0\\^w\xd6\xf2?\xa5\xe0\xf0\xaf\xf8\x99\xc4?\x02\'/\x11qy\xf3\xbf[\xda\x8e\xfd\xa2\xee\xe7\xbf*Wa\x96\xb8\xb8\xd0\xbf\xef\xb6\xed\x8d\x03\xa0\xe0?\xd9\x045\x1cR\xac\xd5?\xd0!\x9b\x9c\xb5!\xea\xbf#SgZ\x9a\xa0\xe2\xbf\x19\xc7\xf9\xf26\xe7\xc4\xbf\xe2\xd7`\xbd\xc0\x97\xe2\xbf\x95\xa4j\xb5f\xac\xc9\xbf\xc9\xc2\xdb\xf6Ka\xf5?^\xdbE\xa4\xdfb\xf4\xbf\xc7\x95\xd6\x01X\xcf\xb9\xbfsk\n\x9e\x9a\xf2\n@\x8c\xd4\xb6\x919\xb6\xf2\xbf\x1c\xce\xa6\x8b\x88\xb2\xc0\xbf\x86\xb8i=J\x85\xc9?\x9e\xfc\x94\xfa\x8c\xbe\xc9\xbf,i\x03C\x99\x87\xef\xbf\xe3\x04\xa5\xdb\xcd\xb0\x95\xbf\xa76\x00t\xcbL\xf2\xbf\x1d\xac\x86\xc7\x8e\x9a\xdf\xbfo_U\xd4)h\xda\xbf<>\xd0\xe5z:\xf5\xbf\x88\xccQ8\x943\xd8\xbf\xeb\x0fJi\xbe\xaa\xd6?q7\x06\xda\xb5r\xe1?&\x07\xcb\r\xeb\x8b\xd3?\xa4h\r\xc4I\x89\xb5?\x1dI\x00\x01|H\xb5?i\xba\xf1\x04\x1b\x07\xba\xbf\x1f\xc0L?\x11U\xdc\xbf\xe7\xf6I\x17u\xa6\xde?`\x19\x19\x8f\xad\x86\xe9?\xe2\x8e\x0c\xb3ag\xe7\xbf\x8d4\xdc\xe1%\xe1\xd6\xbf\xa8f\xea\xbfH\xe3x\x8b\xb0>\xb4?\xa0eT\xc14\x16\xe9\xbf\xdc\xb0\x91\xa0\x04\x18\x00\xc0\xd5\x19\xd7v\x96\x1c\x05\xc0$\x17\xed*\xef\xf6\x04\xc0|\xe8\xea\x04%\x05\x15\xc0\xb2&\x1e\x16\x14\xa3\x00\xc0\x8b\xf7\x8d\x896\xdf\xf9\xbf\xdd\x9a\x0c\xed"\xe5\x01\xc0x\xf2\xb5\x15\xc2\xfd\xdf\xbf\xca7!\x8cWY\xc6\xbf\x18\xa6\x9es\x96\xca\xe8\xbf\xaf7\x11\x14\x9c)\x08\xc0KZ\xd5\x90\x98\xe6\xb2\xbf\x91\xd2C\x18\xdde\x06\xc0U\xfe[>[ \xee\xbf\x8e\x19\x03\x9aj\xa2\xd4\xbf\x84\xd1\x984\x1b\x15\xf4?\x9c\x16\x05G\x8dx\xeb?\xef\x15MA\xac\xa6\xec?\xd5\x8e\x12wG\x9a\xf3\xbfZ\xe0r}q[\xbb?A\x13\xb1\x85\xd9C\xe5\xbfL\xaf\x00_\x8b\xfe\xe3?\xdeG~\xa1B\xbbp\xbfuCo3\xbf\xe6\xd4?\xab@\xb7\x9e\xf7:\xd0\xbf\x1d\xdf\xe7\nfs\x00@\xb2+\xa7\xb9\n\xd3\xdc?\xa3\n\x9b\x04\x9cv\xf2?o7.\xb9-\x0c\xfc\xbf\x9bk\x88\xd7o/\xf2\xbf\x1aD\xa818\xbf\x07\xc0\xb6Q{\xee;4\xf6\xbf\x1a\xe3z\xe0[\x13\xdc\xbf\x8a\xcdDU\xd5\x14\xf8?\x10\x89Aj\xc2\xdc\xee\xbfE\x05\xb1\x8b\xb6\xe0\xec\xbflR\xcb\x03\x0bQ\xf6\xbf\x89\xd9\xd2U\x92\x16\xed\xbf\x91\xdd\xc1\xe9,%\xf7\xbf>\xc5\xe5\x03j{\xa0\xbf\xf3\x98\xb5\xf7\x98e\xf3\xbfzY\xd0\x1b\x0f\x01\xf2\xbfdfH6\xbfT\xfc\xbfd\x98@9ii\xd0?\xc2\xa77\xce\x13\x0b\xd8\xbf\xe8\x11t\xf9h&\xf0?\x97\x82\xf3}\xf07\xfc?{\xd4\xe5\xd7\xb9\xe6\x00@3\x17f\xc0Q\xce\xe7\xbf\xd1Zf\xf7\xa5%\xec\xbf\x15\xe8\xe5\x9d\xdf\xf7\xcc\xbf\xc7v\x05\xce\x8fc\xf5\xbf\xa4=\x05LRs\xd0\xbf\xc0+\xd4n\xf4\xa1\xf0?Y\xd8\xaf\xf5\xaa\x17\xc1\xbf\xaf\x19dY\t\xbc\xc3?\xd7\xb7\x0e\x98\xce\xcb\xea?\xed\x9d\xec9\x0f\xa5\xfd\xbf\xb9\xd8<\xbb\x0e;\x04@(\xd1\xd9\xb5\x87G\xfd\xbf\xec\xf8<\x9d\xc7\xb3\xe5?4\xaf\x16F\xfe!\xbd?lX^-\xa7\xc9\x00\xc0\xd3Yfn/\xed\xe0?;t\xb6}\xac\xd3\x01\xc0\x1a`\xbd\xb8\xb1\xa0\xcc?\xcds\xb2\xde\xca\xfe\xd0?hA`\xdbD\xea\xdf\xbfE\xa6w\x91\x03+u?\xe7\xcf\x8c\xd3\x84\xa5\x03@\x94\x1d3\x82\x9f\xeb\xe0\xbf\xad\xe8{\xd7B\x16\xf8?+\'\x0eN\xf9.\r@!f\xbfa\xc0\xea\xf4?\x07\x87NO\x15\xc5\xb3\xbf\xcc\xb4A\xee\x08\x14\xf3?e\xa2\x8e\x08R\xb0\xb8\xbfY\xd4H\x10\x9f\t\xd6?\xd9\xf4\xef\xa9\x15\x06\xc0\xbf\xda\x83|y\xa8\x1d\xe6\xbfW\xdfG$W5\xd3?\x9f\xc6\x1f"\xd0O\xed?/\xf9_\xb6\xc3\xef\xe7?\xbd\x0c\xc9\x02k\xcb\xf3?n\x8c\xd2+\xbdL\xf2?!\x17x>\xa1\xeb\xfd?\xfe:\xfe\xa8\xfb\xa8\xe8?h\x90\xc3Ad\xc2\xe5\xbf\x85\x9fr\x1d\xb7#4\xbf\x90\x881\n\x13\x0c\x06@\xd7\x06^\xbe(\xdc\xf0?\xdf\x06\xaf0Ta\xf6?\xf7>\x9d\xedCR\xeb?\x99d\xf2\x1a\x9d\'\xce?\x1d\xa9oq\xa3\xd6\xf6?\xcb?=\x93B=\x06@Pc~\xcd\x03:\xf9?\x8c\x06&I\x83i\xf6?\x18\x83F&S\x81\xef\xbf\xaa\xd8\xa8;`\x99\x01@\xc2\xee\x82[\x1a,\xca?\x1c\x04\xc4\xb0\x92\x11\xff?\t\x93]B\x15\xdb\xf6?\xf0\x1dT\xff\n\x9e\xef?h@\x14\xae\x1b\x91\xec\xbfL\xd2k\x1e\x88_\xdd\xbf[[Z\x11\xd2\x15\xea\xbfc\xde\x91\xfcF\xd2\xe8?U\xeb\xd9\x13NY\xf5?\xd4wD\xff+;\xa6?\xbc\xfc\x85EY\xfa\xfe?\xeb\xec\xa9\xd5\xe7\x0c\xf5?x\xe9&%\x9e\xa6\x03@m\xcd4\x8acS\xe8?#\xbb\xad\x04\x9a\x96\xf0?\x86o\xa7\x16Fm\xe7\xbf\xa1U\xd0*r\xc8\x0b\xc0\x870.\x8e\x87L\xeb?\xd1\xa4\xb2Sd\xea\xd0\xbfB\xff\xf1\xa0\x9c*\xef?\x9b\xbc6\xbag\x04\xf5?\x7f\xc1[S\x1b\n\xf3?\xe3\x8c*\xd2\'~\xfa?V\xb0r\xac\x17\x0b\xf2?\xab\x18\xf5\xccG\x87\xe5?.pe\x9b\x04l\xe0\xbf\x80\x04\xc7\x85N\x18\xd9\xbfm!\xd3\xac\xa6\xb0\xc9\xbf\x90\x85\xa7<)\x8a\xe6\xbf\xbf`\xc0\xf83\xdf\xfb?\xd5\xd5\xf2\xad\xb6\x85\xf1?\x87\xa5-r\xb2\xdb\xb7?DJR_\xe6\xe6\xd5?\xf6\xb8\xa8]\xce%\xf5\xbf\x0c\xc5\xb2\x99\x1d\x17\xf0?\x15\r\xaf\n\x8a\x02\xf4?\xa9\xa1\x85a4\xe5\xe3\xbf(\x13\x8b\x9d\xee\xcb\xe9?`\xff]\t\x83\x1e\xf7?\xfc1\n\x80\xb9\xe1\xe7?.\xb0o\xf1\xd2\xae\xff\xbf!\xd4\xac\x8a\xc5\xcb\xfa\xbf\xaej$\x13\x10E\xf2?Y\xcf\xba&a\x95\x02@!\x11\xe0\x17\x88\xdb\xb3\xbf\xdc\x0b\x13\xb8B\xf1\xd3\xbf\x06\x9d\xea\x81\xc5\x91\t@\xaba\xa0m\xb5D\t@\xb4\x8bQ\x8b5\xf7\x14@\x9b\n\xc5C\xdd\x9e\n@a\xca\x18\x85%W\x01@_\xc1v\xfa\xde\xbf\xf2?\xfb\xf6\x84\xf4\xad\xd2\xf9?\x07\xeda#=\xfd\xe5?u\xeat\x08h\x1f\xff?>\xe3\xed\xdcM\x92\x97\xbf\xf0\x7f\x92\x8d\xc8 \xd4\xbf\xab\xb2\n\xda\x19\xed\xe6?/\xb0\xc1{\x1cE\x04@\n\xa7\xecG\xbb\x13\xe3?y\x8bJCEO\xd7?\xf8F\r\x1d\xf2\x06\xc7\xbf\xcb\x8d\x92\x0c\xcb\xd5\xd0?3r\xfeca=\x02@\x01wUn)l\xf5?\xc4.(\x89J\x15\xd7?0\x03\xed\x06\x8f~\xe3\xbf\x01\x94\xd9\xb0w\xa6\xc4\xbf\x83\xfd\xcce\x17\xbe\xe9?xvCy\xbcu\x00\xc0q\x03y\x01<\xbd\xd6?\x0e\xbeZ\xf38\xd4\xe0\xbfR\xd8\xd2\xbf\xd0#\xf7\xbf\x17}\x8d\xbc\xff\xaa\xa3\xbf\x12\x16\xfe\xa2\xe0\x82\xde?K\x15@z\xc63\xfd?\x17\x10\xc1<\x07\t\x00@\x14\xfb$\xe3\xf9\x1c\xf5?\xf2\xd5\xa9&\xadG\xf6\xbf\xf1\xa1\x864\xd4\xc4\x01@\x80x\xffc\xf4\xe7\xf5?\xf9Q\xff\x89\xf2\x94\x01@\xa3S\xd1s\xd9\x17\xfb?n%{\x1cK\xa6\xbc\xbf0:\xe6\x1f\x05\xe3\xf2?R\xb3.=\r\x85\xd4?8m@\n\xba+\xf6?\xd9\xc9HXV\xd2\xe5?\xe2\x87D\xad?~\xec\xbf\xe5\x96\x19|\xce\x9b\xd0\xbf\x01\x97m\xfbd\xb9\xce\xbf,`\xaf\rG\xcc\t@\xf9\xe0\xbcF\x06\x9f\x02@_\xbb/x\xc0\x9e\x06@\x05\r6\xc1\x81}\xcc?\xcd\xba\x93\x93\x8fO\xe3\xbf5\x9b\xc8\xbdN\xc8\x11@\xd8\x90{3\x9f\x90\xf2?\x0e\xe5\x99q$\xc9\x00\xc0\xd7(\xc7\xd9\xf3\xaf\xfc\xbf\xf2q+f.\xe1\x03\xc0\x9b<\xa6\xc55{\xec\xbfrlTN\xac\x1d\x06\xc0\x1a\xa4\xfb\x8d\x1a\x19\xea\xbf\xde\x1a\xdf\x8b\xfd\xbe\xe2\xbf\xbb\x87\xc5\xb3D\\\xd6\xbf\x9e\xb3\xed-\xbe\xf9\xf2\xbf\x90\t\x8e/b\xcc\xf5\xbf\xe0BpS\x819\x0f\xc0N\xd4\x19\x85\xf0\xaf\x02\xc0\xcb\xfc9S6:\x02\xc0\xde\xf3\xe5?\x94\x90\x01\xc0o\xc2gz:\x11\x10\xc0\xb0\x804\x1f\xca\x01\x0e\xc0\xaa\xdcI\xc4\xe0y\xff\xbf\x03\xc77\xf9:\x8e\xf2\xbf\xa9\x92\xd5\x852I\xbe?\xb4r\x1c\xa9 \x8a\xd6?\x13\x9bJ\xbc\xa1\x1a\xbf\xbf\xcaD\x0f2\xc1\xad\x8b?\nr)\xb4^S\xb0?}\xa0\x8b\xc1\x06\x98\n@\x88\xdc^wA\xcb\xf5?\x9d\xf3I\xdf\x81D\x91?sb\xa2k\xf4\x8d\x00\xc0~\x84\xbc\x84\xf0s\xf0?\xd9\xdeZ\xdf\xb8\x16\xdd?q\xcda\xb3\x94$\xf3?\xaa\r\xfc\xa8\xc9G\x0b\xc0\x1fg\xb3\x1ebP\xc2\xbfJwV\xe0\xde#\x00\xc0\xcf\x977Q\x8e\x06\xe6\xbfxYN\xb4"\xce\xf7\xbf\xf5w\xe2Y\xe29\xc0?G0\xc8\xcc\tS\x00\xc0\xd4\x83\xc7C\xe8\xc4\x07\xc02-*\xffU\xdf\x06\xc0\xb4\xff\xf9\x11\xb3\xa5\xf4\xbf\xa9\xcf\xa0\xf8r\x85\x04\xc0:\xce\x8fC\xd9?\x13\xc0\xc6\xeb`\xb2r\xc6\x08\xc0\xbe\xef\xfd\xa6\xd0r\xf7\xbf\xeemq\x91\xceE\xd6\xbf-\xdd\x08\x17>\xe3\xc0\xbf%\xc5\x1b\xb3\x82\x1c\xe9\xbf\xb68\xeap\xac\xb1\xd5?\xacD_+\xdd7\xdc\xbf\xf5\xd6\xe3\xac\xd6j\xf8?\x84\xda\xec\x83\x93\xcc\xf5?\xdc\xba\xabz\xda\xb7\x00@\xa7\xff\xed;8<\n@\xfdB_.\x1c \xb7?K\xeda\t(\xfc\xe1\xbf\xe5N}\xa087\xeb?\xc9kN\xbd\x9a\xe6\xd4\xbf\x80\xf1\xec=,\x14\x04\xc0%\x19*\xfb\xf2b\n\xc0\xf9\xe8N\x00b\x9d\xeb\xbf\xa1\x12\x9c\xec\xd2E\x0b\xc0\xcf\x84F9\xdc\n\xe7\xbf{\x89\x8aQW7\xf4\xbfG\xba\xbb\xee\x7f9\xd0\xbf1[F\xc9\xc4\xd5\xf3\xbf\xf0\xf9\xc2\xf1\x98\xdb\x03@\xa3\x1cD\xea\x83$\xfa?PB\xeaSz\xad\xf6?\xce\x8c\xb1 \x80l\xf4\xbf\x16\xcb\x93\x08\xca\xd5\xee\xbf"R\xb2\n7\xe5\xbe?;\x94\\\\\x9d\xf1\x05\xc0\xd4\x81NV\x8aX\xd6?\xd3\x15c\xed\xf3t\xf2?\x9c\x90\x87\xb7\x91\x85\xc9\xbf\xf4\xfa\xe8u\xde\xf3\xf6?\x82 B\xdf\xe0K\xf1?J\xd3\xc3\xf7\xf8G\xf1?Z\x91\xaew\xc3\xa1\xe7?&\x03\xf5)\x10 \xfe\xbf\x87,\xdd\xf2.1\x0f\xc0|\xd5\xe1\xed\t.\xc9\xbf\xe2\xb8\x8d\xfbH/\xe6?V5l\x12+I\x05\xc0\x062\x979\xb6\xe1\x08\xc0\x8bQ\xe6#z\xa3\xf5\xbf$\xf4\xae\x9d\x94\xa9\x93\xbfH\x7f\x07\x08\xe2\xac\xef\xbf\xd0\xc7v\xeb\x0e%\xef\xbf\x82\x9a\xfa7\x9c\xb4\xd5\xbf\xf6\x15.\xa4\x1e\xf5\xf9\xbf\x0c\xb2"\xc4h\\\xee\xbf\xbb\xff\xc4\xecB}\xaa?\x7f\x01\xe9\xac\xad]\x03@\xed\xcbVT\x04\xb5\xd7\xbf]2\xb5\xd2s0\xdb?\x9eQ\xe3\x1d\xa52\xce\xbfk\xeb\x06\'\x00\xeb\xef\xbf\x83U\x89%64\x03\xc0\x03\xadAk\xc4y\xb1?\x1f\x0f\x1f\x91\xa2i\xf6\xbf\xd3\x8d\xa0z\x12\x84\xcd?\xber\xb2\xff\x03G\xe2?\x17t\xe8d\x9a\xfb\xd5?F \xf4\x8cE\'\xe7?k\x07%\xdc4[\xf0\xbf\xe6\x04\x9d\x8bx\xc0\xe0\xbf/\xa8\x0f\xc6\xa6\x97\x01\xc0\x1c\x80&\x02\xba\xed\xfb\xbf\xd9\x1c\xfb\xde\xaa>\xe1\xbf\r\xac\x0b\xf3\x82\x19\xf4\xbf*\x89\xdb\'\xaa \x0b\xc0\x91r\x99s\xe7J\xe6?\xbe\xad\x87\xbb\x99\xd5\x04\xc0`7\x8b\xe8&v\x80\xbf\x9d4\xc9\xab6u\xea\xbfL\xdc\xc3\'\xaa\x9f\xd4?\xc9\xc2\xff\xf8\xfe&\xf3\xbf\xcf\x1b\x00\xd3f\x9a\xd4?oY9W@\xba\xe0\xbf\xda\x88&8\xf1\xc0\xd6\xbf\xac_\xad6\x1d\xa8\xfb\xbfs%\xf7*q\xe5\xe4\xbf\x82\x93j\xd1)=\xdd?\xc1\xe0q|E\xfc\xec?\xa7\x12\x90\xaf\xd2Q\xf9\xbfu*\xfc\x9a\xeb\x06\x03\xc0\xd7\x9f=\xd5\x98@\xf5\xbf\x1c\x00C\xa3\xb6\xa3\xfa\xbfj.;\x96\xf9\x96\xe4\xbfh\xb5n\xcdI\xff\xe7?\x19\xd0\xd4\x0f\xa5D\xe1?\xe4\x7fd\x7f\xc0\xc9\xef?\xefC\x1eF\xf9\xb8\xe1?\x880\xc3\xec\x93S\xfc\xbf]\x0f\xbb\xf1\xef\xf7\xaa\xbf7^\x90x_\x02\xf2?h\xbej$\xc51\xf6\xbf\x02\x1e\x0c6\xf4\x9c\x07\xc03\x7f\x13\x14\x1e\xb8\xc0\xbf\xe6\x0cd\x9d(\xe9\xf5\xbfG\xce\xd7V\xe6W\xe3?\xe6\xc5\x9f\x9a\xfeC\x00\xc0\xe6\xff\xe0\xe5\xc5\xde\xc0\xbfi\xe4\x12\xf0#`\xf7?\xf3\xe0\xaad$\xe2\xdb?\r\x7f3JY3\xd7?yT\xed\x8d\xe5f\xe5\xbf\x0f\xd8\x1e}z\xe7\xba?\xa7|\xa6\x13G_\xce?[6\x07{\xc6\xdc\xe8\xbf\xac\x1f\x15?\x18}\xf3?\xa3d\xf6-\xd93\xf9\xbf\x17\xcb\xfa\x86S0\x00\xc0\x11\x15\x19j\xe7\xfc\xee\xbf\x9d\xcb\xf8\x05\xa1\xfb\xfb\xbf\xf8\x80\xda\xd1kS\xf8\xbfl\xbb\xb5\xc1\xdb\x87\xf3\xbf\x18\xa6\x8b\x84$A\xee?\n\x0be!\xba\xcf\xc2\xbf;(\x90m\xef\x14\xea?\xe5%` \x88C\xc9?oL\xe3\x08\xbc\xb8\xf4\xbfqlnh=\xd0\xf5\xbfc\xc7\xab\xa8\xfb[\xf7\xbf`\xa6\x1d\x8b\xdb\xc9\xf6\xbf\xcf/rE\x84$\xea\xbf\xf9b\xac\xc2w8\xe0\xbfd_1x\xfe.\xe2?\x9b:H\xef,\xfd\xfb\xbf]\xcb\x11r\xceG\xf0\xbf\x1d\xa32&\xf7U\xdf?\xd4$\xdbK@\x0c\t@\xec5\x88,\xe2z\xd2?\x87\xbbkh\xed\x14\xa0?\xf3K\x87*\xd9\xfe\xf4\xbf;\x10\xbc\r\x82x\xf0\xbf\x97\xf9p\xd9\\o\xd9\xbf\x8eq\x90#,\xf6\xd0\xbf\x17\x97\xc7cXe\xe5?\x112\xd3\x91\x17\xe7\x00\xc0\xbfi[\xdb\xbe\x99\x0f\xc0\xdc>\xa2\x83\xe8y\x08\xc0\xf1+\x97C\x97\xff\xfc\xbf\xb1\x87V>;\xcc\xd5?\xb80\x11gz\x11\xc8\xbf%\x9f\n\xa6\x9b\x1f\x96?\x89A\x8c\xda\x7f!\xb0\xbf\x8d\xb89\xcc\x15I\xc2?\xefT\xa5\xf3\xce\x1b\xfe?\x01\xea\xf3\x9c\xb6\xae\xfd\xbfU\xac\xc2W\x95\x0b\xe1\xbfj\xcf\x94\xf6\x82\xb7\t\xc0\x04\x7f8\xfe\xbcG\xfa\xbfKIFpE\xd3\xf7?\x84\x8ex\xf4\xb3\x9f\xf4\xbf\xfb\x92\x15\x9cI\xba\xd7?\xe7\xa6\xf4c\xf5\xa5\xe5?\x17\t\xa6\x1e\xa0\xb8\xdb?K\xec\x1a+\x932\xf2?j\x9d\xef\xd3\xf1\n\xd4?\xbd,\xaf\x16\x8a\xd4\xf7?}\x98l\xfc`\x07\x03\xc0\x16\xb0A\x9cj\x08\xe3\xbf\x1d\xc3\xc9i\x01\xc0c\x05\x11\x00\x83\xc4\xcf?-\xfe\xc0v\xde#\xe2\xbfJ$F\x94\xe0T\xef?B\xf2\t\xcd\xbf\xcf\xde\xbfc\xbc4\xf1~\xf4\xe1\xbf\x14\xb0\x81\xcb\xebP\xd9?\xbe\xf1\x00\xf2\xca\x0b\xce\xbf\x1d\x85\xc8?M\x8a\x03\xc0\xd4\x0b\xfd$\xc3\xbf\xdc\xbf&F\x9f\xed0\xe6\n@\x1a\x10\xb8I\x81\x93\xe8\xbf\xcdLH\x98\xb2=\xe6?,\x0f\x920K\xd0\xda\xbf\x1f\xf7\xb0\x9aM\x05\xdf?\x97\x05m\x93\x80\x0b\xe7\xbf\xc9\x84\xd8n\x83)\x03\xc0\xd8(\xea\x15\xc3"\xf1\xbf\x8c`\xe0\x8b\x80\xbe\xea\xbfp\xeb$b\x12%\xf9?nb\xaa\x10\xcb!\x00@^#=h\xad\x04\xb7\xbf\xc9\x03\n\x9c.\xfc\xc1?\x1b \x10\'\x05\xb4\xd8\xbf\x18\xa5\x80\x86s\t\xd2\xbf\x17\x00s\x10\xb8\x06\t\xc04\xd1R\xe1\xa4*\xf4\xbfg\x17\xd1+$\xb3\x03\xc0\x05m\xfd\x082\xcb\xf5\xbf3?c\xaf`\x00\xf1\xbf\x06J\'\x07\x05\x84\xe8\xbf\x1d#\xb8\x0b1|\xd0?j\xf0\xa0#Z\x1c\xc2?bJ\xe1\xf5i;\xa1\xbf\xbd\t\\\xa9Em\xce?\x9c\xc2bkn\xc7\xe1\xbf\x07\xfb\xads2\xa2\xfe\xbfk.]\x90\x8eY\xee\xbf\xbf\nn\x8fL\xed\x02@\x0b3\x9c\xed\xc2\xb7\xed?\x84\xef-]5\n\xe1\xbfy\xa7\x80\xaeC\x8e\xee\xbf\x99\xb0\xbc\x9a\xfa:\xe5?\xd4\x80+\x9f\x10\xa4\xe5?\xec\xaf\x0f\x9bCg\xf0\xbf}0\xeb&f\t\xee?\x14[\x89\x18\xd3\xfd\xc0?\xb55\x98VR\xf3\xfe\xbf\xf9\xd0\x91\x11`\xb4\xdd\xbf\xbf\xf9\xeew\xb9\xd4\x06@\xd3\x0e\xab\xde\x15=\xfc?U\xdf\xf9}\xa8~\xf2\xbf\x11\x17\x90\x99)\x8d\x10\xc0\xbb\xf9\x86"[\x1b\xee\xbf\xa1S\x1c~\x90\xf2\xf1\xbf\xa2[\x12&\x15\x19\x01\xc0\xb3\xc8\x9cdD)\x01\xc0\x07\xbc`\xd9+\xf2l?\x90\x1f\x01\xf7\x1f0\xc0?\x95;a^\xe6\x80\xe2?\x9fQt\x98\x9f\xc3\xe9?\x93z\xe9\xe9:\xc6\xd3\xbf\xe3gR \xfb\xb0\xd4?\x93~\x9eB\x91D\xf6\xbfs\xdcO\x17\x8d\xdf\xed\xbf\xe2\x99\x18\x1e_\xf6\x00\xc0~\xb0\x16\x08\x83^\xe7?\x95q\x16&\x14\xa7\xec\xbfKa\x05\x1a\xbcH\xdf?\xb1\x9f\xed\xe8\xf0&\xed\xbf*6\x19\xe5\xb6\xf0\xf3\xbf\xbep\x17s\xa2\xdc\xf9\xbf\xc7`Ja\x12a\xd2\xbf\xb6\xf0\x11\xcaS\xda\xfe\xbf?\xc5a\xea\x9b0\xc8?\xa8K6E"\xc3\xf9\xbf!8\xb51\x7f\x83\xe8\xbfYW\x95N\xef\xee\x0c\xc0=\xd1\xf7\xd6O\x1b\xe6\xbf\xa8\xcdeVS\xa9\xfc\xbf\xde9\xcb\xb7(c\xf8\xbfcx\x96\xb0!R\xf2\xbf\xae\xc2L\xbb\x1d\x95\xe0\xbf\x93}\xb7U\x88\xcb\x00\xc0\xd1\xf6]\x18\xd9\xa9\xea\xbf\xb6\xe1*Tm\xd7\xe4\xbf8\xe1,\xd5\xbf\xdb\xb4\xbf\xba\x1b\x83\x93k\xdb\xf9?<\xfd\xfedL\x00\xf8\xbf\xf3}K=\xe2\x10\xee?\xefl2\xado9\xe1\xbfo(\x94\xd4X\xc1\xd9\xbf\x0e\xa1|5\xd8#\xe1?\xdc\x86\xb8\xca_e\xde\xbftG\x1em\xcbC\xe8\xbf\xa0\xb7\xd0v\x0f\xee\xe0\xbf\x8f\xe7\x1ez\x0f\x15\xf3\xbf\xd3\xac\x10p\xdaX\xd5?\xe7^\xbb\x96,\xb2\xe3\xbf\xfb\x86\xbfQ\x05\x89\xd7?\xfd\xd8&[\xcf#\xdc\xbfI1O\x05Q\xe6\xe8?&\xb1\x1a\xbc\xeb\x03\xe4\xbf\x17\x10\n\x8aW\xa6\xc4\xbf\x9bb\x13\x1cF\xc3\xf8\xbf\x16\x0f\x10\xf4\x00\xc8\xfd\xbf\xe88`\xd9\xbf\xdd\xf6\xbf\xd7\x0eU\xc2\xfa\xc4\xd2\xbf\x9b8\xa4Q<\xc1\xb0?R\nw\x1a\x91*\xd2?PQ\xd5\x94\xb7\xfd\xda\xbf\x83\xc8Q\xe0G\x92\x97?<\xb6\n\xbb\t\xfc\xe3?\x11\x8d\x16/\xb4\xfd\xc5\xbf\x98@#\xc9\x95[\xd1\xbf 4\xa3\xdc.\xda\xc6?yf\xc5a\xde\xf2\xe3\xbf\xfb\x1f\xa1s+\x18\xb4\xbf\xc8a\xdf\t\x18\xf2\xda?|\x9cEY-\xe6\xf6\xbf\xa4\'\x89c\xc9\x95\xe6\xbfs0\xd3\xc0M!\xfe\xbf\xee\x86Y\xc9i\xc1\xdf\xbfr;\xfbK\xc7\xa0\xf5\xbf\xe9\xaf\xee\xc3\x85\xd5\x08\xc0\xcdV$x\x9e\xb7\xe3\xbf\xff\xa3\x07\x1ft\x96\xe4?\xc9\x06\xdf\xa4sE\xff\xbfL\xce\xed\xce\x8b\xd0\xf6\xbfP\xef\x81;\x85\xdc\xed\xbfP]\x0b\xec\xb9\xab\xed\xbfU+}\xd1\xa9\xb8\xc9?\\*A\x8c.$\xe8?w\xae\x91\r\xc5\xa3\xb1\xbf\xa4\xbc\xbf\xfb\x1a\xeb\xe0\xbf\x1c\x07 \xed\x1a\xbf\xce\xbf\x87\xcb\x7f\x9d\x0c\xbd\xcb?r4`2\xfeO\xed?\xdfb\x1c\xf5r\x1f\xe2?50\xfd{\xc6\x19\xf2?dl\x9a%\xda\x02\xca\xbf\x9d\xae\xdc\xb2\x9d\xf1\xdc\xbfv\xb9\x03*\x8a\xe9\xd4\xbf\xbc\x9cFo\xad0\xd0?\xcaw\x05\x97\x982\xe7\xbf\xcek\x8d\xd5\x87G\xac\xbf\'\xc0\xee\x0f\xb8K\xdc?n\x14\xc4p\x18\xfc\xed\xbfL1G^*F\xe2?\n\x06\xfb4,W\xf2?\xe9\xe4\x1c\xcf\x91\x91\xe1?\t\xf8\xe7\xadJ\xb8\xc6\xbfW\xa2Mz\xc8\x92\xf2\xbf\'\xe0\x91\xcb\xcc\xf4\xc8?\xe1\xf3;\x15\x08M\xf2?S\x1e\xb0\x0e}!\xd1?\xb5<\x87\xddh-\xe5\xbf\x0bY\x06\xabBr\xcb\xbf&ME\xea)&\xe5?G\x0cN\xd5\x7f\xef\xf0?s\xdf\x9c\xd7\x87?\xe9\xbf\xcb(\x178\x9d\x08\xf0\xbf\xab\x11\xbfE\'\x90\xdd?\x92\xd5Cv\xaa\xa4\xdc\xbf\x05\x1bGS\xf8\x13\xf0\xbf\x91u\xd7\xdbDN\xd9?\x15[\x84\x90\xb3\xa8\xea\xbfo\xd9\xdcnx\x14\xe6?\x86k\x87\x04\x81\xb5\xc7\xbfO\xef\x14\x14\xc4\xce\xb2\xbf\xa7U\x9a\x03;\x0f\xe4?\xe4\x0c\xb6>LM\xd9?\xbb\xc8\xdfxX\x99\xe6\xbf\xbc}\x8e\x0cZ\x99\xe7\xbf\xb8P(u]y\xd4?C\xb6&X1\x19\xdc\xbfT\'vn\x8e\xfc\xfc\xbf\x12+\xdeC2\x91\xfa\xbf\xa0!\x80\x01\xce\xb5\xd3\xbfB\x82\xcc8\xa4j\xc2?\xc8\xba\xa4\nl\xc8\xb1\xbfn\xe74\xe5h\xcb\xe7\xbf\xea\xdcV\xa6l+\xb8\xbfP\xc9\x0e\xccnh\xc8?@/\xf6)B\x0f\xe1?\x93\xac\xa5\x98dj\xf4\xbf\x13\xfe\xfaJ6\x08\xde?\xe1N2\xe8\x84\xa8\xbc?\xc8[u\x94\xf8\x02\xe2?1\x9f5\x87t5\xe3\xbf\x00U~\xd3PD\xd3\xbf\xb8\r\xe8\x86dB\xb0?7<\xadhq\x89\xe1?\x97\xf0\xbd9\xd8\x98\xe4\xbf\xd7\xa1;\x84\x94P\xe2?/\xc6\x96\x8b\xe3\x1e\xd3\xbf\xd0G\xf1j\xf9\xef\xef?#\x99A5\xfb5\xf0\xbfPk\xe3\x07{\xbc\xde?\xbc\x12\xd5\x7f\xbe\xc6\xd1\xbf\xe11\xffb\xbb\xdb\xde?|\xde\x9a]w\x1f\xd2\xbf\x9d\x0e\xe5c\x01\xcb\xd2?\xc9\xf9\xe5\xb1\x8d\xf1\xdb\xbf\x8b\xda\x11\x17@\xb7\xd6?\x849a\xd2\x8cT\xe7?\x9e\xd9\xcc\x8ac\x07\xef\xbf\xa5sIz\x16K\xeb?\xfc\xb2(\x81S\xd5\xf5\xbf\x9a\xeb\xc6\x83N\x1d\xb9\xbfyZ\x99\x14\x0bB\xe5?\x1b\xcbin\x11R\xd8?\xbc\t\xbd\xb6\xb2R\xf4\xbfh\xef\xe1BQ2\xca?\xbf\x18\x1cH-F\xf5?\x92\x80\x95\x7f\x82[\xb8\xbf\xf5\xd4[G\xdc\x8c\x87\xbf"\x01\xf9:\x06|\xdd\xbf\xab\x08\xbf\x84DN\xf1\xbf\x96f\xe8\x1f\xd0\x1b\xdd\xbf6\x9aD\xb9\xd1\x8e\xe0?\xe61`\x1b~\xc2\xe1?\x10-F\xaaBk\xe6\xbf\x9d\xc1\xf6\xbc \xbe\xb9?$vk\xc1\xed\x0e\xe6?\xfa\x06\x08W*\xf7\xda\xbfF>G_{M\xe8?p(\x9fS\xb3\x92\xe8\xbf\xf4\xdf\x88W]\xb1\xe1\xbfP\xd5\xaeZ\xb0J\xdb\xbf$\xe3\xb8\x06\xb0\t\xe5?\x00A\x1c#\xfcw\xe0\xbf\xc2\xf7\x1ahm\x04\xc8?\xa1\x02\xee\x1c&\xfe\xed\xbf\x82\x04J3\xb0\xa2\xb6\xbf}\xa2\x99{\xb7\x97\xe3\xbfr&\xf4\xa8\xaf|\xdc?\xafj\xb6\x00\xe3p\xf7\xbf\xdb\x03\xe4j`{\xb3\xbf\xbe!\xe3\x84hR\x00\xc0\t\xa9\x02(\x8f\xdd\xe3\xbfE\xcd\x18\x8dw\x90\x02\xc0\xbc:W\x8a3\xbb\xf8\xbf\xae\xcf]\xa8\xbb\x87\xee\xbf\x00J\xe2\x1e\xac\xa3\xfd\xbf0g,\xa4%k\xeb\xbf\xaa[\xa5\xf7*\xfd\xf2\xbf\xe2\xb6\xa1\x14\x9f9\xc6\xbfK`\xb6k8\x98\x00\xc0\xbeM\xdc-\xbd\xa5\xef\xbf\xd7\x05\xbe\xf6\xb4T\xa3\xbf\xd1j\xcf,i\xe0\xe2?=\x7f\x06\xb4\x8a\x8d\xca?\xd79\xa8\xd9\xefX\x95\xbfr"\xcd\xc7\xcd\x13\xe8?w\xa4\xc1\\\x8b\xf9\xf1?\x15_\xcczc\x9d\xbd?\t3\x99z)\xc9\xee?\xfc\x8f\xc6\x85<\x9d\xdb?\x1c\xc29>\xd2e\x97\xbf\xef\xf9\xff\xad\x9b\xb1\xf8\xbf\x82O\xd6\x08\x90v\xee\xbf\xd5\xc6fK\x9fg\xd1?\xb5\xd3\xaaP\x90\x08\xd2\xbfI\xd8\xe0!\x8a\xb9\xde?\xfc\xc5*,\xaf<\xc9\xbflOV}%\xbe\xf7\xbf>\xe3\xa0\xe8\xf4*\r\xc0?\xbd\x808U\x87\x0e\xc0X\xde~\xaeYu\x1e\xc0?\xa4\x9b\xbd\x1a\x13\x1d\xc0\xb0"\xf4s\x07\xf5\x1f\xc0\t\xc4\x93&\xa3e\x1a\xc0\x12\x8bR\'\t\x04"\xc0PK\x9d&(\xa7\x19\xc0\x151g\x04\xd4\xc3\x18\xc0\xdf\xcd\x85N\xff[\r\xc0\xb5\xa9\x7f\x18\xf3J\xfe\xbf\xe2\x1dL\x93po\xff\xbf\xcc\x95MO{\xef\xe6?\xc6\xe6\xcc\xd3\xf37\xf7\xbf\x88\x04\x05\xdd"\'\xf8\xbf\xaa\xe8\xb88\xaco\xd2?bW\xb5\xd0\xf0\xf6\xc9?\x03\xc4\x03\xa6@\xc3\xda?\x15dhHTA\xf1?\xc7\xa8\xbbZ\xae\x12\xd1\xbfO\x92\xf3K\xdc\xff\x9a?\xc6\x97\xfa\rd\xa7\xd2?\xa0\xf2\xa1\xd3\x00\x94\x8a?\xc2\x87\xd2\xf0\x12\'\xf9\xbf|\xcds\xeb\xc0\xbb\xe6\xbf\xacXK\xf0U\xea\xb8?\xb3\xea\x9e\xa2\x9b\xbe\x08\xc0\xc1\xa9y:?\x11\r\xc0\x96y\x9c\x97p\x1d\x03\xc0\x95\xbe\\\xbbq\xbd\xc6?C\x8e \xbe\xd2Z\xab\xbfI\xeaT3}\xdd\x10\xc0\xa16>T\xbe;\xd4?\x95\xa5\xc2e\xc4r\xe3\xbfe\x95\xea\xbaw\xf6\xc6?\xed\xdf\x02u\x85\x16\xd0\xbft\x15\x13\x18=K\xd7\xbf\xd6\x87)\xb7\xfah\xf6\xbf\xd0\xea\xc5I\xe1J\xf8\xbf\xc1\x9c\xf2\xfe0\x10\xff\xbf\x0cF\x94\xe51z\xd3\xbf\xcd\x90\x11d7D\xd0\xbf2\xea\xe8\xfd\xde\x07\xff?\xce\x91\x99to\xb7\xa0\xbf\xac\x94\xc6\xa9\xcf0\xeb\xbf\x96\xd5\x97\xd8\x13\x9c\xd9?\xcff\xc2\xc8\xc3\x19\xdc\xbf\r\xa7\x87\xcd\x88\xa5\xa9?\x03\x0e\x06\x849&\xd0\xbf\xcce\xcbm\xd6\xa7\xf1\xbf\xcd\x82\xd3\x8f\xca\xfb\xd7?\x95_\xcd\x06?\xce\t\xc0\xcf\xe6Hm\xb7D\xf7\xbf\xda\xac\xe0\xfaT9\x01\xc0l\x97!\xdf\xb9\xff\xf7\xbf\xff\xf4\x0c\x0b\x08\x1d\xcd?\x17gv\xd3\xc8\xa7\xf7\xbf\xfc\xc9\x0c5\x8a\x80\xdc?\x9a\xab\x8eJ+/\xf3?}R\x81\x104\x91\xe4\xbf\x90\xe5\xafVw1\xdf\xbfq\xdd\xa6\x90:F\xa9\xbf\x00\xa6f\xc6l\xfe\xd7?\x02\xdaD\xd0\xd2\x84\xd4\xbf\x86\xadL\xf4\x1e\r\xe8?\xc2\r\xed7u\xe2\xdb\xbf\xfa\xcd_ \xb2\xf7\xfa?\xe3*\xb3\x87\xb0 \xf0?Z\x00s\xaa\xe6+\x00@\xad\x16\xea\xda_\xd7\xcc?o.p\xa3a\x8a\xd9\xbfJ\x02>\xedoY\xe2?z}\x1b\xa1>}\xef?h\xd8\xb3o\xc8\xde\xe4?\xddY\xa2\x8c\x0b\x9d\xe7?rLLl\xcd)\xa8\xbfh\xf8>\x07\xb9\xae\xd3?_\x07\xb6\xc1\x10j\xea\xbf\xf9t\xa7\xdc\xa6\xa1\xf3\xbf(\x80qoU\x95\xf7\xbf\x95b%\xe5\x0b(\x05\xc0_<\xc8\xe2\x11\x03\xc9?\xfd\xbd\xfc&\xcc\x98\xf0\xbf~\x9d\xcbB\x9e\x02\x00\xc0\x9e\xf8gwR\xba\xd7?\x8b\xbc\x89\xf6\x01\x8b\xdb\xbf2\x1e\xb3 \xef\xa5\xe4\xbf&pry\x1b\x00\xc6\xbf\xb9)\xe9N)k\xec\xbf\x1eN}\x0c\xd5\xa9\xe8?\xdab{\x01E\x83\xd1?\n\xfd\x96\x15J[\xf1?K\xd6\x84\xa4C\xaf\xf5\xbfI^\xc2Xh\xf3\xfa?/\xb2\xe37L\x87\xdc?\x87X\xdf#\x18L\xdb?\xf7\xee\x18\xbc\xc89\xe6?Gw\xde%\x7f\xe8\xf9?\x1df\xdcI\xdc\x90\xee?\x8f\xba\xdb\xb0\x00\xe8\xd7\xbf\xc6\xdf\x92\xbc\x16\xa9\xe5?W\xbfb\xfb\x1c\x83\xa8?\xb0\xf7J\x8d\xae\xb5\xb8?\x1dEp\x9a~\xfa\xbe?Cw\x85~\xfd\xa5\xc5\xbf\x9f\'\xa41p%\xba\xbfe\xa0\x1cf9\x11\x00\xc06\xba\x06\xf1\x96\xe6\xff\xbf\x8e\xae\xf1\\\xc8\x8b\x07\xc0\xca\x98+mCe\x03\xc0\xd5\xe4N\no\xf2\xf2?\xee\x0e\x8b\xd3S}\xb2?s\x02z\xaa\x02\r\xe8\xbfx\x85\xd4q\xad\xa2\xf5\xbf\x9e\xaba\xcf\xce\xce\xf0?\x03\x84y\x96\x98P\xfb\xbf\xfe\xa1\x05\xdbP\x8f\xf6\xbf\xfa\xda3\xeajn\xcf\xbf\x8d\xc20\x9d\xacg\xed\xbf\xae\x1c\xa3\x92\x83\x02\xd8?\xad!\xf1Ja\xa9\xe5\xbf\x9c\xf8\xef\xc2_\xc0\xf2?\'\xceC\xb2\x87\xf8\xce\xbf\xd5\xc5\xf2\xc0W\xf7\xf7?\x99\xddS\x1d\x83\xb9\xf7?\xa5P^\t\x1f\xcf\xed?^\xdf\xa4\x1c\xb1\xd1\xf9?\\\x05\x19\xf4\x07\xa0\xe8?K\xcf\xb2k\xf8\x87\xdd\xbf\x9bFZ\xe9\xb4\xfe\xf5?\x10\x9a]\x89%\xf4\xe1?\xde\x05.\xb1p\xf9\xf1\xbf\x85z\x91\x85O\xcc\xd5\xbf!\xc1f\x82\xaa\x87\xfb\xbf\x0c\xa1+\x1e\x00\x0e\x05\xc0h\xe0\x17Q\xa8\xa0\xfb\xbf\x86\x1e%\x81\x81\x91\xe5?d\x8e\xde\xfb\xdc\x99\xf6\xbf\xa4\x08\xfaX\x8a\xe0\x91?\xa5\xf6\xb7\xd3\xc6S\xf4\xbf\x03\xdbe?Db\xe8?\x0cW\xf4(\xe8(\xcf\xbf0\x9a-B\xad\x01\xdb\xbf>\xd3I\xd4\xaf\xd5\xef\xbf\xddE\xf1\xd9/4\xef\xbf\xdd\x9bIIy\xa3\xab\xbf\xc6\xcd\xecK\xdbs\xcf?\xf1\x16\x84{\x91\x99\xe1\xbf\xb7\xf4vr;\x98\xff?C\xee\xd2x\xccL\xa9\xbf^\xff\x06\xbb\xdd\xb2\xd6?j\xe2&\x8e\xeb%\xdb\xbf\x82\xe9J\xba\x9b\t\xdd\xbf\x89\x0b\xec\xcd:G\x08@SS6\xdd/\xc8\x10@\x8f\xa1m\xaa\x90\xb6\r@\x10kbJ8m\xf5?\x936\xa6\x02\x07\xd9\xe3?\xa0\x1f\x9b\xee\x91\xfa\xdc?lH\\\x17\xcd\x08\xf0\xbf^\x84\xe4H0\xfa\xdc\xbf\xa0b\x19\xdd\x88G\x02\xc0\x18(\xe3\xb5\xdd\x18\x0f\xc05@\xbe\xfax\xd4\xe1?\x87\\C\xfa\xb1\xfa\xd4\xbfx;\xde\xf4\x17\xd8\xed\xbf\x87n\x8bF-_\xb7?\xc0\x9a\x1d\x94\x9fL\xc2\xbf\x82\x81o\xb3\x90\xdd\xfd\xbf2\xc0\xcdol\x8d\xf3?\xf2\xee\x1a9^\x01\xe4?\xb9q+\x0cg\x85\xe7?\xe8\x1d\xdb\x0c\xbf\xfd\x0c\xc0\x96\x89\x15\x14\xe7\x95\n\xc0s\xcc\xb5\x1e[\xd5\xe3\xbf\xc2E\x9c\x904\x91\xc0?\xce^d\x10\xe9\xc4\xfc\xbf\xb5z\x10d\xf7\x10\xf4\xbf\xb0\xdb\xef\xdc\xcei\xf2?n\x91\xb6\xbb\xf0\xd2\xed\xbf\x8e\xb1m\xb3t\xb2\xe5?6\xd3\xdd\xb5\xefu\x04@\xb3,w\xcd\x98P\x05@n<\xbbR\x06\xc9\x11@{5\xc2\xe6\xef\xf6\xf5?\x9bp\xb0~F\xec\xec\xbf\x1d\x07\xbbR\xa3g\xbb?\x03C\xc2\xc1\x82\xb8\xd4\xbfD5H=\x06e\xf1\xbfx\xf7\x85\xa3\xc6\xc6\xed\xbf\x17>wuB\x94\xb9\xbf\x90h\xaa\x95\xa8\xb7\xe9\xbf6\xb4\x92W\x07*\xc3\xbf\x1f\xd1\xb0|`A\x03@Y\x85\xa6\xd4\x12\xa1\xd4?N\x9a\xa1\xf5\x00h\x10@\x87\x93d\xda\x00\xf4\x13@W\x90_U^\x8e\x0b@\xae(\xb6\x1f\xa0\xf5\r@\x8d\xb4\x95\xe4\x00\x8a\x05@%\xbfyI<\x8a\x06@\xad\xe6U\xa5\x14\xa0\xfa\xbf\xa6\x18NL&0\x04\xc07\xe9\x16/\x08\xf7\x04\xc0\x81\xd5\xc4K\xc7\x1b\xee?s\x05\xbd\xddR\xd3\xee\xbf\x19\x1c?\x0e/\xed\xf6\xbf\x11\x8a\x8c\x16\xa3\xa5\x01@\xcdK\xdd_\x87\xf8\xef\xbf4\xc36\x85\xbc\x0f\xec\xbf\x80e\xddq\x95\xea\x08@L\x18\xad\xfc\xa8\xf6\x11@\xf7\x17.\xf2\xbd\xa7\x03@\xed\x9c\xa9\x90\x89\xef\xbe?\x90\x08\x12&k\xff\xde\xbfO\x91qU\x1b\xb1\xe0\xbfc:o\xb1$\xa5\xf6\xbf\xa2i\x17S,\xc5\xf1\xbfD\xe9\xba\xd1]\xb2\x05@(\xaa}i\xd7\xe1\x0e@;x\x1e\x9c\xcd\xcc\x15@\xb9\xe1\x16\xe9\x9e\xf7\x1a@\xbf49-\xdd\xca\x1f@\x8a\xf1kV\x9c\xc2\r@QQ\xe0\xc6"\x1d\xfd?\xe0\xea\xcf\xe8\xd4S\x03@[\r\xc4\xfb`\xd6\xf6?{\xd7\x0e*\x84\x1d\xfd?\xe5\xddO\xd5\xb2`\xf8?h\xa4\x97rM\xe5\xd1?\xb4\xec\xfe\xd35\xd4\xfa?\xae\x93\xc1\x9b\x06\xf7\xfc\xbfE\xcf\x99k\xabDJ\xbf\x1b\xa0|\xf69@\xc8\xbf\x97\x8b\xff\xda\xf1l\x08\xc0I\x84\x087\x915\xfa\xbf\x1d,n8\nZ\xec\xbf\xde\x16+\xf4\xc3\xc1\x08\xc0J\x1c\xa09\x01\x1b\x07@\xee\xf0\x89-w\x06\x15@\x0b\\\xef!\xf6\x0b\x03@<&\x0e9\xbe\xea\xdb?\xa8F\xecl2\xa9\xe0?\x1fVU\xc3\xaf\xfe\xd3\xbf\xbd-\'\xaa\xdf\xa8\xd7?\xe0\xa5\x0c\xc2Ih\xd0\xbf\xaft\x90\x05td\x17@\xd4r\xff\x84y\xdc\x17@\x10D\xf8\xb0X\xa6\x15@\xee]\xab\x12\n|\x12@\xe3\xa6t\xea\x1b\xaa\xee?\xe9\xad\x01\x1eH\xd3\xf9?\x8e\xdaF\xd4\xdf\xef\xf7?9\xc4\t\xbb\xf01\xd2?D\xa1\xf6\t\xcb\xc1\xf6\xbf\x92{\x171\x84t\xf4?\x0cI\x9e\xf8\xe6`\xe6?\x03\x11\xf57\x8c=\xfb?9n\xf2s\xa9\x86\xf1\xbf\x80O!]\x90F\xef?\xe5\x1c\xc7{\xbf\x0b\xc9\xbfq\x91\xd7_\xaf;\x05@\x9fL\xb3F^b\xe7\xbfl\x99\xabfP\x1b\xf6?\x07\xe2`j\xf9\x19\x0c\xc0x\x0eE1\x0b&\r\xc0\x87W\xad\xd6"\xd2\x00\xc0\x93Ii\xfd\xcac\xf7?\x19\xd8\x0e\x84@\xbd\xfe?\x88\xef\xdb\x7f\xb7\xa2\xd5\xbf\xee\xe6\xa6\x1b\xfdO\xe6?\xd2/\xf3\xab2\x8f\xe9\xbf\xdfR\xd6\xcdn\xa3\xf5?\x010\xdcXSk\xb0?\x0b\xcf\xf48"q\x0f@\x89\xb3\xacg>c\x06@1\xaa\x819\x1f"\xe2\xbf\xc5$\xa2\xc6)\xc1\xb2\xbfq\xcc8\x7f\n0\xf6\xbf\x89\xcd{\xb1\xe1<\xac\xbfs\x10\x94l]\xd3\xd3?%\r\'\xdd\xda\x0e\xd7?\xcc\xd8\x80iSR\xf9?n\xa9\'\xf04\xeb\xe4?\xb3(\x95\xd0l\xff\xc8?\'$\xd0_\xddu\xfc?t\x03l&\xddk\xeb?\x1aa\x8f\x01\xc9\x01\xe6?_{@\xf9s\xde\xe4?\xfa\r\xcf\x07\xb8\x15\xfa?[\xb9b\x85\x06q\xf0?rz%}I%\xf0\xbf\xd2^\x95(1\xcb\xe6\xbf+1lT\xdea\x0b\xc0$\xb1;I\xb80\x10\xc0\x1a\x8e\xf7J[\xbc\xf2?rW\xd6\x04\xc40\xeb?Vzo\xd0\x17Q\xf6?\xbb\xc6\xe6\xbc\xf3\x96\xeb?\x9b\x88Z\xff\xb6w\xc0?\x13\x8c\x1cM8\x15\xe0?\x158\xf0\xfc\xc1C\xf9?\xfd\xb3F\xd0\x9f\xb1\xf0?\x8d\xd6Ph\xfco\x05\xc0J\x0b\xf6\x9b\xc5s\xe8\xbf\x86\x15JV#>\x04\xc0#\xa1%\xd3\x00o\xa1? \xd6\xe6\x89\xe6\xab\xe6\xbf,7\x94\x151\x12\xe4\xbf@\xf8x\xae\xe0F\xf8\xbf\x031\xce\xe5\xe7\n\xef?w\xb0\xe1\xbc\xb7B\xf8?Y\x0b\x96\x87\x1a%\xe6\xbf\tK~\xef\xed\xdc\xfd??\xb1t:\x05K\xf2?\xdak\xe6x\xcb\xae\xda?\x93\x01\x000\xd4y\xc5?51\xd8\xc0~\x9b\xcc\xbf\xb8\x18\x80(\x97\xba\xe5\xbf\xa2u\x89J\xdb\xed\xe1\xbfb\xb3\x1b\x8b\x9as\xd8\xbfs\xaby\xbd\xa0}\x01\xc0:\xe4(q\xea|\xcf?\x96FI\x91\xc0P\xe7?;H\xb6\x15\xcd)\xf0\xbf\xa1\xc7ei\x86\xda\xf9\xbf\xd0a>W\xa2W\xf4\xbf\x86=\x7fb>?\xe5\xbf\xc2@B9\x03A\xee\xbfwP<[f\xc3\xee\xbf\xf5\x10x\x06\x9f\xd8\xf8\xbf\x0b\x15\xfa\x9e\xfe\xaa\n\xc0\xdc\xa4\'\x1ev\xa5\x0b\xc0G\x17g\xaf\x07"\xea\xbf\xd6\x12!`\x9f\x1f\xe9?\x83\xa7P\x9b\x00\xb2\xb5\xbf\x11\x8a\xac\x82\x92\x83\xea?C\xc8\x03\xb7jx\xe2?\x8b\xe1t&\xf7\x1b\xf6?\xd3J\x01\x15\xb3x\xe8\xbf\x03u\x0eC\xd5\x8a\x04@&}G\'\xc4l\xc6\xbfS\xad\xc5\xee\t_\xf4?&NoP\xe2\xb0\xed\xbf\xa6\xb1cw\xc3\xa0\xc6?(.\xcf\x15On\xba?\xf2\x0c\x04\x98\x99\x93\xe6\xbf=\x93\xbbt\x1d\xd6\xfb\xbfZ\xc0sw\x05\xa7\x03\xc0\xd3\x14\x15YJ\x07\xfe\xbf\xb4\xa3\xda1`\x14\xc2?\xd7[\xa6\x8f\xb2\xca\xbd?lM\x7f\xf2\xa6\x19\xe5?McA\xa8\xe0\xeb\xe4?\xd9\xf1J\xe4\x11\\\xdf?P\x82\xe7\x8d\x8b\x7f\xd3?=\x8aR\xf5\xd5\xe3\xee\xbf\xb9\x03$\xb9\xc41\x00@*\xcf\xc0o\xbd\x96\xfa\xbf\xbc\xa8G\xd6\xd7\xb7\x01\xc0\x18\xe8\xe3F\x14\xc9\xd9?\xcfN\x97k\xf5\x7f\x00\xc0G\x1c\xfc\xc7(\xa4\xb0\xbf\x06\x1a\x06\x85C\xf1\x04\xc0\xac6\xc2\x9d\x8bG\xff\xbf\x1dL\x10\xb6H_\xd7\xbf\x84f\xf1P\xe6\xfc\xc6?\xdfu~\x98\x14\x11\xd0?\xed\xbe\xefPV1\xcd?\xf7\xffa\x17\xa36\xf8?\xcc\xc8\xa2\xe4\x11\xdb\xe2?\xac\x0b\x1b\xe8S\x8e\xa4?\x82 /\xd8\x10X\xc2\xbf\x11Z\xab\xb4^\x10\xfe\xbf\x93\xce\x18\xce\x91r\x03\xc0\xc8D|\x85\x93\xe1\xec?:\xaex=\xa1<\x00\xc0\xce\x07\x94\x16DS\xf9?\x95\x92\xe6\x07\x92p\x01@f\xf2\x97\x8a\xe8!\xee?`\xec\\\x8d\x0c9\xef\xbf\xb5\x02\xe9c,D\xd1?\x02\xf4h\x82,\xe4\xd4?\x02\x05~\xa5)\x14\xf4\xbf\x10<\xb1\x8c\t\xef\x00\xc04k\x9d7vt\xe5?\x98%\x01\t9\xd8\xfb?\x0fL\xe7\xfb"\x9e\xf2?\x96\xc0\xe4\xad=\xcd\xf8?D\xed\x86\xab\xff\xa5\xe5\xbfJ\xcb1U\xd7\x9a\x05\xc0\xf4\x81\xd9_^n\x08@F\x86\x1b\xe2\xc5\xed\xe9\xbf\xbc`\xbd\x95\x94\x18\xf0?\xcb\xd0\xbb\x81\x05\x87\xf2?\x0b\xb4~\xb1\xc1\x0f\xf8?Y#\xe0\xd4n\xdf\xc2?\x01\xc5Z\xb1M\x08\x04@\x01\xe2P\x14-\xd0\xeb?\x1fH$>,\xa0\xd5\xbfSyM-8\xa4\xf9\xbf\xa4x\xd8\xcf\xc8;\xcc?\xb5\xb51]Kn\xe1\xbfi\x8e\x8dI\xae\r\xf4\xbf|\xeb\xb8Ny%\xfd\xbf\xc2\x14\x92\xd0|\x12\xfb?5|\xbf\x95X\xb5\xec?\x07\xb8i\xc6\x94\xb4\xf0\xbfBI\xcc\xfc\x85?\xe5?\xb2\x9bXs\xbd\xe8\xb0?\x90i\xc3qn\xfc\xe0\xbf\xb3\x95\x03\xde\x1c\x0b\xc4?\xeb\xeb\x9d?\xda\xb3\xd8\xbfM\x18\xb9M\xfc\xfa\xf8\xbf\xb8\xa5\xe9\xc9\x86\xd2\xd0\xbf:\xa3\x129\xf5\x8f\xf8\xbf\x03\x80W\xba\x83\n\xf8?\x06\x99\xca1\xa8\x9a\xd2\xbf\xfa\xbf\xdf\x1d.\x10\xf1\xbf\n!A\x1a\x01\xa1\xdd\xbf\x89G\xe4\xf6\x0c3\xe9\xbfb\x03\x94\x15\x08\x93\xfa?\xbd\xd6O\x18\xe3\xec\xd4\xbf\xd0{k\x10\xc1\xb6\xe1\xbfQ\xd1\xd1\xd5\x9a\xb5\x06@E\xe0\x8aF\xd7E\x07\xc0\xa7\x8d\xb7.\xb2\xd3\xf6\xbf\x1fKTy\xd9\x99\xfd\xbfD\xf0N\x12\xbfA\xf4\xbfv\xff\x13 c\x0c\xfe\xbf\xa1r\x0b\x8e\xa7T\xe0?\x87\xc6]\x12\x93A\x07\xc0\xebS\x08\x97O\xe7\xf1\xbf9\x8bD\xea\xd9\xe4\xe2\xbfv0t\xa0J\xcb\xe6?\r\xa5"k\'\xe6\xf0\xbf\x07\x8d\x99\xc5C\xa8\xc9?1\xec~\xb6\x7f\x9d\xac\xbfp\xde\xe2\xc5\xce0\xd6?\x02Y\xd3#yQ\x88?\x05\xb9\xde\xb8e\x8b\xe5?))\x81i\xce\xc4\x05\xc0:\xd0\xadx\xe9\x1b\xd9\xbf\xeb\xf3e\x05\x7f\xc1\xe7\xbf\xd5i\x00\xa0\x1b\xfc\xda\xbf\x17\x070t;0\xc1?9U/\x18\x1c\xe4\xe8?XlF@\xf5\x1bD?\xf8\x96\xddM\xdb\x98\xdd?\xad\xb5\xa4\rp\xab\xf7\xbf\xd5=\x9d\x9aVX\xf2\xbfo\xcb\xfaG\xe8\'\xec\xbf\x96\xb8\x84\x8fo:\xf4\xbf\xe0\xba\xae\x07c\xb1\xfa\xbfxG\xcb\xb4Q_\xd5\xbf\xd2\x94c\xa0\xc3\xa2\x05\xc0\xab\xa3j\tN\x17\xf0\xbf,\xf2z\xaf9\x8d\x01\xc0D\xe4Ss\xdf\xe2\xfe\xbf\xda\xaf\xebM\x1b\x86\xe7\xbf\x99\xbd\xaf\xca\xf32\xde?\xd8 \xe3VPg\xf5\xbf\xb8\\\xdd\x8b\xf7_\xec\xbf\x19\xe0NF\xe6\x9c\xe1\xbf\xd8m\x0b(\xa1\xb1\xe1?\xa4#T2l\xf0\xf2\xbf\x1a\x91\xe3\x8e\xed5\xbf\xbf\xb3\x85\xa6\xec\xec\x9d\xc9?u\xa7?l^Y\xe2\xbfQ\x945\x16(H\xec\xbfT\xc9\x0er\x97"\x01\xc0\xfa\xa3\xe9\xb1\xf1\x88\xf9?\x06sd\x19\xae\xc8\xe0?\x93\xa8\xe6b}<\xd0\xbf\x8eF$XX\xb5\xf8?\xb8\xdf\xdf\xe1\xb5[\xf9\xbf\xa7\x0f\xe3\x8e\x87\xa0\x00\xc0\xa3\x9f\x10\xc1ax\xb8\xbf\\\x13\xb4{\xcfc\x04\xc0\xa0c{f\xce\xce\xd3?\x1fz\xa7\x14\xbeY\xf7\xbfa\xe8m\xef4c\xc0\xbfo\xbe\x9f\x83,\x8d\xba\xbf\xec\xe5\x87\xdbt\xd0\xe2?\x8d$L\x98\xe5B\xe7\xbf\x04C\t\x8e\xec\x1d\xd2\xbf\xb4&?3\xdd\xd8\xe9\xbf]\xeb\x89\x90O+\xf0\xbf\x92E\x98I\x15\xa6\xe7?\xc3FB\xc5\xce\xef\xf0\xbfV\xbeT\xb17\xb7\xe5\xbf\x91\xccF\xf8\x1a!\xc7?\xae\xc6TKDG\xe0\xbfZ\x00\xe8xF\xc3\xe2?\xe7\xa1m\x01\x82\xfe\xdc\xbf\x9b\xbcOn\xc0"\xe3?7\xceA\xd8\x815\xd0\xbfpt\x99\xdcG\xd3\x01\xc0|yZ\xa1\xf0\x84\xe9\xbf6%\xcdg\xb9\x9a\xa4\xbf\x19\xb9\x0bd\x92}\xec\xbf!\xf1\x98:\xb0\xa0\xf3\xbf\x93e\xbc[\xab!\xf9\xbf\xc2#\x0e6\x98S\xaf?\x92\xb7\x90\x07\xe3\x12\x07\xc04x\xe8\xb2o\xe9\xdd\xbff\x84\xcf\x1a\x1dn\xee\xbf\xdab*\xb4\xdac\xf1\xbf\x80\x92\xbb\xf3?\xc9\xe7?\x1d\xf5\x99\x00P?\xdc?2\\\xc8\xad\x1b\x86\xed?\xd1\x9a\x02\x14\x195\xc5?\x16>C\xb7F\x0f\xe9\xbf\xa3\xdb\t\x15\x87\x04\xd6\xbf[\xe7\xd4\xae\xfa\xdc\x00@\x13\xd1\xd4\xf2\xcc\x95\x05@"\x12\xc6\xebC\xda\xe6\xbf\xf7}\xb3\xe3\x15\x99\xd2?\x1d<\xdf]\x919\xe2\xbf\x10\xfeU]\x9c\xc3\xf1\xbf\xfb\x85\xc6q\x883\xe9\xbf8\xb2\xfb\xad6>\xea\xbft\xa5\xa7j\xa6<\x94\xbf\xdb~\x979B\xe9\xed?\xacg\x83\x91\x043\xa7?bN\x06\xf9n\xc1\xe6?\xbbu\x15\x93\x92\x1c\x00\xc0\xf3\xf0s\x94\xc4P\x81\xbf\xda\xcam\xa9K\xc5\xc1\xbf\xec\x9a\xcb\xc6\xd7E\xe0\xbf\xa3\'p\x0eDA\xe0?\x95\xe3\t\x1f\n\\\xce?\xfes\xfb\xe6\x99a\xf4?2^ZFw\x0c\xf0?\xd2\x17\xce\xe0\x9fsu?\x8b\x0e:\xd5=\x04\xc1?u\xf8\xd7\xeb\x7f\xdc\xd5\xbfM(\x9f\x82\x1f\x1d\x04\xc0\xef\xb3[6\xf5H\xb5\xbfK\xb8\x95k\x12\'\xf8?\x10|;\x1d\tM\x11@5.\xe3U\xc7\xb1\xe0\xbfy\x87\x91]\x0e\xb8\xf7?\x7f/\x97\t=\x97\x0b@v\x95E\xa9\x08O\xc7?\xf4\xc7N&\xfa~\xe8?E\x8e\xfb\x17\xab\xdb\xe3\xbf)\x9a\x967\x84\xe3\xeb\xbf\x81\xc2#p\x0b\x89\xdb?\x84\xado\xa9&\xd7\xf1\xbf\xb5l\xb7s\xca\x8d\xf6?\xe5dV\xa1]\xb8\xc6\xbf^\x96N\xdd\xb8\xb6\xd2?\x01\xfe<\x8e\r\xec\xe0\xbf\xcacd\xfd\xdd\x0e\xf5\xbf\xd4?,\x98\x13K\x04\xc0p\xa5\xb1\x8e\x90\xb2\xf5\xbf~\x90f\xcc\x05\xaa\xf0\xbf\xed\nz\xcc}\xf8\xe0\xbf=nu\xfb&x\x00\xc0Se\xcao\xa7\xd0\xc4?\ts`\x00\xf1\xc3\xf2\xbf\xb2\x95\xdd\x86\x01\x97\xc2\xbf\xb0\xd1@*\x0fp\xc7\xbf\x85\xf9\xd7\\\xb2\xa4\xf3?j\xcc\t\xed=\xb2\xf4\xbf\x88.\x8a\x97\xbc\xec\xae\xbf\x89\xbd\xda\xe3\x8f\xbd\xbd?\xdcy"\x0f\x10\x0b\xf8\xbf\xa7j\x94E\xf4\xc6\xee?\x15*\xf3\xc7\x9d\x9b\xff?\xa3\xaa1\xde\xf3!\x00@\xd8V\xea\xe6\x0c\x9f\xe4?P\x0bdA\xe7\x1e\x00@f\xb2e\x84k\xd6\xea\xbf\xc12\xaf\xd8,\xdc\xe6\xbf\x9dz\x13\xb7.\xa1\xf2?\xac\x1b\x01\x8d\xf1E\xdc\xbfNPG@`*\xb0\xbf{\xf9.\xc8ho\xf0\xbf%\xca\xb2z\xf0\xa6\xf4?\x16\xeb\x9f# (\xd9\xbf\xfb[\xff\xf0\x9e\xdf\xfd\xbf\xe0\r\xc0\xd0w\x07\x01\xc0\xdar\x1cV\xc5T\x00\xc0GQ\x93\xf9\xf1\x1c\xf9\xbf\xa8\xe5V D\xc6\xb8?\xb0\xf8\xac\x8a\x9b\'\xf3?;A\xfe\x94m\x1c\xf7\xbfM\x14YC\xc4\x0b\xf4\xbf\x0c\xa6$\xdc\xb6\xd6\xb6?\xb6N:R\x172\xea\xbf\xe5X\xe2W\xcc\'\xf5\xbf\x1b\xdf\xc2\x16\xc4J\xc4?&\x19D+0\xef\xe8\xbf\xd9\xeci("\xf2\xe4\xbf\x0e\xa0\xe3*\x96\xec\xff?7\x19\xd6\xc9R]\x0e@\xeb\xa7\xbbx\xfdp\xfd?\x8d9\x15O\xd07\xf6?\t\x97x\xa9y\x82\xf0?\xfbM\x083\x8e\x1f\xf1?\xb9\xc2\x96\xfaG\xbe\xee\xbf\x8b\x0e\x82TD\xda\xea\xbfa\x12\t\x99\xc1\xbf\x16\x9d>u\xef\xe5\xcb?\x94\xa0\t\xc6\xcf!\xc9?\xc0_\xd82\xa8R\xf2?\x10\x9a\x14\x90\x16\x82\xf7?\xab\x04\x08\xcd\xbd\xef\x03\xc0\xdf\x96e\xd7\x8e\x01\xc8?Bo\xb9\t\x85\x19\xd9\xbf\x15\xdc\xdf.\xb7\xf3\xc1\xbf\x9a\x9c\xfc\xe9\xe1Y\xf3\xbf\x0f1\x1c\xf6S\xaf\xf1\xbf\xbf\xed\xa1\x9e\xb0\xce\xe7?\x83@\x06\xc6\x0fv\x08\xc0wH9\xf3\xa1\x05\xf1\xbf\xc1\x05\xdc\t\xf1|\x00\xc0\xb4\x14Hy\xa8\xd5\xcb?\xad_\n>s\xf4\xf5\xbf\xdc\xe6\xc6\xa7vz\x01@l\xcb>\xf6\x94\xfa\xd0?|\x8d*\x8c\xc2\x8e\xe6\xbf\x19\xc5\xd7?\xbe.\xe2\xbf|2s\'0\x1c\xc3\xbf\x94\n|W\x8b-\xff\xbf\x1aD_t\x7f\xcf\xee?\x1e\xbf\x9c\x9dr\xc0\xf3?\xf3EW\xb9j.\xf2\xbfL\xd2\xb9Z=\xdf\xcc\xbfX\xf6\xee\xabqH\xf2?M\xb5G\xe4\xe1\xe7\xfb\xbf\x83*\r\xdc\\.\xc4\xbf\xa65\xa9h\xbf\x86\xf5\xbf\x04(\xc8x\xb3\xdb\xf6?\xb4\'*\xcc\x12\xa4\xe8\xbf\x95T\xbdl\xdeE\xe1\xbf/\xb06\x0f\x00\xe6\xe3?J&\r\x85\x97\xd6\xfb\xbf>\r\xcb\xacQ\x04\xdd?\xbfW0N\xaf\xc8\xe2\xbfS\xf2\xf1\xa8\x85\x1a\x04@_\xee\x1d\x12w\xf1\xe7?\xdc\xa9:\x10\x99\xd1\xe7\xbfp\xb4\x92\xafn\xeaY\xbf\x00\xa0\xbf\xddZQ\xe7?\xfe\xde\xfe\xc0I\x96\xbf\xbf"\xae\x0c\xef\xd4B\xef?l7H\xf8\x126\xd4\xbf\x12\xaa\xfa\xafh\x07\xd9\xbf\xc4\xben\xed\x1a-\xf6?\t#\xc6\xc9Fn\xab?\xed!\xf0^\xc4\x18\xe1\xbf \xe3]\xe2\x8bL\xe4\xbf\xfa\x18\x1d\xf8\xd8\xf3\xec?\x0f\xb4\xed\xb1\x88h\xd6?u\xa9\x91\x19\x86\x9e\xda\xbf\xc5)&\xd2<\xe4\xed?,B~\xc0\x05\r\xeb?*\x8bI\xde\xdfc\xe1\xbf\x88\xdc(\x80ES\xfe?/\x13R\xc6\xdf\xfa\xec\xbf\x8d\x01\x9e\xcb\xf8\xa4\xb4?-\x95\x83\xb7e\xc6\xd5?\x84;\xebk\x89N\xcd\xbf\xb1yG\x9bTE\x87\xbf\xe5\xf8<\xf3\xfas\xff?\xf7D\x96\x8b\xf2\xbc\xbf\xbf\xe6\x9f\x8b\xe82\xde\xe5\xbf\x98Mo}\x8aZ\xd1\xbf\xd4\xee\xc3\xbb:s\xc6\xbf}\xf0\x11\xea\xf4\xd6\xec\xbf#\xc5\xf0\x8e \x97\xd9?\x04\xfd\x19>\xa0K\xc2\xbfph\xc0\xbd\xae\xdc\xeb?\xe4o\x9d\x89\xeb\xab\xf2\xbflac\xe6\x06\x84\xc0\xbf\x1c\xb8T\x89\xfd\xed\xfa\xbfg\xc6|N\xa9\t\xd3?\xba\x90\x08\x1f\x9aF\xc1\xbf\xfaFX\x91d\xfe\xe6\xbf\x8b\xbf\x89\xeeH\r\xc4?\x1c\r\xa2\x17\x88l\xed\xbfR\x9dJ\xfc\xf9 \xe7?\x94\x83\xb2\xb3\xaf\x90\xd6\xbf\x8a,\xad\x8d\x10\xcb\xf0\xbfw\x16\xc3\x15\x1d\xdd\xef?,\xedA]\xd3\xd5\xf4?+?\x1c[\xf1\xcd\xf1\xbf\x87H\x14\x0b\x11=\xf4\xbf\x86$\xc4\x84\xac\xb9\xc8?s6\xa5u\xfe\xb8\xf2\xbf_3v\xc8Tp\xc0\xbfU\x85\xe4Yz%\xdf\xbf\xcep\x8aQf(\xe3?\xd2\x92\xf4mQ\xd7\xf2\xbf-!/\xf8<\xde\xd8?x%\x01\x19\xc0~\xed?\x1c\xcf\x84X\xd4\x8e\xf3\xbf}n\x0eq\xe9\xc4\xe3?\'9\x80,\x10*\xc7\xbf\xdd\x8ay\xca\xf1\xed\xdb\xbf\xb6\xfc\x84\x197S\xe4?\xa2\xe2\xff\x96z]\xe1?N\xba\xe0\xf7\xa4\xa4\xd2?O\x87\x03\xb8\xfdF\xdd\xbf\xbd\xf6_\xd2!\xe0\xf0\xbf\x8e\xbb\x8b\x01\xe2\x12\xf1\xbfs\x03\x10+\xfb1\xc1\xbf\nD\xc5\xf5\x11c\xb7?y\x85\xd4/:;\xdb\xbf\x1fYB\x10\xc7\xec\xd9?\x8b\xec\x84Jl\x13\xcb?\xbb\xe3U\x1e/\x94\xf2\xbf\xeb\xf8\xf12!\xd6\xf0\xbfT\xdc\x1c\xa3\xeb\x15\xc1\xbf\xbb\x94\xc99\xa4\x04\xce\xbf\x06\x98\x12\xd2\x08\x90\xd4\xbf\x06\xd3O\x9d\xda9\xe8?H/Y\xd2\xde\xeb\xd4\xbf\xe1\x83#\xd1\xf0\x93\xcf?\xf5\xe6\xdfU\xaf\xe2\xe6\xbf~\xbfK\x9ch8\xd2\xbfz\xc6)\xfa\x96\xe2\xd1\xbfmu\xb8\x8e\x86p\xec\xbfE\xd2X\xe1\'\x9e\xd8?\x8e\xb6\xda\x9c,\xe1\x9d\xbf.\xbc\x81?m\x90\xf9\xbf\xfe\x90\xa2\x9eH\xa4\xe3?L\xb6hJ\x05\x8a\xe7\xbf\x95\xa0\xa1\xe9&\x8d\xf7\xbfy\xd9\n\x07\xeba\xf4\xbf\x83\x85\x91\xc6\x08\xaf\xb5\xbf>\xd8\x96\x86\xf8\xd2\xe9\xbf\x93y\x10\xcc{9\xf2\xbf\xe5\x07E%\xc1\xcd\xec?S\x7f\x04\x8e\xd4\x1b\xd4\xbf\xeb?\x94\xa4\xffe\xea?b5\xde \xab&\xe6\xbf\x18J\x90\'\xb6\x87\xc9?\x99\x0c\xc7my*\xf4\xbf\xc0,\x7f\xabt\x0f\xcc\xbfQ\x1dj\x04\x97\x9f\xd8?\xb6\xa6)\xfc\xf5\xe5\xe5?\xc8\xd10u%\x9a\xc8\xbf\xe7g\xce\xaevI\xd1\xbf3\x9b\xef\x11l\x16\x97\xbf\xd3\xf9aT\xa0\x83\xe7?\x99(\x90v\x01e\xb6\xbf\xd3S\xa2\xcf\\O\xd1?"\xe1\x84\x13\x83l\xf6\xbf\x14\xa8\x11\xe8\x83\x0f\x00\xc0\xa1$y%\xc7$\xd3\xbf\x0fZE\x91s\xcb\xe7\xbfL\x1c\x18k2~\x0e\xc0O\xa2>h\xc9\x14\x0c\xc0\x12\xf0\x99\xc2\xf5\xe9\xcc\xbf\xaa\xb41\xd5\x05I\xf6\xbf\xfe\x1b\xa4J\xd0\xc8\x04\xc0i:D{\xc72\xf1\xbf\rMa\x8eta\xe4\xbf\x96\xa3v\x84U\xd3\xea?\x84=\xc3\xe7\xd3\x1c\xe5?)\xad\x02\n\xc0\x02\xf0\xbf\x9e\xe7\x0f\xf9~c\xf1\xbf\x08\xc8\xfa\x8c\xb7;\xfe\xbf\x8af6yQ\xcf\xf8\xbf$\xb8\xb5K\r@\xc2?f\xcb\x87\x92eO\xdd\xbf\x91_\xca\xb2\xae[\xe2?\x83\x8a\xf8a8\xb2\xcb?\x84\x8a\x11\xa6w\xb0\xec?\xed\x08\x08\x17r\xa6\xcf\xbfT\xe8\x92C\xf1\r\xe6?\xaf\xfa\x0e\xe1\xe5$\xf9?\x8bKS\xae8\x8c\xe3\xbfeL\x84\xe0\xa6$\xe4?@=V\xe4\xe2h`?\xda\xeb\xae\x0b\xf6D\xe8\xbf\x89-\xe7%\xc08\xcb?&Y4E~\x9f\xf1\xbfP-\xcb0\x96\xb6\xd8\xbfso:W\xadM\xc4?e\xfd\xe9\xbb/\xa4\xec\xbf\xaa^\x8f9\xb9\x80\xff?l\xcf8#\x06-\x05@\xafA\xc6\xacL\xd6\xf7?\xf5\xd8\xfa\x95\xf8^\xd9?\xb3?\xba\',\xf8\xfc?;\x94\xde<\x8b\x12\xb5?\xb9\xc7\xfa\xb1\x13@\x00\xc0\xa9\xbbC\xee\xdc\xcb\x00\xc0o=v7\xe3\x98\xf6\xbf\x1fW\xb7q\xd5\xb3\x03\xc0\x0b\xa7GI\x95\x97\xee\xbf\xc5\x9a\x17\xa6\x02\x85\xec\xbf\xa44j\x9b\x90\x10\xdb\xbf\xa1\xbc\xfb\xb7A<\xf4?}\xb0\xeef.\xa9\xc0?\x94)\xfc\x86\xb7\x91\xf2\xbf\x163g\xea\x9f\x1d\xe2\xbf\xba\xd2\x10\xa0\xcfo\xd5?\x7f\xf8\xec]Ad\xd4\xbf\xa4\xcf\xcdpf\xeb\xbf\xbf\x08\xaa\'\x93\x97\x88\xa2\xbfJiD\xa8\x96\x19\xfd?x\xb0\x81.am\xd6\xbf\xdc)\xe3\x0eM\xc7\xd1?\xacb\xddR\x98\xe6\x00@\xa5\x9d\xc0\xf4\x98\xd9\x05@T\xbd\xc3\x9f D\x01@\x8e`u\xdbH\xfb\xf8?\xe79\xa2\xef\x90O\xff?T*\x9c\xf8\xa9\xd0\xe3?\xd1_\xa7bJ\xef\n@\x04\x97\xee]\x14\x9b\xfb?\x16K%\xcfV1\xdf\xbf\x0b\xaa\x19\x17\x17\x00\xd8\xbf\x02\xf8d$\xbb.\xfa?\x82\x12[\x96p\x04\xe6?\xfbh\xc3\xaf\x88\'\xcf\xbf\x95\xd2Wsj\x80\x06\xc0O\xe4x?\xbb\xe7\x05\xc0X%2\x8eYY\t\xc0\xb1\xb2\x7fU\x90G\x02\xc0\x13C\x16\xd41\xb1\xfb?\xca\xe9(\x1cx|\xeb?_\xea\xd4}\x9d\x0c\x88?\xde\xb8\xeci\xc5\xfb\xc4?m\x17O\xd6\xc5V\xea?q\xa3\x7fN~7\xc6\xbfq\xdc__\xe2\x9b\xc1\xbf\xbbo\xbf\xd3\x92g\x03@\xc6M\xf9\xcb\x15k\x12@\xda&;jw\x0b\x0c@\xbc\xe2{<\x86\x0e\x04@\rX\xec\xe6\x14i\x9e?\x86}\x18\rb\x1e\xf2?{\xdb\x0ej\xfbn\x03@\xbd4\x13G~\\\xf7?\xa4j\xc6\x88\xd7P\xdc?\xd8\x04\xcdx\xb3n\xf0?\x9bz\x86P\xb2\x17\xe9?n\xad\xee\xdfh\xa0\xf4?L\xfc\x87\x95\x08!\xfa?B!n\x83\x8cY\xf1\xbf\x9f!A\x92\x8d=\xed?\xa1B\x81\x8c?\x15\xca\xbf\xa3\xf6f\t\xcc\xad\xd8\xbf\x1d\x1d\x97\xee\xa05\xaf\xbf\x8e\x893\xe1?\x07i\xa5\xb2:p\x00@\xb9z\x9cw\x9fw\xfc?c\x1cvrr\x90\xfc?Oz\xebW\xdaj\xff\xbf+?\x9a\x92\xc9\xe8\x00@\x83\xe9\xb7D\x89\xb2\xf4\xbf\xa6\x91\x89\x80\xf7t\xc1?Ox\xd1\x1ea\x01\xef?L\xb2\x1d\x02\xe31\xe9\xbf\xb0\x88\x12\xa7\xdc\xaf\xf7\xbfR\xc39\xa2+\xae\xf2\xbf?]\xb0\xc7\xc0\xc0\x02\xc0\xbe\x91\xb8K\xc3w\xb1\xbf\xb1\xd6n\xd7}\x82\xf6\xbf\xcb\x18UC\xdf\x92\xd7\xbf:\x08\xfbM\xaa\xb4\xd1?\x18=t\xe5\xb0m\xe2?\x01%^\xe7q\xb1\xf9?\xf7\x18j\xe8\xd67\x06@O\xbe.$Sf\xf9?\x02\x1b\xdf\xa7\x1c\xd4\xeb?!\x8a@9|(\xf0\xbf\x99\x89\xb1\x14\xd8#\xe5\xbf\xb3\x1e\xb1\x97\xcc`\xb4?\xd0\xdc\x99\xbe\xed\xb8\xd0\xbfj\xab\xb7S_*\x0c@[\x86r]0\xf6\x00@=\xda]\xf4\xcd\x97\xe6?\xee_\xbd\xe1E]\xc9?\xa8p\x8b~\xe1=\xf7?N7\x100\\v\xb6?(\xfb\xa3`\xe7*\xf3\xbf\xe5|\x10\xeb\x1e\x08\xe7?\xd1\xf7C\xaa\xd5q\xe7?\x1aq\xb1H\xb8C\xe2\xbf-\xc27k\xe9d\xfb\xbf\x7f&\xfc7\x1cX\xe5?\x0e NO\xf0\xe5\x10\xc0\xdd\xdb\xf4\xee\x90\x9b\x18\xc0\xce\xe9\xa6\x8b\xf4\x07\xfc\xbf\x8b\xad\xe5\xc5\xc2\x8e\xc2\xbf\xb6\xeaa@\xc4S\xf2?\x86yA\x13(P\xda\xbf\xf3\xa9\x97\x84\xc3\x13\xff?a\x98\xa7>\xad\x92\xf3?\xaf\xcc\x1ce\xaf^\xc7?]\r\x9c\x83!~\n@\x10:c\x08\xeaW\xf4?z"\xf74\x8f\xc6\xe2?T\xff"\xc4\xadp\xf0?\xff\xd7\x8e\xb0\x1e\x18\xfa\xbf\xa6\xc1,EE\x9d\xdc\xbf\xe2xn\xa9\xfdU\x05\xc0\ng-\x19\xbd\xc0\xeb\xbf\x95\x89y\xc54\x10\x0b@\x94\x0f\x90~,c\x02@\xd8\xa30\xae!9\xf9?\xfd\xebf\xbf\xe0\xea\xf0?\xc8>\x16A,o\xe5\xbfC\ts?\x82d\x02@\x100\xdf+\x8a\xdb\xd4\xbf\xf7\x9a\xce\xec\x86H\xf3?\xbb\x81\xbd5U\xb0\xea?\xf1&\xc0C\x8d\x11\x00@\xca\xdb\xa3\xfc\x07\xc3\xe6?\xdd\xb9\xceo:h\x12\xc0\xc2*\xea;\xa2\xca#\xc0\xb4\xe7\x1aq\x9b\xc7\x04\xc0!,\xaa\xe4\xa9;\xf2\xbf\xb6\x0cW\x92\x1d\xe3\xc0\xbf(\xc9\xd6\x00]\x01\xdc?@r\x93\xb8\xbfA\xd0?,s\x8f0\x84\x96\xe3\xbf\xc5\xdfD\xf2\x90\xa4\xff?\x1a\xc0\xb2/q\xb1\x1d@\r\xdb\xdax\xcb\xc9\x0b@:\xfb\x92\xa7A\xae\xb0?\x83\x94\'V\x93C\xeb?U\x95g|\r7\xcc?\x92\x15\xe0\x98\x03\xf7\xe9\xbfK\xe7B\x00\x8b\x12\xdc\xbf\xd2\xf9\xca//Y\x06\xc0\x9f\xc3\xfe\x11\xa9\x13\xb7\xbf\x0c\xf0\x9b\x85\xee\xaf\xe1?\xde$O\x08\x03\xe8\x11@g\xec\xec-lU\x11@8\xb2\xf0\x8e\xa8>\xbf\xbf\xe6\xd0\x10<\xa4\x8f\x02@\xb9\x92K\x81\xae\xe7\xf5?\x91m^\x8e\x8c\x9a\xf3\xbf\xa0|\xf6\xee\xdc|\xe7?\x07\x02O\x98d\xbf\x00\xc0M\xc1F\xa3\xd2\x00\x06@\x1f\x9a\xc8\x890\xba\x05\xc0\x13\n ~\x136"\xc0g\xfd\xbc\x9b\xa3\xa5\x07\xc0\xbd\xbb9`\xe4\xe6\xc2?\xff\x9a\x0e\x93\x9ac\xf3?\xf6P)\xf9O\xd8\x8c?\x85\x19xL\x88\x83\xcc?\x87>\x94*\xac\x92\xc9?\x86\xca\xbc*2>\xf7?X\n\xe7\x18\x95I\x0c@AB\x82\x9fi\xc4\xf8\xbfX\x9e\x80\xf4\xbfx\x18\xb1\xbe\xef\x10\xe6?R\x86\xffW\xf0\xd8\xe8\xbf\xde\x83aT\xb9\xa2\xe4\xbfUl\xa8\xc8\xd5\xd9\xe9?:\x18n\xf8\xea\xfd\xf1?\xb2\xa1\tP\xf83\xfb\xbf4\xaa/\\\x92/\x14\xc05\x86O\x98M\xec\r\xc0\xf9\x12\xc6\x1eYe\xdd\xbf\x90K\xfd\xe7Y\xed\xe5\xbf\x94=\xdf\xe6\x10\xfe\xe4\xbf-i\x0b\xfe\xe1\xa4\xec\xbf\xc8\xb1\xe38\xad\x1d\x10\xc05\x8cZ30\xd2\x11\xc0\x18\x19\x95\xc3\xff\xdd\x06@\xf1\xac\xa4/9S\xe9?\xbe0\xdfA\xbad\x00@j\x9e\x1f\x8f\xcb\xe5\xd6\xbf\xbc7Y\xe3\xa8\xe1\xe8?\x07\xd4r<\xaa\xf3\xc3?>W\xf2Z\x85\xc3\xd7\xbf"?\x87\x0c\xea\xc5\xec\xbf\xf7\x91\xcc]\xdc\x0e\x0c\xc0W\xd3\xbdl\x9a\x97\x0b\xc0\xdczo\xe5\xec\xd1\xf4\xbf\x16\x96,\xb7\xb40\xf6?\x99|\xb0\xfdl\x01\xd5\xbf\x9e\x0c(\x1aQF\xcb?\xfb\x93\x15\x07\xb9G\xb9?\x10\xcb!\xc8\xf6\xe0\xdc?\xb5\xd3\xff0\xc7v\xe2\xbfw\x7fP\xd4?K\xf1?\x15\rQ\xc1)\xbf\xe6?mS\xed\xf4\'\xa4\x16\xc0\x9f\xddLg\x8b@\x13\xc0\x7f#JR7\x1a\x0f\xc0.\x93}\x9e6N\xca\xbf\xc7:\xba]\xab\\\xf7\xbf\xa6X\xf2\xee:\x92\xdf\xbf\xaddw\xbd\xfaa\x04\xc0\xa3\xa9k\xb5B\xe0\x06\xc0u\xfd\x85\xfa\x8d\x17\xe9\xbfUD\xf1d\xc2=\x02@\xe1\xc8I\xb5\xa0r\xf2?\x18Iuq\x07\x97\xf4?\xc3H\x943c5\xf8?\x96\x03H\xf1\xece\xe7?\xb9YD\xb4\x92\xa4\xd4?\x05=\xd3W\x96\x96\xf2?ME\x1a\n8?\xf2\xbf\xf6\x91[6k\x8b\x0c\xc0\x13\x0c\xfc~U\x04\x0e\xc0\x88\x04W\xc4At\xcc\xbf\xbc(c=\x87\x0c\t@\xf3\t\xba\x80@\xe5\xf7?q\x0e\xee\x8cw\xb2\xea?\xc8\xb5\xd2Wc\xf7\xf0\xbf\xaaj\xc2t\xb9o\xe3?\xa1\x94\xde\x82\xdd\xac\xe6?\xf51/\xe7d-\xfb?\x1c\xa6_\x01=\xb9\xcd?\x1b[|g\xaa\x82\x11\xc0[\xf5\x88\xba\xee\xb1\x13\xc0\xfb\xc5\xac{\xb2x\xe5\xbf\xa4\xe3\x17\x02\xc7\xc5\x08\xc0\xb8V\xa0j\x90\xd8\xf6\xbfb\xe8q\xafA&\x05\xc0c%\x8e\xc1\'\x1a\x08\xc0hI\n\xca\xbd\xf3\xd2?\x0f-P\x08\xa9\x17\xe1\xbf\xcc\xf9\xc4E\x8eE\x03@\x97\x91\xa1\xbc\x9f\x04\xf1\xbf\x9eH\xee,\xcfK\xfb?\xe1$}\xda\xf6\xd9\xe3\xbfOu\xba\x94\x13n\x01@\x8d\xb9WFO.\xdd?p\xd5yY\x95|\xf8\xbf-\xcfm\x85\xc6\xf6\xf1?\x84\xfah\x1a|9\xff\xbf\xc8\x97\xae\xa0N$\t\xc0\x99\xae\x92\x1aW\xce\xe7\xbf\xf3\xc1\x81\xfc*\xb3\xff?\x00\x9b\x81\xf8\xde\xf1\x06@\xd3\xc0Q\x93\xa0\xb1\xe0?~\x07V\xec|\xb3\xd0?P\x9d\xf3*,\xdf\xa9?\x02\xdf\xb2_\xf6\x8b\xe9?G\xed\x92\x80e\x19\n@2\xe5Ie\xa3\xca\x04@\xdd\xe0\xfd\x9b\x04\x15\xfe?\xbez\t\xba\xbe\x93\xe6\xbf\x07Q\xd6\xba\xf1\n\x08\xc0\xed#u>\x19\x82\xd2\xbfo\x9f!mmd\xe9\xbfqy\xc0C\xf4\x8f\xfc\xbf\x98\xb2\x1d\x84>\xf2\xbb\xbf\xee\xa3\x04\x07\x0c\xea\xf8\xbf\xe7\xae>\x92u\x0e\x05@\xe8\xc4\xd8\x89-\xd0\xe1?\xdb\x0cz\x8e\x95\x1a\xf4?,\x84j\xef>\xd0\x11@5\xe1\x91\xd1\x95\x10\x80?%:\xe8\xc0\xc1\x13\xc9\xbf\x80\x1c\xbd$\xe3\xd2\xe4?\xf1\r\x1ac6_\xed\xbf\xe2\x81\xce\x1c/)\xf2\xbf\x12$vs\x1c\x80\xde\xbf\x0fp\x87\xbf;+\xff\xbfd\x16\x8e\xf8\xce9\xc7\xbf\x182in\xc8\xba\x06@}\x85\x80\x16TM\x04@\x94u+@\xe5Z\xf2?\x96\xfc\xa0\x98s\xfc\xfc\xbf#\x8a\xb7\xdb\x01\x05\xe3?w\xba\xec:\xbc(\xe1?\xa4\xb5\xb9\xb0\xcc\x16\xf5?LK\x93\xa6\x95\xa3\x01@%\x8bq\xa7Nq\t@\xd1E\x9by\xa5\x16\x03@\xf7`\xd4\x14\x9b\xea\xe8\xbf\xd2\xc2\x080\xddK\t\xc0x\xf8^\x83\xf3i\xf0?F\xecr\xc0\xce\xa4\xe4?\x0f\xcd1\x80\xbcv\x02\xc0z\x92\xad\x0b\x12\xab\xc1?&\x99\x16\xf6\xe7\xdf\xed?\x1d\x13;\xce\x9e%\x05@I\xdb\x07\x8d\xde!\xf4\xbf3\x0e\x84\xfe\'\x85\x02@\x02\x103Xwb\xc6\xbf\x99\xee\x11m\x10\xd9\xf7?SV\x872\x8f\xfa\xe7\xbf\xc4\xee\xc0\x8fb8\xfa?.B\xe6kW\x9b\xe0?[\x14\x0f\xc2\\\xed\xca?0`\xd8:\xbew\xe7?\x13Fi\xe0\xf1A\xf4?,\x0c\xb0Nd\x88\x11@JP\x14\x92\x15)\x04@\xe7\x91\\\x07\x0c\xec\xda?\xe9\x85\xe4\xbf\xe2\xda\x8b?ex\x83[\xbf\xb3\xd2?zv<\xf0\xbc\x12\xf1?\xe1\x8f4\'\x91\xb2\xfe?WIJX\xd1\x06\xee?\'\x19\x80\xe81\xb2\xe1?\xbb\xb1\xfe\xd62B\xd8\xbf\x15gz\x0b)\x07\xfa?8\xce\x86<\xc5\x87\xc9\xbf\xdaBz\xc7\xdc\xac\x01\xc0\xd8\x98\xad\xddv\xf5\x10\xc03\xa4\tT\xe9\xab\x0c\xc0(O\x91\xc1)\x0e\xec?\xd5\xea\x94\xf4\xf1\x9a\xfc?\xbfT\xceOVK\xe0\xbf\xebl\x8e\xf1$\x98\xcf\xbf[\xd5r\x15V\xa0\xc4\xbfm\xf2\xc5\x11\x8e^\xd6\xbf(\xde.\x96\xb0+\xe3\xbfS\x91\x1e\t\xb7\xa3\xea?\xcf\xe4Z\xcd)\x10\x04\xc0Gi\x19AT;\xe8\xbf\x81\xdeX\x1e\xf9C\xed\xbf\x9cA\x10\x05\xb6\xf4\xd5?91\x9c\xbfP\x19\xd2\xbf\xf9\x933\xcb\x038\x10@\xbd#\xdc\xbfl\xd8\xf8?R\x82GU\x06\xf7\xbd\xbf\xcdp?I\x9cY\xc3?\xee\x99o\x8d\xa6\xe1\xdc\xbf\xf0&\xed\xdd~q\xaf?\xfd\xc2\xa7Q\xdbN\xfd?\x1e\x81>\xb5f\xb9\xf6?C\xa2\xc7\xfb\xf3\xd9\xf2?\xc5q\xce\x9b\x85\t\x00@\x84\xaen*H3\xe2\xbf\x16zG\xc8\x974\xd2\xbf]\x95\xc9\x90\xb5\xe9\xf5\xbf\xd1\xfdR\xbeW*\xb1\xbf\xd5o9\x0e\xae\xf5\xfb\xbf\xa7\xe0\x85\xaeS\xbf\x12\xc0\xdf\xc3d\x9a\x90P\xa5?\x0fu5V\xc3K\x06@\x1e=S\xfc\xf4\x81\xd2?\xa0J\xa2\xf9\xe7\xcb\xc5\xbf\x00\xe3\x02e8\xb4\xf1\xbf\x1a\x053\xc3\xb7\xfe\xe3?#\x1d\xaf\x19\xc3\xfa\xd2?\xe5B\x81&;\xf0\xc3?kJI\xb0\x85\xf5\x00@\xee\xe0~\xac\xc2\xe7\xf6?\xe4hM\x15<\x01\x12@qN\x8a..:\xfd?t:\xb3\x95\xffP\x08@\xeaQ;\x1c\x14\x19\x07@g\\*\xaa\xeb\xb6\xfe?\x00\xe4L\xb7\x10K\xbb\xbf\x8d\xfb\xb1\xb6M\xbd\xf0?|\xae\x9b\xf5\xe1\xf5\xac\xbfU\x03\x95\xa4\x05\xef\xd8?C\xec\x98{\xa3\xcf\xee?Wp\xc1\r\xad@\xe1\xbf?"\xecV\xc3\xfc\r\xc0\x16\x84\x01\xfb\xa0?\xeb?\x86Kw\xcb2\xfc\xfe\xbf]\xa6n\n\x0e\xc2\xf0\xbfug\xfa\xe2\x05\x1f\x07\xc03{\xeeI\x07\t\xf5\xbfm\xe4\xb7\xc5\x05\x16\xe8\xbfK^hI\xfb\xc9\xe0\xbfpmq\x06\x90+\x97?\xbf\xa4\xfdr{\xb5\x00@\xf9+\x17 S)\xe8\xbf\xef~\xb5\x07\xedu\x04@=\xaa\xff4\xb3\x83\xf9?\xa8\x17\xcd\x0f\xca\xa0\xe5?\xebp\xd5\xa5"\x1d\xeb?\xcfku\xb6\xa2\x95\xbb?\xed\xfa*\x89\xc3\xa9\xd4?\x96\x95E&\xbd\x17\xf9?\xbc\xd0\x00\xfc\'\x07\xf3\xbf\x8amP\xa7\xf1\x1c\x0b@9\xc5\xafJ\xe6l\xf2?\xf25*\xb0N\xe6\xc7?\xbc\xbb\x1b\x82/i\xff?RP\xd7\xa1\x13h\xf5?W\xdbg@W^\xbe?\xfed\xd7\x90\x9c\x96\xec\xbfY(fY\xea<\x12@\xf6v\x1fa\x9c\xd0\xff\xbff\xf0\xf7]\x0f\x0f\xf0?\xde\x7fzJ\xa8P\x0b@H\xc1\x02\x90#,\xd6?Ybr)\xa78\x04@3{\x02\xd4h\xbd\xe1?\\2\x94\n\xb0v\xe0?\x15R\x10\x83hC\x07\xc0\x9d%\x01S3\x0c\xf6\xbf\xa4i\xf4\x0e\xdd\xca\xec\xbf\xba\xec\x17\x90<\xe0\xe4\xbf\x90\x90&\xea\xb8\xc7\xf5?\x87\xee\xa0\x8d\x97\xd8\xf7\xbfPO\x92\x1bt\xf9\xf2?\xed8\xa9\xe1_\x0e\xfb?D_\xf5 \x85y\xff?}\xcc\xd7\xdaw\xf5\xdb\xbfc\xebK\x82m\xdf\xb7?8a\x81a\xa2C\xf0\xbf\xeaOP6\xbb\x86\x04@\xaf\xf2\x00\t\x93\x85\x00@^\x99\xf0\xdau@\xdd?\xe8\xe1\xd3\xa9\xd4T\xee\xbf7\xcf\xadx\xff\x1b\xe8\xbf\x97\xd7\xc6D>\x1f\xce\xbfps;\x86Q\x9c\xef\xbf\xed\xce\xdc\x04\xc0\x08\x9df@\xd7_\xe1\xbf\x92\x1c\'c\xb0"\xf2?\x8dH\nN*]\xeb\xbf\xf6\xf7\x030\xed\xff\x96?\xfcR\x95okD\xed?5\x8a\xea\xfd\xb8\xbe\xca\xbf\x92\x1b%c\x0b\xb4\xe3\xbf\x80\xb6M\x18\x8a\xc7\x9c?k\x19u\xf2qny\xbfR+\x83\xdfJ\xde\xe2\xbf%U\x9cR\x02\x1a\xff?r\x11\xe9\xf9%\xe6\xcc?\xaalD\x0f\xa9\xc3\xe7?0\xfb\xbe\xfc#m\xc0?\xc0\xa3\x1c\xe5\x82D\x00\xc0\x01\xbe\xf6^\xa5|\xf9\xbf\xabN\xa7\xe1\x17\xfa\xc3?\xaaO\xc2\x8bF\xf5\xf2\xbfAY\xff2\x11\x80\xfc\xbf\x1b\xf0Ds\x7f\xe2\xe3\xbf:n\xb2[[\x91\xfe\xbf\x94\x7fy\xabz6\x04\xc0v\xa9\xbf!wQ\xe8\xbf\xc4vm\'\x8bc\xf3\xbf\x90\xa4\x89\xeaPv\xfa?$\x84\xaa\x10\xd1\x8e\xee?4o.\x14\x06r\xf4?G\x92y\xd1!\xd8\xf3\xbf\xd0\xa5\x15\xe5\xc3\x1b\xc3\xbfel1I\xbc\x1a\xe0\xbf\xc7,\xc7|\xa5\xf9\xe1?fQ?D\xb8c\xf5\xbf\xff-\xd6a\xad\xd6\xef?/V\x88K\xedk\xd4?\x02\xd0\xee\x9a\r\x95\xd9\xbf\xbe>}\xa7*\n\xec?\x8e\xdf\x87x`\x0e\xe4?\xd2\xfb\x82\xdae\xae\xea\xbf\xe5\x11d\xb3\x1f\xa3\xc7\xbf\xe8\xccxL\xb3\xd8\xe8\xbf\xec\xf6\'\xce]\x04\xff?N\x84\xd55\x9a@\x06@S\xf8\x8eB\x08\x81\xdc?\x96D\x92e\x04W\xf0\xbf\xdf1\xeb|\x05\xac\xcf\xbfR\xd0\x04)m`\xc8\xbf\xaf\x05\xca\xebT\xa8\xb6\xbf\xb8x\x1c\xbf\xd7i\xd2\xbf\xaf\x96\xe8\x12\xb5\xbc\xb9?0\xf0\x9f\xf4\x94W\xd7\xbf\xfe\xf6\x8d;\x87\x9a\n\xc0\x8e\x96\xdd\x0c\xc5\xc7\xff?E\x08\xe1\x98&\x8f\xc2?\xafcn\x92\xa5\x14\xbd?\n\xdc\x8bg\x0c\xb8\xe7?\x8ap9E@\x87\xda?\x11\xd0\xe4q\xe0!\xf9\xaa\xb4\xbfE\x92\xa7\x12\xe0\xf2\xa9?=\xa1\xea\x82\xed0\xf0?C\xa5\xba\x8e2,\xec\xbf\xe6\xf2\xb2\xa3#\x0e\xdf?\xccR\xb7JJ\x01\xea?\xcd\xa1\xb6G\\b\xe7?\x12\x0f\xf0\xa4\xf7J\xf7\xbf\xb82zFPz\xc1\xbf\x00n\xf9\xa6\x15i\xeb\xbf\xe8\xa2\x16\xa7Y#\xd7\xbf\x08\xd5]\xa4\r\x16\xd8\xbflh\x8d\xcf\xfdV\x8d?\xe9\x8d+\xd2\xd8\x08\xe6?\xe1\xf3./RN\xd7\xbfT\xf2,\x1a\xa9\xe5\xde?\x1e\\\xc8\x00\xb6B\xd0?^\xc5<&\x1c\xad\xe0\xbf\xfb\xf7F\xf9\x8d$\xc4\xbf+ \xc9\xd9\xec\x17\xc0?%\xfaU5\x0c\x94\xa8?\x80\x8c\x96\xb9]F\xee\xbf\xf2X\x89\xa4F\x10\xf2?E\x05L[\x99K\xe0?\xda\xf7P\x12<\xb9\xf1?\x9f\xf0\xcc3}\x7f\xe9?\x19U\xb0\xb5\x9a\x97\xd6?\xd6xb\x02X\x1d\x9d?\xcb\x11.\xed\x0c\xab\xf3?\x93\xe3\xaa\xe9Wq\xca\xbf~)uD\xae\xb0\xd3?\xd39\x96\xe1;\xcc\xd7\xbf)1\x93\xb4\xbba\xf0?\xae\xb0C\xb9n\x15\xe0?\x900\x98\xd9\x88\x8f\xe5?\x9b\xe3r\xdeQp\xb3\xbf\xff\xbe\xe3H\x96\xeb\xe2?\x1c\x90\xe3\xc0n\xed\xe8\xbf@\nI\xe4,\xec\xd1\xbf\x17\x9d\xd5p\x1d\xe6\xfb?\xcb\xe8\xf9rU\xfc\xba\xbfE\xed\xd2~\xc2\x1f\xb2\xbf\xf8_\xde6\xe1\r\xf8?\x08\xb3\xc5k(\x0e\xd6\xbfr\x83\x93Xl#\xde?\xe4o\xde\x06&\x08\xd0?\xac\x08\x82\x11\xba\xbd\xd0\xbf5\xcfA"\x13y\xf7?\xb4P\xc0f\xf2\x1b\xf4\xbf\xb66\x9c \x05\xfa\xd0?i\xa2\xb2\xf9\x1d\xee\xee\xbfV>\xec\xd8#\xb9\xd0\xbfn\xca\'{\x94\xcd?\x0b3\x96J\x16\xc2\xfe?\x02\xb5\xd2\xb5_\xe1\xe0?\x97G\xf2\xc9\xfe\xa2\xe8?#\xf1|\x8dX\xc0\xf7?A\xeb[\xbd?\x9a\x06@WqQ\xc7\xda\xc0\xf5? Rh\x11\x12/\xf8?k\xa0\xb3G:\x1a\xf7?#P\xba\xa3\xef<\x05@\t\xfb\x14SEW\xf7?\xfaY\x08\x1a:\x1d\xf6?\xe3\x84\x9b\xf4\x1e_\xf0?`\x87MRB6\xea?W\xa3RZ\x90z\xe3\xbf\xcb3\xf5;\xa9\x90\xe6\xbf\x08\x85\xb0\x97\xce\x9e\xf7?)\x1f\x9f\xbdS\xa3\xe8?[e\x9a\x9b+j\xdd?\x99\xd9\xae\xe0\xd0\xcf\xe0\xbf\x90\x07\xcbNOG\xed?\xc9j\xb2?\xbcT\xd1?\xdb;\x0bD\x8a\xd1\xe2?\xdb\xb24\xf0U\xc7\xc3\xbf\xf3&\xd8b\xca:\xdd?w\xdcBF\xcc\x0b\xdb\xbflw\x99&\xa34\xd2\xbf\xeec\x12\xd14\xae\xd6?\xa3K\xab\xad\x7f\xf0\xe3\xbf6\xc8W\xc1\xe3\xa0\xf2?$]\x17FU\xbf\xfb?\x11\xf1\x06\xe2\x84\xb9\xe0?\x14\x9bB\xcf\x94,\x02@\x12?E\xf5\xf2\xfe\xe7?\x14$\xbb\xae}\xd2\t@\\\x0f\xe3\xcc\xb6\xa1\t@\xee&fO\xfe\x84\xfb\xbf\xd9\xafg\\\x0c[\xe6\xbfM\xc2t\x9d\xf1\xab\xf6?\x8b\xff\xf6\xed\xa8\x17\xfe\xbf9t\x07\x91\xe6\xd2\xf3\xbf\xad(\xe5\xbd\xba\xce\xe2?@\xbc.P\xa5\x03\xde\xbf\x9d\x02\x0e7\xaa\xb0\xdd\xbf\x18T\xb6\x8dI?\xe0?%\x89zX\xa5K\xf6\xbfQTt\x97\xe7@\xc9\xbfs\xd1*x^<\x9c\xbf\xa6\x1a\xb2\x87\xbb\xed\xbb?\xc9\xa8a\xe2\\3\xb1\xbf\x85 \x11\x85\x88.\xf0\xbf9\xe3\xfd\x83\x15\x91\xe2\xbfxj\xa8\xa3\xfb\xa3\xe7\xbf\t_E\xfaDh\xeb\xbfol\xc9*\x96O\xdd\xbf?\xb3\xe2\x10\x83O\xdd\xbf\x9b\xcb6\xf2T\x11\xaf\xbfq\x02`H\xe5\xa2\xdd?\xff\x0e\x9b\xcf\x93\xc9\xf1?8\xcb\xd7\xc6/\x7f\xf0?t}d\x97\xdb.\xe2\xbf\x14\xc8\xa6\xdf\xde\xa3\xf4\xbf\x1e\xc4>\xe2\xf0\xe0\xc0\xbfXL\x05{\xb7\xf8\xeb?+\x89D\x93\xd5\xeb\xec\xbfQ\xben\x97\x1ad\xef?\x16I\xccRAB\xea\xbf\xbb\x9cL\'q\x82\xc9\xbf\\\xc2\x0b\xa8\xd5K\xe9?\x01\x8a\x9a{\x05\x88\xd3?\x90\xaf\xe5Rc.\xb5\xbf<\xa9>\xef\xc6\xb9\xa7?\xff8m\x01\xaf\x96\x00@\xa8\xc3\xe6_%Z\xf7?\x99P\xb3X\xd4\xca\x06\xc0\xe9]Nk\xd1\xd2\xe8\xbf\xe1\xef\x18\xcc;\xb6\xc9?\xfb\xcc?h~A\xbf?\xf4V\x14\xfe{\xbe\xe6?\xd9\xd3a\x83:\xcb\xd6\xbf\xff\xdb\x11d\xa6[\xe6\xbfp\x00\xee\xf2c \xea\xbf\xb0\xd9\xba\xd8\xcfy\xfe\xbf@y1%Q\xbb\xfa\xbf\x90\xe5\x99\x82\x9c\x18\x94?\xd3\x06\xe5\xa2\x85\xf3\xea?\x08s!\x1a\xab\x8d\xf3\xbf\xcd\xf2\xdb\x9cR>\xf6?\xb3F\xd1O\xabD\xe3?|\x01i\xe9j\xa7\xe7?:9M/\xfe\xd6~\xbf\xd0{\xa2\x1b]`\xf3?O\x83\xf0T(\x12\xdb?g^Q\x063\xd7\xf1\xbf\x8fC\xfeZ\x88\x8a\xdd\xbf\xb4\r\xf66\x9b0\x00@\t\x1c\n\xe7\xa6\xae\xfc\xbfx\xff:\xc3VB\xec\xbf\x83\x9e\xa3\x1c\xd8\xd9\xe3?\xa7\x86n\x8f\xa4\xea\x05\xc0\x94\x02=\x07*\xe6\xf7\xbf\x7f\xdbm\xca\x7f|\x02\xc0\x9a\x85\x1e\x1f\x0c\x9ch\xa8\xf5\xbf\x92\x0b\x01vLz\xea\xbf#\xef\x92\tF\x9d\xb4\xbf\xd9\xd8g\x01.\x92\xea\xbfx_\x9fhK\x86\xe6?\xfbYrm\xfa\xc9\xb7?\t\x81\x08E\x9ac\xa4\xbf\xf2yL\xb4\x89\xdd\xfd\xbf=]<6\xd9\xef\xe5?E^\xde^n\x80\xf7\xbf\xa8\xe7|\xc1\x8fB\xf2?\xe7\xb0\x8f?\xa9\n\xd9\xbf\x8c\xacGI\xc3\xdf\xe6?\xc0\xbc\x08De\x89\xf5\xbf\xdeB&\xd3%]\xe2\xbf\xcd3\xf2,\x9ds\xf4?\x9f\xaeU\xfe\xf0X\xd8\xbf\x19\x96\xb9j\xb7^\xe9\xbf-\xe0\xc7\x8f\xc0J\xfd?\xd9\x05L7,\xe9\xee\xbf\xb8i\xc6\xd5Ab\x86\xbf\xad\xc9\xf2q"V\xed?\\h\xfb\xcf\xa3\xf2\xfb\xbfVLk \x9cF\xb2\xbf\x93\x01\xfe8.\x94\xe0?\xc7F1\xa7,$\xc1\xbfs\xe8@\x06\xba\x0e\n\xc0\x97\xf7\xd5\xb7k<\x17\xc0j\x9cO}"\xb0\x00\xc0\xac\xae\xc8\xb5\xce\xa2\xdc\xbf\xcdz\x076\xa3\x83\x94\xbf\x05\xc7\xcbe\xa9\xe3\xe3?\xa0Q2\xa2\xb50\xe6\xbfw.\x98y\x1d\x03\x02@}Y_e\x86K\xdd?\xf4\xc3\xa61$^\xe8?\x02s\xce/\x1bl\xf0\xbf\x13\x8bz\xce\xa9\xe0\xf7\xbf\n%o\xed,\n\x04@\xe7\xc7UiU\xca\xa1?\xf2\xef\xaf\xcf\x18Y\x00@\xd0{LH14\xe7\xbfG\x04\x8f\xf1?\xaf\xb6\t\x82_r\xb1\xbf\xa5V=\xe3\x82p\xf3\xbf\xebO;\x9e\xd2\xa1\xde\xbf<\x89\xf2\xa6\xf8\xa1\x14\xc0\xba\xdc\xdb\xcdJ\x1a\x15\xc0v%\x1dK\x14\xa7\xf6\xbf\x98\xd1\xac\xeb\x1b\xb4\xf7\xbf2\xb5\xc3\x14\xcd\xc7\x17?\x91\x9bZ\n>k\xc3\xbf\xd1\x90(\x05u\xc3\xe8?\xec\xe0=B]A\xe7?y\xfa\x8bp\x12\x1d\xef\xbfk\xcbv\x15[k\xf2\xbfJ\xb5\xed\x8a\xc0\xc4\xd6\xbf\x1b\xe1E\xca\x02\xf6\xee\xbf\xbe\xd8\xb0\x04\xdb\xfe\x05\xc0a,\xe2^\xe1>\xd5\xbf\xfbq\xa1\xf1H\xc7\xdb\xbf\x9e\x1c\x1fY\x81\xc7\x05\xc0\xfb\x04\xda\xa7-9\xf1\xbf~\xda\xd2F\x968\x14\xc02\x1b\x18\xdd\xd3\xa9\x19\xc0e\xb6\xc6\xd3\x1b\xed\x10\xc0\xb6\x02.\xe0\x96u\xd5\xbf\xb3i\xe5\x18\xaf\xa2\xfa\xbf\x95m8\xa84\x03\xe5\xbf\xa7o\xeeT\xbcK\x01@\xa3fz;m\xb3\xe6?\x06\x07\xbdeh\x0c\x04@\xb6\xcfy\xc5\xa8\xef\n@\xea\x82p:\xdb\xd8\xdd?\x88\x10\x95\xee\xcf<\xd7?`\xec\x99\x11\x16\x13\x00\xc0]\x93\xf4\x84\x1a/\xcd\xbfV\xd5q\xbb\xa4P\xfe?\xfd\xc8 \xc8\x89:\xd0?;\x92\xf1\xc3\t.\xdf?|\xd0\x01\x1a\xf1Q\xd1\xbf\xbf^f9\xb6e\xb7?\xb4q\xfdyRC\xf5\xbfQ\x16\x8fK\xc2\x93\xc1?\xf4\x00\x00\xf1\xa0\x93\xda\xbf#\x95\xb2\x13n\xfc\xe7\xbfi\xeb\xc5\xa3\xea\xf6\xf1?\x11\x07\xcb@\xfd\x8d\xe7\xbf\xe6\x8cR\xb9PM\xfb\xbfY\x9c`\x98\xdfN\xfc\xbf\xb1\x18g\xc2\xd9\n\x08\xc0\xf8\xf3y\x15\xefb\xf3\xbf\xd2\x90\'\xcfR\x8d\x15\xc0\xfdE\x8b^pB\x0b\xc0\xfd\xc8\xa8\x15\t\n\x06\xc0\x8f\xf5|v\xb3>\xdf\xbf\x9b\x1f\xbf\x89C\xd8\xfd\xbf\x0c\x0bL:\xf2\x041?\xe1\xad\xdf\xc4C\xc6\xf0\xbfd\x017\xae\xf8\xc4\xcf?\x91h\x04Zw\x99\xff?s\x0e\'\'\xb9\x8f\r@g\x87\x88 \x93n\x08@@\xdfIm\x86\xc4\xd1\xbfk\x15\xc3\x08\x04\xb3\xfd?\xcd\x94\xc0\x99\x12)\xeb?\xa5\xe2\xb4Me\xbd\xee\xbf\xf8\x08\x04\xba\x06\xb3\xf5\xbf\xdcq\x9d\x8c|g\xf2\xbf9\x06\xb1Ia\xc4\xbb\xbfD]\xe7 ]\xc0\xe0\xbf\x0c\xa2Z\xe6\xd6T\xc3?\xfd,\xd5\xf7\xfc"\xf6\xbf\xd6x\xdd\x8c^l\xed\xbfN`\x0f\x03z\xc9\x03\xc0J"\xae\xa9c\x02\xde?#\xaa\xbcc\xc5\xc3\xd0\xbf\xd4u\x9eV9x\xf0\xbfY\xcb\x9a\xac\x8c\x0b\x12\xc0\xc4\xd9\xea\x1b7o\x0e\xc0.\x8d\xfd\x9clE\xea\xbf?*\x8f\xcd\x86\xf2\x13\xc0R\x9c2\xf8\x9a\xf7\x06\xc0A\xe6\x1e\xaf\xa0\xd3\xfe\xbf\x89OP\xb5\x0fb\x06\xc0=\xf9\x8bBy\xa9\x00\xc0>?9\xa8\x1a\xe7\x06\xc0\xfa\xf7\xe0\xa8\x8e\xe1\t@\xc7\x02zH\xe2u\xb2\xbf\\\xd1+\x0cS\x1f\x08@4\xce\xb4D\xf6s\x13@\xad\x18\x8e\x15eM\x05@\xf5\xa3>w4\x97\xf7?\xf3I\xb6\x96?\x1f\xe2?\xdc#6_\xbc\xfb\xbb?h6\xc7\x8d\xd8\xec\xbf\xbf\x8f\xf4\xc4\xd2\xb4\xe7\xf7?\xfc\xaaq\xc8h\x84\xef?;O,\xa0\xf6;\x02@2\xb1 \xf6\xfe[\xf9?\xa0WC\x06\xdf\xf7\n@\xe6\x10\x11rv\xaa\xfe?j7;Q\xe6\xf2\xf6\xbf]\x80:8\x80\xbf\xeb?G\x1c\xdf8]\xa0\xd3\xbf\xac\x02l\xd6"\x83\xdd\xbfj\xd5@\x97\x8c\x7f\x00\xc0\xad_\xf4y\xd7\xd9\xec\xbf\xaa\x03D\xdb\'h\xe6\xbfo\x0eu\x9e\x96\xe9\x08\xc0\xef\xb4V\x041\x9f\xf9\xbf\x95!\xf5\xf8\xa7g\x07\xc0Z{\xc3kj3\xf1?:\x11\x812d\x9e\xea\xbfa\xdcM\xd2\xfd\xcf\xf6?\xf1\xc1\x92\x87\xb7\xfb\xd4\xbf\xfd\xfajZ\xb8N\xc3?R\x19U\x0fT\x01\xf0?\x19\xa1\xa2\x0f\x07\xde\x03@B\x05D\x9a\x1e\x1f\x04@\x08o\x94(c\x94\xf1?\xe0\xf3\xf8pP\x1e\xd6?r\xcb"\xab\xder\xdb\xbf\xd5M\x00<\xe7\x89\xec\xbf\x04\xbd7\x86\xbc\x96\xef\xbf\xbe\xa7|\xab%\x9f\xd2?\x8bJ\xf2`\xcf\xea\x03@\xc9C\x075]{\x0b@d\xb8,\xabP\xb3\x14@A\xdc7\x8bn\xc9\x13@\x92h\x92?K\x1a\x07@}@\xd13$\xd7\xe1?\x85\xc8\xf0us&\xeb\xbf\x0f\tO\xf7\xaa1\xff\xbf\xf5.q\xdd+\xa6\x04\xc0=N\xd2\xdf\xf6\xbb\xf9\xbf\xf0e\x12,\xdb\xe1\xf8\xbf\x95w\xc5\xb1z\xeb\xf6\xbf_\x9a\x95g\x06\xba\x02\xc0\xdd\x93\x1bD\x86\xba\xe8?\xd6\n\xb0M#\xd9\xf6\xbf\x8f\xfc\x1c\x9b\xcd\xef\xf3?\xd36\xc4\r\x10c\xbc\xbfrAw\x1a\xe0\xd0\xbc?6\x96\xb3\x8d\xadg\xfa\xbf\xf0\x1b\xb9\x8f\xe4\x07\xbe\xbf\xcb\xa4\xc9}\x9f\xa2\x0b@S\xc3:@:\xee\x06@\xc1\n\xb0\xce1I\xeb?\x85!t\xbfb\xb2\xf0?\x03\x8d\x8f\x8c\xdc\xac\xe4?\x8bM\x9fW\xbao\xc8\xbf0vv\xcc\x05$\xc2\xbfe\xe1w\x10SQ\xf7?\xa5\xae\x08\x94ij\x00@\xad-\x17\xc1=A\x00@\xa7,f\xc1T\x19\x03@)\'n\x9dI\xe1\x0c@\x00\xba<&\xaa\xc8\x14@\xef\xc5Vv\xd1v\x14@\x89\xc8\x12\x01wT\xca?\x92S\x97\x17:\\\x0b\xc0\xbc\x1ffn\xeb\xb4\xf8\xbftu\xb9=\xc9\xef\t\xc0\xee\x18\xea\x93\xb6\x05\x05\xc0\x98\xfbb\xa6\xfcn\xe4\xbf\x92\x84\x06\xfc)\xbd\xc7?d6\xddb0\xd8\xf3?b0?O}y\xd5?\xd5\\\x07C\x9f\xf7\xf8?\x84\r\x98\xcf\x8e+\xff\xbf\x11\xd8z\xcc\x12\xc0\xf1?q>\x1cmk?\xaf?-\x8d\xfe\xd3\x8a\xdc\xd0?#lIH\x12 \x12@\xfa\xeb`\xdd\x062\x1a@\x8e\x014\x9f\xa2R\x04@\\\xa5\xb2\x1c\xb7a\x02@\x835\xb9G\xfa\x12\xd9\xbf\xf6`\xc2Ch\x84\xb5?\xde=\x0e\xea\x89\xab\xfa?)\r\xd3\xaej\x08\xd8\xbf\xe6\x19\xf5\n\xabI\xcc\xbf\x12y}\x975Z\xf7\xbf\xd3`M$>%\xe4?\xf3\x17\x7f\x06*\xb8\xf6?\xba$A\xf7\xa9\xb2\x0b@\x1f;\xe7\x08\xfa\xe9\x17@\xdb\xa2\x9b\xee\xb0\xf9\x1b@7r,\'LL\x0c@5\xbf}\x9e;\x95\x04@\xdc\xff\xdd\xc1\'\x98\xbb\xbf\xfc"p<\xf3\xb7\xd8?%\xd6\xf3O\x9bK\x00@\x9b\x02r\xed**\xf7?vn\x90\x05\x89\x16\xd5\xbf\xacM\xadi{\x87\xe3?&\xbdc\x127}\xf1?0\xdb\x18bW\xf1\xf3\xbfi\x97c\xa3\xdd\x15\xdf\xbfs\x0b\xe5\xc0\x8e\xba\xcb\xbf\xd7\xbc`\x990\x8e\xf2\xbfV\x93\xb8\x7f\\\xbd\x15@$\x89\x07\xe7\xf9-\x14@J\xf7\xe5\xe83v\xf4?\xb6\xc7\x0f.\xe7\xb7\xf4?7R~\xb3g\xe4\xb5?\x05d\xd3\x1c6\xcf\xea\xbfd\x98\x04\xb6\x8a\xdc\xe3?\xff\xfdw\xdf\xf1\xc2\xf5\xbfk\xa9\x04\xf7\xc4!\xf4?(r\xf2\x16\x90Q\xf6?E\xd6/\xd3\x17&\xfd\xbfFc\x13\x1e\x9d[\xf6?\x02V(6\xb1R\x07\xc0u\xca\x10\xa5\x05,\xc2?\x15:\x8c\n\x00\xe3\x1e@\xf5\xb4\xb8\xa2\x0b\x88\x10@\xbd\xe7H\x8eRl\x0e@\xac\x18L\x0f^(\x05@`g\x7f(\xeeu\xe1\xbff\x15\xf0\xc5\x94\x8c\xe3\xbf\xc1\xdc\x0bcw\xc9\xea?\xfd\x15\xb7\x07\x04\xf2\xd9?\xc0\xfbk\xd2\xb6\x8d\xd8?\xf5\xbd\x9c\t_|\xe2\xbf\r\xb0loQ\xbb\xe0?\xc1\x10\xf4\x15\xbb\x0e\xd7\xbf\xfbe1g\x8d\xe1\xca?V\x1b\xccr\xee+\xdb?\x1b\xcd\xd5\xeb\xab[\r@\xda\x8aWZ\xb5(\x00@I\x04\x06\xef\xc9\x86\xed\xbf \x106\xaa\xba\x06\xca\xbf\xf0k\x0c\x10\xfc]\xd9\xbf0t{\xd9\xe3\xe2\xee\xbf\x07\xc0j\x87\x9c\x00\xd2\xbf_\xdcd\xba\xd9\x9c\xe0\xbf\x8b}9\xe3\xfa\x9f\xc9?\x89;6\xf3e\xc1\xf8\xbf\xd2\x92\x91\xfe\x9f\xdd\x00\xc0(Yj\xe1\xbb8\xf0?y\xc37/:N\x80?\x91P\xa5_\xa0\xf6\xd9?6Q+\xceO\xa8\xfb\xbfsu\x07\xc8\xbez\x03@\xfbir\xca;\xa7\x0f@\x1a\x1c\xcd\x97\t\xdf\xe3?\xf4\x94\x87\x8fW|\x02@\x00\xe9\xe3\x15-\x85\x01\xc0Q\x1f\xbc\xc0\x1ad\xf9?\xe0\x85\xc3x-\x87\xed\xbf\xe7\xe9\x8a\xc28\x84\xe9\xbf\xfe_\xfe\xbf\xb0\xc6\x02\xc0&\x99-\xe9\xc3\x81\xf2?\x01\x97\xb6\xbdM\x91\xe2?\'Y\x100\xd6K\x05@\xcf\x11A?\x1eS\xd2?X\xa0\xe0\x9d?P\xf8?\x03\xc4E\xb9\xae\xf7\xe2?\xf0+LPP\x95\xe6\xbf\x14\xabd/Ha\xee?\xcc\xb2&)D\x14\xf2\xbf>\x8ap\xc4\x03\xc2\xe4\xbfNlW~:\xa7\xde?\xf05\x11I\x072\xf1?\xeb\xe5\xa4\xe6\x8a\xcd\x90?\x81A\x8e!\xac\x1e\xfa?9\xaa\xc6=jD\xde\xbf\x03F\xa1\x1d$\xc1\xfa?\xfc\xfbx\xe4~p\xe0\xbf\xa6Q\xb6U\x8d\xc3\xe1\xbfZ\x98|\xaca\xa4\x96?H6\xb11\xe9\xba\xf3?\xdb\x944z\xa8\xd0\xf7?\xfb\xf1\x05h\xca\x07\t@\xaa\x1d\x1f\x7f\xc99\xe5\xbf\xe8h\xb2`\x8d\xa4\xe9?G\xce\xcc\x89\xbc\x19\x03@5\x13\xa6\xd185\xe5\xbfv\xc6\xe2\xda\x95\xd6\xc7\xbf\x86L\xe1\xec\xfa_\xda?2\xbf\x9b\x1f1\xcb\xd9?\xfey\x02ZQ\xe9\xe7?(\x13\x04\xb7\xe3\xe2\xd6?\xb8&\x91\xd6$t\xee?M\x14?Gg\x96\x03@>\xb4\x8by]R\xcb\xbf\x0ck\x16\xb7j\xd4\xee\xbf\xde\x9e\xdf\xf0&\xa5\xe6\xbfW\x05G&\xc4\x8f\xe6?\x02B\x88\xf0\xe2G\xc0?i0mE\xc1B\xef?\xf6\xfb\xcf\xdb6\xdc\xdb?i\xd5\xd2\xb1\xb2D\xe8\xbf\xf3x\xa4\xbd\xb0\x82\xe8?\x8d\xc5\x05[\x0c@\xf3\xbf\x0b7\x0f\xcb\xa4-\xe0?c\xfc\xda\x84=:\xf8\xbf6\x0c\x18G\xf0x\x06@\x8dZU\x16_\n\xb9\xbf\xd7\x91\xd6\x1a2\\\xe9?\x05\xce\x9bhT\xc4\x02@/\xfc\xe9\x81\xc4\xc9\xd5\xbf\x1d\xdb\xb4L\x92\x0e\xed\xbf\xce\'\x9e\xad\xea\xa7\xff\xbf\xb7E\xc1\xcd\xa6\xb2\xd2\xbf\xce&6\xd5\x1a1\x90?\xec(\xcb\xdfK\xb0\xa9\xbf0>+e\x8e\x8a\xf8?\xd9\xaa\xb6e\x8d\xba\xe2?\x88\x9a\xf8}\x02\xf4\xea\xbf\x9f\x96\xdb\x8e%\xf5\xf2?\x03M\xeb\xd8\xd2_\xfe?\x03\x0b.\xe0J\xcc\xff?\xf7\xbe\x82@BX\xec?\xae^\x0f\xf58\x93\xe2?\x12-\xa3R\xcc|\xea\xbfi;j\xe6\xf3\x98\xef\xbf7\xfcq\x93\x91\x99\xd7?\xdc\xee\x18\xf7\xc5\xa5\xf5?\xf1\x9b\'\x08\xf8\xb4\xe7\xbf\x8e"k\x93\xeb9\xf6\xbfU\x9e=?\xf9G\xfe??\xf3\xf0D\xd0\x91\xc7?#3Uz\x95D\xc4?8\x84\x9el\x13\x12\xf2?I\x16\x83b\x8a\xe0\x81?_\xb0GX\xfc\x07\xdb\xbf\xc9\\\x04\x05\xc8Y\xd6\xbf\x03#\xe2\xe5-c\xe1?\xfe\xffS&\x945\x05@\xbd\x9e\xb6\xdb\x8c\xd8\xf2?\xeb\x0b\xd0\xe5\xac\xbf\xf0\xbf\x98\x1462Nv\xc1\xbfz3\xf2\x96\xde\x88\xc0?]_#S8\x07\xf0?\x960\xad5\xf2u\xe7\xbfV\xbe\xf6\xd3\x17\xb7\x08@(\x08O\x8f\xfex\xce\xbfL\xc3\xfa\x84\t\xe2\xfe?;"\xe7\x92\x16\xfd\x02@+\x88ro\x7f\x9a\xf5?\x12\xc4\xc4l\xea\xd7\xf4?\xfbn\x19l\xde+\xef\xbf\x9d\xe5\xc9\xae\xac\x08\xe3\xbf\xa8\xca\xeb\x87\x11\xdc\xf3\xbf\xfb\xdfz8\x92\xa3\xd5?>\xcedm\xc1N\xda\xbf\x86\xbe\xc8\x12\x82\x89\xf0\xbf\x169\x7f>0m\xe6\xbf\'\x90\xd2\x9fk\xcd\xed\xbf}\x92\x1d\xd3\xd1\xde\xd4?\x1b\x85\x84\x96\x03H\x04@\xf0KE\xe6\xafz\xf2\xbf5\xf4W\x987\xf6\xf7?/\x8d\xcah{\x06\xf2?Vq\xf2w!\x90\xee?\x05\xfas!n\x07\xe3?\xec\x936\xc5\xa4%\xe4\xbff\xec\x11(\x1c\xbf\xb2\xbf\x10Vv\x0b\x0c\xa4\xf6\xbf\x95c\xf1x\xb1:\xe9?d\xa9\x08)\xa1*\x04\xc0"!yi#$\xdf\xbf\t\xad\x00\xe1\xeb\xfc\xf9?^\x9eP\x95\x00\xe9\xf8?\x83\x1d2l\xae\xb8\x06@\xce\xa3\xc6\xed\x01\xbb\x05@V\x11\xeays/\x02@\xcf\xf0,\t#;\xee?]\xaf\xcfO(;\xeb?V\x1c\xbe\x8a\xca\xb0\xfb\xbf\xb1\x8eSo\xcaa\xd1\xbf\xb8\xf11\xd4%\xbd\xdf\xbf\xb9|\x05\xd8f\xc4\xf0?"1\xfdu\xcam\xe3\xbf\xe1\x07VG\xea\x91\xf7\xbf\x98\xbb\x13E\xa9\xd2\xfb\xbf\xed\x00@\xe3^\x86\xf1\xbf\xcd\xe0\x8f\xca\xbf}\xf9\xbf\xc5\xf9,\xe0\xf2{\xd6\xbf\x82\xb1D\x12\t&\x00\xc0&\x12R}C\xa1\xe8\xbf=Y\x19\xb6P\x9c\x01\xc0e\x03&\x9e3!\xdb\xbf\x92\xf3\x87\x88\xc1\x15\xee?{\xe6g\x85\xb7A\xf8?\x88.8\x8c\x97\xa1\x00@2\xe5\xbc\xba\x10\xab\xd2\xbf\xde\xca\x00f\xb0)\x02\xc0@\xcc\xfc\xbf\xe9f\xfa\xbf\xc7*\x8c\xe6u\xf3\xf1?\xbeWl\xd1\x0b\x02\xf3\xbf\xd1zi\xfaE-\xf2\xbf\x17\xc9"\xf2\x16t\xc4\xbf?7\xb0\x11\xafC\x03@\xbav\xb7B\xb38\xf7\xbfr\xd5P\x0f>g\xd3\xbf\xd1\xa8Z\xc4\xc4U\xf0?\xb3\xe4I\xda2x\xeb?\xf2\x9d|Yh\xe4\xca?W\xe0/K\xca\xbe\xe2\xbfWzO[jV\xda?\xb0\xb8r\xe7\x1d\x95\xc4\xbf\xfd%\xa0\xf2\x9b\x91\xe6\xbff\\\xa4\xb1\xee\n\xf3\xbf\xe3\x05;\xc5\x11\x17\xea?\xcb\xc3\xba\xcb\x94k\xda?\x86\x07\xb9\xc0X\xac\xd3?T\xd5S:\xa7\x86\xe0\xbf6\x856T\x93g\xf7\xbf\xe8\xb8\xdek@\x8a\xc8\xbf\x9e\xd6\xadMR9\xc8?\x17\xbf\x992\xafL\xec\xbf\x01\xdf\xf1\x8fn\xac\xf3\xbf\x18\xd9_\xdab&\xe8\xbf\x08}\xa6M]&\x0b@\xd3\xd6G\x06\xc4J\x07@\xf5\x89\xda\xe6\x8d\xc3\xd6?\xec\xab\x9b\x88bW\xd7?\x80\x16^\xe1\xf4\xc9\xee\xbf\xcf\xf1aIa\x98\xe6?p\xdc/\xf8\xb8\x1a\xd8?Y&y\x9f$9\xe3\xbf\x10\x1e\x05$2B\xe6\xbf\xa1\x86\'6\x8e\\\x00\xc0\x89\xad\xcd\x8a\xdb\x81\xf2\xbf\xd8\xff\x94\x84\x9b\x85\xb7\xbfc\x01\x1f\x97\xe7\xcd\xe3\xbfE\xe0j\xd2\xe7?\xde\xbf\x10\xb2?\x89:\x95\xf3\xbf\xe1\xbclY\xc1\xd9\xd4\xbf?c\xbb\xb7\xa0\x8f\xdb?h\x1ea\xb3\x8b\xfa\xe6?\xba0\xf7\xd0a2\xd3?\xbai\xf6sJ\xd6\xf0?\xfe\x97\xa8\xb8\'o\xcb?\xde\xab\xb8X&\xb0\xe4\xbf\x02hSh8<\xe6?I#\xa8\xfe\xe0t\xfb?\xa5L\\Q\xd7\xe3\xed?\xb8C\xf3WH4\xf4?{c\x84\x14\x97U\x07@\xc8U\xc9\xadb_\x02@\xb3\x8a\xb2\x05];\x05@\xe1\xa7b\x08\xd9q\xf2?7E\xcd\x90*\x88\x00@\x94\xac\xfe\x9f\xb4\x13\xa1\xbf\x19\x05-\x90\xe4\x03\xee?w\x054\x91\xce\x98\x9e?\x8e>\xcf\xd7\xdc\xb0\xe0?1{\x80\x92\'\xb3\xc8?[Z\xf0\xf6\xa7W\xd3?\xd3[p\xae\xbc\xfd\xb2\xbf\xf6\x80\rJ\x8d{\xc5\xbfs\x1e\xe1\x16sK\xbb\xbfL!\x10\xf0\xb8r\xd5\xbf,Q\x86\xd2\xf4\xd5\xd4\xbf\x02\x08\xd4F\x84\xc1\xe8?\xcd.\xc6\xa8\xa5\x17\xd8\xbfa\x896\x81\xb4\xd1\xcb?"4\x98g*\x0c\xc0\xbf\xfd\xc3o\x84\x15(\xe8?Q\x04\x13Xa\x90\xf3\xbf[\x18\xc8\xf6U\xd1\xe5\xbf\xd6;yS\xf1\x86\xd9?\x04\x99\xac"/\x1c\xe1\xbf\xb1_qnc\x8d\xe3?\xdc\x11\xa4\xb3\xc4\xa4\xe2?\x81\xda\x8eG\xd2\xcf\xd0?\x83n+-\x86\xa4\xd6\xbfb\xaf\x880\x871\xd7?\x1d\x8f\xaa\xac\xa6\x1b\xe2\xbf1\xa5\xee-\xe1\xe2\xe7?\x05\xd4\n\x00\xad\xa6\xe1\xbf\xd8\xbeq\x92\x88*\xc4\xbf\x02o@\xaa\xcf\xd0\xc2\xbf4\na\x8e\x90=\xa6?d\x18\xb9\xfc\x10i\xed\xbf\xe8D\x17\xca\x04\x06\xe3\xbf\rJ\xc0\xc9\xff\x8c\xfb\xbfq\x95pV\x01\x8e\xdd?\xb7\xf2\xdd\xb6{5\x02@\xfc\x08}\x98#{\xe4\xbf\x0b.\xbc(\xe5X\xca?\x1a\x93\xc4\xdb9\xe3\xc2\xbf/g\x18\x92\xea\xa1\xff\xbf\xc89\xed\xb9\xf7\xbf\xd9?\xdc\xd9\xf2Z\x95\x87\xd8?\x06\x8c)\xe1\xb7\xe0\xe3\xbfI\xba\x1d\x0e\xcbI\xc4\xbf\xf2N\xa1iLF\xf2\xbf\xff\x04\xc6qq1\xf3\xbf\xe7b\x8d\x95\xee\xf3\xea?E\xb7\xf3\xb8\xc7\xc0\xce?ag\x1dQ{\xb4\xf8\xbf\xce\xbeB\xae\xd3E\xc0?_\xddq\x12l\xac\xc9?\xc5X\\*~\r\x85\xbf>\x8e\xda\xb0\xe1\x18\xa3?\r\x01\x8e\xd3\xd8U\xb8?\xa6\x97zO\x1aX\xe1?s\t\xec\xf5o\x12\xc6\xbfu\x99y\xf8\xd7\x13\xbf?DX\x82\xf2H\xb3\xf7?\xd8\xb2\xf3\x8c-\xe0\x94?\x9d\x0f\xffk\xf7\xcb\xda?\xd2\x8bWp\xc3\x05\xd4\xbf\xa0\'DL&\xb9\xcb\xbf$%@\xff\xce%\xf5?\xdc\xc9h\xbc\x920\xf0\xbf\xf5U\xeb\xbc\x11Q\xee\xbf\xc45\xdd\x91+a\xc6?\xb1\xd5s\x88\xa7\xbd\xc9\xbf2.\xf5\xd9hX\xa5\xbf\xa8\xf5 )\x01\xf8\xf0?\x8e\x0c1\x1f\x8e\x7f\xf4\xbf\x14\x9d\xaeG<\xcc\xa2\xbf\xa6$\xe4\xe8K\xad\xe0?b*X\x0bG\x08\xc3?\xfe/\xf5Z\xd9\xc1\xef\xbf+\xbe\x80\x15zC\xe2?\xebo\x00\xa0\xbex\xe6\xbfX=\xf5\x85\xc9 \xdb?v\x07\xddxv\xb2\xe0?\x89\x88w\xac8\xa0\xe6\xbfy\x8bK\x8aG\x1a\xf6\xbf7\xadp\x8b\xf0\xb2\xe2\xbfq1e\x05i\xad\xcb\xbfW\xa8\xd8\x03\x9c\x9b\xed\xbfY77\xecZ(\xe3?\x88`*\xd8\xf0\x8f\xd6?i\x91\xed^\xe6\xb7\xf1\xbf\xa3p\x10\xa6\xe6\xbe\xbf\xbf\x8f{\xad\x19\xf7C\xf4\xbf\xdf\xba\xc2\xf9MN\xdb\xbft\xbf~k\xe3f\xd6\xbf5<\x97(\x0cW\xd6\xbf\xee\x87\xf2\xb9`\xd2\xb7?.\xf1+t\x9fB\xb5\xbf\x0fbe.\xe1\xf9\xc0?\x1a$X.\xad\xbd\xd9\xbf9K\xcc]\xbe+\xd7?\xac\xda\x91\xde\xb2\xbe\xd6\xbfZ\x84\x90<\x80Y\xf7?\x10x}\xbb\xd7\xb2\xb2?\xd2|\n\x0b\xd3\xc2\xf0?\x90\xf1\xd2N-j\xe2\xbf$\xbd\t\xaaZ?\xd8?~\x9b\x8cE\xe9\x84\xca\xbfEA\xbc\xc2@\x01\xe4?\xdc(4\x08;F\xf3\xbf\xe2\xd3\xda\x02\xb1\xe1\xd5?\x1b\xf9\x07\xe92\x80\xf1?\x1a\t\x98A\x11\xac\xfd\xbf\xc6\r\xde\xfc\xd1\x14\xc0\xbf\xd0*\x89T\x0fy\xdd\xbf\x7f~n\x9d\x13\\\xe2?\xcf\x08\xc8!\xe0@\x9f\xbf\xec\x93\xf1N\xc1)\xfa\xbfGjSug\xf8\xb8?id\xc3\x0f\x19\xeb\xc2\xbfD\x1f\xcd\xc7\xe7\x1d\xb3\xbf\xec\xd2M[\xb9B\xc4\xbf\xcek\x0e\x94\xa1h\xbf\xbf%\xd1\xcd6\xdcD\xef\xbf\xa6!\x88d_\xdc\xbc?\x13\xf3t\xce\xba\x9eF\xbfT>\xd9l\xbdp\xf1?\x82\xf3 \xee\xcbc\xff\xbf\xd7H\xb0,&,\xb8?\x0c\xce.\xe9\xd4\n\x8f\xbf\xc0\xa5\xcd~\x1d\x07\xe3\xbf"yX\xa9\xa2\x17\xe8\xbf\\\xbf\x0f\x9a>|\xfb\xbf\x95\xb9\x87\t\x88\xad\xe4\xbfC\x9e4\xaf\xe8\x8e\xe0?u0{\n\xf6\xfd\xef\xbf\x03\x1f\xaaa%\xc4\xf6?~\x9f4\xec=\xf9\xb2?1\x89\x9dCA\xbd\xed?\x98\xe6\xc1\xca\xb1\xb1\xf1?0u\x96\x90\xd7v\xfc?\xaa\x1fx\xc5\x05z\xe3?6\xad\xa1\x1e;\xbe\xb7?\xf7HDW\x19-\xea?\x0e\xf3a\x92m\xd9\xff?\x14\x13]\x0e\x82>\xf1?\x81\xfb|[g\xf3\xa4?\tn>\x81\xb2!\xdf\xbfc\xc5\x81z\xec\xd9\xee\xbf\x93\xb0\x87\x144\xc3\xf8?\x06l\x04\xaf2-\xba?\xe9\xf4Y\xb3\x12\x06\xdc\xbfm\x95\xbf-2<\xfc\xbfh\x82\xe0M\xe7\x1e\xf6\xbf\xae\x1a\x957\x988\xba\xbf\xf9\x85\x7f\xfdjo\xca\xbf/<\x9a(w\xf3\xa9\xbf\xdd\xbb\xd3\xdb8=\xc1?\xca\x9eDF\x0e\x81\xcf\xbf\x0b@\xb8\xbe\x17\x7f\xc8?\xf5\x7f1\x91\x9c\x95\xb8\xbf\xd6\xf3K]~\xe5\xe1?i\x1b\x11\x8c~\x84\xe9\xbf\xca\xe3)\xc1\x87\x03\xf7?*\x02\xfe\xed\x886\xf7?\x15\xab\xe5\xbe5%\xfa?\x1d\x81\x00/\x80k\xd8\xbf\x91\xe1\x03\xf4)\x8f\x04@t\x13\xe8V\r\xe0\x00@\xcbp\x92$\xb0B\xf2?U\xc6\xd0/\xa9\xf6\xdc?\x81%\x8a5\xb7\x99\xf8?*\x1aL\xfap\x9e\xff?\xc3\x9dO\x0e\x06:\xe9?5L\xf3/g\xcb\xd3?Q\xafs\xe3\x89\xf0\xf5\xbf\xd4\xb8\x82\xec\x1c\xd3\xf7\xbf\xa7-\x8bg\x9f\xed\xca\xbf\x01_\xef\x82\xe2\r\xf6?\x96H\xee\x0f\xf3Q\xf1?s\xe8H\x820;\xd3\xbf\xfd\x1d\xe2\xd6\xfcw\xe0\xbf\x89\xd9\x1e\xc0\x7f\x03\xcc?[\x8d\x80\xdbaz\xeb\xbf\xe2\xaf\xbadZO\xe7?V\xa9\xfb\xdf\xf8\x87\xd8\xbf\xf3.\xf9\xe0\x83\xa6\xf2?\x06^ik\xa1<\xe8\xbf5\x01\xc6\xbc\xf0+a?h\xe1 \xb2Y\x7f\xf0\xbfP\xa3\x06TW9\xf1?\xd3\x12CP\x172\xea?\xc1\x13\x15-K\x88\xf0?\xb5\xb0\x8em\xc2\x8b\xc2?xw%o2\x98\xeb\xbf\xe6\x8e\xa1\xa3e\xa1\xf5?){^\x99\xdf\xd2\x18\xc0\x0f\x9e\xb9\x02f\t\xf5\xbf\xf4\r\xc9\xf9|\xfd\xec?\xb1\xdcR\t\xa8E\xef?\xb3\x08\xb6-+\xce\xf3?4\x11\x05;1\xcc\xe3?\xc9=C\xa8%\x86\xe3\xbf\x89\xdb\x82\xa7\x1f<\x07\xc0\xe5\x1c\x8b\xd9i\xeb\xd7?\x82:|\\\xb9\xb2\xe3?=5\xda\x98\xeb\xba\xce?\xf9\x95\xe9\xb9\xc5\xbe\xd6\xbf@?/\x92x\x0b\xcc\xbf\xcf\x99eS\xb6\x91\xd0?F\xc7\xd0\xca\xa0\x87\xeb\xbf\x06@\xac\xd4\x11Q\xf6\xbf\xd9&t{ao\xbb?\x96\xcd\x10\x9b\x15\x9b\xeb?\xe9d\x81\xf0\x15r\xe0\xbf]\x94\xe3\xf6G\xa6\xd3?\r\x08\xea\x96LS\xf6?\x16q\xc1\xf2\xa9\xef\xd9\xbf\xa4J\x8e\xdfK\xb5\x03@\xac\xcd\x9a\xb5B\x8f\xf4?\x87\xf8\x7f\xf3;F\x10\xc0a\xb2\r\x84\x1f\xc9\x0b\xc0\xb4U\xef\xcd\xadD\x07\xc0\xa4\x1e\x9c\x14\x97\xd5\xfd\xbfc:\x00\xdfD\xe6\x06\xc0\xc2H\xca\x93\xc0\xd8\x10\xc0\xbeO-l\x88/\x0f\xc0\xe3\xd1=L.\xec\x11\xc0\n\xa0\x14l&\xb1\x0b\xc0\xfb\x1e^Gy_\x12\xc0\xcb\xf1\xd8\xa4\xf1\x92\x04\xc0Y\xfa\x14\x9e`\xd1\xcf?\x89\xb1,\x13\xfe;\xf0\xbf\xba\xae\x84C\x8d\x93\xf0?\x85}\xf3\x93\xfb\xe8\x12@\x02\x86a6\xf8\x1e\xf7?|\\\x81\x19Z\xaf\xe7?\xbf&T6\xf8\xf9\xc3\xbf.\xb2z_\xd7\xe2\xf0\xbf\xe8FI\xcd?\x95\xe0\xbfa\xffY\xb1\xde\xef\xe2\xbf\xcac^\x9d\x863\xf6?\xb2\xb3R\x14\xf7:\xc8\xbfw\x11U\xec\xa5r\xf8\xbf,S\x0cem\x16\x03@(\xbf\xa9\xa4\x90:\xe6\xbf\x85L\x88\xf5br\xd2?\xdcF\xe7M%\xfd\xdc?Lzi\x9a\xb5k\xf9\xbf\xd6\xbf\xee?L\xee\x00\xc0l\x18\xe0\xc2\xea\xbb\xf8\xbf\xf6`\xc4y\xbe\xe7\x0e\xc0\xcc\x0e[\'\x05X\x0c\xc0\x07\xd3~\x12\x92\x15\x17\xc0\x8c\xe1\x1f\x8d\x0f\xd2\x0e\xc0\xca\xe0\xbaWh\xaf\x12\xc0G?@\x02E\xd0\xfa\xbfE\xb4\xc1\x96g\x88\x00\xc0b\x8b\xe6\x89\xfe2\xe4\xbft\xec\xea`\xcf_\x14\xc0P\xe6\xe9\x8e}]\xe3\xbf\x9a.X\x92L}\x9e?C\xd5\xf4~\xaa\x83\x8f?2\x93@W\x0e\xec\x01@\x9c]\xaa<\xa9\t\x06@Ccs\x88\xe1.\xf5?\xaa\x0c\xcc\xe8IQ\xf4?\x14Oe\xfb\xd7\x9f\xe1\xbf\'\xc3Ai\xf3r\xd6?\xd2\x9f\tJ]\xba\xdf?Ge\xcc\x10\x93m\xcf?\xae"\xb4\xa465\xe2\xbf\x93\x1d\xc2{\xca\xec\xf7?\xd4\xb5\xf1\x1f0g\xd6\xbf\xe8}t#\x84\xfe\xd2?\xc08\x89\x1cp\x89\xf6\xbf\xb0\xeb\xc3\xd6\xbdt\xda\xbf/\xe2\xb0\x04\xc52\xd0?q\rgNc\n\x04\xc0r\xf7\ti\x99S\xfa\xbfQ\x1f&\xb5\xf5\x84\xf5\xbf\xa74H\xf1@\xed\x13\xc0\xd8\x89cs\xc2\x81\xd3\xbf\xbc\x84\xea;\x16\x80\x18\xc01\xaa\x0b\x10\xe2n\xe9\xbf\xf4\x9c\xec\x99\xf1\r\x03\xc0F\xd4\x00[\\\xf6\xf6\xbf\x1c\xe8\xb0z\x80!\xf5\xbf\'\x11j\xa8\xe2l\xa0?R\x99\xc6\x11\x1d,\xb9\xbf\xa4\xf6\x94V\xa3q\xd3?\xd3\x11v\xbb\xc6Q\xf2?1\xfa\x92f\'z\x02@\xab\x14r\x7f\x90(\xea?\xd01\xbb\x1b\xd8\xc9\xe0\xbf\x83\xf6\xa3F\x92\xbd\xbc\xbf\xa1\xbf|\x87.\x9a\xd4\xbfn\x12a\xda\xb0\xad\xf4?m\x7f7\x88\xcc\xd7\xd9\xbf\xaa\xfe\xe97\xd1\xf9\xdb\xbf\x9fM\x1a\x7f\xff\xce\x01@!#\xbb1)n\xf8\xbf8\xf9\xe0\xbe>8\xda\xbf~\xfd\xde\x97\x1f\xe9\xf6\xbf\x01\xb9\xe9jX\xf8\xf1\xbf\x04o\x1f\xb2\x1a\xbd\x06\xc0\xde\x9e\xfeMCc\xfa\xbfl(\xfb\xae\x9c\x8f\x06\xc0\x9b\xd9\\\xab\x9e\x9e\x01\xc0\x122\xb9d\xces\x17\xc0\xdcK\xd6\x0e7e\x17\xc0\xc8\xb9$Hx\xfd\xec?!r!9\xac\xb0\xde\xbf\xdbmZA\x851\xb2?\x01\xfbA\xe5N\x07\xc4\xbf\x0b\xc9\'\x90\xa1\x00\xe7?;_\xa1\xf9\x1dA\x06@\xd8;\xb5\xb9H\xbf\xd1\xbf>C\xd8\xf8\xf6\xbd\xdc\xbfW@{\xe1\xe7\xcd\x8a?\xd2"\xbaF\xfcT\xc8?\x18\x8a\x90\xb4\x08\xf3\xd5\xbf\x97\xdb\x00\x85\x91\xc5\xd6?Z\x1d\x06t8\xe4\xe8\xbfm>c\xd1\xbb%\xf0\xbf\x87^\xe0\xf6\x8c\xcf\xd2\xbf\xf5H-\xdbHB\x06\xc0ln\xdc>\xb4\xf6\xda\xbf\x1f\xc8\xd3\x9e\xa99\xd8?l\x11QA\x11\x18\xdc\xbfcm\x80\xd7(1\xf6\xbf\xf0\x13[\x10\xa6R\xf1\xbf\xb06\xc2o\xff\xe7\xef?A{}\xa7\xf0\xbc\xf0\xbf\xba\xb6\x1d\xd8\xdfs\xe7\xbf\xfb}\xdd\xc4\x9b\xd8\xe1\xbfb\x8e\xaa\xf63\xc4\x07\xc0\xd6{\x9a\x15\xf8\xf1\x1b\xc0\xd8N\xaf\xd9\xc0\x04\xee?\\!\'\x12g\xd1\x08\xc0\xfa\x1b\xcdo\xd2\xb4\x00@)\xe2\xacmT\xf6\xe2?\xe0\x9e\x0eA\xc9&\xe2?\xc1R\xb5\'\xd6_\xe6\xbfU\x00\x8420\x9b\xfb\xbf\xb5fo+\xeaV\xc7\xbf.\xf4\xfa7\xa2\x89\xfc\xbf\xe5tC\xdan\xb8\xe3\xbfg\x12+\xce=7\xe2?\x14~%\xa7~\xd7\xf1?\xb2\xa1J\xba\x9e\xb2\xd7?:lR\xbc\x93^\xf2?\x04\x1c\x90\x87\x8b"\xbb\xbf\xb3u\t\xd2\xd5+\xdd\xbfK\x1eZ\x8f\xf1\xe5\xc9\xbf\\\xf5\xd9\xecSH\xea\xbfiM,\xbc\x10\xee\x01\xc0\x13z`\xf7\xeb\xe7\xeb\xbf\xcco\xf6aT\xae\xf2\xbf:a\xe3\xdf\xde \xee\xbf\xdd\xa5[\x15\x7f\xba\xf5?\x1c\x0bq\x13\xc4\x0b\xe6\xbfL\xa2\xebl\xfdG\xee\xbfZ\x02\xfb\xb0c\xca\xdc?0\xf9\xda\xa9\xcc\xf5\x1d\xc0mRi\x02$\x91\x03\xc0\x85Z\xd5\x83\x94/\xf0?\x86"\x86\x9fE\x17\xe4?\xddj\xc8\xda\xf3D\x01\xc0\xdb\xc8\x9fEb\xee\x05\xc0U\xad\x85\xfa\x8f\x90\xf4\xbfj\xe4\x95pV\xce\x01\xc0\'Y\x8f\xc45\x00\x06\xc0\xe5i\x18\xc2s^\x0f\xc0\xf8;\xd8h\x1bm\x05\xc0\x86\x83\x04\x80ZD\xe3\xbfD\x86<\xd1!\x8c\xc6\xbf\xd5\xa5u.\x9a\xed\xd2\xbf\xe1z\xe7\xcfIE\xfd\xbf\x9c\x98\xab\te\x9e\xb9\xbf\x88\xfd.\xba\x80\x1f\xe1\xbf\x12\x12\xb4=\xa8W\xb6?I\xbb\x19\xee\xef\xe7\xf2\xbf\xb0\xd1\xb5J\xdc\xd3\x06\xc0\n]mR:\xa0\x0e\xc0f\x8d~\xf5\xfc~\xf8\xbf\x97n\x9f)\xa6\xf4\x01\xc0\xc8\xe1\x83\x07\xa0\xe3\xe6?\x19\x92\x11r\xb2V\xec\xbf\x8c\xabk\x8f\xc95\x08@q\xdd\xfd\x10\x8cT\x07@|~N\xb6B\x9a\x13@\x99\x01<\xa9\xc2Z\x0c@w\x84\x8d\xf1s\xbc\xe3\xbf\x1eL\\Te\xb0\xe1\xbf\xba\xd9w\xbbg\x9c\xf9?\xeeAR\x8c\x03+\x03\xc0\xd2\x92[&a\x90\xf1\xbfl\xb7 d\x13-\xf3\xbf\xf2DF\xbc\xad\x12\xf9\xbf\xee+\xafa\xabG\x03\xc0?x\x1a9T\x82\xf4\xbf\x08\x94\x0b\xfc\xdf\xfc\x07\xc0\x14\xe7~[GZ\xf3\xbf\xf0M\x15\x1a\xc7\xeb\xea\xbf\xdbm\x96\x87\xef\x9f\xe2\xbf:3Gv\\\xbd\xcb?\x1ea\xed}P\x8b\xc7\xbf\x01\xce\xc36\x85\xb2\xdb?\xd4\x9a\xa3{\xcc\x94\xe8?!\x1c\xb0\xcd@#\xfb\xbf\x7f\xf3\x1a+\xd8>\xf2\xbf\x1c\tj\xa0\x00!\xe4\xbf\x965\xa0J\x9cP\xfd?\xfc\x0e\xb1\x8e*E\xfa?\x91V\xef\x06\xd7\xaa\xd5\xbf\x8e\xa2\x0c\xcdC\x06\x07@\xdbQ\x9d\xe5+\xae\x0b@%/\xa3\xf0\xd9\xfa\x0f@\x8c\x19\xde\xeaze\x1d@\x02?\xc8n\x9c\xf5\x9c?c\xaf\xcbN\xb8\xec\x11\xc0\x19\'3\x94\x97*\x0b@\x97\xdd\x05T0z\xe4\xbf}g n\xf0>\xf4?\xe4\xa4\xaa\xd6\xc5\x82\xc1\xbf\xcf\xa0eo\n\xb5\xd3?\xc1\xb8\xb9\xd4\x0e\x7f\xc9\xbfb\xaaJ\xe9\xd5J{\xbff\x00\x87\xbd\x83a\xea\xbf\x92\xa2\xc5\x07\xb7\xd8\xdb\xbfO\xe0\xabd=\xde\xe0?\x84\xc8CG\x921\xc0?~\xb0\x80\xa6\r\x17\xf3?x\xc1Y\x96\x03\xa7\xe9?/2.\xa7T,\x84?[V]\xff\x93\x84\xee?\x82\xaeb\xb7\xfa\x9e\xe3\xbf\x04\xe9\xf6\xb2\xae\xf7\xdc\xbf\xef\xff,\xb5WH\xd4?\xe0_\x83\x9c\x04E\n@W*\xfc\xd9\xc9<\xe2\xbf\xe8\xc2\xf8%\xe3\x92\x11@\x0f\x9d\x11;\x9f\xbd\xe1?$^y\xf0{]\t@\xc2b\xc4\xa7\x11.\xed?\'\xbcj\xca\x16*\x14@\xb2\xe0\x9b@\x8fJ\x13@#\x82\xde\xe4\x06\n\xfe\xbf\r\xaf\xd6\x83\xcb\xa5\xf7\xbfaC\xdd\x97\xbd\xa4\xf5?\xff>c_p\x02\xd4?\xf9\x0fX{+\xf2\xfd?m\x07ZR\xf04\xff?\xae\xfc\xb1) :\xeb?Ty\x8d?E\x97\xfd?\xa9\xcf\xdaV\x18j\xb9\xbfy\x92\xce\xa3\xba \xe9\xbf\xd4\xfd\xef-?\x19\xf3?v\x04o*\xd9K\x03@1\xc0\xad\xe2*o\xed?\xad\x07\xd3\x1e\xab\xc8\xf2?\x87\xb7FVp\xcb\xe7?\x12Ew\t\xa7\x86\xb7?n\xbc\xd7Jh)\xe8?\x94\xb68[J^\xed?JT\xeb\xa9\xaa\x03\xc7\xbfb\x0b\x0e\xc4\x07\x1c\xdd?\xbd\x15\x9az*H\xf3?\x8aq\xf4\xa0 \x18\xe9?c3e\xd4\x8d\xc5\xf0?\xab\n\xab\xee\xcc\x05\x08@\xeek\xe4@\x17t\x12@\xe4\xdf\xbe\xf4\x7f!\xe4?*\xc8`9J\x14\xd7?\xca\xec\x82\'\xc7\xa0\x12@\x80lp\xee\x1d\xe2\xc4\xbf\xab\xdd\xeb^\xcev\x01@3`5\xdd\xf7 \xe4\xbfsn\x00\xea\x19\xbb\x11@\xec\xd0aH\x89\xc6\xe7?\xcc\xc8w\x81CZ\xf5\xbf\n\xf6H\xb7Ti\x00@\xbf\xb3\xe4\xf6\x01\x9b\xdf\xbf,\x9eZFZ\x18\xb6?6\x16\xe0\xcb8\x94\xf3?\x81+\x05\x0eJ`\x07@\x04&\x9e$i\x7f\xfc?AZ\x12^=-\xeb?M\xd7\'`\xde\x93\xf7?\x15?\xbd\xb2p\xc4\xdf\xbf\xa4CK\x12\x0f?\xea\xbf\xac\x83\xebo\x1a\xed\x95\xbf\x0c/\x04\xd0\xa9\x04\xc8\xbf\x8b\xeby\xcb\xbaw\xf8?\x8e\x84\xf3r\xb3\xeb\xbf?\xb5&\xc6\x0f\xd9\x1f\xca?\x8b\xe3\x1b\xd0\xab\xfb\x9c?T\x85\xec\xd2\xd8\xb8\xf3?\xba\x04\x0c@\xddu\xf0?$b\xab%\x00\xf3\xd2\xbf\xc0~~\x0f\xc2r\xdd?\x96\x99\x82B\x863V? @\xa5\xe2\xd2\t\xe6?\x14\xbb*\xcf)\xb5\xd3?\xfeJ\x02\xcf\xda?\x11@\x99\xbdx\x95\x1d\x8d\x14@\xa3V&\xed\xc7+\x05@w\x8b&\x112\x0c\x07@\\\xd4\xe3a\x93\xd4\x0c@\xbe\xf3\xfej\xe3V\x15@=\xd0,\xf7\xf3\xf6\xf2?\x99\x9f\xd9."\xbc\x01@\xfb\x82\xbb\x8e_[\xf1?\x17\x12:\\\x9eB\xf6?\x981\xf5z\x11\xe2\x03@o-\x8d\xa6\xd4#\x05@#\x0c`~\xd6\xc1\xe8\xbf\xd74\\\xb1\x1f\xc1\xce?\xc2\xccH*X\x8f\xe2\xbfC;\r\x12nw\xcf?e\xa6\xe4\xfd\x07\xe1\xf7\xbf\xb6\xfc\xea \xa9\xb7\xca\xbf\xfdyJ\xa0\xc6\x01\xf5?\xd8+\x97\xde\x1b$\xf3?\'\xcd\xe3\x13\x00\xe6\x02@\xc2\x8b\xf5\xe8\x1f*\x03@\x80\x04\x84\r\x87\xb8\x00@K\xc4\x12\xcb$\x02\xf7?\xc6|{\xa5\x81\x11\x00\xc0\xcd\x9f\xc9}a\x91\x00@\\\xc8\xc7^\xed\xa56?\xa5O\xb0\xa1\xa2J\xe6?\x07\xbe\xf78\xbf\x11\n@\xb0\xc0\x80\xc64\x8d\x02@\xfc\xca\xdb4L\xf5\xfb?\xfdAV\x9eC\xcc\xeb?\x04\xc4\x0b0\x04\xd8\xfa?\x17\xcf\x8f\xef\xf6\x1a\x91?4\xa8)\xf8_\xf5\xfe? \xa8\x8f\xd1?\n\x0b@\xf6\xd7\x84\xcc\xd7\x91\x0b@`\xb0"C.\xbf\xf5?\x96\xee\x8dP\xcd\x7f\xf0?\xb7\xae\xa8\xc7L \xef?M\x00\xf5\xb2\x9cm\xe9?\xa8\xf7~\xa4\xc53\xec?T\xb3#\xbe\xd7\xce\xc0\xbf\x1f\xd8\xb5\xf9[\xb7\x91?N\xac\xff\xa9\x1b=\xec\xbf\x8fg\x01\x87H\x82\xf3?\x01t\xb1\xbbZ#\x0b@b\x02\x86\xec\x1c\x1a\x13@\xbd\xe3oxc\x19\x05@\x85\x81\x99\xc43m\xde?`z\x85\x11\xc0\xd0\xe8?\x11\xcay$W\xa9\xd7\xbf\xf8Z\xae\x80?\x16\x05\xc0\xe1-\xb7:\x0c\xe3\xf3?/,\xac\xde\x1d:\x04@.N=l\xf6\x1f\xce?.m<^x\\\xf5?\xbd\xe1\x1dF\x06\xb6\xec?\x12Y\x883\xa8E\xfc?\x1f\xdb\x0c\x0c\xbd\x95\xfe\xbf\x1b\xb9\xfa\x16\x9b0\xfb?\x0e\x0eDei}\xd3\xbf\xf0\x80\xd1db\x1c\xf3?Zv\xa8\xd9\x13\xb9\xf5?\xe3\x06<\x91"\xef\x02@\x03\x94\x14\x02\xb8\xbe\x01@\xf2\xc2\xf1Y\x7f\x8e\x03@wE\xad\xa2\xaa~\xde?\xa6\x1c%\x0b\xec7\xdd?4m\\\x12\xbe\xac\xa6\xbf\xfc\x83\x94S\x97\xaa\xef\xbf\xdag+\x8e\xca\x80\xea?\xf4\x9awx\xb9\xdf\xf0\xbf\x1d\xb0N6\xc8\x1f\xe2?\x06\xba9\xe4\xd5v\xfb?\x9e\x81|\x18\xc4\xbf\x10@V\xd0\xe0\xb0\x96\xa9\xee?cl\xcb\xbb7\xd4\xea\xbf\xf7\x99QG\x00}\xfe\xbf\xb8\x19\x0c\xfes\x98\xe8\xbfI\xfa\x1e\xceM\x1b\xf5\xbf\x80\x96\x06\xe4\xdd\x91\x08@\xc40\x85\xde\xb4\x07\xd7\xbf\xde^}\xf3\xe8[\x0e@\xfaR>\xc2$\xb2\xfa?b\x83\xeeQ\x8a\xd5\x07@\xdf\xddm\'OZ\x05@9q\xe2Gq\xeb\xf1?\xfe"\xef\x9cHr\xfe?ho\xc1\x1f\xce\x95\x05\xc0\x85\x911Yg\x12\xd6\xbf\x00*\xac~\x14\xb5\xbd?op\xc7\xe2)\x88\xea?\\\xbd\xc4n\xc7\xd6\xfa?\x0c\xb7\xbb\'\xf2X\xdb?r)\xb9\x94\xc8\xef\xe3?\xbbn\xe9\x80u\xdf\xf8?v\x83\xb0\xad\xd7\x80\xcb\xbf\x9cW\xeb\x0e\x95\xea\xc3?\xefs\x9a\'8\x15\xf1\xbf\xb9\xd8\xea\xf4\xb4@\xe2\xbfi\xd6\x83\x91\xbe\x93\xd2\xbf\xc1\xa8\xfe=\x05\xe3\x07@\x16B\xa0\xa8\xf0\r\x05@.X\xae\xfftQ\xde?#\xf4\xf8\xe0\x8b\xb9\xf4?\x7f\x18\x15\xc5\xd5\xf6\xe3?`\xc3\xca\x86Y\xb9\xcd\xbf\xf0=\xf8G\xcba\xf1\xbf\xfd\xa9Q?\xad\x85\x02@\nrd\xc4j=\xf4?X#z\xc6~3\xc5\xbf?\xa6\xcfsm~\xa1?\xf7B\xd3\xbf\xd2\xe0\xf7?D7\xf9\x080]\xf6?\'U\xb8\xd9Ve\xf7?\xfb\xd8\xf9\xc7$v\xcd?\xe1t@\n\x16\xd1\x10\xc0/y\xe1\xda\xf7"\xf7\xbfo\x8e\xbd\x82\xcc\xb6\xdb\xbf\x82\xe8\xe9e\x15\x06\xf1\xbf\xffxs2g\x8f\xa2\xbfoXf~\x1e[\xe9\xbf\x9d\xa5\x98L\xafL\xa5?\x13\x84y]\xf5\xfb\xe2\xbf\x8b\xe2\xc0\xde\xb3\x99\xe7?c\x05\xa9\xe8O\xa2\xdd?\x990#\xad\x14Y\xe9?\x89\xc7/\xf5\x12\xc0\xe1?\xd6\\w\xda\xb3\x17\xe3?s\xdc\xff\xbe\xd1z\xf1?\x03q\xf6h\xa1\xee\x01\xc0YL\x1a\xc8~\xfb\x04\xc0"\x04\x1d\xbd\x88\x15\xf0\xbf\xc3\x91\x96Z@~\xe5?=\x02wU\xa5\x19\xf9\xbf\x9c\xe2.\xdaw\xed\xf8\xbf1]\xc8t\\\t\xf4?\xea\xfe\xf5.\xce\x7f\xd7\xbf\x04o\x96\xa7\x89\xf3\xc1\xbf7\xba\xbd\x8b\xff\xa0\xe4?\x97\xd3\xa6\x15\x80-\x07\xc0Jp\xc5oc\x17\xfa\xbf=\xe8YN\x90\xac\xec\xbf\xd2\x9e\xb0\x19s%\xf3\xbfEy\x9c\xdf\xd7\xd9\x04\xc0\xa2\x1e\x7fs\x1c \xf7\xbf\xb1\x85\xfcwTi\xf3\xbf\x18&P\x82|:\x00\xc0\x9b6i\xe7\xba%\xda\xbf\xca\xb4\xc0\x89\xe3\x1e\xe5\xbfF\xef`\x8d\xdb\x1c\xec?\x19I5D$\xb2\xd0?n0\x9c\x0e\x89\x9f\xd4\xbf\xf7Dfg7F\xe3\xbfOFP\xc7\xb2\x0e\xdd?%\x82K\xc6\x8b\x02\xd1\xbf}1\xa5\x1e-\x85\xeb\xbf\xde\x85Y\xf9;\xe9\xb7\xbf\x14\x9c&\xa7\xca\x17\x08\xc0q\x1d\x10\x03\x17\x13\x07\xc0\x80\x97\xb1"Rh\x01\xc0\xd6h(ko0\x13\xc0\xac\xaal\xd8\xd9y\xe2\xbf\xdc\x16\x1cn\xb5_\xf6\xbf\xef_\x0e)\xbb\x06\x04\xc0J\x04~^\xfc-\x12\xc00\xf2a\x18\x97D\xff\xbf\x8a\x000\xb9\x94\xa9\x0b\xc0V7\xcb\x05V\xfb\xe7\xbfGryM\x8bE\xfa\xbfYQ\xbc\'\xd0:\x00\xc0\xe9\xadX\xe7\xc2)\xe5\xbf:$N3\xa1-\xe4?\xfa\xbd\xc0w:\x91\xe9?dU\xdc\x97\xb4Q\x01\xc0\xebM\x01\xecC`\xf8\xbf=N\x1f\xb2\t\x11\x03\xc0Y\xa6\xd3`J\xc1\xf7\xbfL\xa4u}{C\xe0?\xa9\x1a\x164\xf6?\xe6?\xa8\xa8,Z\x17\x9d\xf1?\xa7\xe4\xc4e\xbe\x92\xd4\xbf\xb1\xd3\x80\x0c\xe9A\xf5\xbf\xc5\x8a\nh\x996\xf6?Ch\x8a[_\x83\xe4\xbf\x02\xd8\xc7$\xbc{\xee\xbf\xf2f{/\xf8-\x08\xc0\xb5\xd8\x1a\xcd\x95\xaa\x0b\xc0&z\x8a\x01\x0c\x0b\x03\xc0\xd7\xa7/\xa9\xce.\x01\xc02\x8f\x1d\xc3[\xbc\xf5\xbfz;\xf0\x18\x96\xe9\xfa\xbf\xfb\xae+h\x89c\x00\xc0\xc6\xf8|\xbbo9\xe9\xbfn\xa8\xf5\xf5\x19\xac\x06\xc0,T\x8ei">\xfe\xbfK\xaf\xd1:S@\x07\xc00\xf4il\x0f`\xf9\xbf\xf3\xa2%cS@\xed\xbf\x9aI8N\'\x18\xea?\xe4A_J#\x05\x03\xc0\x04\xd3\xbe9#\xae\xff?\xafmk\x95\x89(\xe2\xbf\xcf\x1a\xeck\xf8\xee\xfe\xbf\x1f\x0c\x075\xa0I\x08\xc0\xd7]p/!\x89\x04\xc0P\xfd\xc5\xe3)\x86\xec?\xc9 ;BVZ\xa1\xbf\xe8\xf6$\x91%\xd7\xd8\xbf\x9eA\xf9ot\x9c\xe9?\xe0cmc\xecq\xee\xbf$|-/=\x85\xc2\xbf\xb0\xed\xc5\x85\x8a\x06\xe2?Q?\xf8x7\x0c\x97?\xb0[q\xa3\x1c$\xcd?\x18N\x89\xc5\x19%\xf9\xbf\xfe\xa1\xb9c\xe9M\x05\xc0\xe8\x03\xack:\xa5\x04\xc0\xbbb\x990H+\xdd\xbf\xf6b\x90:\x00\x14\xf1\xbf\xef\xcc\xd73\xe2\xe9\x94\xbf<\xe7\xca\x81\xac\xce\xec\xbfjA\xdc7u\xf7\xe7?rNX\x87\x88\x8d\xbd?v|\xc9\xd2O\x80\xfa?q\x98s\x90\x1c\x06\xd9\xbf\xb7\x0e\xad[q\x8b\xd1\xbfP*\xe5\x07}\xa4t\xbf\x10\x94\xc0O-\xfc\xff?\x06\xd5"\xc2\xd1\xb8\xe2?\xea\x82\xa3\xf9@\x90\xe7\xbf\x81\'g\x82"\x00\xfd\xbf\x86\xed?,\xe0\x9b\x02\xc0\x9b\x93@\xd9\xc6^\xe4\xbf\x96Ij\x9bc\x85\xd9?J%?\x89\x00P\xd3\xbf\xcc\x89\xdbj\x95_\xe3\xbfI\xc0\x80!?D\xdd?\xb2\xda\xad\x82\xb0I\xe3?\x99\x81gi\xf1\xc6\xed\xbfJw\x01\x05\x9f\x8f\xb1\xbf`fC$\xb3@\xf1\xbf@p\xa1c\xda8\xf4\xbfz\xf59j<\xea\xfd\xbfj\xc0\xb7K\xe2v\x10\xc0\xac\x7f\xafP\r\xd0\x0f\xc0z\x88\xf0@\xadC\x11\xc0\xf8\xe1?\x0b\xb9\xa5\x12\xc0$\xcc\xa1\xacx\xe3\x03\xc0":\xae]\x13\xac\x12\xc0W\xe6-\xdfz\r\x03\xc0\xd5/x\x1a\xf5\x82\r\xc0\x1f\xef(\xb3\xff\xc8\xfa\xbf6\x00n\xe51j\x04\xc0|\xc0\x84z\x94\xda\xfe\xbf\x98\xd3}\xd0*j\x0f\xc0\xde\xc7\xe1\x00\x17e\x00\xc0I\x89xj\x18\xd9\x07\xc0&{\xcc\x13N\xd2\x08\xc0\xdb\xd1C\xee\x80\xbc\x03\xc0E\x94c7B\x90\xf3\xbf\xbf<8~\xb3l\xe4?\xf1iq\xfc\xa4\xce\xe8?\x19\xb9\xa0S`~\xda?\x8f{\x9f\x9dC\x89\xb0?B\xf8\x13\xe2\x0e\xed\xe5\xbf\x9f\x1by\xe9&U\xec?\\\xb39\xcc0J\xa5?fx\x93\xd9\t\x05\xec?d\xd1\x06T\xc5O\xda?l\x80W\xfc\x95\x95\xff\xbf-\xf5G\xb9N#\x04\xc0\xef\xc2\xb3\xfd\xd5\xa6\xf4\xbf\xc2\xf5\x8d\xe2\xed\x95\x07\xc0l\x11\xb2@\xa1}\x0c\xc0E\xbb\xd9\x9c\xd7-\x12\xc0\xb4#\x97\x85\xa9\xf1\x0c\xc0m\xe5\xea\xff\xd1n\x12\xc0\xfc\xea^\xb1\xef\x9a\x14\xc0#\xa5@\x14\xe2\x96\x1b\xc0\x8a\xac\xf2\xf5\x01b\x13\xc0zz\xc4.l\xcf\x10\xc0Tt\x1e\xc1\x18\xd4\x0b\xc0H\xf5Q\xe3\x85\x1d\x0f\xc0\x9d\xa3\xafb\x0bp\x0e\xc0\xf4\xd5D\xc6y{\xf2\xbf\xc6\x14|\x18f]\x01\xc0\xfcG?\x19\x04\x02\xf9\xbf\xd3\x85\x84\x04\x9f\xd3\xf2?]15\x8e\x8c\x03\xbf\xbf\xdeOyq3\xd0\xc1\xbf\xba\x06f\xecdH\xe0\xbf\x05\x93\xd2}m>\xd2?\x19\xef\x1f\xdc}\xaf\xe0?\x0b\xbc\x88\xe3\x98\xe5\xda?\xd4\xdf\x9c\x9f\xa32\xdc\xbfx\xb8\xa0\xb0\x92\xc3\x9f\xbf\xbe\xb4\x94\xeb\x87C\xfa?0\xfe\x0e\xaef\xec\xf3?\xd6\xb1\xe2e\x9e\xc8\xf2\xbf\xd5o \xf8\xef\xc0\xe5\xbf\xf8*D\'\x9b\xbd\xe8?\xd4\x07L\x1a\xd8\x0c\xf0\xbf\x97nh\xcb\xfd#\x99\xbf\xaeP\x80\x06\x9b\xae\xd5\xbf\xac\xd1\x0f#\x01\xa2\xfd\xbf\xeb\xad\xc0\xfe) \xe7\xbf<\xba\xa4C4\x1a\xf1\xbf\xdfa\x19\xe3l0\xe2\xbf\xdd\xd2\xd0\x01\xb5i\xf2?\xe8u\xcc\x1e\x86\x8a\xac\xbf87\xd6\xf4\x84<\xe9\xbf\x9dMB\xb2\xd2\xa9\xf7\xbf\xc8\x04\xd9\xfd\x8d_\xb8\xbf\xc9\x87/\xd0\xbf&\xa6Hi\xc8\x1e\xde\xbf\xfd\x83\xc9\x94\xe6\xd6\xdb?\x04\x1a+S\xd2\xf9\xc0?-\xc9b\xcc\xaf^y?\x164#\x83\xc2g\xe8?\xecR\x8b\x16\x1fv\xf1?\x97I\xad\xa0\x87\xdb\xe6?\x1e\xc0\x8b}R&\xe6\xbf\xca\x1c\x85[\xde\xf0\xdc?\xfd\x83\x00\xae\x190\xe0\xbf1\x92\xf8\xc4\xc0?\xe6?\xe1+\x90\xc8\xdap\xd2?g,\x18\x01\xb9\xf7\xf1?\xc5@\x9b\xad0E\xd0?L`\x9b\x95\x18=\xda?\xaf\x8d&\x17\xa3B\xf2\xbftM\xd0\xed\xc9\xf2\x9a\xbf\xc6(\xe7\xd8\x17\x87\x95\xbf1t\xbbEe\xfe\xf1?\x14\x89\xfcP\x0c\xed\xf1?\xd5\xa3\xecJ 3\xdc?E\xae\x1bH\xbc\xe3\xc1\xbf\x01\x91\xce3*y\xc0?\xe5\xabR\xfb\xeeQ\xba\xbf\xd2o"\x1dk"\xe6\xbf\x9e\xd7\x16\xf48\x82\xb3\xbfd\xa14$\x11Q\xb3?\xef\xcc18\x8a\xb9\xe2?\x0c\x96\xba=\xe4\xbb\xc0\xbf\xcf\xfd\xfb\xa3S\'\x8d\xbf<\x14\xae\xe4\xd0\xbb\xf2?F\t\xa34@\xd8\xea\xbf\x10\x9b( \x10\xbf\xbb?F\\&\x04K\xfc\xd3\xbf\x8e\xee\x8c\x04Y:\x88\xbf.\xeekP\x1cg\xf5\xbf\x9f\xdf\x81U\xa4\xd6\xdc?\x1c\xfa\xebr\xd1r\xf0\xbf|\xff\x7f\xc8\x86\x99\xe1\xbf\x8d\xfb\xb4\x03\x0b=\xac\xbfk\xf2\x87\xbb\x87\xdc\xc0\xbf\xb3M\xc5oh|\xf3?g\xe9\x8b\xa2eA\xf1?\xf1\xfc\xd2,V\xd6\xd2\xbf\x9d\xcf\xb0D\x84R\xd7\xbf\x89\xf6*\xb9\xa2\xcd\xe5?\x81wt\xf2\xc7\x8c\xfa?\xf7\xe4*\x93\x93\xbb\xf2?\x9e\xc8|%h/\xb6?\x03]\xc5\xff\xc6\xed\xfc?\xd7\xeb`\xfcSN\xd0?g\x93\xc7n\x18\x9e\xe9\xbfK\xe7N\xbeh\xfc\xf1\xbf\x90\xaf\xf2\xcdi4\xea?\xdc\xef5A\x10\xce\xc8?\x1a\x0c\xac\xb4\xd7B\xde\xbf%\xb94\xc2N\xe8\xbd\xbf^\x9bKT\x0e\x15\xe2\xbfY\xc7O\xd3\xb8C\xdb\xbf\n3\x9a\xb4l\xda\xf1?\xdc\xa9\x1fh\xa1,\xcf?k\xee\xd7\x90g\xea\xf2?5O\xa8\x89\x05\x80\xf0?\xc9i\x1d\xbb\x08\x1e\xe3\xbf\x95v8J\x94|\xe1?)\'\xe7\xea \x9c\xfb?Qu\xe9\xb4\xe6\xa7\xe6\xbf@\x93\xf1e\xb4\xa4\xf3\xbf\xa8&4\xa7^L\xee?\x14;|\xbb\x1c\xba\xa5?b\x8c\x89O\x9e(\xfa\xbfu\x18u\x02\xaav\xda\xbf\x08js\xa4\x02u\xf6?\xae\x82\x82\x83\xfe\x85\xcf?\x84\xfeyF\xe9V\xc4\xbf\x1d`\xf1\x1f8\x93\x01@\xcc\xac\xad\xcbf$\xe1?%`\xddT\x86\x98\xa4\xbf\x82N\xe4\xd4hE\xd6?\xed=\xea\xb8\x18\x13\xd4?\xcbjN\x8b\xf4\xdf\xef?\xacR\xd0\xd4d\x9b\xd3?\xe8\xf3} *\xe7\xe5\xbf+-\xc4\x9c\xf0{\xda?\x11vs\x02\xc6\xfc\xc4\xbfL\x0f\xc8\xe4^\x8c\xc8?16(\xa0\x8c\xc0\xde\xbfEq&\xb9\x97\x1a\xbd?O\xae\x8di8/\xda\xbf\x83\xd7K\xa3\x89\xaf\xf6\xbf\x0e\x97m\xe1\'l\xd7?\x12\xf4kb2I\xab\xbf\x89\xfd\x0b\xeb6\xcb\xcc\xbf\xec\xcf\x0b\xad`\x95\xd2\xbf\x1c\x10\xd8\xbcKN\xf4?p#\xd3\xdcj\xa1\xec?Q\xd0MC\xb7\xac\xf1\xbfVDJ\x8d\xb7\x07\x04\xc0^\xf6\xeb\xc0\xcb\x14\xe7?\xae\x8e\xb6\xcd[\x85\xc0\xbf\xfcV\xc6E9W\xfb?\x17^\x16\xcc&w\xd0?\xb2\x8eJC\xf4C\xc1\xbf\xd6\xd1yj\x04\x06\xe8\xbf\xca\x1d43\xad#\xfe\xbf-k\x1b\xb7\xc0\xf8\xed?e>\xcf\x1a\xc1\x03\x08@PH{\xc8[\t\xfd?\xc0\xceiNY\x9a\xf2?\xac-\xa04\xf6\x7f\xe0?\x15\xa8\x8d\n\x1a_\xe2?\xbdQpz\x8av\xe6?\x8e\xad\xa4}f\x18\xd1\xbf8\xa0\xea\xc4\x92\xbd\xd2\xbf\x00\xbd6\xf7\xe0a\xc6?L\x9c\xa3\xea\xd5:\xc2?CE\x89\xabkE\xa4?\xce];\xdf\x90\x94\xf3?\xc0rs\x97}e\xaa?\x8edS\xc9N\xfd\xe5?\x81\xb0I\xf8\xf1t\xe2\xbf\xb17Z\xdb\x05\'\xdc?\xcf\x86\xfc\xfa\x0c\xe6\xd0?\x96\xdat\xa4\x83Y\xe5\xbfVX\x96\xc9\xef:\xfa\xbf\xc5\xd9\x9d\xfb\xbaL\x00\xc0\\OFx\xe8\x8b\xfa\xbf\xdbu\x08\xd9\xaa4\x06\xc0\x02\x88\xe4Z\xf3\x08\xe7\xbfC\x03\xf76X?\xf9\xbf\xf5\xd6\xcb\x85\xb5\x90\xff\xbf\xb3i\xba\xb1\x06\x07\xe0?\x9c\x965\xff\xb7H\xcb\xbfx\xb4\x9b\xfcl\xdd\xdf\xbf\xb8\xdb\x8d\x06_I\xe6?\x06\x11\xea\xf3\xa55\xfe?h\xad\xb4\x88\xb8w\xa6\xbfK\x96\x02\xd9\x93A\xf9?\x8e\xe7\xe9Bj\xa7\xf7?,\x15\xa0\xd8\xca\xcd\xe5?w\xc8\xda*\xc6\xda\xec\xbf\xd28\xe39\xaaK\xd6?\x18\xc7\xf8@\xaa:\xe0?\x98\xacQ4\x18\x19\xec?\xb0\x0e\x12\x8e\\k\xb3? \xef\x0eG\xbf\x0b\xcd\xbf\xf1\x865\xcb\xb6a\xc4\xbf\x81\xe9q\x85\xbf\x88\xd9\xbf\xaa\xf6N>\xb8D\xd4\xbf\xee\xe9\xaa\x85\x14\xab\xf5\xbfc\xdd(\xe5\x9f\x99\xe1?\xa7#l\xafR\xb5\x05\xc0\xb2\xf0DU~\xd7\xf9\xbf\x7f\x0el]\xf7N\xda\xbf\xf1\xb5\x9e\xd8\xcc\x8a\x05\xc0\x14\x14\xd5\xeb\xc6B\xf6\xbf~\xc1#\xdc\xd4h\x00\xc0\xc5\xa6\xa1*M\x1b\x11\xc0\xd1\xb5z\'[\\\xeb\xbf\x1a\xd6\x08\xd5:\xda\x06\xc0\x89\xb6\x17\xa0\x96!\x06\xc0J\xae\r\xca\xc4\x12\xda\xbf\xcaY#)\xee\xd2\xe6\xbf\xbaa\x19\xc5\xd6\xa1\xed?\xed3\xdb\xdf\xa8\xa2\x00@\xe1\xec\x99\xe96\x9c\x07@#\xfbD\x88\x0e\xb6\xe1?x`\x97\xd6{q\xd9?\x02\x15\xf2kK\xfd\xfb\xbf\xc9q\xdd\xbc\xa0\n\xcd?wj\xa5\xec\x96\x95\xdf?\x94a\xf4\xf3i]\xe7?M\xe3\x9fK\x02%\xdf\xbf\x17\x1dQ\xcc\xb6)\xcd\xbf]\x9f^Q\xa2\xbc\xe5\xbf\xe7i\x9f\\\x02\xcc\xac\xbf\xfa\x08m\x05\xfa\xd8\xd9?\xe6\xba\xb2>\xee\xeb\x00\xc09\x00I`\x81Y\x04\xc0\xb25\x98\x85\x0b\xbe\t\xc0\xb0\x7f\x1fa\x06\x0b\xfe\xbf\xc3|B\xfc\xb5&\x06\xc0\xf2)\x92\xfc\n\x16\x06\xc0#\xdf\xee<\xee\xb5\xe9\xbf\xe2\xe93\xe1b2\xd1?\x92\xc4v\xe0\xfc\xfe\x81\xbf\xf5D\\\xbff\xae\xf7\xbfx3z\x83\xed(\xe5\xbf\xdc\x02M\xd9\r\x9e\xf0\xbf\\\x83\x15Q7u\xcd?\x88\x00D\xb7\xd2\xc3\xf6\xbf\x194A\x8dj\xaa7?\xdf5\xf0\xf4\xf2z\xf5\xbfx\xfb!yF3\xe6\xbftH\x9a\xf2t\xaf\xe6?\xa0\xbd\xfa~<\x0f\xf7\xbf\x0e\xf8\xcb\x9a A\xd8\xbf\x94+g\xa5t\n\xe8?F\xb1\x0cJ\xa2\n\xee\xbf\xdf\x8eD/z\xb2\xf0\xbfm\xa9\xa1\x12\xd3\xff\xba\xbf\t1\x86\x9dl6\xe8\xbf\x1b\xdd\x11q\x07\xc0\xc0\xbfQB\xa7\xdf8\x82\xfa\xbf#\x9f\xa8\x9a K\n\xc0A\xfc\x90.\x90\x13\x08\xc0\xf0\x8eX\x0b?m\x02\xc0=\x8ac\xde\xa1\\\xf4\xbf6\xb8M\xc1m@\xfa\xbf\x85\xc0N\x00D\xd2\x03\xc0X\xce8\x95\xc5h\xee\xbf\xea:g\xcd\x82\x99\xef\xbf0\x15\xcbPh\x0f\xfb\xbf\xcf\xe4\xac+\x02\xfc\x02@\xd2nM\x19m\xc5\xec\xbf\x03\xb7E\xfd\x98\x9f\xca?\xa5\x1fR\xd3\x1e\xe0\xe0\xbfx\x8dwh\x16\xb0\xd0\xbf\xce\xca\xf5Z \xf2\xe8?\xb80\xe2^\xa15\xe6\xbf5o\xda\xd1\xc3a\xbb?\x16j\x8f\x17\xe5\xab\x00\xc0\x07\x1cmnUn\xf1?\xed\x04\xd8\x93$\x1c\xec?\xbb\xab6mmd\xa5\xbfq\xac$\xde\xc5\x1e\xfb\xbfk@\x14\xe7\x9e\x96\xde\xbf\x04\xb3\xc8\r\xf3V\xc8?\xb0\xd4\xd9\xe2\xf8B\xd1\xbf\xc0\xfc1\xdf\xee\xae\xd1\xbf\xda@=\xd4\xcd\\\xfc\xbf\xbb\xdb\x00^rP\x00\xc0U\xeb\xacL46\xfc\xbf\xd3+\x8b\xf2\xb4\x99\x04\xc0\xa9S=F\xed\xf2\x0b\xc0x`+\xe1\x93\xba\x01\xc0l\x90\x00\xb1\xae\xbb\xf5\xbf\xbeL\x06\xe4sf\xe6\xbfG\xcc\x1a\xe8\xb9\xe3\xfd\xbfZ%\xa6\x0b{K\x03\xc0\xb45\x93m\xfa\r\xed\xbfwXi\x11\xbaH\xe9?E\t-\xda\x03\xe2\xb9?Q\xc4y\xa9\xcf\xb1\xef\xbf\'+\x9byQl\xd4?m\xf3\xc7\x93\xfbp\xf0?\xfd\x1f\xb8#\x18/\xe6\xbf\xc3;9\x13\xed\xfd\xe8\xbf\xb5\xcbQ\xc3\xe7\x02\xf7\xbf\x89V\xc2\x91\xd1(\xfc\xbf\xf0\xc4\xd9\xc4\xf1\xec\xfc\xbfj\x1c\xfa\xe0\x9aZ\xf0\xbf6\xe8r7\x10\x17\xf1\xbf\x13\xff\x9f\xcd^h\xf9\xbf}q\xda\'\xd3z\xf2\xbf\x12_;\xc0W\x95\xe2\xbf2\xd3;\xed*M\xdf?P\xdav\xe5\x87\xa1\xd0?\xd2\'#\xf4\xa8\x8f\xf8\xbf\x9b\x02c~\xd5\x95\x14\xc0\xc7$\x9a\x80\xc0\x11\x12\xc0\xd1p\x1a-)\xa0\xc7\xbfFA\xf6\xe2q\xeb\xf6\xbf-\x10C\x88\xe7]q?8\xef\xe1\xc3K\x96\xf9\xbf\x95c?\xcdE\xba\x96\xbf?\x18\x8a\xc4\xf3\xcd\xc3?Qq\'\xb3\xa5L\xbd\xbf\x04N\xc5\x9fh\x0b\xe1?`\xf7\xec\xb6W\x18\x06\xc0`\xf1\xcc\x07\\\x14\xf2\xbf\xde\x04{\xb6^\x08\xe3\xbf.\'\xe7\xfc\xefX\xf3\xbf!\x16\xc1\xecTN\xfa\xbfE\xfa<"d~\x02\xc0\x95Yv\xb2\x97\xccy?\xd4\xb7\x80\xb9Bj\xfc\xbf\x9d\xb3d\x86\xca&\x01\xc0\xcb}\xd0\x19\xc6q\x15\xc0\x9e\xfa\x15\x00\x1b\x95\x0c\xc0\xc2\xb1\xc5\x1c\n"\xee\xbf9\xb7\x08\x9a\\\xb3\xe1\xbf\xfdMxQ\t\xf1\xe6?\x99\xedM\xa5\xf9\xbd\xf4?\x9dk\x8elB\x0f\xd5?*\xde\x0ez\xd2\x86\xf4\xbf\xb9\x95O\x9a\xf5\xc2\x04\xc0z\xa3\xe1\x93\xd1\x93\x02\xc0P\xf7?i\xe6\x96\xfc\xbf\xd9\xf1\xe9C\xb1\xcd\xca?\x15\x03t\x15\r\xa0\xd9\xbf\x1cvZ\xf3\xdc\x01\xe4\xbf\xd2 \x11!\xac\xc9\xf6\xbf\xf8\xd3\xedb\x9e%\xd8\xbf\xe6\xd6\x985p\xba\xff\xbf\xd3\x7f0\x9c\xd0L\xa7?\xa3\x19\x03\xb73\xd5\x0b\xc0\xc0\x89\xdaY\x11{\xde\xbf"\x88|\xeb\xf3F\xe7?\xb2+\xdc0\x08\xcc\x08\xc0\x8c\x07\xdch\xb5\xd4\x06\xc0Z\x14\x05\x95\x82\xae\xe5\xbf$\xa6\xc1\x8e3 \xda\xbf\x11M[\xb0\x0c\xb9\xff\xbf\xe3@B\xf8D\x9d\xf0\xbf\x1aI\xca*\xbd#\xef\xbf \xc9\xbdj\xc7\xf7\x0f\xc07\'X\xb2\x8am\n\xc0A\xde\xf4\x16\x01\xa0\xfa\xbf\x15W\x818\xf9\xc2\xe5\xbfR\n/\xd99^\xe7\xbfY\x99\x10\x0e,\xa9\x83?D\xe2\xec7\xdeq\xdb\xbf\x06[\x8a\x8aP\xce\xb9\xbf\x163\xc9Z\x98\x8d\xf3\xbf\x13vx\x83\xe2\x7f\x00\xc0Zd8\x98\rZ\xf5\xbf\xe6\x8bm\x8dl\xf1\xd0\xbf4\xc9\xcb+\xcd\x95\xf0\xbfPhy\x01Q\xd3\xcf?{K2\xce\x085\xfc\xbf\xdaw3p\xa5\xe1\xe8\xbfE\x16%%\xd4n\x03\xc0w\xbd\xc4\xa6\x1f\x8e\xca?\x19[\\\xeah\x1c\xdd\xbf\xe6\xccB\x02\xb9}\xd1?\xea&\xc0z\xee\xd0\xed?\x1a\x9d[\x04\'\x15\xc8?\x9fP\xe6&c\xef\xe7\xbfM\xe1\xdc\xb9\xbc\xb7\xf2\xbf\xc1jY\xfc?\xd9\xd5\xbf\xdfdy\x8b9\xb1\xfd\xbf\x99\xd4\x89\x85\x15\x10\xf3\xbf\x17Uu\xf74\xf5\x02@uIuG\xae<\xdf\xbf\xea\xec \xf2<\xab\xf7\xbf/C0+YC\xfe\xbf\xfd\x0f-\xbbHw\xe4\xbf^a\xc4\xdc\xb4\x11\xd1?\t{p\xee6\x9c\xe6?\xce\xc7\x01\xa0\xb7w\xe6\xbf\xf3Se\x8d\xc7s\xf2\xbf\x14\xc99\x95\x95F\xdb\xbfd,\xb9\xea\x08\xa7\xe2\xbf\xb3\xc8\xb8\x03ef\xa2\xbf&\x14\xf4[\xf4\x11\x0e@:\xab}\xe7?\x85\x01@\xa6\x8f\xc7\xf6!\xde\x04@!t"?\x8dI\t@\x9e\xe1\xf9\xfb\x18\xdc\xeb?\x8a\xed\x0c\x06\xdf\xb4\xa8?\xc8\xfc);=}\xf3?\xb6\x16P\xc4\x92@\xfa?I\xb1\x868\xf3\xac\x08@\x0c5\xfb\x13\xaeg\x04@6\x8d\x1c\xc2\xf1d\xcd\xbf\xdc\xe2|\x13\x8d\xc4\x02\xc0D\xa3o\xdbF$\xd0\xbf\xff~\x96\x08:W\xc8\xbf\t\xb2\xb2\xfc\xa4\x86\xd2?\xa91]\xe1\xcfk\xe7\xbf\xb1\xdb\xbb\xd9\xd6\xdb\xf3\xbf\xbf\xdf{\xd0\xe45\x00@|\xe0(0\x82D\x00\xc0R\xb7\xb4\xf1]G\xf5\xbfH\xce\xfc\xb5E\xebc\x84\xfe?\x85p}^*y\xd8\xbf\rr#-V \xb0\xbf\xed\x88\xcf\xee\xd7&\xfe\xbf-\xfa[2+\x83\x00\xc0z:\xba\x03T\x13\xca\xbf\xb1\xe6\x849(j\xf2?\x15z,\\\xe0}\xf0\xbf\x88\xdd\xb1\xc0\x06r\xcb\xbf\x8ds\x95\xa5\xe9\x0b\xd7\xbf\x8d]\x04i\x98\xe2\xed\xbf\x86`\xb3\xa8\xfd\xe8\xec?\xe4\xb8\xe6/\xce\x1a\x03@\xfa\xf9\xad#\xbbn\x84\xbf\xd5\x81=^!U\xf7?>\xdf\xd1\x08^\x1c\xe9\xbf\xf7\xcd\xdf\x83\x93\xcf\xcc\xbf\xf7\xa2f\x86\xc3\x1a\x05@\xc3\xb7,9\xb6Q\xf5\xbf7\xe7d\xb2\x16f\xff?NG\xf3h6^\xf9?i\x04\x82\x93\xde\xed\xce\xbf\x08\x15\x86G\x993\xc7?j\xb1KQ\xc0\xc5\xe1?d\xedI\xb4\xe9\xaa\xeb\xbf\xe2\xe0\xad\xd2\xce\xf9\xf9\xbf,C\xfc%\n\xb8\x00\xc0Y\xac\xf1i2\x15\xc9?~\xa0\xb4jqh\xfb?\x1b\x06w5E\xb7\t\xc06M\xf1\xa6\xf7\xc4\x10\xc0\xfc\x95\xd4A\x90G\x05\xc0\xa4\xf5\\\x18\xf6\x15\x00\xc0a\xcf\x8d\xfe\xed\x11\xe8\xbf+\x17\x93\xba\xf1\xab\xea\xbf\x92H\xc1\xbb\xecJ\xe6?\x96\x81\x92.1\x0b\xe1\xbf"\xcd\xbc\x15\x0b9\xeb\xbf\xd16l\xf0V\xaf\x04\xc0Q\x00%\x17\xc2\xc5\x0c\xc0\xe0chP*1\x04@\xba\x0b\x87\xa4\xe6)\x11@\x1a\xc9\xe1\x9c\x7f)\xe9?\xc8\xb3\x8c\xb3\xec:\xd4\xbf\x0f\xe4\xc6I\x8d\xd6\xfa?b\xca\x92\x93\x8cq\xfc?\x8f\xbb\x85j!\x04\xf4?\xa0~4\xda\xa0Z\xb0\xbf\x19\ru\x9d3D\xef?O\xb1\x9f\xce\xf77\xf4?&\xc9\xe2\x9aX\xc9\xe1\xbf^\x08\xb6\x04cL\xdf\xbf\xad\xa4\xdf\xcaT\xab\xdc?UU\x8e\rs\xdf\xec?\xc2\x96\xbc~K`\xd4\xbf\xa4A\x12\x93\\q\xb8\xbf\xd6m\xc1\x99-\x9c\xff\xbf\x1d\x9d\xff8,\x97\x06\xc0\xf9\x8293Y\x17\x11\xc0Q\xd6\x8d:\xc4\x0c\xf9\xbf\x8f\xe6[t\xd5V\xf8\xbf\xe0\x16\xe7\xf9\x16\xbf\xed?=\xbe\x0c6&\xa0\xe1\xbf\xd1\xd0\xf9i.\xf9\xf7\xbfV3\x9a^\xe3\x06\xc1?&\xfeA\xc4\x92,\xdd\xbf\xd8\xce\xb6\x00k3\x08\xc06\xd3m\x1e\xa2b\x0f\xc0\x8b\x97\x90~\x04\xc5\xfd\xbf\xa0\xcf\xb9\xa4s+\xf2?/\xd8\xbb\xb0Ff\x03@]K\xcf\xf9\xe0y\x0e@\xcf\xff\x162\x81\xc8\xee?O\xbf\x8ePp\x14\xd5?0( \x80No\x9d\xbf0\xc75\x9ev\x7f\xe5?a\xeb\xb7\x18?\xa8\xfd?\xb8\x18\x8f\xb8\xc1\xee\xa8?o.sZ\x94\xb4\x01@^>\xf2\xcd\xd20\x01\xc0Z.\xbck\x08v\x01@])\x82\xdf\x94\xe9\xca?\x19I\xc2\x82\xd0\xd3\xe6\xbf\x1a\xf6\xeb\xb9\xa7\xd8\x04@\xc5\xf4L\tW/\xf8\xbf\xe8\x0b\x98\x07?\x02\t\xc0\xf3U\xa8\xc0\x96\xd6\x00\xc0\xd8\xecX\x05+\x13\xa0\xbf\x85`A\xf2\xe7\xa3\xf7?i"/ir\x1c\xd7?\x80\xd6\x83\xed{0\xc5?\xae\xb3\xa4\xc8\x88\xbc\xed\xbfts\xd5\x95l~\xcd?j\xcb\x84k\xdcE\xed\xbf\xbc\x06\xfe\xb5\x92<\x12\xc0s\xba\x1d\xbd\x81\x13\x0f\xc0\xf6\xea\x99\xfb\xcb\x18\x15\xc0\xfdHN\x89\x96s\x00\xc0\'/\x10#\x8c\xe9\xe1\xbf\x11[\xfc *\xe2\xfe\xbf\xa8I\xc9\xd7\n\xd0\xf3\xbf1^^\xa2\x175\xea?\xa7cv\x1b\xf6y\xe0?\xe8\n!\x9c\x80\x9b\x00@\xdc\x1f\xa1~\xf4d\xd3\xbf\xfc;\xfe,-n\xd2?\x17\xed\xeb\xce/U\xe8?@8\xba\x00\x1fS\xff\xbfS\xed\x95G\x17Y\xcb?{eK{\x00J\xeb\xbf_IY\xf4\x01\x81\xe7?\xd1\x82\xc8\xb8\xc3\xa7\xd9\xbfa\xcde\xaf\xeb\xf6\xe5\xbfS1\xff\xf1\x8al\x04\xc0\xeb\x06\xb0\x11\xc1\x10\xf0\xbf\xed~=\x1b\x9e\xb3\xe8\xbf\x8a\x06c\xbc\xc4\xf4\xff\xbf\xb7\xebn\xa0\xf5\xcd\xed\xbf7\xc9\x18\xff\x91:\xe7?\xc1\xbf\xd3\xa5\x83P\xf3?|\xf6\xd6M\x18\x9d\xf1\xbfw\xe3\xf0\xf5]\xe4\xc9?\x8c8=\x9a\x15G\x06\xc0vB\x98;\xe3:\x07\xc0\x94\xbd\xbed&{\x11\xc0\xccb\x90;\xeb\x16\x14\xc0\x07\x12+j\x02~\x0f\xc0Q\x91;Xn\xc7\xf8\xbf\xe6R\xd6I\xdf6\xe9?\x89\x0f?S\x88\x84\x00@\x9e\xa4D\xec\xdc\xc4\xd7\xbf\xaa\x9a;\x8fYh\xeb\xbf?t\xbc\xa3\xfe\xb2\xda?/\xc8\xb6\xb0\x05\x82\xf2?\xc8\xfa\xc7A3c\xf4?$\x0c\xf5\x97\x1c5\x0c@\xf1\xdb\xd9W?\x06\xc7?\xf2\xe9\xd0{<2\xfb?\\\x01\xb54\xc6\xaf\xf1?\xbe-~\xfej\x18\x02\xc0{\x81\x86\x0e\xf0\xe6\xed\xbf\xcfR\xacy\xe9\x83\xf0\xbf\xec\x12\xdbN\x15\xd8\xfc\xbf^\x9cs\x86I\xc4\xd4\xbff\xa7$\xc7\x08\x14\xd6\xbf}\x0fJ\xe1)S\xe1\xbf#f\x90\x9fe\x13\xdc\xbf\xb1\xaa\x03\x10\xf8B\xf0\xbf\x03\xb9\x12QI5\xe8?M>1\x9b\x19\xd7\xe9\xbf\x13\xb7\xee\xa5\x19\xfc\x01\xc0e\xc1~%s\x12\x04\xc0\xcd\xff\xe9\xf1mK\t\xc0sP\xbf\x0e\xf5\x94\x07\xc0\x14\\\xe69\x9e\x80\xfd\xbfp\xc63\xf6\xe8t\xf6\xbfP;\xc1V\xc4a\xe5\xbf\x1e0v\xec \x81\xd1\xbf9\xbc\x89\x8dK\x8b\xe0?\x89j\x8a\xab\xe6\xc7\xf2\xbfMXE\x99\xfa\xb1\x00@\xd5\xea\xf4\xc7\x85\xbd\xf3\xbf\x84\t.\xfc\xd9\xf1\xbf9N\x04ug(\xec?hV\x089\xc4\xfe\xe9\xbfi\x1d\xb7?U\xbf\xf9?\x15\x82\x1a\x9ci\xc2\x06@L\xae\xfd;\x8f\xbe\xa3?U\xd1*V\xb5\xd1\xf2?\x96\xd8)\x9f\x9dU\xfd?r5>:`\xc7\xf2\xbf\x02\xda\x82\xb3\x98\x1e\xf1\xbf\x8d\xffY"f\xfa\xea?n\x7f\x86Z\xa2u\x05\xc0n\xd2\xf3\xea\x0ey\xf4\xbf;n\xea\xae\x02\xe8\xe3?}wP\xc1=\xae\xfb\xbfCk\x1d\x9c=\n\xda\xbf\xfc`\rC\x87*\xdc\xbfi/\xd0\x02\xde\xad\xda?e\xddA\xad\xean\x07@\xb4#\xbf\xd1\xba\t\xfe?\xe7\xdd\xa9]\xbd\x1d\xb4?\xc4\x06F\xc0t\xfa\xf5?\xf6\xeb\xdf\xf7\xbe\x10\xe1\xbf\xbe\x97\x9c\xad\xb3`\xa9?5j\xc0\x7f3\xd3\xd8\xbf\x04]p\xcd\xbe\xb6\xf0\xbfI\x00\x13\xed\xad\xd4\x99?y\x99\xda\xc1\x1c\xf5\xee\xbf\xa4\x0e\x8c\x93\xe2\xbb\xe7\xbfo\xfd\x85\x1ax\r\xe9?\x02\x9c.>\x8c\xbd\xd5?"\xd6\x1fI\x03\xb1\xda\xbf\xd0\xab\xaa\r\xef6\xe9?\t\xa0A\xcen\xee\xdd\xbf\xdb\xd0\x89\\\xf7\xcc\xbd?q\x11+\xd9\x98\xf2\xea\xbf\xa6\x9a\xb1\xbc\x17\x9c\xe2?\x98\xbf2H\xe9\x0c\xec\xbf\xae\xaa\xf46\xec>\xe9\xbf\xe0L\xa2\x7f\xc1\xac\xff\xbf0\xeb,\x05\xcf1\x00\xc0x\xa7\x0b|\xb5\x97\xff\xbf.\\\xed\x9aP\xee\xe9\xbfK\xb2\xbc}\x89\xf6\xba\xbf\xa4\xf7"\xae\x8c\x16\xf0\xbf\xbcqF!\x16m\xb5?\xa5f\x83ND\xbc\xf7?\x0c[\xab,\xfb\xd9\x01@\x8a)\xc6ahf\xfc?R,R\x87Ad\xf6?[\x86\xb3\xd7tM\xce?\x12D\x00s\xabZ\xd9\xbf\x16\'e\x1br\xfa\xf4?#\x85|\xdf\x8f{\xe8?\x81\xd2\x97gwc\xcd?\x0b\xfbuD\xaeW\xe7\xbf\xad\x98\x83wh\x8a\xfa?\x9e\xe8\x9c\xed8\xfb\xe8\xbf2Db\xe0e\x87\xd8?KrL\xdf+\xe9\xf9?\x9d?\x14\xf0\xb07\xcf\xbfG}AY\x18`\xb2?v\xa1\xedt\x84\x89\xed?N\xc7\x89\x0c@\x8f\xe5\xbf\xca\ty\x9f\xb6_\xd4?\x0c\xb6\xce\xf6\xd2\x0b\xe0?\xc1\x11\xfd\xa5\x07p\xf4\xbf\x8a\x8e\xe6\xbah1\xcb??\x8e]\xce1h\xf3?\x99\x82\xa6\x0c\x11\xab\xf6\xbf\x95s\x80L\xf47\xf5\xbfYe\x1a\xea\xc6\x1b\xdb\xbf\xb2mH\x8f(p\x05\xc0"\xe8@z\xc2\x81\x00\xc0c\x02E_0\x87\xfd?\xe6\x8aF\xc56\xc5\x01@\x9a\xf7\n$\xfd\xb1\xf1?R:\\2\x81\xfe\xd6?\xe6\x13\x95\x8f\x02e\xca?\x10\xf2\xf0}d\x8d\xc4\xbf{\xd9\x89\xb1\xc0Z\xf4?,\xca\xb2\x1b\xa9V\xc7\xbf\x8d\xdb\xd6\xe5{\xbd\xde\xbfYv\xcc0\x97\xc0\xd1?\x89\x93\'\xf4\xb6\xf2\x95?\xbf\x0bQ&\x93\xc1\xec?\xd9z\xbf\x85\rh\xd3?\xba\x19\x82\xc6\xbe\xb2\xdd?\xc0\xf4\x80\xb0\xde\xcd\xb9\xbf\x0f$\x9a\xc34\xc7\xd8?\xbe6_\xc6\xfe\x97\xf2\xbf\x9c\xef\xfe\x9e\x15\xf1p\xbfL\xecWb\xa5\n\xe6\xbfP\xcaK\\O\x96\xc5?\xdd?yW\x9f\xae\xf3?\xe1\xa86\xa7>v\xf8\xbf*V*\xea04\xe3\xbf\nE\xf33\xe6&\x04\xc0\xa2&\x80\x1c\xfav\x11\xc0\x98|\x9a\xf2\'\xde\xec\xbf\x97\xb98m\x13\xe4\xed\xbf\xbc\xd5\x15\xc8\xe6\xca\t\xc0g\x91\x0fWu\xcb\xf3?\xa2\xb3\x0c\xcfA\x11\xb8?\x83\xb4\xcaN6\x89\xa6?WzTh@\xf3\xe3\xbf\xe0-\xbdJ\x8fu\xe8?G\xe8\xae\x1f\x8e\'\xf5?\x9d\x89/-w\x19\xc3\xbf\xa1\xb2@\x18\xfd\xed\xc0\xbf\x80\x90\x1d\xe6\xb5\x96\xc9?\xb0\x05\xac\xd2\xd2\xab\xbf?\x8a\xa1s\xd9~\x17\xd7\xbf\t\xb6\xba"\x06\xe6\xf1?v\x83zE\xf5\x1d\xea\xbf\x91\xe0<\xd6\xe2\x1c\xca\xbfb[\xa0\x17\xba\x13\xd2\xbf9r\xe7\n|\xf0\xf3?\x19\x88\xe2\x89\x83\x05\xdc?\x8b?f\xa6\x04\xed\xd7?\x91\xa5V\x14k\xad\xd6\xbf\x91s(`\\\x88\xe4?h|u\x9el\xcd\xf8?\x89\xc4G\xb8\xcc\x8c\xe6\xbfwC\xbbPZ\xcf\xcf\xbf\xf2r\x99k\x04\\\xa3?\x10\x81\x7f\xdff\xf5\xf1?\x0cm\\\xe5hw\xcf\xbf]%\x85\xfcu\x8c\xe0\xbfI6\xc4\x15\x19n\xcc\xbfc\xbc8\x1b\xa2\xf4\xde?%-\x98c\x1b\xec\xd5?j\xbc?\x9d]\xc1\xe4?q\xc68\xd86\xbc\xe7\xbf1\xc5\xe0\xfa\xf4\x8d\xbf?\xf05\t\xf9Hd\xb9\xbf\xc00\xe8\x05\x86x\xde\xbf\xa9\xf4\xa3\t#J\xf3?8\x01\x1b\x05\xea\x10\xe2?\x03|o\x9a\xb9[\xe0?;\x82\xf7e\x81D\xf0\xbf\xa9P\xa8\x17\xe0T\xc5?<\xa6.\n\t\xfd\xe6?\xc0\xb7\xb7\xcb\\\xda\xe2?h\x07\x11\xf3\x18h\xbc?Z-\xb3[*\xe4\xd9\xbf\xe0\xa8\x12\x9b>(\xb0?\xd3w\xd3Xye\xf0?\xad\xb2\\J\xab!\xaa\xbf8g\xc3@j\x8e\xa6\xbf\xe3p}-yv\xf9\xbf|PT\x0c\xbc&\xba?\x8f\xe9\xc1AK\x05\xdf?\n$+\xec\xf2\x81\xd4?\xa3oU\x1d\x9d\xd8\xcd?D\x8d\xfc/\xb5\xcd\xf4\xbf[@\xe5\x0bk\x0b\xe7\xbf\xf1\x98L):\x01\xb8\xbfA\xcb\xdaU\x16T\xeb\xbf\xa9\xf8\xc3\x8b\xee\xf6\xae\xbf\xca\x91\x87\x11\xf3m\xed\xbf\xaa\xb3\xeb\x82\x8b\x15\xea?X\xbd\xce\x9dDu\xa1\xbf\x97P\x92\xc0\x90\x98\xf1?\x96v\x03\x108\xa0\xd9?:\xd4\x13\xf6[6\xc5\xbf\xa1\xcd\xee\x10\xe0k\xf7\xbf\xc0}\x83E\xf1\x9e\xdf?\xcc\x1e\x0fRl\xbe\xd1\xbfo\x7fD\x1eR\xfa\xc7\xbf\xd8l\x93\xd4\xfaX\xe0\xbf\x0eHt\x91\xb7\xe5\xdf\xbf\xe8\x7f$\xd9\xe5%\xe5\xbf\xf2\x80\x1a\xf1\xb9#\xd3?\x1c3+\x94\xf5\x96\xdb\xbf\xe3\xbb\x82\xd6\xe3\x17\xe8?X(\xb2\xea\xad\xcf\xf7?Y\xa66]\xd2\xac\xe6?\x90\xf0\x08\n`*\xb1?U\x93P\x94\x8e\xc2\x8c?\xe0\xbb_)\xef/\xf5?\x9d\xf6"\x06\x94:\xde?\x83\xd4\xf9(w\xc9\xe2?s\xa3\xd7\x1c\x1d\x9a\xed\xbf;\xb5\xffl\x81\x12\xd6?t\n\xc0!p<\xc6?\xc1\xc3\x83\x80\xf0\xb2\xe4\xbfW\xe61\x9e\x1af\xf0?\xeco\x82\xe1\xe4q\xd0?S\xac\r\xf1\xfaq\xec?\xbc4Wx\xbf\xec\xf6?=\x8cj=/Q\xe4?B\x0eL_\xde;\xf6\xbf\xba\x14\xa3\xbb.\x9f\xe9\xbftv\x98\x8eDm\xcc\xbf\xf6\xb2B\xf6\x05E\xe2?6%}t&\x82\xd1\xbfB\x8c\xda\xa9^\xf8\xcf\xbf-\xeb\x0cm\x88M\xd6\xbf\xab\xc8\x89\xdf%\xe9\xc2?{C\\u\x88\x00\xe7?\xea\xd0\xe0|\x1bf\xeb?\xc7G\xc6\xb2\x1da\xf5?\xff\xdd\xcbGo\x9c\xee?\xbf\xd0v\xdb\xbb\xd4\xe9?e\xf8\x88\xa9\xd3Y\xea?\xbb\x83V)\xa6\xdd\xec?\x98\x13\xc6\xbe\xf4y\xcf?.5\xd0\xb4\xff\xbb\xde\xbf.\x07\x81`\xbb\xef\xe0\xbfd\xdd?`rU\xd8\xbf\xd6SQ\xd59D\xe1\xbf\x86?5\xaaG\x9e\xdf?S%\x88\x9d\xe8\xe2\xd1\xbf\xf5&/\xea1\xda\xe6\xbf\xcc\xe9\xc4%^;\xe9\xbf\\\x8a\xef"\x9b(\xe0\xbf\xb6\x8f\xfc\x9f-\x8a\xe4?\x86q\xc34\xa8\x16\xa2?\xbb)a\xc1+o\xf1?\xac\xb8K\xff\xc1\x03\xf7?\x9cO.\x94N\xec\xed?G\xa6HI -\xfa\xbf|V\xdd\x14#$\xeb?\x7f\xa2\x8e\xdd\xc9\xb3\xfa?\xdc\xe4\x95\xd4\xb1?\x9e4\x8c\xb5\xfd\xca\xe0\xbf\x9d\x92t{j,\xbc\xbf\x84(\xa14/\xb0\xab?\x87\xff\x08\xe2\x9c\xce\xee?\xe2\xda\x00\x94g\xe7\xc7?3\xe7O\xebZ\xb3\xe7?\x02\xf1\x95\xb2\x1e\xe1\xc6?\xb5\xe9\xb1\xb7`"\xea?\x07\xdc\x10\x8aI\x1d\xea?\xd2\xf5\xbf\xc0\xb2\xe5\xde?k)h\x1f2w\xf5?\x93\xba\xc8x[\xc2\x10@\xa4%=\xa4\xa5<\xf6?\x1e\xef\x9cTLn\xfa?\xde\x06l\x046N\x06@\xc1 \r\x9a9\x96\xc3?\xcf\x14*\\E\xe3\xf8?X\xeb\x1f\xb0\x8c|\xf2?\xf2=\x1d\xcd\xac\x00\xfb? {,C{U\xf3?\xcd\xcbD\xe6OD\xe7?o\x0c\x11\xb8\rC\xc0?TT{\x16\xff\xe4\xb7\xbfi.\x98\xfa\xc8I\xe6?R\\\xf9+\xfb\x16\xdf?a\xeb\t0\xfb\xf7\xaa?\xfb\xaf\xee\xae\xb8U\xbf?\x94\x90\xdb\x05[\x97\xce?T\xd5\'\x1cD\x11\xb2\xbf\xdaj\xf3V\x9at\xf0?=Q\xf14\xd5\xba\xd5\xbf\xc0\xa9\xf3\x9c\x85\x1c\xc9\xbf\x02\x1b\xd4d\xae\xaf\xc5?=\xf2\xfa*\x8d\xee\xec?\x02!\t\xfa{|\xfa?\xc0\xe6"|2&\xd5\xbf\x04?z\xd85Z\xf4?+\xaf\xab\xc4\xb5\x12\xf7?\x8a\xe7B\xaf\xdd/\xe6?\x04=Q\x93\xbdY\xcb?{\xd8\xc7dv\xf9\x06@}\xbe\xdc\x05x{\xed\xbfxXY%b\xbc\xf1?\xbbb\r\xed]\xb8\xdc?n\xeb,,}\xc2\xf6?,T\xc6\xce\x11\x89\xe1?7\x05\x03Vk>\xf3?4a\x11:!\xca\xf8?\xea\xb1\xcc.\xa0W\xf5?\xe6\x02\xd5P\x85\xaf\xf8?\xa8\xcd\xacV\x056\xc1\xbfn"\x1cA\xf8\x19\xf0?\x0e\x19\xfb\xfav\xca\xe1?\xe3a\x91\x1f\x99J\xe9\xbf2\x8ea\x06\x8es\xd5\xbf(\x96\xd8\xa17\xc4\x85?\xc6M\x18\xc3\xf4\x16\xba\xbf\x0fJ/\xbbb\x03\xb1\xbf\xda\xb97\xdeov\xe9?\xc7\x9c\xb1\xff\x96\x8e\xa7\xbf\xad\xfa\xf8\xf7M\x0b\xf0?\xf3\x86\x00\xea\xcc]\xf8\xbf\xe7\x04g%J4\xec?S7\x9e~\xab=\xfa?\x81\xd6\x7f\xa4\xf3E\xdc?\xb1^\xbd\xd0{\x84\xb6?\x0e+\x19H\xf5v\xfb\xbf\xd5<\xa1*\xf8\xde\xf9\xbf\x1b~#\xba&\x06\xea\xbf\xa0\xbb\xc7\xb9\xebl\xe9?J\xef\x88\x00\xdc\xa6\xe8?Z\xb7|\x0f\x01\xf1\xe7?\'\'s\xc3\xf0Q\xff?\x04\xe2\xa6\xc5Q\xd1\xf3?\xdf\xc46\xd8\xc0$\xe9?\n\x93\x0f\xd4[\xa4\xec?\xd5\xde%\xa7\x94@\xec\xbf:\x02*\xd3Df\xc2?\xf4\x13\x16\x1eg\xa7\xf4\xbft\x8c\xb1\x99K\x8d\xd0?\x0fG\x1fL\xc6\x1a\xcb?\x86\xedK\xb9C\xf7\x9f?\x12\xe8\x1a\x9b\xb2_\xd4?\xf4\xc7vGE\xbc\xe8?\x1ck\xfd\x1a\x89\xc5\xa4?$:\x0e\x972{\xeb?\xb8\xbcrD\xbe\\\x01@M\xe3(d\x86\xb1\x02@\t\xf2\xaf\x17\rT\xc7?5*\x0b0.\xdd\xb6?\x04T\xee\xff\xbdW\xe7?\xa9\x18]Z\xe1\x1f\xdb\xbf\x04H$\x14B"\xe9\xbf\x0c\x8bp\xf6\xa0\x86\x9d?\xac#\xbf(\x83\x8d\xb5\xbf\xf4O\x8c\x17\'\x96\xc6\xbf\xdd\x89\x9c*\xf3\xcc\xda\xbf\xa6bc\x02\x7f\x82\xb2?\x8a=\xf0\xc15y\xb1?\x02\x14`\xc5\xdd\xe9\xbf\xbf\xd9^C*\x06\x19\xd7\xbf4*\xf2T\x83;\xb0??\xbf\xc4\x95\xec-\xe9\xbf\xe5\xdd\xf6\x87$3\x01@\x02\x00?*/H\xe6\xbf\xc6\xd3X)\xdd\x93\xf3\xbf\xb6d\xa4\xb4\xad.\xca?WG\xd35q[\xf8?\x1d1p\xc3\xec%\xdf?\xe2\x01z\x11\xeeI\xeb?\xde\r\xb0\xf1R\xdc\xdc?j\x10\xb6HhO\xf1\xbf<\xd5|\xa6ER\xd4?\x93\x87\xc2\xa7@\xc7\xa2?94\xdeL\x98\xa0\xf5?c\x90\xae\xc4\t\x82\xec?\xc0\x06\x98!\x7f\xdb\xe3\xbf\xfekw\xfd\xa8[\xfc?\x91\xe9\xc0\xfaSa\xd6?\xf2\xd4/\x9f\x97\xa3\xf4\xbf\x94\xa4\xba\xc3\r\xe5\xe1?,\x8cV\xc3\x19\x9c\xf3\xbf7\xf5\x18\x88.\x14\xe2\xbf\xa2\xbbO\xc1Gl\xc2?\xf8\xbc\xdb\x92\xa9\xfe\xd5\xbf^u\x86=\xa8\xb2\xf2?+\x9f\xef\xba\xcd@\xf4\xbfr!\xddK\xa5<\xf7\xbf\xf9\xb4a\x15p\xd5\xe3\xbf\x06\\;\xab\xb5[\xcc?\xffdi\x84\x04\xf6\xb9?\x0b\xa1m\xf1\xe5\xd2\xe7?\xc7\tsW\xa0~\xf1?\xe6)o\xeb=d\xf8\xbf\xff&\xcf\xb4\x9f\x85\xf9\xbf1\xf0\xca\xc2\xc7\xe6\xda\xbf\x84\x08h{YN\xb8?v\x9ac\xe8\x16h\xe9\xbf\xa1"a\x83\x83K\xd7\xbf\x0eV\xf7i\x80\x95\xf1?\xf3.\x85\xf9\x02\xe0\xf5?\xdf#!\xce\xe4\x0f\xf6?\xe7vCv\xdaf\xee\xbfR\xab\xfa]\xafk\xeb\xbfWP\xa3kT0\xbf?\xf91S\xc8\xbe\xf1\xf1\xbf\xd6\x1a\x8a\xd0yM\xc6\xbf\x083\xe4n\xeek\xd5\xbf\x11v[t\n\xac\xd1\xbf\xcb\xfe\x05\xdab<\xde?\xf4\x88k\x9c\xd1F\xd7?\x088\xae\xa5\xe5>\xe9?\x90\xb9\xdf\xe7\xfc\xa2\xf8\xbf\x02y\x03\x8d\x03\xfb\xed\xbf\xc0b\xb8\x9e\xd2)\xf1?\x98\xe2\x9d\xc2x\x88\xd0\xbf\x97m\xdb\xb1\x02S\xd4?=C\x7f\xa9\xca\xf6\xeb\xbf\x9b\xdf\xdf\xd7\xdaq\xaf\xbfbDA\xed_\xde\xe4?\xaa\xea\x15\x8bU3\xd9\xbf\x8c\xe5\x96\x87\xab;\xf6\xbf\xb7\xf5\xa1\xe0\x81\xac\xe2\xbfhq\xdc}\xac\x8d\xde\xbfI\xb04`C\xc4\xd4?\xd5(jR\xbb\x7f\xdb?\xa8Cd\x8a\x88\x95\xf4??\x7f\xac,\xc3\x9e\xe9\xbf;\xa4\x10\xb4\xa5\x96\xdf\xbf\xaa\x81\x1f \xb4+\xdd?\xa16e\xe9\xf3!\xf9?Dw\n\xc5.7\xfe\xbf\xb9\x1e\xf6\xf4W)\xc5\xbf\xadV\'x\x92\xda\xfe\xbf4\xb8\x11\xa5\xf1\xcd\xe8?R\xb7C9\x11\t\xc9\xbf\xbe\xca\xe7)V\xfb\xee\xbfF\xba\xed^\x14\xc4\xdb\xbf=\x85g\xe3\x9d\xc2\xd5\xbf\x90\x80\x1dz\x9e\t\xf5\xbfQ\xd4?\xac;=\xe9\xbf\xe1\xf8S\xdc=\xc6\xfd\xbfF\xcc\xc6)Q[\xf9\xbf\xe9\xe4[%j?\xe5\xbf\xa5N\x9c\xd4\xbf3\xd1\xa9\xa8\x86\xa3\xf0?}\x0c\xbb\xef\x9b\xe0\xd7?\xfcu\x81\xbd\xd5\xf9\xdd?x\xbej\x0c\xba\x88\xf6?\xa1\x93\x07\x9d\xc5\xbd\xd5?D\xf9}\xf5\t\x10\xf7?ht\xc0\xb42\xe0\xec?\xad\x0c\xb3\x0f\xc0U\xf1\xbf\x0c\xc4\x83N\x07o\xf4?R\xdf5\x02B&\xd2\xbfQ\x95+f\x84\x14\xde?-md,Bb\xe4\xbf\xb5\xe2\xecS9\xdf\xd0\xbf\xb3S\xea{:\xd2\xaa\xbf\x8a\xd5\xc8\x87Ln\xa2?\xf9l4\xeaF\xc1\xd8\xbf.\xca\xb9]I\x8d\xdc?\xc9\xccn\xea\xe3\x7f\xa7?/\xb2\xfdh\xf0<\xcd?\xdfQB\xb3Yd\xe1\xbfs]\xffs\xbd\x0b\xb1?G\xbb\xb0\xac\x83\xd3\xd0?\xc67\x7f\xdd~u\xfa\xbf\xa1c\x9c\xfb\x867\x00\xc0\xcd\\\x14<<\xd7\xed\xbf\x10\xc0\xddg\xcd\x84\xd3?\xa4{\xba5\x93>\xf2?\x86:\xe8Q\xab\xbc\xac?\xe1\xbblI\x016\xed\xbfn\xc8\x1ay)\xe2\xf1?\x9c\x12o\xdc\xaa\x88\xa7\xbf\xf8\xcc\xb6[~\xc0\xed?C\x0f\x1c\x90l\x1fd?\xb5My\x1d\xb4\x19\xf2?\xd9\x9e\x1af\xbe\xb4\xe1?/\xe3\xa2\xc3^\x17\x02\xc0\x03R\x134\xf1\xc7\xe6\xbf9\xf6\xdf\x9fjQ\xee\xbf,\xd7\xda\xfb7\xa7\xd1?W\x96\xeeH\'\xf9\xb1\xbfy\x06\x1dlN\x1f\xfd\xbf\xc4&\xd3:-\xe3\xd7?\xc4Wf\xb7\x1a\xd2\xf1?\x1c\xc6!V\x9dd\xe1?d\xf4\x8d\x00G\xc1\xcb\xbf=\xd4\x8b\xbf\x87E\xfc?\xc5\x08\x8d\xc6\xb8\x88\xd5?\x07\x8c\x88\xf26\x1e\xd4\xbfK7\xb6\x8d_\xdc\xf1?\x80\xb2\xed\x83\xcc\x01\xec\xbfl\x1b^F\xf9\x07\xb8?\x10\xd0h\x8b\xb5\xfb\xe6\xbfU"@\x7f9\x80\xe5?\x9dUh\xd8\xe8h\xc9?\x1b\\)W\xe5\xa5\xf2\xbfsN\xd8*\x03$\xf0?\x1d\xb0\x18#\x10\xfb\xc1\xbf 6\x0e{1\xa3\xff?W\xe2|DK\xf4\xc5\xbf/\xec\n\x953\xbb\xc7?\x86\xbd\x8d\xb1\x95\xcf\xd7\xbf\xc2\xf5$S\x08\xf0\xe8?\xd3\xa6\xcc\xde\xeef\xc1\xbf9[\xa8\x91\xeb\xa6\xee\xbf\xc2tC\x95\xa2W\x00\xc0\xf8\x05X\xa5\xfb7\xe4\xbf\xf6X\xd3@\x0c\xc7\xc1?*\x1b#j\x93\xb8\xdb?\xb5\xa1\xb2\xfbg\xa4\xe4?\xd1\xd6\x05\xe1\xa2\t\xeb?\xb8x\xf1Y\x0c\xe7\xc8\xbf\x8cvT\x97:x\xd7\xbf\x8f\xd2sB\x83\x8c\xff?\x8e\x87\x84u\x80\x1c\xec\xbf).\xa1rM\xc7\xc7\xbf\t\xcax\xd0h(\xf9\xbf\xc7\xae\x8eG\x16\x0e\xec\xbfB\x13\x1b\x9b\x18S\xd3\xbf\x85\xc2\xc3\x1bF\xda\xec\xbf\'\x1c?\x86\x8b\x92\xcb\xbfB\x04\xb5\xbe\x15\xb9\xe9?\xc3G\xe7\xba\xe5\x11\xe4\xbf\x0b\xdb\x9c\xd6\x05\x8e\xd1\xbf)\xcc\xe9\xab\xd5?\xc9?5\x85D\x8f\xae\x12\xe7?8b\xc9\x1b$\xdd\xe7\xbf2\xa2\x11^\x84\xe5\xd8\xbf\xa0^n+\xa8\r\xc0?S\x12\xe4\xd7\xd6X\xd2?\xdeE\xa5\xbd\x8b*\xee\xbfr\xe5\xf3\xe2\x16\x11\xcc?\xea\xbd\xd5\xe3g3\xf1?\x0e\x1cj\xf8F3\xbc\xbfJp\xfc\xba\xb1|\xda\xbf\x9f\xb1\x13\x0c\xd1\x8b\xeb?\xdbXb\xc1\x87\xfc\xdf\xbf\xf6\xcf\xc5\x90Z\xb8\xf0\xbf\x81\xfc%\x92\xcd(\xd8?\xc9\xd0\xbdb\x1d\xe4\xaa?\x03\x9c7\xfaE\xb6\xe4\xbf\x92<\x84M\x01\x8e\xbb\xbf\xc0\xb4\xcf\x9a\xbeH\xe5\xbf\xa4\x05\xb1\x01X\xfc\xd9\xbf\xae\xd2\xe5A\xae\xdd\xed?\xf4\x01tH\x11R\xf1?\x1a\xfe\x94=)%\xed\xbf\x95\x81\n\x83\xcb\xe1\x01@\xb2\xc2s\xd4E\x04\xf5?Zh\xe6\xdd\xb3@\xf6\xbf\x8b\xc5R}\x12\'\xf0\xbf\x86(\x02m\x91\xfd\xf5\xbfh\x1b\xf3P\x04\x8c\xfb\xbf[\x9dm\xeaT\xca\xc5?1\x00A-|\xc1\xcb?\xfaA_n\xd2D\xee?\xee7 s=r\xc4\xbf\xdfqk\xeaI1\xe2\xbf\xf3i\x93\xc6)S\xe2\xbf\xb8E\xf9\xe6Y\xf6\xe4?[f\xe3.\x1fp\xc4?+z\x9d#+\xef\xaf\xbf\xf6\r?\xc5-h\xa5?\xec\xc3i:\x02i\xea\xbf\xf0\xdc\xe3\xe4N\xdd\xe0?~I]se\xe8\xda?\x8cgV"\xf7r\xc5?T]\xd3\xb1s\xb3\xe0\xbf\xa5\xab\xda\xa0\xcd \xeb?\x9f\xd9\xac\xbb\xcfQ\xe7\xbfkM\xbe\x8bA\x06\xe7\xbf\x04\xab\x9c\x8c\x13\xb5\xec?\xee\xde\xa2M\xb0\xaa\xe0\xbfwj\x8d\xea>\x01\xd5\xbf\xfd\xe4\xe8e\x13\xcd\x97\xbf~\xafQ\\\xebi\xcb\xbf[ZD7\xcd$\xe2\xbf\x02\xfbk>/XW?/\xf3B,q\x94\xf8\xbfR\xaaC|qT\xd8\xbf3eR\x16u?\xd1\xbf^S\xd2\x94c\xa6\xd5\xbf\x89\xaa\xf4\xaf0;\xe6?(1\x8e\xeb\xc73\xec\xbf\x0f\x90\xa3f\x91\xd1\xdd?&\x1e\'\xab\x93\xe7\xf1\xbf\'$\x86j\x9eD\xfa?\x04<\x10\x8b\x1b<\xe2?\xed\x03C\xe3\xd0\x11\xf5?\\\xa0v\x85i\xba\xd8?\x0eD9\xf5\x98\x1f\xd4?E\x135l\x87\xc8\xc3?\xba\xaf\xe0\x18\xcc7\xc7?J\xdb\xa4\xac0\x1e\xe4\xbf\x83\x8a\xbd\x11g\xc7\xfb?\x13aOK x\xe9?\xc3\'\xfb\x0f\xa1\xec\xe6\xbf\x90\x8b}\xb9\x86\x9d\xb5\xbfW%\xf6\xaa\xf6\x9d\xd2\xbf\xa5S\xf8\xa3u\xdf\xdb\xbf\xb1\x83\xbb\xe9\xd49\xf8\xbf3\x17\xd5\x16\xb5B\xe1\xbfo\x9f2M\x1d\x0c\xeb\xbf\x1d\xa6\xea\xfc\xecy\xe6?/\x9f\x88\x9f\x107\xd1?\x9f\x9bp\xc0\xf8\xb7\xe5\xbf5B\xff\xe0\x0cd\x03\xc0\xfc\xf9a\xf4Ut\xd2\xbf\xe3v\xfalH\x18\xf1\xbf\xbf;3~\xf7\xb4\xb2\xbfsJ\xc5\x1fV\xda\xcb?\x8a\x9ew\xf3\xff7\x06@\xbd\xed\xa9\xce\xf3\x9c\xd6\xbf\xca:\x90B&\xbf\xfb\xbf\x88\x08AAL_\xf1\xbfJ\xf8\x14^di\xf7\xbf\xfdYz\x1e\xa6\xfd\xfb?A^\x81\xe9\x1b9\xce\xbf\x86\xcb\x0fE2L~?\x85\x84IO0&\xfa?\xf8\xdd\xb7\x9c{\x7f\xd7?\xc2\xb2D\x86\xa1\xaf\xe1?uB\x0fDA\x7f\xe7\xbf\xb1%\x18)\x91\x06\xd2?e\xf9\xbd8\xcd7\xe5?\xe6\x0c\x94\xbf\x04\xad\xf9?0\xc1\xa8\x07L\xd7\xf1\xbf\x1b\x81a\xa3\x7f*\xe6?\x8d\x90\xc2\x10\x00\xf6\xe0\xbfP\x92Q\xb4\xd9\x16\xba?\x95\xc6P\xe7\x12b\xbb?\x11O\xfbw\x86\xa7\xfb?\xfe\xd1\x1d\x9e4\xf7\xf0?f\xdc\x90_\x87t\xe6?\xfa|\xe4\x83)\xde\x98\xbfc\xce\xa4\x96\xba\x04\xf4?\xa4\xb5\x896\x97\xd3\xfa\xbfc\xe7\xe4e\xe5\xc5\x86\xbf\xee\x07(\x13\x191\xe0\xbf\xa3;@~:.\xe7?luY2b\x01\xe4?c\xc78\x9cnn\xf1\xbf\xdb\x98oA\\f\x03\xc0v\xafB\xc8\xfd\xa2\xe2\xbf\xfb\x05\xcb\xf5\x95\xeb\xe6?2V`r\xa4<\xce?t\xa6Y_yu\xe5?\xb7@\xc3u2\xab\xdf?\xb1/\x01\x16\xc5\xe6\xe5?RL\xdb\xe4\xa6\xe8\xee\xbf\x95\xaa\x86$\x16D\xd7?\xf9\xbd\xf1K\xed\x85\xac?\xa2\xdb\xcd\xc5a\xdf\xf2?\xfe\x0b\xbe\x89\xfb\xe6\xf0?p\x94\x8c\xcf@:\xf2?7R\xc84Y\xa1\xeb?,\xff\'\xb1v\xdc\xdf?\xf3\xa8\xc1\\\xcc\xdd\xe1?\xb6I\xf2V\x03\xb8\x00\xc06\x9f\xb2J\x16\xa9\xdc\xbf\xa1\xe8W$f9\xae\xbf)\x9e\x86\x8a\xbf\xd5\xeb?\xe0\x85\xef\xfd\x93T\xfc?W1\xfd\xee\xb2x\xe9?\xf0"E\xe4\xa5\xb8\x03@0\x05\xd2[\xfe\x96\xcf\xbf5\x08-\x08v\xc7\xa9?\x1e\x7fg\xed\x9d\xcd\xb8\xbf+ke\xb6\x0e\xf4\xf9\xbf\xe8\x1bs\x8d{\xca\xcc?\xe8G\x81\xfa{\xed\xd2?\x0b\xcd3\xdf\x8e\xf7\xee?\x19\x06\xe1PR\'\xd7?\x0c-\xdc\xcd(~\xf9?\xc0\x99\x07\xe1-\xca\xc5?b\xf7\x80E|N\xd4?\xdd\xc3t?<\x98\xb2?\xc1m\xb9\x0e\xce\xf4\xf6?^\x11B\xef\x10\xdd\xba\xbfL\x9f\xf9\x17#\x03\xd5\xbf\x82\xdbxnF\xf1\xdb\xbf\x02~e\xf6Q\x0c\xf1?\x7f\xca=ht\\\xf4?k$bFl\xae\xf2?d\x874\x14_\x1c\xea?9\xa4\xa7\x19`n\xd0?\xc7\x97V{^\x03\xef?\xdf\xd0\xc7\xc2\\N\xee?\x91\xe7\xd8\x1dh|\xed?`"\x86\xde\xb4\x97\xfc?:\xdd\x94hD%\x06@-\xcf\xdc\xa2<\x84\x00@\x1f89\x9c4\xa4\x05@t\xba\\&\xbf\xec\x02@{\xad\x99xq\xc9\xf0?J\xcb\xc6AF\xb3\xfa?\xa2\xcaL\xf9=\x88\xd0?\x1dK\xec-\xae\x81\xe0?\xca\xfe\xdf\x12\x8cH\xda\xbf\xb4\x1c\x90\xfeu\xfe\xe0?v\x8br\xd2\xda\xc7\xe4?~(\xd4\xe7|T\x94?P\x17XeB\xd0\x94?\xe9\xea\x90*\x01\x90\xe0\xbfn\x03g%\xffZ\xe7\xbf\x86\x01z1\xd3\xe8\xb1?Z\xc7\x15\xd1i$\xe5?y\xaf\xb5\'\x1dE\xec\xbf\xd1\xa8\xe5\x8dS`\xf4?,\xd6\xfb\x9d\xea-\xe6\xbfX\x1f\n&G\xd5\xf8?_\x9d\xc9\x1a\x9d\x83\xfd?\x0bz\x07a\xcc\xc0\xeb?\xd4i\xf5\x0cF\x10\xfd?\x131=\xdc\x0e\xcc\xdf?N\xf0=\x1a\x04\x11\xd5?\xe9\x97t\x03\xa6\x0e\xf6?\x92\xde\xf5,\xd6\xfe\x04@eW\xba\x90C\x86\xf5?\x16\x87\xd9\x87_\xfe\x03@\x99R\xe9\xfc\xc9\xad\x03@\x9f\xc0!\n\xcdt\x03@\xfd\x92\x0b\n6\xec\xf5?\xe5z"\xff\xe5\x7f\xef?M\xc3\xd3\xe6\xfb\xd6\xe9?\xcc\x96.\xcd\xbe$\xdb?\xe3z\x8dh\x04\xd1\xca\xbf\xbf\xed\x02P\t\x8b\xec\xbf\xc6\x84\xf6\xef6\x01\xd8?\x1a-\xeaG6\x18\xed\xbf(\xa5!l\x93s\xdb\xbf\x9b\x13G\x12\xe3\xdb\xf4\xbf\xcd\x03r\x0b\x03j\xf3\xbf\xe6\xb3\xdc\xc5\xc0>\xe3\xbf+\xabw\xc2z\xe3\xce\xbf\xef<\xf2j\x07>\xed\xbfB\x9b\x8a\x16\x8bX\xad?\x18z\x96\x96#P\xf2?v\xab\xba\xd94\\\xb9?\x97\x16GT\xd6X\xfd?\x95\xf9\xd6A\xeb\x9e\xff?\x15B\xb8\x02\xf9[\x05@C\x18m\x8b\x15!\xed?k&\x84MHP\x04@\xb5\t\xb3\x8cdE\xf4?\x8f4\xdb\x8c\xaf\xb1\xf1?\xd8\x82\xa9\xe73\x1f\xe6?\xb9\xc1tl\x02\x13\x9e\xbfU*F\xd2d3\xe1?\xdf\x1bYr\x86t\xdb?\xfd5$S\xf8\xfb\xf8?\xf1\x94\xc5A\x95\x98\xf9?\xfc\xbd\xc6\x07\x82\x94\xe1?)\xbd\x17\xd1;:\xda?\xca\x07R \xd7\x1a\xcb?\xe7\xdf\xde\xc7~\x94\xf1\xbfu\xc5\xbd\xb6\xd7A\xc6\xbf\x9d\xde\xde\xa1S\x1c\xee\xbf\x84\x9b\xa6\x895\xc6\xec\xbf\xecp\\\xcb\xa3\x16\xf2?VE\x0bY\xd9\xf4\xc9?\xd8f\x95\xf3^\x06\xd9\xbfj\x94\xfb\\\xee\x1f\xe8?^n&R\xb1`\xf2?\xcc\x03\xd7\xcd1E\xe0?\x07\x0b\x85\xa8 q\xd5?\rf\xad9\xd3\x9d\xf0?\xd9/\xd4\xf6?\xa9\xe8?>4\xb9\xfa\xf1,\xf1?\xc4"]\xfeT\xcc\xda?\x1a2\xdd\xe64D\xf8?qr\x86V\x8b\xb1\xf0?H\xaaVE\x1a%\xd3?&Z\xa5\xd7_&\xe0?a\x91\xb4As\xfe\xe9?\x91\xa9\xab\xf0\x9d\xf4\xf1?|\xbf\xfd\xc4R\x82\xba\xbf\t\xfc\xcb&\xaf"\xc7\xbf\xda\xaa\x17>\x84:\xf4?\x8crg\xf3 \x17\xd9?\xef\xce\x08\xa8\xdf\xf2\xf5?\xac\xde\xfd\x93hr\xfe?V\\\xea\x848\xbc\xee??\xd7\x954\xa3^\xd1\xbf\xb0\xc7\xf8\x06s\\\xd2?\xadf\xf0\x81\x81\xb2\xf0?M\xbd9\xaf|\xa9\xc1?W\xb4\x89\xe0ZK\xc5?UL\xcb\x06\xc1\xed\xea?Z\xc6\xd9\x80\xb88\xdc\xbf\r\xa1\xbd4\xe9m\xda\xbf\xab\xe2lL\xa8{\xdc\xbf\xa0v\xa3\xe6Tu\xce\xbf\xd03f\x1d\xb3\xb3\xea?\x93\xc2\xcd\xae<\x8f\xea?\x08N\x97\xa1\xb8)\xc0\xbf\x99\x9a\x9f\x97\xab\xba\xd3?&Nl#\x82\x1e\xd5?\x1c\x02\xf9XL|\xa4?S\x99b q{\xf0?\xbeK\xec\xa4\xf0q\xdb?\x0fe\xed\xc4\xc3\x17\xe7?\xfa\x97\xb8(\xcc\x81\xf0?\xe1\xf3\xb7\xf6H\xa7\xf2\xbf\x84\x18T\xa3\x86\x08\xd1\xbf\xaf4\xa6DQ\xe2\xde?\xb5\xec\x9f\xbc\xfb4\xe0?\xe2\xa2\xcdJ,\xa5\xee?b\xd2\xda\x03\x9d\x1c\xe2\xbf\xa6\x8c\x1c9\x8cC\xe2?\xe6vzZ\x1f\x83\xf1\xbf\x16\xce\xb8\x85\xf3\xde\xf0\xbf\xe7\x05tJ\xca\x04\xbc\xbf\xcc;\xdc\xec\xb2d\xaf?\x1b\x88Rc|2\xf3?\x97\xb2w\xdfl\x10\xdb?e\\\xfeN\xe0M\xde\xbf\t\xe7\x98\xf2\xd6\xe1\xde?\\\xef\xb2M\xc2/\xc8\xbf\x90\x16M\xb8\xbb\xc2\xca?@\x11l\x8a\x1f\xff\xc6\xbf$\x03\xad\x1dF\x96\xdc\xbf\x8d\x14\xc0\x89\x99b\xf2?)\xda\x9d\xb3\t\xdb\xd9?\xcd#\x1e\xd2k\xc4\xd2\xbf\x0e?h\xab\xd5\xd6\xe2\xbfj\x95"\x98\x01D\xca?\x83\x91X\xf8\x8a"\xcb\xbf\'\x95\xff\x8da5\xe5\xbf\x9f\x8a\xb0=\xce\x87\xf7\xbf\xf6Y\xa3\xe9\x9fe\xe8\xbf\xa0}\xad*\x8f{\xb8\xbf<\xec\x19\x92\xc2\xb5\xee?i\'\xb9p\xdd\xbc\xdd? T\xfdv\xd4\xff\xdd?q\x14C\xbe-\x88\xf2?\xf0T\xcc\x8c`\x95\xf5?%L\xf9xY\xfd\xd5?\xc5\x1am/\xb6R\xed\xbf\x9c>\xd2\xd1u\xf4\xd5?S&\x07\xbfK\'\xdd\xbf*w\x83\xef\x90\xd8\xcd?W\x8co_\x7f\r\xf4?\xb0v\xf8\xf9\x82h\xf1\xbf\r\x15|=\xfcL\xbb?\xe9Dd\xdd\x7f\x93\xe9?\xc0\xf7\xe80\xdf(\xe6?o\xd3\xaf\xf2\x1f\x9e\xe5?z3a\xb6\x0f\x90\xc8\xbf\x93\'\x98\xe6(\x16\xd4\xbfmD\x9dX\xf1\xf4\xd7?n\x9a\xef\xe0^\xc6\xd7\xbf\x8c\x1aE#\xdb8\xb1\xbf\xf4\'\x87\xd1\x1eM\xd9\xbfCFD\xc7\xee"\xc1?Y\x92\xe5\xc6i\x18\xf3?\xa6\xc6\x9b6\xd5\x1b\xd8\xbf\x95\xddP\xa0\xb8\xcb\xf5?-/d0N\x92\xda\xbf)SZFh\x90\xd2\xbf\x9ex\xb7\x85)\xf3\xf1?\x98\xd0\x12\xab\xb0S\xd4?\xf2lt\x15\xc7sl\xbfleX\xf3\xcb\xae\xb3\xbf\x1aO\xee\xe4\x1a4\xd7?H\xad\xd2y\xe9\x85\xea?i\xbb9\x8cq,\xf5\xbf\xba\xbc\x83[\xca\'\xf1\xbf\xc58\xaf7c\xa2\xc6\xbfr\xa58\xe0\xcb%\xf1\xbf\xbb\xe8\x07\xf83t\xdc?\xc6m\xc3#!Z\xe6\xbf\xd8\x11\n\x97:]\xd5\xbf\xb2\xc5u\x86\xeb\x8a\x02@a\xcf\x81T\xfe\xe7\xe9?1\xddZ\xda\xf5\\\xed?ff\x19\xfa\x81i\xe1\xbf\x0b\x163\xdaK\x8d\xe3\xbfr\x9f\x12\x81\x01\x84\xd8?\xe53\xa0\x97Uw\xd6\xbfn\xe7YAFO\xbe?\x13\x8cj\xc0|\xc6\xdc?y\xd4\xbc~\xed\x10\xee?8\x87Mj\xb0\xda\xe8\xbf9\xad\xe2\xb4L\x8b\xf3\xbf\x05{\xd8\x97\x16l\xbc?\xe5\xea\xba\x8ah\x89\xe3\xbf4n\xc2\x06\x94\xa0\xf4?\x0f\xa0/\xd5\xe0\xa9\xe3?\xa4\x85Os/R\xc7\xbf\x8f\x06r\xfa\xdc\xd1\xd5\xbf\x93O\x04?%.\xe6?\xa3\x91\xb9\\h\x83\xe6\xbf\x04\xe0\xf1\xd0\x98\x1b\xd8?\x89d\xe8?\xf8\xb6\x1b\xda\xba\x7f\xb5\xbf@\x82m\xbf\xe4\xc7\xea?k\xf5\xc2\x1b\x99\xcb\xd9?\r\xb3\x83\xf3\xe4T\xdf?(/.}\xad\x7f\xdc\xbf\x8a\xff-\xfc\x06\n\xf5\xbf\xea\xa7\x1f\nke\xf0\xbf\x15\x1bp\x91\xc7\x84\xc1\xbf\xa2^\x0f\x9b\xc4\x84\xf1?\xbcu\xc3T\x83~\xf5?\xc8\xed\xc3\xa2K\x81\t@\x00S\x99~O%\x15@N9_U\xb9v\x0e@\xd4iC\xf8b\xeb\x06@ur2D\x93^\x06@\x843?\xa7\x1a\x08\x07@\x16\x1a\xbcl,\xfe\xfe?\xcc\x11}\xef\xbfO\xef\xbfW\xd7k8F\xb6\x00@\x87\xbaU.\xfa\xa4\xa4?\xf6\xe2\x8e\x95?C\xf6\xbf\xbe\xeb\xf3<\x1a\x91\xb5\xbf0\x1e\xe69\x8b\x87\xcc\xbf>\x02]\xadq\xc0\xed\xbfa\xfc\xa0\xa9e`\xe4?\xae\xe5\xb4\xb9\xe8\xa5\xdf?\x8d\x91+\x876\x16\xa8\xbfw\xb88\x8c\xaet\xe8?\xac}Q\xec;\xb7\x00\xc0\xe9\xb4.\x98\x16\xa4\xee?\xeby \x00\xcd>\x9a?\x9f\xd3\xf1:\x10\\\xe7\xbf\x98u\x8dp~m\x90\xbf\xc7\x82\xef\xdc.\xb2\xe5?\x08fN?q\xb1\xf3?\xfe\xb8\x15\xd3\xd0\xb0\xda?\xdb\x8b\x91\x115}\xbe\xbf\xec.\x19\xe0\x98u\xeb?\x06\x07\xe7\xd3\x080\x03@\xf3w\xef\xc4\xa1W\xe6\xbf\xbe\xcb\x18\xc9\xbd\xef\xe5\xbf\x90\xfdf>\xad@\xf0?>6\xc2\xe5\x8d)\x00\xc0\x9cG\x98$\r\xa4\xfc\xbf\x99\x1c\xf6\xbc(\xd8\xf6\xbf\xb1~\r<\x84\xd5\xe0\xbf2\n\x8b\xce\x9e\x85\xea\xbf\xf0!\t\x80\xc7\x95\xfa\xbf\x83\xd3\xee\x8d{\xeb\xb3?lY\xa7\xfe&\xf3\xff\xbfp/\xb0m\x8a\x97\xe1\xbf\x88\x0cv\xe8\xdb\x19\xea?b6*\xd4\xb2\xd2\xe7\xbf\x01Si\xc7\x11\xd6\xd4?\x82\x98\xb2hU\x95\xfd?\xde\xce=\x0c!\xa2\xf0\xbf\xc5joN?\xb1\x01\xc0\xad;\xc13\xd0j\xd7?\xcf\x97\xac\xad\x93V\xd9?,\x13\xa1\xa3\'\xaf\xe7\xbf\xf3\x12\x8e\x15\x8d\xa8\xb8\xbf\xce\x96\xa9\xb8\xec\xfa\xe4\xbf\xce\xb1"x[\x1b\xdd\xbfxCm\xfel@\xf8\xbf\x98\x99\xf0\xb6x\x0e\xf5\xbfb\xed\xc7\x02\xcf\xb0\xfb\xbf/\x7f\'+\x93\x98\xed\xbf\x8b@\x1b\x7f\xc7\xa5\x03\x13\xb5?\xf5l\xd8\x96\xcax\xf0\xbf\xfe\n\xc0\xa6\xd9\x1f\xc8\xbfe\xfe\x97\x1d\x90\x12\xed?w\xca\xf6\xbaR\x12\xe0\xbf\x96\xfc;\xd0n\x9e\xc1?:J\x14\xb3\xbd\xa5\xcc\xbf\xc2\xa8\xf73\xdb+\xe7\xbf\x01 &+\xa4B\xfe\xbf\x1f\xda\x1c\xb3\xe9M\xfd\xbf\xb9\xc6]\x97\x00\xb4\xe6?\xf3\x03/\xdf\x87>\xfc\xbf\x84\x19=\xa8\xeb\x90\xf0\xbf1\x8a$]s\xba\xee?D\'\x1b\x92\xd9v\xc8?\xdbF).\x8b\x1b\x06\xc0\xf3QW2F\xbe\xd8\xbf\x98\x9be}\xf8\xc5\xfc\xbf\xa0\xae\xff\xd9\xce\xdc\xf3\xbf&"{\xbe`\xd4\xee\xbf\x0bx.\x1ft\xfe\xf1\xbfZ\x84\xe89\x8e6\x03\xc0\xa1O2\xa6;\x1b\x02\xc0\x86)\xbb\xeb{O\xea\xbf\xfe\x8c\x7f\x1bD\xe3\xea\xbf~\xb5\n\x9e\x14\xb4\xf8?2\x90E=\xae\xc9\xf2?\xc9\xe4\x93X\xfa\x12\x07@7v4\xba@@\xc9\xbf\xbb\xe8\xbe8$!\xb8\xbf\x8f\xb1\x17\xb9\xba\xdd\xea\xbf4\xb3\xa4\'\xf0\xe2\xc8\xbf\x01%(\x83\xde\x17\xe8\xbf\xb0\xf5\xd1\x89\xd0\x02\xd1\xbf\xda\x18U\x81\xd1\x87\xf0\xbf\xf7\x80|\xbe\xe8\x19\xfe\xbf\xab;\xb7\xdd\xbe>\xf8\xbf\x16\xca\xbe\x11\xe4\xfc\xb1?}\x11m\x08a\r\xc6\xbf\r\x84\x99\x1d\x18\xc1\x04\xc0\xe2\x17\xb5\xd1\t\xd1\xd7\xbf\x9bxXf\x9a\x93\xf2?a\xac\xb4\xfb\x19R\xd0?\xc1\xd0BO\x90b\xe0\xbf\xb3_I;\xa9\xec\x04\xc0].\xa9}\xb2o\xe2\xbf\xe565\xcc\xe4u\xd2\xbf\x88\xd3\x9br\xeb\x1f\xf0\xbf\xee\x01}\x89\x1c\x12\xf6\xbf\xef\xaf\x08L\xd9\xa4\xf5\xbf\xbd\xe1}\xf7\x0f\x95\xf2\xbf{\xacg\xcf\xd9b\xf9\xbf/\xbc2#\xd9\xda\xfe\xbf+\xa6\xe3\xc5\n\xde\xf1\xbf\x84\xb8qk\xc6\xbe\x0b\xc0s\xa3\xc2\xaf\xfaQ\xec\xbf\xf2\xb8\x93)\x878\xc4?p\xc5\x06\x0f\x9cY\xfc\xbf\x9e\xef\x86\xd1\xd63\xd9\xbfx\x93Q\xe1\xa0\x13\xb8?rX4\xa6Q\'\xbe\xbf\xf6\x81\xb1I&\'\xd8?\xcez\xc0\x89\xf3H\xf0\xbfW\xb2\xae\x06}\x84\x08\xc0\x86T\x05\xe9[J\xf8?:wv\xcf\x90\xb1\xf1?\x84\xcf\x03\x18,f\xe0?\xb0T\xcdsw\xb6\xdd?2\x84\xd4\xa7\xad\xd0\xbf\xbf\xe1,\xff\r\x8a\x8b\xf8\xbfa\xf28\x92#:\xfe?\x07\x11\x8d\xd6\xe90\xeb\xbf\xbf\x87\x88\xaeI\x80\xfb\xbfsw\xed\xc09\xea\xe0\xbf\xd3\xe2qP\x0fb\xb9?\xec<\xe62\xc4\xd6\x13\xc0\'\x93\xaf(\xc4R\xd8?\x10p^\xa1\xcd\x1e\x12\xc0`;7\xfe\xbb\x19\x13\xc0\xef\x05u\xa8\xf4y\x03\xc0m\x12\x9dc\x97\xc0\x07\xc0T\xc1\r\xea\xdc\x10\x03\xc0c\x88\x96\x9f\xd3q\x16\xc07W\x9b\x17\xd3\x16\x0f\xc0\xd1Y)tVv\xc1\xbf\xe1Z\xd3f\xb6g\xec\xbf\xe9\\Fj\xe5i\xfe\xbf\x02\r\xbf\xc4C\xf4\xe9\xbf\xc2\xc3q\xf0A\x0b\xf2\xbfr\x0cM\x83\xb6\xa5\xf3?Y\xf5\xe5\xa4\x80\xf9\xe0\xbf\x13|\xbb\x1b\x7f\xea\xe4\xbf\xbc\xc2S(oh\x01@\xfd\xb9\x83\x95\xe7\x8f\xeb\xbf\xb0V\x0f\xb7\xdf>\xc2?\x95\t\xa5}z\xf0\xf5\xbf%v\xdf N.\xe8\xbf\\\x0bOl\xee5\xcc\xbf\xfbXI1\xbd\x0f\xfb?(\x15\x0fY\x83\xa5\xf1?\x8e\x8f(=l\'\xb7\xbf3cKZ_n\x00\xc0\xbb \xa3\xfb\xe2\xc8\xfe\xbf\xc0~\x81\x10E\x15\xfa\xbf`\x10\x0co\x8d\x9c\x0b\xc0*\x8e^\xb7\xb5\xca\x0e\xc0\x07,\xf0\x7fo\t\t\xc0\t\x1dg\xb2\x9d\xc0\x06\xc0\xdf\xc8\xce\xfd\x11\n\x05\xc07\x13|$\xda\xe4\x02\xc0\xc2\x13\x9c\x9fl2\x10\xc0\xee\xbe\x1ap\x81\x80\x06\xc0\x02\xbf\x9f\x03&\xf4\xe3?\xb6f\xec\x9b\x02\x18\xb7?A1\xcd\xf92\xab\xe7?8Tv\xae\x12_\xf6\xbf\x19\x9cUS\xba"\xdc\xbf\xa9nGz\x1eK\xea?I^Q=\x1e\x06\xf2\xbf\x8ez\xde \x15k\xe4\xbfw|\x04\x00X&\xe9?\x0b\x0b\xbe\x04\xc3X\xef\xbfD@Y\xcb\xac=\xeb?\xcc`\x80\x1a\x81\x85\xc8?\xcfb\xa5mh(\xf3?v\xdf+Y\xe5\x10\xf5\xbf\xd9\xfbl\xee\xf31\xd3?H\x1d\xc1\xfe\xa1a\xee\xbf\x08\xe7P\xfa\xc6\x02\x85?\xcd\xd1OF\xa8\xdb\xee\xbf\xf1w[\xa7}\x08\xfb\xbf\xc5\xda\x17\xba\x9a\x01\xfb\xbfX\xf1\xd3\x0c\x83\xb0\x05\xc0\x9b\xc6\x19\xb5\xbaD\x04\xc0!\xdaK\x1f\xc3\xa2\x05\xc0\x14\xeb~\x12E\x0e\xef\xbfL\xcaQBc\x8c\x05\xc0\x91\x185\xfa\x88\x8a\x02\xc0\xbfx\xa9\xd6[\x9b\xf7?1\xa3x\x7f\xc9\xdc\x92\xbfzV\xcfN\x1e\xf9\xb4?y \x9eC\xd6\xeb\xbf,\x12\xe2\xc7\xe3N\xe2?X\n\xb4F\x82\x05\xe1?\xca\xe3\xa4\x8c\xc4\xd0\xc4?\xa1\xf2dX\x12F\xd7\xf4\xbf\xd2\xbf\x94\xd8\xd5\x86\xf3\xbfQ\xfb\xb6\xda\xae3\x00\xc0\'\x19f\x00\xd4\xf0\x00\xc0\xbb\x17\x84h\x0e\xc3\x04\xc0\xe21@\x0c\xf5*\x05\xc0\x8d\xd0e\x06n\xc7\xf1\xbfe\xc8\x80\xc1\xe2\xfa\t\xc0\x8f\xfa\xf0\xd4\xa6\xce\x01\xc0G7M<\x1b\xd4\xf2?\x1f\xc9jHD\x0f\xaf?(aZ\x1d\xee^\xa1?\x10\x12\xdc\xbb\x83\x03\xf5\xbf8\xfdg\xe9\xc2\xff\xba?\x1f\xef\x8d\xe7\x1c2\n\xc05\xeaK\x1d\xd5A\xd0?\xf0\xe6\xcd\xd0\xc7f\xc5?\x0f\xd4\xd4\xa7\xb6\x87\xb1\xbf\x9f\xd1\xa9\xb5\xbe\xf5\xfa\xbf9\x1a\xa9\x18\x9f\x13\xf5?\xeb\x12\xc5T\xd0o\xf0\xbf\xcf\x14\xe5md\x8b\xfb\xbf\xfd\xd2\xec\x84\xf3\xa8\x01@\rEi\xd57\xc9\xeb\xbf3\x8fU\xfe\xb9B\xe1\xbf\x8e\x8a\xea\xd8\x08\x8f\xea\xbf\xad\x9e&~\xcao\xe4?w\xd2\\[\x92\x01\x00\xc0w\xad\xd4\xf8\xcc~\x11\xc0\x9c#\x01>\xa3\t\xfc\xbfJ\xc5\x90\xec\xa3\r\xf7\xbfec\x8d\xf9\xf2V\n\xc0T!\x05Q5N\xff\xbf:G\x1e\xf2\x17B\x01\xc0]7\xf3y\xbb\xcd\xd9\xbfj\xf5}\xc9\xd7\x86\xe8\xbf\xb5\xbc\xd7{\xeb1\xeb?w\xb0\xfa\xa7iQ\xf9?\x85f\xb7$\xf3\xd8\x05\xc0:\xa04qp\x1a\xe0?i|\xbf\x02\x80?\xe3\xbf\xe1n\xc6\xbdy<\xb4\xbf\x060\x8e&\x06"\xe3?\xf3\\\xccK\xedN\x81?r"\x19\x80U$\xf5?Y\xf3\xbf\xa0\xc3\xb4\xd2?\xc5\xd5^\xb2\x03\xbd\xf5?\x9dp\xb6\x0eX3\x01@\xb5\x0c\x8e\x84d\x0f\xe6\xbf\x9b\x9b\x1f\xb5\x94\xea\xe2?+\x806#\x1b\x9f\xe5\xbf\xa11JZ`X\xe1\xbfsUB\xc5Z\\\xca?DK\x16\xb6ny\xfc?\xba\x99\xdd\xa3X\x9c\xfb?`]\xb7Y\\K\xfa\xbf\x16\xc8G\xf0W\x11\t\xc0e\xe0V\xd0\x0f\xf6\x07\xc0E\xdd"\xbc\\\x07\xeb\xbfx\x0bS\xab\xf1\x1f\xe6\xbf\x0e\nq\x04\x83+\xe0\xbfO\xd0\xf9\xdfc\xd0\xdd\xbf\xf8a\xc0\x06m\xe9\xf0?\x0c\xfe/C1g\xbf?\xfc\x0f\xcf\xd3\xd1\xcd\xe2\xbf\xa3smS\xa2\'\x02@\xd2\xf8\x08_\x16R\x9a?\xe8\xdan\xca\x1aY\xe2?\x91\xbe\xa4\x83{\x80\x01\xc0l\xa1\xdc="y\xe3\xbf\x1cj)\xba\x99z\xf4\xbf\xeefP\xfa\x88\xce\xf6\xbf_\x86\x14\x1d\xa2=\xfb?\xf8\xd2\xcf\xc0\xeaa\xde\xbf\x8f\xc7\x97\xa7UX\xcc?\xdc\xe0K\x1ek+\xf8\xbf\x83\xb0#\r\xdf&\xd3?\x03\xed`w\x83\xaf\xeb?&e\x1cA{\xdb\xd5\xbfu\xfa\xf8\xb1\xc5"\xf2\xbf\x93\xab\x8e\x07\xd2\xd1\xc9?;\x07,\xd5)\x88\xf2?\xc9tZ|\x05\xad\xd3\xbf\xc2\x928u\x16I\x0c\xc0q\xfc|\x1c\x7f\x06\x02\xc0\x83u=\xf7\x12%\xb1\xbf\x84z\\\x9a\xf2\xd1\xec?\xc0\xb2&H>\xf4\xcf?\x85P\x8a\x82\xe1\x1f\xd6?\xeaj\x8d\xaa`\xbd\xed\xbf.p\xad\xb4\xccE\xd3?\x05@\xbc3\xbf{\xfc?B|s%\xb4\xac\xfd?\xf7\xfa\xb0\xa1\xb3K\r@\x0e\xd15Ri\x8b\xf8\xbf\x94\x0ca\'j\xb6\xe8\xbftk\x82\x1d+:\xd3\xbf\xc3k\xed\x92\xc2O\xea\xbf\xc8/\x06\xd2s\x01\xc2\xbf"\xee\xf0\xb7V\x8b\xe1\xbf\xdbH\x95vpH\xc7\xbf,\xb8\x9b(?\x1b\xf4?\n\xfe\x8e\xe7\xd4\xf7\xef?\x83*\xd9\xa6\xaf\xb0\xd8\xbf\xb0.)+\x81 \xe7?\xd6\x7f\x86r"\x11\xde?\xbe\xe4c\x88\xfc\xf2\xc4?\xea\xa1;g\x9d\xa5\xb3\xbf\xf6\x1d\x1d\xf8\xa9\x1c\xfa\xbfLG}\'H+\xe6\xbfe\xbc\x15\x8e!+\xf8?50"4_]\xf8\xbf\xee&!\xdbZ\x92\xe0\xbf\xd7X\xa6\x9e\xc3\x13\xf3?\xc2~(_\xdb\xd6\x00\xc0\x0c\xd4\xcf\x98^\xc9\n\xc0V\x17\xa2\'\x07\xae\xf8?z\x87\xbc\xee\xff\xbc\xe1?\x19a\x1c\xa7\xc7@\xe0\xbf\xce\x00\xd4U\xc2\xcc\xdf\xbf\x0f26\x04\xaf\xe4\x0b@\x14\xffpO\xd4\x98\x00@\x8d\xb7q\x95\x15\xc5\x01@\xda\x19\xbbx~j\xe6?8)\x15lR\xfa\x00\xc0C\x9a.\x04\x0e;\xc3\xbf\xbb}\x12\xb9\x91x\xfc?\xbd\xa2$\x0bw\xf6\xf4?\x14o\x00\x18\xe9\xec\xf4\xbffM)U\xab\x7f\xde?}\xc6\x81\xe0\x84\xd8\xe8?\x08T&\xab\xa0\xa6\xd5\xbf)\xf3Vx\xf5\x9a\x0c@[\xb1\x06KC\xb3\xe3?\xd4\x9c\x143nX\xe9\xbf\x92Oq\xd5\x92\xd5\xc1?A\x82mK\x17\x8c\xd4?\x887\xb0\xe5i\xf0\xe1?\x80-\x7f\xfbu2\xe8?L\x91\x80\xbc\xe0\xb8\xc1?\x1e\xee/\x1d\x027\x03\xc0\x83\x07\xd6\x0b=,\xef?\xc7\xb9\xc1\x96\\\xe4\xf1?\x8f\x96N\xae\x16\xb8\xea?\xd9[\x8di\xac%\xcf?\x99!\xcb\x05\xea,\x06@Q\x96\xbd\xfa\x9a\x7f\xe5\xbf\xa9\xefD\xae\x15D\xd3\xbf\xe1J\xb19t\x08\xd5\xbfH\xba\xe9\x1d\x16\\\x00@\xb7\\\x81\x11\xf0\xc7\xf7?\x10\x9aI;\xef\xbb\xf9\xbf\xa1\x1c\t\xed>M\xd6\xbf\xed?\x86j\xcd\xef\xf4\xbf\xde\xeeh\x9a\xf8\xff\xd7?zUM\x8d\xc9W\xfb?h\x17\xaee\x90\x8e\xcb\xbfN6\xbe\xb7\xa3\x1e\xf4?\xe8d\xf5\'\xbd{\xb5\xbfeLZ3\xae\xcc?\x8bX\xbf\x96[\xd6\x01@3\xb7\xd4\xf2\x92\x07\xdb?\x0b\x81^\x1eJ\x82\xf7?\xf1\xf9\xbd\x88\xeaM\xeb\xbf\xdal\xf3\x85 {\x03@Z\xb8\xec\x0cO\x81\xf5?\x89\x1a\x0b\x80m\x98\xf3?|\xd8\xd6\xcb\x9c7\xfc?\xdc\x14\xab\xc3\xb5\xf0\x98?\x04e\xe2\xa2\xcc\xe1\x02@\xe8l+\xe4\xf9\x81\xf4?\xc0\xcb\x93\xc0+\xf6\xec?nP\xc4\x1c\xe1\xc1\xc7\xbf\x85\xcex\xfd\xc0\x9b\xea\xbf\xe0)\x99\x17\x9e\xc9\xf7?\x84\x86\xf4q\xc2\xda\xd3?\xa0;\xc9\x96d]\xfe?!\x06.j\xb2\x91\xfe?\xf7\xb8\xe4\xd3\x0b6\xdc\xbf\xf9\x9b\xad.&\x84\xfc?\x1d8e%\xa7E\xe6?\x95\x0b\x06\xf8LG\x98?\xb8\xb8d`\x0b \xe2?\xc1Y\x0f\xe7\x04\x1f\xf9\xbf\xd7p%!\xecI\xa5\xbf\x01\x1b\xf3\x17>\t\xf8?\xfc\xbdR\n7&\xf4?\xcc@(?\xcb[\xdb?\xda\x9a\xedD\xbb\xae\xfa\xbfP\xa6O(\n"\x0e@\xd9l\xb8\xd8\xe1\xb5\xe1?{f\x9f\xa52\xe3\x15@\x9a\xce\xc2\xf0eJ\x0b@\xba\xaf\x84%\x1eA\xf4?5`W\x83\xfa[\xe2\xbf\xd0\xb9\xad\xc5js\x0c@)*\x9fd\xb0\x81\xfe?#\x8e\xa2\xfc&\xc7\x01@\\}\xca\xf7\xa1\xe8\xab\xbfal{x\xd8\xe5\xfd?\x1e\x1f\xbf\xe1h\xf9\xf9?\xfe\t|\x92\xe56\xc9\xbf%\\\x9e\x98\xfe\x07\xf7\xbfxu:\x88\x9a\x97\xf2?\x07|\x18\xf4\xf9|\x00@\x0e\xeb\x00\x05j\xcf\xf6?o\xb2\x88-\x84\xad\xf6\xbf\xfa\x1c\xf5\xed\xe2Z\xe5\xbf\xb2\x80\x1ba\xdau\xd3?\xf6i;\xd0\xe6\xae\xe2\xbf\x13Fh\xe3\xbf\x1da\xbf\tv\\<\xfc\xa9\xc6\xbf\x9fe\xc9\x17O\xf9\x03@\xd7%k\x12\xf0_\x10@\xd8\xd5\x8cs\xbf\xc2\xf8?G\x197=\xe7\x85\x05@\x1e\x0c\x16U\x87\x9a\x0c@\x11u\xe6\x94~\xfb\x04@\xd4n \x95 \xb7\xe3?M}*\xbe,+\x0e@\xad\xe0\xea\x1c\xf8\xb9\xdf?\';\x1f\xb2ll\xf7?QG\xec<\x80P\xd5\xbf\x8c1#\xb9\xfd}\xd1\xbf3\xc2e\x055\xb9\xf8?w\x9a\x1f\xafv2\xd7?n/#WB$\xd6\xbfg\x1cE`\xe4}\xf6?W\xe2\xf6\xd9\xc6\xa2\x92\xbf?\xf6*\x925\x99\xe7?\x12\xac\x8d\xd4|\xf9\xfa?X\xad\x7f\xcc\xaf\x97\xfd?\xbd>\xa0\x80C\xf5\xee?\x81\xfb\xc1\x06\xfb\xe9\xf7?\xca\x81%\x80\x1av\xfe?\x92\xa8j\xcc\x1e\xd2\xe3\xbf\x11\xf5\xe8\x0bs;\xb8\xbf\x94?\x96\x10\x89\x04\xe2\xbf2\xc8\x1b\xfb\xad\x87\xf0\xbf]\xce\xf8!3\n\xef?\xf1<]W\x97B\xd0\xbfJ\xa8le\xc8\x97\xf0\xbfV\x11\x00\x82t\xe6\xce?\xcf\x00\x17e8\x07\xf3?\xd8\xfe6\xa6Cc\xf9?\xcd\xaa\xbf\xc0Y\xbd\xfe?\x9b\x95#i\xaf\x95\xfd?E\x18i\xe2?\xd5\xf1?\x08F@\\\xe3\xfa\xfc?8\xc3\xfa\xaa\xc4\xe7\x04@\xf3\x80V\x0cS\xbc\x03@\xc0\n\xf6\xf4\xc8<\xe3\xbf\x00\x1a]:\xb9\xbe\xc1\xbf\x08\xc9\xb5\xb0\xf0\x8d\x03@=F\xc6\xe9\x90\xb5\x03@\x83\xb9\x9d4eS\xf4?\xedV\xb5pwQ\xf2?\xa1\xc3\xde\xf0X7\xd0\xbf\xbd\x0e)\xe0eb\xfd?\xad[3\xce\xc6}\x04@\xd7\x95\xa2\xbc\xd2e\xe1?\xedc\xd0\xf1.\x06\xc3\xbf\xbb\x98\xf1q\x0f\xb4\xec?\xf0\x06\x99~\xf2Z\xe2\xbf\xfc\x9d^\x19e\xe4\xd7\xbf\x03\xa67\x8bsD\xf2?\xb6\x99\xb8\xbb\x06\xb0\xda?\xa0\xf8\x92\xb8\xef!\xe5\xbfEE4\xfb\x0e\xeb\x00@\xd9Y}3\x92\xa0\x11@\xb2\xe5\x1e\x16\xcb-\xe0\xbf\xafS@w\xa2@\xc6\xbf\xbb\xc0\xc0B\x96e\xf0\xbf\r\xa1^\xc1\xbcF\xf1?b\xbaP\xef\x03\xee\xf6?N;\xc4\xad\xb2\xd5\xe2?C\x12\xb5\x8a\tL\xf0?\t\x8b\x99\xe6\xffE\xd9?\xa0(P\xb4A|\xec?\x0bM\x07\x9a\x01m\xfa?\xb5UX\n3\xe5\xbc\xbf\xaeA\x18\xd2\xca\xb5\x05@\xa8T\xf2`\x92\xfb\xe4\xbf\xa3_\xa8V9\xab\xa8\xbf\x82\xf4c\x19\xc4\xd0\x0b@\x11\xc8\xfb\x1f\x15\x02\xed?\xe5\xe7\x0c\x17\x96\x06\xf3\xbfz\xe7\xbd\xa2\xd7\x15\xee?W\x0f4X\xdb^\xd7\xbf\xe0\\\x83\xae]\x83\xfd?\x18d\xe2\xa29\x02\xe0\xbf\x0e3\x07i{\xe7v\xbf\xaf\x16\x0c\x882\xc3\xb5?o7\xbb\x02\xd7\t\xe1\xbf:\x10\xbf\'\xecW\xed\xbf\xb8\xda\xec\xe4\xbc4\xd7\xbf\x0e_\xa7\xa6P\x10\x9b\xbf\xc4\x9b\xde\xc7\x96D\xf4?\xe6\xb5\x12\xd9\xb1\x95\xfd?\x9ed\xe4a\xf7~\xcf?!\xeb]\x87\x95\xc3\xe0\xbf\xf6\xddq\xe0r\xa9\xd8? \xa5\x07>S\t\xe0\xbfB$\xb1\xc1\xd9`\xf9\xbf\xf4\xb4\xa1\xb9\x80\xa5\xec\xbf\xc0S\x87\x97\x90\x87\xe8\xbf\'\xb1\xee=\x08p\xd4?r\xddsB[\xdb\xf3?\xa7yldQ\x9f\xf1\xbfc\t\x11,g\x98\r\xc0\x17\xd3\r\x81=J\xf7\xbf,\xc5\xbd+\xa2x\xc1?\xee\xd0\x10\xfd\x13\x05\xc5?\xad\xf5\n8ZK\xf9?\xd2S\xe9\xa7uQ\xd2\xbf\xf5\\\xdf\x8a\'\x1d\xd8\xbf\xebC\xb3\x06E\xd4\xd5\xbf\xf3\x9c\xe9\x87\x83\r\xe0?\xedb5a\x85\x16\xcb?2[\xf7\xb2\xb9\x14\xd0\xbf\xdc\xef\xe1\xf5\x15\xfe\xeb?\x83\xdd\x88\xc3\xed\x8c\xf1\xbf\x8d-\x1c\x00\x86\xff\xdc?\xb5\xe4\x7f\xeb\xde8\xde?\xcf\x0b\xd0\x06\x05l\xd6?\x99$\xb4\'\x11`\xee?\xd12~{r\xf8\x03@qp\xc2y\x92e\xd5?\xd4\xd2\xe2(\x9d=\xf8\xbf\x00\xf4\x98\xe0xz\xda\xbf\xad\xe4\x9d\t\xa9\xe7\xec?r\xb6\xe2Y\xf1\xd7\xfe\xbf,6i\xa8`\x80\xe5\xbf\xf7z\xd2\xea\xbb\xc3\x0c\xc0\xab\xda\xfc+\xc7O\x03\xc0\x1cp\xfb\x1d\xba\xdd\xdf\xbf\xc1PS\x8f\xc0_\xb4\xbf\x073\xa9\xceR-\x02\xc0&|hU\xb8K\xf4?\x9c@\\\x82\xe4Y\xee\xbf@\x9f8\xd4UF\xf0\xbf\xb6\xd1\xbdC\xf8\xdc\xf7?\xa5\xf9\xf8I~\xe9\xe0\xbf`R\xb5\xbe\xe6\x10\xe6?<\xdb\x87C\x99\x10\xf6?\xc9\xca~\xc5\x1e\x88\xb6\xbf\x12\x12\xcc\xfeIA\xc8?\xe9u\xfa\x9fr\xe1\xdd\xbf\x87\t[\xe4\xb8\x96\xd7?%\xff\x83\x0e}\x10\xed?a\xda;\tg;\xc3?\x0f\xa0X\x9a%\xf9\xeb?R9N\xfd\\\x11\xfb\xbf\xc1\xc5\xba{B\xcc\xf2?\x8e\xa7\xa1\x16\r\x91\xec\xbf{\xdcO\xf5)\xba\xf2\xbf\r\xff\xde\x8e\x1a\x8e\xf0\xbf\x9dib\x84m\xd8\xfb\xbf>\x0c\xd5\x0fay\xed\xbf\xaf\xb8*\xfc\xc7o\xf9\xbf\xfe\x8b\xcd\x98\xeb\xb7\xe9?T\xea{\xbd\x10q\x05\xc0\xachi\x15\x88.\xf6\xbf\xb5T\xff^\xb3\x9a\x07\xc0\xa2\x85\xbc\x13\xd7e\x03\xc0\xd7&S\x9c}\xd4\xf3\xbf\xa4\xb2\xae/^\x1a\x01\xc0\xe9\x08\x04\x9ez\xc6\x04\xc0!\xe1\xa4)\xf9\xd1\xe9\xbf;\x1f\xb2\xff\xcbO\xe3?|\x9f\x96\xc7\x0b\xcb\xa5?\x8a~\x93qjA\xdb?\xb16\xa4B=U\x03@\xb0z\xb4a>\x93\xab\xbfP\xfb\xa6y4M\xa8?\xd3\x05x\x9d\xbf\xb8\xf1?4\xca\x1f\xee\xea\n\xcd?>d\x0c\xbb#P\xb2?MEQ\'\x0ff\xe1\xbf\xf1\xf2\xabRW\x9d\x96?L\xa8\xe2\xfdT\xac\xe7\xbf\xeby%\xab\x99A\xc9?D1\xe6\xa8\xa8\x85\xd0?\xbbq\xef\xd7\xbf\x81\xce\xbf\xc2#\x83\xb9B\x00\xfc?\xc3\xd92\xd0\xf7~\xe6\xbfF\xd0\xd8~/v\xf1\xbf\x87\xbb\xc0\xce\xd1u\xc6?\x06\x80 \xb3k\xe1\xea\xbf\x93\x91\xb2\'\xe2%\xf1\xbfr\xdeA\x14\x97\xeb\xcb?\xac6\xd7\xfc|\xce\xf1?\xd5\x84\x9b{\xdc\x9c\xe4\xbfYP\x85\x86\xc8>\xd8\xbf7\x014yJ\x11\xdb\xbf\x98\x9a{\xd3\x91\xe0\xec\xbf5"r-Ik\x98\xbf\x82TC?\x7f@\xe5?\x98l\xb4\x98\x9a2\xf2\xbf\xcb\x10JoH)\xd5\xbf\xd2\x9a\xf8\x85\x11\xe5\xd1?\xde5\x1fW\xc4l\xd8\xbf\xf8\xc1\xd5\xb0\xa1o\xb2\xbf\xc4l\xc4h\xc7\xfa\xc3?\xe0\x1f>/o\xf7\xd6?Gr^\x17\x83\xd1\xd2?\xf3\xd7\xc4\xd8XL\xb3\xbf\xdc\x96\xdd[?\x03\xb4\xbf#\x11\x8d\x8a\x03\xdb\xe6?\xc9\xe2\xb6\xa7\x19\xcb\xdc\xbfE\x14lz\xcb\\\xe6?\xcarY\x9b\x91\xc8\xe4?\x03\xc5T\xd1\x82\r\xe2\xbfN\x99\xcc\t\xe0e\xf1\xbf\xe5Ar\xb0_\xcc\xe6?^\xc3\x8a\x91\xf8\xa9\xa7\xbf\x85,\x19i\x1es\xc8?i\x84\x92\xb8\n\xe7\xb0\xbf\x1aZ\xeb\xca\x08\xec\xce?qF\xd9\x15)\xc7\xac\xbf\xe6K\xb9\x13\t\xa1\xdb?%l0\x10\x1d\xdf\xcb\xbfDkyn\xe9\x92\xe1?\xa0\xc7\xb5\xd1\xd3$\xe2?\x9b\xf0\x04\x1db\xde\xd9?S \xb01u\x90\xe8?\x80\xb8\xc6\xb0\xe6O\xf2?\xcb1\x17\xa4L\x8b\xeb?2\xa2q\x15 \xad\xcc\xbf\x03p\xd6\xfa\xd3\xa0\xad\xbf\xc9\xe9\xdd\xf9$\x80\xda\xbf\xff\xebt\xde\x01\xb3X\xbf\x93%\xe9#\t\xc5\xe9\xbfv)\x95\n \x14\xe5?\xb1\x0b\xc6\xee\xb0$\xe3\xbf#``\xfe\x0cq\xb4\xbf\xa0<\xfa\xde}\xaa\xf5?o\xda\xc2\x01\r\xf9\xd6?\x0e\xab\x163\x14]\xd1\xbf\xb0q>\xff\x014\xe8\xbfX\xa1r\x98\x95s\xe0\xbf\xb8\x8a\xd6$\x051\xf5\xbf\x84p\xd7.\xb4\xb3\xf6?\x11\xa1K\x16\xa4X\xf3\xbf\x02~\xc2\x12A\x81\xbf\xbfW\xcc\xc9UQ\xdb\xe0?\xdf\xeb\xe4\xc2\xa5F\xf8\xbf\xa3$Iw\xf6\xe2\xe3?\x01\x19\x7f\xac\xd7\x97\xe2?\xec\xcfH5\xc4e\xf0?d\x84?\xb5O`\xe3\xbf;\x1d\x96xuo\xd0\xbf\x90\xab\'\x81\x1f\xc8\xef\xbf\xae~V\xf8\x08\xef\xeb?2\x04j<\xb9\x0f\xed?~c[\xb2\x11\xa6\xe0\xbf\xab\xe73\xe3\x9a\xef\xcb?\xe7\x1b\\\x06\x04\xcd\xde?N\xcf|\xd6\xafj\xd2\xbf\x14\xa7`\x94\x15n\xf1?k\x81\x01\x89\x86\x82\xf7\xbf\x9ds\xe4\xe9\x81\xa8\xfb?\x07:\x90R\x8a\x19\xa5\xbfTQ\x0fB\x8eI\x93\xbf\xb9(\x1fk\x8a1\xf2\xbfo21aZ\x8d\xf2\xbf\xb86\xaa\xe3ze\xd8?a\x14\x83\xe9s\x04\xe7?\xcd\xc9\x0cV\xe4\xde\xe4\xbf\xd3M\xde\xad\xd3\x05\xeb\xbf=\x1b\x0f\xf2\xdb\xce\xe9\xbf\xb6\x82u\xaa\xf5\xa4\xc9\xbf\xb5\x8f\x9c\x86R\x9f\xea?\xc0\xa73kh6\xd6?\xdf\x1e"\xca\xac\x8e\xc9?<\x1d\xd5\x18g\x18\xe7\xbf="\x81:N\xdd\xed\xbf\xfd)\x85\x96\xee\x05\xe8?n\x1b\x80J\x16\xd4\xdd\xbf\x97\x1a\xd4\x07\x19r\xce?3\x13\x0e\xe2h\xec\xd6\xbf\x95\xbdHVa\xc7\xd1\xbf\xe0\xe13\xd3I+\xd5\xbfa\x00\x03\xc9\xd9\xf4\xf3?A\x8a\x16\xfaS\x1f\xe3\xbf\x06\xdf\xee\xba\xc0\x0b\xc5\xbfV\xd0o|vz\xfa\xbfc\xc4\xdfw\xe1\xfd\xdb\xbf1\x01Na\xe7\xc5\xe0?+\xe2\xaf\xe8\xa0:\xbe\xbf^M\xeb\xafX\xcf\xcd?\xd4\xef\xb2<\xae\xb1\xea\xbf\x89L.\xf9a4\xf9\xbf\x0c\x9a\xd8\x94\x017\xd2?$Y\n\x95\xe62\xd2\xbf&\x1f\xf787\xff\xf9\xbf\xdby\x0e\x13\xb7)\xe0\xbfn\xa6\x12U8\xff\xb2\xbf\xb6\xf0\x0b]:\xdb\xe3\xbf\x1d\xa9,\x9dJ_\xf4\xbf\x90&w\x86\xf37\xd3?@\xca\xa5\x9b1=\xf7\xbf\\U\x8a\x0b\x8e\xe3\xd6\xbf1!^\xe3\x03\x1e\x01\xc0\x13\\gwA\x05\xf5\xbfg\xe7\xeb#\x12\xc6\xec\xbfk\x94X\xc8\xcc\x07\xfc\xbf\xac:\xe8y\x87\x1d\xe1\xbf\x93Gz\xa3W{\xe9\xbf\xc3\x05-\x88\xf6L\xf7\xbf\xa8\x1b\xa1\x1b\x04\xe6\xaa?\xa0aC\xa4\x18\xdc\xfb\xbf\xa3\x8c\xf5-t\x7f\xda?\x85\xd7\xae\xc0\x04v\xd9\xbf\xb77\xb88\xd8\x19\xf4\xbf\xf8\x9dW\xdcJ\xac\xf9\xbf\xfd\xca\xfe,S\'\xe9\xbf\xfe\x1dd\xecf?\xf2?\xab><4\xb5\xa7\xa2?\x06\xf4\xdb\xf2\xec\x8d\xe1?~9\x94\xe4\xf7\xc7\xd7?F\x18\x98\xc3|\xbf\xf3\xbfu\x88\xbc\xbf\xa1\xdc\xd4\xbf\xbboEO\xf9\xf4\xbd?R8uFs\xd6\xfd\xbf\xc1\xac\xe4\xfaY\xd4\xdd?\xb7\xd6\x85~\x8f\x0b\xd2\xbfp\xee&\xae\x8b\xa7\xef?\xbc\xf1\x97\x8e\xa5\x98\x02@\x01\xde\xd0"\x17\xf3\xec?\xa2\x08W\xb1|?\xc9\xbfDeEd$\x1e\xf4?2/\xb0\xf0\xadR\xd9\xbf&\x9b$\xf2\xb6[\xe2?\xf1\x9e\xd6\xfa\xa5\x1a\x01\xc0\xcbU\xb9[\x8c\xa4\xfa\xbfi)p\x88\x88\xe5\xd2?"8\xe5\xb4@B\xf5\xbf(\x1e\xbb\xb2Jr\xe4?b{I"xb\xf1?\x1e\x0b\xf3\x12^\xd1\xc1?\xeaR\x9f\x911\x83\xe7?:\xf7\x0c\xf5\x0b\xb8\xf3?\xf7\xd6\x99OL\x89\xc7\xbfn\xf32\xc6\xb4\x86\xd6\xbf9\xd7\xa3i\x8c\xb7\xd5\xbfX\xd2\xa7G\xe6\x8a\xc4\xbf\x85\xb3\x8f\xcf\xbd\xc4\xd7?s\x97\xb3\x06rB\xda\xbf:\x1fY\xfe\x05\xaa\xe5?8\x13\x19\xbfO\xe6\xf4\xbf\xb7\x081~7Q\x00@\xc7<\x01\xf1\x0c\x8c\xc0\xbf}\xe8=F\xc6\xa5\xdc?\x91.\xb5\x10\xb5*\xe1\xbf\x8e\xc8[\xf9\xa7\xc1\xec?\xef\xcd&)\x19g\xfa\xbf\xbb W?ed\xd6\xbf\t\xd4\xd2i/ \xc6?\xa4W\xba\xac\xd2\x81\xeb\xbf\xea\x9c\x91\xf7\xb6\xbd\xfc\xbf\xda3 \x9a\xca1\xca?FG\xa3\xe7O\t\x05@\xe6\xb77\xeb\x07P\xe1?\xd2\xeb\xfb\xddB\xd7\xf6\xbfs\xfddD\t\xa9\xee\xbfa\xc5,\xe8\xb9?\xda?\xa9wr\xcf\xaeH\xe4?h\x9dw(\x11A\xf4?\xa3\xe8(\xb9=s\xd5\xbf\'\xff\x18\x9b\x83\xf7\xbd?\xd3p\xda\xb3\x94(\xd6?\xe8\xf8\x19\xdb+\xd7\xe1\xbf\x00\xc5}\x0c\xbd\xbc\xf5?M\x91{\xb4\xe6\x96\xf4\xbf\xf7\x97\xaa\x18L2\xf6?7\x04A\x8f\xf4\xc6\xe7?G\xf1\x9b\xf9fU\xfc?\xd3\xc04F\xed\xe4\xba\xbf\x04\xe7\x84j\xcb_\x91?,\xd6\x11~\t\x81\xef?L[\xfc\xe9q&\xe4?x]\xbf5\xe2~\xf4?\x0c\x15I\xb9\x14$\xfb?\x0f\x11\xb3\x83\xf4?\xd0?3\xd5\xb7\x0c\xbf\x10\xe2?\xd7o\xf0\x89u\xd4\xf7\xbf\x90\x1b\x1c\xa2\xdc\xaf\xd2\xbf\xcd\x11\x05)mG\x00@\xdd\xc9\xa6yV_\xec\xbfY\xb9\xfde\xa9/\xea?\x03\xf5\x03l\xa6m\xcf\xbfk\xd3\\\x11\x15\xa7\x00@5XE\xbe/\x9b\xa7?g\x1148\x13\x16\x85\xbf\xda^Q\xa6\x0e\xce\x00@Q\x94\xfe\xddK%\x06@FA\x1d\xb5q\x92\xdd\xbf\xd3\x85\x8ae\xd3O\xf4?\xc2\x93\x92;\xa0\x8a\xc9?[\x14\xa5\x17\xc11\xe1?\xe1\xe5\x08\xcd\xeb\xfd\xc5?\x9e\x0f\xd0\xa9\xe2\x0e\xea?n\x99G\xcfp\xd4\xf1?\xd5)\xe9\x91u\xee\xc9?\x01f\xd8~\xc4]\xf1?\x8e\xf8\xad\xce\xab\t\xf4?^\x0b\xe2t\xd1:\xef\xbf\xbfa\xe5\xf5\xad\x10\xf4?1\xc4U+\x86F\xc4\xbf6\xe2i\xdb\xd8d\xee\xbf\xcc\xa6\x12\xad\xeeb\xf0\xbflw\x0f\x07\x07)\xf1\xbfm\xce\xef\xbe\x14w\x00@f\xa7\xafo\x8d\xe0\xfa?\xf6\x12\xa1\xf3{;\x02\xc0\xc9\x01\xe5\xc1\x95\xe2\xc4\xbf\xc8iw\x01\x91D\xe0?\x19\x10\xec06\xa7\xe4\xbf\xd6\xbd\xe4@\xf4\x86\xf6?\xff\xde\xa7(k\x85\xfe?\x0c\xf0Z\xe4\xf2\xaf\xf8?\xf4\xf5.`\xf4\x8c\xcc\xbf \x86z\x005B\xf1?&\xd3[\xab\x8be\x13@/\x158\x9eX\x91\xf9?s\xf7\x02\xd1R\xc9\xf5?#\xd9\x1fi\x8d\xd7\xcb\xbf\x1d\xc7\xa8\xdb\xba\xc5\xd2?3:\xdb\xa6\xc1\xb6\xc8\xbf\x9f\xcc\xe4\x01\x19\xb9\xea?\x99E\x881y9\xeb?\xbb\x9a\xbf\x94\x1fB\xb6\xbf\xdf\x90\x1f\xc9\x1e\x1b\xca?5\xa9+\x07\xf4\x1a\xf0?\x1c\x7f\x1d\xae\x04\r\xc2?\xf1\x8c\xa6v\xe8\xd9\xf4\xe4?\xe9\xb9\xe9\xf0\t\x98\xda?\xf2\xde\xf3U\x073\xe2?\x869\x15 \x92\xf3\x05@\xaf\x83\x96\xa4^\xe4\xc2\xbf\xd0\xd0\xe8\x07/w\xdb?\x1b\xb90\xc1\x07\x83\x04@a\x8b\xcf\xc4\x80\x98\xf9?\xac\xc5<\xd0,\x95\xf9?U\xee\x8ay=\x9e\xd7?\x9ec\xe9\xe7\xc7H\x06@\xb9\xdbC\xe9\xec\xb3\x14@\xcfg\xdb\xad\xc4\'\xfd?\xd9\xf8 \xbd\x89\xd4\xec?d\xe9L\xeb$1\xd2?\x9e\x05\x87\x03\x87\xfe\xf3\xbfP\xd6\x1f\xa7|p\xda\xbf\x99\x815m>a\xe7?\x0b\x16\xc9J\xed\xf8\x03@o\xe6\xb3\xb6L]\x02\xc0\x12\x7f\xe4\x94\xadE\xd7\xbf\xc0\x94\xfe\xb3\xdc*\xdb\xbf\x0fH\x1f\xe1\x88%\xf5?\x90G\x86\x90\xcf\x99\xfe\xbf\xa1\x04\xf8\xf3\x17\x18\xf2?sY\xdaC\xbf\x96\xd7\xbf|\xb3W!-,\xd5?\xca\xec/\xa5\xa26\xfe?e\xa3G\x1d\x92\xfd\xee?\xa7\xad\x0e\xb2JN\xfa\xbf;\x9d\xd4\xf1\xfe#\xe4?\x90\xaf?\x96\xdb\xde\xf5\xbf^=\x1bb\xb7]\xe8\xbf\xdbiX\xb9 )\xfd\xbf0\xd62e\xe4=\xf2\xbf\xc1\x86\xaa\x93\xd6_\xd6?p\x9c\xcc\x15\x9d\x0f\xf6?\xb5-\xacN\xd3\x98\xb6?\xad\xc8Do\xbf\xfb\x11@\x8c\x98\x8e:!W\x19@\xc6jt4\x03v\t@\xb3\x08\x063\xf8\xa1\xe0?\xbb\xdc\xd6?P\xb0\xe5?r\xf1\xfa\xbaC\x82\xce?\xce\x8fn&!\x01\xfc?\xb3\xdb`\xd4\x80G\xdb?\x17\xab5\xde\xf6\x88\xe8?\xcf\xb2\xe2;\x16\'\x10\xc0:\xd2-\x97\x8b\xa9\xe5?i\xdfa\xb7\xa2L\xfb\xbfo\x1e\xc6\xf7\xc37\xa1?\xba\xc5kED\xc5\x80?S\x0e\x08\xacc\xc3\xef\xbf\x80C\x7f\x0f\x0e\n\xfc?\x8d\xf1*\x87\x8f\xfd\x83?\xc4]Wd\xa77\xc9?\xec\x060iu\x06\x00\xc0m\x9b\xae\x17]M\x00\xc0\xa3>a\x13\\\x19\xfe\xbf$\xdc-5\xf8p\xf1\xbf\xaf\xeb\xb3\x03\xc1i\xf0?/\x03,\xb5\xe6 \xff\xbf\x0f}\xda\xe1\x9f\xf0\r\xc0\x19\xec\xcc\x11\xb6\x88\r\xc0\x18j%\xecA|\x01\xc0\x8a\xd8\xe7B\x827\xce\xbf\x9e\xfa\x18]\xae\xcd\xee?\x05\xf1\xd2\xcb\x9e\xe0\xf6?\xf4e9\x07\xf0-\xf9?\xa2\xff\x8a\xc8\x84|\xea?\xa94>u\xc2Tp?\x84\xbd=BDG\xf0?9a\x84;4\xb3\xe9?\x86\x7f\x81\xa9\x94C\xf4?Ur\x1a\xd8\xfa\xaa\xea?\xe5\x7f\x82\xb7\x95\xe4\x05\xc0\xb5\x11:/|\x8c\x02@\x16lCft\xf6\xfd\xbfm\x82|\xb2f\t\xd3?\xda\xdb\x7f\x01\xb8}\xed\xbf\xfe\xe5\xa7f\x171\x01@\x13o/\xb9cq\xf2?\x80\xdf\x958d\xeb\xfb\xbfx\x80\x88\xce3\xeb\xec\xbf>j.\xddR\xcb\x02\xc0L\xb6m\\\x83h\xf5\xbf\xab\x10\xef\x13\xc7\xc8\x01\xc0\xb7\xfc`~\xdd!\x01\xc0\xb9m\x98rts\xf7\xbf\xdf\x1e\xe6\x8a\xf0\xc9\x07\xc0\xd6L4?\xa9\xd7\xf2\xbfV\x9d:\xf7q\xc7\x11\xc0\x134%\x81\xc7(\x03\xc0\n\xb7G[PF\t\xc08}\x93\xf8D\xd4\xf0\xbfY*\xef\x8c\x1d\x10\xf0\xbf\xe2\x9d\x0b\xed\xc0\x9d\xd3\xbf\xf4\xa9\x88\xf8\xe5\xb0\xb1?\xbe\xc9\x94\xa0\x87Q\xf1?\xf1\x10#\xb6Y\xfe\xf6?\xe9R\xd9W\xd3I\xa7?_\xf9\xde\x18(n\xf7?\xc377gRU\xe5\xbf\xba8H\xacM\xe8\xd5?\xeb\x82l:\x8c\xba\xc5?\x02\xe6\xf4\x06\xec\xc8\xda\xbf\x0e\xd4\xb8\xd52\x18\xd9\xbfs\xf8\x91\xe2\xc2\xb1\xfd?\x81\xbf\xc0\x84\xbfB\xc9?\x8bQ\xe8n\xcc\xb5\xdd\xbfZ\xd6\x95\xa7\x8e\xd4\x01\xc0\x0c\x19Y]o\xd3\xe0\xbf\xf1\xa6]m\x8c\xf0\xf4\xbf\x91\xf8\xe1q\xd1\x1a\x14\xc0\xda\xe9K\x1a_Y\x04\xc0\x7f\xcdB\xc5f\x87\x01\xc0\n(\x9a\xb7\xea\xcd\xe4\xbf\x1b\xbf\x03\xf6\xa8d\x01\xc0\x05\xf7\xa5\xb7\xd5\x8f\t\xc0\xb5\xb5>\x15S|\xf5\xbf\x06\xd6\x90,\xe96\xf6\xbf\xd3\xd6\xef\xb8\x93\xe0\xf2\xbfv\x11\xe4[1|\xfc\xbfT\xb1\x165J\x10\xea?\x95\t`\xe0DJ\xe2\xbfH\xde;\xba\xf0B\x96\xbf\xb5\xe1\xc7\xc7\x8d\xc2\xde?\xee2o\x95\xf0\\\xeb\xbfm\xa4\xce~\xe5\xa0\xf0\xbfI\xb1\xcd!\x8d\xf5\xdd\xbfJ-\xb2\xdf>\x0e\xd4\xbf\xe8\xc9\'\xee$\xa9\xe7?\xf1YW\x92\x15\x0f\xfa?\xe8Aj\xab\x87g\x00@\x94ig1{D\x12@V\x8a\x9b\xb5\x9e\x03\xff?\xe4\xb4\x0cN\x81\x99\x00@Gu3\xd1\x98\xa3\x03\xc0X\xf8+0\xa4}\xf0\xbfq\xefOR\xe0\xff\x01\xc0\x0c\xfd\xf2\x93\xbc\x8e\t\xc0{Ua~x\x7f\xf7\xbf\xfa\t\xa9\xb6\xcd\xdc\n\xc0 \x90.\xb5\x19Z\xf5\xbf\x9dt\xd6#\x02\x1e\xdf?\xff\xcf\xb7\x8fV\xa0\x0b\xc0\x03\xa6Y\xa1\xaf$\xfa?\xeb\x95\xaa\xf2\x9fx\xf6?\x92bL\x88p\xc0\n@N\xc03\xf2\x9cb\xfd?+\xc5\x07\xbd\xc6R\xea?mJN\x97\xfa\xe3\x01\xc0.$\xba\xe8A\x9a\x8f\xbf\xe9!\xdc\xfe\x81G\xe6?\xcd\xf3"H~\xa0\xd0?\xf3\xee|\xe6jd\xeb\xbf\x10\xf4\tt\x98\xae\xf2\xbf\xd2\xf7\xd3\xff\xd0\x93\xee\xbf\xd02\xf7\xd8\x91\x1b\x04@\xdbO\xef\xe6\x1a\xa9\x0b@\xc6\xf0N~#\x16\x04@,Jum\rP\xfc\xbf\xd2\xd5n\x93\xca\x9e\xfa?\xe7h\xdd\x8b\xfb\xa9\xeb\xbf\xa0\x94\xcb\xf1\x8d\xc2\xe4?2\x018@\xd8\xd7\x0b\xc0\xd9\x14:^;`\xf7\xbfi\x94\xe5c\x0f[\xee\xbf\xf7j\x98\xe1O\xa4\x08\xc0R\xf4\x19\xba\xfd\x06\x0e\xc0\'\t\xd5\x9d\xed.\x04\xc0\xca\x95\xcf\x9a\xad\xaf\x0b\xc0>\x1fR\x15\x1c.\x07\xc0\xa8\x9e\xf2\xb3Di\x0b@\xd1\x92\xfa\xc8\xd0\\\x13@\x9e\x02\x1e\x01*\xcb\xca\xbf\x81\xa8|f\tI\xc8?\x10\x80\x94\xa9"g\x08@\xd8(}u\x14\x13\x02@%\x0f\x90\xc7\x85U\x04\xc0\xa7\xe6^<\xb7i\xec\xbff\xe9\xd6\xee\x95\xa3\xec\xbf\x13\xf7Z\xadx\xe2\xe5\xbf\x16]}\x07\x84\x1b\xf7?\xdb\xa24A\\\x15\xe4?#/(\x850\xed\xe5\xbf5w\xaf\xa0\x80r\x02@\x83AD\xcd/_\x04@\x08Q\x92\x14i\x06\xe9?\xe4\x0cn\x98\xe9j\x06\xc0\x08\x98}r\xdc\xdc\x05\xc00\x14S\xf4\xdc4\x0f\xc0\x99\x19\xe3~\xfaA\x03\xc0\xf2LD\xf5\x93\xfd\xf9\xbf4\xa2r\x17\x80\xb1\xfb\xbfM\xea\xe6\x1f\x89\xc0\x00\xc0\x9b\x89\x82\x8e9}\x13\xc0]\xd2\x97\xd4\x1bG\x06\xc0\xcd\x1e6\x90\xbc\x81\x04\xc0\xe5\xf41w\xe5"\xe5?\xff\xfb\xac\x86\x8a\xa6\x03@\xfb\x95\xdfmPl\x03@O\x94\xf3\xd2\xce\xfa\xf4?\x91\xbe\xbb\x18@A\x03@BS\x91J\xe6\x93\x0c@\x02\x84\xd8\xdf\xd8J\xc3\xbf\x8a}@\xeaR\x9c\x01@\xd3>\x19\xe3\xf0\x0f\x07\xc0\x9d\x8a#D\xac?\xe0\xbf\x9e\xa2\x1dTc:\xac?\xdarL\x0fo#\xde?)#\xbeR\xa8\x8e\xe4\xbf\x08\xb5f\xfd\x08\x99\xb7?\xb7c\x86\xc9g\xe1\xd6?\xee\xa2\x81\x8e\x14<\x02@v\xaeh\xedjG\x12@\xf2\x8dx\x0c3d\xd6?\xeaaO\x86\x03\xc9\x04\xc0\x1c\x9c3\xadi\t\x13\xc0\x8e\x19\x96\\b\x13\xfe\xbf\xd8\xb2\x92\xf4K\x01\x15\xc0-\x1e\',_:\x10\xc0\xf3T;\xdf-\xf2\x04\xc0\x14,=\x89d\xb8\x1f\xc0\x06wZ\xcd\xb7\xcd\x1c\xc0\xe9\x96@ \xb8!\x0e\xc0\x15\x91\xf9\xd3<\xa2\xc4?\x9b\x95\xdd\x84E5\x06@\x96\tE\xc0\xf2\xf8\x10@%\xe8~\x86\x88\xd7\xfa?@\xf7\r0H~\xf8?\xeb\x88\x1e)\xb53\xd6\xbf\x10\xfd$SH\x99\x01@=;\x8a\xb9\xa7\xd6\xcf?\t\x02\x98*\xa8\xbf\xe8\xbf<"T\x8a\xe00\xb2\xbf\xcb{\xe6\x15?\x9d\xd3\xf4?\xb8dE7\x14\xcb\xde?\xf45\x89gZl\x03@\xab#\x0559\xa0\xad\xbfj\'\xfd\xd5\x94^\x07@\xf26\xc0\xa2\xd6[\x00@\xa6\x9c\xeaT$\xc3\xf1?\xbd5\xee\xa7\xcb@\xea?\x18\xaa\x908B\xdd\xeb?\xfe\xc2r\xa2R\xaf\x9a\xbf\x081\xd1\x928\xfc\x04@\xcb\xaaD\xcd\xe9\xeb\xf9?(\x16;5_u\x03@m\xc9~\x8b\xe0\xc5\xf9\xbf\x90\x85\x1d\x9a\xdal\xce\xbf\xa1\xe8\xac\x07\xb0\x9e\xea?\xea*C\x97o8\xd1?\xb5l&\xe1\x99\xc8\x01@H\x84\xd5\x086J\xd7?=\x9e\xed\x08+\x95\xe1\xbf\xdao@\x94\x18U\xeb?\xcd\xd7\xc1\xd8(\x0e\xdb?P\x15|}f\xa2\xcf?\xce\xde(*B\xe6\xe9\xbf\xc6\x81\x86\x98\x86\x07\xeb\xbfU\x1b\xb3=\xdcn\xe6\xbf\xa9\xfc\xb2\xc0\x11L\xde?\xfb\xefFV\t\'\xf9?^!\xfe#\xc2\xdb\xe3\xbfL\x91\x05g\xb2y\x03@Ea\xba\xe4.\x10\xe7?"Ue\xd40c\xf4?\xa8\x80X\xe7r\xc9\xeb\xbfb-M\xec\xc0\t\xf2\xbf\xa1\xf3"\xa0\xee \xf3?\x07\x91O\x86\x9c\xa5\xd9?\xa0\x06\x92\xd7\x0fX\xfd?\x82\x16\x81R-J\x07@\xbb\xf3$B\xcc\x02\x02@\xe6:\xc5\x9a\xac\xfc\xeb\xbf.b\xab\xdd\x1b\xad\xe4\xbf\xfa\x98\xbc\xa0,|\xe6\xbf?\xd4?\xac&p\xe3?9\xe3:\xde;\xe9\xe3\xbf\x9b[\xc7\xf2\x9f\xa5\xb2\xbf\x02\xb5\x89\x11\xfe\xc2\xce?[\x1b\x9blo\x8a\xa1\xbf5\xa2\x89\xa9a"\xbc\xbfIDn\xd6\x1a\n\xd0\xbfLy\xa9z\xd1\xe9\xf4?\xa7{\xb5\x0b:}\xda?\xb1\x0e\xdf\x95{\x03\xfe?5\x8a\x0c\xa1\x0f\x9f\xfb?\x87\xc8\xb9\xa1p\x0b\xaa\xbf\xd3\xdb\x0b~\xbd\xbe\xe2?\x9d\xc8X\x07Y\xd6\xf0?v\x84\x9f\x1b\x05\xe8\xf9?\xc9.Px\xc9Z\x01@\xc3\x1c;\xe9\xce\xcf\xd5?\xd3\xe5L\xcc\x91\x13\xd6\xbf\x0e\xa5\xc63T2\xf6?K\x11\xe6\xba\xe6\x89\xf0?>\xc8|\xa6JG\xed\xbf|^\xc3\xeb\xe8\xe7\xbf\xbf\xb6\x9dO\x88\xfeu\x03\xc0V\xaf\xcb\xc3\xc5\xf3\x01\xc0\x99!J\xd6L\x1b\xab\xbf\xcc\xda\xbc\xa5=/\xfc\xbf5\x93f\xf1\r*\xdd\xbf\x8cK\xe7\xefm\xed\xac\xbf\x07\xe3Z\xc0\xad\xb5\xe2\xbf:\xae\xc9\xa9o\x0e\xe2\xbf4\xa9\xc2\x0eQ \\\xbf\xfe\xba\xca\xd6\x10"\xe1?\x0c\x03\x97X8`\xf3\xbf\xbd\x8ePaj\x9c\xf0?\x04hl.\x95\x00\xb4\xbfl\xc8zp\xe9\xb5\xcb?\xc4\xdb6\xb0\x13\xc3\xf9?q\xd8[{\xb3\xeb\xf3?\x1fu\xb6[\xd8\t\xf7?h\xac\x1b\x01\xf2\xaf\xeb\xbf\xf1\xf8;\xdch?\xe8?5\xbd\xa2\xcb\x14\xc2\x12@"\xd0\xe3\xd4\xbb\xe3\xf3?Xv\xd6\x19-P\xc0?sY%xml\xd3?*\xc6\xac\x19\x91\xe6\xe8\xbf\x1b\x7f\xf0G\x8e\xb9\xfd?\x81\xedK\xe7\x04a\xe1?\xd1\xd3\x05\x9e\xc94\xd4?\xe9\xd3v\xf9c\x8b\xec?\xd4,\xcfX\xf9\xb8\xe4?\x0f \x1a\x92\xd0\xbd\x05\xc0B\xf6\x82\xc7\xae\xe8\xe0?J)\n\xadG\x9e\xce\xbfFA\xb5_!\xfc\xca\xbfm$\xbd2\x85\xbe\xd6\xbf\xb0\x16\x10\t\x01N\xea?\xd9K\x98\xf7\xc5z\xf2?F\xfa\xa3\x1c\xafJ\xe3\xbf\x9c6m#%\xb7\xd9\xbfj,\xe1\x11\r\xa1\xeb?C\xa4\x0eJ\xc7v\xeb?\xdc9[\xfc\xcfP\xdb\xbf]`7F%\xc7\xf2?\xe6\x96z]\xd3\xfa\xe8?\xca\xe4\xe2\'\x0b\x93\xe3?\xf1\xd8\x9c\xed\x0f\xe8\x07@\xd161\xc7\xd8\xc8\xe5?_\xab~\x0e\xd8_\xef?=\x0e|\x83\x84\xfe\x00@F\xc1\xc1\x1e\x1f\x08\xed?\x83\xb2\xb1\xa5$\\\x00@\xe8f\x8d/\'\x15\xd0\xfc?\x9e}\x8c\x8b\xb9\x9a\xaa?\xd20\xc5\xc6\x99\xcd\xec\xbf\xffc\xd4[\xc0\xc4\xaf?C\\r\xa5\xcbZ\xc9\xbf\xdb\x01<\xcc\xe0P\xfd?\xba\xb1\x85\xe4\xdb$\x01@5u\x9e\xcc;\xb5\xe7?\x15R\x06>S\xbd\xf6?\x1a\xb3y\x86\r\xc7\xfd?\x13\xb6\xf4\xc0\x12\xee\t@\x07\x1a\xd3\xc0\xf6\xe8\x92\xbf\x1b\x90\xb9\x94\xfeB\xe5?\x7f\x08b\x97\xd8M\x02@\xb8\xef\xb2\xdc\'\x03\xe0?w\x84\x83->D\xd4?d\x96\xf3\xd7\xb5\t\xc2\xbf\xc10\x01w\xe4\x91\xef\xbf\x96\x88\x04j$l\xe5\xbf]\xc26\x03dG\xeb\xbf\x9a\xe1^\xa1\xff\x01\xf2\xbf\xa5\x0b6\x9c9\xb5\xc0?\xa4\xca\xc5\xa5\x14m\xe1?\xa1wf_U\xd5\xb6?_\xa3\x05\x86x\x9c\xd9?5\x8d\xc1]%v\xf4\xbfv\xf8_\n\xd2\x07\xde\xbf\xd8\xbf$L\x7f\xd9\xc1\xa0\x00\xc0\x96\xf0m\x8d0\xb6\x00@_7\xe3\x82\x87\x8f\t\xc0\xc23\xb9M+{\x04\xc0\xee\xb7\xdc1\xac\xb5\xff?\xa8\xeff\xa8\xa1X\xd1\xbfLC(8\xee\x97\xbd?\xc7m\xcb\xef\xbc\xf4\x1c@U\xfa_p\x8bV\x00@`\xa3\xb5\xa5u\xc9\x11@\xf42\xe2#\xc0t\x17\xc0\xaeM\x18WT\xea\xf8\xbf5\x98\xcb\x01\r* @\xb9\xe5\x85\xc7L*\x00@\xdc!\xa5a\xd4\xf9\r@d\x01*6\xa4\x8d\r\xc0\xac\x007\xfc\xa1\xfe\x0b\xc0zj\xc0l\xa55\xdb?\xb5\xd4\x9d\xde\x84\xd0b?s\xff:9\xf3j\x15\xc0\x96\x1c\x0b\xd2\'\x1c\xf2?F\x06w\xc6\x02\x98\x1a@F\x04u%8\x95\xfa?\xa1\xbd\xa3<\xea\xc2\x01\xc0K\x9a\x8d\xe2\x8c\x0f\t\xc0]G\x16\x9d\xb5\x14\x1b\xc0\xad@\xc1v\xa3\xec\xee?\xe1\xcb\x82[\x8f\xb0\xf8?h\x7f\xb0H\x12\xca\x0f@\xab\x08\x0b][\xbe\n@i\xaa\xd8\xce\xb6r\x16@"\t\x8a\xdfA\x91\xf9\xbf\xdd\x1f\xa8\xba\x9dM\x1b\xc0\xb1\x97\xb2W\xd1\xd3\x12@\\\xaf\xa6m\x99\x87\xfc\xbfO\x8c\xd2\xe3\xae#\xbf?\x81n\xeb\x04\xf7\xba\xe1?\xc6\xee\xd9\xb8\xc01\xf9\xbf\xd5\x1f\xe7\xa8\xfdY\t\xc0\x8f\x87\x04\x1bZ\x9b\xfb?\xe7\xf6\xf7\xa1]\xc7\xf8\xbf\x00\xffCh\xb0\x9f\xe7?\xf1\x87Q\xc9m\\\x17@\xe4C\x82\xe1\x80\t\x05\xc0\x7f\xde\x92z{{\x0b@W\xe6\xc2\xdby^\x03\xc0\xcc\xf0\n}\xdbx\x05\xc0=\xa6\xf3\xa9\xfdE\xfd\xbf4q\x85=.\xbe\x05\xc0\xc2\xa0\x19\x10\xdcl\x08@\x14\xaa4\xce\x14\x86\xfa\xbf\xaf\xcc5G\xf0\xd5\x1e\xc0P.$^\x94\x9d\x11\xc0\xc8\xaa\xca(\x8f{\x0f\xc0:q\xad\x1b\xf9Q\x01@}\xde\xf6\xa3\x1a\x1b\xea?\xeb\x19\xc0J\x11\xb2\xb8\xbf\x92\x8f8\xfb\xdf\xe6\x1b\xc0q*\x02e*\xa1\x06@\xd4\xa7\xc5F\\\x18\x02\xc0\xe96\x10\xe4\xb4D\x0f\xc0N\xfc\xc8\xfd:\xf6\xdb\xbf' +tbg1 +(g2 +(I0 +tS'b' +tRp7 +(I1 +(I10 +I1 +tg5 +I00 +S'\xad\xe6(\x12\xef\xd0\xaa\xbf\x7f\xbdB\xa0\x82\x8c\x1f@\xe6\xd7\xef\x00q\xbc\xf1?\x1d\xab\xfa\x9a;\xe9\xb0?E\x0b24\x10)\xf9?\xf9P\x86\xf7\x00\xd0\x10@\xde\x89\xf0\xf1\x8c\xa5\x0b@\x18\xeb\xf4N\xf1\xaa\xf3?\xd64\xd7\xc7\xf2F\x00\xc0N\n\xdf\x08\x14x)@' +tbg1 +(g2 +(I0 +tS'b' +tRp8 +(I1 +(I10 +I1 +tg5 +I00 +S'\xcd(\xef\xf6\xae`\x0c\xc0\xd83\x80\x90`\x9e0\xc0\xb9\xdc1\x80X^\x1a\xc0\xcc).\x98Y\xe0\x11\xc0myx\x94\xf6\xba&\xc0\xde3M%\xd2\x8f$\xc0\xacQx\x89\x06\xc1%\xc0\xfb\xaa \xec\x9en\xf3\xbf\x1b\x8b\xf0H/\xf0 \xc0\x90\xf7\x0c$\xc3\xa9\x94?' +tbt. \ No newline at end of file diff --git a/samples/Pickle/random.pkl b/samples/Pickle/random.pkl new file mode 100644 index 00000000..ff3ab064 --- /dev/null +++ b/samples/Pickle/random.pkl @@ -0,0 +1,36 @@ +cnumpy.core.multiarray +_reconstruct +p0 +(cnumpy +ndarray +p1 +(I0 +tp2 +S'b' +p3 +tp4 +Rp5 +(I1 +(I100 +tp6 +cnumpy +dtype +p7 +(S'f8' +p8 +I0 +I1 +tp9 +Rp10 +(I3 +S'<' +p11 +NNNI-1 +I-1 +I0 +tp12 +bI00 +S'\x1cc~\xc3\xa7r\xed?\xe5${\xec\xd6\xcd\xed?\x809-\x02%\xa9\xa2?F\x0f\x1d\xe8\xef\xa3\xdb?\xfe\xd1\x0c\xb7\x83\x13\xef?\xe0\xfcO\xe5?Y\x97\xcb"\xa7%\xe7?\x9b\x8d\x16\xda\x97\xe1\xeb?T\x14\xbd\xfe|\xf4\xd0?\x18\xdfH\xc56A\xba?\x90\xc5\xfb\xc63:\xe5?\xbf%\xad\xe5.\x86\xe9?\xc6\x0c\xa9\x8c\xd7\xd5\xe9?\xf8\xafc:\x84g\xd7?\xf8\x98\x879\x9a\x16\xee?\xba\xdf\x88\x8az\x06\xe2?~g-\xeb\xc8\xed\xee?\x08A\xcc\x8c\xe7>\xef?\xceD\xc4ar\n\xdc?\x92w\xbb\xa34\xb1\xd9?\x88\xb9\xc0{u\xa3\xdc?d\x1a\xad\xe8\xf3\x14\xdd?\x9c\x95\x13\x96o?\xe5?\x9cT[\xb8r\xa9\xe5?0\xf1\x01+(\x0f\xdf?W\xbdjqD&\xed?c\xcf1-W\xe6\xe1?\xce\xbc\xe1{zW\xd9?"d\xcf\xd7\x13\x93\xde?\xf2P\xf6\xc3\xd6\x87\xd5?\xc2\x0e\x92q\x89\xda\xd5?\xc0:B\x1bb\x00\x9e?Y\xafHmr\x80\xe3?\x1co\xa7\xba\xa5/\xe4?\xa2\xbc \x9c\xddB\xd0?\xd2L\x935\x17\'\xee?|\x8cM\xeb\x97=\xe8?\x0f0xN*V\xea?\x81p\xe3,!\xf2\xee?\xf5w\xed\x10\x9eu\xe0?\xc5\x16\\LR\xb5\xe1?\xbeh\x04\xa4g\xe5\xd6?\xea\xc0\xb9\xf0\xb2\xd8\xd9?\xac\x9c\xeep\x1a\xa9\xd8?@W9hp\x16\xb1?\xc4\xedS\xd6V\xa1\xed?\x93,!\xdc\xa1\x8b\xe9?\x80)\xb1\xa6[T\xc9?\xac\xbc\x8a\xd21\xdd\xc5?\x80\x9c.g\xf1\xf2\xc6?\tLu\xc3\xf7U\xe9?n\'\x9f?\xbe\xf9\xe9?\xa3\xe7K\x1c\xb3\xa9\xea?X\x98\x1a\xcb\xa0\xcd\xd3? \xb6O\x9c\x1bQ\xc2?"\x89[\xad1\x8e\xea?\xdd\x8f\xa0P\xc7\x0e\xe2?c\xa4j\xa3\r\xac\xef?\xba\xb6\x0f\x8emo\xef?\xe0\xed\xa0\xc5R9\xab?U\xf1\xcd\xcf\xbf\xcb\xea?\x89*#\x06\xb0|\xe8?d\xa3\xad\xcd\xe0]\xcc?\xb5\xe78\xa7w\x13\xe3?\xce\x99\x98\xefS%\xd7?\xb1\xf8\xd8\x8eI\x13\xef?\x91`]\x93\xd4 \xec?\xc0\rPz\xee\xbd\xe7?7\x92\xd4\x0fP\x8f\xe1?L\x0f\xaf\xa9\xc3\x19\xdd?\\}\x15X\x870\xc7? ~ t\xcat\xb1?@?\xec\x97u\x05\xe9?F\x8d:\xac4D\xdb?qY\xe1Qk|\xe2? \xaf\xeaj\xa5\x04\xab?J[\x1al;\x00\xd5?\x00^{n\xc2\xf1S?\xb0\x82dN\xda\xb5\xc7?\xe0 \x07\xe1?R\x92?\xc4\r\x08+\x99J\xe1?I|&U\x19\xc4\xe1?|*\xf9\xebq\x7f\xed?\xbc*\x93\x89k\xab\xe9?oiL\x90;\xe0\xef?\x96\xcd\x9b\xff\x18g\xdc?pt\xb4\xa5\x9c\xa2\xbc?Nu]w*\xb7\xd2?\x88k\xac\xd0\xfd\xbf\xd5?Q\x02$b\xfeH\xea?5\xf6\t\xb6K\x1a\xee?' +p13 +tp14 +b. \ No newline at end of file diff --git a/samples/Pickle/save.pkl b/samples/Pickle/save.pkl new file mode 100644 index 00000000..13889c0c --- /dev/null +++ b/samples/Pickle/save.pkl @@ -0,0 +1,10 @@ +(dp0 +S'lion' +p1 +S'yellow' +p2 +sS'kitty' +p3 +S'red' +p4 +s. \ No newline at end of file diff --git a/samples/PicoLisp/simul.l b/samples/PicoLisp/simul.l new file mode 100644 index 00000000..df4c219c --- /dev/null +++ b/samples/PicoLisp/simul.l @@ -0,0 +1,165 @@ +# 11dec13abu +# (c) Software Lab. Alexander Burger + +(de permute (Lst) + (ifn (cdr Lst) + (cons Lst) + (mapcan + '((X) + (mapcar + '((Y) (cons X Y)) + (permute (delete X Lst)) ) ) + Lst ) ) ) + +(de subsets (N Lst) + (cond + ((=0 N) '(NIL)) + ((not Lst)) + (T + (conc + (mapcar + '((X) (cons (car Lst) X)) + (subsets (dec N) (cdr Lst)) ) + (subsets N (cdr Lst)) ) ) ) ) + +(de shuffle (Lst) + (by '(NIL (rand)) sort Lst) ) + +(de samples (Cnt Lst) + (make + (until (=0 Cnt) + (when (>= Cnt (rand 1 (length Lst))) + (link (car Lst)) + (dec 'Cnt) ) + (pop 'Lst) ) ) ) + + +# Genetic Algorithm +(de gen ("Pop" "Cond" "Re" "Mu" "Se") + (until ("Cond" "Pop") + (for ("P" "Pop" "P" (cdr "P")) + (set "P" + (maxi "Se" # Selection + (make + (for ("P" "Pop" "P") + (rot "P" (rand 1 (length "P"))) + (link # Recombination + Mutation + ("Mu" ("Re" (pop '"P") (pop '"P"))) ) ) ) ) ) ) ) + (maxi "Se" "Pop") ) + + +# Alpha-Beta tree search +(de game ("Flg" "Cnt" "Moves" "Move" "Cost") + (let ("Alpha" '(1000000) "Beta" -1000000) + (recur ("Flg" "Cnt" "Alpha" "Beta") + (let? "Lst" ("Moves" "Flg") + (if (=0 (dec '"Cnt")) + (loop + ("Move" (caar "Lst")) + (setq "*Val" (list ("Cost" "Flg") (car "Lst"))) + ("Move" (cdar "Lst")) + (T (>= "Beta" (car "*Val")) + (cons "Beta" (car "Lst") (cdr "Alpha")) ) + (when (> (car "Alpha") (car "*Val")) + (setq "Alpha" "*Val") ) + (NIL (setq "Lst" (cdr "Lst")) "Alpha") ) + (setq "Lst" + (sort + (mapcar + '(("Mov") + (prog2 + ("Move" (car "Mov")) + (cons ("Cost" "Flg") "Mov") + ("Move" (cdr "Mov")) ) ) + "Lst" ) ) ) + (loop + ("Move" (cadar "Lst")) + (setq "*Val" + (if (recurse (not "Flg") "Cnt" (cons (- "Beta")) (- (car "Alpha"))) + (cons (- (car @)) (cdar "Lst") (cdr @)) + (list (caar "Lst") (cdar "Lst")) ) ) + ("Move" (cddar "Lst")) + (T (>= "Beta" (car "*Val")) + (cons "Beta" (cdar "Lst") (cdr "Alpha")) ) + (when (> (car "Alpha") (car "*Val")) + (setq "Alpha" "*Val") ) + (NIL (setq "Lst" (cdr "Lst")) "Alpha") ) ) ) ) ) ) + + +### Grids ### +(de grid (DX DY FX FY) + (let Grid + (make + (for X DX + (link + (make + (for Y DY + (set + (link + (if (> DX 26) + (box) + (intern (pack (char (+ X 96)) Y)) ) ) + (cons (cons) (cons)) ) ) ) ) ) ) + (let West (and FX (last Grid)) + (for (Lst Grid Lst) + (let + (Col (pop 'Lst) + East (or (car Lst) (and FX (car Grid))) + South (and FY (last Col)) ) + (for (L Col L) + (with (pop 'L) + (set (: 0 1) (pop 'West)) # west + (con (: 0 1) (pop 'East)) # east + (set (: 0 -1) South) # south + (con (: 0 -1) # north + (or (car L) (and FY (car Col))) ) + (setq South This) ) ) + (setq West Col) ) ) ) + Grid ) ) + +(de west (This) + (: 0 1 1) ) + +(de east (This) + (: 0 1 -1) ) + +(de south (This) + (: 0 -1 1) ) + +(de north (This) + (: 0 -1 -1) ) + +(de disp ("Grid" "How" "Fun" "X" "Y" "DX" "DY") + (setq "Grid" + (if "X" + (mapcar + '((L) (flip (head "DY" (nth L "Y")))) + (head "DX" (nth "Grid" "X")) ) + (mapcar reverse "Grid") ) ) + (let (N (+ (length (cdar "Grid")) (or "Y" 1)) Sp (length N)) + ("border" north) + (while (caar "Grid") + (prin " " (align Sp N) " " + (and "How" (if (and (nT "How") (west (caar "Grid"))) " " '|)) ) + (for L "Grid" + (prin + ("Fun" (car L)) + (and "How" (if (and (nT "How") (east (car L))) " " '|)) ) ) + (prinl) + ("border" south) + (map pop "Grid") + (dec 'N) ) + (unless (> (default "X" 1) 26) + (space (inc Sp)) + (for @ "Grid" + (prin " " (and "How" " ") (char (+ 96 "X"))) + (T (> (inc '"X") 26)) ) + (prinl) ) ) ) + +(de "border" (Dir) + (when "How" + (space Sp) + (prin " +") + (for L "Grid" + (prin (if (and (nT "How") (Dir (car L))) " +" "---+")) ) + (prinl) ) ) diff --git a/samples/Pike/shebang.pike b/samples/Pike/shebang.pike new file mode 100644 index 00000000..31bf7e96 --- /dev/null +++ b/samples/Pike/shebang.pike @@ -0,0 +1,6 @@ +#!/usr/bin/env pike + +int main(int argc, array argv) { + return 0; +} + diff --git a/samples/Perl/PSGI.pod b/samples/Pod/PSGI.pod similarity index 100% rename from samples/Perl/PSGI.pod rename to samples/Pod/PSGI.pod diff --git a/samples/Pony/circle.pony b/samples/Pony/circle.pony new file mode 100644 index 00000000..06d734d7 --- /dev/null +++ b/samples/Pony/circle.pony @@ -0,0 +1,30 @@ +use "collections" + +class Circle + var _radius: F32 + + new create(radius': F32) => + _radius = radius' + + fun ref get_radius(): F32 => + _radius + + fun ref get_area(): F32 => + F32.pi() * _radius.pow(2) + + fun ref get_circumference(): F32 => + 2 * _radius * F32.pi() + +actor Main + new create(env: Env) => + + for i in Range[F32](1.0, 101.0) do + let c = Circle(i) + + var str = + "Radius: " + c.get_radius().string() + "\n" + + "Circumference: " + c.get_circumference().string() + "\n" + + "Area: " + c.get_area().string() + "\n" + + env.out.print(str) + end diff --git a/samples/Pony/counter.pony b/samples/Pony/counter.pony new file mode 100644 index 00000000..cbb583bd --- /dev/null +++ b/samples/Pony/counter.pony @@ -0,0 +1,32 @@ +use "collections" + +actor Counter + var _count: U32 + + new create() => + _count = 0 + + be increment() => + _count = _count + 1 + + be get_and_reset(main: Main) => + main.display(_count) + _count = 0 + +actor Main + var _env: Env + + new create(env: Env) => + _env = env + + var count: U32 = try env.args(1).u32() else 10 end + var counter = Counter + + for i in Range[U32](0, count) do + counter.increment() + end + + counter.get_and_reset(this) + + be display(result: U32) => + _env.out.print(result.string()) diff --git a/samples/Pony/gups-opt.pony b/samples/Pony/gups-opt.pony new file mode 100644 index 00000000..52fad32f --- /dev/null +++ b/samples/Pony/gups-opt.pony @@ -0,0 +1,261 @@ +use "options" +use "time" +use "collections" + +class Config + var logtable: U64 = 20 + var iterate: U64 = 10000 + var logchunk: U64 = 10 + var logactors: U64 = 2 + + fun ref apply(env: Env): Bool => + var options = Options(env) + + options + .add("logtable", "l", I64Argument) + .add("iterate", "i", I64Argument) + .add("chunk", "c", I64Argument) + .add("actors", "a", I64Argument) + + for option in options do + match option + | ("table", var arg: I64) => logtable = arg.u64() + | ("iterate", var arg: I64) => iterate = arg.u64() + | ("chunk", var arg: I64) => logchunk = arg.u64() + | ("actors", var arg: I64) => logactors = arg.u64() + | let err: ParseError => + err.report(env.out) + env.out.print( + """ + gups_opt [OPTIONS] + --table N log2 of the total table size. Defaults to 20. + --iterate N number of iterations. Defaults to 10000. + --chunk N log2 of the chunk size. Defaults to 10. + --actors N log2 of the actor count. Defaults to 2. + """ + ) + return false + end + end + + env.out.print( + "logtable: " + logtable.string() + + "\niterate: " + iterate.string() + + "\nlogchunk: " + logchunk.string() + + "\nlogactors: " + logactors.string() + ) + true + +actor Main + let _env: Env + let _config: Config = Config + + var _updates: U64 = 0 + var _confirm: U64 = 0 + let _start: U64 + var _actors: Array[Updater] val + + new create(env: Env) => + _env = env + + if _config(env) then + let actor_count = 1 << _config.logactors + let loglocal = _config.logtable - _config.logactors + let chunk_size = 1 << _config.logchunk + let chunk_iterate = chunk_size * _config.iterate + + _updates = chunk_iterate * actor_count + _confirm = actor_count + + var updaters = recover Array[Updater](actor_count) end + + for i in Range[U64](0, actor_count) do + updaters.push(Updater(this, actor_count, i, loglocal, chunk_size, + chunk_iterate * i)) + end + + _actors = consume updaters + _start = Time.nanos() + + for a in _actors.values() do + a.start(_actors, _config.iterate) + end + else + _start = 0 + _actors = recover Array[Updater] end + end + + be done() => + if (_confirm = _confirm - 1) == 1 then + for a in _actors.values() do + a.done() + end + end + + be confirm() => + _confirm = _confirm + 1 + + if _confirm == _actors.size() then + let elapsed = (Time.nanos() - _start).f64() + let gups = _updates.f64() / elapsed + + _env.out.print( + "Time: " + (elapsed / 1e9).string() + + "\nGUPS: " + gups.string() + ) + end + +actor Updater + let _main: Main + let _index: U64 + let _updaters: U64 + let _chunk: U64 + let _mask: U64 + let _loglocal: U64 + + let _output: Array[Array[U64] iso] + let _reuse: List[Array[U64] iso] = List[Array[U64] iso] + var _others: (Array[Updater] val | None) = None + var _table: Array[U64] + var _rand: U64 + + new create(main:Main, updaters: U64, index: U64, loglocal: U64, chunk: U64, + seed: U64) + => + _main = main + _index = index + _updaters = updaters + _chunk = chunk + _mask = updaters - 1 + _loglocal = loglocal + + _rand = PolyRand.seed(seed) + _output = _output.create(updaters) + + let size = 1 << loglocal + _table = Array[U64].undefined(size) + + var offset = index * size + + try + for i in Range[U64](0, size) do + _table(i) = i + offset + end + end + + be start(others: Array[Updater] val, iterate: U64) => + _others = others + iteration(iterate) + + be apply(iterate: U64) => + iteration(iterate) + + fun ref iteration(iterate: U64) => + let chk = _chunk + + for i in Range(0, _updaters) do + _output.push( + try + _reuse.pop() + else + recover Array[U64](chk) end + end + ) + end + + for i in Range(0, _chunk) do + var datum = _rand = PolyRand(_rand) + var updater = (datum >> _loglocal) and _mask + + try + if updater == _index then + _table(i) = _table(i) xor datum + else + _output(updater).push(datum) + end + end + end + + try + let to = _others as Array[Updater] val + + repeat + let data = _output.pop() + + if data.size() > 0 then + to(_output.size()).receive(consume data) + else + _reuse.push(consume data) + end + until _output.size() == 0 end + end + + if iterate > 1 then + apply(iterate - 1) + else + _main.done() + end + + be receive(data: Array[U64] iso) => + try + for i in Range(0, data.size()) do + let datum = data(i) + var j = (datum >> _loglocal) and _mask + _table(j) = _table(j) xor datum + end + + data.clear() + _reuse.push(consume data) + end + + be done() => + _main.confirm() + +primitive PolyRand + fun apply(prev: U64): U64 => + (prev << 1) xor if prev.i64() < 0 then _poly() else 0 end + + fun seed(from: U64): U64 => + var n = from % _period() + + if n == 0 then + return 1 + end + + var m2 = Array[U64].undefined(64) + var temp = U64(1) + + try + for i in Range(0, 64) do + m2(i) = temp + temp = this(temp) + temp = this(temp) + end + end + + var i: U64 = 64 - n.clz() + var r = U64(2) + + try + while i > 0 do + temp = 0 + + for j in Range(0, 64) do + if ((r >> j) and 1) != 0 then + temp = temp xor m2(j) + end + end + + r = temp + i = i - 1 + + if ((n >> i) and 1) != 0 then + r = this(r) + end + end + end + r + + fun _poly(): U64 => 7 + + fun _period(): U64 => 1317624576693539401 diff --git a/samples/Pony/hello-world.pony b/samples/Pony/hello-world.pony new file mode 100644 index 00000000..9f7258e2 --- /dev/null +++ b/samples/Pony/hello-world.pony @@ -0,0 +1,3 @@ +actor Main + new create(env: Env) => + env.out.print("Hello, world.") diff --git a/samples/Pony/mandelbrot.pony b/samples/Pony/mandelbrot.pony new file mode 100644 index 00000000..cae7ea1d --- /dev/null +++ b/samples/Pony/mandelbrot.pony @@ -0,0 +1,188 @@ +use "files" +use "options" +use "collections" + +actor Worker + new mandelbrot(main: Main, x: U64, y: U64, width: U64, iterations: U64, + limit: F32, real: Array[F32] val, imaginary: Array[F32] val) + => + var view: Array[U8] iso = + recover + Array[U8]((y - x) * (width >> 3)) + end + + let group_r = Array[F32].undefined(8) + let group_i = Array[F32].undefined(8) + + var row = x + + try + while row < y do + let prefetch_i = imaginary(row) + + var col: U64 = 0 + + while col < width do + var j: U64 = 0 + + while j < 8 do + group_r.update(j, real(col + j)) + group_i.update(j, prefetch_i) + j = j + 1 + end + + var bitmap: U8 = 0xFF + var n = iterations + + repeat + var mask: U8 = 0x80 + var k: U64 = 0 + + while k < 8 do + let r = group_r(k) + let i = group_i(k) + + group_r.update(k, ((r * r) - (i * i)) + real(col + k)) + group_i.update(k, (2.0 * r * i) + prefetch_i) + + if ((r * r) + (i * i)) > limit then + bitmap = bitmap and not mask + end + + mask = mask >> 1 + k = k + 1 + end + until (bitmap == 0) or ((n = n - 1) == 1) end + + view.push(bitmap) + + col = col + 8 + end + row = row + 1 + end + + main.draw(x * (width >> 3), consume view) + end + +actor Main + var iterations: U64 = 50 + var limit: F32 = 4.0 + var chunks: U64 = 16 + var width: U64 = 16000 + var actors: U64 = 0 + var header: U64 = 0 + var real: Array[F32] val = recover Array[F32] end + var imaginary: Array[F32] val = recover Array[F32] end + var outfile: (File | None) = None + + new create(env: Env) => + try + arguments(env) + + let length = width + let recip_width = 2.0 / width.f32() + + var r = recover Array[F32](length) end + var i = recover Array[F32](length) end + + for j in Range(0, width) do + r.push((recip_width * j.f32()) - 1.5) + i.push((recip_width * j.f32()) - 1.0) + end + + real = consume r + imaginary = consume i + + spawn_actors() + create_outfile() + end + + be draw(offset: U64, pixels: Array[U8] val) => + match outfile + | var out: File => + out.seek_start(header + offset) + out.write(pixels) + if (actors = actors - 1) == 1 then + out.dispose() + end + end + + fun ref create_outfile() => + match outfile + | var f: File => + f.print("P4\n " + width.string() + " " + width.string() + "\n") + header = f.size() + f.set_length((width * (width >> 3)) + header) + end + + fun ref spawn_actors() => + actors = ((width + (chunks - 1)) / chunks) + + var rest = width % chunks + + if rest == 0 then rest = chunks end + + var x: U64 = 0 + var y: U64 = 0 + + for i in Range(0, actors - 1) do + x = i * chunks + y = x + chunks + Worker.mandelbrot(this, x, y, width, iterations, limit, real, imaginary) + end + + Worker.mandelbrot(this, y, y + rest, width, iterations, limit, real, + imaginary) + + fun ref arguments(env: Env) ? => + let options = Options(env) + + options + .add("iterations", "i", I64Argument) + .add("limit", "l", F64Argument) + .add("chunks", "c", I64Argument) + .add("width", "w", I64Argument) + .add("output", "o", StringArgument) + + for option in options do + match option + | ("iterations", var arg: I64) => iterations = arg.u64() + | ("limit", var arg: F64) => limit = arg.f32() + | ("chunks", var arg: I64) => chunks = arg.u64() + | ("width", var arg: I64) => width = arg.u64() + | ("output", var arg: String) => + outfile = try File(FilePath(env.root, arg)) end + | let err: ParseError => err.report(env.out) ; usage(env) ; error + end + end + + fun tag usage(env: Env) => + env.out.print( + """ + mandelbrot [OPTIONS] + + The binary output can be converted to a BMP with the following command + (ImageMagick Tools required): + + convert JPEG:.jpg + + Available options: + + --iterations, -i Maximum amount of iterations to be done for each pixel. + Defaults to 50. + + --limit, -l Square of the limit that pixels need to exceed in order + to escape from the Mandelbrot set. + Defaults to 4.0. + + --chunks, -c Maximum line count of chunks the image should be + divided into for divide & conquer processing. + Defaults to 16. + + --width, -w Lateral length of the resulting mandelbrot image. + Defaults to 16000. + + --output, -o File to write the output to. + + """ + ) diff --git a/samples/Pony/mixed.pony b/samples/Pony/mixed.pony new file mode 100644 index 00000000..d55a161c --- /dev/null +++ b/samples/Pony/mixed.pony @@ -0,0 +1,130 @@ +use "collections" + +actor Worker + var _env: Env + + new create(env: Env) => + _env = env + + var a: U64 = 86028157 + var b: U64 = 329545133 + + var result = factorize(a*b) + + var correct = + try + (result.size() == 2) and + (result(0) == 86028157) and + (result(1) == 329545133) + else + false + end + + fun ref factorize(bigint: U64) : Array[U64] => + var factors = Array[U64](2) + + if bigint <= 3 then + factors.push(bigint) + else + var d: U64 = 2 + var i: U64 = 0 + var n = bigint + + while d < n do + if (n % d) == 0 then + i = i + 1 + factors.push(d) + n = n / d + else + d = if d == 2 then 3 else (d + 2) end + end + end + + factors.push(d) + end + + factors + +actor Ring + var _env: Env + var _size: U32 + var _pass: U32 + var _repetitions: U32 + var _next: Ring + + new create(env: Env, size: U32, pass: U32, repetitions: U32) => + _env = env + _size = size + _pass = pass + _repetitions = repetitions + _next = spawn_ring(_env, _size, _pass) + run() + + new neighbor(env: Env, next: Ring) => + _env = env + _next = next + _size = 0 + _pass = 0 + _repetitions = 0 + + be apply(i: U32) => + if i > 0 then + _next(i - 1) + else + run() + end + + fun ref run() => + if _repetitions > 0 then + _repetitions = _repetitions - 1 + _next(_pass * _size) + Worker(_env) + end + + fun tag spawn_ring(env: Env, size: U32, pass': U32) : Ring => + var next: Ring = this + + for i in Range[U32](0, size) do + next = Ring.neighbor(env, next) + end + + next + +actor Main + var _size: U32 = 50 + var _count: U32 = 20 + var _pass: U32 = 10000 + var _repetitions: U32 = 5 + var _env: Env + + new create(env: Env) => + _env = env + + try + arguments() + start_benchmark() + else + usage() + end + + fun ref arguments() ? => + _count = _env.args(1).u32() + _size = _env.args(2).u32() + _pass = _env.args(3).u32() + _repetitions = _env.args(4).u32() + + fun ref start_benchmark() => + for i in Range[U32](0, _count) do + Ring(_env, _size, _pass, _repetitions) + end + + fun ref usage() => + _env.out.print( + """ + mixed OPTIONS + N number of actors in each ring" + N number of rings" + N number of messages to pass around each ring" + N number of times to repeat" + """ + ) diff --git a/samples/PowerShell/ZLocation.psd1 b/samples/PowerShell/ZLocation.psd1 new file mode 100644 index 00000000..fcf90ef9 --- /dev/null +++ b/samples/PowerShell/ZLocation.psd1 @@ -0,0 +1,116 @@ +# +# Module manifest for module 'ZLocation' +# +# Generated by: sevoroby +# +# Generated on: 12/10/2014 +# + +@{ + +# Script module or binary module file associated with this manifest. +RootModule = 'ZLocation.psm1' + +# Version number of this module. +ModuleVersion = '0.1' + +# ID used to uniquely identify this module +GUID = '18e8ca17-7f67-4f1c-85ff-159373bf66f5' + +# Author of this module +Author = 'Sergei Vorobev' + +# Company or vendor of this module +CompanyName = 'Microsoft' + +# Copyright statement for this module +Copyright = '(c) 2014 Sergei Vorobev. All rights reserved.' + +# Description of the functionality provided by this module +# Description = '' + +# Minimum version of the Windows PowerShell engine required by this module +# PowerShellVersion = '' + +# Name of the Windows PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the Windows PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module +# CLRVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +# RequiredModules = @() + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +# TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +NestedModules = @("ZLocation.Storage.psm1", "ZLocation.Search.psm1") + +# Functions to export from this module +FunctionsToExport = '*' + +# Cmdlets to export from this module +CmdletsToExport = '*' + +# Variables to export from this module +VariablesToExport = '*' + +# Aliases to export from this module +AliasesToExport = '*' + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +# FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. +PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + # Tags = @() + + # A URL to the license for this module. + # LicenseUri = '' + + # A URL to the main website for this project. + # ProjectUri = '' + + # A URL to an icon representing this module. + # IconUri = '' + + # ReleaseNotes of this module + # ReleaseNotes = '' + + } # End of PSData hashtable + +} # End of PrivateData hashtable + +# HelpInfo URI of this module +# HelpInfoURI = '' + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} diff --git a/samples/PowerShell/ZLocation.psm1 b/samples/PowerShell/ZLocation.psm1 new file mode 100644 index 00000000..5ab91146 --- /dev/null +++ b/samples/PowerShell/ZLocation.psm1 @@ -0,0 +1,91 @@ +# +# Weight function. +# +function Update-ZLocation([string]$path) +{ + $now = [datetime]::Now + if (Test-Path variable:global:__zlocation_current) + { + $prev = $global:__zlocation_current + $weight = $now.Subtract($prev.Time).TotalSeconds + Add-ZWeight ($prev.Location) $weight + } + + $global:__zlocation_current = @{ + Location = $path + Time = [datetime]::Now + } + + # populate folder immidiatly after the first cd + Add-ZWeight $path 0 +} + +# this approach hurts `cd` performance (0.0008 sec vs 0.025 sec). +# Consider replace it with OnIdle Event. +(Get-Variable pwd).attributes.Add((new-object ValidateScript { Update-ZLocation $_.Path; return $true })) +# +# End of weight function. +# + + +# +# Tab complention. +# +if (Test-Path Function:\TabExpansion) { + Rename-Item Function:\TabExpansion PreZTabExpansion +} + +function Get-EscapedPath +{ + param( + [Parameter( + Position=0, + Mandatory=$true, + ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true) + ] + [string]$path + ) + + process { + if ($path.Contains(' ')) + { + return '"' + $path + '"' + } + return $path + } +} + +function global:TabExpansion($line, $lastWord) { + switch -regex ($line) { + "^(Set-ZLocation|z) .*" { + $arguments = $line -split ' ' | Where { $_.length -gt 0 } | select -Skip 1 + Find-Matches (Get-ZLocation) $arguments | Get-EscapedPath + } + default { + if (Test-Path Function:\PreZTabExpansion) { + PreZTabExpansion $line $lastWord + } + } + } +} +# +# End of tab completion. +# + +function Set-ZLocation() +{ + if (-not $args) { + $args = @() + } + $matches = Find-Matches (Get-ZLocation) $args + if ($matches) { + Push-Location ($matches | Select-Object -First 1) + } else { + Write-Warning "Cannot find matching location" + } +} + + +Set-Alias -Name z -Value Set-ZLocation +Export-ModuleMember -Function Set-ZLocation, Get-ZLocation -Alias z \ No newline at end of file diff --git a/samples/PowerShell/hello.ps1 b/samples/PowerShell/hello.ps1 deleted file mode 100644 index eca1e76c..00000000 --- a/samples/PowerShell/hello.ps1 +++ /dev/null @@ -1,2 +0,0 @@ -# Hello world in powershell -Write-Host 'Hello World' \ No newline at end of file diff --git a/samples/PowerShell/hello.psm1 b/samples/PowerShell/hello.psm1 deleted file mode 100644 index 3db82f01..00000000 --- a/samples/PowerShell/hello.psm1 +++ /dev/null @@ -1,5 +0,0 @@ -# Hello World powershell module - -function hello() { - Write-Host 'Hello World' -} \ No newline at end of file diff --git a/samples/PowerShell/history.ps1 b/samples/PowerShell/history.ps1 new file mode 100644 index 00000000..3161a3cb --- /dev/null +++ b/samples/PowerShell/history.ps1 @@ -0,0 +1,65 @@ +function Save-HistoryAll() { + $history = Get-History -Count $MaximumHistoryCount + [array]::Reverse($history) + $history = $history | Group CommandLine | Foreach {$_.Group[0]} + [array]::Reverse($history) + $history | Export-Csv $historyPath +} + +function Save-HistoryIncremental() { +# Get-History -Count $MaximumHistoryCount | Group CommandLine | Foreach {$_.Group[0]} | Export-Csv $historyPath + Get-History -Count 1 | Export-Csv -Append $historyPath +} + +# hook powershell's exiting event & hide the registration with -supportevent. +#Register-EngineEvent -SourceIdentifier powershell.exiting -SupportEvent -Action { Save-History } + +$oldPrompt = Get-Content function:\prompt + +if( $oldPrompt -notlike '*Save-HistoryIncremental*' ) +{ + $newPrompt = @' +Save-HistoryIncremental + +'@ + $newPrompt += $oldPrompt + $function:prompt = [ScriptBlock]::Create($newPrompt) +} + +# load previous history, if it exists +if ((Test-Path $historyPath)) { + $loadTime = + ( + Measure-Command { + Import-Csv $historyPath | Add-History + Save-HistoryAll + Clear-History + Import-Csv $historyPath | ? {$count++;$true} | Add-History + } + ).totalseconds + Write-Host -Fore Green "`nLoaded $count history item(s) in $loadTime seconds.`n" +} + + +function Search-History() +{ + <# + .SYNOPSIS + Retrive and filter history based on query + .DESCRIPTION + .PARAMETER Name + .EXAMPLE + .LINK + #> + + param( + [string[]] $query + ) + + $history = Get-History -Count $MaximumHistoryCount + foreach ($item in $query){ + $item = $item.ToLower() + $history = $history | where {$_.CommandLine.ToLower().Contains($item)} + } + $history +} \ No newline at end of file diff --git a/samples/Prolog/dleak-report.script! b/samples/Prolog/dleak-report similarity index 100% rename from samples/Prolog/dleak-report.script! rename to samples/Prolog/dleak-report diff --git a/samples/Prolog/queues.yap b/samples/Prolog/queues.yap new file mode 100644 index 00000000..b464152e --- /dev/null +++ b/samples/Prolog/queues.yap @@ -0,0 +1,280 @@ +% This file has been included as an YAP library by Vitor Santos Costa, 1999 + +% File : QUEUES.PL +% Author : R.A.O'Keefe +% Updated: Friday November 18th, 1983, 8:09:31 pm +% Purpose: define queue operations +% Needs : lib(lists) for append/3. + +/** @defgroup Queues Queues +@ingroup library +@{ + +The following queue manipulation routines are available once +included with the `use_module(library(queues))` command. Queues are +implemented with difference lists. + +*/ + +/** + + @pred make_queue(+ _Queue_) + + +Creates a new empty queue. It should only be used to create a new queue. + + +*/ + + +/** @pred empty_queue(+ _Queue_) + + +Tests whether the queue is empty. + + +*/ +/** @pred head_queue(+ _Queue_, ? _Head_) + + +Unifies Head with the first element of the queue. + + +*/ +/** @pred join_queue(+ _Element_, + _OldQueue_, - _NewQueue_) + + +Adds the new element at the end of the queue. + + +*/ +/** @pred jump_queue(+ _Element_, + _OldQueue_, - _NewQueue_) + + +Adds the new element at the front of the list. + + +*/ +/** @pred length_queue(+ _Queue_, - _Length_) + + +Counts the number of elements currently in the queue. + + +*/ +/** @pred list_join_queue(+ _List_, + _OldQueue_, - _NewQueue_) + + +Ads the new elements at the end of the queue. + + +*/ +/** @pred list_jump_queue(+ _List_, + _OldQueue_, + _NewQueue_) + + +Adds all the elements of _List_ at the front of the queue. + + +*/ +/** @pred list_to_queue(+ _List_, - _Queue_) + + +Creates a new queue with the same elements as _List._ + + +*/ +/** @pred queue_to_list(+ _Queue_, - _List_) + + +Creates a new list with the same elements as _Queue_. + + + + + */ +/** @pred serve_queue(+ _OldQueue_, + _Head_, - _NewQueue_) + + +Removes the first element of the queue for service. + + +*/ +:- module(queues, [ + make_queue/1, % create empty queue + join_queue/3, % add element to end of queue + list_join_queue/3, % add many elements to end of queue + jump_queue/3, % add element to front of queue + list_jump_queue/3, % add many elements to front of queue + head_queue/2, % look at first element of queue + serve_queue/3, % remove first element of queue + length_queue/2, % count elements of queue + empty_queue/1, % test whether queue is empty + list_to_queue/2, % convert list to queue + queue_to_list/2 % convert queue to list + ]). + +:- use_module(library(lists), [append/3]). + +/* +:- mode + make_queue(-), + join_queue(+, +, -), + list_join_queue(+, +, -), + jump_queue(+, +, -), + list_jump_queue(+, +, -), + head_queue(+, ?), + serve_queue(+, ?, -), + length_queue(+, ?), + length_queue(+, +, +, -), + empty_queue(+), + list_to_queue(+, -), + queue_to_list(+, -), + queue_to_list(+, +, -). +*/ + +/* In this package, a queue is represented as a term Front-Back, where + Front is a list and Back is a tail of that list, and is normally a + variable. join_queue will only work when the Back is a variable, + the other routines will accept any tail. The elements of the queue + are the list difference, that is, all the elements starting at Front + and stopping at Back. Examples: + + [a,b,c,d,e|Z]-Z has elements a,b,c,d,e + [a,b,c,d,e]-[d,e] has elements a,b,c + Z-Z has no elements + [1,2,3]-[1,2,3] has no elements +*/ + +% make_queue(Queue) +% creates a new empty queue. It will also match empty queues, but +% because Prolog doesn't do the occurs check, it will also match +% other queues, creating circular lists. So this should ONLY be +% used to make new queues. + +make_queue(X-X). + + + +% join_queue(Element, OldQueue, NewQueue) +% adds the new element at the end of the queue. The old queue is +% side-effected, so you *can't* do +% join_queue(1, OldQ, NewQ1), +% join_queue(2, OldQ, NewQ2). +% There isn't any easy way of doing that, sensible though it might +% be. You *can* do +% join_queue(1, OldQ, MidQ), +% join_queue(2, MidQ, NewQ). +% See list_join_queue. + +join_queue(Element, Front-[Element|Back], Front-Back). + + + +% list_join_queue(List, OldQueue, NewQueue) +% adds the new elements at the end of the queue. The elements are +% added in the same order that they appear in the list, e.g. +% list_join_queue([y,z], [a,b,c|M]-M, [a,b,c,y,z|N]-N). + +list_join_queue(List, Front-OldBack, Front-NewBack) :- + append(List, OldBack, NewBack). + + + +% jump_queue(Element, OldQueue, NewQueue) +% adds the new element at the front of the list. Unlike join_queue, +% jump_queue(1, OldQ, NewQ1), +% jump_queue(2, OldQ, NewQ2) +% *does* work, though if you add things at the end of NewQ1 they +% will also show up in NewQ2. Note that +% jump_queue(1, OldQ, MidQ), +% jump_queue(2, MidQ, NewQ) +% makes NewQ start 2, 1, ... + +jump_queue(Element, Front-Back, [Element|Front]-Back). + + + +% list_jump_queue(List, OldQueue, NewQueue) +% adds all the elements of List at the front of the queue. There are +% two ways we might do this. We could add all the elements one at a +% time, so that they would appear at the beginning of the queue in the +% opposite order to the order they had in the list, or we could add +% them in one lump, so that they have the same order in the queue as +% in the list. As you can easily add the elements one at a time if +% that is what you want, I have chosen the latter. + +list_jump_queue(List, OldFront-Back, NewFront-Back) :- + append(List, OldFront, NewFront). +% reverse(List, OldFront, NewFront). % for the other definition + + + +% head_queue(Queue, Head) +% unifies Head with the first element of the queue. The tricky part +% is that we might be at the end of a queue: Back-Back, with Back a +% variable, and in that case this predicate should not succeed, as we +% don't know what that element is or whether it exists yet. + +head_queue(Front-Back, Head) :- + Front \== Back, % the queue is not empty + Front = [Head|_]. + + + +% serve_queue(OldQueue, Head, NewQueue) +% removes the first element of the queue for service. + +serve_queue(OldFront-Back, Head, NewFront-Back) :- + OldFront \== Back, + OldFront = [Head|NewFront]. + + + +% empty_queue(Queue) +% tests whether the queue is empty. If the back of a queue were +% guaranteed to be a variable, we could have +% empty_queue(Front-Back) :- var(Front). +% but I don't see why you shouldn't be able to treat difference +% lists as queues if you want to. + +empty_queue(Front-Back) :- + Front == Back. + + + +% length_queue(Queue, Length) +% counts the number of elements currently in the queue. Note that +% we have to be careful in checking for the end of the list, we +% can't test for [] the way length(List) does. + +length_queue(Front-Back, Length) :- + length_queue(Front, Back, 0, N), + Length = N. + +length_queue(Front, Back, N, N) :- + Front == Back, !. +length_queue([_|Front], Back, K, N) :- + L is K+1, + length_queue(Front, Back, L, N). + + + +% list_to_queue(List, Queue) +% creates a new queue with the same elements as List. + +list_to_queue(List, Front-Back) :- + append(List, Back, Front). + + + +% queue_to_list(Queue, List) +% creates a new list with the same elements as Queue. + +queue_to_list(Front-Back, List) :- + queue_to_list(Front, Back, List). + +queue_to_list(Front, Back, Ans) :- + Front == Back, !, Ans = []. +queue_to_list([Head|Front], Back, [Head|Tail]) :- + queue_to_list(Front, Back, Tail). + diff --git a/samples/Public Key/id_dsa.asc b/samples/Public Key/id_dsa.asc new file mode 100644 index 00000000..dc568f9d --- /dev/null +++ b/samples/Public Key/id_dsa.asc @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAIXi8hv+I7/bYzbve0Wg/Gv9yeZX0H/qON6rwJTPFICTncfK2t/Kc2Ec7+GYSkEIj7ok5wzHgv51SFTM6dvK/8hrjFE8frNztRK2TwZCvgYkbcBoprUstE86ZHBA1pAVPfHAOcF708Yk+KsxDONxkzu7FWw4HWqycqPtaavdcgsZAAAAFQC0uvetk3WY9sFNU71a32JKjkmTnwAAAIBlm1eGuATcZJvlk2jerZnTO54MlO/htWQrI4pZGLdhukOPgF1lsTUSwmCN8k8xxkyRL5Yl/8GUcdUfC4gbZvsbZGtvq5gFZSVTfkKJrlwykpZcaijWXtDiWSpqszs0MfexLMdpZSkNsWp7TEoWcqNLN8X7ohlsLAhcdrAbGqFblAAAAIBgW12r208h9AA3rH3t+6HKLXuPO1BQPuE+fKQg1Aet40c1gxUkCF/J+xdAITE1v7kmssZxBvDqUPgpvYCm+ZfA0j712pvt4JmQcfPn9Go003kq6/cgI4tCOy1dgQDLr0E5Jd7YqIglkr25fkDtKRFBRue3FmCGOdaM4NAAdYU48Q== lars@junk diff --git a/samples/Public Key/id_rsa.asc b/samples/Public Key/id_rsa.asc new file mode 100644 index 00000000..4c936646 --- /dev/null +++ b/samples/Public Key/id_rsa.asc @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCw3QQtYgRViVH8ZpkQ2A7BuCeyPYC4hB9kKNhxwUfJ2hFgW8soGMBhsLN+vOeAJ2IXDMsezJO2/qhoZFQMvHoWpWTRTLPeNtBsKD+nhOZX28A4D+QRzVZ6hdWoh9W+mIP69MIT3aX35oLb86IycbNdRJlEK4FAUt7tjezNkU7boQ== root@use1-2.nitrousbox.com diff --git a/samples/Public Key/sshkey1.asc b/samples/Public Key/sshkey1.asc new file mode 100644 index 00000000..ce491bc3 --- /dev/null +++ b/samples/Public Key/sshkey1.asc @@ -0,0 +1,7 @@ +---- BEGIN SSH2 PUBLIC KEY ---- +Subject: galb +Comment: 1024-bit rsa, created by galb@shimi Mon Jan 15 08:31:24 2001 +AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt459 +6k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6 +NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= +---- END SSH2 PUBLIC KEY ---- diff --git a/samples/Puppet/apacheinit.pp b/samples/Puppet/apacheinit.pp new file mode 100644 index 00000000..37d866ad --- /dev/null +++ b/samples/Puppet/apacheinit.pp @@ -0,0 +1,378 @@ +# Class: apache +# +# This class installs Apache +# +# Parameters: +# +# Actions: +# - Install Apache +# - Manage Apache service +# +# Requires: +# +# Sample Usage: +# +class apache ( + $apache_name = $::apache::params::apache_name, + $service_name = $::apache::params::service_name, + $default_mods = true, + $default_vhost = true, + $default_charset = undef, + $default_confd_files = true, + $default_ssl_vhost = false, + $default_ssl_cert = $::apache::params::default_ssl_cert, + $default_ssl_key = $::apache::params::default_ssl_key, + $default_ssl_chain = undef, + $default_ssl_ca = undef, + $default_ssl_crl_path = undef, + $default_ssl_crl = undef, + $default_ssl_crl_check = undef, + $default_type = 'none', + $ip = undef, + $service_enable = true, + $service_manage = true, + $service_ensure = 'running', + $purge_configs = true, + $purge_vhost_dir = undef, + $purge_vdir = false, + $serveradmin = 'root@localhost', + $sendfile = 'On', + $error_documents = false, + $timeout = '120', + $httpd_dir = $::apache::params::httpd_dir, + $server_root = $::apache::params::server_root, + $conf_dir = $::apache::params::conf_dir, + $confd_dir = $::apache::params::confd_dir, + $vhost_dir = $::apache::params::vhost_dir, + $vhost_enable_dir = $::apache::params::vhost_enable_dir, + $mod_dir = $::apache::params::mod_dir, + $mod_enable_dir = $::apache::params::mod_enable_dir, + $mpm_module = $::apache::params::mpm_module, + $lib_path = $::apache::params::lib_path, + $conf_template = $::apache::params::conf_template, + $servername = $::apache::params::servername, + $manage_user = true, + $manage_group = true, + $user = $::apache::params::user, + $group = $::apache::params::group, + $keepalive = $::apache::params::keepalive, + $keepalive_timeout = $::apache::params::keepalive_timeout, + $max_keepalive_requests = $::apache::params::max_keepalive_requests, + $logroot = $::apache::params::logroot, + $logroot_mode = $::apache::params::logroot_mode, + $log_level = $::apache::params::log_level, + $log_formats = {}, + $ports_file = $::apache::params::ports_file, + $docroot = $::apache::params::docroot, + $apache_version = $::apache::version::default, + $server_tokens = 'OS', + $server_signature = 'On', + $trace_enable = 'On', + $allow_encoded_slashes = undef, + $package_ensure = 'installed', + $use_optional_includes = $::apache::params::use_optional_includes, +) inherits ::apache::params { + validate_bool($default_vhost) + validate_bool($default_ssl_vhost) + validate_bool($default_confd_files) + # true/false is sufficient for both ensure and enable + validate_bool($service_enable) + validate_bool($service_manage) + validate_bool($use_optional_includes) + + $valid_mpms_re = $apache_version ? { + '2.4' => '(event|itk|peruser|prefork|worker)', + default => '(event|itk|prefork|worker)' + } + + if $mpm_module { + validate_re($mpm_module, $valid_mpms_re) + } + + if $allow_encoded_slashes { + validate_re($allow_encoded_slashes, '(^on$|^off$|^nodecode$)', "${allow_encoded_slashes} is not permitted for allow_encoded_slashes. Allowed values are 'on', 'off' or 'nodecode'.") + } + + # NOTE: on FreeBSD it's mpm module's responsibility to install httpd package. + # NOTE: the same strategy may be introduced for other OSes. For this, you + # should delete the 'if' block below and modify all MPM modules' manifests + # such that they include apache::package class (currently event.pp, itk.pp, + # peruser.pp, prefork.pp, worker.pp). + if $::osfamily != 'FreeBSD' { + package { 'httpd': + ensure => $package_ensure, + name => $apache_name, + notify => Class['Apache::Service'], + } + } + validate_re($sendfile, [ '^[oO]n$' , '^[oO]ff$' ]) + + # declare the web server user and group + # Note: requiring the package means the package ought to create them and not puppet + validate_bool($manage_user) + if $manage_user { + user { $user: + ensure => present, + gid => $group, + require => Package['httpd'], + } + } + validate_bool($manage_group) + if $manage_group { + group { $group: + ensure => present, + require => Package['httpd'] + } + } + + validate_apache_log_level($log_level) + + class { '::apache::service': + service_name => $service_name, + service_enable => $service_enable, + service_manage => $service_manage, + service_ensure => $service_ensure, + } + + # Deprecated backwards-compatibility + if $purge_vdir { + warning('Class[\'apache\'] parameter purge_vdir is deprecated in favor of purge_configs') + $purge_confd = $purge_vdir + } else { + $purge_confd = $purge_configs + } + + # Set purge vhostd appropriately + if $purge_vhost_dir == undef { + $purge_vhostd = $purge_confd + } else { + $purge_vhostd = $purge_vhost_dir + } + + Exec { + path => '/bin:/sbin:/usr/bin:/usr/sbin', + } + + exec { "mkdir ${confd_dir}": + creates => $confd_dir, + require => Package['httpd'], + } + file { $confd_dir: + ensure => directory, + recurse => true, + purge => $purge_confd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + + if ! defined(File[$mod_dir]) { + exec { "mkdir ${mod_dir}": + creates => $mod_dir, + require => Package['httpd'], + } + # Don't purge available modules if an enable dir is used + $purge_mod_dir = $purge_configs and !$mod_enable_dir + file { $mod_dir: + ensure => directory, + recurse => true, + purge => $purge_mod_dir, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } + + if $mod_enable_dir and ! defined(File[$mod_enable_dir]) { + $mod_load_dir = $mod_enable_dir + exec { "mkdir ${mod_enable_dir}": + creates => $mod_enable_dir, + require => Package['httpd'], + } + file { $mod_enable_dir: + ensure => directory, + recurse => true, + purge => $purge_configs, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } else { + $mod_load_dir = $mod_dir + } + + if ! defined(File[$vhost_dir]) { + exec { "mkdir ${vhost_dir}": + creates => $vhost_dir, + require => Package['httpd'], + } + file { $vhost_dir: + ensure => directory, + recurse => true, + purge => $purge_vhostd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } + + if $vhost_enable_dir and ! defined(File[$vhost_enable_dir]) { + $vhost_load_dir = $vhost_enable_dir + exec { "mkdir ${vhost_load_dir}": + creates => $vhost_load_dir, + require => Package['httpd'], + } + file { $vhost_enable_dir: + ensure => directory, + recurse => true, + purge => $purge_vhostd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } else { + $vhost_load_dir = $vhost_dir + } + + concat { $ports_file: + owner => 'root', + group => $::apache::params::root_group, + mode => '0644', + notify => Class['Apache::Service'], + require => Package['httpd'], + } + concat::fragment { 'Apache ports header': + ensure => present, + target => $ports_file, + content => template('apache/ports_header.erb') + } + + if $::apache::conf_dir and $::apache::params::conf_file { + case $::osfamily { + 'debian': { + $pidfile = "\${APACHE_PID_FILE}" + $error_log = 'error.log' + $scriptalias = '/usr/lib/cgi-bin' + $access_log_file = 'access.log' + } + 'redhat': { + $pidfile = 'run/httpd.pid' + $error_log = 'error_log' + $scriptalias = '/var/www/cgi-bin' + $access_log_file = 'access_log' + } + 'freebsd': { + $pidfile = '/var/run/httpd.pid' + $error_log = 'httpd-error.log' + $scriptalias = '/usr/local/www/apache24/cgi-bin' + $access_log_file = 'httpd-access.log' + } 'gentoo': { + $pidfile = '/run/apache2.pid' + $error_log = 'error.log' + $error_documents_path = '/usr/share/apache2/error' + $scriptalias = '/var/www/localhost/cgi-bin' + $access_log_file = 'access.log' + + ::portage::makeconf { 'apache2_modules': + content => $default_mods, + } + file { [ + '/etc/apache2/modules.d/.keep_www-servers_apache-2', + '/etc/apache2/vhosts.d/.keep_www-servers_apache-2' + ]: + ensure => absent, + require => Package['httpd'], + } + } + default: { + fail("Unsupported osfamily ${::osfamily}") + } + } + + $apxs_workaround = $::osfamily ? { + 'freebsd' => true, + default => false + } + + # Template uses: + # - $pidfile + # - $user + # - $group + # - $logroot + # - $error_log + # - $sendfile + # - $mod_dir + # - $ports_file + # - $confd_dir + # - $vhost_dir + # - $error_documents + # - $error_documents_path + # - $apxs_workaround + # - $keepalive + # - $keepalive_timeout + # - $max_keepalive_requests + # - $server_root + # - $server_tokens + # - $server_signature + # - $trace_enable + file { "${::apache::conf_dir}/${::apache::params::conf_file}": + ensure => file, + content => template($conf_template), + notify => Class['Apache::Service'], + require => Package['httpd'], + } + + # preserve back-wards compatibility to the times when default_mods was + # only a boolean value. Now it can be an array (too) + if is_array($default_mods) { + class { '::apache::default_mods': + all => false, + mods => $default_mods, + } + } else { + class { '::apache::default_mods': + all => $default_mods, + } + } + class { '::apache::default_confd_files': + all => $default_confd_files + } + if $mpm_module { + class { "::apache::mod::${mpm_module}": } + } + + $default_vhost_ensure = $default_vhost ? { + true => 'present', + false => 'absent' + } + $default_ssl_vhost_ensure = $default_ssl_vhost ? { + true => 'present', + false => 'absent' + } + + ::apache::vhost { 'default': + ensure => $default_vhost_ensure, + port => 80, + docroot => $docroot, + scriptalias => $scriptalias, + serveradmin => $serveradmin, + access_log_file => $access_log_file, + priority => '15', + ip => $ip, + logroot_mode => $logroot_mode, + manage_docroot => $default_vhost, + } + $ssl_access_log_file = $::osfamily ? { + 'freebsd' => $access_log_file, + default => "ssl_${access_log_file}", + } + ::apache::vhost { 'default-ssl': + ensure => $default_ssl_vhost_ensure, + port => 443, + ssl => true, + docroot => $docroot, + scriptalias => $scriptalias, + serveradmin => $serveradmin, + access_log_file => $ssl_access_log_file, + priority => '15', + ip => $ip, + logroot_mode => $logroot_mode, + manage_docroot => $default_ssl_vhost, + } + } +} diff --git a/samples/Puppet/hiera_include.pp b/samples/Puppet/hiera_include.pp new file mode 100644 index 00000000..7959e7b1 --- /dev/null +++ b/samples/Puppet/hiera_include.pp @@ -0,0 +1 @@ +hiera_include('classes') diff --git a/samples/Python/closure_js_binary.bzl b/samples/Python/closure_js_binary.bzl new file mode 100644 index 00000000..c4453ffb --- /dev/null +++ b/samples/Python/closure_js_binary.bzl @@ -0,0 +1,124 @@ +# Copyright 2015 The Bazel Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Build definitions for JavaScript binaries compiled with the Closure Compiler. + +A single file is produced with the _compiled.js suffix. + +By default, the name of the entry point is assumed to be the same as that of the +build target. This behaviour may be overridden with the "main" attribute. + +The optimization level may be set with the "compilation_level" attribute. +Supported values are: unobfuscated, simple, and advanced. + +Example: + + closure_js_binary( + name = "hello", + compilation_level = "simple", + language_in = "ecmascript6", + language_out = "ecmascript3", + externs = ["//third_party/javascript/google_cast/cast.js"], + deps = [ + "@closure_library//:closure_library", + ":hello_lib", + ], + ) + +This rule will produce hello_combined.js. +""" + +_COMPILATION_LEVELS = { + "whitespace_only": [ + "--compilation_level=WHITESPACE_ONLY", + "--formatting=PRETTY_PRINT" + ], + "simple": ["--compilation_level=SIMPLE"], + "advanced": ["--compilation_level=ADVANCED"] +} + +_SUPPORTED_LANGUAGES = { + "es3": ["ES3"], + "ecmascript3": ["ECMASCRIPT3"], + "es5": ["ES5"], + "ecmascript5": ["ECMASCRIPT5"], + "es5_strict": ["ES5_STRICT"], + "ecmascript5_strict": ["ECMASCRIPT5_STRICT"], + "es6": ["ES6"], + "ecmascript6": ["ECMASCRIPT6"], + "es6_strict": ["ES6_STRICT"], + "ecmascript6_strict": ["ECMASCRIPT6_STRICT"], + "es6_typed": ["ES6_TYPED"], + "ecmascript6_typed": ["ECMASCRIPT6_TYPED"], +} + +def _impl(ctx): + externs = set(order="compile") + srcs = set(order="compile") + for dep in ctx.attr.deps: + externs += dep.transitive_js_externs + srcs += dep.transitive_js_srcs + + args = [ + "--entry_point=goog:%s" % ctx.attr.main, + "--js_output_file=%s" % ctx.outputs.out.path, + "--dependency_mode=LOOSE", + "--warning_level=VERBOSE", + ] + (["--js=%s" % src.path for src in srcs] + + ["--externs=%s" % extern.path for extern in externs]) + + # Set the compilation level. + if ctx.attr.compilation_level in _COMPILATION_LEVELS: + args += _COMPILATION_LEVELS[ctx.attr.compilation_level] + else: + fail("Invalid compilation_level '%s', expected one of %s" % + (ctx.attr.compilation_level, _COMPILATION_LEVELS.keys())) + + # Set the language in. + if ctx.attr.language_in in _SUPPORTED_LANGUAGES: + args += "--language_in=" + _SUPPORTED_LANGUAGES[ctx.attr.language_in] + else: + fail("Invalid language_in '%s', expected one of %s" % + (ctx.attr.language_in, _SUPPORTED_LANGUAGES.keys())) + + # Set the language out. + if ctx.attr.language_out in _SUPPORTED_LANGUAGES: + args += "--language_out=" + _SUPPORTED_LANGUAGES[ctx.attr.language_out] + else: + fail("Invalid language_out '%s', expected one of %s" % + (ctx.attr.language_out, _SUPPORTED_LANGUAGES.keys())) + + ctx.action( + inputs=list(srcs) + list(externs), + outputs=[ctx.outputs.out], + arguments=args, + executable=ctx.executable._closure_compiler) + + return struct(files=set([ctx.outputs.out])) + +closure_js_binary = rule( + implementation=_impl, + attrs={ + "deps": attr.label_list( + allow_files=False, + providers=["transitive_js_externs", "transitive_js_srcs"]), + "main": attr.string(default="%{name}"), + "compilation_level": attr.string(default="advanced"), + "language_in": attr.string(default="ecmascript6"), + "language_out": attr.string(default="ecmascript3"), + "_closure_compiler": attr.label( + default=Label("//external:closure_compiler_"), + executable=True), + }, + outputs={"out": "%{name}_combined.js"}) diff --git a/samples/Python/filenames/BUCK b/samples/Python/filenames/BUCK new file mode 100644 index 00000000..9657ff3a --- /dev/null +++ b/samples/Python/filenames/BUCK @@ -0,0 +1,31 @@ +include_defs('//tools/build.defs') + +gerrit_war(name = 'gerrit') +gerrit_war(name = 'gwtgerrit', ui = 'ui_dbg') +gerrit_war(name = 'headless', ui = None) +gerrit_war(name = 'chrome', ui = 'ui_chrome') +gerrit_war(name = 'firefox', ui = 'ui_firefox') +gerrit_war(name = 'safari', ui = 'ui_safari') +gerrit_war(name = 'polygerrit', ui = 'polygerrit') +gerrit_war(name = 'withdocs', docs = True) +gerrit_war(name = 'release', ui = 'ui_optdbg_r', docs = True, context = ['//plugins:core'], visibility = ['//tools/maven:']) + +API_DEPS = [ + '//gerrit-acceptance-framework:acceptance-framework', + '//gerrit-acceptance-framework:acceptance-framework-src', + '//gerrit-acceptance-framework:acceptance-framework-javadoc', + '//gerrit-extension-api:extension-api', + '//gerrit-extension-api:extension-api-src', + '//gerrit-extension-api:extension-api-javadoc', + '//gerrit-plugin-api:plugin-api', + '//gerrit-plugin-api:plugin-api-src', + '//gerrit-plugin-api:plugin-api-javadoc', + '//gerrit-plugin-gwtui:gwtui-api', + '//gerrit-plugin-gwtui:gwtui-api-src', + '//gerrit-plugin-gwtui:gwtui-api-javadoc', +] + +zip_file( + name = 'api', + srcs = API_DEPS, +) diff --git a/samples/Python/filenames/BUILD b/samples/Python/filenames/BUILD new file mode 100644 index 00000000..92057751 --- /dev/null +++ b/samples/Python/filenames/BUILD @@ -0,0 +1,45 @@ +package(default_visibility = ["//scripts/release:__pkg__"]) + +filegroup( + name = "git", + srcs = glob([".git/**"]), +) + +filegroup( + name = "dummy", + visibility = ["//visibility:public"], +) + +filegroup( + name = "srcs", + srcs = glob( + ["**"], + exclude = [ + "bazel-*/**", + "output/**", + ".*/**", + ], + ) + [ + "//examples:srcs", + "//scripts:srcs", + "//site:srcs", + "//src:srcs", + "//tools:srcs", + "//third_party:srcs", + ], + visibility = ["//visibility:private"], +) + +load("//tools/build_defs/pkg:pkg.bzl", "pkg_tar") + +pkg_tar( + name = "bazel-srcs", + files = [":srcs"], + strip_prefix = ".", + # Public but bazel-only visibility. + visibility = ["//:__subpackages__"], +) + +load("//tools/build_rules/go:def.bzl", "go_prefix") + +go_prefix("github.com/bazelbuild/bazel") diff --git a/samples/Python/gen-py-linguist-thrift.py b/samples/Python/gen-py-linguist-thrift.py new file mode 100644 index 00000000..3ae25bb9 --- /dev/null +++ b/samples/Python/gen-py-linguist-thrift.py @@ -0,0 +1,83 @@ +# +# Autogenerated by Thrift Compiler (1.0.0-dev) +# +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING +# +# options string: py +# + +from thrift.Thrift import TType, TMessageType, TException, TApplicationException + +from thrift.transport import TTransport +from thrift.protocol import TBinaryProtocol, TProtocol +try: + from thrift.protocol import fastbinary +except: + fastbinary = None + + + +class PullRequest: + """ + Attributes: + - title + """ + + thrift_spec = ( + None, # 0 + (1, TType.STRING, 'title', None, None, ), # 1 + ) + + def __init__(self, title=None,): + self.title = title + + def read(self, iprot): + if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: + fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.title = iprot.readString() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: + oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) + return + oprot.writeStructBegin('PullRequest') + if self.title is not None: + oprot.writeFieldBegin('title', TType.STRING, 1) + oprot.writeString(self.title) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + + def __hash__(self): + value = 17 + value = (value * 31) ^ hash(self.title) + return value + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.iteritems()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) diff --git a/samples/Python/python.script! b/samples/Python/python similarity index 100% rename from samples/Python/python.script! rename to samples/Python/python diff --git a/samples/Python/python2.script! b/samples/Python/python2 similarity index 100% rename from samples/Python/python2.script! rename to samples/Python/python2 diff --git a/samples/Python/python3.script! b/samples/Python/python3 similarity index 100% rename from samples/Python/python3.script! rename to samples/Python/python3 diff --git a/samples/Python/simpleclient.rpy b/samples/Python/simpleclient.rpy new file mode 100644 index 00000000..ceb5f991 --- /dev/null +++ b/samples/Python/simpleclient.rpy @@ -0,0 +1,49 @@ + +# Copyright (c) Twisted Matrix Laboratories. +# See LICENSE for details. + + +""" +An example client. Run simpleserv.py first before running this. +""" + +from twisted.internet import reactor, protocol + + +# a client protocol + +class EchoClient(protocol.Protocol): + """Once connected, send a message, then print the result.""" + + def connectionMade(self): + self.transport.write("hello, world!") + + def dataReceived(self, data): + "As soon as any data is received, write it back." + print "Server said:", data + self.transport.loseConnection() + + def connectionLost(self, reason): + print "connection lost" + +class EchoFactory(protocol.ClientFactory): + protocol = EchoClient + + def clientConnectionFailed(self, connector, reason): + print "Connection failed - goodbye!" + reactor.stop() + + def clientConnectionLost(self, connector, reason): + print "Connection lost - goodbye!" + reactor.stop() + + +# this connects the protocol to a server running on port 8000 +def main(): + f = EchoFactory() + reactor.connectTCP("localhost", 8000, f) + reactor.run() + +# this only runs if the module was *not* imported +if __name__ == '__main__': + main() diff --git a/samples/QML/common.qbs b/samples/QML/common.qbs new file mode 100644 index 00000000..ebf60a0b --- /dev/null +++ b/samples/QML/common.qbs @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** This file is part of the Qt Build Suite. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +import qbs 1.0 +import qbs.FileInfo +import qbs.ModUtils + +Module { + property string buildVariant: "debug" + property bool enableDebugCode: buildVariant == "debug" + property bool debugInformation: (buildVariant == "debug") + property string optimization: (buildVariant == "debug" ? "none" : "fast") + readonly property stringList hostOS: undefined // set internally + property string hostOSVersion: { + if (hostOS && hostOS.contains("osx")) { + return getNativeSetting("/System/Library/CoreServices/ServerVersion.plist", "ProductVersion") || + getNativeSetting("/System/Library/CoreServices/SystemVersion.plist", "ProductVersion"); + } else if (hostOS && hostOS.contains("windows")) { + var version = getNativeSetting("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "CurrentVersion"); + return version + "." + hostOSBuildVersion; + } + } + + property string hostOSBuildVersion: { + if (hostOS.contains("osx")) { + return getNativeSetting("/System/Library/CoreServices/ServerVersion.plist", "ProductBuildVersion") || + getNativeSetting("/System/Library/CoreServices/SystemVersion.plist", "ProductBuildVersion"); + } else if (hostOS.contains("windows")) { + return getNativeSetting("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "CurrentBuildNumber"); + } + } + + readonly property var hostOSVersionParts: hostOSVersion ? hostOSVersion.split('.').map(function(item) { return parseInt(item, 10); }) : [] + readonly property int hostOSVersionMajor: hostOSVersionParts[0] || 0 + readonly property int hostOSVersionMinor: hostOSVersionParts[1] || 0 + readonly property int hostOSVersionPatch: hostOSVersionParts[2] || 0 + + property stringList targetOS: hostOS + property string pathListSeparator: hostOS.contains("windows") ? ";" : ":" + property string pathSeparator: hostOS.contains("windows") ? "\\" : "/" + property string profile + property stringList toolchain + property string architecture + property bool install: false + property string installSourceBase + readonly property string installRoot: undefined + property string installDir + property string installPrefix: "" + property path sysroot + + PropertyOptions { + name: "buildVariant" + allowedValues: ['debug', 'release'] + description: "name of the build variant" + } + + PropertyOptions { + name: "optimization" + allowedValues: ['none', 'fast', 'small'] + description: "optimization level" + } + + validate: { + var validator = new ModUtils.PropertyValidator("qbs"); + validator.setRequiredProperty("architecture", architecture, + "you might want to re-run 'qbs-setup-toolchains'"); + validator.setRequiredProperty("hostOS", hostOS); + validator.setRequiredProperty("targetOS", targetOS); + if (hostOS && (hostOS.contains("windows") || hostOS.contains("osx"))) { + validator.setRequiredProperty("hostOSVersion", hostOSVersion, + "could not detect host operating system version; " + + "verify that system files and registry keys have not " + + "been modified."); + if (hostOSVersion) + validator.addVersionValidator("hostOSVersion", hostOSVersion, 2, 4); + + validator.setRequiredProperty("hostOSBuildVersion", hostOSBuildVersion, + "could not detect host operating system build version; " + + "verify that system files or registry have not been " + + "tampered with."); + } + + validator.addCustomValidator("architecture", architecture, function (value) { + return architecture === canonicalArchitecture(architecture); + }, "'" + architecture + "' is invalid. You must use the canonical name '" + + canonicalArchitecture(architecture) + "'"); + + validator.validate(); + } + + // private properties + property var commonRunEnvironment: { + var env = {}; + if (targetOS.contains("windows")) { + env["PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix) + ]; + } else if (hostOS.contains("darwin") && targetOS.contains("darwin")) { + env["DYLD_FRAMEWORK_PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"), + FileInfo.joinPaths(installRoot, installPrefix, "lib"), + FileInfo.joinPaths(installRoot, installPrefix) + ].join(pathListSeparator); + + env["DYLD_LIBRARY_PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix, "lib"), + FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"), + FileInfo.joinPaths(installRoot, installPrefix) + ].join(pathListSeparator); + + if (targetOS.contains("ios-simulator") && sysroot) { + env["DYLD_ROOT_PATH"] = [sysroot]; + } + } else if (hostOS.contains("unix") && targetOS.contains("unix")) { + env["LD_LIBRARY_PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix, "lib") + ]; + } + + return env; + } + + // internal properties + readonly property string version: [versionMajor, versionMinor, versionPatch].join(".") + readonly property int versionMajor: undefined // set internally + readonly property int versionMinor: undefined // set internally + readonly property int versionPatch: undefined // set internally +} diff --git a/samples/QMake/qmake.script! b/samples/QMake/qmake similarity index 100% rename from samples/QMake/qmake.script! rename to samples/QMake/qmake diff --git a/samples/R/git-punchcard.script! b/samples/R/git-punchcard similarity index 100% rename from samples/R/git-punchcard.script! rename to samples/R/git-punchcard diff --git a/samples/Ren'Py/example.rpy b/samples/Ren'Py/example.rpy new file mode 100644 index 00000000..71e34b97 --- /dev/null +++ b/samples/Ren'Py/example.rpy @@ -0,0 +1,1424 @@ +### Demo Script Example ### + +# This script, but not the artwork associated with it, is in the +# public domain. Feel free to use it as the basis for your own +# game. + +# If you're trying to understand this script, I recommend skipping +# down to the line beginning with 'label start:', at least on your +# first read-through. + +# This init block runs first, and sets up all sorts of things that +# are used by the rest of the game. Variables that are set in init +# blocks are _not_ saved, unless they are changed later on in the +# program. + +init: + + # Set up the size of the screen, and the window title. + $ config.screen_width = 800 + $ config.screen_height = 600 + $ config.window_title = "The Ren'Py Demo Game" + + # Declare the images that are used in the program. + + # Backgrounds. + image bg carillon = "carillon.jpg" + image bg whitehouse = "whitehouse.jpg" + image bg washington = "washington.jpg" + image bg onememorial = "1memorial.jpg" + image black = Solid((0, 0, 0, 255)) + + # Character pictures. + image eileen happy = "9a_happy.png" + image eileen vhappy = "9a_vhappy.png" + image eileen concerned = "9a_concerned.png" + + # A character object. This object lets us have the character say + # dialogue without us having to repeatedly type her name. It also + # lets us change the color of her name. + + $ e = Character('Eileen', color=(200, 255, 200, 255)) + +# The start label marks the place where the main menu jumps to to +# begin the actual game. + +label start: + + # The save_name variable sets the name of the save game. Like all + # variables declared outside of init blocks, this variable is + # saved and restored with a save file. + $ save_name = "Introduction" + + # This variable is only used by our game. If it's true, it means + # that we won the date. + $ date = False + + # Clear the game runtime timer, so it doesn't reflect time spent + # sitting at the main menu. + $ renpy.clear_game_runtime() + + # Start some music playing in the background. + $ renpy.music_start('sun-flower-slow-drag.mid') + + # Now, set up the first scene. We first fade in our washington + # background, and then we dissolve in the image of Eileen on top + # of it. + scene bg washington with fade + show eileen vhappy with dissolve + + # Store the current version of Ren'Py into a variable, so we can + # interpolate it into the next line. + $ version = renpy.version() + + # Display a line of dialogue. In this case, we manually specify + # who's saying the line of dialogue. We also interpolate in the + # version of Ren'Py we're using. + "Girl" "Hi, and welcome to the %(version)s demo program." + + # This instantly replaces the very happy picture of Eileen with + # one showing her merely happy. It demonstrates how the show + # statement lets characters change emotions. + show eileen happy + + # Another line of dialogue. + "Girl" "My name is Eileen, and while I plan to one day star in a + real game, for now I'm here to tell you about Ren'Py." + + # This line used the e character object, which displays Eileen's + # name in green. The use of a short name for a character object + # lets us save typing when writing the bulk of the dialogue. + e "Ren'Py is a language and engine for writing and playing visual + novel games." + + e "Our goal is to allow people to be able to write the script for + a game, and with very little effort, turn that script into + a working game." + + e "I can tell you about the features of Ren'Py games, or how to write + your own game. What do you want to know about?" + + # This variable is used to save the choices that have been made in + # the main menu. + $ seen_set = [ ] + +label choices: + + # We change the save name here. + $ save_name = "Question Menu" + + # This is the main menu, that lets the user decide what he wants + # to hear about. + menu: + + # The set menu clause ensures that each menu choice can only + # be chosen once. + set seen_set + + # This is a menu choice. When chosen, the statements in its + # block are executed. + "What are some user-visible features of Ren'Py games?": + + # We call the features label. The from clause needs to be + # here to ensure that save games work, even after we + # change the script. It was added automatically. + call features from _call_features_1 + + # When we're done talking about features, jump back up + # to choices. + jump choices + + # Another choice. + "How do I write my own games with it?": + call writing from _call_writing_1 + jump choices + + "Can you demonstrate more features to me?": + call demonstrate from _call_demonstrate_1 + jump choices + + # This choice has a condition associated with it. It is only + # displayed if the condition is true (in this case, if we have + # selected at least one other choice has been chosen.) + "Where can I find out more?" if seen_set: + call find_out_more from _call_find_out_more_1 + jump choices + + "Why are we in Washington, DC?": + call washington from _call_washington_1 + jump choices + + "I think I've heard enough." if seen_set: + jump ending + + +# This is the section on writing games. +label writing: + + # Change the title of the save games. + $ save_name = "Writing Games" + + # We start off with a bunch of dialogue. + e "If you want to write a game, we recommend that you read the + Ren'Py reference, which you can get from our web page, + http://www.bishoujo.us/renpy/." + + e "But here, we'll go over some of the basics of writing Ren'Py + scripts. It might make sense if you open the source for this + game." + + e "The source for this game can be found in the file + game/script.rpy." + + e "The goal of Ren'Py is to make writing the game similar to + typing up the script on the computer." + + e "For example, a line of dialogue is expressed by putting the + character's name next to the dialogue string." + + # A string by itself like this displays without a name associated + # with it. So it's useful for dialogue and narration. + "I somehow remember that strings by themselves are displayed as + thoughts or narration." + + e "The menu statement makes it easy to create menus." + + e "A number of statements let you control what is shown on the + screen." + + # This scene statement has a with clause associated with it. In + # this case (based on what is defined in the init clause at the + # top of this script), it causes a fade to black, and then back + # to the new scene. + scene bg whitehouse with fade + + e "The scene statement clears the scene list, which is the list of + things that are shown on the screen." + + # This shows an image, and dissolves it in. + show eileen happy with dissolve + + e "The show statement shows another image on the screen." + + # The at clause here, displays the character on the left side of + # the screen. The with clause causes us to slide from the old + # position to the new position. + show eileen happy at left with move + + e "Images can take at clauses that specify where on the screen + they are shown." + + show eileen vhappy at left + + e "Showing a new image with the same first part of the name + replaces the image in the scene list." + + hide eileen with dissolve + + e "Finally, the hide statement hides an image, which is useful + when a character leaves the scene." + + show eileen happy with dissolve + + e "Don't worry, I'm not going anywhere." + + e "The with statement is used to cause transitions to + happen. Transitions like fade..." + + # This statement hides the transient stuff from being included + # in the next fade. + with None + + # This with statement causes things to fade without changing the + # scene. + with fade + + e "... or dissolve ..." + + # In this block, the scene statement clears the scene list. So we + # have to reshow the eileen happy image, so that it appears that + # just the background is dissolving. Sneaky. + with None + scene bg washington + show eileen happy + with dissolve + + e "... are easily invoked." + + e "We now provide a series of user-interface functions, that allow + the programmer to create fairly complex interfaces." + + e "Ren'Py also includes a number of control statements, and even + lets you include python code." + + e "Rather than go into this here, you can read all about it in the + reference." + + e "You can see a number of features in action by asking me to + demonstrate them at the next menu." + + e "If you want to make changes, you can edit the script for this + game by editing game/script.rpy" + + e "When you've made a change, just re-run the game to see your + change in action." + + e "Would you like to know about something else?" + + # We return back up to the menu that lets the user pick a topic. + return + +# This ends the well-commented portion of this script. + +label features: + + $ save_name = "Features" + + e "Ren'Py provides a number of gameplay features, giving the user + a good experience while freeing up the game author to write his + game." + + e "What are some of these features? Well, first of all, we take + care of displaying the screen, as well as dialogue and menus." + + e "You can navigate through the game using the keyboard or the + mouse. If you've gotten this far, you've probably figured that + out already." + + e "Right-clicking or pressing escape will bring you to the game + menu." + + e "The game menu lets you save or load the game. Ren'Py doesn't + limit the number of save slots available. You can create as + many slots as you can stand." + + e "A preferences screen on the game menu lets you change the + fullscreen mode, control skipping, text speed, and + transitions, and turn sound and music on and off." + + e "The game menu also lets you restart or quit the game. But you + wouldn't want to do that, would you?" + + e "Finally, the game menu lets you set up the game + preferences. These preferences are saved between games." + + show eileen vhappy + + e "The next feature is really neat." + + show eileen happy + + menu rollback_menu: + "Would you like to hear about rollback?" + + "Yes.": + pass + + "No.": + jump after_rollback + + + e "Rollback is a feature that only Ren'Py has. It lets you go back + in time in a game." + + e "For example, you can go back to a menu and save or make a + different choice." + + e "You can access it by pressing page up or scrolling up on your + mouse wheel." + + e "Why don't you try it by going back to the last menu and + choosing 'No.' instead of 'Yes.'" + + e "Press page up or scroll up the mouse wheel." + + show eileen concerned + + e "Well, are you going to try it?" + + e "Your loss." + + e "Moving on." + +label after_rollback: + + show eileen happy + + e "Ren'Py gives you a few ways of skipping dialogue. Pressing + control quickly skips dialogue you've seen at least once." + + e "Pressing Tab toggles the skipping of dialogue you've seen at + least once." + + e "Pressing page down or scrolling the mouse wheel down will let + you skip dialogue you've seen this session. This is useful + after a rollback." + + e "If you want to try these, you might want to rollback a bit + first, so you can skip over something you've seen already." + + e "Finally, Ren'Py has predictive image loading, so you rarely + have to wait for a new image to load." + + e "Remember, all these features are built into the engine or + standard library. So every game written with Ren'Py has them." + + e "Is there anything else you'd like to know about?" + + return + + +label find_out_more: + + $ save_name = "Find Out More" + + e "There are a few places you can go to find out more about + Ren'Py." + + e "The Ren'Py homepage, http://www.bishoujo.us/renpy/, is probably + the best place to start." + + e "There, you can download new versions of Ren'Py, and read the + tutorial online." + + e "If you have questions, the best place to ask them is the Ren'Py + forum of the Lemmasoft forums." + + e "Just go to http://lemmasoft.renai.us/forums/, and click on + Ren'Py." + + e "We thank Blue Lemma for hosting our forum." + + e "Finally, feel free to email or IM us if you need help. You can + get the addresses to use from http://www.bishoujo.us/renpy/." + + e "We really want people to make their own games with Ren'Py, and + if there's anything we can do to help, just tell us." + + e "Is there anything I can help you with now?" + + return + +label washington: + + $ save_name = "Washington, DC" + + e "We're in Washington, DC because over Summer 2004 American + Bishoujo's home base was just outside of DC." + + scene bg whitehouse + show eileen happy at left + with fade + + e "Even though we've moved back to New York, we took a bunch of + pictures, and decided to use them." + + show eileen concerned at left + + e "It was easier than drawing new pictures for this demo." + + show eileen happy at left + + e "Do you have a favorite landmark in or around DC?" + + menu: + + "The White House.": + + e "I was supposed to go on a tour of the West Wing, once." + + show eileen concerned + + e "They wouldn't let us in." + + e "The secret service guy who was supposed to show us + around was out of town that day." + + e "Too bad." + + "The National Mall.": + + e "It's always fun to go down to the national mall." + + e "You can visit the monuments, or see one of the + museums." + + e "I guess you could run out of things to do after a while + but I didn't over the course of a summer." + + "The Netherlands Carillon.": + jump netherlands + + jump post_netherlands + +label netherlands: + + show eileen vhappy at left + + e "You've been to the Netherlands Carillon?" + + scene bg carillon + show eileen vhappy at left + with dissolve + + e "It may not be much to look at but the sound of the bells is + really neat." + + e "I love going there. Saturdays during the summer, they have + these recitals in the park where a guy comes and plays the + bells live." + + e "You can climb to the top and talk to him, if you're not afraid + of heights." + + e "Once, I saw a little girl there, maybe three or four years old. + The guy played the bumblebee song for here, and he even let her play the last + note. It was so cute!" + + e "I haven't been there for so long." + + menu: + "Would you like to go there sometime?": + + e "You mean, together?" + + e "Sure, why not. How does next Saturday sound?" + + e "It's a date." + + $ date = True + + "That sounds nice.": + + show eileen happy at left + + e "Well, it is." + +label post_netherlands: + + scene bg washington + show eileen happy + with fade + + e "Anyway, is there anything else you want to know about Ren'Py?" + + return + +label ending: + + $ save_name = "Ending" + + e "Well, that's okay." + + e "I hope you'll consider using Ren'Py for your next game + project." + + show eileen vhappy + + e "Thanks for viewing this demo!" + + if date: + e "And I'll see you on Saturday." + + scene black with dissolve + + "Ren'Py and the Ren'Py demo were written by PyTom." + + 'The background music is "Sun Flower Slow Drag" by S. Joplin + (1868-1917). Thanks to the Mutopia project for making it + available.' + + 'The author would like to thank everyone who makes original + English-language bishoujo games, and the people on the Lemmasoft forums + who encouraged him.' + + "We can't wait to see what you do with this. Good luck!" + + $ minutes, seconds = divmod(int(renpy.get_game_runtime()), 60) + "It took you %(minutes)d minutes and %(seconds)d seconds to + finish this demo." + + $ renpy.full_restart() + + +label speedtest: + + with None + scene bg whitehouse + show eileen happy + with dissolve + + e "Okay, I'm going to run the speedtest on your system." + + e "I'll only be testing the performance of the dissolve + transition. It taxes your system the most, as it needs to + redraw the entire screen each frame." + + $ frames = config.frames + + with None + scene bg washington + show eileen happy + with Dissolve(5.0) + + $ frames = config.frames - frames + $ fps = frames / 5.0 + + e "Well, your system displayed %(frames)d frames in five + seconds. That's %(fps).1f fps." + + e "Remember, this is the worst-case speed, as usually we can just + draw the parts of the screen that have changed." + + e "Thanks for viewing the secret speed test." + + return + +# Setup the secret key for the speedtest. +init: + python: + config.keymap['speedtest'] = [ 'S' ] + config.underlay.append(renpy.Keymap(speedtest=renpy.curried_call_in_new_context('speedtest'))) + + +init: + + # This is just some example code to show the ui functions in + # action. You probably want to delete this (and the call to + # day_planner above) from your game. This code isn't really all + # that useful except as an example. + + python: + def day_planner(): + + periods = [ 'Morning', 'Afternoon', 'Evening' ] + choices = [ 'Study', 'Exercise', + 'Eat', 'Drink', 'Be Merry' ] + + plan = { 'Morning' : 'Eat', + 'Afternoon' : 'Drink', + 'Evening' : 'Be Merry' } + + day = 'March 25th' + + stats = [ + ('Strength', 100, 10), + ('Intelligence', 100, 25), + ('Moxie', 100, 100), + ('Chutzpah', 100, 75), + ] + + editing = None + + def button(text, selected, returns, **properties): + style = 'button' + style_text = 'button_text' + + if selected: + style='selected_button' + style_text='selected_button_text' + + ui.button(clicked=ui.returns(returns), + style=style, **properties) + ui.text(text, style=style_text) + + + while True: + + # Stats Window + ui.window(xpos=0, + ypos=0, + xanchor='left', + yanchor='top', + xfill=True, + yminimum=200, + ) + + ui.vbox() + + ui.text('Statistics') + ui.null(height=20) + + for name, range, value in stats: + + ui.hbox() + ui.text(name, minwidth=150) + ui.bar(600, 22, range, value, ypos=0.5, yanchor='center') + ui.close() + + ui.close() + + + + + # Period Selection Window. + ui.window(xpos=0, + ypos=200, + xanchor='left', + yanchor='top', + xfill=False, + xminimum=300 + ) + + ui.vbox(xpos=0.5, xanchor='center') + ui.text(day, xpos=0.5, xanchor='center', textalign=0.5) + ui.null(height=20) + + for i in periods: + face = i + ": " + plan[i] + button(face, editing == i, ("edit", i)) + + ui.null(height=20) + ui.textbutton("Continue", clicked=ui.returns(("done", True))) + ui.null(height=20) + ui.close() + + + # Choice window. + if editing: + ui.window(xpos=300, + ypos=200, + xanchor='left', + yanchor='top', + xfill=False, + xminimum=500 + ) + + ui.vbox() + ui.text("What will you do in the %s?" % editing.lower()) + ui.null(height=20) + + for i in choices: + button(i, plan[editing] == i, ("set", i), + xpos=0, xanchor='left') + + ui.close() + + # Window at the bottom. + ui.window() + ui.vbox() + ui.text("To get to the next screen, click the 'Continue' button.") + ui.close() + + type, value = ui.interact() + + if type == "done": + break + + if type == "edit": + editing = value + + if type == "set": + plan[editing] = value + editing = None + + return plan + +init: + image movie = Movie() + + python: + povname = "" + pov = DynamicCharacter("povname", color=(255, 0, 0, 255)) + + $ ectc = Character('Eileen', color=(200, 255, 200, 255), + ctc = anim.Blink("arrow.png")) + + $ ectcf = Character('Eileen', color=(200, 255, 200, 255), + ctc = anim.Blink("arrow.png", xpos=760, ypos=560), + ctc_position="fixed") + + image eileen animated = Animation( + "9a_vhappy.png", 1.0, + "9a_happy.png", 1.0) + + image smanim = anim.SMAnimation( + "r", + anim.State("r", Solid((255, 0, 0, 255))), + anim.State("g", Solid((0, 255, 0, 255))), + anim.State("b", Solid((0, 0, 255, 255))), + + anim.Edge("r", .5, "g", dissolve), + anim.Edge("r", .5, "b", dissolve), + + anim.Edge("g", .5, "r", dissolve), + anim.Edge("g", .5, "b", dissolve), + + anim.Edge("b", .5, "r", dissolve), + anim.Edge("b", .5, "g", dissolve), + ) + + image cyan base = Image("cyan.png") + + image cyan crop = im.Crop("cyan.png", 100, 0, 100, 200) + + image cyan composite = im.Composite((200, 300), + (0, 0), "cyan.png", + (0, 50), "cyan.png", + (0, 100), "cyan.png") + + image cyan green = im.Map("cyan.png", bmap=im.ramp(0, 0)) + + image cyan alpha = im.Alpha("cyan.png", 0.5) + image eileen alpha = im.Alpha("9a_happy.png", 0.5) + + $ cyanpos = Position(xpos=700, xanchor='right', ypos=100, yanchor='top') + +init: + + $ slowcirciris = ImageDissolve("circiris.png", 5.0, 8) + $ circirisout = ImageDissolve("circiris.png", 1.0, 8) + $ circirisin = ImageDissolve("circiris.png", 1.0, 8, reverse=True) + $ demotrans = ImageDissolve("demotrans.png", 3.0, 128) + + image circiris = "circiris.png" + +label demonstrate: + + scene bg washington + show eileen happy + + e "I can give you a demonstration of some of the features in + Ren'Py, but you'll have to tell me what it is you'd like to + have demonstrated." + + menu demo_menu: + + "Simple transitions, updated in 4.8.5": + + e "Okay, I can tell you about simple transitions. We call + them simple because they aren't that flexible." + + e "But don't let that get you down, since they're the + transitions you'll probably use the most." + + with None + scene bg whitehouse + show eileen happy + with dissolve + + e "The dissolve transition is probably the most useful, + blending one scene into another." + + with None + with fade + + e "The fade transition fades to black, and then fades back + in to the new scene." + + e "If you're going to stay at a black screen, you'll + probably want to use dissolve rather than fade." + + with None + scene bg washington + show eileen happy + with pixellate + + e "The pixellate transition pixellates out the old scene, + switches to the new scene, and then unpixellates that." + + e "It's probably not appropriate for most games, but we + think it's kind of neat." + + e "Finally, we can point out that motions can be used as + transitions." + + "..." + + "......" + + $ renpy.play('punch.wav') + with vpunch + + e "Hey! Pay attention." + + e "I was about to demonstrate vpunch... well, I guess I just + did." + + $ renpy.play('punch.wav') + with hpunch + + e "We can also shake the screen horizontally, with hpunch." + + "ImageDissolve transitions, added in 4.8.7.": + + e "ImageDissolve allows us to have dissolve transitions that are + controlled by images." + + e "This lets us specify very complex transitions, fairly + simply." + + e "Let's try some, and then I'll show how they work." + + e "There are two ImageDissolve transitions present by + default in the standard library." + + scene black with blinds + scene bg washington + show eileen happy + with blinds + + e "The blinds transition opens and closes what looks like + vertical blinds." + + scene black with squares + scene bg washington + show eileen happy + with squares + + e "The squares transition uses these squares to show + things." + + e "I'm not sure why anyone would want to use it, but it + was used in some translated games, so we added it." + + e "There are also a few transitions that aren't in the + standard library." + + e "These ones require images the size of the screen, and + so we couldn't include them as the size of the screen + can change from game to game." + + e "You can find them defined in the source of the demo + script." + + scene black with circirisin + + e "We can hide things with a circirisin..." + + with None + scene bg washington + show eileen happy + with circirisout + + e "... and show them again with a circirisout." + + e "It's even possible to have weird custom transitions." + + scene circiris with demotrans + + e "What we're showing here is the picture that's used in + the circiris transitions." + + e "If you take a look, the center of it is white, while + the edges are darker." + + e "When we use an ImageDissolve, the white will dissolve + in first, followed by progressively darker colors." + + e "Let's try it." + + with None + scene bg washington + show eileen happy + with slowcirciris + + + e "It's also possible to reverse the transition, so that + the black pixels are dissolved in first." + + "CropMove transitions, added in 4.5.": + + e "The CropMove transition class lets us provide a wide + range of transition effects." + + hide eileen with dissolve + + e "I'll stand offscreen, so you can see some of its modes. I'll read + out the mode name after each transition." + + scene bg whitehouse with wiperight + + e "We first have wiperight..." + + scene bg washington with wipeleft + + e "...followed by wipeleft... " + + scene bg whitehouse with wipeup + + e "...wipeup..." + + scene bg washington with wipedown + + e "...and wipedown." + + e "Next, the slides." + + scene bg whitehouse with slideright + + e "Slideright..." + + scene bg washington with slideleft + + e "...slideleft..." + + scene bg whitehouse with slideup + + e "...slideup..." + + scene bg washington with slidedown + + e "and slidedown." + + e "While the slide transitions slide in the new scene, the + slideaways slide out the old scene." + + scene bg whitehouse with slideawayright + + e "Slideawayright..." + + scene bg washington with slideawayleft + + e "...slideawayleft..." + + scene bg whitehouse with slideawayup + + e "...slideawayup..." + + scene bg washington with slideawaydown + + e "and slideawaydown." + + e "We also have a couple of transitions that use a + rectangular iris." + + scene bg whitehouse with irisout + + e "There's irisout..." + + with None + scene bg washington + show eileen happy + with irisin + + e "... and irisin." + + e "It's enough to make you feel a bit dizzy." + + "Positions and movement, updated in 4.8.": + + e "I'm not stuck standing in the middle of the screen, + even though I like being the center of attention." + + e "Positions, given with an at clause, specify where I'm + standing." + + e "The move transition moves around images that have + changed position." + + e "For example..." + + show eileen happy at offscreenleft with move + + e "I can move over to the offscreenleft position, just off + the left side of the screen." + + show eileen happy at left with move + + e "The left position has my left side border the left + margin of the screen." + + show eileen happy at center with move + + e "I can also move to the center..." + + show eileen happy at right with move + + e "... the right ..." + + show eileen happy at offscreenright with move + + e "... or even to offscreenright, off the right-hand side + of the screen." + + show eileen happy at right with move + + e "We don't limit you to these five positions either. You + can always create your own Position objects." + + # This is necessary to restart the time at which we are + # shown. + hide eileen happy + + show eileen happy at Move((1.0, 1.0, 'right', 'bottom'), + (0.0, 1.0, 'left', 'bottom'), + 4.0, repeat=True, bounce=True) + + e "It's also possible to have a movement happen while + showing dialogue on the screen, using the Move function." + + e "Move can repeat a movement, and even have it bounce + back and forth, like I'm doing now." + + scene bg onememorial at Pan((0, 800), (0, 0), 10.0) with dissolve + + e "Finally, we can pan around an image larger than the + screen, using the Pan function in an at + clause." + + e "That's what we're doing now, panning up a picture of + the memorial to the Big Red One." + + with None + scene bg washington + show eileen happy + with dissolve + + "Animation, updated in 4.8.5": + + e "Ren'Py supports a number of ways of creating + animations." + + e "These animations let you vary images, independent of + the user's clicks." + + show eileen animated + + e "For example, I'm switching my expression back and + forth, once a second." + + e "Even though you clicked, I'm still doing it." + + e "This is an example of the Animation function at work." + + show eileen happy + + e "The Animation function is limited to simple lists of + images, with fixed delays between them." + + e "The sequence can repeat, or can stop after one + go-through." + + e "If you want more control, you can use the + anim.SMAnimation function." + + e "It can randomly change images, and even apply + transitions to changes." + + with None + scene smanim + show eileen happy + with dissolve + + e "Here, we randomly dissolve the background between red, + green, and blue images." + + e "Psychadelic." + + with None + scene bg washington + show eileen happy + with dissolve + + e "It's probably best if we stop here, before somebody's + brain explodes." + + "Text tags, updated in 5.1.4.": + + e "Text tags let us control the appearance of text that is + shown to the user." + + e "Text tags can make text {b}bold{/b}, {i}italic{/i}, or + {u}underlined{/u}." + + e "They can make the font size {size=+12}bigger{/size} or + {size=-8}smaller{/size}." + + e "They let you pause{w} the display of the text, + optionally with{p}line breaks." + + e "They let you include {image=slider_idle.png} images + inside text." + + e "They can even change the + {color=#f00}color{/color} + {color=#ff0}of{/color} + {color=#0f0}the{/color} + {color=#0ff}text{/color}." + + e "There are also bold, italic, and underline style properties, which can + be styled onto any text." + + e "If you find yourself using text tags on every line, you + should probably look at style properties instead." + + e "Used with care, text tags can enhance {b}your{/b} game." + + e "{u}Used{/u} with {i}abandon,{/i} they {b}can{/b} make {b}your{/b} + game {color=#333}hard{/color} {color=#888}to{/color} {color=#ccc}read{/color}." + + e "With great power comes great responsibility, after all." + + e "And we want to give you all the power you need." + + + "Music, sound and movies, updated in 4.5.": + + e "Ren'Py supports a number of multimedia functions." + + e "You're probably hearing music playing in the + background." + + + $ renpy.music_stop(fadeout=0.5) + e "We can stop it..." + + + $ renpy.music_start('sun-flower-slow-drag.mid') + e "... and start it playing again." + + # This plays a sound effect. + $ renpy.play("18005551212.wav") + + e "We can also play up to eight channels of sound effects + on top of the music." + + e "We ship, in the extras/ directory, code to support + characters having voice." + + e "Finally, we support playing mpeg movies." + + if renpy.exists('Eisenhow1952.mpg'): + + e "Since you downloaded the Eisenhower commercial, I can show + it to you as a cutscene." + + e "You can click to continue if it gets on your nerves too + much." + + $ renpy.movie_cutscene('Eisenhow1952.mpg', 63.0) + + hide eileen + show movie at Position(xpos=420, ypos=25, xanchor='left', yanchor='top') + show eileen happy + + $ renpy.movie_start_displayable('Eisenhow1952.mpg', (352, 240)) + + e "Ren'Py can even overlay rendered images on top of a movie, + although that's more taxing for your CPU." + + e "It's like I'm some sort of newscaster or something." + + $ renpy.movie_stop() + hide movie + + else: + + e "You haven't downloaded the Eisenhower commercial, so we + can't demonstrate it." + + e "That's it for multimedia." + + "Image Operations, added in 4.8.5": + + e "Image operations allow one to manipulate images as they + are loaded in." + + e "These are efficent, as they are only evaluated when an + image is first loaded." + + e "This way, there's no extra work that needs to be done + when each frame is drawn to the screen." + + show eileen happy at left with move + show cyan base at cyanpos with dissolve + + e "Let me show you a test image, a simple cyan circle." + + e "We'll be applying some image operations to it, to see + how they can be used." + + show cyan crop at cyanpos with dissolve + + e "The im.Crop operation can take the image, and chop it + up into a smaller image." + + show cyan composite at cyanpos with dissolve + + e "The im.Composite operation lets us take multiple images, + and draw them into a single image." + + e "While you can do this by showing multiple images, this + is more efficent, if more complex." + + show cyan green at cyanpos with dissolve + + e "The im.Map operation lets us mess with the red, green, + blue, and alpha channels of an image." + + e "In this case, we removed all the blue from the image, + leaving only the green component of cyan." + + show cyan alpha at cyanpos with dissolve + + e "The im.Alpha operation can adjust the alpha channel on + an image, making things partially transparent." + + show eileen alpha at left with dissolve + + e "It's useful if a character just happens to be ghost." + + with None + hide cyan + show eileen happy at left + with dissolve + + e "But that's not the case with me." + + show eileen happy with move + + + "User interaction.": + + e "Ren'Py gives a number of ways of interacting with the + user." + + e "You've already seen say statements and menus." + + e "We can also prompt the user to enter some text." + + $ povname = renpy.input("What is your name?") + + pov "My name is %(povname)s." + + + e "Imagemaps let the user click on an image to make a + choice." + + # This is an imagemap. It consists of two images, and a list of + # hotspots. For each hotspot we give the coordinates of the left, + # top, right, and bottom sides, and the value to return if it is + # picked. + + $ result = renpy.imagemap("ground.png", "selected.png", [ + (100, 100, 300, 400, "eileen"), + (500, 100, 700, 400, "lucy") + ]) + + # We've assigned the chosen result from the imagemap to the + # result variable. We can use an if statement to vary what + # happens based on the user's choice. + + if result == "eileen": + show eileen vhappy + e "You picked me!" + + elif result == "lucy": + show eileen concerned + e "It looks like you picked Lucy." + + # Eileen is being a bit possesive here. :-P + if date: + e "You can forget about Saturday." + $ date = False + + show eileen happy + + e "While these constructs are probably enough for most + visual novels, dating simulations may be more + complicated." + + e "The ui functions allow you to create quite complicated + interfaces." + + e "For example, try the following scheduling and stats screen, + which could be used by a stat-based dating simulation." + + $ day_planner() + + e "The ui functions can be used to rewrite many parts of + the interface." + + e "Hopefully, this gives you enough power to write any + visual novel you want." + + "Potpourri, added in 5.1.2.": + + e "Welcome to the potpourri section of the demo." + + e "Here, we demonstrate features that don't fit in any of + the other sections, but don't warrant their own + section." + + ectc "Here, we demonstrate a click to continue + indicator. In this example, it's nestled in with the + text." + + ectc "This also demonstrates the use of the anim.Blink + function." + + ectcf "A click to continue image can also be placed at a + fixed location on the screen." + + e "That's it for now." + + + " " # Empty, so we have a blank line. + + "That's enough for me.": + + return + + e "Is there anything else you want demonstrated?" + + jump demo_menu + + +# Here, are a number of customizations that make the game look +# better. We place them down here at the bottom, to make the first few +# lines of the script look better. +# +# These can be deleted without issue, if you do not want them. + +init: + + # Change some styles, to add images in the background of + # the menus and windows. + $ style.mm_root_window.background = Image("mainmenu.jpg") + $ style.gm_root_window.background = Image("gamemenu.jpg") + $ style.window.background = Frame("frame.png", 25, 25) + + # Change the look of the slider. + $ style.bar.left_gutter = 10 + $ style.bar.right_gutter = 12 + $ style.bar.left_bar = Frame("slider_full.png", 10, 0) + $ style.bar.right_bar = Frame("slider_empty.png", 12, 0) + $ style.bar.thumb = Image("slider_idle.png") + $ style.bar.hover_thumb = Image("slider_hover.png") + $ style.bar.thumb_shadow = Image("slider_shadow.png") + $ style.bar.thumb_offset = -10 + + # Change some styles involving the margins and padding of the + # default window. (We need this, as we use a frame image that + # includes a drop-shadow.) + $ style.window.xmargin = 0 + $ style.window.ymargin = 0 + $ style.window.xpadding = 20 + $ style.window.top_padding = 5 + $ style.window.bottom_padding = 15 + + # Interface sounds, just for the heck of it. + $ style.button.activate_sound = 'click.wav' + $ style.imagemap.activate_sound = 'click.wav' + $ library.enter_sound = 'click.wav' + $ library.exit_sound = 'click.wav' + $ library.sample_sound = "18005551212.wav" + + # Select the transitions that are used when entering and exiting + # the game menu. + $ library.enter_transition = pixellate + $ library.exit_transition = pixellate + +# The splashscreen is called, if it exists, before the main menu is +# shown the first time. It is not called if the game has restarted. + +# We'll comment it out for now. +# +# label splashscreen: +# scene black +# show text "American Bishoujo Presents..." with dissolve +# $ renpy.pause(1.0) +# hide text with dissolve +# +# return \ No newline at end of file diff --git a/samples/RenderScript/convolve3x3.rs b/samples/RenderScript/convolve3x3.rs new file mode 100644 index 00000000..2acffab0 --- /dev/null +++ b/samples/RenderScript/convolve3x3.rs @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma version(1) +#pragma rs java_package_name(com.android.gallery3d.filtershow.filters) +#pragma rs_fp_relaxed + +int32_t gWidth; +int32_t gHeight; +const uchar4 *gPixels; +rs_allocation gIn; + +float gCoeffs[9]; + +void root(const uchar4 *in, uchar4 *out, const void *usrData, uint32_t x, uint32_t y) { + uint32_t x1 = min((int32_t)x+1, gWidth-1); + uint32_t x2 = max((int32_t)x-1, 0); + uint32_t y1 = min((int32_t)y+1, gHeight-1); + uint32_t y2 = max((int32_t)y-1, 0); + + float4 p00 = rsUnpackColor8888(gPixels[x1 + gWidth * y1]); + float4 p01 = rsUnpackColor8888(gPixels[x + gWidth * y1]); + float4 p02 = rsUnpackColor8888(gPixels[x2 + gWidth * y1]); + float4 p10 = rsUnpackColor8888(gPixels[x1 + gWidth * y]); + float4 p11 = rsUnpackColor8888(gPixels[x + gWidth * y]); + float4 p12 = rsUnpackColor8888(gPixels[x2 + gWidth * y]); + float4 p20 = rsUnpackColor8888(gPixels[x1 + gWidth * y2]); + float4 p21 = rsUnpackColor8888(gPixels[x + gWidth * y2]); + float4 p22 = rsUnpackColor8888(gPixels[x2 + gWidth * y2]); + + p00 *= gCoeffs[0]; + p01 *= gCoeffs[1]; + p02 *= gCoeffs[2]; + p10 *= gCoeffs[3]; + p11 *= gCoeffs[4]; + p12 *= gCoeffs[5]; + p20 *= gCoeffs[6]; + p21 *= gCoeffs[7]; + p22 *= gCoeffs[8]; + + p00 += p01; + p02 += p10; + p11 += p12; + p20 += p21; + + p22 += p00; + p02 += p11; + + p20 += p22; + p20 += p02; + + p20 = clamp(p20, 0.f, 1.f); + *out = rsPackColorTo8888(p20.r, p20.g, p20.b); +} diff --git a/samples/RenderScript/scenegraph_objects.rsh b/samples/RenderScript/scenegraph_objects.rsh new file mode 100644 index 00000000..bdca3ab1 --- /dev/null +++ b/samples/RenderScript/scenegraph_objects.rsh @@ -0,0 +1,323 @@ +// Copyright (C) 2011-2012 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma version(1) + +#pragma rs java_package_name(com.android.scenegraph) + +#ifndef _TRANSFORM_DEF_ +#define _TRANSFORM_DEF_ + +#include "rs_graphics.rsh" + +#define TRANSFORM_NONE 0 +#define TRANSFORM_TRANSLATE 1 +#define TRANSFORM_ROTATE 2 +#define TRANSFORM_SCALE 3 + +#define CULL_FRUSTUM 0 +#define CULL_ALWAYS 2 + +#define LIGHT_POINT 0 +#define LIGHT_DIRECTIONAL 1 + +// Shader params that involve only data +#define SHADER_PARAM_DATA_ONLY 10000 +#define SHADER_PARAM_FLOAT4_DATA 10001 +#define SHADER_PARAM_TRANSFORM_DATA 10002 +#define SHADER_PARAM_TRANSFORM_MODEL 10003 + +// Shader params that involve camera +#define SHADER_PARAM_CAMERA 1000 +#define SHADER_PARAM_FLOAT4_CAMERA_POS 1001 +#define SHADER_PARAM_FLOAT4_CAMERA_DIR 1002 +#define SHADER_PARAM_TRANSFORM_VIEW 1003 +#define SHADER_PARAM_TRANSFORM_PROJ 1004 +#define SHADER_PARAM_TRANSFORM_VIEW_PROJ 1005 +#define SHADER_PARAM_TRANSFORM_MODEL_VIEW 1006 +#define SHADER_PARAM_TRANSFORM_MODEL_VIEW_PROJ 1007 + +// Shader Params that only involve lights +#define SHADER_PARAM_LIGHT 100 +#define SHADER_PARAM_FLOAT4_LIGHT_COLOR 103 +#define SHADER_PARAM_FLOAT4_LIGHT_POS 104 +#define SHADER_PARAM_FLOAT4_LIGHT_DIR 105 + +#define SHADER_PARAM_TEXTURE 10 + +#define TEXTURE_NONE 0 +#define TEXTURE_2D 1 +#define TEXTURE_CUBE 2 +#define TEXTURE_RENDER_TARGET 3 + +typedef struct TransformComponent_s { + float4 value; + int type; + rs_allocation name; +} SgTransformComponent; + +typedef struct __attribute__((packed, aligned(4))) SgTransform { + rs_matrix4x4 globalMat; + rs_matrix4x4 localMat; + + rs_allocation components; + int isDirty; + + rs_allocation children; + rs_allocation name; + + // Used to check whether transform params need to be updated + uint32_t timestamp; +} SgTransform; + +typedef struct VertexShader_s { + rs_program_vertex program; + // Buffer with vertex constant data + rs_allocation shaderConst; + // ShaderParam's that populate data + rs_allocation shaderConstParams; + // location of the per object constants on the buffer + int objectConstIndex; +} SgVertexShader; + +typedef struct FragmentShader_s { + rs_program_fragment program; + // Buffer with vertex constant data + rs_allocation shaderConst; + // ShaderParam's that populate data + rs_allocation shaderConstParams; + // ShaderParam's that set textures + rs_allocation shaderTextureParams; + // location of the per object constants on the buffer + int objectConstIndex; +} SgFragmentShader; + +typedef struct RenderState_s { + rs_allocation pv; // VertexShader struct + rs_allocation pf; // FragmentShader struct + rs_program_store ps; + rs_program_raster pr; +} SgRenderState; + +typedef struct Renderable_s { + rs_allocation render_state; + // Buffer with vertex constant data + rs_allocation pv_const; + // ShaderParam's that populate data + rs_allocation pv_constParams; + // Buffer with fragment constant data + rs_allocation pf_const; + // ShaderParam's that populate data + rs_allocation pf_constParams; + rs_allocation pf_textures[8]; + int pf_num_textures; + rs_mesh mesh; + int meshIndex; + rs_allocation transformMatrix; + rs_allocation name; + float4 boundingSphere; + float4 worldBoundingSphere; + int bVolInitialized; + int cullType; // specifies whether to frustum cull + int isVisible; +} SgRenderable; + +typedef struct RenderPass_s { + rs_allocation color_target; + rs_allocation depth_target; + rs_allocation camera; + rs_allocation objects; + + float4 clear_color; + float clear_depth; + bool should_clear_color; + bool should_clear_depth; +} SgRenderPass; + +typedef struct Camera_s { + rs_matrix4x4 proj; + rs_matrix4x4 view; + rs_matrix4x4 viewProj; + float4 position; + float near; + float far; + float horizontalFOV; + float aspect; + rs_allocation name; + rs_allocation transformMatrix; + float4 frustumPlanes[6]; + + int isDirty; + // Timestamp of the camera itself to signal params if anything changes + uint32_t timestamp; + // Timestamp of our transform + uint32_t transformTimestamp; +} SgCamera; + +typedef struct Light_s { + float4 position; + float4 color; + float intensity; + int type; + rs_allocation name; + rs_allocation transformMatrix; +} SgLight; + +// This represents the shader parameter data needed to set a float or transform data +typedef struct ShaderParamData_s { + int type; + float4 float_value; + uint32_t timestamp; + rs_allocation paramName; + rs_allocation camera; + rs_allocation light; + rs_allocation transform; + rs_allocation texture; +} SgShaderParamData; + +// This represents a shader parameter that knows how to update itself for a given +// renderable or shader and contains a timestamp for the last time this buffer was updated +typedef struct ShaderParam_s { + // Used to check whether transform params need to be updated + uint32_t transformTimestamp; + // Used to check whether data params need to be updated + // These are used when somebody set the matrix of float value directly in java + uint32_t dataTimestamp; + // Specifies where in the constant buffer data gets written to + int bufferOffset; + // An instance of SgShaderParamData that could be shared by multiple objects + rs_allocation data; + // How many components of the vector we need to write + int float_vecSize; +} SgShaderParam; + +// This represents a texture object +typedef struct Texture_s { + uint32_t type; + rs_allocation texture; +} SgTexture; + +static void printName(rs_allocation name) { + if (!rsIsObject(name)) { + rsDebug("no name", 0); + return; + } + + rsDebug((const char*)rsGetElementAt(name, 0), 0); +} + +static void printCameraInfo(const SgCamera *cam) { + rsDebug("***** Camera information. ptr:", cam); + printName(cam->name); + const SgTransform *camTransform = (const SgTransform *)rsGetElementAt(cam->transformMatrix, 0); + rsDebug("Transform name:", camTransform); + printName(camTransform->name); + + rsDebug("Aspect: ", cam->aspect); + rsDebug("Near: ", cam->near); + rsDebug("Far: ", cam->far); + rsDebug("Fov: ", cam->horizontalFOV); + rsDebug("Position: ", cam->position); + rsDebug("Proj: ", &cam->proj); + rsDebug("View: ", &cam->view); +} + +static void printLightInfo(const SgLight *light) { + rsDebug("***** Light information. ptr:", light); + printName(light->name); + const SgTransform *lTransform = (const SgTransform *)rsGetElementAt(light->transformMatrix, 0); + rsDebug("Transform name:", lTransform); + printName(lTransform->name); + + rsDebug("Position: ", light->position); + rsDebug("Color : ", light->color); + rsDebug("Intensity: ", light->intensity); + rsDebug("Type: ", light->type); +} + +static void getCameraRay(const SgCamera *cam, int screenX, int screenY, float3 *pnt, float3 *vec) { + rsDebug("=================================", screenX); + rsDebug("Point X", screenX); + rsDebug("Point Y", screenY); + + rs_matrix4x4 mvpInv; + rsMatrixLoad(&mvpInv, &cam->viewProj); + rsMatrixInverse(&mvpInv); + + float width = (float)rsgGetWidth(); + float height = (float)rsgGetHeight(); + + float4 pos = {(float)screenX, height - (float)screenY, 0.0f, 1.0f}; + + pos.x /= width; + pos.y /= height; + + rsDebug("Pre Norm X", pos.x); + rsDebug("Pre Norm Y", pos.y); + + pos.xy = pos.xy * 2.0f - 1.0f; + + rsDebug("Norm X", pos.x); + rsDebug("Norm Y", pos.y); + + pos = rsMatrixMultiply(&mvpInv, pos); + float oneOverW = 1.0f / pos.w; + pos.xyz *= oneOverW; + + rsDebug("World X", pos.x); + rsDebug("World Y", pos.y); + rsDebug("World Z", pos.z); + + rsDebug("Cam X", cam->position.x); + rsDebug("Cam Y", cam->position.y); + rsDebug("Cam Z", cam->position.z); + + *vec = normalize(pos.xyz - cam->position.xyz); + rsDebug("Vec X", vec->x); + rsDebug("Vec Y", vec->y); + rsDebug("Vec Z", vec->z); + *pnt = cam->position.xyz; +} + +static bool intersect(const SgRenderable *obj, float3 pnt, float3 vec) { + // Solving for t^2 + Bt + C = 0 + float3 originMinusCenter = pnt - obj->worldBoundingSphere.xyz; + float B = dot(originMinusCenter, vec) * 2.0f; + float C = dot(originMinusCenter, originMinusCenter) - + obj->worldBoundingSphere.w * obj->worldBoundingSphere.w; + + float discriminant = B * B - 4.0f * C; + if (discriminant < 0.0f) { + return false; + } + discriminant = sqrt(discriminant); + + float t0 = (-B - discriminant) * 0.5f; + float t1 = (-B + discriminant) * 0.5f; + + if (t0 > t1) { + float temp = t0; + t0 = t1; + t1 = temp; + } + + // The sphere is behind us + if (t1 < 0.0f) { + return false; + } + return true; +} + + +#endif // _TRANSFORM_DEF_ diff --git a/samples/Ruby/filenames/Brewfile b/samples/Ruby/filenames/Brewfile new file mode 100644 index 00000000..d8448e68 --- /dev/null +++ b/samples/Ruby/filenames/Brewfile @@ -0,0 +1,9 @@ +tap 'caskroom/cask' +tap 'telemachus/brew', 'https://telemachus@bitbucket.org/telemachus/brew.git' +brew 'emacs', args: ['with-cocoa', 'with-gnutls'] +brew 'redis', restart_service: true +brew 'mongodb' +brew 'sphinx' +brew 'imagemagick' +brew 'mysql' +cask 'google-chrome' diff --git a/samples/Ruby/filenames/Deliverfile b/samples/Ruby/filenames/Deliverfile new file mode 100644 index 00000000..bd8b463d --- /dev/null +++ b/samples/Ruby/filenames/Deliverfile @@ -0,0 +1,50 @@ +require 'open-uri' + +framework_version = JSON.parse(open(url).read) + +# The URL below is password protected +apps = JSON.parse(open(url).read) + +app_id = Dir.pwd.split("/")[-2].to_i +app = apps[app_id.to_s] + +# The app identifier is required +app_identifier "net.sunapps.#{app_id}" + +version framework_version['version_number'] + +title( + 'de-DE' => app["fullName"] +) + +description( + 'de-DE' => app["description"]["de"] +) + +changelog( + 'de-DE' => framework_version["public_description"]["de"] +) + +keywords( + 'de-DE' => app["keywords"]["de"].split(",") +) + +app_icon "../Submission/AppIconFull.png" + +price_tier 0 # free app + +primary_category "Reference" + +secondary_category "Business" + +automatic_release true + +ratings_config_path "./ratings_config.json" + +app_review_information({ + first_name: "Felix", + phone_number: "My Phone Number", + demo_user: "", + demo_password: "", + notes: "" +}) \ No newline at end of file diff --git a/samples/Ruby/filenames/Fastfile b/samples/Ruby/filenames/Fastfile new file mode 100644 index 00000000..aed95f6f --- /dev/null +++ b/samples/Ruby/filenames/Fastfile @@ -0,0 +1,115 @@ +# Customise this file, documentation can be found here: +# https://github.com/KrauseFx/fastlane/tree/master/docs + +$:.unshift File.dirname(__FILE__) +require 'lib/utils.rb' + +fastlane_version "1.0.0" + +default_platform :ios + +platform :ios do + before_all do + ENV['DELIVER_WHAT_TO_TEST'] = git_commit_log + ensure_git_status_clean + end + + desc "Runs linting (and eventually static analysis)" + lane :analyze do + return if test_disabled? + make 'lint' + end + + desc "Runs all the unit tests." + lane :test do + return if test_disabled? + # TODO: lint & test JS code + xctest( + scheme: 'Wikipedia', + destination: "platform=iOS Simulator,name=iPhone 6,OS=8.3", + reports: [ + { + report: "html", + output: "build/reports/unit-tests.html" + }, + { + report: "junit", + output: "build/reports/unit-tests.xml" + } + ], + clean: nil + ) + end + + desc "Bump the version, and submit a new **Wikipedia Alpha** Build to Apple TestFlight" + lane :alpha do + # snapshot + sigh + increment_build_number + + # uncomment when CI is able to push tags + if ENV['WMF_BUMP'] + commit_version_bump + plist_version = get_version_short_string File.expand_path(File.join(ENV['PWD'], 'Wikipedia/Wikipedia-Info.plist')) + # tag must be added after the version bump is committed + add_git_tag(tag: "#{plist_version}.#{Actions.lane_context[Actions::SharedValues::BUILD_NUMBER]}") + end + + ipa( + configuration: "Alpha", + scheme: "Wikipedia Alpha", + ) + hockey( + notes: '', + notify: '0', # Means do not notify + status: '1', # Means do not make available for download + ) + deliver skip_deploy: true, beta: true + + # uncomment when CI is able to push tags + if ENV['WMF_BUMP'] + # only push after everything else has succeeded + push_to_git_remote + end + end + + desc "Submit a new **Wikipedia Beta** build to Apple TestFlight" + lane :beta do + # snapshot + sigh + ipa( + configuration: "Beta", + scheme: "Wikipedia Beta", + ) + hockey( + notes: '', + notify: '0', # Means do not notify + status: '1', # Means do not make available for download + ) + deliver skip_deploy: true, beta: true + end + + desc "Deploy a new version to the App Store" + lane :store do + # snapshot + sigh + ipa( + configuration: "Wikipedia", + scheme: "Wikipedia", + ) + hockey( + notes: '', + notify: '0', # Means do not notify + status: '1', # Means do not make available for download + ) + deliver skip_deploy: true, force: true + end + + after_all do |lane| + + end + + error do |lane, exception| + + end +end \ No newline at end of file diff --git a/samples/Ruby/filenames/Podfile b/samples/Ruby/filenames/Podfile new file mode 100644 index 00000000..2a03e4ae --- /dev/null +++ b/samples/Ruby/filenames/Podfile @@ -0,0 +1,18 @@ +source 'https://github.com/CocoaPods/Specs.git' + +platform :ios, :deployment_target => '6.0' + +inhibit_all_warnings! + +xcodeproj 'Wikipedia' + +pod 'AFNetworking/NSURLConnection', '~> 2.5' +pod 'hpple', '~> 0.2' +pod 'blockskit/Core', '~> 2.2' +pod 'Masonry', '~> 0.6' +pod 'HockeySDK', '3.6.2' + +target 'WikipediaUnitTests', :exclusive => false do + pod 'OCMockito', '~> 1.4' + pod 'OCHamcrest', '~> 4.1' +end diff --git a/samples/Ruby/filenames/Snapfile b/samples/Ruby/filenames/Snapfile new file mode 100644 index 00000000..182c7d1f --- /dev/null +++ b/samples/Ruby/filenames/Snapfile @@ -0,0 +1,26 @@ + +# Download the latest screenshot information from the CMS +app_id = Dir.pwd.split("/")[-2].to_i +File.write("./screenshots.json", open("https://...amazonaws.com/1.0/#{app_id}/....json").read) rescue nil + + +# A list of devices you want to take the screenshots from +devices([ + "iPhone 6", + "iPhone 6 Plus", + "iPhone 5", + "iPhone 4s" +]) + +languages([ + 'de-DE' +]) + +# Where should the resulting screenshots be stored? +screenshots_path "./screenshots" + +# JavaScript UIAutomation file +js_file './snapshot.js' + +# The name of the project's scheme +scheme 'Release' \ No newline at end of file diff --git a/samples/Ruby/gen-rb-linguist-thrift.rb b/samples/Ruby/gen-rb-linguist-thrift.rb new file mode 100644 index 00000000..931cf393 --- /dev/null +++ b/samples/Ruby/gen-rb-linguist-thrift.rb @@ -0,0 +1,9 @@ +# +# Autogenerated by Thrift Compiler (1.0.0-dev) +# +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING +# + +require 'thrift' +require 'linguist_types' + diff --git a/samples/Ruby/index.json.jbuilder b/samples/Ruby/index.json.jbuilder new file mode 100644 index 00000000..26c7bc67 --- /dev/null +++ b/samples/Ruby/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@courts) do |court| + json.extract! court, :id, :name_r, :region, :region_r, :email, :website + json.url court_url(court, format: :json) +end diff --git a/samples/Ruby/macruby.script! b/samples/Ruby/macruby similarity index 100% rename from samples/Ruby/macruby.script! rename to samples/Ruby/macruby diff --git a/samples/Ruby/racc.rb b/samples/Ruby/racc.rb new file mode 100644 index 00000000..a3e7f51c --- /dev/null +++ b/samples/Ruby/racc.rb @@ -0,0 +1,267 @@ +# +# DO NOT MODIFY!!!! +# This file is automatically generated by Racc 1.4.7 +# from Racc grammer file "". +# + +require 'racc/parser.rb' +module RJSON + class Parser < Racc::Parser + + + require 'rjson/handler' + + attr_reader :handler + + def initialize tokenizer, handler = Handler.new + @tokenizer = tokenizer + @handler = handler + super() + end + + def next_token + @tokenizer.next_token + end + + def parse + do_parse + handler + end +##### State transition tables begin ### + +racc_action_table = [ + 9, 33, 9, 11, 13, 16, 19, 22, 9, 7, + 23, 1, 9, 11, 13, 16, 19, 29, 30, 7, + 21, 1, 9, 11, 13, 16, 19, 31, nil, 7, + 21, 1, 23, 7, nil, 1 ] + +racc_action_check = [ + 6, 27, 33, 33, 33, 33, 33, 3, 31, 33, + 6, 33, 29, 29, 29, 29, 29, 12, 22, 29, + 12, 29, 2, 2, 2, 2, 2, 25, nil, 2, + 2, 2, 25, 0, nil, 0 ] + +racc_action_pointer = [ + 24, nil, 20, 7, nil, nil, -2, nil, nil, nil, + nil, nil, 10, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 18, nil, nil, 20, nil, -7, nil, 10, + nil, 6, nil, 0, nil, nil, nil ] + +racc_action_default = [ + -27, -12, -21, -27, -1, -2, -27, -10, -15, -26, + -8, -22, -27, -23, -17, -16, -24, -20, -18, -25, + -19, -11, -27, -13, -3, -27, -6, -27, -9, -21, + 37, -27, -4, -21, -14, -5, -7 ] + +racc_goto_table = [ + 8, 26, 24, 27, 10, 3, 25, 5, 4, 12, + nil, nil, nil, nil, 28, nil, nil, nil, nil, nil, + nil, 32, nil, nil, nil, nil, 35, 34, 27, nil, + nil, 36 ] + +racc_goto_check = [ + 9, 7, 5, 8, 11, 1, 6, 3, 2, 12, + nil, nil, nil, nil, 11, nil, nil, nil, nil, nil, + nil, 5, nil, nil, nil, nil, 7, 9, 8, nil, + nil, 9 ] + +racc_goto_pointer = [ + nil, 5, 8, 7, nil, -4, 0, -5, -3, -2, + nil, 2, 7, nil, nil ] + +racc_goto_default = [ + nil, nil, 14, 18, 6, nil, nil, nil, 20, nil, + 2, nil, nil, 15, 17 ] + +racc_reduce_table = [ + 0, 0, :racc_error, + 1, 14, :_reduce_none, + 1, 14, :_reduce_none, + 2, 15, :_reduce_none, + 3, 15, :_reduce_none, + 3, 19, :_reduce_none, + 1, 19, :_reduce_none, + 3, 20, :_reduce_none, + 2, 16, :_reduce_none, + 3, 16, :_reduce_none, + 1, 23, :_reduce_10, + 1, 24, :_reduce_11, + 1, 17, :_reduce_12, + 1, 18, :_reduce_13, + 3, 25, :_reduce_none, + 1, 25, :_reduce_none, + 1, 22, :_reduce_none, + 1, 22, :_reduce_none, + 1, 22, :_reduce_none, + 1, 26, :_reduce_none, + 1, 26, :_reduce_20, + 0, 27, :_reduce_none, + 1, 27, :_reduce_22, + 1, 27, :_reduce_23, + 1, 27, :_reduce_24, + 1, 27, :_reduce_25, + 1, 21, :_reduce_26 ] + +racc_reduce_n = 27 + +racc_shift_n = 37 + +racc_token_table = { + false => 0, + :error => 1, + :STRING => 2, + :NUMBER => 3, + :TRUE => 4, + :FALSE => 5, + :NULL => 6, + "," => 7, + ":" => 8, + "[" => 9, + "]" => 10, + "{" => 11, + "}" => 12 } + +racc_nt_base = 13 + +racc_use_result_var = true + +Racc_arg = [ + racc_action_table, + racc_action_check, + racc_action_default, + racc_action_pointer, + racc_goto_table, + racc_goto_check, + racc_goto_default, + racc_goto_pointer, + racc_nt_base, + racc_reduce_table, + racc_token_table, + racc_shift_n, + racc_reduce_n, + racc_use_result_var ] + +Racc_token_to_s_table = [ + "$end", + "error", + "STRING", + "NUMBER", + "TRUE", + "FALSE", + "NULL", + "\",\"", + "\":\"", + "\"[\"", + "\"]\"", + "\"{\"", + "\"}\"", + "$start", + "document", + "object", + "array", + "start_object", + "end_object", + "pairs", + "pair", + "string", + "value", + "start_array", + "end_array", + "values", + "scalar", + "literal" ] + +Racc_debug_parser = false + +##### State transition tables end ##### + +# reduce 0 omitted + +# reduce 1 omitted + +# reduce 2 omitted + +# reduce 3 omitted + +# reduce 4 omitted + +# reduce 5 omitted + +# reduce 6 omitted + +# reduce 7 omitted + +# reduce 8 omitted + +# reduce 9 omitted + +def _reduce_10(val, _values, result) + @handler.start_array + result +end + +def _reduce_11(val, _values, result) + @handler.end_array + result +end + +def _reduce_12(val, _values, result) + @handler.start_object + result +end + +def _reduce_13(val, _values, result) + @handler.end_object + result +end + +# reduce 14 omitted + +# reduce 15 omitted + +# reduce 16 omitted + +# reduce 17 omitted + +# reduce 18 omitted + +# reduce 19 omitted + +def _reduce_20(val, _values, result) + @handler.scalar val[0] + result +end + +# reduce 21 omitted + +def _reduce_22(val, _values, result) + n = val[0]; result = n.count('.') > 0 ? n.to_f : n.to_i + result +end + +def _reduce_23(val, _values, result) + result = true + result +end + +def _reduce_24(val, _values, result) + result = false + result +end + +def _reduce_25(val, _values, result) + result = nil + result +end + +def _reduce_26(val, _values, result) + @handler.scalar val[0].gsub(/^"|"$/, '') + result +end + +def _reduce_none(val, _values, result) + val[0] +end + + end # class Parser + end # module RJSON diff --git a/samples/Ruby/rexpl b/samples/Ruby/rexpl new file mode 100755 index 00000000..e55b1cd5 --- /dev/null +++ b/samples/Ruby/rexpl @@ -0,0 +1,4 @@ +#!/usr/bin/env rbx +$: << 'lib' +require 'rexpl' +Rexpl::Environment.run diff --git a/samples/Ruby/ruby.script! b/samples/Ruby/ruby similarity index 100% rename from samples/Ruby/ruby.script! rename to samples/Ruby/ruby diff --git a/samples/Ruby/ruby2.script! b/samples/Ruby/ruby2 similarity index 100% rename from samples/Ruby/ruby2.script! rename to samples/Ruby/ruby2 diff --git a/samples/Ruby/shoes-swt b/samples/Ruby/shoes-swt new file mode 100755 index 00000000..df746edd --- /dev/null +++ b/samples/Ruby/shoes-swt @@ -0,0 +1,11 @@ +#!/usr/bin/env jruby +lib_directory = File.expand_path('../../lib', __FILE__) +$LOAD_PATH << lib_directory + +if File.exist?("Gemfile") + require "bundler/setup" + Bundler.require +end + +require 'shoes/ui/cli' +Shoes::CLI.new("swt").run ARGV diff --git a/samples/Rust/hashmap.rs b/samples/Rust/hashmap.rs new file mode 100644 index 00000000..093218c6 --- /dev/null +++ b/samples/Rust/hashmap.rs @@ -0,0 +1,2324 @@ +// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use self::Entry::*; +use self::SearchResult::*; +use self::VacantEntryState::*; + +use borrow::Borrow; +use clone::Clone; +use cmp::{max, Eq, PartialEq}; +use default::Default; +use fmt::{self, Debug}; +use hash::{Hash, SipHasher}; +use iter::{self, Iterator, ExactSizeIterator, IntoIterator, FromIterator, Extend, Map}; +use marker::Sized; +use mem::{self, replace}; +use ops::{Deref, FnMut, FnOnce, Index}; +use option::Option::{self, Some, None}; +use rand::{self, Rng}; +use result::Result::{self, Ok, Err}; + +use super::table::{ + self, + Bucket, + EmptyBucket, + FullBucket, + FullBucketImm, + FullBucketMut, + RawTable, + SafeHash +}; +use super::table::BucketState::{ + Empty, + Full, +}; +use super::state::HashState; + +const INITIAL_LOG2_CAP: usize = 5; +#[unstable(feature = "std_misc")] +pub const INITIAL_CAPACITY: usize = 1 << INITIAL_LOG2_CAP; // 2^5 + +/// The default behavior of HashMap implements a load factor of 90.9%. +/// This behavior is characterized by the following condition: +/// +/// - if size > 0.909 * capacity: grow the map +#[derive(Clone)] +struct DefaultResizePolicy; + +impl DefaultResizePolicy { + fn new() -> DefaultResizePolicy { + DefaultResizePolicy + } + + #[inline] + fn min_capacity(&self, usable_size: usize) -> usize { + // Here, we are rephrasing the logic by specifying the lower limit + // on capacity: + // + // - if `cap < size * 1.1`: grow the map + usable_size * 11 / 10 + } + + /// An inverse of `min_capacity`, approximately. + #[inline] + fn usable_capacity(&self, cap: usize) -> usize { + // As the number of entries approaches usable capacity, + // min_capacity(size) must be smaller than the internal capacity, + // so that the map is not resized: + // `min_capacity(usable_capacity(x)) <= x`. + // The left-hand side can only be smaller due to flooring by integer + // division. + // + // This doesn't have to be checked for overflow since allocation size + // in bytes will overflow earlier than multiplication by 10. + cap * 10 / 11 + } +} + +#[test] +fn test_resize_policy() { + let rp = DefaultResizePolicy; + for n in 0..1000 { + assert!(rp.min_capacity(rp.usable_capacity(n)) <= n); + assert!(rp.usable_capacity(rp.min_capacity(n)) <= n); + } +} + +// The main performance trick in this hashmap is called Robin Hood Hashing. +// It gains its excellent performance from one essential operation: +// +// If an insertion collides with an existing element, and that element's +// "probe distance" (how far away the element is from its ideal location) +// is higher than how far we've already probed, swap the elements. +// +// This massively lowers variance in probe distance, and allows us to get very +// high load factors with good performance. The 90% load factor I use is rather +// conservative. +// +// > Why a load factor of approximately 90%? +// +// In general, all the distances to initial buckets will converge on the mean. +// At a load factor of α, the odds of finding the target bucket after k +// probes is approximately 1-α^k. If we set this equal to 50% (since we converge +// on the mean) and set k=8 (64-byte cache line / 8-byte hash), α=0.92. I round +// this down to make the math easier on the CPU and avoid its FPU. +// Since on average we start the probing in the middle of a cache line, this +// strategy pulls in two cache lines of hashes on every lookup. I think that's +// pretty good, but if you want to trade off some space, it could go down to one +// cache line on average with an α of 0.84. +// +// > Wait, what? Where did you get 1-α^k from? +// +// On the first probe, your odds of a collision with an existing element is α. +// The odds of doing this twice in a row is approximately α^2. For three times, +// α^3, etc. Therefore, the odds of colliding k times is α^k. The odds of NOT +// colliding after k tries is 1-α^k. +// +// The paper from 1986 cited below mentions an implementation which keeps track +// of the distance-to-initial-bucket histogram. This approach is not suitable +// for modern architectures because it requires maintaining an internal data +// structure. This allows very good first guesses, but we are most concerned +// with guessing entire cache lines, not individual indexes. Furthermore, array +// accesses are no longer linear and in one direction, as we have now. There +// is also memory and cache pressure that this would entail that would be very +// difficult to properly see in a microbenchmark. +// +// ## Future Improvements (FIXME!) +// +// Allow the load factor to be changed dynamically and/or at initialization. +// +// Also, would it be possible for us to reuse storage when growing the +// underlying table? This is exactly the use case for 'realloc', and may +// be worth exploring. +// +// ## Future Optimizations (FIXME!) +// +// Another possible design choice that I made without any real reason is +// parameterizing the raw table over keys and values. Technically, all we need +// is the size and alignment of keys and values, and the code should be just as +// efficient (well, we might need one for power-of-two size and one for not...). +// This has the potential to reduce code bloat in rust executables, without +// really losing anything except 4 words (key size, key alignment, val size, +// val alignment) which can be passed in to every call of a `RawTable` function. +// This would definitely be an avenue worth exploring if people start complaining +// about the size of rust executables. +// +// Annotate exceedingly likely branches in `table::make_hash` +// and `search_hashed` to reduce instruction cache pressure +// and mispredictions once it becomes possible (blocked on issue #11092). +// +// Shrinking the table could simply reallocate in place after moving buckets +// to the first half. +// +// The growth algorithm (fragment of the Proof of Correctness) +// -------------------- +// +// The growth algorithm is basically a fast path of the naive reinsertion- +// during-resize algorithm. Other paths should never be taken. +// +// Consider growing a robin hood hashtable of capacity n. Normally, we do this +// by allocating a new table of capacity `2n`, and then individually reinsert +// each element in the old table into the new one. This guarantees that the +// new table is a valid robin hood hashtable with all the desired statistical +// properties. Remark that the order we reinsert the elements in should not +// matter. For simplicity and efficiency, we will consider only linear +// reinsertions, which consist of reinserting all elements in the old table +// into the new one by increasing order of index. However we will not be +// starting our reinsertions from index 0 in general. If we start from index +// i, for the purpose of reinsertion we will consider all elements with real +// index j < i to have virtual index n + j. +// +// Our hash generation scheme consists of generating a 64-bit hash and +// truncating the most significant bits. When moving to the new table, we +// simply introduce a new bit to the front of the hash. Therefore, if an +// elements has ideal index i in the old table, it can have one of two ideal +// locations in the new table. If the new bit is 0, then the new ideal index +// is i. If the new bit is 1, then the new ideal index is n + i. Intuitively, +// we are producing two independent tables of size n, and for each element we +// independently choose which table to insert it into with equal probability. +// However the rather than wrapping around themselves on overflowing their +// indexes, the first table overflows into the first, and the first into the +// second. Visually, our new table will look something like: +// +// [yy_xxx_xxxx_xxx|xx_yyy_yyyy_yyy] +// +// Where x's are elements inserted into the first table, y's are elements +// inserted into the second, and _'s are empty sections. We now define a few +// key concepts that we will use later. Note that this is a very abstract +// perspective of the table. A real resized table would be at least half +// empty. +// +// Theorem: A linear robin hood reinsertion from the first ideal element +// produces identical results to a linear naive reinsertion from the same +// element. +// +// FIXME(Gankro, pczarn): review the proof and put it all in a separate README.md + +/// A hash map implementation which uses linear probing with Robin +/// Hood bucket stealing. +/// +/// The hashes are all keyed by the thread-local random number generator +/// on creation by default. This means that the ordering of the keys is +/// randomized, but makes the tables more resistant to +/// denial-of-service attacks (Hash DoS). This behaviour can be +/// overridden with one of the constructors. +/// +/// It is required that the keys implement the `Eq` and `Hash` traits, although +/// this can frequently be achieved by using `#[derive(PartialEq, Eq, Hash)]`. +/// If you implement these yourself, it is important that the following +/// property holds: +/// +/// ```text +/// k1 == k2 -> hash(k1) == hash(k2) +/// ``` +/// +/// In other words, if two keys are equal, their hashes must be equal. +/// +/// It is a logic error for a key to be modified in such a way that the key's +/// hash, as determined by the `Hash` trait, or its equality, as determined by +/// the `Eq` trait, changes while it is in the map. This is normally only +/// possible through `Cell`, `RefCell`, global state, I/O, or unsafe code. +/// +/// Relevant papers/articles: +/// +/// 1. Pedro Celis. ["Robin Hood Hashing"](https://cs.uwaterloo.ca/research/tr/1986/CS-86-14.pdf) +/// 2. Emmanuel Goossaert. ["Robin Hood +/// hashing"](http://codecapsule.com/2013/11/11/robin-hood-hashing/) +/// 3. Emmanuel Goossaert. ["Robin Hood hashing: backward shift +/// deletion"](http://codecapsule.com/2013/11/17/robin-hood-hashing-backward-shift-deletion/) +/// +/// # Examples +/// +/// ``` +/// use std::collections::HashMap; +/// +/// // type inference lets us omit an explicit type signature (which +/// // would be `HashMap<&str, &str>` in this example). +/// let mut book_reviews = HashMap::new(); +/// +/// // review some books. +/// book_reviews.insert("Adventures of Huckleberry Finn", "My favorite book."); +/// book_reviews.insert("Grimms' Fairy Tales", "Masterpiece."); +/// book_reviews.insert("Pride and Prejudice", "Very enjoyable."); +/// book_reviews.insert("The Adventures of Sherlock Holmes", "Eye lyked it alot."); +/// +/// // check for a specific one. +/// if !book_reviews.contains_key("Les Misérables") { +/// println!("We've got {} reviews, but Les Misérables ain't one.", +/// book_reviews.len()); +/// } +/// +/// // oops, this review has a lot of spelling mistakes, let's delete it. +/// book_reviews.remove("The Adventures of Sherlock Holmes"); +/// +/// // look up the values associated with some keys. +/// let to_find = ["Pride and Prejudice", "Alice's Adventure in Wonderland"]; +/// for book in &to_find { +/// match book_reviews.get(book) { +/// Some(review) => println!("{}: {}", book, review), +/// None => println!("{} is unreviewed.", book) +/// } +/// } +/// +/// // iterate over everything. +/// for (book, review) in &book_reviews { +/// println!("{}: \"{}\"", book, review); +/// } +/// ``` +/// +/// The easiest way to use `HashMap` with a custom type as key is to derive `Eq` and `Hash`. +/// We must also derive `PartialEq`. +/// +/// ``` +/// use std::collections::HashMap; +/// +/// #[derive(Hash, Eq, PartialEq, Debug)] +/// struct Viking { +/// name: String, +/// country: String, +/// } +/// +/// impl Viking { +/// /// Create a new Viking. +/// fn new(name: &str, country: &str) -> Viking { +/// Viking { name: name.to_string(), country: country.to_string() } +/// } +/// } +/// +/// // Use a HashMap to store the vikings' health points. +/// let mut vikings = HashMap::new(); +/// +/// vikings.insert(Viking::new("Einar", "Norway"), 25); +/// vikings.insert(Viking::new("Olaf", "Denmark"), 24); +/// vikings.insert(Viking::new("Harald", "Iceland"), 12); +/// +/// // Use derived implementation to print the status of the vikings. +/// for (viking, health) in &vikings { +/// println!("{:?} has {} hp", viking, health); +/// } +/// ``` +#[derive(Clone)] +#[stable(feature = "rust1", since = "1.0.0")] +pub struct HashMap { + // All hashes are keyed on these values, to prevent hash collision attacks. + hash_state: S, + + table: RawTable, + + resize_policy: DefaultResizePolicy, +} + +/// Search for a pre-hashed key. +fn search_hashed(table: M, + hash: SafeHash, + mut is_match: F) + -> SearchResult where + M: Deref>, + F: FnMut(&K) -> bool, +{ + // This is the only function where capacity can be zero. To avoid + // undefined behaviour when Bucket::new gets the raw bucket in this + // case, immediately return the appropriate search result. + if table.capacity() == 0 { + return TableRef(table); + } + + let size = table.size(); + let mut probe = Bucket::new(table, hash); + let ib = probe.index(); + + while probe.index() != ib + size { + let full = match probe.peek() { + Empty(b) => return TableRef(b.into_table()), // hit an empty bucket + Full(b) => b + }; + + if full.distance() + ib < full.index() { + // We can finish the search early if we hit any bucket + // with a lower distance to initial bucket than we've probed. + return TableRef(full.into_table()); + } + + // If the hash doesn't match, it can't be this one.. + if hash == full.hash() { + // If the key doesn't match, it can't be this one.. + if is_match(full.read().0) { + return FoundExisting(full); + } + } + + probe = full.next(); + } + + TableRef(probe.into_table()) +} + +fn pop_internal(starting_bucket: FullBucketMut) -> (K, V) { + let (empty, retkey, retval) = starting_bucket.take(); + let mut gap = match empty.gap_peek() { + Some(b) => b, + None => return (retkey, retval) + }; + + while gap.full().distance() != 0 { + gap = match gap.shift() { + Some(b) => b, + None => break + }; + } + + // Now we've done all our shifting. Return the value we grabbed earlier. + (retkey, retval) +} + +/// Perform robin hood bucket stealing at the given `bucket`. You must +/// also pass the position of that bucket's initial bucket so we don't have +/// to recalculate it. +/// +/// `hash`, `k`, and `v` are the elements to "robin hood" into the hashtable. +fn robin_hood<'a, K: 'a, V: 'a>(mut bucket: FullBucketMut<'a, K, V>, + mut ib: usize, + mut hash: SafeHash, + mut k: K, + mut v: V) + -> &'a mut V { + let starting_index = bucket.index(); + let size = { + let table = bucket.table(); // FIXME "lifetime too short". + table.size() + }; + // There can be at most `size - dib` buckets to displace, because + // in the worst case, there are `size` elements and we already are + // `distance` buckets away from the initial one. + let idx_end = starting_index + size - bucket.distance(); + + loop { + let (old_hash, old_key, old_val) = bucket.replace(hash, k, v); + loop { + let probe = bucket.next(); + assert!(probe.index() != idx_end); + + let full_bucket = match probe.peek() { + Empty(bucket) => { + // Found a hole! + let b = bucket.put(old_hash, old_key, old_val); + // Now that it's stolen, just read the value's pointer + // right out of the table! + return Bucket::at_index(b.into_table(), starting_index) + .peek() + .expect_full() + .into_mut_refs() + .1; + }, + Full(bucket) => bucket + }; + + let probe_ib = full_bucket.index() - full_bucket.distance(); + + bucket = full_bucket; + + // Robin hood! Steal the spot. + if ib < probe_ib { + ib = probe_ib; + hash = old_hash; + k = old_key; + v = old_val; + break; + } + } + } +} + +/// A result that works like Option> but preserves +/// the reference that grants us access to the table in any case. +enum SearchResult { + // This is an entry that holds the given key: + FoundExisting(FullBucket), + + // There was no such entry. The reference is given back: + TableRef(M) +} + +impl SearchResult { + fn into_option(self) -> Option> { + match self { + FoundExisting(bucket) => Some(bucket), + TableRef(_) => None + } + } +} + +impl HashMap + where K: Eq + Hash, S: HashState +{ + fn make_hash(&self, x: &X) -> SafeHash where X: Hash { + table::make_hash(&self.hash_state, x) + } + + /// Search for a key, yielding the index if it's found in the hashtable. + /// If you already have the hash for the key lying around, use + /// search_hashed. + fn search<'a, Q: ?Sized>(&'a self, q: &Q) -> Option> + where K: Borrow, Q: Eq + Hash + { + let hash = self.make_hash(q); + search_hashed(&self.table, hash, |k| q.eq(k.borrow())) + .into_option() + } + + fn search_mut<'a, Q: ?Sized>(&'a mut self, q: &Q) -> Option> + where K: Borrow, Q: Eq + Hash + { + let hash = self.make_hash(q); + search_hashed(&mut self.table, hash, |k| q.eq(k.borrow())) + .into_option() + } + + // The caller should ensure that invariants by Robin Hood Hashing hold. + fn insert_hashed_ordered(&mut self, hash: SafeHash, k: K, v: V) { + let cap = self.table.capacity(); + let mut buckets = Bucket::new(&mut self.table, hash); + let ib = buckets.index(); + + while buckets.index() != ib + cap { + // We don't need to compare hashes for value swap. + // Not even DIBs for Robin Hood. + buckets = match buckets.peek() { + Empty(empty) => { + empty.put(hash, k, v); + return; + } + Full(b) => b.into_bucket() + }; + buckets.next(); + } + panic!("Internal HashMap error: Out of space."); + } +} + +impl HashMap { + /// Creates an empty HashMap. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let mut map: HashMap<&str, isize> = HashMap::new(); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn new() -> HashMap { + Default::default() + } + + /// Creates an empty hash map with the given initial capacity. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let mut map: HashMap<&str, isize> = HashMap::with_capacity(10); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn with_capacity(capacity: usize) -> HashMap { + HashMap::with_capacity_and_hash_state(capacity, Default::default()) + } +} + +impl HashMap + where K: Eq + Hash, S: HashState +{ + /// Creates an empty hashmap which will use the given hasher to hash keys. + /// + /// The created map has the default initial capacity. + /// + /// # Examples + /// + /// ``` + /// # #![feature(std_misc)] + /// use std::collections::HashMap; + /// use std::collections::hash_map::RandomState; + /// + /// let s = RandomState::new(); + /// let mut map = HashMap::with_hash_state(s); + /// map.insert(1, 2); + /// ``` + #[inline] + #[unstable(feature = "std_misc", reason = "hasher stuff is unclear")] + pub fn with_hash_state(hash_state: S) -> HashMap { + HashMap { + hash_state: hash_state, + resize_policy: DefaultResizePolicy::new(), + table: RawTable::new(0), + } + } + + /// Creates an empty HashMap with space for at least `capacity` + /// elements, using `hasher` to hash the keys. + /// + /// Warning: `hasher` is normally randomly generated, and + /// is designed to allow HashMaps to be resistant to attacks that + /// cause many collisions and very poor performance. Setting it + /// manually using this function can expose a DoS attack vector. + /// + /// # Examples + /// + /// ``` + /// # #![feature(std_misc)] + /// use std::collections::HashMap; + /// use std::collections::hash_map::RandomState; + /// + /// let s = RandomState::new(); + /// let mut map = HashMap::with_capacity_and_hash_state(10, s); + /// map.insert(1, 2); + /// ``` + #[inline] + #[unstable(feature = "std_misc", reason = "hasher stuff is unclear")] + pub fn with_capacity_and_hash_state(capacity: usize, hash_state: S) + -> HashMap { + let resize_policy = DefaultResizePolicy::new(); + let min_cap = max(INITIAL_CAPACITY, resize_policy.min_capacity(capacity)); + let internal_cap = min_cap.checked_next_power_of_two().expect("capacity overflow"); + assert!(internal_cap >= capacity, "capacity overflow"); + HashMap { + hash_state: hash_state, + resize_policy: resize_policy, + table: RawTable::new(internal_cap), + } + } + + /// Returns the number of elements the map can hold without reallocating. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let map: HashMap = HashMap::with_capacity(100); + /// assert!(map.capacity() >= 100); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn capacity(&self) -> usize { + self.resize_policy.usable_capacity(self.table.capacity()) + } + + /// Reserves capacity for at least `additional` more elements to be inserted + /// in the `HashMap`. The collection may reserve more space to avoid + /// frequent reallocations. + /// + /// # Panics + /// + /// Panics if the new allocation size overflows `usize`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let mut map: HashMap<&str, isize> = HashMap::new(); + /// map.reserve(10); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn reserve(&mut self, additional: usize) { + let new_size = self.len().checked_add(additional).expect("capacity overflow"); + let min_cap = self.resize_policy.min_capacity(new_size); + + // An invalid value shouldn't make us run out of space. This includes + // an overflow check. + assert!(new_size <= min_cap); + + if self.table.capacity() < min_cap { + let new_capacity = max(min_cap.next_power_of_two(), INITIAL_CAPACITY); + self.resize(new_capacity); + } + } + + /// Resizes the internal vectors to a new capacity. It's your responsibility to: + /// 1) Make sure the new capacity is enough for all the elements, accounting + /// for the load factor. + /// 2) Ensure new_capacity is a power of two or zero. + fn resize(&mut self, new_capacity: usize) { + assert!(self.table.size() <= new_capacity); + assert!(new_capacity.is_power_of_two() || new_capacity == 0); + + let mut old_table = replace(&mut self.table, RawTable::new(new_capacity)); + let old_size = old_table.size(); + + if old_table.capacity() == 0 || old_table.size() == 0 { + return; + } + + // Grow the table. + // Specialization of the other branch. + let mut bucket = Bucket::first(&mut old_table); + + // "So a few of the first shall be last: for many be called, + // but few chosen." + // + // We'll most likely encounter a few buckets at the beginning that + // have their initial buckets near the end of the table. They were + // placed at the beginning as the probe wrapped around the table + // during insertion. We must skip forward to a bucket that won't + // get reinserted too early and won't unfairly steal others spot. + // This eliminates the need for robin hood. + loop { + bucket = match bucket.peek() { + Full(full) => { + if full.distance() == 0 { + // This bucket occupies its ideal spot. + // It indicates the start of another "cluster". + bucket = full.into_bucket(); + break; + } + // Leaving this bucket in the last cluster for later. + full.into_bucket() + } + Empty(b) => { + // Encountered a hole between clusters. + b.into_bucket() + } + }; + bucket.next(); + } + + // This is how the buckets might be laid out in memory: + // ($ marks an initialized bucket) + // ________________ + // |$$$_$$$$$$_$$$$$| + // + // But we've skipped the entire initial cluster of buckets + // and will continue iteration in this order: + // ________________ + // |$$$$$$_$$$$$ + // ^ wrap around once end is reached + // ________________ + // $$$_____________| + // ^ exit once table.size == 0 + loop { + bucket = match bucket.peek() { + Full(bucket) => { + let h = bucket.hash(); + let (b, k, v) = bucket.take(); + self.insert_hashed_ordered(h, k, v); + { + let t = b.table(); // FIXME "lifetime too short". + if t.size() == 0 { break } + }; + b.into_bucket() + } + Empty(b) => b.into_bucket() + }; + bucket.next(); + } + + assert_eq!(self.table.size(), old_size); + } + + /// Shrinks the capacity of the map as much as possible. It will drop + /// down as much as possible while maintaining the internal rules + /// and possibly leaving some space in accordance with the resize policy. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map: HashMap = HashMap::with_capacity(100); + /// map.insert(1, 2); + /// map.insert(3, 4); + /// assert!(map.capacity() >= 100); + /// map.shrink_to_fit(); + /// assert!(map.capacity() >= 2); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn shrink_to_fit(&mut self) { + let min_capacity = self.resize_policy.min_capacity(self.len()); + let min_capacity = max(min_capacity.next_power_of_two(), INITIAL_CAPACITY); + + // An invalid value shouldn't make us run out of space. + debug_assert!(self.len() <= min_capacity); + + if self.table.capacity() != min_capacity { + let old_table = replace(&mut self.table, RawTable::new(min_capacity)); + let old_size = old_table.size(); + + // Shrink the table. Naive algorithm for resizing: + for (h, k, v) in old_table.into_iter() { + self.insert_hashed_nocheck(h, k, v); + } + + debug_assert_eq!(self.table.size(), old_size); + } + } + + /// Insert a pre-hashed key-value pair, without first checking + /// that there's enough room in the buckets. Returns a reference to the + /// newly insert value. + /// + /// If the key already exists, the hashtable will be returned untouched + /// and a reference to the existing element will be returned. + fn insert_hashed_nocheck(&mut self, hash: SafeHash, k: K, v: V) -> &mut V { + self.insert_or_replace_with(hash, k, v, |_, _, _| ()) + } + + fn insert_or_replace_with<'a, F>(&'a mut self, + hash: SafeHash, + k: K, + v: V, + mut found_existing: F) + -> &'a mut V where + F: FnMut(&mut K, &mut V, V), + { + // Worst case, we'll find one empty bucket among `size + 1` buckets. + let size = self.table.size(); + let mut probe = Bucket::new(&mut self.table, hash); + let ib = probe.index(); + + loop { + let mut bucket = match probe.peek() { + Empty(bucket) => { + // Found a hole! + return bucket.put(hash, k, v).into_mut_refs().1; + } + Full(bucket) => bucket + }; + + // hash matches? + if bucket.hash() == hash { + // key matches? + if k == *bucket.read_mut().0 { + let (bucket_k, bucket_v) = bucket.into_mut_refs(); + debug_assert!(k == *bucket_k); + // Key already exists. Get its reference. + found_existing(bucket_k, bucket_v, v); + return bucket_v; + } + } + + let robin_ib = bucket.index() as isize - bucket.distance() as isize; + + if (ib as isize) < robin_ib { + // Found a luckier bucket than me. Better steal his spot. + return robin_hood(bucket, robin_ib as usize, hash, k, v); + } + + probe = bucket.next(); + assert!(probe.index() != ib + size + 1); + } + } + + /// An iterator visiting all keys in arbitrary order. + /// Iterator element type is `&'a K`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// for key in map.keys() { + /// println!("{}", key); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn keys<'a>(&'a self) -> Keys<'a, K, V> { + fn first((a, _): (A, B)) -> A { a } + let first: fn((&'a K,&'a V)) -> &'a K = first; // coerce to fn ptr + + Keys { inner: self.iter().map(first) } + } + + /// An iterator visiting all values in arbitrary order. + /// Iterator element type is `&'a V`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// for val in map.values() { + /// println!("{}", val); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn values<'a>(&'a self) -> Values<'a, K, V> { + fn second((_, b): (A, B)) -> B { b } + let second: fn((&'a K,&'a V)) -> &'a V = second; // coerce to fn ptr + + Values { inner: self.iter().map(second) } + } + + /// An iterator visiting all key-value pairs in arbitrary order. + /// Iterator element type is `(&'a K, &'a V)`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// for (key, val) in map.iter() { + /// println!("key: {} val: {}", key, val); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn iter(&self) -> Iter { + Iter { inner: self.table.iter() } + } + + /// An iterator visiting all key-value pairs in arbitrary order, + /// with mutable references to the values. + /// Iterator element type is `(&'a K, &'a mut V)`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// // Update all values + /// for (_, val) in map.iter_mut() { + /// *val *= 2; + /// } + /// + /// for (key, val) in map.iter() { + /// println!("key: {} val: {}", key, val); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn iter_mut(&mut self) -> IterMut { + IterMut { inner: self.table.iter_mut() } + } + + /// Gets the given key's corresponding entry in the map for in-place manipulation. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut letters = HashMap::new(); + /// + /// for ch in "a short treatise on fungi".chars() { + /// let counter = letters.entry(ch).or_insert(0); + /// *counter += 1; + /// } + /// + /// assert_eq!(letters[&'s'], 2); + /// assert_eq!(letters[&'t'], 3); + /// assert_eq!(letters[&'u'], 1); + /// assert_eq!(letters.get(&'y'), None); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn entry(&mut self, key: K) -> Entry { + // Gotta resize now. + self.reserve(1); + + let hash = self.make_hash(&key); + search_entry_hashed(&mut self.table, hash, key) + } + + /// Returns the number of elements in the map. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// assert_eq!(a.len(), 0); + /// a.insert(1, "a"); + /// assert_eq!(a.len(), 1); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn len(&self) -> usize { self.table.size() } + + /// Returns true if the map contains no elements. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// assert!(a.is_empty()); + /// a.insert(1, "a"); + /// assert!(!a.is_empty()); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn is_empty(&self) -> bool { self.len() == 0 } + + /// Clears the map, returning all key-value pairs as an iterator. Keeps the + /// allocated memory for reuse. + /// + /// # Examples + /// + /// ``` + /// # #![feature(std_misc)] + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// a.insert(1, "a"); + /// a.insert(2, "b"); + /// + /// for (k, v) in a.drain().take(1) { + /// assert!(k == 1 || k == 2); + /// assert!(v == "a" || v == "b"); + /// } + /// + /// assert!(a.is_empty()); + /// ``` + #[inline] + #[unstable(feature = "std_misc", + reason = "matches collection reform specification, waiting for dust to settle")] + pub fn drain(&mut self) -> Drain { + fn last_two((_, b, c): (A, B, C)) -> (B, C) { (b, c) } + let last_two: fn((SafeHash, K, V)) -> (K, V) = last_two; // coerce to fn pointer + + Drain { + inner: self.table.drain().map(last_two), + } + } + + /// Clears the map, removing all key-value pairs. Keeps the allocated memory + /// for reuse. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// a.insert(1, "a"); + /// a.clear(); + /// assert!(a.is_empty()); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + #[inline] + pub fn clear(&mut self) { + self.drain(); + } + + /// Returns a reference to the value corresponding to the key. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// assert_eq!(map.get(&1), Some(&"a")); + /// assert_eq!(map.get(&2), None); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get(&self, k: &Q) -> Option<&V> + where K: Borrow, Q: Hash + Eq + { + self.search(k).map(|bucket| bucket.into_refs().1) + } + + /// Returns true if the map contains a value for the specified key. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// assert_eq!(map.contains_key(&1), true); + /// assert_eq!(map.contains_key(&2), false); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn contains_key(&self, k: &Q) -> bool + where K: Borrow, Q: Hash + Eq + { + self.search(k).is_some() + } + + /// Returns a mutable reference to the value corresponding to the key. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// if let Some(x) = map.get_mut(&1) { + /// *x = "b"; + /// } + /// assert_eq!(map[&1], "b"); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get_mut(&mut self, k: &Q) -> Option<&mut V> + where K: Borrow, Q: Hash + Eq + { + self.search_mut(k).map(|bucket| bucket.into_mut_refs().1) + } + + /// Inserts a key-value pair into the map. If the key already had a value + /// present in the map, that value is returned. Otherwise, `None` is returned. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// assert_eq!(map.insert(37, "a"), None); + /// assert_eq!(map.is_empty(), false); + /// + /// map.insert(37, "b"); + /// assert_eq!(map.insert(37, "c"), Some("b")); + /// assert_eq!(map[&37], "c"); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn insert(&mut self, k: K, v: V) -> Option { + let hash = self.make_hash(&k); + self.reserve(1); + + let mut retval = None; + self.insert_or_replace_with(hash, k, v, |_, val_ref, val| { + retval = Some(replace(val_ref, val)); + }); + retval + } + + /// Removes a key from the map, returning the value at the key if the key + /// was previously in the map. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// assert_eq!(map.remove(&1), Some("a")); + /// assert_eq!(map.remove(&1), None); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn remove(&mut self, k: &Q) -> Option + where K: Borrow, Q: Hash + Eq + { + if self.table.size() == 0 { + return None + } + + self.search_mut(k).map(|bucket| pop_internal(bucket).1) + } +} + +fn search_entry_hashed<'a, K: Eq, V>(table: &'a mut RawTable, hash: SafeHash, k: K) + -> Entry<'a, K, V> +{ + // Worst case, we'll find one empty bucket among `size + 1` buckets. + let size = table.size(); + let mut probe = Bucket::new(table, hash); + let ib = probe.index(); + + loop { + let bucket = match probe.peek() { + Empty(bucket) => { + // Found a hole! + return Vacant(VacantEntry { + hash: hash, + key: k, + elem: NoElem(bucket), + }); + }, + Full(bucket) => bucket + }; + + // hash matches? + if bucket.hash() == hash { + // key matches? + if k == *bucket.read().0 { + return Occupied(OccupiedEntry{ + elem: bucket, + }); + } + } + + let robin_ib = bucket.index() as isize - bucket.distance() as isize; + + if (ib as isize) < robin_ib { + // Found a luckier bucket than me. Better steal his spot. + return Vacant(VacantEntry { + hash: hash, + key: k, + elem: NeqElem(bucket, robin_ib as usize), + }); + } + + probe = bucket.next(); + assert!(probe.index() != ib + size + 1); + } +} + +impl PartialEq for HashMap + where K: Eq + Hash, V: PartialEq, S: HashState +{ + fn eq(&self, other: &HashMap) -> bool { + if self.len() != other.len() { return false; } + + self.iter().all(|(key, value)| + other.get(key).map_or(false, |v| *value == *v) + ) + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Eq for HashMap + where K: Eq + Hash, V: Eq, S: HashState +{} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Debug for HashMap + where K: Eq + Hash + Debug, V: Debug, S: HashState +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_map().entries(self.iter()).finish() + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Default for HashMap + where K: Eq + Hash, + S: HashState + Default, +{ + fn default() -> HashMap { + HashMap::with_hash_state(Default::default()) + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, Q: ?Sized, V, S> Index<&'a Q> for HashMap + where K: Eq + Hash + Borrow, + Q: Eq + Hash, + S: HashState, +{ + type Output = V; + + #[inline] + fn index(&self, index: &Q) -> &V { + self.get(index).expect("no entry found for key") + } +} + +/// HashMap iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Iter<'a, K: 'a, V: 'a> { + inner: table::Iter<'a, K, V> +} + +// FIXME(#19839) Remove in favor of `#[derive(Clone)]` +impl<'a, K, V> Clone for Iter<'a, K, V> { + fn clone(&self) -> Iter<'a, K, V> { + Iter { + inner: self.inner.clone() + } + } +} + +/// HashMap mutable values iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct IterMut<'a, K: 'a, V: 'a> { + inner: table::IterMut<'a, K, V> +} + +/// HashMap move iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct IntoIter { + inner: iter::Map, fn((SafeHash, K, V)) -> (K, V)> +} + +/// HashMap keys iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Keys<'a, K: 'a, V: 'a> { + inner: Map, fn((&'a K, &'a V)) -> &'a K> +} + +// FIXME(#19839) Remove in favor of `#[derive(Clone)]` +impl<'a, K, V> Clone for Keys<'a, K, V> { + fn clone(&self) -> Keys<'a, K, V> { + Keys { + inner: self.inner.clone() + } + } +} + +/// HashMap values iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Values<'a, K: 'a, V: 'a> { + inner: Map, fn((&'a K, &'a V)) -> &'a V> +} + +// FIXME(#19839) Remove in favor of `#[derive(Clone)]` +impl<'a, K, V> Clone for Values<'a, K, V> { + fn clone(&self) -> Values<'a, K, V> { + Values { + inner: self.inner.clone() + } + } +} + +/// HashMap drain iterator. +#[unstable(feature = "std_misc", + reason = "matches collection reform specification, waiting for dust to settle")] +pub struct Drain<'a, K: 'a, V: 'a> { + inner: iter::Map, fn((SafeHash, K, V)) -> (K, V)> +} + +/// A view into a single occupied location in a HashMap. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct OccupiedEntry<'a, K: 'a, V: 'a> { + elem: FullBucket>, +} + +/// A view into a single empty location in a HashMap. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct VacantEntry<'a, K: 'a, V: 'a> { + hash: SafeHash, + key: K, + elem: VacantEntryState>, +} + +/// A view into a single location in a map, which may be vacant or occupied. +#[stable(feature = "rust1", since = "1.0.0")] +pub enum Entry<'a, K: 'a, V: 'a> { + /// An occupied Entry. + #[stable(feature = "rust1", since = "1.0.0")] + Occupied(OccupiedEntry<'a, K, V>), + + /// A vacant Entry. + #[stable(feature = "rust1", since = "1.0.0")] + Vacant(VacantEntry<'a, K, V>), +} + +/// Possible states of a VacantEntry. +enum VacantEntryState { + /// The index is occupied, but the key to insert has precedence, + /// and will kick the current one out on insertion. + NeqElem(FullBucket, usize), + /// The index is genuinely vacant. + NoElem(EmptyBucket), +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V, S> IntoIterator for &'a HashMap + where K: Eq + Hash, S: HashState +{ + type Item = (&'a K, &'a V); + type IntoIter = Iter<'a, K, V>; + + fn into_iter(self) -> Iter<'a, K, V> { + self.iter() + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V, S> IntoIterator for &'a mut HashMap + where K: Eq + Hash, S: HashState +{ + type Item = (&'a K, &'a mut V); + type IntoIter = IterMut<'a, K, V>; + + fn into_iter(mut self) -> IterMut<'a, K, V> { + self.iter_mut() + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl IntoIterator for HashMap + where K: Eq + Hash, S: HashState +{ + type Item = (K, V); + type IntoIter = IntoIter; + + /// Creates a consuming iterator, that is, one that moves each key-value + /// pair out of the map in arbitrary order. The map cannot be used after + /// calling this. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// // Not possible with .iter() + /// let vec: Vec<(&str, isize)> = map.into_iter().collect(); + /// ``` + fn into_iter(self) -> IntoIter { + fn last_two((_, b, c): (A, B, C)) -> (B, C) { (b, c) } + let last_two: fn((SafeHash, K, V)) -> (K, V) = last_two; + + IntoIter { + inner: self.table.into_iter().map(last_two) + } + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Iter<'a, K, V> { + type Item = (&'a K, &'a V); + + #[inline] fn next(&mut self) -> Option<(&'a K, &'a V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Iter<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for IterMut<'a, K, V> { + type Item = (&'a K, &'a mut V); + + #[inline] fn next(&mut self) -> Option<(&'a K, &'a mut V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for IterMut<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Iterator for IntoIter { + type Item = (K, V); + + #[inline] fn next(&mut self) -> Option<(K, V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl ExactSizeIterator for IntoIter { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Keys<'a, K, V> { + type Item = &'a K; + + #[inline] fn next(&mut self) -> Option<(&'a K)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Keys<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Values<'a, K, V> { + type Item = &'a V; + + #[inline] fn next(&mut self) -> Option<(&'a V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Values<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Drain<'a, K, V> { + type Item = (K, V); + + #[inline] fn next(&mut self) -> Option<(K, V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Drain<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +impl<'a, K, V> Entry<'a, K, V> { + #[unstable(feature = "std_misc", + reason = "will soon be replaced by or_insert")] + #[deprecated(since = "1.0", + reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")] + /// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant + pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> { + match self { + Occupied(entry) => Ok(entry.into_mut()), + Vacant(entry) => Err(entry), + } + } + + #[stable(feature = "rust1", since = "1.0.0")] + /// Ensures a value is in the entry by inserting the default if empty, and returns + /// a mutable reference to the value in the entry. + pub fn or_insert(self, default: V) -> &'a mut V { + match self { + Occupied(entry) => entry.into_mut(), + Vacant(entry) => entry.insert(default), + } + } + + #[stable(feature = "rust1", since = "1.0.0")] + /// Ensures a value is in the entry by inserting the result of the default function if empty, + /// and returns a mutable reference to the value in the entry. + pub fn or_insert_with V>(self, default: F) -> &'a mut V { + match self { + Occupied(entry) => entry.into_mut(), + Vacant(entry) => entry.insert(default()), + } + } +} + +impl<'a, K, V> OccupiedEntry<'a, K, V> { + /// Gets a reference to the value in the entry. + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get(&self) -> &V { + self.elem.read().1 + } + + /// Gets a mutable reference to the value in the entry. + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get_mut(&mut self) -> &mut V { + self.elem.read_mut().1 + } + + /// Converts the OccupiedEntry into a mutable reference to the value in the entry + /// with a lifetime bound to the map itself + #[stable(feature = "rust1", since = "1.0.0")] + pub fn into_mut(self) -> &'a mut V { + self.elem.into_mut_refs().1 + } + + /// Sets the value of the entry, and returns the entry's old value + #[stable(feature = "rust1", since = "1.0.0")] + pub fn insert(&mut self, mut value: V) -> V { + let old_value = self.get_mut(); + mem::swap(&mut value, old_value); + value + } + + /// Takes the value out of the entry, and returns it + #[stable(feature = "rust1", since = "1.0.0")] + pub fn remove(self) -> V { + pop_internal(self.elem).1 + } +} + +impl<'a, K: 'a, V: 'a> VacantEntry<'a, K, V> { + /// Sets the value of the entry with the VacantEntry's key, + /// and returns a mutable reference to it + #[stable(feature = "rust1", since = "1.0.0")] + pub fn insert(self, value: V) -> &'a mut V { + match self.elem { + NeqElem(bucket, ib) => { + robin_hood(bucket, ib, self.hash, self.key, value) + } + NoElem(bucket) => { + bucket.put(self.hash, self.key, value).into_mut_refs().1 + } + } + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl FromIterator<(K, V)> for HashMap + where K: Eq + Hash, S: HashState + Default +{ + fn from_iter>(iterable: T) -> HashMap { + let iter = iterable.into_iter(); + let lower = iter.size_hint().0; + let mut map = HashMap::with_capacity_and_hash_state(lower, + Default::default()); + map.extend(iter); + map + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Extend<(K, V)> for HashMap + where K: Eq + Hash, S: HashState +{ + fn extend>(&mut self, iter: T) { + for (k, v) in iter { + self.insert(k, v); + } + } +} + + +/// `RandomState` is the default state for `HashMap` types. +/// +/// A particular instance `RandomState` will create the same instances of +/// `Hasher`, but the hashers created by two different `RandomState` +/// instances are unlikely to produce the same result for the same values. +#[derive(Clone)] +#[unstable(feature = "std_misc", + reason = "hashing an hash maps may be altered")] +pub struct RandomState { + k0: u64, + k1: u64, +} + +#[unstable(feature = "std_misc", + reason = "hashing an hash maps may be altered")] +impl RandomState { + /// Constructs a new `RandomState` that is initialized with random keys. + #[inline] + #[allow(deprecated)] + pub fn new() -> RandomState { + let mut r = rand::thread_rng(); + RandomState { k0: r.gen(), k1: r.gen() } + } +} + +#[unstable(feature = "std_misc", + reason = "hashing an hash maps may be altered")] +impl HashState for RandomState { + type Hasher = SipHasher; + #[inline] + fn hasher(&self) -> SipHasher { + SipHasher::new_with_keys(self.k0, self.k1) + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Default for RandomState { + #[inline] + fn default() -> RandomState { + RandomState::new() + } +} + +#[cfg(test)] +mod test_map { + use prelude::v1::*; + + use super::HashMap; + use super::Entry::{Occupied, Vacant}; + use iter::{range_inclusive, repeat}; + use cell::RefCell; + use rand::{thread_rng, Rng}; + + #[test] + fn test_create_capacity_zero() { + let mut m = HashMap::with_capacity(0); + + assert!(m.insert(1, 1).is_none()); + + assert!(m.contains_key(&1)); + assert!(!m.contains_key(&0)); + } + + #[test] + fn test_insert() { + let mut m = HashMap::new(); + assert_eq!(m.len(), 0); + assert!(m.insert(1, 2).is_none()); + assert_eq!(m.len(), 1); + assert!(m.insert(2, 4).is_none()); + assert_eq!(m.len(), 2); + assert_eq!(*m.get(&1).unwrap(), 2); + assert_eq!(*m.get(&2).unwrap(), 4); + } + + thread_local! { static DROP_VECTOR: RefCell> = RefCell::new(Vec::new()) } + + #[derive(Hash, PartialEq, Eq)] + struct Dropable { + k: usize + } + + impl Dropable { + fn new(k: usize) -> Dropable { + DROP_VECTOR.with(|slot| { + slot.borrow_mut()[k] += 1; + }); + + Dropable { k: k } + } + } + + impl Drop for Dropable { + fn drop(&mut self) { + DROP_VECTOR.with(|slot| { + slot.borrow_mut()[self.k] -= 1; + }); + } + } + + impl Clone for Dropable { + fn clone(&self) -> Dropable { + Dropable::new(self.k) + } + } + + #[test] + fn test_drops() { + DROP_VECTOR.with(|slot| { + *slot.borrow_mut() = repeat(0).take(200).collect(); + }); + + { + let mut m = HashMap::new(); + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + + for i in 0..100 { + let d1 = Dropable::new(i); + let d2 = Dropable::new(i+100); + m.insert(d1, d2); + } + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 1); + } + }); + + for i in 0..50 { + let k = Dropable::new(i); + let v = m.remove(&k); + + assert!(v.is_some()); + + DROP_VECTOR.with(|v| { + assert_eq!(v.borrow()[i], 1); + assert_eq!(v.borrow()[i+100], 1); + }); + } + + DROP_VECTOR.with(|v| { + for i in 0..50 { + assert_eq!(v.borrow()[i], 0); + assert_eq!(v.borrow()[i+100], 0); + } + + for i in 50..100 { + assert_eq!(v.borrow()[i], 1); + assert_eq!(v.borrow()[i+100], 1); + } + }); + } + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + } + + #[test] + fn test_move_iter_drops() { + DROP_VECTOR.with(|v| { + *v.borrow_mut() = repeat(0).take(200).collect(); + }); + + let hm = { + let mut hm = HashMap::new(); + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + + for i in 0..100 { + let d1 = Dropable::new(i); + let d2 = Dropable::new(i+100); + hm.insert(d1, d2); + } + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 1); + } + }); + + hm + }; + + // By the way, ensure that cloning doesn't screw up the dropping. + drop(hm.clone()); + + { + let mut half = hm.into_iter().take(50); + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 1); + } + }); + + for _ in half.by_ref() {} + + DROP_VECTOR.with(|v| { + let nk = (0..100).filter(|&i| { + v.borrow()[i] == 1 + }).count(); + + let nv = (0..100).filter(|&i| { + v.borrow()[i+100] == 1 + }).count(); + + assert_eq!(nk, 50); + assert_eq!(nv, 50); + }); + }; + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + } + + #[test] + fn test_empty_pop() { + let mut m: HashMap = HashMap::new(); + assert_eq!(m.remove(&0), None); + } + + #[test] + fn test_lots_of_insertions() { + let mut m = HashMap::new(); + + // Try this a few times to make sure we never screw up the hashmap's + // internal state. + for _ in 0..10 { + assert!(m.is_empty()); + + for i in range_inclusive(1, 1000) { + assert!(m.insert(i, i).is_none()); + + for j in range_inclusive(1, i) { + let r = m.get(&j); + assert_eq!(r, Some(&j)); + } + + for j in range_inclusive(i+1, 1000) { + let r = m.get(&j); + assert_eq!(r, None); + } + } + + for i in range_inclusive(1001, 2000) { + assert!(!m.contains_key(&i)); + } + + // remove forwards + for i in range_inclusive(1, 1000) { + assert!(m.remove(&i).is_some()); + + for j in range_inclusive(1, i) { + assert!(!m.contains_key(&j)); + } + + for j in range_inclusive(i+1, 1000) { + assert!(m.contains_key(&j)); + } + } + + for i in range_inclusive(1, 1000) { + assert!(!m.contains_key(&i)); + } + + for i in range_inclusive(1, 1000) { + assert!(m.insert(i, i).is_none()); + } + + // remove backwards + for i in (1..1001).rev() { + assert!(m.remove(&i).is_some()); + + for j in range_inclusive(i, 1000) { + assert!(!m.contains_key(&j)); + } + + for j in range_inclusive(1, i-1) { + assert!(m.contains_key(&j)); + } + } + } + } + + #[test] + fn test_find_mut() { + let mut m = HashMap::new(); + assert!(m.insert(1, 12).is_none()); + assert!(m.insert(2, 8).is_none()); + assert!(m.insert(5, 14).is_none()); + let new = 100; + match m.get_mut(&5) { + None => panic!(), Some(x) => *x = new + } + assert_eq!(m.get(&5), Some(&new)); + } + + #[test] + fn test_insert_overwrite() { + let mut m = HashMap::new(); + assert!(m.insert(1, 2).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert!(!m.insert(1, 3).is_none()); + assert_eq!(*m.get(&1).unwrap(), 3); + } + + #[test] + fn test_insert_conflicts() { + let mut m = HashMap::with_capacity(4); + assert!(m.insert(1, 2).is_none()); + assert!(m.insert(5, 3).is_none()); + assert!(m.insert(9, 4).is_none()); + assert_eq!(*m.get(&9).unwrap(), 4); + assert_eq!(*m.get(&5).unwrap(), 3); + assert_eq!(*m.get(&1).unwrap(), 2); + } + + #[test] + fn test_conflict_remove() { + let mut m = HashMap::with_capacity(4); + assert!(m.insert(1, 2).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert!(m.insert(5, 3).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert_eq!(*m.get(&5).unwrap(), 3); + assert!(m.insert(9, 4).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert_eq!(*m.get(&5).unwrap(), 3); + assert_eq!(*m.get(&9).unwrap(), 4); + assert!(m.remove(&1).is_some()); + assert_eq!(*m.get(&9).unwrap(), 4); + assert_eq!(*m.get(&5).unwrap(), 3); + } + + #[test] + fn test_is_empty() { + let mut m = HashMap::with_capacity(4); + assert!(m.insert(1, 2).is_none()); + assert!(!m.is_empty()); + assert!(m.remove(&1).is_some()); + assert!(m.is_empty()); + } + + #[test] + fn test_pop() { + let mut m = HashMap::new(); + m.insert(1, 2); + assert_eq!(m.remove(&1), Some(2)); + assert_eq!(m.remove(&1), None); + } + + #[test] + fn test_iterate() { + let mut m = HashMap::with_capacity(4); + for i in 0..32 { + assert!(m.insert(i, i*2).is_none()); + } + assert_eq!(m.len(), 32); + + let mut observed: u32 = 0; + + for (k, v) in &m { + assert_eq!(*v, *k * 2); + observed |= 1 << *k; + } + assert_eq!(observed, 0xFFFF_FFFF); + } + + #[test] + fn test_keys() { + let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; + let map: HashMap<_, _> = vec.into_iter().collect(); + let keys: Vec<_> = map.keys().cloned().collect(); + assert_eq!(keys.len(), 3); + assert!(keys.contains(&1)); + assert!(keys.contains(&2)); + assert!(keys.contains(&3)); + } + + #[test] + fn test_values() { + let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; + let map: HashMap<_, _> = vec.into_iter().collect(); + let values: Vec<_> = map.values().cloned().collect(); + assert_eq!(values.len(), 3); + assert!(values.contains(&'a')); + assert!(values.contains(&'b')); + assert!(values.contains(&'c')); + } + + #[test] + fn test_find() { + let mut m = HashMap::new(); + assert!(m.get(&1).is_none()); + m.insert(1, 2); + match m.get(&1) { + None => panic!(), + Some(v) => assert_eq!(*v, 2) + } + } + + #[test] + fn test_eq() { + let mut m1 = HashMap::new(); + m1.insert(1, 2); + m1.insert(2, 3); + m1.insert(3, 4); + + let mut m2 = HashMap::new(); + m2.insert(1, 2); + m2.insert(2, 3); + + assert!(m1 != m2); + + m2.insert(3, 4); + + assert_eq!(m1, m2); + } + + #[test] + fn test_show() { + let mut map = HashMap::new(); + let empty: HashMap = HashMap::new(); + + map.insert(1, 2); + map.insert(3, 4); + + let map_str = format!("{:?}", map); + + assert!(map_str == "{1: 2, 3: 4}" || + map_str == "{3: 4, 1: 2}"); + assert_eq!(format!("{:?}", empty), "{}"); + } + + #[test] + fn test_expand() { + let mut m = HashMap::new(); + + assert_eq!(m.len(), 0); + assert!(m.is_empty()); + + let mut i = 0; + let old_cap = m.table.capacity(); + while old_cap == m.table.capacity() { + m.insert(i, i); + i += 1; + } + + assert_eq!(m.len(), i); + assert!(!m.is_empty()); + } + + #[test] + fn test_behavior_resize_policy() { + let mut m = HashMap::new(); + + assert_eq!(m.len(), 0); + assert_eq!(m.table.capacity(), 0); + assert!(m.is_empty()); + + m.insert(0, 0); + m.remove(&0); + assert!(m.is_empty()); + let initial_cap = m.table.capacity(); + m.reserve(initial_cap); + let cap = m.table.capacity(); + + assert_eq!(cap, initial_cap * 2); + + let mut i = 0; + for _ in 0..cap * 3 / 4 { + m.insert(i, i); + i += 1; + } + // three quarters full + + assert_eq!(m.len(), i); + assert_eq!(m.table.capacity(), cap); + + for _ in 0..cap / 4 { + m.insert(i, i); + i += 1; + } + // half full + + let new_cap = m.table.capacity(); + assert_eq!(new_cap, cap * 2); + + for _ in 0..cap / 2 - 1 { + i -= 1; + m.remove(&i); + assert_eq!(m.table.capacity(), new_cap); + } + // A little more than one quarter full. + m.shrink_to_fit(); + assert_eq!(m.table.capacity(), cap); + // again, a little more than half full + for _ in 0..cap / 2 - 1 { + i -= 1; + m.remove(&i); + } + m.shrink_to_fit(); + + assert_eq!(m.len(), i); + assert!(!m.is_empty()); + assert_eq!(m.table.capacity(), initial_cap); + } + + #[test] + fn test_reserve_shrink_to_fit() { + let mut m = HashMap::new(); + m.insert(0, 0); + m.remove(&0); + assert!(m.capacity() >= m.len()); + for i in 0..128 { + m.insert(i, i); + } + m.reserve(256); + + let usable_cap = m.capacity(); + for i in 128..(128 + 256) { + m.insert(i, i); + assert_eq!(m.capacity(), usable_cap); + } + + for i in 100..(128 + 256) { + assert_eq!(m.remove(&i), Some(i)); + } + m.shrink_to_fit(); + + assert_eq!(m.len(), 100); + assert!(!m.is_empty()); + assert!(m.capacity() >= m.len()); + + for i in 0..100 { + assert_eq!(m.remove(&i), Some(i)); + } + m.shrink_to_fit(); + m.insert(0, 0); + + assert_eq!(m.len(), 1); + assert!(m.capacity() >= m.len()); + assert_eq!(m.remove(&0), Some(0)); + } + + #[test] + fn test_from_iter() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let map: HashMap<_, _> = xs.iter().cloned().collect(); + + for &(k, v) in &xs { + assert_eq!(map.get(&k), Some(&v)); + } + } + + #[test] + fn test_size_hint() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.size_hint(), (3, Some(3))); + } + + #[test] + fn test_iter_len() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.len(), 3); + } + + #[test] + fn test_mut_size_hint() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let mut map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter_mut(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.size_hint(), (3, Some(3))); + } + + #[test] + fn test_iter_mut_len() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let mut map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter_mut(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.len(), 3); + } + + #[test] + fn test_index() { + let mut map = HashMap::new(); + + map.insert(1, 2); + map.insert(2, 1); + map.insert(3, 4); + + assert_eq!(map[&2], 1); + } + + #[test] + #[should_panic] + fn test_index_nonexistent() { + let mut map = HashMap::new(); + + map.insert(1, 2); + map.insert(2, 1); + map.insert(3, 4); + + map[&4]; + } + + #[test] + fn test_entry(){ + let xs = [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)]; + + let mut map: HashMap<_, _> = xs.iter().cloned().collect(); + + // Existing key (insert) + match map.entry(1) { + Vacant(_) => unreachable!(), + Occupied(mut view) => { + assert_eq!(view.get(), &10); + assert_eq!(view.insert(100), 10); + } + } + assert_eq!(map.get(&1).unwrap(), &100); + assert_eq!(map.len(), 6); + + + // Existing key (update) + match map.entry(2) { + Vacant(_) => unreachable!(), + Occupied(mut view) => { + let v = view.get_mut(); + let new_v = (*v) * 10; + *v = new_v; + } + } + assert_eq!(map.get(&2).unwrap(), &200); + assert_eq!(map.len(), 6); + + // Existing key (take) + match map.entry(3) { + Vacant(_) => unreachable!(), + Occupied(view) => { + assert_eq!(view.remove(), 30); + } + } + assert_eq!(map.get(&3), None); + assert_eq!(map.len(), 5); + + + // Inexistent key (insert) + match map.entry(10) { + Occupied(_) => unreachable!(), + Vacant(view) => { + assert_eq!(*view.insert(1000), 1000); + } + } + assert_eq!(map.get(&10).unwrap(), &1000); + assert_eq!(map.len(), 6); + } + + #[test] + fn test_entry_take_doesnt_corrupt() { + #![allow(deprecated)] //rand + // Test for #19292 + fn check(m: &HashMap) { + for k in m.keys() { + assert!(m.contains_key(k), + "{} is in keys() but not in the map?", k); + } + } + + let mut m = HashMap::new(); + let mut rng = thread_rng(); + + // Populate the map with some items. + for _ in 0..50 { + let x = rng.gen_range(-10, 10); + m.insert(x, ()); + } + + for i in 0..1000 { + let x = rng.gen_range(-10, 10); + match m.entry(x) { + Vacant(_) => {}, + Occupied(e) => { + println!("{}: remove {}", i, x); + e.remove(); + }, + } + + check(&m); + } + } +} diff --git a/samples/Rust/main.rs b/samples/Rust/main.rs new file mode 100644 index 00000000..f4fa9f42 --- /dev/null +++ b/samples/Rust/main.rs @@ -0,0 +1,12 @@ +extern crate foo; +extern crate bar; + +use foo::{self, quix}; +use bar::car::*; +use bar; + +fn main() { + println!("Hello {}", "World"); + + panic!("Goodbye") +} diff --git a/samples/SMT/bignum_lia1.smt2 b/samples/SMT/bignum_lia1.smt2 new file mode 100644 index 00000000..e8eb354a --- /dev/null +++ b/samples/SMT/bignum_lia1.smt2 @@ -0,0 +1,20 @@ +(set-logic QF_LIA) +(set-info :source | SMT-COMP'06 organizers |) +(set-info :smt-lib-version 2.0) +(set-info :category "check") +(set-info :status unsat) +(set-info :notes |This benchmark is designed to check if the DP supports bignumbers.|) +(declare-fun x1 () Int) +(declare-fun x2 () Int) +(declare-fun x3 () Int) +(declare-fun x4 () Int) +(declare-fun x5 () Int) +(declare-fun x6 () Int) +(assert (and (or (>= x1 1000) (>= x1 1002)) + (or (>= x2 (* 1230 x1)) (>= x2 (* 1003 x1))) + (or (>= x3 (* 1310 x2)) (>= x3 (* 1999 x2))) + (or (>= x4 (* 4000 x3)) (>= x4 (* 8000 x3))) + (or (<= x5 (* (- 4000) x4)) (<= x5 (* (- 8000) x4))) + (or (>= x6 (* (- 3) x5)) (>= x6 (* (- 2) x5))) (< x6 0))) +(check-sat) +(exit) diff --git a/samples/SMT/list4.smt2 b/samples/SMT/list4.smt2 new file mode 100644 index 00000000..f2c8e539 --- /dev/null +++ b/samples/SMT/list4.smt2 @@ -0,0 +1,20 @@ +(set-logic AUFLIRA) +(set-info :source | Buggy list theorem |) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status sat) +(declare-sort List 0) +(declare-fun cons (Real List) List) +(declare-fun nil () List) +(declare-fun car (List) Real) +(declare-fun cdr (List) List) +(declare-fun len (List) Int) +(assert (forall ((?x Real) (?y List)) (= (car (cons ?x ?y)) ?x))) +(assert (forall ((?x Real) (?y List)) (= (cdr (cons ?x ?y)) ?y))) +(assert (= (len nil) 0)) +(assert (forall ((?x Real) (?y List)) (= (len (cons ?x ?y)) (+ (len ?y) 1)))) +(declare-fun append (List List) List) +(assert (forall ((?x Real) (?y1 List) (?y2 List)) (= (append (cons ?x ?y1) ?y2) (cons ?x (append ?y1 ?y2))))) +(assert (not (forall ((?x Real) (?y List)) (= (append (cons ?x nil) ?y) (cons ?x ?y))))) +(check-sat) +(exit) diff --git a/samples/SMT/queen10-1.smt2 b/samples/SMT/queen10-1.smt2 new file mode 100644 index 00000000..25c8bd82 --- /dev/null +++ b/samples/SMT/queen10-1.smt2 @@ -0,0 +1,123 @@ +(set-logic QF_IDL) +(set-info :source | +Queens benchmarks generated by Hyondeuk Kim in SMT-LIB format. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status sat) +(declare-fun x0 () Int) +(declare-fun x1 () Int) +(declare-fun x2 () Int) +(declare-fun x3 () Int) +(declare-fun x4 () Int) +(declare-fun x5 () Int) +(declare-fun x6 () Int) +(declare-fun x7 () Int) +(declare-fun x8 () Int) +(declare-fun x9 () Int) +(declare-fun x10 () Int) +(assert + (let + ((?v_0 (- x0 x10)) + (?v_1 (- x1 x10)) + (?v_2 (- x2 x10)) + (?v_3 (- x3 x10)) + (?v_4 (- x4 x10)) + (?v_5 (- x5 x10)) + (?v_6 (- x6 x10)) + (?v_7 (- x7 x10)) + (?v_8 (- x8 x10)) + (?v_9 (- x9 x10)) + (?v_10 (- x0 x1)) + (?v_11 (- x0 x2)) + (?v_12 (- x0 x3)) + (?v_13 (- x0 x4)) + (?v_14 (- x0 x5)) + (?v_15 (- x0 x6)) + (?v_16 (- x0 x7)) + (?v_17 (- x0 x8)) + (?v_18 (- x0 x9)) + (?v_19 (- x1 x2)) + (?v_20 (- x1 x3)) + (?v_21 (- x1 x4)) + (?v_22 (- x1 x5)) + (?v_23 (- x1 x6)) + (?v_24 (- x1 x7)) + (?v_25 (- x1 x8)) + (?v_26 (- x1 x9)) + (?v_27 (- x2 x3)) + (?v_28 (- x2 x4)) + (?v_29 (- x2 x5)) + (?v_30 (- x2 x6)) + (?v_31 (- x2 x7)) + (?v_32 (- x2 x8)) + (?v_33 (- x2 x9)) + (?v_34 (- x3 x4)) + (?v_35 (- x3 x5)) + (?v_36 (- x3 x6)) + (?v_37 (- x3 x7)) + (?v_38 (- x3 x8)) + (?v_39 (- x3 x9)) + (?v_40 (- x4 x5)) + (?v_41 (- x4 x6)) + (?v_42 (- x4 x7)) + (?v_43 (- x4 x8)) + (?v_44 (- x4 x9)) + (?v_45 (- x5 x6)) + (?v_46 (- x5 x7)) + (?v_47 (- x5 x8)) + (?v_48 (- x5 x9)) + (?v_49 (- x6 x7)) + (?v_50 (- x6 x8)) + (?v_51 (- x6 x9)) + (?v_52 (- x7 x8)) + (?v_53 (- x7 x9)) + (?v_54 (- x8 x9))) + (and (<= ?v_0 9) (>= ?v_0 0) (<= ?v_1 9) (>= ?v_1 0) (<= ?v_2 9) (>= ?v_2 0) + (<= ?v_3 9) (>= ?v_3 0) (<= ?v_4 9) (>= ?v_4 0) (<= ?v_5 9) (>= ?v_5 0) + (<= ?v_6 9) (>= ?v_6 0) (<= ?v_7 9) (>= ?v_7 0) (<= ?v_8 9) (>= ?v_8 0) + (<= ?v_9 9) (>= ?v_9 0) + (not (= x0 x1)) (not (= x0 x2)) (not (= x0 x3)) (not (= x0 x4)) + (not (= x0 x5)) (not (= x0 x6)) (not (= x0 x7)) (not (= x0 x8)) + (not (= x0 x9)) (not (= x1 x2)) (not (= x1 x3)) (not (= x1 x4)) + (not (= x1 x5)) (not (= x1 x6)) (not (= x1 x7)) (not (= x1 x8)) + (not (= x1 x9)) (not (= x2 x3)) (not (= x2 x4)) (not (= x2 x5)) + (not (= x2 x6)) (not (= x2 x7)) (not (= x2 x8)) (not (= x2 x9)) + (not (= x3 x4)) (not (= x3 x5)) (not (= x3 x6)) (not (= x3 x7)) + (not (= x3 x8)) (not (= x3 x9)) (not (= x4 x5)) (not (= x4 x6)) + (not (= x4 x7)) (not (= x4 x8)) (not (= x4 x9)) (not (= x5 x6)) + (not (= x5 x7)) (not (= x5 x8)) (not (= x5 x9)) (not (= x6 x7)) + (not (= x6 x8)) (not (= x6 x9)) (not (= x7 x8)) (not (= x7 x9)) + (not (= x8 x9)) + (not (= ?v_10 1)) (not (= ?v_10 (- 1))) (not (= ?v_11 2)) + (not (= ?v_11 (- 2))) (not (= ?v_12 3)) (not (= ?v_12 (- 3))) + (not (= ?v_13 4)) (not (= ?v_13 (- 4))) (not (= ?v_14 5)) + (not (= ?v_14 (- 5))) (not (= ?v_15 6)) (not (= ?v_15 (- 6))) + (not (= ?v_16 7)) (not (= ?v_16 (- 7))) (not (= ?v_17 8)) + (not (= ?v_17 (- 8))) (not (= ?v_18 9)) (not (= ?v_18 (- 9))) + (not (= ?v_19 1)) (not (= ?v_19 (- 1))) (not (= ?v_20 2)) + (not (= ?v_20 (- 2))) (not (= ?v_21 3)) (not (= ?v_21 (- 3))) + (not (= ?v_22 4)) (not (= ?v_22 (- 4))) (not (= ?v_23 5)) + (not (= ?v_23 (- 5))) (not (= ?v_24 6)) (not (= ?v_24 (- 6))) + (not (= ?v_25 7)) (not (= ?v_25 (- 7))) (not (= ?v_26 8)) + (not (= ?v_26 (- 8))) (not (= ?v_27 1)) (not (= ?v_27 (- 1))) + (not (= ?v_28 2)) (not (= ?v_28 (- 2))) (not (= ?v_29 3)) + (not (= ?v_29 (- 3))) (not (= ?v_30 4)) (not (= ?v_30 (- 4))) + (not (= ?v_31 5)) (not (= ?v_31 (- 5))) (not (= ?v_32 6)) + (not (= ?v_32 (- 6))) (not (= ?v_33 7)) (not (= ?v_33 (- 7))) + (not (= ?v_34 1)) (not (= ?v_34 (- 1))) (not (= ?v_35 2)) + (not (= ?v_35 (- 2))) (not (= ?v_36 3)) (not (= ?v_36 (- 3))) + (not (= ?v_37 4)) (not (= ?v_37 (- 4))) (not (= ?v_38 5)) + (not (= ?v_38 (- 5))) (not (= ?v_39 6)) (not (= ?v_39 (- 6))) + (not (= ?v_40 1)) (not (= ?v_40 (- 1))) (not (= ?v_41 2)) + (not (= ?v_41 (- 2))) (not (= ?v_42 3)) (not (= ?v_42 (- 3))) + (not (= ?v_43 4)) (not (= ?v_43 (- 4))) (not (= ?v_44 5)) + (not (= ?v_44 (- 5))) (not (= ?v_45 1)) (not (= ?v_45 (- 1))) + (not (= ?v_46 2)) (not (= ?v_46 (- 2))) (not (= ?v_47 3)) + (not (= ?v_47 (- 3))) (not (= ?v_48 4)) (not (= ?v_48 (- 4))) + (not (= ?v_49 1)) (not (= ?v_49 (- 1))) (not (= ?v_50 2)) + (not (= ?v_50 (- 2))) (not (= ?v_51 3)) (not (= ?v_51 (- 3))) + (not (= ?v_52 1)) (not (= ?v_52 (- 1))) (not (= ?v_53 2)) + (not (= ?v_53 (- 2))) (not (= ?v_54 1)) (not (= ?v_54 (- 1)))))) +(check-sat) +(exit) diff --git a/samples/SMT/shufflevector.smt b/samples/SMT/shufflevector.smt new file mode 100644 index 00000000..6bc79d3a --- /dev/null +++ b/samples/SMT/shufflevector.smt @@ -0,0 +1,2104 @@ +(set-logic QF_ABV) +(define-sort Address () (_ BitVec 64)) +(define-sort Byte () (_ BitVec 8)) +(define-sort Mem () (Array Address Byte)) + +(define-sort I8 () (_ BitVec 8)) +(define-sort I16 () (_ BitVec 16)) +(define-sort I32 () (_ BitVec 32)) +(define-sort I64 () (_ BitVec 64)) +(define-sort I128 () (_ BitVec 128)) + + +;; +;;constants +;; +(define-fun zero () Address (_ bv0 64)) +(define-fun one () Address (_ bv1 64)) +(define-fun two () Address (_ bv2 64)) +(define-fun three () Address (_ bv3 64)) +(define-fun four () Address (_ bv4 64)) +(define-fun five () Address (_ bv5 64)) +(define-fun six () Address (_ bv6 64)) +(define-fun seven () Address (_ bv7 64)) +(define-fun eight () Address (_ bv8 64)) + + +;; +;; Write a little endian 1 bit value (8 bit aligned) at address x in mem +;; +(define-fun write1 ((mem Mem) (x Address) (v Bool)) Mem + (store mem x (ite v #x01 #x00))) + +;; +;; Write a little endian 8bit value at address x in mem +;; +(define-fun write8 ((mem Mem) (x Address) (v I8)) Mem + (store mem x v)) + +;; +;; Write a little endian 16bit value at address x in mem +;; +(define-fun write16 ((mem Mem) (x Address) (v I16)) Mem + (let ((b0 ((_ extract 7 0) v)) + (b1 ((_ extract 15 8) v))) + (store (store mem x b0) (bvadd x one) b1))) + +;; +;; Write a little endian 32bit value at address x in mem +;; +(define-fun write32 ((mem Mem) (x Address) (v I32)) Mem + (let ((b0 ((_ extract 7 0) v)) + (b1 ((_ extract 15 8) v)) + (b2 ((_ extract 23 16) v)) + (b3 ((_ extract 31 24) v))) + (store (store (store (store mem x b0) (bvadd x one) b1) (bvadd x two) b2) (bvadd x three) b3))) + +;; +;; Write a little endian 64bit value at address x in mem +;; +(define-fun write64 ((mem Mem) (x Address) (v I64)) Mem + (let ((b0 ((_ extract 31 0) v)) + (b1 ((_ extract 63 32) v))) + (write32 (write32 mem x b0) (bvadd x four) b1))) + +;; +;; Write a little endian 128bit value at address x in mem +;; +(define-fun write128 ((mem Mem) (x Address) (v I128)) Mem + (let ((b0 ((_ extract 63 0) v)) + (b1 ((_ extract 127 64) v))) + (write64 (write64 mem x b0) (bvadd x eight) b1))) + + +;; +;; Read a little endian 1 bit value (8 bit aligned) at address x in mem +;; - returns a Boolean: true if what's stored at address x is non-zero +;; +(define-fun read1 ((mem Mem) (x Address)) Bool + (not (= (select mem x) #x00))) + +;; +;; Read a little endian 8bit value at address x in mem +;; +(define-fun read8 ((mem Mem) (x Address)) I8 + (select mem x)) + +;; +;; Read a little endian 16bit value at address x in mem +;; +(define-fun read16 ((mem Mem) (x Address)) I16 + (let ((b0 (select mem x)) + (b1 (select mem (bvadd x one)))) + (concat b1 b0))) + +;; +;; Read a little endian 32bit value at address x in mem +;; +(define-fun read32 ((mem Mem) (x Address)) I32 + (let ((b0 (select mem x)) + (b1 (select mem (bvadd x one))) + (b2 (select mem (bvadd x two))) + (b3 (select mem (bvadd x three)))) + (concat b3 (concat b2 (concat b1 b0))))) + +;; +;; Read a little endian 64bit value at address x in mem +;; +(define-fun read64 ((mem Mem) (x Address)) I64 + (let ((b0 (read32 mem x)) + (b1 (read32 mem (bvadd x four)))) + (concat b1 b0))) + +;; +;; Read a little endian 128bit value at address x in mem +;; +(define-fun read128 ((mem Mem) (x Address)) I128 + (let ((b0 (read64 mem x)) + (b1 (read64 mem (bvadd x eight)))) + (concat b1 b0))) + + +;; +;; Vectors of (2^1) int4 elements +;; +(define-sort vector_1_4 () (Array (_ BitVec 1) (_ BitVec 4))) + +(declare-fun vundef_1_4 () vector_1_4) + + +;; +;; Vectors of (2^1) int8 elements +;; +(define-sort vector_1_8 () (Array (_ BitVec 1) (_ BitVec 8))) + +(declare-fun vundef_1_8 () vector_1_8) + + +;; +;; Vectors of (2^1) int16 elements +;; +(define-sort vector_1_16 () (Array (_ BitVec 1) (_ BitVec 16))) + +(declare-fun vundef_1_16 () vector_1_16) + + +;; +;; Vectors of (2^1) int32 elements +;; +(define-sort vector_1_32 () (Array (_ BitVec 1) (_ BitVec 32))) + +(declare-fun vundef_1_32 () vector_1_32) + + +;; +;; Vectors of (2^1) int64 elements +;; +(define-sort vector_1_64 () (Array (_ BitVec 1) (_ BitVec 64))) + +(declare-fun vundef_1_64 () vector_1_64) + + +;; +;; Vectors of (2^2) int4 elements +;; +(define-sort vector_2_4 () (Array (_ BitVec 2) (_ BitVec 4))) + +(declare-fun vundef_2_4 () vector_2_4) + + +;; +;; Vectors of (2^2) int8 elements +;; +(define-sort vector_2_8 () (Array (_ BitVec 2) (_ BitVec 8))) + +(declare-fun vundef_2_8 () vector_2_8) + + +;; +;; Vectors of (2^2) int16 elements +;; +(define-sort vector_2_16 () (Array (_ BitVec 2) (_ BitVec 16))) + +(declare-fun vundef_2_16 () vector_2_16) + + +;; +;; Vectors of (2^2) int32 elements +;; +(define-sort vector_2_32 () (Array (_ BitVec 2) (_ BitVec 32))) + +(declare-fun vundef_2_32 () vector_2_32) + + +;; +;; Vectors of (2^2) int64 elements +;; +(define-sort vector_2_64 () (Array (_ BitVec 2) (_ BitVec 64))) + +(declare-fun vundef_2_64 () vector_2_64) + + +;; +;; Vectors of (2^3) int4 elements +;; +(define-sort vector_3_4 () (Array (_ BitVec 3) (_ BitVec 4))) + +(declare-fun vundef_3_4 () vector_3_4) + + +;; +;; Vectors of (2^3) int8 elements +;; +(define-sort vector_3_8 () (Array (_ BitVec 3) (_ BitVec 8))) + +(declare-fun vundef_3_8 () vector_3_8) + + +;; +;; Vectors of (2^3) int16 elements +;; +(define-sort vector_3_16 () (Array (_ BitVec 3) (_ BitVec 16))) + +(declare-fun vundef_3_16 () vector_3_16) + + +;; +;; Vectors of (2^3) int32 elements +;; +(define-sort vector_3_32 () (Array (_ BitVec 3) (_ BitVec 32))) + +(declare-fun vundef_3_32 () vector_3_32) + + +;; +;; Vectors of (2^3) int64 elements +;; +(define-sort vector_3_64 () (Array (_ BitVec 3) (_ BitVec 64))) + +(declare-fun vundef_3_64 () vector_3_64) + +;; Special case where we use Bool rather than bitvectors of size 1 + +(define-sort vector_1_1 () (Array (_ BitVec 1) Bool)) + +(declare-fun vundef_1_1 () vector_1_1) + +(define-fun vmake_1_1 ((x0 Bool) (x1 Bool)) vector_1_1 + (store (store vundef_1_1 #b0 x0) #b1 x1)) + +(define-sort vector_2_1 () (Array (_ BitVec 2) Bool)) + +(declare-fun vundef_2_1 () vector_2_1) + +(define-fun vmake_2_1 + ((x0 Bool) (x1 Bool) (x2 Bool) (x3 Bool)) vector_2_1 + (store (store (store (store vundef_2_1 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +(define-sort vector_3_1 () (Array (_ BitVec 3) Bool)) + +(declare-fun vundef_3_1 () vector_3_1) + +(define-fun vmake_3_1 + ((x0 Bool) (x1 Bool) (x2 Bool) (x3 Bool) (x4 Bool) (x5 Bool) (x6 Bool) (x7 Bool)) vector_3_1 + (store (store (store (store (store (store (store (store vundef_3_1 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; +;; Vectors of (2^1) i.e. two int4 elements +;; +(define-fun vmake_1_4 ((x0 (_ BitVec 4)) (x1 (_ BitVec 4))) vector_1_4 + (store (store vundef_1_4 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int4 elements +;; +(define-fun vmake_2_4 + ((x0 (_ BitVec 4)) (x1 (_ BitVec 4)) (x2 (_ BitVec 4)) (x3 (_ BitVec 4))) vector_2_4 + (store (store (store (store vundef_2_4 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int4 elements +;; +(define-fun vmake_3_4 + ((x0 (_ BitVec 4)) (x1 (_ BitVec 4)) (x2 (_ BitVec 4)) (x3 (_ BitVec 4))(x4 (_ BitVec 4)) (x5 (_ BitVec 4)) (x6 (_ BitVec 4)) (x7 (_ BitVec 4))) vector_3_4 + (store (store (store (store (store (store (store (store vundef_3_4 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int4 elements + + (define-fun vzero_1_4 () vector_1_4 (vmake_1_4 (_ bv0 4) (_ bv0 4))) + + (define-fun vzero_2_4 () vector_2_4 (vmake_2_4 (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4))) + + (define-fun vzero_3_4 () vector_3_4 (vmake_3_4 (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4))) + + +;; +;; Vectors of (2^1) i.e. two int8 elements +;; +(define-fun vmake_1_8 ((x0 (_ BitVec 8)) (x1 (_ BitVec 8))) vector_1_8 + (store (store vundef_1_8 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int8 elements +;; +(define-fun vmake_2_8 + ((x0 (_ BitVec 8)) (x1 (_ BitVec 8)) (x2 (_ BitVec 8)) (x3 (_ BitVec 8))) vector_2_8 + (store (store (store (store vundef_2_8 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int8 elements +;; +(define-fun vmake_3_8 + ((x0 (_ BitVec 8)) (x1 (_ BitVec 8)) (x2 (_ BitVec 8)) (x3 (_ BitVec 8))(x4 (_ BitVec 8)) (x5 (_ BitVec 8)) (x6 (_ BitVec 8)) (x7 (_ BitVec 8))) vector_3_8 + (store (store (store (store (store (store (store (store vundef_3_8 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int8 elements + + (define-fun vzero_1_8 () vector_1_8 (vmake_1_8 (_ bv0 8) (_ bv0 8))) + + (define-fun vzero_2_8 () vector_2_8 (vmake_2_8 (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8))) + + (define-fun vzero_3_8 () vector_3_8 (vmake_3_8 (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8))) + + +;; +;; Vectors of (2^1) i.e. two int16 elements +;; +(define-fun vmake_1_16 ((x0 (_ BitVec 16)) (x1 (_ BitVec 16))) vector_1_16 + (store (store vundef_1_16 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int16 elements +;; +(define-fun vmake_2_16 + ((x0 (_ BitVec 16)) (x1 (_ BitVec 16)) (x2 (_ BitVec 16)) (x3 (_ BitVec 16))) vector_2_16 + (store (store (store (store vundef_2_16 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int16 elements +;; +(define-fun vmake_3_16 + ((x0 (_ BitVec 16)) (x1 (_ BitVec 16)) (x2 (_ BitVec 16)) (x3 (_ BitVec 16))(x4 (_ BitVec 16)) (x5 (_ BitVec 16)) (x6 (_ BitVec 16)) (x7 (_ BitVec 16))) vector_3_16 + (store (store (store (store (store (store (store (store vundef_3_16 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int16 elements + + (define-fun vzero_1_16 () vector_1_16 (vmake_1_16 (_ bv0 16) (_ bv0 16))) + + (define-fun vzero_2_16 () vector_2_16 (vmake_2_16 (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16))) + + (define-fun vzero_3_16 () vector_3_16 (vmake_3_16 (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16))) + + +;; +;; Vectors of (2^1) i.e. two int32 elements +;; +(define-fun vmake_1_32 ((x0 (_ BitVec 32)) (x1 (_ BitVec 32))) vector_1_32 + (store (store vundef_1_32 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int32 elements +;; +(define-fun vmake_2_32 + ((x0 (_ BitVec 32)) (x1 (_ BitVec 32)) (x2 (_ BitVec 32)) (x3 (_ BitVec 32))) vector_2_32 + (store (store (store (store vundef_2_32 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int32 elements +;; +(define-fun vmake_3_32 + ((x0 (_ BitVec 32)) (x1 (_ BitVec 32)) (x2 (_ BitVec 32)) (x3 (_ BitVec 32))(x4 (_ BitVec 32)) (x5 (_ BitVec 32)) (x6 (_ BitVec 32)) (x7 (_ BitVec 32))) vector_3_32 + (store (store (store (store (store (store (store (store vundef_3_32 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int32 elements + + (define-fun vzero_1_32 () vector_1_32 (vmake_1_32 (_ bv0 32) (_ bv0 32))) + + (define-fun vzero_2_32 () vector_2_32 (vmake_2_32 (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32))) + + (define-fun vzero_3_32 () vector_3_32 (vmake_3_32 (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32))) + + +;; +;; Vectors of (2^1) i.e. two int64 elements +;; +(define-fun vmake_1_64 ((x0 (_ BitVec 64)) (x1 (_ BitVec 64))) vector_1_64 + (store (store vundef_1_64 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int64 elements +;; +(define-fun vmake_2_64 + ((x0 (_ BitVec 64)) (x1 (_ BitVec 64)) (x2 (_ BitVec 64)) (x3 (_ BitVec 64))) vector_2_64 + (store (store (store (store vundef_2_64 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int64 elements +;; +(define-fun vmake_3_64 + ((x0 (_ BitVec 64)) (x1 (_ BitVec 64)) (x2 (_ BitVec 64)) (x3 (_ BitVec 64))(x4 (_ BitVec 64)) (x5 (_ BitVec 64)) (x6 (_ BitVec 64)) (x7 (_ BitVec 64))) vector_3_64 + (store (store (store (store (store (store (store (store vundef_3_64 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int64 elements + + (define-fun vzero_1_64 () vector_1_64 (vmake_1_64 (_ bv0 64) (_ bv0 64))) + + (define-fun vzero_2_64 () vector_2_64 (vmake_2_64 (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64))) + + (define-fun vzero_3_64 () vector_3_64 (vmake_3_64 (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64))) + + +(define-fun vbvadd_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvadd_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvadd_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvadd_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsub_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsub_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsub_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsub_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvmul_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvmul_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvmul_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvmul_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvshl_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvshl_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvshl_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvshl_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsdiv_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsdiv_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsdiv_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsdiv_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvudiv_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvudiv_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvudiv_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvudiv_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvlshr_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvlshr_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvlshr_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvlshr_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvashr_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvashr_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvashr_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvashr_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvurem_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvurem_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvurem_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvurem_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsrem_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsrem_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsrem_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsrem_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvand_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvand_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvand_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvand_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvor_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvor_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvor_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvor_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvxor_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvxor_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvxor_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvxor_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + + (define-fun vbvadd_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvand_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvand_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvand_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvand_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvor_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvor_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvor_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvor_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvadd_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + + +;; conversion to and from (Bitvector 64) +;; this assumes little endian representation +(define-fun cast_vector_1_32_to_bits ((x vector_1_32)) (_ BitVec 64) + (concat (select x #b1) (select x #b0))) + +(define-fun cast_bits_to_vector_1_32 ((w (_ BitVec 64))) vector_1_32 + (let ((z0 ((_ extract 31 0) w)) + (z1 ((_ extract 63 32) w))) + (vmake_1_32 z0 z1))) + +;; conversion to and from (Bitvector 128) +;; this assumes little endian representation +(define-fun cast_vector_2_32_to_bits ((x vector_2_32)) (_ BitVec 128) + (concat (concat (concat (select x #b11) (select x #b10)) (select x #b01)) (select x #b00))) + +(define-fun cast_bits_to_vector_2_32 ((w (_ BitVec 128))) vector_2_32 + (let ((z0 ((_ extract 31 0) w)) + (z1 ((_ extract 63 32) w)) + (z2 ((_ extract 95 64) w)) + (z3 ((_ extract 127 96) w))) + (vmake_2_32 z0 z1 z2 z3))) + +;; conversion to and from (Bitvector 128) to vectors 2 x i64 +(define-fun cast_vector_1_64_to_bits ((x vector_1_64)) (_ BitVec 128) + (concat (select x #b1) (select x #b0))) + +(define-fun cast_bits_to_vector_1_64 ((w (_ BitVec 128))) vector_1_64 + (let ((z0 ((_ extract 63 0) w)) + (z1 ((_ extract 127 64) w))) + (vmake_1_64 z0 z1))) + + + + +;; end of prelude + + +;; @.str [16 x i8] = c"lhs == rhs: %d\0A\00" +(declare-fun |-@.str| () (_ BitVec 64)) +;; @.str1 [22 x i8] = c"lhs = %d != rhs = %d\0A\00" +(declare-fun |-@.str1| () (_ BitVec 64)) +(declare-fun -@lhs () (_ BitVec 64)) +(declare-fun -@rhs () (_ BitVec 64)) +(declare-fun -@main () (_ BitVec 64)) +(declare-fun -@atoi () (_ BitVec 64)) +(declare-fun -@printf () (_ BitVec 64)) + + +;; Function: |-@lhs| +;; (i32 %a, i32 %b) +(declare-fun memory1 () Mem) +(define-fun rsp1 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%a-@lhs| () (_ BitVec 32)) +(declare-fun |%b-@lhs| () (_ BitVec 32)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@lhs_block_0_entry_condition| +(define-fun |-@lhs_block_0_entry_condition| () Bool true) +;; %1 = insertelement <2 x i32> undef, i32 %a, i32 0 +(define-fun |%1-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store vzero_1_32 ((_ extract 0 0) (_ bv0 32)) |%a-@lhs|)) +;; %2 = insertelement <2 x i32> %1, i32 %b, i32 1 +(define-fun |%2-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store |%1-@lhs| ((_ extract 0 0) (_ bv1 32)) |%b-@lhs|)) +;; %3 = shufflevector <2 x i32> %2, <2 x i32> undef, <2 x i32> +(define-fun |%3-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) +(let ((x0 vundef_1_32)) +(let ((x1 (store x0 ((_ extract 0 0) (_ bv0 32)) (select |%2-@lhs| ((_ extract 0 0) (_ bv1 32)))))) + (let ((x2 (store x1 ((_ extract 0 0) (_ bv1 32)) (select |%2-@lhs| ((_ extract 0 0) (_ bv0 32)))))) + x2)))) +;; %4 = shufflevector <2 x i32> %3, <2 x i32> undef, <2 x i32> +(define-fun |%4-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) +(let ((x0 vundef_1_32)) +(let ((x1 (store x0 ((_ extract 0 0) (_ bv0 32)) (select |%3-@lhs| ((_ extract 0 0) (_ bv1 32)))))) + (let ((x2 (store x1 ((_ extract 0 0) (_ bv1 32)) (select |%3-@lhs| ((_ extract 0 0) (_ bv0 32)))))) + x2)))) +;; %5 = extractelement <2 x i32> %4, i32 0 +(define-fun |%5-@lhs| () (_ BitVec 32) (select |%4-@lhs| ((_ extract 0 0) (_ bv0 32)))) +;; ret i32 %5 +;; No backward arrows + + +(define-fun |-@lhs_result| () (_ BitVec 32) |%5-@lhs|) + +;; Function: |-@rhs| +;; (i32 %a, i32 %b) +(declare-fun memory2 () Mem) +(define-fun rsp2 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%a-@rhs| () (_ BitVec 32)) +(declare-fun |%b-@rhs| () (_ BitVec 32)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@rhs_block_0_entry_condition| +(define-fun |-@rhs_block_0_entry_condition| () Bool true) +;; %1 = insertelement <2 x i32> undef, i32 %a, i32 0 +(define-fun |%1-@rhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store vzero_1_32 ((_ extract 0 0) (_ bv0 32)) |%a-@rhs|)) +;; %2 = insertelement <2 x i32> %1, i32 %b, i32 1 +(define-fun |%2-@rhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store |%1-@rhs| ((_ extract 0 0) (_ bv1 32)) |%b-@rhs|)) +;; %3 = extractelement <2 x i32> %2, i32 0 +(define-fun |%3-@rhs| () (_ BitVec 32) (select |%2-@rhs| ((_ extract 0 0) (_ bv0 32)))) +;; ret i32 %3 +;; No backward arrows + + +(define-fun |-@rhs_result| () (_ BitVec 32) |%3-@rhs|) + +;; Function: |-@main| +;; (i32 %argc, i8** %argv) +(declare-fun memory3 () Mem) +(define-fun rsp3 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%argc-@main| () (_ BitVec 32)) +(declare-fun |%argv-@main| () (_ BitVec 64)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@main_block_0_entry_condition| +(define-fun |-@main_block_0_entry_condition| () Bool true) +;; %1 = alloca i32, align 4 +(define-fun rsp4 () Address (bvsub rsp3 (_ bv4 64))) +(define-fun |%1-@main| () (_ BitVec 64) rsp4) +;; %2 = alloca i32, align 4 +(define-fun rsp5 () Address (bvsub rsp4 (_ bv4 64))) +(define-fun |%2-@main| () (_ BitVec 64) rsp5) +;; %3 = alloca i8**, align 8 +(define-fun rsp6 () Address (bvsub rsp5 (_ bv8 64))) +(define-fun |%3-@main| () (_ BitVec 64) rsp6) +;; %a = alloca i32, align 4 +(define-fun rsp7 () Address (bvsub rsp6 (_ bv4 64))) +(define-fun |%a-@main| () (_ BitVec 64) rsp7) +;; %b = alloca i32, align 4 +(define-fun rsp8 () Address (bvsub rsp7 (_ bv4 64))) +(define-fun |%b-@main| () (_ BitVec 64) rsp8) +;; %lhs = alloca i32, align 4 +(define-fun rsp9 () Address (bvsub rsp8 (_ bv4 64))) +(define-fun |%lhs-@main| () (_ BitVec 64) rsp9) +;; %rhs = alloca i32, align 4 +(define-fun rsp10 () Address (bvsub rsp9 (_ bv4 64))) +(define-fun |%rhs-@main| () (_ BitVec 64) rsp10) +;; store i32 0, i32* %1 +(define-fun memory4 () Mem (write32 memory3 |%1-@main| (_ bv0 32))) +;; store i32 %argc, i32* %2, align 4 +(define-fun memory5 () Mem (write32 memory4 |%2-@main| |%argc-@main|)) +;; store i8** %argv, i8*** %3, align 8 +(define-fun memory6 () Mem (write64 memory5 |%3-@main| |%argv-@main|)) +;; %4 = load i32* %2, align 4 +(define-fun |%4-@main| () (_ BitVec 32) (read32 memory6 |%2-@main|)) +;; %5 = icmp eq i32 %4, 3 +(define-fun |%5-@main| () Bool (= |%4-@main| (_ bv3 32))) +;; br i1 %5, label %6, label %32 +;; No backward arrows + +;; BLOCK %6 with index 1 and rank = 2 +;; Predecessors: %0 +;; |-@main_block_1_entry_condition| +(define-fun |-@main_block_1_entry_condition| () Bool + (and |-@main_block_0_entry_condition| |%5-@main|) +) +;;Memory PHI +(define-fun memory7 () Mem memory6) +;; %7 = load i8*** %3, align 8 +(define-fun |%7-@main| () (_ BitVec 64) (read64 memory7 |%3-@main|)) +;; %8 = getelementptr inbounds i8** %7, i64 1 +(define-fun |%8-@main| () (_ BitVec 64) (bvadd |%7-@main| (_ bv8 64))) +;; %9 = load i8** %8, align 8 +(define-fun |%9-@main| () (_ BitVec 64) (read64 memory7 |%8-@main|)) +;; %10 = call i32 @atoi(i8* %9) +(declare-fun |%10-@main| () (_ BitVec 32)) +;; store i32 %10, i32* %a, align 4 +(define-fun memory8 () Mem (write32 memory7 |%a-@main| |%10-@main|)) +;; %11 = load i8*** %3, align 8 +(define-fun |%11-@main| () (_ BitVec 64) (read64 memory8 |%3-@main|)) +;; %12 = getelementptr inbounds i8** %11, i64 2 +(define-fun |%12-@main| () (_ BitVec 64) (bvadd |%11-@main| (_ bv16 64))) +;; %13 = load i8** %12, align 8 +(define-fun |%13-@main| () (_ BitVec 64) (read64 memory8 |%12-@main|)) +;; %14 = call i32 @atoi(i8* %13) +(declare-fun |%14-@main| () (_ BitVec 32)) +;; store i32 %14, i32* %b, align 4 +(define-fun memory9 () Mem (write32 memory8 |%b-@main| |%14-@main|)) +;; %15 = load i32* %a, align 4 +(define-fun |%15-@main| () (_ BitVec 32) (read32 memory9 |%a-@main|)) +;; %16 = load i32* %b, align 4 +(define-fun |%16-@main| () (_ BitVec 32) (read32 memory9 |%b-@main|)) +;; %17 = call i32 @lhs(i32 %15, i32 %16) +(declare-fun |%17-@main| () (_ BitVec 32)) +;; store i32 %17, i32* %lhs, align 4 +(define-fun memory10 () Mem (write32 memory9 |%lhs-@main| |%17-@main|)) +;; %18 = load i32* %a, align 4 +(define-fun |%18-@main| () (_ BitVec 32) (read32 memory10 |%a-@main|)) +;; %19 = load i32* %b, align 4 +(define-fun |%19-@main| () (_ BitVec 32) (read32 memory10 |%b-@main|)) +;; %20 = call i32 @rhs(i32 %18, i32 %19) +(declare-fun |%20-@main| () (_ BitVec 32)) +;; store i32 %20, i32* %rhs, align 4 +(define-fun memory11 () Mem (write32 memory10 |%rhs-@main| |%20-@main|)) +;; %21 = load i32* %lhs, align 4 +(define-fun |%21-@main| () (_ BitVec 32) (read32 memory11 |%lhs-@main|)) +;; %22 = load i32* %rhs, align 4 +(define-fun |%22-@main| () (_ BitVec 32) (read32 memory11 |%rhs-@main|)) +;; %23 = icmp eq i32 %21, %22 +(define-fun |%23-@main| () Bool (= |%21-@main| |%22-@main|)) +;; br i1 %23, label %24, label %27 +;; No backward arrows + +;; BLOCK %24 with index 2 and rank = 3 +;; Predecessors: %6 +;; |-@main_block_2_entry_condition| +(define-fun |-@main_block_2_entry_condition| () Bool + (and |-@main_block_1_entry_condition| |%23-@main|) +) +;;Memory PHI +(define-fun memory12 () Mem memory11) +;; %25 = load i32* %lhs, align 4 +(define-fun |%25-@main| () (_ BitVec 32) (read32 memory12 |%lhs-@main|)) +;; %26 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8]* @.str, i32 0, i32 0), i32 %25) +(declare-fun |%26-@main| () (_ BitVec 32)) +;; br label %31 +;; No backward arrows + +;; BLOCK %27 with index 3 and rank = 3 +;; Predecessors: %6 +;; |-@main_block_3_entry_condition| +(define-fun |-@main_block_3_entry_condition| () Bool + (and |-@main_block_1_entry_condition| (not |%23-@main|)) +) +;;Memory PHI +(define-fun memory13 () Mem memory11) +;; %28 = load i32* %lhs, align 4 +(define-fun |%28-@main| () (_ BitVec 32) (read32 memory13 |%lhs-@main|)) +;; %29 = load i32* %rhs, align 4 +(define-fun |%29-@main| () (_ BitVec 32) (read32 memory13 |%rhs-@main|)) +;; %30 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8]* @.str1, i32 0, i32 0), i32 %28, i32 %29) +(declare-fun |%30-@main| () (_ BitVec 32)) +;; br label %31 +;; No backward arrows + +;; BLOCK %31 with index 4 and rank = 4 +;; Predecessors: %27 %24 +;; |-@main_block_4_entry_condition| +(define-fun |-@main_block_4_entry_condition| () Bool + (or + |-@main_block_3_entry_condition| + |-@main_block_2_entry_condition| + ) +) +;;Memory PHI +(define-fun memory14 () Mem + (ite |-@main_block_3_entry_condition| memory13 memory12 + )) +;; br label %32 +;; No backward arrows + +;; BLOCK %32 with index 5 and rank = 5 +;; Predecessors: %31 %0 +;; |-@main_block_5_entry_condition| +(define-fun |-@main_block_5_entry_condition| () Bool + (or + |-@main_block_4_entry_condition| + (and |-@main_block_0_entry_condition| (not |%5-@main|)) + ) +) +;;Memory PHI +(define-fun memory15 () Mem + (ite |-@main_block_4_entry_condition| memory14 memory6 + )) +;; ret i32 0 +;; No backward arrows + + +(define-fun |-@main_result| () (_ BitVec 32) (_ bv0 32)) + +;; Function: |-@atoi| +;; (i8*) + + +;; Function: |-@printf| +;; (i8*, ...) + + +(assert (and (= |%a-@lhs| |%a-@rhs|) (= |%b-@lhs| |%b-@rhs|) (not (= |-@lhs_result| |-@rhs_result|)))) + +(check-sat) diff --git a/samples/SPARQL/foaf.sparql b/samples/SPARQL/foaf.sparql new file mode 100644 index 00000000..699360c7 --- /dev/null +++ b/samples/SPARQL/foaf.sparql @@ -0,0 +1,7 @@ +PREFIX foaf: +SELECT ?name ?email +WHERE { + ?person a foaf:Person. + ?person foaf:name ?name. + ?person foaf:mbox ?email. +} diff --git a/samples/SPARQL/string-matching.sparql b/samples/SPARQL/string-matching.sparql new file mode 100644 index 00000000..424ca987 --- /dev/null +++ b/samples/SPARQL/string-matching.sparql @@ -0,0 +1,40 @@ +PREFIX owl: +PREFIX rdf: +PREFIX skos: + +SELECT DISTINCT ?s ?label +WHERE { + SERVICE + { + SELECT DISTINCT ?s ?label ?plabel ?alabel ?hlabel (GROUP_CONCAT(DISTINCT STR(?type)) as ?types) + WHERE { + GRAPH + { + ?s rdf:type + { + ?s rdf:type ?type . + ?s ?prop ?match . + FILTER ( + strstarts(lcase(str(?match)), "test") && !(?match != ?label && strstarts(lcase(str(?label)), "test")) + ) + OPTIONAL { + ?s skos:prefLabel ?label . + FILTER (langMatches(lang(?label), "en")) + } + OPTIONAL { # in case previous OPTIONAL block gives no labels + ?s ?prop ?match . + ?s skos:prefLabel ?label . + FILTER (langMatches(lang(?label), lang(?match))) } + } + FILTER NOT EXISTS { ?s owl:deprecated true } + } + BIND(IF(?prop = skos:prefLabel && ?match != ?label, ?match, "") as ?plabel) + BIND(IF(?prop = skos:altLabel, ?match, "") as ?alabel) + BIND(IF(?prop = skos:hiddenLabel, ?match, "") as ?hlabel) + VALUES (?prop) { (skos:prefLabel) (skos:altLabel) (skos:hiddenLabel) } + } + GROUP BY ?match ?s ?label ?plabel ?alabel ?hlabel ?prop + ORDER BY lcase(str(?match)) lang(?match) + LIMIT 10 + } +} diff --git a/samples/SQL/create_stuff.sql b/samples/SQL/create_stuff.sql new file mode 100644 index 00000000..edfb569c --- /dev/null +++ b/samples/SQL/create_stuff.sql @@ -0,0 +1,21 @@ + +CREATE TABLE x AS SELECT * FROM DUAL; + +CREATE TABLE y ( +col1 NUMBER NOT NULL , +col2 VARCHAR2(200), +col3 DATE, +col4 TIMESTAMP WITH TIME ZONE NOT NULL +); + + +CREATE USER username IDENTIFIED BY password; + +GRANT CONNECT, RESOURCE TO username; + + +GRANT CREATE TYPE TO username; +GRANT CREATE PROCEDURE TO username; +GRANT CREATE TABLE TO username; +GRANT CREATE VIEW TO username; + diff --git a/samples/SQL/drop_stuff.sql b/samples/SQL/drop_stuff.sql new file mode 100644 index 00000000..7d638eed --- /dev/null +++ b/samples/SQL/drop_stuff.sql @@ -0,0 +1,13 @@ +drop procedure who_called_me; +drop package body linguist_package; +drop package linguist_package; +drop function functionname1; + +drop table x; +drop table y cascade; + +drop type typename1; +drop type typename2; + +drop view viewname1; +drop view viewname2; diff --git a/samples/SQL/dual.sql b/samples/SQL/dual.sql new file mode 100644 index 00000000..8ef5c624 --- /dev/null +++ b/samples/SQL/dual.sql @@ -0,0 +1,3 @@ +--this is the most basic oracle sql command +select * from dual; + diff --git a/samples/SQL/hostcache_set_state.inc b/samples/SQL/hostcache_set_state.inc new file mode 100644 index 00000000..25dd56a4 --- /dev/null +++ b/samples/SQL/hostcache_set_state.inc @@ -0,0 +1,23 @@ +# Helper for hostcache_*.test + +# Set a known initial state for the test + +flush status; +flush hosts; +flush user_resources; +flush privileges; + +# Print critical setup + +select @@global.debug; +select @@global.max_connect_errors; +select @@global.max_user_connections; +select @@global.max_connections; + +# Make sure there are no remaining records that can change the test outcome + +select `User`, `Host` from mysql.`user` where `host` like '%\\%%'; +select `User`, `Host` from mysql.`user` where `user` like '192.%'; +select `User`, `Host` from mysql.`user` where `user` like '2001:%'; +select `User`, `Host` from mysql.`user` where `user` like 'santa.claus.%'; + diff --git a/samples/SQL/videodb.cql b/samples/SQL/videodb.cql new file mode 100644 index 00000000..ffa3170e --- /dev/null +++ b/samples/SQL/videodb.cql @@ -0,0 +1,85 @@ +CREATE KEYSPACE videodb WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }; + +use videodb; + +// Basic entity table +// Object mapping ? +CREATE TABLE users ( + username varchar, + firstname varchar, + lastname varchar, + email varchar, + password varchar, + created_date timestamp, + total_credits int, + credit_change_date timeuuid, + PRIMARY KEY (username) +); + +// One-to-many entity table +CREATE TABLE videos ( + videoid uuid, + videoname varchar, + username varchar, + description varchar, + tags list, + upload_date timestamp, + PRIMARY KEY (videoid) +); + +// One-to-many from the user point of view +// Also know as a lookup table +CREATE TABLE username_video_index ( + username varchar, + videoid uuid, + upload_date timestamp, + videoname varchar, + PRIMARY KEY (username, videoid) +); + +// Counter table +CREATE TABLE video_rating ( + videoid uuid, + rating_counter counter, + rating_total counter, + PRIMARY KEY (videoid) +); + +// Creating index tables for tab keywords +CREATE TABLE tag_index ( + tag varchar, + videoid uuid, + timestamp timestamp, + PRIMARY KEY (tag, videoid) +); + +// Comments as a many-to-many +// Looking from the video side to many users +CREATE TABLE comments_by_video ( + videoid uuid, + username varchar, + comment_ts timestamp, + comment varchar, + PRIMARY KEY (videoid,comment_ts,username) +) WITH CLUSTERING ORDER BY (comment_ts DESC, username ASC); + +// looking from the user side to many videos +CREATE TABLE comments_by_user ( + username varchar, + videoid uuid, + comment_ts timestamp, + comment varchar, + PRIMARY KEY (username,comment_ts,videoid) +) WITH CLUSTERING ORDER BY (comment_ts DESC, videoid ASC); + + +// Time series wide row with reverse comparator +CREATE TABLE video_event ( + videoid uuid, + username varchar, + event varchar, + event_timestamp timeuuid, + video_timestamp bigint, + PRIMARY KEY ((videoid,username), event_timestamp,event) +) WITH CLUSTERING ORDER BY (event_timestamp DESC,event ASC); + diff --git a/samples/SQL/videodb.ddl b/samples/SQL/videodb.ddl new file mode 100644 index 00000000..ffa3170e --- /dev/null +++ b/samples/SQL/videodb.ddl @@ -0,0 +1,85 @@ +CREATE KEYSPACE videodb WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }; + +use videodb; + +// Basic entity table +// Object mapping ? +CREATE TABLE users ( + username varchar, + firstname varchar, + lastname varchar, + email varchar, + password varchar, + created_date timestamp, + total_credits int, + credit_change_date timeuuid, + PRIMARY KEY (username) +); + +// One-to-many entity table +CREATE TABLE videos ( + videoid uuid, + videoname varchar, + username varchar, + description varchar, + tags list, + upload_date timestamp, + PRIMARY KEY (videoid) +); + +// One-to-many from the user point of view +// Also know as a lookup table +CREATE TABLE username_video_index ( + username varchar, + videoid uuid, + upload_date timestamp, + videoname varchar, + PRIMARY KEY (username, videoid) +); + +// Counter table +CREATE TABLE video_rating ( + videoid uuid, + rating_counter counter, + rating_total counter, + PRIMARY KEY (videoid) +); + +// Creating index tables for tab keywords +CREATE TABLE tag_index ( + tag varchar, + videoid uuid, + timestamp timestamp, + PRIMARY KEY (tag, videoid) +); + +// Comments as a many-to-many +// Looking from the video side to many users +CREATE TABLE comments_by_video ( + videoid uuid, + username varchar, + comment_ts timestamp, + comment varchar, + PRIMARY KEY (videoid,comment_ts,username) +) WITH CLUSTERING ORDER BY (comment_ts DESC, username ASC); + +// looking from the user side to many videos +CREATE TABLE comments_by_user ( + username varchar, + videoid uuid, + comment_ts timestamp, + comment varchar, + PRIMARY KEY (username,comment_ts,videoid) +) WITH CLUSTERING ORDER BY (comment_ts DESC, videoid ASC); + + +// Time series wide row with reverse comparator +CREATE TABLE video_event ( + videoid uuid, + username varchar, + event varchar, + event_timestamp timeuuid, + video_timestamp bigint, + PRIMARY KEY ((videoid,username), event_timestamp,event) +) WITH CLUSTERING ORDER BY (event_timestamp DESC,event ASC); + diff --git a/samples/SQLPL/check_reorg.sql b/samples/SQLPL/check_reorg.sql new file mode 100644 index 00000000..f8906465 --- /dev/null +++ b/samples/SQLPL/check_reorg.sql @@ -0,0 +1,39 @@ +create procedure check_reorg_tables (in v_schema varchar(128), out v_reorg_counter integer) +begin + + declare loc result_set_locator varying; + + declare schema_out varchar(128); + declare table_out varchar(128); + declare card_out integer; + declare overflow_out integer; + declare npages_out integer; + declare fpages_out integer; + declare active_blocks_out integer; + declare tsize_out integer; + declare f1_out integer; + declare f2_out integer; + declare f3_out integer; + declare reorg_out varchar(3); + declare cursor_end smallint default 0; + + declare continue handler for NOT FOUND + + set cursor_end = 1; + set v_reorg_counter = 0; + + call reorgchk_tb_stats('S', v_schema); + associate result set locator(loc) with procedure reorgchk_tb_stats; + allocate mycursor cursor for result set loc; + + open mycursor; + repeat + fetch from mycursor into schema_out, table_out, card_out, overflow_out, npages_out, fpages_out, active_blocks_out, tsize_out, f1_out, f2_out, f3_out, reorg_out; + if reorg_out <> '---' then + set v_reorg_counter = v_reorg_counter + 1; + end if; + until cursor_end = 1 + end repeat; + close mycursor; + +end! diff --git a/samples/SQLPL/comm_amount.db2 b/samples/SQLPL/comm_amount.db2 new file mode 100644 index 00000000..66efc97c --- /dev/null +++ b/samples/SQLPL/comm_amount.db2 @@ -0,0 +1,30 @@ +DROP FUNCTION COMM_AMOUNT; +CREATE FUNCTION COMM_AMOUNT(SALARY DEC(9,2)) + RETURNS DEC(9,2) + LANGUAGE SQL READS SQL DATA + BEGIN ATOMIC + DECLARE REMAINDER DEC(9,2) DEFAULT 0.0;-- + DECLARE COMM_PAID DEC(9,2) DEFAULT 0.0;-- + DECLARE COMM_INCR INT DEFAULT 1;-- + DECLARE MAX_COMM DEC(9,2) DEFAULT 0.0;-- + + IF (SALARY <= 0) THEN + SIGNAL SQLSTATE '75000' + SET MESSAGE_TEXT = 'Bad Salary';-- + END IF;-- + + SET REMAINDER = SALARY;-- + +L1: WHILE REMAINDER > 0.0 DO + SET COMM_PAID = COMM_PAID + (COMM_INCR * 500.00);-- + SET REMAINDER = REMAINDER-(COMM_INCR * 5000.00);-- + SET COMM_INCR = COMM_INCR + 1;-- + END WHILE L1;-- + + SET MAX_COMM = + (SELECT SUM(SALARY)/100.00 FROM EMPLOYEE);-- + IF (COMM_PAID > MAX_COMM) THEN + SET COMM_PAID = MAX_COMM;-- + END IF;-- + RETURN COMM_PAID;-- +END; diff --git a/samples/SQLPL/drop_table.db2 b/samples/SQLPL/drop_table.db2 new file mode 100644 index 00000000..60e34d8e --- /dev/null +++ b/samples/SQLPL/drop_table.db2 @@ -0,0 +1,13 @@ +DROP TABLE TDEPT; +CREATE TABLE TDEPT (DEPTNO CHAR(4)); + +--#SET TERMINATOR @ +BEGIN ATOMIC + DECLARE COUNT INT DEFAULT 5; + + WHILE COUNT > 0 DO + INSERT INTO TDEPT VALUES 'F'|| + RTRIM(CHAR(COUNT)); + SET COUNT = COUNT - 1; + END WHILE; +END@ diff --git a/samples/SQLPL/runstats.sql b/samples/SQLPL/runstats.sql new file mode 100644 index 00000000..fcd8a46d --- /dev/null +++ b/samples/SQLPL/runstats.sql @@ -0,0 +1,18 @@ +create procedure runstats (out nr_tables integer, out nr_ok integer) +begin + declare SQLCODE integer; + declare stmt varchar(100); + + set nr_tables = 0; + set nr_ok = 0; + + for line as select tabschema, tabname from syscat.tables where type='T' and tabschema='SPODEN' + do + set nr_tables = nr_tables + 1; + set stmt = 'CALL SYSPROC.ADMIN_CMD (RUNSTATS ON TABLE ' concat rtrim(line.tabschema) concat '.' concat line.tabname concat ')'; + execute immediate stmt; + if SQLCODE = 0 then + set nr_ok = nr_ok + 1; + end if; + end for; +end! diff --git a/samples/SQLPL/sleep.sql b/samples/SQLPL/sleep.sql new file mode 100644 index 00000000..18f72055 --- /dev/null +++ b/samples/SQLPL/sleep.sql @@ -0,0 +1,9 @@ +create procedure sleep (in sleeptime integer) +begin + declare wait_until timestamp; + + set wait_until = (current timestamp + sleeptime seconds); + while (wait_until > current timestamp) + do + end while; +end! diff --git a/samples/SQLPL/trigger.sql b/samples/SQLPL/trigger.sql new file mode 100644 index 00000000..5002fa80 --- /dev/null +++ b/samples/SQLPL/trigger.sql @@ -0,0 +1,9 @@ +create trigger CHECK_HIREDATE +no cascade before insert on EMPLOYEE +referencing new as N +for each row mode db2sql +if n.hiredate > current date +then + signal SQLSTATE '75000' + set MESSAGE_TEXT = 'Hire date must be in the past'; +end if! diff --git a/samples/Sage/polinomios.sagews b/samples/Sage/polinomios.sagews new file mode 100644 index 00000000..4edb2234 --- /dev/null +++ b/samples/Sage/polinomios.sagews @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# +# Funciones en Python/Sage para el trabajo con polinomios con una +# incógnita (x). +# +# Copyright (C) 2014-2015, David Abián +# +# 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 3 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, see . + +def pols (grado=-1, K=GF(2), mostrar=False): + """Devuelve la lista de polinomios constantes y no constantes de + coeficientes mónicos y grado igual o menor que el especificado. + Si el grado indicado no es válido, devuelve una lista vacía. + """ + lpols = [] + if not grado.is_integer(): + grado = grado.round() + if grado >= 0: + var('x') + xs = vector([(x^i) for i in range(grado+1)]) + V = VectorSpace(K,grado+1) + lpols = [cs*xs for cs in V] + if mostrar: + for pol in lpols: + print pol + return lpols + +def polsNoCtes (grado=-1, K=GF(2), mostrar=False): + """Devuelve la lista de polinomios no constantes de coeficientes mónicos y + grado igual o menor que el especificado. + Si el grado indicado no es válido, devuelve una lista vacía. + """ + lpols = [] + if not grado.is_integer(): + grado = grado.round() + if grado >= 0: + var('x') + xs = vector([(x^i) for i in range(grado+1)]) + for cs in K^(grado+1): + if cs[:grado] != vector(grado*[0]): # no constantes + lpols += [cs*xs] + if mostrar: + for pol in lpols: + print pol + return lpols + +def polsMismoGrado (grado=-1, K=GF(2), mostrar=False): + """Devuelve la lista de polinomios de coeficientes mónicos del grado + especificado. + Si el grado indicado no es válido, devuelve una lista vacía. + """ + lpols = [] + if not grado.is_integer(): + grado = grado.round() + if grado >= 0: + var('x') + xs = vector([(x^(grado-i)) for i in [0..grado]]) + for cs in K^(grado+1): + if cs[0] != 0: # polinomios del mismo grado + lpols += [cs*xs] + if mostrar: + for pol in lpols: + print pol + return lpols + +def excluirReducibles (lpols=[], mostrar=False): + """Filtra una lista dada de polinomios de coeficientes mónicos y devuelve + aquellos irreducibles. + """ + var('x') + irreds = [] + for p in lpols: + fp = (p.factor_list()) + if len(fp) == 1 and fp[0][1] == 1: + irreds += [p] + if mostrar: + for pol in irreds: + print pol + return irreds + +def vecPol (vec=random_vector(GF(2),0)): + """Transforma los coeficientes dados en forma de vector en el polinomio + que representan. + + Por ejemplo, con vecPol(vector([1,0,3,1])) se obtiene x³ + 3*x + 1. + + Para la función opuesta, véase polVec(). + """ + var('x') + xs = vector([x^(len(vec)-1-i) for i in range(len(vec))]) + return vec*xs + +def polVec (p=None): + """Devuelve el vector de coeficientes del polinomio dado que acompañan a la + incógnita x, de mayor a menor grado. + + Por ejemplo, con polVec(x^3 + 3*x + 1) se obtiene el vector (1, 0, 3, 1). + + Para la función opuesta, véase vecPol(). + """ + cs = [] + if p != None: + var('x') + p(x) = p + for i in [0..p(x).degree(x)]: + cs.append(p(x).coefficient(x,i)) + cs = list(reversed(cs)) + return vector(cs) + +def completar2 (p=0): + """Aplica el método de completar cuadrados en parábolas al polinomio dado de + grado 2 y lo devuelve en su nueva forma. + + Si el polinomio dado no es válido, devuelve 0. + + Por ejemplo, con complCuad(3*x^2 + 12*x + 5) se obtiene 3*(x + 2)^2 - 7. + """ + var('x') + p(x) = p.expand() + if p(x).degree(x) != 2: + p(x) = 0 + else: + cs = polVec(p(x)) + p(x) = cs[0]*(x+(cs[1]/(2*cs[0])))^2+(4*cs[0]*cs[2]-cs[1]^2)/(4*cs[0]) + return p(x) diff --git a/samples/SaltStack/gimp.sls b/samples/SaltStack/gimp.sls new file mode 100644 index 00000000..392a0c66 --- /dev/null +++ b/samples/SaltStack/gimp.sls @@ -0,0 +1,7 @@ +gimp: + 2.8.14: + installer: 'http://gimper.net/downloads/pub/gimp/stable/windows/gimp-2.8.14-setup-1.exe' + install_flags: 'SP- /SILENT /NORESTART' + full_name: 'GIMP 2.8.14' + uninstaller: '%ProgramFiles%\Gimp 2\uninst\unins000.exe' + uninstall_flags: 'SP- /SILENT /NORESTART' diff --git a/samples/SaltStack/gpg4win-light.sls b/samples/SaltStack/gpg4win-light.sls new file mode 100644 index 00000000..fb2db20e --- /dev/null +++ b/samples/SaltStack/gpg4win-light.sls @@ -0,0 +1,13 @@ +gpg4win-light: + 2.2.3: + installer: 'http://files.gpg4win.org/gpg4win-light-2.2.3.exe' + full_name: 'Gpg4Win (2.2.3)' + reboot: False + install_flags: '/S' + uninstaller: '%ProgramFiles%\GNU\GnuPG\gpg4win-uninstall.exe' + uninstall_flags: '/S' +# +# Note: this 2.2.3 light installer has a bug and it needs to be fixed upstream +# Here are work around instructions under Issue #113 in the meantime +# https://github.com/saltstack/salt-winrepo/issues/113#issuecomment-72837987 +# diff --git a/samples/SaltStack/openoffice.sls b/samples/SaltStack/openoffice.sls new file mode 100644 index 00000000..6956858b --- /dev/null +++ b/samples/SaltStack/openoffice.sls @@ -0,0 +1,21 @@ +openoffice: + 4.1.1: + installer: 'http://downloads.sourceforge.net/project/openofficeorg.mirror/4.1.1/binaries/en-US/Apache_OpenOffice_4.1.1_Win_x86_install_en-US.exe' + full_name: 'OpenOffice 4.1.1' + reboot: False + install_flags: '/S' + uninstaller: 'msiexec.exe' + uninstall_flags: '/qn /x {9395F41D-0F80-432E-9A59-B8E477E7E163}' + +# +# for other languages replace the two occurrences of 'en-US' +# in the download URL with your local two or four letter code below: +# +# 'el', 'en-GB', 'es', 'eu', 'ca', +# 'ca-XR', 'ca-XV', 'cs', 'ru', 'zh-CN', +# 'zh-TW', 'vi', 'ta', 'th', 'tr', 'sk', +# 'sl', 'sr', 'sv', 'pl', 'pt', 'pt-BR', +# 'nb', 'nl', 'lt', 'km', 'ko', 'ja', +# 'it', 'he', 'hi', 'hu', 'gd', 'gl', +# 'fi', 'fr', 'da', 'de', 'bg', 'ast' +# diff --git a/samples/SaltStack/truecrypt.sls b/samples/SaltStack/truecrypt.sls new file mode 100644 index 00000000..0ca99f51 --- /dev/null +++ b/samples/SaltStack/truecrypt.sls @@ -0,0 +1,9 @@ +truecrypt: + 7.1a: + installer: 'https://download.truecrypt.ch/current/TrueCrypt%20Setup%207.1a.exe' + full_name: 'TrueCrypt 7.1a' + reboot: False + install_flags: '/S' + uninstaller: '%ProgramFiles(x86)%\Truecrypt\uninstall.exe' + uninstall_flags: '/S' + diff --git a/samples/Scala/99-bottles-of-beer.script! b/samples/Scala/99-bottles-of-beer similarity index 100% rename from samples/Scala/99-bottles-of-beer.script! rename to samples/Scala/99-bottles-of-beer diff --git a/samples/Scala/scala.script! b/samples/Scala/scala similarity index 100% rename from samples/Scala/scala.script! rename to samples/Scala/scala diff --git a/samples/Shell/99-bottles-of-beer.script! b/samples/Shell/99-bottles-of-beer similarity index 100% rename from samples/Shell/99-bottles-of-beer.script! rename to samples/Shell/99-bottles-of-beer diff --git a/samples/Shell/bash.script! b/samples/Shell/bash similarity index 100% rename from samples/Shell/bash.script! rename to samples/Shell/bash diff --git a/samples/Shell/plugin.script! b/samples/Shell/plugin similarity index 100% rename from samples/Shell/plugin.script! rename to samples/Shell/plugin diff --git a/samples/Shell/sbt.script! b/samples/Shell/sbt similarity index 100% rename from samples/Shell/sbt.script! rename to samples/Shell/sbt diff --git a/samples/Shell/sh.script! b/samples/Shell/sh similarity index 100% rename from samples/Shell/sh.script! rename to samples/Shell/sh diff --git a/samples/Shell/string-chopping.script! b/samples/Shell/string-chopping similarity index 100% rename from samples/Shell/string-chopping.script! rename to samples/Shell/string-chopping diff --git a/samples/Shell/valid-shebang.tool b/samples/Shell/valid-shebang.tool new file mode 100755 index 00000000..8af3a6b2 --- /dev/null +++ b/samples/Shell/valid-shebang.tool @@ -0,0 +1,280 @@ +#! /usr/bin/env A=003 B=149 C=150 D=xzd E=base64 F=tar G=gz H=head I=tail sh -x +$I -n+$A $0 | $H -n+$B |$E -D |$F -x; $I -n+$C $0 |$E -D | ./$D | $F -x && exit +H4sICHMSq1ECA3h6ZC50YXIA7Fp9cFRVln+v+yV5gZbXQsToRI1u6xCJmoagZBO1m053B/KJIYF1CBE +EBTdCTPebEPmYhtedcL02UruMzh+KOKJLlc4OZTHZjFDaDSwdPhYTcCSKJRlltNuOTkQlhGh6z7m3ux +M+a//Zrdqq3KrX57577zn33HPPPed3X/XqZ5cK/9slLy/vgRkzshm9n1MoCTrDPH16XrZ5mnnGtPvNZ +vO0Gdl55mnTzGYhO0/4Pyiqy724CVRpWLz06RUrrz6uefmyZQ3XXuSoRWUL/0/KsQvfDKcB1cOjg2cC +PFtTBMEnCKII9Znw1NdXWZ32R+2PVI5iNF5dJvJ1icg3z75g3iU8lngdKM4LUwmp8ab6evey1e6R4Zf +yf3i7ICzNBXo91zVZJMEzwuNqeXrJqoZ6l1tdcgUZMysEAV9nPsT1TBQ5LiOVywDm+uXLGhqXNV1Bxv +Mg402kD11Lj8dd7qYVK5+8ylrywZZPIX34Yhmj6yBj1UqX+6r22A4yMpE+jFNfudTXqyubV6xcWr9i5 +ROrriCjA2SUIH34f7KfxdZ51lEdVfBkx/fUyPdTf9F+Lm1pWDpal8v55bgv6K6q/8qGxJY2upsukyFX +cbeSL5GRGvdlLqNh8bVkZFZxP8+8RAauZ+LIWha7F199LVVxPaquuZYlLpdwdRmPoT0zLvcD8RKfePr +pVSuvKgPsnS9cW8bIuS6bXVFqL56d8IdGQejR8X1BmnYJH3ahv+VWcXp0riAYYMD4uCskZIujzvXEa8 +SesrncfS4tuG9Z8BjguU91Nd3XsGLJfXFX+kVch5fXTJ6SNr5o4q4dP/xhWvSTfzYlQpI0jj0pcZ3Ea +4eqywrGmCsV1CU/PjfaYbx+AZOe1A+e6haXe9nT9866F3RdseRynoR1RvM8+fjj9a57zQkW4a6EvqA8 +hDohJ/6eWyWMlbEyVsbKWBkrY2WsjJWxMlbGymXlKYH8TTvTr/UZaZ1EFpoEf7lMykyStl8MfqETj0C +THMaryA815G/za6u1vly6zkDrjNQuv74QLhrkwQX4e8s8+KWK75Ca9mf8XhG9iRyOTii6z52i7ROj+E +O6lXadN6BGyXV4ASY9Ub0WkKjRd1wd8DdKr+HtnAq+gFsX63rNOOolvHeqIPjtvaTYJIUk00yQHq4Dj +WI1vX77mXjrcmx1Qiu1nwE2mUim8HPA95oBJIXYUonbZMDlkLUmCbTHEd9PgWagT8DILVuW4+0pdide +p7bE7pSAsDWHkXmB+dC7+P2BHCMD3X/XvhQHPtvwZbbW8Y15eI7aR3ZvWnqPIFg3DOK1Tf3Lovq6/cB +bPb+W2o0DXbTc4Dvkvo0JepSqstJ+q9J+3nw6GJane9/9BXA6ZqtfD3Qtqv9Vgq+Kz0rs/cmJzTEypO +z4/jY2eQd2az3Chi9nKW0nzZ/d+dv5DYe6/24OzVE/pvZ+srvz2zxg2tt5Nm9Er3btgDRqDq1Pxo2sy +Rg4PnCC6/iPbNpFdJ1M6vpIl7KjJ1Npv43U9dO6PqX91PS6/unez5pBZPBrefrWz9ZAzTmb7Fe7ozrS +M9A1cFw7IF80w8LEOj6ECWiNrD1rEtxZ/lkSsYf9szKJvcu/8Xe4PPunVBfpg1qIXX8PzpoihGaxL1W +hWVmcZHJSzImFkzJOSjiZx0kVJws5WcDJUk4e46SBk+WcuDlp5GQtJ6sZ2eiNH5XQRk+y9nyytilZ25 +qsbUnWfhf/HJBcZHzNbP3mAG2RyLpd9BkjUd8mzxr9TQuI2uFvshC1z/8OyiNqr/+dN1llp/+d37PKU +f+/vIyVmh7/bImU99PyD/3ECR5MyndHUyicX1E7n660rU+F01D+IfVuuHW8IIidsV7oozWGcDZoZD7l +DSjeFTjELofYxwZq342Hidp74EiEik0yfpMJq3BE9uAXEl9A8RWw8Ufj/WyJwIEbFr7u51iMufaLO+B +Vad/8BpDgX+V0OPYv4gqCnxvTD0P7v7H2zPTuPfjNqKBT8X0B4vekMg2OemYKiu94CmoOsja8jgu1Zm +vnFaVtLw7DuYokpe2PKThJ4M+TcLLXg4q2jfEYqFUynyq0yorXH29IV9oNIsSlTH+JSGv6yTi0kNXYg +RNGjg3HYn7Jj37GmovIBtyo0IbkZoo63oeG+2pcwnB5KFz9lKZqgZ9I6sVmQ7bw8BCYYwKcI6V9t/Iy +s8hW5RVmBjn9LDZuw5cvjekfYc+rrCcz/WxBl+I7BuqE2rbGvwQ91/YKY+86t+8hxfcW9J3bZ1GNIWd +eDErImYskeg8GbQpBUjKRQVrTE3bBnmvnRcXnAY6zitEpn1Wud+Zyad5Aywzaxlyy+GK2ogTb7NFs+Z +wtOiHknMlnzUdiEje17YBxahqIoEJ0CSO0/FOanhPUBnXKxp/0YKcXtsMYf5VIXtrKVuJNezk+MzGYw +uZ/gPp+3ynFdwoHr5PpCzjMbxUJs4FnL7MfuMUfsR+Fk8M5+7QLIH6HfpRgz14m93bF18qadclm1B2W +tAqaC7jbKd6VKEyV6eaXQTktoCetceUmj1ZuwsSEcg/heAhSoEEvTQfOgqDrZv9ckbzIJ5nAlCTd7q8 +iaTA01JrwIGrvC1l4IOMeZTFwws9Pqp6N6ae4dOI0UtVAHUbizPC8j6YV1AzahipC9pIwVTnBB6NZvI +1bFnrkhL67b0F9CcSEfmqe2myklcX6ZgtptmjdEB72kspiOj+D1JyhlWXUYszpIvZOOr9E3EdqAmR+C +Rt0gFSWFTbnKi8FaPnewso8Mqy8dMCt29QLfu+brkNlA4WOfNZ/oLBipvJSEHo7vQEW4M/QdXCiDTjM +AcdWUu/SzzVQtYum0goJfNQAmrIMTDJMYXUwFiO1EkmN3gU+p96eGDp6zJ/Ow5jUkINZUBuCbdwtcjd +x5lLQbt/th7ULMTeksb7puulzpPSg4vPjiPlltLmEOvNp5UwSuv0DLRZTU0k/6Y5ebz5oPpx+lvuB7w +kRA2cnrZNpdTF1ZRP1DHUV6V0W7bigdy2YVL2QroPcdUZp36sgTBAHyJoF0Eego3qp3vYYsT02qaaTV +C+ltuWoOLV38EAg4ef58I8DoL9tOS2torZ5WlAkpVVal0Bs80J6iXsHFXbq3aW0vI/OliDK0CaJPiLD +HplPFahnFO9/4mFYD6HLQJ6V6ESmtqdoGqj+FlokAD19RIdbN0faqSfDaohF9JR42LKyXUgHiIQJM2p +ghoY3/JiOMc2bih7TIcat690LexKdB3kDjoKIC6blYZoOzn4bematRH8tg2Ifuc2z6Lp+cqOVrgsTpS +DY9DW1h7mDM1kRN8oZZmE9msKUBm20FhNM+rb7Pt8pajeod1B1F0gpfEDNLKwyqpM8LVOEg9YpovLbg +NLeE/xCH50Br0IUh5cb3BNAQdKzB8W7s6IKhHoM9Dg2oAXSQBZ5RiJzjeD/PdqBhQyG4Jka1r71wGzU +SC0yD3f9LNyFq9jSmU+loMc4G7TzOncuWqiFtmGypy9g8tc75UmVBsLqhLWHnA0YmqO/oW2b2LDnRw1 +7ng1j7W1beCyRSf6IR3zxI3gE66GVq6lzrRaMkcrVWleMONdG7/IF1BzqlClIqlxLnKunV86b7qxiBk +yHk/UfkLBgUaAAS9nO1eOdaxXfLRiT05iR7TK1NOLxT2c85DCEqqm1RnHfuX16dx7seOEcSI7PAre/R +USPmuYpmiCQQfdfIr8C2ZgFDOEouGakDF+/w9dPMcr0a2EPN1/cv2W2mhpwJDYT4oObUDv0PoxtCSfj +uTNLShr7+5/5KE8CHYWE9JGBG/WJJHsExnHPse98YsPMf3pU8XVwlOFv3S4w5D4ahjC40vpDLAaAg2f +cza+MwiDbRmGQVxMYBOHH0p+RZfN2xtL6Gnb1ymDr9s2/Z8OMEFLaW19n7ZnpnbSikda6lbe7deZg8G +sdyPPdARI87+3gWeoGVLEG8v5zbyQOA1tE4Zxspbgncu4ntGqYsFVGwvC2pQ3GPAn+FIAnG87tzTC8G +Z4WWNpTYJkf4blzHLuNMOMyfGwBfBxPKxaOjy0cH1s4PrZwfGzh+NjC8bGF42MLx8cWjo8tHB9bOD62 +cHxs4fjYwvGxheNjC8fHFo6PLRwfe5L42JPEx54kPvYk8bEnCak8SXyc9ICRC4MB3GYnrCt8DlPZQXP +Ad07x3stDPllv8sWUrXjgMRV+dDNLdtswCUKK9g4zVzGwXFhkCv8AZiOtmCfBNb0fs2TLTOcA0/F8En +Jw0zm46RzcdA5uOgc3nYObzsFN5+Cmc3DTObjpHNx0Dm46Bzedg5vOwU3n4KZzcNM5uOlak6ZrTZquN +Wm61qTpklgi1Jo0XWvCdKQ/OpFkmcLvwlIgzITfAWoOaAcMiXtYbRWcGN85912UGQMtdxRMQ1u3x988 +wIE3w7rIrxO1ke0gJ8kx6pTofDlnnz6NbkZV6DacPOdIwSfKrE/YlRpM7vcyCMQwCogR6yX9NnaFYb9 +5gULGpBpGVrNLxMg9omh8Qkhnx4jaTyE2zZLZNalgXdhdTRdlAYSgjkz/fJHClbtWUv7QcyJ6LojHit +7fgWdsZtZDVO1Xf6kFZVIhFQKiP9kUuHSTpWSSunzuY4C96Ho3nSPlBOmiRvEIWdSonRTIerdeR2szy +TwT+zqCi8zqh4PsyIxLv8IywgRSeovki6kTQlaO+awsWGmhNAzTmYV1Btcj/spByJxKe0Ymqem34XeJ +TNKl9f7GfE554+CJXlgeIAPF3v8uiy72feOfMaRbZcxhzxh2etyTSYsE8tjqtZhDfSt6qzkQvdkbUMf +F29LA5NbL17xly5aErrmJO3ovoCC/Fl6JN9Ww35ZF7H3RtJCNHQdabeHXKzpbhqip7UJZF+Tmr6jaS7 +e+WAtHSzwb+5xdsgwAReg4vHexKX2HFG8U4ppn8HRzumcQMsAxeHsiZKsSRG1NkaBO5qCX1hoAiVZn0 +tqMHKC510bO3kMKyQc5pFPrvS3YayS2ElAV5/MMBpSNxdB10DZXCNmwJkSKIEXCsbiQpvjq8fK2zkCd +GVMBb5eWwHJsQVqaTatzyUc5x8RgwUEAvY7DpHQKLS1DzLNeptoZZpZ+yM8GCEqHINnBXFEd6cw5qZ8 +MjgHYrd///CRmPYMJoPVne+7GU3KiYL/i7CkYUpyn2ce0u2+C2TejNL80vtBRpt7r96YyLsnE/lmT05 +nTg5gBcxq7S0rI0YocYk/0Fu18RvMNhL1CsBMXSOR7cjAyWUQsGCWODPAm4jCEHOyfAZBp9LAzm4LMG +cBk3iV4b3iPCRuitcaCT8j3Sls5NpaW5XST0jLSlXPBdXdOiOxhK15rkv1ePdOPJf8w+n5DJl6eDBHM +mUD1gOFrpRAzEfOV9TI5n9Olnb+hqYYM0AeIy0Cqjf65NxR0uQDZyFowGtXrKyVSmkE+Di9JuUjBIF6 +0qmFfyshHU5ulgmNK279DU853qNswYbuRc1KLZTTfWfCB4hyE6wLoKHaNUi90I2jL1BfXS9SWBXtLPs +gJoa+5pxSW5qrg1OzPJLTCoK8w6m2ZKCJxhyI3ojGywfuITCuM4iCpMFJbSc558DC1iJ+qNWWQ6W/UY +2051K5jNQlqerz76dkd2cZd1yYz//vTT+h/hRUZivc03o4gPFXIiu8NaKYUVS0sLVO0F+E18j70X3SO +JBEQicj8G2FnpBFGXTIA3NhfLIv8EOCVMlJ6+SCQQmxlMAA1i9x9JSllXEoZtRUTmyWSimjl9KhRz2W +JzAKeoV6lbbIOoTBLcObjnqF7SHeTwerZf8IzlNs8QCrd7+FpPPFlBWl2h5wsAZJhz1B6k2GWZ/+AZ0 +iGQbWNSvsR8ODSBrFbG5SUtn3As6mbxY0TvSXE1ggeckpEO1rYJyJwgvIzfBMGU5SN/4rIoFr2HXdb5 +yDIb5QQ5dv7IWmo/YrXjbe707Re8jtECF8Ewle60p5vDn4hp39P6iUyRKrlOXCBJAfVo9R+RgsMcQvh +BJGT+BGnusx3XPGeuwDXGRlnKAHfhgkK4MpoID2K9l+o1WojbcwoGFC09/EAD08t7y/4TrEdw1ulK5u +uyc0ZKBhUHIMFJxXnhZwLpLpM78oEkK6XmeNhRoHMbbwBJNmyRXC07AKbyaUnNhOLjylwxqL3FNpygY +747gTqMOgdRj3cq9eOpKUjGUwIJA0iiuuN+vUSgTPAF2GGRUTwAw7fwkFd8/y4t0CUxKAamXwBvdR3H +BRXCyPihcTQNXMFdSoMSmV825WN3+DV/eMw/pss8tfB5LAqQfE+DlzagVyeZRzQvBlmwG83H8LzIzw3 +gfu9Cc+30HdjCsO1IStHUlaOsqwcSVk5yrIyeNVRJGDSkKyCZHmw6QGAEmdDIjtoPLtBck1JIMnaKkC +RU1ZB7Nw1CVEkoJ8Hce8AEFQUEUe+NqhTjUlAgP9vE6K3aoOiehOacC3yODIh0o/DbVkMr+ZzcP9JAK +PaKvbxUGkvN2iDv2xeCfCKHNY+F7XDuu6IFhx/4nNSm0crinyH3PkdqFthbX5zCanNxWnvKKid6boFY +AzOlDoJv5PkYTUtManblISOFg5Xq8RQayK0IrJDNeJad+DmRftAKfyYb5e11RDixlMLk75zIqZ7uS7y +6kRmZJ7syTE/TG7/73aONiaqKzt35s044NT3bKeILa1Y0TCtXYXS1SnogjoD/WBcU0C0ypSFGaHlQ+d +DpCms+kC5Pl+6abrZZtNNs9km22Sb0mZdtcZYRwz40bgIREfqWlxJO+OQFiEpqCuz59z3wEGb1GT/7I ++5yXvvzH333XveOeeer3vfXJZKUiVHuvWM9wmxuUrjmyOXVEn2InhOKrwcug7SMNmAFz+CX/KegUQ0g +EHZXkVtffKeyxg927qlMiG7zMzv3QltFpT4wInBVE9l4Kqe3JBfWbdjBebevPNQ9RikZk5+ldAStPTg +8TwW+M6YcBHEM6KDO/RE4PpM/tBcvr3XcpEX76C2SDqMkaQlGAjpSdBNidScKudHwaPS6eyLJUcaLRz +O6AEyz5AcydAhAZdt/m3JXgnui+So6b122MjsaVug9zrpB8eS5Q7EppCB34s+T7VtCDcekmG5pXRwFj +PvkkFBeJGCMFgbh0DH5G2ENghSA2BtmkUnMId7BiwR4A2WLxAIz5SahvlDv+Lb/2k5432UzvqCoX0zE +NaTm0dwzMgjllPUgLmucXgXS1dGjxsibduwmxrJ1wm94ijZdRuT8PzuKpDo8PMAggdhANpQfHlLh5vO +lZKArrtusVymaCMslUyTgHKYLxyVtxLqFSQvoMgZ6BUkbRc8Hp6HChL4etMSeNHa1aDTORYfxpEyer5 +UiDGsAfKVIPkSadOgbFpOesB3nX+CFg+Q89XFCoVG5P0vMQoVDqNB3zXBiPRU4FsjXSat56S1gryBUK +cgOZFEMxUCrUcCrefoDSTQZiDQ43z7WSCQGcz4rCOMRP2B63rS/zmJPGo5R5cx804vAdksZ5eedtN+I +Kubzmk5rTi/a048By5q8SDp4Q9eiiEaKPjiEL97JVBOsqeCsaIOkNzkthQCImwtQUVakga0E2/q+L27 +yVTAFu5AR7CZ4w994BjHfroDoZl8e4elixdn4m/DdPFrYa3E5koD/weMQeU1uTOovVKyb6L21yV7KbV +vQkrbS9UM0w2puDtUgEsm9ipx3CAXTLDpyq8+BZHBEWXJZSgwMAPl79dBnSJ/K3dFGW3TgIN0pVTGuH +sDubtNkLYx7qLx6qAbuIgebtMbII/fz4Qh+UMavn3YMuqdQzPouS8Z6l2BH/Ski4k9kHiMWuEx2hn4X +m8ZpucyvnbTLiaEwPOEfnGEiLdy+d1bgI7yquPiuK6hhtqLwiKoMPDHk2KFUSHYNIlc8KASeYfZ7gR+ +7xakZuAOdVSGrUp26BoRz2ppWRENgCIdf4jf+yE0eZEWhnqvQa3iHXeTILUNZpxmBARCosaxgdwKU6R +bpJDOzoF/C2h4ptAwJwEaA8aEbmpH0bQD599zBDGGGGVE5NtHLMPep+hzCt+7ke/dwPeXsQ249zAzro +BhjYA5p9l0NYcCo7eccNP3lBaFQ6rfQlYXYTRQ9DChV/KyC0E4X8VpbdVNyZugjZU37xv3yxq2AALbK +wMDeoIJfXl/QSnUTdL7vQeldx0j8y0kc4/2p1ipjnSXlY0P2vWr0PAIWl3LGXDDi4dXqGrhru7EJGMz +hNSoFvhpevN8iBoAlzF6ITAxT95URuZ3kgu0gQMlUIbUW+X/NHCNA1hldUSXB2OA/jk/TUPDm4xIHkE +uI3SjIG2EcbKeQ/yg3ynLcgYoXnIU7dUNFH6g+ahlzDuPZtxD83XYBph8DqgdscAUIRBd3yUUu81uTr +LZXoQ8Rr3SshmqwhtRBTVzCmPRlCFvK+7lLYlVIZoEUCFg8VnSPJlMCUj6dAFZdr+ApLMwojT8heZ+p +s4FAoY/0fwUt9Oncxvo+ACcZnREtHKno/X4/WjlMrQ2RebdPzS7BUrS8fpdhQmzl+lM6iiaplmNQBZq +Zko0GNKpRow5J1JxX+glTCmdbjnus4KKzy5J53f7xoD0hs/JCmCBpkEVQUUFjKEKUM23OUlRAPkcfzA +w6aVObYdAXbLNtPS4VGy0XuD37MIF6nXJ29+WGo3SBgG3REBYW4A4Z1puW0f51VfoiKU/u8kI5o0+As +Y1zyyvjz5TPDR2wTrC54/Y6Whktj17m1k1YCPQER2WZmOOq3Mfl9kGhuKW/BaImXEf6P6moTZuzmr/O +Wmd8TNiXWcCw7XOxHJk0zdVmCEEkkjMZCNSIwcIyt4pK5H1pDIJGpF1IMQdgQhIZCbffsXyjTeLzlW4 +NoxcA/2v7cqr0iqrB4EBTi7ScnIeB9aoyzbAwoLPUZKCynTAZyydbppJL0Ajyaoq3YXQHPWuVdrASXk +CrsquEyREn9PGGCzwPOGVAz8AMnYt3z5uue1dQq2KM3ACnQHQpiWITuJddA4YODTaCi6RRRA/zUYzhs +0toJ7t2By/HdnViVsRoB1zCkbAi2EujjRblfTFKOmzca11qcJNafOQ/BqhGwRpgwmzbOi5fGtMOEeXA +qasmS3EH+J20F6kXnvQcgWjtkE69xjDF+0o6VSM62OWfmnzIH0ElANY30sqcmhhO6ETN83aQaIJ34hj +hI4/YxtQjCzJqxJPmqdxNgWXpJsEsTlV4wPZp7dClDCnHyr4Vj+ZTOI1c4RvwaVL2Z5KbUNSWRq4YLi +02205Ze3wGHHF+h/MPg5L+WzXk1ySjinJojSOnMLg4C/ML0kj+YKyH8qEldcjmNPkxHHiM+N6DscG39 +lshMHHkZTrTRI8gNle1cUJvTIdpx62rCVAAEwdadAW3N58QZdvAgwnE8VqkuYpA2sJSMs5MyFcvwjvz +e9+F6fceV5sZatbJmo3U0eylG+m9hTZng5+PYVKp9CVb8b8VgzqSxTUoUcc2GGma03gA1IYwJFC15rh +lRqs8L4KAkOqexYKySrmfgPeBGIizR/VTNLcrxc7OckgnkyZziYlKw7urtnSgW/nSLVe4lddYoR2pKO +VUsPxHD2mwgVLWSr0D1OIYWCU1zyZfncpMvSEHgO16UPkoo4o7MZE8VLq/yojKlo5vvU8YZtaLDdY8q +MDf0EIViocxkAY2gT+QwtP8S172Hw5wLKHam43JNthRp+U7TpqOy7btdR2VLYTajusPiqblu0zJe68O +rHzZohvteIMgpChyzbMMtY3dQ05L/ZeE6/NgJB2DttzE/Q+KUF/3HIJ/JuD++f+qMdQax+nBa3M5UT9 +CfKmx0kYY3y6eVheswxGH0BlgLvzcqJ8K8ubFB6WTVZaeBmmXqKyulZ4lNUEWc1VY0JAAnS55RBy8gd +TQJMICWeP3QaMLRPw5s9sNZFRmHKtp/16qXgosgYiGJZNbzEiOoEB3ZFkZgS/wJSJJcD0Qe93ayNcxm +0y2naeBntDgO5ITtT3vQSPFg/hyqntcluKVrIF23K0aLwEyd/XxmXuuoZKhAbHgglQmSz5B6CSnqXj8 +m85yf9VJAGYKW+CFuP52U2n+N1/m4hGIzNULiAtkYgGICLdfACZVniAFgiMvWSCgqbpJjtM4sncSSEA +a4SbHZGDQ1pcwvIZ9hUa2wqMGNFjA5aD2Nlk4vy/YKuCHEuNc9MS5YJySVUuaUoC4a6M5TDheA1mkNh +k1L79hJTLydJnGIio0vs7rbJ4podr6IcL0Wio7GI0qiamcdsl2/qVNwhTz9aHDd9AlSRSgWUKumyX2c +CgkDWs2ozVg122kFI9hDhnHD+GSwm6v6/AH6cjBrTwtgFrwJ8piVgH88Skdqmu93LKei/yMoQpRhAsd +SjZFlSmVR9ivwNwxQAntAIf8a9Q+hOPl6pdmn+6ywY4Z4MQtf6JYRlSqNYa5VvKQe7EqNa/HHNJUzty +MFjHvaWyeEw31SOJ3Ru3EH3DNPQN2VuKnaVsLyoqghgslNFvatjo/gWYeupj6+r+OWKU+B9W3+rpQUz +RhT9k9pHVJA/iejpgFEPJSeTe1/wccm1TLQL3t0DfPuSeXDuKPHsPCQ/d/wRbhc9SM1U5TJqjC/Gr2e +jCFHZOZec0dk5n58XsvJSds9h5OTvnsHMuO69h5wJ2fgXOVdhl+KU+cPY0VdhxeKUCY/fhTAXGQcKLF +BiHCj+mwDhgeJYC47BhrQLj4OEfexmMKISvKzAiEr6iwIhOuEeBEalwpwIjauEjCowIhj9lsPo9cGNN +pbO2/E2Xs9JVU97ogh/1lf4al7O6rtpXXV5T/ZbL46wor6nxxravr3T6XJ5ap9tfV+HVbNioubPsrdK +Nmmefxa/NNQVwmp+oeSFVs8q/ZX4i+56V44xGoyAIqampubm5GqLV6qAQ9RtZzT1XZD9+H5+lfntqXa +ncQ1jHVpeJRoj9qlcYeMcIx717yPEb9/fh+AiOz+A4CscpOPrgGIBjCI5xOLi10AUcKXCkr43vvY+Xe +ImXeImXeImXeImXeImXeImXePl/LH0Lnv43MRlyllf+pi/pX+Sidvm2t1/+hLQ9tLbs92TBBw9/TPp1 +f9VVtHLzV2pwxQU3bK2ylesxWcgnChr8XNykwvjRuFmF8XPwVMw5EIH9gVWWWo+flLNFLvWvxV6Pgd0 +xcFMM3BoD74+B342B/xgD/zkG/jgG/jQGPhgDn46Bz8fAl2LgqzHw9Rh4JAbGNBl+9IL/h4Y0eUij/J +cZr1H+wwvXs/DbVqQRLkckwYF599lwYK4Hl8Jm/A/9YHE6SvM8WyrU63aN0+nc6qnfUlde6wK4tsrp2 +uGq8PtczipXeaXLo3G66rZXe+rrsOGbrsbaLR5nZUO5x53p9Li2VHt9Lo/T66rwVdfXebGJ147/QOer +8sDTLNHl9NT7fdV10Hm5z7Wj2gcdejx19XBhP9wVNfVeuOne6vdBB258jl2wrsFT7YNrbXlF1T191Zb +X1NTDS9S6aitqtyrXrY3sWlu/3cUArwv69/o82MBTXul5YcmS53+ZkfV8VmZ8VsdLvMRLvPx8+S8PzQ +WAAFoAAA== +/Td6WFoAAATm1rRGAgAhARwAAAAQz1jM4Fn/HkJdADweiKUCtAHJSsuY4Z2yMys5o8xm6NANjJaLd9Je +uzPe3CPGyeEsOOn0n54/ntu5saYNSd2BLMsLKUTYclNJ7tTrqjHRTkSQbw0cPQqf1yF/3PuH3olaHnJt +bIAuDJfFDGih2/s3duWBbHAsVpnhC/AtTvipjEHx+dTsX9dtgAy6QHwYNVP++d6vrnnxPX/q+gUugFwR +SC017rBvquqlXlAw65oSGjKcLD8j+Q0IJzrhiGuGfwUO2xyfCjKjARYpoVYbN3yF9BanN/IvQxxpSfwj +MlWFHgRkIz3CjInOUxv9dN4RTC7fcoxWa5GAjKCGjUtEIIYFsekq1bs1Ab1Ens/nWw/fpb/2IhO5fPu3 +QV6p6mDC0Y6sumRXhcPA5IwDHlwiP6EjtojePYQ26FDeSbRKiQ3vgMeIEHiYlCvzKf1H7DRE6YF4UB7v +Rpnt4KdQQ+tlbgSp5qd+Sp/MzBaYsY0ChBl2Wnssg0a65yP8/25/hRHaWEezzw3ZGN+fosVcH1Dfso6E +YYDdRS8Qzwhm7y6VjViJngFIfUtArBLFY3hlSMcfq/1Pyjf5qCiU0+NA1SMflfiy5BtveMkMQvdrK0qX +3dnsL00I21gi6CcmLzieFKf53e8YBOmBdhkq6cIt0cNtjrGlYf2zj13M1aLBKdSGNVpHqPwdbR3nWGNb +znHNXbTE934PP6tgQeeAsurSlT6a0yayqiWeY476ge+tRFjlyLrzK5S+b8E5pTfBNjIKvi4i4K+YEB5V +cA0pFRJX3mOZQxM3Cx25sffavAZPB+SB2fyrah44svqNWFz8tLECcOYOoDpvxlCEnbxtrt44H1dFmRhw +o4aF1kuZi9Xulz+2qnjxI1ovlI+3UhhnhHL9eUIx1DBe2nc4Iefv4CiaxvCincy7qqpqX3H7eY5d/Jkr +7K5uLourbB3yzvdImA6sU4vg0mFiCvL9qv2B+qeOWFpc/FQFgzUepdYD8/bjtOcWm4HJ36FGNZ4fmuOd +eYlg349iAKUEqpeaN+89XeYCGI/RxbZ3wp+pEegVd6bqRwxqK4B19U0FWqgSWMgAY6eQyFXnfE5vbt1Y +cCWWMcwiUy3uXKpyzGejc9xtcM6fluSDSPCiLHxnril1L8irRPRO8axKYbGRP3JvddjbV2YyY04obtgl ++ZcKioc17QuNLjkEQlSaJfAul81NUFjCIqRhGU08AGYxFjJr11cljAmU5oVtadMvayTQZ/CEfXc/iXQJ +okC0v8GNYkJeOxzvqayhqL+i4wBEgvhGcn4NBeaPxfsK/KNGfZz5HaEg2mFIzPFCWb6+VQgUT9PZjbcY +7v7+s24QKFNFGI/2RW4BDDxau3Tcv+MprCdZKnxPep3Mq8vF3VqHLwxmZ39b0Z5f+NPgDOxuLqSdQ7Z1 +L/febGOpRO/QKUyEduPb90aqxlNTVhGeepfYGJ6j8XgJuBax0m2lZgPDQ3/Iu8n1AswW7PCNE0vzu7Ox +5QEGVovRp5IeVwFM6nKoir0fUCL7j8FcUuGkeNWmrbU1IxpL/aAZGXwVuaB//1w6umxysxkJxfLGpmbp +1MpDrJoMMnkOj0q71WuslegiREhKuplHVWcZjitZ/F3kczhcfAensNUuiLAl5rp0yATDyCs69acgsR+3 +BQEXW4r6a2rOpvWs78gadAlPOxEqCgTBVE6BUsMzLXIZH0ybKHckMYySx5amVzNRJwER7/kduASSb0JC +YF6FubHGY/q4jnGHA03wziA9ObjXTvVRu0R8aXSLzgbtyNKVKd84xeo9zca5EuWttPcRuEAxOubvzj2B +r/XvFt8CHYiPem0nu1DB6bzbjycsKfKHTRQwaF2wAzVhjztfQH1LkI2++iYXoF3HCR6rSv+00G4mmm5D +jCfunzxZYpg56I3Nwocnsxbt/pCxZK5YTxCMO+HkvjJLES2lP6kkX1cNIRgK6piZ2117iTXvjnxMtTgi +pnunM4Ye4bXXtZprO6W71LySIr4m0ZQxID5nLfBMGu9Bj3VIlAX3xmkdFwO8rPRVLlj24UxaWuevgEPh +ygSF13muUlkwB64YSq/bHJAhdf51IkDO+b3YuJBvUBsguFuV+ZhQ9D5bWKmVvUd1HZwqWAgd3C3L4Mrr +TMDRC3c8EgwougkKTm2CjtWRGlvuz2zjnAsTWpmbl49XgXj4CR7tOnED+JAja8QttBH1MfToQ04Ezfez +8mNq+5uykr8y7vGvV/w4YNYa41IFvUJgxuDn9aOXvv/qh68JfTS+TnRf8T0tDOgS+Imr/gi7q4l/PrAI +0RDAYIQl6GzjBJQ2LoqgJUQVaLF6qQij1+O5O2ITw2B2Vq0w+FTUjJny2+j1gKvsYreYlj6Gu7IrsrMe +sB1B/MIA65ISmgKNvPcCXI0MYMMvceMEPLrpvx3/qoVc6EqP01zKtAMH7AcOdeHj3ghvVaJcCDSfZXoj +Xrs1p5sll2vcxyrs1e6Ne0OhTjo+E9wf2ivLApfU5ZoJ+yWu7VLTLAggv6VgHo/gnsqWhUAC/x3nenAA +kjVOdoyUrjOkaP0rJlVB71jhKu7heaAKlBmT7hVw6PC5Jd3WwcumHK0mqTSekL2kMDjCs9GcHAZvT+Ec +WkzXYTMr9ej6C3GOa+AmHFK3YZaRvVA46Bhw0J8XTMLqI38Y+yytaWb2SDppzBF9WM4UsEeAu1iXkjkh +Wp60VEcSwy004DW4+sQr4/DmKjAW0j6twTYYfiEpesSn788iTRgFuI1jPfEqK8Oqv1gWD1zTggEIsdr2 +eoni1X1LqzAasgPBrvWJtn9YHPVnV3lMp5mqSPLyDZm1uKwledV3o3QAI/PjyORym+9S4dt6ncNk/uI0 +cy3gy6zZnKokeDtCcWJnoeyf1Yy8od3k9Zhqjp2g6JuhRcBEfXXSNlzPIcTzg7dUL0cF4K57R7d+RYqC +yWCvs+wuD+cG3WUGdLEz32Tc2gtHwcAeeMuCURFNnZDN0mPkHNWzSXOI/dtOzRTYM/G9aTnRu7J5Y4uv +y3EJwaa0PTJJ2I2GgQ6JBUeZJv25Zenb1TYMLk10UBr2Kuy9ez74h20yX9tkVXfSc9g/vTLUFMCXFGCf +/HrlJ6f4XBQNa9tpJUe5yvyI7De+K6/73KqKfW08wPPJkoinlCNOyyWvRLw94JwGS9YA5JiFVbqXgpmi +5RdwpSQ8zRFVTm6lzPiR3yTVpyqz2oJWqLKrGddPxz4HK3jeG6D6PWH2mDaCqSceEMz/SKJ5DGrO45Pv +kFC26lOrko4UiFDvfjsnGDD7OuYUcACdtcPeIfrNdiqz/wT9KQ/yNZR2VYIPWOxcsRCSyTQVUj3wTuPO +Nooh4gAXlgVJSvV5efTXe/mUFbFisxet/fAQYdHQmH0QS6GdzWamXkyY4gDYsG6JZZ/G2Yjusqbj/1UB +uZW616MQ5oLxTPG6dJrzfOUkukDI//SSduKpINv4ZTMFdx9qdcc3+V9f9cD5Ycb63fkJbJ8XTUIfl30M +cHOcx+2YIKGtsyYpRMl3+4V7/Gc6S/de14RV8R/HkiMq+10a51JNupa8jHVye66Ga0W19EY/md6Z3rqz +ZZgAJLgl+/KinLCSvjRNBVzMUv8JGSAMcFCxkAb1oQNhz3A2G6gpaU6pRKqvLb+zJc+CNgUDc2017UV2 +X39LnMiP+GqnC+ucgZlb3HM5k3l1xX9VpfKr5TFLNA7gZT38GePtlaMDQ/9GEKBPndM1Xm1KeWB0TYTP +659NVAkOLDiDi0dGtmzELZiGVYYUS2p+mtk77VprwgmRPvqHzr76Mk+U6T1+YXIp3OvfuG/ue2JHeNIn +6LLYcVhpByaWHowUxmg3vbW7Fu1jv7Ink6wpSbdLRLCixP7+upKbLj/sRWnz4QU9Hr2SVoqK/guvXQ+b +7FJFfHQZL87p77gaduYI0BaxPVrf+hOYk/+GTZnQXtd3aLEbifrm4jklxzRwzCHYuiZKJMZy0P4BzqCb +K0tnXscSRN4V7QNinm+O+62cwzT8zvReuPR9hZ4g2j8J70NFhsR/g7krnibrt8OY4YL2QjbY5Y6Atscj +nmrWvHrxd7b9+fxMTgT89eftXQmQXynnOGtNPHBKW+DQSu/hsxZC1TAE6fBjadbwMRe+U8As1clN73rO +svWHhQa3xFii69Y8m7+1BnN3wsGw+8y97n2/HzX52NfyQMR5coRCTIFoiEhtJW6pqYJXCSuuVJCSGpR+ +WlI2s9oSUr8wbcVL2ujSBGknIvgF+sRYzH3+Pcpxq5Ty8jbwEDIh9lt5qh2/kj6uSc23gxFOBAIdrY47 +8y7t/ewXGFDf/MsHbuj2sez9CT/WG6clYltBOtpPnmBbbcIF1oFx9gKQUujW4I37T6GUL517x+bvN9dF +LBgbVSluPTrqqShkOwEUIQ7ufYze09/X6B+lqhYXXA3ptXGfbQIuBozZeUz/2ew9gj7QQQ5IRSAZOAE0 +In/qjrMO6Mopj0EagscUiByVN3wOVtn7zH17tPBHUJt2ilTy+vriHa9cxzZ/w4DzutDCuxU0cgUtwP6b +6Mm0ZGniGE3PMbjgAMTZQqKrgFzKzm3aIE7hI03OUwc+HR6TtYy72zLgI5S829Fky0/+lc98VChKnOjo +Rb33Fq3fWRHCR4XpvM00mKgeoUqx38kRqYfuvo1ZtFt+u3gFR5MMKqgfiXSh8gMbn59vKoTf8jmELEWV +7AFoxyZJjLuj5HObwpJ4nN2zwevglUxtXTellcCExpaKXv6Ym+cXtycdLd96w1x3Q/+W03NeuNXugCjI ++0E1aBG/Dwc1/3B67lxjk6aY88RgxkfgnHgiwr3OdOeUlcogbDR+N84nOmeOi8TVRerS+z0Pcs5Hve81 +2NskZqi0QVLdW28GiQHtodfLG+RnR+t3PyRNIYZ5wHzd4TgR/sEE40sCHb9LpemKpRG2wifooev/1eR0 +Pq5areOWJzCaP7Kj0zEEGVuOXo6Pk6JBsA5dYic/TR1kBtw8WSO7rFxVfZHdbr/tcCHnb0U7MbuaZN/Z +gZd/NlzQvktLk3TThcDiCQYaa8rL5JwJspATXEPFy87H93w//8ZYjEgvXdsT2QntlaMa1ATz+Q6XBHFu +AsBgs90jYQtFndXBToD2aduSn3Cm2OfvNKQaCuohNIxIuA5L3pkhbK77TM72WS6407J2wgn98ipvLYU6 +5NhwcIXqONCI9lI8MdpaEhCWevIj5otQGsYX6YUqBvd91na0HoWrKv0UCZ5TGhZhuQqir3ISdId/INxb +a4byXG0CuVNXnGptNSgEcqkfYvzzJcrq2VSZyFcxH4hvT22+iajMmr9TFl95X3peYJdF5UuHKXmCL2LA +fZJQJcuRc1Fs3shTPQ1Icbz84B0LP0S7WfQN87ph5o/U0Ov+tTcviIwpdwmonpSwY3C9wDTAq1bjZhBY +hqcUbuI4pvmxxUMhvQfIGY7rtECqzmdq5RbkUT8C0rx7JMG/WFqL1Pk9faRDRHvjXsZwDOb1v01x3mUG +7jGrCg0A8zxT8KnvqjFuTBr5XyC3wgeCLSeBLG8WpGRgHCRRjo+WBA4VvBiC4qgLLHYROhflteDmKKVn +qUAgL+TYfxv22cNeEruRVcuz5mrhIKdGsyMuI7wPlhgp69/s0kwBZ+KkukPUXa92qQbzmiKvfvur/BLx +bh+L25H2DsrwiYafzPgga0ivDF7Qe9IPZo6nTBrXyz0dmAgzT0HLIHI7FnUd0mlX7fkfkXlSebtQzOJz +5bcKbVL8ZZSuh42aerAn1BLmi7GiKHpDq/xuhXM7yeCBqPutYp8slghgU0ahh9jwiUVx3JXGUH6DTWnm +8vJbXhtf/Ybjq3ibElDQwtAvkQpL/IuT5pnVos3c3B7ray9CW6PqAg2obBcjreNoshlDjVL2Osnmm5wv +cf/B+9TfV+qCXqM/r3XblImKcB0a/4hvq7LMwV+OxyMOUTnYPp0yeU7kwBT42gBKimHCLNYIVbRSEKnN +yLpCVumw8TrpOE6O4gETzIkSSLoDLwEldveND5Vg93RByhF94Z+TEh+nnKEnSN2fwnJBxK4nR+nvCyun +CYlQwM4MNCIXLf7x0XBEkBa4og+B9EdOdIiF8yCkcKJEWiVfO7ftpOyTkboo4g8DYuOZBZIEodzHsrDw +TvLzfJxiEQdSvXmjiBK0GDE4JOtq3Hfkdmiknb3/RyBXI1ZgwULu8Ic+NLMIeYjuMOvN1lsNLmGNfekl +NtaDB7y1iYVfCMtD7iKOJgi9MHAp0YdYacrh8bejLQXtltlP6CoKKzqqHxVBs6s4W7Tzf19n4xp9RPuo +xAgfNToz+pZAG/tPWglviGHd/jKNKmNz2cWLiFnVYYkeoX48W8e6c3Kp6yAudU9wAeC+NF4J3WpXeOUG +5//LVgGf/suzAzqkJt4P4oVBH1eXKtcfcWFlVKbmGYDrjGnXfGum7TgX1d83HYq1q1m3ZMUMk7o5InnV +4BdfFdmh2Cs69Yb0Bbl+Uwg542kN9kLhRBSVAuKdjTS+UbkEtk/Y/uKoX91LhOp4A6SSIVORcM/EZxyR ++L0BctAazUoUTPvPmdPwhtEDQ4OlbTpiBZVmmCB8dE5i+P9gctAqV1q9gXdTH/zy36xoD2UVq5NyTAlv +Wm7sWqrLVUdKewCWsZ6G2RNef+g07qoLlun5mWucvu9KDRkJ0zQsdQ7+HNcwQoeYU3Ns33T8IGLy9CX8 +liIPE2NkItiHgYGO9afNkmt3Bb4mWj1937LAk6UOjyU9K3SQFBHRCDUf5BocztwT2YJPSKYO1ZS/2Ow1 +W7mj2LyZ/mObyoidqEH5rrX2kh7ATB1GscaUBi9qXJiM/ePDYwPcq15P16Zwo1lVPF/X0k3+XKQOeRbu +W7VGGzPv1OQ+j0wASbUq3S9/3j4B1g4s08f0cAvnm5by6keBPODX/htHuWASARtQvcJlFa6NyDewiogE +t2JGvi6+AzDJ071ES2gcbtVjCEFV0FROII1ahnkVYgybH2CrLEM1zJRG0tYebd4Kjd568fTMaEDwlPKP +oG8xond+bCi2BWwGS29LK0zt1Y3U/JOyrWKjy06B+adWx3vDRI5PERg8bdBBYBJgdTp16cnre2Ui/PNm +zVS0+41AIjZxXeciFHOXQvsGWdNDpp3b7T1r0xxK3qCQfl5vxK24hftpk4neCPVN0oP8fsncr8MAq0M4 +zZqClAGYr7XEBCyqd7an+AT5TTaXdfxs4oKJFVFpPTLyEoB7AVlJa44E+F7ojNY3iThtSKOyusrzbM5I +6KMivoNJ/JIxy6MZ6E17ulIn4oTl64dU4f4O50B+K3SjkQGNvkq/Xu9L+E9nNO9nw/UgmVGFZDxujrbk +gECnVqaamiOldHqWxA2im+2JB1oXhJmIH+ksook0hebaq1SfmkCFtMNlMx7qxhuNssfirqXrkLJAyPW9 +9WocVqx9OPtp1MB4wxIDS7bCUccssqyusXAwTySQSyekZyWNZmhgna9wDJ5MQNZKMKDG+LTLUBG1g6+R +u2EyRsB6NZTTcQtxBK5wcG2JSEKZlu367G+9CevvvKLJNI1MMAdFeeSJAw9OcvXSxBGjsq1XIUGYqs+M +4VZQOaURbCVXj+tP2fWQdzSru7gauYFf5ZWfmj5YMO6Pxpw18aI3ci5509VCA/uERcvzYPQEGcyBbPAq +jLrj2jZdktuOZkYwC0rctHO2kJ1GXXyJnoNhQk2FWwmYA8pYjaN2HRRg7nYZG63BkpwnYlZxvBqGGv3+ +cZlv7vhOUMmqAnZ5HkvjYioBQYHkfnwYSiJ7Zt1zQj6JdlDmckFeUl1R8zTh5L9jK8fpcletmxUKcC8A +RLtk3AVXz7BSYlfXmfqZnZ/lCZK7kNNi/1hV0Aavlyf5TCKuoAXkvpG2siQ2bMe6c9g+JnH1QLTjBAUl +kLzuBLrzkQmSsIfHOdxtNsIvz8fDfWunRn0u5oKs8/55msDzUugWLkoo8gYeDST0Q7byiefmwKixcfEy +igUU10dy6xQG8gw6cMtg6DY8cQz1ux0rdMFuvfp10kfVebZDkAbFXpew7EZaGVi02LtXC29I2BisSSeX +BM9MH2hgi4CA8qyU5wi4fNz35Y5giVI1drg+o9VtzHs3q8UafsgiF/uNyCUcYv4MRn1zw/bhfp44U+Js +bTFdshisX2m1Ld0EL5Ev1Z679qOyvJrEoflj7JGCuAf/k2bQpipn3uyoQcUHIDBvr6jrXcLTdQBnfO/F +VTZdpIn3jfpuX5taIOCG9c1EEwHbSrQPtxLlx85V+/ShZrj8FL07cB1x6vzaNVCD/Y9sIHKdi6ZgHhwB +B9oWC9/hV59TREfiLuNzaO4ljOUz9gpxM06fTlP71qETRkiIV30aKiWDppD5P9MxU0zXgSReFP3T2ylO +tMwgfO/CgWgkGXkd4+XAd3KxNRkU38ol2A+VTW3Kgwy4eAttFwTztgJ1+yv+CghdZC03rjlJdP5O3/aH +N/baMSwUuJ0kOEWLh5ouQwziM0kMDJGJaHetO68lznzaTTi683VNMT/P2QU/vug8JaSM5AAmD2CR0pFL +jAWtIvB/n+j2fAGPjqrm6C23buiLa5/QK69C8R9McxhKqWIwY4o+ZIWnmGnmIYo+ccxwW4iYtvqqEyhr +OnF/7jFtP/DfdvImYazIHl2kopJfsCUxYipKrMgdCNM4F5rzr/6UIz33n73Hx8Qyl2k84jDpw5XxiB0Z +aFvDEkgyVNrHt4DdOe+4g6a/+yHtG/ONcEQVQa+vq5e79YbP7Hj4UEycMyYcfMVWwoKfubI160mRg7Zw +ZqEOdYuObmLeqBfgNIb3IIUc1pFAMpbZhvfGO19MhjOA5RDkRbcHxGjPifJruygA668UTQGs/0osaVR2 +8OyFruT+Hh9xe0jyqLTGq93xx28ecwT10p71+CFVxfwcGoE7bsPCVB3C5DOxZ69c+5X1owpQqI2tL4vc +ABDLgFvC3FvR2o2Fnp+TXnwa3aT8TkrYL6U3Z2/lnJ+lKPZbfqsmGpPiAN0ekB/V0Rws5wjPnwLp6MoZ +vekRCGiLdMRfB4Qh8eNULX9SFypF48XqbUpcRSR2iMkqbiprjoxvKMMqgnt552bONmEKZm/ZGpHSTuJM +hfyii8gPt+IQynHn/p3h9hpCIARXsiJ/HVZi8FHiQypOoqwANP6yFiJAKj9jthlOdm+Rs9xnP9gpY0Zp +4QArvTPAzKDot+JwFQpoF87ns4BEBIaaIeV6yCjiZHKx9H5iTXOxatQo46+eEfaOQ5vUZA88xr6qjNAV +k3SMIZMwuH6WdYfmPxj+6z8+0PQ+aCe3a4+FlqXVhh8hJXg/ylr5NtYvFQiG7+cX9oHSneya0vjPYQO3 +vSTfyJgjVS1zTaBRrPo9lVFJ+yI/8e3To3OyrboOk23L8qMFyUP6mCK8rt90wViBIwQ5x4rDfRXMhZSS +FShEBmy+c3y4eS4IuyDUf2USaUnGg9TAStl7+/7Pvzw/5d/Q8JKLgKksj/MVgCZcGPhLoFFGzrHIYVVl +Iew5sRlPgvdfAFtLIveNievHwSVrdj3Tdt8YcXxz/S1iRLk1MQHqJyjw0kGXhZy2It83ctSvevDf/6w6 +szETjtHhwYNv9l6KZQxIfwwwO/iDI8af6SauWLEMco8L3tloBApM3jUIwdXelXGiw2TnYlW4t1QIsfO1 +49ass28OFuyRTZeTgtIzgggiqrqv04Af7i60e7HJWSIc6onHzvAJhJ57UBTUkxjyShVbMbe2ZOkW7TEB +1tn8awzy2VzQfnMcq11XOqJVcAisOU5O0y6EkQffzQYoQNjHnbK3JM8HFvcgBEDZoqyNfSfcCEEyxaai +fxMFEBEP9LNI0Y6j/l7Dj3vrLPZ5ZlJGXMmiMw2tmrLFfs0rjvWPkvIpXBKBqMd+dzt78o4V19QzFCfm +3K0xK9ZCxHljbiqwR2abHvan2Fku9R/ULKXB4dw5o3umQs9pMbLBR+DNfvYP0S0MQLC3Ec/hAiE6AXRB +httMQi5OYn6yZ3YnR1fjNZeN2ga9QDziM9DyCd2+gEvzDLftJlSSp1tAkAE+b8LIYFKEHxGrvfNx+NPW +2G9H6c2q1ZbGidQ6YhIrpgBbgk/BFlXRUrDs0g1YJJN57p2k7V0Q1bgQVCeBNlUHqLPfFyYr7llOhxib +hFmjs5tqJpS/4YWsXJgKgZSnSI4wdFhGnI+3zMEcTgV09R9DrqrN55zbbOyHoUBA95f8d+IQ5+PqG269 +B9vAUObvi9KRQjwFpLKnQE0m75Kd46+DaNv1Z126ugnE/+R+bZS4QhG/NAjqJoIQntOKRgHO/eS7kdVr +UUiNCfgpHvbOhdt/cQl5I5N6ooZU0fVM36OX1ugK5oWUOGRYAAAAAAs+rk4I5fZyAAHePIC0AQCzLaW5 +scRn+wIAAAAABFla diff --git a/samples/Shell/zsh.script! b/samples/Shell/zsh similarity index 100% rename from samples/Shell/zsh.script! rename to samples/Shell/zsh diff --git a/samples/Smali/ActionBarDrawerToggle.smali b/samples/Smali/ActionBarDrawerToggle.smali new file mode 100644 index 00000000..c22484e6 --- /dev/null +++ b/samples/Smali/ActionBarDrawerToggle.smali @@ -0,0 +1,551 @@ +.class public Landroid/support/v4/app/ActionBarDrawerToggle; +.super Ljava/lang/Object; +.source "ActionBarDrawerToggle.java" + +# interfaces +.implements Landroid/support/v4/widget/DrawerLayout$DrawerListener; + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Landroid/support/v4/app/ActionBarDrawerToggle$1;, + Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;, + Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplHC;, + Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplBase;, + Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + } +.end annotation + + +# static fields +.field private static final ID_HOME:I = 0x102002c + +.field private static final IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + +# instance fields +.field private final mActivity:Landroid/app/Activity; + +.field private final mCloseDrawerContentDescRes:I + +.field private mDrawerImage:Landroid/graphics/drawable/Drawable; + +.field private final mDrawerImageResource:I + +.field private mDrawerIndicatorEnabled:Z + +.field private final mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + +.field private final mOpenDrawerContentDescRes:I + +.field private mSetIndicatorInfo:Ljava/lang/Object; + +.field private mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + +.field private mThemeImage:Landroid/graphics/drawable/Drawable; + + +# direct methods +.method static constructor ()V + .registers 3 + + .prologue + const/4 v2, 0x0 + + .line 108 + sget v0, Landroid/os/Build$VERSION;->SDK_INT:I + + .line 109 + .local v0, "version":I + const/16 v1, 0xb + + if-lt v0, v1, :cond_f + + .line 110 + new-instance v1, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplHC; + + invoke-direct {v1, v2}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplHC;->(Landroid/support/v4/app/ActionBarDrawerToggle$1;)V + + sput-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + .line 114 + :goto_e + return-void + + .line 112 + :cond_f + new-instance v1, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplBase; + + invoke-direct {v1, v2}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplBase;->(Landroid/support/v4/app/ActionBarDrawerToggle$1;)V + + sput-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + goto :goto_e +.end method + +.method public constructor (Landroid/app/Activity;Landroid/support/v4/widget/DrawerLayout;III)V + .registers 8 + .param p1, "activity" # Landroid/app/Activity; + .param p2, "drawerLayout" # Landroid/support/v4/widget/DrawerLayout; + .param p3, "drawerImageRes" # I + .param p4, "openDrawerContentDescRes" # I + .param p5, "closeDrawerContentDescRes" # I + + .prologue + .line 152 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 121 + const/4 v0, 0x1 + + iput-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + .line 153 + iput-object p1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + .line 154 + iput-object p2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + .line 155 + iput p3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImageResource:I + + .line 156 + iput p4, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + .line 157 + iput p5, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + .line 159 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + invoke-interface {v0, p1}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->getThemeUpIndicator(Landroid/app/Activity;)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mThemeImage:Landroid/graphics/drawable/Drawable; + + .line 160 + invoke-virtual {p1}, Landroid/app/Activity;->getResources()Landroid/content/res/Resources; + + move-result-object v0 + + invoke-virtual {v0, p3}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImage:Landroid/graphics/drawable/Drawable; + + .line 161 + new-instance v0, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImage:Landroid/graphics/drawable/Drawable; + + invoke-direct {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->(Landroid/graphics/drawable/Drawable;)V + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + .line 162 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const v1, 0x3eaaaaab + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffsetBy(F)V + + .line 163 + return-void +.end method + + +# virtual methods +.method public isDrawerIndicatorEnabled()Z + .registers 2 + + .prologue + .line 217 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + return v0 +.end method + +.method public onConfigurationChanged(Landroid/content/res/Configuration;)V + .registers 4 + .param p1, "newConfig" # Landroid/content/res/Configuration; + + .prologue + .line 229 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + invoke-interface {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->getThemeUpIndicator(Landroid/app/Activity;)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mThemeImage:Landroid/graphics/drawable/Drawable; + + .line 230 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + invoke-virtual {v0}, Landroid/app/Activity;->getResources()Landroid/content/res/Resources; + + move-result-object v0 + + iget v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImageResource:I + + invoke-virtual {v0, v1}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImage:Landroid/graphics/drawable/Drawable; + + .line 231 + invoke-virtual {p0}, Landroid/support/v4/app/ActionBarDrawerToggle;->syncState()V + + .line 232 + return-void +.end method + +.method public onDrawerClosed(Landroid/view/View;)V + .registers 6 + .param p1, "drawerView" # Landroid/view/View; + + .prologue + .line 298 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/4 v1, 0x0 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 299 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_18 + + .line 300 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + invoke-interface {v0, v1, v2, v3}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarDescription(Ljava/lang/Object;Landroid/app/Activity;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 303 + :cond_18 + return-void +.end method + +.method public onDrawerOpened(Landroid/view/View;)V + .registers 6 + .param p1, "drawerView" # Landroid/view/View; + + .prologue + .line 282 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/high16 v1, 0x3f800000 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 283 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_19 + + .line 284 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + invoke-interface {v0, v1, v2, v3}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarDescription(Ljava/lang/Object;Landroid/app/Activity;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 287 + :cond_19 + return-void +.end method + +.method public onDrawerSlide(Landroid/view/View;F)V + .registers 7 + .param p1, "drawerView" # Landroid/view/View; + .param p2, "slideOffset" # F + + .prologue + const/high16 v3, 0x40000000 + + const/high16 v2, 0x3f000000 + + .line 264 + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + invoke-virtual {v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->getOffset()F + + move-result v0 + + .line 265 + .local v0, "glyphOffset":F + cmpl-float v1, p2, v2 + + if-lez v1, :cond_20 + + .line 266 + const/4 v1, 0x0 + + sub-float v2, p2, v2 + + invoke-static {v1, v2}, Ljava/lang/Math;->max(FF)F + + move-result v1 + + mul-float/2addr v1, v3 + + invoke-static {v0, v1}, Ljava/lang/Math;->max(FF)F + + move-result v0 + + .line 270 + :goto_1a + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + invoke-virtual {v1, v0}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 271 + return-void + + .line 268 + :cond_20 + mul-float v1, p2, v3 + + invoke-static {v0, v1}, Ljava/lang/Math;->min(FF)F + + move-result v0 + + goto :goto_1a +.end method + +.method public onDrawerStateChanged(I)V + .registers 2 + .param p1, "newState" # I + + .prologue + .line 314 + return-void +.end method + +.method public onOptionsItemSelected(Landroid/view/MenuItem;)Z + .registers 5 + .param p1, "item" # Landroid/view/MenuItem; + + .prologue + const v2, 0x800003 + + .line 244 + if-eqz p1, :cond_1f + + invoke-interface {p1}, Landroid/view/MenuItem;->getItemId()I + + move-result v0 + + const v1, 0x102002c + + if-ne v0, v1, :cond_1f + + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_1f + + .line 245 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v2}, Landroid/support/v4/widget/DrawerLayout;->isDrawerVisible(I)Z + + move-result v0 + + if-eqz v0, :cond_21 + + .line 246 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v2}, Landroid/support/v4/widget/DrawerLayout;->closeDrawer(I)V + + .line 251 + :cond_1f + :goto_1f + const/4 v0, 0x0 + + return v0 + + .line 248 + :cond_21 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v2}, Landroid/support/v4/widget/DrawerLayout;->openDrawer(I)V + + goto :goto_1f +.end method + +.method public setDrawerIndicatorEnabled(Z)V + .registers 8 + .param p1, "enable" # Z + + .prologue + .line 199 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eq p1, v0, :cond_23 + + .line 200 + if-eqz p1, :cond_27 + + .line 201 + sget-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget-object v4, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + const v5, 0x800003 + + invoke-virtual {v0, v5}, Landroid/support/v4/widget/DrawerLayout;->isDrawerOpen(I)Z + + move-result v0 + + if-eqz v0, :cond_24 + + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + :goto_1b + invoke-interface {v1, v2, v3, v4, v0}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarUpIndicator(Ljava/lang/Object;Landroid/app/Activity;Landroid/graphics/drawable/Drawable;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 208 + :goto_21 + iput-boolean p1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + .line 210 + :cond_23 + return-void + + .line 201 + :cond_24 + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + goto :goto_1b + + .line 205 + :cond_27 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget-object v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mThemeImage:Landroid/graphics/drawable/Drawable; + + const/4 v4, 0x0 + + invoke-interface {v0, v1, v2, v3, v4}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarUpIndicator(Ljava/lang/Object;Landroid/app/Activity;Landroid/graphics/drawable/Drawable;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + goto :goto_21 +.end method + +.method public syncState()V + .registers 7 + + .prologue + const v5, 0x800003 + + .line 175 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v5}, Landroid/support/v4/widget/DrawerLayout;->isDrawerOpen(I)Z + + move-result v0 + + if-eqz v0, :cond_2f + + .line 176 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/high16 v1, 0x3f800000 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 181 + :goto_12 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_2e + + .line 182 + sget-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget-object v4, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v5}, Landroid/support/v4/widget/DrawerLayout;->isDrawerOpen(I)Z + + move-result v0 + + if-eqz v0, :cond_36 + + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + :goto_28 + invoke-interface {v1, v2, v3, v4, v0}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarUpIndicator(Ljava/lang/Object;Landroid/app/Activity;Landroid/graphics/drawable/Drawable;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 186 + :cond_2e + return-void + + .line 178 + :cond_2f + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/4 v1, 0x0 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + goto :goto_12 + + .line 182 + :cond_36 + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + goto :goto_28 +.end method diff --git a/samples/Smali/DoodleMobileAnaylise.smali b/samples/Smali/DoodleMobileAnaylise.smali new file mode 100644 index 00000000..9f08c551 --- /dev/null +++ b/samples/Smali/DoodleMobileAnaylise.smali @@ -0,0 +1,4235 @@ +.class public Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; +.super Ljava/lang/Object; +.source "DoodleMobileAnaylise.java" + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$Sync;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$SessionPolling;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$MobclixHttpClient;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$FetchRemoteConfig;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$LogEvent; + } +.end annotation + + +# static fields +.field static final DEBUG:Z = false + +.field public static final LOG_LEVEL_DEBUG:I = 0x1 + +.field public static final LOG_LEVEL_ERROR:I = 0x8 + +.field public static final LOG_LEVEL_FATAL:I = 0x10 + +.field public static final LOG_LEVEL_INFO:I = 0x2 + +.field public static final LOG_LEVEL_WARN:I = 0x4 + +.field private static MC_ANALYTICS_DIRECTORY:Ljava/lang/String; = null + +.field private static MC_DIRECTORY:Ljava/lang/String; = null + +.field private static MC_MAX_ANALYTICS_FILES:I = 0x0 + +.field private static MC_MAX_EVENTS_PER_FILE:I = 0x0 + +.field static final PREFS_CONFIG:Ljava/lang/String; = ".DMConfig" + +.field public static final PUSH_MESSAGE_INTERVAL:I = 0xf0 + +.field static final PUSH_MESSAGE_TO_SERVER:I = 0x186a1 + +.field private static SYNC_ERROR:I + +.field private static SYNC_READY:I + +.field private static SYNC_RUNNING:I + +.field private static applicationInfo:Landroid/content/pm/ApplicationInfo; + +.field private static final controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + +.field private static currentFile:Ljava/io/File; + +.field private static fileCreated:Z + +.field private static isInitialized:Z + +.field private static loggingEvent:Z + +.field static mSyncHandler:Landroid/os/Handler; + +.field private static numLinesWritten:I + +.field private static packageName:Ljava/lang/String; + +.field private static syncContents:Ljava/lang/String; + +.field private static syncStatus:I + + +# instance fields +.field private analyticsServer:Ljava/lang/String; + +.field private androidId:Ljava/lang/String; + +.field private androidVersion:Ljava/lang/String; + +.field private applicationId:Ljava/lang/String; + +.field private applicationVersion:Ljava/lang/String; + +.field private autoplay:Ljava/util/HashMap; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/Boolean;", + ">;" + } + .end annotation +.end field + +.field private configServer:Ljava/lang/String; + +.field private connectionType:Ljava/lang/String; + +.field private context:Landroid/content/Context; + +.field private deviceHardwareModel:Ljava/lang/String; + +.field private deviceId:Ljava/lang/String; + +.field private deviceModel:Ljava/lang/String; + +.field private enabled:Ljava/util/HashMap; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/Boolean;", + ">;" + } + .end annotation +.end field + +.field private haveLocationPermission:Z + +.field private haveNetworkStatePermission:Z + +.field private idleTimeout:I + +.field private isInSession:Z + +.field private isNewUser:Z + +.field private isOfflineSession:Z + +.field private isTopTask:Z + +.field private language:Ljava/lang/String; + +.field private latitude:Ljava/lang/String; + +.field private locale:Ljava/lang/String; + +.field location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + +.field private locationCriteria:Landroid/location/Criteria; + +.field private locationHandler:Landroid/os/Handler; + +.field private logLevel:I + +.field private longitude:Ljava/lang/String; + +.field private mcc:Ljava/lang/String; + +.field private mnc:Ljava/lang/String; + +.field private pollTime:I + +.field private previousDeviceId:Ljava/lang/String; + +.field private refreshTime:Ljava/util/HashMap; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/Long;", + ">;" + } + .end annotation +.end field + +.field private remoteConfigSet:I + +.field private session:Lorg/json/JSONObject; + +.field private sessionEndTime:J + +.field private sessionPollingTimer:Ljava/util/Timer; + +.field private sessionStartTime:J + +.field private sharedPrefs:Landroid/content/SharedPreferences; + +.field private totalIdleTime:J + +.field private userAgent:Ljava/lang/String; + + +# direct methods +.method static constructor ()V + .locals 3 + + .prologue + const/4 v2, 0x0 + + const/4 v1, 0x0 + + .line 70 + const-string v0, "doodlemobile" + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_DIRECTORY:Ljava/lang/String; + + .line 72 + const-string v0, "analytics" + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_ANALYTICS_DIRECTORY:Ljava/lang/String; + + .line 74 + const/16 v0, 0x64 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_ANALYTICS_FILES:I + + .line 76 + const/4 v0, 0x5 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_EVENTS_PER_FILE:I + + .line 104 + sput-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + .line 106 + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + .line 108 + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->loggingEvent:Z + + .line 110 + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + .line 112 + sput-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncContents:Ljava/lang/String; + + .line 114 + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + .line 116 + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_READY:I + + .line 118 + const/4 v0, 0x1 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_RUNNING:I + + .line 120 + const/4 v0, -0x1 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_ERROR:I + + .line 184 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-direct {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->()V + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + .line 186 + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + + .line 188 + const-string v0, "" + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + + .line 190 + sput-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + .line 771 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$3; + + invoke-direct {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$3;->()V + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mSyncHandler:Landroid/os/Handler; + + return-void +.end method + +.method public constructor ()V + .locals 7 + + .prologue + const/4 v5, 0x0 + + const-wide/16 v3, 0x0 + + const/4 v2, 0x0 + + const-string v6, "http://data.doodlemobile.com:8080/dmdata/ReceiveServlet" + + const-string v1, "null" + + .line 56 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 78 + iput-object v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + .line 80 + new-instance v0, Lorg/json/JSONObject; + + invoke-direct {v0}, Lorg/json/JSONObject;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + .line 88 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->enabled:Ljava/util/HashMap; + + .line 90 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->refreshTime:Ljava/util/HashMap; + + .line 92 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->autoplay:Ljava/util/HashMap; + + .line 94 + const-string v0, "http://data.doodlemobile.com:8080/dmdata/ReceiveServlet" + + iput-object v6, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->configServer:Ljava/lang/String; + + .line 96 + const-string v0, "http://data.doodlemobile.com:8080/dmdata/ReceiveServlet" + + iput-object v6, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->analyticsServer:Ljava/lang/String; + + .line 98 + const/16 v0, 0x7530 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + .line 100 + const v0, 0x1d4c0 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->idleTimeout:I + + .line 102 + iput v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->remoteConfigSet:I + + .line 122 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isOfflineSession:Z + + .line 124 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + .line 126 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 128 + iput-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + .line 130 + iput-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 132 + iput-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + .line 134 + new-instance v0, Ljava/util/Timer; + + invoke-direct {v0}, Ljava/util/Timer;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionPollingTimer:Ljava/util/Timer; + + .line 144 + iput-object v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->previousDeviceId:Ljava/lang/String; + + .line 150 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + .line 154 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + invoke-direct {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileLocation;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + .line 156 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + .line 158 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + .line 160 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + .line 162 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + .line 164 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mcc:Ljava/lang/String; + + .line 166 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mnc:Ljava/lang/String; + + .line 168 + const-string v0, "" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + .line 170 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + .line 172 + const/16 v0, 0x10 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + .line 174 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + .line 178 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + .line 180 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isNewUser:Z + + .line 1045 + return-void +.end method + +.method private OpenAnalyticsFile()Z + .locals 7 + + .prologue + const/4 v6, 0x1 + + const/4 v5, 0x0 + + const-string v0, "DoodleMobileAnaylise" + + const-string v0, "/" + + const-string v0, "UTF-8" + + .line 720 + sput v6, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + .line 721 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-virtual {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateSession()V + + .line 724 + :try_start_0 + new-instance v0, Lorg/json/JSONObject; + + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v1, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const/4 v2, 0x3 + + new-array v2, v2, [Ljava/lang/String; + + const/4 v3, 0x0 + + const-string v4, "ll" + + aput-object v4, v2, v3 + + const/4 v3, 0x1 + + const-string v4, "g" + + aput-object v4, v2, v3 + + const/4 v3, 0x2 + + const-string v4, "id" + + aput-object v4, v2, v3 + + invoke-direct {v0, v1, v2}, Lorg/json/JSONObject;->(Lorg/json/JSONObject;[Ljava/lang/String;)V + + .line 726 + const-string v1, "a" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getApplicationId()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 727 + const-string v1, "p" + + const-string v2, "android" + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 728 + const-string v1, "m" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getMobclixVersion()Ljava/lang/String; + + move-result-object v2 + + invoke-static {v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 729 + const-string v1, "v" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getApplicationVersion()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 730 + const-string v1, "d" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getDeviceId()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 731 + const-string v1, "dm" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getDeviceModel()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 732 + const-string v1, "dv" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getAndroidVersion()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 733 + const-string v1, "hwdm" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getDeviceHardwareModel()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 735 + const-string v1, "m" + + const-string v2, "2.3" + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 736 + const-string v1, "lg" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLanguage()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 737 + const-string v1, "lo" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLocale()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 738 + const-string v1, "pn" + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 740 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v1, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_DIRECTORY:Ljava/lang/String; + + const/4 v3, 0x0 + + invoke-virtual {v1, v2, v3}, Landroid/content/Context;->getDir(Ljava/lang/String;I)Ljava/io/File; + + move-result-object v1 + + .line 741 + new-instance v2, Ljava/io/File; + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + const-string v3, "/" + + invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + sget-object v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_ANALYTICS_DIRECTORY:Ljava/lang/String; + + invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v2, v1}, Ljava/io/File;->(Ljava/lang/String;)V + + .line 743 + invoke-virtual {v2}, Ljava/io/File;->mkdir()Z + + .line 744 + const-string v1, "DoodleMobileAnaylise" + + const-string v3, "mkdir" + + invoke-static {v1, v3}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 745 + invoke-virtual {v2}, Ljava/io/File;->listFiles()[Ljava/io/File; + + move-result-object v1 + + array-length v1, v1 + + sget v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_ANALYTICS_FILES:I + + if-lt v1, v3, :cond_0 + + .line 746 + const-string v0, "DoodleMobileAnaylise" + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v2}, Ljava/io/File;->listFiles()[Ljava/io/File; + + move-result-object v2 + + array-length v2, v2 + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; + + move-result-object v1 + + const-string v2, " " + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + sget v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_ANALYTICS_FILES:I + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + move v0, v5 + + .line 768 + :goto_0 + return v0 + + .line 751 + :cond_0 + new-instance v1, Ljava/io/File; + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v2}, Ljava/io/File;->getAbsoluteFile()Ljava/io/File; + + move-result-object v2 + + invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + move-result-object v2 + + const-string v3, "/" + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v3 + + invoke-virtual {v2, v3, v4}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; + + move-result-object v2 + + const-string v3, ".log" + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v2 + + invoke-direct {v1, v2}, Ljava/io/File;->(Ljava/lang/String;)V + + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + .line 754 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + invoke-virtual {v1}, Ljava/io/File;->createNewFile()Z + + .line 756 + new-instance v1, Ljava/io/FileOutputStream; + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + invoke-direct {v1, v2}, Ljava/io/FileOutputStream;->(Ljava/io/File;)V + + .line 758 + const-string v2, "[{\"hb\":" + + invoke-virtual {v2}, Ljava/lang/String;->getBytes()[B + + move-result-object v2 + + invoke-virtual {v1, v2}, Ljava/io/FileOutputStream;->write([B)V + + .line 759 + invoke-virtual {v0}, Lorg/json/JSONObject;->toString()Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/String;->getBytes()[B + + move-result-object v0 + + invoke-virtual {v1, v0}, Ljava/io/FileOutputStream;->write([B)V + + .line 760 + const-string v0, ",\"ev\":[" + + invoke-virtual {v0}, Ljava/lang/String;->getBytes()[B + + move-result-object v0 + + invoke-virtual {v1, v0}, Ljava/io/FileOutputStream;->write([B)V + + .line 761 + invoke-virtual {v1}, Ljava/io/FileOutputStream;->close()V + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 767 + sput-boolean v6, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + move v0, v6 + + .line 768 + goto :goto_0 + + .line 763 + :catch_0 + move-exception v0 + + .line 764 + invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V + + move v0, v5 + + .line 765 + goto :goto_0 +.end method + +.method static synthetic access$002(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + return-object p1 +.end method + +.method static synthetic access$1000()Ljava/io/File; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + return-object v0 +.end method + +.method static synthetic access$102(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + return-object p1 +.end method + +.method static synthetic access$1100()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + return v0 +.end method + +.method static synthetic access$1102(I)I + .locals 0 + + .prologue + .line 56 + sput p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + return p0 +.end method + +.method static synthetic access$1112(I)I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + add-int/2addr v0, p0 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + return v0 +.end method + +.method static synthetic access$1200()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_EVENTS_PER_FILE:I + + return v0 +.end method + +.method static synthetic access$1400(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Landroid/content/Context; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + return-object v0 +.end method + +.method static synthetic access$1500(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$1502(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + return-object p1 +.end method + +.method static synthetic access$1600(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Landroid/location/Criteria; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationCriteria:Landroid/location/Criteria; + + return-object v0 +.end method + +.method static synthetic access$1602(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Landroid/location/Criteria;)Landroid/location/Criteria; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationCriteria:Landroid/location/Criteria; + + return-object p1 +.end method + +.method static synthetic access$1702(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Z)Z + .locals 0 + + .prologue + .line 56 + iput-boolean p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + return p1 +.end method + +.method static synthetic access$1802(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Z)Z + .locals 0 + + .prologue + .line 56 + iput-boolean p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + return p1 +.end method + +.method static synthetic access$1900(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Z)V + .locals 0 + + .prologue + .line 56 + invoke-direct {p0, p1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->handleSessionStatus(Z)V + + return-void +.end method + +.method static synthetic access$200(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)V + .locals 0 + + .prologue + .line 56 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateLocation()V + + return-void +.end method + +.method static synthetic access$2000()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_RUNNING:I + + return v0 +.end method + +.method static synthetic access$2100()Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_DIRECTORY:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2200()Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_ANALYTICS_DIRECTORY:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2300()Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncContents:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2302(Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + sput-object p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncContents:Ljava/lang/String; + + return-object p0 +.end method + +.method static synthetic access$2400(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->analyticsServer:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2500()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_ERROR:I + + return v0 +.end method + +.method static synthetic access$400()Z + .locals 1 + + .prologue + .line 56 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->loggingEvent:Z + + return v0 +.end method + +.method static synthetic access$402(Z)Z + .locals 0 + + .prologue + .line 56 + sput-boolean p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->loggingEvent:Z + + return p0 +.end method + +.method static synthetic access$500()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + return v0 +.end method + +.method static synthetic access$502(I)I + .locals 0 + + .prologue + .line 56 + sput p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + return p0 +.end method + +.method static synthetic access$600()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_READY:I + + return v0 +.end method + +.method static synthetic access$700()Z + .locals 1 + + .prologue + .line 56 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + return v0 +.end method + +.method static synthetic access$702(Z)Z + .locals 0 + + .prologue + .line 56 + sput-boolean p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + return p0 +.end method + +.method static synthetic access$800(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Z + .locals 1 + + .prologue + .line 56 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->OpenAnalyticsFile()Z + + move-result v0 + + return v0 +.end method + +.method static synthetic access$900()Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + return-object v0 +.end method + +.method static addPref(Ljava/lang/String;Ljava/lang/String;)V + .locals 1 + + .prologue + .line 333 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v0 + + .line 334 + invoke-interface {v0, p0, p1}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; + + .line 335 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 338 + :goto_0 + return-void + + .line 336 + :catch_0 + move-exception v0 + + goto :goto_0 +.end method + +.method static addPref(Ljava/util/Map;)V + .locals 3 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/util/Map", + "<", + "Ljava/lang/String;", + "Ljava/lang/String;", + ">;)V" + } + .end annotation + + .prologue + .line 342 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v1 + + .line 343 + invoke-interface {p0}, Ljava/util/Map;->entrySet()Ljava/util/Set; + + move-result-object v0 + + invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 344 + :goto_0 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + + move-result v0 + + if-eqz v0, :cond_0 + + .line 345 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/util/Map$Entry; + + .line 346 + invoke-interface {p0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Ljava/lang/String; + + invoke-interface {p0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/lang/String; + + invoke-interface {v1, v0, p0}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; + + goto :goto_0 + + .line 349 + :catch_0 + move-exception v0 + + .line 351 + :goto_1 + return-void + + .line 348 + :cond_0 + invoke-interface {v1}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + goto :goto_1 +.end method + +.method static clearPref()V + .locals 1 + + .prologue + .line 364 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v0 + + .line 365 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->clear()Landroid/content/SharedPreferences$Editor; + + .line 366 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 369 + :goto_0 + return-void + + .line 367 + :catch_0 + move-exception v0 + + goto :goto_0 +.end method + +.method private createNewSession()V + .locals 7 + + .prologue + const-wide/16 v5, 0x0 + + const/4 v4, 0x1 + + .line 804 + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v0 + + .line 805 + new-instance v2, Ljava/lang/StringBuilder; + + invoke-direct {v2}, Ljava/lang/StringBuilder;->()V + + iget-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2, v0, v1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v2 + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sha1(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + .line 807 + iput-boolean v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 808 + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + .line 809 + iput-wide v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 810 + iput-wide v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + .line 811 + iput-boolean v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + .line 813 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "id" + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 817 + :goto_0 + const/4 v0, 0x0 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->remoteConfigSet:I + + .line 818 + new-instance v0, Ljava/lang/Thread; + + new-instance v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$FetchRemoteConfig; + + const/4 v2, 0x0 + + invoke-direct {v1, p0, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$FetchRemoteConfig;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1;)V + + invoke-direct {v0, v1}, Ljava/lang/Thread;->(Ljava/lang/Runnable;)V + + .line 819 + invoke-virtual {v0}, Ljava/lang/Thread;->start()V + + .line 820 + return-void + + .line 814 + :catch_0 + move-exception v0 + + .line 815 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "static sync 2" + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + goto :goto_0 +.end method + +.method private endSession()V + .locals 6 + + .prologue + const-string v0, "totalSessionTime" + + const-string v0, "totalIdleTime" + + const-string v0, "offlineSessions" + + .line 852 + :try_start_0 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + if-nez v0, :cond_0 + + .line 893 + :goto_0 + return-void + + .line 854 + :cond_0 + iget-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + sub-long/2addr v0, v2 + + .line 856 + const-string v2, "totalSessionTime" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v2 + + if-eqz v2, :cond_1 + + .line 858 + :try_start_1 + const-string v2, "totalSessionTime" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-static {v2}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_3 + + move-result-wide v2 + + add-long/2addr v0, v2 + + .line 861 + :cond_1 + :goto_1 + :try_start_2 + const-string v2, "totalIdleTime" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + :try_end_2 + .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_2} :catch_0 + + move-result v2 + + if-eqz v2, :cond_2 + + .line 863 + :try_start_3 + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + const-string v4, "totalIdleTime" + + invoke-static {v4}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v4 + + invoke-static {v4}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J + + move-result-wide v4 + + add-long/2addr v2, v4 + + iput-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + :try_end_3 + .catch Ljava/lang/Exception; {:try_start_3 .. :try_end_3} :catch_2 + + .line 867 + :cond_2 + :goto_2 + :try_start_4 + new-instance v2, Ljava/util/HashMap; + + invoke-direct {v2}, Ljava/util/HashMap;->()V + + .line 868 + const-string v3, "totalSessionTime" + + invoke-static {v0, v1}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {v2, v3, v0}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 869 + const-string v0, "totalIdleTime" + + iget-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + invoke-static {v3, v4}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v2, v0, v1}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 872 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isOfflineSession:Z + + if-eqz v0, :cond_4 + + .line 873 + const/4 v0, 0x1 + + .line 874 + const-string v1, "offlineSessions" + + invoke-static {v1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + :try_end_4 + .catch Ljava/lang/Exception; {:try_start_4 .. :try_end_4} :catch_0 + + move-result v1 + + if-eqz v1, :cond_3 + + .line 876 + :try_start_5 + const-string v1, "offlineSessions" + + invoke-static {v1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v1 + + invoke-static {v1}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I + :try_end_5 + .catch Ljava/lang/Exception; {:try_start_5 .. :try_end_5} :catch_1 + + move-result v1 + + add-int/2addr v0, v1 + + .line 880 + :cond_3 + :goto_3 + :try_start_6 + const-string v1, "offlineSessions" + + int-to-long v3, v0 + + invoke-static {v3, v4}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {v2, v1, v0}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 884 + :cond_4 + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->addPref(Ljava/util/Map;)V + + .line 886 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + .line 887 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 888 + const-wide/16 v0, 0x0 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + .line 889 + const-wide/16 v0, 0x0 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 890 + const-wide/16 v0, 0x0 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + :try_end_6 + .catch Ljava/lang/Exception; {:try_start_6 .. :try_end_6} :catch_0 + + goto :goto_0 + + .line 891 + :catch_0 + move-exception v0 + + goto/16 :goto_0 + + .line 878 + :catch_1 + move-exception v1 + + goto :goto_3 + + .line 865 + :catch_2 + move-exception v2 + + goto :goto_2 + + .line 859 + :catch_3 + move-exception v2 + + goto :goto_1 +.end method + +.method static getAllPref()Ljava/util/HashMap; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/String;", + ">;" + } + .end annotation + + .prologue + .line 309 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->getAll()Ljava/util/Map; + + move-result-object v0 + + check-cast v0, Ljava/util/HashMap; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 312 + :goto_0 + return-object v0 + + .line 310 + :catch_0 + move-exception v0 + + .line 312 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + goto :goto_0 +.end method + +.method static getCookieStringFromCookieManager(Ljava/lang/String;)Ljava/lang/String; + .locals 1 + + .prologue + .line 901 + :try_start_0 + invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; + + move-result-object v0 + + .line 902 + invoke-virtual {v0, p0}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-object v0 + + .line 905 + :goto_0 + return-object v0 + + .line 903 + :catch_0 + move-exception v0 + + .line 905 + const-string v0, "" + + goto :goto_0 +.end method + +.method public static getInstance()Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + .locals 1 + + .prologue + .line 515 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + return-object v0 +.end method + +.method static getPref(Ljava/lang/String;)Ljava/lang/String; + .locals 3 + + .prologue + const-string v2, "" + + .line 317 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + const-string v1, "" + + invoke-interface {v0, p0, v1}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-object v0 + + .line 320 + :goto_0 + return-object v0 + + .line 318 + :catch_0 + move-exception v0 + + .line 320 + const-string v0, "" + + move-object v0, v2 + + goto :goto_0 +.end method + +.method private declared-synchronized handleSessionStatus(Z)V + .locals 6 + + .prologue + .line 824 + monitor-enter p0 + + :try_start_0 + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v0 + + .line 825 + if-eqz p1, :cond_3 + + .line 826 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + .catchall {:try_start_0 .. :try_end_0} :catchall_0 + + if-eqz v2, :cond_1 + + .line 848 + :cond_0 + :goto_0 + monitor-exit p0 + + return-void + + .line 829 + :cond_1 + :try_start_1 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + if-nez v2, :cond_2 + + .line 830 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->createNewSession()V + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0 + .catchall {:try_start_1 .. :try_end_1} :catchall_0 + + goto :goto_0 + + .line 845 + :catch_0 + move-exception v0 + + .line 846 + :try_start_2 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "static sync 3" + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + :try_end_2 + .catchall {:try_start_2 .. :try_end_2} :catchall_0 + + goto :goto_0 + + .line 824 + :catchall_0 + move-exception v0 + + monitor-exit p0 + + throw v0 + + .line 832 + :cond_2 + :try_start_3 + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + iget-wide v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + sub-long/2addr v0, v4 + + add-long/2addr v0, v2 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + .line 833 + const/4 v0, 0x1 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + goto :goto_0 + + .line 836 + :cond_3 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + if-nez v2, :cond_4 + + .line 837 + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + sub-long/2addr v0, v2 + + iget v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->idleTimeout:I + + int-to-long v2, v2 + + cmp-long v0, v0, v2 + + if-lez v0, :cond_0 + + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + if-eqz v0, :cond_0 + + .line 839 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->endSession()V + + goto :goto_0 + + .line 841 + :cond_4 + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 842 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 843 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + invoke-virtual {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileLocation;->stopLocation()V + :try_end_3 + .catch Ljava/lang/Exception; {:try_start_3 .. :try_end_3} :catch_0 + .catchall {:try_start_3 .. :try_end_3} :catchall_0 + + goto :goto_0 +.end method + +.method static hasPref(Ljava/lang/String;)Z + .locals 1 + + .prologue + .line 325 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0, p0}, Landroid/content/SharedPreferences;->contains(Ljava/lang/String;)Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v0 + + .line 328 + :goto_0 + return v0 + + .line 326 + :catch_0 + move-exception v0 + + .line 328 + const/4 v0, 0x0 + + goto :goto_0 +.end method + +.method private initialize(Landroid/app/Activity;Ljava/lang/String;I)V + .locals 7 + + .prologue + const/4 v6, 0x0 + + const/4 v5, 0x0 + + const-string v4, "" + + const-string v3, "null" + + .line 455 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + .line 456 + iput-object p2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + .line 457 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + if-eqz v0, :cond_0 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_1 + + .line 458 + :cond_0 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + .line 459 + :cond_1 + sget-object v0, Landroid/os/Build$VERSION;->RELEASE:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + .line 460 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + if-eqz v0, :cond_2 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_3 + + .line 461 + :cond_2 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + .line 465 + :cond_3 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + const-string v1, "phone" + + invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Landroid/telephony/TelephonyManager; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 469 + :goto_0 + invoke-virtual {p1}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver; + + move-result-object v1 + + const-string v2, "android_id" + + invoke-static {v1, v2}, Landroid/provider/Settings$System;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v1 + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + .line 471 + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + if-eqz v1, :cond_4 + + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + const-string v2, "" + + invoke-virtual {v1, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :cond_5 + + .line 472 + :cond_4 + const-string v1, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + .line 474 + :cond_5 + invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + .line 475 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + if-eqz v0, :cond_6 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_7 + + .line 476 + :cond_6 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + .line 478 + :cond_7 + sget-object v0, Landroid/os/Build;->MODEL:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + .line 479 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + if-eqz v0, :cond_8 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_9 + + .line 480 + :cond_8 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + .line 482 + :cond_9 + sget-object v0, Landroid/os/Build;->DEVICE:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + .line 483 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + if-eqz v0, :cond_a + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_b + + .line 485 + :cond_a + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + .line 488 + :cond_b + iput p3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + .line 490 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + .line 491 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + .line 492 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + .line 493 + iput-boolean v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + .line 494 + iput-object v6, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationCriteria:Landroid/location/Criteria; + + .line 495 + iput-boolean v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + .line 496 + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/util/Locale;->getCountry()Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + .line 497 + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/util/Locale;->getLanguage()Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + .line 499 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + invoke-static {v0}, Landroid/webkit/CookieSyncManager;->createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager; + + .line 501 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$2; + + invoke-direct {v0, p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$2;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationHandler:Landroid/os/Handler; + + .line 506 + new-instance v0, Ljava/lang/StringBuilder; + + invoke-direct {v0}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {p1}, Landroid/app/Activity;->getPackageName()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, ".MCConfig" + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {p1, v0, v5}, Landroid/app/Activity;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + .line 509 + iget v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + iget v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->idleTimeout:I + + invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I + + move-result v0 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + .line 510 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionPollingTimer:Ljava/util/Timer; + + new-instance v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$SessionPolling; + + invoke-direct {v1, p0, v6}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$SessionPolling;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1;)V + + const-wide/16 v2, 0x0 + + iget v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + int-to-long v4, v4 + + invoke-virtual/range {v0 .. v5}, Ljava/util/Timer;->scheduleAtFixedRate(Ljava/util/TimerTask;JJ)V + + .line 512 + return-void + + .line 467 + :catch_0 + move-exception v0 + + move-object v0, v6 + + goto/16 :goto_0 +.end method + +.method public static final logEvent(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V + .locals 5 + + .prologue + const-string v0, "UTF-8" + + const-string v2, "DoodleMobile" + + .line 672 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + + if-nez v0, :cond_1 + + .line 673 + const-string v0, "mobclix-controller" + + const-string v1, "logEvent failed - You must initialize DoodleMobileAnaylise by calling DoodleMobileAnaylise.onCreate(this)." + + invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I + + .line 717 + :cond_0 + :goto_0 + return-void + + .line 678 + :cond_1 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + if-lt p0, v0, :cond_0 + + .line 682 + new-instance v0, Ljava/lang/StringBuilder; + + invoke-direct {v0}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, ", " + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, ": " + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + .line 684 + sparse-switch p0, :sswitch_data_0 + + .line 702 + :goto_1 + :try_start_0 + new-instance v0, Lorg/json/JSONObject; + + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v1, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const/4 v2, 0x4 + + new-array v2, v2, [Ljava/lang/String; + + const/4 v3, 0x0 + + const-string v4, "ts" + + aput-object v4, v2, v3 + + const/4 v3, 0x1 + + const-string v4, "ll" + + aput-object v4, v2, v3 + + const/4 v3, 0x2 + + const-string v4, "g" + + aput-object v4, v2, v3 + + const/4 v3, 0x3 + + const-string v4, "id" + + aput-object v4, v2, v3 + + invoke-direct {v0, v1, v2}, Lorg/json/JSONObject;->(Lorg/json/JSONObject;[Ljava/lang/String;)V + + .line 704 + const-string v1, "el" + + invoke-static {p0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 705 + const-string v1, "ep" + + const-string v2, "UTF-8" + + invoke-static {p1, v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 706 + const-string v1, "en" + + const-string v2, "UTF-8" + + invoke-static {p2, v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 707 + const-string v1, "ed" + + const-string v2, "UTF-8" + + invoke-static {p3, v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 708 + const-string v1, "et" + + invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/Thread;->getId()J + + move-result-wide v2 + + invoke-static {v2, v3}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 709 + const-string v1, "es" + + if-eqz p4, :cond_2 + + const-string v2, "1" + + :goto_2 + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 710 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + .line 711 + invoke-virtual {v1}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + .line 712 + new-instance v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$LogEvent; + + invoke-virtual {v1}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + invoke-direct {v2, v1, v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$LogEvent;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Lorg/json/JSONObject;)V + + .line 713 + new-instance v0, Ljava/lang/Thread; + + invoke-direct {v0, v2}, Ljava/lang/Thread;->(Ljava/lang/Runnable;)V + + .line 714 + invoke-virtual {v0}, Ljava/lang/Thread;->start()V + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + goto/16 :goto_0 + + .line 715 + :catch_0 + move-exception v0 + + goto/16 :goto_0 + + .line 686 + :sswitch_0 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 689 + :sswitch_1 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 692 + :sswitch_2 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 695 + :sswitch_3 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 698 + :sswitch_4 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 709 + :cond_2 + :try_start_1 + const-string v2, "0" + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0 + + goto :goto_2 + + .line 684 + :sswitch_data_0 + .sparse-switch + 0x1 -> :sswitch_0 + 0x2 -> :sswitch_1 + 0x4 -> :sswitch_2 + 0x8 -> :sswitch_3 + 0x10 -> :sswitch_4 + .end sparse-switch +.end method + +.method public static final declared-synchronized onCreate(Landroid/app/Activity;)V + .locals 7 + + .prologue + const/4 v5, 0x0 + + const-string v0, "ssc" + + const-string v0, "DoodleMobileAnaylise" + + const-string v0, "doodle_mobile_appid" + + .line 520 + const-class v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + monitor-enter v0 + + if-eqz p0, :cond_0 + + .line 521 + :try_start_0 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-virtual {p0}, Landroid/app/Activity;->getApplicationContext()Landroid/content/Context; + + move-result-object v2 + + iput-object v2, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_8 + .catchall {:try_start_0 .. :try_end_0} :catchall_0 + + .line 525 + :cond_0 + :goto_0 + :try_start_1 + sget-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + :try_end_1 + .catchall {:try_start_1 .. :try_end_1} :catchall_0 + + if-nez v1, :cond_4 + + .line 528 + :try_start_2 + invoke-virtual {p0}, Landroid/app/Activity;->getPackageName()Ljava/lang/String; + + move-result-object v1 + + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + :try_end_2 + .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_2} :catch_7 + .catchall {:try_start_2 .. :try_end_2} :catchall_0 + + .line 531 + :goto_1 + const/4 v1, 0x0 + + :try_start_3 + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + :try_end_3 + .catchall {:try_start_3 .. :try_end_3} :catchall_0 + + .line 533 + :try_start_4 + invoke-virtual {p0}, Landroid/app/Activity;->getPackageManager()Landroid/content/pm/PackageManager; + + move-result-object v1 + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + + const/16 v3, 0x80 + + invoke-virtual {v1, v2, v3}, Landroid/content/pm/PackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo; + + move-result-object v1 + + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + :try_end_4 + .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_4 .. :try_end_4} :catch_0 + .catchall {:try_start_4 .. :try_end_4} :catchall_0 + + .line 541 + :goto_2 + :try_start_5 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v2, "doodle_mobile_appid" + + invoke-virtual {v1, v2}, Landroid/os/Bundle;->getString(Ljava/lang/String;)Ljava/lang/String; + :try_end_5 + .catch Ljava/lang/Exception; {:try_start_5 .. :try_end_5} :catch_1 + .catchall {:try_start_5 .. :try_end_5} :catchall_0 + + move-result-object v1 + + .line 543 + :try_start_6 + const-string v2, "ssc" + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + const-string v4, "applicationID 1 is " + + invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v3 + + invoke-static {v2, v3}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + :try_end_6 + .catch Ljava/lang/Exception; {:try_start_6 .. :try_end_6} :catch_6 + .catchall {:try_start_6 .. :try_end_6} :catchall_0 + + .line 554 + :goto_3 + if-nez v1, :cond_1 + + .line 556 + :try_start_7 + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v2, v2, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v3, "doodle_mobile_appid" + + invoke-virtual {v2, v3}, Landroid/os/Bundle;->getInt(Ljava/lang/String;)I + + move-result v2 + + invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + :try_end_7 + .catch Ljava/lang/Exception; {:try_start_7 .. :try_end_7} :catch_3 + .catchall {:try_start_7 .. :try_end_7} :catchall_0 + + move-result-object v1 + + .line 562 + :cond_1 + :goto_4 + if-nez v1, :cond_2 + + .line 565 + :try_start_8 + new-instance v1, Landroid/content/res/Resources$NotFoundException; + + const-string v2, "doodle_mobile_appid not found in the Android Manifest xml." + + invoke-direct {v1, v2}, Landroid/content/res/Resources$NotFoundException;->(Ljava/lang/String;)V + + throw v1 + :try_end_8 + .catchall {:try_start_8 .. :try_end_8} :catchall_0 + + .line 520 + :catchall_0 + move-exception v1 + + monitor-exit v0 + + throw v1 + + .line 535 + :catch_0 + move-exception v1 + + .line 536 + :try_start_9 + const-string v1, "mobclix-controller" + + const-string v2, "Application Key Started" + + invoke-static {v1, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I + + goto :goto_2 + + .line 544 + :catch_1 + move-exception v1 + + move-object v2, v5 + + .line 545 + :goto_5 + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V + :try_end_9 + .catchall {:try_start_9 .. :try_end_9} :catchall_0 + + .line 547 + :try_start_a + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v3, "doodle_mobile_appid" + + invoke-virtual {v1, v3}, Landroid/os/Bundle;->getInt(Ljava/lang/String;)I + + move-result v1 + + invoke-static {v1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + :try_end_a + .catch Ljava/lang/Exception; {:try_start_a .. :try_end_a} :catch_2 + .catchall {:try_start_a .. :try_end_a} :catchall_0 + + move-result-object v1 + + goto :goto_3 + + .line 549 + :catch_2 + move-exception v1 + + .line 550 + :try_start_b + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V + + move-object v1, v2 + + goto :goto_3 + + .line 558 + :catch_3 + move-exception v2 + + .line 559 + invoke-virtual {v2}, Ljava/lang/Exception;->printStackTrace()V + + goto :goto_4 + + .line 568 + :cond_2 + const-string v2, "DoodleMobileAnaylise" + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + const-string v4, "applicationId = " + + invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-static {v2, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + :try_end_b + .catchall {:try_start_b .. :try_end_b} :catchall_0 + + .line 571 + :try_start_c + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v2, "doodle_mobile_loglevel" + + invoke-virtual {v1, v2}, Landroid/os/Bundle;->getString(Ljava/lang/String;)Ljava/lang/String; + :try_end_c + .catch Ljava/lang/Exception; {:try_start_c .. :try_end_c} :catch_4 + .catchall {:try_start_c .. :try_end_c} :catchall_0 + + move-result-object v1 + + .line 577 + :goto_6 + if-eqz v1, :cond_3 + + .line 578 + :try_start_d + const-string v2, "debug" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + :try_end_d + .catchall {:try_start_d .. :try_end_d} :catchall_0 + + move-result v2 + + if-eqz v2, :cond_5 + + .line 593 + :cond_3 + :goto_7 + :try_start_e + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-virtual {v1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateSession()V + + .line 595 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/util/Locale;->getCountry()Ljava/lang/String; + + move-result-object v2 + + iput-object v2, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + .line 596 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/util/Locale;->getLanguage()Ljava/lang/String; + + move-result-object v2 + + iput-object v2, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + .line 597 + const-string v1, "ssc" + + new-instance v2, Ljava/lang/StringBuilder; + + invoke-direct {v2}, Ljava/lang/StringBuilder;->()V + + const-string v3, "doolemobilea 585 " + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + sget-object v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v3, v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + sget-object v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v3, v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v2 + + invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 599 + sget v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_READY:I + + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + .line 601 + const/4 v1, 0x1 + + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + :try_end_e + .catch Ljava/lang/Exception; {:try_start_e .. :try_end_e} :catch_5 + .catchall {:try_start_e .. :try_end_e} :catchall_0 + + .line 606 + :cond_4 + :goto_8 + :try_start_f + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + const/4 v2, 0x1 + + invoke-direct {v1, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->handleSessionStatus(Z)V + :try_end_f + .catchall {:try_start_f .. :try_end_f} :catchall_0 + + .line 607 + monitor-exit v0 + + return-void + + .line 573 + :catch_4 + move-exception v1 + + move-object v1, v5 + + goto :goto_6 + + .line 580 + :cond_5 + :try_start_10 + const-string v2, "info" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v2 + + if-nez v2, :cond_3 + + .line 582 + const-string v2, "warn" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v2 + + if-nez v2, :cond_3 + + .line 584 + const-string v2, "error" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v2 + + if-nez v2, :cond_3 + + .line 586 + const-string v2, "fatal" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v1 + + if-eqz v1, :cond_3 + + goto :goto_7 + + .line 602 + :catch_5 + move-exception v1 + + .line 603 + const-string v1, "DoodleMobileAnaylise" + + const-string v2, "has exception" + + invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + :try_end_10 + .catchall {:try_start_10 .. :try_end_10} :catchall_0 + + goto :goto_8 + + .line 544 + :catch_6 + move-exception v2 + + move-object v6, v2 + + move-object v2, v1 + + move-object v1, v6 + + goto/16 :goto_5 + + .line 529 + :catch_7 + move-exception v1 + + goto/16 :goto_1 + + .line 522 + :catch_8 + move-exception v1 + + goto/16 :goto_0 +.end method + +.method public static final declared-synchronized onStop(Landroid/app/Activity;)V + .locals 3 + + .prologue + .line 610 + const-class v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + monitor-enter v0 + + :try_start_0 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + const/4 v2, 0x0 + + invoke-direct {v1, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->handleSessionStatus(Z)V + :try_end_0 + .catchall {:try_start_0 .. :try_end_0} :catchall_0 + + .line 612 + monitor-exit v0 + + return-void + + .line 610 + :catchall_0 + move-exception v1 + + monitor-exit v0 + + throw v1 +.end method + +.method static removePref(Ljava/lang/String;)V + .locals 1 + + .prologue + .line 355 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v0 + + .line 356 + invoke-interface {v0, p0}, Landroid/content/SharedPreferences$Editor;->remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; + + .line 357 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 360 + :goto_0 + return-void + + .line 358 + :catch_0 + move-exception v0 + + goto :goto_0 +.end method + +.method private static sha1(Ljava/lang/String;)Ljava/lang/String; + .locals 4 + + .prologue + const/4 v3, 0x0 + + .line 372 + const/16 v0, 0x28 + + new-array v0, v0, [B + + .line 375 + :try_start_0 + const-string v0, "SHA-1" + + invoke-static {v0}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest; + :try_end_0 + .catch Ljava/security/NoSuchAlgorithmException; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-object v0 + + .line 380 + invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B + + move-result-object v1 + + invoke-virtual {p0}, Ljava/lang/String;->length()I + + move-result v2 + + invoke-virtual {v0, v1, v3, v2}, Ljava/security/MessageDigest;->update([BII)V + + .line 381 + invoke-virtual {v0}, Ljava/security/MessageDigest;->digest()[B + + move-result-object v0 + + .line 382 + new-instance v1, Ljava/lang/StringBuffer; + + invoke-direct {v1}, Ljava/lang/StringBuffer;->()V + + move v2, v3 + + .line 383 + :goto_0 + array-length v3, v0 + + if-ge v2, v3, :cond_0 + + .line 384 + aget-byte v3, v0, v2 + + and-int/lit16 v3, v3, 0xff + + invoke-static {v3}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String; + + move-result-object v3 + + invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 383 + add-int/lit8 v2, v2, 0x1 + + goto :goto_0 + + .line 376 + :catch_0 + move-exception v0 + + .line 377 + new-instance v1, Ljava/lang/RuntimeException; + + invoke-direct {v1, v0}, Ljava/lang/RuntimeException;->(Ljava/lang/Throwable;)V + + throw v1 + + .line 386 + :cond_0 + invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String; + + move-result-object v0 + + return-object v0 +.end method + +.method public static final sync()V + .locals 3 + + .prologue + const v2, 0x186a1 + + .line 792 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + + if-nez v0, :cond_0 + + .line 793 + const-string v0, "mobclix-controller" + + const-string v1, "sync failed - You must initialize DoodleMobileAnaylise by calling DoodleMobileAnaylise.onCreate(this)." + + invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I + + .line 801 + :goto_0 + return-void + + .line 798 + :cond_0 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "static sync " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 799 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mSyncHandler:Landroid/os/Handler; + + invoke-virtual {v0, v2}, Landroid/os/Handler;->removeMessages(I)V + + .line 800 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mSyncHandler:Landroid/os/Handler; + + invoke-virtual {v0, v2}, Landroid/os/Handler;->sendEmptyMessage(I)Z + + goto :goto_0 +.end method + +.method static syncCookiesToCookieManager(Lorg/apache/http/client/CookieStore;Ljava/lang/String;)V + .locals 7 + + .prologue + const-string v0, "DoodleMobileAnaylise" + + .line 911 + :try_start_0 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "syncCookieManager " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 912 + invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; + + move-result-object v0 + + .line 913 + invoke-interface {p0}, Lorg/apache/http/client/CookieStore;->getCookies()Ljava/util/List; + + move-result-object v1 + + .line 914 + new-instance v2, Ljava/lang/StringBuffer; + + invoke-direct {v2}, Ljava/lang/StringBuffer;->()V + + .line 915 + invoke-interface {v1}, Ljava/util/List;->isEmpty()Z + + move-result v3 + + if-nez v3, :cond_4 + + .line 916 + const/4 v3, 0x0 + + :goto_0 + invoke-interface {v1}, Ljava/util/List;->size()I + + move-result v4 + + if-ge v3, v4, :cond_3 + + .line 917 + invoke-interface {v1, v3}, Ljava/util/List;->get(I)Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Lorg/apache/http/cookie/Cookie; + + .line 918 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getName()Ljava/lang/String; + + move-result-object v4 + + invoke-virtual {v2, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + const-string v5, "=" + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getValue()Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 921 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getExpiryDate()Ljava/util/Date; + + move-result-object v4 + + if-eqz v4, :cond_0 + + .line 922 + new-instance v4, Ljava/text/SimpleDateFormat; + + const-string v5, "E, dd-MMM-yyyy HH:mm:ss" + + invoke-direct {v4, v5}, Ljava/text/SimpleDateFormat;->(Ljava/lang/String;)V + + .line 924 + const-string v5, "; expires=" + + invoke-virtual {v2, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v5 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getExpiryDate()Ljava/util/Date; + + move-result-object v6 + + invoke-virtual {v4, v6}, Ljava/text/SimpleDateFormat;->format(Ljava/util/Date;)Ljava/lang/String; + + move-result-object v4 + + invoke-virtual {v5, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + const-string v5, " GMT" + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 928 + :cond_0 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getPath()Ljava/lang/String; + + move-result-object v4 + + if-eqz v4, :cond_1 + + .line 929 + const-string v4, "; path=" + + invoke-virtual {v2, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getPath()Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 931 + :cond_1 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getDomain()Ljava/lang/String; + + move-result-object v4 + + if-eqz v4, :cond_2 + + .line 932 + const-string v4, "; domain=" + + invoke-virtual {v2, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getDomain()Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 935 + :cond_2 + invoke-virtual {v2}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String; + + move-result-object v4 + + .line 937 + invoke-virtual {v0, p1, v4}, Landroid/webkit/CookieManager;->setCookie(Ljava/lang/String;Ljava/lang/String;)V + + .line 916 + add-int/lit8 v3, v3, 0x1 + + goto :goto_0 + + .line 939 + :cond_3 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "before syn " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 940 + invoke-static {}, Landroid/webkit/CookieSyncManager;->getInstance()Landroid/webkit/CookieSyncManager; + + move-result-object v0 + + invoke-virtual {v0}, Landroid/webkit/CookieSyncManager;->sync()V + + .line 941 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "after syn " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 943 + invoke-static {}, Landroid/webkit/CookieSyncManager;->getInstance()Landroid/webkit/CookieSyncManager; + + move-result-object v0 + + invoke-virtual {v0}, Landroid/webkit/CookieSyncManager;->stopSync()V + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 947 + :cond_4 + :goto_1 + return-void + + .line 945 + :catch_0 + move-exception v0 + + goto :goto_1 +.end method + +.method private updateConnectivity()V + .locals 4 + + .prologue + const-string v3, "null" + + .line 425 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + const-string v1, "connectivity" + + invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Landroid/net/ConnectivityManager; + + .line 427 + const-string v1, "u" + + .line 429 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + if-eqz v2, :cond_4 + + .line 430 + invoke-virtual {v0}, Landroid/net/ConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo; + + move-result-object v0 + + .line 432 + if-eqz v0, :cond_4 + + .line 433 + invoke-virtual {v0}, Landroid/net/NetworkInfo;->getTypeName()Ljava/lang/String; + + move-result-object v0 + + .line 436 + :goto_0 + const-string v1, "WI_FI" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-nez v1, :cond_0 + + const-string v1, "WIFI" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :cond_2 + + .line 437 + :cond_0 + const-string v0, "wifi" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + .line 446 + :goto_1 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + if-nez v0, :cond_1 + + .line 447 + const-string v0, "null" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + .line 451 + :cond_1 + :goto_2 + return-void + + .line 438 + :cond_2 + const-string v1, "MOBILE" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_3 + + .line 439 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + const-string v1, "phone" + + invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Landroid/telephony/TelephonyManager; + + .line 441 + invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getNetworkType()I + + move-result v0 + + .line 442 + invoke-static {v0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + goto :goto_1 + + .line 448 + :catch_0 + move-exception v0 + + .line 449 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + goto :goto_2 + + .line 444 + :cond_3 + :try_start_1 + const-string v0, "null" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0 + + goto :goto_1 + + :cond_4 + move-object v0, v1 + + goto :goto_0 +.end method + +.method private updateLocation()V + .locals 3 + + .prologue + .line 409 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + new-instance v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1; + + invoke-direct {v2, p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)V + + invoke-virtual {v0, v1, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileLocation;->getLocation(Landroid/content/Context;Lcom/doodlemobile/gamecenter/DoodleMobileLocation$LocationResult;)Z + + .line 421 + return-void +.end method + + +# virtual methods +.method protected finalize()V + .locals 0 + + .prologue + .line 896 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->endSession()V + + .line 897 + return-void +.end method + +.method getAnalyticsServer()Ljava/lang/String; + .locals 1 + + .prologue + .line 289 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->analyticsServer:Ljava/lang/String; + + return-object v0 +.end method + +.method getAndroidId()Ljava/lang/String; + .locals 1 + + .prologue + .line 218 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getAndroidVersion()Ljava/lang/String; + .locals 1 + + .prologue + .line 205 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getApplicationId()Ljava/lang/String; + .locals 1 + + .prologue + .line 201 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getApplicationVersion()Ljava/lang/String; + .locals 1 + + .prologue + .line 209 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getConfigServer()Ljava/lang/String; + .locals 1 + + .prologue + .line 285 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->configServer:Ljava/lang/String; + + return-object v0 +.end method + +.method getConnectionType()Ljava/lang/String; + .locals 1 + + .prologue + .line 231 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getContext()Landroid/content/Context; + .locals 1 + + .prologue + .line 197 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + return-object v0 +.end method + +.method getDeviceHardwareModel()Ljava/lang/String; + .locals 1 + + .prologue + .line 226 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getDeviceId()Ljava/lang/String; + .locals 1 + + .prologue + .line 214 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getDeviceModel()Ljava/lang/String; + .locals 1 + + .prologue + .line 222 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getGPS()Ljava/lang/String; + .locals 3 + + .prologue + const-string v2, "null" + + .line 243 + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLatitude()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "null" + + invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-nez v0, :cond_0 + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLongitude()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "null" + + invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_1 + + .line 244 + :cond_0 + const-string v0, "null" + + move-object v0, v2 + + .line 245 + :goto_0 + return-object v0 + + :cond_1 + new-instance v0, Ljava/lang/StringBuilder; + + invoke-direct {v0}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLatitude()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, "," + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLongitude()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + goto :goto_0 +.end method + +.method getLanguage()Ljava/lang/String; + .locals 1 + + .prologue + .line 249 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getLatitude()Ljava/lang/String; + .locals 1 + + .prologue + .line 235 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getLocale()Ljava/lang/String; + .locals 1 + + .prologue + .line 253 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getLogLevel()I + .locals 1 + + .prologue + .line 261 + iget v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + return v0 +.end method + +.method getLongitude()Ljava/lang/String; + .locals 1 + + .prologue + .line 239 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getMobclixVersion()Ljava/lang/String; + .locals 1 + + .prologue + .line 257 + const-string v0, "2.3" + + return-object v0 +.end method + +.method getRefreshTime(Ljava/lang/String;)J + .locals 2 + + .prologue + .line 278 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->refreshTime:Ljava/util/HashMap; + + invoke-virtual {v0, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/lang/Long; + + invoke-virtual {p0}, Ljava/lang/Long;->longValue()J + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-wide v0 + + .line 281 + :goto_0 + return-wide v0 + + .line 279 + :catch_0 + move-exception v0 + + .line 281 + const-wide/16 v0, -0x1 + + goto :goto_0 +.end method + +.method getUserAgent()Ljava/lang/String; + .locals 3 + + .prologue + const-string v2, "UserAgent" + + .line 297 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_0 + + const-string v0, "UserAgent" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + + move-result v0 + + if-eqz v0, :cond_0 + + .line 298 + const-string v0, "UserAgent" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + .line 299 + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + return-object v0 +.end method + +.method isEnabled(Ljava/lang/String;)Z + .locals 1 + + .prologue + .line 270 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->enabled:Ljava/util/HashMap; + + invoke-virtual {v0, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/lang/Boolean; + + invoke-virtual {p0}, Ljava/lang/Boolean;->booleanValue()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v0 + + .line 273 + :goto_0 + return v0 + + .line 271 + :catch_0 + move-exception v0 + + .line 273 + const/4 v0, 0x1 + + goto :goto_0 +.end method + +.method isRemoteConfigSet()I + .locals 1 + + .prologue + .line 293 + iget v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->remoteConfigSet:I + + return v0 +.end method + +.method isTopTask()Z + .locals 1 + + .prologue + .line 265 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + return v0 +.end method + +.method setContext(Landroid/app/Activity;)V + .locals 0 + + .prologue + .line 193 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + .line 194 + return-void +.end method + +.method setUserAgent(Ljava/lang/String;)V + .locals 1 + + .prologue + .line 303 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + .line 304 + const-string v0, "UserAgent" + + invoke-static {v0, p1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->addPref(Ljava/lang/String;Ljava/lang/String;)V + + .line 305 + return-void +.end method + +.method updateSession()V + .locals 4 + + .prologue + const-string v0, "ll" + + .line 391 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateConnectivity()V + + .line 393 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + if-eqz v0, :cond_0 + + .line 394 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationHandler:Landroid/os/Handler; + + const/4 v1, 0x0 + + invoke-virtual {v0, v1}, Landroid/os/Handler;->sendEmptyMessage(I)Z + + .line 397 + :cond_0 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "ts" + + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v2 + + invoke-virtual {v0, v1, v2, v3}, Lorg/json/JSONObject;->put(Ljava/lang/String;J)Lorg/json/JSONObject; + + .line 398 + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getGPS()Ljava/lang/String; + + move-result-object v0 + + .line 399 + const-string v1, "null" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-nez v1, :cond_1 + + .line 400 + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v2, "ll" + + invoke-virtual {v1, v2, v0}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 403 + :goto_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "g" + + iget-object v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 406 + :goto_1 + return-void + + .line 402 + :cond_1 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "ll" + + invoke-virtual {v0, v1}, Lorg/json/JSONObject;->remove(Ljava/lang/String;)Ljava/lang/Object; + :try_end_0 + .catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_0 + + goto :goto_0 + + .line 404 + :catch_0 + move-exception v0 + + goto :goto_1 +.end method diff --git a/samples/Smali/ModernAsyncTask.smali b/samples/Smali/ModernAsyncTask.smali new file mode 100644 index 00000000..6803b9d6 --- /dev/null +++ b/samples/Smali/ModernAsyncTask.smali @@ -0,0 +1,700 @@ +.class abstract Landroid/support/v4/content/ModernAsyncTask; +.super Ljava/lang/Object; +.source "ModernAsyncTask.java" + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Landroid/support/v4/content/ModernAsyncTask$4;, + Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult;, + Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable;, + Landroid/support/v4/content/ModernAsyncTask$InternalHandler;, + Landroid/support/v4/content/ModernAsyncTask$Status; + } +.end annotation + +.annotation system Ldalvik/annotation/Signature; + value = { + "", + "Ljava/lang/Object;" + } +.end annotation + + +# static fields +.field private static final CORE_POOL_SIZE:I = 0x5 + +.field private static final KEEP_ALIVE:I = 0x1 + +.field private static final LOG_TAG:Ljava/lang/String; = "AsyncTask" + +.field private static final MAXIMUM_POOL_SIZE:I = 0x80 + +.field private static final MESSAGE_POST_PROGRESS:I = 0x2 + +.field private static final MESSAGE_POST_RESULT:I = 0x1 + +.field public static final THREAD_POOL_EXECUTOR:Ljava/util/concurrent/Executor; + +.field private static volatile sDefaultExecutor:Ljava/util/concurrent/Executor; + +.field private static final sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + +.field private static final sPoolWorkQueue:Ljava/util/concurrent/BlockingQueue; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/concurrent/BlockingQueue", + "<", + "Ljava/lang/Runnable;", + ">;" + } + .end annotation +.end field + +.field private static final sThreadFactory:Ljava/util/concurrent/ThreadFactory; + + +# instance fields +.field private final mFuture:Ljava/util/concurrent/FutureTask; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/concurrent/FutureTask", + ";" + } + .end annotation +.end field + +.field private volatile mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + +.field private final mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + +.field private final mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + .annotation system Ldalvik/annotation/Signature; + value = { + "Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable", + ";" + } + .end annotation +.end field + + +# direct methods +.method static constructor ()V + .registers 8 + + .prologue + .line 54 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$1; + + invoke-direct {v0}, Landroid/support/v4/content/ModernAsyncTask$1;->()V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sThreadFactory:Ljava/util/concurrent/ThreadFactory; + + .line 62 + new-instance v0, Ljava/util/concurrent/LinkedBlockingQueue; + + const/16 v1, 0xa + + invoke-direct {v0, v1}, Ljava/util/concurrent/LinkedBlockingQueue;->(I)V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sPoolWorkQueue:Ljava/util/concurrent/BlockingQueue; + + .line 68 + new-instance v0, Ljava/util/concurrent/ThreadPoolExecutor; + + const/4 v1, 0x5 + + const/16 v2, 0x80 + + const-wide/16 v3, 0x1 + + sget-object v5, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit; + + sget-object v6, Landroid/support/v4/content/ModernAsyncTask;->sPoolWorkQueue:Ljava/util/concurrent/BlockingQueue; + + sget-object v7, Landroid/support/v4/content/ModernAsyncTask;->sThreadFactory:Ljava/util/concurrent/ThreadFactory; + + invoke-direct/range {v0 .. v7}, Ljava/util/concurrent/ThreadPoolExecutor;->(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->THREAD_POOL_EXECUTOR:Ljava/util/concurrent/Executor; + + .line 75 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + const/4 v1, 0x0 + + invoke-direct {v0, v1}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->(Landroid/support/v4/content/ModernAsyncTask$1;)V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + .line 77 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->THREAD_POOL_EXECUTOR:Ljava/util/concurrent/Executor; + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + return-void +.end method + +.method public constructor ()V + .registers 3 + + .prologue + .line 117 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 81 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$Status;->PENDING:Landroid/support/v4/content/ModernAsyncTask$Status; + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + .line 83 + new-instance v0, Ljava/util/concurrent/atomic/AtomicBoolean; + + invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicBoolean;->()V + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + + .line 118 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$2; + + invoke-direct {v0, p0}, Landroid/support/v4/content/ModernAsyncTask$2;->(Landroid/support/v4/content/ModernAsyncTask;)V + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + + .line 127 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$3; + + iget-object v1, p0, Landroid/support/v4/content/ModernAsyncTask;->mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + + invoke-direct {v0, p0, v1}, Landroid/support/v4/content/ModernAsyncTask$3;->(Landroid/support/v4/content/ModernAsyncTask;Ljava/util/concurrent/Callable;)V + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + .line 147 + return-void +.end method + +.method static synthetic access$200(Landroid/support/v4/content/ModernAsyncTask;)Ljava/util/concurrent/atomic/AtomicBoolean; + .registers 2 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + + .prologue + .line 47 + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + + return-object v0 +.end method + +.method static synthetic access$300(Landroid/support/v4/content/ModernAsyncTask;Ljava/lang/Object;)Ljava/lang/Object; + .registers 3 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + .param p1, "x1" # Ljava/lang/Object; + + .prologue + .line 47 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->postResult(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method static synthetic access$400(Landroid/support/v4/content/ModernAsyncTask;Ljava/lang/Object;)V + .registers 2 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + .param p1, "x1" # Ljava/lang/Object; + + .prologue + .line 47 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->postResultIfNotInvoked(Ljava/lang/Object;)V + + return-void +.end method + +.method static synthetic access$500(Landroid/support/v4/content/ModernAsyncTask;Ljava/lang/Object;)V + .registers 2 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + .param p1, "x1" # Ljava/lang/Object; + + .prologue + .line 47 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->finish(Ljava/lang/Object;)V + + return-void +.end method + +.method public static execute(Ljava/lang/Runnable;)V + .registers 2 + .param p0, "runnable" # Ljava/lang/Runnable; + + .prologue + .line 433 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + invoke-interface {v0, p0}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V + + .line 434 + return-void +.end method + +.method private finish(Ljava/lang/Object;)V + .registers 3 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 458 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->isCancelled()Z + + move-result v0 + + if-eqz v0, :cond_e + + .line 459 + invoke-virtual {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->onCancelled(Ljava/lang/Object;)V + + .line 463 + :goto_9 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$Status;->FINISHED:Landroid/support/v4/content/ModernAsyncTask$Status; + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + .line 464 + return-void + + .line 461 + :cond_e + invoke-virtual {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->onPostExecute(Ljava/lang/Object;)V + + goto :goto_9 +.end method + +.method public static init()V + .registers 1 + + .prologue + .line 106 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + invoke-virtual {v0}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->getLooper()Landroid/os/Looper; + + .line 107 + return-void +.end method + +.method private postResult(Ljava/lang/Object;)Ljava/lang/Object; + .registers 8 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)TResult;" + } + .end annotation + + .prologue + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + const/4 v5, 0x1 + + .line 157 + sget-object v1, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + new-instance v2, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult; + + new-array v3, v5, [Ljava/lang/Object; + + const/4 v4, 0x0 + + aput-object p1, v3, v4 + + invoke-direct {v2, p0, v3}, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult;->(Landroid/support/v4/content/ModernAsyncTask;[Ljava/lang/Object;)V + + invoke-virtual {v1, v5, v2}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message; + + move-result-object v0 + + .line 159 + .local v0, "message":Landroid/os/Message; + invoke-virtual {v0}, Landroid/os/Message;->sendToTarget()V + + .line 160 + return-object p1 +.end method + +.method private postResultIfNotInvoked(Ljava/lang/Object;)V + .registers 4 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 150 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + iget-object v1, p0, Landroid/support/v4/content/ModernAsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + + invoke-virtual {v1}, Ljava/util/concurrent/atomic/AtomicBoolean;->get()Z + + move-result v0 + + .line 151 + .local v0, "wasTaskInvoked":Z + if-nez v0, :cond_b + + .line 152 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->postResult(Ljava/lang/Object;)Ljava/lang/Object; + + .line 154 + :cond_b + return-void +.end method + +.method public static setDefaultExecutor(Ljava/util/concurrent/Executor;)V + .registers 1 + .param p0, "exec" # Ljava/util/concurrent/Executor; + + .prologue + .line 111 + sput-object p0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + .line 112 + return-void +.end method + + +# virtual methods +.method public final cancel(Z)Z + .registers 3 + .param p1, "mayInterruptIfRunning" # Z + + .prologue + .line 306 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0, p1}, Ljava/util/concurrent/FutureTask;->cancel(Z)Z + + move-result v0 + + return v0 +.end method + +.method protected varargs abstract doInBackground([Ljava/lang/Object;)Ljava/lang/Object; + .annotation system Ldalvik/annotation/Signature; + value = { + "([TParams;)TResult;" + } + .end annotation +.end method + +.method public final varargs execute([Ljava/lang/Object;)Landroid/support/v4/content/ModernAsyncTask; + .registers 3 + .annotation system Ldalvik/annotation/Signature; + value = { + "([TParams;)", + "Landroid/support/v4/content/ModernAsyncTask", + ";" + } + .end annotation + + .prologue + .line 371 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "params":[Ljava/lang/Object;, "[TParams;" + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + invoke-virtual {p0, v0, p1}, Landroid/support/v4/content/ModernAsyncTask;->executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/support/v4/content/ModernAsyncTask; + + move-result-object v0 + + return-object v0 +.end method + +.method public final varargs executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/support/v4/content/ModernAsyncTask; + .registers 5 + .param p1, "exec" # Ljava/util/concurrent/Executor; + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/util/concurrent/Executor;", + "[TParams;)", + "Landroid/support/v4/content/ModernAsyncTask", + ";" + } + .end annotation + + .prologue + .line 406 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p2, "params":[Ljava/lang/Object;, "[TParams;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + sget-object v1, Landroid/support/v4/content/ModernAsyncTask$Status;->PENDING:Landroid/support/v4/content/ModernAsyncTask$Status; + + if-eq v0, v1, :cond_13 + + .line 407 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$4;->$SwitchMap$android$support$v4$content$ModernAsyncTask$Status:[I + + iget-object v1, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + invoke-virtual {v1}, Landroid/support/v4/content/ModernAsyncTask$Status;->ordinal()I + + move-result v1 + + aget v0, v0, v1 + + packed-switch v0, :pswitch_data_34 + + .line 418 + :cond_13 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$Status;->RUNNING:Landroid/support/v4/content/ModernAsyncTask$Status; + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + .line 420 + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->onPreExecute()V + + .line 422 + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + + iput-object p2, v0, Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable;->mParams:[Ljava/lang/Object; + + .line 423 + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-interface {p1, v0}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V + + .line 425 + return-object p0 + + .line 409 + :pswitch_24 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot execute task: the task is already running." + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 412 + :pswitch_2c + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot execute task: the task has already been executed (a task can be executed only once)" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 407 + :pswitch_data_34 + .packed-switch 0x1 + :pswitch_24 + :pswitch_2c + .end packed-switch +.end method + +.method public final get()Ljava/lang/Object; + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "()TResult;" + } + .end annotation + + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/lang/InterruptedException;, + Ljava/util/concurrent/ExecutionException; + } + .end annotation + + .prologue + .line 321 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0}, Ljava/util/concurrent/FutureTask;->get()Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public final get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object; + .registers 5 + .param p1, "timeout" # J + .param p3, "unit" # Ljava/util/concurrent/TimeUnit; + .annotation system Ldalvik/annotation/Signature; + value = { + "(J", + "Ljava/util/concurrent/TimeUnit;", + ")TResult;" + } + .end annotation + + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/lang/InterruptedException;, + Ljava/util/concurrent/ExecutionException;, + Ljava/util/concurrent/TimeoutException; + } + .end annotation + + .prologue + .line 341 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0, p1, p2, p3}, Ljava/util/concurrent/FutureTask;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public final getStatus()Landroid/support/v4/content/ModernAsyncTask$Status; + .registers 2 + + .prologue + .line 169 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + return-object v0 +.end method + +.method public final isCancelled()Z + .registers 2 + + .prologue + .line 273 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0}, Ljava/util/concurrent/FutureTask;->isCancelled()Z + + move-result v0 + + return v0 +.end method + +.method protected onCancelled()V + .registers 1 + + .prologue + .line 260 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + return-void +.end method + +.method protected onCancelled(Ljava/lang/Object;)V + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 244 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->onCancelled()V + + .line 245 + return-void +.end method + +.method protected onPostExecute(Ljava/lang/Object;)V + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 213 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + return-void +.end method + +.method protected onPreExecute()V + .registers 1 + + .prologue + .line 197 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + return-void +.end method + +.method protected varargs onProgressUpdate([Ljava/lang/Object;)V + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "([TProgress;)V" + } + .end annotation + + .prologue + .line 226 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "values":[Ljava/lang/Object;, "[TProgress;" + return-void +.end method + +.method protected final varargs publishProgress([Ljava/lang/Object;)V + .registers 5 + .annotation system Ldalvik/annotation/Signature; + value = { + "([TProgress;)V" + } + .end annotation + + .prologue + .line 451 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "values":[Ljava/lang/Object;, "[TProgress;" + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->isCancelled()Z + + move-result v0 + + if-nez v0, :cond_15 + + .line 452 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + const/4 v1, 0x2 + + new-instance v2, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult; + + invoke-direct {v2, p0, p1}, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult;->(Landroid/support/v4/content/ModernAsyncTask;[Ljava/lang/Object;)V + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message; + + move-result-object v0 + + invoke-virtual {v0}, Landroid/os/Message;->sendToTarget()V + + .line 455 + :cond_15 + return-void +.end method diff --git a/samples/Smali/PenguinSprite.smali b/samples/Smali/PenguinSprite.smali new file mode 100644 index 00000000..a02c7913 --- /dev/null +++ b/samples/Smali/PenguinSprite.smali @@ -0,0 +1,781 @@ +.class public Lcom/tdq/game/shootbubble/sprite/PenguinSprite; +.super Lcom/tdq/game/shootbubble/sprite/Sprite; +.source "PenguinSprite.java" + + +# static fields +.field public static final LOST_SEQUENCE:[[I + +.field public static final STATE_FIRE:I = 0x2 + +.field public static final STATE_GAME_LOST:I = 0x5 + +.field public static final STATE_GAME_WON:I = 0x4 + +.field public static final STATE_TURN_LEFT:I = 0x0 + +.field public static final STATE_TURN_RIGHT:I = 0x1 + +.field public static final STATE_VOID:I = 0x3 + +.field public static final WON_SEQUENCE:[[I + + +# instance fields +.field private count:I + +.field private currentPenguin:I + +.field private finalState:I + +.field private nextPosition:I + +.field private rand:Ljava/util/Random; + +.field private spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + +# direct methods +.method static constructor ()V + .locals 8 + + .prologue + const/4 v7, 0x4 + + const/4 v6, 0x3 + + const/4 v5, 0x1 + + const/4 v4, 0x0 + + const/4 v3, 0x2 + + .line 67 + const/16 v0, 0x8 + + new-array v0, v0, [[I + + new-array v1, v3, [I + + fill-array-data v1, :array_0 + + aput-object v1, v0, v4 + + new-array v1, v3, [I + + fill-array-data v1, :array_1 + + aput-object v1, v0, v5 + + new-array v1, v3, [I + + fill-array-data v1, :array_2 + + aput-object v1, v0, v3 + + new-array v1, v3, [I + + fill-array-data v1, :array_3 + + aput-object v1, v0, v6 + + new-array v1, v3, [I + + fill-array-data v1, :array_4 + + aput-object v1, v0, v7 + + const/4 v1, 0x5 + + new-array v2, v3, [I + + fill-array-data v2, :array_5 + + aput-object v2, v0, v1 + + const/4 v1, 0x6 + + new-array v2, v3, [I + + fill-array-data v2, :array_6 + + aput-object v2, v0, v1 + + const/4 v1, 0x7 + + new-array v2, v3, [I + + fill-array-data v2, :array_7 + + aput-object v2, v0, v1 + + sput-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->LOST_SEQUENCE:[[I + + .line 69 + const/16 v0, 0x8 + + new-array v0, v0, [[I + + new-array v1, v3, [I + + fill-array-data v1, :array_8 + + aput-object v1, v0, v4 + + new-array v1, v3, [I + + fill-array-data v1, :array_9 + + aput-object v1, v0, v5 + + new-array v1, v3, [I + + fill-array-data v1, :array_a + + aput-object v1, v0, v3 + + new-array v1, v3, [I + + fill-array-data v1, :array_b + + aput-object v1, v0, v6 + + new-array v1, v3, [I + + fill-array-data v1, :array_c + + aput-object v1, v0, v7 + + const/4 v1, 0x5 + + new-array v2, v3, [I + + fill-array-data v2, :array_d + + aput-object v2, v0, v1 + + const/4 v1, 0x6 + + new-array v2, v3, [I + + fill-array-data v2, :array_e + + aput-object v2, v0, v1 + + const/4 v1, 0x7 + + new-array v2, v3, [I + + fill-array-data v2, :array_f + + aput-object v2, v0, v1 + + sput-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->WON_SEQUENCE:[[I + + return-void + + .line 67 + :array_0 + .array-data 4 + 0x1 + 0x0 + .end array-data + + :array_1 + .array-data 4 + 0x2 + 0x8 + .end array-data + + :array_2 + .array-data 4 + 0x3 + 0x9 + .end array-data + + :array_3 + .array-data 4 + 0x4 + 0xa + .end array-data + + :array_4 + .array-data 4 + 0x5 + 0xb + .end array-data + + :array_5 + .array-data 4 + 0x6 + 0xc + .end array-data + + :array_6 + .array-data 4 + 0x7 + 0xd + .end array-data + + :array_7 + .array-data 4 + 0x5 + 0xe + .end array-data + + .line 69 + :array_8 + .array-data 4 + 0x1 + 0x0 + .end array-data + + :array_9 + .array-data 4 + 0x2 + 0x7 + .end array-data + + :array_a + .array-data 4 + 0x3 + 0x6 + .end array-data + + :array_b + .array-data 4 + 0x4 + 0xf + .end array-data + + :array_c + .array-data 4 + 0x5 + 0x10 + .end array-data + + :array_d + .array-data 4 + 0x6 + 0x11 + .end array-data + + :array_e + .array-data 4 + 0x7 + 0x12 + .end array-data + + :array_f + .array-data 4 + 0x4 + 0x13 + .end array-data +.end method + +.method public constructor (Lcom/tdq/game/shootbubble/sprite/BmpWrap;Ljava/util/Random;)V + .locals 6 + .param p1, "sprites" # Lcom/tdq/game/shootbubble/sprite/BmpWrap; + .param p2, "rand" # Ljava/util/Random; + + .prologue + const/4 v5, 0x0 + + .line 85 + new-instance v0, Landroid/graphics/Rect; + + const/16 v1, 0x169 + + const/16 v2, 0x1b4 + + const/16 v3, 0x1a0 + + const/16 v4, 0x1df + + invoke-direct {v0, v1, v2, v3, v4}, Landroid/graphics/Rect;->(IIII)V + + invoke-direct {p0, v0}, Lcom/tdq/game/shootbubble/sprite/Sprite;->(Landroid/graphics/Rect;)V + + .line 87 + iput-object p1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + .line 88 + iput-object p2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->rand:Ljava/util/Random; + + .line 90 + iput v5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 92 + const/4 v0, 0x3 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + .line 93 + iput v5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + .line 94 + return-void +.end method + +.method public constructor (Lcom/tdq/game/shootbubble/sprite/BmpWrap;Ljava/util/Random;IIII)V + .locals 5 + .param p1, "sprites" # Lcom/tdq/game/shootbubble/sprite/BmpWrap; + .param p2, "rand" # Ljava/util/Random; + .param p3, "currentPenguin" # I + .param p4, "count" # I + .param p5, "finalState" # I + .param p6, "nextPosition" # I + + .prologue + .line 100 + new-instance v0, Landroid/graphics/Rect; + + const/16 v1, 0x169 + + const/16 v2, 0x1b4 + + const/16 v3, 0x1a0 + + const/16 v4, 0x1df + + invoke-direct {v0, v1, v2, v3, v4}, Landroid/graphics/Rect;->(IIII)V + + invoke-direct {p0, v0}, Lcom/tdq/game/shootbubble/sprite/Sprite;->(Landroid/graphics/Rect;)V + + .line 102 + iput-object p1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + .line 103 + iput-object p2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->rand:Ljava/util/Random; + + .line 104 + iput p3, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 105 + iput p4, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 106 + iput p5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + .line 107 + iput p6, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + .line 108 + return-void +.end method + + +# virtual methods +.method public getTypeId()I + .locals 1 + + .prologue + .line 124 + sget v0, Lcom/tdq/game/shootbubble/sprite/Sprite;->TYPE_PENGUIN:I + + return v0 +.end method + +.method public paint(Landroid/graphics/Canvas;DII)V + .locals 9 + .param p1, "c" # Landroid/graphics/Canvas; + .param p2, "scale" # D + .param p4, "dx" # I + .param p5, "dy" # I + + .prologue + .line 183 + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSpriteArea()Landroid/graphics/Rect; + + move-result-object v3 + + .line 184 + .local v3, "r":Landroid/graphics/Rect; + iget-object v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + const/16 v1, 0x168 + + iget v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + rem-int/lit8 v2, v2, 0x4 + + mul-int/lit8 v2, v2, 0x39 + + sub-int/2addr v1, v2 + + const/16 v2, 0x1b3 + + iget v4, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + div-int/lit8 v4, v4, 0x4 + + mul-int/lit8 v4, v4, 0x2d + + sub-int/2addr v2, v4 + + move-object v4, p1 + + move-wide v5, p2 + + move v7, p4 + + move v8, p5 + + invoke-static/range {v0 .. v8}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->drawImageClipped(Lcom/tdq/game/shootbubble/sprite/BmpWrap;IILandroid/graphics/Rect;Landroid/graphics/Canvas;DII)V + + .line 188 + return-void +.end method + +.method public saveState(Landroid/os/Bundle;Ljava/util/Vector;)V + .locals 5 + .param p1, "map" # Landroid/os/Bundle; + .param p2, "saved_sprites" # Ljava/util/Vector; + + .prologue + const/4 v4, 0x1 + + const/4 v3, 0x0 + + .line 111 + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v0 + + const/4 v1, -0x1 + + if-eq v0, v1, :cond_0 + + .line 120 + :goto_0 + return-void + + .line 114 + :cond_0 + invoke-super {p0, p1, p2}, Lcom/tdq/game/shootbubble/sprite/Sprite;->saveState(Landroid/os/Bundle;Ljava/util/Vector;)V + + .line 115 + const-string v0, "%d-currentPenguin" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + .line 117 + const-string v0, "%d-count" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + .line 118 + const-string v0, "%d-finalState" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + .line 119 + const-string v0, "%d-nextPosition" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + goto :goto_0 +.end method + +.method public updateState(I)V + .locals 6 + .param p1, "state" # I + + .prologue + const/4 v5, 0x7 + + const/4 v1, 0x3 + + const/4 v4, 0x4 + + const/4 v3, 0x1 + + const/4 v2, 0x0 + + .line 129 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + if-eq v0, v1, :cond_2 + + .line 130 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + add-int/lit8 v0, v0, 0x1 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 132 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + rem-int/lit8 v0, v0, 0x6 + + if-nez v0, :cond_0 + + .line 133 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + const/4 v1, 0x5 + + if-ne v0, v1, :cond_1 + + .line 134 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->LOST_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v3 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 135 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->LOST_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v2 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + .line 179 + :cond_0 + :goto_0 + return-void + + .line 136 + :cond_1 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + if-ne v0, v4, :cond_0 + + .line 137 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->WON_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v3 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 138 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->WON_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v2 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + goto :goto_0 + + .line 142 + :cond_2 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + add-int/lit8 v0, v0, 0x1 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 144 + packed-switch p1, :pswitch_data_0 + + .line 170 + :cond_3 + :goto_1 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + const/16 v1, 0x64 + + if-le v0, v1, :cond_5 + + .line 171 + iput v5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_0 + + .line 146 + :pswitch_0 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 147 + iput v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 150 + :pswitch_1 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 151 + const/4 v0, 0x2 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 154 + :pswitch_2 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 155 + iput v3, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 158 + :pswitch_3 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + if-lt v0, v4, :cond_4 + + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + if-le v0, v5, :cond_3 + + .line 159 + :cond_4 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 164 + :pswitch_4 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 165 + iput p1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + .line 166 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_0 + + .line 172 + :cond_5 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + rem-int/lit8 v0, v0, 0xf + + if-nez v0, :cond_0 + + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + const/16 v1, 0x19 + + if-le v0, v1, :cond_0 + + .line 173 + iget-object v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->rand:Ljava/util/Random; + + invoke-virtual {v0}, Ljava/util/Random;->nextInt()I + + move-result v0 + + rem-int/lit8 v0, v0, 0x3 + + add-int/lit8 v0, v0, 0x4 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 174 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + if-ge v0, v4, :cond_0 + + .line 175 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_0 + + .line 144 + nop + + :pswitch_data_0 + .packed-switch 0x0 + :pswitch_0 + :pswitch_1 + :pswitch_2 + :pswitch_3 + :pswitch_4 + :pswitch_4 + .end packed-switch +.end method diff --git a/samples/Smali/Subject.smali b/samples/Smali/Subject.smali new file mode 100644 index 00000000..4140157c --- /dev/null +++ b/samples/Smali/Subject.smali @@ -0,0 +1,1179 @@ +.class public final Lorg/apache/harmony/javax/security/auth/Subject; +.super Ljava/lang/Object; +.source "Subject.java" + +# interfaces +.implements Ljava/io/Serializable; + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + } +.end annotation + + +# static fields +.field private static final _AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _READ_ONLY:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _SUBJECT:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final serialVersionUID:J = -0x734dcd6cffcc0598L + + +# instance fields +.field private final principals:Ljava/util/Set; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/Set", + "<", + "Ljava/security/Principal;", + ">;" + } + .end annotation +.end field + +.field private transient privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + .annotation system Ldalvik/annotation/Signature; + value = { + "Lorg/apache/harmony/javax/security/auth/Subject$SecureSet", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation +.end field + +.field private transient publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + .annotation system Ldalvik/annotation/Signature; + value = { + "Lorg/apache/harmony/javax/security/auth/Subject$SecureSet", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation +.end field + +.field private readOnly:Z + + +# direct methods +.method static constructor ()V + .locals 2 + + .prologue + .line 59 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + const-string v1, "doAs" + + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 61 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 62 + const-string v1, "doAsPrivileged" + + .line 61 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 64 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 65 + const-string v1, "getSubject" + + .line 64 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_SUBJECT:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 67 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 68 + const-string v1, "modifyPrincipals" + + .line 67 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 70 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 71 + const-string v1, "modifyPrivateCredentials" + + .line 70 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 73 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 74 + const-string v1, "modifyPublicCredentials" + + .line 73 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 76 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 77 + const-string v1, "setReadOnly" + + .line 76 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_READ_ONLY:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 55 + return-void +.end method + +.method public constructor ()V + .locals 2 + + .prologue + .line 94 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 95 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + .line 96 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 97 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 99 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + .line 100 + return-void +.end method + +.method public constructor (ZLjava/util/Set;Ljava/util/Set;Ljava/util/Set;)V + .locals 2 + .param p1, "readOnly" # Z + .annotation system Ldalvik/annotation/Signature; + value = { + "(Z", + "Ljava/util/Set", + "<+", + "Ljava/security/Principal;", + ">;", + "Ljava/util/Set", + "<*>;", + "Ljava/util/Set", + "<*>;)V" + } + .end annotation + + .prologue + .line 119 + .local p2, "subjPrincipals":Ljava/util/Set;, "Ljava/util/Set<+Ljava/security/Principal;>;" + .local p3, "pubCredentials":Ljava/util/Set;, "Ljava/util/Set<*>;" + .local p4, "privCredentials":Ljava/util/Set;, "Ljava/util/Set<*>;" + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 122 + if-eqz p2, :cond_0 + + if-eqz p3, :cond_0 + + if-nez p4, :cond_1 + + .line 123 + :cond_0 + new-instance v0, Ljava/lang/NullPointerException; + + invoke-direct {v0}, Ljava/lang/NullPointerException;->()V + + throw v0 + + .line 126 + :cond_1 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1, p2}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;Ljava/util/Collection;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + .line 127 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1, p3}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;Ljava/util/Collection;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 128 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1, p4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;Ljava/util/Collection;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 130 + iput-boolean p1, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + .line 131 + return-void +.end method + +.method static synthetic access$0(Lorg/apache/harmony/javax/security/auth/Subject;)V + .locals 0 + + .prologue + .line 514 + invoke-direct {p0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkState()V + + return-void +.end method + +.method static synthetic access$1(Ljava/security/Permission;)V + .locals 0 + + .prologue + .line 506 + invoke-static {p0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + return-void +.end method + +.method static synthetic access$2()Lorg/apache/harmony/javax/security/auth/AuthPermission; + .locals 1 + + .prologue + .line 67 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + return-object v0 +.end method + +.method static synthetic access$3()Lorg/apache/harmony/javax/security/auth/AuthPermission; + .locals 1 + + .prologue + .line 70 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + return-object v0 +.end method + +.method static synthetic access$4(Lorg/apache/harmony/javax/security/auth/Subject;)Ljava/util/Set; + .locals 1 + + .prologue + .line 79 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + return-object v0 +.end method + +.method static synthetic access$5()Lorg/apache/harmony/javax/security/auth/AuthPermission; + .locals 1 + + .prologue + .line 73 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + return-object v0 +.end method + +.method private static checkPermission(Ljava/security/Permission;)V + .locals 1 + .param p0, "p" # Ljava/security/Permission; + + .prologue + .line 507 + invoke-static {}, Ljava/lang/System;->getSecurityManager()Ljava/lang/SecurityManager; + + move-result-object v0 + + .line 508 + .local v0, "sm":Ljava/lang/SecurityManager; + if-eqz v0, :cond_0 + + .line 509 + invoke-virtual {v0, p0}, Ljava/lang/SecurityManager;->checkPermission(Ljava/security/Permission;)V + + .line 511 + :cond_0 + return-void +.end method + +.method private checkState()V + .locals 2 + + .prologue + .line 515 + iget-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + if-eqz v0, :cond_0 + + .line 516 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "auth.0A" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 518 + :cond_0 + return-void +.end method + +.method public static doAs(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;)Ljava/lang/Object; + .locals 1 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedAction; + + .prologue + .line 146 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 148 + invoke-static {}, Ljava/security/AccessController;->getContext()Ljava/security/AccessControlContext; + + move-result-object v0 + + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public static doAs(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; + .locals 1 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedExceptionAction; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/security/PrivilegedActionException; + } + .end annotation + + .prologue + .line 223 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 225 + invoke-static {}, Ljava/security/AccessController;->getContext()Ljava/security/AccessControlContext; + + move-result-object v0 + + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public static doAsPrivileged(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 2 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedAction; + .param p2, "context" # Ljava/security/AccessControlContext; + + .prologue + .line 170 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 172 + if-nez p2, :cond_0 + + .line 173 + new-instance v0, Ljava/security/AccessControlContext; + + .line 174 + const/4 v1, 0x0 + + new-array v1, v1, [Ljava/security/ProtectionDomain; + + invoke-direct {v0, v1}, Ljava/security/AccessControlContext;->([Ljava/security/ProtectionDomain;)V + + .line 173 + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + .line 176 + :goto_0 + return-object v0 + + :cond_0 + invoke-static {p0, p1, p2}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + goto :goto_0 +.end method + +.method public static doAsPrivileged(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 2 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedExceptionAction; + .param p2, "context" # Ljava/security/AccessControlContext; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/security/PrivilegedActionException; + } + .end annotation + + .prologue + .line 250 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 252 + if-nez p2, :cond_0 + + .line 254 + new-instance v0, Ljava/security/AccessControlContext; + + const/4 v1, 0x0 + + new-array v1, v1, [Ljava/security/ProtectionDomain; + + invoke-direct {v0, v1}, Ljava/security/AccessControlContext;->([Ljava/security/ProtectionDomain;)V + + .line 253 + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + .line 256 + :goto_0 + return-object v0 + + :cond_0 + invoke-static {p0, p1, p2}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + goto :goto_0 +.end method + +.method private static doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 4 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedAction; + .param p2, "context" # Ljava/security/AccessControlContext; + + .prologue + .line 187 + if-nez p0, :cond_0 + + .line 190 + const/4 v0, 0x0 + + .line 195 + .local v0, "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + :goto_0 + new-instance v1, Lorg/apache/harmony/javax/security/auth/Subject$1; + + invoke-direct {v1, p2, v0}, Lorg/apache/harmony/javax/security/auth/Subject$1;->(Ljava/security/AccessControlContext;Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;)V + + .line 202 + .local v1, "dccAction":Ljava/security/PrivilegedAction; + invoke-static {v1}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object; + + move-result-object v2 + + check-cast v2, Ljava/security/AccessControlContext; + + .line 204 + .local v2, "newContext":Ljava/security/AccessControlContext; + invoke-static {p1, v2}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v3 + + return-object v3 + + .line 192 + .end local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + .end local v1 # "dccAction":Ljava/security/PrivilegedAction; + .end local v2 # "newContext":Ljava/security/AccessControlContext; + :cond_0 + new-instance v0, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + invoke-direct {v0, p0}, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;->(Lorg/apache/harmony/javax/security/auth/Subject;)V + + .restart local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + goto :goto_0 +.end method + +.method private static doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 4 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedExceptionAction; + .param p2, "context" # Ljava/security/AccessControlContext; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/security/PrivilegedActionException; + } + .end annotation + + .prologue + .line 268 + if-nez p0, :cond_0 + + .line 271 + const/4 v0, 0x0 + + .line 276 + .local v0, "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + :goto_0 + new-instance v1, Lorg/apache/harmony/javax/security/auth/Subject$2; + + invoke-direct {v1, p2, v0}, Lorg/apache/harmony/javax/security/auth/Subject$2;->(Ljava/security/AccessControlContext;Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;)V + + .line 282 + .local v1, "dccAction":Ljava/security/PrivilegedAction;, "Ljava/security/PrivilegedAction;" + invoke-static {v1}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object; + + move-result-object v2 + + check-cast v2, Ljava/security/AccessControlContext; + + .line 284 + .local v2, "newContext":Ljava/security/AccessControlContext; + invoke-static {p1, v2}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v3 + + return-object v3 + + .line 273 + .end local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + .end local v1 # "dccAction":Ljava/security/PrivilegedAction;, "Ljava/security/PrivilegedAction;" + .end local v2 # "newContext":Ljava/security/AccessControlContext; + :cond_0 + new-instance v0, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + invoke-direct {v0, p0}, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;->(Lorg/apache/harmony/javax/security/auth/Subject;)V + + .restart local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + goto :goto_0 +.end method + +.method public static getSubject(Ljava/security/AccessControlContext;)Lorg/apache/harmony/javax/security/auth/Subject; + .locals 4 + .param p0, "context" # Ljava/security/AccessControlContext; + + .prologue + .line 488 + sget-object v2, Lorg/apache/harmony/javax/security/auth/Subject;->_SUBJECT:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v2}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 489 + if-nez p0, :cond_0 + + .line 490 + new-instance v2, Ljava/lang/NullPointerException; + + const-string v3, "auth.09" + + invoke-direct {v2, v3}, Ljava/lang/NullPointerException;->(Ljava/lang/String;)V + + throw v2 + + .line 492 + :cond_0 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$3; + + invoke-direct {v0, p0}, Lorg/apache/harmony/javax/security/auth/Subject$3;->(Ljava/security/AccessControlContext;)V + + .line 497 + .local v0, "action":Ljava/security/PrivilegedAction;, "Ljava/security/PrivilegedAction;" + invoke-static {v0}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object; + + move-result-object v1 + + check-cast v1, Ljava/security/DomainCombiner; + + .line 499 + .local v1, "combiner":Ljava/security/DomainCombiner; + if-eqz v1, :cond_1 + + instance-of v2, v1, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + if-nez v2, :cond_2 + + .line 500 + :cond_1 + const/4 v2, 0x0 + + .line 502 + .end local v1 # "combiner":Ljava/security/DomainCombiner; + :goto_0 + return-object v2 + + .restart local v1 # "combiner":Ljava/security/DomainCombiner; + :cond_2 + check-cast v1, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + .end local v1 # "combiner":Ljava/security/DomainCombiner; + invoke-virtual {v1}, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;->getSubject()Lorg/apache/harmony/javax/security/auth/Subject; + + move-result-object v2 + + goto :goto_0 +.end method + +.method private readObject(Ljava/io/ObjectInputStream;)V + .locals 2 + .param p1, "in" # Ljava/io/ObjectInputStream; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException;, + Ljava/lang/ClassNotFoundException; + } + .end annotation + + .prologue + .line 467 + invoke-virtual {p1}, Ljava/io/ObjectInputStream;->defaultReadObject()V + + .line 469 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 470 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 471 + return-void +.end method + +.method private writeObject(Ljava/io/ObjectOutputStream;)V + .locals 0 + .param p1, "out" # Ljava/io/ObjectOutputStream; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 474 + invoke-virtual {p1}, Ljava/io/ObjectOutputStream;->defaultWriteObject()V + + .line 475 + return-void +.end method + + +# virtual methods +.method public equals(Ljava/lang/Object;)Z + .locals 5 + .param p1, "obj" # Ljava/lang/Object; + + .prologue + const/4 v1, 0x1 + + const/4 v2, 0x0 + + .line 301 + if-ne p0, p1, :cond_1 + + .line 316 + :cond_0 + :goto_0 + return v1 + + .line 305 + :cond_1 + if-eqz p1, :cond_2 + + invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + move-result-object v3 + + invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + move-result-object v4 + + if-eq v3, v4, :cond_3 + + :cond_2 + move v1, v2 + + .line 306 + goto :goto_0 + + :cond_3 + move-object v0, p1 + + .line 309 + check-cast v0, Lorg/apache/harmony/javax/security/auth/Subject; + + .line 311 + .local v0, "that":Lorg/apache/harmony/javax/security/auth/Subject; + iget-object v3, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + iget-object v4, v0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + invoke-interface {v3, v4}, Ljava/util/Set;->equals(Ljava/lang/Object;)Z + + move-result v3 + + if-eqz v3, :cond_4 + + .line 312 + iget-object v3, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + iget-object v4, v0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v3, v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->equals(Ljava/lang/Object;)Z + + move-result v3 + + if-eqz v3, :cond_4 + + .line 313 + iget-object v3, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + iget-object v4, v0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v3, v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->equals(Ljava/lang/Object;)Z + + move-result v3 + + if-nez v3, :cond_0 + + :cond_4 + move v1, v2 + + .line 316 + goto :goto_0 +.end method + +.method public getPrincipals()Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/Set", + "<", + "Ljava/security/Principal;", + ">;" + } + .end annotation + + .prologue + .line 325 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + return-object v0 +.end method + +.method public getPrincipals(Ljava/lang/Class;)Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/lang/Class", + ";)", + "Ljava/util/Set", + ";" + } + .end annotation + + .prologue + .line 341 + .local p1, "c":Ljava/lang/Class;, "Ljava/lang/Class;" + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + check-cast v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v0, p1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->get(Ljava/lang/Class;)Ljava/util/Set; + + move-result-object v0 + + return-object v0 +.end method + +.method public getPrivateCredentials()Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/Set", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation + + .prologue + .line 350 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + return-object v0 +.end method + +.method public getPrivateCredentials(Ljava/lang/Class;)Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/lang/Class", + ";)", + "Ljava/util/Set", + ";" + } + .end annotation + + .prologue + .line 365 + .local p1, "c":Ljava/lang/Class;, "Ljava/lang/Class;" + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v0, p1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->get(Ljava/lang/Class;)Ljava/util/Set; + + move-result-object v0 + + return-object v0 +.end method + +.method public getPublicCredentials()Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/Set", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation + + .prologue + .line 374 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + return-object v0 +.end method + +.method public getPublicCredentials(Ljava/lang/Class;)Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/lang/Class", + ";)", + "Ljava/util/Set", + ";" + } + .end annotation + + .prologue + .line 390 + .local p1, "c":Ljava/lang/Class;, "Ljava/lang/Class;" + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v0, p1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->get(Ljava/lang/Class;)Ljava/util/Set; + + move-result-object v0 + + return-object v0 +.end method + +.method public hashCode()I + .locals 2 + + .prologue + .line 400 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + invoke-interface {v0}, Ljava/util/Set;->hashCode()I + + move-result v0 + + iget-object v1, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->hashCode()I + + move-result v1 + + add-int/2addr v0, v1 + + .line 401 + iget-object v1, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->hashCode()I + + move-result v1 + + .line 400 + add-int/2addr v0, v1 + + return v0 +.end method + +.method public isReadOnly()Z + .locals 1 + + .prologue + .line 422 + iget-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + return v0 +.end method + +.method public setReadOnly()V + .locals 1 + + .prologue + .line 411 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_READ_ONLY:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 413 + const/4 v0, 0x1 + + iput-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + .line 414 + return-void +.end method + +.method public toString()Ljava/lang/String; + .locals 6 + + .prologue + const/16 v5, 0xa + + .line 433 + new-instance v0, Ljava/lang/StringBuilder; + + const-string v4, "Subject:\n" + + invoke-direct {v0, v4}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V + + .line 435 + .local v0, "buf":Ljava/lang/StringBuilder; + iget-object v4, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + invoke-interface {v4}, Ljava/util/Set;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 436 + .local v2, "it":Ljava/util/Iterator;, "Ljava/util/Iterator<*>;" + :goto_0 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + + move-result v4 + + if-nez v4, :cond_0 + + .line 442 + iget-object v4, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 443 + :goto_1 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + + move-result v4 + + if-nez v4, :cond_1 + + .line 449 + invoke-virtual {v0}, Ljava/lang/StringBuilder;->length()I + + move-result v4 + + add-int/lit8 v3, v4, -0x1 + + .line 450 + .local v3, "offset":I + iget-object v4, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 452 + :goto_2 + :try_start_0 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + :try_end_0 + .catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v4 + + if-nez v4, :cond_2 + + .line 461 + :goto_3 + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v4 + + return-object v4 + + .line 437 + .end local v3 # "offset":I + :cond_0 + const-string v4, "\tPrincipal: " + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + .line 438 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v4 + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + .line 439 + invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + goto :goto_0 + + .line 444 + :cond_1 + const-string v4, "\tPublic Credential: " + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + .line 445 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v4 + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + .line 446 + invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + goto :goto_1 + + .line 453 + .restart local v3 # "offset":I + :cond_2 + :try_start_1 + const-string v4, "\tPrivate Credential: " + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + .line 454 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v4 + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + .line 455 + const/16 v4, 0xa + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + :try_end_1 + .catch Ljava/lang/SecurityException; {:try_start_1 .. :try_end_1} :catch_0 + + goto :goto_2 + + .line 457 + :catch_0 + move-exception v1 + + .line 458 + .local v1, "e":Ljava/lang/SecurityException; + invoke-virtual {v0}, Ljava/lang/StringBuilder;->length()I + + move-result v4 + + invoke-virtual {v0, v3, v4}, Ljava/lang/StringBuilder;->delete(II)Ljava/lang/StringBuilder; + + .line 459 + const-string v4, "\tPrivate Credentials: no accessible information\n" + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + goto :goto_3 +.end method diff --git a/samples/Smali/ViewDragHelper.smali b/samples/Smali/ViewDragHelper.smali new file mode 100644 index 00000000..18760567 --- /dev/null +++ b/samples/Smali/ViewDragHelper.smali @@ -0,0 +1,4382 @@ +.class public Landroid/support/v4/widget/ViewDragHelper; +.super Ljava/lang/Object; +.source "ViewDragHelper.java" + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Landroid/support/v4/widget/ViewDragHelper$Callback; + } +.end annotation + + +# static fields +.field private static final BASE_SETTLE_DURATION:I = 0x100 + +.field public static final DIRECTION_ALL:I = 0x3 + +.field public static final DIRECTION_HORIZONTAL:I = 0x1 + +.field public static final DIRECTION_VERTICAL:I = 0x2 + +.field public static final EDGE_ALL:I = 0xf + +.field public static final EDGE_BOTTOM:I = 0x8 + +.field public static final EDGE_LEFT:I = 0x1 + +.field public static final EDGE_RIGHT:I = 0x2 + +.field private static final EDGE_SIZE:I = 0x14 + +.field public static final EDGE_TOP:I = 0x4 + +.field public static final INVALID_POINTER:I = -0x1 + +.field private static final MAX_SETTLE_DURATION:I = 0x258 + +.field public static final STATE_DRAGGING:I = 0x1 + +.field public static final STATE_IDLE:I = 0x0 + +.field public static final STATE_SETTLING:I = 0x2 + +.field private static final TAG:Ljava/lang/String; = "ViewDragHelper" + +.field private static final sInterpolator:Landroid/view/animation/Interpolator; + + +# instance fields +.field private mActivePointerId:I + +.field private final mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + +.field private mCapturedView:Landroid/view/View; + +.field private mDragState:I + +.field private mEdgeDragsInProgress:[I + +.field private mEdgeDragsLocked:[I + +.field private mEdgeSize:I + +.field private mInitialEdgesTouched:[I + +.field private mInitialMotionX:[F + +.field private mInitialMotionY:[F + +.field private mLastMotionX:[F + +.field private mLastMotionY:[F + +.field private mMaxVelocity:F + +.field private mMinVelocity:F + +.field private final mParentView:Landroid/view/ViewGroup; + +.field private mPointersDown:I + +.field private mReleaseInProgress:Z + +.field private mScroller:Landroid/support/v4/widget/ScrollerCompat; + +.field private final mSetIdleRunnable:Ljava/lang/Runnable; + +.field private mTouchSlop:I + +.field private mTrackingEdges:I + +.field private mVelocityTracker:Landroid/view/VelocityTracker; + + +# direct methods +.method static constructor ()V + .registers 1 + + .prologue + .line 326 + new-instance v0, Landroid/support/v4/widget/ViewDragHelper$1; + + invoke-direct {v0}, Landroid/support/v4/widget/ViewDragHelper$1;->()V + + sput-object v0, Landroid/support/v4/widget/ViewDragHelper;->sInterpolator:Landroid/view/animation/Interpolator; + + return-void +.end method + +.method private constructor (Landroid/content/Context;Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)V + .registers 8 + .param p1, "context" # Landroid/content/Context; + .param p2, "forParent" # Landroid/view/ViewGroup; + .param p3, "cb" # Landroid/support/v4/widget/ViewDragHelper$Callback; + + .prologue + .line 373 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 115 + const/4 v2, -0x1 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 333 + new-instance v2, Landroid/support/v4/widget/ViewDragHelper$2; + + invoke-direct {v2, p0}, Landroid/support/v4/widget/ViewDragHelper$2;->(Landroid/support/v4/widget/ViewDragHelper;)V + + iput-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mSetIdleRunnable:Ljava/lang/Runnable; + + .line 374 + if-nez p2, :cond_17 + + .line 375 + new-instance v2, Ljava/lang/IllegalArgumentException; + + const-string v3, "Parent view may not be null" + + invoke-direct {v2, v3}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v2 + + .line 377 + :cond_17 + if-nez p3, :cond_21 + + .line 378 + new-instance v2, Ljava/lang/IllegalArgumentException; + + const-string v3, "Callback may not be null" + + invoke-direct {v2, v3}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v2 + + .line 381 + :cond_21 + iput-object p2, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + .line 382 + iput-object p3, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + .line 384 + invoke-static {p1}, Landroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration; + + move-result-object v1 + + .line 385 + .local v1, "vc":Landroid/view/ViewConfiguration; + invoke-virtual {p1}, Landroid/content/Context;->getResources()Landroid/content/res/Resources; + + move-result-object v2 + + invoke-virtual {v2}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics; + + move-result-object v2 + + iget v0, v2, Landroid/util/DisplayMetrics;->density:F + + .line 386 + .local v0, "density":F + const/high16 v2, 0x41a00000 + + mul-float/2addr v2, v0 + + const/high16 v3, 0x3f000000 + + add-float/2addr v2, v3 + + float-to-int v2, v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + .line 388 + invoke-virtual {v1}, Landroid/view/ViewConfiguration;->getScaledTouchSlop()I + + move-result v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + .line 389 + invoke-virtual {v1}, Landroid/view/ViewConfiguration;->getScaledMaximumFlingVelocity()I + + move-result v2 + + int-to-float v2, v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + .line 390 + invoke-virtual {v1}, Landroid/view/ViewConfiguration;->getScaledMinimumFlingVelocity()I + + move-result v2 + + int-to-float v2, v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + .line 391 + sget-object v2, Landroid/support/v4/widget/ViewDragHelper;->sInterpolator:Landroid/view/animation/Interpolator; + + invoke-static {p1, v2}, Landroid/support/v4/widget/ScrollerCompat;->create(Landroid/content/Context;Landroid/view/animation/Interpolator;)Landroid/support/v4/widget/ScrollerCompat; + + move-result-object v2 + + iput-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + .line 392 + return-void +.end method + +.method private checkNewEdgeDrag(FFII)Z + .registers 10 + .param p1, "delta" # F + .param p2, "odelta" # F + .param p3, "pointerId" # I + .param p4, "edge" # I + + .prologue + const/4 v2, 0x0 + + .line 1218 + invoke-static {p1}, Ljava/lang/Math;->abs(F)F + + move-result v0 + + .line 1219 + .local v0, "absDelta":F + invoke-static {p2}, Ljava/lang/Math;->abs(F)F + + move-result v1 + + .line 1221 + .local v1, "absODelta":F + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-ne v3, p4, :cond_31 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v3, p4 + + if-eqz v3, :cond_31 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-eq v3, p4, :cond_31 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-eq v3, p4, :cond_31 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v3, v3 + + cmpg-float v3, v0, v3 + + if-gtz v3, :cond_32 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v3, v3 + + cmpg-float v3, v1, v3 + + if-gtz v3, :cond_32 + + .line 1231 + :cond_31 + :goto_31 + return v2 + + .line 1227 + :cond_32 + const/high16 v3, 0x3f000000 + + mul-float/2addr v3, v1 + + cmpg-float v3, v0, v3 + + if-gez v3, :cond_49 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v3, p4}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeLock(I)Z + + move-result v3 + + if-eqz v3, :cond_49 + + .line 1228 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + aget v4, v3, p3 + + or-int/2addr v4, p4 + + aput v4, v3, p3 + + goto :goto_31 + + .line 1231 + :cond_49 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-nez v3, :cond_31 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v3, v3 + + cmpl-float v3, v0, v3 + + if-lez v3, :cond_31 + + const/4 v2, 0x1 + + goto :goto_31 +.end method + +.method private checkTouchSlop(Landroid/view/View;FF)Z + .registers 11 + .param p1, "child" # Landroid/view/View; + .param p2, "dx" # F + .param p3, "dy" # F + + .prologue + const/4 v2, 0x1 + + const/4 v3, 0x0 + + .line 1245 + if-nez p1, :cond_6 + + move v2, v3 + + .line 1258 + :cond_5 + :goto_5 + return v2 + + .line 1248 + :cond_6 + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v4, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewHorizontalDragRange(Landroid/view/View;)I + + move-result v4 + + if-lez v4, :cond_2d + + move v0, v2 + + .line 1249 + .local v0, "checkHorizontal":Z + :goto_f + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v4, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewVerticalDragRange(Landroid/view/View;)I + + move-result v4 + + if-lez v4, :cond_2f + + move v1, v2 + + .line 1251 + .local v1, "checkVertical":Z + :goto_18 + if-eqz v0, :cond_31 + + if-eqz v1, :cond_31 + + .line 1252 + mul-float v4, p2, p2 + + mul-float v5, p3, p3 + + add-float/2addr v4, v5 + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + iget v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + mul-int/2addr v5, v6 + + int-to-float v5, v5 + + cmpl-float v4, v4, v5 + + if-gtz v4, :cond_5 + + move v2, v3 + + goto :goto_5 + + .end local v0 # "checkHorizontal":Z + .end local v1 # "checkVertical":Z + :cond_2d + move v0, v3 + + .line 1248 + goto :goto_f + + .restart local v0 # "checkHorizontal":Z + :cond_2f + move v1, v3 + + .line 1249 + goto :goto_18 + + .line 1253 + .restart local v1 # "checkVertical":Z + :cond_31 + if-eqz v0, :cond_40 + + .line 1254 + invoke-static {p2}, Ljava/lang/Math;->abs(F)F + + move-result v4 + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v5, v5 + + cmpl-float v4, v4, v5 + + if-gtz v4, :cond_5 + + move v2, v3 + + goto :goto_5 + + .line 1255 + :cond_40 + if-eqz v1, :cond_4f + + .line 1256 + invoke-static {p3}, Ljava/lang/Math;->abs(F)F + + move-result v4 + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v5, v5 + + cmpl-float v4, v4, v5 + + if-gtz v4, :cond_5 + + move v2, v3 + + goto :goto_5 + + :cond_4f + move v2, v3 + + .line 1258 + goto :goto_5 +.end method + +.method private clampMag(FFF)F + .registers 7 + .param p1, "value" # F + .param p2, "absMin" # F + .param p3, "absMax" # F + + .prologue + const/4 v1, 0x0 + + .line 667 + invoke-static {p1}, Ljava/lang/Math;->abs(F)F + + move-result v0 + + .line 668 + .local v0, "absValue":F + cmpg-float v2, v0, p2 + + if-gez v2, :cond_b + + move p3, v1 + + .line 670 + .end local p3 # "absMax":F + :cond_a + :goto_a + return p3 + + .line 669 + .restart local p3 # "absMax":F + :cond_b + cmpl-float v2, v0, p3 + + if-lez v2, :cond_15 + + cmpl-float v1, p1, v1 + + if-gtz v1, :cond_a + + neg-float p3, p3 + + goto :goto_a + + :cond_15 + move p3, p1 + + .line 670 + goto :goto_a +.end method + +.method private clampMag(III)I + .registers 5 + .param p1, "value" # I + .param p2, "absMin" # I + .param p3, "absMax" # I + + .prologue + .line 650 + invoke-static {p1}, Ljava/lang/Math;->abs(I)I + + move-result v0 + + .line 651 + .local v0, "absValue":I + if-ge v0, p2, :cond_8 + + const/4 p3, 0x0 + + .line 653 + .end local p3 # "absMax":I + :cond_7 + :goto_7 + return p3 + + .line 652 + .restart local p3 # "absMax":I + :cond_8 + if-le v0, p3, :cond_e + + if-gtz p1, :cond_7 + + neg-int p3, p3 + + goto :goto_7 + + :cond_e + move p3, p1 + + .line 653 + goto :goto_7 +.end method + +.method private clearMotionHistory()V + .registers 4 + + .prologue + const/4 v2, 0x0 + + const/4 v1, 0x0 + + .line 770 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-nez v0, :cond_7 + + .line 781 + :goto_6 + return-void + + .line 773 + :cond_7 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 774 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 775 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 776 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 777 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + invoke-static {v0, v2}, Ljava/util/Arrays;->fill([II)V + + .line 778 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + invoke-static {v0, v2}, Ljava/util/Arrays;->fill([II)V + + .line 779 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + invoke-static {v0, v2}, Ljava/util/Arrays;->fill([II)V + + .line 780 + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + goto :goto_6 +.end method + +.method private clearMotionHistory(I)V + .registers 5 + .param p1, "pointerId" # I + + .prologue + const/4 v2, 0x0 + + const/4 v1, 0x0 + + .line 784 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-nez v0, :cond_7 + + .line 795 + :goto_6 + return-void + + .line 787 + :cond_7 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + aput v1, v0, p1 + + .line 788 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + aput v1, v0, p1 + + .line 789 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aput v1, v0, p1 + + .line 790 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aput v1, v0, p1 + + .line 791 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aput v2, v0, p1 + + .line 792 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aput v2, v0, p1 + + .line 793 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + aput v2, v0, p1 + + .line 794 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + const/4 v1, 0x1 + + shl-int/2addr v1, p1 + + xor-int/lit8 v1, v1, -0x1 + + and-int/2addr v0, v1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + goto :goto_6 +.end method + +.method private computeAxisDuration(III)I + .registers 14 + .param p1, "delta" # I + .param p2, "velocity" # I + .param p3, "motionRange" # I + + .prologue + const/high16 v9, 0x3f800000 + + .line 618 + if-nez p1, :cond_6 + + .line 619 + const/4 v6, 0x0 + + .line 636 + :goto_5 + return v6 + + .line 622 + :cond_6 + iget-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v6}, Landroid/view/ViewGroup;->getWidth()I + + move-result v5 + + .line 623 + .local v5, "width":I + div-int/lit8 v3, v5, 0x2 + + .line 624 + .local v3, "halfWidth":I + invoke-static {p1}, Ljava/lang/Math;->abs(I)I + + move-result v6 + + int-to-float v6, v6 + + int-to-float v7, v5 + + div-float/2addr v6, v7 + + invoke-static {v9, v6}, Ljava/lang/Math;->min(FF)F + + move-result v1 + + .line 625 + .local v1, "distanceRatio":F + int-to-float v6, v3 + + int-to-float v7, v3 + + invoke-direct {p0, v1}, Landroid/support/v4/widget/ViewDragHelper;->distanceInfluenceForSnapDuration(F)F + + move-result v8 + + mul-float/2addr v7, v8 + + add-float v0, v6, v7 + + .line 629 + .local v0, "distance":F + invoke-static {p2}, Ljava/lang/Math;->abs(I)I + + move-result p2 + + .line 630 + if-lez p2, :cond_3f + + .line 631 + const/high16 v6, 0x447a0000 + + int-to-float v7, p2 + + div-float v7, v0, v7 + + invoke-static {v7}, Ljava/lang/Math;->abs(F)F + + move-result v7 + + mul-float/2addr v6, v7 + + invoke-static {v6}, Ljava/lang/Math;->round(F)I + + move-result v6 + + mul-int/lit8 v2, v6, 0x4 + + .line 636 + .local v2, "duration":I + :goto_38 + const/16 v6, 0x258 + + invoke-static {v2, v6}, Ljava/lang/Math;->min(II)I + + move-result v6 + + goto :goto_5 + + .line 633 + .end local v2 # "duration":I + :cond_3f + invoke-static {p1}, Ljava/lang/Math;->abs(I)I + + move-result v6 + + int-to-float v6, v6 + + int-to-float v7, p3 + + div-float v4, v6, v7 + + .line 634 + .local v4, "range":F + add-float v6, v4, v9 + + const/high16 v7, 0x43800000 + + mul-float/2addr v6, v7 + + float-to-int v2, v6 + + .restart local v2 # "duration":I + goto :goto_38 +.end method + +.method private computeSettleDuration(Landroid/view/View;IIII)I + .registers 20 + .param p1, "child" # Landroid/view/View; + .param p2, "dx" # I + .param p3, "dy" # I + .param p4, "xvel" # I + .param p5, "yvel" # I + + .prologue + .line 597 + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + float-to-int v12, v12 + + iget v13, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + float-to-int v13, v13 + + move/from16 v0, p4 + + invoke-direct {p0, v0, v12, v13}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(III)I + + move-result p4 + + .line 598 + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + float-to-int v12, v12 + + iget v13, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + float-to-int v13, v13 + + move/from16 v0, p5 + + invoke-direct {p0, v0, v12, v13}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(III)I + + move-result p5 + + .line 599 + invoke-static/range {p2 .. p2}, Ljava/lang/Math;->abs(I)I + + move-result v2 + + .line 600 + .local v2, "absDx":I + invoke-static/range {p3 .. p3}, Ljava/lang/Math;->abs(I)I + + move-result v3 + + .line 601 + .local v3, "absDy":I + invoke-static/range {p4 .. p4}, Ljava/lang/Math;->abs(I)I + + move-result v4 + + .line 602 + .local v4, "absXVel":I + invoke-static/range {p5 .. p5}, Ljava/lang/Math;->abs(I)I + + move-result v5 + + .line 603 + .local v5, "absYVel":I + add-int v7, v4, v5 + + .line 604 + .local v7, "addedVel":I + add-int v6, v2, v3 + + .line 606 + .local v6, "addedDistance":I + if-eqz p4, :cond_5b + + int-to-float v12, v4 + + int-to-float v13, v7 + + div-float v9, v12, v13 + + .line 608 + .local v9, "xweight":F + :goto_32 + if-eqz p5, :cond_60 + + int-to-float v12, v5 + + int-to-float v13, v7 + + div-float v11, v12, v13 + + .line 611 + .local v11, "yweight":F + :goto_38 + iget-object v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v12, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewHorizontalDragRange(Landroid/view/View;)I + + move-result v12 + + move/from16 v0, p2 + + move/from16 v1, p4 + + invoke-direct {p0, v0, v1, v12}, Landroid/support/v4/widget/ViewDragHelper;->computeAxisDuration(III)I + + move-result v8 + + .line 612 + .local v8, "xduration":I + iget-object v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v12, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewVerticalDragRange(Landroid/view/View;)I + + move-result v12 + + move/from16 v0, p3 + + move/from16 v1, p5 + + invoke-direct {p0, v0, v1, v12}, Landroid/support/v4/widget/ViewDragHelper;->computeAxisDuration(III)I + + move-result v10 + + .line 614 + .local v10, "yduration":I + int-to-float v12, v8 + + mul-float/2addr v12, v9 + + int-to-float v13, v10 + + mul-float/2addr v13, v11 + + add-float/2addr v12, v13 + + float-to-int v12, v12 + + return v12 + + .line 606 + .end local v8 # "xduration":I + .end local v9 # "xweight":F + .end local v10 # "yduration":I + .end local v11 # "yweight":F + :cond_5b + int-to-float v12, v2 + + int-to-float v13, v6 + + div-float v9, v12, v13 + + goto :goto_32 + + .line 608 + .restart local v9 # "xweight":F + :cond_60 + int-to-float v12, v3 + + int-to-float v13, v6 + + div-float v11, v12, v13 + + goto :goto_38 +.end method + +.method public static create(Landroid/view/ViewGroup;FLandroid/support/v4/widget/ViewDragHelper$Callback;)Landroid/support/v4/widget/ViewDragHelper; + .registers 6 + .param p0, "forParent" # Landroid/view/ViewGroup; + .param p1, "sensitivity" # F + .param p2, "cb" # Landroid/support/v4/widget/ViewDragHelper$Callback; + + .prologue + .line 360 + invoke-static {p0, p2}, Landroid/support/v4/widget/ViewDragHelper;->create(Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)Landroid/support/v4/widget/ViewDragHelper; + + move-result-object v0 + + .line 361 + .local v0, "helper":Landroid/support/v4/widget/ViewDragHelper; + iget v1, v0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v1, v1 + + const/high16 v2, 0x3f800000 + + div-float/2addr v2, p1 + + mul-float/2addr v1, v2 + + float-to-int v1, v1 + + iput v1, v0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + .line 362 + return-object v0 +.end method + +.method public static create(Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)Landroid/support/v4/widget/ViewDragHelper; + .registers 4 + .param p0, "forParent" # Landroid/view/ViewGroup; + .param p1, "cb" # Landroid/support/v4/widget/ViewDragHelper$Callback; + + .prologue + .line 347 + new-instance v0, Landroid/support/v4/widget/ViewDragHelper; + + invoke-virtual {p0}, Landroid/view/ViewGroup;->getContext()Landroid/content/Context; + + move-result-object v1 + + invoke-direct {v0, v1, p0, p1}, Landroid/support/v4/widget/ViewDragHelper;->(Landroid/content/Context;Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)V + + return-object v0 +.end method + +.method private dispatchViewReleased(FF)V + .registers 7 + .param p1, "xvel" # F + .param p2, "yvel" # F + + .prologue + const/4 v3, 0x1 + + const/4 v2, 0x0 + + .line 759 + iput-boolean v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + .line 760 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v1, p1, p2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewReleased(Landroid/view/View;FF)V + + .line 761 + iput-boolean v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + .line 763 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-ne v0, v3, :cond_14 + + .line 765 + invoke-virtual {p0, v2}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 767 + :cond_14 + return-void +.end method + +.method private distanceInfluenceForSnapDuration(F)F + .registers 6 + .param p1, "f" # F + + .prologue + .line 674 + const/high16 v0, 0x3f000000 + + sub-float/2addr p1, v0 + + .line 675 + float-to-double v0, p1 + + const-wide v2, 0x3fde28c7460698c7L + + mul-double/2addr v0, v2 + + double-to-float p1, v0 + + .line 676 + float-to-double v0, p1 + + invoke-static {v0, v1}, Ljava/lang/Math;->sin(D)D + + move-result-wide v0 + + double-to-float v0, v0 + + return v0 +.end method + +.method private dragTo(IIII)V + .registers 13 + .param p1, "left" # I + .param p2, "top" # I + .param p3, "dx" # I + .param p4, "dy" # I + + .prologue + .line 1366 + move v2, p1 + + .line 1367 + .local v2, "clampedX":I + move v3, p2 + + .line 1368 + .local v3, "clampedY":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getLeft()I + + move-result v6 + + .line 1369 + .local v6, "oldLeft":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getTop()I + + move-result v7 + + .line 1370 + .local v7, "oldTop":I + if-eqz p3, :cond_1f + + .line 1371 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v1, p1, p3}, Landroid/support/v4/widget/ViewDragHelper$Callback;->clampViewPositionHorizontal(Landroid/view/View;II)I + + move-result v2 + + .line 1372 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + sub-int v1, v2, v6 + + invoke-virtual {v0, v1}, Landroid/view/View;->offsetLeftAndRight(I)V + + .line 1374 + :cond_1f + if-eqz p4, :cond_30 + + .line 1375 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v1, p2, p4}, Landroid/support/v4/widget/ViewDragHelper$Callback;->clampViewPositionVertical(Landroid/view/View;II)I + + move-result v3 + + .line 1376 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + sub-int v1, v3, v7 + + invoke-virtual {v0, v1}, Landroid/view/View;->offsetTopAndBottom(I)V + + .line 1379 + :cond_30 + if-nez p3, :cond_34 + + if-eqz p4, :cond_3f + + .line 1380 + :cond_34 + sub-int v4, v2, v6 + + .line 1381 + .local v4, "clampedDx":I + sub-int v5, v3, v7 + + .line 1382 + .local v5, "clampedDy":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewPositionChanged(Landroid/view/View;IIII)V + + .line 1385 + .end local v4 # "clampedDx":I + .end local v5 # "clampedDy":I + :cond_3f + return-void +.end method + +.method private ensureMotionHistorySizeForId(I)V + .registers 12 + .param p1, "pointerId" # I + + .prologue + const/4 v9, 0x0 + + .line 798 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-eqz v7, :cond_a + + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + array-length v7, v7 + + if-gt v7, p1, :cond_70 + + .line 799 + :cond_a + add-int/lit8 v7, p1, 0x1 + + new-array v3, v7, [F + + .line 800 + .local v3, "imx":[F + add-int/lit8 v7, p1, 0x1 + + new-array v4, v7, [F + + .line 801 + .local v4, "imy":[F + add-int/lit8 v7, p1, 0x1 + + new-array v5, v7, [F + + .line 802 + .local v5, "lmx":[F + add-int/lit8 v7, p1, 0x1 + + new-array v6, v7, [F + + .line 803 + .local v6, "lmy":[F + add-int/lit8 v7, p1, 0x1 + + new-array v2, v7, [I + + .line 804 + .local v2, "iit":[I + add-int/lit8 v7, p1, 0x1 + + new-array v0, v7, [I + + .line 805 + .local v0, "edip":[I + add-int/lit8 v7, p1, 0x1 + + new-array v1, v7, [I + + .line 807 + .local v1, "edl":[I + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-eqz v7, :cond_62 + + .line 808 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + array-length v8, v8 + + invoke-static {v7, v9, v3, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 809 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + array-length v8, v8 + + invoke-static {v7, v9, v4, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 810 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + array-length v8, v8 + + invoke-static {v7, v9, v5, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 811 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + array-length v8, v8 + + invoke-static {v7, v9, v6, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 812 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + array-length v8, v8 + + invoke-static {v7, v9, v2, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 813 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + array-length v8, v8 + + invoke-static {v7, v9, v0, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 814 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + array-length v8, v8 + + invoke-static {v7, v9, v1, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 817 + :cond_62 + iput-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + .line 818 + iput-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + .line 819 + iput-object v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + .line 820 + iput-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + .line 821 + iput-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + .line 822 + iput-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + .line 823 + iput-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + .line 825 + .end local v0 # "edip":[I + .end local v1 # "edl":[I + .end local v2 # "iit":[I + .end local v3 # "imx":[F + .end local v4 # "imy":[F + .end local v5 # "lmx":[F + .end local v6 # "lmy":[F + :cond_70 + return-void +.end method + +.method private forceSettleCapturedViewAt(IIII)Z + .registers 16 + .param p1, "finalLeft" # I + .param p2, "finalTop" # I + .param p3, "xvel" # I + .param p4, "yvel" # I + + .prologue + const/4 v0, 0x0 + + .line 577 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v1}, Landroid/view/View;->getLeft()I + + move-result v10 + + .line 578 + .local v10, "startLeft":I + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v1}, Landroid/view/View;->getTop()I + + move-result v6 + + .line 579 + .local v6, "startTop":I + sub-int v2, p1, v10 + + .line 580 + .local v2, "dx":I + sub-int v3, p2, v6 + + .line 582 + .local v3, "dy":I + if-nez v2, :cond_1e + + if-nez v3, :cond_1e + + .line 584 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v1}, Landroid/support/v4/widget/ScrollerCompat;->abortAnimation()V + + .line 585 + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 593 + :goto_1d + return v0 + + .line 589 + :cond_1e + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object v0, p0 + + move v4, p3 + + move v5, p4 + + invoke-direct/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper;->computeSettleDuration(Landroid/view/View;IIII)I + + move-result v9 + + .line 590 + .local v9, "duration":I + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + move v5, v10 + + move v7, v2 + + move v8, v3 + + invoke-virtual/range {v4 .. v9}, Landroid/support/v4/widget/ScrollerCompat;->startScroll(IIIII)V + + .line 592 + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 593 + const/4 v0, 0x1 + + goto :goto_1d +.end method + +.method private getEdgesTouched(II)I + .registers 6 + .param p1, "x" # I + .param p2, "y" # I + + .prologue + .line 1440 + const/4 v0, 0x0 + + .line 1442 + .local v0, "result":I + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getLeft()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + add-int/2addr v1, v2 + + if-ge p1, v1, :cond_e + + or-int/lit8 v0, v0, 0x1 + + .line 1443 + :cond_e + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getTop()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + add-int/2addr v1, v2 + + if-ge p2, v1, :cond_1b + + or-int/lit8 v0, v0, 0x4 + + .line 1444 + :cond_1b + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getRight()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + sub-int/2addr v1, v2 + + if-le p1, v1, :cond_28 + + or-int/lit8 v0, v0, 0x2 + + .line 1445 + :cond_28 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getBottom()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + sub-int/2addr v1, v2 + + if-le p2, v1, :cond_35 + + or-int/lit8 v0, v0, 0x8 + + .line 1447 + :cond_35 + return v0 +.end method + +.method private releaseViewForPointerUp()V + .registers 6 + + .prologue + .line 1355 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + const/16 v3, 0x3e8 + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + invoke-virtual {v2, v3, v4}, Landroid/view/VelocityTracker;->computeCurrentVelocity(IF)V + + .line 1356 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v2, v3}, Landroid/support/v4/view/VelocityTrackerCompat;->getXVelocity(Landroid/view/VelocityTracker;I)F + + move-result v2 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + invoke-direct {p0, v2, v3, v4}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(FFF)F + + move-result v0 + + .line 1359 + .local v0, "xvel":F + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v2, v3}, Landroid/support/v4/view/VelocityTrackerCompat;->getYVelocity(Landroid/view/VelocityTracker;I)F + + move-result v2 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + invoke-direct {p0, v2, v3, v4}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(FFF)F + + move-result v1 + + .line 1362 + .local v1, "yvel":F + invoke-direct {p0, v0, v1}, Landroid/support/v4/widget/ViewDragHelper;->dispatchViewReleased(FF)V + + .line 1363 + return-void +.end method + +.method private reportNewEdgeDrags(FFI)V + .registers 7 + .param p1, "dx" # F + .param p2, "dy" # F + .param p3, "pointerId" # I + + .prologue + .line 1197 + const/4 v0, 0x0 + + .line 1198 + .local v0, "dragsStarted":I + const/4 v1, 0x1 + + invoke-direct {p0, p1, p2, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_a + + .line 1199 + or-int/lit8 v0, v0, 0x1 + + .line 1201 + :cond_a + const/4 v1, 0x4 + + invoke-direct {p0, p2, p1, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_13 + + .line 1202 + or-int/lit8 v0, v0, 0x4 + + .line 1204 + :cond_13 + const/4 v1, 0x2 + + invoke-direct {p0, p1, p2, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_1c + + .line 1205 + or-int/lit8 v0, v0, 0x2 + + .line 1207 + :cond_1c + const/16 v1, 0x8 + + invoke-direct {p0, p2, p1, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_26 + + .line 1208 + or-int/lit8 v0, v0, 0x8 + + .line 1211 + :cond_26 + if-eqz v0, :cond_34 + + .line 1212 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aget v2, v1, p3 + + or-int/2addr v2, v0 + + aput v2, v1, p3 + + .line 1213 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v1, v0, p3}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeDragStarted(II)V + + .line 1215 + :cond_34 + return-void +.end method + +.method private saveInitialMotion(FFI)V + .registers 7 + .param p1, "x" # F + .param p2, "y" # F + .param p3, "pointerId" # I + + .prologue + .line 828 + invoke-direct {p0, p3}, Landroid/support/v4/widget/ViewDragHelper;->ensureMotionHistorySizeForId(I)V + + .line 829 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aput p1, v1, p3 + + aput p1, v0, p3 + + .line 830 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aput p2, v1, p3 + + aput p2, v0, p3 + + .line 831 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + float-to-int v1, p1 + + float-to-int v2, p2 + + invoke-direct {p0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->getEdgesTouched(II)I + + move-result v1 + + aput v1, v0, p3 + + .line 832 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + const/4 v1, 0x1 + + shl-int/2addr v1, p3 + + or-int/2addr v0, v1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + .line 833 + return-void +.end method + +.method private saveLastMotion(Landroid/view/MotionEvent;)V + .registers 8 + .param p1, "ev" # Landroid/view/MotionEvent; + + .prologue + .line 836 + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v1 + + .line 837 + .local v1, "pointerCount":I + const/4 v0, 0x0 + + .local v0, "i":I + :goto_5 + if-ge v0, v1, :cond_1e + + .line 838 + invoke-static {p1, v0}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v2 + + .line 839 + .local v2, "pointerId":I + invoke-static {p1, v0}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v3 + + .line 840 + .local v3, "x":F + invoke-static {p1, v0}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v4 + + .line 841 + .local v4, "y":F + iget-object v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aput v3, v5, v2 + + .line 842 + iget-object v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aput v4, v5, v2 + + .line 837 + add-int/lit8 v0, v0, 0x1 + + goto :goto_5 + + .line 844 + .end local v2 # "pointerId":I + .end local v3 # "x":F + .end local v4 # "y":F + :cond_1e + return-void +.end method + + +# virtual methods +.method public abort()V + .registers 9 + + .prologue + .line 512 + invoke-virtual {p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + .line 513 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v1, 0x2 + + if-ne v0, v1, :cond_30 + + .line 514 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrX()I + + move-result v6 + + .line 515 + .local v6, "oldX":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrY()I + + move-result v7 + + .line 516 + .local v7, "oldY":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->abortAnimation()V + + .line 517 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrX()I + + move-result v2 + + .line 518 + .local v2, "newX":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrY()I + + move-result v3 + + .line 519 + .local v3, "newY":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + sub-int v4, v2, v6 + + sub-int v5, v3, v7 + + invoke-virtual/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewPositionChanged(Landroid/view/View;IIII)V + + .line 521 + .end local v2 # "newX":I + .end local v3 # "newY":I + .end local v6 # "oldX":I + .end local v7 # "oldY":I + :cond_30 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 522 + return-void +.end method + +.method protected canScroll(Landroid/view/View;ZIIII)Z + .registers 20 + .param p1, "v" # Landroid/view/View; + .param p2, "checkV" # Z + .param p3, "dx" # I + .param p4, "dy" # I + .param p5, "x" # I + .param p6, "y" # I + + .prologue + .line 908 + instance-of v1, p1, Landroid/view/ViewGroup; + + if-eqz v1, :cond_5c + + move-object v9, p1 + + .line 909 + check-cast v9, Landroid/view/ViewGroup; + + .line 910 + .local v9, "group":Landroid/view/ViewGroup; + invoke-virtual {p1}, Landroid/view/View;->getScrollX()I + + move-result v11 + + .line 911 + .local v11, "scrollX":I + invoke-virtual {p1}, Landroid/view/View;->getScrollY()I + + move-result v12 + + .line 912 + .local v12, "scrollY":I + invoke-virtual {v9}, Landroid/view/ViewGroup;->getChildCount()I + + move-result v8 + + .line 914 + .local v8, "count":I + add-int/lit8 v10, v8, -0x1 + + .local v10, "i":I + :goto_15 + if-ltz v10, :cond_5c + + .line 917 + invoke-virtual {v9, v10}, Landroid/view/ViewGroup;->getChildAt(I)Landroid/view/View; + + move-result-object v2 + + .line 918 + .local v2, "child":Landroid/view/View; + add-int v1, p5, v11 + + invoke-virtual {v2}, Landroid/view/View;->getLeft()I + + move-result v3 + + if-lt v1, v3, :cond_59 + + add-int v1, p5, v11 + + invoke-virtual {v2}, Landroid/view/View;->getRight()I + + move-result v3 + + if-ge v1, v3, :cond_59 + + add-int v1, p6, v12 + + invoke-virtual {v2}, Landroid/view/View;->getTop()I + + move-result v3 + + if-lt v1, v3, :cond_59 + + add-int v1, p6, v12 + + invoke-virtual {v2}, Landroid/view/View;->getBottom()I + + move-result v3 + + if-ge v1, v3, :cond_59 + + const/4 v3, 0x1 + + add-int v1, p5, v11 + + invoke-virtual {v2}, Landroid/view/View;->getLeft()I + + move-result v4 + + sub-int v6, v1, v4 + + add-int v1, p6, v12 + + invoke-virtual {v2}, Landroid/view/View;->getTop()I + + move-result v4 + + sub-int v7, v1, v4 + + move-object v1, p0 + + move/from16 v4, p3 + + move/from16 v5, p4 + + invoke-virtual/range {v1 .. v7}, Landroid/support/v4/widget/ViewDragHelper;->canScroll(Landroid/view/View;ZIIII)Z + + move-result v1 + + if-eqz v1, :cond_59 + + .line 922 + const/4 v1, 0x1 + + .line 927 + .end local v2 # "child":Landroid/view/View; + .end local v8 # "count":I + .end local v9 # "group":Landroid/view/ViewGroup; + .end local v10 # "i":I + .end local v11 # "scrollX":I + .end local v12 # "scrollY":I + :goto_58 + return v1 + + .line 914 + .restart local v2 # "child":Landroid/view/View; + .restart local v8 # "count":I + .restart local v9 # "group":Landroid/view/ViewGroup; + .restart local v10 # "i":I + .restart local v11 # "scrollX":I + .restart local v12 # "scrollY":I + :cond_59 + add-int/lit8 v10, v10, -0x1 + + goto :goto_15 + + .line 927 + .end local v2 # "child":Landroid/view/View; + .end local v8 # "count":I + .end local v9 # "group":Landroid/view/ViewGroup; + .end local v10 # "i":I + .end local v11 # "scrollX":I + .end local v12 # "scrollY":I + :cond_5c + if-eqz p2, :cond_72 + + move/from16 v0, p3 + + neg-int v1, v0 + + invoke-static {p1, v1}, Landroid/support/v4/view/ViewCompat;->canScrollHorizontally(Landroid/view/View;I)Z + + move-result v1 + + if-nez v1, :cond_70 + + move/from16 v0, p4 + + neg-int v1, v0 + + invoke-static {p1, v1}, Landroid/support/v4/view/ViewCompat;->canScrollVertically(Landroid/view/View;I)Z + + move-result v1 + + if-eqz v1, :cond_72 + + :cond_70 + const/4 v1, 0x1 + + goto :goto_58 + + :cond_72 + const/4 v1, 0x0 + + goto :goto_58 +.end method + +.method public cancel()V + .registers 2 + + .prologue + .line 498 + const/4 v0, -0x1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 499 + invoke-direct {p0}, Landroid/support/v4/widget/ViewDragHelper;->clearMotionHistory()V + + .line 501 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + if-eqz v0, :cond_12 + + .line 502 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + invoke-virtual {v0}, Landroid/view/VelocityTracker;->recycle()V + + .line 503 + const/4 v0, 0x0 + + iput-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + .line 505 + :cond_12 + return-void +.end method + +.method public captureChildView(Landroid/view/View;I)V + .registers 6 + .param p1, "childView" # Landroid/view/View; + .param p2, "activePointerId" # I + + .prologue + .line 460 + invoke-virtual {p1}, Landroid/view/View;->getParent()Landroid/view/ViewParent; + + move-result-object v0 + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + if-eq v0, v1, :cond_29 + + .line 461 + new-instance v0, Ljava/lang/IllegalArgumentException; + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + const-string v2, "captureChildView: parameter must be a descendant of the ViewDragHelper\'s tracked parent view (" + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + move-result-object v1 + + const-string v2, ")" + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v0 + + .line 465 + :cond_29 + iput-object p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + .line 466 + iput p2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 467 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v0, p1, p2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewCaptured(Landroid/view/View;I)V + + .line 468 + const/4 v0, 0x1 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 469 + return-void +.end method + +.method public checkTouchSlop(I)Z + .registers 5 + .param p1, "directions" # I + + .prologue + .line 1276 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + array-length v0, v2 + + .line 1277 + .local v0, "count":I + const/4 v1, 0x0 + + .local v1, "i":I + :goto_4 + if-ge v1, v0, :cond_11 + + .line 1278 + invoke-virtual {p0, p1, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkTouchSlop(II)Z + + move-result v2 + + if-eqz v2, :cond_e + + .line 1279 + const/4 v2, 0x1 + + .line 1282 + :goto_d + return v2 + + .line 1277 + :cond_e + add-int/lit8 v1, v1, 0x1 + + goto :goto_4 + + .line 1282 + :cond_11 + const/4 v2, 0x0 + + goto :goto_d +.end method + +.method public checkTouchSlop(II)Z + .registers 12 + .param p1, "directions" # I + .param p2, "pointerId" # I + + .prologue + const/4 v4, 0x1 + + const/4 v5, 0x0 + + .line 1301 + invoke-virtual {p0, p2}, Landroid/support/v4/widget/ViewDragHelper;->isPointerDown(I)Z + + move-result v6 + + if-nez v6, :cond_a + + move v4, v5 + + .line 1318 + :cond_9 + :goto_9 + return v4 + + .line 1305 + :cond_a + and-int/lit8 v6, p1, 0x1 + + if-ne v6, v4, :cond_3e + + move v0, v4 + + .line 1306 + .local v0, "checkHorizontal":Z + :goto_f + and-int/lit8 v6, p1, 0x2 + + const/4 v7, 0x2 + + if-ne v6, v7, :cond_40 + + move v1, v4 + + .line 1308 + .local v1, "checkVertical":Z + :goto_15 + iget-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aget v6, v6, p2 + + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + aget v7, v7, p2 + + sub-float v2, v6, v7 + + .line 1309 + .local v2, "dx":F + iget-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aget v6, v6, p2 + + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + aget v7, v7, p2 + + sub-float v3, v6, v7 + + .line 1311 + .local v3, "dy":F + if-eqz v0, :cond_42 + + if-eqz v1, :cond_42 + + .line 1312 + mul-float v6, v2, v2 + + mul-float v7, v3, v3 + + add-float/2addr v6, v7 + + iget v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + iget v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + mul-int/2addr v7, v8 + + int-to-float v7, v7 + + cmpl-float v6, v6, v7 + + if-gtz v6, :cond_9 + + move v4, v5 + + goto :goto_9 + + .end local v0 # "checkHorizontal":Z + .end local v1 # "checkVertical":Z + .end local v2 # "dx":F + .end local v3 # "dy":F + :cond_3e + move v0, v5 + + .line 1305 + goto :goto_f + + .restart local v0 # "checkHorizontal":Z + :cond_40 + move v1, v5 + + .line 1306 + goto :goto_15 + + .line 1313 + .restart local v1 # "checkVertical":Z + .restart local v2 # "dx":F + .restart local v3 # "dy":F + :cond_42 + if-eqz v0, :cond_51 + + .line 1314 + invoke-static {v2}, Ljava/lang/Math;->abs(F)F + + move-result v6 + + iget v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v7, v7 + + cmpl-float v6, v6, v7 + + if-gtz v6, :cond_9 + + move v4, v5 + + goto :goto_9 + + .line 1315 + :cond_51 + if-eqz v1, :cond_60 + + .line 1316 + invoke-static {v3}, Ljava/lang/Math;->abs(F)F + + move-result v6 + + iget v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v7, v7 + + cmpl-float v6, v6, v7 + + if-gtz v6, :cond_9 + + move v4, v5 + + goto :goto_9 + + :cond_60 + move v4, v5 + + .line 1318 + goto :goto_9 +.end method + +.method public continueSettling(Z)Z + .registers 11 + .param p1, "deferCallbacks" # Z + + .prologue + const/4 v8, 0x2 + + const/4 v7, 0x0 + + .line 715 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-ne v0, v8, :cond_69 + + .line 716 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->computeScrollOffset()Z + + move-result v6 + + .line 717 + .local v6, "keepGoing":Z + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrX()I + + move-result v2 + + .line 718 + .local v2, "x":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrY()I + + move-result v3 + + .line 719 + .local v3, "y":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getLeft()I + + move-result v0 + + sub-int v4, v2, v0 + + .line 720 + .local v4, "dx":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getTop()I + + move-result v0 + + sub-int v5, v3, v0 + + .line 722 + .local v5, "dy":I + if-eqz v4, :cond_2f + + .line 723 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v4}, Landroid/view/View;->offsetLeftAndRight(I)V + + .line 725 + :cond_2f + if-eqz v5, :cond_36 + + .line 726 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v5}, Landroid/view/View;->offsetTopAndBottom(I)V + + .line 729 + :cond_36 + if-nez v4, :cond_3a + + if-eqz v5, :cond_41 + + .line 730 + :cond_3a + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewPositionChanged(Landroid/view/View;IIII)V + + .line 733 + :cond_41 + if-eqz v6, :cond_5e + + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getFinalX()I + + move-result v0 + + if-ne v2, v0, :cond_5e + + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getFinalY()I + + move-result v0 + + if-ne v3, v0, :cond_5e + + .line 736 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->abortAnimation()V + + .line 737 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->isFinished()Z + + move-result v6 + + .line 740 + :cond_5e + if-nez v6, :cond_69 + + .line 741 + if-eqz p1, :cond_6f + + .line 742 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mSetIdleRunnable:Ljava/lang/Runnable; + + invoke-virtual {v0, v1}, Landroid/view/ViewGroup;->post(Ljava/lang/Runnable;)Z + + .line 749 + .end local v2 # "x":I + .end local v3 # "y":I + .end local v4 # "dx":I + .end local v5 # "dy":I + .end local v6 # "keepGoing":Z + :cond_69 + :goto_69 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-ne v0, v8, :cond_73 + + const/4 v0, 0x1 + + :goto_6e + return v0 + + .line 744 + .restart local v2 # "x":I + .restart local v3 # "y":I + .restart local v4 # "dx":I + .restart local v5 # "dy":I + .restart local v6 # "keepGoing":Z + :cond_6f + invoke-virtual {p0, v7}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + goto :goto_69 + + .end local v2 # "x":I + .end local v3 # "y":I + .end local v4 # "dx":I + .end local v5 # "dy":I + .end local v6 # "keepGoing":Z + :cond_73 + move v0, v7 + + .line 749 + goto :goto_6e +.end method + +.method public findTopChildUnder(II)Landroid/view/View; + .registers 8 + .param p1, "x" # I + .param p2, "y" # I + + .prologue + .line 1428 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v3}, Landroid/view/ViewGroup;->getChildCount()I + + move-result v1 + + .line 1429 + .local v1, "childCount":I + add-int/lit8 v2, v1, -0x1 + + .local v2, "i":I + :goto_8 + if-ltz v2, :cond_32 + + .line 1430 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v4, v2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getOrderedChildIndex(I)I + + move-result v4 + + invoke-virtual {v3, v4}, Landroid/view/ViewGroup;->getChildAt(I)Landroid/view/View; + + move-result-object v0 + + .line 1431 + .local v0, "child":Landroid/view/View; + invoke-virtual {v0}, Landroid/view/View;->getLeft()I + + move-result v3 + + if-lt p1, v3, :cond_2f + + invoke-virtual {v0}, Landroid/view/View;->getRight()I + + move-result v3 + + if-ge p1, v3, :cond_2f + + invoke-virtual {v0}, Landroid/view/View;->getTop()I + + move-result v3 + + if-lt p2, v3, :cond_2f + + invoke-virtual {v0}, Landroid/view/View;->getBottom()I + + move-result v3 + + if-ge p2, v3, :cond_2f + + .line 1436 + .end local v0 # "child":Landroid/view/View; + :goto_2e + return-object v0 + + .line 1429 + .restart local v0 # "child":Landroid/view/View; + :cond_2f + add-int/lit8 v2, v2, -0x1 + + goto :goto_8 + + .line 1436 + .end local v0 # "child":Landroid/view/View; + :cond_32 + const/4 v0, 0x0 + + goto :goto_2e +.end method + +.method public flingCapturedView(IIII)V + .registers 14 + .param p1, "minLeft" # I + .param p2, "minTop" # I + .param p3, "maxLeft" # I + .param p4, "maxTop" # I + + .prologue + .line 690 + iget-boolean v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + if-nez v0, :cond_c + + .line 691 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot flingCapturedView outside of a call to Callback#onViewReleased" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 695 + :cond_c + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v1}, Landroid/view/View;->getLeft()I + + move-result v1 + + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v2}, Landroid/view/View;->getTop()I + + move-result v2 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v3, v4}, Landroid/support/v4/view/VelocityTrackerCompat;->getXVelocity(Landroid/view/VelocityTracker;I)F + + move-result v3 + + float-to-int v3, v3 + + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v4, v5}, Landroid/support/v4/view/VelocityTrackerCompat;->getYVelocity(Landroid/view/VelocityTracker;I)F + + move-result v4 + + float-to-int v4, v4 + + move v5, p1 + + move v6, p3 + + move v7, p2 + + move v8, p4 + + invoke-virtual/range {v0 .. v8}, Landroid/support/v4/widget/ScrollerCompat;->fling(IIIIIIII)V + + .line 700 + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 701 + return-void +.end method + +.method public getActivePointerId()I + .registers 2 + + .prologue + .line 483 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + return v0 +.end method + +.method public getCapturedView()Landroid/view/View; + .registers 2 + + .prologue + .line 475 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + return-object v0 +.end method + +.method public getEdgeSize()I + .registers 2 + + .prologue + .line 448 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + return v0 +.end method + +.method public getMinVelocity()F + .registers 2 + + .prologue + .line 412 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + return v0 +.end method + +.method public getTouchSlop()I + .registers 2 + + .prologue + .line 490 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + return v0 +.end method + +.method public getViewDragState()I + .registers 2 + + .prologue + .line 421 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + return v0 +.end method + +.method public isCapturedViewUnder(II)Z + .registers 4 + .param p1, "x" # I + .param p2, "y" # I + + .prologue + .line 1397 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {p0, v0, p1, p2}, Landroid/support/v4/widget/ViewDragHelper;->isViewUnder(Landroid/view/View;II)Z + + move-result v0 + + return v0 +.end method + +.method public isEdgeTouched(I)Z + .registers 5 + .param p1, "edges" # I + + .prologue + .line 1331 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + array-length v0, v2 + + .line 1332 + .local v0, "count":I + const/4 v1, 0x0 + + .local v1, "i":I + :goto_4 + if-ge v1, v0, :cond_11 + + .line 1333 + invoke-virtual {p0, p1, v1}, Landroid/support/v4/widget/ViewDragHelper;->isEdgeTouched(II)Z + + move-result v2 + + if-eqz v2, :cond_e + + .line 1334 + const/4 v2, 0x1 + + .line 1337 + :goto_d + return v2 + + .line 1332 + :cond_e + add-int/lit8 v1, v1, 0x1 + + goto :goto_4 + + .line 1337 + :cond_11 + const/4 v2, 0x0 + + goto :goto_d +.end method + +.method public isEdgeTouched(II)Z + .registers 4 + .param p1, "edges" # I + .param p2, "pointerId" # I + + .prologue + .line 1351 + invoke-virtual {p0, p2}, Landroid/support/v4/widget/ViewDragHelper;->isPointerDown(I)Z + + move-result v0 + + if-eqz v0, :cond_f + + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v0, v0, p2 + + and-int/2addr v0, p1 + + if-eqz v0, :cond_f + + const/4 v0, 0x1 + + :goto_e + return v0 + + :cond_f + const/4 v0, 0x0 + + goto :goto_e +.end method + +.method public isPointerDown(I)Z + .registers 5 + .param p1, "pointerId" # I + + .prologue + const/4 v0, 0x1 + + .line 860 + iget v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + shl-int v2, v0, p1 + + and-int/2addr v1, v2 + + if-eqz v1, :cond_9 + + :goto_8 + return v0 + + :cond_9 + const/4 v0, 0x0 + + goto :goto_8 +.end method + +.method public isViewUnder(Landroid/view/View;II)Z + .registers 6 + .param p1, "view" # Landroid/view/View; + .param p2, "x" # I + .param p3, "y" # I + + .prologue + const/4 v0, 0x0 + + .line 1410 + if-nez p1, :cond_4 + + .line 1413 + :cond_3 + :goto_3 + return v0 + + :cond_4 + invoke-virtual {p1}, Landroid/view/View;->getLeft()I + + move-result v1 + + if-lt p2, v1, :cond_3 + + invoke-virtual {p1}, Landroid/view/View;->getRight()I + + move-result v1 + + if-ge p2, v1, :cond_3 + + invoke-virtual {p1}, Landroid/view/View;->getTop()I + + move-result v1 + + if-lt p3, v1, :cond_3 + + invoke-virtual {p1}, Landroid/view/View;->getBottom()I + + move-result v1 + + if-ge p3, v1, :cond_3 + + const/4 v0, 0x1 + + goto :goto_3 +.end method + +.method public processTouchEvent(Landroid/view/MotionEvent;)V + .registers 23 + .param p1, "ev" # Landroid/view/MotionEvent; + + .prologue + .line 1046 + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getActionMasked(Landroid/view/MotionEvent;)I + + move-result v3 + + .line 1047 + .local v3, "action":I + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getActionIndex(Landroid/view/MotionEvent;)I + + move-result v4 + + .line 1049 + .local v4, "actionIndex":I + if-nez v3, :cond_d + + .line 1052 + invoke-virtual/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + .line 1055 + :cond_d + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + move-object/from16 v19, v0 + + if-nez v19, :cond_1f + + .line 1056 + invoke-static {}, Landroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker; + + move-result-object v19 + + move-object/from16 v0, v19 + + move-object/from16 v1, p0 + + iput-object v0, v1, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + .line 1058 + :cond_1f + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + move-object/from16 v19, v0 + + move-object/from16 v0, v19 + + move-object/from16 v1, p1 + + invoke-virtual {v0, v1}, Landroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V + + .line 1060 + packed-switch v3, :pswitch_data_2be + + .line 1194 + :cond_2f + :goto_2f + :pswitch_2f + return-void + + .line 1062 + :pswitch_30 + invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getX()F + + move-result v17 + + .line 1063 + .local v17, "x":F + invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getY()F + + move-result v18 + + .line 1064 + .local v18, "y":F + const/16 v19, 0x0 + + move-object/from16 v0, p1 + + move/from16 v1, v19 + + invoke-static {v0, v1}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1065 + .local v15, "pointerId":I + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v16 + + .line 1067 + .local v16, "toCapture":Landroid/view/View; + move-object/from16 v0, p0 + + move/from16 v1, v17 + + move/from16 v2, v18 + + invoke-direct {v0, v1, v2, v15}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 1072 + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + .line 1074 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + move-object/from16 v19, v0 + + aget v7, v19, v15 + + .line 1075 + .local v7, "edgesTouched":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v19, v0 + + and-int v19, v19, v7 + + if-eqz v19, :cond_2f + + .line 1076 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v20, v0 + + and-int v20, v20, v7 + + move-object/from16 v0, v19 + + move/from16 v1, v20 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto :goto_2f + + .line 1082 + .end local v7 # "edgesTouched":I + .end local v15 # "pointerId":I + .end local v16 # "toCapture":Landroid/view/View; + .end local v17 # "x":F + .end local v18 # "y":F + :pswitch_8e + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1083 + .restart local v15 # "pointerId":I + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1084 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1086 + .restart local v18 # "y":F + move-object/from16 v0, p0 + + move/from16 v1, v17 + + move/from16 v2, v18 + + invoke-direct {v0, v1, v2, v15}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 1089 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + if-nez v19, :cond_f5 + + .line 1092 + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v16 + + .line 1093 + .restart local v16 # "toCapture":Landroid/view/View; + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + .line 1095 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + move-object/from16 v19, v0 + + aget v7, v19, v15 + + .line 1096 + .restart local v7 # "edgesTouched":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v19, v0 + + and-int v19, v19, v7 + + if-eqz v19, :cond_2f + + .line 1097 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v20, v0 + + and-int v20, v20, v7 + + move-object/from16 v0, v19 + + move/from16 v1, v20 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto/16 :goto_2f + + .line 1099 + .end local v7 # "edgesTouched":I + .end local v16 # "toCapture":Landroid/view/View; + :cond_f5 + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->isCapturedViewUnder(II)Z + + move-result v19 + + if-eqz v19, :cond_2f + + .line 1104 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + move-object/from16 v1, v19 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + goto/16 :goto_2f + + .line 1110 + .end local v15 # "pointerId":I + .end local v17 # "x":F + .end local v18 # "y":F + :pswitch_11a + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_18e + + .line 1111 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v19, v0 + + move-object/from16 v0, p1 + + move/from16 v1, v19 + + invoke-static {v0, v1}, Landroid/support/v4/view/MotionEventCompat;->findPointerIndex(Landroid/view/MotionEvent;I)I + + move-result v12 + + .line 1112 + .local v12, "index":I + move-object/from16 v0, p1 + + invoke-static {v0, v12}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1113 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v12}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1114 + .restart local v18 # "y":F + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v20, v0 + + aget v19, v19, v20 + + sub-float v19, v17, v19 + + move/from16 v0, v19 + + float-to-int v10, v0 + + .line 1115 + .local v10, "idx":I + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v20, v0 + + aget v19, v19, v20 + + sub-float v19, v18, v19 + + move/from16 v0, v19 + + float-to-int v11, v0 + + .line 1117 + .local v11, "idy":I + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v19, v0 + + invoke-virtual/range {v19 .. v19}, Landroid/view/View;->getLeft()I + + move-result v19 + + add-int v19, v19, v10 + + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v20, v0 + + invoke-virtual/range {v20 .. v20}, Landroid/view/View;->getTop()I + + move-result v20 + + add-int v20, v20, v11 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-direct {v0, v1, v2, v10, v11}, Landroid/support/v4/widget/ViewDragHelper;->dragTo(IIII)V + + .line 1119 + invoke-direct/range {p0 .. p1}, Landroid/support/v4/widget/ViewDragHelper;->saveLastMotion(Landroid/view/MotionEvent;)V + + goto/16 :goto_2f + + .line 1122 + .end local v10 # "idx":I + .end local v11 # "idy":I + .end local v12 # "index":I + .end local v17 # "x":F + .end local v18 # "y":F + :cond_18e + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v14 + + .line 1123 + .local v14, "pointerCount":I + const/4 v8, 0x0 + + .local v8, "i":I + :goto_193 + if-ge v8, v14, :cond_1ce + + .line 1124 + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1125 + .restart local v15 # "pointerId":I + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1126 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1127 + .restart local v18 # "y":F + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + move-object/from16 v19, v0 + + aget v19, v19, v15 + + sub-float v5, v17, v19 + + .line 1128 + .local v5, "dx":F + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + move-object/from16 v19, v0 + + aget v19, v19, v15 + + sub-float v6, v18, v19 + + .line 1130 + .local v6, "dy":F + move-object/from16 v0, p0 + + invoke-direct {v0, v5, v6, v15}, Landroid/support/v4/widget/ViewDragHelper;->reportNewEdgeDrags(FFI)V + + .line 1131 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_1d3 + + .line 1142 + .end local v5 # "dx":F + .end local v6 # "dy":F + .end local v15 # "pointerId":I + .end local v17 # "x":F + .end local v18 # "y":F + :cond_1ce + invoke-direct/range {p0 .. p1}, Landroid/support/v4/widget/ViewDragHelper;->saveLastMotion(Landroid/view/MotionEvent;)V + + goto/16 :goto_2f + + .line 1136 + .restart local v5 # "dx":F + .restart local v6 # "dy":F + .restart local v15 # "pointerId":I + .restart local v17 # "x":F + .restart local v18 # "y":F + :cond_1d3 + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v16 + + .line 1137 + .restart local v16 # "toCapture":Landroid/view/View; + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-direct {v0, v1, v5, v6}, Landroid/support/v4/widget/ViewDragHelper;->checkTouchSlop(Landroid/view/View;FF)Z + + move-result v19 + + if-eqz v19, :cond_1fb + + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + move-result v19 + + if-nez v19, :cond_1ce + + .line 1123 + :cond_1fb + add-int/lit8 v8, v8, 0x1 + + goto :goto_193 + + .line 1148 + .end local v5 # "dx":F + .end local v6 # "dy":F + .end local v8 # "i":I + .end local v14 # "pointerCount":I + .end local v15 # "pointerId":I + .end local v16 # "toCapture":Landroid/view/View; + .end local v17 # "x":F + .end local v18 # "y":F + :pswitch_1fe + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1149 + .restart local v15 # "pointerId":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_280 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v19, v0 + + move/from16 v0, v19 + + if-ne v15, v0, :cond_280 + + .line 1151 + const/4 v13, -0x1 + + .line 1152 + .local v13, "newActivePointer":I + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v14 + + .line 1153 + .restart local v14 # "pointerCount":I + const/4 v8, 0x0 + + .restart local v8 # "i":I + :goto_222 + if-ge v8, v14, :cond_277 + + .line 1154 + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v9 + + .line 1155 + .local v9, "id":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v19, v0 + + move/from16 v0, v19 + + if-ne v9, v0, :cond_237 + + .line 1153 + :cond_234 + add-int/lit8 v8, v8, 0x1 + + goto :goto_222 + + .line 1160 + :cond_237 + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1161 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1162 + .restart local v18 # "y":F + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v19 + + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v20, v0 + + move-object/from16 v0, v19 + + move-object/from16 v1, v20 + + if-ne v0, v1, :cond_234 + + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + move-object/from16 v1, v19 + + invoke-virtual {v0, v1, v9}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + move-result v19 + + if-eqz v19, :cond_234 + + .line 1164 + move-object/from16 v0, p0 + + iget v13, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 1169 + .end local v9 # "id":I + .end local v17 # "x":F + .end local v18 # "y":F + :cond_277 + const/16 v19, -0x1 + + move/from16 v0, v19 + + if-ne v13, v0, :cond_280 + + .line 1171 + invoke-direct/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->releaseViewForPointerUp()V + + .line 1174 + .end local v8 # "i":I + .end local v13 # "newActivePointer":I + .end local v14 # "pointerCount":I + :cond_280 + move-object/from16 v0, p0 + + invoke-direct {v0, v15}, Landroid/support/v4/widget/ViewDragHelper;->clearMotionHistory(I)V + + goto/16 :goto_2f + + .line 1179 + .end local v15 # "pointerId":I + :pswitch_287 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_298 + + .line 1180 + invoke-direct/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->releaseViewForPointerUp()V + + .line 1182 + :cond_298 + invoke-virtual/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + goto/16 :goto_2f + + .line 1187 + :pswitch_29d + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_2b8 + + .line 1188 + const/16 v19, 0x0 + + const/16 v20, 0x0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-direct {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->dispatchViewReleased(FF)V + + .line 1190 + :cond_2b8 + invoke-virtual/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + goto/16 :goto_2f + + .line 1060 + nop + + :pswitch_data_2be + .packed-switch 0x0 + :pswitch_30 + :pswitch_287 + :pswitch_11a + :pswitch_29d + :pswitch_2f + :pswitch_8e + :pswitch_1fe + .end packed-switch +.end method + +.method setDragState(I)V + .registers 3 + .param p1, "state" # I + + .prologue + .line 864 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-eq v0, p1, :cond_10 + + .line 865 + iput p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + .line 866 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v0, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewDragStateChanged(I)V + + .line 867 + if-nez p1, :cond_10 + + .line 868 + const/4 v0, 0x0 + + iput-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + .line 871 + :cond_10 + return-void +.end method + +.method public setEdgeTrackingEnabled(I)V + .registers 2 + .param p1, "edgeFlags" # I + + .prologue + .line 437 + iput p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + .line 438 + return-void +.end method + +.method public setMinVelocity(F)V + .registers 2 + .param p1, "minVel" # F + + .prologue + .line 401 + iput p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + .line 402 + return-void +.end method + +.method public settleCapturedViewAt(II)Z + .registers 6 + .param p1, "finalLeft" # I + .param p2, "finalTop" # I + + .prologue + .line 557 + iget-boolean v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + if-nez v0, :cond_c + + .line 558 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot settleCapturedViewAt outside of a call to Callback#onViewReleased" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 562 + :cond_c + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v0, v1}, Landroid/support/v4/view/VelocityTrackerCompat;->getXVelocity(Landroid/view/VelocityTracker;I)F + + move-result v0 + + float-to-int v0, v0 + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v1, v2}, Landroid/support/v4/view/VelocityTrackerCompat;->getYVelocity(Landroid/view/VelocityTracker;I)F + + move-result v1 + + float-to-int v1, v1 + + invoke-direct {p0, p1, p2, v0, v1}, Landroid/support/v4/widget/ViewDragHelper;->forceSettleCapturedViewAt(IIII)Z + + move-result v0 + + return v0 +.end method + +.method public shouldInterceptTouchEvent(Landroid/view/MotionEvent;)Z + .registers 15 + .param p1, "ev" # Landroid/view/MotionEvent; + + .prologue + .line 939 + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getActionMasked(Landroid/view/MotionEvent;)I + + move-result v0 + + .line 940 + .local v0, "action":I + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getActionIndex(Landroid/view/MotionEvent;)I + + move-result v1 + + .line 942 + .local v1, "actionIndex":I + if-nez v0, :cond_d + + .line 945 + invoke-virtual {p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + .line 948 + :cond_d + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + if-nez v11, :cond_17 + + .line 949 + invoke-static {}, Landroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker; + + move-result-object v11 + + iput-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + .line 951 + :cond_17 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + invoke-virtual {v11, p1}, Landroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V + + .line 953 + packed-switch v0, :pswitch_data_e6 + + .line 1036 + :cond_1f + :goto_1f + :pswitch_1f + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x1 + + if-ne v11, v12, :cond_e3 + + const/4 v11, 0x1 + + :goto_25 + return v11 + + .line 955 + :pswitch_26 + invoke-virtual {p1}, Landroid/view/MotionEvent;->getX()F + + move-result v9 + + .line 956 + .local v9, "x":F + invoke-virtual {p1}, Landroid/view/MotionEvent;->getY()F + + move-result v10 + + .line 957 + .local v10, "y":F + const/4 v11, 0x0 + + invoke-static {p1, v11}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 958 + .local v7, "pointerId":I + invoke-direct {p0, v9, v10, v7}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 960 + float-to-int v11, v9 + + float-to-int v12, v10 + + invoke-virtual {p0, v11, v12}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v8 + + .line 963 + .local v8, "toCapture":Landroid/view/View; + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + if-ne v8, v11, :cond_48 + + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x2 + + if-ne v11, v12, :cond_48 + + .line 964 + invoke-virtual {p0, v8, v7}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + .line 967 + :cond_48 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v4, v11, v7 + + .line 968 + .local v4, "edgesTouched":I + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v11, v4 + + if-eqz v11, :cond_1f + + .line 969 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v12, v4 + + invoke-virtual {v11, v12, v7}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto :goto_1f + + .line 975 + .end local v4 # "edgesTouched":I + .end local v7 # "pointerId":I + .end local v8 # "toCapture":Landroid/view/View; + .end local v9 # "x":F + .end local v10 # "y":F + :pswitch_5a + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 976 + .restart local v7 # "pointerId":I + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v9 + + .line 977 + .restart local v9 # "x":F + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v10 + + .line 979 + .restart local v10 # "y":F + invoke-direct {p0, v9, v10, v7}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 982 + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-nez v11, :cond_7f + + .line 983 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v4, v11, v7 + + .line 984 + .restart local v4 # "edgesTouched":I + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v11, v4 + + if-eqz v11, :cond_1f + + .line 985 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v12, v4 + + invoke-virtual {v11, v12, v7}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto :goto_1f + + .line 987 + .end local v4 # "edgesTouched":I + :cond_7f + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x2 + + if-ne v11, v12, :cond_1f + + .line 989 + float-to-int v11, v9 + + float-to-int v12, v10 + + invoke-virtual {p0, v11, v12}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v8 + + .line 990 + .restart local v8 # "toCapture":Landroid/view/View; + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + if-ne v8, v11, :cond_1f + + .line 991 + invoke-virtual {p0, v8, v7}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + goto :goto_1f + + .line 999 + .end local v7 # "pointerId":I + .end local v8 # "toCapture":Landroid/view/View; + .end local v9 # "x":F + .end local v10 # "y":F + :pswitch_92 + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v6 + + .line 1000 + .local v6, "pointerCount":I + const/4 v5, 0x0 + + .local v5, "i":I + :goto_97 + if-ge v5, v6, :cond_b9 + + .line 1001 + invoke-static {p1, v5}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 1002 + .restart local v7 # "pointerId":I + invoke-static {p1, v5}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v9 + + .line 1003 + .restart local v9 # "x":F + invoke-static {p1, v5}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v10 + + .line 1004 + .restart local v10 # "y":F + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + aget v11, v11, v7 + + sub-float v2, v9, v11 + + .line 1005 + .local v2, "dx":F + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + aget v11, v11, v7 + + sub-float v3, v10, v11 + + .line 1007 + .local v3, "dy":F + invoke-direct {p0, v2, v3, v7}, Landroid/support/v4/widget/ViewDragHelper;->reportNewEdgeDrags(FFI)V + + .line 1008 + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x1 + + if-ne v11, v12, :cond_be + + .line 1019 + .end local v2 # "dx":F + .end local v3 # "dy":F + .end local v7 # "pointerId":I + .end local v9 # "x":F + .end local v10 # "y":F + :cond_b9 + invoke-direct {p0, p1}, Landroid/support/v4/widget/ViewDragHelper;->saveLastMotion(Landroid/view/MotionEvent;)V + + goto/16 :goto_1f + + .line 1013 + .restart local v2 # "dx":F + .restart local v3 # "dy":F + .restart local v7 # "pointerId":I + .restart local v9 # "x":F + .restart local v10 # "y":F + :cond_be + float-to-int v11, v9 + + float-to-int v12, v10 + + invoke-virtual {p0, v11, v12}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v8 + + .line 1014 + .restart local v8 # "toCapture":Landroid/view/View; + if-eqz v8, :cond_d2 + + invoke-direct {p0, v8, v2, v3}, Landroid/support/v4/widget/ViewDragHelper;->checkTouchSlop(Landroid/view/View;FF)Z + + move-result v11 + + if-eqz v11, :cond_d2 + + invoke-virtual {p0, v8, v7}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + move-result v11 + + if-nez v11, :cond_b9 + + .line 1000 + :cond_d2 + add-int/lit8 v5, v5, 0x1 + + goto :goto_97 + + .line 1024 + .end local v2 # "dx":F + .end local v3 # "dy":F + .end local v5 # "i":I + .end local v6 # "pointerCount":I + .end local v7 # "pointerId":I + .end local v8 # "toCapture":Landroid/view/View; + .end local v9 # "x":F + .end local v10 # "y":F + :pswitch_d5 + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 1025 + .restart local v7 # "pointerId":I + invoke-direct {p0, v7}, Landroid/support/v4/widget/ViewDragHelper;->clearMotionHistory(I)V + + goto/16 :goto_1f + + .line 1031 + .end local v7 # "pointerId":I + :pswitch_de + invoke-virtual {p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + goto/16 :goto_1f + + .line 1036 + :cond_e3 + const/4 v11, 0x0 + + goto/16 :goto_25 + + .line 953 + :pswitch_data_e6 + .packed-switch 0x0 + :pswitch_26 + :pswitch_de + :pswitch_92 + :pswitch_de + :pswitch_1f + :pswitch_5a + :pswitch_d5 + .end packed-switch +.end method + +.method public smoothSlideViewTo(Landroid/view/View;II)Z + .registers 6 + .param p1, "child" # Landroid/view/View; + .param p2, "finalLeft" # I + .param p3, "finalTop" # I + + .prologue + const/4 v1, 0x0 + + .line 539 + iput-object p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + .line 540 + const/4 v0, -0x1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 542 + invoke-direct {p0, p2, p3, v1, v1}, Landroid/support/v4/widget/ViewDragHelper;->forceSettleCapturedViewAt(IIII)Z + + move-result v0 + + return v0 +.end method + +.method tryCaptureViewForDrag(Landroid/view/View;I)Z + .registers 5 + .param p1, "toCapture" # Landroid/view/View; + .param p2, "pointerId" # I + + .prologue + const/4 v0, 0x1 + + .line 883 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + if-ne p1, v1, :cond_a + + iget v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + if-ne v1, p2, :cond_a + + .line 892 + :goto_9 + return v0 + + .line 887 + :cond_a + if-eqz p1, :cond_1a + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v1, p1, p2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->tryCaptureView(Landroid/view/View;I)Z + + move-result v1 + + if-eqz v1, :cond_1a + + .line 888 + iput p2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 889 + invoke-virtual {p0, p1, p2}, Landroid/support/v4/widget/ViewDragHelper;->captureChildView(Landroid/view/View;I)V + + goto :goto_9 + + .line 892 + :cond_1a + const/4 v0, 0x0 + + goto :goto_9 +.end method diff --git a/samples/Smali/WbxmlSerializer.smali b/samples/Smali/WbxmlSerializer.smali new file mode 100644 index 00000000..2d870d8c --- /dev/null +++ b/samples/Smali/WbxmlSerializer.smali @@ -0,0 +1,1863 @@ +.class public Lorg/kxml2/wap/WbxmlSerializer; +.super Ljava/lang/Object; +.source "WbxmlSerializer.java" + +# interfaces +.implements Lorg/xmlpull/v1/XmlSerializer; + + +# instance fields +.field private attrPage:I + +.field attrStartTable:Ljava/util/Hashtable; + +.field attrValueTable:Ljava/util/Hashtable; + +.field attributes:Ljava/util/Vector; + +.field buf:Ljava/io/ByteArrayOutputStream; + +.field depth:I + +.field private encoding:Ljava/lang/String; + +.field private headerSent:Z + +.field name:Ljava/lang/String; + +.field namespace:Ljava/lang/String; + +.field out:Ljava/io/OutputStream; + +.field pending:Ljava/lang/String; + +.field stringTable:Ljava/util/Hashtable; + +.field stringTableBuf:Ljava/io/ByteArrayOutputStream; + +.field private tagPage:I + +.field tagTable:Ljava/util/Hashtable; + + +# direct methods +.method public constructor ()V + .locals 1 + + .prologue + .line 35 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 38 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + .line 42 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + .line 43 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + .line 49 + new-instance v0, Ljava/util/Vector; + + invoke-direct {v0}, Ljava/util/Vector;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + .line 51 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrStartTable:Ljava/util/Hashtable; + + .line 52 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrValueTable:Ljava/util/Hashtable; + + .line 53 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagTable:Ljava/util/Hashtable; + + .line 60 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + return-void +.end method + +.method static writeInt(Ljava/io/OutputStream;I)V + .locals 4 + .param p0, "out" # Ljava/io/OutputStream; + .param p1, "i" # I + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 447 + const/4 v3, 0x5 + + new-array v0, v3, [B + + .line 448 + .local v0, "buf":[B + const/4 v1, 0x0 + + .line 451 + .local v1, "idx":I + :goto_0 + add-int/lit8 v2, v1, 0x1 + + .end local v1 # "idx":I + .local v2, "idx":I + and-int/lit8 v3, p1, 0x7f + + int-to-byte v3, v3 + + aput-byte v3, v0, v1 + + .line 452 + shr-int/lit8 p1, p1, 0x7 + + .line 454 + if-nez p1, :cond_1 + + move v1, v2 + + .line 456 + .end local v2 # "idx":I + .restart local v1 # "idx":I + :goto_1 + const/4 v3, 0x1 + + if-le v1, v3, :cond_0 + + .line 457 + add-int/lit8 v1, v1, -0x1 + + aget-byte v3, v0, v1 + + or-int/lit16 v3, v3, 0x80 + + invoke-virtual {p0, v3}, Ljava/io/OutputStream;->write(I)V + + goto :goto_1 + + .line 459 + :cond_0 + const/4 v3, 0x0 + + aget-byte v3, v0, v3 + + invoke-virtual {p0, v3}, Ljava/io/OutputStream;->write(I)V + + .line 460 + return-void + + .end local v1 # "idx":I + .restart local v2 # "idx":I + :cond_1 + move v1, v2 + + .end local v2 # "idx":I + .restart local v1 # "idx":I + goto :goto_0 +.end method + +.method private writeStr(Ljava/lang/String;)V + .locals 10 + .param p1, "text" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/16 v9, 0x41 + + const/16 v8, 0x20 + + const/4 v7, 0x0 + + const/16 v6, 0x83 + + .line 349 + const/4 v2, 0x0 + + .line 350 + .local v2, "p0":I + const/4 v0, 0x0 + + .line 351 + .local v0, "lastCut":I + invoke-virtual {p1}, Ljava/lang/String;->length()I + + move-result v1 + + .line 353 + .local v1, "len":I + iget-boolean v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + if-eqz v4, :cond_3 + + .line 354 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {p0, v4, p1}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + + .line 394 + :cond_0 + :goto_0 + return-void + + .line 367 + .local v3, "p1":I + :cond_1 + sub-int v4, v3, v2 + + const/16 v5, 0xa + + if-le v4, v5, :cond_2 + + .line 368 + if-le v2, v0, :cond_5 + + add-int/lit8 v4, v2, -0x1 + + invoke-virtual {p1, v4}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-ne v4, v8, :cond_5 + + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {p1, v2, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v4 + + if-nez v4, :cond_5 + + .line 370 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 371 + invoke-virtual {p1, v0, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + invoke-direct {p0, v4, v7}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 385 + :goto_1 + move v0, v3 + + .line 387 + :cond_2 + move v2, v3 + + .line 358 + .end local v3 # "p1":I + :cond_3 + if-ge v2, v1, :cond_8 + + .line 359 + :goto_2 + if-ge v2, v1, :cond_4 + + invoke-virtual {p1, v2}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-ge v4, v9, :cond_4 + + .line 360 + add-int/lit8 v2, v2, 0x1 + + goto :goto_2 + + .line 362 + :cond_4 + move v3, v2 + + .line 363 + .restart local v3 # "p1":I + :goto_3 + if-ge v3, v1, :cond_1 + + invoke-virtual {p1, v3}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-lt v4, v9, :cond_1 + + .line 364 + add-int/lit8 v3, v3, 0x1 + + goto :goto_3 + + .line 374 + :cond_5 + if-le v2, v0, :cond_6 + + add-int/lit8 v4, v2, -0x1 + + invoke-virtual {p1, v4}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-ne v4, v8, :cond_6 + + .line 375 + add-int/lit8 v2, v2, -0x1 + + .line 378 + :cond_6 + if-le v2, v0, :cond_7 + + .line 379 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 380 + invoke-virtual {p1, v0, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + invoke-direct {p0, v4, v7}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 382 + :cond_7 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 383 + invoke-virtual {p1, v2, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + const/4 v5, 0x1 + + invoke-direct {p0, v4, v5}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + goto :goto_1 + + .line 390 + .end local v3 # "p1":I + :cond_8 + if-ge v0, v1, :cond_0 + + .line 391 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 392 + invoke-virtual {p1, v0, v1}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + invoke-direct {p0, v4, v7}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + goto :goto_0 +.end method + +.method private final writeStrT(Ljava/lang/String;Z)V + .locals 3 + .param p1, "s" # Ljava/lang/String; + .param p2, "mayPrependSpace" # Z + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 470 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {v1, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Ljava/lang/Integer; + + .line 471 + .local v0, "idx":Ljava/lang/Integer; + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + if-nez v0, :cond_0 + + invoke-virtual {p0, p1, p2}, Lorg/kxml2/wap/WbxmlSerializer;->addToStringTable(Ljava/lang/String;Z)I + + move-result v1 + + :goto_0 + invoke-static {v2, v1}, Lorg/kxml2/wap/WbxmlSerializer;->writeInt(Ljava/io/OutputStream;I)V + + .line 474 + return-void + + .line 471 + :cond_0 + invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I + + move-result v1 + + goto :goto_0 +.end method + + +# virtual methods +.method public addToStringTable(Ljava/lang/String;Z)I + .locals 9 + .param p1, "s" # Ljava/lang/String; + .param p2, "mayPrependSpace" # Z + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v8, 0x1 + + const/4 v5, 0x0 + + const/16 v7, 0x20 + + .line 485 + iget-boolean v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + if-eqz v3, :cond_0 + + .line 486 + new-instance v3, Ljava/io/IOException; + + const-string v4, "stringtable sent" + + invoke-direct {v3, v4}, Ljava/io/IOException;->(Ljava/lang/String;)V + + throw v3 + + .line 489 + :cond_0 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3}, Ljava/io/ByteArrayOutputStream;->size()I + + move-result v0 + + .line 490 + .local v0, "i":I + move v2, v0 + + .line 491 + .local v2, "offset":I + invoke-virtual {p1, v5}, Ljava/lang/String;->charAt(I)C + + move-result v3 + + const/16 v4, 0x30 + + if-lt v3, v4, :cond_1 + + if-eqz p2, :cond_1 + + .line 492 + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object p1 + + .line 493 + add-int/lit8 v2, v2, 0x1 + + .line 496 + :cond_1 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + new-instance v4, Ljava/lang/Integer; + + invoke-direct {v4, v0}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, p1, v4}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 497 + invoke-virtual {p1, v5}, Ljava/lang/String;->charAt(I)C + + move-result v3 + + if-ne v3, v7, :cond_2 + + .line 498 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {p1, v8}, Ljava/lang/String;->substring(I)Ljava/lang/String; + + move-result-object v4 + + new-instance v5, Ljava/lang/Integer; + + add-int/lit8 v6, v0, 0x1 + + invoke-direct {v5, v6}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, v4, v5}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 500 + :cond_2 + invoke-virtual {p1, v7}, Ljava/lang/String;->lastIndexOf(I)I + + move-result v1 + + .line 501 + .local v1, "j":I + if-le v1, v8, :cond_3 + + .line 502 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {p1, v1}, Ljava/lang/String;->substring(I)Ljava/lang/String; + + move-result-object v4 + + new-instance v5, Ljava/lang/Integer; + + add-int v6, v0, v1 + + invoke-direct {v5, v6}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, v4, v5}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 503 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + add-int/lit8 v4, v1, 0x1 + + invoke-virtual {p1, v4}, Ljava/lang/String;->substring(I)Ljava/lang/String; + + move-result-object v4 + + new-instance v5, Ljava/lang/Integer; + + add-int v6, v0, v1 + + add-int/lit8 v6, v6, 0x1 + + invoke-direct {v5, v6}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, v4, v5}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 506 + :cond_3 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {p0, v3, p1}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + + .line 507 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3}, Ljava/io/ByteArrayOutputStream;->flush()V + + .line 508 + return v2 +.end method + +.method public attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 1 + .param p1, "namespace" # Ljava/lang/String; + .param p2, "name" # Ljava/lang/String; + .param p3, "value" # Ljava/lang/String; + + .prologue + .line 69 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v0, p2}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V + + .line 70 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v0, p3}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V + + .line 71 + return-object p0 +.end method + +.method public cdsect(Ljava/lang/String;)V + .locals 0 + .param p1, "cdsect" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 76 + invoke-virtual {p0, p1}, Lorg/kxml2/wap/WbxmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + + .line 77 + return-void +.end method + +.method public checkPending(Z)V + .locals 8 + .param p1, "degenerated" # Z + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v4, 0x4 + + const/4 v7, 0x1 + + const/4 v6, 0x0 + + .line 180 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + if-nez v3, :cond_0 + + .line 240 + :goto_0 + return-void + + .line 183 + :cond_0 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3}, Ljava/util/Vector;->size()I + + move-result v2 + + .line 185 + .local v2, "len":I + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagTable:Ljava/util/Hashtable; + + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + invoke-virtual {v3, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, [I + + move-object v1, v3 + + check-cast v1, [I + + .line 188 + .local v1, "idx":[I + if-nez v1, :cond_4 + + .line 189 + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + if-nez v2, :cond_2 + + if-eqz p1, :cond_1 + + move v3, v4 + + :goto_1 + invoke-virtual {v5, v3}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 193 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + invoke-direct {p0, v3, v6}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 205 + :goto_2 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_3 + if-ge v0, v2, :cond_d + + .line 206 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrStartTable:Ljava/util/Hashtable; + + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v5, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v5 + + invoke-virtual {v3, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, [I + + move-object v1, v3 + + check-cast v1, [I + + .line 208 + if-nez v1, :cond_9 + + .line 209 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v4}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 210 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, Ljava/lang/String; + + invoke-direct {p0, v3, v6}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 220 + :goto_4 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrValueTable:Ljava/util/Hashtable; + + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + add-int/lit8 v0, v0, 0x1 + + invoke-virtual {v5, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v5 + + invoke-virtual {v3, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, [I + + move-object v1, v3 + + check-cast v1, [I + + .line 221 + if-nez v1, :cond_b + + .line 222 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, Ljava/lang/String; + + invoke-direct {p0, v3}, Lorg/kxml2/wap/WbxmlSerializer;->writeStr(Ljava/lang/String;)V + + .line 232 + :goto_5 + add-int/lit8 v0, v0, 0x1 + + goto :goto_3 + + .line 189 + .end local v0 # "i":I + :cond_1 + const/16 v3, 0x44 + + goto :goto_1 + + :cond_2 + if-eqz p1, :cond_3 + + const/16 v3, 0x84 + + goto :goto_1 + + :cond_3 + const/16 v3, 0xc4 + + goto :goto_1 + + .line 195 + :cond_4 + aget v3, v1, v6 + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagPage:I + + if-eq v3, v5, :cond_5 + + .line 196 + aget v3, v1, v6 + + iput v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagPage:I + + .line 197 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 198 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagPage:I + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 200 + :cond_5 + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + if-nez v2, :cond_7 + + if-eqz p1, :cond_6 + + aget v3, v1, v7 + + :goto_6 + invoke-virtual {v5, v3}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_2 + + :cond_6 + aget v3, v1, v7 + + or-int/lit8 v3, v3, 0x40 + + goto :goto_6 + + :cond_7 + if-eqz p1, :cond_8 + + aget v3, v1, v7 + + or-int/lit16 v3, v3, 0x80 + + goto :goto_6 + + :cond_8 + aget v3, v1, v7 + + or-int/lit16 v3, v3, 0xc0 + + goto :goto_6 + + .line 213 + .restart local v0 # "i":I + :cond_9 + aget v3, v1, v6 + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + if-eq v3, v5, :cond_a + + .line 214 + aget v3, v1, v6 + + iput v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + .line 215 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 216 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 218 + :cond_a + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + aget v5, v1, v7 + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_4 + + .line 225 + :cond_b + aget v3, v1, v6 + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + if-eq v3, v5, :cond_c + + .line 226 + aget v3, v1, v6 + + iput v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + .line 227 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 228 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 230 + :cond_c + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + aget v5, v1, v7 + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_5 + + .line 235 + :cond_d + if-lez v2, :cond_e + + .line 236 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v7}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 238 + :cond_e + const/4 v3, 0x0 + + iput-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + .line 239 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3}, Ljava/util/Vector;->removeAllElements()V + + goto/16 :goto_0 +.end method + +.method public comment(Ljava/lang/String;)V + .locals 0 + .param p1, "comment" # Ljava/lang/String; + + .prologue + .line 84 + return-void +.end method + +.method public docdecl(Ljava/lang/String;)V + .locals 2 + .param p1, "docdecl" # Ljava/lang/String; + + .prologue + .line 90 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "Cannot write docdecl for WBXML" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public endDocument()V + .locals 0 + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 158 + invoke-virtual {p0}, Lorg/kxml2/wap/WbxmlSerializer;->flush()V + + .line 159 + return-void +.end method + +.method public endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 2 + .param p1, "namespace" # Ljava/lang/String; + .param p2, "name" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v1, 0x1 + + .line 400 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + if-eqz v0, :cond_0 + + .line 401 + invoke-virtual {p0, v1}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 405 + :goto_0 + iget v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + add-int/lit8 v0, v0, -0x1 + + iput v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + .line 406 + return-object p0 + + .line 403 + :cond_0 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v0, v1}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_0 +.end method + +.method public entityRef(Ljava/lang/String;)V + .locals 2 + .param p1, "er" # Ljava/lang/String; + + .prologue + .line 97 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "EntityReference not supported for WBXML" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public flush()V + .locals 2 + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 167 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 169 + iget-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + if-nez v0, :cond_0 + + .line 170 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->size()I + + move-result v1 + + invoke-static {v0, v1}, Lorg/kxml2/wap/WbxmlSerializer;->writeInt(Ljava/io/OutputStream;I)V + + .line 171 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write([B)V + + .line 172 + const/4 v0, 0x1 + + iput-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + .line 175 + :cond_0 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write([B)V + + .line 176 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->reset()V + + .line 177 + return-void +.end method + +.method public getDepth()I + .locals 1 + + .prologue + .line 104 + iget v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + return v0 +.end method + +.method public getFeature(Ljava/lang/String;)Z + .locals 1 + .param p1, "name" # Ljava/lang/String; + + .prologue + .line 111 + const/4 v0, 0x0 + + return v0 +.end method + +.method public getName()Ljava/lang/String; + .locals 1 + + .prologue + .line 129 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + return-object v0 +.end method + +.method public getNamespace()Ljava/lang/String; + .locals 1 + + .prologue + .line 120 + const/4 v0, 0x0 + + return-object v0 +.end method + +.method public getPrefix(Ljava/lang/String;Z)Ljava/lang/String; + .locals 2 + .param p1, "nsp" # Ljava/lang/String; + .param p2, "create" # Z + + .prologue + .line 136 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public getProperty(Ljava/lang/String;)Ljava/lang/Object; + .locals 1 + .param p1, "name" # Ljava/lang/String; + + .prologue + .line 145 + const/4 v0, 0x0 + + return-object v0 +.end method + +.method public ignorableWhitespace(Ljava/lang/String;)V + .locals 0 + .param p1, "sp" # Ljava/lang/String; + + .prologue + .line 149 + return-void +.end method + +.method public processingInstruction(Ljava/lang/String;)V + .locals 2 + .param p1, "pi" # Ljava/lang/String; + + .prologue + .line 246 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "PI NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setAttrStartTable(I[Ljava/lang/String;)V + .locals 4 + .param p1, "page" # I + .param p2, "attrStartTable" # [Ljava/lang/String; + + .prologue + .line 536 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_0 + array-length v2, p2 + + if-ge v0, v2, :cond_1 + + .line 537 + aget-object v2, p2, v0 + + if-eqz v2, :cond_0 + + .line 538 + const/4 v2, 0x2 + + new-array v1, v2, [I + + const/4 v2, 0x0 + + aput p1, v1, v2 + + const/4 v2, 0x1 + + add-int/lit8 v3, v0, 0x5 + + aput v3, v1, v2 + + .line 539 + .local v1, "idx":[I + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrStartTable:Ljava/util/Hashtable; + + aget-object v3, p2, v0 + + invoke-virtual {v2, v3, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 536 + .end local v1 # "idx":[I + :cond_0 + add-int/lit8 v0, v0, 0x1 + + goto :goto_0 + + .line 542 + :cond_1 + return-void +.end method + +.method public setAttrValueTable(I[Ljava/lang/String;)V + .locals 4 + .param p1, "page" # I + .param p2, "attrValueTable" # [Ljava/lang/String; + + .prologue + .line 552 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_0 + array-length v2, p2 + + if-ge v0, v2, :cond_1 + + .line 553 + aget-object v2, p2, v0 + + if-eqz v2, :cond_0 + + .line 554 + const/4 v2, 0x2 + + new-array v1, v2, [I + + const/4 v2, 0x0 + + aput p1, v1, v2 + + const/4 v2, 0x1 + + add-int/lit16 v3, v0, 0x85 + + aput v3, v1, v2 + + .line 555 + .local v1, "idx":[I + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrValueTable:Ljava/util/Hashtable; + + aget-object v3, p2, v0 + + invoke-virtual {v2, v3, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 552 + .end local v1 # "idx":[I + :cond_0 + add-int/lit8 v0, v0, 0x1 + + goto :goto_0 + + .line 558 + :cond_1 + return-void +.end method + +.method public setFeature(Ljava/lang/String;Z)V + .locals 3 + .param p1, "name" # Ljava/lang/String; + .param p2, "value" # Z + + .prologue + .line 253 + new-instance v0, Ljava/lang/IllegalArgumentException; + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + const-string v2, "unknown feature " + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V + .locals 1 + .param p1, "out" # Ljava/io/OutputStream; + .param p2, "encoding" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 268 + if-nez p2, :cond_0 + + const-string p2, "UTF-8" + + .end local p2 # "encoding":Ljava/lang/String; + :cond_0 + iput-object p2, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + .line 269 + iput-object p1, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + .line 271 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + .line 272 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + .line 273 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + .line 276 + return-void +.end method + +.method public setOutput(Ljava/io/Writer;)V + .locals 2 + .param p1, "writer" # Ljava/io/Writer; + + .prologue + .line 260 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "Wbxml requires an OutputStream!" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setPrefix(Ljava/lang/String;Ljava/lang/String;)V + .locals 2 + .param p1, "prefix" # Ljava/lang/String; + .param p2, "nsp" # Ljava/lang/String; + + .prologue + .line 282 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setProperty(Ljava/lang/String;Ljava/lang/Object;)V + .locals 3 + .param p1, "property" # Ljava/lang/String; + .param p2, "value" # Ljava/lang/Object; + + .prologue + .line 289 + new-instance v0, Ljava/lang/IllegalArgumentException; + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + const-string v2, "unknown property " + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setTagTable(I[Ljava/lang/String;)V + .locals 4 + .param p1, "page" # I + .param p2, "tagTable" # [Ljava/lang/String; + + .prologue + .line 518 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_0 + array-length v2, p2 + + if-ge v0, v2, :cond_1 + + .line 519 + aget-object v2, p2, v0 + + if-eqz v2, :cond_0 + + .line 520 + const/4 v2, 0x2 + + new-array v1, v2, [I + + const/4 v2, 0x0 + + aput p1, v1, v2 + + const/4 v2, 0x1 + + add-int/lit8 v3, v0, 0x5 + + aput v3, v1, v2 + + .line 521 + .local v1, "idx":[I + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagTable:Ljava/util/Hashtable; + + aget-object v3, p2, v0 + + invoke-virtual {v2, v3, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 518 + .end local v1 # "idx":[I + :cond_0 + add-int/lit8 v0, v0, 0x1 + + goto :goto_0 + + .line 524 + :cond_1 + return-void +.end method + +.method public startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V + .locals 2 + .param p1, "encoding" # Ljava/lang/String; + .param p2, "standalone" # Ljava/lang/Boolean; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 299 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/4 v1, 0x3 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + .line 301 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/4 v1, 0x1 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + .line 305 + if-eqz p1, :cond_0 + + .line 306 + iput-object p1, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + .line 309 + :cond_0 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + invoke-virtual {v0}, Ljava/lang/String;->toUpperCase()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "UTF-8" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_1 + + .line 310 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/16 v1, 0x6a + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + .line 316 + :goto_0 + return-void + + .line 311 + :cond_1 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + invoke-virtual {v0}, Ljava/lang/String;->toUpperCase()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "ISO-8859-1" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_2 + + .line 312 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/4 v1, 0x4 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + goto :goto_0 + + .line 314 + :cond_2 + new-instance v0, Ljava/io/UnsupportedEncodingException; + + invoke-direct {v0, p1}, Ljava/io/UnsupportedEncodingException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 2 + .param p1, "namespace" # Ljava/lang/String; + .param p2, "name" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 321 + if-eqz p1, :cond_0 + + const-string v0, "" + + invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-nez v0, :cond_0 + + .line 322 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "NSP NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 + + .line 326 + :cond_0 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 327 + iput-object p2, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + .line 328 + iget v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + add-int/lit8 v0, v0, 0x1 + + iput v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + .line 330 + return-object p0 +.end method + +.method public text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 1 + .param p1, "text" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 340 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 341 + invoke-direct {p0, p1}, Lorg/kxml2/wap/WbxmlSerializer;->writeStr(Ljava/lang/String;)V + + .line 342 + return-object p0 +.end method + +.method public text([CII)Lorg/xmlpull/v1/XmlSerializer; + .locals 1 + .param p1, "chars" # [C + .param p2, "start" # I + .param p3, "len" # I + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 334 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 335 + new-instance v0, Ljava/lang/String; + + invoke-direct {v0, p1, p2, p3}, Ljava/lang/String;->([CII)V + + invoke-direct {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->writeStr(Ljava/lang/String;)V + + .line 336 + return-object p0 +.end method + +.method writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + .locals 2 + .param p1, "out" # Ljava/io/OutputStream; + .param p2, "s" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 463 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + invoke-virtual {p2, v1}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B + + move-result-object v0 + + .line 464 + .local v0, "data":[B + invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write([B)V + + .line 465 + const/4 v1, 0x0 + + invoke-virtual {p1, v1}, Ljava/io/OutputStream;->write(I)V + + .line 466 + return-void +.end method + +.method public writeWapExtension(ILjava/lang/Object;)V + .locals 3 + .param p1, "type" # I + .param p2, "data" # Ljava/lang/Object; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v2, 0x0 + + .line 413 + invoke-virtual {p0, v2}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 414 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1, p1}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 415 + sparse-switch p1, :sswitch_data_0 + + .line 440 + new-instance v1, Ljava/lang/IllegalArgumentException; + + invoke-direct {v1}, Ljava/lang/IllegalArgumentException;->()V + + throw v1 + + .line 422 + :sswitch_0 + check-cast p2, [B + + .end local p2 # "data":Ljava/lang/Object; + move-object v0, p2 + + check-cast v0, [B + + .line 423 + .local v0, "bytes":[B + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + array-length v2, v0 + + invoke-static {v1, v2}, Lorg/kxml2/wap/WbxmlSerializer;->writeInt(Ljava/io/OutputStream;I)V + + .line 424 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1, v0}, Ljava/io/ByteArrayOutputStream;->write([B)V + + .line 442 + .end local v0 # "bytes":[B + :goto_0 + :sswitch_1 + return-void + + .line 430 + .restart local p2 # "data":Ljava/lang/Object; + :sswitch_2 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + check-cast p2, Ljava/lang/String; + + .end local p2 # "data":Ljava/lang/Object; + invoke-virtual {p0, v1, p2}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + + goto :goto_0 + + .line 436 + .restart local p2 # "data":Ljava/lang/Object; + :sswitch_3 + check-cast p2, Ljava/lang/String; + + .end local p2 # "data":Ljava/lang/Object; + invoke-direct {p0, p2, v2}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + goto :goto_0 + + .line 415 + nop + + :sswitch_data_0 + .sparse-switch + 0x40 -> :sswitch_2 + 0x41 -> :sswitch_2 + 0x42 -> :sswitch_2 + 0x80 -> :sswitch_3 + 0x81 -> :sswitch_3 + 0x82 -> :sswitch_3 + 0xc0 -> :sswitch_1 + 0xc1 -> :sswitch_1 + 0xc2 -> :sswitch_1 + 0xc3 -> :sswitch_0 + .end sparse-switch +.end method diff --git a/samples/SourcePawn/Check.inc b/samples/SourcePawn/Check.inc new file mode 100644 index 00000000..518ed70d --- /dev/null +++ b/samples/SourcePawn/Check.inc @@ -0,0 +1,246 @@ +// Checkpoint Manager +// (c) João Pedro Lopes, All right's reserved +// +// Feel free to change any line above, as long as you post the 'fix' / 'patch' at the forum +// and send a copy to jplopes@live.com.pt + +/* natives + native CreateCheckpoint(ownerid, chpid, Float:posX, Float:posY, Float:posZ, Float:size); // Creates a checkpoint + native SetCheckpointInterior(chpid, interiorid); // Changes the checkpoint interior + native SetCheckpointVirtualWorld(chpid, VirtualWorldID); // Changes the Checkpoint vWorld + native ToggleCheckpointActive(chpid, bool:active); // Deactivates / Activates the checkpoint + native ChangeCheckpointOwner(chpid, owner); // Change the checkpoint owner + native RemoveCheckpoint(chpid); // Removes the specified checkpoint + native StartCheckpointSeeking(); // Starts seeking for each individual + native StopCheckpointSeeking(); // Stops the system + native VerifyCheckpoint(playerid); // Place this at OnPlayerEnterCheckpoint +*/ + +// Function Forwards +forward public OnCheckpointEnter(playerid, checkpointid); + +#if defined _CHECKPOINT_MANAGER_INCLUDED + #endinput +#endif + +#define _CHECKPOINT_MANAGER_INCLUDED +#pragma library CheckpointManager + +#include + +#define MAX_CHECKPOINTS 200 +#define CHECKPOINT_SEEKER_DELAY 300 + +#define GLOBAL_OWNER_ID -1 + + +// CHECKPOINT ENUMERATION +enum _checkpointEnum{ + _chp_populated, // Is this slot of the memory populated? + + _chp_id, // The ID of the checkpoint + _chp_owner, // The ID of the player who this checkpoint is visible too + + Float:_chp_posX, // The X position of this checkpoint + Float:_chp_posY, // The Y position of this checkpoint + Float:_chp_posZ, // The Z position of this checkpoint + Float:_chp_size, // The checkpoint size + Float:_chp_viewDistance, // The checkpoint view distance + + bool:_chp_active, // Is this checkpoint active? + + _chp_interior_id, // The interior id of this checkpoint + _chp_world_id // The world id of this checkpoint +}; + +// DATA ARRAYS +new _checkpoints[MAX_CHECKPOINTS][_checkpointEnum]; +new _p_VisibleCheckpoint[MAX_PLAYERS]; +new _chp_manager_timer_id; + +// DATA VARIABLES +new _totalCheckpoints; + +// -------------------------------------------------------------------------------------------------------- +// Creates a new checkpoint with some initial data +stock CreateCheckpoint(__ownerid, __chpid, Float:__posX, Float:__posY, Float:__posZ, Float:__size){ + // Max checkpoint reached? + if(_totalCheckpoints == MAX_CHECKPOINTS) return 0; + + // First checkpoint? Setting everything to unpopulated + if(!_totalCheckpoints){ + for(new i; i < MAX_PLAYERS; i++) _p_VisibleCheckpoint[i] = -1; + for(new i; i < MAX_CHECKPOINTS; i++){ + _checkpoints[i][_chp_populated] = false; + } + + // Sending the Initialization Info + printf("[Checkpoint Manager : Version 0.1.1b] System Initialized...", __chpid); + } + + // Getting the first open slot + new _slot; + for(new i = 0; i < MAX_CHECKPOINTS; i++){ + if(!_checkpoints[i][_chp_populated]){ + _slot = i; + break; + } + } + + // Adding the new checkpoint + _checkpoints[_slot][_chp_populated] = true; + _checkpoints[_slot][_chp_id] = __chpid; + _checkpoints[_slot][_chp_owner] = __ownerid; + _checkpoints[_slot][_chp_posX] = __posX; + _checkpoints[_slot][_chp_posY] = __posY; + _checkpoints[_slot][_chp_posZ] = __posZ; + _checkpoints[_slot][_chp_size] = __size; + _checkpoints[_slot][_chp_viewDistance] = 50.0; + _checkpoints[_slot][_chp_active] = true; + _checkpoints[_slot][_chp_interior_id] = 0; + _checkpoints[_slot][_chp_world_id] = 0; + + printf("[Checkpoint Manager] Checkpoint created (%d) at slot %d", __chpid, _slot); + printf("Checkpoint Position: { %f, %f, %f }", _checkpoints[_slot][_chp_posX], _checkpoints[_slot][_chp_posY], _checkpoints[_slot][_chp_posZ]); + + _totalCheckpoints++; + return 1; +} + +//--------------------------------------------------------------------------------------------- +stock SetCheckpointInterior(__chpid, __interiorid){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + // Valid slot? + _checkpoints[_slot][_chp_interior_id] = __interiorid; + return 1; + } + return 0; +} + +//--------------------------------------------------------------------------------------------- +stock SetCheckpointVirtualWorld(__chpid, __virtual_world_id){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + _checkpoints[_slot][_chp_world_id] = __virtual_world_id; + return 1; + } + return 0; +} + +stock ToggleCheckpointActive(__chpid, bool:__active){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + _checkpoints[_slot][_chp_active] = __active; + return 1; + } + return 0; +} + +stock ChangeCheckpointOwner(__chpid, __owner){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + _checkpoints[_slot][_chp_owner] = __owner; + return 1; + } + return 0; +} + +stock RemoveCheckpoint(__chpid){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + // Deleting the checkpoint + _checkpoints[_slot][_chp_populated] = false; + _checkpoints[_slot][_chp_id] = -1; + _checkpoints[_slot][_chp_owner] = 255; + _checkpoints[_slot][_chp_posX] = -1; + _checkpoints[_slot][_chp_posY] = -1; + _checkpoints[_slot][_chp_posZ] = -1; + _checkpoints[_slot][_chp_size] = -1; + _checkpoints[_slot][_chp_viewDistance] = -1; + _checkpoints[_slot][_chp_active] = false; + _checkpoints[_slot][_chp_interior_id] = -1; + _checkpoints[_slot][_chp_world_id] = -1; + _totalCheckpoints--; + printf("\n[Checkpoint Manager] Checkpoint removed (ID: %d)", __chpid); + return 1; + } + return 0; +} + +//--------------------------------------------------------------------------------------------- +// Gets the checkpoint slot by id +stock __ChpSlotByID(__chpid){ + for(new i; i < MAX_CHECKPOINTS; i++){ + if(_checkpoints[i][_chp_id] == __chpid) return i; + } + return -1; +} + + +forward CheckpointSeeker(); +stock StartCheckpointSeeking(){ + _chp_manager_timer_id = SetTimer("CheckpointSeeker", CHECKPOINT_SEEKER_DELAY, 1); + return 1; +} + +stock StopCheckpointSeeking(){ + KillTimer(_chp_manager_timer_id); + return 1; +} + +public CheckpointSeeker(){ + new Float:__posX, Float:__posY, Float:__posZ; + new __interior; + new __virtualWorld; + for(new i; i < MAX_PLAYERS; i++) + { + if(!IsPlayerConnected(i)) continue; + + GetPlayerPos(i, Float:__posX, Float:__posY, Float:__posZ); + // Is the player near a checkpoint? + if(_p_VisibleCheckpoint[i] > -1) + { + // If the player is no longer near that point + if(__posX < (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posX] - _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance]) + || __posX > (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posX] + _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance]) + || __posY < (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posY] - _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance]) + || __posY > (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posY] + _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance])){ + DisablePlayerCheckpoint(i); + _p_VisibleCheckpoint[i] = -1; + } + } + else + { + // Getting the player Interior and virtual world + __interior = GetPlayerInterior(i); + __virtualWorld = GetPlayerVirtualWorld(i); + + // Looking for a new checkpoint + for(new j = 0; j < MAX_CHECKPOINTS; j++){ + if(!_checkpoints[j][_chp_populated]) continue; + if((_checkpoints[j][_chp_owner] != i) && (_checkpoints[j][_chp_owner] != -1)) continue; + if(_checkpoints[j][_chp_interior_id] != __interior) continue; + if(_checkpoints[j][_chp_world_id] != __virtualWorld) continue; + + if(__posX > (_checkpoints[j][_chp_posX] - _checkpoints[j][_chp_viewDistance]) + && __posX < (_checkpoints[j][_chp_posX] + _checkpoints[j][_chp_viewDistance]) + && __posY > (_checkpoints[j][_chp_posY] - _checkpoints[j][_chp_viewDistance]) + && __posY < (_checkpoints[j][_chp_posY] + _checkpoints[j][_chp_viewDistance])){ + SetPlayerCheckpoint(i, _checkpoints[j][_chp_posX], _checkpoints[j][_chp_posY], _checkpoints[j][_chp_posZ], _checkpoints[j][_chp_size]); + _p_VisibleCheckpoint[i] = j; + break; + } + } + } + } + return 1; +} + +stock VerifyCheckpoint(__playerid){ + if(_p_VisibleCheckpoint[__playerid] >= 0){ + OnCheckpointEnter(__playerid, _checkpoints[_p_VisibleCheckpoint[__playerid]][_chp_id]); + return 1; + } + return 0; +} \ No newline at end of file diff --git a/samples/SourcePawn/fixed.inc b/samples/SourcePawn/fixed.inc new file mode 100644 index 00000000..b7573dc7 --- /dev/null +++ b/samples/SourcePawn/fixed.inc @@ -0,0 +1,91 @@ +/* Fixed point arithmetic + * + * (c) Copyright 1998-2011, ITB CompuPhase + * This file is provided as is (no warranties). + */ +#pragma library Fixed + +const fround_method: { + fround_round = 0, + fround_floor, + fround_ceil, + fround_tozero, + fround_unbiased +} + +native Fixed:fixed(value); +native Fixed:strfixed(const string[]); +native Fixed:fmul(Fixed:oper1, Fixed:oper2); +native Fixed:fdiv(Fixed:dividend, Fixed:divisor); +native Fixed:ffract(Fixed:value); +native fround(Fixed:value, fround_method:method=fround_round); +native Fixed:fpower(Fixed:value, exponent); +native Fixed:fsqroot(Fixed:value); +native Fixed:fabs(Fixed:value); + +#pragma rational Fixed(3) + +/* user defined operators */ +native Fixed:operator*(Fixed:oper1, Fixed:oper2) = fmul; +native Fixed:operator/(Fixed:oper1, Fixed:oper2) = fdiv; +native Fixed:operator=(oper) = fixed; + +stock Fixed:operator++(Fixed:oper) + return oper + fixed(1); + +stock Fixed:operator--(Fixed:oper) + return oper - fixed(1); + +stock Fixed:operator*(Fixed:oper1, oper2) + return Fixed: (_:oper1 * oper2); /* "*" is commutative */ + +stock Fixed:operator/(Fixed:oper1, oper2) + return oper1 / fixed(oper2); + +stock Fixed:operator/(oper1, Fixed:oper2) + return fdiv(fixed(oper1), oper2); + +stock Fixed:operator+(Fixed:oper1, oper2) + return oper1 + fixed(oper2); /* "+" is commutative */ + +stock Fixed:operator-(Fixed:oper1, oper2) + return oper1 - fixed(oper2); + +stock Fixed:operator-(oper1, Fixed:oper2) + return fixed(oper1) - oper2; + +stock bool:operator>(Fixed:oper1, oper2) + return oper1 > fixed(oper2); + +stock bool:operator>(oper1, Fixed:oper2) + return fixed(oper1) > oper2; + +stock bool:operator>=(Fixed:oper1, oper2) + return oper1 >= fixed(oper2); + +stock bool:operator>=(oper1, Fixed:oper2) + return fixed(oper1) >= oper2; + +stock bool:operator<(Fixed:oper1, oper2) + return oper1 < fixed(oper2); + +stock bool:operator<(oper1, Fixed:oper2) + return fixed(oper1) < oper2; + +stock bool:operator<=(Fixed:oper1, oper2) + return oper1 <= fixed(oper2); + +stock bool:operator<=(oper1, Fixed:oper2) + return fixed(oper1) <= oper2; + +stock bool:operator==(Fixed:oper1, oper2) /* "==" is commutative */ + return oper1 == fixed(oper2); + +stock bool:operator!=(Fixed:oper1, oper2) /* "!=" is commutative */ + return oper1 != fixed(oper2); + +/* forbidden operations */ +forward operator%(Fixed:oper1, Fixed:oper2); +forward operator%(Fixed:oper1, oper2); +forward operator%(oper1, Fixed:oper2); + diff --git a/samples/SourcePawn/foo.sma b/samples/SourcePawn/foo.sma new file mode 100644 index 00000000..e03b77a2 --- /dev/null +++ b/samples/SourcePawn/foo.sma @@ -0,0 +1,272 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TimeLeft Plugin +// + +#include + +const TASK_TIMEREMAIN_SHORT = 8648458 // 0.8s repeat task +const TASK_TIMEREMAIN_LARGE = 34543 // 1.0s repeat task + +// time display flags +const TD_BOTTOM_WHITE_TEXT = 1 // a - display white text on bottom +const TD_USE_VOICE = 2 // b - use voice +const TD_NO_REMAINING_VOICE = 4 // c - don't add "remaining" (only in voice) +const TD_NO_HOURS_MINS_SECS_VOICE = 8 // d - don't add "hours/minutes/seconds" (only in voice) +const TD_SHOW_SPEAK_VALUES_BELOW = 16 // e - show/speak if current time is less than this set in parameter + +new g_TimeSet[32][2] +new g_LastTime +new g_CountDown +new g_Switch + +// pcvars +new g_amx_time_voice, g_amx_timeleft +new g_mp_timelimit + +public plugin_init() +{ + register_plugin("TimeLeft", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("timeleft.txt") + g_amx_time_voice = register_cvar("amx_time_voice", "1") + register_srvcmd("amx_time_display", "setDisplaying") + g_amx_timeleft = register_cvar("amx_timeleft", "00:00", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) + register_clcmd("say timeleft", "sayTimeLeft", 0, "- displays timeleft") + register_clcmd("say thetime", "sayTheTime", 0, "- displays current time") + + set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b") + + g_mp_timelimit = get_cvar_pointer("mp_timelimit") +} + +public sayTheTime(id) +{ + if (get_pcvar_num(g_amx_time_voice)) + { + new mhours[6], mmins[6], whours[32], wmins[32], wpm[6] + + get_time("%H", mhours, charsmax(mhours)) + get_time("%M", mmins, charsmax(mmins)) + + new mins = str_to_num(mmins) + new hrs = str_to_num(mhours) + + if (mins) + num_to_word(mins, wmins, charsmax(wmins)) + else + wmins[0] = EOS + + if (hrs < 12) + wpm = "am " + else + { + if (hrs > 12) hrs -= 12 + wpm = "pm " + } + + if (hrs) + num_to_word(hrs, whours, charsmax(whours)) + else + whours = "twelve " + + client_cmd(id, "spk ^"fvox/time_is_now %s_period %s%s^"", whours, wmins, wpm) + } + + new ctime[64] + + get_time("%m/%d/%Y - %H:%M:%S", ctime, charsmax(ctime)) + client_print(0, print_chat, "%L: %s", LANG_PLAYER, "THE_TIME", ctime) + + return PLUGIN_CONTINUE +} + +public sayTimeLeft(id) +{ + if (get_pcvar_float(g_mp_timelimit)) + { + new a = get_timeleft() + + if (get_pcvar_num(g_amx_time_voice)) + { + new svoice[128] + setTimeVoice(svoice, charsmax(svoice), 0, a) + client_cmd(id, "%s", svoice) + } + client_print(0, print_chat, "%L: %d:%02d", LANG_PLAYER, "TIME_LEFT", (a / 60), (a % 60)) + } + else + client_print(0, print_chat, "%L", LANG_PLAYER, "NO_T_LIMIT") + + return PLUGIN_CONTINUE +} + +setTimeText(text[], len, tmlf, id) +{ + new secs = tmlf % 60 + new mins = tmlf / 60 + + if (secs == 0) + formatex(text, len, "%d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE") + else if (mins == 0) + formatex(text, len, "%d %L", secs, id, (secs > 1) ? "SECONDS" : "SECOND") + else + formatex(text, len, "%d %L %d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE", secs, id, (secs > 1) ? "SECONDS" : "SECOND") +} + +setTimeVoice(text[], len, flags, tmlf) +{ + new temp[7][32] + new secs = tmlf % 60 + new mins = tmlf / 60 + + // for (new a = 0;a < 7;++a) // we just created it, already null + // temp[a][0] = 0 + + if (secs > 0) + { + num_to_word(secs, temp[4], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[5] = "seconds " /* there is no "second" in default hl */ + } + + if (mins > 59) + { + new hours = mins / 60 + + num_to_word(hours, temp[0], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[1] = "hours " + + mins = mins % 60 + } + + if (mins > 0) + { + num_to_word(mins, temp[2], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[3] = "minutes " + } + + if ( ~flags & TD_NO_REMAINING_VOICE ) + temp[6] = "remaining " + + return formatex(text, len, "spk ^"vox/%s%s%s%s%s%s%s^"", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], temp[6]) +} + +findDispFormat(_time) +{ + // it is important to check i _time) + { + if (!g_Switch) + { + g_CountDown = g_Switch = _time + remove_task(TASK_TIMEREMAIN_SHORT) + set_task(1.0, "timeRemain", TASK_TIMEREMAIN_LARGE, "", 0, "b") + } + + return i + } + } + else if (g_TimeSet[i][0] == _time) + { + return i + } + } + + return -1 +} + +public setDisplaying() +{ + new arg[32], flags[32], num[32] + new argc = read_argc() - 1 + new i = 0 + + while (i < argc && i < sizeof(g_TimeSet)) + { + read_argv(i + 1, arg, charsmax(arg)) + parse(arg, flags, charsmax(flags), num, charsmax(num)) + + g_TimeSet[i][0] = str_to_num(num) + g_TimeSet[i][1] = read_flags(flags) + + i++ + } + + if( i < sizeof(g_TimeSet) ) + g_TimeSet[i][0] = 0 // has to be zeroed in case command is sent twice + + return PLUGIN_HANDLED +} + +public timeRemain(param[]) +{ + new gmtm = get_timeleft() + new tmlf = g_Switch ? --g_CountDown : gmtm + new stimel[12] + + formatex(stimel, charsmax(stimel), "%02d:%02d", gmtm / 60, gmtm % 60) + set_pcvar_string(g_amx_timeleft, stimel) + + if (g_Switch && gmtm > g_Switch) + { + remove_task(TASK_TIMEREMAIN_LARGE) + g_Switch = 0 + set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b") + + return + } + + if (tmlf > 0 && g_LastTime != tmlf) + { + g_LastTime = tmlf + new tm_set = findDispFormat(tmlf) + + if (tm_set != -1) + { + new flags = g_TimeSet[tm_set][1] + new arg[128] + + if (flags & TD_BOTTOM_WHITE_TEXT) + { + new players[MAX_PLAYERS], pnum, plr + + get_players(players, pnum, "c") + + if (flags & TD_SHOW_SPEAK_VALUES_BELOW) // yes this is correct flag, just because message should be shorter if it is shown every seconds + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 1.1, 0.1, 0.5, -1) + else + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 3.0, 0.0, 0.5, -1) + + for (new i = 0; i < pnum; i++) + { + plr = players[i] + setTimeText(arg, charsmax(arg), tmlf, plr) + show_hudmessage(plr, "%s", arg) + } + } + + if (flags & TD_USE_VOICE) + { + setTimeVoice(arg, charsmax(arg), flags, tmlf) + client_cmd(0, "%s", arg) + } + } + } +} diff --git a/samples/SourcePawn/mfile.inc b/samples/SourcePawn/mfile.inc new file mode 100644 index 00000000..70fd47e0 --- /dev/null +++ b/samples/SourcePawn/mfile.inc @@ -0,0 +1,289 @@ +/* mFile 1.1 by Minokon + * + * (c) Copyright by Minokon 2010 + * (c) y_files Copyright by Y_Less 2010 + * + */ + +#if defined _mfile_included + #endinput +#endif +#define _mfile_included + +//Defines +#define MAX_LINE_SIZE 80 //Max lenght of one line in file +#define MAX_KEY_SIZE 50 //Max lenght of key in line (to =) +#define MAX_VALUE_SIZE 50 //Max lenght of value in line (past =) +#define TMP_FILE "tmpfile.txt" + +//Natives +/* +native mCreateFile(const file[]); +native mRemoveFile(const file[]); +native mClearFile(const file[]); +native bool:mFileExist(const file[]); +native mRenameFile(const file[], const newname[]); +native mFindFile(const name[], dest[], &index, sizename=sizeof dest); +native mCreateDir(const name[]); +native mRenameDir(const dir[], const newname[]); +native mFindDir(const name[], dest[], &index, sizename=sizeof dest); +native mHowLines(const file[]); +native mRemoveNewLine(string[]); //removes "\n" from string +native mGetString(const file[], const key[], bool:ignorecase=false); +native mGetInt(const file[], const key[], bool:ignorecase=false); +native mGetFloat(const file[], const key[], &Float:value); +native mSetString(const file[], const key[], const new_value[]); +native mSetInt(const file[], const key[], new_value); +native mSetFloat(const file[], const key[], Float:new_value); +native mIsSet(const file[], const key[], bool:ignorecase=false); +native mUnSet(const file[], const key[]); +native mIsFileEmpty(const file[]); +native y_files +*/ +//y_files by Y_Less Functions +native ffind(const pattern[], filename[], len, &idx); +native frename(const oldname[], const newname[]); +native dfind(const pattern[], filename[], len, &idx); +native dcreate(const name[]); +native drename(const oldname[], const newname[]); + +//Forwards +forward OnFileCreated(file[]); +forward OnFileRemoved(file[]); +forward OnFileCleared(file[]); +forward OnFileRenamed(oldname[], newname[]); +forward OnDirCreated(dir[]); +forward OnDirRenamed(oldname[], newname[]); + +stock mCreateFile(const file[]) +{ + if(fexist(file)) fremove(file); + new File:mfile = fopen(file, io_write); + fclose(mfile); + CallLocalFunction("OnFileCreated", "s", file); + return 1; +} + +stock mRemoveFile(const file[]) +{ + CallLocalFunction("OnFileRemoved", "s", file); + return fremove(file); +} + +stock mClearFile(const file[]) +{ + if(!fremove(file)) return 0; + new File:mfile = fopen(file, io_write); + fclose(mfile); + CallLocalFunction("OnFileCleared", "s", file); + return 1; +} + +stock bool:mFileExist(const file[]) + if(fexist(file)) return true; //dla ciekawych: fexist nie zwraca booleanu + else return false; + +stock mRenameFile(const file[], const newname[]) +{ + CallLocalFunction("OnFileRenamed", "ss", file, newname); + return frename(file, newname); +} + +stock mFindFile(const name[], dest[], &index, sizename=sizeof dest) + return ffind(name, dest, sizename, index); + +stock mCreateDir(const name[]) +{ + CallLocalFunction("OnDirCreated", "s", name); + return dcreate(name); +} + +stock mRenameDir(const dir[], const newname[]) +{ + CallLocalFunction("OnDirRenamed", "ss", dir, newname); + return drename(dir, newname); +} + +stock mFindDir(const name[], dest[], &index, sizename=sizeof dest) + return dfind(name, dest, sizename, index); + +stock mHowLines(const file[]) +{ + new lines, str[MAX_LINE_SIZE]; + new File:mfile = fopen(file, io_read); + while(fread(mfile, str)) lines++; + fclose(mfile); + return lines; +} + +stock mRemoveNewLine(string[]) +{ + new pos = strfind(string, "\n"); + if(pos != -1) + { + strdel(string, pos, pos+2); + return 1; + } + return 0; +} + +stock mGetString(const file[], const key[], bool:ignorecase=false) +{ + //Create file if not exists + if(!fexist(file)) + { + new File:created = fopen(file, io_write); + fclose(created); + } + new //Variables + File:mfile = fopen(file, io_read), //Open file + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE], + str3[MAX_VALUE_SIZE], + pos; + //Find key in file + while(fread(mfile, str)) + { + pos = strfind(str, "=", ignorecase); + strmid(str2, str, 0, pos); + if(!strcmp(str2, key, ignorecase, strlen(key)+1)) + { + strmid(str3, str, pos+1, strlen(str)); + mRemoveNewLine(str3); + break; + } + } + fclose(mfile); + return str3; +} + +stock mGetInt(const file[], const key[], bool:ignorecase=false) + return strval(mGetString(file, key, ignorecase)); + +stock mGetFloat(const file[], const key[], &Float:value, bool:ignorecase=false) + value = floatstr(mGetString(file, key, ignorecase)); + +stock mSetString(const file[], const key[], const new_value[]) +{ + //Create file if not exists + if(!fexist(file)) + { + new File:created = fopen(file, io_write); + fclose(created); + } + new //Variables + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE], + str3[MAX_LINE_SIZE], + bool:lFinded = false; + //Open file + new File:mfile = fopen(file, io_read); + //Create cache file + new File:tmpfile = fopen(TMP_FILE, io_write); + fclose(tmpfile); + //Open cache file + tmpfile = fopen(TMP_FILE, io_append); + format(str3, sizeof str3, "%s=%s\n", key, new_value); + while(fread(mfile, str)) + { + strmid(str2, str, 0, strfind(str, "=")); + if(!strcmp(str2, key)) + { + fwrite(tmpfile, str3); + lFinded = true; + } + else + fwrite(tmpfile, str); + } + if(!lFinded) //if line not found + fwrite(tmpfile, str3); + //Close and remove old file + fclose(mfile); + fremove(file); + //Close cache file and rename it + fclose(tmpfile); + frename(TMP_FILE, file); + return 1; +} + +stock mSetInt(const file[], const key[], new_value) +{ + new str[MAX_VALUE_SIZE]; + valstr(str, new_value); + mSetString(file, key, str); + return 1; +} + +stock mSetFloat(const file[], const key[], Float:new_value) +{ + new str[MAX_VALUE_SIZE]; + format(str, sizeof str, "%f", new_value); + return mSetString(file, key, str); +} + +stock bool:mIsSet(const file[], const key[], bool:ignorecase=false) +{ + //If fexists return false + if(!fexist(file)) return false; + new //Variables + File:mfile = fopen(file, io_read), //Open file + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE], + bool:finded = false; + //Find key in file + while(fread(mfile, str)) + { + strmid(str2, str, 0, strfind(str, "=")); + if(!strcmp(str2, key, ignorecase, strlen(key)+1)) + { + finded = true; + break; + } + } + fclose(mfile); + return finded; +} + +stock mUnSet(const file[], const key[]) +{ + if(!fexist(file)) return 0; + new //Variables + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE]; + //Open file + new File:mfile = fopen(file, io_read); + //Create cache file + new File:tmpfile = fopen(TMP_FILE, io_write); + fclose(tmpfile); + //Open cache file + tmpfile = fopen(TMP_FILE, io_append); + while(fread(mfile, str)) + { + strmid(str2, str, 0, strfind(str, "=")); + if(strcmp(str2, key) != 0) + fwrite(tmpfile, str); + } + //Close and remove old file + fclose(mfile); + fremove(file); + //Close cache file and rename it + fclose(tmpfile); + frename(TMP_FILE, file); + return 1; +} + +stock bool:mIsFileEmpty(const file[]) +{ + if(!fexist(file)) return true; + new File:mfile = fopen(file, io_read); + if(flength(mfile) <= 1) + { + fclose(mfile); + return true; + } + else + { + fclose(mfile); + return false; + } +} diff --git a/samples/SourcePawn/y_testing.inc b/samples/SourcePawn/y_testing.inc new file mode 100644 index 00000000..95b49c0c --- /dev/null +++ b/samples/SourcePawn/y_testing.inc @@ -0,0 +1,633 @@ +/**--------------------------------------------------------------------------**\ + ==================================== + y_testing - Run unit tests easilly + ==================================== +Description: + Runs any functions named as tests when the Testing_Run function is called. +Legal: + Version: MPL 1.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the + License. + + The Original Code is the YSI testing include. + + The Initial Developer of the Original Code is Alex "Y_Less" Cole. + Portions created by the Initial Developer are Copyright (C) 2011 + the Initial Developer. All Rights Reserved. + + Contributors: + ZeeX, koolk, JoeBullet/Google63, g_aSlice/Slice + + Thanks: + JoeBullet/Google63 - Handy arbitrary ASM jump code using SCTRL. + ZeeX - Very productive conversations. + koolk - IsPlayerinAreaEx code. + TheAlpha - Danish translation. + breadfish - German translation. + Fireburn - Dutch translation. + yom - French translation. + 50p - Polish translation. + Zamaroht - Spanish translation. + Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes + for me to strive to better. + Pixels^ - Running XScripters where the idea was born. + Matite - Pestering me to release it and using it. + + Very special thanks to: + Thiadmer - PAWN, whose limits continue to amaze me! + Kye/Kalcor - SA:MP. + SA:MP Team past, present and future - SA:MP. + +Version: + 1.0 +Changelog: + 16/02/12: + Added better error reporting (less verbose passes). + Removed "Tests:". + Added player requiring tests. + 25/10/10: + Integrated in to YSI. + 06/08/10: + First version + +\**--------------------------------------------------------------------------**/ + +/*#if defined _inc_a_samp || defined _samp_included || defined _inc_y_version + #error y_testing must be the VERY FIRST include in your mode if being used. +#endif + +// Now we redefined "native" to do something clever! +// "IsPlayerAttachedObjectSlotUsed" is an issue for us... + +// "y_renative" allows native functions to be declared without constantly trying +// to redefine it. +#include "internal\y_renative" + +#define native%0(%1); _YSI_NO_TAG_NATIVE:_YSI_RE_NATIVE<%0@|||%1|||%0>_YSI_RE_STOCK<%0|||%1|||_:%0@> + +//stock%0(%1){printf(_:_YSI_NO_SQUARE:"native "#%0" called");return _:%0@(%1);} + +#define _YSI_RE_STOCK<%0|||%1|||%2> stock%0(%1){print(_:_YSI_NO_SQUARE:"native "#%0" called");return %2(%1);} + +#define _YSI_NO_SQUARE:%0);%1(%2[%3]%4);} _YSI_NO_SQUARE:%0);%1(%2%4);} + +//#define _YSI_NO_TAG_NATIVE:_YSI_RE_NATIVE<%0:%1|||%2|||%3:%4>%5{%6;%7:%8:%9} _YSI_RE_NATIVE<%1|||%2|||%4>%5{%6;return%8:%9} +#define _YSI_NO_TAG_NATIVE:_YSI_RE_NATIVE<%0:%1|||%2|||%3:%4>_YSI_RE_STOCK<%5:%6|||%7|||_:%8:%9> _YSI_RE_NATIVE<%1|||%2|||%4>_YSI_RE_STOCK<%5:%6|||%7|||%8:%9>*/ + +#include + +#if defined YSI_TESTS + #if defined INCLUDE_TESTS + #error Incompatible testing options (YSI_TESTS + INCLUDE_TESTS) + #endif + #if !defined RUN_TESTS + #define RUN_TESTS + #endif +#endif + +#if defined INCLUDE_TESTS + #define RUN_TESTS + #define Debug_PrintT va_printf +#elseif defined RUN_TESTS + #define _AUTO_RUN_TESTS + #define Debug_PrintT va_printf +#else + #if _DEBUG > 0 || defined _YSI_SPECIAL_DEBUG + #define RUN_TESTS + #define _AUTO_RUN_TESTS + //#if defined _YSI_SPECIAL_DEBUG + // #define TP printf + // //#define TC(%0); %0 + #define Debug_PrintT va_printf + //#else + // //#define TP P:0 + // //#define TC C:0 + //#endif + #else + #define Debug_PrintT(%0); + // #define Tests:%1() stock bool:Tests_@%1() + // #define Test:%1() stock bool:Test_@%1() + // #define TestInit:%1() stock Init_@%1() + // #define TestClose:%1() stock Shut_@%1() + #endif +#endif + +#define Y_TESTING_DIALOG_ID (0x7974) // "yt" + +#define TEST_TRUE(%0) Testing_Test(!!%0) +#define TEST_FALSE(%0) Testing_Test(!%0) +#define TEST_NULL(%0) Testing_Test(0 == %0) +#define TEST_NOT_NULL(%0) Testing_Test(0 != %0) +#define TEST_N(%0,%1) Testing_Test(%1 == %0) + +#define TEST_TRUE_EX(%0,%2) Testing_Test(bool:(%0), (%2)) +#define TEST_FALSE_EX(%0,%2) Testing_Test(!(%0), (%2)) +#define TEST_NULL_EX(%0,%2) Testing_Test((%0) == 0, (%2)) +#define TEST_N_EX(%0,%1,%2) Testing_Test((%0) == (%1), (%2)) + +#define TEST_MSG "\2\2\2\2\2" +#define TEST_FAILED "FAIL:" +#define TEST_PASSED "PASS!" +//#define TEST_FAILED "*** Test Failed:" +//#define TEST_PASSED "*** Test Passed:" + +#define _Y_TESTEQ(%0) "\"%0\"") +#define _Y_TESTDQ:_Y_TESTEQ(%0"%1"%2) _Y_TESTDQ:_Y_TESTEQ(%0\x22;%1\x22;%2) +//#define _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0)%1) _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0\x29;%1) +#define _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0)%1) _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0\x29;%1) +#define _Y_TESTOB:_Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0(%1) _Y_TESTOB:_Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0\x28;%1) + +#define ASSERT(%0) Testing_Test(%0,TEST_MSG" %s", _Y_TESTOB:_Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0) +#define ASSERT_TRUE(%0) ASSERT(!!%0) //Testing_Test(!!%0,__name) +#define ASSERT_FALSE(%0) ASSERT(!%0) //Testing_Test(!%0,__name) +#define ASSERT_NULL(%0) ASSERT(0 == %0) //Testing_Test(0==%0,__name) +#define ASSERT_N:%1(%0) ASSERT(%1 == %0) //Testing_Test(%1==%0,__name) + +#define ASK(%0) Testing_Ask(playerid,%0) + +static stock + YSI_g_sFailMessage[512], + YSI_g_sPlayer = cellmax, + bool:YSI_g_sAsked, + YSI_g_sTests, + YSI_g_sFails; + +#if defined RUN_TESTS + #define Test:%1() forward bool:Tezt_@%1(); public bool:Tezt_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define TestInit:%1() forward Init_@%1(); public Init_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define TestClose:%1() forward Shut_@%1(); public Shut_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + + #define PTest:%1(%2) forward bool:Tezp_@%1(%2); public bool:Tezp_@%1(%2) for(new string:__name[]=#%1,bool:__once=(printf("*** Player Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define PTestInit:%1(%2) forward Inip_@%1(%2); public Inip_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define PTestClose:%1(%2) forward Shup_@%1(%2); public Shup_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) +#else + #define Test:%1() stock bool:Test_@%1() + #define TestInit:%1() stock Init_@%1() + #define TestClose:%1() stock Shut_@%1() + + #define PTest:%1(%2) stock bool:Test_@%1(%2) + #define PTestInit:%1(%2) stock Init_@%1(%2) + #define PTestClose:%1(%2) stock Shut_@%1(%2) +#endif + +// These all need to come AFTER the types are defined in case the have tests. +#include "internal\y_version" + +#include "y_amx" +#include "internal\y_shortfunc" +#include "y_debug" + +#include "internal\y_natives" + +#include "y_va" + +/**--------------------------------------------------------------------------**\ +Testing_Ask +Player to ask a question to. +What to ask. +Additional data. + + - + + + Calls a dialog to ask the player if the given test actually passed. + +\**--------------------------------------------------------------------------**/ + +stock Testing_Ask(playerid, str[] = "", va_args<>) +{ + va_format(YSI_g_sFailMessage, sizeof (YSI_g_sFailMessage), str, va_start<2>); + ShowPlayerDialog(playerid, Y_TESTING_DIALOG_ID, DIALOG_STYLE_MSGBOX, "Did the test pass?", YSI_g_sFailMessage, "Yes", "No"); + YSI_g_sAsked = true; +} + +stock Testing_Test(bool:x, str[] = "", va_args<>) +{ + P:3("Testing_Test called: %i, \"%s\"", x, str); + ++YSI_g_sTests; + if (!x) + { + ++YSI_g_sFails; + if (numargs() == 2) + { + P:T(TEST_FAILED " %s", va_start<1>); + //printf("*** Test failed: %s", str); + } + else + { + if (str[0] == '\2') + { + strunpack(str, !TEST_FAILED, 6); + str[5] = ' '; + } + P:T(str, va_start<2>); + } + } + #if defined TEST_SHOW_PASSES + else /*if (numargs() == 2) + { + P:T(TEST_PASSED " %s", va_start<1>); + } + else + { + P:T(str, va_start<2>); + if (str[0] == '\2') + { + strunpack(str, !TEST_PASSED, 17); + str[16] = ' '; + } + printf(str); + P:T(str, va_start<2>);*/ + { + P:T(TEST_PASSED, va_start<2>); + } + #endif +} + +/**--------------------------------------------------------------------------**\ +Testing_Run +Number of tests run. +Number of tests which failed. +The name of the first test which failed. + + Wether all tests were sucessful or not. + + + - + +native Testing_Run(&tests, &fails, buffer[33] = ""); + + +\**--------------------------------------------------------------------------**/ + +stock bool:Testing_Run(&tests, &fails, lastfail[33] = "", bool:p = false) +{ + P:3("bool:Testing_Run called: %i, %i, \"%s\", %i", tests, fails, lastfail, p); + #pragma unused p, lastfail + #if defined RUN_TESTS + P:2("Testing_Run() called"); + new + idx, + buffer[32]; + while ((idx = AMX_GetPublicName(idx, buffer, "Tezt_@"))) + { + strunpack(buffer, buffer); + //++YSI_g_sTests; + // Call the setup function if there is one. + buffer[0] = 'I'; + buffer[1] = 'n'; + buffer[2] = 'i'; + buffer[3] = 't'; + CallLocalFunction(buffer, ""); + // Call the test. + buffer[0] = 'T'; + buffer[1] = 'e'; + buffer[2] = 'z'; + buffer[3] = 't'; + fails = YSI_g_sFails; + P:5("Testing_Run(): Calling %s", buffer[6]); + CallLocalFunction(buffer, ""); + #if !defined TEST_SHOW_PASSES + if (YSI_g_sFails == fails) + { + printf(TEST_PASSED); + printf(" "); + } + #endif + /*if (YSI_g_sFails != fails) + { + if (YSI_g_sFails) + { + ++YSI_g_sFails; + } + else + { + fails = 0; + // Copy the string over. + while ((lastfail[fails] = buffer[fails + 6])) ++fails; + YSI_g_sFails = 1; + } + //C:1(if (p) printf("*** Test failed: %s", buffer[fails + 6]);); + }*/ + // Call the shutdown function if there is one. + buffer[0] = 'S'; + buffer[1] = 'h'; + buffer[2] = 'u'; + buffer[3] = 't'; + CallLocalFunction(buffer, ""); + } + tests = YSI_g_sTests; + fails = YSI_g_sFails; + return fails == 0; + #else + #pragma unused tests, fails, lastfail + return true; + #endif +} + +/**--------------------------------------------------------------------------**\ +Testing_Player +Player to test on. +Next test to run. +Number of tests run. +Number of tests which failed. +The name of the first test which failed. + + Wether all tests were sucessful or not. + + + - + +native Testing_Run(&tests, &fails, buffer[33] = ""); + + +\**--------------------------------------------------------------------------**/ + +stock bool:Testing_Player(playerid, &idx, &tests, &fails, lastfail[33] = "", bool:p = false) +{ + P:3("bool:Testing_Player called: %i, %i, %i, %i, \"%s\", %i", playerid, idx, tests, fails, lastfail, p); + #pragma unused p + #if defined RUN_TESTS + P:2("Testing_Player() called"); + new + //idx, + buffer[32]; + //while ((idx = AMX_GetPublicName(idx, buffer, "Tezt_@"))) + if ((idx = AMX_GetPublicName(idx, buffer, "Tezp_@"))) + { + strunpack(buffer, buffer); + //++YSI_g_sTests; + // Call the setup function if there is one. + buffer[0] = 'I'; + buffer[1] = 'n'; + buffer[2] = 'i'; + buffer[3] = 'p'; + CallLocalFunction(buffer, ""); + // Call the test. + buffer[0] = 'T'; + buffer[1] = 'e'; + buffer[2] = 'z'; + buffer[3] = 'p'; + fails = YSI_g_sFails; + P:5("Testing_Player(): Calling %s", buffer[6]); + CallLocalFunction(buffer, ""); + #if !defined TEST_SHOW_PASSES + if (YSI_g_sFails == fails) + { + printf(TEST_PASSED); + printf(" "); + } + #endif + /*if (YSI_g_sFails != fails) + { + if (YSI_g_sFails) + { + ++YSI_g_sFails; + } + else + { + fails = 0; + // Copy the string over. + while ((lastfail[fails] = buffer[fails + 6])) ++fails; + YSI_g_sFails = 1; + } + //C:1(if (p) printf("*** Test failed: %s", buffer[fails + 6]);); + }*/ + // Call the shutdown function if there is one. + //buffer[0] = 'S'; + //buffer[1] = 'h'; + //buffer[2] = 'u'; + //buffer[3] = 'p'; + //CallLocalFunction(buffer, ""); + } + tests = YSI_g_sTests; + fails = YSI_g_sFails; + return fails == 0; + #else + #pragma unused tests, fails, lastfail + return true; + #endif +} + +#if defined RUN_TESTS + /*#define Test:%1() forward bool:Tezt_@%1(); public bool:Tezt_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define TestInit:%1() forward Init_@%1(); public Init_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define TestClose:%1() forward Shut_@%1(); public Shut_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + + #define PTest:%1(%2) forward bool:Tezp_@%1(%2); public bool:Tezp_@%1(%2) for(new string:__name[]=#%1,bool:__once=(printf("*** Player Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define PTestInit:%1(%2) forward Inip_@%1(%2); public Inip_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define PTestClose:%1(%2) forward Shup_@%1(%2); public Shup_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE))*/ + + #if defined _AUTO_RUN_TESTS + #if !defined FILTERSCRIPT + // Hook main in gamemodes. + main() + { + // Disable error messages (as we're likely to generate them). + state ysi_debug : off; + CallLocalFunction("Testing_main", ""); + new + tests, + fails; + printf(" "); + printf(" ||===================|| "); + printf(" || STARTING TESTS... || "); + printf(" ||===================|| "); + printf(" "); + Testing_Run(tests, fails, _, true); + printf("*** Tests: %d, Fails: %d", tests, fails); + if (!fails) + { + printf(" "); + printf(" ||===================|| "); + printf(" || ALL TESTS PASSED! || "); + printf(" ||===================|| "); + printf(" "); + } + state ysi_debug : on; + } + + #define main forward Testing_main(); public Testing_main + + Testing_Next(playerid) + { + new + buffer[32]; + for ( ; ; ) + { + new + fails = YSI_g_sFails; + // Get the last test (nicely fails for cellmax). + if ((YSI_g_sPlayer = AMX_GetPublicName(YSI_g_sPlayer, buffer, "Tezp_@"))) + { + strunpack(buffer, buffer); + // Call the shutdown function if there is one. + buffer[0] = 'S'; + buffer[1] = 'h'; + buffer[2] = 'u'; + buffer[3] = 'p'; + CallLocalFunction(buffer, "i", playerid); + } + // Get the new test, but don't store the index. + if (AMX_GetPublicName(YSI_g_sPlayer, buffer, "Tezp_@")) + { + YSI_g_sAsked = false; + //++YSI_g_sTests; + strunpack(buffer, buffer); + // Call the setup function if there is one. + buffer[0] = 'I'; + buffer[1] = 'n'; + buffer[2] = 'i'; + buffer[3] = 'p'; + CallLocalFunction(buffer, "i", playerid); + // Call the test. + buffer[0] = 'T'; + buffer[1] = 'e'; + buffer[2] = 'z'; + buffer[3] = 'p'; + P:5("Testing_Next(): Calling %s", buffer[6]); + CallLocalFunction(buffer, "i", playerid); + } + else + { + YSI_g_sAsked = true; + // No more tests. + printf("*** Tests: %d, Fails: %d", YSI_g_sTests, YSI_g_sFails); + if (!YSI_g_sFails) + { + printf(" "); + printf(" ||==========================|| "); + printf(" || ALL PLAYER TESTS PASSED! || "); + printf(" ||==========================|| "); + printf(" "); + } + } + // If the test needs a player but doesn't ask them anything + // then we can't wait for "OnDialogResponse" to run the next + // one. + if (YSI_g_sAsked) + { + break; + } + else if (fails == YSI_g_sFails) + { + printf(TEST_PASSED); + } + } + //while (!YSI_g_sAsked); + } + + public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) + { + if (dialogid == Y_TESTING_DIALOG_ID) + { + ++YSI_g_sTests; + if (response) + { + // Pass. + printf(TEST_PASSED); + } + else + { + // Fail. + printf(TEST_FAILED " %s", YSI_g_sFailMessage); + ++YSI_g_sFails; + } + Testing_Next(playerid); + return 1; + } + #if defined Testing_OnDialogResponse + return Testing_OnDialogResponse(playerid, dialogid, response, listitem, inputtext); + #else + return 1; + #endif + } + + #if defined _ALS_OnDialogResponse + #undef OnDialogResponse + #else + #define _ALS_OnDialogResponse + #endif + #define OnDialogResponse Testing_OnDialogResponse + #if defined Testing_OnDialogResponse + forward Testing_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]); + #endif + + public OnPlayerSpawn(playerid) + { + if (YSI_g_sPlayer == cellmax && !IsPlayerNPC(playerid)) + { + printf(" "); + printf(" ||==========================|| "); + printf(" || STARTING PLAYER TESTS... || "); + printf(" ||==========================|| "); + printf(" "); + YSI_g_sTests = 0; + YSI_g_sFails = 0; + Testing_Next(playerid); + } + #if defined Testing_OnPlayerSpawn + return Testing_OnPlayerSpawn(playerid); + #else + return 1; + #endif + } + + #if defined _ALS_OnPlayerSpawn + #undef OnPlayerSpawn + #else + #define _ALS_OnPlayerSpawn + #endif + #define OnPlayerSpawn Testing_OnPlayerSpawn + #if defined Testing_OnPlayerSpawn + forward Testing_OnPlayerSpawn(playerid); + #endif + #endif + #else + Testing_RunAll() + { + // Disable error messages (as we're likely to generate them). + state ysi_debug : off; + new + tests, + fails; + printf(" "); + printf(" ||===================|| "); + printf(" || STARTING TESTS... || "); + printf(" ||===================|| "); + printf(" "); + Testing_Run(tests, fails, _, true); + printf("*** Tests: %d, Fails: %d", tests, fails); + if (!fails) + { + printf(" "); + printf(" ||===================|| "); + printf(" || ALL TESTS PASSED! || "); + printf(" ||===================|| "); + printf(" "); + } + state ysi_debug : on; + } + #endif +#else + //#define Tests:%1() stock bool:Tests_@%1() + /*#define Test:%1() stock bool:Test_@%1() + #define TestInit:%1() stock Init_@%1() + #define TestClose:%1() stock Shut_@%1() + + #define PTest:%1(%2) stock bool:Test_@%1(%2) + #define PTestInit:%1(%2) stock Init_@%1(%2) + #define PTestClose:%1(%2) stock Shut_@%1(%2)*/ +#endif diff --git a/samples/Stan/congress.stan b/samples/Stan/congress.stan new file mode 100644 index 00000000..6e7408e5 --- /dev/null +++ b/samples/Stan/congress.stan @@ -0,0 +1,14 @@ +data { + int N; + vector[N] incumbency_88; + vector[N] vote_86; + vector[N] vote_88; +} +parameters { + vector[3] beta; + real sigma; +} +model { + vote_88 ~ normal(beta[1] + beta[2] * vote_86 + + beta[3] * incumbency_88,sigma); +} diff --git a/samples/Stan/dogs.stan b/samples/Stan/dogs.stan new file mode 100644 index 00000000..ebca16d7 --- /dev/null +++ b/samples/Stan/dogs.stan @@ -0,0 +1,31 @@ +data { + int n_dogs; + int n_trials; + int y[n_dogs,n_trials]; +} +parameters { + vector[3] beta; +} +transformed parameters { + matrix[n_dogs,n_trials] n_avoid; + matrix[n_dogs,n_trials] n_shock; + matrix[n_dogs,n_trials] p; + + for (j in 1:n_dogs) { + n_avoid[j,1] <- 0; + n_shock[j,1] <- 0; + for (t in 2:n_trials) { + n_avoid[j,t] <- n_avoid[j,t-1] + 1 - y[j,t-1]; + n_shock[j,t] <- n_shock[j,t-1] + y[j,t-1]; + } + for (t in 1:n_trials) + p[j,t] <- beta[1] + beta[2] * n_avoid[j,t] + beta[3] * n_shock[j,t]; + } +} +model { + beta ~ normal(0, 100); + for (i in 1:n_dogs) { + for (j in 1:n_trials) + y[i,j] ~ bernoulli_logit(p[i,j]); + } +} diff --git a/samples/Stan/schools.stan b/samples/Stan/schools.stan new file mode 100644 index 00000000..171864a1 --- /dev/null +++ b/samples/Stan/schools.stan @@ -0,0 +1,26 @@ +data { + int N; + vector[N] y; + vector[N] sigma_y; +} +parameters { + vector[N] eta; + real mu_theta; + real sigma_eta; + real xi; +} +transformed parameters { + real sigma_theta; + vector[N] theta; + + theta <- mu_theta + xi * eta; + sigma_theta <- fabs(xi) / sigma_eta; +} +model { + mu_theta ~ normal(0, 100); + sigma_eta ~ inv_gamma(1, 1); //prior distribution can be changed to uniform + + eta ~ normal(0, sigma_eta); + xi ~ normal(0, 5); + y ~ normal(theta,sigma_y); +} diff --git a/samples/Text/01_top.ncl b/samples/Text/01_top.ncl new file mode 100644 index 00000000..92f12f77 --- /dev/null +++ b/samples/Text/01_top.ncl @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/Text/LIDARLite.ncl b/samples/Text/LIDARLite.ncl new file mode 100644 index 00000000..f93f95f7 --- /dev/null +++ b/samples/Text/LIDARLite.ncl @@ -0,0 +1,34 @@ +G04 DipTrace 2.4.0.2* +%INLIDARLite.ncl*% +%MOIN*% +%ADD11C,0.0394*% +%FSLAX44Y44*% +G04* +G70* +G90* +G75* +G01* +%LNBoardOutline*% +%LPD*% +X0Y23622D2* +D11* +X27953D1* +Y0D1* +X0D1* +Y23622D1* +X591Y23110D2* +X13819D1* +X591Y591D2* +Y11614D1* +Y12087D2* +Y23110D1* +X14291D2* +X27520D1* +X591Y591D2* +X13819D1* +X14291D2* +X27520D1* +Y11614D1* +Y12087D2* +Y23110D1* +M02* diff --git a/samples/Text/Site.local.ncl b/samples/Text/Site.local.ncl new file mode 100644 index 00000000..695dfa24 --- /dev/null +++ b/samples/Text/Site.local.ncl @@ -0,0 +1,22 @@ +#define YmakeRoot $(DESTDIR)@prefix@ +#define ManRoot $(DESTDIR)@mandir@ +#define LibRoot $(DESTDIR)@libdir@/ncarg +#define SharePath $(DESTDIR)@datadir@ + +#define BuildWithF90 TRUE +#define IncSearch -I/usr/include/netcdf -I/usr/include/udunits2 -I/usr/include/freetype2 -I/usr/include/gdal +#define LibSearch -L@libdir@/hdf + +#define BuildNetCDF4 1 +#define NetCDF4lib -lnetcdf +#define BuildCAIRO 1 +#define CAIROlib -lcairo -lfreetype +#define BuildGDAL 1 +#define GDALlib -lgdal +#define BuildHDFEOS 0 +#define BuildHDFEOS5 0 +#define BuildTRIANGLE 0 +#define HDFlib -lmfhdf -ldf -ljpeg -lz +#define HDF5lib -lhdf5_hl -lhdf5 +#define BuildUdunits 1 +#define UdUnitslib -ludunits2 diff --git a/samples/Text/aptitude-defaults.nb b/samples/Text/aptitude-defaults.nb new file mode 100644 index 00000000..67c37f59 --- /dev/null +++ b/samples/Text/aptitude-defaults.nb @@ -0,0 +1,41 @@ +Pakker uten en bestemt bolk\n Disse pakkene tilhører ingen bestemt bolk. Kanskje det er noe feil ved dem? +Virtuelle pakker\n Disse pakkene finnes ikke, de er navn som andre pakker bruker for å oppnå en eller annen egenskap. +Pakker som setter opp systemet ditt til å utføre en bestemt oppgave\n Pakkene i bolken «oppgaver» inneholder ingen filer, det kan hende de bare er avhengige av andre pakker. Disse pakkene gjør det mulig å installere pakker for en bestemt oppgave på en lett måte. +Administrative verktøy\n Pakkene i bolken «admin» gjør det mulig å utføre administrative oppgaver, som å installere programmer, opprette eller slette brukere, vise informasjon om systemet eller nettverkstrafikken osv. +Pakker som er laget av pakker i et annet format (rpm, tgz mm)\n Pakkene i bolken «alien» ble laget av programmet «alien» fra et annet format enn Debians eget pakkeformat, f.eks fra RPM-pakker +Debians grunnsystem\n Pakkene i bolken «grunnsystem» hører med til første del av Debian-installasjonen. +Programmer for faksmodem og andre kommunikasjonsenheter\n Pakkene i bolken «Kommunikasjon» brukes til å styre modemer og andre enheter på maskinen, deriblant programvare for styring av faksmodemer (for eksempel, PPP for oppringt internettforbindelse og programmer som opprinnelig er skrevet for dette, slik som zmodem og kermit), og programmer for å styre mobiltelefoner, snakke med FidoNet og kjøre et BBS. +Verktøy og programmer for programvareutvikling\n Pakker i seksjonen «utvikling» blir brukt til å skrive nye programmer og for å jobbe med videre med programmer som allerede er laget. Vanlige brukere som ikke kompilerer (setter sammen) sine egne programmer trenger neppe så mange programmer herfra.\n .\n Her finner du kompilatorer, avlusingsverktøy, skriveprogrammer som hjelper til med programmeringen, verktøy for håndtering av kildekode og andre ting som har med utvikling av programmer å gjøre. +Dokumentasjon og spesialiserte program for visning av dokumentasjon\n Pakker i «dok»-seksjonen dokumenterer deler av Debian-systemet eller viser fram dokumenter i forskjellige format. +Skriveprogram og tekstbehandlere\n Pakker i bolken «skriveprogram» lar deg redigere ren ASCII-tekst. Dette er nødvendigvis ikke tekstbehandlere, selv om du kan finne noen av dem her i denne bolken. +Program for å jobba med elektronikk og elektriske kretser\n Pakker i «elektronikk»-seksjonen inneholder verktøy for design av elektriske kretser, simulatorer og assemblere for mikrokontrollere og andre liknende programmer. +Programmer for innebygde systemer\nPakker i bolken «innebygd» er ment til å kjøre på innebygde systemer. Dette er spesialisert maskinvare med mye mindre datakraft enn en typisk skrivebordssystem, for eksempel en PDA, en mobiltelefon eller en Tivo. +Skrivebordssystemet GNOME\n GNOME er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux. Pakker i «gnome»-bolken er enten deler av GNOME-miljøet eller tett sammenvevd med det. +Spill, leketøy og andre programmer som bare er for gøy\n Pakker i «spill»-bolken er stort sett bare til for underholdningens skyld. +Verktøy for å lage, vise og redigere grafikkfiler\n Pakker i «grafikk»-bolken er programmer for visning av bildefiler, bildebehandlingsprogrammer, støtteprogrammer for forskjellig utstyr (som videokort, skanner og digitalt kamera) og programmeringsverktøy for å håndtere grafikk. +Programvare for radioamatører\n Pakker i «hamradio»-bolken er stort sett ment for radioamatører. +Programmer som kjører skriptspråk\n Pakker i «tolkeprogram»-bolken er programmer som kompilerer og kjører språk som Python, Perl og Ruby, og som sørger for standardbibliotek for disse språkene. +Skrivebordssystemet KDE\n KDE er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux. Pakker i «kde»-bolken er enten deler av KDE-miljøet eller tett sammenvevd med det. +Utviklingsfiler for biblioteker\n Pakker i «libdevel»-bolken inneholder filer som trengs for å lage programmer som bruker biblioteker i «libs»-bolken. Du trenger ikke pakker fra denne bolken hvis du ikke har tenkt å lage programmer selv. +Samling av programvarerutiner\n Pakker i «libs»-seksjonen sørger for nødvendige funksjoner som er felles for andre programmer på maskinen. Med svært få unntak skal det ikke værenødvendig å be om at slike pakker blir installert. Pakkesystemet sørger for å installere dem når de andre programmene trenger dem. +Perl-tolker og biblioteker\n Pakker i «perl»-bolken sørger for programmeringsspråket Perl og mange tredjeparts-biblioteker til Perl. Hvis du ikke er Perl-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig. +Python-tolker og biblioteker\n Pakker i «python»-bolken sørger for programmeringsspråket Python og mange tredjeparts-biblioteker til det. Hvis du ikke er Python-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig. +Program for å skrive, sende og omdirigere epostmeldinger\n Pakker i «epost»-bolken inneholder epostlesere, nisser som flytter eposten dit den skal, programvare for epostlister og filter for søppelpost. Det fins også diverse andre programmer som gjør noe med elektronisk post, men som ikke er så lette å plassere i grupper. +Numerisk analyse og andre matematikkrelaterte programmer\n Blant pakker i «matte»-bolken fins kalkulatorer, språk for matematiske utregninger, symbolsk algebra og programmer for å tegne ut matematiske objekter. +Ymse programvare\n Pakker i «ymse»-bolken er ofte vanskelige å klassifisere, men det betyr ikke at de ikke finnes. +Programmer for å koble til og tilby ulike tjenester i et nettverk\n Blant pakker i «nett»-bolken finner du klienter og tjenere for mange protokoller, verktøy for å manipulere og avluse lavnivå nettverksprotokoller, system for direkte meldingstjeneste og andre nettverksrelaterte programmer. +Klienter og tjenere for Usenet\n Pakker i bolken «nyheter» henger sammen med til det distribuerte nyhetssystemet Usenet. Seksjonen tjenere og leseprogrammer (klienter) for dette systemet. +Foreldede programbibliotek\n Pakker i bolken «gamle bibliotek» er foreldede og bør ikke brukes i ny programvare. De er tilgjengelige for at eldre programmer som er avhengige av programmene her fortsatt skal kunne virke.\n .\n Du skal normalt ikke behøve å be om å få installert pakker herfra. Pakkesystemet vil ta med disse pakkene når andre pakker krever det. +Programmer som etterlikner andre datasystemer og og programmer som hjelper deg med å lese fremmede filsystem\n Pakker i bolken «andreosfs» etterlikner maskinvare og operativsystem og tilbyr verktøy for å overføre data mellom ulike operativsystem og maskinvareplattformer. (For eksempel verktøy for å lese DOS-disketter, og verktøy til å kommunisere med håndholdte maskiner som Palm Pilot)\n .\n Programmer for å brenne CD-plater er også med i denne seksjonen. +Programvare for vitenskaplig arbeid\n Pakker i «vitenskap»-bolken er verktøy for astronomi, biologi og kjemi, pluss andre programmer man bruker i vitenskapelig arbeide. +Kommandoskall og alternative konsollmiljø\n Pakker i «skall» er programmer som tilbyr grensesnitt med kommandolinje. +Verktøy for å spille av og ta opp lyd\nI «lyd»-bolken finner du lydavspillere, opptakere, lydkomprimeringsprogram for mange format, miksere og lydstyring, program for MIDI-sekvenser og program for å lage noter. Her finner du også drivere for lydkort og programmer for lydprosessering. +TeX typografi-systemet\n Pakker i bolken «tex» er deler i et system for å produsere utskrifter og andre slags utdata med høy typografisk kvalitet. Det omfatter selve TeX, TeX-pakker, skriveprogrammer som hjelper deg med å lage dokumenter i TeX, verktøy for å gjøre om TeX og TeX utdatafiler til ulike andre format, TeX-skrifttyper og annen programvare knyttet TeX. +Tekstverktøy\n I bolken «tekst» finner du skriveprogrammer og tekstfiltere, stavekontroll, ordbøker og verktøy for å oversette mellom tegnkoding og tekst-filformater (for eksempel Unix og DOS) og programmer for å formatere, skrive ut og redigere som ren tekst. +Forskjellige systemverktøy\n Pakkene i bolken «verktøy» har oppgaver som faller utenfor de andre kategoriene. +Nettlesere, tjenere, mellomtjenere og andre verktøy\n I bolken «nett» finner du blant annet nettlesere, tjenere og mellomtjenere, programmer for å skrive CGI-skript eller nettbaserte programmer og andre programmer som har med verdensveven å gjøre. +Vindussystemet «X» og beslektede programmer\n Pakkene i bolken «X11» inneholder også grunnpakka for vindussystemet «X», vindusbehandlere, verktøy for X og andre programmer med en X-grensesnitt som ble plassert her fordi de ikke passet inn noen andre steder. +Debians hovedarkiv\n Selve Debian-distribusjonen består av pakker fra hovedbolken. Alle pakkene her er fri programvare.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines + Programmer som avhenger av programvare utenfor Debian.\n Pakker i bolken«bidrag» er ikke med i Debian.\n\n Disse pakkene er fri programvare, men de avhenger av programmer som ikke er en del av Debian. Dette kan skyldes at de ikke er fri programvare og ligger i bolken «ufri» i pakkearkivet, og disse kan Debian slett ikke distribuere, eller - i noen sjeldne tilfeller - at ingen har laget en pakke av dette ennå.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines +Programmer som ikke er fri programvare \n Pakkene i bolken «ufri» er ikke en del av Debian\n .\n Disse pakkene passet ikke med en eller flere av betingelsene i Debians retningslinjer for fri programvare (Debian Free Software Guidelines; se nedenfor). Du bør lese lisensen for programmene i denne bolken for å være sikker på at du har rett til å bruke dem slik du har tenkt.\n .\n For mer informasjon om hva Debian mener med «Fri programvare», se http://www.debian.org/social_contract#guidelines +Programmer som er lagret utenfor USA på grunn av eksportforbud.\n Det er stor sjanse for at pakkene i «utenfor USA» inneholder kryptografi, og noen få av dem inneholder patenterte algoritmer. På grunn av dette kan de ikke eksporteres ut av USA, og lagres derfor på en tjener i «den frie verden».\n .\n Merk: Debian-prosjektet er, etter samtale med eksperter på rettsvesenet om nye endringer i eksporteringsreglene, i ferd med å flette kryptografiske programmer inn i de USA-baserte arkivene. De fleste pakkene som før lå i denne bolken er derfor flyttet til «hoved». \ No newline at end of file diff --git a/samples/Text/main.ncl b/samples/Text/main.ncl new file mode 100644 index 00000000..61bee15d --- /dev/null +++ b/samples/Text/main.ncl @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/Text/messages.fr b/samples/Text/messages.fr index da0269bb..c8108873 100644 --- a/samples/Text/messages.fr +++ b/samples/Text/messages.fr @@ -1 +1,2 @@ the green potato=la pomme de terre verte +le nouveau type de musique=the new type of music diff --git a/samples/Text/min-help.ncl b/samples/Text/min-help.ncl new file mode 100644 index 00000000..9fd20117 --- /dev/null +++ b/samples/Text/min-help.ncl @@ -0,0 +1,45 @@ +THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Built-in/min.shtml +THE_TITLE:min + NCL Home > Documentation > Functions > General applied math + +min + + Computes the minimum value of a multi-dimensional array. + +Prototype + + function min ( + value : numeric + ) + + return_val [1] : numeric + +Arguments + + value + + An array of one or more numeric values of any dimension. + +Return value + + Returns a scalar of the same type as value. + +Description + + This function returns the minimum value for an array of any dimensionality. Missing values are ignored; a missing value + is returned only if all values are missing. + +See Also + + max, minind, maxind, dim_min, dim_max, dim_min_n, dim_max_n + +Examples + + Example 1 + + f = (/2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8/) + min_f = min(f) + print(min_f) ; Should be 2.1 + + + ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF diff --git a/samples/Text/receiver.ncl b/samples/Text/receiver.ncl new file mode 100644 index 00000000..83996d66 --- /dev/null +++ b/samples/Text/receiver.ncl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Text/rmMonAnnCycLLT-help.ncl b/samples/Text/rmMonAnnCycLLT-help.ncl new file mode 100644 index 00000000..9467861a --- /dev/null +++ b/samples/Text/rmMonAnnCycLLT-help.ncl @@ -0,0 +1,40 @@ +THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Contributed/rmMonAnnCycLLT.shtml +THE_TITLE:rmMonAnnCycLLT + NCL Home > Documentation > Functions > Climatology + +rmMonAnnCycLLT + + Removes the annual cycle from "monthly" data. + +Prototype + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + + function rmMonAnnCycLLT ( + x [*][*][*] : numeric + ) + + return_val [dimsizes(x)] : typeof(x) + +Arguments + + x + + A three-dimensional array of monthly values, dimensioned lat x lon x time. The time dimension must be a multiple of 12. + +Return value + + The results are returned in an array of the same type and dimensionality as x. If the input data contains metadata, these + will be retained. + +Description + + This function removes the annual cycle from month (number of months = 12) data and subtracts the long term means from + each month. + +See Also + + rmMonAnnCycLLT, rmMonAnnCycTLL, rmMonAnnCycLLLT + + + ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF diff --git a/samples/Text/tutor.nb b/samples/Text/tutor.nb new file mode 100644 index 00000000..242119c7 --- /dev/null +++ b/samples/Text/tutor.nb @@ -0,0 +1,973 @@ +=============================================================================== += V e l k o m m e n t i l i n n f ø r i n g e n i V i m -- Ver. 1.7 = +=============================================================================== + + Vim er en meget kraftig editor med mange kommandoer, alt for mange til å + kunne gå gjennom alle i en innføring som denne. Den er beregnet på å + sette deg inn i bruken av nok kommandoer så du vil være i stand til lett + å kunne bruke Vim som en editor til alle formål. + + Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30 + minutter, avhengig av hvor mye tid du bruker til eksperimentering. + + MERK: + Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne + filen som du kan øve deg på (hvis du kjørte Ŧvimtutorŧ-kommandoen, er + dette allerede en kopi). + + Det er viktig å huske at denne innføringen er beregnet på læring gjennom + bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig. + Hvis du bare leser teksten, vil du glemme kommandoene! + + Først av alt, sjekk at ŦCaps Lockŧ IKKE er aktiv og trykk Ŧjŧ-tasten for + å flytte markøren helt til leksjon 1.1 fyller skjermen. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.1: FLYTTING AV MARKØREN + + + ** For å flytte markøren, trykk tastene h, j, k, l som vist. ** + ^ + k Tips: h-tasten er til venstre og flytter til venstre. + < h l > l-tasten er til høyre og flytter til høyre. + j j-tasten ser ut som en pil som peker nedover. + v + 1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene. + + 2. Hold inne nedovertasten (j) til den repeterer. + Nå vet du hvordan du beveger deg til neste leksjon. + + 3. Gå til leksjon 1.2 ved hjelp av nedovertasten. + +Merk: Hvis du blir usikker på noe du har skrevet, trykk for å gå til + normalmodus. Skriv deretter kommandoen du ønsket på nytt. + +Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til + å bevege markøren mye raskere når du er blitt vant til det. Helt sant! + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.2: AVSLUTTE VIM + + + !! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!! + + 1. Trykk -tasten (for å forsikre deg om at du er i normalmodus). + + 2. Skriv: :q! . + Dette avslutter editoren og FORKASTER alle forandringer som du har gjort. + + 3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne + innføringen. Den er: vimtutor + + 4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å + avslutte og starte editoren på nytt. + +MERK: :q! forkaster alle forandringer som du gjorde. I løpet av noen + få leksjoner vil du lære hvordan du lagrer forandringene til en fil. + + 5. Flytt markøren ned til leksjon 1.3. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.3: REDIGERING AV TEKST -- SLETTING + + + ** Trykk x for å slette tegnet under markøren. ** + + 1. Flytt markøren til den første linjen merket med --->. + + 2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som + skal slettes. + + 3. Trykk tasten x for å slette det uønskede tegnet. + + 4. Repeter punkt 2 til 4 til setningen er lik den som er under. + +---> Hessstennnn brrråsnudddde ii gaaata. +---> Hesten bråsnudde i gata. + + 5. Nå som linjen er korrekt, gå til leksjon 1.4. + +MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men + bruk dem helt til de sitter. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING + + + ** Trykk i for å sette inn tekst. ** + + 1. Flytt markøren til den første linjen som er merket med --->. + + 2. For å gjøre den første linjen lik den andre, flytt markøren til den står + på tegnet ETTER posisjonen der teksten skal settes inn. + + 3. Trykk i og skriv inn teksten som mangler. + + 4. Etterhvert som hver feil er fikset, trykk for å returnere til + normalmodus. Repeter punkt 2 til 4 til setningen er korrekt. + +---> Det er tkst som mnglr . +---> Det er ganske mye tekst som mangler her. + + 5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen + nedenfor. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL + + + ** Trykk A for å legge til tekst. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + Det har ikke noe å si hvor markøren er plassert på den linjen. + + 2. Trykk A og skriv inn det som skal legges til. + + 3. Når teksten er lagt til, trykk for å returnere til normalmodusen. + + 4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og + 3 for å reparere denne setningen. + +---> Det mangler noe tekst p + Det mangler noe tekst på denne linjen. +---> Det mangler også litt tek + Det mangler også litt tekst på denne linjen. + + 5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.6: REDIGERE EN FIL + + + ** Bruk :wq for å lagre en fil og avslutte. ** + + !! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!! + + 1. Avslutt denne innføringen som du gjorde i leksjon 1.2: :q! + + 2. Skriv denne kommandoen på kommandolinja: vim tutor + Ŧvimŧ er kommandoen for å starte Vim-editoren, Ŧtutorŧ er navnet på fila + som du vil redigere. Bruk en fil som kan forandres. + + 3. Sett inn og slett tekst som du lærte i de foregående leksjonene. + + 4. Lagre filen med forandringene og avslutt Vim med: :wq + + 5. Start innføringen på nytt og flytt ned til oppsummeringen som følger. + + 6. Etter å ha lest og forstått stegene ovenfor: Sett i gang. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 1 + + + 1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene. + h (venstre) j (ned) k (opp) l (høyre) + + 2. For å starte Vim fra skall-kommandolinjen, skriv: vim FILNAVN + + 3. For å avslutte Vim, skriv: :q! for å forkaste endringer. + ELLER skriv: :wq for å lagre forandringene. + + 4. For å slette tegnet under markøren, trykk: x + + 5. For å sette inn eller legge til tekst, trykk: + i skriv innsatt tekst sett inn før markøren + A skriv tillagt tekst legg til på slutten av linjen + +MERK: Når du trykker går du til normalmodus eller du avbryter en uønsket + og delvis fullført kommando. + + Nå kan du gå videre til leksjon 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.1: SLETTEKOMMANDOER + + + ** Trykk dw for å slette et ord. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til den første linjen nedenfor merket --->. + + 3. Flytt markøren til begynnelsen av ordet som skal slettes. + + 4. Trykk dw og ordet vil forsvinne. + +MERK: Bokstaven d vil komme til syne på den nederste linjen på skjermen når + du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet + tegn enn d har du skrevet noe feil; trykk og start på nytt. + +---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen. +---> Det er tre ord som ikke hører hjemme i denne setningen. + + 5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå + deretter til leksjon 2.2. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.2: FLERE SLETTEKOMMANDOER + + + ** Trykk d$ for å slette til slutten av linjen. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til linjen nedenfor merket --->. + + 3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum). + + 4. Trykk d$ for å slette alt til slutten av linjen. + +---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye. + + 5. Gå til leksjon 2.3 for å forstå hva som skjer. + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.3: OM OPERATORER OG BEVEGELSER + + + Mange kommandoer som forandrer teksten er laget ut i fra en operator og en + bevegelse. Formatet for en slettekommando med sletteoperatoren d er: + + d bevegelse + + Der: + d - er sletteoperatoren. + bevegelse - er hva operatoren vil opere på (listet nedenfor). + + En kort liste med bevegelser: + w - til starten av det neste ordet, UNNTATT det første tegnet. + e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet. + $ - til slutten av linjen, INKLUDERT det siste tegnet. + + Ved å skrive de vil altså alt fra markøren til slutten av ordet bli + slettet. + +MERK: Ved å skrive kun bevegelsen i normalmodusen uten en operator vil + markøren flyttes som spesifisert. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE + + + ** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. ** + + 1. Flytt markøren til starten av linjen markert ---> nedenfor. + + 2. Skriv 2w for å flytte markøren to ord framover. + + 3. Skriv 3e for å flytte markøren framover til slutten av det tredje + ordet. + + 4. Skriv 0 (null) for å flytte til starten av linjen. + + 5. Repeter steg 2 og 3 med forskjellige tall. + +---> Dette er en linje med noen ord som du kan bevege deg rundt på. + + 6. Gå videre til leksjon 2.5. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER + + + ** Et tall sammen med en operator repeterer den så mange ganger. ** + + I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du + inn antall før bevegelsen for å slette mer: + d nummer bevegelse + + 1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert + med --->. + + 2. Skriv 2dw for å slette de to ordene med store bokstaver. + + 3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende + ordene som har store bokstaver. + +---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar. + +MERK: Et antall mellom operatoren d og bevegelsen virker på samme måte som å + bruke bevegelsen uten en operator. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.6: OPERERE PÅ LINJER + + + ** Trykk dd for å slette en hel linje. ** + + På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at + det vil være lettere å rett og slett trykke to d-er for å slette en linje. + + 1. Flytt markøren til den andre linjen i verset nedenfor. + 2. Trykk dd å slette linjen. + 3. Flytt deretter til den fjerde linjen. + 4. Trykk 2dd for å slette to linjer. + +---> 1) Roser er røde, +---> 2) Gjørme er gøy, +---> 3) Fioler er blå, +---> 4) Jeg har en bil, +---> 5) Klokker viser tiden, +---> 6) Druer er søte +---> 7) Og du er likeså. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.7: ANGRE-KOMMANDOEN + + + ** Trykk u for å angre siste kommando, U for å fikse en hel linje. ** + + 1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den + første feilen. + 2. Trykk x for å slette det første uønskede tegnet. + 3. Trykk så u for å angre den siste utførte kommandoen. + 4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen x . + 5. Trykk nå en stor U for å sette linjen tilbake til det den var + originalt. + 6. Trykk u noen ganger for å angre U og foregående kommandoer. + 7. Deretter trykker du CTRL-R (hold CTRL nede mens du trykker R) noen + ganger for å gjenopprette kommandoene (omgjøre angrekommandoene). + +---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre. + + 8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av + leksjon 2. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 2 + + + 1. For å slette fra markøren fram til det neste ordet, trykk: dw + 2. For å slette fra markøren til slutten av en linje, trykk: d$ + 3. For å slette en hel linje, trykk: dd + + 4. For å repetere en bevegelse, sett et nummer foran: 2w + 5. Formatet for en forandringskommando er: + operator [nummer] bevegelse + der: + operator - hva som skal gjøres, f.eks. d for å slette + [nummer] - et valgfritt antall for å repetere bevegelsen + bevegelse - hva kommandoen skal operere på, eksempelvis w (ord), + $ (til slutten av linjen) og så videre. + + 6. For å gå til starten av en linje, bruk en null: 0 + + 7. For å angre tidligere endringer, skriv: u (liten u) + For å angre alle forandringer på en linje, skriv: U (stor U) + For å omgjøre angringen, trykk: CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.1: ŦLIM INNŧ-KOMMANDOEN + + + ** Trykk p for å lime inn tidligere slettet tekst etter markøren ** + + 1. Flytt markøren til den første linjen med ---> nedenfor. + + 2. Trykk dd for å slette linjen og lagre den i et Vim-register. + + 3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn. + + 4. Trykk p for å legge linjen under markøren. + + 5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge. + +---> d) Kan du også lære? +---> b) Fioler er blå, +---> c) Intelligens må læres, +---> a) Roser er røde, + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.2: ŦERSTATTŧ-KOMMANDOEN + + + ** Trykk rx for å erstatte tegnet under markøren med x. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + + 2. Flytt markøren så den står oppå den første feilen. + + 3. Trykk r og deretter tegnet som skal være der. + + 4. Repeter punkt 2 og 3 til den første linjen er lik den andre. + +---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster! +---> Da denne linjen ble skrevet, var det noen som trykket feile taster! + + 5. Gå videre til leksjon 3.2. + +MERK: Husk at du bør lære ved å BRUKE, ikke pugge. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.3: ŦFORANDREŧ-OPERATOREN + + + ** For å forandre til slutten av et ord, trykk ce . ** + + 1. Flytt markøren til den første linjen nedenfor som er merket --->. + + 2. Plasser markøren på u i Ŧlubjwrŧ. + + 3. Trykk ce og det korrekte ordet (i dette tilfellet, skriv Ŧinjenŧ). + + 4. Trykk og gå til det neste tegnet som skal forandres. + + 5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre. + +---> Denne lubjwr har noen wgh som må forkwåp med Ŧforækzryasŧ-kommandoen. +---> Denne linjen har noen ord som må forandres med Ŧforandreŧ-kommandoen. + +Vær oppmerksom på at ce sletter ordet og går inn i innsettingsmodus. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c + + + ** Forandringskommandoen blir brukt med de samme bevegelser som Ŧslettŧ. ** + + 1. Forandringsoperatoren fungerer på samme måte som Ŧslettŧ. Formatet er: + + c [nummer] bevegelse + + 2. Bevegelsene er de samme, som for eksempel w (ord) og $ (slutten av en + linje). + + 3. Gå til den første linjen nedenfor som er merket --->. + + 4. Flytt markøren til den første feilen. + + 5. Skriv c$ og skriv resten av linjen lik den andre og trykk . + +---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste. +---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen. + +MERK: Du kan bruke slettetasten for å rette feil mens du skriver. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 3 + + + 1. For å legge tilbake tekst som nettopp er blitt slettet, trykk p . Dette + limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet + vil den bli limt inn på linjen under markøren). + + 2. For å erstatte et tegn under markøren, trykk r og deretter tegnet som + du vil ha der. + + 3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen + tar deg. Det vil si, skriv ce for å forandre fra markøren til slutten + av ordet, c$ for å forandre til slutten av linjen. + + 4. Formatet for Ŧforandreŧ er: + + c [nummer] bevegelse + +Nå kan du gå til neste leksjon. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS + + ** Trykk CTRL-G for å vise posisjonen i filen og filstatusen. + Trykk G for å gå til en spesifikk linje i filen. ** + + Merk: Les hele leksjonen før du utfører noen av punktene! + + 1. Hold nede Ctrl-tasten og trykk g . Vi kaller dette CTRL-G. En melding + vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i + filen. Husk linjenummeret for bruk i steg 3. + +Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette + skjer når Ŧrulerŧ-valget er satt (forklart i leksjon 6). + + 2. Trykk G for å gå til bunnen av filen. + Skriv gg for å gå til begynnelsen av filen. + + 3. Skriv inn linjenummeret du var på og deretter G . Dette vil føre deg + tilbake til linjen du var på da du først trykket CTRL-G. + + 4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.2: SØKEKOMMANDOEN + + ** Skriv / etterfulgt av en søkestreng som du vil lete etter. ** + + 1. Trykk / når du er i normalmodusen. Legg merke til at skråstreken og + markøren kommer til syne på bunnen av skjermen i likhet med + Ŧ:ŧ-kommandoene. + + 2. Skriv Ŧfeeeiilŧ og trykk . Dette er teksten du vil lete etter. + + 3. For å finne neste forekomst av søkestrengen, trykk n . + For å lete etter samme søketeksten i motsatt retning, trykk N . + + 4. For å lete etter en tekst bakover i filen, bruk ? istedenfor / . + + 5. For å gå tilbake til der du kom fra, trykk CTRL-O (Hold Ctrl nede mens + du trykker bokstaven o ). Repeter for å gå enda lengre tilbake. CTRL-I + går framover. + +---> Ŧfeeeiilŧ er ikke måten å skrive Ŧfeilŧ på, feeeiil er helt feil. +Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt + hvis Ŧwrapscanŧ-valget er resatt. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.3: FINN SAMSVARENDE PARENTESER + + + ** Trykk % for å finne en samsvarende ), ] eller } . ** + + 1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->. + + 2. Trykk % . + + 3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen. + + 4. Trykk % for å flytte markøren til den andre samsvarende parentesen. + + 5. Flytt markøren til en annen (, ), [, ], { eller } og se hva % gjør. + +---> Dette ( er en testlinje med (, [ ] og { } i den )). + +Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert + antall parenteser! + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.4: ERSTATT-KOMMANDOEN + + + ** Skriv :s/gammel/ny/g for å erstatte Ŧgammelŧ med Ŧnyŧ. ** + + 1. Flytt markøren til linjen nedenfor som er merket med --->. + + 2. Skriv :s/deen/den/ . Legg merke til at denne kommandoen bare + forandrer den første forekomsten av Ŧdeenŧ på linjen. + + 3. Skriv :s/deen/den/g . Når g-flagget legges til, betyr dette global + erstatning på linjen og erstatter alle forekomster av Ŧdeenŧ på linjen. + +---> deen som kan kaste deen tyngste steinen lengst er deen beste + + 4. For å erstatte alle forekomster av en tekststreng mellom to linjer, + skriv :#,#s/gammel/ny/g der #,# er linjenumrene på de to linjene for + linjeområdet erstatningen skal gjøres. + Skriv :%s/gammel/ny/g for å erstatte tekst i hele filen. + Skriv :%s/gammel/ny/gc for å finne alle forekomster i hele filen, og + deretter spørre om teksten skal erstattes eller + ikke. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 4 + + + 1. Ctrl-G viser nåværende posisjon i filen og filstatusen. + G går til slutten av filen. + nummer G går til det linjenummeret. + gg går til den første linjen. + + 2. Skriv / etterfulgt av en søketekst for å lete FRAMOVER etter teksten. + Skriv ? etterfulgt av en søketekst for å lete BAKOVER etter teksten. + Etter et søk kan du trykke n for å finne neste forekomst i den samme + retningen eller N for å lete i motsatt retning. + CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner. + + 3. Skriv % når markøren står på en (, ), [, ], { eller } for å finne den + som samsvarer. + + 4. Erstatte Ŧgammelŧ med første Ŧnyŧ på en linje: :s/gammel/ny + Erstatte alle Ŧgammelŧ med Ŧnyŧ på en linje: :s/gammel/ny/g + Erstatte tekst mellom to linjenumre: :#,#s/gammel/ny/g + Erstatte alle forekomster i en fil: :%s/gammel/ny/g + For å godkjenne hver erstatning, legg til Ŧcŧ: :%s/gammel/ny/gc +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO + + + ** Skriv :! etterfulgt av en ekstern kommando for å utføre denne. ** + + 1. Skriv den velkjente kommandoen : for å plassere markøren på bunnen av + skjermen. Dette lar deg skrive en kommandolinjekommando. + + 2. Nå kan du skrive tegnet ! . Dette lar deg utføre en hvilken som helst + ekstern kommando. + + 3. Som et eksempel, skriv ls etter utropstegnet og trykk . Du vil + nå få en liste over filene i katalogen, akkurat som om du hadde kjørt + kommandoen direkte fra kommandolinjen i skallet. Eller bruk :!dir hvis + Ŧlsŧ ikke virker. + +MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med + parametere. + +MERK: Alle Ŧ:ŧ-kommandoer må avsluttes med . Fra dette punktet er det + ikke alltid vi nevner det. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.2: MER OM LAGRING AV FILER + + + ** For å lagre endringene gjort i en tekst, skriv :w FILNAVN. ** + + 1. Skriv :!dir eller :!ls for å få en liste over filene i katalogen. Du + vet allerede at du må trykke etter dette. + + 2. Velg et filnavn på en fil som ikke finnes, som for eksempel TEST . + + 3. Skriv :w TEST (der TEST er filnavnet du velger). + + 4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å + sjekke dette, skriv :!dir eller :!ls igjen for å se innholdet av + katalogen. + +Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med Ŧvim TESTŧ, + ville filen vært en eksakt kopi av innføringen da du lagret den. + + 5. Fjern filen ved å skrive :!rm TEST hvis du er på et Unix-lignende + operativsystem, eller :!del TEST hvis du bruker MS-DOS. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES + + + ** For å lagre en del av en fil, skriv v bevegelse :w FILNAVN ** + + 1. Flytt markøren til denne linjen. + + 2. Trykk v og flytt markøren til det femte elementet nedenfor. Legg merke + til at teksten blir markert. + + 3. Trykk : (kolon). På bunnen av skjermen vil :'<,'> komme til syne. + + 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller + at du ser :'<,'>w TEST før du trykker Enter. + + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls + for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. + +MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for + å gjøre det valgte området større eller mindre. Deretter kan du bruke en + operator for å gjøre noe med teksten. For eksempel sletter d teksten. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER + + + ** For å lese inn en annen fil inn i nåværende buffer, skriv :r FILNAVN ** + + 1. Plasser markøren like over denne linjen. + +MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter + NED for å se denne leksjonen igjen. + + 2. Hent TEST-filen ved å bruke kommandoen :r TEST der TEST er navnet på + filen du brukte. Filen du henter blir plassert nedenfor markørlinjen. + + 3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av + leksjon 5.3, originalen og denne versjonen. + +MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel, :r !ls + leser utdataene av ls-kommandoen og legger dem nedenfor markøren. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 5 + + + 1. :!kommando utfører en ekstern kommandio. + + Noen nyttige eksempler er: + (MS-DOS) (Unix) + :!dir :!ls - List filene i katalogen. + :!del FILNAVN :!rm FILNAVN - Slett filen FILNAVN. + + 2. :w FILNAVN skriver den nåværende Vim-filen disken med navnet FILNAVN . + + 3. v bevegelse :w FILNAVN lagrer de visuelt valgte linjene til filen + FILNAVN. + + 4. :r FILNAVN henter filen FILNAVN og legger den inn nedenfor markøren. + + 5. :r !dir leser utdataene fra Ŧdirŧ-kommandoen og legger dem nedenfor + markørposisjonen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.1: ŦÅPNE LINJEŧ-KOMMANDOEN + + + ** Skriv o for å Ŧåpne oppŧ for en ny linje etter markøren og gå til + innsettingsmodus ** + + 1. Flytt markøren til linjen nedenfor merket --->. + + 2. Skriv o (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + + 3. Skriv litt tekst og trykk for å gå ut av innsettingsmodusen. + +---> Etter at o er skrevet blir markøren plassert på den tomme linjen. + + 4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor O + istedenfor en liten o . Prøv dette på linjen nedenfor. + +---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.2: ŦLEGG TILŧ-KOMMANDOEN + + + ** Skriv a for å legge til tekst ETTER markøren. ** + + 1. Flytt markøren til starten av linjen merket ---> nedenfor. + + 2. Trykk e til markøren er på slutten av Ŧliŧ. + + 3. Trykk a (liten a) for å legge til tekst ETTER markøren. + + 4. Fullfør ordet sånn som på linjen nedenfor. Trykk for å gå ut av + innsettingsmodusen. + + 5. Bruk e for å gå til det neste ufullstendige ordet og repeter steg 3 og + 4. + +---> Denne li lar deg øve på å leg til tek på en linje. +---> Denne linjen lar deg øve på å legge til tekst på en linje. + +Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste + forskjellen er hvor tegnene blir satt inn. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ + + + ** Skriv en stor R for å erstatte mer enn ett tegn. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren + til begynnelsen av den første Ŧxxxŧ-en. + + 2. Trykk R og skriv inn tallet som står nedenfor på den andre linjen så + det erstatter xxx. + + 3. Trykk for å gå ut av erstatningsmodusen. Legg merke til at resten + av linjen forblir uforandret. + + 4. Repeter stegene for å erstatte den gjenværende xxx. + +---> Ved å legge 123 til xxx får vi xxx. +---> Ved å legge 123 til 456 får vi 579. + +MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives + erstatter et eksisterende tegn. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.4: KOPIERE OG LIME INN TEKST + + + ** Bruk y-operatoren for å kopiere tekst og p for å lime den inn ** + + 1. Gå til linjen merket ---> nedenfor og plasser markøren etter Ŧa)ŧ. + + 2. Gå inn i visuell modus med v og flytt markøren til like før Ŧførsteŧ. + + 3. Trykk y for å kopiere (engelsk: Ŧyankŧ) den uthevede teksten. + + 4. Flytt markøren til slutten av den neste linjen: j$ + + 5. Trykk p for å lime inn teksten. Trykk deretter: a andre . + + 6. Bruk visuell modus for å velge Ŧ valget.ŧ, kopier det med y , gå til + slutten av den neste linjen med j$ og legg inn teksten der med p . + +---> a) Dette er det første valget. + b) + +Merk: Du kan også bruke y som en operator; yw kopierer ett ord. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.5: SETT VALG + + + ** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. ** + + 1. Let etter Ŧignoreŧ ved å skrive: /ignore + Repeter flere ganger ved å trykke n . + + 2. Sett Ŧicŧ-valget (Ignore Case) ved å skrive: :set ic + + 3. Søk etter Ŧignoreŧ igjen ved å trykke n . + Legg merke til at både ŦIgnoreŧ og ŦIGNOREŧ blir funnet. + + 4. Sett Ŧhlsearchŧ- og Ŧincsearchŧ-valgene: :set hls is + + 5. Skriv søkekommandoen igjen og se hva som skjer: /ignore + + 6. For å slå av ignorering av store/små bokstaver, skriv: :set noic + +Merk: For å fjerne uthevingen av treff, skriv: :nohlsearch +Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk + \c i uttrykket: /ignore\c +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 6 + + 1. Trykk o for å legge til en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + Trykk O for å åpne en linje OVER markøren. + + 2. Skriv a for å sette inn tekst ETTER markøren. + Skriv A for å sette inn tekst etter slutten av linjen. + + 3. Kommandoen e går til slutten av et ord. + + 4. Operatoren y (Ŧyankŧ) kopierer tekst, p (Ŧpasteŧ) limer den inn. + + 5. Ved å trykke R går du inn i erstatningsmodus helt til trykkes. + + 6. Skriv Ŧ:set xxxŧ for å sette valget Ŧxxxŧ. Noen valg er: + Ŧicŧ Ŧignorecaseŧ ignorer store/små bokstaver under søk + Ŧisŧ Ŧincsearchŧ vis delvise treff for en søketekst + Ŧhlsŧ Ŧhlsearchŧ uthev alle søketreff + + 7. Legg til Ŧnoŧ foran valget for å slå det av: :set noic + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.1: FÅ HJELP + + + ** Bruk det innebygde hjelpesystemet. ** + + Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av + disse måtene: + - Trykk Hjelp-tasten (hvis du har en) + - Trykk F1-tasten (hvis du har en) + - Skriv :help + + Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker. + Skriv CTRL-W CTRL-W for å hoppe fra et vindu til et annet + Skriv :q for å lukke hjelpevinduet. + + Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til + Ŧ:helpŧ-kommandoen. Prøv disse (ikke glem å trykke ): + + :help w + :help c_CTRL-D + :help insert-index + :help user-manual +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.2: LAG ET OPPSTARTSSKRIPT + + + ** Slå på funksjoner i Vim ** + + Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av + som standard. For å begynne å bruke flere funksjoner må du lage en + Ŧvimrcŧ-fil. + + 1. Start redigeringen av Ŧvimrcŧ-filen. Dette avhenger av systemet ditt: + :e ~/.vimrc for Unix + :e $VIM/_vimrc for MS Windows + + 2. Les inn eksempelfilen for Ŧvimrcŧ: + :r $VIMRUNTIME/vimrc_example.vim + + 3. Lagre filen med: + :w + + Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til + alle dine foretrukne oppsett i denne Ŧvimrcŧ-filen. + For mer informasjon, skriv :help vimrc-intro +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.3: FULLFØRING + + + ** Kommandolinjefullføring med CTRL-D og ** + + 1. Vær sikker på at Vim ikke er i Vi-kompatibel modus: :set nocp + + 2. Se hvilke filer som er i katalogen: :!ls eller :!dir + + 3. Skriv starten på en kommando: :e + + 4. Trykk CTRL-D og Vim vil vise en liste over kommandoer som starter med + Ŧeŧ. + + 5. Trykk og Vim vil fullføre kommandonavnet til Ŧ:editŧ. + + 6. Legg til et mellomrom og starten på et eksisterende filnavn: :edit FIL + + 7. Trykk . Vim vil fullføre navnet (hvis det er unikt). + +MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og + . Det er spesielt nyttig for bruk sammen med :help . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 7 + + + 1. Skriv :help eller trykk eller for å åpne et hjelpevindu. + + 2. Skriv :help kommando for å få hjelp om kommando . + + 3. Trykk CTRL-W CTRL-W for å hoppe til et annet vindu. + + 4. Trykk :q for å lukke hjelpevinduet. + + 5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine. + + 6. Når du skriver en Ŧ:ŧ-kommando, trykk CTRL-D for å se mulige + fullføringer. Trykk for å bruke en fullføring. + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Her slutter innføringen i Vim. Den var ment som en rask oversikt over + editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på + langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen + ved å skrive :help user-manual . + + For videre lesing og studier, kan denne boken anbefales: + ŦVim - Vi Improvedŧ av Steve Oualline + Utgiver: New Riders + Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for + nybegynnere. Inneholder mange eksempler og illustrasjoner. + Se http://iccf-holland.org/click5.html + + Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også: + ŦLearning the Vi Editorŧ av Linda Lamb + Utgiver: O'Reilly & Associates Inc. + Det er en god bok for å få vite omtrent hva som helst om Vi. + Den sjette utgaven inneholder også informasjon om Vim. + + Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware, + Colorado School of Mines med idéer av Charles Smith, Colorado State + University. E-mail: bware@mines.colorado.edu . + + Modifisert for Vim av Bram Moolenaar. + Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org + Id: tutor.no 406 2007-03-18 22:48:36Z sunny + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +vim: set ts=8 : diff --git a/samples/Text/tutor.no b/samples/Text/tutor.no new file mode 100644 index 00000000..f9d49c2a --- /dev/null +++ b/samples/Text/tutor.no @@ -0,0 +1,973 @@ +=============================================================================== += V e l k o m m e n t i l i n n f ø r i n g e n i V i m -- Ver. 1.7 = +=============================================================================== + + Vim er en meget kraftig editor med mange kommandoer, alt for mange til å + kunne gå gjennom alle i en innføring som denne. Den er beregnet på å + sette deg inn i bruken av nok kommandoer så du vil være i stand til lett + å kunne bruke Vim som en editor til alle formål. + + Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30 + minutter, avhengig av hvor mye tid du bruker til eksperimentering. + + MERK: + Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne + filen som du kan øve deg på (hvis du kjørte «vimtutor»-kommandoen, er + dette allerede en kopi). + + Det er viktig å huske at denne innføringen er beregnet på læring gjennom + bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig. + Hvis du bare leser teksten, vil du glemme kommandoene! + + Først av alt, sjekk at «Caps Lock» IKKE er aktiv og trykk «j»-tasten for + å flytte markøren helt til leksjon 1.1 fyller skjermen. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.1: FLYTTING AV MARKØREN + + + ** For å flytte markøren, trykk tastene h, j, k, l som vist. ** + ^ + k Tips: h-tasten er til venstre og flytter til venstre. + < h l > l-tasten er til høyre og flytter til høyre. + j j-tasten ser ut som en pil som peker nedover. + v + 1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene. + + 2. Hold inne nedovertasten (j) til den repeterer. + Nå vet du hvordan du beveger deg til neste leksjon. + + 3. Gå til leksjon 1.2 ved hjelp av nedovertasten. + +Merk: Hvis du blir usikker på noe du har skrevet, trykk for å gå til + normalmodus. Skriv deretter kommandoen du ønsket på nytt. + +Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til + å bevege markøren mye raskere når du er blitt vant til det. Helt sant! + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.2: AVSLUTTE VIM + + + !! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!! + + 1. Trykk -tasten (for å forsikre deg om at du er i normalmodus). + + 2. Skriv: :q! . + Dette avslutter editoren og FORKASTER alle forandringer som du har gjort. + + 3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne + innføringen. Den er: vimtutor + + 4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å + avslutte og starte editoren på nytt. + +MERK: :q! forkaster alle forandringer som du gjorde. I løpet av noen + få leksjoner vil du lære hvordan du lagrer forandringene til en fil. + + 5. Flytt markøren ned til leksjon 1.3. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.3: REDIGERING AV TEKST -- SLETTING + + + ** Trykk x for å slette tegnet under markøren. ** + + 1. Flytt markøren til den første linjen merket med --->. + + 2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som + skal slettes. + + 3. Trykk tasten x for å slette det uønskede tegnet. + + 4. Repeter punkt 2 til 4 til setningen er lik den som er under. + +---> Hessstennnn brrråsnudddde ii gaaata. +---> Hesten bråsnudde i gata. + + 5. Nå som linjen er korrekt, gå til leksjon 1.4. + +MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men + bruk dem helt til de sitter. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING + + + ** Trykk i for å sette inn tekst. ** + + 1. Flytt markøren til den første linjen som er merket med --->. + + 2. For å gjøre den første linjen lik den andre, flytt markøren til den står + på tegnet ETTER posisjonen der teksten skal settes inn. + + 3. Trykk i og skriv inn teksten som mangler. + + 4. Etterhvert som hver feil er fikset, trykk for å returnere til + normalmodus. Repeter punkt 2 til 4 til setningen er korrekt. + +---> Det er tkst som mnglr . +---> Det er ganske mye tekst som mangler her. + + 5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen + nedenfor. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL + + + ** Trykk A for å legge til tekst. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + Det har ikke noe å si hvor markøren er plassert på den linjen. + + 2. Trykk A og skriv inn det som skal legges til. + + 3. Når teksten er lagt til, trykk for å returnere til normalmodusen. + + 4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og + 3 for å reparere denne setningen. + +---> Det mangler noe tekst p + Det mangler noe tekst på denne linjen. +---> Det mangler også litt tek + Det mangler også litt tekst på denne linjen. + + 5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.6: REDIGERE EN FIL + + + ** Bruk :wq for å lagre en fil og avslutte. ** + + !! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!! + + 1. Avslutt denne innføringen som du gjorde i leksjon 1.2: :q! + + 2. Skriv denne kommandoen på kommandolinja: vim tutor + «vim» er kommandoen for å starte Vim-editoren, «tutor» er navnet på fila + som du vil redigere. Bruk en fil som kan forandres. + + 3. Sett inn og slett tekst som du lærte i de foregående leksjonene. + + 4. Lagre filen med forandringene og avslutt Vim med: :wq + + 5. Start innføringen på nytt og flytt ned til oppsummeringen som følger. + + 6. Etter å ha lest og forstått stegene ovenfor: Sett i gang. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 1 + + + 1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene. + h (venstre) j (ned) k (opp) l (høyre) + + 2. For å starte Vim fra skall-kommandolinjen, skriv: vim FILNAVN + + 3. For å avslutte Vim, skriv: :q! for å forkaste endringer. + ELLER skriv: :wq for å lagre forandringene. + + 4. For å slette tegnet under markøren, trykk: x + + 5. For å sette inn eller legge til tekst, trykk: + i skriv innsatt tekst sett inn før markøren + A skriv tillagt tekst legg til på slutten av linjen + +MERK: Når du trykker går du til normalmodus eller du avbryter en uønsket + og delvis fullført kommando. + + Nå kan du gå videre til leksjon 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.1: SLETTEKOMMANDOER + + + ** Trykk dw for å slette et ord. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til den første linjen nedenfor merket --->. + + 3. Flytt markøren til begynnelsen av ordet som skal slettes. + + 4. Trykk dw og ordet vil forsvinne. + +MERK: Bokstaven d vil komme til syne på den nederste linjen på skjermen når + du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet + tegn enn d har du skrevet noe feil; trykk og start på nytt. + +---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen. +---> Det er tre ord som ikke hører hjemme i denne setningen. + + 5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå + deretter til leksjon 2.2. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.2: FLERE SLETTEKOMMANDOER + + + ** Trykk d$ for å slette til slutten av linjen. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til linjen nedenfor merket --->. + + 3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum). + + 4. Trykk d$ for å slette alt til slutten av linjen. + +---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye. + + 5. Gå til leksjon 2.3 for å forstå hva som skjer. + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.3: OM OPERATORER OG BEVEGELSER + + + Mange kommandoer som forandrer teksten er laget ut i fra en operator og en + bevegelse. Formatet for en slettekommando med sletteoperatoren d er: + + d bevegelse + + Der: + d - er sletteoperatoren. + bevegelse - er hva operatoren vil opere på (listet nedenfor). + + En kort liste med bevegelser: + w - til starten av det neste ordet, UNNTATT det første tegnet. + e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet. + $ - til slutten av linjen, INKLUDERT det siste tegnet. + + Ved å skrive de vil altså alt fra markøren til slutten av ordet bli + slettet. + +MERK: Ved å skrive kun bevegelsen i normalmodusen uten en operator vil + markøren flyttes som spesifisert. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE + + + ** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. ** + + 1. Flytt markøren til starten av linjen markert ---> nedenfor. + + 2. Skriv 2w for å flytte markøren to ord framover. + + 3. Skriv 3e for å flytte markøren framover til slutten av det tredje + ordet. + + 4. Skriv 0 (null) for å flytte til starten av linjen. + + 5. Repeter steg 2 og 3 med forskjellige tall. + +---> Dette er en linje med noen ord som du kan bevege deg rundt på. + + 6. Gå videre til leksjon 2.5. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER + + + ** Et tall sammen med en operator repeterer den så mange ganger. ** + + I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du + inn antall før bevegelsen for å slette mer: + d nummer bevegelse + + 1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert + med --->. + + 2. Skriv 2dw for å slette de to ordene med store bokstaver. + + 3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende + ordene som har store bokstaver. + +---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar. + +MERK: Et antall mellom operatoren d og bevegelsen virker på samme måte som å + bruke bevegelsen uten en operator. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.6: OPERERE PÅ LINJER + + + ** Trykk dd for å slette en hel linje. ** + + På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at + det vil være lettere å rett og slett trykke to d-er for å slette en linje. + + 1. Flytt markøren til den andre linjen i verset nedenfor. + 2. Trykk dd å slette linjen. + 3. Flytt deretter til den fjerde linjen. + 4. Trykk 2dd for å slette to linjer. + +---> 1) Roser er røde, +---> 2) Gjørme er gøy, +---> 3) Fioler er blå, +---> 4) Jeg har en bil, +---> 5) Klokker viser tiden, +---> 6) Druer er søte +---> 7) Og du er likeså. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.7: ANGRE-KOMMANDOEN + + + ** Trykk u for å angre siste kommando, U for å fikse en hel linje. ** + + 1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den + første feilen. + 2. Trykk x for å slette det første uønskede tegnet. + 3. Trykk så u for å angre den siste utførte kommandoen. + 4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen x . + 5. Trykk nå en stor U for å sette linjen tilbake til det den var + originalt. + 6. Trykk u noen ganger for å angre U og foregående kommandoer. + 7. Deretter trykker du CTRL-R (hold CTRL nede mens du trykker R) noen + ganger for å gjenopprette kommandoene (omgjøre angrekommandoene). + +---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre. + + 8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av + leksjon 2. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 2 + + + 1. For å slette fra markøren fram til det neste ordet, trykk: dw + 2. For å slette fra markøren til slutten av en linje, trykk: d$ + 3. For å slette en hel linje, trykk: dd + + 4. For å repetere en bevegelse, sett et nummer foran: 2w + 5. Formatet for en forandringskommando er: + operator [nummer] bevegelse + der: + operator - hva som skal gjøres, f.eks. d for å slette + [nummer] - et valgfritt antall for å repetere bevegelsen + bevegelse - hva kommandoen skal operere på, eksempelvis w (ord), + $ (til slutten av linjen) og så videre. + + 6. For å gå til starten av en linje, bruk en null: 0 + + 7. For å angre tidligere endringer, skriv: u (liten u) + For å angre alle forandringer på en linje, skriv: U (stor U) + For å omgjøre angringen, trykk: CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.1: «LIM INN»-KOMMANDOEN + + + ** Trykk p for å lime inn tidligere slettet tekst etter markøren ** + + 1. Flytt markøren til den første linjen med ---> nedenfor. + + 2. Trykk dd for å slette linjen og lagre den i et Vim-register. + + 3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn. + + 4. Trykk p for å legge linjen under markøren. + + 5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge. + +---> d) Kan du også lære? +---> b) Fioler er blå, +---> c) Intelligens må læres, +---> a) Roser er røde, + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.2: «ERSTATT»-KOMMANDOEN + + + ** Trykk rx for å erstatte tegnet under markøren med x. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + + 2. Flytt markøren så den står oppå den første feilen. + + 3. Trykk r og deretter tegnet som skal være der. + + 4. Repeter punkt 2 og 3 til den første linjen er lik den andre. + +---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster! +---> Da denne linjen ble skrevet, var det noen som trykket feile taster! + + 5. Gå videre til leksjon 3.2. + +MERK: Husk at du bør lære ved å BRUKE, ikke pugge. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.3: «FORANDRE»-OPERATOREN + + + ** For å forandre til slutten av et ord, trykk ce . ** + + 1. Flytt markøren til den første linjen nedenfor som er merket --->. + + 2. Plasser markøren på u i «lubjwr». + + 3. Trykk ce og det korrekte ordet (i dette tilfellet, skriv «injen»). + + 4. Trykk og gå til det neste tegnet som skal forandres. + + 5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre. + +---> Denne lubjwr har noen wgh som må forkwåp med «forækzryas»-kommandoen. +---> Denne linjen har noen ord som må forandres med «forandre»-kommandoen. + +Vær oppmerksom på at ce sletter ordet og går inn i innsettingsmodus. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c + + + ** Forandringskommandoen blir brukt med de samme bevegelser som «slett». ** + + 1. Forandringsoperatoren fungerer på samme måte som «slett». Formatet er: + + c [nummer] bevegelse + + 2. Bevegelsene er de samme, som for eksempel w (ord) og $ (slutten av en + linje). + + 3. Gå til den første linjen nedenfor som er merket --->. + + 4. Flytt markøren til den første feilen. + + 5. Skriv c$ og skriv resten av linjen lik den andre og trykk . + +---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste. +---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen. + +MERK: Du kan bruke slettetasten for å rette feil mens du skriver. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 3 + + + 1. For å legge tilbake tekst som nettopp er blitt slettet, trykk p . Dette + limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet + vil den bli limt inn på linjen under markøren). + + 2. For å erstatte et tegn under markøren, trykk r og deretter tegnet som + du vil ha der. + + 3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen + tar deg. Det vil si, skriv ce for å forandre fra markøren til slutten + av ordet, c$ for å forandre til slutten av linjen. + + 4. Formatet for «forandre» er: + + c [nummer] bevegelse + +Nå kan du gå til neste leksjon. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS + + ** Trykk CTRL-G for å vise posisjonen i filen og filstatusen. + Trykk G for å gå til en spesifikk linje i filen. ** + + Merk: Les hele leksjonen før du utfører noen av punktene! + + 1. Hold nede Ctrl-tasten og trykk g . Vi kaller dette CTRL-G. En melding + vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i + filen. Husk linjenummeret for bruk i steg 3. + +Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette + skjer når «ruler»-valget er satt (forklart i leksjon 6). + + 2. Trykk G for å gå til bunnen av filen. + Skriv gg for å gå til begynnelsen av filen. + + 3. Skriv inn linjenummeret du var på og deretter G . Dette vil føre deg + tilbake til linjen du var på da du først trykket CTRL-G. + + 4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.2: SØKEKOMMANDOEN + + ** Skriv / etterfulgt av en søkestreng som du vil lete etter. ** + + 1. Trykk / når du er i normalmodusen. Legg merke til at skråstreken og + markøren kommer til syne på bunnen av skjermen i likhet med + «:»-kommandoene. + + 2. Skriv «feeeiil» og trykk . Dette er teksten du vil lete etter. + + 3. For å finne neste forekomst av søkestrengen, trykk n . + For å lete etter samme søketeksten i motsatt retning, trykk N . + + 4. For å lete etter en tekst bakover i filen, bruk ? istedenfor / . + + 5. For å gå tilbake til der du kom fra, trykk CTRL-O (Hold Ctrl nede mens + du trykker bokstaven o ). Repeter for å gå enda lengre tilbake. CTRL-I + går framover. + +---> «feeeiil» er ikke måten å skrive «feil» på, feeeiil er helt feil. +Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt + hvis «wrapscan»-valget er resatt. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.3: FINN SAMSVARENDE PARENTESER + + + ** Trykk % for å finne en samsvarende ), ] eller } . ** + + 1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->. + + 2. Trykk % . + + 3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen. + + 4. Trykk % for å flytte markøren til den andre samsvarende parentesen. + + 5. Flytt markøren til en annen (, ), [, ], { eller } og se hva % gjør. + +---> Dette ( er en testlinje med (, [ ] og { } i den )). + +Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert + antall parenteser! + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.4: ERSTATT-KOMMANDOEN + + + ** Skriv :s/gammel/ny/g for å erstatte «gammel» med «ny». ** + + 1. Flytt markøren til linjen nedenfor som er merket med --->. + + 2. Skriv :s/deen/den/ . Legg merke til at denne kommandoen bare + forandrer den første forekomsten av «deen» på linjen. + + 3. Skriv :s/deen/den/g . Når g-flagget legges til, betyr dette global + erstatning på linjen og erstatter alle forekomster av «deen» på linjen. + +---> deen som kan kaste deen tyngste steinen lengst er deen beste + + 4. For å erstatte alle forekomster av en tekststreng mellom to linjer, + skriv :#,#s/gammel/ny/g der #,# er linjenumrene på de to linjene for + linjeområdet erstatningen skal gjøres. + Skriv :%s/gammel/ny/g for å erstatte tekst i hele filen. + Skriv :%s/gammel/ny/gc for å finne alle forekomster i hele filen, og + deretter spørre om teksten skal erstattes eller + ikke. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 4 + + + 1. Ctrl-G viser nåværende posisjon i filen og filstatusen. + G går til slutten av filen. + nummer G går til det linjenummeret. + gg går til den første linjen. + + 2. Skriv / etterfulgt av en søketekst for å lete FRAMOVER etter teksten. + Skriv ? etterfulgt av en søketekst for å lete BAKOVER etter teksten. + Etter et søk kan du trykke n for å finne neste forekomst i den samme + retningen eller N for å lete i motsatt retning. + CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner. + + 3. Skriv % når markøren står på en (, ), [, ], { eller } for å finne den + som samsvarer. + + 4. Erstatte «gammel» med første «ny» på en linje: :s/gammel/ny + Erstatte alle «gammel» med «ny» på en linje: :s/gammel/ny/g + Erstatte tekst mellom to linjenumre: :#,#s/gammel/ny/g + Erstatte alle forekomster i en fil: :%s/gammel/ny/g + For å godkjenne hver erstatning, legg til «c»: :%s/gammel/ny/gc +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO + + + ** Skriv :! etterfulgt av en ekstern kommando for å utføre denne. ** + + 1. Skriv den velkjente kommandoen : for å plassere markøren på bunnen av + skjermen. Dette lar deg skrive en kommandolinjekommando. + + 2. Nå kan du skrive tegnet ! . Dette lar deg utføre en hvilken som helst + ekstern kommando. + + 3. Som et eksempel, skriv ls etter utropstegnet og trykk . Du vil + nå få en liste over filene i katalogen, akkurat som om du hadde kjørt + kommandoen direkte fra kommandolinjen i skallet. Eller bruk :!dir hvis + «ls» ikke virker. + +MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med + parametere. + +MERK: Alle «:»-kommandoer må avsluttes med . Fra dette punktet er det + ikke alltid vi nevner det. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.2: MER OM LAGRING AV FILER + + + ** For å lagre endringene gjort i en tekst, skriv :w FILNAVN. ** + + 1. Skriv :!dir eller :!ls for å få en liste over filene i katalogen. Du + vet allerede at du må trykke etter dette. + + 2. Velg et filnavn på en fil som ikke finnes, som for eksempel TEST . + + 3. Skriv :w TEST (der TEST er filnavnet du velger). + + 4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å + sjekke dette, skriv :!dir eller :!ls igjen for å se innholdet av + katalogen. + +Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med «vim TEST», + ville filen vært en eksakt kopi av innføringen da du lagret den. + + 5. Fjern filen ved å skrive :!rm TEST hvis du er på et Unix-lignende + operativsystem, eller :!del TEST hvis du bruker MS-DOS. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES + + + ** For å lagre en del av en fil, skriv v bevegelse :w FILNAVN ** + + 1. Flytt markøren til denne linjen. + + 2. Trykk v og flytt markøren til det femte elementet nedenfor. Legg merke + til at teksten blir markert. + + 3. Trykk : (kolon). På bunnen av skjermen vil :'<,'> komme til syne. + + 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller + at du ser :'<,'>w TEST før du trykker Enter. + + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls + for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. + +MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for + å gjøre det valgte området større eller mindre. Deretter kan du bruke en + operator for å gjøre noe med teksten. For eksempel sletter d teksten. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER + + + ** For å lese inn en annen fil inn i nåværende buffer, skriv :r FILNAVN ** + + 1. Plasser markøren like over denne linjen. + +MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter + NED for å se denne leksjonen igjen. + + 2. Hent TEST-filen ved å bruke kommandoen :r TEST der TEST er navnet på + filen du brukte. Filen du henter blir plassert nedenfor markørlinjen. + + 3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av + leksjon 5.3, originalen og denne versjonen. + +MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel, :r !ls + leser utdataene av ls-kommandoen og legger dem nedenfor markøren. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 5 + + + 1. :!kommando utfører en ekstern kommandio. + + Noen nyttige eksempler er: + (MS-DOS) (Unix) + :!dir :!ls - List filene i katalogen. + :!del FILNAVN :!rm FILNAVN - Slett filen FILNAVN. + + 2. :w FILNAVN skriver den nåværende Vim-filen disken med navnet FILNAVN . + + 3. v bevegelse :w FILNAVN lagrer de visuelt valgte linjene til filen + FILNAVN. + + 4. :r FILNAVN henter filen FILNAVN og legger den inn nedenfor markøren. + + 5. :r !dir leser utdataene fra «dir»-kommandoen og legger dem nedenfor + markørposisjonen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.1: «ÅPNE LINJE»-KOMMANDOEN + + + ** Skriv o for å «åpne opp» for en ny linje etter markøren og gå til + innsettingsmodus ** + + 1. Flytt markøren til linjen nedenfor merket --->. + + 2. Skriv o (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + + 3. Skriv litt tekst og trykk for å gå ut av innsettingsmodusen. + +---> Etter at o er skrevet blir markøren plassert på den tomme linjen. + + 4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor O + istedenfor en liten o . Prøv dette på linjen nedenfor. + +---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.2: «LEGG TIL»-KOMMANDOEN + + + ** Skriv a for å legge til tekst ETTER markøren. ** + + 1. Flytt markøren til starten av linjen merket ---> nedenfor. + + 2. Trykk e til markøren er på slutten av «li». + + 3. Trykk a (liten a) for å legge til tekst ETTER markøren. + + 4. Fullfør ordet sånn som på linjen nedenfor. Trykk for å gå ut av + innsettingsmodusen. + + 5. Bruk e for å gå til det neste ufullstendige ordet og repeter steg 3 og + 4. + +---> Denne li lar deg øve på å leg til tek på en linje. +---> Denne linjen lar deg øve på å legge til tekst på en linje. + +Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste + forskjellen er hvor tegnene blir satt inn. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ + + + ** Skriv en stor R for å erstatte mer enn ett tegn. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren + til begynnelsen av den første «xxx»-en. + + 2. Trykk R og skriv inn tallet som står nedenfor på den andre linjen så + det erstatter xxx. + + 3. Trykk for å gå ut av erstatningsmodusen. Legg merke til at resten + av linjen forblir uforandret. + + 4. Repeter stegene for å erstatte den gjenværende xxx. + +---> Ved å legge 123 til xxx får vi xxx. +---> Ved å legge 123 til 456 får vi 579. + +MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives + erstatter et eksisterende tegn. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.4: KOPIERE OG LIME INN TEKST + + + ** Bruk y-operatoren for å kopiere tekst og p for å lime den inn ** + + 1. Gå til linjen merket ---> nedenfor og plasser markøren etter «a)». + + 2. Gå inn i visuell modus med v og flytt markøren til like før «første». + + 3. Trykk y for å kopiere (engelsk: «yank») den uthevede teksten. + + 4. Flytt markøren til slutten av den neste linjen: j$ + + 5. Trykk p for å lime inn teksten. Trykk deretter: a andre . + + 6. Bruk visuell modus for å velge « valget.», kopier det med y , gå til + slutten av den neste linjen med j$ og legg inn teksten der med p . + +---> a) Dette er det første valget. + b) + +Merk: Du kan også bruke y som en operator; yw kopierer ett ord. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.5: SETT VALG + + + ** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. ** + + 1. Let etter «ignore» ved å skrive: /ignore + Repeter flere ganger ved å trykke n . + + 2. Sett «ic»-valget (Ignore Case) ved å skrive: :set ic + + 3. Søk etter «ignore» igjen ved å trykke n . + Legg merke til at både «Ignore» og «IGNORE» blir funnet. + + 4. Sett «hlsearch»- og «incsearch»-valgene: :set hls is + + 5. Skriv søkekommandoen igjen og se hva som skjer: /ignore + + 6. For å slå av ignorering av store/små bokstaver, skriv: :set noic + +Merk: For å fjerne uthevingen av treff, skriv: :nohlsearch +Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk + \c i uttrykket: /ignore\c +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 6 + + 1. Trykk o for å legge til en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + Trykk O for å åpne en linje OVER markøren. + + 2. Skriv a for å sette inn tekst ETTER markøren. + Skriv A for å sette inn tekst etter slutten av linjen. + + 3. Kommandoen e går til slutten av et ord. + + 4. Operatoren y («yank») kopierer tekst, p («paste») limer den inn. + + 5. Ved å trykke R går du inn i erstatningsmodus helt til trykkes. + + 6. Skriv «:set xxx» for å sette valget «xxx». Noen valg er: + «ic» «ignorecase» ignorer store/små bokstaver under søk + «is» «incsearch» vis delvise treff for en søketekst + «hls» «hlsearch» uthev alle søketreff + + 7. Legg til «no» foran valget for å slå det av: :set noic + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.1: FÅ HJELP + + + ** Bruk det innebygde hjelpesystemet. ** + + Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av + disse måtene: + - Trykk Hjelp-tasten (hvis du har en) + - Trykk F1-tasten (hvis du har en) + - Skriv :help + + Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker. + Skriv CTRL-W CTRL-W for å hoppe fra et vindu til et annet + Skriv :q for å lukke hjelpevinduet. + + Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til + «:help»-kommandoen. Prøv disse (ikke glem å trykke ): + + :help w + :help c_CTRL-D + :help insert-index + :help user-manual +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.2: LAG ET OPPSTARTSSKRIPT + + + ** Slå på funksjoner i Vim ** + + Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av + som standard. For å begynne å bruke flere funksjoner må du lage en + «vimrc»-fil. + + 1. Start redigeringen av «vimrc»-filen. Dette avhenger av systemet ditt: + :e ~/.vimrc for Unix + :e $VIM/_vimrc for MS Windows + + 2. Les inn eksempelfilen for «vimrc»: + :r $VIMRUNTIME/vimrc_example.vim + + 3. Lagre filen med: + :w + + Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til + alle dine foretrukne oppsett i denne «vimrc»-filen. + For mer informasjon, skriv :help vimrc-intro +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.3: FULLFØRING + + + ** Kommandolinjefullføring med CTRL-D og ** + + 1. Vær sikker på at Vim ikke er i Vi-kompatibel modus: :set nocp + + 2. Se hvilke filer som er i katalogen: :!ls eller :!dir + + 3. Skriv starten på en kommando: :e + + 4. Trykk CTRL-D og Vim vil vise en liste over kommandoer som starter med + «e». + + 5. Trykk og Vim vil fullføre kommandonavnet til «:edit». + + 6. Legg til et mellomrom og starten på et eksisterende filnavn: :edit FIL + + 7. Trykk . Vim vil fullføre navnet (hvis det er unikt). + +MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og + . Det er spesielt nyttig for bruk sammen med :help . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 7 + + + 1. Skriv :help eller trykk eller for å åpne et hjelpevindu. + + 2. Skriv :help kommando for å få hjelp om kommando . + + 3. Trykk CTRL-W CTRL-W for å hoppe til et annet vindu. + + 4. Trykk :q for å lukke hjelpevinduet. + + 5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine. + + 6. Når du skriver en «:»-kommando, trykk CTRL-D for å se mulige + fullføringer. Trykk for å bruke en fullføring. + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Her slutter innføringen i Vim. Den var ment som en rask oversikt over + editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på + langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen + ved å skrive :help user-manual . + + For videre lesing og studier, kan denne boken anbefales: + «Vim - Vi Improved» av Steve Oualline + Utgiver: New Riders + Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for + nybegynnere. Inneholder mange eksempler og illustrasjoner. + Se http://iccf-holland.org/click5.html + + Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også: + «Learning the Vi Editor» av Linda Lamb + Utgiver: O'Reilly & Associates Inc. + Det er en god bok for å få vite omtrent hva som helst om Vi. + Den sjette utgaven inneholder også informasjon om Vim. + + Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware, + Colorado School of Mines med idéer av Charles Smith, Colorado State + University. E-mail: bware@mines.colorado.edu . + + Modifisert for Vim av Bram Moolenaar. + Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org + Id: tutor.no 406 2007-03-18 22:48:36Z sunny + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +vim: set ts=8 : diff --git a/samples/Text/zonalAve-help.ncl b/samples/Text/zonalAve-help.ncl new file mode 100644 index 00000000..20abf5de --- /dev/null +++ b/samples/Text/zonalAve-help.ncl @@ -0,0 +1,35 @@ +THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Contributed/zonalAve.shtml +THE_TITLE:zonalAve + NCL Home > Documentation > Functions > General applied math + +zonalAve + + Computes a zonal average of the input array. + +Prototype + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + + function zonalAve ( + x : numeric + ) + + return_val : typeof(x) + +Arguments + + x + + An array of any size and type. + +Return value + + The results are returned in an array of the same type and one dimension smaller than x. Metadata are preserved. + +Description + + This function computes a zonal average of the input array x. If the input array has a "long_name" or "short_name" + attribute, it will be updated. + + + ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF diff --git a/samples/Thrift/linguist.thrift b/samples/Thrift/linguist.thrift new file mode 100644 index 00000000..8d701b88 --- /dev/null +++ b/samples/Thrift/linguist.thrift @@ -0,0 +1,5 @@ +struct PullRequest { + 1: string title +} + + diff --git a/samples/Turtle/gnd-record.ttl b/samples/Turtle/gnd-record.ttl new file mode 100644 index 00000000..ef1d2c35 --- /dev/null +++ b/samples/Turtle/gnd-record.ttl @@ -0,0 +1,183 @@ +@prefix foaf: . +@prefix owl: . +@prefix gndo: . +@prefix xsd: . + + + a ; + foaf:page ; + owl:sameAs , , ; + gndo:gndIdentifier "118514768" ; + gndo:oldAuthorityNumber "(DE-588)1022091077", "(DE-588a)118514768", "(DE-588a)141399074", "(DE-588a)139089691", "(DE-588a)141300248", "(DE-588a)136949541", "(DE-588a)134336232", "(DE-588a)12794544X", "(DE-588a)12736630X", "(DE-588a)12722811X", "(DE-588a)127228098", "(DE-588a)127228101" ; + gndo:variantNameForThePerson "Brêcht, Becton", "Brecht, Bert", "Brecht, Bertolʹ", "Brecht, Berthold", "Brecht, Bertholt", "Brecht, Bertold", "Brecht, B.", "Brecht, Eugen Berthold Friedrich", "Brecht, ...", "Brecht-Eisler, ...", "Becht, Bertolt", "Beituo'erte-Bulaixite", "Berchito, B.", "Brechtas, B.", "Brechts, Bertolts", "Brehd, Berd", "Breht, Bertolt", "Brehts, Bertolts", "Breḳhṭ, Bārṭolṭ", "Brekt, Berṭolṭ", "Brekṭ, Berṭōlṭ", "Breḳṭ, Berṭôlṭ", "Breśṭ, Berṭalṭa", "Breṣṭa, Barṭolṭa", "Brišt, Bartūlt", "Brišt, Birtūld", "Brišt, Birtult", "Buchito, Berutorutu", "Bulaixite, Beituo'erte", "Bulaixite, ...", "Burehito, Berutoruto", "Burehito, ...", "B. B.", "Larsen, Berthold", "Mprecht, Mpertolt", "Mprecht, ...", "Pulaihsit'ê, Peit'oĉrht'ê", "Pulaihsit'ê, ...", "Pŭrehit'ŭ, Peŏt'olt'ŭ", "Bŭrehit'ŭ, Beŏt'olt'ŭ", "برشت، برتولد", "브레히트, 베르톨트", "ברכט, ברטולט", "贝·布莱希特", "布莱希特, 贝", "ブレヒト, ベルトルト" ; + gndo:variantNameEntityForThePerson [ + gndo:forename "Becton" ; + gndo:surname "Brêcht" + ], [ + gndo:forename "Bert" ; + gndo:surname "Brecht" + ], [ + gndo:forename "Bertolʹ" ; + gndo:surname "Brecht" + ], [ + gndo:forename "Berthold" ; + gndo:surname "Brecht" + ], [ + gndo:forename "Bertholt" ; + gndo:surname "Brecht" + ], [ + gndo:forename "Bertold" ; + gndo:surname "Brecht" + ], [ + gndo:forename "B." ; + gndo:surname "Brecht" + ], [ + gndo:forename "Eugen Berthold Friedrich" ; + gndo:surname "Brecht" + ], [ + gndo:forename "..." ; + gndo:surname "Brecht" + ], [ + gndo:forename "..." ; + gndo:surname "Brecht-Eisler" + ], [ + gndo:forename "Bertolt" ; + gndo:surname "Becht" + ], [ gndo:personalName "Beituo'erte-Bulaixite" ], [ + gndo:forename "B." ; + gndo:surname "Berchito" + ], [ + gndo:forename "B." ; + gndo:surname "Brechtas" + ], [ + gndo:forename "Bertolts" ; + gndo:surname "Brechts" + ], [ + gndo:forename "Berd" ; + gndo:surname "Brehd" + ], [ + gndo:forename "Bertolt" ; + gndo:surname "Breht" + ], [ + gndo:forename "Bertolts" ; + gndo:surname "Brehts" + ], [ + gndo:forename "Bārṭolṭ" ; + gndo:surname "Breḳhṭ" + ], [ + gndo:forename "Berṭolṭ" ; + gndo:surname "Brekt" + ], [ + gndo:forename "Berṭōlṭ" ; + gndo:surname "Brekṭ" + ], [ + gndo:forename "Berṭôlṭ" ; + gndo:surname "Breḳṭ" + ], [ + gndo:forename "Berṭalṭa" ; + gndo:surname "Breśṭ" + ], [ + gndo:forename "Barṭolṭa" ; + gndo:surname "Breṣṭa" + ], [ + gndo:forename "Bartūlt" ; + gndo:surname "Brišt" + ], [ + gndo:forename "Birtūld" ; + gndo:surname "Brišt" + ], [ + gndo:forename "Birtult" ; + gndo:surname "Brišt" + ], [ + gndo:forename "Berutorutu" ; + gndo:surname "Buchito" + ], [ + gndo:forename "Beituo'erte" ; + gndo:surname "Bulaixite" + ], [ + gndo:forename "..." ; + gndo:surname "Bulaixite" + ], [ + gndo:forename "Berutoruto" ; + gndo:surname "Burehito" + ], [ + gndo:forename "..." ; + gndo:surname "Burehito" + ], [ gndo:personalName "B. B." ], [ + gndo:forename "Berthold" ; + gndo:surname "Larsen" + ], [ + gndo:forename "Mpertolt" ; + gndo:surname "Mprecht" + ], [ + gndo:forename "..." ; + gndo:surname "Mprecht" + ], [ + gndo:forename "Peit'oĉrht'ê" ; + gndo:surname "Pulaihsit'ê" + ], [ + gndo:forename "..." ; + gndo:surname "Pulaihsit'ê" + ], [ + gndo:forename "Peŏt'olt'ŭ" ; + gndo:surname "Pŭrehit'ŭ" + ], [ + gndo:forename "Beŏt'olt'ŭ" ; + gndo:surname "Bŭrehit'ŭ" + ], [ gndo:personalName "برشت، برتولد" ], [ + gndo:forename "베르톨트" ; + gndo:surname "브레히트" + ], [ + gndo:forename "ברטולט" ; + gndo:surname "ברכט" + ], [ gndo:personalName "贝·布莱希特" ], [ + gndo:forename "贝" ; + gndo:surname "布莱希特" + ], [ + gndo:forename "ベルトルト" ; + gndo:surname "ブレヒト" + ] ; + gndo:preferredNameForThePerson "Brecht, Bertolt" ; + gndo:preferredNameEntityForThePerson [ + gndo:forename "Bertolt" ; + gndo:surname "Brecht" + ] ; + gndo:familialRelationship , , , , , , , , , , , , , , ; + gndo:professionOrOccupation , , , , , , ; + gndo:playedInstrument ; + gndo:gndSubjectCategory , , ; + gndo:geographicAreaCode ; + gndo:languageCode ; + gndo:placeOfBirth ; + gndo:placeOfDeath ; + gndo:placeOfExile , ; + gndo:gender ; + gndo:dateOfBirth "1898-02-10"^^xsd:date ; + gndo:dateOfDeath "1956-08-14"^^xsd:date . + + gndo:preferredNameForThePerson "Brecht, Berthold Friedrich" . + gndo:preferredNameForThePerson "Banholzer, Paula" . + gndo:preferredNameForThePerson "Neher, Carola" . + gndo:preferredNameForThePerson "Banholzer, Frank" . + gndo:preferredNameForThePerson "Berlau, Ruth" . + gndo:preferredNameForThePerson "Steffin, Margarete" . + gndo:preferredNameForThePerson "Zoff, Marianne" . + gndo:preferredNameForThePerson "Weigel, Helene" . + gndo:preferredNameForThePerson "Reichel, Käthe" . + gndo:preferredNameForThePerson "Hiob, Hanne" . + gndo:preferredNameForThePerson "Brecht, Stefan" . + gndo:preferredNameForThePerson "Brecht-Schall, Barbara" . + gndo:preferredNameForThePerson "Schall, Ekkehard" . + gndo:preferredNameForThePerson "Brezing, Joseph Friedrich" . + gndo:preferredNameForThePerson "Brezing, Friederike" . + gndo:preferredNameForTheSubjectHeading "Theaterregisseur" . + gndo:preferredNameForTheSubjectHeading "Dramatiker" . + gndo:preferredNameForTheSubjectHeading "Schauspieler" . + gndo:preferredNameForTheSubjectHeading "Lyriker" . + gndo:preferredNameForTheSubjectHeading "Schriftsteller" . + gndo:preferredNameForTheSubjectHeading "Regisseur" . + gndo:preferredNameForTheSubjectHeading "Drehbuchautor" . + gndo:preferredNameForThePlaceOrGeographicName "Augsburg" . + gndo:preferredNameForThePlaceOrGeographicName "Berlin" . + gndo:preferredNameForThePlaceOrGeographicName "Dänemark" . + gndo:preferredNameForThePlaceOrGeographicName "Schweden" . \ No newline at end of file diff --git a/samples/Turtle/rdf-syntax-grammar.ttl b/samples/Turtle/rdf-syntax-grammar.ttl new file mode 100644 index 00000000..edcd4db2 --- /dev/null +++ b/samples/Turtle/rdf-syntax-grammar.ttl @@ -0,0 +1,10 @@ +@prefix rdf: . +@prefix dc: . +@prefix ex: . + + + dc:title "RDF/XML Syntax Specification (Revised)" ; + ex:editor [ + ex:fullname "Dave Beckett"; + ex:homePage + ] . \ No newline at end of file diff --git a/samples/TypeScript/tsxAttributeResolution9.tsx b/samples/TypeScript/tsxAttributeResolution9.tsx new file mode 100644 index 00000000..164536f8 --- /dev/null +++ b/samples/TypeScript/tsxAttributeResolution9.tsx @@ -0,0 +1,27 @@ +//@jsx: preserve +//@module: amd + +//@filename: react.d.ts +declare module JSX { + interface Element { } + interface IntrinsicElements { + } + interface ElementAttributesProperty { + props; + } +} + +interface Props { + foo: string; +} + +//@filename: file.tsx +export class MyComponent { + render() { + } + + props: { foo: string; } +} + +; // ok +; // should be an error diff --git a/samples/Unity3D Asset/GapTile.mat b/samples/Unity3D Asset/GapTile.mat new file mode 100644 index 00000000..07078927 --- /dev/null +++ b/samples/Unity3D Asset/GapTile.mat @@ -0,0 +1,28 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: GapTile + m_Shader: {fileID: 10750, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: [] + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: e503f0c932121ce4881ab1605349488b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: {} + m_Colors: + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/samples/Unity3D Asset/Hover.anim b/samples/Unity3D Asset/Hover.anim new file mode 100644 index 00000000..c2c5cfab --- /dev/null +++ b/samples/Unity3D Asset/Hover.anim @@ -0,0 +1,157 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hover + serializedVersion: 4 + m_AnimationType: 1 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: .25, y: .25, z: .25} + inSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + outSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + tangentMode: 823140368 + - time: .649999976 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + outSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + path: Radius + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + - time: .649999976 + value: 0 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_Color.a + path: Radius + classID: 212 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_StartTime: 0 + m_StopTime: .649999976 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: .25 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + - time: .649999976 + value: 1 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_LocalScale.x + path: Radius + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: .25 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + - time: .649999976 + value: 1 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_LocalScale.y + path: Radius + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: .25 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + - time: .649999976 + value: 1 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_LocalScale.z + path: Radius + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + - time: .649999976 + value: 0 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_Color.a + path: Radius + classID: 212 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_Events: [] diff --git a/samples/Unity3D Asset/Tiles.meta b/samples/Unity3D Asset/Tiles.meta new file mode 100644 index 00000000..61ec47d5 --- /dev/null +++ b/samples/Unity3D Asset/Tiles.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 9e5c401e9d1d5415fbf2854b29c004c4 +folderAsset: yes +DefaultImporter: + userData: diff --git a/samples/Unity3D Asset/TimeManager.asset b/samples/Unity3D Asset/TimeManager.asset new file mode 100644 index 00000000..f0e494b6 --- /dev/null +++ b/samples/Unity3D Asset/TimeManager.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: .0199999996 + Maximum Allowed Timestep: .333333343 + m_TimeScale: 1 diff --git a/samples/Unity3D Asset/canvas_Fullscreen_Fader.prefab b/samples/Unity3D Asset/canvas_Fullscreen_Fader.prefab new file mode 100644 index 00000000..0664d47e --- /dev/null +++ b/samples/Unity3D Asset/canvas_Fullscreen_Fader.prefab @@ -0,0 +1,157 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22400000} + - 222: {fileID: 22200000} + - 114: {fileID: 11400004} + - 114: {fileID: 11400002} + - 114: {fileID: 11400000} + m_Layer: 5 + m_Name: Fader_Tint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &100002 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22400002} + - 223: {fileID: 22300000} + m_Layer: 5 + m_Name: canvas_Fullscreen_Fader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e5786b8fa0564f23a168e1c45671759, type: 3} + m_Name: + m_EditorClassIdentifier: + fadeOut: 1 + alwaysUseClearAsStartColor: 0 + _fadeOnStart: 1 + _startFaded: 0 + _fadeOnStartDelay: 1 + _fadeTime: .800000012 +--- !u!114 &11400002 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6d2a81ac2fb947e8a9aa86b4133fafd, type: 3} + m_Name: + m_EditorClassIdentifier: + _toDeactivate: [] +--- !u!114 &11400004 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .996078432, g: .949019611, b: .862745106, a: 1} + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &22200000 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} +--- !u!223 &22300000 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 1 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingLayerID: 0 + m_SortingOrder: 1 +--- !u!224 &22400000 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22400002} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22400002 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 22400000} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 100002} + m_IsPrefabParent: 1 + m_IsExploded: 1 diff --git a/samples/Uno/PlayerPads.uno b/samples/Uno/PlayerPads.uno new file mode 100644 index 00000000..0d71a25e --- /dev/null +++ b/samples/Uno/PlayerPads.uno @@ -0,0 +1,154 @@ +using Uno; +using Uno.Collections; +using Uno.Graphics; +using Uno.Scenes; +using Uno.Designer; +using Uno.Content; +using Uno.Content.Models; +using Uno.UI; + +namespace PONG2D +{ + public class PlayerPads : Node + { + + Image _player1Image; + Image _player2Image; + + [Inline] + public Image Player1 + { + get { return _player1Image; } + set + { + if (_player1Image != value) + { + _player1Image = value; + + } + } + } + + [Inline] + public Image Player2 + { + get { return _player2Image; } + set + { + if (_player2Image != value) + { + _player2Image = value; + + } + } + } + + [Hide] + public float2 Player1Pos + { + get { return (Player1.ActualPosition); } + set + { + if (Player1 != null) + Player1.Position = value; + + } + } + + [Hide] + public float2 Player2Pos + { + get { return (Player2.ActualPosition); } + set + { + if (Player2 != null) + Player2.Position = value; + + } + } + + public Rect Player1Rect + { + get { return new Rect(Player1Pos, float2(Player1.Width, Player2.Height)); } + set + { + Player1Pos = value.Position; + if (Player1 != null) + { + Player1.Width = value.Size.X; + Player1.Height = value.Size.Y; + } + } + } + + public Rect Player2Rect + { + get { return new Rect(Player2Pos, float2(Player2.Width, Player2.Height)); } + set + { + Player2Pos = value.Position; + if (Player2 != null) + { + Player2.Width = value.Size.X; + Player2.Height = value.Size.Y; + } + } + } + + public Ball Ball + { + get; + set; + } + + public float PadVelocity { get; set; } + + public PlayerPads() + { + + } + + void UpdatePositions() + { + + } + + protected override void OnUpdate() + { + base.OnUpdate(); + + if (Input.IsKeyDown(Uno.Platform.Key.W)) + { + Player1Pos = float2(0, Player1Pos.Y - PadVelocity); + } + + if (Input.IsKeyDown(Uno.Platform.Key.S)) + { + Player1Pos = float2(0, Player1Pos.Y + PadVelocity); + } + + if (Input.IsKeyDown(Uno.Platform.Key.Up)) + { + Player2Pos = float2(0, Player2Pos.Y - PadVelocity); + } + + if (Input.IsKeyDown(Uno.Platform.Key.Down)) + { + Player2Pos = float2(0, Player2Pos.Y + PadVelocity); + } + + if (Ball != null) + { + + if (Ball.BallRectangle.Intersects(Player1Rect) || + Ball.BallRectangle.Intersects(Player2Rect)) + { + + Ball.BallVelocity = float2(Ball.BallVelocity.X * -1f, Ball.BallVelocity.Y); + } + } + + } + + } +} \ No newline at end of file diff --git a/samples/Uno/Pong.uno b/samples/Uno/Pong.uno new file mode 100644 index 00000000..4e578250 --- /dev/null +++ b/samples/Uno/Pong.uno @@ -0,0 +1,139 @@ +using Uno; +using Uno.Collections; +using Uno.Graphics; +using Uno.Scenes; +using Uno.Content; +using Uno.Content.Models; + +namespace PONG2D +{ + public class Pong : Node + { + float2 _player1Pos; + float2 _player2Pos; + float2 ballPosition; + float2 ballVelocity; + float2 rectangleSize; + + Rect player1Rect; + Rect player2Rect; + Rect ballRect; + + float2 resolution = Context.VirtualResolution; + + Random random = new Random(1); + + + float2 Player1Pos + { + get { return _player1Pos; } + set + { + _player1Pos = Math.Clamp(value, float2(0, 0), resolution - rectangleSize); + } + } + + float2 Player2Pos + { + get { return _player2Pos; } + set + { + _player2Pos = Math.Clamp(value, float2(0, 0), resolution - rectangleSize); + } + } + + public Pong() + { + Uno.Scenes.Input.AddGlobalListener(this); + } + + protected override void OnInitialize() + { + base.OnInitialize(); + UpdateValues(); + + } + + void UpdateValues() + { + rectangleSize = float2(resolution.X / 80f, resolution.Y / 5f); + _player1Pos = float2(0f); + _player2Pos = float2(Context.VirtualResolution.X - rectangleSize.X, 0f); + + player1Rect = new Rect(_player1Pos, rectangleSize); + player2Rect = new Rect(_player2Pos, rectangleSize); + + ballPosition = float2(resolution.X * 0.5f - 10f, resolution.Y * 0.5f - 10f); + ballRect = new Rect(ballPosition, float2(20f)); + + + SpwanBall(); + + } + + void SpwanBall() + { + ballRect.Position = float2(resolution.X * 0.5f - 10f, resolution.Y * 0.5f - 10f); + ballVelocity = float2(5f, 10f) * 0.5f; + } + + void OnWindowResize(object sender, EventArgs args) + { + //UpdateValues(); + } + + protected override void OnUpdate() + { + base.OnUpdate(); + + var padVelocity = resolution.Y * (float)Application.Current.FrameInterval * 4f; + if (Input.IsKeyDown(Uno.Platform.Key.Up)) + { + Player1Pos = float2(Player1Pos.X, Player1Pos.Y - padVelocity); + } + + if (Input.IsKeyDown(Uno.Platform.Key.Down)) + { + Player1Pos = float2(Player1Pos.X, Player1Pos.Y + padVelocity); + } + + if (Input.IsKeyDown(Uno.Platform.Key.W)) + { + Player2Pos = float2(Player2Pos.X, Player2Pos.Y - padVelocity); + } + + if (Input.IsKeyDown(Uno.Platform.Key.S)) + { + Player2Pos = float2(Player2Pos.X, Player2Pos.Y + padVelocity); + } + player1Rect.Position = Player1Pos; + player2Rect.Position = Player2Pos; + + if (ballRect.Position.X > resolution.X || ballRect.Position.X < 0) + { + SpwanBall(); + } + if (ballRect.Position.Y > resolution.Y || + ballRect.Position.Y < 0) + { + ballVelocity.Y *= -1f; + } + + if (ballRect.Intersects(player1Rect) || + ballRect.Intersects(player2Rect)) + { + ballVelocity.X *= -1f; + } + + ballRect.Position += ballVelocity; + + } + + protected override void OnDraw() + { + Uno.Drawing.RoundedRectangle.Draw(player1Rect.Position, player1Rect.Size, float4(1f), 0); + Uno.Drawing.RoundedRectangle.Draw(player2Rect.Position, player2Rect.Size, float4(1f), 0); + Uno.Drawing.RoundedRectangle.Draw(ballRect.Position, ballRect.Size, float4(1f), 0f); + } + } +} \ No newline at end of file diff --git a/samples/Uno/TowerBlock.uno b/samples/Uno/TowerBlock.uno new file mode 100644 index 00000000..a25d6849 --- /dev/null +++ b/samples/Uno/TowerBlock.uno @@ -0,0 +1,136 @@ +using Uno; +using Uno.Collections; +using Uno.Graphics; +using Uno.Scenes; +using Uno.Content; +using Uno.Content.Models; +using Uno.Physics.Box2D; + +using TowerBuilder.Box2DMath; + +namespace TowerBuilder +{ + public class TowerBlock : TestBed + { + Body floorBody, deleteBody, mouseBody; + + private List bodies = new List(); + private List bodiesToDelete = new List(); + + private ContactListener contactListener; + + protected override void OnInitializeTestBed() + { + World.Gravity = float2(0, -25.0f); + World.ContactListener = contactListener = new ContactListener(this); + + bodies.Clear(); + bodiesToDelete.Clear(); + + CreateFloor(); + CreateDeleteBody(); + CreateBox2(); + } + + void CreateFloor() + { + var bodyDef = new BodyDef(); + bodyDef.position = float2(0, -40.0f); + + floorBody = World.CreateBody(bodyDef); + + var shape = new PolygonShape(); + shape.SetAsBox(30.0f, 10.0f); + + var fixtureDef = new FixtureDef(); + fixtureDef.shape = shape; + fixtureDef.density = 1.0f; + + floorBody.CreateFixture(fixtureDef); + } + + void CreateDeleteBody() + { + var bodyDef = new BodyDef(); + bodyDef.position = float2(0, -44.0f); + + deleteBody = World.CreateBody(bodyDef); + + var shape = new PolygonShape(); + shape.SetAsBox(200.0f, 10.0f); + + var fixtureDef = new FixtureDef(); + fixtureDef.shape = shape; + fixtureDef.density = 1.0f; + + deleteBody.CreateFixture(fixtureDef); + } + + Random random = new Random((int) (Uno.Diagnostics.Clock.GetSeconds() * 1000000)); + void CreateBox2() + { + var bodyDef = new BodyDef(); + bodyDef.type = BodyType.Dynamic; + bodyDef.position = float2(random.NextFloat(-25f, 25f), 50.0f); + bodyDef.angularVelocity = random.NextFloat() * 40 - 20; + bodyDef.userData = float3(0, 0, 0); + + var body = World.CreateBody(bodyDef); + + var shape = new PolygonShape(); + shape.SetAsBox(0.75f, 0.75f); + + var fixtureDef = new FixtureDef(); + fixtureDef.shape = shape; + fixtureDef.density = 5.0f; + //fixtureDef.friction = 0.75f; + + body.CreateFixture(fixtureDef); + + bodies.Add(body); + } + + private int c = 0; + protected override void OnFixedUpdate() + { + base.OnFixedUpdate(); + + debug_log bodies.Count; + if(c++ % 8 == 0 && bodies.Count < 20) CreateBox2(); + + foreach(var body in bodiesToDelete) + { + World.DestroyBody(body); + bodies.Remove(body); + } + + bodiesToDelete.Clear(); + } + + public class ContactListener : IContactListener + { + private TowerBlock b; + public ContactListener(TowerBlock b) + { + this.b = b; + } + + public void BeginContact(Contact contact) + { + if(contact.GetFixtureA().GetBody() == b.deleteBody) + { + b.bodiesToDelete.Add(contact.GetFixtureB().GetBody()); + } + else if(contact.GetFixtureB().GetBody() == b.deleteBody) + { + b.bodiesToDelete.Add(contact.GetFixtureA().GetBody()); + } + } + + public void EndContact(Contact contact) {} + public void PreSolve(Contact contact, ref Manifold manifold) {} + public void PostSolve(Contact contact, ref ContactImpulse impulse) {} + } + + } +} diff --git a/samples/UrWeb/iso8601.ur b/samples/UrWeb/iso8601.ur new file mode 100644 index 00000000..7a6a3809 --- /dev/null +++ b/samples/UrWeb/iso8601.ur @@ -0,0 +1,79 @@ +open Parse.String + +val digit = satisfy isdigit + +val decimal_of_len n = + ds <- count n digit; + return (List.foldl (fn d acc => 10*acc + ((ord d)-(ord #"0"))) 0 ds) + +val date = + y <- decimal_of_len 4; + char' #"-"; + m <- decimal_of_len 2; + char' #"-"; + d <- decimal_of_len 2; + if m > 0 && m <= 12 then + return {Year=y, Month=(Datetime.intToMonth (m-1)), Day=d} + else + fail + +(* We parse fractions of a second, but ignore them since Datetime + doesn't permit representing them. *) +val time = + h <- decimal_of_len 2; + char' #":"; + m <- decimal_of_len 2; + s <- maybe (char' #":"; + s <- decimal_of_len 2; + maybe' (char' #"."; skipWhile isdigit); + return s); + return {Hour=h, Minute=m, Second=Option.get 0 s} + +val timezone_offset = + let val zulu = char' #"Z"; return 0 + val digits = decimal_of_len 2 + val sign = or (char' #"+"; return 1) + (char' #"-"; return (-1)) + in + zulu `or` (s <- sign; + h <- digits; + m <- (maybe' (char' #":"); or digits (return 0)); + return (s*(h*60+m))) + end + +val datetime_with_tz = + d <- date; char' #"T"; t <- time; + tz <- timezone_offset; + return (d ++ t ++ {TZOffsetMinutes=tz}) + +val datetime = + d <- datetime_with_tz; + return (d -- #TZOffsetMinutes) + +fun process v = + case parse (d <- datetime_with_tz; eof; return d) v of + Some r => + let + val {Year=year,Month=month,Day=day, + Hour=hour,Minute=minute,Second=second} = + Datetime.addMinutes (r.TZOffsetMinutes) (r -- #TZOffsetMinutes) + fun pad x = + if x < 10 then "0" `strcat` show x else show x + in + {[pad hour]}:{[pad minute]}:{[pad second]} {[month]} {[day]}, {[year]} + end + | None => none + +fun main () : transaction page = + input <- source "2012-01-01T01:10:42Z"; + return + + +
+ +
diff --git a/samples/UrWeb/parse.urs b/samples/UrWeb/parse.urs new file mode 100644 index 00000000..3b2c1ed5 --- /dev/null +++ b/samples/UrWeb/parse.urs @@ -0,0 +1,85 @@ +functor Make(Stream : sig type t end) : sig + con t :: Type -> Type + + val mreturn : a ::: Type -> a -> t a + val mbind : a ::: Type -> b ::: Type -> + (t a) -> (a -> t b) -> (t b) + val monad_parse : monad t + + val parse : a ::: Type -> t a -> Stream.t -> option a + + (** Combinators *) + val fail : a ::: Type -> t a + val or : a ::: Type -> t a -> t a -> t a + val maybe : a ::: Type -> t a -> t (option a) + val maybe' : a ::: Type -> t a -> t unit + val many : a ::: Type -> t a -> t (list a) + val count : a ::: Type -> int -> t a -> t (list a) + val skipMany : a ::: Type -> t a -> t unit + val sepBy : a ::: Type -> s ::: Type -> t a -> t s -> t (list a) +end + +structure String : sig + con t :: Type -> Type + val monad_parse : monad t + + val parse : a ::: Type -> t a -> string -> option a + + (** Combinators *) + val fail : a ::: Type -> t a + val or : a ::: Type -> t a -> t a -> t a + val maybe : a ::: Type -> t a -> t (option a) + val maybe' : a ::: Type -> t a -> t unit + val many : a ::: Type -> t a -> t (list a) + val count : a ::: Type -> int -> t a -> t (list a) + val skipMany : a ::: Type -> t a -> t unit + val sepBy : a ::: Type -> s ::: Type -> t a -> t s -> t (list a) + + val eof : t unit + (* We provide alternative versions of some of these predicates + * that return t unit as a monadic syntactical convenience. *) + val string : string -> t string + val string' : string -> t unit + val stringCI : string -> t string + val stringCI' : string -> t unit + val char : char -> t char + val char' : char -> t unit + val take : int -> t (string*int) + val drop : int -> t unit + val satisfy : (char -> bool) -> t char + val skip : (char -> bool) -> t unit + val skipWhile : (char -> bool) -> t unit + val takeWhile : (char -> bool) -> t (string*int) + val takeWhile' : (char -> bool) -> t string (* conses *) + (* Well, "till" is the correct form; but "til" is in common enough + * usage that I'll prefer it for terseness. *) + val takeTil : (char -> bool) -> t (string*int) + val takeTil' : (char -> bool) -> t string (* conses *) + val takeRest : t string + + (** Convenience functions *) + val skipSpace : t unit + val endOfLine : t unit + val unsigned_int_of_radix : int -> t int + (* + * val signed_int_of_radix : int -> t int + * val double : t float + *) +end + +structure Blob : sig + con t :: Type -> Type + val monad_parse : monad t + + val parse : a ::: Type -> t a -> blob -> option a + + (** Combinators *) + val fail : a ::: Type -> t a + val or : a ::: Type -> t a -> t a -> t a + val maybe : a ::: Type -> t a -> t (option a) + val maybe' : a ::: Type -> t a -> t unit + val many : a ::: Type -> t a -> t (list a) + val count : a ::: Type -> int -> t a -> t (list a) + val skipMany : a ::: Type -> t a -> t unit + val sepBy : a ::: Type -> s ::: Type -> t a -> t s -> t (list a) +end diff --git a/samples/VimL/filenames/.nvimrc b/samples/VimL/filenames/.nvimrc new file mode 100644 index 00000000..53a65ade --- /dev/null +++ b/samples/VimL/filenames/.nvimrc @@ -0,0 +1,10 @@ +set nocompatible +set ignorecase +set smartcase +set showmatch +set showcmd + +syntax on + +set hlsearch " Highlight searches +set incsearch " Do incremental searching diff --git a/samples/VimL/solarized.vim b/samples/VimL/solarized.vim new file mode 100644 index 00000000..70f52238 --- /dev/null +++ b/samples/VimL/solarized.vim @@ -0,0 +1,1117 @@ +" Name: Solarized vim colorscheme +" Author: Ethan Schoonover +" URL: http://ethanschoonover.com/solarized +" (see this url for latest release & screenshots) +" License: OSI approved MIT license (see end of this file) +" Created: In the middle of the night +" Modified: 2011 May 05 +" +" Usage "{{{ +" +" --------------------------------------------------------------------- +" ABOUT: +" --------------------------------------------------------------------- +" Solarized is a carefully designed selective contrast colorscheme with dual +" light and dark modes that runs in both GUI, 256 and 16 color modes. +" +" See the homepage above for screenshots and details. +" +" --------------------------------------------------------------------- +" OPTIONS: +" --------------------------------------------------------------------- +" See the "solarized.txt" help file included with this colorscheme (in the +" "doc" subdirectory) for information on options, usage, the Toggle Background +" function and more. If you have already installed Solarized, this is available +" from the Solarized menu and command line as ":help solarized" +" +" --------------------------------------------------------------------- +" INSTALLATION: +" --------------------------------------------------------------------- +" Two options for installation: manual or pathogen +" +" MANUAL INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download the solarized distribution (available on the homepage above) +" and unarchive the file. +" 2. Move `solarized.vim` to your `.vim/colors` directory. +" 3. Move each of the files in each subdirectories to the corresponding .vim +" subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload +" directory as .vim/autoload/togglebg.vim). +" +" RECOMMENDED PATHOGEN INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download and install Tim Pope's Pathogen from: +" https://github.com/tpope/vim-pathogen +" +" 2. Next, move or clone the `vim-colors-solarized` directory so that it is +" a subdirectory of the `.vim/bundle` directory. +" +" a. **clone with git:** +" +" $ cd ~/.vim/bundle +" $ git clone git://github.com/altercation/vim-colors-solarized.git +" +" b. **or move manually into the pathogen bundle directory:** +" In the parent directory of vim-colors-solarized: +" +" $ mv vim-colors-solarized ~/.vim/bundle/ +" +" MODIFY VIMRC: +" +" After either Option 1 or Option 2 above, put the following two lines in your +" .vimrc: +" +" syntax enable +" set background=dark +" colorscheme solarized +" +" or, for the light background mode of Solarized: +" +" syntax enable +" set background=light +" colorscheme solarized +" +" I like to have a different background in GUI and terminal modes, so I can use +" the following if-then. However, I find vim's background autodetection to be +" pretty good and, at least with MacVim, I can leave this background value +" assignment out entirely and get the same results. +" +" if has('gui_running') +" set background=light +" else +" set background=dark +" endif +" +" See the Solarized homepage at http://ethanschoonover.com/solarized for +" screenshots which will help you select either the light or dark background. +" +" --------------------------------------------------------------------- +" COLOR VALUES +" --------------------------------------------------------------------- +" Download palettes and files from: http://ethanschoonover.com/solarized +" +" L\*a\*b values are canonical (White D65, Reference D50), other values are +" matched in sRGB space. +" +" SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB +" --------- ------- ---- ------- ----------- ---------- ----------- ----------- +" base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 +" base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 +" base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46 +" base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51 +" base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 +" base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 +" base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93 +" base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 +" yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 +" orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 +" red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 +" magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 +" violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 +" blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 +" cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 +" green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 +" +" --------------------------------------------------------------------- +" COLORSCHEME HACKING +" --------------------------------------------------------------------- +" +" Useful commands for testing colorschemes: +" :source $VIMRUNTIME/syntax/hitest.vim +" :help highlight-groups +" :help cterm-colors +" :help group-name +" +" Useful links for developing colorschemes: +" http://www.vim.org/scripts/script.php?script_id=2937 +" http://vimcasts.org/episodes/creating-colorschemes-for-vim/ +" http://www.frexx.de/xterm-256-notes/" +" +" }}} +" Environment Specific Overrides "{{{ +" Allow or disallow certain features based on current terminal emulator or +" environment. + +" Terminals that support italics +let s:terms_italic=[ + \"rxvt", + \"gnome-terminal" + \] +" For reference only, terminals are known to be incomptible. +" Terminals that are in neither list need to be tested. +let s:terms_noitalic=[ + \"iTerm.app", + \"Apple_Terminal" + \] +if has("gui_running") + let s:terminal_italic=1 " TODO: could refactor to not require this at all +else + let s:terminal_italic=0 " terminals will be guilty until proven compatible + for term in s:terms_italic + if $TERM_PROGRAM =~ term + let s:terminal_italic=1 + endif + endfor +endif + +" }}} +" Default option values"{{{ +" --------------------------------------------------------------------- +" s:options_list is used to autogenerate a list of all non-default options +" using "call SolarizedOptions()" or with the "Generate .vimrc commands" +" Solarized menu option. See the "Menus" section below for the function itself. +let s:options_list=[ + \'" this block of commands has been autogenerated by solarized.vim and', + \'" includes the current, non-default Solarized option values.', + \'" To use, place these commands in your .vimrc file (replacing any', + \'" existing colorscheme commands). See also ":help solarized"', + \'', + \'" ------------------------------------------------------------------', + \'" Solarized Colorscheme Config', + \'" ------------------------------------------------------------------', + \] +let s:colorscheme_list=[ + \'syntax enable', + \'set background='.&background, + \'colorscheme solarized', + \] +let s:defaults_list=[ + \'" ------------------------------------------------------------------', + \'', + \'" The following items are available options, but do not need to be', + \'" included in your .vimrc as they are currently set to their defaults.', + \'' + \] +let s:lazycat_list=[ + \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"', + \'" ------------------------------------------------------------------', + \] + +function! s:SetOption(name,default) + if type(a:default) == type(0) + let l:wrap='' + let l:ewrap='' + else + let l:wrap='"' + let l:ewrap='\"' + endif + if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default + exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"' + exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")' + else + exe 'call add(s:options_list, "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.' \"default value is '.a:default.'")' + endif +endfunction + +if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256) + let s:solarized_termtrans_default = 1 +else + let s:solarized_termtrans_default = 0 +endif +call s:SetOption("termtrans",s:solarized_termtrans_default) +call s:SetOption("degrade",0) +call s:SetOption("bold",1) +call s:SetOption("underline",1) +call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support +call s:SetOption("termcolors",16) +call s:SetOption("contrast","normal") +call s:SetOption("visibility","normal") +call s:SetOption("diffmode","normal") +call s:SetOption("hitrail",0) +call s:SetOption("menu",1) + +"}}} +" Colorscheme initialization "{{{ +" --------------------------------------------------------------------- +hi clear +if exists("syntax_on") + syntax reset +endif +let colors_name = "solarized" + +"}}} +" GUI & CSApprox hexadecimal palettes"{{{ +" --------------------------------------------------------------------- +" +" Set both gui and terminal color values in separate conditional statements +" Due to possibility that CSApprox is running (though I suppose we could just +" leave the hex values out entirely in that case and include only cterm colors) +" We also check to see if user has set solarized (force use of the +" neutral gray monotone palette component) +if (has("gui_running") && g:solarized_degrade == 0) + let s:vmode = "gui" + let s:base03 = "#002b36" + let s:base02 = "#073642" + let s:base01 = "#586e75" + let s:base00 = "#657b83" + let s:base0 = "#839496" + let s:base1 = "#93a1a1" + let s:base2 = "#eee8d5" + let s:base3 = "#fdf6e3" + let s:yellow = "#b58900" + let s:orange = "#cb4b16" + let s:red = "#dc322f" + let s:magenta = "#d33682" + let s:violet = "#6c71c4" + let s:blue = "#268bd2" + let s:cyan = "#2aa198" + "let s:green = "#859900" "original + let s:green = "#719e07" "experimental +elseif (has("gui_running") && g:solarized_degrade == 1) + " These colors are identical to the 256 color mode. They may be viewed + " while in gui mode via "let g:solarized_degrade=1", though this is not + " recommened and is for testing only. + let s:vmode = "gui" + let s:base03 = "#1c1c1c" + let s:base02 = "#262626" + let s:base01 = "#4e4e4e" + let s:base00 = "#585858" + let s:base0 = "#808080" + let s:base1 = "#8a8a8a" + let s:base2 = "#d7d7af" + let s:base3 = "#ffffd7" + let s:yellow = "#af8700" + let s:orange = "#d75f00" + let s:red = "#af0000" + let s:magenta = "#af005f" + let s:violet = "#5f5faf" + let s:blue = "#0087ff" + let s:cyan = "#00afaf" + let s:green = "#5f8700" +elseif g:solarized_termcolors != 256 && &t_Co >= 16 + let s:vmode = "cterm" + let s:base03 = "8" + let s:base02 = "0" + let s:base01 = "10" + let s:base00 = "11" + let s:base0 = "12" + let s:base1 = "14" + let s:base2 = "7" + let s:base3 = "15" + let s:yellow = "3" + let s:orange = "9" + let s:red = "1" + let s:magenta = "5" + let s:violet = "13" + let s:blue = "4" + let s:cyan = "6" + let s:green = "2" +elseif g:solarized_termcolors == 256 + let s:vmode = "cterm" + let s:base03 = "234" + let s:base02 = "235" + let s:base01 = "239" + let s:base00 = "240" + let s:base0 = "244" + let s:base1 = "245" + let s:base2 = "187" + let s:base3 = "230" + let s:yellow = "136" + let s:orange = "166" + let s:red = "124" + let s:magenta = "125" + let s:violet = "61" + let s:blue = "33" + let s:cyan = "37" + let s:green = "64" +else + let s:vmode = "cterm" + let s:bright = "* term=bold cterm=bold" +" let s:base03 = "0".s:bright +" let s:base02 = "0" +" let s:base01 = "2".s:bright +" let s:base00 = "3".s:bright +" let s:base0 = "4".s:bright +" let s:base1 = "6".s:bright +" let s:base2 = "7" +" let s:base3 = "7".s:bright +" let s:yellow = "3" +" let s:orange = "1".s:bright +" let s:red = "1" +" let s:magenta = "5" +" let s:violet = "5".s:bright +" let s:blue = "4" +" let s:cyan = "6" +" let s:green = "2" + let s:base03 = "DarkGray" " 0* + let s:base02 = "Black" " 0 + let s:base01 = "LightGreen" " 2* + let s:base00 = "LightYellow" " 3* + let s:base0 = "LightBlue" " 4* + let s:base1 = "LightCyan" " 6* + let s:base2 = "LightGray" " 7 + let s:base3 = "White" " 7* + let s:yellow = "DarkYellow" " 3 + let s:orange = "LightRed" " 1* + let s:red = "DarkRed" " 1 + let s:magenta = "DarkMagenta" " 5 + let s:violet = "LightMagenta" " 5* + let s:blue = "DarkBlue" " 4 + let s:cyan = "DarkCyan" " 6 + let s:green = "DarkGreen" " 2 + +endif +"}}} +" Formatting options and null values for passthrough effect "{{{ +" --------------------------------------------------------------------- + let s:none = "NONE" + let s:none = "NONE" + let s:t_none = "NONE" + let s:n = "NONE" + let s:c = ",undercurl" + let s:r = ",reverse" + let s:s = ",standout" + let s:ou = "" + let s:ob = "" +"}}} +" Background value based on termtrans setting "{{{ +" --------------------------------------------------------------------- +if (has("gui_running") || g:solarized_termtrans == 0) + let s:back = s:base03 +else + let s:back = "NONE" +endif +"}}} +" Alternate light scheme "{{{ +" --------------------------------------------------------------------- +if &background == "light" + let s:temp03 = s:base03 + let s:temp02 = s:base02 + let s:temp01 = s:base01 + let s:temp00 = s:base00 + let s:base03 = s:base3 + let s:base02 = s:base2 + let s:base01 = s:base1 + let s:base00 = s:base0 + let s:base0 = s:temp00 + let s:base1 = s:temp01 + let s:base2 = s:temp02 + let s:base3 = s:temp03 + if (s:back != "NONE") + let s:back = s:base03 + endif +endif +"}}} +" Optional contrast schemes "{{{ +" --------------------------------------------------------------------- +if g:solarized_contrast == "high" + let s:base01 = s:base00 + let s:base00 = s:base0 + let s:base0 = s:base1 + let s:base1 = s:base2 + let s:base2 = s:base3 + let s:back = s:back +endif +if g:solarized_contrast == "low" + let s:back = s:base02 + let s:ou = ",underline" +endif +"}}} +" Overrides dependent on user specified values and environment "{{{ +" --------------------------------------------------------------------- +if (g:solarized_bold == 0 || &t_Co == 8 ) + let s:b = "" + let s:bb = ",bold" +else + let s:b = ",bold" + let s:bb = "" +endif + +if g:solarized_underline == 0 + let s:u = "" +else + let s:u = ",underline" +endif + +if g:solarized_italic == 0 || s:terminal_italic == 0 + let s:i = "" +else + let s:i = ",italic" +endif +"}}} +" Highlighting primitives"{{{ +" --------------------------------------------------------------------- + +exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'" +exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'" +exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'" +exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'" +exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'" +exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'" +exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'" +exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'" +exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'" +exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'" +exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'" +exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'" +exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'" +exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'" +exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'" +exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'" +exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'" +exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'" + +exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'" +exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'" +exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'" +exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'" +exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'" +exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'" +exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'" +exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'" +exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'" +exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'" +exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'" +exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'" +exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'" +exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'" +exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'" +exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'" +exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'" +exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'" + +exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'" +exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'" +exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'" +exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'" +exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i."'" +exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'" +exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'" +exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'" +" revbb (reverse bold for bright colors) is only set to actual bold in low +" color terminals (t_co=8, such as OS X Terminal.app) and should only be used +" with colors 8-15. +exe "let s:fmt_revbb = ' ".s:vmode."=NONE".s:r.s:bb. " term=NONE".s:r.s:bb."'" +exe "let s:fmt_revbbu = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'" + +if has("gui_running") + exe "let s:sp_none = ' guisp=".s:none ."'" + exe "let s:sp_back = ' guisp=".s:back ."'" + exe "let s:sp_base03 = ' guisp=".s:base03 ."'" + exe "let s:sp_base02 = ' guisp=".s:base02 ."'" + exe "let s:sp_base01 = ' guisp=".s:base01 ."'" + exe "let s:sp_base00 = ' guisp=".s:base00 ."'" + exe "let s:sp_base0 = ' guisp=".s:base0 ."'" + exe "let s:sp_base1 = ' guisp=".s:base1 ."'" + exe "let s:sp_base2 = ' guisp=".s:base2 ."'" + exe "let s:sp_base3 = ' guisp=".s:base3 ."'" + exe "let s:sp_green = ' guisp=".s:green ."'" + exe "let s:sp_yellow = ' guisp=".s:yellow ."'" + exe "let s:sp_orange = ' guisp=".s:orange ."'" + exe "let s:sp_red = ' guisp=".s:red ."'" + exe "let s:sp_magenta = ' guisp=".s:magenta."'" + exe "let s:sp_violet = ' guisp=".s:violet ."'" + exe "let s:sp_blue = ' guisp=".s:blue ."'" + exe "let s:sp_cyan = ' guisp=".s:cyan ."'" +else + let s:sp_none = "" + let s:sp_back = "" + let s:sp_base03 = "" + let s:sp_base02 = "" + let s:sp_base01 = "" + let s:sp_base00 = "" + let s:sp_base0 = "" + let s:sp_base1 = "" + let s:sp_base2 = "" + let s:sp_base3 = "" + let s:sp_green = "" + let s:sp_yellow = "" + let s:sp_orange = "" + let s:sp_red = "" + let s:sp_magenta = "" + let s:sp_violet = "" + let s:sp_blue = "" + let s:sp_cyan = "" +endif + +"}}} +" Basic highlighting"{{{ +" --------------------------------------------------------------------- +" note that link syntax to avoid duplicate configuration doesn't work with the +" exe compiled formats + +exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back + +exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none +" *Comment any comment + +exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none +" *Constant any constant +" String a string constant: "this is a string" +" Character a character constant: 'c', '\n' +" Number a number constant: 234, 0xff +" Boolean a boolean constant: TRUE, false +" Float a floating point constant: 2.3e10 + +exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none +" *Identifier any variable name +" Function function name (also: methods for classes) +" +exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none +" *Statement any statement +" Conditional if, then, else, endif, switch, etc. +" Repeat for, do, while, etc. +" Label case, default, etc. +" Operator "sizeof", "+", "*", etc. +" Keyword any other keyword +" Exception try, catch, throw + +exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none +" *PreProc generic Preprocessor +" Include preprocessor #include +" Define preprocessor #define +" Macro same as Define +" PreCondit preprocessor #if, #else, #endif, etc. + +exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none +" *Type int, long, char, etc. +" StorageClass static, register, volatile, etc. +" Structure struct, union, enum, etc. +" Typedef A typedef + +exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none +" *Special any special symbol +" SpecialChar special character in a constant +" Tag you can use CTRL-] on this +" Delimiter character that needs attention +" SpecialComment special things inside a comment +" Debug debugging statements + +exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none +" *Underlined text that stands out, HTML links + +exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none +" *Ignore left blank, hidden |hl-Ignore| + +exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none +" *Error any erroneous construct + +exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none +" *Todo anything that needs extra attention; mostly the +" keywords TODO FIXME and XXX +" +"}}} +" Extended highlighting "{{{ +" --------------------------------------------------------------------- +if (g:solarized_visibility=="high") + exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_red .s:bg_none +elseif (g:solarized_visibility=="low") + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none +else + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base00 .s:bg_base02 + exe "hi! NonText" .s:fmt_bold .s:fg_base00 .s:bg_none +endif +exe "hi! StatusLine" .s:fmt_none .s:fg_base1 .s:bg_base02 .s:fmt_revbb +exe "hi! StatusLineNC" .s:fmt_none .s:fg_base00 .s:bg_base02 .s:fmt_revbb +exe "hi! Visual" .s:fmt_none .s:fg_base01 .s:bg_base03 .s:fmt_revbb +exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none +exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02 +exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none +if ( has("gui_running") || &t_Co > 8 ) + exe "hi! VertSplit" .s:fmt_none .s:fg_base00 .s:bg_base00 +else + exe "hi! VertSplit" .s:fmt_revbb .s:fg_base00 .s:bg_base02 +endif +exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none +exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 .s:fmt_revbb +exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 .s:fmt_revbb +exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03 +exe "hi! FoldColumn" .s:fmt_none .s:fg_base0 .s:bg_base02 +if (g:solarized_diffmode=="high") +exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none +exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none +elseif (g:solarized_diffmode=="low") +exe "hi! DiffAdd" .s:fmt_undr .s:fg_green .s:bg_none .s:sp_green +exe "hi! DiffChange" .s:fmt_undr .s:fg_yellow .s:bg_none .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_undr .s:fg_blue .s:bg_none .s:sp_blue +else " normal + if has("gui_running") +exe "hi! DiffAdd" .s:fmt_bold .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_bold .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_bold .s:fg_blue .s:bg_base02 .s:sp_blue + else +exe "hi! DiffAdd" .s:fmt_none .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_none .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_none .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_none .s:fg_blue .s:bg_base02 .s:sp_blue + endif +endif +exe "hi! SignColumn" .s:fmt_none .s:fg_base0 +exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red +exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet +exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan +exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow +exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 .s:fmt_revbb +exe "hi! PmenuSel" .s:fmt_none .s:fg_base01 .s:bg_base2 .s:fmt_revbb +exe "hi! PmenuSbar" .s:fmt_none .s:fg_base2 .s:bg_base0 .s:fmt_revbb +exe "hi! PmenuThumb" .s:fmt_none .s:fg_base0 .s:bg_base03 .s:fmt_revbb +exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineSel" .s:fmt_undr .s:fg_base01 .s:bg_base2 .s:sp_base0 .s:fmt_revbbu +exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1 +exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0 +hi! link lCursor Cursor +exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01 + +"}}} +" vim syntax highlighting "{{{ +" --------------------------------------------------------------------- +"exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital +"hi! link vimComment Comment +"hi! link vimLineComment Comment +hi! link vimVar Identifier +hi! link vimFunc Function +hi! link vimUserFunc Function +hi! link helpSpecial Special +hi! link vimSet Normal +hi! link vimSetEqual Normal +exe "hi! vimCommentString" .s:fmt_none .s:fg_violet .s:bg_none +exe "hi! vimCommand" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimCmdSep" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! helpExample" .s:fmt_none .s:fg_base1 .s:bg_none +exe "hi! helpOption" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! helpNote" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpVim" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpHyperTextJump" .s:fmt_undr .s:fg_blue .s:bg_none +exe "hi! helpHyperTextEntry".s:fmt_none .s:fg_green .s:bg_none +exe "hi! vimIsCommand" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! vimSynMtchOpt" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimSynType" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! vimHiLink" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimHiGroup" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimGroup" .s:fmt_undb .s:fg_blue .s:bg_none +"}}} +" diff highlighting "{{{ +" --------------------------------------------------------------------- +hi! link diffAdded Statement +hi! link diffLine Identifier +"}}} +" git & gitcommit highlighting "{{{ +"git +"exe "hi! gitDateHeader" +"exe "hi! gitIdentityHeader" +"exe "hi! gitIdentityKeyword" +"exe "hi! gitNotesHeader" +"exe "hi! gitReflogHeader" +"exe "hi! gitKeyword" +"exe "hi! gitIdentity" +"exe "hi! gitEmailDelimiter" +"exe "hi! gitEmail" +"exe "hi! gitDate" +"exe "hi! gitMode" +"exe "hi! gitHashAbbrev" +"exe "hi! gitHash" +"exe "hi! gitReflogMiddle" +"exe "hi! gitReference" +"exe "hi! gitStage" +"exe "hi! gitType" +"exe "hi! gitDiffAdded" +"exe "hi! gitDiffRemoved" +"gitcommit +"exe "hi! gitcommitSummary" +exe "hi! gitcommitComment" .s:fmt_ital .s:fg_base01 .s:bg_none +hi! link gitcommitUntracked gitcommitComment +hi! link gitcommitDiscarded gitcommitComment +hi! link gitcommitSelected gitcommitComment +exe "hi! gitcommitUnmerged" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitOnBranch" .s:fmt_bold .s:fg_base01 .s:bg_none +exe "hi! gitcommitBranch" .s:fmt_bold .s:fg_magenta .s:bg_none +hi! link gitcommitNoBranch gitcommitBranch +exe "hi! gitcommitDiscardedType".s:fmt_none .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedType" .s:fmt_none .s:fg_green .s:bg_none +"exe "hi! gitcommitUnmergedType" +"exe "hi! gitcommitType" +"exe "hi! gitcommitNoChanges" +"exe "hi! gitcommitHeader" +exe "hi! gitcommitHeader" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! gitcommitUntrackedFile".s:fmt_bold .s:fg_cyan .s:bg_none +exe "hi! gitcommitDiscardedFile".s:fmt_bold .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedFile" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitUnmergedFile" .s:fmt_bold .s:fg_yellow .s:bg_none +exe "hi! gitcommitFile" .s:fmt_bold .s:fg_base0 .s:bg_none +hi! link gitcommitDiscardedArrow gitcommitDiscardedFile +hi! link gitcommitSelectedArrow gitcommitSelectedFile +hi! link gitcommitUnmergedArrow gitcommitUnmergedFile +"exe "hi! gitcommitArrow" +"exe "hi! gitcommitOverflow" +"exe "hi! gitcommitBlank" +" }}} +" html highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! htmlTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlEndTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlTagN" .s:fmt_bold .s:fg_base1 .s:bg_none +exe "hi! htmlTagName" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue .s:bg_none +exe "hi! htmlArg" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! javaScript" .s:fmt_none .s:fg_yellow .s:bg_none +"}}} +" perl highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none +exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none + +"}}} +" tex highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none +exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none +"}}} +" ruby highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold +"rubyInclude +"rubySharpBang +"rubyAccess +"rubyPredefinedVariable +"rubyBoolean +"rubyClassVariable +"rubyBeginEnd +"rubyRepeatModifier +"hi! link rubyArrayDelimiter Special " [ , , ] +"rubyCurlyBlock { , , } + +"hi! link rubyClass Keyword +"hi! link rubyModule Keyword +"hi! link rubyKeyword Keyword +"hi! link rubyOperator Operator +"hi! link rubyIdentifier Identifier +"hi! link rubyInstanceVariable Identifier +"hi! link rubyGlobalVariable Identifier +"hi! link rubyClassVariable Identifier +"hi! link rubyConstant Type +"}}} +" haskell syntax highlighting"{{{ +" --------------------------------------------------------------------- +" For use with syntax/haskell.vim : Haskell Syntax File +" http://www.vim.org/scripts/script.php?script_id=3034 +" See also Steffen Siering's github repository: +" http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim +" --------------------------------------------------------------------- +" +" Treat True and False specially, see the plugin referenced above +let hs_highlight_boolean=1 +" highlight delims, see the plugin referenced above +let hs_highlight_delimiters=1 + +exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none + +exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none +exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none + +exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none +exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none +exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr +exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none +hi! link hsImportParams Delimiter +hi! link hsDelimTypeExport Delimiter +hi! link hsModuleStartLabel hsStructure +hi! link hsModuleWhereLabel hsModuleStartLabel + +" following is for the haskell-conceal plugin +" the first two items don't have an impact, but better safe +exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none + +"}}} +" pandoc markdown syntax highlighting "{{{ +" --------------------------------------------------------------------- + +"PandocHiLink pandocNormalBlock +exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital +exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none +hi! link pandocVerbatimBlockDeep pandocVerbatimBlock +hi! link pandocCodeBlock pandocVerbatimBlock +hi! link pandocCodeBlockDelim pandocVerbatimBlock +exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr + +" Definitions +" --------------------------------------------------------------------- +let s:fg_pdef = s:fg_violet +exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd +exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none + +" Tables +" --------------------------------------------------------------------- +let s:fg_ptable = s:fg_blue +exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none +hi! link pandocTableStructureTop pandocTableStructre +hi! link pandocTableStructureEnd pandocTableStructre +exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none +exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none +exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none + +" Headings +" --------------------------------------------------------------------- +let s:fg_phead = s:fg_orange +exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold +exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr +exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold + +" Links +" --------------------------------------------------------------------- +exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr +exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb +exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr +exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi +exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00 +exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00 +exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb +exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr +exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold +exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb +exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none +exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none + +" Main Styles +" --------------------------------------------------------------------- +exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none +exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none + +exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr +hi! link pandocEscapedCharacter pandocEscapePair +hi! link pandocLineBreak pandocEscapePair + +" Embedded Code +" --------------------------------------------------------------------- +exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold +hi! link pandocMetadataTitle pandocMetadata + +"}}} +" Utility autocommand "{{{ +" --------------------------------------------------------------------- +" In cases where Solarized is initialized inside a terminal vim session and +" then transferred to a gui session via the command `:gui`, the gui vim process +" does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` +" related code that sets gui specific values isn't executed. +" +" Currently, Solarized sets only the cterm or gui values for the colorscheme +" depending on gui or terminal mode. It's possible that, if the following +" autocommand method is deemed excessively poor form, that approach will be +" used again and the autocommand below will be dropped. +" +" However it seems relatively benign in this case to include the autocommand +" here. It fires only in cases where vim is transferring from terminal to gui +" mode (detected with the script scope s:vmode variable). It also allows for +" other potential terminal customizations that might make gui mode suboptimal. +" +autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif +"}}} +" Highlight Trailing Space {{{ +" Experimental: Different highlight when on cursorline +function! s:SolarizedHiTrail() + if g:solarized_hitrail==0 + hi! clear solarizedTrailingSpace + else + syn match solarizedTrailingSpace "\s*$" + exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red + endif +endfunction +augroup SolarizedHiTrail + autocmd! + if g:solarized_hitrail==1 + autocmd! Syntax * call s:SolarizedHiTrail() + autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif + endif +augroup END +" }}} +" Menus "{{{ +" --------------------------------------------------------------------- +" Turn off Solarized menu by including the following assignment in your .vimrc: +" +" let g:solarized_menu=0 + +function! s:SolarizedOptions() + new "new buffer + setf vim "vim filetype + let failed = append(0, s:defaults_list) + let failed = append(0, s:colorscheme_list) + let failed = append(0, s:options_list) + let failed = append(0, s:lazycat_list) + 0 "jump back to the top +endfunction +if !exists(":SolarizedOptions") + command SolarizedOptions :call s:SolarizedOptions() +endif + +function! SolarizedMenu() + if exists("g:loaded_solarized_menu") + try + silent! aunmenu Solarized + endtry + endif + let g:loaded_solarized_menu = 1 + + if g:colors_name == "solarized" && g:solarized_menu != 0 + + amenu &Solarized.&Contrast.&Low\ Contrast :let g:solarized_contrast="low" \| colorscheme solarized + amenu &Solarized.&Contrast.&Normal\ Contrast :let g:solarized_contrast="normal" \| colorscheme solarized + amenu &Solarized.&Contrast.&High\ Contrast :let g:solarized_contrast="high" \| colorscheme solarized + an &Solarized.&Contrast.-sep- + amenu &Solarized.&Contrast.&Help:\ Contrast :help 'solarized_contrast' + + amenu &Solarized.&Visibility.&Low\ Visibility :let g:solarized_visibility="low" \| colorscheme solarized + amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal" \| colorscheme solarized + amenu &Solarized.&Visibility.&High\ Visibility :let g:solarized_visibility="high" \| colorscheme solarized + an &Solarized.&Visibility.-sep- + amenu &Solarized.&Visibility.&Help:\ Visibility :help 'solarized_visibility' + + amenu &Solarized.&Background.&Toggle\ Background :ToggleBG + amenu &Solarized.&Background.&Dark\ Background :set background=dark \| colorscheme solarized + amenu &Solarized.&Background.&Light\ Background :set background=light \| colorscheme solarized + an &Solarized.&Background.-sep- + amenu &Solarized.&Background.&Help:\ ToggleBG :help togglebg + + if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized" + if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized" + if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized" + + amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode :let g:solarized_diffmode="low" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode :let g:solarized_diffmode="high" \| colorscheme solarized + + if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif + exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized" + an &Solarized.&Experimental.-sep- + amenu &Solarized.&Experimental.&Help:\ HiTrail :help 'solarized_hitrail' + + an &Solarized.-sep1- + + amenu &Solarized.&Autogenerate\ options :SolarizedOptions + + an &Solarized.-sep2- + + amenu &Solarized.&Help.&Solarized\ Help :help solarized + amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg + amenu &Solarized.&Help.&Removing\ This\ Menu :help solarized-menu + + an 9999.77 &Help.&Solarized\ Colorscheme :help solarized + an 9999.78 &Help.&Toggle\ Background :help togglebg + an 9999.79 &Help.-sep3- + + endif +endfunction + +autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif + +"}}} +" License "{{{ +" --------------------------------------------------------------------- +" +" Copyright (c) 2011 Ethan Schoonover +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to deal +" in the Software without restriction, including without limitation the rights +" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +" copies of the Software, and to permit persons to whom the Software is +" furnished to do so, subject to the following conditions: +" +" The above copyright notice and this permission notice shall be included in +" all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +" THE SOFTWARE. +" +" vim:foldmethod=marker:foldlevel=0 +"}}} diff --git a/samples/Vue/basic.vue b/samples/Vue/basic.vue new file mode 100644 index 00000000..e5918fe7 --- /dev/null +++ b/samples/Vue/basic.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/samples/Vue/pre-processors.vue b/samples/Vue/pre-processors.vue new file mode 100644 index 00000000..364a1a1c --- /dev/null +++ b/samples/Vue/pre-processors.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/samples/Web Ontology Language/sample.owl b/samples/Web Ontology Language/sample.owl new file mode 100644 index 00000000..612186db --- /dev/null +++ b/samples/Web Ontology Language/sample.owl @@ -0,0 +1,6858 @@ + + + + + + + +]> + + + + + v.1.4. Added Food class (used in domain/range of hasIngredient), Added several hasCountryOfOrigin restrictions on pizzas, Made hasTopping invers functional + version 1.5 + v.1.5. Removed protege.owl import and references. Made ontology URI date-independent + An example ontology that contains all constructs required for the various versions of the Pizza Tutorial run by Manchester University (see http://www.co-ode.org/resources/tutorials/) + + + + + + + + + + + + + Americana + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AmericanaPicante + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeAnchovies + + + + + + + + + + + CoberturaDeArtichoke + + + + + + + + + + + + + + + + + CoberturaDeAspargos + + + + + + + + + + + + + + + + + Cajun + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeCajun + + + + + + + + + + + + + + + + + CoberturaDeCaper + + + + + + + + + + + + + + + + + Capricciosa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Caprina + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeQueijo + + + + + + + + + + + Any pizza that has at least 1 cheese topping. + PizzaComQueijo + + + + + + + + + + + + + + + + + + + CoberturaDeQueijoComVegetais + This class will be inconsistent. This is because we have given it 2 disjoint parents, which means it could never have any members (as nothing can simultaneously be a CheeseTopping and a VegetableTopping). NB Called ProbeInconsistentTopping in the ProtegeOWL Tutorial. + + + + + + + + + + + + + + CoberturaDeFrango + + + + + + + + + + + + + + + + + Pais + A class that is equivalent to the set of individuals that are described in the enumeration - ie Countries can only be either America, England, France, Germany or Italy and nothing else. Note that these individuals have been asserted to be allDifferent from each other. + + + + + + + + + + + + + + + + + + + + + + + + BaseEspessa + + + + + + + + + + + + + + + + + Fiorentina + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDePeixe + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaQuatroQueijos + + + + + + + + + + + + + + + + + QuatroQueijos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeFrutas + + + + + + + + + + + FrutosDoMar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeAlho + + + + + + + + + + + + + + + + + Giardiniera + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeQueijoDeCabra + + + + + + + + + + + + + + + + + CoberturaDeGorgonzola + + + + + + + + + + + + + + + + + CoberturaDePimentaoVerde + + + + + + + + + + + CoberturaDePresunto + + + + + + + + + + + CoberturaDeErvas + + + + + + + + + + + Picante + + + + + + + + + + + CoberturaDePimentaoVerdePicante + + + + + + + + + + + + + + + + + CoberturaDeBifePicante + + + + + + + + + + + + + + + + + A class to demonstrate mistakes made with setting a property domain. The property hasTopping has a domain of Pizza. This means that the reasoner can infer that all individuals using the hasTopping property must be of type Pizza. Because of the restriction on this class, all members of IceCream must use the hasTopping property, and therefore must also be members of Pizza. However, Pizza and IceCream are disjoint, so this causes an inconsistency. If they were not disjoint, IceCream would be inferred to be a subclass of Pizza. + Sorvete + + + + + + + + + + + + + + + + + PizzaInteressante + Any pizza that has at least 3 toppings. Note that this is a cardinality constraint on the hasTopping property and NOT a qualified cardinality constraint (QCR). A QCR would specify from which class the members in this relationship must be. eg has at least 3 toppings from PizzaTopping. This is currently not supported in OWL. + + + + + + 3 + + + + + + + + + + + + + CoberturaDeJalapeno + + + + + + + + + + + + + + + + + LaReine + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeLeek + + + + + + + + + + + + + + + + + Margherita + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeCarne + + + + + + + + + + + Any pizza that has at least one meat topping + PizzaDeCarne + + + + + + + + + + + + + + + + + + + Media + + + + + + + + + + + NaoPicante + + + + + + + + + + + CoberturaDeFrutosDoMarMistos + + + + + + + + + + + CoberturaDeMozzarella + + + + + + + + + + + + + + + + + + + + + + + Cogumelo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeCogumelo + + + + + + + + + + + + + + + + + A pizza that can be found on a pizza menu + PizzaComUmNome + + + + + + + + + + + Napoletana + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Any Pizza that is not a VegetarianPizza + PizzaNaoVegetariana + + + + + + + + + + + + + + + + + + + + CoberturaDeCastanha + + + + + + + + + + + + + + + + + CoberturaDeAzeitona + + + + + + + + + + + + + + + + + CoberturaDeCebola + + + + + + + + + + + + + + + + + CoberturaDePrezuntoParma + + + + + + + + + + + + + + + + + Parmense + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeParmesao + + + + + + + + + + + + + + + + + CoberturaPeperonata + + + + + + + + + + + + + + + + + CoberturaDeCalabreza + + + + + + + + + + + + + + + + + CoberturaDePimentao + + + + + + + + + + + CoberturaPetitPois + + + + + + + + + + + + + + + + + CoberturaPineKernels + + + + + + + + + + + Pizza + + + + + + + + + + + + + + + + + BaseDaPizza + + + + + + + + + + + CoberturaDaPizza + + + + + + + + + + + PolloAdAstra + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeCamarao + + + + + + + + + + + CoberturaPrinceCarlo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QuatroQueijos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This defined class has conditions that are part of the definition: ie any Pizza that has the country of origin, Italy is a RealItalianPizza. It also has conditions that merely describe the members - that all RealItalianPizzas must only have ThinAndCrispy bases. In essence, all pizzas from Italy must have ThinAndCrispy bases. + PizzaItalianaReal + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeCebolaVermelha + + + + + + + + + + + CoberturaRocket + + + + + + + + + + + + + + + + + Rosa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaRosemary + + + + + + + + + + + + + + + + + CoberturaEmMolho + + + + + + + + + + + Siciliana + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CoberturaDeTomateFatiado + + + + + + + + + + + + + + + + + SloppyGiuseppe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Soho + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A ValuePartition that describes only values from Hot, Medium or Mild. NB Subclasses can themselves be divided up into further partitions. + Tempero + + + + + + + + + + + + + + + + + + + + Any pizza that has a spicy topping is a SpicyPizza + PizzaTemperada + + + + + + + + + + + + + + + + + + + An alternative definition for the SpicyPizza which does away with needing a definition of SpicyTopping and uses a slightly more complicated restriction: Pizzas that have at least one topping that is both a PizzaTopping and has spiciness hot are members of this class. + PizzaTemperadaEquivalente + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Any pizza topping that has spiciness Hot + CoberturaTemperada + + + + + + + + + + + + + + + + + + + CoberturaDeEspinafre + + + + + + + + + + + + + + + + + CoberturaSultana + + + + + + + + + + + + + + + + + CoberturaDeTomateRessecadoAoSol + + + + + + + + + + + + + + + + + CoberturaDePimentaoDoce + + + + + + + + + + + + + + + + + BaseFinaEQuebradica + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MolhoTobascoPepper + + + + + + + + + + + + + + + + + CoberturaDeTomate + + + + + + + + + + + + + + + + + PizzaAberta + An unclosed Pizza cannot be inferred to be either a VegetarianPizza or a NonVegetarianPizza, because it might have other toppings. + + + + + + + + + + + + + + + + + ValorDaParticao + A ValuePartition is a pattern that describes a restricted set of classes from which a property can be associated. The parent class is used in restrictions, and the covering axiom means that only members of the subclasses may be used as values. The possible subclasses cannot be extended without updating the ValuePartition class. + + + + + + + + CoberturaDeVegetais + + + + + + + + + + + PizzaVegetariana + Any pizza that does not have fish topping and does not have meat topping is a VegetarianPizza. Members of this class do not need to have any toppings at all. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Any pizza that only has vegetarian toppings or no toppings is a VegetarianPizzaEquiv1. Should be inferred to be equivalent to VegetarianPizzaEquiv2. Not equivalent to VegetarianPizza because PizzaTopping is not covering + PizzaVegetarianaEquivalente1 + + + + + + + + + + + + + + + + + + + An alternative to VegetarianPizzaEquiv1 that does not require a definition of VegetarianTopping. Perhaps more difficult to maintain. Not equivalent to VegetarianPizza + PizzaVegetarianaEquivalente2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An example of a covering axiom. VegetarianTopping is equivalent to the union of all toppings in the given axiom. VegetarianToppings can only be Cheese or Vegetable or....etc. + CoberturaVegetariana + + + + + + + + + + + + + + + + + + + + + + + + + Veneziana + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NB Transitive - the ingredients of ingredients are ingredients of the whole + + + + + + + + + + + + + + + + + + A property created to be used with the ValuePartition - Spiciness. + + + + + + + + + + + + Note that hasTopping is inverse functional because isToppingOf is functional + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The inverse property tree to hasIngredient - all subproperties and attributes of the properties should reflect those under hasIngredient. + + + + + + + + + + + + + + + + + + Any given instance of topping should only be added to a single pizza (no cheap half-measures on our pizzas) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/WebIDL/AnimationEvent.webidl b/samples/WebIDL/AnimationEvent.webidl index e48ed571..5dbc2752 100644 --- a/samples/WebIDL/AnimationEvent.webidl +++ b/samples/WebIDL/AnimationEvent.webidl @@ -1,4 +1,4 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: linguist-disable-strategy-modeline-IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/samples/WebIDL/Fetch.webidl b/samples/WebIDL/Fetch.webidl index fb022126..87a4e957 100644 --- a/samples/WebIDL/Fetch.webidl +++ b/samples/WebIDL/Fetch.webidl @@ -1,4 +1,4 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: linguist-disable-strategy-modeline-IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/samples/X10/ArraySum.x10 b/samples/X10/ArraySum.x10 new file mode 100644 index 00000000..389d0e87 --- /dev/null +++ b/samples/X10/ArraySum.x10 @@ -0,0 +1,72 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * A simple illustration of loop parallelization within a single place. + */ +public class ArraySum { + + var sum:Long; + val data:Rail[Long]; + + public def this(n:Long) { + // Create a Rail with n elements (0..(n-1)), all initialized to 1. + data = new Rail[Long](n, 1); + sum = 0; + } + + def sum(a:Rail[Long], start:Long, last:Long) { + var mySum: Long = 0; + for (i in start..(last-1)) { + mySum += a(i); + } + return mySum; + } + + def sum(numThreads:Long) { + val mySize = data.size/numThreads; + finish for (p in 0..(numThreads-1)) async { + val mySum = sum(data, p*mySize, (p+1)*mySize); + // Multiple activities will simultaneously update + // this location -- so use an atomic operation. + atomic sum += mySum; + } + } + + public static def main(args:Rail[String]) { + var size:Long = 5*1000*1000; + if (args.size >=1) + size = Long.parse(args(0)); + + Console.OUT.println("Initializing."); + val a = new ArraySum(size); + val P = [1,2,4]; + + //warmup loop + Console.OUT.println("Warming up."); + for (numThreads in P) + a.sum(numThreads); + + for (numThreads in P) { + Console.OUT.println("Starting with " + numThreads + " threads."); + a.sum=0; + var time: long = - System.nanoTime(); + a.sum(numThreads); + time += System.nanoTime(); + Console.OUT.println("For p=" + numThreads + + " result: " + a.sum + + ((size==a.sum)? " ok" : " bad") + + " (time=" + (time/(1000*1000)) + " ms)"); + } + } +} diff --git a/samples/X10/Cancellation.x10 b/samples/X10/Cancellation.x10 new file mode 100644 index 00000000..1e13bea1 --- /dev/null +++ b/samples/X10/Cancellation.x10 @@ -0,0 +1,50 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.xrx.Runtime; + +/** + * Demonstrate how to instantiate the X10 runtime as an executor service + * submit jobs to the runtime, wait jobs to complete and cancel all jobs + * + * Compile with: x10c -O -EXECUTOR_MODE=true Cancellation.x10 + * Run with: X10_CANCELLABLE=true X10_NPLACES=4 x10 -DX10RT_IMPL=JavaSockets Cancellation + */ +class Cancellation { + static def job(id:Long, iterations:Long) = ()=>{ + at (Place.places().next(here)) async { + for (i in 1..iterations) { + finish for (p in Place.places()) { + at (p) async Console.OUT.println(here+" says hello (job " + id + ", iteration " + i + ")"); + } + Console.ERR.println(); + System.sleep(200); + } + } + }; + + public static def main(args:Rail[String]):void { + val w1 = Runtime.submit(job(1, 5)); + w1.await(); Console.ERR.println("Job 1 completed\n"); + val w2 = Runtime.submit(job(2, 1000)); + System.threadSleep(1000); + val c1 = Runtime.cancelAll(); + try { w2.await(); } catch (e:Exception) { Console.ERR.println("Job 2 aborted with exception " + e +"\n"); } + c1.await(); // waiting for cancellation to be processed + System.threadSleep(1000); + Runtime.submit(job(3, 1000)); + Runtime.submit(job(4, 1000)); + System.threadSleep(1000); + val c2 = Runtime.cancelAll(); + c2.await(); + Console.ERR.println("Goodbye\n"); + } +} diff --git a/samples/X10/Fibonacci.x10 b/samples/X10/Fibonacci.x10 new file mode 100644 index 00000000..fc1466f1 --- /dev/null +++ b/samples/X10/Fibonacci.x10 @@ -0,0 +1,52 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * This is a small program to illustrate the use of + * async and finish in a + * prototypical recursive divide-and-conquer algorithm. + * It is obviously not intended to show a efficient way to + * compute Fibonacci numbers in X10.

+ * + * The heart of the example is the run method, + * which directly embodies the recursive definition of + *

+ *   fib(n) = fib(n-1)+fib(n-2);
+ * 
+ * by using an async to compute fib(n-1) while + * the current activity computes fib(n-2). A finish + * is used to ensure that both computations are complete before + * their results are added together to compute fib(n) + */ +public class Fibonacci { + + public static def fib(n:long) { + if (n<=2) return 1; + + val f1:long; + val f2:long; + finish { + async { f1 = fib(n-1); } + f2 = fib(n-2); + } + return f1 + f2; + } + + public static def main(args:Rail[String]) { + val n = (args.size > 0) ? Long.parse(args(0)) : 10; + Console.OUT.println("Computing fib("+n+")"); + val f = fib(n); + Console.OUT.println("fib("+n+") = "+f); + } +} + diff --git a/samples/X10/HeatTransfer_v0.x10 b/samples/X10/HeatTransfer_v0.x10 new file mode 100644 index 00000000..5546fae8 --- /dev/null +++ b/samples/X10/HeatTransfer_v0.x10 @@ -0,0 +1,86 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.*; +import x10.compiler.Foreach; +import x10.compiler.Inline; + + +/** + * This is a sample program illustrating how to use + * X10's array classes. It also illustrates the use + * of foreach to acheive intra-place parallelism. + * + * The program solves a set of 2D partial differential + * equations by iteratively applying a 5-point stencil + * operation until convergence is reached. + */ +public class HeatTransfer_v0 { + static val EPSILON = 1.0e-5; + + val N:Long; + val A:Array_2[Double]{self!=null}; + val Tmp:Array_2[Double]{self!=null}; + + public def this(size:Long) { + N = size; + A = new Array_2[Double](N+2, N+2); // zero-initialized N+2 * N+2 array of doubles + for (j in 1..N) A(0, j) = 1; // set one border row to 1 + Tmp = new Array_2[Double](A); + } + + final @Inline def stencil(x:Long, y:Long):Double { + return (A(x-1,y) + A(x+1,y) + A(x,y-1) + A(x,y+1)) / 4; + } + + def run() { + val is = new DenseIterationSpace_2(1,1,N,N); + var delta:Double; + do { + // Compute new values, storing in tmp + delta = Foreach.blockReduce(is, + (i:Long, j:Long)=>{ + Tmp(i,j) = stencil(i,j); + // Reduce max element-wise delta (A now holds previous values) + return Math.abs(Tmp(i,j) - A(i,j)); + }, + (a:Double, b:Double)=>Math.max(a,b), 0.0 + ); + + // swap backing data of A and Tmp + Array.swap(A, Tmp); + } while (delta > EPSILON); + } + + def prettyPrintResult() { + for (i in 1..N) { + for (j in 1..N) { + Console.OUT.printf("%1.4f ",A(i,j)); + } + Console.OUT.println(); + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Long.parse(args(0)) : 8; + Console.OUT.println("HeatTransfer example with N="+n+" and epsilon="+EPSILON); + Console.OUT.println("Initializing data structures"); + val ht = new HeatTransfer_v0(n); + Console.OUT.println("Beginning computation..."); + val start = System.nanoTime(); + ht.run(); + val stop = System.nanoTime(); + Console.OUT.printf("...completed in %1.3f seconds.\n", ((stop-start) as double)/1e9); + if (n <= 10) { + ht.prettyPrintResult(); + } + } +} diff --git a/samples/X10/HeatTransfer_v1.x10 b/samples/X10/HeatTransfer_v1.x10 new file mode 100644 index 00000000..feeeebe6 --- /dev/null +++ b/samples/X10/HeatTransfer_v1.x10 @@ -0,0 +1,114 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.*; +import x10.compiler.Foreach; +import x10.util.Team; + +/** + * This is a sample program illustrating how to use + * X10's distributed array classes. It also illustrates the use + * of foreach to achieve intra-place parallelism and the mixture + * of APGAS finish/async/at with Team collective operations. + * + * This version of the program uses a vanilla DistArray without + * ghost regions. As a result, the stencil function does + * inefficient fine-grained neighbor communication to get individual values. + * Compare this to HeatTransfer_v2 which utilizes ghost regions and + * bulk ghost-region exchange functions. + * + * The program solves a set of 2D partial differential + * equations by iteratively applying a 5-point stencil + * operation until convergence is reached. + */ +public class HeatTransfer_v1 { + static val EPSILON = 1.0e-5; + + val N:Long; + val A:DistArray_BlockBlock_2[Double]{self!=null}; + val Tmp:DistArray_BlockBlock_2[Double]{self!=null}; + + public def this(size:Long) { + N = size; + val init = (i:Long, j:Long)=>i==0 ? 1.0 : 0.0; + A = new DistArray_BlockBlock_2[Double](N+2, N+2, init); + Tmp = new DistArray_BlockBlock_2[Double](N+2, N+2, init); + } + + final def stencil(x:Long, y:Long):Double { + val cls = (dx:Long, dy:Long)=>{ + val p = A.place(x+dx, y+dy); + p == here ? A(x+dx,y+dy) : at (p) A(x+dx,y+dy) + }; + val tmp = cls(-1,0) + cls(1,0) + cls(0,-1) + cls(0,1); + return tmp / 4; + } + + def run() { + val myTeam = new Team(A.placeGroup()); + finish for (p in A.placeGroup()) at (p) async { + // Compute the subset of the local indices on which + // we want to apply the stencil (the interior points of the N+2 x N+2 grid) + val li = A.localIndices(); + val interior = new DenseIterationSpace_2(li.min(0) == 0 ? 1 : li.min(0), + li.min(1) == 0 ? 1 : li.min(1), + li.max(0) == N+1 ? N : li.max(0), + li.max(1) == N+1 ? N : li.max(1)); + var delta:Double; + do { + // Compute new values, storing in tmp + val myDelta = Foreach.blockReduce(interior, + (i:Long, j:Long)=>{ + Tmp(i,j) = stencil(i,j); + // Reduce max element-wise delta (A now holds previous values) + return Math.abs(Tmp(i,j) - A(i,j)); + }, + (a:Double, b:Double)=>Math.max(a,b), 0.0 + ); + + myTeam.barrier(); + + // Unlike Array, DistArray doesn't provide an optimized swap. + // So, until it does, we have to copy the data elements. + Foreach.block(interior, (i:Long, j:Long)=>{ + A(i,j) = Tmp(i,j); + }); + + delta = myTeam.allreduce(myDelta, Team.MAX); + } while (delta > EPSILON); + } + } + + def prettyPrintResult() { + for (i in 1..N) { + for (j in 1..N) { + val x = at (A.place(i,j)) A(i,j); + Console.OUT.printf("%1.4f ", x); + } + Console.OUT.println(); + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Long.parse(args(0)) : 8; + Console.OUT.println("HeatTransfer example with N="+n+" and epsilon="+EPSILON); + Console.OUT.println("Initializing data structures"); + val ht = new HeatTransfer_v1(n); + Console.OUT.println("Beginning computation..."); + val start = System.nanoTime(); + ht.run(); + val stop = System.nanoTime(); + Console.OUT.printf("...completed in %1.3f seconds.\n", ((stop-start) as double)/1e9); + if (n <= 10) { + ht.prettyPrintResult(); + } + } +} diff --git a/samples/X10/HelloWholeWorld.x10 b/samples/X10/HelloWholeWorld.x10 new file mode 100644 index 00000000..4017ef9d --- /dev/null +++ b/samples/X10/HelloWholeWorld.x10 @@ -0,0 +1,44 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * The classic hello world program, with a twist - prints a message + * from the command line at every Place. + * The messages from each Place may appear in any order, but the + * finish ensures that the last message printed will be "Goodbye" + *
+ * Typical output:
+ * [dgrove@linchen samples]$ ./HelloWholeWorld 'best wishes'
+ * Place(1) says hello and best wishes
+ * Place(2) says hello and best wishes
+ * Place(3) says hello and best wishes
+ * Place(0) says hello and best wishes
+ * Goodbye 
+ * [dgrove@linchen samples]$
+ * 
+ */ +class HelloWholeWorld { + public static def main(args:Rail[String]):void { + if (args.size < 1) { + Console.OUT.println("Usage: HelloWholeWorld message"); + return; + } + + finish for (p in Place.places()) { + at (p) async Console.OUT.println(here+" says hello and "+args(0)); + } + Console.OUT.println("Goodbye"); + } +} + + diff --git a/samples/X10/HelloWorld.x10 b/samples/X10/HelloWorld.x10 new file mode 100644 index 00000000..06743b4c --- /dev/null +++ b/samples/X10/HelloWorld.x10 @@ -0,0 +1,23 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * The classic hello world program, shows how to output to the console. + */ +class HelloWorld { + public static def main(Rail[String]) { + Console.OUT.println("Hello World!" ); + } +} + + diff --git a/samples/X10/Histogram.x10 b/samples/X10/Histogram.x10 new file mode 100644 index 00000000..bf6ad2b1 --- /dev/null +++ b/samples/X10/Histogram.x10 @@ -0,0 +1,45 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +public class Histogram { + public static def compute(data:Rail[Int], numBins:Int) { + val bins = new Rail[Int](numBins); + finish for (i in data.range) async { + val b = data(i) % numBins; + atomic bins(b)++; + } + return bins; + } + + public static def run(N:Int, S:Int):Boolean { + val a = new Rail[Int](N, (i:long)=> i as int); + val b = compute(a, S); + val v = b(0); + var ok:Boolean = true; + for (x in b.range) ok &= (b(x)==v); + return ok; + } + + public static def main(args:Rail[String]) { + if (args.size != 2L) { + Console.OUT.println("Usage: Histogram SizeOfArray NumberOfBins"); + return; + } + val N = Int.parse(args(0)); + val S = Int.parse(args(1)); + val ok = run(N,S); + if (ok) { + Console.OUT.println("Test ok."); + } else { + Console.OUT.println("Test failed."); + } + } +} diff --git a/samples/X10/Integrate.x10 b/samples/X10/Integrate.x10 new file mode 100644 index 00000000..accf31b9 --- /dev/null +++ b/samples/X10/Integrate.x10 @@ -0,0 +1,55 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +/** + * This is a slightly more realistic example of the + * basic computational pattern of using async/finish + * to express recursive divide-and-conquer algorithms. + * The program does integration via Guassian Quadrature. + *

+ * It also can serve as an example of using a closure. + */ +public class Integrate { + static val epsilon = 1.0e-9; + + val fun:(double)=>double; + + public def this(f:(double)=>double) { fun = f; } + + public def computeArea(left:double, right:double) { + return recEval(left, fun(left), right, fun(right), 0); + } + + private def recEval(l:double, fl:double, r:double, fr:double, a:double) { + val h = (r - l) / 2; + val hh = h / 2; + val c = l + h; + val fc = fun(c); + val al = (fl + fc) * hh; + val ar = (fr + fc) * hh; + val alr = al + ar; + if (Math.abs(alr - a) < epsilon) return alr; + val expr1:double; + val expr2:double; + finish { + async { expr1 = recEval(c, fc, r, fr, ar); }; + expr2 = recEval(l, fl, c, fc, al); + } + return expr1 + expr2; + } + + public static def main(args:Rail[String]) { + val obj = new Integrate((x:double)=>(x*x + 1.0) * x); + val xMax = args.size > 0 ? Long.parse(args(0)) : 10; + val area = obj.computeArea(0, xMax); + Console.OUT.println("The area of (x*x +1) * x from 0 to "+xMax+" is "+area); + } +} diff --git a/samples/X10/KMeans.x10 b/samples/X10/KMeans.x10 new file mode 100644 index 00000000..475732b7 --- /dev/null +++ b/samples/X10/KMeans.x10 @@ -0,0 +1,151 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; +import x10.util.Random; + +/** + * A KMeans object o can compute K means of a given set of + * points of dimension o.myDim. + *

+ * This class implements a sequential program, that is readily parallelizable. + * + * For a scalable, high-performance version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeans(myDim:Long) { + + static val DIM=2; + static val K=4; + static val POINTS=2000; + static val ITERATIONS=50; + static val EPS=0.01F; + + static type ValVector(k:Long) = Rail[Float]{self.size==k}; + static type ValVector = ValVector(DIM); + + static type Vector(k:Long) = Rail[Float]{self.size==k}; + static type Vector = Vector(DIM); + + static type SumVector(d:Long) = V{self.dim==d}; + static type SumVector = SumVector(DIM); + + /** + * V represents the sum of 'count' number of vectors of dimension 'dim'. + */ + static class V(dim:Long) implements (Long)=>Float { + var vec: Vector(dim); + var count:Int; + def this(dim:Long, init:(Long)=>Float): SumVector(dim) { + property(dim); + vec = new Rail[Float](this.dim, init); + count = 0n; + } + public operator this(i:Long) = vec(i); + def makeZero() { + for (i in 0..(dim-1)) + vec(i) =0.0F; + count=0n; + } + def addIn(a:ValVector(dim)) { + for (i in 0..(dim-1)) + vec(i) += a(i); + count++; + } + def div(f:Int) { + for (i in 0..(dim-1)) + vec(i) /= f; + } + def dist(a:ValVector(dim)):Float { + var dist:Float=0.0F; + for (i in 0..(dim-1)) { + val tmp = vec(i)-a(i); + dist += tmp*tmp; + } + return dist; + } + def dist(a:SumVector(dim)):Float { + var dist:Float=0.0F; + for (i in 0..(dim-1)) { + val tmp = vec(i)-a(i); + dist += tmp*tmp; + } + return dist; + } + def print() { + Console.OUT.println(); + for (i in 0..(dim-1)) { + Console.OUT.print((i>0? " " : "") + vec(i)); + } + } + def normalize() { div(count);} + def count() = count; + } + + + def this(myDim:Long):KMeans{self.myDim==myDim} { + property(myDim); + } + static type KMeansData(myK:Long, myDim:Long)= Rail[SumVector(myDim)]{self.size==myK}; + + /** + * Compute myK means for the given set of points of dimension myDim. + */ + def computeMeans(myK:Long, points:Rail[ValVector(myDim)]):KMeansData(myK, myDim) { + var redCluster : KMeansData(myK, myDim) = + new Rail[SumVector(myDim)](myK, (i:long)=> new V(myDim, (j:long)=>points(i)(j))); + var blackCluster: KMeansData(myK, myDim) = + new Rail[SumVector(myDim)](myK, (i:long)=> new V(myDim, (j:long)=>0.0F)); + for (i in 1..ITERATIONS) { + val tmp = redCluster; + redCluster = blackCluster; + blackCluster=tmp; + for (p in 0..(POINTS-1)) { + var closest:Long = -1; + var closestDist:Float = Float.MAX_VALUE; + val point = points(p); + for (k in 0..(myK-1)) { // compute closest mean in cluster. + val dist = blackCluster(k).dist(point); + if (dist < closestDist) { + closestDist = dist; + closest = k; + } + } + redCluster(closest).addIn(point); + } + for (k in 0..(myK-1)) + redCluster(k).normalize(); + + var b:Boolean = true; + for (k in 0..(myK-1)) { + if (redCluster(k).dist(blackCluster(k)) > EPS) { + b=false; + break; + } + } + if (b) + break; + for (k in 0..(myK-1)) + blackCluster(k).makeZero(); + } + return redCluster; + } + + public static def main (Rail[String]) { + val rnd = new Random(0); + val points = new Rail[ValVector](POINTS, + (long)=>new Rail[Float](DIM, (long)=>rnd.nextFloat())); + val result = new KMeans(DIM).computeMeans(K, points); + for (k in 0..(K-1)) result(k).print(); + } +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/KMeansDist.x10 b/samples/X10/KMeansDist.x10 new file mode 100644 index 00000000..069cc374 --- /dev/null +++ b/samples/X10/KMeansDist.x10 @@ -0,0 +1,147 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.*; +import x10.io.Console; +import x10.util.Random; + +/** + * A low performance formulation of distributed KMeans using fine-grained asyncs. + * + * For a highly optimized and scalable, version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeansDist { + + static val DIM=2; + static val CLUSTERS=4; + static val POINTS=2000; + static val ITERATIONS=50; + + public static def main (Rail[String]) { + val world = Place.places(); + val local_curr_clusters = + PlaceLocalHandle.make[Array_2[Float]](world, () => new Array_2[Float](CLUSTERS, DIM)); + val local_new_clusters = + PlaceLocalHandle.make[Array_2[Float]](world, () => new Array_2[Float](CLUSTERS, DIM)); + val local_cluster_counts = + PlaceLocalHandle.make[Rail[Int]](world, ()=> new Rail[Int](CLUSTERS)); + + val rnd = PlaceLocalHandle.make[Random](world, () => new Random(0)); + val points = new DistArray_Block_2[Float](POINTS, DIM, world, (Long,Long)=>rnd().nextFloat()); + + val central_clusters = new Array_2[Float](CLUSTERS, DIM, (i:Long, j:Long) => { + at (points.place(i,j)) points(i,j) + }); + + val old_central_clusters = new Array_2[Float](CLUSTERS, DIM); + + val central_cluster_counts = new Rail[Int](CLUSTERS); + + for (iter in 1..ITERATIONS) { + + Console.OUT.println("Iteration: "+iter); + + finish { + // reset state + for (d in world) at (d) async { + for ([i,j] in central_clusters.indices()) { + local_curr_clusters()(i, j) = central_clusters(i, j); + local_new_clusters()(i, j) = 0f; + } + + local_cluster_counts().clear(); + } + } + + finish { + // compute new clusters and counters + for (p in 0..(POINTS-1)) { + at (points.place(p,0)) async { + var closest:Long = -1; + var closest_dist:Float = Float.MAX_VALUE; + for (k in 0..(CLUSTERS-1)) { + var dist : Float = 0; + for (d in 0..(DIM-1)) { + val tmp = points(p,d) - local_curr_clusters()(k, d); + dist += tmp * tmp; + } + if (dist < closest_dist) { + closest_dist = dist; + closest = k; + } + } + atomic { + for (d in 0..(DIM-1)) { + local_new_clusters()(closest,d) += points(p,d); + } + local_cluster_counts()(closest)++; + } + } + } + } + + for ([i,j] in old_central_clusters.indices()) { + old_central_clusters(i, j) = central_clusters(i, j); + central_clusters(i, j) = 0f; + } + + central_cluster_counts.clear(); + + finish { + val central_clusters_gr = GlobalRef(central_clusters); + val central_cluster_counts_gr = GlobalRef(central_cluster_counts); + val there = here; + for (d in world) at (d) async { + // access PlaceLocalHandles 'here' and then data will be captured by at and transfered to 'there' for accumulation + val tmp_new_clusters = local_new_clusters(); + val tmp_cluster_counts = local_cluster_counts(); + at (there) atomic { + for ([i,j] in tmp_new_clusters.indices()) { + central_clusters_gr()(i,j) += tmp_new_clusters(i,j); + } + for (j in 0..(CLUSTERS-1)) { + central_cluster_counts_gr()(j) += tmp_cluster_counts(j); + } + } + } + } + + for (k in 0..(CLUSTERS-1)) { + for (d in 0..(DIM-1)) { + central_clusters(k, d) /= central_cluster_counts(k); + } + } + + // TEST FOR CONVERGENCE + var b:Boolean = true; + for ([i,j] in old_central_clusters.indices()) { + if (Math.abs(old_central_clusters(i, j)-central_clusters(i, j))>0.0001) { + b = false; + break; + } + } + if (b) break; + + } + + for (d in 0..(DIM-1)) { + for (k in 0..(CLUSTERS-1)) { + if (k>0) + Console.OUT.print(" "); + Console.OUT.print(central_clusters(k,d)); + } + Console.OUT.println(); + } + } +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/KMeansDistPlh.x10 b/samples/X10/KMeansDistPlh.x10 new file mode 100644 index 00000000..ca16aa59 --- /dev/null +++ b/samples/X10/KMeansDistPlh.x10 @@ -0,0 +1,144 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2015. + */ + +import x10.array.Array; +import x10.array.Array_2; +import x10.compiler.Foreach; +import x10.util.Random; + +/** + * A better formulation of distributed KMeans using coarse-grained asyncs to + * implement an allreduce pattern for cluster centers and counts. + * + * For a highly optimized and scalable, version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeansDistPlh { + + static val DIM=2; + static val CLUSTERS=4; + + static class ClusterState { + val clusters = new Array_2[Float](CLUSTERS, DIM); + val clusterCounts = new Rail[Int](CLUSTERS); + } + + public static def main(args:Rail[String]) { + val numPoints = args.size > 0 ? Long.parse(args(0)) : 2000; + val iterations = args.size > 1 ? Long.parse(args(1)) : 50; + val world = Place.places(); + + val clusterStatePlh = PlaceLocalHandle.make[ClusterState](world, () => new ClusterState()); + val currentClustersPlh = PlaceLocalHandle.make[Array_2[Float]](world, () => new Array_2[Float](CLUSTERS, DIM)); + val pointsPlh = PlaceLocalHandle.make[Array_2[Float]](world, () => { + val rand = new Random(here.id); + return new Array_2[Float](numPoints/world.size(), DIM, (Long,Long)=>rand.nextFloat()); + }); + + val centralCurrentClusters = new Array_2[Float](CLUSTERS, DIM); + val centralNewClusters = new Array_2[Float](CLUSTERS, DIM); + val centralClusterCounts = new Rail[Int](CLUSTERS); + + // arbitrarily initialize central clusters to first few points + for ([i,j] in centralCurrentClusters.indices()) { + centralCurrentClusters(i,j) = pointsPlh()(i,j); + } + + for (iter in 1..iterations) { + Console.OUT.println("Iteration: "+iter); + + finish { + for (place in world) async { + val placeClusters = at(place) { + val currentClusters = currentClustersPlh(); + Array.copy(centralCurrentClusters, currentClusters); + + val clusterState = clusterStatePlh(); + val newClusters = clusterState.clusters; + newClusters.clear(); + val clusterCounts = clusterState.clusterCounts; + clusterCounts.clear(); + + // compute new clusters and counters + val points = pointsPlh(); + + for (p in 0..(points.numElems_1-1)) { + var closest:Long = -1; + var closestDist:Float = Float.MAX_VALUE; + for (k in 0..(CLUSTERS-1)) { + var dist : Float = 0; + for (d in 0..(DIM-1)) { + val tmp = points(p,d) - currentClusters(k, d); + dist += tmp * tmp; + } + if (dist < closestDist) { + closestDist = dist; + closest = k; + } + } + + atomic { + for (d in 0..(DIM-1)) { + newClusters(closest,d) += points(p,d); + } + clusterCounts(closest)++; + } + } + clusterState + }; + + // combine place clusters to central + atomic { + for ([i,j] in centralNewClusters.indices()) { + centralNewClusters(i,j) += placeClusters.clusters(i,j); + } + for (j in 0..(CLUSTERS-1)) { + centralClusterCounts(j) += placeClusters.clusterCounts(j); + } + } + } + } + + for (k in 0..(CLUSTERS-1)) { + for (d in 0..(DIM-1)) { + centralNewClusters(k, d) /= centralClusterCounts(k); + } + } + + // TEST FOR CONVERGENCE + var b:Boolean = true; + for ([i,j] in centralCurrentClusters.indices()) { + if (Math.abs(centralCurrentClusters(i, j)-centralNewClusters(i, j)) > 0.0001) { + b = false; + break; + } + } + + Array.copy(centralNewClusters, centralCurrentClusters); + + if (b) break; + + centralNewClusters.clear(); + centralClusterCounts.clear(); + } + + for (d in 0..(DIM-1)) { + for (k in 0..(CLUSTERS-1)) { + if (k > 0) + Console.OUT.print(" "); + Console.OUT.print(centralCurrentClusters(k,d)); + } + Console.OUT.println(); + } + } +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/KMeansSPMD.x10 b/samples/X10/KMeansSPMD.x10 new file mode 100644 index 00000000..f6530f24 --- /dev/null +++ b/samples/X10/KMeansSPMD.x10 @@ -0,0 +1,192 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; +import x10.io.File; +import x10.io.Marshal; +import x10.io.IOException; +import x10.util.OptionsParser; +import x10.util.Option; +import x10.util.Team; + +/** + * An SPMD formulation of KMeans. + * + * For a highly optimized and scalable version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeansSPMD { + + public static def printClusters (clusters:Rail[Float], dims:long) { + for (d in 0..(dims-1)) { + for (k in 0..(clusters.size/dims-1)) { + if (k>0) + Console.OUT.print(" "); + Console.OUT.print(clusters(k*dims+d).toString()); + } + Console.OUT.println(); + } + } + + public static def main (args:Rail[String]) {here == Place.FIRST_PLACE } { + + val opts = new OptionsParser(args, [ + Option("q","quiet","just print time taken"), + Option("v","verbose","print out each iteration"), + Option("h","help","this information") + ], [ + Option("p","points","location of data file"), + Option("i","iterations","quit after this many iterations"), + Option("c","clusters","number of clusters to find"), + Option("d","dim","number of dimensions"), + Option("s","slices","factor by which to oversubscribe computational resources"), + Option("n","num","quantity of points") + ]); + if (opts.filteredArgs().size!=0L) { + Console.ERR.println("Unexpected arguments: "+opts.filteredArgs()); + Console.ERR.println("Use -h or --help."); + System.setExitCode(1n); + return; + } + if (opts("-h")) { + Console.OUT.println(opts.usage("")); + return; + } + + val fname = opts("-p", "points.dat"); + val num_clusters=opts("-c",4); + val num_slices=opts("-s",1); + val num_global_points=opts("-n", 2000); + val iterations=opts("-i",50); + val dim=opts("-d", 4); + val verbose = opts("-v"); + val quiet = opts("-q"); + + if (!quiet) + Console.OUT.println("points: "+num_global_points+" clusters: "+num_clusters+" dim: "+dim); + + // file is dimension-major + val file = new File(fname); + val fr = file.openRead(); + val init_points = (long) => Float.fromIntBits(Marshal.INT.read(fr).reverseBytes()); + val num_file_points = (file.size() / dim / 4) as Int; + val file_points = new Rail[Float](num_file_points*dim, init_points); + + val team = Team.WORLD; + + val num_slice_points = num_global_points / num_slices / Place.numPlaces(); + + finish { + for (h in Place.places()) at(h) async { + var compute_time:Long = 0; + var comm_time:Long = 0; + var barrier_time:Long = 0; + + val host_clusters = new Rail[Float](num_clusters*dim, (i:long)=>file_points(i)); + val host_cluster_counts = new Rail[Int](num_clusters); + + for (slice in 0..(num_slices-1)) { + // carve out local portion of points (point-major) + val offset = (slice*Place.numPlaces() + here.id) * num_slice_points; + if (verbose) + Console.OUT.println(h.toString()+" gets "+offset+" len "+num_slice_points); + val init = (i:long) => { + val p=i%num_slice_points; + val d=i/num_slice_points; + return file_points(offset+p+d*num_file_points); + }; + + // these are pretty big so allocate up front + val host_points = new Rail[Float](num_slice_points*dim, init); + val host_nearest = new Rail[Float](num_slice_points); + + val start_time = System.currentTimeMillis(); + + barrier_time -= System.nanoTime(); + team.barrier(); + barrier_time += System.nanoTime(); + + main_loop: for (iter in 0..(iterations-1)) { + + //if (offset==0) Console.OUT.println("Iteration: "+iter); + + val old_clusters = new Rail[Float](host_clusters.size); + Rail.copy(host_clusters, 0L, old_clusters, 0L, host_clusters.size); + + host_clusters.clear(); + host_cluster_counts.clear(); + + compute_time -= System.nanoTime(); + for (p in 0..(num_slice_points-1)) { + var closest:Long = -1; + var closest_dist:Float = Float.MAX_VALUE; + for (k in 0..(num_clusters-1)) { + var dist : Float = 0; + for (d in 0..(dim-1)) { + val tmp = host_points(p+d*num_slice_points) - old_clusters(k*dim+d); + dist += tmp * tmp; + } + if (dist < closest_dist) { + closest_dist = dist; + closest = k; + } + } + for (d in 0..(dim-1)) { + host_clusters(closest*dim+d) += host_points(p+d*num_slice_points); + } + host_cluster_counts(closest)++; + } + compute_time += System.nanoTime(); + + comm_time -= System.nanoTime(); + team.allreduce(host_clusters, 0L, host_clusters, 0L, host_clusters.size, Team.ADD); + team.allreduce(host_cluster_counts, 0L, host_cluster_counts, 0L, host_cluster_counts.size, Team.ADD); + comm_time += System.nanoTime(); + + for (k in 0..(num_clusters-1)) { + for (d in 0..(dim-1)) host_clusters(k*dim+d) /= host_cluster_counts(k); + } + + if (offset==0 && verbose) { + Console.OUT.println("Iteration: "+iter); + printClusters(host_clusters,dim); + } + + // TEST FOR CONVERGENCE + for (j in 0..(num_clusters*dim-1)) { + if (true/*||Math.abs(clusters_old(j)-host_clusters(j))>0.0001*/) continue main_loop; + } + + break; + + } // main_loop + + } // slice + + Console.OUT.printf("%d: computation %.3f s communication %.3f s (barrier %.3f s)\n", + here.id, compute_time/1E9, comm_time/1E9, barrier_time/1E9); + + team.barrier(); + + if (here.id == 0) { + Console.OUT.println("\nFinal results:"); + printClusters(host_clusters,dim); + } + + } // async + + } // finish + + } + +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/MontyPi.x10 b/samples/X10/MontyPi.x10 new file mode 100644 index 00000000..951161ee --- /dev/null +++ b/samples/X10/MontyPi.x10 @@ -0,0 +1,42 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.DistArray_Unique; +import x10.io.Console; +import x10.util.Random; + +/** + * Calculation of an approximation to pi by using a Monte Carlo simulation + * (throwing darts into the unit square and determining the fraction that land + * in the unit circle). + */ +public class MontyPi { + public static def main(args:Rail[String]) { + if (args.size != 1L) { + Console.OUT.println("Usage: MontyPi "); + return; + } + val N = Long.parse(args(0)); + val initializer = () => { + val r = new Random(); + var result:Long = 0; + for(c in 1..N) { + val x = r.nextDouble(); + val y = r.nextDouble(); + if (x*x +y*y <= 1.0) result++; + } + result + }; + val result = new DistArray_Unique[Long](Place.places(), initializer); + val pi = (4.0*result.reduce((x:Long,y:Long) => x+y, 0) as Double)/(N*Place.numPlaces()); + Console.OUT.println("The value of pi is " + pi); + } +} diff --git a/samples/X10/NQueensDist.x10 b/samples/X10/NQueensDist.x10 new file mode 100644 index 00000000..1279d3ff --- /dev/null +++ b/samples/X10/NQueensDist.x10 @@ -0,0 +1,123 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + * (C) Copyright Australian National University 2011. + */ + +import x10.array.DistArray_Unique; + +/** + * A distributed version of NQueens. Runs over NUM_PLACES. + * Identical to NQueensPar, except that work is distributed + * over multiple places rather than shared between threads. + */ +public class NQueensDist { + public static val EXPECTED_SOLUTIONS = + [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512]; + + val N:Long; + val P:Long; + val results:DistArray_Unique[Long]; + val R:LongRange; + + def this(N:Long, P:Long) { + this.N=N; + this.P=P; + this.results = new DistArray_Unique[Long](); + this.R = 0..(N-1); + } + def start() { + new Board().distSearch(); + } + def run():Long { + finish start(); + val result = results.reduce(((x:Long,y:Long) => x+y),0); + return result; + } + + class Board { + val q: Rail[Long]; + /** The number of low-rank positions that are fixed in this board for the purposes of search. */ + var fixed:Long; + def this() { + q = new Rail[Long](N); + fixed = 0; + } + + /** + * @return true if it is safe to put a queen in file j + * on the next rank after the last fixed position. + */ + def safe(j:Long) { + for (k in 0..(fixed-1)) { + if (j == q(k) || Math.abs(fixed-k) == Math.abs(j-q(k))) + return false; + } + return true; + } + + /** Search all positions for the current board. */ + def search() { + for (k in R) searchOne(k); + } + + /** + * Modify the current board by adding a new queen + * in file k on rank fixed, + * and search for all safe positions with this prefix. + */ + def searchOne(k:Long) { + if (safe(k)) { + if (fixed==(N-1)) { + // all ranks safely filled + atomic NQueensDist.this.results(here.id)++; + } else { + q(fixed++) = k; + search(); + fixed--; + } + } + } + + /** + * Search this board, dividing the work between all places + * using a block distribution of the current free rank. + */ + def distSearch() { + val work = R.split(Place.numPlaces()); + finish for (p in Place.places()) { + val myPiece = work(p.id); + at (p) async { + // implicit copy of 'this' made across the at divide + for (k in myPiece) { + searchOne(k); + } + } + } + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Long.parse(args(0)) : 8; + Console.OUT.println("N=" + n); + //warmup + //finish new NQueensPar(12, 1).start(); + val P = Place.numPlaces(); + val nq = new NQueensDist(n,P); + var start:Long = -System.nanoTime(); + val answer = nq.run(); + val result = answer==EXPECTED_SOLUTIONS(n); + start += System.nanoTime(); + start /= 1000000; + Console.OUT.println("NQueensDist " + nq.N + "(P=" + P + + ") has " + answer + " solutions" + + (result? " (ok)." : " (wrong).") + + "time=" + start + "ms"); + } +} diff --git a/samples/X10/NQueensPar.x10 b/samples/X10/NQueensPar.x10 new file mode 100644 index 00000000..bb841e13 --- /dev/null +++ b/samples/X10/NQueensPar.x10 @@ -0,0 +1,117 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + * (C) Copyright Australian National University 2011. + */ + +/** + * Compute the number of solutions to the N queens problem. + */ +public class NQueensPar { + public static val EXPECTED_SOLUTIONS = + [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512]; + + val N:Int; + val P:Int; + var nSolutions:Int = 0n; + val R:IntRange; + + def this(N:Int, P:Int) { + this.N=N; + this.P=P; + this.R = 0n..(N-1n); + } + + def start() { + new Board().parSearch(); + } + + class Board { + val q: Rail[Int]; + /** The number of low-rank positions that are fixed in this board for the purposes of search. */ + var fixed:Int; + def this() { + q = new Rail[Int](N); + fixed = 0n; + } + + def this(b:Board) { + this.q = new Rail[Int](b.q); + this.fixed = b.fixed; + } + + /** + * @return true if it is safe to put a queen in file j + * on the next rank after the last fixed position. + */ + def safe(j:Int) { + for (k in 0n..(fixed-1n)) { + if (j == q(k) || Math.abs(fixed-k) == Math.abs(j-q(k))) + return false; + } + return true; + } + + /** Search all positions for the current board. */ + def search() { + for (k in R) searchOne(k); + } + + /** + * Modify the current board by adding a new queen + * in file k on rank fixed, + * and search for all safe positions with this prefix. + */ + def searchOne(k:Int) { + if (safe(k)) { + if (fixed==(N-1n)) { + // all ranks safely filled + atomic NQueensPar.this.nSolutions++; + } else { + q(fixed++) = k; + search(); + fixed--; + } + } + } + + /** + * Search this board, dividing the work between threads + * using a block distribution of the current free rank. + */ + def parSearch() { + for (work in R.split(P)) async { + val board = new Board(this); + for (w in work) { + board.searchOne(w); + } + } + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Int.parse(args(0)) : 8n; + Console.OUT.println("N=" + n); + //warmup + //finish new NQueensPar(12, 1).start(); + val ps = [1n,2n,4n]; + for (numTasks in ps) { + Console.OUT.println("starting " + numTasks + " tasks"); + val nq = new NQueensPar(n,numTasks); + var start:Long = -System.nanoTime(); + finish nq.start(); + val result = (nq.nSolutions as Long)==EXPECTED_SOLUTIONS(nq.N); + start += System.nanoTime(); + start /= 1000000; + Console.OUT.println("NQueensPar " + nq.N + "(P=" + numTasks + + ") has " + nq.nSolutions + " solutions" + + (result? " (ok)." : " (wrong).") + "time=" + start + "ms"); + } + } +} diff --git a/samples/X10/QSort.x10 b/samples/X10/QSort.x10 new file mode 100644 index 00000000..d96983b6 --- /dev/null +++ b/samples/X10/QSort.x10 @@ -0,0 +1,73 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + + +/** + * Straightforward quicksort implementation using + * naive partition-in-the-middle and not bothering with + * well-known optimizations such as using insertion sort + * once the partitions get small. This is only intended + * as a simple example of an array-based program that + * combines a recirsive divide and conquer algorithm + * with async and finish, not as a highly efficient + * sorting procedure.. + */ +public class QSort { + + private static def partition(data:Rail[int], left:long, right:long) { + var i:long = left; + var j:long = right; + var tmp:int; + var pivot:long = data((left + right) / 2); + + while (i <= j) { + while (data(i) < pivot) i++; + while (data(j) > pivot) j--; + if (i <= j) { + tmp = data(i); + data(i) = data(j); + data(j) = tmp; + i++; + j--; + } + } + + return i; + } + + public static def qsort(data:Rail[int], left:long, right:long) { + index:long = partition(data, left, right); + finish { + if (left < index - 1) + async qsort(data, left, index - 1); + + if (index < right) + qsort(data, index, right); + } + } + + public static def main(args:Rail[String]) { + val N = args.size>0 ? Long.parse(args(0)) : 100; + val r = new x10.util.Random(); + val data = new Rail[int](N, (long)=>r.nextInt(9999n)); + qsort(data, 0, N-1); + for (i in 0..(N-1)) { + Console.OUT.print(data(i)); + if (i%10 == 9) { + Console.OUT.println(); + } else { + Console.OUT.print(", "); + } + } + Console.OUT.println(); + } +} + diff --git a/samples/X10/StructSpheres.x10 b/samples/X10/StructSpheres.x10 new file mode 100644 index 00000000..6d833633 --- /dev/null +++ b/samples/X10/StructSpheres.x10 @@ -0,0 +1,123 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; +import x10.util.Random; + +/** + * This class represents a real-world problem in graphics engines -- + * determining which objects in a large sprawling world are close enough to the + * camera to be considered for rendering. + * + * It illustrates the usage of X10 structs to define new primitive types. + * In Native X10, structs are allocated within their containing object/stack frame + * and thus using structs instead of classes for Vector3 and WorldObject greatly + * improves the memory efficiency of the computation. + * + * @Author Dave Cunningham + * @Author Vijay Saraswat + */ +class StructSpheres { + static type Real = Float; + + static struct Vector3(x:Real, y:Real, z:Real) { + public def getX () = x; + public def getY () = y; + public def getZ () = z; + + public def add (other:Vector3) + = Vector3(this.x+other.x, this.y+other.y, this.z+other.z); + + public def neg () = Vector3(-this.x, -this.y, -this.z); + + public def sub (other:Vector3) = add(other.neg()); + + public def length () = Math.sqrtf(length2()); + + public def length2 () = x*x + y*y + z*z; + } + + + static struct WorldObject { + + def this (x:Real, y:Real, z:Real, r:Real) { + pos = Vector3(x,y,z); + renderingDistance = r; + } + + public def intersects (home:Vector3) + = home.sub(pos).length2() < renderingDistance*renderingDistance; + + protected val pos:Vector3; + protected val renderingDistance:Real; + } + + + public static def compute():boolean { + + val reps = 7500; + + // The following correspond to a modern out-door computer game: + val num_objects = 50000; + val world_size = 6000; + val obj_max_size = 400; + + val ran = new Random(0); + + // the array can go on the heap + // but the elements ought to be /*inlined*/ in the array + val spheres = + new Rail[WorldObject](num_objects, (i:long) => { + val x = (ran.nextDouble()*world_size) as Real; + val y = (ran.nextDouble()*world_size) as Real; + val z = (ran.nextDouble()*world_size) as Real; + val r = (ran.nextDouble()*obj_max_size) as Real; + return WorldObject(x,y,z,r); + }); + + val time_start = System.nanoTime(); + + var counter : Long = 0; + + // HOT LOOP BEGINS + for (c in 1..reps) { + + val x = (ran.nextDouble()*world_size) as Real; + val y = (ran.nextDouble()*world_size) as Real; + val z = (ran.nextDouble()*world_size) as Real; + + val pos = Vector3(x,y,z); + + for (i in spheres.range()) { + if (spheres(i).intersects(pos)) { + counter++; + } + } + } + // HOT LOOP ENDS + + val time_taken = System.nanoTime() - time_start; + Console.OUT.println("Total time: "+time_taken/1E9); + + val expected = 109702; + val ok = counter == expected; + if (!ok) { + Console.ERR.println("number of intersections: "+counter + +" (expected "+expected+")"); + } + return ok; + } + + public static def main (Rail[String]) { + compute(); + } + +} diff --git a/samples/XML/Application.xib b/samples/XML/Application.xib new file mode 100644 index 00000000..6c2e5f4d --- /dev/null +++ b/samples/XML/Application.xib @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/XML/Example.mdpolicy b/samples/XML/Example.mdpolicy new file mode 100644 index 00000000..6c9ff048 --- /dev/null +++ b/samples/XML/Example.mdpolicy @@ -0,0 +1,12 @@ + + + + 120 + False + True + + + None + FileFormatDefault + + \ No newline at end of file diff --git a/samples/XML/FXMLSample.fxml b/samples/XML/FXMLSample.fxml new file mode 100644 index 00000000..30b56b04 --- /dev/null +++ b/samples/XML/FXMLSample.fxml @@ -0,0 +1,30 @@ + + + + + + + + + +

+ + + + + + + +
+ + + + + + + + diff --git a/samples/XML/JSBrowser.jsproj b/samples/XML/JSBrowser.jsproj new file mode 100644 index 00000000..78d2cb4d --- /dev/null +++ b/samples/XML/JSBrowser.jsproj @@ -0,0 +1,96 @@ + + + + + Debug + AnyCPU + + + Debug + ARM + + + Debug + x64 + + + Debug + x86 + + + Release + AnyCPU + + + Release + ARM + true + + + Release + x64 + true + + + Release + x86 + true + + + + 42fc11d8-64c6-4967-a15a-dfd787f68766 + + + + 14.0 + + + + + true + UAP + 10.0.10240.0 + 10.0.10240.0 + $(VersionNumberMajor).$(VersionNumberMinor) + en-US + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/XML/MainView.ux b/samples/XML/MainView.ux new file mode 100644 index 00000000..d71edf1f --- /dev/null +++ b/samples/XML/MainView.ux @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + relativeNode + + + + + + + + RelativeTo="Size" + RelativeTo="ParentSize" + RelativeTo="Keyboard" + RelativeTo="PositionChange" + RelativeNode="relativeNode" + + + + + + + + + + + + + + + + + + + diff --git a/samples/XML/MyApp.ux b/samples/XML/MyApp.ux new file mode 100644 index 00000000..0e7b0088 --- /dev/null +++ b/samples/XML/MyApp.ux @@ -0,0 +1,11 @@ + + + + + + + This is an example of EdgeNavigator! + + + + diff --git a/samples/XML/Storyboard.storyboard b/samples/XML/Storyboard.storyboard new file mode 100644 index 00000000..673e0f7e --- /dev/null +++ b/samples/XML/Storyboard.storyboard @@ -0,0 +1,7 @@ + + + + + + + diff --git a/samples/XML/intellij.iml b/samples/XML/intellij.iml new file mode 100644 index 00000000..74bdc4de --- /dev/null +++ b/samples/XML/intellij.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/XML/point-3.1.gml b/samples/XML/point-3.1.gml new file mode 100644 index 00000000..233654d0 --- /dev/null +++ b/samples/XML/point-3.1.gml @@ -0,0 +1,4 @@ + + + 52.56 13.29 + diff --git a/samples/XML/point-3.2.gml b/samples/XML/point-3.2.gml new file mode 100644 index 00000000..af9dce90 --- /dev/null +++ b/samples/XML/point-3.2.gml @@ -0,0 +1,4 @@ + + + 52.56 13.29 + diff --git a/samples/XML/sample.csl b/samples/XML/sample.csl new file mode 100644 index 00000000..7f26fefc --- /dev/null +++ b/samples/XML/sample.csl @@ -0,0 +1,1053 @@ + + diff --git a/samples/XML/tei-odd-sample.odd b/samples/XML/tei-odd-sample.odd new file mode 100644 index 00000000..a6a736c4 --- /dev/null +++ b/samples/XML/tei-odd-sample.odd @@ -0,0 +1,1304 @@ + + + + + + + TEI Simple + + + TEI Consortium + + Distributed under a + Creative Commons Attribution-ShareAlike 3.0 Unported License + +

Copyright 2014 TEI Consortium.

+

All rights reserved.

+

Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met:

+ + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +

This software is provided by the copyright holders and contributors "as is" and + any express or implied warranties, including, but not limited to, the implied + warranties of merchantability and fitness for a particular purpose are + disclaimed. In no event shall the copyright holder or contributors be liable + for any direct, indirect, incidental, special, exemplary, or consequential + damages (including, but not limited to, procurement of substitute goods or + services; loss of use, data, or profits; or business interruption) however + caused and on any theory of liability, whether in contract, strict liability, + or tort (including negligence or otherwise) arising in any way out of the use + of this software, even if advised of the possibility of such damage.

+
+

TEI material can be licensed differently depending on the use you intend to make + of it. Hence it is made available under both the CC+BY and BSD-2 licences. The + CC+BY licence is generally appropriate for usages which treat TEI content as data + or documentation. The BSD-2 licence is generally appropriate for usage of TEI + content in a software environment. For further information or clarification, + please contact the TEI Consortium.

+
+
+ +

created ab initio during a meeting in Oxford

+
+
+
+ + + + + TEI Simple + + Sebastian Rahtz + Brian Pytlik Zillig + Martin Mueller + Version 0.1: 30th November 2014 + + + +
+ Summary +

The TEI Simple project aims to define a highly-constrained and prescriptive subset of the Text Encoding Initiative (TEI) Guidelines + suited to the representation of early modern and modern books, a formally-defined set of + processing rules which permit modern web applications to easily present and analyze the + encoded texts, mapping to other ontologies, and processes to describe the encoding status + and richness of a TEI digital text. This document describes + the constrained subset

+
+
+ + Background +

The Text Encoding Initiative (TEI) has developed over 20 years into a key technology in + text-centric humanities disciplines, with an extremely wide range of applications, from + diplomatic editions to dictionaries, from prosopography to speech transcription and + linguistic analysis. It has been able to achieve its range of use by adopting a descriptive rather than prescriptive approach + , by recommending customization to suit particular projects, and by + eschewing any attempt to dictate how the digital texts should be rendered or exchanged. + However, this flexibility has come at the cost of relatively limited success in + interoperability. In our view there is a distinct set of uses (primarily in the area of + digitized ‘European’-style books) that would benefit from a prescriptive recipe for digital text; this will sit alongside other + domain-specific, constrained TEI customizations, such as the very successful Epidoc in the epigraphic community. TEI-Simple may become a prototype + for a new family of constrained customizations. For instance, a TEI Simple MS for + manuscript based work could be built on top of the ENRICH project, drawing on many of the + lessons and some of the code for TEI Simple.

+

The TEI has long maintained an introductory subset (TEI Lite), and a constrained + customization for use in outsourcing production to commercial vendors (TEI Tite), but both + of these permit enormous variation, and have nothing to say about processing. The present + project can be viewed in some ways as a revision of TEI Lite, re-examining the basis of + the choices therein, focusing it for a more specific area, and adding a "cradle to grave" + processing model that associates the TEI Simple schema with explicit and standardized + options for displaying and querying texts. This means being able to specify what a + programmer should do with particular TEI elements when they are encountered, allowing + programmers to build stylesheets that work for everybody and to query a corpus of + documents reliably.

+

This project, TEI Simple, focuses on interoperability, machine generation, and + low-cost integration. The TEI architecture facilitates customizations of many kinds; TEI + Simple aims to produce a complete 'out of the box' customization which meets the needs of + the many users for whom the task of creating a customization is daunting or seems + irrelevant. TEI Simple in no way intends to constrain the expressive liberty of encoders + who do not think that it is either possible or desirable to follow this path. It does, + however, promise to make life easier for those who think there is some virtue in + travelling that path as far as it will take you, which for quite a few projects will be + far enough. Some users will never feel the need to move beyond it, others will outgrow it, + and when they do they will have learned enough to do so.

+

A major driver for this project is the texts created by phase 1 of the EEBO-TCP project, + which were placed in the public domain on 1 January 2015. Another 45,000 texts will + join over the following five years, creating by 2020 an archive of 70,000 consistently + encoded books published in England from 1475 to 1700, including works of literature, + philosophy, politics, religion, geography, science and all other areas of human endeavor. + When we compare the query potential of the EEBO TCP texts in their current and quite + simple encoding with flat file versions of those text, it is clear that the difference in + query potential is very high, especially if you add to that coarse encoding simple forms + of linguistic annotation or named entity tagging that can be added in a largely + algorithmic fashion. During 2012 and 2013 extensive work has been undertaken at + Northwestern, Michigan and Oxford to enrich these texts and bring them into line with the + current TEI Guidelines (where necessary working with the TEI to modify the Guidelines). + TEI Simple uses this corpus as a point of departure and will provide its users with a + friendlier environment for manipulating EEBO texts in various projects. But TEI Simple + should not be understood as an EEBO specific project. We believe that, given the + extraordinary degree of internal diversity in the EEBO source files, a project that starts + from them can, with appropriate modifications, accommodate a wide range of printed texts + differing in language, genre, or time and place of origin.

+
+
+ The TEI Simple schema + + + + + + + + + + + + +
+ The TEI infrastructure + + + +
+
+ The header +

The default set of elements for the header are loaded using the + header module. In addition, elements from other modules are + loaded, if they are tagged in the classification as being needed for the header + only.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Elements which are only intended to be used in the header are banned from the + text, using a Schematron rule.

+ + + +
+
+
+ Transcription +

In order to support the sourcedoc and facsimile elements, the + basic transcriptional elements are loaded, and two attribute classes.

+ + + + + + + + + + + + + + + + + + + + + +
+
+ Attribute classes + +

The tei module brings with it a default set of attribute classes. + We need some more specialist ones from other modules, and to delete some + default ones which we don't plan to use.

+ + + + + + + +

Some uncommon attributes are removed from global linking.

+ + + + + + + + +

URLs have a constraint that a local pointer must have a corresponding ID.

+ + + + + + + + Error: Every + local pointer in "" must point to + an ID in this document () + + + + + + +

Constrained value lists are added to attribute classes where possible.

+ + + + + + + above the line + + + below the line + + + + at the top of the page + + + at the top right of the page + + + at the top left of the page + + + at the top center of the page + + + + at the bottom right of the page + + + + at the bottom left of the page + + + + at the bottom center of the page + + + + at the foot of the page + + + underneath a table + + + + + + + + in the outer margin + + + + in the left margin + + + + in the right margin + + + on the opposite, i.e. facing, page. + + + on the other side of the leaf. + + + at the end of the volume. + + + at the end the current division. + + + at the end the current paragraph. + + + + within the body of the text. + + + in a predefined space, for example left by an earlier + scribe. + + + formatted like a quotation + + + + + + + + + + + characters + + + + + lines + + + + pages + + + + words + + + + centimetres + + + millimetre + + + inches + + + + + + + + + + + Error: Each of + the rendition values in "" + must point to a local ID or to a token in the Simple scheme + () + + + + + + + + Error: Every + local pointer in "" must point to + an ID in this document () + + + + + + + + + + + + all capitals + + + + + + + black letter or gothic typeface + + + + + + + bold typeface + + + marked with a brace under the bottom of the text + + + + border around the text + + + + centred + + + cursive typeface + + + block display + + + strikethrough with double line + + + underlined with double line + + + + initial letter larger or decorated + + + floated out of main flow + + + with a hyphen here (eg in line break) + + + inline rendering + + + + + + + + italic typeface + + + + larger type + + + + aligned to the left or left-justified + + + + marked with a brace on the left side of the text + + + + letter-spaced + + + upright shape and default weight of typeface + + + + normal typeface weight + + + + aligned to the right or right-justified + + + marked with a brace to the right of the text + + + + rotated to the left + + + + rotated to the right + + + + + small caps + + + + smaller type + + + strike through + + + + subscript + + + + + superscript + + + marked with a brace above the text + + + fixed-width typeface, like typewriter + + + + underlined with single line + + + underlined with wavy line + + + + + +
+
+
+ Model classes + +

A set of unused model classes are removed.

+ + + + + + + + + + + + + +
+
+
+ Elements +

The main part of Simple is the set of selected elements.

+ + + + + + + + + + + + + + + color: green; text-decoration: underline; + + + + + margin-top: 2em; margin-left: 2em; margin-right: 2em; margin-bottom: + 2em; + + + + + white-space: nowrap; + + + + + + + + + + + + + + margin-bottom: 0.5em; + + + + + + + + + + + + + + Element "" may not be empty. + + + + + + + + + + + + + + + + + + + + Insert list. + + + + + Insert item, rendered as described in parent list rendition. + + + + + list-style: ordered; + + + + + + + + Insert table cell. + + + + + + + Element "" must have at least two child + elements. + + + + + + Element "" must have corresponding corr/sic, expand/abbr, reg/orig + + + + + + + + + + + + Insert cit. + + + + + margin-top: 1em; margin-left: 1em; margin-left: 1em; + + + + + Omit, if handled in parent choice. + + + content: '['; + content: ']'; + + + + + + + + + + + + + + text-decoration: line-through; + + + + + + + + border: 1px solid black; padding: 5px; + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + font-size: large; + + + + + + + + + + + + + + + content: '[..'; + content: '..]'; + color: grey;font-style:italic; + + + + + + +display: block; +border-top: solid 1pt blue; +border-bottom: solid 1pt blue; + + + + + + + margin: 6pt; + border: solid black 1pt; + + + + + + font-style:italic; + + + + + + + + + + + + + + + + + + + + color: grey; + + + content: '[..'; + content: '..]'; + color: grey; + + + content: '[...]'; + + + + + + + + + + + + + + font-style: italic; + + + font-style: italic; + + + font-style: italic; + + + font-weight: bold; + + + + + + + font-style: italic; + + + font-style: italic; + + + + + + + + + + + + margin-left: 1em; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + margin-left: 10px;margin-right: 10px; font-size:smaller; + + + content:" ["; + content:"] "; + font-size:small; + + + + + + + + + + + Omit, if handled in parent choice. + + + + + + text-align: justify; + + + + + + please make sure pb elements are not at the start or end of mixed content + + + + + display: block; + color: grey; + float: right; + + content: '[Page '; + content: ']'; + + + + + + + + + + + Omit if located in teiHeader. + + + + + Omit if located in teiHeader. + + + + + margin-left: 10px; margin-right: 10px; + + + + content: '‘'; + content: '’'; + + + margin-left: 10px; margin-right: 10px; + + + + + + If it is inside a paragraph then it is inline, otherwise it is block level + content: '‘'; + content: '’'; + + + If it is inside a paragraph then it is inline, otherwise it is block level + margin-left: 10px; margin-right: 10px; + + + + + + + + + + + + Omit, if handled in parent choice. + + + + + + + + + + + + + + + font-weight: bold; + + + Insert table row. + + + + + + + + + + + + + + + + + + + content: '{'; + content: '}'; + + + + + + text-align: right; + + + + + font-style: italic; + + + + + + + + + + + + font-style:italic; + + + + + + + + font-style: italic; + + + + + + + + + content:"<"; + content:">"; + + + content:"["; + content:"]"; + + + content:"("; + content:")"; + + + content:"{"; + content:"}"; + + + + + + font-size: smaller; + background-color: #F0F0F0; + + + + + + + + + + + + + + + + + + + + + + + + + max-width: 80%; + margin: auto; + font-family: Verdana, Tahoma, Geneva, Arial, Helvetica, sans-serif; + + + + + + + + + + + color: red; font-size: 2em; + + + + + + font-style: italic; + + + + + + font-style: italic; + + + + + + font-style: italic; + + + + + font-style: italic; + + + + + text-align: center; + + + + + + + + color: green; + + + + + content: ' [?] '; + + + + + + + +

A small number of elements have constrained value lists added.

+ + + + + + Using TeX or LaTeX notation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + data cell + + + label cell + + + + row or column sum data + + + table total data + + + + + + + + + + + data cell + + + label cell + + + row or column sum data + + + table total data + + + + + +
+ + text-transform: uppercase; + font-family: fantasy; + font-weight: bold; + padding-bottom: 2pt; border-bottom: dashed gray 2pt; + padding: 2pt; border: solid black 1pt; + text-align: center; + font-family: cursive; + text-decoration: line-through; color: red; + text-decoration: underline; color: red; + font-size : 6em; + font-family: cursive; + font-weight : bold; + vertical-align: top; + height: 1em; + line-height: 1em; + float : left; + width : 1em; + color : #c00; + margin: 0em; + padding: 0px; + float:right; display: block; + font-size: smaller; + clear: right; + padding: 4pt; + width: 15%; + + + display:inline; + display:block; + font-style: italic; + font-size: larger; + text-align: left; + padding-left: 2pt; border-left: dotted gray 2pt; + letter-spacing: 0.5em; + font-style:roman; + font-weight:normal; + text-align: right; + padding-right: 2pt; border-right: dotted gray 2pt; + -webkit-transform: rotate(90deg); transform: rotate(90deg); + -webkit-transform: rotate(-90deg); transform: rotate(-90deg); + font-variant: small-caps; + font-size: smaller; + text-decoration: line-through; + vertical-align: bottom; font-size: smaller; + vertical-align: super; font-size: smaller; + padding-top: 2pt; border-top: dotted gray 2pt; + font-family:monospace; + text-decoration: underline; + text-decoration: underline; text-decoration-style: wavy; + +
+
+ +
+
diff --git a/samples/XML/water.tsx b/samples/XML/water.tsx new file mode 100644 index 00000000..db4d1b97 --- /dev/null +++ b/samples/XML/water.tsx @@ -0,0 +1,213 @@ + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABYklEQVR42tVVq47DMBDsp/hHDxQcOFBwwMAgwMDEIKAgoCAgUqBhqH8l50126lHaq9TrQ7pKq8TOemd2dtfd7f7rz3TTbNpibpyNT/N7gUOxSHbKs+mLlW+vAwaQJ1B5ulQN+88kYkIJ3GhwkVwyFRABvKbEkKvfI0TOGYkha9nDe4AiqfqIHZUoznbTfURwYA1agn+rvAL2VRpuX8ym1Rw9QUpIiB/WLQilRZXfgXuVziro51hr69HxtPZUAlk3ui9ErZYNvvLeEplAU7MAx00tj3mVEhkMuWYdVeZGQTrtCZTDqz8IsAotleqCCDcUZ7aQUduSsanKjnVDe44yx9Qogdvj1k21m08KDiltqllAdnwX+xgvRzNqvLuaUQ4EDSCgB8oQtb4GxIBDfvxeOE9ApO7mUjltWl5HvQfiMy+kXhXBjGP8DhsF2rTYa6/kQKPFV7Sf3vinFLQX3Np0f43zA259mZw6IuSNAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAB/0lEQVR42tVVLYvDQBBduTJy5drIyMrY/oOTFScrKioqKioiwhFxcBWFVhQaU0JEOCIKPXFQGVmbvzI3M/vRlIM7ev2AKwwNk7Bv3nvzEiH+7S/dQG/dg2gVQZRpeBiuro+g8yPI+R7E8A3EQEC0jkDPNdf9gLcIvGtBr/Efr4k9lUoVxGUMYaJAZaaofzvgvAG9ahhUl1gfLYisADEpQE6ksWFrFIgWEcixhHAVXq+IXlhQKsuae3gtZoVnT/47QGKvZwEPxCqMBPcvUoQ9rh0wAr42BpjkTw+gp+j985IVoIOZ5VhAv+p7sF5p+kES+Gd+HYSkZYnnFjQ5GGDLmu/htRhtEBBruGRgqi6QnEkPqKxFdN/1SLEzaxjYSe2qwl5ltp2BP1szGJbCfSALeJCRjSKmgOQncAKL85j3g/qcELLFPuOG8eqdlq0zQN7xnodpQZVmmKBq2ALHjBgFCECH0y7wXmwjz5R6POQ8hLiKvQo/x622rEsbvcrETybvIJ4w+9PibMlUYsAJWE0VD+Ei6Qa5OBU8QG6TQPJnDQTpnv0PUwti2bLvC8OMpBdDYVJCqbhJHHdmT8TASK9Ty8hGjpmujN+8Ayj1N4+vfiHRCyjB5Ru88Oazv1l48hR7DLwIOYb3+xiMlp4d+U5yx3Xs4/ewjxLtQfcl89dzvgD75hkn04cPugAAAABJRU5ErkJggg== + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACjElEQVR42r1VIY/iYBTkZ6ysrURWYpFIJBKLRJJTVZsUQcKKTajZEAQhCBIqmrSCpAiSIhCfQFQgKk5UnHk3876W3Iq7bLjdJXkp/dow8+bNPFqtBz+d2EgSjaQs5pKfJtL6ro93rqR7EuluS+lFpSTpWMx5ItlxjPpCIs5bLm5UiLcrZVmI+BcB+ATgvlQ/F5LEI1UiP40/VxEnzMR5QYGAd6jEOxvx3ox0VoVk6L4s50ogO0CJSyCb9UC/a0GV/W74GBlnZkG1Xu316TmR7nQv3bQSY5bo1FcgksgxBnPhfaPERJZhX58X1+DjJJwtwLYNMEg8o0hmZ6Q9y2WwrmR5E1WABmSHSTqSqlwoENUgGZ5xLMYEksMbfC/HuP4OHBlxVgCd1qA/EgvMogJryB5VMkD14IN+Kiq3zh6ABNZRANiOw1dTFte5ktlH9fnZqvYeuJG6KYA5a1zD3JJKC3Ffclu4J3j/INJbGZFfSy0CslOmoqiV4YhYJEm/6LUmV1AZPLMmQ6YpsYKz42ndNa+hBW6/Gn3G+I0ZQ4BT8rIIABjc5eYZKz+OLQGSIvDRArM226ESfRdb7bZRIPzDfFuj8WunpQzOkL1EBAsrP+Uk0F1eyk4/YBQkRflz3RETu7Rudmnx7J95VxPG1hNubMGfZkgAZq8RDCG9bDR2/PEstbNVJVKbAhvPOVTx9ayJ5sfTQAIYjwupvXUhvRjOBwEXY1A5jTUTu+G8lYiqMcT96L6gtOv/2ZAuuu2gYRdjGR5FFWBH9+xj7kZ3QKCxJClrzD3eWXzeRuTy8a9wP/xAiRtD6UzZPRfOJagN94X/Cb24VBC6mPJmBxKwbv/Wf0Wu3PK2UKdT/kd/5zeaE2gm63UKTAAAAABJRU5ErkJggg== + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABvklEQVR42tVVr2/CQBTmb0XWVlZW1lZWoicWMkECgqQIklY0acVEBeIEomICe3vfd33H0Y1kY0AykpfCcbzv17tjNvuvr7ZLbbmL7fJlbodjYZ8GbA65rQS42ie2f88Izs91IpU+jki5jW3f57YVkPUqssYU4oC838Qkge/bJpVK+LwbsCqFOnMoaDvKgWEtF2LZ6Ehul69zvmeJKzcDAxRqoRSK2yZjEUwInD4Wjgyc6TKCYX9Irto5IiD5K2DU8i2y5SaixVQjzQCkmQMsdOY0LEhuEMI6oNPYWvn99akWxuWYJxV0yDfywLBX1VWBM8NQuGEUAn4gJ7GhB/pxvXNxBYq/5oYnWJOEgKAR1kFovYp9HFCI5krCRZCQXDiY6kSvJGSvgTNN4Mh3thGodg2MEIW9aKBOADiMiarVAVEK9XQJZCbuXp/60TZjcj6x2ZFJSQJk1AmAaEzqhq7r6UCVI6kL639y7n3jiW3lNmJsdGokyH114qPi3IxD2/7lgro4FTt32zkw54qS4PrmrLStEw7mXe9+r7o5Dyczrd1waUQPvZL1uOpwVXsQyPycPO1PCTkPxwUHFUf51j6f/7okyrolgPYAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACUklEQVR42tWVr2/qUBTHJ5FIZC2yEomdRCKRtVUvVUsz8dLMMUHSiSXMEDJBGgRJESRFkBRB0oknEE8gJvgXzjufU+4eZsl7+5Vsyclt77m73+/5nu8pFxff9a991xZ/5EvzuinJYiBfBty6aUk060k4uZR4NZDhNpDw8VIg1LnvfB4R79aT1nXLgCAQzfoSKInurCvZLpJ40RfOuPi4in+2hACgcdUQb+SJf+NJ8NCV6TqU6aYOiBj4VVP8e19Qiva8GXj/K5FqG8vhkEq+CMSf1JdWu0TSdWCgibYA2WlB9NizM5BwZFjJ/5ciABPZvAbNl6GUm0jKdWQEqB5iUyWRK4lcc7G2BJB42TfAYhtJtgqMAHewWqhqrwJXu1gKBTs+p8Jz9RQreCCNHw3ZPyUmZ61AnYNENO9Ze9gnkuXAgMcajhSEjMht21b+hyLOKh5KNhtYlUhZKnueAeAC5C/1mYsgFDzUcpODGN4ghyJjzac6kuYZVSOcdF+IEJxJ533DQQ2K+6uAVlWoqYpVKPv90AjQb1b2Dkr0qH6AHOfoP7nOqG3nbX9XFzFVBVAjcW3AtHddI8UUQfDVVlDtcBOo+YZy+J1KpqydGpBAapTIF6HKWVdDDpKstJB9fMQ7gOcj/M9m5EKMZ6tWx4UHlFFVCq2MtplSJz84tx+fx0ac1tIiqseI7xrHUo3HVBRKyPmhPKkCCT5MvBeniWG/Ui8dj+OP+yBR6UvVSsiZ06ZCVwdsiun7p32SM519KnUfJ6SutsnJtPHX/ShhxPN+v/WeP+Pal6x1OIpVAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACTElEQVR42tVUr2vrUBSenKyMjI28MjI2MrIyMjYyaoSJEepSUWhEoc+UMlFKRaAVhUwUOvFgExMVT0Q80X/hvO876X2rGlvf9mCBQ27Opff7cb7bq6vv+qw3iRx/T6X9NUaV8t+Al7tUmk0q6zqRfBsr+H6Xy9Mj6mf+dUSennNZLmI5HEoFIoE9QNNZCCfG0jyk4g5dabap9j8N+PBSyB6Ay1UCkEwP9ye+vgmY1311Ib0PlRh7XuXBkUyOx+nlRFQJAPW9y4REWqhvtok6oT26AWem6K0xGhLjKOYPiWT3fYnrUMzAFTMz7ydCZeUukbYtNWDnituXUrrwjcUZOB34JlYXSJTquTcHmRC/MZVRN9h3bh1dvzljzpEHqTINVaFlVVvFtDutIx2JP/K0T0cIzL1s1ZfiRIzkvYGna+7x7dw5r0SyRaTAnB9LlbdjDRn3qJyq13WqB3ezLnBQLMkkgNWR3obmGePC3OMfgSSLUIH5e6veTEzXm0VKwoyMBvjVAYDzetFCrglkU22tVdvPg3YoJMahcQVQHBbOfAmrDsgC85wSmTBDT4JFoH3m4s3Us5h6hufc2jlGoXmA9UusUygMoCw8qck3nUNqOwhmGBOLoAQP4M67w5itIs2BHQfJdA4UmvJ+BeWrUMuH8ilGQmBabYvf3OP74uvIwLBI4PrmWtxRZ2ECNTy4d9v7m3AqdW96SL+nZLn3aX9I51fJqqKt/O4BlD0lcKov+0umMmt1+Ygc4BZwrcT+xeqPPgT0ht399kbexcB/AEhbiVW/ps4pAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACOUlEQVR42tWVrW/bUBTF+2cEhhoaGpoGBgYamhoaWgOTFeaCSS6IlJEoKoiiAksNiJSASimIlIACgwKDAoOB0bv7u3bc7qPSlq2VFunpfeTl3XPPOffm4uJ//RyOiWy2kSyvA0lXI3m3wNVjJjsNvLuLpXxIpX7Km/19rCN5OyCbdSRlmclBg9wWoVRVrgzoehU1IBRQ/7Iv3Dvs/yGQU6ZkVz3mRjuDIAwYKcvUALAHhK2Vkbqeng8kXQWWLZmS8WGf2rBgCuDrl2kDBmaOqczXoXgTz34z34YGJF4MxR33xZ25vw+EbBnLm1A2q9AoJqPdNrZA0A24cOJLfDPsmGFNUL6f30UdEOfKsfPeh56tX3e10rdp9TR6j+gbdoHLh8wyZk/WnQnrvJ2nnSFhgzOAZLqOZ0ML3hs3IHofe89AkmIky0XQZMm4j1sNWxBKP1lyD0Bkyx66mfmtmVPvDj65kq4Dkw3qgyvPZIgmA3EnrjHnjB0DkRaBTPW9n+r6pdtNd505q5SBuso7OQBzW0RK/chkiq4HBpLAxpiOZDGy80ylcC8d8Re+ycGd113falpVmc0Aa8AkBgKtYYWHYAEgyENAHiY77kAzhuUeg+D+Z1/+qO5/1LuCGWWFMx6FKXQ1/6xPzSg22qGb7L2ZZ0DPLsfvqmLbdDuCYTACnMrPzlUKPABgfPBXfeBXvb8z3P7ZnFYxOhOUeqc/vGlLPpUrAKwnFDSstPPJu/0pYb76aWpGxYTnvvMN/STd514e0SYAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABjklEQVR42tVVsWrDMBDNp+i7+gnZO3UqoUMoHQL1YKgHgbWYoKEUD4Z4CHhUN636FVV30knnkBYSnEADRwKS7r179+6yWv3Xj+itFzpEPXkhjb8vsArRsRicf1d7jNsBJyAhCyh+18Yfvq3f9wcksN6++vXzZjkiQhkvGhPBQHKZwAMwKAHg7ThlApvdRyYBal0PXJsisYwgAJAVOAFv9ddMhYfHp0i4t5cRoQcROJDYJYmHklxUBoMDcxUyAZVUg+jCm9H9TgQO8WIVQcXLFGU+6TFJjORUJEZndI7gTXyLisFvzcgoNjXY46ObmQpJyEgGKoMqITlXAXssbfYCEQeysztkWMoPcXTniLCxUqz3w5SrbEczr7JK4InsOaWQhGZTI2P8PW49YwkPPx0SIZkpCZxRxbxVdDd7gaq+yIzwQKVJgErfUmsakwnM5j9Uimr1xRMIPrgFxpHk206lTckrBE6uJ3A0dWcXXEhjUkQXf+TNqJl/tMG47UpWbLT4ipb2jn9KKnmhjvvi2jw/5gK11tLQbjMAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACOElEQVR42tWVr2/bQBzF+ycMBoYaFgaGBhoGGoYaGgZN0cCkDERKQaWGBBhEVUGkBVRywCQHRDqDAIOAAwUHCgxG3t73e7nVqbQf6tpKi/TV2U7k97n3np2Li//1Y6oxim2K2zyBe5jj3YTtcYqSwuW3DPVhouJ6vss447cDKe5T1PUUhiJf1yNYO6cDPN6kCiHfm/2Yk+n6asJhp7I7e5yr7TJeTK5NCTY5OTLF7SrRYx268mLhXm4x2AHxIzDcNxSb6KgYAZrHGw8jzlQTFRN32nDl1oMI5F8Ld+8MZPoU7W8d4gOQNdCby42cu1EAOW870/C6wDlGEwr6PDZD0F8Lb2p0c4NoZtBbcve5Q39NgIoOfAdGRyCxQEpX1HoKyU2dm/syEuBnIZ/FJk4IlF6vfFznwktzPqsavY1TF3pbH8Xw4DDY0w1GktTQOGSHcvMA4SPIFK5dzOBEHSD4WyvO7FuOdBctgHB8bdD5WODyzjKOBjFdESBxIqEzqayMaESoEXxX9HEMIkfvkoy4IVDaj+o3T4kKSw/ufSTdWakwceU7ITCJA4+tuhTTjf7OR5XUDYaMagwfWXhCilMsZ9b/sYwCsPDinSuun0qEJ+NDXrKcjT/fcF0RhhAiPhCQB66O1wmnu/6XF5Q6sD71hHGEmDrXJaJlrQ5FVwaXa6sdESBxYyAQhH21F5KWVRzJT/34UqLzudCOhJjaxX2zV3IoabR4KqxEIjHJvNufUpSfIGT3s5cL/wB3sgL2s65DmgAAAABJRU5ErkJggg== + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACYUlEQVR42tVVoW7jUBDsJwQGmhoaGpoWBhoGhgYGGp2igpN6IFICItUkqgKiKiBSDCo5IJIDLNkg4IECgwKDAwYlc7P77F7InapeW+kirTZ5D8zszOzL1dX/+vGTAulhguppjof1EF8HXDYIn4HBocGoBIpyyoqQnSas6POIOHEBZ8tKDIYkMMwBY+aoqjman3dIH8co8og10f5hwL3ZHv3vKYSA+2jg5TX8Y43BETp1/TwnkalWdpzgYTPUrsX79088y9BfZOgtUvT53VkX7Clc9rEB/F2FQSW9Zg5uYWiFAKaHTokI93GoROT+zcDuhpOynFWhwP2bVBXwdgbukndLA39TIUgaS4CZcI8V1anQ1HdWjfNUiYgtxtyiYDb2u5Hm5c/AW2On/JFp9QgsKjgLS8TjxN6KJGiFTO2faoxqZoF1zUyM2cMz1JKM4DK5EJEtETL7pD0rrVW/pWaoZNrLcjfGqhC3Zy0xISBEglOD4NzYPLAPSGAiRI7cEG5G+AINp5ARFaQyrqz2jpgok18o8gq2ugBeWvCOlJdQ6q2oYNQKb0VVaIe3rXB9qGlLDYdBlTUVYjKtKKAqUAEhpPko/7IlFqxQzwX81RrJA7PQ+9aGUraCBBU8b7TL9O6hQiRqPNEe/sbLvX0n2s14+xZwEifOrBKU37nJtAuozQTDSFBnYc/EmgEBAyoxJnjITbn0/p/W0dnZnMhGdDb1l5Zcp4ooEPB19NZU5MTpSUI8/7iXMGkVaTOh2yLg3bbwzGcGAtrhU4XPe5LbkLrxZWDtoyX1ZX9K8iIqCZl+9n7gXyTF4JLCnrXHAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACQ0lEQVR42tVVoW7jQBDtp5gaGhqaGgYGGpoaBgaGBvbASSmpTgVRFWCpAZFiYMkGkRxgsKDAIGBBgMGRd29mbQdVV7W9ShdpNJvx23nvza6Tu7v/9ePtGvg7A/+hgfezwvcR5yR9MvAem1uw5u0ZFPXviIWIJAHJ/S1zaTX7PxqETx3CbXcT85VCpKmOmTnYk+jcI6itEsskgrxDVPRILeAXFl7RwWfNO3xSiCcE28Et3QmR/2AQ5hbhwSJi+CQLBhEhI9gxKCI4OIz7zn0U827ikO7iVyA+gSQ9oi0bPRp1HnM9z4G0BeZ8PiuJI2Zecy01iTOQFMzsMROMAcKSU5O7QzFvE7e9kkqzhHnBjSmbROKYEbGWGEeado5oxojqHlnvBCWCN66HiJH9ijs5Q7HgmWU6E7Fp13jeJgqoygWaekkQxbQOKOpnV2D5mwStcxoPbkVQwvqsc8SZdfWA05Je/XWD5rxEc1pifiGWz+NymBS/R+w9CRHgschwPGQwZq1CmtNKszQTkv76S9eCk6bW3uNln6IqFlo37YrrTNcV93WvfJ6nsJd7HPeZZtknXG8exbix69aa1UHtXHSclggU0pecQs+rYZ0qYVUvpmci3hgXx1EU492XUYjEmebBXSeTYePjIdVj00kNAhVXLyYRIk5CXdfLj7+OQizxvEvpxI3WkbmpjCK0vr85bSjE2s3X/SAJyeSaxOPY9UyHezIeUfUZx38VcnJOx8tVlSJgNd2Tb/tTknO2l41eVHmVP9rnD/NFCxuaQAv3AAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACIUlEQVR42tWVrW/jQBDFCwsPFi41NDQ0NQwMLCy9vyLgwIGCgIAAEwMD62RgEGCpAZEcUCkFAQYFhgYHDI5M35vZ9VWV7qT22koXabRrOTvvN1/ri4v/9efqk7gStr4Tt+3kc4VzWHGSqO7NdoO4XS9893HCEKRIVMDKXuLDaGuOZwCp4dk17wzi8k7cpjPnFcT2AwziG8vCbChH1CITbW+l+deMuHU3O3Zbi46iIdIYMGkvktSDLM4iiyP2u1GS4yRxC0C81/P16XUg4YBGRDGARACIGfU37FedgXgYdwvQAJsbrFvdGUDu/QQYZOXPwj51KriG4HcY6p3UiKqBHSaNNuW+GXSvZQnCKJOu7AH6IDzBS+sRLV/ty1g+y4jWqnhRT3Y2ROJq0DU6jupMo4aDGF1PxwTkBLD2armHYZ9QnA1a2JkwMZqhrS9t/mx8w2iFiFSoMoG49SBwkJwndUxxXZkNwnpAhSp8+TYWuVrjA/UAfx+32kdBaoozyqKfnc6j6FeFK3y6V92cLbf5fWdoiV/TjBHmPEE3pwBJykGyBj2AkqTsdFiKTLAfUvYI+iHZ2/+ZEb2kcO5L1clVdZLL2x9vH0cVwZgpTAGA/WRiAYSrLwXf8XnxIBIdrEnf7UKK0YgZZvx6FLn5KXJ9NlvuRbJ20rtg+Yj9AyDux4+7kimU4dJZEgAgX38hOxDNDqIZ+LSPEtO8uIdRePf2iJ8AkT7BKeWMTHEAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAhklEQVR42mNgGKpgztI5/5Ex3S2u7mxGwTR3CC6Lae4QYi1Gx1GZSWBMscVAJhjDDCTBYjAmOUTQfUysQ3BZTHTUEApqXA4hZDHBNEJqHKM7hFiLCTqEUBzj8impaYVg4kQ3gNggJuQQknMFqXFLyCF0LweoXiCRUQ7QBhBRDtAHYCkHyAIATRZdO8VgYzoAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACNElEQVR42tWVrY/bQBTEAwMNDU0NAw8eDQwMDDQNDIwKqqisBZbOINKZRJGBZRlY2gORHHCSD0TaggJD/xuvM2+zl6hqq7b3ITXSUxwr8fx2ZnYzGv2vr7DoJCqsxFsr44+VvJtwd1xJVS4k3HYSl71MT4OEpZWg7GSct28Hss/n0h6WUtULud/OpHtcyb5I5KYeJM6tRBmAil6CXSejzLweCFdrHpxwd1zLfjfXMXUipklk0gxyexwkSNtnJ4IMTtCN9AXRtF4UK+WKTbPUoQv7Yi79t42DgTM3DwN6YCRCH2JcTzCEGH8yzo2/AaEwRe7SqdznMxWvigVE6UQi9rRWAMJ5Z+LMukLu8I44psWgUGHq3Bh/MYCpnCu/etFOCtqntXs4P0PcC7eHlbMe96+d6fvPMkEZ2QWKx4jjtmQvepmgE4RSkPQMghld7xq/Wgox78u4jO+ymQrynjqSXeLQCOCG/bpR17SIEIwfBxUn1PQJbhwAB8gwx075ULn5EYRiPlPfdooQhMJ0oKM7APFOMI7rmPg70ywkAgRd4RkR1xBmNE2vMYWA/O254dtOi7nnKeQb72PwTrQA9DF5N3hfhTm564ZGA1ei2v55GZ8fmDsBLacCLfUeY2uPS9eJs0s+Pl4H2JLRoddOBLv2Zdvx0hPXfsJpR+DMTyFYXHyPW/XVDiQt5HnVVe12iIfguA64iAj5ZkcyxTSC7LxldbWJQhHy3f6U9Mw4bVDWta78X5/zHZ1ZvLB/eOxTAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACSUlEQVR42tVVLW/jQBTsT1lquNAw1NDw4MHQwEKjKjqWgkgpqFSTgoCAAEs1iBSDSDaw5IACg4IFAYamrzNvN70rqO7UL+kijXbzIc+8efNeLi7+15fZdmLWwHIv5raWbyOOyl7MfSfR2p963zmJmgFn/3VClBDk0T2wASqnIuKNk0kxyKQEDqPERwBiPs/qvBZzU/tqaTmqNUUvNge2TuJdIIYAklsK2Pn7BHg/8bLWClmtuQ3kN506YAunhIkT+XEUmVQgoxCe7SjJIz7vAXxPEe5p8e9CTAESWG1Lpw9NylER48HxEp9fd2IhgrYnu1HSSvSkC2kQM21F3+93M+n7hXRNJg/FVLrj/G0h7K/ZgByVm2tUf1VLvPb9jYEIVdvQc62+8raTSFuB36QgnopIehCtugaxe1pJXV2CPJP6cCk9RPB8TRzSfE63ksEB2s/TIlQWbYgA7W8zauhiEvMOy9NB5Cdsn55EhtMdsFIHujZ7caI/i3ici6Mz7R+OmPy3iJc7e7/1ghRM/wHEaAExgRusPml81dqSxtvv3AJYyUM59WLKmZ4URDfebgWJuWQw0xo8JF5FBEERgmhJvAntKLwLtJ9tmZ98MAeQ9/1csa9mWvkr6/8aRgrIw/ghE+aXzwZFkJzLh6N4DiNd0Gy0fgJsOyi5Vt1kHxtHdYFCrvY+F2H+mRcVUPgpoAiK4fhlCCPFfN5CKoMja58PToi2IHd6TxlEWM8tyF3wdX9CIaRRWE5cSpyS80L6vn9DuBGdhSCY733OM8S85MLHyAKwAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACUElEQVR42tWVr4/icBDF90/BViIrschKZGVtJbKyFsmKS8CsQJANgoSKJosgAdGkFYgKxFcgKlZUnHn33rTcj+Tukg27myzJZL5pE+Yzb958+/DwVX9eXsNb1xg8HjH4dsSnFfZPDYYbh+HWwc8ay17uMMgIsyk/DkSFgiswqYDgDPhFi2FGiJXDaNvAXzsD8/aNwbxb4Rhd0dABowIYXxg8T3iWAqN9izFhgopAVMdnttHcq0h9TlGeEqTfgbhhMEeXXwoEVa9C37kvFTSSvIGnsQjiqTSIN4GosOJ5E+Eli7DLYhwPU4QESF8JcaICWWtgAc+SXmMY8zwh2Chv4T/WnU96rwxuMP8bTVkkLBijuc4tu8vc4rifoq5SO6ccx5wR0Qth3SmhEajokBBDFpIqgtKzUa+Ktyw7RRQrgix/25qySPGyjyEAhXMzBiHy2ELvd9sIDZ9JifI0tWft6wLhpRvLWN5Q508svGZRjkHFBSejevtuU7xVr0T+FxD9uTpVluyCUtcah0DcefYT4gbcNHPLET0SUZGw6sx5U8WUkFkPrSljAMvS4t+jqLqOZUABlFViZ1OHEILZyRvb2IAnGoU2hF2PtRFLZ/m2mjYCSq8NeZMZ3WVm81dBU4dKuHpm8r/kEfQ+pAeStjNjzDxip/KFyX5g8XO3mt4998IfW0GgI9UwqJsqBJm6zpC2CUV/UfX3wbtdSCr2vA5RmwqJjUkQzi2QoAdQcZoy4Fg+7Eo2BWhS2wyubKS7Ad3FFBT4vI+SjNhcF2bU8I6OfwC3fgnHe4r96AAAAABJRU5ErkJggg== + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACP0lEQVR42tWVoW/qUBjF96dgkZWVtUjkZGVt5WQlFgnuzSAQhCCagGgCgqQIklYgKhAVExUTFc+cd853C1u2ZAvLtuTd5MulN4Tf+c53brm7+19XUSbY7mIs5yHCCvg1cH0eIyc43z+gOo0QPQMRgGHJOv6gkG0Wo6rGKA4J1mmEup7QgQTRGUgk4AQMKGDI5+F3OnLpNCe4Pk/MdlVxTKwEe6g7AQfg/ug++2WL/qL6uhBB1a06VcfFcWRVVSMbQfv8ByFBSUsgwTH3YN8a3NvU6O9r+KcW3qFBf3ODEIFVy1WE7SbCeuPmne/oRDlC8zQxmED3ZWc7HQiyBoNdi8FjbXuQNvAXFLFpzAmJ6K0KfGj1ljABzF6mfE0BF3B1Gl+t1zi8FUFnZ3vUsDiKsHQjCCQga01AwGd918voypwiHgurVx2PsVyErkvVwe2y30TQfgF1LkHrNL6OI6C9yoBcGAg4I3DBzumGHJAQ6z4lWHURsGDNJSTHu3v9Ou0G4q6zmkIb5sGc6pxomsm1W2/OLgnzj13nOptV1n1vRtiqctC34Hej6NJe12PbJUwiwr/AiHdeYi5OKHw2Z8LtBpzgrJ86cJ8C5EBPJRG3hFEgzV9BiznjmAJ05/WsAOrFo249ChDMV+gYOC9zoTPLVy54H4bvsxXDBStU0jVrBa92ZwJqBAPZrquXujKbP0v9rUv2D59eHLDuBZ0WNmsl3Cr9ZvDb5TP5dq3Slztu3XbJ/rU/pX7WBWyaW331d/4B+NMC1rjos6YAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAB/klEQVR42tVVLU/DUBTlp9RWPln57CRykv/BD0AiEBMTFTUVFRUVT1Q02QRJJ0geAlGBmEBM1l7Oue9t3QKEAIOEJSdru6Tn4577dnHxXz+J85JUwGIlSd7LnxGn3VZSEKfNIEnpAxyuW6DxvyeEhGkL8gLk9SBmsxPjtkign7AXc04hhsTlIFkLQgjIHkd1m+ZeTMM0hjAKkjOFLt7/NJH5g4i9H5U4c0AH1FsxAMnoPtuMYiCAiSQQlCCdpPaTIKLxXxOSIdr5KDJ7BNaj2HonlgLg3BZbsTlEFENAOUGToAAKuVkF8iKKUUG9pvIx8RMI4Mg2ELARmTvRa5JbprAOCdh21BRMHZxrN5jCnpwduAPZMvaCz3hdHYkpjrbGPOzk6kU0UkZOzF9CAiTht30OYmbdKJe4T10YhfYAwnQzulBQdc0e7AUcp1BFkfl7QjhTvExFIHoWTIFnhEUnMvxmMIqT+FlEjmDpA+Gyn0axOHLu4tpGAR+OYob4OW8S0Wm6DiIOZYTzzEVxFMAk3DA5u169Xc0ypvKVMnI0PHA0mQpkOVaxjNFzLdEXjiAtYtylP0UXV/Kn54I6Zho8fBb+UDyeCdp8kt/2U+v3rtsQ+flOQo6CxC4Qq3tGftufJlD1it87kqvhICCph+n4/axcZ/83LOKOL0LpvvueV8nivBN16X1tAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACQklEQVR42tVUr4vjQBTePyV25MjI2pGRKyPXVlZWHeXEQc1CKwoXU46IslQELiLQiEAiFhKxYkTFiBURJ2Lffe9NuqUcy+4t3YMrPObHy/u+731v6M3N//pruzkdyik9pDH1zyv6Z8TuuKQaxHU1I/u0EHI5NzPE/POEHIopWbukFiQ/sztybgUHsM+nIoLz7eMcMZP1asTSqV1Id+64Ets5PBnfLX1eHFnSwy6WvQRc+TBxVBHdOqJJM1DUEMgWEkIGATT8EBJxplu8CGJxYdmTeSQK85506Ujl9v1C+ONJNwjAbUd094QVAnTTy8yHX98pRm76TBRb5DmOOBORacaakZwjQt4AQ2cQUrnXhXBSui2JogLgCFNACM6mHASIhbAb8dETRQBmoVHnv2FCgxy7x2Fy1FcDTYCjcwjYW4kgqc9CAnQcpC0F25ZUaiksejgA68cuWH004Jz1XhyfIWbCOQCHEM3fh52/03uHPe53jvTWkt7ZC3KFu2DTes4LIYkXcRKiuBBgGvNUGfYF9hCnKggEuMlAkjovmDtMrIRKfK0QrWtPhHMADMHf+Hh1FPLRHlGMznChKIcwiFTrlnTqxYkLbDG7hRmHuDNJL/fsgNr4ZgST8fbt+x+jFMAiKb7H+rWWlUHFVjgjXbPN6XmMvAppMUb2l8R/CGHyk31fDhckMiKMQW/8/kUsr7mvudofkgCyIzxffiNrPw71rZb17EAt8Wl/yULCD/b0wLbjO3nrcV1dCLvBpPcHsf2jOL8BAQzkc/Yiwa4AAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACN0lEQVR42tVUr4vjQBjdPyU2MjKyNjKyMjI2srKyticWeuJga1ZUlFIRaEShEYVUFFJREVExomLEidjv3vsmuestt+zt0j24wGPIJOT9+iYPD//rVZ/GsiszWS0SsdeZ/DNic5lKBeJqP5LmPFFyvT+MgPHnCdltM2maqdQg2eSpGDNDAiPZFJmK4PP6OAZGut6NuHdKd+Yy09gJR8a9KYRNukSmslomP58xlQ8Tk5Ru6ZSO6+NEoWQQ0H5/cmKYzGmiZHz/Vlx0FIkakcGplXcRE6t1Krsi1YjprkLcJOo7J9ltMq19UnFZK5LsgatIDAFhaSXctxLkRoKjfV0IFe+6PtUBpnwDAT0x4+3dVTfJWDtzwwgByQWEcJucRTE8AFhTiBlAzABCvEUt3rz6JeRlbMZMf4ud5CrkMNJ1k2e6zwr4LgXzwynIh3R+AlHZSrgwEkFAWFjxSyNe3oi/aMR7hoCt+YOQ7lzfTnvfO/cMErAQxjpINkbUKd3ZziW6jvJWBrlVQSHWaIv7A+IvDERYR/7N4fWp7zq9Pd9OzFhiOIpLAC4jkMRwPARx0rq9AdwmhUhAp18r8ee1I1XX2FvXfz+M/fmmY/aZwbXGzMlmtMdWBUWIm+CQMWKNfN1IcLAu6vydxC8vuoyvzmGMiOOz67hH8Ixuv8DtEqRriJh3PRduvdsPiY5CdMl+6dBHjwHIgsdaSSmA8BaV4tN+yXTlE+x32bllzG8N192F4Agp6eMO+LjjH9KwCMHNaVe4AAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACS0lEQVR42tWVrY/bQBDF708oDDQNLDQMDTQMDDQNDAyqogOVUlApB066kFNlUBAQKQaRHBDJBpEcELDggMGBBQELSqbvza7dkqq9T6mRVjMZW57fvHlxrq7+10/0tRSe/qqWflbLuzXu3ZTC8yEDAJpH97VCtPmbNY73jQyOTuLcaiNO3/tUSO9zIdGX0tcygiDPzeuBDCuR4aNIckLMnQyPIh83jfRvPET/3kjvNgDwAErjxuj1Zzeuq5nYx6XEBo2tkzEghoAYPYjElZX4e6NAcdZIcna6EsLye3Tt16QgVGT3BEXKairlYSrFbiL1aSbNw0JSNJ2Jbz42TtUYACIBHFcywHrGFsqssaY96ifXrUnXAoBo/RePsBmbc+oS0xNgu0kBsBRznisUr4/ggxQw6QUwZ5FJgwigMSJ9kmQEcgoTXRedObsY8l+Nj74ZH25Oc6H0rLUQxX4ixsxVCR5jFmrGFBMPDk5ssxBx33RqrQUFqFD/tvZeWQU16JnMeH9QldVvHmkBOGkbGzQrA5CCBV9Ye6eqWLuUbZ5qznsmlVeCKxv9CMbdI9/hHJDvCAZ1APfnVRznOjVXwmmZl/upfrfNUtVwAOBqFKxVC/c1UENVRG3qAHAOigBoAFXio/13M1JuNSNhQiPNK++VzqyoucsdIP2qOAAPvZJcvAoJlHnRz7Ez5TrtDMlIheowMUF4j9G1ecVYf7UXkkp98A9ujanmPczUK9vcK8UV8PqbvZKpRvueoCGpQFvj9O/2p6QK5JMg9/zZjX8CTEsEAZI+lIoAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABfElEQVR42tVVoW7DQAw9WFhYGBoYGBg2RQVTpIJWChgoKCgYGBgYGNh33+7Zfo6jVZuqtJtW6ZSrk/g9Pz9fUvqvv+a4yt3zWlZb9r8H/JQyloC/bHK90z3jdwPuATYmXfuUh7cq91glPrxXEmtGXYjdvOL2vM7Vg17xHyBC6lH3iEENEMEziIPMoooJHsGkSiMEHwCUpHgPRBGnQlcpcglY9pYM++GjFhB6AUT6181U/W56nx6R575TREBLIoJLT01WVigKWGIkrLZJgU36ejt5wL1R7uEqhJHfMGbAsYdIgORkLjFUaNXENpCcE9wnrz7mxfN471CUi36CkrO5FnkL2/akgN5bEjCJmbCxieBe5I/KnVZfvMF8P7reWzJOQKiAxGKlVMKNauZ0HwRvXDd+RoDyM4bKOH4wJ/ZSrfUYvujCO7i/6ByIhoqOjj3mNOAqbTRv3O4kLJV2Z03uUzLqFMzGDa0oz971W+BngynDNjR/8VGSM2HB2f8JRvClN9IGbE8AAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACO0lEQVR42tVVLW/CUBRFIpGVWGRlZW1lJRJZ26CqlmZiaeaKICmChBlCEM2CIAGxpAiSIkiKmKhAIBD8hbt77uN1H8m+P5ItuenbbXPPueect9Vq//XHvG6SOTBV8fnPgJu9JqHaU5vMsUnNiwaZQ5N0/9eAraFFxrUh1bo0yGYC1tQi9HFGT79H78eAHR6GzVqDFvljl8y+2hbbA6h+UVdKcK9x2SDjypBvG6wMyHwZuLyPqNiEdDgktJh7VGwjqbKMKkLugBXotSictylIXQHEu3q3TgYrohX6lCIARt3OPMqWngzO1wHlq4CiZYdOx4TPvpCL+XdUtg1psgvkDGLIBYgAGKogIwjrm4oUPCRb+gKAc7ELacEEAFzuQCqmDMD8Ln+izGTLxFiBZOWR0+c8MFBn6kghGyBgpzbVujW5LahnYcXg27QjWyZzfm4COWNDkOiwzABEH4QWc7+yI7vzheDplJC2zLuxyR1blKxZvZlbWYOs2DO7sg+EnNR5JAIwbIihZRkrAls1FL3ojuXnrUFOKwHgOG0zMV/6IAF75MyqhWwJVIKqL9V91QqRd5+wxLE88bEiw33YwGS0EgDRNmk1vIEt/cM+lsCisjMp1IfDqAfK87zdAcqI9J7YhuunCcp3sO9sleSGS7behN+7jtWtWAWSBwWmVBG7diqYCduhNy02yMbo5/4gAQRbCyADx1O3IoENAaotyr+z8btEztdVhytfg0BU5eTP/inB59NxJEHFVf7qnAcPbLZlMU2ZQwAAAABJRU5ErkJggg== + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACPUlEQVR42tVVLY/iUBSdn4KtrKzEVlYikVgkshKLZMUmjBmBaAiChIomVJC0okkRiCdGPIF4YkTFmrP33DclzSa7yczOTDKT3DwohPN1z5uHh+/6115SnMo5dtsp4nOHLwO2zytUAlydFzDXJeIGGBsgbByC3HwekVMxhzErtHWK42EGa9fiQIqkBiYXIM47RLlDdJGz+SBHCNQrrQTYPq/Vdk7bpDp0JCoc5r+8E5xIIomuHUb79v1ECEq1VEoibbPUMWapEXQvG0+GzlyWGJcdEnEiIYHS6fsgM0riTUQIzNntZzjlMxxzn3dVLhTI3dZKgOSGzpBQIvsQZhbx1qkr0cEikAlzOTMh8q8doZ0nASOA2itbfhQCPbC5ru7WVwNnnFsrkc5tMC46hGdRf/Az+tEi3BpMhFh89c6MtkLkscJA8Qq7bOpVcmp/UqGS4B7UqT4noeNhfo+D9pOgkpBo4jO0kvFNwPai+lEI7L0LwV7iYCQ/Wz9/Eul7Pdx2BZKTz6wQdaKa5Pg9RkPgPqaJtCHtPDCryTjYjqnzSxkUFqOn9k7gr1H0mVq70pPEPJlUSZDMMBp9LZ/HrKPYnEj+Y9ZRiESZ9YtI4MK8bRl7e/V8raKlM2r9TGOjU3w+swIs4KFYzZNkWMNA9mF0MP9fx3sryoWq9dV7dUWcSgrpv9isVZQ9UNWFV/6hd3+vmsD9cmpE4gprp9dyLaqz9vOu5L6uWkHeCbXfDV7JdODL/ilx+dxto0Pw9/7Ob7W/DzcYBXyyAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACK0lEQVR42tVVr2/CQBTmT5hEYpGVSCwSOYmsPVnZTF3mOrGkCBIUIROEIEiKICmCpAiSTiAqJhAT/Rfevu/BwUZGlv2AZCSXu757fe/7cVcqlf/6C0dt8bqeDju9las1rj3UhMProfnAk3DS1nW9W5dGr3E5ICxeva/qqN9VJVr60p8ZiScdCWe3YnpN3XMA/5wxGQ4XRrxHT8xTS9nzebg0umYsgC2dbkNzCebm7ubnQIqNlXwVynYbSzL1wbIj/bkvASQnoLQIZTzzZTiFAjgDjHGOMey8o8/NUVOyZSDbl0i+1ZhjPPElRYMEMrNItgjA2BcLIHxOwJwKsGn2bCXZhMq8BOD8OZQUe+ncSFFESoQkcuSdbZyv8RKala8ogDWLJADAxmxSbCKVlXsZlUFh9R97jCfI57vZYgeYJJhHW1iD9TQOEJyP1wkFxqMdK/qYrQJdEzVlJHIWYpyAkqnRovnaKkMWL8tYnGU8D7SNYLivgNkYgAsHArkkwBpHBT6RjQmcGdtCAcrLAsxjYTZ2NvH5ABY55WtfZz0veP9U3bNWqLwvMVhEOo/hu1ODIMygeVCCcppBS1XgNc3U612czYrC6kj3tnyQ/qufk1fnE9lS3AbapkqBjVPJSc0Y7XRAuP+r63i4FQCUuWaYeS1dQ43PjkzzFc9G/+8+SGxyYP3Ob/V07zstcuAu9kl215UA9NotCcDuD214vT8lHkSedItDym/ET+u8AfUc39TwIyvtAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACV0lEQVR42tWVr4/iUBDHV1YiK7HISmQtElmJrCUnLlWbZsWlwbHiEhAkrCEXREMQJEVsAoKkiE1YsQKBqFjBvzA3n+k+cifuR/Z2NzmSyXt9fW++P2Zeubr6X39p3pVgHNQxaMqHATdvm0IEEwWeBdK8btjcrb8bcHvSFn/gW7RufAnnobTnbWGdOWvuPWtvrrg1bon3yZPga60W9QB5155k9z2ZrnvSuGlIb9yWRMvTUGcg80/AALjR2W0ODFpGKJl1ZJhH8m3XN9D+vGNxeEilWMVSVSM57FM5PmV/TyS8CyXMw4tK5iRNV5EsFChVpZ28I/Gk3sN6pjHcxeJ/8c0NiHGmWPfleBxKpCWCxOHxN0ToZBI6cJIxYisgHEatA13sE/E+ewJhR/D8PJKO3op0GRlgqeqrk7rwmFqUu0S4PYwXYJI4qwHDYutqtRtrqSnkim1fFmorNcfuQpOwP5nr/CmVZNk1uzdbBVnXZDb3dWkYceL4QgJylT4fHn5wBMXUFQeC25YpQsF0HctIlWNtqQfZM1KFhZI7nDJzCqtxgXfltp4DCiF6wcjoHkb6Azd+WQqS+HqlUFGq7XVzdQ3IqWLPcBapaiWiBEtVzTpjsVK1eq46qeJjZrFRUij/yfo//WhArI/vaKDhxbbRqqdgsSzyntmKGsoCgUjLVe5riwFzpHDi1deRZMRiGRsZymKJdcSlukFTey5feoC9pVp9Pk/f7oMEiFNNw1JbAN2dR3GlTjly7/ZJBpCGcs1V7pTEPjObefdhf0o03/l5Ktk2th55bZ7vlm2RtXeU/5AAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACSElEQVR42tVVr4vjQBReWVkZGRsZGRlbWVkZOXY4FU4sYcUR1nVFIRWFrikloiwVhVQUuqLQioWuOBGxIuLE/gvfve+ls+yJ+8F1e3CFIdOZl/f9mDcvV1f/6y+89RGOQ9j7HqqnFP8M2L/zwRFOQoSzEP51V+du/WLA0SSCd+vpCG48xGWMbJUgLfsodkbX3D5jPwzYlj2kyz6CcYDOp44Cci1bD5CTwKKPh4PVNc69L57GmvtY185S7GwlqLObCpk43wn4rAczoRMDBZ+uDQqZH58yHfvHFPtdiuZliL8C5lyBOS8juL3eogWeP1pMNwZakBJHEq9NgeNzJkQSbDcWdT3E8ZChWhmJN/hlcTERrXVWcq1701VLOSco96g43yTIZ33UzVATM9773NZAthyg/ppjL8CMpxMkRTfq51yfb8CpBDtlBGMCrepTdSfjCFnZgpIA/89F9VzUzUXlgzyPYvFWriKVbgWsERdevxXqAI/COVELiam8Q3KN/B9u3jlC9SQRL2KEd4GScsqdxXrWUpBWzn66TtQtKq/WtlUnie2sLT4qbV4KtV7JSAyfWh9C5Lf33AHTQnuq/EpedjfCjOU4xD0jZNiMqJJWVyt7AhfFda6jWCZK8Afr/6ThENTdax6PI+WPfCSjqK0DGcYROKR6Y0ia75CIqj5kOKvzMRmPhiRYF60rbS/gvtaNtGV1TBzSYxyF6tTHdUJew1GgyQnqOl8sDed9S2YMYy/6LXjrDXRGWjIBO9edy34LfvpREjLn9P7vqg9kQ79shN4AAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACMUlEQVR42tVVrW/bQBTvnzBYGDpoaBgaaGhoaHrw0HTQKkuZByK5JKoCLCsgkg0iOSBSAiI5YMCgwKDAYKD07f3e+bwUbNW6dNIsPeWcD/8+73Jz879ezdlQvVNUrCJS+Yz+GXD3NKcDAx/2mtpvCfXPqb0/ah7zcUTqrSK9DqhhkHITU9el7ACvKyUk8HlzMjxaXq8G7JRCXfeUiu2Yx50FhCNtmwyOzKnII1nLsCvvBvYXPk3uJ1SwonQdMVhCejkTF9RqRi/fM0uGlbfnRMDgTj0Qy6qYo7FEQPKPgPU6FHCsvaVn1yufHKmkiiheTIUMnEk2Ib30mTjRczSuoEKunY+xNUz0l8B4sHc3EQAMVMZQzANAlQcUfvUpePBlrRgUD+371JaRCbhCGhZwGVu2jYWUxHS2cb0Cdsrihynd3t2St2DVXz6RqUJKlgGVUMM/KtnWYh1LHBgohM2OhI1AS0Evi+mcaB0J/m7H98UlEad+mk/Ju/8spAyr1Kw2Yrs7FOxoM3U5A7hmUvNVOD543KKsFOrFJZAZdovslLP5fRRuQAqOmDzkCSjdKy5XJPGUG1u+ciibcwPvF0zC7Q5MPZB6Zf1bl+tBynmiZI87tv+oButj2W5SMFYj1m/dYWSjAjmMqP6bAwq2YhAF8j2MYEbsRExSMLxf/VTaHLUU86pn/6j6ZLeVIwGFst+5J47cx/0JnaxSV67DHgTsDrjqEfzWhZz750yajiP4vc/5ASZt46J2q67KAAAAAElFTkSuQmCC + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAF0lEQVR42mNgGAWjYBSMglEwCkbBSAcACBAAAb475JcAAAAASUVORK5CYII= + + + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAF0lEQVR42mNgGAWjYBSMglEwCkbBSAcACBAAAb475JcAAAAASUVORK5CYII= + + + + diff --git a/samples/XML/xhtml-struct-1.mod b/samples/XML/xhtml-struct-1.mod new file mode 100644 index 00000000..08c8b1d7 --- /dev/null +++ b/samples/XML/xhtml-struct-1.mod @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + + + + + +]]> + + diff --git a/samples/XPages/navbar.xsp-config b/samples/XPages/navbar.xsp-config new file mode 100755 index 00000000..d32555bb --- /dev/null +++ b/samples/XPages/navbar.xsp-config @@ -0,0 +1,17 @@ + + + + http://www.ibm.com/xsp/custom + xc + + + navbar + navbar + /navbar.xsp + + + true + + + + diff --git a/samples/XPages/navbar.xsp.metadata b/samples/XPages/navbar.xsp.metadata new file mode 100755 index 00000000..120b7002 --- /dev/null +++ b/samples/XPages/navbar.xsp.metadata @@ -0,0 +1,22 @@ + + +20131221T175632,71-05 +20150305T194407,22-08 +20150305T194407,21-08 +20150305T194407,22-08 +20150305T162153,30-08 +CN=Eric McCormick/O=Eric McCormick +CN=Eric McCormick/O=Eric McCormick +gC~4; +navbar.xsp + + + + + +navbar.xsp +8.5.3 + + + + \ No newline at end of file diff --git a/samples/XS/CommonMark.xs b/samples/XS/CommonMark.xs new file mode 100644 index 00000000..6a0e321e --- /dev/null +++ b/samples/XS/CommonMark.xs @@ -0,0 +1,466 @@ +/* + * This software is copyright (C) by Nick Wellnhofer . + * + * This is free software; you can redistribute it and/or modify it under + * the same terms as the Perl 5 programming language system itself. + * + * Terms of the Perl programming language system itself + * + * a) the GNU General Public License as published by the Free + * Software Foundation; either version 1, or (at your option) any + * later version, or + * b) the "Artistic License" + */ + +/* + * Notes on memory management + * + * - A pointer to the Perl SV representing a node is stored in the + * user data slot of `struct cmark_node`, so there's a 1:1 mapping + * between Perl and C objects. + * - Every node SV keeps a reference to the parent SV. This is done + * indirectly by looking up the parent SV and increasing its refcount. + * - This makes sure that a document isn't freed if the last reference + * from Perl to the root node is dropped, as references to child nodes + * might still exist. + * - As a consequence, as long as a node is referenced from Perl, all its + * ancestor nodes will also be associated with a Perl object. + */ + +#define PERL_NO_GET_CONTEXT + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include +#include + +#if CMARK_VERSION < 0x001000 + #error libcmark 0.16.0 is required. +#endif + +/* Fix prefixes of render functions. */ +#define cmark_node_render_html cmark_render_html +#define cmark_node_render_xml cmark_render_xml +#define cmark_node_render_man cmark_render_man + +static SV* +S_create_or_incref_node_sv(pTHX_ cmark_node *node) { + SV *new_obj = NULL; + + while (node) { + SV *obj; + HV *stash; + + /* Look for existing object. */ + obj = (SV*)cmark_node_get_user_data(node); + + if (obj) { + /* Incref if found. */ + SvREFCNT_inc_simple_void_NN(obj); + if (!new_obj) { + new_obj = obj; + } + break; + } + + /* Create a new SV. */ + obj = newSViv(PTR2IV(node)); + cmark_node_set_user_data(node, obj); + if (!new_obj) { + new_obj = obj; + } + + /* + * Unfortunately, Perl doesn't offer an API function to bless an SV + * without a reference. The following code is mostly copied from + * sv_bless. + */ + SvOBJECT_on(obj); +#if (PERL_VERSION <= 16) + PL_sv_objcount++; +#endif + SvUPGRADE(obj, SVt_PVMG); + stash = gv_stashpvn("CommonMark::Node", 16, GV_ADD); + SvSTASH_set(obj, (HV*)SvREFCNT_inc(stash)); + + /* Recurse into parent. */ + node = cmark_node_parent(node); + } + + return new_obj; +} + +static void +S_decref_node_sv(pTHX_ cmark_node *node) { + SV *obj; + + if (!node) { + return; + } + + obj = (SV*)cmark_node_get_user_data(node); + if (!obj) { + /* Should never happen. */ + croak("Internal error: node SV not found"); + } + + SvREFCNT_dec_NN(obj); +} + +/* Find or create an SV for a cmark_node. */ +static SV* +S_node2sv(pTHX_ cmark_node *node) { + SV *obj; + + if (!node) { + return &PL_sv_undef; + } + + obj = S_create_or_incref_node_sv(aTHX_ node); + + return newRV_noinc(obj); +} + +/* Transfer refcount from a node to another. */ +static void +S_transfer_refcount(pTHX_ cmark_node *from, cmark_node *to) { + if (from != to) { + S_create_or_incref_node_sv(aTHX_ to); + S_decref_node_sv(aTHX_ from); + } +} + +/* Get C struct pointer from an SV argument. */ +static void* +S_sv2c(pTHX_ SV *sv, const char *class_name, STRLEN len, CV *cv, + const char *var_name) { + if (!SvROK(sv) || !sv_derived_from_pvn(sv, class_name, len, 0)) { + const char *sub_name = GvNAME(CvGV(cv)); + croak("%s: %s is not of type %s", sub_name, var_name, class_name); + } + return INT2PTR(void*, SvIV(SvRV(sv))); +} + + +MODULE = CommonMark PACKAGE = CommonMark PREFIX = cmark_ + +PROTOTYPES: DISABLE + +BOOT: + if (cmark_version != CMARK_VERSION) { + warn("Compiled against libcmark %s, but runtime version is %s", + CMARK_VERSION_STRING, cmark_version_string); + } + +char* +cmark_markdown_to_html(package, string) + SV *package = NO_INIT + SV *string +PREINIT: + STRLEN len; + const char *buffer; +CODE: + (void)package; + buffer = SvPVutf8(string, len); + RETVAL = cmark_markdown_to_html(buffer, len); +OUTPUT: + RETVAL + +cmark_node* +cmark_parse_document(package, string) + SV *package = NO_INIT + SV *string +PREINIT: + STRLEN len; + const char *buffer; +CODE: + (void)package; + buffer = SvPVutf8(string, len); + RETVAL = cmark_parse_document(buffer, len); +OUTPUT: + RETVAL + +cmark_node* +cmark_parse_file(package, file) + SV *package = NO_INIT + SV *file +PREINIT: + PerlIO *perl_io; + FILE *stream = NULL; +CODE: + (void)package; + perl_io = IoIFP(sv_2io(file)); + if (perl_io) { + stream = PerlIO_findFILE(perl_io); + } + if (!stream) { + croak("parse_file: file is not a file handle"); + } + RETVAL = cmark_parse_file(stream); +OUTPUT: + RETVAL + +int +cmark_version(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = cmark_version; +OUTPUT: + RETVAL + +const char* +cmark_version_string(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = cmark_version_string; +OUTPUT: + RETVAL + +int +cmark_compile_time_version(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = CMARK_VERSION; +OUTPUT: + RETVAL + +const char* +cmark_compile_time_version_string(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = CMARK_VERSION_STRING; +OUTPUT: + RETVAL + + +MODULE = CommonMark PACKAGE = CommonMark::Node PREFIX = cmark_node_ + +cmark_node* +new(package, type) + SV *package = NO_INIT + cmark_node_type type +CODE: + (void)package; + RETVAL = cmark_node_new(type); +OUTPUT: + RETVAL + +void +DESTROY(cmark_node *node) +CODE: + cmark_node *parent = cmark_node_parent(node); + if (parent) { + cmark_node_set_user_data(node, NULL); + S_decref_node_sv(aTHX_ parent); + } + else { + cmark_node_free(node); + } + +cmark_iter* +iterator(cmark_node *node) +CODE: + S_create_or_incref_node_sv(aTHX_ node); + RETVAL = cmark_iter_new(node); +OUTPUT: + RETVAL + +cmark_node* +interface_get_node(cmark_node *node) +INTERFACE: + cmark_node_next + cmark_node_previous + cmark_node_parent + cmark_node_first_child + cmark_node_last_child + +int +interface_get_int(cmark_node *node) +INTERFACE: + cmark_node_get_type + cmark_node_get_header_level + cmark_node_get_list_type + cmark_node_get_list_delim + cmark_node_get_list_start + cmark_node_get_list_tight + cmark_node_get_start_line + cmark_node_get_start_column + cmark_node_get_end_line + cmark_node_get_end_column + +NO_OUTPUT int +interface_set_int(cmark_node *node, int value) +INTERFACE: + cmark_node_set_header_level + cmark_node_set_list_type + cmark_node_set_list_delim + cmark_node_set_list_start + cmark_node_set_list_tight +POSTCALL: + if (!RETVAL) { + croak("%s: invalid operation", GvNAME(CvGV(cv))); + } + +const char* +interface_get_utf8(cmark_node *node) +INTERFACE: + cmark_node_get_type_string + cmark_node_get_literal + cmark_node_get_title + cmark_node_get_url + cmark_node_get_fence_info + +NO_OUTPUT int +interface_set_utf8(cmark_node *node, const char *value) +INTERFACE: + cmark_node_set_literal + cmark_node_set_title + cmark_node_set_url + cmark_node_set_fence_info +POSTCALL: + if (!RETVAL) { + croak("%s: invalid operation", GvNAME(CvGV(cv))); + } + +void +cmark_node_unlink(cmark_node *node) +PREINIT: + cmark_node *old_parent; +INIT: + old_parent = cmark_node_parent(node); +POSTCALL: + S_decref_node_sv(aTHX_ old_parent); + +NO_OUTPUT int +interface_move_node(cmark_node *node, cmark_node *other) +PREINIT: + cmark_node *old_parent; + cmark_node *new_parent; +INIT: + old_parent = cmark_node_parent(other); +INTERFACE: + cmark_node_insert_before + cmark_node_insert_after + cmark_node_prepend_child + cmark_node_append_child +POSTCALL: + if (!RETVAL) { + croak("%s: invalid operation", GvNAME(CvGV(cv))); + } + new_parent = cmark_node_parent(other); + S_transfer_refcount(aTHX_ old_parent, new_parent); + +char* +interface_render(cmark_node *root, long options = 0) +INTERFACE: + cmark_node_render_html + cmark_node_render_xml + cmark_node_render_man + + +MODULE = CommonMark PACKAGE = CommonMark::Iterator PREFIX = cmark_iter_ + +void +DESTROY(cmark_iter *iter) +CODE: + S_decref_node_sv(aTHX_ cmark_iter_get_node(iter)); + S_decref_node_sv(aTHX_ cmark_iter_get_root(iter)); + cmark_iter_free(iter); + +void +cmark_iter_next(cmark_iter *iter) +PREINIT: + I32 gimme; + cmark_node *old_node; + cmark_event_type ev_type; +PPCODE: + gimme = GIMME_V; + old_node = cmark_iter_get_node(iter); + ev_type = cmark_iter_next(iter); + + if (ev_type != CMARK_EVENT_DONE) { + cmark_node *node = cmark_iter_get_node(iter); + + ST(0) = sv_2mortal(newSViv((IV)ev_type)); + + if (gimme == G_ARRAY) { + SV *obj = S_create_or_incref_node_sv(aTHX_ node); + + /* A bit more efficient than S_transfer_refcount. */ + if (old_node != node) { + S_decref_node_sv(aTHX_ old_node); + SvREFCNT_inc_simple_void_NN(obj); + } + + ST(1) = sv_2mortal(newRV_noinc(obj)); + XSRETURN(2); + } + else { + S_transfer_refcount(aTHX_ old_node, node); + XSRETURN(1); + } + } + else { + S_decref_node_sv(aTHX_ old_node); + + if (gimme == G_ARRAY) { + XSRETURN_EMPTY; + } + else { + ST(0) = sv_2mortal(newSViv((IV)ev_type)); + XSRETURN(1); + } + } + +cmark_node* +cmark_iter_get_node(cmark_iter *iter) + +cmark_event_type +cmark_iter_get_event_type(cmark_iter *iter) + +void +cmark_iter_reset(iter, node, event_type) + cmark_iter *iter + cmark_node *node + cmark_event_type event_type +PREINIT: + cmark_node *old_node; +INIT: + old_node = cmark_iter_get_node(iter); + S_transfer_refcount(aTHX_ old_node, node); + + +MODULE = CommonMark PACKAGE = CommonMark::Parser PREFIX = cmark_parser_ + +cmark_parser* +cmark_parser_new(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = cmark_parser_new(); +OUTPUT: + RETVAL + +void +DESTROY(cmark_parser *parser) +CODE: + cmark_parser_free(parser); + +void +cmark_parser_feed(cmark_parser *parser, SV *string) +PREINIT: + STRLEN len; + const char *buffer; +CODE: + buffer = SvPVutf8(string, len); + cmark_parser_feed(parser, buffer, len); + +cmark_node* +cmark_parser_finish(cmark_parser *parser) + diff --git a/samples/YAML/Ansible.YAML-tmLanguage b/samples/YAML/Ansible.YAML-tmLanguage new file mode 100644 index 00000000..307696b3 --- /dev/null +++ b/samples/YAML/Ansible.YAML-tmLanguage @@ -0,0 +1,38 @@ +# [PackageDev] target_format: plist, ext: tmLanguage +--- +name: Ansible +scopeName: source.ansible +fileTypes: [] +uuid: 787ae642-b4ae-48b1-94e9-f935bec43a8f + +patterns: +- name: comment.line.number-sign.ansible + match: (?:^ *|\G *)((#).*) + captures: + '1': {name: comment.line.number-sign.ansible} + '2': {name: punctuation.definition.comment.line.ansible} + +- name: storage.type.ansible + match: (\{\{ *[^\{\}]+ *\}\})|(\$\{[^\{\}]+\}) + +- name: keyword.other.ansible + match: \- (name\:|include\:) (.*)|(^(- |\s*)\w+\:) + captures: + '2': {name: string.quoted.double.ansible} + +- name: variable.complex.ansible + contentName: string.other.ansible + begin: (\w+)(=)\"? + beginCaptures: + '1': {name: entity.other.attribute-name.ansible} + '2': {name: text} + end: \"?\s + patterns: + - include: $self + - name: constant.other.ansible + match: . + +- name: string.quoted.double.ansible + match: ^(\[[0-9a-zA-Z_-]+(((\:)children)*)\]) + captures: + '2': {name: variable.parameter.ansible} diff --git a/samples/YAML/HexInspect.sublime-syntax b/samples/YAML/HexInspect.sublime-syntax new file mode 100644 index 00000000..76f97bd1 --- /dev/null +++ b/samples/YAML/HexInspect.sublime-syntax @@ -0,0 +1,29 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: Hex Inspect +file_extensions: [] +hidden: true +scope: source.inspect +contexts: + main: + - match: '([\w\-]+)\s*(:)\s*' + captures: + 1: support.function.key.inspect + 2: support.function.punctuation.inspect + push: + - meta_scope: item.inspect + - match: '([\d\-\w]+)' + captures: + 1: data.inspect + pop: true + - match: '^(\s*[\w\-\s]+)\s*(:)\s*' + captures: + 1: keyword.title.inspect + 2: keyword.title-punctuation.inspect + push: + - meta_scope: item.inspect + - match: $ + pop: true + - match: '[\w\s]+' + scope: title-info.inspect diff --git a/samples/YAML/source.r-console.syntax b/samples/YAML/source.r-console.syntax new file mode 100644 index 00000000..5c3eec39 --- /dev/null +++ b/samples/YAML/source.r-console.syntax @@ -0,0 +1,16 @@ +--- +name: R Console +fileTypes: [] + +scopeName: source.r-console +uuid: F629C7F3-823B-4A4C-8EEE-9971490C5710 +patterns: +- name: source.r.embedded.r-console + begin: "^> " + beginCaptures: + "0": + name: punctuation.section.embedded.r-console + end: \n|\z + patterns: + - include: source.r +keyEquivalent: ^~R diff --git a/samples/YANG/sfc-lisp-impl.yang b/samples/YANG/sfc-lisp-impl.yang new file mode 100644 index 00000000..761d9829 --- /dev/null +++ b/samples/YANG/sfc-lisp-impl.yang @@ -0,0 +1,55 @@ +module sfc-lisp-impl { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:sfc-lisp:impl"; + prefix "sfc-lisp-impl"; + + import config { prefix config; revision-date 2013-04-05; } + import rpc-context { prefix rpcx; revision-date 2013-06-17; } + import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; } + + + description + "This module contains the base YANG definitions for + sfc-lisp implementation."; + + revision "2015-04-27" { + description + "Initial revision."; + } + + // This is the definition of the service implementation as a module identity + identity sfc-lisp-impl { + base config:module-type; + + // Specifies the prefix for generated java classes. + config:java-name-prefix SfcLisp; + } + + + // Augments the 'configuration' choice node under modules/module. + augment "/config:modules/config:module/config:configuration" { + case sfc-lisp-impl { + when "/config:modules/config:module/config:type = 'sfc-lisp-impl'"; + + //wires in the data-broker service + container data-broker { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity mdsal:binding-async-data-broker; + } + } + } + + container rpc-registry { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity mdsal:binding-rpc-registry; + } + } + } + } + } +} \ No newline at end of file diff --git a/samples/desktop/example.desktop b/samples/desktop/example.desktop new file mode 100644 index 00000000..81221d99 --- /dev/null +++ b/samples/desktop/example.desktop @@ -0,0 +1,21 @@ +# http://standards.freedesktop.org/desktop-entry-spec/latest/apa.html + +[Desktop Entry] +Version=1.0 +Type=Application +Name=Foo Viewer +Comment=The best viewer for Foo objects available! +TryExec=fooview +Exec=fooview %F +Icon=fooview +MimeType=image/x-foo; +Actions=Gallery;Create; + +[Desktop Action Gallery] +Exec=fooview --gallery +Name=Browse Gallery + +[Desktop Action Create] +Exec=fooview --create-new +Name=Create a new Foo! +Icon=fooview-new \ No newline at end of file diff --git a/samples/eC/Designer.ec b/samples/eC/Designer.ec new file mode 100644 index 00000000..38ca035f --- /dev/null +++ b/samples/eC/Designer.ec @@ -0,0 +1,337 @@ +import "ide" + +class Designer : DesignerBase +{ + ~Designer() + { + if(GetActiveDesigner() == this) + { + SetActiveDesigner(null); + } + if(classDesigner) + delete classDesigner; + } + + // *** DesignerBase Implementation *** + + void ModifyCode() + { + codeEditor.ModifyCode(); + } + + void UpdateProperties() + { + codeEditor.DesignerModifiedObject(); + } + + void CodeAddObject(Instance instance, ObjectInfo * object) + { + codeEditor.AddObject(instance, object); + } + + void SheetAddObject(ObjectInfo object) + { + codeEditor.sheet.AddObject(object, object.name, typeData, true); //className, true); + } + + void AddToolBoxClass(Class _class) + { + ((IDEWorkSpace)master).toolBox.AddControl(_class); + } + + void AddDefaultMethod(Instance instance, Instance classInstance) + { + Class _class = instance._class; + Method defaultMethod = null; + + for( ; _class; _class = _class.base) + { + Method method; + int minID = MAXINT; + for(method = (Method)_class.methods.first; method; method = (Method)((BTNode)method).next) + { + if(method.type == virtualMethod) + { + if(!method.dataType) + method.dataType = ProcessTypeString(method.dataTypeString, false); + if(method.vid < minID && (instance == classInstance || (method.dataType.thisClass && eClass_IsDerived(classInstance._class, method.dataType.thisClass.registered)))) + { + defaultMethod = method; + minID = method.vid; + } + } + } + if(defaultMethod) + break; + } + codeEditor.AddMethod(defaultMethod); + } + + bool ObjectContainsCode(ObjectInfo object) + { + // Confirmation if control contains code + if(object.instCode) + { + MembersInit members; + if(object.instCode.members) + { + for(members = object.instCode.members->first; members; members = members.next) + { + if(members.type == methodMembersInit) + { + //if(!Code_IsFunctionEmpty(members.function)) + { + return true; + } + } + } + } + } + return false; + } + + void DeleteObject(ObjectInfo object) + { + if(codeEditor) + codeEditor.DeleteObject(object); + } + + void RenameObject(ObjectInfo object, const char * name) + { + if(object && (name || !object.classDefinition)) + codeEditor.RenameObject(object, name); + } + + bool FindObject(Instance * object, const char * string) + { + ObjectInfo classObject; + for(classObject = codeEditor.classes.first; classObject; classObject = classObject.next) + { + ObjectInfo check; + if(classObject.name && !strcmp(string, classObject.name)) + { + *object = classObject.instance; + break; + } + for(check = classObject.instances.first; check; check = check.next) + { + if(check.name && !strcmp(string, check.name)) + { + *object = check.instance; + break; + } + } + if(check) + return true; + } + return false; + } + + void SelectObjectFromDesigner(ObjectInfo object) + { + codeEditor.SelectObjectFromDesigner(object); + } + + borderStyle = sizable; + isActiveClient = true; + hasVertScroll = true; + hasHorzScroll = true; + hasClose = true; + hasMaximize = true; + hasMinimize = true; + text = $"Designer"; + menu = Menu { }; + anchor = Anchor { left = 300, right = 150, top = 0, bottom = 0 }; + + ToolBox toolBox; + CodeEditor codeEditor; + + Menu fileMenu { menu, $"File", f }; + MenuItem fileSaveItem + { + fileMenu, $"Save", s, ctrlS; + bool NotifySelect(MenuItem selection, Modifiers mods) + { + return codeEditor.MenuFileSave(selection, mods); + } + }; + MenuItem fileSaveAsItem + { + fileMenu, $"Save As...", a; + bool NotifySelect(MenuItem selection, Modifiers mods) + { + return codeEditor.MenuFileSaveAs(selection, mods); + } + }; + bool debugClosing; + + bool OnClose(bool parentClosing) + { + if(!parentClosing) + { + if(codeEditor && codeEditor.inUseDebug && !debugClosing) + { + debugClosing = true; + closing = false; + if(CloseConfirmation(false)) + { + visible = false; + if(modifiedDocument) + OnFileModified({ modified = true }, null); + } + debugClosing = false; + return false; + } + if(codeEditor && !codeEditor.closing && !debugClosing) + { + if(!codeEditor.visible) + { + if(!codeEditor.Destroy(0)) + return false; + else + codeEditor = null; + } + else + { + visible = false; + return false; + } + } + } + return true; + } + + bool OnActivate(bool active, Window previous, bool * goOnWithActivation, bool direct) + { + if(active) + { + codeEditor.EnsureUpToDate(); + codeEditor.fixCaret = true; + /* + if(classDesigner) + classDesigner.Activate(); + */ + } + return true; + } + + bool OnKeyHit(Key key, unichar ch) + { + return codeEditor.sheet.OnKeyHit(key, ch); + } + + watch(modifiedDocument) + { + fileSaveItem.disabled = !modifiedDocument && codeEditor.fileName; + }; + + // *** METHODS ACCESSED FROM PROPERTY SHEET/TOOLBOX/CODE EDITOR *** + void Reset() + { + if(classDesigner) + { + classDesigner.Reset(); + classDesigner.SelectObject(null, null); + classDesigner.Destroy(0); + delete classDesigner; + } + } + + void FillToolBox() + { + if(this && classDesigner) + classDesigner.ListToolBoxClasses(this); + } + + void SelectObject(ObjectInfo object, Instance instance) + { + ClassDesignerBase classDesigner = this.classDesigner; +#ifdef _DEBUG + if(instance && instance._class.module.application != codeEditor.privateModule) + printf("warning: SelectObject: instance._class.module.application != codeEditor.privateModule\n"); +#endif + if(!classDesigner || !instance || classDesigner._class != (Class)eInstance_GetDesigner(instance)) + { + if(classDesigner) + { + classDesigner.SelectObject(null, null); + classDesigner.Destroy(0); + classDesigner = null; + delete this.classDesigner; + } + if(instance) + { + this.classDesigner = classDesigner = eInstance_New(eInstance_GetDesigner(instance)); + incref classDesigner; + //if(!classDesigner.parent) + { + classDesigner.parent = this; + classDesigner.anchor = Anchor { left = 0, right = 0, top = 0, bottom = 0 }; + } + classDesigner.Create(); + } + } + // Call class editor SelectObject + if(classDesigner) + classDesigner.SelectObject(object, instance); + } + + void AddObject() + { + // Call class editor AddObject + if(classDesigner) + classDesigner.AddObject(); + if(visible) + Activate(); + else + codeEditor.Activate(); + } + + void CreateObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass) + { + subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance); + + // Call class editor CreateObject + if(designerClass) + designerClass.CreateObject(this, instance, object, isClass, iclass); + } + + void ::PostCreateObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass) + { + subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance); + + // Call class editor PostCreateObject + if(designerClass) + designerClass.PostCreateObject(instance, object, isClass, iclass); + } + + void ::DroppedObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass) + { + subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance); + + // Call class editor PostCreateObject + if(designerClass) + designerClass.DroppedObject(instance, object, isClass, iclass); + } + + void PrepareTestObject(Instance instance) + { + subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance); + if(designerClass) + designerClass.PrepareTestObject(this, instance); + } + + void ::DestroyObject(Instance instance) + { + subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance); + if(designerClass) + designerClass.DestroyObject(instance); + } + + void ::FixProperty(Property prop, Instance instance) + { + subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance); + if(designerClass) + designerClass.FixProperty(prop, instance); + } +} diff --git a/samples/reStructuredText/HACKING.rst.txt b/samples/reStructuredText/HACKING.rst.txt new file mode 100644 index 00000000..6e078204 --- /dev/null +++ b/samples/reStructuredText/HACKING.rst.txt @@ -0,0 +1,329 @@ +Contributing to SciPy +===================== + +This document aims to give an overview of how to contribute to SciPy. It +tries to answer commonly asked questions, and provide some insight into how the +community process works in practice. Readers who are familiar with the SciPy +community and are experienced Python coders may want to jump straight to the +`git workflow`_ documentation. + + +Contributing new code +--------------------- + +If you have been working with the scientific Python toolstack for a while, you +probably have some code lying around of which you think "this could be useful +for others too". Perhaps it's a good idea then to contribute it to SciPy or +another open source project. The first question to ask is then, where does +this code belong? That question is hard to answer here, so we start with a +more specific one: *what code is suitable for putting into SciPy?* +Almost all of the new code added to scipy has in common that it's potentially +useful in multiple scientific domains and it fits in the scope of existing +scipy submodules. In principle new submodules can be added too, but this is +far less common. For code that is specific to a single application, there may +be an existing project that can use the code. Some scikits (`scikit-learn`_, +`scikits-image`_, `statsmodels`_, etc.) are good examples here; they have a +narrower focus and because of that more domain-specific code than SciPy. + +Now if you have code that you would like to see included in SciPy, how do you +go about it? After checking that your code can be distributed in SciPy under a +compatible license (see FAQ for details), the first step is to discuss on the +scipy-dev mailing list. All new features, as well as changes to existing code, +are discussed and decided on there. You can, and probably should, already +start this discussion before your code is finished. + +Assuming the outcome of the discussion on the mailing list is positive and you +have a function or piece of code that does what you need it to do, what next? +Before code is added to SciPy, it at least has to have good documentation, unit +tests and correct code style. + +1. Unit tests + In principle you should aim to create unit tests that exercise all the code + that you are adding. This gives some degree of confidence that your code + runs correctly, also on Python versions and hardware or OSes that you don't + have available yourself. An extensive description of how to write unit + tests is given in the NumPy `testing guidelines`_. + +2. Documentation + Clear and complete documentation is essential in order for users to be able + to find and understand the code. Documentation for individual functions + and classes -- which includes at least a basic description, type and + meaning of all parameters and returns values, and usage examples in + `doctest`_ format -- is put in docstrings. Those docstrings can be read + within the interpreter, and are compiled into a reference guide in html and + pdf format. Higher-level documentation for key (areas of) functionality is + provided in tutorial format and/or in module docstrings. A guide on how to + write documentation is given in `how to document`_. + +3. Code style + Uniformity of style in which code is written is important to others trying + to understand the code. SciPy follows the standard Python guidelines for + code style, `PEP8`_. In order to check that your code conforms to PEP8, + you can use the `pep8 package`_ style checker. Most IDEs and text editors + have settings that can help you follow PEP8, for example by translating + tabs by four spaces. Using `pyflakes`_ to check your code is also a good + idea. + +At the end of this document a checklist is given that may help to check if your +code fulfills all requirements for inclusion in SciPy. + +Another question you may have is: *where exactly do I put my code*? To answer +this, it is useful to understand how the SciPy public API (application +programming interface) is defined. For most modules the API is two levels +deep, which means your new function should appear as +``scipy.submodule.my_new_func``. ``my_new_func`` can be put in an existing or +new file under ``/scipy//``, its name is added to the ``__all__`` +dict in that file (which lists all public functions in the file), and those +public functions are then imported in ``/scipy//__init__.py``. Any +private functions/classes should have a leading underscore (``_``) in their +name. A more detailed description of what the public API of SciPy is, is given +in `SciPy API`_. + +Once you think your code is ready for inclusion in SciPy, you can send a pull +request (PR) on Github. We won't go into the details of how to work with git +here, this is described well in the `git workflow`_ section of the NumPy +documentation and in the Github help pages. When you send the PR for a new +feature, be sure to also mention this on the scipy-dev mailing list. This can +prompt interested people to help review your PR. Assuming that you already got +positive feedback before on the general idea of your code/feature, the purpose +of the code review is to ensure that the code is correct, efficient and meets +the requirements outlined above. In many cases the code review happens +relatively quickly, but it's possible that it stalls. If you have addressed +all feedback already given, it's perfectly fine to ask on the mailing list +again for review (after a reasonable amount of time, say a couple of weeks, has +passed). Once the review is completed, the PR is merged into the "master" +branch of SciPy. + +The above describes the requirements and process for adding code to SciPy. It +doesn't yet answer the question though how decisions are made exactly. The +basic answer is: decisions are made by consensus, by everyone who chooses to +participate in the discussion on the mailing list. This includes developers, +other users and yourself. Aiming for consensus in the discussion is important +-- SciPy is a project by and for the scientific Python community. In those +rare cases that agreement cannot be reached, the `maintainers`_ of the module +in question can decide the issue. + + +Contributing by helping maintain existing code +---------------------------------------------- + +The previous section talked specifically about adding new functionality to +SciPy. A large part of that discussion also applies to maintenance of existing +code. Maintenance means fixing bugs, improving code quality or style, +documenting existing functionality better, adding missing unit tests, keeping +build scripts up-to-date, etc. The SciPy `Trac`_ bug tracker contains all +reported bugs, build/documentation issues, etc. Fixing issues described in +Trac tickets helps improve the overall quality of SciPy, and is also a good way +of getting familiar with the project. You may also want to fix a bug because +you ran into it and need the function in question to work correctly. + +The discussion on code style and unit testing above applies equally to bug +fixes. It is usually best to start by writing a unit test that shows the +problem, i.e. it should pass but doesn't. Once you have that, you can fix the +code so that the test does pass. That should be enough to send a PR for this +issue. Unlike when adding new code, discussing this on the mailing list may +not be necessary - if the old behavior of the code is clearly incorrect, no one +will object to having it fixed. It may be necessary to add some warning or +deprecation message for the changed behavior. This should be part of the +review process. + + +Other ways to contribute +------------------------ + +There are many ways to contribute other than contributing code. Participating +in discussions on the scipy-user and scipy-dev *mailing lists* is a contribution +in itself. The `scipy.org`_ *website* contains a lot of information on the +SciPy community and can always use a new pair of hands. A redesign of this +website is ongoing, see `scipy.github.com`_. The redesigned website is a +static site based on Sphinx, the sources for it are +also on Github at `scipy.org-new`_. + +The SciPy *documentation* is constantly being improved by many developers and +users. You can contribute by sending a PR on Github that improves the +documentation, but there's also a `documentation wiki`_ that is very convenient +for making edits to docstrings (and doesn't require git knowledge). Anyone can +register a username on that wiki, ask on the scipy-dev mailing list for edit +rights and make edits. The documentation there is updated every day with the +latest changes in the SciPy master branch, and wiki edits are regularly +reviewed and merged into master. Another advantage of the documentation wiki +is that you can immediately see how the reStructuredText (reST) of docstrings +and other docs is rendered as html, so you can easily catch formatting errors. + +Code that doesn't belong in SciPy itself or in another package but helps users +accomplish a certain task is valuable. `SciPy Central`_ is the place to share +this type of code (snippets, examples, plotting code, etc.). + + +Useful links, FAQ, checklist +---------------------------- + +Checklist before submitting a PR +```````````````````````````````` + + - Are there unit tests with good code coverage? + - Do all public function have docstrings including examples? + - Is the code style correct (PEP8, pyflakes) + - Is the new functionality tagged with ``.. versionadded:: X.Y.Z`` (with + X.Y.Z the version number of the next release - can be found in setup.py)? + - Is the new functionality mentioned in the release notes of the next + release? + - Is the new functionality added to the reference guide? + - In case of larger additions, is there a tutorial or more extensive + module-level description? + - In case compiled code is added, is it integrated correctly via setup.py + (and preferably also Bento/Numscons configuration files)? + - If you are a first-time contributor, did you add yourself to THANKS.txt? + Please note that this is perfectly normal and desirable - the aim is to + give every single contributor credit, and if you don't add yourself it's + simply extra work for the reviewer (or worse, the reviewer may forget). + - Did you check that the code can be distributed under a BSD license? + + +Useful SciPy documents +`````````````````````` + + - The `how to document`_ guidelines + - NumPy/SciPy `testing guidelines`_ + - `SciPy API`_ + - SciPy `maintainers`_ + - NumPy/SciPy `git workflow`_ + + +FAQ +``` + +*I based my code on existing Matlab/R/... code I found online, is this OK?* + +It depends. SciPy is distributed under a BSD license, so if the code that you +based your code on is also BSD licensed or has a BSD-compatible license (MIT, +Apache, ...) then it's OK. Code which is GPL-licensed, has no clear license, +requires citation or is free for academic use only can't be included in SciPy. +Therefore if you copied existing code with such a license or made a direct +translation to Python of it, your code can't be included. See also `license +compatibility`_. + + +*How do I set up SciPy so I can edit files, run the tests and make commits?* + +The simplest method is setting up an in-place build. To create your local git +repo and do the in-place build:: + + $ git clone https://github.com/scipy/scipy.git scipy + $ cd scipy + $ python setup.py build_ext -i + +Then you need to either set up a symlink in your site-packages or add this +directory to your PYTHONPATH environment variable, so Python can find it. Some +IDEs (Spyder for example) have utilities to manage PYTHONPATH. On Linux and OS +X, you can for example edit your .bash_login file to automatically add this dir +on startup of your terminal. Add the line:: + + export PYTHONPATH="$HOME/scipy:${PYTHONPATH}" + +Alternatively, to set up the symlink, use (prefix only necessary if you want to +use your local instead of global site-packages dir):: + + $ python setupegg.py develop --prefix=${HOME} + +To test that everything works, start the interpreter (not inside the scipy/ +source dir) and run the tests:: + + $ python + >>> import scipy as sp + >>> sp.test() + +Now editing a Python source file in SciPy allows you to immediately test and +use your changes, by simply restarting the interpreter. + +Note that while the above procedure is the most straightforward way to get +started, you may want to look into using Bento or numscons for faster and more +flexible building, or virtualenv to maintain development environments for +multiple Python versions. + + +*How do I set up a development version of SciPy in parallel to a released +version that I use to do my job/research?* + +One simple way to achieve this is to install the released version in +site-packages, by using a binary installer or pip for example, and set up the +development version with an in-place build in a virtualenv. First install +`virtualenv`_ and `virtualenvwrapper`_, then create your virtualenv (named +scipy-dev here) with:: + + $ mkvirtualenv scipy-dev + +Now, whenever you want to switch to the virtual environment, you can use the +command ``workon scipy-dev``, while the command ``deactivate`` exits from the +virtual environment and brings back your previous shell. With scipy-dev +activated, follow the in-place build with the symlink install above to actually +install your development version of SciPy. + + +*Can I use a programming language other than Python to speed up my code?* + +Yes. The languages used in SciPy are Python, Cython, C, C++ and Fortran. All +of these have their pros and cons. If Python really doesn't offer enough +performance, one of those languages can be used. Important concerns when +using compiled languages are maintainability and portability. For +maintainability, Cython is clearly preferred over C/C++/Fortran. Cython and C +are more portable than C++/Fortran. A lot of the existing C and Fortran code +in SciPy is older, battle-tested code that was only wrapped in (but not +specifically written for) Python/SciPy. Therefore the basic advice is: use +Cython. If there's specific reasons why C/C++/Fortran should be preferred, +please discuss those reasons first. + + +*There's overlap between Trac and Github, which do I use for what?* + +Trac_ is the bug tracker, Github_ the code repository. Before the SciPy code +repository moved to Github, the preferred way to contribute code was to create +a patch and attach it to a Trac ticket. The overhead of this approach is much +larger than sending a PR on Github, so please don't do this anymore. Use Trac +for bug reports, Github for patches. + + +.. _scikit-learn: http://scikit-learn.org + +.. _scikits-image: http://scikits-image.org/ + +.. _statsmodels: http://statsmodels.sourceforge.net/ + +.. _testing guidelines: https://github.com/numpy/numpy/blob/master/doc/TESTS.rst.txt + +.. _how to document: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt + +.. _PEP8: http://www.python.org/dev/peps/pep-0008/ + +.. _pep8 package: http://pypi.python.org/pypi/pep8 + +.. _pyflakes: http://pypi.python.org/pypi/pyflakes + +.. _SciPy API: http://docs.scipy.org/doc/scipy/reference/api.html + +.. _git workflow: http://docs.scipy.org/doc/numpy/dev/gitwash/index.html + +.. _maintainers: https://github.com/scipy/scipy/blob/master/doc/MAINTAINERS.rst.txt + +.. _Trac: http://projects.scipy.org/scipy/timeline + +.. _Github: https://github.com/scipy/scipy + +.. _scipy.org: http://scipy.org/ + +.. _scipy.github.com: http://scipy.github.com/ + +.. _scipy.org-new: https://github.com/scipy/scipy.org-new + +.. _documentation wiki: http://docs.scipy.org/scipy/Front%20Page/ + +.. _SciPy Central: http://scipy-central.org/ + +.. _license compatibility: http://www.scipy.org/License_Compatibility + +.. _doctest: http://www.doughellmann.com/PyMOTW/doctest/ + +.. _virtualenv: http://www.virtualenv.org/ + +.. _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/ + diff --git a/samples/wisp/intro.wisp b/samples/wisp/intro.wisp index 6b817dac..b222b6e2 100644 --- a/samples/wisp/intro.wisp +++ b/samples/wisp/intro.wisp @@ -258,7 +258,7 @@ My name is wisp!" ;; evaluating the reference to the value of the corresponding variable. foo -;; If you wish to refer to the literal symbol, rather then reference you +;; If you wish to refer to the literal symbol, rather than reference you ;; could use (quote foo) ;; or more usually diff --git a/samples/xBase/sample.ch b/samples/xBase/sample.ch new file mode 100644 index 00000000..308f1e1c --- /dev/null +++ b/samples/xBase/sample.ch @@ -0,0 +1,30 @@ +#ifndef __HARBOUR__ + #ifndef __XPP__ + #ifndef __CLIP__ + #ifndef FlagShip + #define __CLIPPER__ + #endif + #endif + #endif +#endif + +/* File create flags */ +#define FC_NORMAL 0 /* No file attributes are set */ +#define FC_READONLY 1 +#define FC_HIDDEN 2 +#define FC_SYSTEM 4 + +// New-style comment +#command SET DELETED => Set( _SET_DELETED, <(x)> ) +#command SET DELETED () => Set( _SET_DELETED, ) +#command @ , SAY [PICTURE ] [COLOR ] => ; + DevPos( , ) ; DevOutPict( , [, ] ) + +#command ENDIF <*x*> => endif + +#ifdef __CLIPPER__ + #xtranslate hb_MemoWrit( [] ) => MemoWrit( ) + #xtranslate hb_dbExists( ) => File( ) + #xtranslate hb_dbPack() => __dbPack() + #xtranslate hb_default( @, ) => iif( StrTran( ValType( ), "M", "C" ) == StrTran( ValType( ), "M", "C" ),, := , ) +#endif diff --git a/samples/xBase/sample.prg b/samples/xBase/sample.prg new file mode 100644 index 00000000..33d7a1e6 --- /dev/null +++ b/samples/xBase/sample.prg @@ -0,0 +1,167 @@ +#require "hbtest" + +#pragma linenumber=on + +#include "hbclass.ch" + +#stdout "stdout" +#warning "warning" + +#define MYCONST 100 +#undef MYCONST + +#ifdef __HARBOUR__ +#else +#endif + +#if defined( __HARBOUR__ ) .OR. .T. +#elif defined( __HARBOUR__ ) +#endif + +THREAD STATIC t_var := "thread" + +REQUEST AllTrim +ANNOUNCE my_module + +PROCEDURE Main() + + MEMVAR p_var, m_var + FIELD fld + + STATIC s_test := "static" + LOCAL o := TTest():New( "one", "two" ), tmp + LOCAL oError + LOCAL bBlock := {| tmp | QOut( tmp ) } + LOCAL hHash := { "name" => "value", "name2" => "value2", 2 => 1 } + PUBLIC p_var := "public" + PRIVATE m_var := "private" + PARAMETERS p1 + + Set( _SET_DATEFORMAT, "yyyy-mm-dd" ) + + CLS + @ 10, 10 SAY "Hello world!" + + ? hb_ValToExp( o ) + ? m->p1 + ? hHash[ "name" ], hHash[ 2 ] + + FOR tmp := 1 TO 10 STEP 2 + ? tmp + NEXT + + FOR EACH tmp IN { "a", "b" } DESCEND + ? tmp + NEXT + + ? 10.01 + 2 - 3 / 4 * 5 ^ 6 ** 1 + ? 2 < 1, 2 > 1, 2 >= 1, 2 <= 1, 2 == 1, 2 = 1, 2 != 1, 2 <> 1, 2 # 1 + ? -( 1 + 2 ), "a" $ "ab", 10 % 2 + + tmp := 0 + DO WHILE tmp < 2 + ? tmp++ + ENDDO + + tmp := 0 + WHILE tmp < 2 + ? ++tmp + IF tmp >= 0xFF + LOOP + ENDIF + EXIT + ENDDO + + --tmp + tmp-- + + IF tmp < -10.0 + ? NIL + ELSEIF .F. + ? 0d19800101 + ELSE + ? "string" + ENDIF + + DO CASE + CASE tmp == 1 + ? "A" + OTHERWISE + ? "B" + ENDCASE + + SWITCH tmp + CASE 1 + ? "A" + EXIT + OTHERWISE + ? "B" + ENDSWITCH + + BEGIN SEQUENCE WITH __BreakBlock() + BREAK + RECOVER USING oError + END /* SEQUENCE */ + + local_func( @hHash ) + + RETURN + +INIT PROCEDURE init_proc() + RETURN + +EXIT PROCEDURE exit_proc() + RETURN + +PROCEDURE returning_nothing() + RETURN + +FUNCTION pub_func() + RETURN .T. + +STATIC FUNCTION local_func() + RETURN .F. + +CREATE CLASS TTest INHERIT TParent + VAR One, Two + METHOD New( One ) + METHOD Test() INLINE QOut( "Hello" ) + METHOD MethProc() +ENDCLASS + +METHOD PROCEDURE MethProc() + RETURN + +METHOD New( One ) CLASS TTest + + ::super:New() + ::One := One + + RETURN Self + +CREATE CLASS TParent + VAR One + METHOD New() +ENDCLASS + +METHOD New() CLASS TParent + ? "TParent:New()" + RETURN Self + +// This is a comment +/* This is a comment */ +/* This is +a comment */ +* This is a comment +&& This is a comment +NOTE This is a comment +note This is a comment +NOTE + +FUNCTION pub_func2() + ? "hello world!" + ? 'hello world!' + ? "hello\world!" + ? "\" + ? "hello world!" + RETURN .T. diff --git a/samples/xBase/sample.prw b/samples/xBase/sample.prw new file mode 100755 index 00000000..996e0218 --- /dev/null +++ b/samples/xBase/sample.prw @@ -0,0 +1,512 @@ + +/** + * This is a sample file for Linguist. + * It's written in AdvPL, a xBase Language. + * + * Author: Arthur Helfstein Fragoso + * + * This script has the specific use of integrating between a financial institution + * and other two companies in the process of creating Installment Bills for + * customers. + * + * The functions are called from the ERP Protheus TOTVS. + * + **/ + + + +#Include "TOPCONN.ch" +#include "tbiconn.ch" +#Include "Protheus.ch" +#Include "rwmake.ch" +#Include "FileIO.ch" +#Include "json.ch" +#Include "utils.ch" + + +//////////////////////// +// Faturando (Reparcelando) +// FA280 +// FA280_01 +// + +User Function FA280() + + //Executado uma vez para cada parcela + + If cEmpAnt == '06' + + SE5->(dbSelectArea("SE5")) + + cSet3Filter := "SE5->E5_FATURA == SE1->E1_NUM" + + SE5->(dbSetFilter( {|| &cSet3Filter }, cSet3Filter )) + SE5->(dbGoTOP()) + + aOrig06Tit := {} // = Todos os Titulos que ser�o reparcelados + nTotal := 0 + + While SE5->(!EOF()) + AADD(aOrig06Tit, {SE5->E5_PREFIXO, SE5->E5_NUMERO, SE5->E5_VALOR}) + nTotal += SE5->E5_VALOR + SE5->(dbSkip()) + End + + aNovoTitulo:= {;//{"E1_FILIAL" ,SE1ORIG->E1_FILIAL ,Nil},; + ;//{"E1_PREFIXO" ,SE1->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1->E1_NUM ,Nil},; + {"E1_TIPO" ,SE1->E1_TIPO ,Nil},; + {"E1_PARCELA" ,SE1->E1_PARCELA ,Nil},; + {"E1_NATUREZ" ,SE1->E1_NATUREZ ,Nil},; + {"E1_CLIENTE" ,SE1->E1_CLIENTE ,Nil},; + {"E1_LOJA" ,SE1->E1_LOJA ,Nil},; + {"E1_NRDOC" ,SE1->E1_NRDOC ,Nil},; + ;//{"E1_X_COD" ,SE1->E1_NATUREZ ,Nil},; + {"E1_EMISSAO" ,SE1->E1_EMISSAO ,Nil},; + {"E1_VENCTO" ,SE1->E1_VENCTO ,Nil},; + {"E1_VENCREA" ,SE1->E1_VENCREA ,Nil},; + ;//{"E1_VALOR" ,SE1->E1_VALOR ,Nil},; + ;//{"E1_SALDO" ,SE1->E1_SALDO ,Nil},; + ;//{"E1_VLCRUZ" ,SE1->E1_VLCRUZ ,Nil},; + {"E1_PORTADO" ,SE1->E1_PORTADO ,Nil},; + {"E1_FATURA" ,SE1->E1_FATURA ,Nil},; + {"E1_X_DTPAV" ,SE1->E1_X_DTPAV ,Nil},; + {"E1_X_DTSAV" ,SE1->E1_X_DTSAV ,Nil},; + {"E1_X_DTTAV" ,SE1->E1_X_DTTAV ,Nil},; + {"E1_X_DTSPC" ,SE1->E1_X_DTSPC ,Nil},; + {"E1_X_DTPRO" ,SE1->E1_X_DTPRO ,Nil},; + {"E1_NUMBCO" ,SE1->E1_NUMBCO ,Nil},; + {"E1_X_DUDME" ,SE1->E1_X_DUDME ,Nil},; + {"E1_X_TIPOP" ,SE1->E1_X_TIPOP ,Nil},; + {"E1_X_DTCAN" ,SE1->E1_X_DTCAN ,Nil},; + {"E1_X_MOTIV" ,SE1->E1_X_MOTIV ,Nil},; + {"E1_X_DESPC" ,SE1->E1_X_DESPC ,Nil},; + {"E1_NUMNOTA" ,SE1->E1_NUMNOTA ,Nil},; + {"E1_SERIE" ,SE1->E1_SERIE ,Nil},; + {"E1_X_DEPRO" ,SE1->E1_X_DEPRO ,Nil},; + {"E1_X_TPPAI" ,SE1->E1_X_TPPAI ,Nil},; + {"E1_X_CGC" ,SE1->E1_X_CGC ,Nil},; + {"E1_XTPEMP" ,SE1->E1_XTPEMP ,Nil},; + {"E1_X_CTRIM" ,SE1->E1_X_CTRIM ,Nil}} + + StartJob("U_FA280_01",getenvserver(),.T., SE1->E1_PREFIXO ,SE1->E1_NUM, SE1->E1_TIPO, SE1->E1_VALOR, aOrig06Tit, nTotal, SE1->E1_PARCELA, aNovoTitulo) + + SE5->(dbClearFilter()) + + EndIf + +Return nil + + +User Function FA280_01(cE1PREFIXO, cE1NUM, cE1TIPO, nE1Valor, aOrig06Tit, nTotal, cE1PARCELA, aNovoTitulo) + Local nValPar := nil + Local aTit05 := {} + + RpcSetType(3) // Nao consome licensa + + //Prepare Environment Empresa "01" Filial '0102' + // Muda de empresa + While !RpcSetEnv('01', '0102',,,,GetEnvServer(),{}) + Sleep(400) + End + + nFileLog := u_OpenLog("\Logs\FA280_"+dToS(dDataBase)+".log") + + fWrite(nFileLog,"----- FA280 -----"+CRLF) + + fWrite(nFileLog,cE1NUM+CRLF) + + nParcelas := round(nTotal/nE1Valor, 0) + + cUltima := '0'+ chr(64+nParcelas) + + fWrite(nFileLog,"valor das parcelas: "+ cvaltochar(nE1Valor) +CRLF) + fWrite(nFileLog,"parcelas: "+ cvaltochar(nParcelas) +CRLF) + fWrite(nFileLog,"parcela atual: "+ cE1PARCELA +CRLF) + fWrite(nFileLog,"ultima parcela: "+ cUltima +CRLF) + + n0102total := 0 + n0105total := 0 + + //Loop entre todos os Titulos que serão Reparcelados + + For nI := 1 To len(aOrig06Tit) + + fWrite(nFileLog,"E5_NUMERO: "+aOrig06Tit[nI][2] +CRLF) + + cQuery := "select * from SE1010 where E1_PREFIXO = '"+ aOrig06Tit[nI][1] +"' and E1_NUM = '"+ aOrig06Tit[nI][2] +"' and E1_TIPO = 'FAT' and D_E_L_E_T_ <> '*'" + + fWrite(nFileLog,cQuery +CRLF) + + If select("SE1ORIG") > 0 + SE1ORIG->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'SE1ORIG' + dbSelectArea("SE1ORIG") + SE1ORIG->(DBGOTOP()) + + While SE1ORIG->(!EOF()) //Loop entre as duas filiais: 0102, 0105 + fWrite(nFileLog,"SE1ORIG loop: "+SE1ORIG->E1_FILIAL +CRLF) + cFilAnt := SE1ORIG->E1_FILIAL + + //Faz a baixa + if alltrim(SE1ORIG->E1_STATUS) == 'A' + fWrite(nFileLog, SE1ORIG->E1_FILIAL+" : Fazendo baixa" +CRLF) + + aBaixa := {{"E1_FILIAL" ,SE1ORIG->E1_FILIAL ,Nil},; + {"E1_PREFIXO" ,SE1ORIG->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1ORIG->E1_NUM ,Nil},; + {"E1_TIPO" ,SE1ORIG->E1_TIPO ,Nil},; + {"E1_PARCELA" ,SE1ORIG->E1_PARCELA ,Nil},; + {"E1_DESCONT" ,SE1ORIG->E1_DESCONT ,Nil},; + {"E1_JUROS" ,SE1ORIG->E1_JUROS ,Nil},; + {"E1_MULTA" ,SE1ORIG->E1_MULTA ,Nil},; + {"E1_VLRREAL" ,SE1ORIG->E1_VLRREAL ,Nil},; + {"AUTMOTBX" ,"FAT" ,Nil},; + {"AUTDTBAIXA" ,date() ,Nil},; + {"AUTDTCREDITO",date() ,Nil},; + {"AUTHIST" ,"Bx.Emis.Fat."+cE1NUM,Nil},; + {"AUTVALREC" ,SE1ORIG->E1_VALOR ,Nil}} + + + lMsErroAuto:=.F. //reseta lMsErroAuto + MSExecAuto ({|x,y| FINA070(x,y)},aBaixa, 3) + + If lMsErroAuto + + fWrite(nFileLog,SE1ORIG->E1_FILIAL+" : Não foi efetuada a baixa do titulo : "+CRLF+ MSErroString()+ CRLF + tojson(aBaixa) + CRLF) + return + else + + RECLOCK('SE5',.F.) + E5_FATURA := cE1NUM + E5_FATPREF:= cE1PREFIXO + //E5_LA = S + //E5_MOEDA = '' + //E5_TXMOEDA = 1 + MSUNLOCK() + RECLOCK('SE1',.F.) + E1_FATURA := cE1NUM + E1_FATPREF:= cE1PREFIXO + E1_TIPOFAT:= cE1TIPO + E1_FLAGFAT:= 'S' + E1_DTFATUR:= dDataBase + MSUNLOCK() + + fWrite(nFileLog,SE1ORIG->E1_FILIAL+" : baixa feita" +CRLF) + endif + + endif + + //calcula valor total de cada filial para poder calcular a Fatura + + if SE1ORIG->E1_FILIAL == '0102' + n0102total += SE1ORIG->E1_VALOR + elseif SE1ORIG->E1_FILIAL == '0105' + n0105total += SE1ORIG->E1_VALOR + else + fWrite(nFileLog,"Programa nao preparado para a filial "+SE1ORIG->E1_FILIAL +CRLF) + endif + + SE1ORIG->(dbskip()) + + End + + Next nI + + cFilAnt := '0102' + + fWrite(nFileLog,"Total 0102: "+cvaltochar(n0102total) +CRLF) + fWrite(nFileLog,"Total 0105: "+cvaltochar(n0105total) +CRLF) + + n0102val := round(nE1Valor * n0102total/nTotal, 2) + n0105val := nE1Valor - n0102val + + aFili := {} + + if n0102total > 0 + AADD(aFili,'0102') + endif + + if n0105total > 0 + AADD(aFili,'0105') + endif + + For nI := 1 To len(aFili) + + cQuery := "select COUNT(*) as QUANT, SUM(E1_VALOR) as TOTALINC from SE1010 where E1_NUM = '"+ cE1NUM +"' and E1_FILIAL='"+ aFili[nI] +"' and E1_PREFIXO = '"+ cE1PREFIXO +"' and D_E_L_E_T_ <> '*'" + + If select("PARC") > 0 + PARC->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'PARC' + dbSelectArea("PARC") + + //verificamos se estamos na ultima parcela + if PARC->QUANT == nParcelas -1 //QUANT = quantidade de parcelas incluida + fWrite(nFileLog,"Ultima Parcela"+CRLF) + //o valor desta será o valor que resta + nValPar := SE1ORIG->E1_VALOR - PARC->TOTALINC + + if aFili[nI] == '0102' + n0102val := n0102total - PARC->TOTALINC + elseif aFili[nI] == '0105' + n0105val := n0105total - PARC->TOTALINC + endif + endif + + Next nI + + fWrite(nFileLog,"Total 0102: "+cvaltochar(n0102total) + " -> Parcela de: "+cvaltochar(n0102val) +CRLF) + fWrite(nFileLog,"Total 0105: "+cvaltochar(n0105total) + " -> Parcela de: "+cvaltochar(n0105val) +CRLF) + + ///////////////// + + For nI := 1 To len(aFili) + + if aFili[nI] == '0102' + nValPar := n0102val + elseif aFili[nI] == '0105' + nValPar := n0105val + endif + + aTitulo := ACLONE(aNovoTitulo) + + AADD(aTitulo, {"E1_PREFIXO" ,cE1PREFIXO ,Nil}) + AADD(aTitulo, {"E1_FILIAL" ,aFili[nI] ,Nil}) + AADD(aTitulo, {"E1_VALOR" ,nValPar ,Nil}) + AADD(aTitulo, {"E1_SALDO" ,nValPar ,Nil}) + AADD(aTitulo, {"E1_VLCRUZ" ,nValPar ,Nil}) + + lMsErroAuto := .F. + + if aFili[nI] == '0102' + + MSExecAuto({|x,y| FINA040(x,y)},aTitulo,3) //Inclusao + + If lMsErroAuto + fWrite(nFileLog,"Erro " + CRLF) + fWrite(nFileLog,"Erro ao incluir titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aTitulo) + CRLF) + return + else + fWrite(nFileLog,"Sucesso "+ CRLF) + fWrite(nFileLog,"Titulo incluido: "+ aFili[nI] +" : " + cValToChar(nValPar) +CRLF) + endif + + elseif aFili[nI] == '0105' + fWrite(nFileLog,"Salvando titulos 05 para o final "+aFili[nI]+CRLF) + //StartJob("U_JOBF040",getenvserver(),.T., SE1ORIG->E1_FILIAL, aTitulo) + AADD(aTit05, aTitulo) + //fWrite(nFileLog,"passou pela thread "+CRLF) + else + fWrite(nFileLog,"Erro, filial nao tratada "+aFili[nI]+CRLF) + endif + + Next nI + + + Reset Environment + + While !RpcSetEnv('01', '0105',,,,GetEnvServer(),{}) + Sleep(400) + End + + For nI := 1 To len(aTit05) + + lMsErroAuto := .F. + + MSExecAuto({|x,y| FINA040(x,y)},aTit05[nI],3) //Inclusao + + If lMsErroAuto + fWrite(nFileLog,"Erro " + CRLF) + fWrite(nFileLog,"Erro ao incluir titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aTit05[nI]) + CRLF) + return + else + fWrite(nFileLog,"Sucesso "+ CRLF) + fWrite(nFileLog,"Titulo incluido: "+CRLF) + endif + + Next nI + + Reset Environment + + fClose(nFileLog) + +Return + + + + +//////////////////////// +// Cancelamento da Fatura (Cancelamento do Reparcelamento) +// F280PCAN +// JOBF280C +// + +User Function F280PCAN() + + /** + * cFatCan - numero da fatura + * cPrefCan - prefixo + * cTipoCan - tipo + **/ + + If cEmpAnt == '06' + + StartJob("U_JOBF280C",getenvserver(),.T., cPrefCan, cFatCan, cTipoCan) + + EndIf + +Return .T. + + +User Function JOBF280C(cPrefCan, cFatCan, cTipoCan) + + RpcSetType(3) // Nao consome licensa + + While !RpcSetEnv('01', '0102',,,,GetEnvServer(),{}) + Sleep(400) + End + + nFileLog := u_OpenLog("\Logs\F280PCAN_"+dToS(dDataBase)+".log") + + fWrite(nFileLog,"----- F280PCAN -----"+CRLF) + + fWrite(nFileLog,"E1_PREFIXO = '"+ cPrefCan +"' and E1_NUM = '"+ cFatCan +"' and E1_TIPO = '"+ cTipoCan +"'"+CRLF) + + cQuery := "select * from SE1010 where E1_PREFIXO = '"+ cPrefCan +"' and E1_NUM = '"+ cFatCan +"' and E1_TIPO = '"+ cTipoCan +"' and D_E_L_E_T_ <> '*'" + + If select("SE1ORIG") > 0 + SE1ORIG->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'SE1ORIG' + dbSelectArea("SE1ORIG") + SE1ORIG->(DBGOTOP()) + + While SE1ORIG->(!EOF()) //Loop entre todas as parcelas e filiais + + SE1->(dbselectarea("SE1")) + SE1->(dbSetOrder(1)) + + + fWrite(nFileLog,"dbseek" + CRLF) + if ! SE1->(dbSeek(SE1ORIG->E1_FILIAL+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO)) + fWrite(nFileLog,"Erro dbseek" + CRLF) + Alert("Erro. Verificar F280PCAN() - dbseek") + fWrite(nFileLog,"Erro dbseek("+SE1ORIG->E1_FILIAL+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO+")" + CRLF) + return .F. + endif + + cFilAnt := SE1ORIG->E1_FILIAL + + aFatura:= {{"E1_FILIAL" ,SE1ORIG->E1_FILIAL ,Nil},; + {"E1_PREFIXO" ,SE1ORIG->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1ORIG->E1_NUM ,Nil},; + {"E1_PARCELA" ,SE1ORIG->E1_PARCELA ,Nil},; + {"E1_TIPO" ,SE1ORIG->E1_TIPO ,Nil}} + + lMsErroAuto := .F. + + MSExecAuto({|x,y| FINA040(x,y)},aFatura,5) //Exclus�o + + If lMsErroAuto + fWrite(nFileLog,"Erro " + CRLF) + fWrite(nFileLog,"Erro ao remover o titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aFatura) + CRLF) + Alert("Erro ao remover o titulo. Verificar F280PCAN()") + return .F. + else + fWrite(nFileLog,"Sucesso "+ CRLF) + fWrite(nFileLog,"Titulo removido" +CRLF) + endif + + SE1ORIG->(dbskip()) + + end + + + ///////////////////////////////////////////// + /////// Cancela as baixas + /// + + fWrite(nFileLog,"- cancela baixas" + CRLF) + + cQuery := "select * from SE1060 where E1_FATURA = '"+ cFatCan +"' and D_E_L_E_T_ <> '*'" + + If select("SE1ORIG") > 0 + SE1ORIG->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'SE1ORIG' + dbSelectArea("SE1ORIG") + SE1ORIG->(DBGOTOP()) + + aFili := {"0102", "0105"} + + While SE1ORIG->(!EOF()) //Loop entre todas as parcelas e filiais + + SE1->(dbselectarea("SE1")) + SE1->(dbSetOrder(1)) + + For nI := 1 To len(aFili) + + cFilAnt := aFili[nI] + + fWrite(nFileLog,"dbseek" + CRLF) + if ! SE1->(dbSeek(aFili[nI]+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO)) + fWrite(nFileLog,"dbseek nao encontrou titulo para filial "+aFili[nI] + CRLF) + fWrite(nFileLog,"dbseek('"+aFili[nI]+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO+"')" + CRLF) + LOOP + endif + + nSE5Recno := u_RetSQLOne("select R_E_C_N_O_ from SE5010 where E5_FILIAL = '"+SE1->E1_FILIAL+"' and E5_PREFIXO = '"+SE1->E1_PREFIXO+"' and E5_TIPO = '"+SE1->E1_TIPO+"' and E5_NUMERO = '"+SE1->E1_NUM+"' "+; + " and E5_FATURA = '"+SE1->E1_FATURA+"' and E5_FATPREF='"+SE1->E1_FATPREF+"' and D_E_L_E_T_ <> '*' ", "R_E_C_N_O_") + + //Removemos os Flags de Fatura para conseguirmos cancelar a baixa pelo FINA070 + RECLOCK('SE1',.F.) + E1_FATURA := '' + E1_FATPREF:= '' + E1_TIPOFAT:= '' + E1_FLAGFAT:= '' + E1_DTFATUR:= StoD('') + MSUNLOCK() + + SE5->(DbGoTo(nSE5Recno)) + RECLOCK('SE5',.F.) + E5_MOTBX := 'NOR' + //E5_FATURA := '' + //E5_FATPREF:= '' + MSUNLOCK() + + aBaixa := {{"E1_FILIAL" ,SE1->E1_FILIAL ,Nil},; + {"E1_PREFIXO" ,SE1->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1->E1_NUM ,Nil},; + {"E1_TIPO" ,SE1->E1_TIPO ,Nil},; + {"E1_PARCELA" ,SE1->E1_PARCELA ,Nil},; + {"E1_DESCONT" ,SE1->E1_DESCONT ,Nil},; + {"E1_JUROS" ,SE1->E1_JUROS ,Nil},; + {"E1_MULTA" ,SE1->E1_MULTA ,Nil},; + {"E1_VLRREAL" ,SE1->E1_VLRREAL ,Nil},; + {"AUTMOTBX" ,"NOR" ,Nil},; + {"AUTDTBAIXA" ,date() ,Nil},; + {"AUTDTCREDITO",date() ,Nil},; + {"AUTHIST" ,"" ,Nil},; + {"AUTVALREC" ,SE1->E1_VALOR ,Nil}} + + + lMsErroAuto:=.F. //reseta lMsErroAuto + MSExecAuto ({|x,y| FINA070(x,y)},aBaixa, 5) + + If lMsErroAuto + fWrite(nFileLog,SE1->E1_FILIAL+" : Não foi efetuada o cancelamento de baixa : "+CRLF+ MSErroString()+ CRLF + tojson(aBaixa) + CRLF) + return + else + fWrite(nFileLog,SE1->E1_FILIAL+" : cancelamento de baixa feito" +CRLF) + endif + + Next nI + + SE1ORIG->(dbskip()) + end + + Reset Environment + +Return diff --git a/script/convert-grammars b/script/convert-grammars index 4b16dff4..ec3287db 100755 --- a/script/convert-grammars +++ b/script/convert-grammars @@ -188,14 +188,16 @@ def load_grammars(tmp_dir, source, all_scopes) scope = grammar['scopeName'] if all_scopes.key?(scope) - $stderr.puts "WARN: Duplicated scope #{scope}\n" + - " Current package: #{p.url}\n" + - " Previous package: #{all_scopes[scope]}" + unless all_scopes[scope] == p.url + $stderr.puts "WARN: Duplicated scope #{scope}\n" + + " Current package: #{p.url}\n" + + " Previous package: #{all_scopes[scope]}" + end next end all_scopes[scope] = p.url grammar - end + end.compact end def install_grammars(grammars, path) @@ -250,9 +252,10 @@ def main(sources) all_scopes = {} - if $options[:add] + if source = $options[:add] Dir.mktmpdir do |tmpdir| - install_grammar(tmpdir, ARGV[0], all_scopes) + grammars = load_grammars(tmpdir, source, all_scopes) + install_grammars(grammars, source) if $options[:install] end generate_yaml(all_scopes, sources) else diff --git a/script/travis/before_install b/script/travis/before_install index 442f6718..e83b930f 100755 --- a/script/travis/before_install +++ b/script/travis/before_install @@ -5,15 +5,8 @@ set -ex # Fetch all commits/refs needed to run our tests. git fetch origin master:master v2.0.0:v2.0.0 test/attributes:test/attributes test/master:test/master -script/vendor-deb libicu48 libicu-dev -if ruby -e 'exit RUBY_VERSION >= "2.0" && RUBY_VERSION < "2.1"'; then - # Workaround for https://bugs.ruby-lang.org/issues/8074. We can't use this - # solution on all versions of Ruby due to - # https://github.com/bundler/bundler/pull/3338. - bundle config build.charlock_holmes --with-icu-include=$(pwd)/vendor/debs/include --with-icu-lib=$(pwd)/vendor/debs/lib -else - bundle config build.charlock_holmes --with-icu-dir=$(pwd)/vendor/debs -fi +# Replace SSH links to submodules by HTTPS links. +sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules git submodule init git submodule sync --quiet diff --git a/script/vendor-deb b/script/vendor-deb deleted file mode 100755 index ebad3e76..00000000 --- a/script/vendor-deb +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -set -ex - -cd "$(dirname "$0")/.." - -mkdir -p vendor/apt vendor/debs - -(cd vendor/apt && apt-get --assume-yes download "$@") - -for deb in vendor/apt/*.deb; do - ar p $deb data.tar.gz | tar -vzxC vendor/debs --strip-components=2 -done diff --git a/test/fixtures/Data/Modelines/example_smalltalk.md b/test/fixtures/Data/Modelines/example_smalltalk.md new file mode 100644 index 00000000..edf4bc13 --- /dev/null +++ b/test/fixtures/Data/Modelines/example_smalltalk.md @@ -0,0 +1 @@ +; -*-mode:Smalltalk-*- diff --git a/test/fixtures/Data/Modelines/fundamentalEmacs.c b/test/fixtures/Data/Modelines/fundamentalEmacs.c new file mode 100644 index 00000000..b384bc79 --- /dev/null +++ b/test/fixtures/Data/Modelines/fundamentalEmacs.c @@ -0,0 +1,6 @@ +// -*- fundamental -*- + +int main(int argc, char * argc[]) +{ + this should not be syntax highlighted, even though it looks like c. +} diff --git a/test/fixtures/Data/Modelines/iamphp.inc b/test/fixtures/Data/Modelines/iamphp.inc new file mode 100644 index 00000000..9e67098e --- /dev/null +++ b/test/fixtures/Data/Modelines/iamphp.inc @@ -0,0 +1 @@ +; -*- MoDe: PhP;-*- diff --git a/test/fixtures/Data/Modelines/not_perl.pl b/test/fixtures/Data/Modelines/not_perl.pl new file mode 100644 index 00000000..39e38958 --- /dev/null +++ b/test/fixtures/Data/Modelines/not_perl.pl @@ -0,0 +1,3 @@ +/* vim: set filEtype=pRoloG: */ + +# I am Prolog diff --git a/test/fixtures/Data/Modelines/ruby b/test/fixtures/Data/Modelines/ruby new file mode 100644 index 00000000..9dee00eb --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby @@ -0,0 +1,3 @@ +/* vim: set filetype=ruby: */ + +# I am Ruby diff --git a/test/fixtures/Data/Modelines/ruby2 b/test/fixtures/Data/Modelines/ruby2 new file mode 100644 index 00000000..75177db1 --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby2 @@ -0,0 +1,3 @@ +/* vim: set ts=8 sw=4 filetype=ruby tw=0: */ + +# Please help how do I into setting vim modlines diff --git a/test/fixtures/Data/Modelines/ruby3 b/test/fixtures/Data/Modelines/ruby3 new file mode 100644 index 00000000..003f71fe --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby3 @@ -0,0 +1,3 @@ +/* vim: set ft=ruby ts=8 sw=4 tw=0: */ + +# I am not good at humor diff --git a/test/fixtures/Data/Modelines/ruby4 b/test/fixtures/Data/Modelines/ruby4 new file mode 100644 index 00000000..e3b50151 --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby4 @@ -0,0 +1,3 @@ +# vim: filetype=ruby + +# I am Ruby diff --git a/test/fixtures/Data/Modelines/ruby5 b/test/fixtures/Data/Modelines/ruby5 new file mode 100644 index 00000000..10349050 --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby5 @@ -0,0 +1,3 @@ +# vim: ft=ruby + +# I am Ruby diff --git a/test/fixtures/Data/Modelines/ruby6 b/test/fixtures/Data/Modelines/ruby6 new file mode 100644 index 00000000..a2b49dae --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby6 @@ -0,0 +1,3 @@ +# vim: syntax=Ruby + +# I am Ruby diff --git a/test/fixtures/Data/Modelines/ruby7 b/test/fixtures/Data/Modelines/ruby7 new file mode 100644 index 00000000..1ed5b28f --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby7 @@ -0,0 +1,3 @@ +# vim: se syntax=ruby: + +# I am Ruby diff --git a/test/fixtures/Data/Modelines/ruby8 b/test/fixtures/Data/Modelines/ruby8 new file mode 100644 index 00000000..8e854741 --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby8 @@ -0,0 +1,3 @@ +# vim: set syntax=ruby: + +# I am Ruby diff --git a/test/fixtures/Data/Modelines/ruby9 b/test/fixtures/Data/Modelines/ruby9 new file mode 100644 index 00000000..ac82358d --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby9 @@ -0,0 +1,3 @@ +# ex: syntax=ruby + +# I am Ruby diff --git a/test/fixtures/Data/Modelines/seeplusplus b/test/fixtures/Data/Modelines/seeplusplus new file mode 100644 index 00000000..a5cdd9d3 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplus @@ -0,0 +1,3 @@ +/* vim: set ft=cpp: */ + +I would like to be C++ please. diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs1 b/test/fixtures/Data/Modelines/seeplusplusEmacs1 new file mode 100644 index 00000000..6c1b6e80 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs1 @@ -0,0 +1,2 @@ +// -*-c++-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs2 b/test/fixtures/Data/Modelines/seeplusplusEmacs2 new file mode 100644 index 00000000..3756149c --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs2 @@ -0,0 +1,2 @@ +// -*- c++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs3 b/test/fixtures/Data/Modelines/seeplusplusEmacs3 new file mode 100644 index 00000000..7a871e6a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs3 @@ -0,0 +1,2 @@ +// -*- mode:C++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs4 b/test/fixtures/Data/Modelines/seeplusplusEmacs4 new file mode 100644 index 00000000..f020eb5a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs4 @@ -0,0 +1,2 @@ +// -*- font:bar;mode:c++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs5 b/test/fixtures/Data/Modelines/seeplusplusEmacs5 new file mode 100644 index 00000000..49e9a7d6 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs5 @@ -0,0 +1,2 @@ +// -*-foo:bar;mode:c++;bar:foo-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs6 b/test/fixtures/Data/Modelines/seeplusplusEmacs6 new file mode 100644 index 00000000..305f7f77 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs6 @@ -0,0 +1,2 @@ +// -*- foo : bar ; mode : c++ ; bar : foo -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs7 b/test/fixtures/Data/Modelines/seeplusplusEmacs7 new file mode 100644 index 00000000..236c3b8e --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs7 @@ -0,0 +1,2 @@ +// -*- mode : c++ ; bar : foo -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs8 b/test/fixtures/Data/Modelines/seeplusplusEmacs8 new file mode 100644 index 00000000..f502058a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs8 @@ -0,0 +1,2 @@ +// -*- font:x;foo : bar ; mode : C++ ; bar : foo ; foooooo:baaaaar;fo:ba-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs9 b/test/fixtures/Data/Modelines/seeplusplusEmacs9 new file mode 100644 index 00000000..953ca220 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs9 @@ -0,0 +1,2 @@ +// -*-foo:bar;mode:c++;bar:foo;tyrell:corp-*- +template class { X i; }; diff --git a/test/fixtures/Data/sourcemap.v1.map b/test/fixtures/Data/sourcemap.v1.map new file mode 100644 index 00000000..35c9b29f --- /dev/null +++ b/test/fixtures/Data/sourcemap.v1.map @@ -0,0 +1,12 @@ +/** Begin line maps. **/{ “file”:”out.js”, "count": 2 } +[0,0,0,0,0,0,1,1,1,1,2] +[2,2,2,2,2,2,3,4,4,4,4,4] +/** Begin file information. **/ +[“a.js”, “b.js”] +[“b.js”, “c.js”, “d.js”] +/** Begin mapping definitions. **/ +["a.js", 1, 34] +["a.js", 5, 2] +["b.js", 1, 3, "event"] +["c.js", 1, 4] +["d.js", 3, 78, "foo"] diff --git a/test/fixtures/Data/sourcemap.v3.map b/test/fixtures/Data/sourcemap.v3.map new file mode 100644 index 00000000..7acd1b9d --- /dev/null +++ b/test/fixtures/Data/sourcemap.v3.map @@ -0,0 +1 @@ +{"version":3,"file":"out.js","sourceRoot":"","sources":["foo.js","bar.js"],"sourcesContent":[null,null],"names":["src","maps","are","fun"],"mappings":"A,AAAB;;ABCDE;"} diff --git a/test/fixtures/Generated/ABM8G.mod b/test/fixtures/Generated/ABM8G.mod new file mode 100644 index 00000000..15887130 --- /dev/null +++ b/test/fixtures/Generated/ABM8G.mod @@ -0,0 +1,50 @@ +PCBNEW-LibModule-V1 Wed 10 Aug 2011 05:57:27 PM COT +# encoding utf-8 +$INDEX +ABM8G +$EndINDEX +$MODULE ABM8G +Po 0 0 0 15 4E430CBD 4E430CC5 ~~ +Li ABM8G +Sc 4E430CC5 +AR +Op 0 0 0 +T0 591 -1378 354 354 0 39 N V 21 N "ABM8G" +T1 0 787 354 354 0 39 N V 21 N "VAL**" +DS -591 394 1299 394 79 21 +DS 1299 394 1299 -1063 79 21 +DS 1299 -1063 -472 -1063 79 21 +DS -472 -1063 -472 472 79 21 +DS -472 472 -472 551 79 21 +DS -472 551 -591 551 79 21 +DS -591 551 -591 433 79 21 +$PAD +Sh "1" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 0 0 +$EndPAD +$PAD +Sh "2" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 866 0 +$EndPAD +$PAD +Sh "3" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 866 -669 +$EndPAD +$PAD +Sh "4" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 0 -669 +$EndPAD +$EndMODULE ABM8G +$EndLIBRARY diff --git a/test/fixtures/Generated/ms2.mod b/test/fixtures/Generated/ms2.mod new file mode 100644 index 00000000..1866c8d6 --- /dev/null +++ b/test/fixtures/Generated/ms2.mod @@ -0,0 +1,19 @@ +GFORTRAN module version '0' created from ms2.f90 on Thu Sep 5 10:09:19 2013 +MD5:8a80cd5db1bc612a28603959302dbf37 -- If you edit this, you'll get what you deserve. + +(() () () () () () () () () () () () () () () () () () () () () () () () +() () ()) + +() + +() + +() + +() + +(2 'ms2' 'ms2' 'ms2' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN +UNKNOWN) (UNKNOWN 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0) +) + +('ms2' 0 2) diff --git a/test/fixtures/SVG/alg_schema.link.svg b/test/fixtures/SVG/alg_schema.link.svg new file mode 120000 index 00000000..2f2cb2e4 --- /dev/null +++ b/test/fixtures/SVG/alg_schema.link.svg @@ -0,0 +1 @@ +alg_schema.svg \ No newline at end of file diff --git a/test/fixtures/SVG/alg_schema.svg b/test/fixtures/SVG/alg_schema.svg new file mode 100644 index 00000000..cd709914 --- /dev/null +++ b/test/fixtures/SVG/alg_schema.svg @@ -0,0 +1,269 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + Sequence KEY256 bits + + + + + Salt96 bits Counter32 bits + + + + + AES Cipher + + + + + + + Secure random data128 bits + + + Division by alphabet lengthrepeated passcode-length times. + + + + Passcode2-16 characters + + + + diff --git a/test/fixtures/Shell/_bashrc b/test/fixtures/Shell/_bashrc new file mode 100644 index 00000000..eaf623bc --- /dev/null +++ b/test/fixtures/Shell/_bashrc @@ -0,0 +1,175 @@ +# vim: set ft=sh: + +# encoding +export LC_CTYPE='en_US.UTF-8' +# terminal color +export TERM=xterm-256color +# prompt setup +current_branch() { + git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' +} +parse_branch() { + git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' +} +PS1='${debian_chroot:+($debian_chroot)}\[\e[00;32m\]\u@\h:\[\e[01;34m\]\W\[\033[01;35m\]$(parse_branch)\[\e[01;35m\]\[\e[0m\] $ ' + +google () { + search="" + echo "Googling: $@" + for term in $@; do + search="$search%20$term" + done + xdg-open "http://www.google.com/search?q=$search" +} + +# alias +alias emacs='emacs -nw' +alias eshell='emacs --execute "(term \"`which zsh`\")"' + - () { + cd - +} +alias ..='cd ..' +alias ...='cd ../..' +alias _=sudo +alias afind='ack-grep -il' +alias c=clear +alias cd..='cd ..' +alias cd...='cd ../..' +alias cd....='cd ../../..' +alias cd.....='cd ../../../..' +alias d='dirs -v | head -10' +alias emacs='emacs -nw' +alias g=git +alias ga='git add' +alias gap='git add --patch' +alias gb='git branch' +alias gba='git branch -a' +alias gbr='git branch --remote' +alias gc='git commit -v' +alias 'gc!'='git commit -v --amend' +alias gca='git commit -v -a' +alias 'gca!'='git commit -v -a --amend' +alias gcl='git config --list' +alias gclean='git reset --hard && git clean -dfx' +alias gcln='git clone' +alias gcm='git checkout master' +alias gcmsg='git commit -m' +alias gco='git checkout' +alias gcount='git shortlog -sn' +alias gcp='git cherry-pick' +alias gcs='git commit -S' +alias gd='git diff' +alias gdc='git diff --cached' +alias gdt='git difftool' +alias gg='git gui citool' +alias gga='git gui citool --amend' +alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)' +alias ggpull='git pull origin $(current_branch)' +alias ggpur='git pull --rebase origin $(current_branch)' +alias ggpush='git push origin $(current_branch)' +alias gmpush='git push wkentaro $(current_branch)' +alias gignore='git update-index --assume-unchanged' +alias gignored='git ls-files -v | grep "^[[:lower:]]"' +alias git=hub +alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk' +alias gk='gitk --all --branches' +alias gl='git pull' +alias glg='git log --stat --max-count=10' +alias glgg='git log --graph --max-count=10' +alias glgga='git log --graph --decorate --all' +alias glo='git log --oneline --decorate --color' +alias globurl='noglob urlglobber ' +alias glog='git log --oneline --decorate --color --graph' +alias glp=_git_log_prettily +alias gm='git merge' +alias gmt='git mergetool --no-prompt' +alias gp='git push' +alias gpoat='git push origin --all && git push origin --tags' +alias gr='git remote' +alias grba='git rebase --abort' +alias grbc='git rebase --continue' +alias grbi='git rebase -i' +alias grh='git reset HEAD' +alias grhh='git reset HEAD --hard' +alias grmv='git remote rename' +alias grrm='git remote remove' +alias grset='git remote set-url' +alias grt='cd $(git rev-parse --show-toplevel || echo ".")' +alias grup='git remote update' +alias grv='git remote -v' +alias gsd='git svn dcommit' +alias gsps='git show --pretty=short --show-signature' +alias gsr='git svn rebase' +alias gss='git status -s' +alias gst='git status' +alias gsta='git stash' +alias gstd='git stash drop' +alias gstp='git stash pop' +alias gsts='git stash show --text' +alias gts='git tag -s' +alias gunignore='git update-index --no-assume-unchanged' +alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1' +alias gup='git pull --rebase' +alias gvt='git verify-tag' +alias gwc='git whatchanged -p --abbrev-commit --pretty=medium' +alias gwip='git add -A; git ls-files --deleted -z | xargs -r0 git rm; git commit -m "--wip--"' +alias h=history +alias history='fc -l 1' +alias ipy=ipython +alias sl='ls' +alias l='ls -lah' +alias la='ls -lAh' +alias ll='ls -lh' +alias lsa='ls -lah' +alias md='mkdir -p' +alias py=python +alias please=sudo +alias po=popd +alias pu=pushd +alias pyfind='find . -name "*.py"' +alias pygrep='grep --include="*.py"' +alias rd=rmdir +alias v=vim +alias vi=vim +alias which-command=whence +# hub +if which hub >/dev/null 2>&1; then + eval "$(hub alias -s)" +fi +# open +if which open >/dev/null 2>&1; then + alias o='open' + alias o.='open .' +elif which gnome-open >/dev/null 2>&1; then + alias open='gnome-open' + alias o='gnome-open' + alias o.='gnome-open .' +fi +# ls +if which dircolors >/dev/null 2>&1; then + eval `dircolors $HOME/.colorrc` + alias ls='ls --color=auto' +fi + [[ -s $HOME/.tmuxinator/scripts/tmuxinator ]] && source $HOME/.tmuxinator/scripts/tmuxinator + +cd () { + if [[ "x$*" = "x..." ]] + then + cd ../.. + elif [[ "x$*" = "x...." ]] + then + cd ../../.. + elif [[ "x$*" = "x....." ]] + then + cd ../../../.. + elif [[ "x$*" = "x......" ]] + then + cd ../../../../.. + elif [ -d ~/.autoenv ] + then + source ~/.autoenv/activate.sh + autoenv_cd "$@" + else + builtin cd "$@" + fi +} diff --git a/test/fixtures/Shell/crossbuild_liblua5.1 b/test/fixtures/Shell/crossbuild_liblua5.1 new file mode 100644 index 00000000..d4d14462 --- /dev/null +++ b/test/fixtures/Shell/crossbuild_liblua5.1 @@ -0,0 +1,57 @@ +#! /bin/sh +# +# Builds and installs liblua5.1 for the cross toolchain. +# Executed by build-uqm-dependencies.chroot + +# Include our common functions +. /usr/lib/crossbuild/crossbuild.subr + +# envvar LIBLUA51_URL +# +# Specifies the URL of the liblua5.1 source tarball you want to use. +export LIBLUA51_URL="http://www.lua.org/ftp/lua-5.1.5.tar.gz" + +# envvar INSTALL_TOP +# +# This determines where lua's makefiles install everything (we don't want to use +# /usr/local!). +export INSTALL_TOP="/usr/${HOST_TRIPLET}" + +# envvar TO_BIN +# +# Names of the binary files to install (that's right, lua's makefiles don't +# determine this automatically, and since we end up with files named according +# to Windows conventions the install chokes without these) +export TO_BIN="lua.exe luac.exe" + +# envvar TO_LIB +# +# Names of the libraries to install, see TO_BIN +export TO_LIB="liblua.a lua51.dll" + + +# liblua5.1 uses custom makefiles and does not natively support cross-building. +# However, with our cross toolchain in its PATH it successfully builds the mingw +# target. +export PATH=/usr/${HOST_TRIPLET}/bin:${PATH} + +echo "*************************************************************************" +echo "--- BEGIN: crossbuild_liblua5.1 ---" + +get_tarball "liblua5.1" "${LIBLUA51_URL}" gz + +cd ${SRC_ROOT_DIR}/liblua5.1/* + +if [ -f Makefile ]; then + make clean + make --environment-overrides mingw install + + +else + echo "crossbuild_liblua5.1 failed: Could not find Makefile" + echo "(is the liblua5.1 source tarball sane?)" + exit 1 +fi + +echo "--- END: crossbuild_liblua5.1 ---" +echo "*************************************************************************" diff --git a/test/fixtures/Shell/graylog2-server.init.d b/test/fixtures/Shell/graylog2-server.init.d new file mode 100755 index 00000000..29e513ad --- /dev/null +++ b/test/fixtures/Shell/graylog2-server.init.d @@ -0,0 +1,99 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: graylog2-server +# Required-Start: $network +# Required-Stop: $network +# Default-Start: 2 3 4 5 +# Default-Stop: 1 +# Short-Description: Start Graylog2 server +### END INIT INFO + +# Written by Lital Natan + +PREFIX=/usr +SHAREDIR=$PREFIX/share/graylog2-server +SERVER_JAR=$SHAREDIR/graylog2-server.jar +SYSLOG4J_JAR=$SHAREDIR/syslog4j-0.9.46-bin.jar +SVCNAME="graylog2-server" + +CONFIG="/etc/graylog2.conf" +LOGFILE="/var/log/graylog2.log" +PIDFILE="/var/run/graylog2.pid" + +start() { + if [ ! -e $CONFIG ]; then + echo "Config file $CONFIG does not exist" + return 1 + fi + + echo "Starting ${SVCNAME}" + nohup `which java` -cp $SERVER_JAR:$SYSLOG4J_JAR org.graylog2.Main \ + -p ${PIDFILE} -f ${CONFIG} > $LOGFILE 2>&1 & + + # Sleep before testing the service + sleep 2 + + graylog2_test || return 1 +} + +stop() { + pid=`< $PIDFILE` + kill $pid + rm -f ${PIDFILE} # just in case +} + +graylog2_test() { + # Graylog2 only deletes its PID file if it hits a config error + if [ ! -e ${PIDFILE} ]; then + echo "Configuration error, check ${CONFIG}" + return 1 + fi + + local pid=`cat ${PIDFILE}` + + # Graylog2 isn't running, so that means there was a problem + if [ ! -e /proc/$pid ]; then + echo "Something went wrong, check ${LOGFILE}" + rm -f ${PIDFILE} + return 1 + else + return 0 + fi +} + + +status() { + graylog2_test > /dev/null 2>&1 + if [ "$?" == "0" ]; then + echo "Graylog2 server is up" + return 0 + else + echo "Graylog2 server is down" + return 1 + fi +} + + +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status + ;; + restart) + restart + ;; + *) + echo "Usage $0 {start|stop|restart|status}" + RETVAL=1 +esac diff --git a/test/helper.rb b/test/helper.rb index ebfeefc7..deb7ef5b 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -2,3 +2,36 @@ require "bundler/setup" require "minitest/autorun" require "mocha/setup" require "linguist" +require 'color-proximity' +require "linguist/blob" +require 'licensee' + +def fixtures_path + File.expand_path("../fixtures", __FILE__) +end + +def fixture_blob(name) + filepath = (name =~ /^\//)? name : File.join(fixtures_path, name) + Linguist::FileBlob.new(filepath, fixtures_path) +end + +def fixture_blob_memory(name) + filepath = (name =~ /^\//)? name : File.join(fixtures_path, name) + content = File.read(filepath) + Linguist::Blob.new(name, content) +end + +def samples_path + File.expand_path("../../samples", __FILE__) +end + +def sample_blob(name) + filepath = (name =~ /^\//)? name : File.join(samples_path, name) + Linguist::FileBlob.new(filepath, samples_path) +end + +def sample_blob_memory(name) + filepath = (name =~ /^\//)? name : File.join(samples_path, name) + content = File.read(filepath) + Linguist::Blob.new(name, content) +end diff --git a/test/test_blob.rb b/test/test_blob.rb index 372ff13f..352d4b07 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -14,69 +14,48 @@ class TestBlob < Minitest::Test Encoding.default_external = @original_external end - def samples_path - File.expand_path("../../samples", __FILE__) - end - - def fixtures_path - File.expand_path("../fixtures", __FILE__) - end - - def sample_blob(name) - name = File.join(samples_path, name) unless name =~ /^\// - FileBlob.new(name, samples_path) - end - - def fixture_blob(name) - name = File.join(fixtures_path, name) unless name =~ /^\// - FileBlob.new(name, fixtures_path) - end - def script_blob(name) - blob = sample_blob(name) + blob = sample_blob_memory(name) blob.instance_variable_set(:@name, 'script') blob end def test_name - assert_equal "foo.rb", sample_blob("foo.rb").name + assert_equal "foo.rb", sample_blob_memory("Ruby/foo.rb").name end def test_mime_type - assert_equal "application/postscript", fixture_blob("Binary/octocat.ai").mime_type - assert_equal "application/x-ruby", sample_blob("Ruby/grit.rb").mime_type - assert_equal "application/x-sh", sample_blob("Shell/script.sh").mime_type - assert_equal "application/xml", sample_blob("XML/bar.xml").mime_type - assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").mime_type - assert_equal "text/plain", fixture_blob("Data/README").mime_type + assert_equal "application/postscript", fixture_blob_memory("Binary/octocat.ai").mime_type + assert_equal "application/x-ruby", sample_blob_memory("Ruby/grit.rb").mime_type + assert_equal "application/x-sh", sample_blob_memory("Shell/script.sh").mime_type + assert_equal "text/plain", fixture_blob_memory("Data/README").mime_type end def test_content_type - assert_equal "application/pdf", fixture_blob("Binary/foo.pdf").content_type - assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").content_type - assert_equal "image/png", fixture_blob("Binary/foo.png").content_type - assert_equal "text/plain; charset=iso-8859-2", fixture_blob("Data/README").content_type + assert_equal "application/pdf", fixture_blob_memory("Binary/foo.pdf").content_type + assert_equal "image/png", fixture_blob_memory("Binary/foo.png").content_type + assert_equal "text/plain; charset=iso-8859-2", fixture_blob_memory("Data/README").content_type end def test_disposition - assert_equal "attachment; filename=foo+bar.jar", fixture_blob("Binary/foo bar.jar").disposition - assert_equal "attachment; filename=foo.bin", fixture_blob("Binary/foo.bin").disposition - assert_equal "attachment; filename=linguist.gem", fixture_blob("Binary/linguist.gem").disposition - assert_equal "attachment; filename=octocat.ai", fixture_blob("Binary/octocat.ai").disposition - assert_equal "inline", fixture_blob("Data/README").disposition - assert_equal "inline", sample_blob("Text/foo.txt").disposition - assert_equal "inline", sample_blob("Ruby/grit.rb").disposition - assert_equal "inline", fixture_blob("Binary/octocat.png").disposition + assert_equal "attachment; filename=foo+bar.jar", fixture_blob_memory("Binary/foo bar.jar").disposition + assert_equal "attachment; filename=foo.bin", fixture_blob_memory("Binary/foo.bin").disposition + assert_equal "attachment; filename=linguist.gem", fixture_blob_memory("Binary/linguist.gem").disposition + assert_equal "attachment; filename=octocat.ai", fixture_blob_memory("Binary/octocat.ai").disposition + assert_equal "inline", fixture_blob_memory("Data/README").disposition + assert_equal "inline", sample_blob_memory("Text/foo.txt").disposition + assert_equal "inline", sample_blob_memory("Ruby/grit.rb").disposition + assert_equal "inline", fixture_blob_memory("Binary/octocat.png").disposition end def test_data - assert_equal "module Foo\nend\n", sample_blob("Ruby/foo.rb").data + assert_equal "module Foo\nend\n", sample_blob_memory("Ruby/foo.rb").data end def test_lines - assert_equal ["module Foo", "end", ""], sample_blob("Ruby/foo.rb").lines - assert_equal ["line 1", "line 2", ""], sample_blob("Text/mac.txt").lines - assert_equal 475, sample_blob("Emacs Lisp/ess-julia.el").lines.length + assert_equal ["module Foo", "end", ""], sample_blob_memory("Ruby/foo.rb").lines + assert_equal ["line 1", "line 2", ""], sample_blob_memory("Text/mac.txt").lines + assert_equal 475, sample_blob_memory("Emacs Lisp/ess-julia.el").lines.length end def test_lines_maintains_original_encoding @@ -84,384 +63,173 @@ class TestBlob < Minitest::Test # earlier versions of the gem made implicit guarantees that the encoding of # each `line` is in the same encoding as the file was originally read (in # practice, UTF-8 or ASCII-8BIT) - assert_equal Encoding.default_external, fixture_blob("Data/utf16le").lines.first.encoding + assert_equal Encoding.default_external, fixture_blob_memory("Data/utf16le").lines.first.encoding end def test_size - assert_equal 15, sample_blob("Ruby/foo.rb").size + assert_equal 15, sample_blob_memory("Ruby/foo.rb").size end def test_loc - assert_equal 3, sample_blob("Ruby/foo.rb").loc + assert_equal 3, sample_blob_memory("Ruby/foo.rb").loc end def test_sloc - assert_equal 2, sample_blob("Ruby/foo.rb").sloc - assert_equal 3, fixture_blob("Data/utf16le-windows").sloc - assert_equal 1, fixture_blob("Data/iso8859-8-i").sloc + assert_equal 2, sample_blob_memory("Ruby/foo.rb").sloc + assert_equal 3, fixture_blob_memory("Data/utf16le-windows").sloc + assert_equal 1, fixture_blob_memory("Data/iso8859-8-i").sloc end def test_encoding - assert_equal "ISO-8859-2", fixture_blob("Data/README").encoding - assert_equal "ISO-8859-2", fixture_blob("Data/README").ruby_encoding - assert_equal "UTF-8", sample_blob("Text/foo.txt").encoding - assert_equal "UTF-8", sample_blob("Text/foo.txt").ruby_encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le").encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le").ruby_encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").ruby_encoding - assert_equal "ISO-2022-KR", sample_blob("Text/ISO-2022-KR.txt").encoding - assert_equal "binary", sample_blob("Text/ISO-2022-KR.txt").ruby_encoding - assert_nil fixture_blob("Binary/dog.o").encoding + assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").encoding + assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").ruby_encoding + assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").encoding + assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").ruby_encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").ruby_encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").ruby_encoding + assert_equal "ISO-2022-KR", sample_blob_memory("Text/ISO-2022-KR.txt").encoding + assert_equal "binary", sample_blob_memory("Text/ISO-2022-KR.txt").ruby_encoding + assert_nil fixture_blob_memory("Binary/dog.o").encoding end def test_binary - # Large blobs aren't loaded - large_blob = sample_blob("git.exe") - large_blob.instance_eval do - def data; end - end - assert large_blob.binary? - - assert fixture_blob("Binary/git.deb").binary? - assert fixture_blob("Binary/git.exe").binary? - assert fixture_blob("Binary/hello.pbc").binary? - assert fixture_blob("Binary/linguist.gem").binary? - assert fixture_blob("Binary/octocat.ai").binary? - assert fixture_blob("Binary/octocat.png").binary? - assert fixture_blob("Binary/zip").binary? - assert !fixture_blob("Data/README").binary? - assert !sample_blob("Ruby/foo.rb").binary? - assert !sample_blob("Perl/script.pl").binary? + assert fixture_blob_memory("Binary/git.deb").binary? + assert fixture_blob_memory("Binary/hello.pbc").binary? + assert fixture_blob_memory("Binary/linguist.gem").binary? + assert fixture_blob_memory("Binary/octocat.ai").binary? + assert fixture_blob_memory("Binary/octocat.png").binary? + assert fixture_blob_memory("Binary/zip").binary? + assert !fixture_blob_memory("Data/README").binary? + assert !sample_blob_memory("Ruby/foo.rb").binary? + assert !sample_blob_memory("Perl/script.pl").binary? end def test_all_binary Samples.each do |sample| - blob = sample_blob(sample[:path]) + blob = sample_blob_memory(sample[:path]) assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file" end end def test_text - assert fixture_blob("Data/README").text? - assert fixture_blob("Data/md").text? - assert sample_blob("Shell/script.sh").text? - assert fixture_blob("Data/txt").text? + assert fixture_blob_memory("Data/README").text? + assert fixture_blob_memory("Data/md").text? + assert sample_blob_memory("Shell/script.sh").text? + assert fixture_blob_memory("Data/txt").text? end def test_image - assert fixture_blob("Binary/octocat.gif").image? - assert fixture_blob("Binary/octocat.jpeg").image? - assert fixture_blob("Binary/octocat.jpg").image? - assert fixture_blob("Binary/octocat.png").image? - assert !fixture_blob("Binary/octocat.ai").image? - assert !fixture_blob("Binary/octocat.psd").image? + assert fixture_blob_memory("Binary/octocat.png").image? + assert !fixture_blob_memory("Binary/octocat.ai").image? + assert !fixture_blob_memory("Binary/octocat.psd").image? end def test_solid - assert fixture_blob("Binary/cube.stl").solid? - assert fixture_blob("Data/cube.stl").solid? + assert fixture_blob_memory("Binary/cube.stl").solid? + assert fixture_blob_memory("Data/cube.stl").solid? end def test_csv - assert fixture_blob("Data/cars.csv").csv? + assert fixture_blob_memory("Data/cars.csv").csv? end def test_pdf - assert fixture_blob("Binary/foo.pdf").pdf? + assert fixture_blob_memory("Binary/foo.pdf").pdf? end def test_viewable - assert fixture_blob("Data/README").viewable? - assert sample_blob("Ruby/foo.rb").viewable? - assert sample_blob("Perl/script.pl").viewable? - assert !fixture_blob("Binary/linguist.gem").viewable? - assert !fixture_blob("Binary/octocat.ai").viewable? - assert !fixture_blob("Binary/octocat.png").viewable? + assert fixture_blob_memory("Data/README").viewable? + assert sample_blob_memory("Ruby/foo.rb").viewable? + assert sample_blob_memory("Perl/script.pl").viewable? + assert !fixture_blob_memory("Binary/linguist.gem").viewable? + assert !fixture_blob_memory("Binary/octocat.ai").viewable? + assert !fixture_blob_memory("Binary/octocat.png").viewable? end def test_generated - assert !fixture_blob("Data/README").generated? - - # Xcode project files - assert !sample_blob("XML/MainMenu.xib").generated? - assert fixture_blob("Binary/MainMenu.nib").generated? - assert !sample_blob("XML/project.pbxproj").generated? - - # Gemfile.lock is NOT generated - assert !sample_blob("Gemfile.lock").generated? + assert !fixture_blob_memory("Data/README").generated? # Generated .NET Docfiles - assert sample_blob("XML/net_docfile.xml").generated? + assert sample_blob_memory("XML/net_docfile.xml").generated? # Long line - assert !sample_blob("JavaScript/uglify.js").generated? + assert !sample_blob_memory("JavaScript/uglify.js").generated? # Inlined JS, but mostly code - assert !sample_blob("JavaScript/json2_backbone.js").generated? + assert !sample_blob_memory("JavaScript/json2_backbone.js").generated? # Minified JS - assert !sample_blob("JavaScript/jquery-1.6.1.js").generated? - assert sample_blob("JavaScript/jquery-1.6.1.min.js").generated? - assert sample_blob("JavaScript/jquery-1.4.2.min.js").generated? - - # CoffeeScript-generated JS - # TODO - - # TypeScript-generated JS - # TODO + assert !sample_blob_memory("JavaScript/jquery-1.6.1.js").generated? + assert sample_blob_memory("JavaScript/jquery-1.6.1.min.js").generated? + assert sample_blob_memory("JavaScript/jquery-1.4.2.min.js").generated? # Composer generated composer.lock file - assert sample_blob("JSON/composer.lock").generated? + assert sample_blob_memory("JSON/composer.lock").generated? # PEG.js-generated parsers - assert sample_blob("JavaScript/parser.js").generated? + assert sample_blob_memory("JavaScript/parser.js").generated? # Generated PostScript - assert !sample_blob("PostScript/sierpinski.ps").generated? + assert !sample_blob_memory("PostScript/sierpinski.ps").generated? # These examples are too basic to tell - assert !sample_blob("JavaScript/hello.js").generated? + assert !sample_blob_memory("JavaScript/hello.js").generated? - assert sample_blob("JavaScript/intro-old.js").generated? - assert sample_blob("JavaScript/classes-old.js").generated? + assert sample_blob_memory("JavaScript/intro-old.js").generated? + assert sample_blob_memory("JavaScript/classes-old.js").generated? - assert sample_blob("JavaScript/intro.js").generated? - assert sample_blob("JavaScript/classes.js").generated? + assert sample_blob_memory("JavaScript/intro.js").generated? + assert sample_blob_memory("JavaScript/classes.js").generated? # Protocol Buffer generated code - assert sample_blob("C++/protocol-buffer.pb.h").generated? - assert sample_blob("C++/protocol-buffer.pb.cc").generated? - assert sample_blob("Java/ProtocolBuffer.java").generated? - assert sample_blob("Python/protocol_buffer_pb2.py").generated? + assert sample_blob_memory("C++/protocol-buffer.pb.h").generated? + assert sample_blob_memory("C++/protocol-buffer.pb.cc").generated? + assert sample_blob_memory("Java/ProtocolBuffer.java").generated? + assert sample_blob_memory("Python/protocol_buffer_pb2.py").generated? + assert sample_blob_memory("Go/api.pb.go").generated? + assert sample_blob_memory("Go/embedded.go").generated? + + # Apache Thrift generated code + assert sample_blob_memory("Python/gen-py-linguist-thrift.py").generated? + assert sample_blob_memory("Go/gen-go-linguist-thrift.go").generated? + assert sample_blob_memory("Java/gen-java-linguist-thrift.java").generated? + assert sample_blob_memory("JavaScript/gen-js-linguist-thrift.js").generated? + assert sample_blob_memory("Ruby/gen-rb-linguist-thrift.rb").generated? + assert sample_blob_memory("Objective-C/gen-cocoa-linguist-thrift.m").generated? # Generated JNI - assert sample_blob("C/jni_layer.h").generated? + assert sample_blob_memory("C/jni_layer.h").generated? # Minified CSS - assert !sample_blob("CSS/bootstrap.css").generated? - assert sample_blob("CSS/bootstrap.min.css").generated? + assert !sample_blob_memory("CSS/bootstrap.css").generated? + assert sample_blob_memory("CSS/bootstrap.min.css").generated? # Generated VCR - assert sample_blob("YAML/vcr_cassette.yml").generated? + assert sample_blob_memory("YAML/vcr_cassette.yml").generated? # Generated by Zephir - assert sample_blob("Zephir/filenames/exception.zep.c").generated? - assert sample_blob("Zephir/filenames/exception.zep.h").generated? - assert sample_blob("Zephir/filenames/exception.zep.php").generated? - assert !sample_blob("Zephir/Router.zep").generated? + assert !sample_blob_memory("Zephir/Router.zep").generated? + # Cython-generated C/C++ + assert sample_blob_memory("C/sgd_fast.c").generated? + assert sample_blob_memory("C++/wrapper_inner.cpp").generated? - assert Linguist::Generated.generated?("node_modules/grunt/lib/grunt.js", nil) + # Unity3D-generated metadata + assert sample_blob_memory("Unity3D Asset/Tiles.meta").generated? - # Godep saved dependencies - assert sample_blob("Godeps/Godeps.json").generated? - assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? + # Racc-generated Ruby + assert sample_blob_memory("Ruby/racc.rb").generated? end def test_vendored - assert !fixture_blob("Data/README").vendored? - assert !sample_blob("ext/extconf.rb").vendored? - - # Dependencies - assert sample_blob("dependencies/windows/headers/GL/glext.h").vendored? - - # Node dependencies - assert sample_blob("node_modules/coffee-script/lib/coffee-script.js").vendored? - - # Bower Components - assert sample_blob("bower_components/custom/custom.js").vendored? - assert sample_blob("app/bower_components/custom/custom.js").vendored? - assert sample_blob("vendor/assets/bower_components/custom/custom.js").vendored? - - # Go dependencies - assert !sample_blob("Godeps/Godeps.json").vendored? - assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored? - - # Rails vendor/ - assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? - - # 'thirdparty' directory - assert sample_blob("thirdparty/lib/main.c").vendored? - - # 'extern(al)' directory - assert sample_blob("extern/util/__init__.py").vendored? - assert sample_blob("external/jquery.min.js").vendored? - - # C deps - assert sample_blob("deps/http_parser/http_parser.c").vendored? - assert sample_blob("deps/v8/src/v8.h").vendored? - - # Chart.js - assert sample_blob("some/vendored/path/Chart.js").vendored? - assert !sample_blob("some/vendored/path/chart.js").vendored? - - # Codemirror deps - assert sample_blob("codemirror/mode/blah.js").vendored? - - # Debian packaging - assert sample_blob("debian/cron.d").vendored? - - # Minified JavaScript and CSS - assert sample_blob("foo.min.js").vendored? - assert sample_blob("foo.min.css").vendored? - assert sample_blob("foo-min.js").vendored? - assert sample_blob("foo-min.css").vendored? - assert !sample_blob("foomin.css").vendored? - assert !sample_blob("foo.min.txt").vendored? - - # Prototype - assert !sample_blob("public/javascripts/application.js").vendored? - assert sample_blob("public/javascripts/prototype.js").vendored? - assert sample_blob("public/javascripts/effects.js").vendored? - assert sample_blob("public/javascripts/controls.js").vendored? - assert sample_blob("public/javascripts/dragdrop.js").vendored? - - # jQuery - assert sample_blob("jquery.js").vendored? - assert sample_blob("public/javascripts/jquery.js").vendored? - assert sample_blob("public/javascripts/jquery.min.js").vendored? - assert sample_blob("public/javascripts/jquery-1.7.js").vendored? - assert sample_blob("public/javascripts/jquery-1.7.min.js").vendored? - assert sample_blob("public/javascripts/jquery-1.5.2.js").vendored? - assert sample_blob("public/javascripts/jquery-1.6.1.js").vendored? - assert sample_blob("public/javascripts/jquery-1.6.1.min.js").vendored? - assert sample_blob("public/javascripts/jquery-1.10.1.js").vendored? - assert sample_blob("public/javascripts/jquery-1.10.1.min.js").vendored? - assert !sample_blob("public/javascripts/jquery.github.menu.js").vendored? - - # jQuery UI - assert sample_blob("themes/ui-lightness/jquery-ui.css").vendored? - assert sample_blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored? - assert sample_blob("themes/ui-lightness/jquery.ui.accordion.css").vendored? - assert sample_blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored? - assert sample_blob("ui/i18n/jquery-ui-i18n.js").vendored? - assert sample_blob("ui/jquery.effects.blind.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.22.custom.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.22.custom.min.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.22.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.js").vendored? - assert sample_blob("ui/jquery-ui.min.js").vendored? - assert sample_blob("ui/jquery.ui.accordion.js").vendored? - assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored? - assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored? - - # MooTools - assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored? - assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored? - - # Dojo - assert sample_blob("public/javascripts/dojo.js").vendored? - - # MochiKit - assert sample_blob("public/javascripts/MochiKit.js").vendored? - - # YUI - assert sample_blob("public/javascripts/yahoo-dom-event.js").vendored? - assert sample_blob("public/javascripts/yahoo-min.js").vendored? - assert sample_blob("public/javascripts/yuiloader-dom-event.js").vendored? - - # WYS editors - assert sample_blob("public/javascripts/ckeditor.js").vendored? - assert sample_blob("public/javascripts/tiny_mce.js").vendored? - assert sample_blob("public/javascripts/tiny_mce_popup.js").vendored? - assert sample_blob("public/javascripts/tiny_mce_src.js").vendored? - - # AngularJS - assert sample_blob("public/javascripts/angular.js").vendored? - assert sample_blob("public/javascripts/angular.min.js").vendored? - - # D3.js - assert sample_blob("public/javascripts/d3.v3.js").vendored? - assert sample_blob("public/javascripts/d3.v3.min.js").vendored? - - # Modernizr - assert sample_blob("public/javascripts/modernizr-2.7.1.js").vendored? - assert sample_blob("public/javascripts/modernizr.custom.01009.js").vendored? - - # Fabric - assert sample_blob("fabfile.py").vendored? - - # WAF - assert sample_blob("waf").vendored? - - # Visual Studio IntelliSense - assert sample_blob("Scripts/jquery-1.7-vsdoc.js").vendored? - - # Microsoft Ajax - assert sample_blob("Scripts/MicrosoftAjax.debug.js").vendored? - assert sample_blob("Scripts/MicrosoftAjax.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcAjax.debug.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcAjax.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcValidation.debug.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcValidation.js").vendored? - - # jQuery validation plugin (MS bundles this with asp.net mvc) - assert sample_blob("Scripts/jquery.validate.js").vendored? - assert sample_blob("Scripts/jquery.validate.min.js").vendored? - assert sample_blob("Scripts/jquery.validate.unobtrusive.js").vendored? - assert sample_blob("Scripts/jquery.validate.unobtrusive.min.js").vendored? - assert sample_blob("Scripts/jquery.unobtrusive-ajax.js").vendored? - assert sample_blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored? - - # NuGet Packages - assert sample_blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored? - - # Font Awesome - assert sample_blob("some/asset/path/font-awesome.min.css").vendored? - assert sample_blob("some/asset/path/font-awesome.css").vendored? - - # Normalize - assert sample_blob("some/asset/path/normalize.css").vendored? - - # Cocoapods - assert sample_blob('Pods/blah').vendored? - - # Html5shiv - assert sample_blob("Scripts/html5shiv.js").vendored? - assert sample_blob("Scripts/html5shiv.min.js").vendored? - - # Test fixtures - assert sample_blob("test/fixtures/random.rkt").vendored? - assert sample_blob("Test/fixtures/random.rkt").vendored? - - # Cordova/PhoneGap - assert sample_blob("cordova.js").vendored? - assert sample_blob("cordova.min.js").vendored? - assert sample_blob("cordova-2.1.0.js").vendored? - assert sample_blob("cordova-2.1.0.min.js").vendored? - - # Foundation js - assert sample_blob("foundation.js").vendored? - assert sample_blob("foundation.min.js").vendored? - assert sample_blob("foundation.abide.js").vendored? - - # Vagrant - assert sample_blob("Vagrantfile").vendored? - - # Gradle - assert sample_blob("gradlew").vendored? - assert sample_blob("gradlew.bat").vendored? - assert sample_blob("gradle/wrapper/gradle-wrapper.properties").vendored? - assert sample_blob("subproject/gradlew").vendored? - assert sample_blob("subproject/gradlew.bat").vendored? - assert sample_blob("subproject/gradle/wrapper/gradle-wrapper.properties").vendored? - - # Octicons - assert sample_blob("octicons.css").vendored? - assert sample_blob("public/octicons.min.css").vendored? - assert sample_blob("public/octicons/sprockets-octicons.scss").vendored? - - # Typesafe Activator - assert sample_blob("activator").vendored? - assert sample_blob("activator.bat").vendored? - assert sample_blob("subproject/activator").vendored? - assert sample_blob("subproject/activator.bat").vendored? + assert !fixture_blob_memory("Data/README").vendored? end def test_language Samples.each do |sample| - blob = sample_blob(sample[:path]) + blob = sample_blob_memory(sample[:path]) assert blob.language, "No language for #{sample[:path]}" assert_equal sample[:language], blob.language.name, blob.name end @@ -480,9 +248,11 @@ class TestBlob < Minitest::Test filepath = File.join(dirname, filename) next unless File.file?(filepath) - blob = fixture_blob(filepath) + blob = fixture_blob_memory(filepath) if language == 'Data' assert blob.language.nil?, "A language was found for #{filepath}" + elsif language == 'Generated' + assert blob.generated?, "#{filepath} is not a generated file" else assert blob.language, "No language for #{filepath}" assert_equal language, blob.language.name, blob.name @@ -492,7 +262,7 @@ class TestBlob < Minitest::Test end def test_minified_files_not_safe_to_highlight - assert !sample_blob("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? + assert !sample_blob_memory("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? end def test_empty @@ -503,4 +273,21 @@ class TestBlob < Minitest::Test refute blob.new(" ").empty? refute blob.new("nope").empty? end + + def test_include_in_language_stats + generated = sample_blob_memory("CSS/bootstrap.min.css") + assert_predicate generated, :generated? + refute_predicate generated, :include_in_language_stats? + + data = sample_blob_memory("Ant Build System/filenames/ant.xml") + assert_equal :data, data.language.type + refute_predicate data, :include_in_language_stats? + + prose = sample_blob_memory("Markdown/tender.md") + assert_equal :prose, prose.language.type + refute_predicate prose, :include_in_language_stats? + + included = sample_blob_memory("HTML/pages.html") + assert_predicate included, :include_in_language_stats? + end end diff --git a/test/test_classifier.rb b/test/test_classifier.rb index 1d10d512..2ae2f45e 100644 --- a/test/test_classifier.rb +++ b/test/test_classifier.rb @@ -3,10 +3,6 @@ require_relative "./helper" class TestClassifier < Minitest::Test include Linguist - def samples_path - File.expand_path("../../samples", __FILE__) - end - def fixture(name) File.read(File.join(samples_path, name)) end diff --git a/test/test_color_proximity.rb b/test/test_color_proximity.rb new file mode 100644 index 00000000..2356e74a --- /dev/null +++ b/test/test_color_proximity.rb @@ -0,0 +1,23 @@ +require_relative "./helper" + +class TestColorProximity < Minitest::Test + include Linguist + + def cut_hash(color) + color[1..-1] if color.start_with?('#') + end + + def test_color_proximity + langs_with_colors = Language.all.reject { |language| language.color.nil? } + cp = ColorProximity.new(0.05, langs_with_colors.map { |lang| cut_hash(lang.color) }) + failing_threshold = langs_with_colors.map do |lang| + state = cp.past_threshold?(cut_hash(lang.color)) + if !state.first && lang.color != "##{state.last.first}" + "- #{lang} (#{lang.color}) is too close to #{state.last}" + end + end.compact + message = "The following #{failing_threshold.length} languages have failing color thresholds. Please modify the hex color.\n#{failing_threshold.join("\n")}" + + assert failing_threshold.empty?, message + end +end diff --git a/test/test_file_blob.rb b/test/test_file_blob.rb index 30d483fe..1b83a0fb 100644 --- a/test/test_file_blob.rb +++ b/test/test_file_blob.rb @@ -1,9 +1,672 @@ require_relative "./helper" -class TestFileBlob < Minitest::Test +class TestBlob < Minitest::Test + include Linguist + + def setup + # git blobs are normally loaded as ASCII-8BIT since they may contain data + # with arbitrary encoding not known ahead of time + @original_external = Encoding.default_external + Encoding.default_external = Encoding.find("ASCII-8BIT") + end + + def teardown + Encoding.default_external = @original_external + end + + def script_blob(name) + blob = sample_blob(name) + blob.instance_variable_set(:@name, 'script') + blob + end + def test_extensions assert_equal [".gitignore"], Linguist::FileBlob.new(".gitignore").extensions assert_equal [".xml"], Linguist::FileBlob.new("build.xml").extensions assert_equal [".html.erb", ".erb"], Linguist::FileBlob.new("dotted.dir/index.html.erb").extensions end + + def test_name + assert_equal "foo.rb", sample_blob("foo.rb").name + end + + def test_mime_type + assert_equal "application/postscript", fixture_blob("Binary/octocat.ai").mime_type + assert_equal "application/x-ruby", sample_blob("Ruby/grit.rb").mime_type + assert_equal "application/x-sh", sample_blob("Shell/script.sh").mime_type + assert_equal "application/xml", sample_blob("XML/bar.xml").mime_type + assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").mime_type + assert_equal "text/plain", fixture_blob("Data/README").mime_type + end + + def test_content_type + assert_equal "application/pdf", fixture_blob("Binary/foo.pdf").content_type + assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").content_type + assert_equal "image/png", fixture_blob("Binary/foo.png").content_type + assert_equal "text/plain; charset=iso-8859-2", fixture_blob("Data/README").content_type + end + + def test_disposition + assert_equal "attachment; filename=foo+bar.jar", fixture_blob("Binary/foo bar.jar").disposition + assert_equal "attachment; filename=foo.bin", fixture_blob("Binary/foo.bin").disposition + assert_equal "attachment; filename=linguist.gem", fixture_blob("Binary/linguist.gem").disposition + assert_equal "attachment; filename=octocat.ai", fixture_blob("Binary/octocat.ai").disposition + assert_equal "inline", fixture_blob("Data/README").disposition + assert_equal "inline", sample_blob("Text/foo.txt").disposition + assert_equal "inline", sample_blob("Ruby/grit.rb").disposition + assert_equal "inline", fixture_blob("Binary/octocat.png").disposition + end + + def test_data + assert_equal "module Foo\nend\n", sample_blob("Ruby/foo.rb").data + end + + def test_lines + assert_equal ["module Foo", "end", ""], sample_blob("Ruby/foo.rb").lines + assert_equal ["line 1", "line 2", ""], sample_blob("Text/mac.txt").lines + assert_equal 475, sample_blob("Emacs Lisp/ess-julia.el").lines.length + end + + def test_lines_maintains_original_encoding + # Even if the file's encoding is detected as something like UTF-16LE, + # earlier versions of the gem made implicit guarantees that the encoding of + # each `line` is in the same encoding as the file was originally read (in + # practice, UTF-8 or ASCII-8BIT) + assert_equal Encoding.default_external, fixture_blob("Data/utf16le").lines.first.encoding + end + + def test_size + assert_equal 15, sample_blob("Ruby/foo.rb").size + end + + def test_loc + assert_equal 3, sample_blob("Ruby/foo.rb").loc + end + + def test_sloc + assert_equal 2, sample_blob("Ruby/foo.rb").sloc + assert_equal 3, fixture_blob("Data/utf16le-windows").sloc + assert_equal 1, fixture_blob("Data/iso8859-8-i").sloc + end + + def test_encoding + assert_equal "ISO-8859-2", fixture_blob("Data/README").encoding + assert_equal "ISO-8859-2", fixture_blob("Data/README").ruby_encoding + assert_equal "UTF-8", sample_blob("Text/foo.txt").encoding + assert_equal "UTF-8", sample_blob("Text/foo.txt").ruby_encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le").encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le").ruby_encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").ruby_encoding + assert_equal "ISO-2022-KR", sample_blob("Text/ISO-2022-KR.txt").encoding + assert_equal "binary", sample_blob("Text/ISO-2022-KR.txt").ruby_encoding + assert_nil fixture_blob("Binary/dog.o").encoding + end + + def test_binary + # Large blobs aren't loaded + large_blob = sample_blob("git.exe") + large_blob.instance_eval do + def data; end + end + assert large_blob.binary? + + assert fixture_blob("Binary/git.deb").binary? + assert fixture_blob("Binary/git.exe").binary? + assert fixture_blob("Binary/hello.pbc").binary? + assert fixture_blob("Binary/linguist.gem").binary? + assert fixture_blob("Binary/octocat.ai").binary? + assert fixture_blob("Binary/octocat.png").binary? + assert fixture_blob("Binary/zip").binary? + assert !fixture_blob("Data/README").binary? + assert !sample_blob("Ruby/foo.rb").binary? + assert !sample_blob("Perl/script.pl").binary? + end + + def test_all_binary + Samples.each do |sample| + blob = sample_blob(sample[:path]) + assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file" + end + end + + def test_text + assert fixture_blob("Data/README").text? + assert fixture_blob("Data/md").text? + assert sample_blob("Shell/script.sh").text? + assert fixture_blob("Data/txt").text? + end + + def test_image + assert fixture_blob("Binary/octocat.gif").image? + assert fixture_blob("Binary/octocat.jpeg").image? + assert fixture_blob("Binary/octocat.jpg").image? + assert fixture_blob("Binary/octocat.png").image? + assert !fixture_blob("Binary/octocat.ai").image? + assert !fixture_blob("Binary/octocat.psd").image? + end + + def test_solid + assert fixture_blob("Binary/cube.stl").solid? + assert fixture_blob("Data/cube.stl").solid? + end + + def test_csv + assert sample_blob("CSV/cars.csv").csv? + end + + def test_pdf + assert fixture_blob("Binary/foo.pdf").pdf? + end + + def test_viewable + assert fixture_blob("Data/README").viewable? + assert sample_blob("Ruby/foo.rb").viewable? + assert sample_blob("Perl/script.pl").viewable? + assert !fixture_blob("Binary/linguist.gem").viewable? + assert !fixture_blob("Binary/octocat.ai").viewable? + assert !fixture_blob("Binary/octocat.png").viewable? + end + + def test_generated + assert !fixture_blob("Data/README").generated? + + # Xcode project files + assert !sample_blob("XML/MainMenu.xib").generated? + assert fixture_blob("Binary/MainMenu.nib").generated? + assert !sample_blob("XML/project.pbxproj").generated? + + # Gemfile.lock is NOT generated + assert !sample_blob("Gemfile.lock").generated? + + # Generated .NET Docfiles + assert sample_blob("XML/net_docfile.xml").generated? + + # Long line + assert !sample_blob("JavaScript/uglify.js").generated? + + # Inlined JS, but mostly code + assert !sample_blob("JavaScript/json2_backbone.js").generated? + + # Minified JS + assert !sample_blob("JavaScript/jquery-1.6.1.js").generated? + assert sample_blob("JavaScript/jquery-1.6.1.min.js").generated? + assert sample_blob("JavaScript/jquery-1.4.2.min.js").generated? + + # CoffeeScript-generated JS + # TODO + + # TypeScript-generated JS + # TODO + + # Composer generated composer.lock file + assert sample_blob("JSON/composer.lock").generated? + + # PEG.js-generated parsers + assert sample_blob("JavaScript/parser.js").generated? + + # Generated PostScript + assert !sample_blob("PostScript/sierpinski.ps").generated? + + # These examples are too basic to tell + assert !sample_blob("JavaScript/hello.js").generated? + + assert sample_blob("JavaScript/intro-old.js").generated? + assert sample_blob("JavaScript/classes-old.js").generated? + + assert sample_blob("JavaScript/intro.js").generated? + assert sample_blob("JavaScript/classes.js").generated? + + # Protocol Buffer generated code + assert sample_blob("C++/protocol-buffer.pb.h").generated? + assert sample_blob("C++/protocol-buffer.pb.cc").generated? + assert sample_blob("Java/ProtocolBuffer.java").generated? + assert sample_blob("Python/protocol_buffer_pb2.py").generated? + assert sample_blob("Go/api.pb.go").generated? + assert sample_blob("Go/embedded.go").generated? + + # Apache Thrift generated code + assert sample_blob("Python/gen-py-linguist-thrift.py").generated? + assert sample_blob("Go/gen-go-linguist-thrift.go").generated? + assert sample_blob("Java/gen-java-linguist-thrift.java").generated? + assert sample_blob("JavaScript/gen-js-linguist-thrift.js").generated? + assert sample_blob("Ruby/gen-rb-linguist-thrift.rb").generated? + assert sample_blob("Objective-C/gen-cocoa-linguist-thrift.m").generated? + + # Generated JNI + assert sample_blob("C/jni_layer.h").generated? + + # Minified CSS + assert !sample_blob("CSS/bootstrap.css").generated? + assert sample_blob("CSS/bootstrap.min.css").generated? + + # Generated VCR + assert sample_blob("YAML/vcr_cassette.yml").generated? + + # Generated by Zephir + assert sample_blob("Zephir/filenames/exception.zep.c").generated? + assert sample_blob("Zephir/filenames/exception.zep.h").generated? + assert sample_blob("Zephir/filenames/exception.zep.php").generated? + assert !sample_blob("Zephir/Router.zep").generated? + + assert sample_blob("node_modules/grunt/lib/grunt.js").generated? + + # Godep saved dependencies + assert sample_blob("Godeps/Godeps.json").generated? + assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? + + # Cython-generated C/C++ + assert sample_blob("C/sgd_fast.c").generated? + assert sample_blob("C++/wrapper_inner.cpp").generated? + + # Unity3D-generated metadata + assert sample_blob("Unity3D Asset/Tiles.meta").generated? + end + + def test_vendored + assert !fixture_blob("Data/README").vendored? + assert !sample_blob("ext/extconf.rb").vendored? + + # Dependencies + assert sample_blob("dependencies/windows/headers/GL/glext.h").vendored? + + # Node dependencies + assert sample_blob("node_modules/coffee-script/lib/coffee-script.js").vendored? + + # Bower Components + assert sample_blob("bower_components/custom/custom.js").vendored? + assert sample_blob("app/bower_components/custom/custom.js").vendored? + assert sample_blob("vendor/assets/bower_components/custom/custom.js").vendored? + + # Go dependencies + assert !sample_blob("Godeps/Godeps.json").vendored? + assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored? + + # Rails vendor/ + assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? + + # Vendor/ + assert sample_blob("Vendor/my_great_file.h").vendored? + + # 'thirdparty' directory + assert sample_blob("thirdparty/lib/main.c").vendored? + + # 'extern(al)' directory + assert sample_blob("extern/util/__init__.py").vendored? + assert sample_blob("external/jquery.min.js").vendored? + + # C deps + assert sample_blob("deps/http_parser/http_parser.c").vendored? + assert sample_blob("deps/v8/src/v8.h").vendored? + + assert sample_blob("tools/something/else.c").vendored? + + # Chart.js + assert sample_blob("some/vendored/path/Chart.js").vendored? + assert !sample_blob("some/vendored/path/chart.js").vendored? + + # Codemirror deps + assert sample_blob("codemirror/mode/blah.js").vendored? + assert sample_blob("codemirror/5.0/mode/blah.js").vendored? + + # Debian packaging + assert sample_blob("debian/cron.d").vendored? + + # Erlang + assert sample_blob("rebar").vendored? + + # git config files + + assert_predicate fixture_blob("some/path/.gitattributes"), :vendored? + assert_predicate fixture_blob(".gitignore"), :vendored? + assert_predicate fixture_blob("special/path/.gitmodules"), :vendored? + + # Minified JavaScript and CSS + assert sample_blob("foo.min.js").vendored? + assert sample_blob("foo.min.css").vendored? + assert sample_blob("foo-min.js").vendored? + assert sample_blob("foo-min.css").vendored? + assert !sample_blob("foomin.css").vendored? + assert !sample_blob("foo.min.txt").vendored? + + #.osx + assert sample_blob(".osx").vendored? + + # Prototype + assert !sample_blob("public/javascripts/application.js").vendored? + assert sample_blob("public/javascripts/prototype.js").vendored? + assert sample_blob("public/javascripts/effects.js").vendored? + assert sample_blob("public/javascripts/controls.js").vendored? + assert sample_blob("public/javascripts/dragdrop.js").vendored? + + # jQuery + assert sample_blob("jquery.js").vendored? + assert sample_blob("public/javascripts/jquery.js").vendored? + assert sample_blob("public/javascripts/jquery.min.js").vendored? + assert sample_blob("public/javascripts/jquery-1.7.js").vendored? + assert sample_blob("public/javascripts/jquery-1.7.min.js").vendored? + assert sample_blob("public/javascripts/jquery-1.5.2.js").vendored? + assert sample_blob("public/javascripts/jquery-1.6.1.js").vendored? + assert sample_blob("public/javascripts/jquery-1.6.1.min.js").vendored? + assert sample_blob("public/javascripts/jquery-1.10.1.js").vendored? + assert sample_blob("public/javascripts/jquery-1.10.1.min.js").vendored? + assert !sample_blob("public/javascripts/jquery.github.menu.js").vendored? + + # jQuery UI + assert sample_blob("themes/ui-lightness/jquery-ui.css").vendored? + assert sample_blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored? + assert sample_blob("themes/ui-lightness/jquery.ui.accordion.css").vendored? + assert sample_blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored? + assert sample_blob("ui/i18n/jquery-ui-i18n.js").vendored? + assert sample_blob("ui/jquery.effects.blind.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.22.custom.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.22.custom.min.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.22.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.js").vendored? + assert sample_blob("ui/jquery-ui.min.js").vendored? + assert sample_blob("ui/jquery.ui.accordion.js").vendored? + assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored? + assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored? + + # jQuery Gantt + assert sample_blob("web-app/jquery-gantt/js/jquery.fn.gantt.js").vendored? + + # jQuery fancyBox + assert sample_blob("web-app/fancybox/jquery.fancybox.js").vendored? + + # Fuel UX + assert sample_blob("web-app/fuelux/js/fuelux.js").vendored? + + # jQuery File Upload + assert sample_blob("fileupload-9.0.0/jquery.fileupload-process.js").vendored? + + # Slick + assert sample_blob("web-app/slickgrid/controls/slick.columnpicker.js").vendored? + + # Leaflet plugins + assert sample_blob("leaflet-plugins/Leaflet.Coordinates-0.5.0.src.js").vendored? + assert sample_blob("leaflet-plugins/leaflet.draw-src.js").vendored? + assert sample_blob("leaflet-plugins/leaflet.spin.js").vendored? + + # MooTools + assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored? + assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored? + + # Dojo + assert sample_blob("public/javascripts/dojo.js").vendored? + + # MochiKit + assert sample_blob("public/javascripts/MochiKit.js").vendored? + + # YUI + assert sample_blob("public/javascripts/yahoo-dom-event.js").vendored? + assert sample_blob("public/javascripts/yahoo-min.js").vendored? + assert sample_blob("public/javascripts/yuiloader-dom-event.js").vendored? + + # WYS editors + assert sample_blob("public/javascripts/ckeditor.js").vendored? + assert sample_blob("public/javascripts/tiny_mce.js").vendored? + assert sample_blob("public/javascripts/tiny_mce_popup.js").vendored? + assert sample_blob("public/javascripts/tiny_mce_src.js").vendored? + + # AngularJS + assert sample_blob("public/javascripts/angular.js").vendored? + assert sample_blob("public/javascripts/angular.min.js").vendored? + + # D3.js + assert sample_blob("public/javascripts/d3.v3.js").vendored? + assert sample_blob("public/javascripts/d3.v3.min.js").vendored? + + # Modernizr + assert sample_blob("public/javascripts/modernizr-2.7.1.js").vendored? + assert sample_blob("public/javascripts/modernizr.custom.01009.js").vendored? + + # Fabric + assert sample_blob("fabfile.py").vendored? + + # WAF + assert sample_blob("waf").vendored? + + # Visual Studio IntelliSense + assert sample_blob("Scripts/jquery-1.7-vsdoc.js").vendored? + + # Microsoft Ajax + assert sample_blob("Scripts/MicrosoftAjax.debug.js").vendored? + assert sample_blob("Scripts/MicrosoftAjax.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcAjax.debug.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcAjax.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcValidation.debug.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcValidation.js").vendored? + + # jQuery validation plugin (MS bundles this with asp.net mvc) + assert sample_blob("Scripts/jquery.validate.js").vendored? + assert sample_blob("Scripts/jquery.validate.min.js").vendored? + assert sample_blob("Scripts/jquery.validate.unobtrusive.js").vendored? + assert sample_blob("Scripts/jquery.validate.unobtrusive.min.js").vendored? + assert sample_blob("Scripts/jquery.unobtrusive-ajax.js").vendored? + assert sample_blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored? + + # NuGet Packages + assert sample_blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored? + + # Font Awesome + assert sample_blob("some/asset/path/font-awesome.min.css").vendored? + assert sample_blob("some/asset/path/font-awesome.css").vendored? + + # Normalize + assert sample_blob("some/asset/path/normalize.css").vendored? + + # Carthage + assert sample_blob('Carthage/blah').vendored? + + # Cocoapods + assert sample_blob('Pods/blah').vendored? + + # Html5shiv + assert sample_blob("Scripts/html5shiv.js").vendored? + assert sample_blob("Scripts/html5shiv.min.js").vendored? + + # Test fixtures + assert sample_blob("test/fixtures/random.rkt").vendored? + assert sample_blob("Test/fixtures/random.rkt").vendored? + assert sample_blob("tests/fixtures/random.rkt").vendored? + + # Cordova/PhoneGap + assert sample_blob("cordova.js").vendored? + assert sample_blob("cordova.min.js").vendored? + assert sample_blob("cordova-2.1.0.js").vendored? + assert sample_blob("cordova-2.1.0.min.js").vendored? + + # Foundation js + assert sample_blob("foundation.js").vendored? + assert sample_blob("foundation.min.js").vendored? + assert sample_blob("foundation.abide.js").vendored? + + # Vagrant + assert sample_blob("Vagrantfile").vendored? + + # Gradle + assert sample_blob("gradlew").vendored? + assert sample_blob("gradlew.bat").vendored? + assert sample_blob("gradle/wrapper/gradle-wrapper.properties").vendored? + assert sample_blob("subproject/gradlew").vendored? + assert sample_blob("subproject/gradlew.bat").vendored? + assert sample_blob("subproject/gradle/wrapper/gradle-wrapper.properties").vendored? + + # Octicons + assert sample_blob("octicons.css").vendored? + assert sample_blob("public/octicons.min.css").vendored? + assert sample_blob("public/octicons/sprockets-octicons.scss").vendored? + + # Typesafe Activator + assert sample_blob("activator").vendored? + assert sample_blob("activator.bat").vendored? + assert sample_blob("subproject/activator").vendored? + assert sample_blob("subproject/activator.bat").vendored? + + assert_predicate fixture_blob(".google_apis/bar.jar"), :vendored? + assert_predicate fixture_blob("foo/.google_apis/bar.jar"), :vendored? + + # Sphinx docs + assert sample_blob("docs/_build/asset.doc").vendored? + assert sample_blob("docs/theme/file.css").vendored? + + # Vagrant + assert sample_blob("puphpet/file.pp").vendored? + + # Fabric.io + assert sample_blob("Fabric.framework/Fabric.h").vendored? + + # Crashlytics + assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored? + assert sample_blob("myapp/My Template.xctemplate/___FILEBASENAME___.h").vendored? + assert sample_blob("myapp/My Images.xcassets/some/stuff.imageset/Contents.json").vendored? + assert !sample_blob("myapp/MyData.json").vendored? + + # Jenkins + assert sample_blob("Jenkinsfile").vendored? + end + + def test_documentation + assert_predicate fixture_blob("doc/foo.html"), :documentation? + assert_predicate fixture_blob("docs/foo.html"), :documentation? + refute_predicate fixture_blob("project/doc/foo.html"), :documentation? + refute_predicate fixture_blob("project/docs/foo.html"), :documentation? + + assert_predicate fixture_blob("Documentation/foo.md"), :documentation? + assert_predicate fixture_blob("documentation/foo.md"), :documentation? + assert_predicate fixture_blob("project/Documentation/foo.md"), :documentation? + assert_predicate fixture_blob("project/documentation/foo.md"), :documentation? + + assert_predicate fixture_blob("javadoc/foo.html"), :documentation? + assert_predicate fixture_blob("project/javadoc/foo.html"), :documentation? + + assert_predicate fixture_blob("man/foo.html"), :documentation? + refute_predicate fixture_blob("project/man/foo.html"), :documentation? + + assert_predicate fixture_blob("README"), :documentation? + assert_predicate fixture_blob("README.md"), :documentation? + assert_predicate fixture_blob("README.txt"), :documentation? + assert_predicate fixture_blob("Readme"), :documentation? + assert_predicate fixture_blob("readme"), :documentation? + assert_predicate fixture_blob("foo/README"), :documentation? + + assert_predicate fixture_blob("CHANGE"), :documentation? + assert_predicate fixture_blob("CHANGE.md"), :documentation? + assert_predicate fixture_blob("CHANGE.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGE"), :documentation? + + assert_predicate fixture_blob("CHANGELOG"), :documentation? + assert_predicate fixture_blob("CHANGELOG.md"), :documentation? + assert_predicate fixture_blob("CHANGELOG.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGELOG"), :documentation? + + assert_predicate fixture_blob("CHANGES"), :documentation? + assert_predicate fixture_blob("CHANGES.md"), :documentation? + assert_predicate fixture_blob("CHANGES.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGES"), :documentation? + + assert_predicate fixture_blob("CONTRIBUTING"), :documentation? + assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation? + assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation? + assert_predicate fixture_blob("foo/CONTRIBUTING"), :documentation? + + assert_predicate fixture_blob("examples/some-file.pl"), :documentation? + assert_predicate fixture_blob("Examples/some-example-file.rb"), :documentation? + + assert_predicate fixture_blob("LICENSE"), :documentation? + assert_predicate fixture_blob("LICENCE.md"), :documentation? + assert_predicate fixture_blob("License.txt"), :documentation? + assert_predicate fixture_blob("LICENSE.txt"), :documentation? + assert_predicate fixture_blob("foo/LICENSE"), :documentation? + + assert_predicate fixture_blob("COPYING"), :documentation? + assert_predicate fixture_blob("COPYING.md"), :documentation? + assert_predicate fixture_blob("COPYING.txt"), :documentation? + assert_predicate fixture_blob("foo/COPYING"), :documentation? + + assert_predicate fixture_blob("INSTALL"), :documentation? + assert_predicate fixture_blob("INSTALL.md"), :documentation? + assert_predicate fixture_blob("INSTALL.txt"), :documentation? + assert_predicate fixture_blob("foo/INSTALL"), :documentation? + + refute_predicate fixture_blob("foo.md"), :documentation? + + # Samples + assert sample_blob("Samples/Ruby/foo.rb").documentation? + + assert_predicate fixture_blob("INSTALL.txt"), :documentation? + end + + def test_language + Samples.each do |sample| + blob = sample_blob(sample[:path]) + assert blob.language, "No language for #{sample[:path]}" + assert_equal sample[:language], blob.language.name, blob.name + end + + # Test language detection for files which shouldn't be used as samples + root = File.expand_path('../fixtures', __FILE__) + Dir.entries(root).each do |language| + next if language == '.' || language == '..' || language == 'Binary' || + File.basename(language) == 'ace_modes.json' + + # Each directory contains test files of a language + dirname = File.join(root, language) + Dir.entries(dirname).each do |filename| + # By default blob search the file in the samples; + # thus, we need to give it the absolute path + filepath = File.join(dirname, filename) + next unless File.file?(filepath) + + blob = fixture_blob(filepath) + if language == 'Data' + assert blob.language.nil?, "A language was found for #{filepath}" + elsif language == 'Generated' + assert blob.generated?, "#{filepath} is not a generated file" + else + assert blob.language, "No language for #{filepath}" + assert_equal language, blob.language.name, blob.name + end + end + end + end + + def test_minified_files_not_safe_to_highlight + assert !sample_blob("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? + end + + def test_empty + blob = Struct.new(:data) { include Linguist::BlobHelper } + + assert blob.new("").empty? + assert blob.new(nil).empty? + refute blob.new(" ").empty? + refute blob.new("nope").empty? + end + + def test_include_in_language_stats + vendored = sample_blob("bower_components/custom/custom.js") + assert_predicate vendored, :vendored? + refute_predicate vendored, :include_in_language_stats? + + documentation = fixture_blob("README") + assert_predicate documentation, :documentation? + refute_predicate documentation, :include_in_language_stats? + + generated = sample_blob("CSS/bootstrap.min.css") + assert_predicate generated, :generated? + refute_predicate generated, :include_in_language_stats? + + data = sample_blob("Ant Build System/filenames/ant.xml") + assert_equal :data, data.language.type + refute_predicate data, :include_in_language_stats? + + prose = sample_blob("Markdown/tender.md") + assert_equal :prose, prose.language.type + refute_predicate prose, :include_in_language_stats? + + included = sample_blob("HTML/pages.html") + assert_predicate included, :include_in_language_stats? + end end diff --git a/test/test_generated.rb b/test/test_generated.rb index 8fe57245..591f50ed 100644 --- a/test/test_generated.rb +++ b/test/test_generated.rb @@ -3,53 +3,77 @@ require_relative "./helper" class TestGenerated < Minitest::Test include Linguist - def samples_path - File.expand_path("../../samples", __FILE__) - end - class DataLoadedError < StandardError; end - def generated_without_loading_data(name) - blob = File.join(samples_path, name) + def generated_without_loading_data(blob) begin - assert Generated.generated?(blob, lambda { raise DataLoadedError.new }), "#{name} was not recognized as a generated file" + assert Generated.generated?(blob, lambda { raise DataLoadedError.new }), "#{blob} was not recognized as a generated file" rescue DataLoadedError - assert false, "Data was loaded when calling generated? on #{name}" + assert false, "Data was loaded when calling generated? on #{blob}" end end - def generated_loading_data(name) - blob = File.join(samples_path, name) - assert_raises(DataLoadedError, "Data wasn't loaded when calling generated? on #{name}") do + def generated_loading_data(blob) + assert_raises(DataLoadedError, "Data wasn't loaded when calling generated? on #{blob}") do Generated.generated?(blob, lambda { raise DataLoadedError.new }) end end - def test_check_generated_without_loading_data + def generated_fixture_without_loading_data(name) + generated_without_loading_data(File.join(fixtures_path, name)) + end + + def generated_fixture_loading_data(name) + generated_loading_data(File.join(fixtures_path, name)) + end + + def generated_sample_without_loading_data(name) + generated_without_loading_data(File.join(samples_path, name)) + end + + def generated_sample_loading_data(name) + generated_loading_data(File.join(samples_path, name)) + end + + def test_check_generated # Xcode project files - generated_without_loading_data("Binary/MainMenu.nib") - generated_without_loading_data("Dummy/foo.xcworkspacedata") - generated_without_loading_data("Dummy/foo.xcuserstate") + generated_sample_without_loading_data("Binary/MainMenu.nib") + generated_sample_without_loading_data("Dummy/foo.xcworkspacedata") + generated_sample_without_loading_data("Dummy/foo.xcuserstate") # .NET designer file - generated_without_loading_data("Dummu/foo.designer.cs") + generated_sample_without_loading_data("Dummu/foo.designer.cs") # Composer generated composer.lock file - generated_without_loading_data("JSON/composer.lock") + generated_sample_without_loading_data("JSON/composer.lock") # Node modules - generated_without_loading_data("Dummy/node_modules/foo.js") + generated_sample_without_loading_data("Dummy/node_modules/foo.js") # Godep saved dependencies - generated_without_loading_data("Godeps/Godeps.json") - generated_without_loading_data("Godeps/_workspace/src/github.com/kr/s3/sign.go") + generated_sample_without_loading_data("Godeps/Godeps.json") + generated_sample_without_loading_data("Godeps/_workspace/src/github.com/kr/s3/sign.go") # Generated by Zephir - generated_without_loading_data("Zephir/filenames/exception.zep.c") - generated_without_loading_data("Zephir/filenames/exception.zep.h") - generated_without_loading_data("Zephir/filenames/exception.zep.php") + generated_sample_without_loading_data("C/exception.zep.c") + generated_sample_without_loading_data("C/exception.zep.h") + generated_sample_without_loading_data("PHP/exception.zep.php") # Minified files - generated_loading_data("JavaScript/jquery-1.6.1.min.js") + generated_sample_loading_data("JavaScript/jquery-1.6.1.min.js") + + # Source Map + generated_fixture_without_loading_data("Data/bootstrap.css.map") + generated_fixture_loading_data("Data/sourcemap.v3.map") + generated_fixture_loading_data("Data/sourcemap.v1.map") + + # Specflow + generated_fixture_without_loading_data("Features/BindingCulture.feature.cs") + + # JFlex + generated_sample_loading_data("Java/JFlexLexer.java") + + # GrammarKit + generated_sample_loading_data("Java/GrammarKit.java") end end diff --git a/test/test_grammars.rb b/test/test_grammars.rb index 0bfb642c..29211cc2 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -3,12 +3,34 @@ require_relative "./helper" class TestGrammars < Minitest::Test ROOT = File.expand_path("../..", __FILE__) - # These grammars have no license but have been grandfathered in. New grammars - # must have a license that allows redistribution. - UNLICENSED_GRAMMARS_WHITELIST = %w[ - vendor/grammars/Sublime-Lasso - vendor/grammars/Sublime-REBOL - vendor/grammars/x86-assembly-textmate-bundle + PROJECT_WHITELIST = [ + # This grammar's MIT license is inside a subdirectory. + "vendor/grammars/SublimePapyrus", + + # This grammar has a nonstandard but acceptable license. + "vendor/grammars/gap-tmbundle", + + # These grammars have no license but have been grandfathered in. New grammars + # must have a license that allows redistribution. + "vendor/grammars/Sublime-Lasso", + "vendor/grammars/x86-assembly-textmate-bundle" + ].freeze + + # List of allowed SPDX license names + LICENSE_WHITELIST = %w[ + apache-2.0 + bsd-2-clause + bsd-3-clause + cc-by-sa-3.0 + gpl-2.0 + gpl-3.0 + lgpl-3.0 + mit + mpl-2.0 + textmate + unlicense + wtfpl + zlib ].freeze def setup @@ -57,48 +79,52 @@ class TestGrammars < Minitest::Test end end + def test_submodules_have_recognized_licenses + unrecognized = submodule_licenses.select { |k,v| v.nil? && Licensee::FSProject.new(k).license_file } + unrecognized.reject! { |k,v| PROJECT_WHITELIST.include?(k) } + message = "The following submodules have unrecognized licenses:\n* #{unrecognized.keys.join("\n* ")}\n" + message << "Please ensure that the project's LICENSE file contains the full text of the license." + assert_equal Hash.new, unrecognized, message + end + def test_submodules_have_licenses - categories = submodule_paths.group_by do |submodule| - files = Dir[File.join(ROOT, submodule, "*")] - license = files.find { |path| File.basename(path) =~ /\blicen[cs]e\b/i } || files.find { |path| File.basename(path) =~ /\bcopying\b/i } - if license.nil? - if readme = files.find { |path| File.basename(path) =~ /\Areadme\b/i } - license = readme if File.read(readme) =~ /\blicen[cs]e\b/i + unlicensed = submodule_licenses.select { |k,v| v.nil? }.reject { |k,v| PROJECT_WHITELIST.include?(k) } + message = "The following submodules don't have licenses:\n* #{unlicensed.keys.join("\n* ")}\n" + message << "Please ensure that the project has a LICENSE file, and that the LICENSE file contains the full text of the license." + assert_equal Hash.new, unlicensed, message + end + + def test_submodules_have_approved_licenses + unapproved = submodule_licenses.reject { |k,v| LICENSE_WHITELIST.include?(v) || PROJECT_WHITELIST.include?(k) }.map { |k,v| "#{k}: #{v}"} + message = "The following submodules have unapproved licenses:\n* #{unapproved.join("\n* ")}\n" + message << "The license must be added to the LICENSE_WHITELIST in /test/test_grammars.rb once approved." + assert_equal [], unapproved, message + end + + def test_submodules_whitelist_has_no_extra_entries + extra_whitelist_entries = PROJECT_WHITELIST - submodule_licenses.select { |k,v| v.nil? }.keys + not_present = extra_whitelist_entries.reject { |k,v| Dir.exists?(k) } + licensed = extra_whitelist_entries.select { |k,v| submodule_licenses[k] } + + msg = "The following whitelisted submodules don't appear to be part of the project:\n* #{not_present.join("\n* ")}" + assert_equal [], not_present, msg + + msg = "The following whitelisted submodules actually have licenses and don't need to be whitelisted:\n* #{licensed.join("\n* ")}" + assert_equal [], licensed, msg + end + + def test_submodules_use_https_links + File.open(".gitmodules", "r") do |fh| + ssh_submodules = [] + fh.each_line do |line| + if matches = line.match(/url = (git@.*)/) + submodule_link = matches.captures[0] + ssh_submodules.push(submodule_link) end end - if license.nil? - :unlicensed - elsif classify_license(license) - :licensed - else - :unrecognized - end + msg = "The following submodules don't have an HTTPS link:\n* #{ssh_submodules.join("\n* ")}" + assert_equal [], ssh_submodules, msg end - - unlicensed = categories[:unlicensed] || [] - unrecognized = categories[:unrecognized] || [] - disallowed_unlicensed = unlicensed - UNLICENSED_GRAMMARS_WHITELIST - disallowed_unrecognized = unrecognized - UNLICENSED_GRAMMARS_WHITELIST - extra_whitelist_entries = UNLICENSED_GRAMMARS_WHITELIST - (unlicensed | unrecognized) - - message = "" - if disallowed_unlicensed.any? - message << "The following grammar submodules don't seem to have a license. All grammars must have a license that permits redistribution.\n" - message << disallowed_unlicensed.sort.join("\n") - end - if disallowed_unrecognized.any? - message << "\n\n" unless message.empty? - message << "The following grammar submodules have an unrecognized license. Please update #{__FILE__} to recognize the license.\n" - message << disallowed_unrecognized.sort.join("\n") - end - if extra_whitelist_entries.any? - message << "\n\n" unless message.empty? - message << "The following grammar submodules are listed in UNLICENSED_GRAMMARS_WHITELIST but either have a license (yay!)\n" - message << "or have been removed from the repository. Please remove them from the whitelist.\n" - message << extra_whitelist_entries.sort.join("\n") - end - - assert disallowed_unlicensed.empty? && disallowed_unrecognized.empty? && extra_whitelist_entries.empty?, message end private @@ -107,28 +133,59 @@ class TestGrammars < Minitest::Test @submodule_paths ||= `git config --list --file "#{File.join(ROOT, ".gitmodules")}"`.lines.grep(/\.path=/).map { |line| line.chomp.split("=", 2).last } end + # Returns a hash of submodules in the form of submodule_path => license + def submodule_licenses + @@submodule_licenses ||= begin + submodules = {} + submodule_paths.each { |submodule| submodules[submodule] = submodule_license(submodule) } + submodules + end + end + + # Given the path to a submodule, return its SPDX-compliant license key + def submodule_license(submodule) + # Prefer Licensee to detect a submodule's license + project = Licensee::FSProject.new(submodule) + return project.license.key if project.license + + # We know a license file exists, but Licensee wasn't able to detect the license, + # Let's try our own more permissive regex method + if project.license_file + path = File.expand_path project.license_file.path, submodule + license = classify_license(path) + return license if license + end + + # Neither Licensee nor our own regex was able to detect the license, let's check the readme + files = Dir[File.join(ROOT, submodule, "*")] + if readme = files.find { |path| File.basename(path) =~ /\Areadme\b/i } + classify_license(readme) + end + end + def classify_license(path) content = File.read(path) + return unless content =~ /\blicen[cs]e\b/i if content.include?("Apache License") && content.include?("2.0") - "Apache 2.0" + "apache-2.0" elsif content.include?("GNU") && content =~ /general/i && content =~ /public/i if content =~ /version 2/i - "GPLv2" + "gpl-2.0" elsif content =~ /version 3/i - "GPLv3" + "gpl-3.0" end elsif content.include?("GPL") && content.include?("http://www.gnu.org/licenses/gpl.html") - "GPLv3" - elsif content.include?("Creative Commons") - "CC" + "gpl-3.0" + elsif content.include?("Creative Commons Attribution-Share Alike 3.0") + "cc-by-sa-3.0" elsif content.include?("tidy-license.txt") || content.include?("If not otherwise specified (see below)") "textmate" - elsif content =~ /^\s*[*-]\s+Redistribution/ || content.include?("Redistributions of source code") - "BSD" elsif content.include?("Permission is hereby granted") || content =~ /\bMIT\b/ - "MIT" - elsif content.include?("unlicense.org") - "unlicense" + "mit" + elsif content.include?("http://www.wtfpl.net/txt/copying/") + "wtfpl" + elsif content.include?("zlib") && content.include?("license") && content.include?("2. Altered source versions must be plainly marked as such") + "zlib" end end end diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 7520e828..702320e9 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -3,10 +3,6 @@ require_relative "./helper" class TestHeuristcs < Minitest::Test include Linguist - def samples_path - File.expand_path("../../samples", __FILE__) - end - def fixture(name) File.read(File.join(samples_path, name)) end @@ -26,113 +22,6 @@ class TestHeuristcs < Minitest::Test assert_equal [], results end - # Candidate languages = ["C++", "Objective-C"] - def test_obj_c_by_heuristics - # Only calling out '.h' filenames as these are the ones causing issues - assert_heuristics({ - "Objective-C" => all_fixtures("Objective-C", "*.h"), - "C++" => ["C++/render_adapter.cpp", "C++/ThreadedQueue.h"], - "C" => nil - }) - end - - def test_c_by_heuristics - languages = [Language["C++"], Language["Objective-C"], Language["C"]] - results = Heuristics.call(file_blob("C/ArrowLeft.h"), languages) - assert_equal [], results - end - - def test_detect_still_works_if_nothing_matches - blob = Linguist::FileBlob.new(File.join(samples_path, "Objective-C/hello.m")) - match = Language.detect(blob) - assert_equal Language["Objective-C"], match - end - - # Candidate languages = ["Perl", "Prolog"] - def test_pl_prolog_perl_by_heuristics - assert_heuristics({ - "Prolog" => "Prolog/turing.pl", - "Perl" => "Perl/perl-test.t", - }) - end - - # Candidate languages = ["ECL", "Prolog"] - def test_ecl_prolog_by_heuristics - assert_heuristics({ - "ECL" => "ECL/sample.ecl", - "Prolog" => "Prolog/or-constraint.ecl" - }) - end - - # Candidate languages = ["IDL", "Prolog"] - def test_pro_prolog_idl_by_heuristics - assert_heuristics({ - "Prolog" => "Prolog/logic-problem.pro", - "IDL" => "IDL/mg_acosh.pro" - }) - end - - # Candidate languages = ["AGS Script", "AsciiDoc"] - def test_asc_asciidoc_by_heuristics - assert_heuristics({ - "AsciiDoc" => "AsciiDoc/list.asc", - "AGS Script" => nil - }) - end - - def test_cl_by_heuristics - assert_heuristics({ - "Common Lisp" => all_fixtures("Common Lisp"), - "OpenCL" => all_fixtures("OpenCL") - }) - end - - def test_f_by_heuristics - assert_heuristics({ - "FORTRAN" => all_fixtures("FORTRAN"), - "Forth" => all_fixtures("Forth") - }) - end - - # Candidate languages = ["Hack", "PHP"] - def test_hack_by_heuristics - assert_heuristics({ - "Hack" => "Hack/funs.php", - "PHP" => "PHP/Model.php" - }) - end - - # Candidate languages = ["Scala", "SuperCollider"] - def test_sc_supercollider_scala_by_heuristics - assert_heuristics({ - "SuperCollider" => "SuperCollider/WarpPreset.sc", - "Scala" => "Scala/node11.sc" - }) - end - - def test_fs_by_heuristics - assert_heuristics({ - "F#" => all_fixtures("F#"), - "Forth" => all_fixtures("Forth"), - "GLSL" => all_fixtures("GLSL") - }) - end - - def test_fr_by_heuristics - assert_heuristics({ - "Frege" => all_fixtures("Frege"), - "Forth" => all_fixtures("Forth"), - "Text" => all_fixtures("Text") - }) - end - - def test_bb_by_heuristics - assert_heuristics({ - "BitBake" => all_fixtures("BitBake"), - "BlitzBasic" => all_fixtures("BlitzBasic") - }) - end - def assert_heuristics(hash) candidates = hash.keys.map { |l| Language[l] } @@ -144,10 +33,168 @@ class TestHeuristcs < Minitest::Test end end + def test_detect_still_works_if_nothing_matches + blob = Linguist::FileBlob.new(File.join(samples_path, "Objective-C/hello.m")) + match = Language.detect(blob) + assert_equal Language["Objective-C"], match + end + + # Candidate languages = ["AGS Script", "AsciiDoc", "Public Key"] + def test_asc_by_heuristics + assert_heuristics({ + "AsciiDoc" => all_fixtures("AsciiDoc", "*.asc"), + "AGS Script" => all_fixtures("AGS Script", "*.asc"), + "Public Key" => all_fixtures("Public Key", "*.asc") + }) + end + + def test_bb_by_heuristics + assert_heuristics({ + "BitBake" => all_fixtures("BitBake", "*.bb"), + "BlitzBasic" => all_fixtures("BlitzBasic", "*.bb") + }) + end + + def test_ch_by_heuristics + assert_heuristics({ + "xBase" => all_fixtures("xBase", ".ch") + }) + end + + def test_cl_by_heuristics + assert_heuristics({ + "Common Lisp" => all_fixtures("Common Lisp", "*.cl"), + "OpenCL" => all_fixtures("OpenCL", "*.cl") + }) + end + + def test_cs_by_heuristics + assert_heuristics({ + "C#" => all_fixtures("C#", "*.cs"), + "Smalltalk" => all_fixtures("Smalltalk", "*.cs") + }) + end + + # Candidate languages = ["ECL", "ECLiPSe"] + def test_ecl_by_heuristics + assert_heuristics({ + "ECL" => all_fixtures("ECL", "*.ecl"), + "ECLiPSe" => all_fixtures("ECLiPSe", "*.ecl") + }) + end + + def test_f_by_heuristics + assert_heuristics({ + "FORTRAN" => all_fixtures("FORTRAN", "*.f") + all_fixtures("FORTRAN", "*.for"), + "Forth" => all_fixtures("Forth", "*.f") + all_fixtures("Forth", "*.for") + }) + end + + def test_fr_by_heuristics + assert_heuristics({ + "Frege" => all_fixtures("Frege", "*.fr"), + "Forth" => all_fixtures("Forth", "*.fr"), + "Text" => all_fixtures("Text", "*.fr") + }) + end + + def test_fs_by_heuristics + assert_heuristics({ + "F#" => all_fixtures("F#", "*.fs"), + "Forth" => all_fixtures("Forth", "*.fs"), + "GLSL" => all_fixtures("GLSL", "*.fs") + }) + end + + # Candidate languages = ["Hack", "PHP"] + def test_hack_by_heuristics + assert_heuristics({ + "Hack" => all_fixtures("Hack", "*.php"), + "PHP" => all_fixtures("PHP", "*.php") + }) + end + def test_ls_by_heuristics assert_heuristics({ - "LiveScript" => "LiveScript/hello.ls", - "LoomScript" => "LoomScript/HelloWorld.ls" + "LiveScript" => all_fixtures("LiveScript", "*.ls"), + "LoomScript" => all_fixtures("LoomScript", "*.ls") + }) + end + + def test_lsp_by_heuristics + assert_heuristics({ + "Common Lisp" => all_fixtures("Common Lisp", "*.lsp") + all_fixtures("Common Lisp", "*.lisp"), + "NewLisp" => all_fixtures("NewLisp", "*.lsp") + all_fixtures("NewLisp", "*.lisp") + }) + end + + # Candidate languages = ["C++", "Objective-C"] + def test_obj_c_by_heuristics + # Only calling out '.h' filenames as these are the ones causing issues + assert_heuristics({ + "Objective-C" => all_fixtures("Objective-C", "*.h"), + "C++" => ["C++/scanner.h", "C++/qscicommand.h", "C++/v8.h", "C++/gdsdbreader.h"], + "C" => nil + }) + end + + # Candidate languages = ["Perl", "Perl6", "Prolog"] + def test_pl_prolog_perl_by_heuristics + assert_heuristics({ + "Prolog" => all_fixtures("Prolog", "*.pl"), + "Perl" => ["Perl/oo1.pl", "Perl/oo2.pl", "Perl/oo3.pl", "Perl/fib.pl", "Perl/use5.pl"], + "Perl6" => all_fixtures("Perl6", "*.pl") + }) + end + + # Candidate languages = ["Perl", "Perl6"] + def test_pm_perl_by_heuristics + assert_heuristics({ + "Perl" => all_fixtures("Perl", "*.pm"), + "Perl6" => all_fixtures("Perl6", "*.pm") + }) + end + + # Candidate languages = ["Pod", "Perl"] + def test_pod_by_heuristics + assert_heuristics({ + "Perl" => all_fixtures("Perl", "*.pod"), + "Pod" => all_fixtures("Pod", "*.pod") + }) + end + + # Candidate languages = ["IDL", "Prolog", "QMake", "INI"] + def test_pro_by_heuristics + assert_heuristics({ + "Prolog" => all_fixtures("Prolog", "*.pro"), + "IDL" => all_fixtures("IDL", "*.pro"), + "INI" => all_fixtures("INI", "*.pro"), + "QMake" => all_fixtures("QMake", "*.pro") + }) + end + + def test_r_by_heuristics + assert_heuristics({ + "R" => all_fixtures("R", "*.r") + all_fixtures("R", "*.R"), + "Rebol" => all_fixtures("Rebol", "*.r") + }) + end + + # Candidate languages = ["Scala", "SuperCollider"] + def test_sc_supercollider_scala_by_heuristics + assert_heuristics({ + "SuperCollider" => all_fixtures("SuperCollider", "*.sc"), + "Scala" => all_fixtures("Scala", "*.sc") + }) + end + + # Candidate languages = ["Perl", "Perl6"] + def test_t_perl_by_heuristics + assert_heuristics({ + "Perl" => all_fixtures("Perl", "*.t"), + "Perl6" => ["Perl6/01-dash-uppercase-i.t", "Perl6/01-parse.t", "Perl6/advent2009-day16.t", + "Perl6/basic-open.t", "Perl6/calendar.t", "Perl6/for.t", "Perl6/hash.t", + "Perl6/listquote-whitespace.t"] }) end diff --git a/test/test_instrumentation.rb b/test/test_instrumentation.rb new file mode 100644 index 00000000..ab0615e5 --- /dev/null +++ b/test/test_instrumentation.rb @@ -0,0 +1,50 @@ +require_relative "./helper" + +class TestInstrumentation < Minitest::Test + include Linguist + + class LocalInstrumenter + Event = Struct.new(:name, :args) + + attr_reader :events + + def initialize + @events = [] + end + + def instrument(name, *args) + @events << Event.new(name, args) + yield if block_given? + end + end + + def setup + Linguist.instrumenter = LocalInstrumenter.new + end + + def teardown + Linguist.instrumenter = nil + end + + def test_detection_instrumentation_with_binary_blob + binary_blob = fixture_blob("Binary/octocat.ai") + Language.detect(binary_blob) + + # Shouldn't instrument this (as it's binary) + assert_equal 0, Linguist.instrumenter.events.size + end + + def test_modeline_instrumentation + blob = fixture_blob("Data/Modelines/ruby") + Language.detect(blob) + + detect_event = Linguist.instrumenter.events.last + detect_event_payload = detect_event[:args].first + + assert_equal 3, Linguist.instrumenter.events.size + assert_equal "linguist.detected", detect_event.name + assert_equal Language['Ruby'], detect_event_payload[:language] + assert_equal blob, detect_event_payload[:blob] + assert_equal Linguist::Strategy::Modeline, detect_event_payload[:strategy] + end +end diff --git a/test/test_language.rb b/test/test_language.rb index 1a39744e..5613f235 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -57,6 +57,7 @@ class TestLanguage < Minitest::Test assert_equal Language['Shell'], Language.find_by_alias('sh') assert_equal Language['Shell'], Language.find_by_alias('shell') assert_equal Language['Shell'], Language.find_by_alias('zsh') + assert_equal Language['SuperCollider'], Language.find_by_alias('supercollider') assert_equal Language['TeX'], Language.find_by_alias('tex') assert_equal Language['TypeScript'], Language.find_by_alias('ts') assert_equal Language['VimL'], Language.find_by_alias('vim') @@ -79,7 +80,6 @@ class TestLanguage < Minitest::Test assert_equal Language['Java'], Language['Java Server Pages'].group assert_equal Language['Python'], Language['Cython'].group assert_equal Language['Python'], Language['NumPy'].group - assert_equal Language['Shell'], Language['Batchfile'].group assert_equal Language['Shell'], Language['Gentoo Ebuild'].group assert_equal Language['Shell'], Language['Gentoo Eclass'].group assert_equal Language['Shell'], Language['Tcsh'].group @@ -120,6 +120,7 @@ class TestLanguage < Minitest::Test assert_equal 'vim', Language['VimL'].search_term assert_equal 'jsp', Language['Java Server Pages'].search_term assert_equal 'rst', Language['reStructuredText'].search_term + assert_equal 'supercollider', Language['SuperCollider'].search_term end def test_popular @@ -139,6 +140,7 @@ class TestLanguage < Minitest::Test assert_equal :programming, Language['Ruby'].type assert_equal :programming, Language['TypeScript'].type assert_equal :programming, Language['Makefile'].type + assert_equal :programming, Language['SuperCollider'].type end def test_markup @@ -155,10 +157,6 @@ class TestLanguage < Minitest::Test assert_equal :prose, Language['Org'].type end - def test_other - assert_nil Language['Brainfuck'].type - end - def test_searchable assert Language['Ruby'].searchable? assert !Language['Gettext Catalog'].searchable? @@ -192,7 +190,7 @@ class TestLanguage < Minitest::Test assert_equal [], Language.find_by_extension('foo.rb') assert_equal [Language['Ruby']], Language.find_by_extension('rb') assert_equal [Language['Ruby']], Language.find_by_extension('.rb') - assert_equal [Language['M'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') + assert_equal [Language['Limbo'], Language['M'], Language['MUF'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') end def test_find_all_by_extension @@ -232,7 +230,8 @@ class TestLanguage < Minitest::Test "python" => "Python", "python2" => "Python", "python3" => "Python", - "sbcl" => "Common Lisp" + "sbcl" => "Common Lisp", + "sclang" => "SuperCollider" }.each do |interpreter, language| assert_equal [Language[language]], Language.find_by_interpreter(interpreter) end @@ -268,6 +267,24 @@ class TestLanguage < Minitest::Test assert_equal 'AGS Script', Language.find_by_alias('AGS').name end + def test_find_ignores_comma + assert_equal 'Rust', Language['rust,no_run'].name + end + + def test_find_by_name_ignores_comma + assert_equal Language['Rust'], Language.find_by_name('rust,no_run') + end + + def test_find_by_alias_ignores_comma + assert_equal Language['Rust'], Language.find_by_alias('rust,no_run') + end + + def test_doesnt_blow_up_with_blank_lookup + assert_equal nil, Language.find_by_alias('') + assert_equal nil, Language.find_by_name(nil) + assert_equal nil, Language[""] + end + def test_name assert_equal 'Perl', Language['Perl'].name assert_equal 'Python', Language['Python'].name @@ -290,9 +307,9 @@ class TestLanguage < Minitest::Test def test_color assert_equal '#701516', Language['Ruby'].color - assert_equal '#3581ba', Language['Python'].color + assert_equal '#3572A5', Language['Python'].color assert_equal '#f1e05a', Language['JavaScript'].color - assert_equal '#31859c', Language['TypeScript'].color + assert_equal '#2b7489', Language['TypeScript'].color assert_equal '#3d9970', Language['LSL'].color end @@ -326,6 +343,7 @@ class TestLanguage < Minitest::Test assert Language['Perl'].extensions.include?('.pl') assert Language['Python'].extensions.include?('.py') assert Language['Ruby'].extensions.include?('.rb') + assert Language['SuperCollider'].extensions.include?('.scd') end def test_primary_extension @@ -336,6 +354,7 @@ class TestLanguage < Minitest::Test assert_equal '.coffee', Language['CoffeeScript'].primary_extension assert_equal '.t', Language['Turing'].primary_extension assert_equal '.ts', Language['TypeScript'].primary_extension + assert_equal '.sc', Language['SuperCollider'].primary_extension end def test_eql @@ -358,6 +377,15 @@ class TestLanguage < Minitest::Test assert missing.empty?, message end + def test_all_languages_have_type + missing = Language.all.select { |language| language.type.nil? } + message = "The following languages do not have a type listed in grammars.yml. Please add types for all new languages.\n" + + width = missing.map { |language| language.name.length }.max + message << missing.map { |language| sprintf("%-#{width}s", language.name) }.sort.join("\n") + assert missing.empty?, message + end + def test_all_languages_have_a_valid_ace_mode ace_fixture_path = File.join('test', 'fixtures', 'ace_modes.json') skip("No ace_modes.json file") unless File.exist?(ace_fixture_path) diff --git a/test/test_modelines.rb b/test/test_modelines.rb new file mode 100644 index 00000000..85718955 --- /dev/null +++ b/test/test_modelines.rb @@ -0,0 +1,55 @@ +require_relative "./helper" + +class TestModelines < Minitest::Test + include Linguist + + def assert_modeline(language, blob) + assert_equal language, Linguist::Strategy::Modeline.call(blob).first + end + + def test_modeline_strategy + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby2") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby3") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby4") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby5") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby6") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby7") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby8") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby9") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplus") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs3") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs4") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs5") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs6") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9") + assert_modeline Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c") + assert_modeline Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl") + assert_modeline Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md") + assert_modeline Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc") + end + + def test_modeline_languages + assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby").language + assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby2").language + assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby3").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplus").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs3").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs4").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs5").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs6").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9").language + assert_equal Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c").language + assert_equal Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl").language + assert_equal Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md").language + assert_equal Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc").language + end +end diff --git a/test/test_pedantic.rb b/test/test_pedantic.rb index 0861b8d8..d34f292e 100644 --- a/test/test_pedantic.rb +++ b/test/test_pedantic.rb @@ -9,10 +9,10 @@ class TestPedantic < Minitest::Test assert_sorted LANGUAGES.keys end - def test_extensions_are_sorted + def test_nonprimary_extensions_are_sorted LANGUAGES.each do |name, language| extensions = language['extensions'] - assert_sorted extensions[1..-1] if extensions && extensions.size > 1 + assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1 end end @@ -32,6 +32,18 @@ class TestPedantic < Minitest::Test end end + def test_heuristics_are_sorted + file = File.expand_path("../../lib/linguist/heuristics.rb", __FILE__) + heuristics = open(file).each.grep(/^ *disambiguate/) + assert_sorted heuristics + end + + def test_heuristics_tests_are_sorted + file = File.expand_path("../test_heuristics.rb", __FILE__) + tests = open(file).each.grep(/^ *def test_[a-z_]+_by_heuristics/) + assert_sorted tests + end + def assert_sorted(list) list.each_cons(2) do |previous, item| flunk "#{previous} should come after #{item}" if previous > item diff --git a/test/test_repository.rb b/test/test_repository.rb index b661668d..a1f9fc86 100644 --- a/test/test_repository.rb +++ b/test/test_repository.rb @@ -99,4 +99,26 @@ class TestRepository < Minitest::Test # overridden .gitattributes assert !override_unvendored.vendored? end + + def test_linguist_override_documentation? + attr_commit = "d4c8fb8a28e91f97a7e53428a365c0abbac36d3d" + repo = linguist_repo(attr_commit).read_index + + readme = Linguist::LazyBlob.new(rugged_repository, attr_commit, "README.md") + arduino = Linguist::LazyBlob.new(rugged_repository, attr_commit, "samples/Arduino/hello.ino") + + # overridden by .gitattributes + refute_predicate readme, :documentation? + assert_predicate arduino, :documentation? + end + + def test_linguist_override_generated? + attr_commit = "351c1cc8fd57340839bdb400d7812332af80e9bd" + repo = linguist_repo(attr_commit).read_index + + rakefile = Linguist::LazyBlob.new(rugged_repository, attr_commit, "Rakefile") + + # overridden .gitattributes + assert rakefile.generated? + end end diff --git a/test/test_samples.rb b/test/test_samples.rb index 0b0722dc..dc3524c2 100644 --- a/test/test_samples.rb +++ b/test/test_samples.rb @@ -34,6 +34,14 @@ class TestSamples < Minitest::Test assert !data["interpreters"].empty? end + def test_ext_or_shebang + Samples.each do |sample| + if sample[:extname].to_s.empty? && !sample[:filename] + assert sample[:interpreter], "#{sample[:path]} should have a file extension or a shebang, maybe it belongs in filenames/ subdir" + end + end + end + # Check that there aren't samples with extensions or interpreters that # aren't explicitly defined in languages.yml languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) @@ -42,16 +50,15 @@ class TestSamples < Minitest::Test options['extensions'] ||= [] if extnames = Samples.cache['extnames'][name] extnames.each do |extname| - next if extname == '.script!' - assert options['extensions'].index { |x| x.end_with? extname }, "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml" + assert options['extensions'].index { |x| x.downcase.end_with? extname.downcase }, "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" end end options['interpreters'] ||= [] if interpreters = Samples.cache['interpreters'][name] interpreters.each do |interpreter| - # next if extname == '.script!' - assert options['interpreters'].include?(interpreter), "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" + assert options['interpreters'].include?(interpreter), + "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" end end end @@ -67,7 +74,7 @@ class TestSamples < Minitest::Test if language_matches.length > 1 language_matches.each do |match| samples = "samples/#{match.name}/*#{extension}" - assert Dir.glob(samples).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md" + assert Dir.glob(samples, File::FNM_CASEFOLD).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md" end end end diff --git a/test/test_shebang.rb b/test/test_shebang.rb index a2d25117..de3344ec 100644 --- a/test/test_shebang.rb +++ b/test/test_shebang.rb @@ -38,6 +38,7 @@ class TestShebang < Minitest::Test assert_interpreter "perl", "#! perl" assert_interpreter "ruby", "#!/bin/sh\n\n\nexec ruby $0 $@" - end + assert_interpreter "sh", "#! /usr/bin/env A=003 B=149 C=150 D=xzd E=base64 F=tar G=gz H=head I=tail sh" + end end diff --git a/test/test_tokenizer.rb b/test/test_tokenizer.rb index 24a74105..b8b486cb 100644 --- a/test/test_tokenizer.rb +++ b/test/test_tokenizer.rb @@ -3,10 +3,6 @@ require_relative "./helper" class TestTokenizer < Minitest::Test include Linguist - def samples_path - File.expand_path("../../samples", __FILE__) - end - def tokenize(data) data = File.read(File.join(samples_path, data.to_s)) if data.is_a?(Symbol) Tokenizer.tokenize(data) @@ -29,18 +25,26 @@ class TestTokenizer < Minitest::Test assert_equal %w(add \( \)), tokenize('add(123, 456)') assert_equal %w(|), tokenize('0x01 | 0x10') assert_equal %w(*), tokenize('500.42 * 1.0') + assert_equal %w(), tokenize('1.23e-04') + assert_equal %w(), tokenize('1.0f') + assert_equal %w(), tokenize('1234ULL') + assert_equal %w(G1 X55 Y5 F2000), tokenize('G1 X55 Y5 F2000') end def test_skip_comments assert_equal %w(foo), tokenize("foo\n# Comment") assert_equal %w(foo bar), tokenize("foo\n# Comment\nbar") assert_equal %w(foo), tokenize("foo\n// Comment") + assert_equal %w(foo), tokenize("foo\n-- Comment") + assert_equal %w(foo), tokenize("foo\n\" Comment") assert_equal %w(foo), tokenize("foo /* Comment */") assert_equal %w(foo), tokenize("foo /* \nComment\n */") assert_equal %w(foo), tokenize("foo ") assert_equal %w(foo), tokenize("foo {- Comment -}") assert_equal %w(foo), tokenize("foo (* Comment *)") assert_equal %w(%), tokenize("2 % 10\n% Comment") + assert_equal %w(foo bar), tokenize("foo\n\"\"\"\nComment\n\"\"\"\nbar") + assert_equal %w(foo bar), tokenize("foo\n'''\nComment\n'''\nbar") end def test_sgml_tags @@ -84,16 +88,16 @@ class TestTokenizer < Minitest::Test end def test_shebang - assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh.script!")[0] - assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash.script!")[0] - assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh.script!")[0] - assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl.script!")[0] - assert_equal "SHEBANG#!python", tokenize(:"Python/python.script!")[0] - assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0] - assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0] - assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0] - assert_equal "SHEBANG#!php", tokenize(:"PHP/php.script!")[0] - assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial.script!")[0] + assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh")[0] + assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash")[0] + assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh")[0] + assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl")[0] + assert_equal "SHEBANG#!python", tokenize(:"Python/python")[0] + assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby")[0] + assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2")[0] + assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js")[0] + assert_equal "SHEBANG#!php", tokenize(:"PHP/php")[0] + assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial")[0] assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0] end diff --git a/vendor/grammars/AutoHotkey b/vendor/grammars/AutoHotkey new file mode 160000 index 00000000..4da62de2 --- /dev/null +++ b/vendor/grammars/AutoHotkey @@ -0,0 +1 @@ +Subproject commit 4da62de23dc705bf9b95e76cf5e8e51aa1e68fea diff --git a/vendor/grammars/BrightScript.tmbundle b/vendor/grammars/BrightScript.tmbundle new file mode 160000 index 00000000..905791b0 --- /dev/null +++ b/vendor/grammars/BrightScript.tmbundle @@ -0,0 +1 @@ +Subproject commit 905791b02bfc7256604bbc874f8c259713d62b12 diff --git a/vendor/grammars/CLIPS-sublime b/vendor/grammars/CLIPS-sublime new file mode 160000 index 00000000..6a11bc51 --- /dev/null +++ b/vendor/grammars/CLIPS-sublime @@ -0,0 +1 @@ +Subproject commit 6a11bc512e3f22ae9636e64bc101e79334501089 diff --git a/vendor/grammars/ColdFusion b/vendor/grammars/ColdFusion index ee54c805..c54a4c5f 160000 --- a/vendor/grammars/ColdFusion +++ b/vendor/grammars/ColdFusion @@ -1 +1 @@ -Subproject commit ee54c80589c1618c5a8c55afdc83f770d7bdf44b +Subproject commit c54a4c5f5e9b7d5992a28d9d45b9adb023520428 diff --git a/vendor/grammars/Creole b/vendor/grammars/Creole new file mode 160000 index 00000000..bac4656c --- /dev/null +++ b/vendor/grammars/Creole @@ -0,0 +1 @@ +Subproject commit bac4656c8d2a000d6c5940a3d3798a856e44396f diff --git a/vendor/grammars/Docker.tmbundle b/vendor/grammars/Docker.tmbundle index 8f28cd87..08585643 160000 --- a/vendor/grammars/Docker.tmbundle +++ b/vendor/grammars/Docker.tmbundle @@ -1 +1 @@ -Subproject commit 8f28cd8714072c1a6d3478e700948ee20143c561 +Subproject commit 08585643c0b84eb6f76ef56fbba7183185e65548 diff --git a/vendor/grammars/Elm.tmLanguage b/vendor/grammars/Elm.tmLanguage index 1d2e0963..437033bd 160000 --- a/vendor/grammars/Elm.tmLanguage +++ b/vendor/grammars/Elm.tmLanguage @@ -1 +1 @@ -Subproject commit 1d2e0963012d4959d5517c3dd0dcf486b1ded74b +Subproject commit 437033bd48350b49bc0dfa734206bfa0ba5de337 diff --git a/vendor/grammars/FreeMarker.tmbundle b/vendor/grammars/FreeMarker.tmbundle new file mode 160000 index 00000000..7259485a --- /dev/null +++ b/vendor/grammars/FreeMarker.tmbundle @@ -0,0 +1 @@ +Subproject commit 7259485a01310af4bf63ba4ff37cbba3724ae77f diff --git a/vendor/grammars/G-Code b/vendor/grammars/G-Code new file mode 160000 index 00000000..81e8b03e --- /dev/null +++ b/vendor/grammars/G-Code @@ -0,0 +1 @@ +Subproject commit 81e8b03e3dc71f2c8eddfb389dbda21a320f45c1 diff --git a/vendor/grammars/GDScript-sublime b/vendor/grammars/GDScript-sublime new file mode 160000 index 00000000..44ac5c4a --- /dev/null +++ b/vendor/grammars/GDScript-sublime @@ -0,0 +1 @@ +Subproject commit 44ac5c4af2e7b28a7abe0a5c56855b22d6ef3b19 diff --git a/vendor/grammars/Handlebars b/vendor/grammars/Handlebars index 87669eb0..2e9f6884 160000 --- a/vendor/grammars/Handlebars +++ b/vendor/grammars/Handlebars @@ -1 +1 @@ -Subproject commit 87669eb08dc58f6237f0c884774dc387a9e5e9da +Subproject commit 2e9f68840073f5a3de13cbfed10e31b199760654 diff --git a/vendor/grammars/IDL-Syntax b/vendor/grammars/IDL-Syntax index 3baeaeaf..bb21604f 160000 --- a/vendor/grammars/IDL-Syntax +++ b/vendor/grammars/IDL-Syntax @@ -1 +1 @@ -Subproject commit 3baeaeafac9e30e8a4b0789105641e0b59da32a9 +Subproject commit bb21604f07b5ad322757f04f7292df4f50442ad0 diff --git a/vendor/grammars/InnoSetup b/vendor/grammars/InnoSetup new file mode 160000 index 00000000..9da37ae6 --- /dev/null +++ b/vendor/grammars/InnoSetup @@ -0,0 +1 @@ +Subproject commit 9da37ae690654daf8a2366cccb5ba1f5bac3acad diff --git a/vendor/grammars/JSyntax b/vendor/grammars/JSyntax new file mode 160000 index 00000000..74971149 --- /dev/null +++ b/vendor/grammars/JSyntax @@ -0,0 +1 @@ +Subproject commit 74971149b5926f800b8eb157925a1670a57846b4 diff --git a/vendor/grammars/Julia.tmbundle b/vendor/grammars/Julia.tmbundle index 6541d86c..e2918776 160000 --- a/vendor/grammars/Julia.tmbundle +++ b/vendor/grammars/Julia.tmbundle @@ -1 +1 @@ -Subproject commit 6541d86c1f6f19a3a0a26917e9dd81b043b37bc3 +Subproject commit e2918776e14506e0bc100c2501c56188acfc2bd3 diff --git a/vendor/grammars/Lean.tmbundle b/vendor/grammars/Lean.tmbundle new file mode 160000 index 00000000..943ac84b --- /dev/null +++ b/vendor/grammars/Lean.tmbundle @@ -0,0 +1 @@ +Subproject commit 943ac84bf69bfbcab54eeeebba6d66c90ed700ff diff --git a/vendor/grammars/LiveScript.tmbundle b/vendor/grammars/LiveScript.tmbundle index 801cfac6..05dc4639 160000 --- a/vendor/grammars/LiveScript.tmbundle +++ b/vendor/grammars/LiveScript.tmbundle @@ -1 +1 @@ -Subproject commit 801cfac6023c43b03354bd6b0fb79aeb02ebd779 +Subproject commit 05dc46397a05a28820a07b69019c3a113518ac46 diff --git a/vendor/grammars/MagicPython b/vendor/grammars/MagicPython new file mode 160000 index 00000000..82c76aff --- /dev/null +++ b/vendor/grammars/MagicPython @@ -0,0 +1 @@ +Subproject commit 82c76aff704192fb9ed1f505360635f575f13b5a diff --git a/vendor/grammars/Modelica b/vendor/grammars/Modelica new file mode 160000 index 00000000..10c5dc64 --- /dev/null +++ b/vendor/grammars/Modelica @@ -0,0 +1 @@ +Subproject commit 10c5dc6484b6d851a109025af64a83ae0e6a6c73 diff --git a/vendor/grammars/NSIS b/vendor/grammars/NSIS index 53b64a0a..68a4534d 160000 --- a/vendor/grammars/NSIS +++ b/vendor/grammars/NSIS @@ -1 +1 @@ -Subproject commit 53b64a0a11a1a505be1aa6b382edef82690bf41e +Subproject commit 68a4534dde63a2b3a7b2d100ebb565e0cfebc024 diff --git a/vendor/grammars/NimLime b/vendor/grammars/NimLime index a7067c60..4db349dd 160000 --- a/vendor/grammars/NimLime +++ b/vendor/grammars/NimLime @@ -1 +1 @@ -Subproject commit a7067c605b893585c056d32a20a1b953f100e138 +Subproject commit 4db349dda5219a37e99a0375e2a5d8a001fbf20e diff --git a/vendor/grammars/PHP-Twig.tmbundle b/vendor/grammars/PHP-Twig.tmbundle index ad0f5147..f4f7529a 160000 --- a/vendor/grammars/PHP-Twig.tmbundle +++ b/vendor/grammars/PHP-Twig.tmbundle @@ -1 +1 @@ -Subproject commit ad0f5147e6d7ae70469084659cffcfd22575869e +Subproject commit f4f7529ac2a07527caa7c9154b87c96d17e18aa1 diff --git a/vendor/grammars/PogoScript.tmbundle b/vendor/grammars/PogoScript.tmbundle new file mode 160000 index 00000000..2255586f --- /dev/null +++ b/vendor/grammars/PogoScript.tmbundle @@ -0,0 +1 @@ +Subproject commit 2255586f9ec69bab052b2250615db9b824774178 diff --git a/vendor/grammars/Racket b/vendor/grammars/Racket new file mode 160000 index 00000000..02739c25 --- /dev/null +++ b/vendor/grammars/Racket @@ -0,0 +1 @@ +Subproject commit 02739c25aefb484a031e58ff7a628adf4c97225f diff --git a/vendor/grammars/SCSS.tmbundle b/vendor/grammars/SCSS.tmbundle index 41475020..49a74571 160000 --- a/vendor/grammars/SCSS.tmbundle +++ b/vendor/grammars/SCSS.tmbundle @@ -1 +1 @@ -Subproject commit 41475020634fc07b5c03ff0dfaee64c2491fa32b +Subproject commit 49a74571e7346b082016168fd702d41d1d319727 diff --git a/vendor/grammars/SMT.tmbundle b/vendor/grammars/SMT.tmbundle new file mode 160000 index 00000000..b72f1aef --- /dev/null +++ b/vendor/grammars/SMT.tmbundle @@ -0,0 +1 @@ +Subproject commit b72f1aef2c841ac2f9ff444e98a139011bd910b3 diff --git a/vendor/grammars/Stata.tmbundle b/vendor/grammars/Stata.tmbundle index bc1e3634..50685c27 160000 --- a/vendor/grammars/Stata.tmbundle +++ b/vendor/grammars/Stata.tmbundle @@ -1 +1 @@ -Subproject commit bc1e36344d4d7aa0d9c53757639d3f56511565e7 +Subproject commit 50685c273588cf6bd4828cb30432c7152df91c4e diff --git a/vendor/grammars/Stylus b/vendor/grammars/Stylus new file mode 160000 index 00000000..9766d8d9 --- /dev/null +++ b/vendor/grammars/Stylus @@ -0,0 +1 @@ +Subproject commit 9766d8d936a9939dfd11b5d73cb0e9542b2a078f diff --git a/vendor/grammars/Sublime-Coq b/vendor/grammars/Sublime-Coq index 964eb8f9..0909903a 160000 --- a/vendor/grammars/Sublime-Coq +++ b/vendor/grammars/Sublime-Coq @@ -1 +1 @@ -Subproject commit 964eb8f914cd65f107f55eef8e51372fdf77bd53 +Subproject commit 0909903a9ac9bb4771d78dc6e0a306196d0fe068 diff --git a/vendor/grammars/Sublime-HTTP b/vendor/grammars/Sublime-HTTP new file mode 160000 index 00000000..00999986 --- /dev/null +++ b/vendor/grammars/Sublime-HTTP @@ -0,0 +1 @@ +Subproject commit 0099998617eb784fa27d8a47e289058d9a6307ab diff --git a/vendor/grammars/Sublime-Inform b/vendor/grammars/Sublime-Inform deleted file mode 160000 index c52a11e5..00000000 --- a/vendor/grammars/Sublime-Inform +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c52a11e50697897469c9ad7c7a59dfdb683db654 diff --git a/vendor/grammars/Sublime-Inform/.gitignore b/vendor/grammars/Sublime-Inform/.gitignore new file mode 100644 index 00000000..9bea4330 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/vendor/grammars/Sublime-Inform/Inform7/book.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/book.sublime-snippet new file mode 100644 index 00000000..d00b609b --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/book.sublime-snippet @@ -0,0 +1,6 @@ + + + book + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/chapter.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/chapter.sublime-snippet new file mode 100644 index 00000000..344ae92d --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/chapter.sublime-snippet @@ -0,0 +1,6 @@ + + + chapter + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/door.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/door.sublime-snippet new file mode 100644 index 00000000..9504585b --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/door.sublime-snippet @@ -0,0 +1,7 @@ + + + door + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/inform7.JSON-tmLanguage b/vendor/grammars/Sublime-Inform/Inform7/inform7.JSON-tmLanguage new file mode 100644 index 00000000..e5b6e92b --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/inform7.JSON-tmLanguage @@ -0,0 +1,34 @@ +{ "name": "Inform7", + "scopeName": "source.Inform7", + "fileTypes": ["i7x"], + "patterns": [ + { "name": "keyword.control.Inform7", + "match": "\\b(Include|Release)\\b" + }, + { "name" : "comment.block.Inform7", + "begin" : "\\[", + "end" : "\\]", + "comment" : "All comments in Inform7 are delimited this way." + }, + { "name" : "string.quoted.double.Inform7", + "begin" : "\"", + "end" : "\"", + "patterns": [ + { "name" : "keyword.operator.Inform7", + "begin" : "\\[", + "end" : "\\]", + "comment" : "For logic inside of strings." + } + ] + }, + { "name" : "storage.type.Inform7", + "match" : "(Volume|Book|Chapter|Part|Section|Table)\\s+\\d?\\s+-?\\s+((?:\\w|\\s|-)*)", + "comment": "Matches headings for major sections in Inform7" + }, + { "name": "constant.numeric.Inform7", + "match": "([0-9])+", + "comment":"Gotta call out the numbers!" + } + ], + "uuid": "0c4cbdee-beb7-4ea6-af56-27246d479373" +} \ No newline at end of file diff --git a/vendor/grammars/Sublime-Inform/Inform7/inform7.tmLanguage b/vendor/grammars/Sublime-Inform/Inform7/inform7.tmLanguage new file mode 100755 index 00000000..5609885e --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/inform7.tmLanguage @@ -0,0 +1,74 @@ + + + + + fileTypes + + i7x + inform + ni + + name + Inform7 + patterns + + + match + \b(Include|Release)\b + name + keyword.control.Inform7 + + + begin + \[ + comment + All comments in Inform7 are delimited this way. + end + \] + name + comment.block.Inform7 + + + begin + " + end + " + name + string.quoted.double.Inform7 + patterns + + + begin + \[ + comment + For logic inside of strings. + end + \] + name + keyword.operator.Inform7 + + + + + comment + Matches headings for major sections in Inform7 + match + (Volume|Book|Chapter|Part|Section|Table)\s+\d?\s+-?\s+((?:\w|\s|-)*) + name + storage.type.Inform7 + + + comment + Gotta call out the numbers! + match + ([0-9])+ + name + constant.numeric.Inform7 + + + scopeName + source.Inform7 + uuid + 0c4cbdee-beb7-4ea6-af56-27246d479373 + + diff --git a/vendor/grammars/Sublime-Inform/Inform7/object.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/object.sublime-snippet new file mode 100644 index 00000000..65f040af --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/object.sublime-snippet @@ -0,0 +1,8 @@ + + + object + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/part.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/part.sublime-snippet new file mode 100644 index 00000000..9e161cca --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/part.sublime-snippet @@ -0,0 +1,6 @@ + + + part + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/room.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/room.sublime-snippet new file mode 100644 index 00000000..b6abef45 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/room.sublime-snippet @@ -0,0 +1,7 @@ + + + room + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/scene.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/scene.sublime-snippet new file mode 100644 index 00000000..fd4be030 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/scene.sublime-snippet @@ -0,0 +1,11 @@ + + + scene + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/section.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/section.sublime-snippet new file mode 100644 index 00000000..7ab043cb --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/section.sublime-snippet @@ -0,0 +1,6 @@ + + + section + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/volume.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/volume.sublime-snippet new file mode 100644 index 00000000..0721fcbf --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/volume.sublime-snippet @@ -0,0 +1,6 @@ + + + volume + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/LICENSE.txt b/vendor/grammars/Sublime-Inform/LICENSE.txt new file mode 100644 index 00000000..cda6f052 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Nate Dickson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/grammars/Sublime-Inform/README.md b/vendor/grammars/Sublime-Inform/README.md new file mode 100644 index 00000000..3b907f1e --- /dev/null +++ b/vendor/grammars/Sublime-Inform/README.md @@ -0,0 +1,8 @@ +#Inform7 Package for Sublime Text 2 +This package has a lot of little files that make Inform7 easier to edit in Sublime Text 2. that's why it's called what it is, you see. +##Usage +Grab the zip file, unzip it, and put it in your ```Packages``` Directory. +That's pretty much it. Open an ```i7x``` file in Sublime Text 2 and it'll be all highlighted and there's a bunch of snippets you can use and all that. + +##Want to submit a pull request for this readme file? +Please, please do. \ No newline at end of file diff --git a/vendor/grammars/Sublime-Logos b/vendor/grammars/Sublime-Logos index 9a7aa2fb..5375dc53 160000 --- a/vendor/grammars/Sublime-Logos +++ b/vendor/grammars/Sublime-Logos @@ -1 +1 @@ -Subproject commit 9a7aa2fb92b52f0e422f50b60fd5608d935ef69b +Subproject commit 5375dc5394d72c36088d6eb1304f632bea232d83 diff --git a/vendor/grammars/Sublime-Modula-2 b/vendor/grammars/Sublime-Modula-2 new file mode 160000 index 00000000..9bd5077f --- /dev/null +++ b/vendor/grammars/Sublime-Modula-2 @@ -0,0 +1 @@ +Subproject commit 9bd5077f925ac7a3edc87d45d1f872593ff7377e diff --git a/vendor/grammars/Sublime-Nit b/vendor/grammars/Sublime-Nit new file mode 160000 index 00000000..12c1d654 --- /dev/null +++ b/vendor/grammars/Sublime-Nit @@ -0,0 +1 @@ +Subproject commit 12c1d654166cab044fbab2d1d7f481930ad7777c diff --git a/vendor/grammars/Sublime-REBOL b/vendor/grammars/Sublime-REBOL index 977ba9bb..102402f7 160000 --- a/vendor/grammars/Sublime-REBOL +++ b/vendor/grammars/Sublime-REBOL @@ -1 +1 @@ -Subproject commit 977ba9bb5881e4eec0f144f9f8dc23b0137cae00 +Subproject commit 102402f71aa3a7770b0c06c0183eff1be78e7280 diff --git a/vendor/grammars/Sublime-Red b/vendor/grammars/Sublime-Red new file mode 160000 index 00000000..def7baed --- /dev/null +++ b/vendor/grammars/Sublime-Red @@ -0,0 +1 @@ +Subproject commit def7baed855873ab6730502baf07ce014b922ad9 diff --git a/vendor/grammars/Sublime-SQF-Language b/vendor/grammars/Sublime-SQF-Language index 708c78a0..81c5be35 160000 --- a/vendor/grammars/Sublime-SQF-Language +++ b/vendor/grammars/Sublime-SQF-Language @@ -1 +1 @@ -Subproject commit 708c78a0ba5e9449c3a913243ce9dfdeb458e68c +Subproject commit 81c5be35bff3d1f8d77d8abeb8ca1c2d7c124899 diff --git a/vendor/grammars/Sublime-Text-2-OpenEdge-ABL b/vendor/grammars/Sublime-Text-2-OpenEdge-ABL index 7b02e1e2..c8306314 160000 --- a/vendor/grammars/Sublime-Text-2-OpenEdge-ABL +++ b/vendor/grammars/Sublime-Text-2-OpenEdge-ABL @@ -1 +1 @@ -Subproject commit 7b02e1e2444febb7c6b2179d52de0d2a7cdf5d58 +Subproject commit c830631431612b1ec2d8f7335205e65540a68115 diff --git a/vendor/grammars/Sublime-VimL b/vendor/grammars/Sublime-VimL index 366fdc64..4b23352c 160000 --- a/vendor/grammars/Sublime-VimL +++ b/vendor/grammars/Sublime-VimL @@ -1 +1 @@ -Subproject commit 366fdc64e3655207a0b2672f630d7167e6aac2c3 +Subproject commit 4b23352ce5e48a191d55d61883a9478211df91fd diff --git a/vendor/grammars/SublimeClarion b/vendor/grammars/SublimeClarion new file mode 160000 index 00000000..5823e7f4 --- /dev/null +++ b/vendor/grammars/SublimeClarion @@ -0,0 +1 @@ +Subproject commit 5823e7f44704eabb08673a7e32b48836141a1f8e diff --git a/vendor/grammars/SublimePapyrus b/vendor/grammars/SublimePapyrus new file mode 160000 index 00000000..293a45f6 --- /dev/null +++ b/vendor/grammars/SublimePapyrus @@ -0,0 +1 @@ +Subproject commit 293a45f665de3fb4e1eaaf37bf152b3861a70d7a diff --git a/vendor/grammars/TXL b/vendor/grammars/TXL new file mode 160000 index 00000000..c1c98dfa --- /dev/null +++ b/vendor/grammars/TXL @@ -0,0 +1 @@ +Subproject commit c1c98dfa86a8510532aee3df99181f9e0487fee8 diff --git a/vendor/grammars/UrWeb-Language-Definition b/vendor/grammars/UrWeb-Language-Definition new file mode 160000 index 00000000..cd47cc78 --- /dev/null +++ b/vendor/grammars/UrWeb-Language-Definition @@ -0,0 +1 @@ +Subproject commit cd47cc78918244b9cc36f57f5397a97a5affce4e diff --git a/vendor/grammars/Vala-TMBundle b/vendor/grammars/Vala-TMBundle index bb84dccd..1c5ebb62 160000 --- a/vendor/grammars/Vala-TMBundle +++ b/vendor/grammars/Vala-TMBundle @@ -1 +1 @@ -Subproject commit bb84dccd11ef7edd01882367e241bdcbfcf164bc +Subproject commit 1c5ebb62d11e01d145b414355de72d4de8758ed8 diff --git a/vendor/grammars/X10 b/vendor/grammars/X10 new file mode 160000 index 00000000..2bae6e77 --- /dev/null +++ b/vendor/grammars/X10 @@ -0,0 +1 @@ +Subproject commit 2bae6e77fabcdceff753823477390c37305ca76c diff --git a/vendor/grammars/abap.tmbundle b/vendor/grammars/abap.tmbundle index 5d8acce1..e4e71dee 160000 --- a/vendor/grammars/abap.tmbundle +++ b/vendor/grammars/abap.tmbundle @@ -1 +1 @@ -Subproject commit 5d8acce13c54650b62556c0b307d9f30ea7ff538 +Subproject commit e4e71dee51b1fe6973e11d6a617de72991be4ecb diff --git a/vendor/grammars/actionscript3-tmbundle b/vendor/grammars/actionscript3-tmbundle index d69fcc88..d24ad7de 160000 --- a/vendor/grammars/actionscript3-tmbundle +++ b/vendor/grammars/actionscript3-tmbundle @@ -1 +1 @@ -Subproject commit d69fcc8884432874248fe0e05fcc35c46870caa5 +Subproject commit d24ad7dec924b68fda32bf8170d12ff1e5a13e06 diff --git a/vendor/grammars/ada.tmbundle b/vendor/grammars/ada.tmbundle index c45eed4d..59bfc502 160000 --- a/vendor/grammars/ada.tmbundle +++ b/vendor/grammars/ada.tmbundle @@ -1 +1 @@ -Subproject commit c45eed4d5f98fe3bcbbffbb9e436601ab5bbde4b +Subproject commit 59bfc50221b2dcdbdb8a98117f44e66e1c35ffcf diff --git a/vendor/grammars/ampl b/vendor/grammars/ampl new file mode 160000 index 00000000..2e399ebf --- /dev/null +++ b/vendor/grammars/ampl @@ -0,0 +1 @@ +Subproject commit 2e399ebf4aec6b5b81f01d4cbee965f77852ce86 diff --git a/vendor/grammars/api-blueprint-sublime-plugin b/vendor/grammars/api-blueprint-sublime-plugin new file mode 160000 index 00000000..550417b9 --- /dev/null +++ b/vendor/grammars/api-blueprint-sublime-plugin @@ -0,0 +1 @@ +Subproject commit 550417b9bbbd833b57b5917b48ca0fef9ed52190 diff --git a/vendor/grammars/asciidoc.tmbundle b/vendor/grammars/asciidoc.tmbundle new file mode 160000 index 00000000..0c93369d --- /dev/null +++ b/vendor/grammars/asciidoc.tmbundle @@ -0,0 +1 @@ +Subproject commit 0c93369ddd920629bc97bf10e7270d8ec0d0463b diff --git a/vendor/grammars/asp.tmbundle b/vendor/grammars/asp.tmbundle index e2c72903..144b2108 160000 --- a/vendor/grammars/asp.tmbundle +++ b/vendor/grammars/asp.tmbundle @@ -1 +1 @@ -Subproject commit e2c72903175d4211e4c698a5fa635cc443405892 +Subproject commit 144b21081aa53b8856f839aea68a724312f6001d diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp new file mode 160000 index 00000000..13eb4d43 --- /dev/null +++ b/vendor/grammars/atom-fsharp @@ -0,0 +1 @@ +Subproject commit 13eb4d4347be4e8dd825ba174e4271f9cb0f9cab diff --git a/vendor/grammars/atom-language-purescript b/vendor/grammars/atom-language-purescript new file mode 160000 index 00000000..bd2b59f1 --- /dev/null +++ b/vendor/grammars/atom-language-purescript @@ -0,0 +1 @@ +Subproject commit bd2b59f14eb4bd3b1f6d53eee959d7a6b523c073 diff --git a/vendor/grammars/atom-language-stan b/vendor/grammars/atom-language-stan new file mode 160000 index 00000000..f8d855ea --- /dev/null +++ b/vendor/grammars/atom-language-stan @@ -0,0 +1 @@ +Subproject commit f8d855eab960b4dd140c0f469a809401544850b8 diff --git a/vendor/grammars/atom-salt b/vendor/grammars/atom-salt index 6d6bdc1b..77257d25 160000 --- a/vendor/grammars/atom-salt +++ b/vendor/grammars/atom-salt @@ -1 +1 @@ -Subproject commit 6d6bdc1be1a43201b5f78a4f89ea9bfc7416df11 +Subproject commit 77257d25b4aa8d99851b987c44bbd0e53f21f69d diff --git a/vendor/grammars/ats.sublime b/vendor/grammars/ats.sublime new file mode 160000 index 00000000..a3f24abb --- /dev/null +++ b/vendor/grammars/ats.sublime @@ -0,0 +1 @@ +Subproject commit a3f24abbe7043adc0ad798711467edae33cf89f0 diff --git a/vendor/grammars/bro-sublime b/vendor/grammars/bro-sublime index 7a8983d9..8219f5ee 160000 --- a/vendor/grammars/bro-sublime +++ b/vendor/grammars/bro-sublime @@ -1 +1 @@ -Subproject commit 7a8983d93ecdb2535b00348b2ed15a964fe6884f +Subproject commit 8219f5ee09cff98756641dde8a93456ff77b9e92 diff --git a/vendor/grammars/c.tmbundle b/vendor/grammars/c.tmbundle index f8254252..5b5d3663 160000 --- a/vendor/grammars/c.tmbundle +++ b/vendor/grammars/c.tmbundle @@ -1 +1 @@ -Subproject commit f8254252620b24c50d23ec804344915d498ecd7f +Subproject commit 5b5d366309e8a549ce6fff5bcd9aa57ffb6dae77 diff --git a/vendor/grammars/carto-atom b/vendor/grammars/carto-atom index 8086625a..08a80dc5 160000 --- a/vendor/grammars/carto-atom +++ b/vendor/grammars/carto-atom @@ -1 +1 @@ -Subproject commit 8086625aa5deac4ccd7374644b89e715deec2f7f +Subproject commit 08a80dc54a9ca44c82e406e4f36cfbc8d7afa6f6 diff --git a/vendor/grammars/ceylon-sublimetext b/vendor/grammars/ceylon-sublimetext index a81ad702..67ae76cf 160000 --- a/vendor/grammars/ceylon-sublimetext +++ b/vendor/grammars/ceylon-sublimetext @@ -1 +1 @@ -Subproject commit a81ad702b450a440c9d366fd2e128ea6a895dabd +Subproject commit 67ae76cfb1d992f4718ac121008f5d974b370cc2 diff --git a/vendor/grammars/chapel-tmbundle b/vendor/grammars/chapel-tmbundle index d52e9b14..469476b2 160000 --- a/vendor/grammars/chapel-tmbundle +++ b/vendor/grammars/chapel-tmbundle @@ -1 +1 @@ -Subproject commit d52e9b1417a5aa41e417876e121adb880d6a1ff7 +Subproject commit 469476b285adf6c4a09973fd12e97ec831afd050 diff --git a/vendor/grammars/cmake.tmbundle b/vendor/grammars/cmake.tmbundle index 926867a4..1421c6ba 160000 --- a/vendor/grammars/cmake.tmbundle +++ b/vendor/grammars/cmake.tmbundle @@ -1 +1 @@ -Subproject commit 926867a414c1125abefa38161d82d71756f591a2 +Subproject commit 1421c6ba47ba697742d615e92852cfe106e0879e diff --git a/vendor/grammars/css.tmbundle b/vendor/grammars/css.tmbundle index bef87ff9..94f7111c 160000 --- a/vendor/grammars/css.tmbundle +++ b/vendor/grammars/css.tmbundle @@ -1 +1 @@ -Subproject commit bef87ff98730f62cee3bb470f63bd2eb3fb2e4f9 +Subproject commit 94f7111c2953ac7b4cc42d313d9ad9b8701b8468 diff --git a/vendor/grammars/d.tmbundle b/vendor/grammars/d.tmbundle index a6931961..bc27d5e5 160000 --- a/vendor/grammars/d.tmbundle +++ b/vendor/grammars/d.tmbundle @@ -1 +1 @@ -Subproject commit a6931961dafe68349ca0c388d225987bcf2ce049 +Subproject commit bc27d5e552b28eaceb76cfe93bd7c27a1105b57d diff --git a/vendor/grammars/dart-sublime-bundle b/vendor/grammars/dart-sublime-bundle index d14f6469..d891fb36 160000 --- a/vendor/grammars/dart-sublime-bundle +++ b/vendor/grammars/dart-sublime-bundle @@ -1 +1 @@ -Subproject commit d14f64690cbde6d0bece2670ab385daf89533aea +Subproject commit d891fb36c98ca0b111a35cba109b05a16b6c4b83 diff --git a/vendor/grammars/desktop.tmbundle b/vendor/grammars/desktop.tmbundle new file mode 160000 index 00000000..34f9b8ab --- /dev/null +++ b/vendor/grammars/desktop.tmbundle @@ -0,0 +1 @@ +Subproject commit 34f9b8ab985ff7d981661f632eeff6d6c080cea8 diff --git a/vendor/grammars/ec.tmbundle b/vendor/grammars/ec.tmbundle new file mode 160000 index 00000000..b8ec2d32 --- /dev/null +++ b/vendor/grammars/ec.tmbundle @@ -0,0 +1 @@ +Subproject commit b8ec2d32afcaaef5ed7471d80aa4e0cd8717944d diff --git a/vendor/grammars/elixir-tmbundle b/vendor/grammars/elixir-tmbundle index dcf1fc12..a7aa16e3 160000 --- a/vendor/grammars/elixir-tmbundle +++ b/vendor/grammars/elixir-tmbundle @@ -1 +1 @@ -Subproject commit dcf1fc125c81c904fae8dc91d483905bdb5d5f5d +Subproject commit a7aa16e349f673d70dd43fcab72e2a3f219cb9d7 diff --git a/vendor/grammars/factor b/vendor/grammars/factor index 2453a785..97d1ec75 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit 2453a785f73429786583684cf729625c7cf7b04b +Subproject commit 97d1ec759eb9fa2ace83c62685b6b36faec05981 diff --git a/vendor/grammars/fancy-tmbundle b/vendor/grammars/fancy-tmbundle index d48b6100..c9cdcd61 160000 --- a/vendor/grammars/fancy-tmbundle +++ b/vendor/grammars/fancy-tmbundle @@ -1 +1 @@ -Subproject commit d48b6100cc64621f68d4d59241e8d442fb9fcdff +Subproject commit c9cdcd61f52b2a20d7f4575ec5e6b17b83aa9d64 diff --git a/vendor/grammars/fsharpbinding b/vendor/grammars/fsharpbinding deleted file mode 160000 index 99d2e9a5..00000000 --- a/vendor/grammars/fsharpbinding +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 99d2e9a53924ae5ba850985f3df1dc8c11cb6731 diff --git a/vendor/grammars/gap-tmbundle b/vendor/grammars/gap-tmbundle new file mode 160000 index 00000000..52c8fafb --- /dev/null +++ b/vendor/grammars/gap-tmbundle @@ -0,0 +1 @@ +Subproject commit 52c8fafb664fb7909223f92403e26fe3bfde0cdc diff --git a/vendor/grammars/gnuplot-tmbundle b/vendor/grammars/gnuplot-tmbundle index 14e0f70c..19508305 160000 --- a/vendor/grammars/gnuplot-tmbundle +++ b/vendor/grammars/gnuplot-tmbundle @@ -1 +1 @@ -Subproject commit 14e0f70c7b26c688c904e5d379454df5c34f0a0f +Subproject commit 1950830563977a831eb127e4f92307dbf43830cb diff --git a/vendor/grammars/grace-tmbundle b/vendor/grammars/grace-tmbundle new file mode 160000 index 00000000..9e8bb893 --- /dev/null +++ b/vendor/grammars/grace-tmbundle @@ -0,0 +1 @@ +Subproject commit 9e8bb893f0fa118db2335c2c1edd4147d7ea9d78 diff --git a/vendor/grammars/graphviz.tmbundle b/vendor/grammars/graphviz.tmbundle index 2760230b..d1d489f8 160000 --- a/vendor/grammars/graphviz.tmbundle +++ b/vendor/grammars/graphviz.tmbundle @@ -1 +1 @@ -Subproject commit 2760230b50dbec25906db1504604b37885a53fef +Subproject commit d1d489f893a0e6ef5d9021bf7dc1ffd08b3f9b90 diff --git a/vendor/grammars/haskell.tmbundle b/vendor/grammars/haskell.tmbundle index 30fa1e28..df3d5427 160000 --- a/vendor/grammars/haskell.tmbundle +++ b/vendor/grammars/haskell.tmbundle @@ -1 +1 @@ -Subproject commit 30fa1e283244960e520694d8db6189d9b2bde9f5 +Subproject commit df3d54278a3ab3cfb30c37d94e06587478cc79ad diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index e2613bb1..94cc8eea 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit e2613bb12598d4ae2de5ba57af890ce910195fce +Subproject commit 94cc8eea31127365556ef9bbb1db78ef6bfdd2e5 diff --git a/vendor/grammars/html.tmbundle b/vendor/grammars/html.tmbundle index 4831b07b..7710c79b 160000 --- a/vendor/grammars/html.tmbundle +++ b/vendor/grammars/html.tmbundle @@ -1 +1 @@ -Subproject commit 4831b07b7211d34ab5570bbf877690cf4fefc9ef +Subproject commit 7710c79b161314fe937b05b13b1101e78f5dc62e diff --git a/vendor/grammars/idl.tmbundle b/vendor/grammars/idl.tmbundle index 95f17ac4..91baae91 160000 --- a/vendor/grammars/idl.tmbundle +++ b/vendor/grammars/idl.tmbundle @@ -1 +1 @@ -Subproject commit 95f17ac40b99ace47a26e7751c7b5de45b13b1c0 +Subproject commit 91baae9134c2de3b6f48f902c5fb64ed8b384894 diff --git a/vendor/grammars/jade-tmbundle b/vendor/grammars/jade-tmbundle index b061f52f..d27b61d1 160000 --- a/vendor/grammars/jade-tmbundle +++ b/vendor/grammars/jade-tmbundle @@ -1 +1 @@ -Subproject commit b061f52fb369cc0b483cc1ddc4cd0fc088615754 +Subproject commit d27b61d1780ff594b43d9ad04a9e896ea92b393b diff --git a/vendor/grammars/java.tmbundle b/vendor/grammars/java.tmbundle index a74cb835..64294ae0 160000 --- a/vendor/grammars/java.tmbundle +++ b/vendor/grammars/java.tmbundle @@ -1 +1 @@ -Subproject commit a74cb835b821e9a3498d1810d546cb49881df73e +Subproject commit 64294ae0b62b64b1183c401e3803679eaddb4946 diff --git a/vendor/grammars/javadoc.tmbundle b/vendor/grammars/javadoc.tmbundle deleted file mode 160000 index 484d468f..00000000 --- a/vendor/grammars/javadoc.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 484d468f47f6a17c98f73b369fa00a6bbc2a22fd diff --git a/vendor/grammars/jflex.tmbundle b/vendor/grammars/jflex.tmbundle new file mode 160000 index 00000000..12a7a88b --- /dev/null +++ b/vendor/grammars/jflex.tmbundle @@ -0,0 +1 @@ +Subproject commit 12a7a88b7a34bb9490b6077ad743332acf66a456 diff --git a/vendor/grammars/jquery-tmbundle b/vendor/grammars/jquery-tmbundle deleted file mode 160000 index ff14cd28..00000000 --- a/vendor/grammars/jquery-tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ff14cd28e36772d13de16606903b36a091ffeb33 diff --git a/vendor/grammars/json.tmbundle b/vendor/grammars/json.tmbundle index 4100e5b0..0762cbdc 160000 --- a/vendor/grammars/json.tmbundle +++ b/vendor/grammars/json.tmbundle @@ -1 +1 @@ -Subproject commit 4100e5b0162b3df7984b3b5532529b8ea78cbaa0 +Subproject commit 0762cbdcb34dd98801b6323e75332cd4c9dbc07e diff --git a/vendor/grammars/kotlin-sublime-package b/vendor/grammars/kotlin-sublime-package index e8e18955..3ddc52e8 160000 --- a/vendor/grammars/kotlin-sublime-package +++ b/vendor/grammars/kotlin-sublime-package @@ -1 +1 @@ -Subproject commit e8e18955d7f18d42574dc55a37e6f31339036800 +Subproject commit 3ddc52e8dbc8bef1f1a534b94bd0f688bc2a4422 diff --git a/vendor/grammars/language-babel b/vendor/grammars/language-babel new file mode 160000 index 00000000..e2fd09d7 --- /dev/null +++ b/vendor/grammars/language-babel @@ -0,0 +1 @@ +Subproject commit e2fd09d7d9caf1f336b3a35581e55387723dcbf3 diff --git a/vendor/grammars/language-click b/vendor/grammars/language-click new file mode 160000 index 00000000..1ee1fe01 --- /dev/null +++ b/vendor/grammars/language-click @@ -0,0 +1 @@ +Subproject commit 1ee1fe012be44973488d9f6666376ab72dbb024a diff --git a/vendor/grammars/language-clojure b/vendor/grammars/language-clojure index bae6eee8..a0193ad2 160000 --- a/vendor/grammars/language-clojure +++ b/vendor/grammars/language-clojure @@ -1 +1 @@ -Subproject commit bae6eee8557c2158592ac485a7168ccd10fc6dfb +Subproject commit a0193ad2a9797033649e665083f09249d2d098fc diff --git a/vendor/grammars/language-coffee-script b/vendor/grammars/language-coffee-script index d86c8963..93e935ec 160000 --- a/vendor/grammars/language-coffee-script +++ b/vendor/grammars/language-coffee-script @@ -1 +1 @@ -Subproject commit d86c8963dcee0ab811da05a175b2218045d0c124 +Subproject commit 93e935ec1d54815c182d683d3dfb9583db4e269b diff --git a/vendor/grammars/language-crystal b/vendor/grammars/language-crystal new file mode 160000 index 00000000..f87d6864 --- /dev/null +++ b/vendor/grammars/language-crystal @@ -0,0 +1 @@ +Subproject commit f87d68645c9a4243a7942e6b414449f1eec8a3e7 diff --git a/vendor/grammars/language-csharp b/vendor/grammars/language-csharp index fba368a8..f635e67e 160000 --- a/vendor/grammars/language-csharp +++ b/vendor/grammars/language-csharp @@ -1 +1 @@ -Subproject commit fba368a8397e298fa78679b4ee0a542b2474c150 +Subproject commit f635e67edef4e2fe68c3526e1ad26ed66f01aa62 diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index 6af44a08..298a8a3e 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit 6af44a08718668035f45270898389ae4fc8eeb8b +Subproject commit 298a8a3eb180f1fa6b8a8bc77c2147e355c8cafd diff --git a/vendor/grammars/language-hy b/vendor/grammars/language-hy new file mode 160000 index 00000000..93d267de --- /dev/null +++ b/vendor/grammars/language-hy @@ -0,0 +1 @@ +Subproject commit 93d267de4cdd8a099f34fb334bae0515a9734cd9 diff --git a/vendor/grammars/language-inform7 b/vendor/grammars/language-inform7 new file mode 160000 index 00000000..857864cd --- /dev/null +++ b/vendor/grammars/language-inform7 @@ -0,0 +1 @@ +Subproject commit 857864cd812279672284f424da4f65e3c81b6c87 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index 51575193..f68e4bfe 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit 515751937df1d397b495e4a92fec5a0933994cdb +Subproject commit f68e4bfe54a3b9d16450223f401d2fb16453897f diff --git a/vendor/grammars/language-jsoniq b/vendor/grammars/language-jsoniq new file mode 160000 index 00000000..008a2458 --- /dev/null +++ b/vendor/grammars/language-jsoniq @@ -0,0 +1 @@ +Subproject commit 008a24589d32a8f8bbd55985d27844a7cda842e5 diff --git a/vendor/grammars/language-less b/vendor/grammars/language-less new file mode 160000 index 00000000..a4ded260 --- /dev/null +++ b/vendor/grammars/language-less @@ -0,0 +1 @@ +Subproject commit a4ded2608cd22b8dba79df2025ad8dcf62158ddb diff --git a/vendor/grammars/language-maxscript b/vendor/grammars/language-maxscript new file mode 160000 index 00000000..56f89d27 --- /dev/null +++ b/vendor/grammars/language-maxscript @@ -0,0 +1 @@ +Subproject commit 56f89d27153d27f3fed5f8b50fda8fa728fa2911 diff --git a/vendor/grammars/language-ncl b/vendor/grammars/language-ncl new file mode 160000 index 00000000..ae46014e --- /dev/null +++ b/vendor/grammars/language-ncl @@ -0,0 +1 @@ +Subproject commit ae46014e687be08bc4a47012fe3f21a31c081b61 diff --git a/vendor/grammars/language-povray b/vendor/grammars/language-povray new file mode 160000 index 00000000..35b37059 --- /dev/null +++ b/vendor/grammars/language-povray @@ -0,0 +1 @@ +Subproject commit 35b3705991820b12f9280d8a5ced1cdad5c9f68f diff --git a/vendor/grammars/language-python b/vendor/grammars/language-python index 46072e32..75f0d2b0 160000 --- a/vendor/grammars/language-python +++ b/vendor/grammars/language-python @@ -1 +1 @@ -Subproject commit 46072e32e3060eb8e2fea98a106a86db89acc842 +Subproject commit 75f0d2b06122a51db6e8e0b129b57585cd68f99c diff --git a/vendor/grammars/language-renpy b/vendor/grammars/language-renpy new file mode 160000 index 00000000..cc2f1c69 --- /dev/null +++ b/vendor/grammars/language-renpy @@ -0,0 +1 @@ +Subproject commit cc2f1c69f0b1c1d121aa5648422fc70d86dca7cf diff --git a/vendor/grammars/language-shellscript b/vendor/grammars/language-shellscript index 98397197..bbaca532 160000 --- a/vendor/grammars/language-shellscript +++ b/vendor/grammars/language-shellscript @@ -1 +1 @@ -Subproject commit 9839719721e3fb67c2df8461b2b296e6ff027e7f +Subproject commit bbaca532de373b77ec8073b6aa367301358d1199 diff --git a/vendor/grammars/language-supercollider b/vendor/grammars/language-supercollider new file mode 160000 index 00000000..2b1da230 --- /dev/null +++ b/vendor/grammars/language-supercollider @@ -0,0 +1 @@ +Subproject commit 2b1da230e3b606a8d841d6ceda36ee1330d96aea diff --git a/vendor/grammars/language-xbase b/vendor/grammars/language-xbase new file mode 160000 index 00000000..ae860b3b --- /dev/null +++ b/vendor/grammars/language-xbase @@ -0,0 +1 @@ +Subproject commit ae860b3b02d08bd65827c0a5f0029e65e4df30b4 diff --git a/vendor/grammars/language-yaml b/vendor/grammars/language-yaml index ce8b4414..249fdeed 160000 --- a/vendor/grammars/language-yaml +++ b/vendor/grammars/language-yaml @@ -1 +1 @@ -Subproject commit ce8b441467852f766a34d22ba6661099496e22e4 +Subproject commit 249fdeed7877ccdcba123645f32cc6597bce4b37 diff --git a/vendor/grammars/language-yang b/vendor/grammars/language-yang new file mode 160000 index 00000000..c2d4a701 --- /dev/null +++ b/vendor/grammars/language-yang @@ -0,0 +1 @@ +Subproject commit c2d4a701d15e0ea7a1cef4f2fe4396b336504d7c diff --git a/vendor/grammars/latex.tmbundle b/vendor/grammars/latex.tmbundle index 52b2251a..82986b93 160000 --- a/vendor/grammars/latex.tmbundle +++ b/vendor/grammars/latex.tmbundle @@ -1 +1 @@ -Subproject commit 52b2251aab30577f4b3b3cc8997fb3c7d0e798ce +Subproject commit 82986b93a4f4ae7aab52445d8b7742b9af635d05 diff --git a/vendor/grammars/less.tmbundle b/vendor/grammars/less.tmbundle deleted file mode 160000 index 7ef97ad5..00000000 --- a/vendor/grammars/less.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7ef97ad5f15d2a136afe4d5cf568fc8ee79675b7 diff --git a/vendor/grammars/less.tmbundle/Commands/Save to CSS.tmCommand b/vendor/grammars/less.tmbundle/Commands/Save to CSS.tmCommand new file mode 100644 index 00000000..9f8e7561 --- /dev/null +++ b/vendor/grammars/less.tmbundle/Commands/Save to CSS.tmCommand @@ -0,0 +1,47 @@ + + + + + beforeRunningCommand + saveActiveFile + command + #!/usr/bin/env ruby18 + +file = ENV["TM_FILEPATH"] +target = file.sub(/\.less$/, ".css") +system("lessc \"#{file}\" \"#{target}\"") +puts "Compiled CSS to '#{target}'" + input + document + inputFormat + text + keyEquivalent + @b + name + Save to CSS + outputCaret + afterOutput + outputFormat + text + outputLocation + toolTip + requiredCommands + + + command + lessc + locations + + /opt/local/bin/lessc + /usr/local/bin/lessc + + + + scope + source.css.less + uuid + 78788223-5E5E-434E-98BE-17BCDF600611 + version + 2 + + diff --git a/vendor/grammars/less.tmbundle/Commands/Save to Minified CSS.tmCommand b/vendor/grammars/less.tmbundle/Commands/Save to Minified CSS.tmCommand new file mode 100644 index 00000000..fc8fe21f --- /dev/null +++ b/vendor/grammars/less.tmbundle/Commands/Save to Minified CSS.tmCommand @@ -0,0 +1,47 @@ + + + + + beforeRunningCommand + saveActiveFile + command + #!/usr/bin/env ruby18 + +file = ENV["TM_FILEPATH"] +target = file.sub(/\.less$/, ".css") +system("lessc -x \"#{file}\" \"#{target}\"") +puts "Compiled Minified CSS to '#{target}'" + input + document + inputFormat + text + keyEquivalent + ~@b + name + Save to Minified CSS + outputCaret + afterOutput + outputFormat + text + outputLocation + toolTip + requiredCommands + + + command + lessc + locations + + /opt/local/bin/lessc + /usr/local/bin/lessc + + + + scope + source.css.less + uuid + 448D3A8D-260E-4949-BA33-654886ECDCAF + version + 2 + + diff --git a/vendor/grammars/less.tmbundle/DragCommands/Insert inline Image.tmDragCommand b/vendor/grammars/less.tmbundle/DragCommands/Insert inline Image.tmDragCommand new file mode 100644 index 00000000..21ce88f4 --- /dev/null +++ b/vendor/grammars/less.tmbundle/DragCommands/Insert inline Image.tmDragCommand @@ -0,0 +1,38 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env php +<?php +$path = getenv('TM_DROPPED_FILE'); +$path_parts = pathinfo($path); +$info = getimagesize($path); +list($width, $height) = $info; +$mime = $info['mime']; +$contents = base64_encode(file_get_contents($path)); + +echo "@gfx-{$path_parts['filename']}: \"data:{$mime};base64,{$contents}\";\n"; +echo "@gfx-{$path_parts['filename']}-width: {$width}px;\n"; +echo "@gfx-{$path_parts['filename']}-height: {$height}px;"; + draggedFileExtensions + + png + jpeg + jpg + gif + + input + selection + name + Insert inline Image + output + insertAsSnippet + scope + source.css.less + uuid + 7B0CA307-CC1C-4EE2-9F63-4825800ACDA7 + + diff --git a/vendor/grammars/less.tmbundle/Preferences/Comment.tmPreferences b/vendor/grammars/less.tmbundle/Preferences/Comment.tmPreferences new file mode 100644 index 00000000..1d8bf1fe --- /dev/null +++ b/vendor/grammars/less.tmbundle/Preferences/Comment.tmPreferences @@ -0,0 +1,36 @@ + + + + + name + Comments + scope + source.css.less + settings + + shellVariables + + + name + TM_COMMENT_START + value + // + + + name + TM_COMMENT_START_2 + value + /* + + + name + TM_COMMENT_END_2 + value + */ + + + + uuid + D0CC551B-751D-4A7C-A738-2513E3C7F285 + + diff --git a/vendor/grammars/less.tmbundle/README.md b/vendor/grammars/less.tmbundle/README.md new file mode 100644 index 00000000..ed6ac672 --- /dev/null +++ b/vendor/grammars/less.tmbundle/README.md @@ -0,0 +1,25 @@ +# Installation + +You can install this bundle in TextMate by opening the preferences and going to the bundles tab. After installation it will be automatically updated for you. + +# License (MIT) + +Copyright (c) 2010 Scott Kyle and Rasmus Andersson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/grammars/less.tmbundle/Syntaxes/LESS.tmLanguage b/vendor/grammars/less.tmbundle/Syntaxes/LESS.tmLanguage new file mode 100644 index 00000000..ac6ff8ba --- /dev/null +++ b/vendor/grammars/less.tmbundle/Syntaxes/LESS.tmLanguage @@ -0,0 +1,434 @@ + + + + + comment + LeSS + fileTypes + + less + + foldingStartMarker + /\*\*(?!\*)|\{\s*($|/\*(?!.*?\*/.*\S)) + foldingStopMarker + (?<!\*)\*\*/|^\s*\} + keyEquivalent + ^~L + name + LESS + patterns + + + match + \b(a|abbr|acronym|address|applet|article|area|audio|video|b|base|big|blockquote|body|br|button|caption|canvas|center|cite|code|col|colgroup|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figure|figcaption|form|frame|frameset|(h[1-6])|head|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|meta|menu|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|q|ruby|s|samp|script|select|small|span|strike|strong|style|sub|sup|summary|svg|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|ul|var|header|section|footer|aside|hgroup|time)\b + name + keyword.control.html.elements + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.css + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.css + + + name + string.quoted.double.css + patterns + + + match + \\. + name + constant.character.escaped.css + + + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.css + + + end + ' + endCaptures + + 0 + + name + punctuation.definition.string.end.css + + + name + string.quoted.single.css + patterns + + + match + \\. + name + constant.character.escaped.css + + + + + captures + + 1 + + name + entity.other.attribute-name.class.css + + + match + (\.[a-zA-Z0-9_-]+) + + + begin + url\( + contentName + variable.parameter.url + end + \) + name + support.function.any-method.builtin.css + + + match + (#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b + name + constant.other.rgb-value.css + + + captures + + 0 + + name + entity.other.attribute-name.id + + + match + #[a-zA-Z0-9_:\(\)-]+ + name + meta.selector.css + + + begin + /\* + beginCaptures + + 0 + + name + punctuation.definition.comment.begin.css + + + end + \*/ + endCaptures + + 0 + + name + punctuation.definition.comment.end.css + + + name + comment.block.css + + + match + (-|\+)?\s*[0-9]+(\.[0-9]+)? + name + constant.numeric.css + + + match + (?<=[\d])(px|pt|cm|mm|in|em|ex|pc)\b|% + name + keyword.other.unit.css + + + captures + + 1 + + name + entity.other.attribute-name.pseudo-element.css + + + match + (:+(after|before|not|last-child|nth-of-type|nth-child|first-child|first-letter|first-line|selection|root)) + + + captures + + 1 + + name + entity.other.attribute-name.pseudo-class.css + + + match + (:+(active|hover|link|visited|focus)) + + + captures + + 1 + + name + punctuation.definition.entity.css + + 2 + + name + entity.other.attribute-name.attribute.css + + 3 + + name + punctuation.separator.operator.css + + 4 + + name + string.unquoted.attribute-value.css + + 5 + + name + string.quoted.double.attribute-value.css + + 6 + + name + punctuation.definition.string.begin.css + + 7 + + name + punctuation.definition.string.end.css + + + match + (?i)(\[)\s*(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)(?:\s*([~|^$*]?=)\s*(?:(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)|((?>(['"])(?:[^\\]|\\.)*?(\6)))))?\s*(\]) + name + meta.attribute-selector.css + + + captures + + 1 + + name + keyword.control.at-rule.import.css + + 2 + + name + punctuation.definition.keyword.css + + + match + ^\s*((@)import\b) + name + meta.at-rule.import.css + + + captures + + 1 + + name + support.type.property-name.css.vendor + + + match + (-(?:webkit|moz|khtml|o|icab|ms)-(?:background-size|border-radius|box-shadow|opacity|border-image))\s*: + + + captures + + 1 + + name + support.type.property-name.css + + + match + \b(azimuth|background-attachment|background-color|background-clip|background-image|background-position|background-repeat|background-size|background|behavior|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border-radius|border|box-shadow|bottom|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|filter|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow(-[xy])?|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|pre-wrap|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|word-wrap|z-index|zoom) + + + match + \b(absolute|all-scroll|always|auto|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|col-resize|collapse|crosshair|dashed|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|groove|hand|help|hidden|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|keep-all|left|lighter|line-edge|line-through|line|linear|list-item|loose|lower-alpha|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|padding-box)\b + name + support.constant.property-value.css + + + match + (\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b) + name + support.constant.font-name.css + + + comment + http://www.w3.org/TR/CSS21/syndata.html#value-def-color + match + \b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\b + name + support.constant.color.w3c-standard-color-name.css + + + match + \b(saturate|desaturate|lighten|darken|grayscale)\b + name + support.function.any-method.builtin.less + + + match + \b(rgb|rgba|hsl|hsla|url)\b + name + support.function.any-method.builtin.css + + + captures + + 1 + + name + support.function.any-method.vendor.css + + + match + (-(?:webkit|moz|khtml|o|icab)-(?:gradient|linear-gradient)) + + + match + \b(color-stop|from|to)\b + name + support.function.any-method.webkit.gradient.css + + + captures + + 1 + + name + support.function.less + + + match + (\.[a-zA-Z0-9_-]+)\s*(;|\() + + + begin + (^[ \t]+)?(?=//) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.less + + + end + (?!\G) + patterns + + + begin + // + beginCaptures + + 0 + + name + punctuation.definition.comment.less + + + end + \n + name + comment.line.double-slash.less + + + + + match + @[a-zA-Z0-9_-][\w-]* + name + variable.other.less + + + match + \$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^=|\/\b + name + keyword.operator.less + + + captures + + 1 + + name + punctuation.section.property-list.begin.css + + 2 + + name + punctuation.section.property-list.end.css + + + comment + Match empty braces to give proper ↩ action + match + (\{)(\}) + name + meta.brace.curly.less + + + match + \{|\} + name + meta.brace.curly.less + + + match + \(|\) + name + meta.brace.round.less + + + match + \[|\] + name + meta.brace.square.less + + + scopeName + source.css.less + uuid + 9343D324-75A1-4733-A5C0-5D1D4B6182D0 + + diff --git a/vendor/grammars/less.tmbundle/info.plist b/vendor/grammars/less.tmbundle/info.plist new file mode 100644 index 00000000..e555f0ba --- /dev/null +++ b/vendor/grammars/less.tmbundle/info.plist @@ -0,0 +1,26 @@ + + + + + contactEmailRot13 + zfurrgf@juvgrsnyyf.bet + contactName + Michael Sheets + description + Extends CSS with dynamic behavior such as variables, mixins, operations and functions. + mainMenu + + items + + 78788223-5E5E-434E-98BE-17BCDF600611 + 448D3A8D-260E-4949-BA33-654886ECDCAF + + submenus + + + name + LESS + uuid + D1D51EE5-E89F-4B14-8AE4-FC364E540B47 + + diff --git a/vendor/grammars/liquid.tmbundle b/vendor/grammars/liquid.tmbundle new file mode 160000 index 00000000..c65939f1 --- /dev/null +++ b/vendor/grammars/liquid.tmbundle @@ -0,0 +1 @@ +Subproject commit c65939f11ad9a91b8c4660a357c36660e9a09e6c diff --git a/vendor/grammars/lisp.tmbundle b/vendor/grammars/lisp.tmbundle index 0c1d1baa..6d116d77 160000 --- a/vendor/grammars/lisp.tmbundle +++ b/vendor/grammars/lisp.tmbundle @@ -1 +1 @@ -Subproject commit 0c1d1baa16db1889aa7081bcda8ce9e5b4be85cd +Subproject commit 6d116d77b6e3d6b04d863c558527008db482b48a diff --git a/vendor/grammars/llvm.tmbundle b/vendor/grammars/llvm.tmbundle index 9f56fc54..203c955a 160000 --- a/vendor/grammars/llvm.tmbundle +++ b/vendor/grammars/llvm.tmbundle @@ -1 +1 @@ -Subproject commit 9f56fc54d3bc5c5cc8c202d9279e4bc61231086f +Subproject commit 203c955af9c8c48c2bb3808a9ebb547ce3cead1c diff --git a/vendor/grammars/make.tmbundle b/vendor/grammars/make.tmbundle index 371a9e8a..1a1827da 160000 --- a/vendor/grammars/make.tmbundle +++ b/vendor/grammars/make.tmbundle @@ -1 +1 @@ -Subproject commit 371a9e8a56ec02289f129bb2172cb0bdc7ee6b44 +Subproject commit 1a1827da81e20fdce56e2658451340c070ca44b7 diff --git a/vendor/grammars/mako-tmbundle b/vendor/grammars/mako-tmbundle index e039636f..da796386 160000 --- a/vendor/grammars/mako-tmbundle +++ b/vendor/grammars/mako-tmbundle @@ -1 +1 @@ -Subproject commit e039636f3d67d96f4b6b763b31153f857e199e5d +Subproject commit da79638669a49d0a6103d55224de0fd8609126b2 diff --git a/vendor/grammars/matlab.tmbundle b/vendor/grammars/matlab.tmbundle index e1460dd9..2cdc1f84 160000 --- a/vendor/grammars/matlab.tmbundle +++ b/vendor/grammars/matlab.tmbundle @@ -1 +1 @@ -Subproject commit e1460dd9e71a9cb879a438ab31a18f31c2ced107 +Subproject commit 2cdc1f841443e4bc8b94f42f5e86431b31e04387 diff --git a/vendor/grammars/mediawiki.tmbundle b/vendor/grammars/mediawiki.tmbundle new file mode 160000 index 00000000..f8dead50 --- /dev/null +++ b/vendor/grammars/mediawiki.tmbundle @@ -0,0 +1 @@ +Subproject commit f8dead507a1aed539376b9fcfde877a855842e8e diff --git a/vendor/grammars/mercury-tmlanguage b/vendor/grammars/mercury-tmlanguage index eaef0b06..cb57d42d 160000 --- a/vendor/grammars/mercury-tmlanguage +++ b/vendor/grammars/mercury-tmlanguage @@ -1 +1 @@ -Subproject commit eaef0b0643b2cea0d7d26056f2dd264c5a652be9 +Subproject commit cb57d42dbe343d3809c3dd7946f28f6354a2687e diff --git a/vendor/grammars/moonscript-tmbundle b/vendor/grammars/moonscript-tmbundle index 6f25231c..cf69300f 160000 --- a/vendor/grammars/moonscript-tmbundle +++ b/vendor/grammars/moonscript-tmbundle @@ -1 +1 @@ -Subproject commit 6f25231cfd1369293ea9c74db21c072bcb8ab2ce +Subproject commit cf69300f2a38d4c585bef4c5ad8543f5e258de8d diff --git a/vendor/grammars/nesC.tmbundle b/vendor/grammars/nesC.tmbundle index 5958c490..f58def8c 160000 --- a/vendor/grammars/nesC.tmbundle +++ b/vendor/grammars/nesC.tmbundle @@ -1 +1 @@ -Subproject commit 5958c490262e4a5a7803d97c9ec770bd40307153 +Subproject commit f58def8c5552dcb3ab6b55632fcad8a54ba2724e diff --git a/vendor/grammars/objective-c.tmbundle b/vendor/grammars/objective-c.tmbundle index d66de9b4..fdcedb95 160000 --- a/vendor/grammars/objective-c.tmbundle +++ b/vendor/grammars/objective-c.tmbundle @@ -1 +1 @@ -Subproject commit d66de9b4fcfcaf53e64cc05fed0cf66c6980c9b2 +Subproject commit fdcedb95de8846220c49f769fee91045188767d9 diff --git a/vendor/grammars/ocaml.tmbundle b/vendor/grammars/ocaml.tmbundle index 903fc455..81589400 160000 --- a/vendor/grammars/ocaml.tmbundle +++ b/vendor/grammars/ocaml.tmbundle @@ -1 +1 @@ -Subproject commit 903fc455163c90d38db77c47ca636392550967f0 +Subproject commit 8158940052861bcf90c28f343dff2c50ab440b3f diff --git a/vendor/grammars/openscad.tmbundle b/vendor/grammars/openscad.tmbundle new file mode 160000 index 00000000..4b2bc0a8 --- /dev/null +++ b/vendor/grammars/openscad.tmbundle @@ -0,0 +1 @@ +Subproject commit 4b2bc0a8e100d8f0350fd74f6c40dd956c118355 diff --git a/vendor/grammars/oracle.tmbundle b/vendor/grammars/oracle.tmbundle new file mode 160000 index 00000000..1da31563 --- /dev/null +++ b/vendor/grammars/oracle.tmbundle @@ -0,0 +1 @@ +Subproject commit 1da315635f75d1af57056c5c13221d4a95264e6f diff --git a/vendor/grammars/perl.tmbundle b/vendor/grammars/perl.tmbundle index 8f62f3c4..dedebdcf 160000 --- a/vendor/grammars/perl.tmbundle +++ b/vendor/grammars/perl.tmbundle @@ -1 +1 @@ -Subproject commit 8f62f3c458cacba3152bfedcc971735a0a5d61b1 +Subproject commit dedebdcfd43e7be93ea713c1932eb770fcbcea0d diff --git a/vendor/grammars/perl6fe b/vendor/grammars/perl6fe new file mode 160000 index 00000000..12fa46f7 --- /dev/null +++ b/vendor/grammars/perl6fe @@ -0,0 +1 @@ +Subproject commit 12fa46f7bbf646616df1120ed8cfee3e1fcb75de diff --git a/vendor/grammars/php-smarty.tmbundle b/vendor/grammars/php-smarty.tmbundle index cbcdb59c..36c058a4 160000 --- a/vendor/grammars/php-smarty.tmbundle +++ b/vendor/grammars/php-smarty.tmbundle @@ -1 +1 @@ -Subproject commit cbcdb59cb3590417d63efd8f30f07ac9eaa8143d +Subproject commit 36c058a467ba137e93a9f2cc691c268ac0b89c52 diff --git a/vendor/grammars/php.tmbundle b/vendor/grammars/php.tmbundle index d24593d7..3ed4837b 160000 --- a/vendor/grammars/php.tmbundle +++ b/vendor/grammars/php.tmbundle @@ -1 +1 @@ -Subproject commit d24593d75c3c5f01b4b0705a9e6db132c0cfd55b +Subproject commit 3ed4837b43d3f650ebb525b068636281942883a0 diff --git a/vendor/grammars/powershell b/vendor/grammars/powershell new file mode 160000 index 00000000..b4ea52c5 --- /dev/null +++ b/vendor/grammars/powershell @@ -0,0 +1 @@ +Subproject commit b4ea52c51c5111fdda1d24103082d9580472c31b diff --git a/vendor/grammars/powershell.tmbundle b/vendor/grammars/powershell.tmbundle deleted file mode 160000 index f8716b43..00000000 --- a/vendor/grammars/powershell.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f8716b432eb0a1a6cbc93ee42451a443db844c0f diff --git a/vendor/grammars/processing.tmbundle b/vendor/grammars/processing.tmbundle index 4070e43b..214b3420 160000 --- a/vendor/grammars/processing.tmbundle +++ b/vendor/grammars/processing.tmbundle @@ -1 +1 @@ -Subproject commit 4070e43b094d49eab0e2f1045bd5ac6ad71e870f +Subproject commit 214b3420f12d65b125e82dc039d580326257f71b diff --git a/vendor/grammars/prolog.tmbundle b/vendor/grammars/prolog.tmbundle deleted file mode 160000 index d955aca3..00000000 --- a/vendor/grammars/prolog.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d955aca38b7aadce76e6815eb09487a370206742 diff --git a/vendor/grammars/r.tmbundle b/vendor/grammars/r.tmbundle index d602893b..44691a07 160000 --- a/vendor/grammars/r.tmbundle +++ b/vendor/grammars/r.tmbundle @@ -1 +1 @@ -Subproject commit d602893b72cb79611363b10efaeed8480a3e96d6 +Subproject commit 44691a07734715b11a130a4af409508f53f83aa1 diff --git a/vendor/grammars/racket-tmbundle b/vendor/grammars/racket-tmbundle deleted file mode 160000 index a6b66624..00000000 --- a/vendor/grammars/racket-tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a6b66624d075745d89c3221bb088c8a1925175da diff --git a/vendor/grammars/restructuredtext.tmbundle b/vendor/grammars/restructuredtext.tmbundle index 43fc7b1f..608d8bcd 160000 --- a/vendor/grammars/restructuredtext.tmbundle +++ b/vendor/grammars/restructuredtext.tmbundle @@ -1 +1 @@ -Subproject commit 43fc7b1ff351d6733f7ce136aafe3091e77b4347 +Subproject commit 608d8bcdea179d4bf3def6244e0d9cf7705f2fea diff --git a/vendor/grammars/ruby-on-rails-tmbundle b/vendor/grammars/ruby-on-rails-tmbundle deleted file mode 160000 index 0981c4c2..00000000 --- a/vendor/grammars/ruby-on-rails-tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0981c4c2edac25b4451b396380d6bf48e0ef8bd0 diff --git a/vendor/grammars/ruby-slim.tmbundle b/vendor/grammars/ruby-slim.tmbundle index 07d55270..741ccd56 160000 --- a/vendor/grammars/ruby-slim.tmbundle +++ b/vendor/grammars/ruby-slim.tmbundle @@ -1 +1 @@ -Subproject commit 07d552705b812e6666014c0061bc511736183a86 +Subproject commit 741ccd5620a73dfb35d0d199ab63ee28f63ed70b diff --git a/vendor/grammars/sas.tmbundle b/vendor/grammars/sas.tmbundle index 0d864a6b..3759a197 160000 --- a/vendor/grammars/sas.tmbundle +++ b/vendor/grammars/sas.tmbundle @@ -1 +1 @@ -Subproject commit 0d864a6bc89ca418e9516249774fc9ab7c792a79 +Subproject commit 3759a19719d3c4c4979087be12adbcaa02a7bca3 diff --git a/vendor/grammars/sass-textmate-bundle b/vendor/grammars/sass-textmate-bundle index 8444f979..95e492c5 160000 --- a/vendor/grammars/sass-textmate-bundle +++ b/vendor/grammars/sass-textmate-bundle @@ -1 +1 @@ -Subproject commit 8444f9796e7610f7f930e9ed7cae3093d5ce7805 +Subproject commit 95e492c5e85454ba005658cdb475710a2e96c63f diff --git a/vendor/grammars/smali-sublime b/vendor/grammars/smali-sublime new file mode 160000 index 00000000..28a43364 --- /dev/null +++ b/vendor/grammars/smali-sublime @@ -0,0 +1 @@ +Subproject commit 28a4336421bff627d76c8dc27b991a4ed53a6747 diff --git a/vendor/grammars/sql.tmbundle b/vendor/grammars/sql.tmbundle index 0e80dd0c..6d4edbc1 160000 --- a/vendor/grammars/sql.tmbundle +++ b/vendor/grammars/sql.tmbundle @@ -1 +1 @@ -Subproject commit 0e80dd0c7d72e539213703f5e70615e6afa62cff +Subproject commit 6d4edbc113d3272f7c097d6b1504624289ee2bc5 diff --git a/vendor/grammars/st2-zonefile b/vendor/grammars/st2-zonefile new file mode 160000 index 00000000..0d943fef --- /dev/null +++ b/vendor/grammars/st2-zonefile @@ -0,0 +1 @@ +Subproject commit 0d943fefb815262804f0ae309b08221f34eda054 diff --git a/vendor/grammars/standard-ml.tmbundle b/vendor/grammars/standard-ml.tmbundle index af5395b6..b52a5ebf 160000 --- a/vendor/grammars/standard-ml.tmbundle +++ b/vendor/grammars/standard-ml.tmbundle @@ -1 +1 @@ -Subproject commit af5395b606273b53e7dd3550270cff7f886d3cc3 +Subproject commit b52a5ebf528f89f19bead3f92b10f772ccda74aa diff --git a/vendor/grammars/sublime-apl b/vendor/grammars/sublime-apl new file mode 160000 index 00000000..a8c36775 --- /dev/null +++ b/vendor/grammars/sublime-apl @@ -0,0 +1 @@ +Subproject commit a8c36775d58c9a80f3b7f572cb4fac5976a6af99 diff --git a/vendor/grammars/sublime-aspectj b/vendor/grammars/sublime-aspectj new file mode 160000 index 00000000..043444fc --- /dev/null +++ b/vendor/grammars/sublime-aspectj @@ -0,0 +1 @@ +Subproject commit 043444fc3f602e4845f4f07395cfa11804df760b diff --git a/vendor/grammars/sublime-better-typescript b/vendor/grammars/sublime-better-typescript deleted file mode 160000 index b956adec..00000000 --- a/vendor/grammars/sublime-better-typescript +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b956adec0a0a48c6e637935bbb87fbe6155d46a8 diff --git a/vendor/grammars/sublime-bsv b/vendor/grammars/sublime-bsv index ca223cdd..6b3ecf1d 160000 --- a/vendor/grammars/sublime-bsv +++ b/vendor/grammars/sublime-bsv @@ -1 +1 @@ -Subproject commit ca223cdd653e454ed7536f50e68c70bc56d30103 +Subproject commit 6b3ecf1d44a2e9a9fc8a6c73268d23f1ade81cd8 diff --git a/vendor/grammars/sublime-cirru b/vendor/grammars/sublime-cirru index 4f34b670..75674a73 160000 --- a/vendor/grammars/sublime-cirru +++ b/vendor/grammars/sublime-cirru @@ -1 +1 @@ -Subproject commit 4f34b67097262785277887151d04f9d67d3deb07 +Subproject commit 75674a73e1fa27277e678f460f5eeeaa843fc423 diff --git a/vendor/grammars/sublime-glsl b/vendor/grammars/sublime-glsl index 31bb50cb..0443b921 160000 --- a/vendor/grammars/sublime-glsl +++ b/vendor/grammars/sublime-glsl @@ -1 +1 @@ -Subproject commit 31bb50cbb3501aa94375cc1ded5cc924cfe92f8a +Subproject commit 0443b921dfd842f4c366e0dd7027225956da6524 diff --git a/vendor/grammars/sublime-golo b/vendor/grammars/sublime-golo new file mode 160000 index 00000000..33259eba --- /dev/null +++ b/vendor/grammars/sublime-golo @@ -0,0 +1 @@ +Subproject commit 33259eba0cd75d73ad833b7c29f6a77aa4af55cc diff --git a/vendor/grammars/sublime-idris b/vendor/grammars/sublime-idris index 5e936d1c..77166c0a 160000 --- a/vendor/grammars/sublime-idris +++ b/vendor/grammars/sublime-idris @@ -1 +1 @@ -Subproject commit 5e936d1c924c0edaead59a82bd9e9c1456eef61b +Subproject commit 77166c0ac40fbb9744b467976efa4969d9a7a65c diff --git a/vendor/grammars/sublime-mask b/vendor/grammars/sublime-mask index 6f12d284..8b2a4b33 160000 --- a/vendor/grammars/sublime-mask +++ b/vendor/grammars/sublime-mask @@ -1 +1 @@ -Subproject commit 6f12d2841d008fb02eee912485cebcad7151d4f0 +Subproject commit 8b2a4b3300ef30f293218521cd2aa94335cad114 diff --git a/vendor/grammars/sublime-netlinx b/vendor/grammars/sublime-netlinx new file mode 160000 index 00000000..a1093189 --- /dev/null +++ b/vendor/grammars/sublime-netlinx @@ -0,0 +1 @@ +Subproject commit a109318915751ff318de4b4d3bfc34ee57cec921 diff --git a/vendor/grammars/sublime-nginx b/vendor/grammars/sublime-nginx index eee371d7..fcf644ec 160000 --- a/vendor/grammars/sublime-nginx +++ b/vendor/grammars/sublime-nginx @@ -1 +1 @@ -Subproject commit eee371d7f4d688c6ccac0322c63506080e873131 +Subproject commit fcf644ecea021ab8a6bc171f415f8df0b005b31e diff --git a/vendor/grammars/sublime-nix b/vendor/grammars/sublime-nix index 412f7e1d..d7a3653d 160000 --- a/vendor/grammars/sublime-nix +++ b/vendor/grammars/sublime-nix @@ -1 +1 @@ -Subproject commit 412f7e1da57bd1be9ce185f27c0f36a95639ca25 +Subproject commit d7a3653d59ded2e3536e5141e6d1d93f604867d4 diff --git a/vendor/grammars/sublime-opal b/vendor/grammars/sublime-opal new file mode 160000 index 00000000..55ae90b9 --- /dev/null +++ b/vendor/grammars/sublime-opal @@ -0,0 +1 @@ +Subproject commit 55ae90b910933889d01c55766424db5b3e10332e diff --git a/vendor/grammars/sublime-pony b/vendor/grammars/sublime-pony new file mode 160000 index 00000000..b5eb8f8e --- /dev/null +++ b/vendor/grammars/sublime-pony @@ -0,0 +1 @@ +Subproject commit b5eb8f8e97e5253de8d81cfa4826cfb5815f2944 diff --git a/vendor/grammars/sublime-rust b/vendor/grammars/sublime-rust index 9609ab44..621e4f61 160000 --- a/vendor/grammars/sublime-rust +++ b/vendor/grammars/sublime-rust @@ -1 +1 @@ -Subproject commit 9609ab4418ed6667e06edea83d7fa157827a2923 +Subproject commit 621e4f6117531d8fe299eb5584a6be766df1822e diff --git a/vendor/grammars/sublime-spintools b/vendor/grammars/sublime-spintools new file mode 160000 index 00000000..56d326a4 --- /dev/null +++ b/vendor/grammars/sublime-spintools @@ -0,0 +1 @@ +Subproject commit 56d326a44ec0be0f301d5fb1d9e1ada9944554bb diff --git a/vendor/grammars/sublime-tea b/vendor/grammars/sublime-tea index b5f1025e..62b508c9 160000 --- a/vendor/grammars/sublime-tea +++ b/vendor/grammars/sublime-tea @@ -1 +1 @@ -Subproject commit b5f1025e074a29d3d1e133fc0e1b59b1adec986c +Subproject commit 62b508c948bd7c500a80a898a8fa05bdc311c9d1 diff --git a/vendor/grammars/sublime-text-ox b/vendor/grammars/sublime-text-ox new file mode 160000 index 00000000..5cbc2c65 --- /dev/null +++ b/vendor/grammars/sublime-text-ox @@ -0,0 +1 @@ +Subproject commit 5cbc2c655b4b771d34b75bbe962964455510644b diff --git a/vendor/grammars/sublime-text-pig-latin b/vendor/grammars/sublime-text-pig-latin new file mode 160000 index 00000000..54ed2918 --- /dev/null +++ b/vendor/grammars/sublime-text-pig-latin @@ -0,0 +1 @@ +Subproject commit 54ed29189f6586f3200c09867e3c8c72bedec34e diff --git a/vendor/grammars/sublime-typescript b/vendor/grammars/sublime-typescript new file mode 160000 index 00000000..26fd717a --- /dev/null +++ b/vendor/grammars/sublime-typescript @@ -0,0 +1 @@ +Subproject commit 26fd717a79d1984e76bbe6d958c5c4bbf0179049 diff --git a/vendor/grammars/sublime-varnish b/vendor/grammars/sublime-varnish new file mode 160000 index 00000000..4915dcb3 --- /dev/null +++ b/vendor/grammars/sublime-varnish @@ -0,0 +1 @@ +Subproject commit 4915dcb3f130b0aedb96badffd963294194f1efe diff --git a/vendor/grammars/sublime_cobol b/vendor/grammars/sublime_cobol index 4be198de..3d2b6dbc 160000 --- a/vendor/grammars/sublime_cobol +++ b/vendor/grammars/sublime_cobol @@ -1 +1 @@ -Subproject commit 4be198de811d856e3f67ea04d7626ce82aff3dcb +Subproject commit 3d2b6dbcd1b27023150ff9d8ab47953706d070b8 diff --git a/vendor/grammars/sublimeprolog b/vendor/grammars/sublimeprolog new file mode 160000 index 00000000..c71d8a1e --- /dev/null +++ b/vendor/grammars/sublimeprolog @@ -0,0 +1 @@ +Subproject commit c71d8a1e0f162165cd93d0e41acb7a8984d0b30f diff --git a/vendor/grammars/sublimetext-cuda-cpp b/vendor/grammars/sublimetext-cuda-cpp index 3ed68f99..e51269fc 160000 --- a/vendor/grammars/sublimetext-cuda-cpp +++ b/vendor/grammars/sublimetext-cuda-cpp @@ -1 +1 @@ -Subproject commit 3ed68f996137ad684d822463bcda1bfd1de00232 +Subproject commit e51269fc22602d3f7aaac0266fc189c4ed4a3901 diff --git a/vendor/grammars/swift.tmbundle b/vendor/grammars/swift.tmbundle index 3c7eac54..32141e91 160000 --- a/vendor/grammars/swift.tmbundle +++ b/vendor/grammars/swift.tmbundle @@ -1 +1 @@ -Subproject commit 3c7eac54457aa8f953fa5263cb34ec4dc9555217 +Subproject commit 32141e91eeffbbd29482d5b1a0131eec4613e73e diff --git a/vendor/grammars/text.tmbundle b/vendor/grammars/text.tmbundle deleted file mode 160000 index c536e814..00000000 --- a/vendor/grammars/text.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c536e81409d1fa1fc24f388f70b0513c3a8bfc59 diff --git a/vendor/grammars/textile.tmbundle b/vendor/grammars/textile.tmbundle deleted file mode 160000 index 6951fec2..00000000 --- a/vendor/grammars/textile.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6951fec27ccefe4245b76fda33987e746b91758a diff --git a/vendor/grammars/textmate.tmbundle b/vendor/grammars/textmate.tmbundle deleted file mode 160000 index 49270318..00000000 --- a/vendor/grammars/textmate.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 49270318d53923faba4fa81d56f121b5618239f0 diff --git a/vendor/grammars/toml.tmbundle b/vendor/grammars/toml.tmbundle index cda2b74d..d261ef63 160000 --- a/vendor/grammars/toml.tmbundle +++ b/vendor/grammars/toml.tmbundle @@ -1 +1 @@ -Subproject commit cda2b74d0d40c841c573eae9c5e9edd7621d8d90 +Subproject commit d261ef630a6025c6ee518762715086bc22209c41 diff --git a/vendor/grammars/turtle.tmbundle b/vendor/grammars/turtle.tmbundle new file mode 160000 index 00000000..0782b476 --- /dev/null +++ b/vendor/grammars/turtle.tmbundle @@ -0,0 +1 @@ +Subproject commit 0782b476573a317917fb9b3bbe7e6a68abefa7a5 diff --git a/vendor/grammars/verilog.tmbundle b/vendor/grammars/verilog.tmbundle index 7627ae50..f55a9859 160000 --- a/vendor/grammars/verilog.tmbundle +++ b/vendor/grammars/verilog.tmbundle @@ -1 +1 @@ -Subproject commit 7627ae507278edd9534c3f905d48736875658bf5 +Subproject commit f55a9859f48bb6189992b86748c127044131a785 diff --git a/vendor/grammars/vue-syntax-highlight b/vendor/grammars/vue-syntax-highlight new file mode 160000 index 00000000..f20c9bab --- /dev/null +++ b/vendor/grammars/vue-syntax-highlight @@ -0,0 +1 @@ +Subproject commit f20c9bab7e71738f421e6edc1aab8839ee05d85a diff --git a/vendor/grammars/xc.tmbundle b/vendor/grammars/xc.tmbundle new file mode 160000 index 00000000..309d1f66 --- /dev/null +++ b/vendor/grammars/xc.tmbundle @@ -0,0 +1 @@ +Subproject commit 309d1f662ca32513d3eed19f44ce4ef1d6f5f611